summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2005-04-01 22:23:54 (UTC)
committer Michael Krelin <hacker@klever.net>2005-04-01 22:23:54 (UTC)
commit8e7ab6661815e333ee9377c2655a03aee89372c2 (patch) (unidiff)
tree9bd424c20665b85a46ba26e38a7504ed7ad7cf68
parentd379841850daab4693d596784b790b13e20e3a03 (diff)
downloadsitecing-8e7ab6661815e333ee9377c2655a03aee89372c2.zip
sitecing-8e7ab6661815e333ee9377c2655a03aee89372c2.tar.gz
sitecing-8e7ab6661815e333ee9377c2655a03aee89372c2.tar.bz2
added a quick reference section
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--htdocs/ancestry/layout.chtml2
-rw-r--r--htdocs/exceptions/runtime.chtml2
-rw-r--r--htdocs/quickref/index.chtml16
-rw-r--r--htdocs/quickref/metasyntax.chtml344
-rw-r--r--htdocs/sources.chtml2
-rw-r--r--htdocs/style.css55
6 files changed, 416 insertions, 5 deletions
diff --git a/htdocs/ancestry/layout.chtml b/htdocs/ancestry/layout.chtml
index 0c167bc..df34ad7 100644
--- a/htdocs/ancestry/layout.chtml
+++ b/htdocs/ancestry/layout.chtml
@@ -11,59 +11,59 @@
11%%var std::string descPrev; 11%%var std::string descPrev;
12%%var std::string titlePrev; 12%%var std::string titlePrev;
13%%var std::string urlNext; 13%%var std::string urlNext;
14%%var std::string descNext; 14%%var std::string descNext;
15%%var std::string titleNext; 15%%var std::string titleNext;
16<%constructor> 16<%constructor>
17 if(strstr(PACKAGE_STRING,"svn")) 17 if(strstr(PACKAGE_STRING,"svn"))
18 b_svn = true; 18 b_svn = true;
19</%constructor> 19</%constructor>
20<%method void prevnext() %> 20<%method void prevnext() %>
21% if(urlPrev.empty() && urlNext.empty()) return; 21% if(urlPrev.empty() && urlNext.empty()) return;
22% if(descPrev.empty() && descNext.empty()) return; 22% if(descPrev.empty() && descNext.empty()) return;
23 <div class="prevnext"> 23 <div class="prevnext">
24% if(!(urlPrev.empty() || descPrev.empty())) { 24% if(!(urlPrev.empty() || descPrev.empty())) {
25 <a class="prevnext-prev" href="<% urlPrev %>" title="<% sitecing::html_escape(titlePrev.empty()?descPrev:titlePrev) %>"><% sitecing::html_escape(descPrev) %></a> 25 <a class="prevnext-prev" href="<% urlPrev %>" title="<% sitecing::html_escape(titlePrev.empty()?descPrev:titlePrev) %>"><% sitecing::html_escape(descPrev) %></a>
26% } 26% }
27% if(!(urlNext.empty() || descNext.empty())) { 27% if(!(urlNext.empty() || descNext.empty())) {
28 <a class="prevnext-next" href="<% urlNext %>" title="<% sitecing::html_escape(titleNext.empty()?descNext:titleNext) %>"><% sitecing::html_escape(descNext) %></a> 28 <a class="prevnext-next" href="<% urlNext %>" title="<% sitecing::html_escape(titleNext.empty()?descNext:titleNext) %>"><% sitecing::html_escape(descNext) %></a>
29% } 29% }
30 </div> 30 </div>
31</%method> 31</%method>
32<%method void body() %> 32<%method void body() %>
33 <div id="content"> 33 <div id="content">
34 <%code> 34 <%code>
35 if(!access(WEB_RUN_ROOT "/conf/banner_top",R_OK)) { 35 if(!access(WEB_RUN_ROOT "/conf/banner_top",R_OK)) {
36 pass_file_through(WEB_RUN_ROOT "/conf/banner_top"); 36 pass_file_through(WEB_RUN_ROOT "/conf/banner_top");
37 } 37 }
38 prevnext(); 38 prevnext();
39 content(); 39 content();
40 if(b_strict && !access(WEB_RUN_ROOT "/conf/banner_bottom",R_OK)) { 40 if(b_strict && !access(WEB_RUN_ROOT "/conf/banner_bottom",R_OK)) {
41 pass_file_through(WEB_RUN_ROOT "/conf/banner_bottom"); 41 pass_file_through(WEB_RUN_ROOT "/conf/banner_bottom");
42 } 42 }
43 </%code> 43 </%code>
44 </div> 44 </div>
45 <div id="sidepanel"> 45 <div id="sidepanel">
46% sidepanel(); 46% sidepanel();
47 </div> 47 </div>
48</%method> 48</%method>
49<%method void content() %> 49<%method void content() %>
50</%method> 50</%method>
51<%method void sidepanel() %> 51<%method void sidepanel() %>
52 <h1><% PACKAGE_STRING %></h1> 52 <h1><% PACKAGE_STRING %></h1>
53% if(b_svn) { 53% if(b_svn) {
54 <h2>The site is running source from the source repository which may differ 54 <h2>The site is running source from the source repository which may differ
55 from the one available for download. You can check it out from the <a 55 from the one available for download. You can check it out from the <a
56 href="http://kin.klever.net/sitecing/repository">source repository</a>.</h2> 56 href="http://kin.klever.net/sitecing/repository">source repository</a>.</h2>
57% } 57% }
58% /* thank MSIE for this awful formatting */ 58% /* thank MSIE for this awful formatting */
59 <ul><li><a href="/" title="introduction to site-C-ing">overview</a><ul><li><a href="/simple" title="building a really simple page">simple page</a></li></ul></li><li><a href="/exceptions/" title="exceptions handling">exceptions</a><ul><li><a href="/exceptions/preprocess" title="preprocessor errors">preprocess</a></li><li><a href="/exceptions/compile" title="compiler errors">compile-time</a></li><li><a href="/exceptions/runtime" title="runtime exceptions">runtime</a></li></ul></li><li><a href="/sources" title="browse this site source files">sources</a></li></ul> 59 <ul><li><a href="/" title="introduction to site-C-ing">overview</a><ul><li><a href="/simple" title="building a really simple page">simple page</a></li></ul></li><li><a href="/exceptions/" title="exceptions handling">exceptions</a><ul><li><a href="/exceptions/preprocess" title="preprocessor errors">preprocess</a></li><li><a href="/exceptions/compile" title="compiler errors">compile-time</a></li><li><a href="/exceptions/runtime" title="runtime exceptions">runtime</a></li></ul></li><li><a href="/quickref/" title="quick reference">reference</a><ul><li><a href="/quickref/metasyntax" title="meta syntax">syntax</a></li></ul></li><li><a href="/sources" title="browse this site source files">sources</a></li></ul>
60 <%code> 60 <%code>
61 if(!access(WEB_RUN_ROOT "/conf/banner_side",R_OK)) { 61 if(!access(WEB_RUN_ROOT "/conf/banner_side",R_OK)) {
62 pass_file_through(WEB_RUN_ROOT "/conf/banner_side"); 62 pass_file_through(WEB_RUN_ROOT "/conf/banner_side");
63 } 63 }
64 </%code> 64 </%code>
65 <ul><li><a href="http://kin.klever.net/sitecing/" title="main site-C-ing page">site-C-ing</a></li><li><a href="http://kin.klever.net/sitecing/sources" title="site-C-ing download page">downloads</a></li></ul> 65 <ul><li><a href="http://kin.klever.net/sitecing/" title="main site-C-ing page">site-C-ing</a></li><li><a href="http://kin.klever.net/sitecing/sources" title="site-C-ing download page">downloads</a></li></ul>
66 <div class="copyright"> 66 <div class="copyright">
67 &copy; <a href="http://www.klever.net/">Klever Group</a> 67 &copy; <a href="http://www.klever.net/">Klever Group</a>
68 </div> 68 </div>
69</%method> 69</%method>
diff --git a/htdocs/exceptions/runtime.chtml b/htdocs/exceptions/runtime.chtml
index 9a72afd..1fcd80f 100644
--- a/htdocs/exceptions/runtime.chtml
+++ b/htdocs/exceptions/runtime.chtml
@@ -1,49 +1,49 @@
1% html(); return; /* vim:set ft=sitecing: */ 1% html(); return; /* vim:set ft=sitecing: */
2%%derive layout = "/ancestry/layout.chtml"; 2%%derive layout = "/ancestry/layout.chtml";
3<%constructor> 3<%constructor>
4 b_strict = false; 4 b_strict = false;
5 PN_PREV("/exceptions/compile","compile-time","compile-time errors"); 5 PN_PREV("/exceptions/compile","compile-time","compile-time errors");
6 PN_NEXT("/sources","sources","source browser"); 6 PN_NEXT("/quickref/","quick reference","quick reference");
7</%constructor> 7</%constructor>
8<%codemethod string title() %> 8<%codemethod string title() %>
9 return "runtime exceptions handling"; 9 return "runtime exceptions handling";
10</%codemethod> 10</%codemethod>
11<%method void content() %> 11<%method void content() %>
12 <h1>site-C-ing runtime exception handling</h1> 12 <h1>site-C-ing runtime exception handling</h1>
13 <p> 13 <p>
14 The component may throw an exception while executing and the 14 The component may throw an exception while executing and the
15 <em>site-C-ing</em> will gladly pass it to the handler component which will 15 <em>site-C-ing</em> will gladly pass it to the handler component which will
16 give the user appropriate output (unless it throws an exception itself, of 16 give the user appropriate output (unless it throws an exception itself, of
17 course). Here you will see an example output provided by the handler bundled 17 course). Here you will see an example output provided by the handler bundled
18 with the <em>site-C-ing</em>. 18 with the <em>site-C-ing</em>.
19 </p> 19 </p>
20 20
21 <p> 21 <p>
22 Suppose you have <a href="/view/htdocs/exceptions/development/runtime.chtml" 22 Suppose you have <a href="/view/htdocs/exceptions/development/runtime.chtml"
23 target="insert" title="the link opens in the frame below">a component</a>, 23 target="insert" title="the link opens in the frame below">a component</a>,
24 which at some point throws an exception. Of course, <em>site-C-ing</em> will 24 which at some point throws an exception. Of course, <em>site-C-ing</em> will
25 catch the exception and pass it to <a 25 catch the exception and pass it to <a
26 href="/view/htdocs/handlers/exception_dev" target="insert" title="the link 26 href="/view/htdocs/handlers/exception_dev" target="insert" title="the link
27 opens in the frame below">the handler</a>, specified in <a 27 opens in the frame below">the handler</a>, specified in <a
28 href="/view/htdocs/exceptions/development/.scrc" target="insert" title="the 28 href="/view/htdocs/exceptions/development/.scrc" target="insert" title="the
29 link opens in the frame below">the configuration file</a>, which will produce 29 link opens in the frame below">the configuration file</a>, which will produce
30 some nice, human-readable <a href="/exceptions/development/runtime" 30 some nice, human-readable <a href="/exceptions/development/runtime"
31 target="insert" title="the link opens in the frame below">output</a>. Well, 31 target="insert" title="the link opens in the frame below">output</a>. Well,
32 you may not wish to give out all this information in the production 32 you may not wish to give out all this information in the production
33 environment, so you just put in your <a 33 environment, so you just put in your <a
34 href="/view/htdocs/exceptions/production/.scrc" target="insert" title="the 34 href="/view/htdocs/exceptions/production/.scrc" target="insert" title="the
35 link opens in the frame below">configuration file</a> some <a 35 link opens in the frame below">configuration file</a> some <a
36 href="/view/htdocs/handlers/exception_prod" target="insert" title="the link 36 href="/view/htdocs/handlers/exception_prod" target="insert" title="the link
37 opens in the frame below">different handler</a>, which just gives user <a 37 opens in the frame below">different handler</a>, which just gives user <a
38 href="/exceptions/production/runtime" target="insert" title="the link opens 38 href="/exceptions/production/runtime" target="insert" title="the link opens
39 in the frame below">a friendly yet lame excuse</a>. 39 in the frame below">a friendly yet lame excuse</a>.
40 </p> 40 </p>
41 41
42 <div class="insert"> 42 <div class="insert">
43 <iframe id="insert" name="insert" src="about:blank" width="95%" height="300"> 43 <iframe id="insert" name="insert" src="about:blank" width="95%" height="300">
44 <p>I wanted to put an &lt;iframe&gt; here, but your browser does not seem to 44 <p>I wanted to put an &lt;iframe&gt; here, but your browser does not seem to
45 support it. That is okay, it still will open links somehow.</p> 45 support it. That is okay, it still will open links somehow.</p>
46 </iframe> 46 </iframe>
47 </div> 47 </div>
48 48
49</%method> 49</%method>
diff --git a/htdocs/quickref/index.chtml b/htdocs/quickref/index.chtml
new file mode 100644
index 0000000..20ef217
--- a/dev/null
+++ b/htdocs/quickref/index.chtml
@@ -0,0 +1,16 @@
1% html(); return; /* vim:set ft=sitecing: */
2%%derive layout = "/ancestry/layout.chtml";
3<%constructor>
4 PN_PREV("/exceptions/runtime","runtime","runtime exceptions");
5 PN_NEXT("/quickref/metasyntax","syntax","meta syntax");
6</%constructor>
7<%codemethod string title() %>
8 return "quick reference";
9</%codemethod>
10<%method void content() %>
11 <h1>site-C-ing quick reference</h1>
12 <p>
13 I am hoping to put together some quick reference documentation here. For now,
14 I am adding the component meta-syntax quick reference.
15 </p>
16</%method>
diff --git a/htdocs/quickref/metasyntax.chtml b/htdocs/quickref/metasyntax.chtml
new file mode 100644
index 0000000..a63f596
--- a/dev/null
+++ b/htdocs/quickref/metasyntax.chtml
@@ -0,0 +1,344 @@
1% html(); return; /* vim:set ft=sitecing: */
2%%derive layout = "/ancestry/layout.chtml";
3<%constructor>
4 PN_PREV("/quickref/","quick reference","quick reference");
5 PN_NEXT("/sources","sources","source browser");
6</%constructor>
7<%codemethod string title() %>
8 return "meta syntax quick reference";
9</%codemethod>
10<%method void content() %>
11 <h1>site-C-ing meta syntax quick reference</h1>
12
13 <h2>Table of Contents</h2>
14
15 <ul class="quickref toc">
16 <li><a href="#qr__line">% ...</a></li>
17 <li><a href="#qr__inline">&lt;% ... %&gt;</a></li>
18 <li><a href="#qr__code">&lt;%code&gt;</a></li>
19 <li><a href="#qr__codemethod">&lt;%codemethod ... &gt;</a></li>
20 <li><a href="#qr__constructor">&lt;%constructor&gt;</a></li>
21 <li><a href="#qr__decl">&lt;%decl&gt;</a></li>
22 <li><a href="#qr___decl">%%decl</a></li>
23 <li><a href="#qr___derive">%%derive</a></li>
24 <li><a href="#qr__destructor">&lt;%destructor&gt;</a></li>
25 <li><a href="#qr__impl">&lt;%impl&gt;</a></li>
26 <li><a href="#qr___impl">%%impl</a></li>
27 <li><a href="#qr__method">&lt;%method ... &gt;</a></li>
28 <li><a href="#qr__output">&lt;%output&gt;</a></li>
29 <li><a href="#qr___pragma">%%pragma</a></li>
30 <li><a href="#qr___var">%%var</a></li>
31 </ul>
32
33 <dl class="metasyntax quickref">
34
35% /* % */
36 <dt>
37 <a id="qr__line" name="qr__line" title="line of code">
38 <code>% <kbd>line of code</kbd></code>
39 </a>
40 </dt>
41 <dd>
42 <p>
43 Break out into the code mode for just one line.
44 </p>
45 <blockquote class="qr_sample">
46 &nbsp;&lt;body&gt;<br/>
47 <em><a href="#qr__line" title="% description">%</a> for(int t=0;t&lt;10;t++) {<br/></em>
48 &nbsp;&nbsp;&nbsp;Here is the way we count.&lt;br/&gt;<br/>
49 &nbsp;&nbsp;&nbsp;Just saying out loud: <a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> t <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a>&lt;br/&gt;<br/>
50 <em><a href="#qr__line" title="% description">%</a> }<br/></em>
51 &nbsp;&lt;/body&gt;
52 </blockquote>
53 </dd>
54
55% /* <% %> */
56 <dt>
57 <a id="qr__inline" name="qr__inline" title="output expression">
58 <code>&lt;% <kbd>expression</kbd> %&gt;</code>
59 </a>
60 </dt>
61 <dd>
62 <p>
63 &lt;&lt; <kbd>expression</kbd> into output stream (think c++).
64 </p>
65 <blockquote class="qr_sample">
66 <a href="#qr__line" title="% description">%</a> for(int t=0;t&lt;10;t++) {<br/>
67 &nbsp;&nbsp;&nbsp;Here is the way we count.&lt;br/&gt;<br/>
68 <em>&nbsp;&nbsp;&nbsp;Just saying out loud: <a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> t <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a>&lt;br/&gt;<br/></em>
69 <a href="#qr__line" title="% description">%</a> }
70 </blockquote>
71 </dd>
72
73% /* %code */
74 <dt>
75 <a id="qr__code" name="qr__code" title="switching to code mode">
76 <code>
77 &lt;%code&gt; <kbd>...</kbd> &lt;/%code&gt;
78 </code>
79 </a>
80 </dt>
81 <dd>
82 Escape from the output mode to code mode. Opposite to <code><a href="#qr__output" title="&lt;%output&gt; description">&lt;%output&gt;</a></code>. Roughly the same as <code><a href="#qr__output" title="&lt;%output&gt; description">&lt;/%output&gt;</a> <kbd>...</kbd> <a href="#qr__output" title="&lt;%output&gt; description">&lt;%output&gt;</a></code> (note the reverse order), but more self-explanatory and applies to more cases.
83 </p>
84 <blockquote class="qr_sample">
85 &lt;body&gt;<br/>
86 <em>&nbsp;<a href="#qr__code" title="&lt;%code&gt; descrption">&lt;%code&gt;</a><br/></em>
87 &nbsp;&nbsp;for(int t=0;t&lt;10;t++) {<br/>
88 &nbsp;&nbsp;&nbsp;<a href="#qr__output" title="&lt;%output&gt; descrption">&lt;%output&gt;</a><br/>
89 &nbsp;&nbsp;&nbsp;&nbsp;Here is the way we count.&lt;br/&gt;<br/>
90 &nbsp;&nbsp;&nbsp;&nbsp;Just saying out loud: <a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> t <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a>&lt;br/&gt;<br/>
91 &nbsp;&nbsp;&nbsp;<a href="#qr__output" title="&lt;%output&gt; descrption">&lt;/%output&gt;</a><br/>
92 <em>&nbsp;<a href="#qr__code" title="&lt;%code&gt; descrption">&lt;/%code&gt;</a><br/></em>
93 &lt;/body&gt;
94 </blockquote>
95 </dd>
96
97% /* %codemethod */
98 <dt>
99 <a id="qr__codemethod" name="qr__codemethod" title="member function definition">
100 <code>
101 &lt;%codemethod <kbd>return_type_t</kbd> <kbd>member_name</kbd>(<kbd>args,...</kbd>) %&gt;<br/>
102 &nbsp;<kbd>code</kbd><br/>
103 &lt;/%codemethod&gt;
104 </code>
105 </a>
106 </dt>
107 <dd>
108 <p>
109 Define the member function. Essentially equivalent to <code><a href="#qr__method" title="&lt;%method ... %&gt; description" class="internal">&lt;%method</a> <kbd>...</kbd> <a href="#qr__method" title="&lt;%method ... %&gt; description" class="internal">%&gt;</a><a href="#qr__code" title="&lt;%code&gt; description" class="internal">&lt;%code&gt;</a> <kbd>...</kbd> <a href="#qr__code" title="&lt;%code&gt; description" class="internal">&lt;/%code&gt;</a><a href="#qr__method" title="&lt;%method ... %&gt; description" class="internal">&lt;/%method&gt;</a></code>.
110 </p>
111 <blockquote class="qr_sample">
112 <em><a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description">&lt;%codemethod</a> std::string ua() <a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description">%&gt;</a><br/>
113 &nbsp;return __CGI-&gt;get_meta("USER_AGENT");<br/>
114 <a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description">&lt;/%codemethod&gt;</a><br/></em>
115 The user agent is: <a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> ua() <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a><br/>
116 </blockquote>
117 </dd>
118
119% /* %constructor */
120 <dt>
121 <a id="qr__constructor" name="qr__constructor" title="constructor code">
122 <code>
123 &lt;%constructor&gt;<br/>
124 &nbsp;<kbd>code</kbd><br/>
125 &lt;/%constructor&gt;
126 </code>
127 </a>
128 </dt>
129 <dd>
130 <p>
131 Provide the code for constructor.
132 </p>
133 <blockquote class="qr_sample">
134 <a href="#qr___var" title="%%var description">%%var</a> bool is_msie;<br/>
135 <em><a href="#qr__constructor" title="&lt;%constructor&gt; description">&lt;%constructor&gt;</a><br/>
136 &nbsp;is_msie = (__CGI-&gt;get_meta("USER_AGENT").find("MSIE")!=string::npos);<br/>
137 <a href="#qr__constructor" title="&lt;%constructor&gt; description">&lt;/%constructor&gt;</a><br/></em>
138 </blockquote>
139 </dd>
140
141% /* %decl / %%decl */
142 <dt>
143 <a id="qr___decl" name="qr___decl" title="verbatim declaration">
144 <code>%%decl <kbd>line of code</kbd></code>
145 </a>
146 </dt>
147 <dt>
148 <a id="qr__decl" name="qr__decl" title="verbatim declaration">
149 <code>
150 &lt;%decl&gt;<br/>
151 &nbsp;<kbd>lines of code</kbd><br/>
152 &lt;/%decl&gt;
153 </code>
154 </a>
155 </dt>
156 <dd>
157 <p>
158 Put the line(s) of code into the resulting <em>.h</em> file before the
159 class declaration.
160 </p>
161 <blockquote class="qr_sample">
162 <em><a href="#qr___decl" title="%%decl description">%%decl</a> #include &lt;string&gt;<br/></em>
163 <a href="#qr___var" title="%%var description">%%var</a> std::string str = "default"<br/>
164 <em><a href="#qr__decl" title="&lt;%decl&gt; description">&lt;%decl&gt;</a><br/>
165 &nbsp;typedef int integer_t;<br/>
166 <a href="#qr__decl" title="&lt;%decl&gt; description">&lt;/%decl&gt;</a><br/></em>
167 <a href="#qr__method" title="&lt;%method ... %&gt; description">&lt;%method</a> void do_nothing(integer_t input) <a href="#qr__method" title="&lt;%method ... %&gt; description">%&gt;</a><br/>
168 &nbsp;nothing is done<br/>
169 <a href="#qr__method" title="&lt;%method ... %&gt; description">&lt;/%method&gt;</a>
170 </blockquote>
171 </dd>
172
173% /* %%derive */
174 <dt>
175 <a id="qr___derive" name="qr___derive" title="base class(es) specification">
176 <code>%%derive <kbd>name</kbd> = "<kbd>base-component</kbd>";</code>
177 </a>
178 </dt>
179 <dd>
180 <p>
181 Inherit what is there to be inherited from the base component specified.
182 </p>
183 <blockquote class="qr_sample">
184 <em><a href="#qr___derive" title="%%derive description">%%derive</a> pagelayout = "/ancestry/page_layout.chtml";<br/></em>
185 <a href="#qr__line" title="% description">%</a> pagelayout::member_function();
186 </blockquote>
187 </dd>
188
189% /* %destructor */
190 <dt>
191 <a id="qr__destructor" name="qr__destructor" title="destructor code">
192 <code>
193 &lt;%destructor&gt;<br/>
194 &nbsp;<kbd>code</kbd><br/>
195 &lt;/%destructor&gt;
196 </code>
197 </a>
198 </dt>
199 <dd>
200 <p>
201 Provide the code for destructor.
202 </p>
203 <blockquote class="qr_sample">
204 <a href="#qr___var" title="%%var description">%%var</a> type_t *tmp = 0;<br/>
205 <a href="#qr__constructor" title="&lt;%constructor&gt; description">&lt;%constructor&gt;</a><br/>
206 &nbsp;tmp = new type_t(type_t::option_1);<br/>
207 <a href="#qr__constructor" title="&lt;%constructor&gt; description">&lt;/%constructor&gt;</a><br/>
208 <em><a href="#qr__destructor" title="&lt;%destructor&gt; description">&lt;%destructor&gt;</a><br/>
209 &nbsp;delete tmp;<br/>
210 <a href="#qr__destructor" title="&lt;%destructor&gt; description">&lt;/%destructor&gt;</a><br/></em>
211 </blockquote>
212 </dd>
213
214% /* %impl / %%impl */
215 <dt>
216 <a id="qr___impl" name="qr__impl" title="verbatim definition">
217 <code>%%impl <kbd>line of code</kbd></code>
218 </a>
219 </dt>
220 <dt>
221 <a id="qr__impl" name="qr__impl" title="verbatim definition">
222 <code>
223 &lt;%impl&gt;<br/>
224 &nbsp;<kbd>lines of code</kbd><br/>
225 &lt;/%impl&gt;
226 </code>
227 </a>
228 </dt>
229 <dd>
230 <p>
231 Put the line(s) of code into the resulting <em>.cc</em> implementation file
232 before any members definitions.
233 </p>
234 <blockquote class="qr_sample">
235 <em><a href"#qr___impl" title="%%impl description">%%impl</a> #include &lt;string.h&gt;<br/></em>
236 <a href="#qr__method" title="&lt;%method ... %gt; description">&lt;%method</a> void output_if_contains(const char *haystack,const char *needle) <a href="#qr__method" title="&lt;%method ... %gt; description">%&gt;</a><br/>
237 <a href="#qr__line" title="% description">%</a> if(strstr(haystack,needle)) {<br/>
238 &nbsp;&nbsp;&nbsp;<a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> haystack <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a><br/>
239 <a href="#qr__line" title="% description">%</a> }<br/>
240 <a href="#qr__method" title="&lt;%method ... %&gt; description">&lt;/%method&gt;</a><br/>
241 <em><a href="#qr__impl" title="&lt;%impl&gt; description">&lt;%impl&gt;</a><br/>
242 &nbsp;#include &lt;konforka/exception.h&gt;
243 &nbsp;static const char *tokens[] = {<br/>
244 &nbsp;&nbsp;"token 1", "token 2", "token 3"<br/>
245 &nbsp;};<br/>
246 <a href="#qr__impl" title="&lt;%impl&gt; description">&lt;/%impl&gt;</a><br/></em>
247 <a href="#qr__method" title="&lt;%method ... %gt; description">&lt;%method</a> void output_token(int toknum) <a href="#qr__method" title="&lt;%method ... %gt; description">%&gt;</a><br/>
248 &nbsp;<a href="#qr__code" title="&lt;%code&gt; description">&lt;%code&gt;</a><br/>
249 &nbsp;&nbsp;if(toknum&lt;0 || toknum&gt;=(sizeof(tokens)/sizeof(*tokens)))<br/>
250 &nbsp;&nbsp;&nbsp;throw konforka::exception(CODEPOINT,"out of bounds");<br/>
251 &nbsp;<a href="#qr__code" title="&lt;%code&gt; description">&lt;/%code&gt;</a><br/>
252 &nbsp;<a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> tokens[toknum] <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a><br/>
253 <a href="#qr__method" title="&lt;%method ... %&gt; description">&lt;/%method&gt;</a><br/>
254 </blockquote>
255 </dd>
256
257% /* %method */
258 <dt>
259 <a id="qr__method" name="qr__method" title="member function definition">
260 <code>
261 &lt;%method <kbd>return_type_t</kbd> <kbd>member_name</kbd>(<kbd>args,...</kbd>) %&gt;<br/>
262 &nbsp;<kbd>code</kbd><br/>
263 &lt;/%method&gt;
264 </code>
265 </a>
266 </dt>
267 <dd>
268 <p>
269 Define the member function. Essentially equivalent to <code><a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description" class="internal">&lt;%codemethod</a> <kbd>...</kbd> <a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description" class="internal">%&gt;</a><a href="#qr__output" title="&lt;%output&gt; description" class="internal">&lt;%output&gt;</a> <kbd>...</kbd> <a href="#qr__output" title="&lt;%output&gt; description" class="internal">&lt;/%output&gt;</a><a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description" class="internal">&lt;/%codemethod&gt;</a></code>.
270 </p>
271 <blockquote class="qr_sample">
272 <em><a href="#qr__method" title="&lt;%method ... %&gt; description">&lt;%method</a> void emphasized(const char *t) <a href="#qr__method" title="&lt;%method ... %&gt; description">%&gt;</a><br/>
273 &nbsp;&lt;em&gt;<a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> t <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a>&lt;/em&gt;<br/>
274 <a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description">&lt;/%method&gt;</a><br/></em>
275 <a href="#qr__line" title="% description">%</a> emphasized("emphasized text");
276 </blockquote>
277 </dd>
278
279% /* %output */
280 <dt>
281 <a id="qr__output" name="qr__output" title="switching to output mode">
282 <code>
283 &lt;%output&gt; <kbd>...</kbd> &lt;/%output&gt;
284 </code>
285 </a>
286 </dt>
287 <dd>
288 <p>
289 Escape from the code mode to output mode. Opposite to <code><a href="#qr__code" title="&lt;%code&gt; description">&lt;%code&gt;</a></code>. Roughly the same as <code><a href="#qr__code" title="&lt;%code&gt; description">&lt;/%code&gt;</a> <kbd>...</kbd> <a href="#qr__code" title="&lt;%code&gt; description">&lt;%code&gt;</a></code> (note the reverse order), but more self-explanatory and applies to more cases.
290 </p>
291 <blockquote class="qr_sample">
292 <a href="#qr__codemethod" title="&lt;%codemethod ... %&gt; description">&lt;%codemethod</a> void count() <a href="#qr__codemethod" title="&lt;%codemethod ... &gt; description">%&gt;</a><br/>
293 &nbsp;for(int t=0;t&lt;10;t++) {<br/>
294 <em>&nbsp;&nbsp;<a href="#qr__output" title="&lt;%output&gt; descrption">&lt;%output&gt;</a><br/>
295 &nbsp;&nbsp;&nbsp;Here is the way we count.&lt;br/&gt;<br/>
296 &nbsp;&nbsp;&nbsp;Just saying out loud: <a href="#qr__inline" title="&lt;% ... %&gt; description">&lt;%</a> t <a href="#qr__inline" title="&lt;% ... %&gt; description">%&gt;</a>&lt;br/&gt;<br/>
297 &nbsp;&nbsp;<a href="#qr__output" title="&lt;%output&gt; descrption">&lt;/%output&gt;</a><br/></em>
298 <a href="#qr__codemethod" title="&lt;/%codemethod ... %&gt; description">&lt;/%codemethod&gt;</a><br/>
299 <a href="#qr__line" title="% description">%</a> count();
300 </blockquote>
301 </dd>
302
303% /* %%pragma */
304 <dt>
305 <a id="qr___pragma" name="qr___pragma" title="pragma">
306 <code>
307 %%pragma <kbd>pragma_name</kbd><br/>
308 %%pragma <kbd>pragma_name</kbd>=<kbd>pragma_value</kbd>
309 </code>
310 </a>
311 </dt>
312 <dd>
313 <p>provide pseudo instructions to the preprocessor. At this time only pragma
314 named <code>main</code> is defined, which instructs preprocessor to discard
315 the 'main' member that would be generated for the component and call the
316 <code>main</code> member of the named base class.</p>
317 <blockquote class="qr_sample">
318 <a href="#qr___derive" title="%%derive description">%%derive</a> pagelayout = "/ancestry/page_layout.chtml";<br/>
319 <em><a href="#qr___pragma" title="%%pragma description">%%pragma</a> main=pagelayout</em>
320 </blockquote>
321 </dd>
322
323% /* %%var */
324 <dt>
325 <a id="qr___var" name="qr___var" title="member variable declaration">
326 <code>%%var <kbd>type_t</kbd> <kbd>varname</kbd>;<br/>
327 <code>%%var <kbd>type_t</kbd> <kbd>varname</kbd> = <kbd>initalizer</kbd>;<br/>
328 </a>
329 </dt>
330 <dd>
331 <p>
332 Define the member variable with optional default value (suitable for
333 putting into the <code>: <kbd>varname</kbd>(<kbd>initializer</kbd>)</code>
334 part of the c++ constructor.
335 </p>
336 <blockquote class="qr_sample">
337 <em><a href="#qr___var" title="%%var description">%%var</a> std::string strval = "default value";<br/>
338 <a href="#qr___var" title="%%var description">%%var</a> int usecount = 0;<br/>
339 <a href="#qr___var" title="%%var description">%%var</a> int whatnot;</em>
340 </blockquote>
341 </dd>
342
343 </dl>
344</%method>
diff --git a/htdocs/sources.chtml b/htdocs/sources.chtml
index 6341f49..8c0c701 100644
--- a/htdocs/sources.chtml
+++ b/htdocs/sources.chtml
@@ -1,48 +1,48 @@
1% html(); return; /* vim:set ft=sitecing: */ 1% html(); return; /* vim:set ft=sitecing: */
2%%derive layout = "/ancestry/layout.chtml"; 2%%derive layout = "/ancestry/layout.chtml";
3%%derive sources = "/ancestry/sources.chtml"; 3%%derive sources = "/ancestry/sources.chtml";
4<%impl> 4<%impl>
5 #include <sitecing/sitecing_util.h> 5 #include <sitecing/sitecing_util.h>
6</%impl> 6</%impl>
7<%constructor> 7<%constructor>
8 b_strict = false; 8 b_strict = false;
9 PN_PREV("/exceptions/runtime","runtime","runtime exceptions"); 9 PN_PREV("/quickref/metasyntax","syntax","meta syntax");
10</%constructor> 10</%constructor>
11<%codemethod string title() %> 11<%codemethod string title() %>
12 return "runtime exceptions handling"; 12 return "runtime exceptions handling";
13</%codemethod> 13</%codemethod>
14<%method void content() %> 14<%method void content() %>
15 <h1>browse this site sources</h1> 15 <h1>browse this site sources</h1>
16 16
17 <ul class="sourcebrowser"> 17 <ul class="sourcebrowser">
18% for(int n=0;n<source_files_count;n++) { 18% for(int n=0;n<source_files_count;n++) {
19% sourcefile_t& sf = source_files[n]; 19% sourcefile_t& sf = source_files[n];
20% if(!sf.name) { /* the beginning or the end of the directory */ 20% if(!sf.name) { /* the beginning or the end of the directory */
21% if(sf.dir) { /* the beginning */ 21% if(sf.dir) { /* the beginning */
22 <li class="dir"><% sf.dir %>/<ul class="dir"> 22 <li class="dir"><% sf.dir %>/<ul class="dir">
23% }else{ /* the end */ 23% }else{ /* the end */
24 </ul></li> 24 </ul></li>
25% } 25% }
26% }else{ 26% }else{
27 <li class="file"><a href="/view/<% sf.dir %>/<% sf.name %>" title="<% sf.desc %>" target="insert"><% sf.name %></a></li> 27 <li class="file"><a href="/view/<% sf.dir %>/<% sf.name %>" title="<% sf.desc %>" target="insert"><% sf.name %></a></li>
28% } 28% }
29% } 29% }
30 </ul> 30 </ul>
31 31
32 <%code> 32 <%code>
33 string rfile = sitecing::normalize_path( 33 string rfile = sitecing::normalize_path(
34 sitecing::strip_prefix(__CGI->get_meta("PATH_INFO"),"/sources.chtml"), 34 sitecing::strip_prefix(__CGI->get_meta("PATH_INFO"),"/sources.chtml"),
35 sitecing::restrict_dotdot|sitecing::strip_leading_slash ); 35 sitecing::restrict_dotdot|sitecing::strip_leading_slash );
36 if(rfile.empty()) 36 if(rfile.empty())
37 rfile = "about:blank"; 37 rfile = "about:blank";
38 else 38 else
39 rfile = "/view/"+rfile; 39 rfile = "/view/"+rfile;
40 </%code> 40 </%code>
41 <div class="insert"> 41 <div class="insert">
42 <iframe id="insert" name="insert" src="<% rfile %>" width="95%" height="300"> 42 <iframe id="insert" name="insert" src="<% rfile %>" width="95%" height="300">
43 <p>I wanted to put an &lt;iframe&gt; here, but your browser does not seem to 43 <p>I wanted to put an &lt;iframe&gt; here, but your browser does not seem to
44 support it. That is okay, it still will open links somehow.</p> 44 support it. That is okay, it still will open links somehow.</p>
45 </iframe> 45 </iframe>
46 </div> 46 </div>
47 47
48</%method> 48</%method>
diff --git a/htdocs/style.css b/htdocs/style.css
index 83e308f..96e4c59 100644
--- a/htdocs/style.css
+++ b/htdocs/style.css
@@ -1,205 +1,256 @@
1body { 1body {
2 font-family: sans-serif; 2 font-family: sans-serif;
3 font-size: 11pt; 3 font-size: 11pt;
4} 4}
5 5
6a { 6a:link, a:visited {
7 text-decoration: none; 7 text-decoration: none;
8} 8}
9a:hover { 9a:link:hover, a:visited:hover {
10 text-decoration: underline; 10 text-decoration: underline;
11} 11}
12p { 12p {
13 margin: 1ex 1em; 13 margin: 1ex 1em;
14 text-indent: 2em; 14 text-indent: 2em;
15 text-align: justify; 15 text-align: justify;
16} 16}
17p.note { 17p.note {
18 margin-left: 10%; 18 margin-left: 10%;
19 border-width: 1px 1px 1px 6px; 19 border-width: 1px 1px 1px 6px;
20 border-color: gray gray gray #0000a0; 20 border-color: gray gray gray #0000a0;
21 border-style: solid solid solid double; 21 border-style: solid solid solid double;
22 padding: 1ex 1ex 1ex 2em; 22 padding: 1ex 1ex 1ex 2em;
23 font-size: 80%; 23 font-size: 80%;
24 background: #c0c0e0; 24 background: #c0c0e0;
25 color: #202020; 25 color: #202020;
26} 26}
27code a,
27code { 28code {
28 color: #d04040; 29 color: #d04040;
29} 30}
30em { 31em {
31 white-space: nowrap; 32 white-space: nowrap;
32} 33}
33 34
34div.google_ad { 35div.google_ad {
35 text-align: center; 36 text-align: center;
36 margin: 1ex; 37 margin: 1ex;
37} 38}
38div.google_ad.top { 39div.google_ad.top {
39 padding-bottom: 1ex; 40 padding-bottom: 1ex;
40 border-bottom: 1px gray solid; 41 border-bottom: 1px gray solid;
41} 42}
42div.google_ad.bottom { 43div.google_ad.bottom {
43 padding-top: 1ex; 44 padding-top: 1ex;
44 border-top: 1px gray solid; 45 border-top: 1px gray solid;
45} 46}
46 47
47div#sidepanel { 48div#sidepanel {
48 position: absolute; top: 0px; left: 0px; 49 position: absolute; top: 0px; left: 0px;
49 margin: 0px; 50 margin: 0px;
50 width: 20%; 51 width: 20%;
51 font-size: 80%; 52 font-size: 80%;
52} 53}
53div#content { 54div#content {
54 position: absolute; top: 0px; right: -0px; 55 position: absolute; top: 0px; right: -0px;
55 margin: 0px; 56 margin: 0px;
56 width: 80%; 57 width: 80%;
57} 58}
58 59
59div#sidepanel h1 { 60div#sidepanel h1 {
60 font-size: 80%; 61 font-size: 80%;
61 text-align: center; 62 text-align: center;
62 font-weight: normal; 63 font-weight: normal;
63 color: #004080; 64 color: #004080;
64 white-space: nowrap; 65 white-space: nowrap;
65 margin-top: 2ex; margin-bottom: 2ex; 66 margin-top: 2ex; margin-bottom: 2ex;
66} 67}
67div#sidepanel h2 { 68div#sidepanel h2 {
68 font-size: 80%; 69 font-size: 80%;
69 text-align: justify; 70 text-align: justify;
70 font-weight: normal; 71 font-weight: normal;
71 color: gray; 72 color: gray;
72 margin: 1ex 1ex; 73 margin: 1ex 1ex;
73} 74}
74div#sidepanel ul { 75div#sidepanel ul {
75 padding: 1ex 0.5ex 1ex 1ex; 76 padding: 1ex 0.5ex 1ex 1ex;
76 margin: 0.5ex; 77 margin: 0.5ex;
77 border-color: #c0c0c0 #404040 #404040 #c0c0c0; 78 border-color: #c0c0c0 #404040 #404040 #c0c0c0;
78 border-width: 1px 2px 2px 1px; 79 border-width: 1px 2px 2px 1px;
79 border-style: solid; 80 border-style: solid;
80 background: #d0d0d0; 81 background: #d0d0d0;
81 list-style-type: none; 82 list-style-type: none;
82} 83}
83div#sidepanel ul ul { 84div#sidepanel ul ul {
84 margin: 0px; padding: 0px; 85 margin: 0px; padding: 0px;
85 border: none 0px; 86 border: none 0px;
86} 87}
87div#sidepanel li { 88div#sidepanel li {
88 list-style-type: none; 89 list-style-type: none;
89 margin: 0px; padding: 0px; 90 margin: 0px; padding: 0px;
90 display: block; 91 display: block;
91} 92}
92div#sidepanel ul a { 93div#sidepanel ul a {
93 display: block; 94 display: block;
94 padding: 1px 1ex; 95 padding: 1px 1ex;
95 margin: 0.5ex; 96 margin: 0.5ex;
96 border: 1px solid gray; 97 border: 1px solid gray;
97 text-decoration: none; 98 text-decoration: none;
98 background: white; 99 background: white;
99 color: black; 100 color: black;
100} 101}
101div#sidepanel ul a:hover { 102div#sidepanel ul a:hover {
102 background: gray; 103 background: gray;
103 color: white; 104 color: white;
104} 105}
105div#sidepanel ul ul a { 106div#sidepanel ul ul a {
106 padding-left: 2.5ex; 107 padding-left: 2.5ex;
107 background: #e0e0e0; 108 background: #e0e0e0;
108} 109}
109div#sidepanel div.copyright { 110div#sidepanel div.copyright {
110 text-align: center; 111 text-align: center;
111} 112}
112 113
113div#content h1 { 114div#content h1 {
114 font-size: 140%; 115 font-size: 140%;
115 color: gray; 116 color: gray;
116 font-weight: bold; 117 font-weight: bold;
117 text-align: center; 118 text-align: center;
118 margin: 1em; 119 margin: 1em;
119 clear: both; 120 clear: both;
120} 121}
122div#content h2 {
123 font-size: 140%;
124 color: #8080a0;
125 font-weight: bold;
126 text-align: center;
127 margin: 1em;
128 clear: both;
129}
121div#content p a { 130div#content p a {
122 font-weight: bold; 131 font-weight: bold;
123} 132}
133div#content p a.internal {
134 font-weight: inherit !important;
135}
124 136
125div.insert { 137div.insert {
126 text-align: center; 138 text-align: center;
127} 139}
128iframe#insert { 140iframe#insert {
129 border: 1px solid black; 141 border: 1px solid black;
130} 142}
131 143
132div.source h1 { 144div.source h1 {
133 background: #e0e0e0; 145 background: #e0e0e0;
134 border: 1px solid #808080; 146 border: 1px solid #808080;
135 padding-left: 1em; 147 padding-left: 1em;
136 margin: 0px; 148 margin: 0px;
137 font-size: 100%; 149 font-size: 100%;
138 color: #000060; 150 color: #000060;
139 overflow: hidden; 151 overflow: hidden;
140} 152}
141div.source ul { 153div.source ul {
142 background: #80c0c0; 154 background: #80c0c0;
143 margin: 0px; 155 margin: 0px;
144 padding: 1px 0px; 156 padding: 1px 0px;
145 font-family: monospace; 157 font-family: monospace;
146 font-size: 80%; 158 font-size: 80%;
147 overflow: hidden; 159 overflow: hidden;
148 width:100%; 160 width:100%;
149} 161}
150div.source li { 162div.source li {
151 list-style-type: none; 163 list-style-type: none;
152 white-space: nowrap; 164 white-space: nowrap;
153 margin: 0px 0.5ex; 165 margin: 0px 0.5ex;
154} 166}
155 167
156ul.sourcebrowser { 168ul.sourcebrowser {
157 font-size: 70%; 169 font-size: 70%;
158} 170}
159ul.sourcebrowser ul.dir { 171ul.sourcebrowser ul.dir {
160 padding: 1px 0px 2px 1em; 172 padding: 1px 0px 2px 1em;
161 margin: 1px 0px 1px 0px; 173 margin: 1px 0px 1px 0px;
162} 174}
163ul.sourcebrowser li.dir { 175ul.sourcebrowser li.dir {
164 margin: 1px 0px 1px 0px; 176 margin: 1px 0px 1px 0px;
165} 177}
166ul.sourcebrowser li.file { 178ul.sourcebrowser li.file {
167 list-style-type: none; 179 list-style-type: none;
168 white-space: nowrap; 180 white-space: nowrap;
169 display: inline; 181 display: inline;
170} 182}
171ul.sourcebrowser li.file a { 183ul.sourcebrowser li.file a {
172 border: 1px solid gray; 184 border: 1px solid gray;
173 padding: 1px 0.5ex; 185 padding: 1px 0.5ex;
174 text-decoration: none; 186 text-decoration: none;
175 font-family: monospace; 187 font-family: monospace;
176} 188}
177ul.sourcebrowser li.file a:hover { 189ul.sourcebrowser li.file a:hover {
178 background: gray; 190 background: gray;
179 border: 1px solid black; 191 border: 1px solid black;
180 color: white; 192 color: white;
181} 193}
182 194
183div.prevnext { 195div.prevnext {
184 margin: 1ex; 196 margin: 1ex;
185} 197}
186div.prevnext a { 198div.prevnext a {
187 margin: 0.5ex 1em; padding: 0.2ex 0.5ex; 199 margin: 0.5ex 1em; padding: 0.2ex 0.5ex;
188 display: block; width: 30%; 200 display: block; width: 30%;
189 border: solid 1px gray; 201 border: solid 1px gray;
190 color: black; 202 color: black;
191 text-decoration: none; 203 text-decoration: none;
192} 204}
193div.prevnext a.prevnext-prev { 205div.prevnext a.prevnext-prev {
194 float: left; 206 float: left;
195 text-align: left; 207 text-align: left;
196} 208}
197div.prevnext a.prevnext-next { 209div.prevnext a.prevnext-next {
198 float: right; 210 float: right;
199 text-align: right; 211 text-align: right;
200} 212}
201div.prevnext a:hover { 213div.prevnext a:hover {
202 background: gray; 214 background: gray;
203 border: black 1px solid; 215 border: black 1px solid;
204 color: white; 216 color: white;
205} 217}
218
219ul.quickref.toc {
220 margin: 1em 20%;
221 font-size: 90%;
222 border: solid 1px gray;
223}
224
225dl.quickref {
226 margin: 1ex 1em;
227}
228dl.quickref dt {
229 margin: 0.4ex;
230 padding: 2px 0.5ex;
231 background: #e0e0e0;
232 display: compact;
233}
234dl.quickref dd {
235 margin: 0px 0.4ex 0.4ex 10%;
236 padding: 0px;
237 border: 1px solid grey;
238}
239dl.quickref code kbd {
240 font-style: italic;
241 color: #0000c0;
242}
243dl.quickref blockquote {
244 background: #ffffc0;
245 padding: 4px;
246 border: dotted 1px gray;
247 font-family: monospace;
248}
249dl.quickref blockquote em {
250 display: block;
251 font-family: inherit !important;
252 font-size: inherit !important;
253 font-weight: inherit !important;
254 font-style: inherit !important;
255 background: #ffc0c0;
256}