Fixes recursion bug in disambiguate_in().
[ohcount] / doc / html / parser__macros_8h.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3 <title>ohcount: /Users/andy/dev/ohcount/src/parser_macros.h File Reference</title>
4 <link href="tabs.css" rel="stylesheet" type="text/css">
5 <link href="doxygen.css" rel="stylesheet" type="text/css">
6 </head><body>
7 <!-- Generated by Doxygen 1.5.9 -->
8 <div class="navigation" id="top">
9   <div class="tabs">
10     <ul>
11       <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
12       <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
13       <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
14       <li class="current"><a href="files.html"><span>Files</span></a></li>
15     </ul>
16   </div>
17   <div class="tabs">
18     <ul>
19       <li><a href="files.html"><span>File&nbsp;List</span></a></li>
20       <li><a href="globals.html"><span>Globals</span></a></li>
21     </ul>
22   </div>
23 </div>
24 <div class="contents">
25 <h1>/Users/andy/dev/ohcount/src/parser_macros.h File Reference</h1><code>#include &lt;stdio.h&gt;</code><br>
26 <code>#include &lt;stdlib.h&gt;</code><br>
27 <code>#include &quot;<a class="el" href="languages_8h_source.html">languages.h</a>&quot;</code><br>
28
29 <p>
30 <a href="parser__macros_8h_source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
31 <tr><td></td></tr>
32 <tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
33 <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCallbackItem.html">CallbackItem</a></td></tr>
34
35 <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Holds a series of callbacks for in a queue (linked list).  <a href="structCallbackItem.html#_details">More...</a><br></td></tr>
36 <tr><td colspan="2"><br><h2>Defines</h2></td></tr>
37 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#6da05469a748b57f676bbf67a842b25e">dequeue</a></td></tr>
38
39 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#a4df6978a0e35c95ca051f1da0dd7e86">ls</a></td></tr>
40
41 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#814f6dab3b0678113d97a3684282934a">code</a></td></tr>
42
43 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#43be22b7a1b528eaf759e034ec581543">comment</a></td></tr>
44
45 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#e9fb722b81bbd8bb0e1de37941fab172">saw</a>(lang)</td></tr>
46
47 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#b08c3ed468f4ad3e1a9d391c1a4337d0">std_internal_newline</a>(lang)</td></tr>
48
49 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#2822d59197758531b6f4a0cc13d0257b">emb_internal_newline</a>(lang)</td></tr>
50
51 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#aaf8abebfd56b683567c15bfa3f063f1">std_newline</a>(lang)</td></tr>
52
53 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#b5304b201ce6824e3c021e245d6a5e94">emb_newline</a>(lang)</td></tr>
54
55 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#1adf47f60e418da0f0c3caa471728021">process_last_line</a>(lang)</td></tr>
56
57 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#dcdd4261cb35490ebe8f88afd0b4787c">check_blank_entry</a>(lang)</td></tr>
58
59 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#806511f4930171733227c99101dc0606">NEWLINE</a>&nbsp;&nbsp;&nbsp;-1</td></tr>
60
61 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#7e82c89c9a3dc533077791088d1ee77b">INTERNAL_NL</a>&nbsp;&nbsp;&nbsp;-2</td></tr>
62
63 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#a48fd5c8dbc18cdf9daaa5810227f829">CHECK_BLANK_ENTRY</a>&nbsp;&nbsp;&nbsp;-3</td></tr>
64
65 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(c)&nbsp;&nbsp;&nbsp;((int) (c - <a class="el" href="parser__macros_8h.html#f127db1c17ed58547ff5125a912d02b9">buffer_start</a>))</td></tr>
66
67 <tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#c1af3f499e72dfc161f2fce616dfd8e7">init</a></td></tr>
68
69 <tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
70 <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct <a class="el" href="structCallbackItem.html">CallbackItem</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#c27bb77f57039cab3883b9e21e6c48f4">Callback</a></td></tr>
71
72 <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
73 <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#cef933f90a0bd6318613e93f39067ac8">enqueue</a> (const char *lang, const char *<a class="el" href="parser__macros_8h.html#d4e4601988acb4a95ecd1ec380359ae5">entity</a>, int s, int e, void *udata)</td></tr>
74
75 <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#666ec961128241e997f03af3ae16a2ea">free_queue</a> ()</td></tr>
76
77 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#33c0ec8adc93c385bb9560eb42cb52e2">is_blank_entry</a> (char **<a class="el" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>)</td></tr>
78
79 <tr><td colspan="2"><br><h2>Variables</h2></td></tr>
80 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structCallbackItem.html">Callback</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#55de8ae2eeb299ec915f3f3dc354476e">callback_list_head</a> = NULL</td></tr>
81
82 <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structCallbackItem.html">Callback</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#72a0d9ad9216bded86e30678b4972814">callback_list_tail</a> = NULL</td></tr>
83
84 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#d35c7ed2784f4fb57849237ce534f17e">cs</a></td></tr>
85
86 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#534c5331d9ff060f0e653d61e72f489f">act</a></td></tr>
87
88 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a></td></tr>
89
90 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#46103ad966e7f0e086263030e54a2615">pe</a></td></tr>
91
92 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#0f4922f5f610d7bd7db8c21a597b3641">eof</a></td></tr>
93
94 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#366fc4d3a72013313c8b00233a5a7690">ts</a></td></tr>
95
96 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a></td></tr>
97
98 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#1998d6eddc359fdb029fe1dc0b9a50b3">stack</a> [5]</td></tr>
99
100 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#f93f4f37fc2ad9c37af4a715423b110c">top</a></td></tr>
101
102 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#f127db1c17ed58547ff5125a912d02b9">buffer_start</a></td></tr>
103
104 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a></td></tr>
105
106 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a></td></tr>
107
108 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a></td></tr>
109
110 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#d4e4601988acb4a95ecd1ec380359ae5">entity</a></td></tr>
111
112 <tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a></td></tr>
113
114 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a></td></tr>
115
116 <tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#207101bbc948307c92f53d6521e3e85c">last_line_start</a></td></tr>
117
118 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#c85645edbf093d7ab236c9861ddcdc05">last_line_contains_code</a></td></tr>
119
120 <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="parser__macros_8h.html#00405ce6c748a07e6ed3e3f91fe1d25e">last_whole_line_comment</a></td></tr>
121
122 </table>
123 <hr><h2>Define Documentation</h2>
124 <a class="anchor" name="a48fd5c8dbc18cdf9daaa5810227f829"></a><!-- doxytag: member="parser_macros.h::CHECK_BLANK_ENTRY" ref="a48fd5c8dbc18cdf9daaa5810227f829" args="" -->
125 <div class="memitem">
126 <div class="memproto">
127       <table class="memname">
128         <tr>
129           <td class="memname">#define CHECK_BLANK_ENTRY&nbsp;&nbsp;&nbsp;-3          </td>
130         </tr>
131       </table>
132 </div>
133 <div class="memdoc">
134
135 <p>
136 Check blank entry entity. Used for embedded language transitions. If a newline follows immediately after such a transition, the line should be counted as parent code, not child code. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
137
138 </div>
139 </div><p>
140 <a class="anchor" name="dcdd4261cb35490ebe8f88afd0b4787c"></a><!-- doxytag: member="parser_macros.h::check_blank_entry" ref="dcdd4261cb35490ebe8f88afd0b4787c" args="(lang)" -->
141 <div class="memitem">
142 <div class="memproto">
143       <table class="memname">
144         <tr>
145           <td class="memname">#define check_blank_entry          </td>
146           <td>(</td>
147           <td class="paramtype">lang&nbsp;</td>
148           <td class="paramname">          </td>
149           <td>&nbsp;)&nbsp;</td>
150           <td></td>
151         </tr>
152       </table>
153 </div>
154 <div class="memdoc">
155
156 <p>
157 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
158   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#33c0ec8adc93c385bb9560eb42cb52e2">is_blank_entry</a>(&amp;<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>)) { \
159     <a class="code" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a> = <a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a> + 1; \
160     <a class="code" href="parser__macros_8h.html#aaf8abebfd56b683567c15bfa3f063f1">std_newline</a>(lang) \
161   } \
162 }
163 </pre></div>If there is a transition into an embedded language and there is only parent language code on the line (the rest of the line is blank with no child code), count the line as a line of parent code. Moves p and te to the end of the newline and calls the std_newline macro. (p is inclusive, te is not.) This is typically used in the main action for the CHECK_BLANK_ENTRY entity. <dl compact><dt><b>Parameters:</b></dt><dd>
164   <table border="0" cellspacing="2" cellpadding="0">
165     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
166   </table>
167 </dl>
168 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
169
170 </div>
171 </div><p>
172 <a class="anchor" name="cc0eb0fbef1d4e1ccb5cf27961af93ad"></a><!-- doxytag: member="parser_macros.h::cint" ref="cc0eb0fbef1d4e1ccb5cf27961af93ad" args="(c)" -->
173 <div class="memitem">
174 <div class="memproto">
175       <table class="memname">
176         <tr>
177           <td class="memname">#define cint          </td>
178           <td>(</td>
179           <td class="paramtype">c&nbsp;</td>
180           <td class="paramname">          </td>
181           <td>&nbsp;)&nbsp;</td>
182           <td>&nbsp;&nbsp;&nbsp;((int) (c - <a class="el" href="parser__macros_8h.html#f127db1c17ed58547ff5125a912d02b9">buffer_start</a>))</td>
183         </tr>
184       </table>
185 </div>
186 <div class="memdoc">
187
188 <p>
189 Returns the absolute location in memory for a position relative to the start of the buffer being parsed. <dl compact><dt><b>Parameters:</b></dt><dd>
190   <table border="0" cellspacing="2" cellpadding="0">
191     <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>Position relative to the start of the buffer. </td></tr>
192   </table>
193 </dl>
194 <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
195
196 </div>
197 </div><p>
198 <a class="anchor" name="814f6dab3b0678113d97a3684282934a"></a><!-- doxytag: member="parser_macros.h::code" ref="814f6dab3b0678113d97a3684282934a" args="" -->
199 <div class="memitem">
200 <div class="memproto">
201       <table class="memname">
202         <tr>
203           <td class="memname">#define code          </td>
204         </tr>
205       </table>
206 </div>
207 <div class="memdoc">
208
209 <p>
210 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
211   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) { <a class="code" href="parser__macros_8h.html#6da05469a748b57f676bbf67a842b25e">dequeue</a>; } \
212   <span class="keywordflow">if</span> (!<a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> &amp;&amp; !<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>) <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = <a class="code" href="parser__macros_8h.html#366fc4d3a72013313c8b00233a5a7690">ts</a>; \
213   <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> = 1; \
214 }
215 </pre></div>The C equivalent of the Ragel 'code' action. This is tyically used in the main action for entities where Ragel actions cannot, for one reason or another, be used. <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
216
217 </div>
218 </div><p>
219 <a class="anchor" name="43be22b7a1b528eaf759e034ec581543"></a><!-- doxytag: member="parser_macros.h::comment" ref="43be22b7a1b528eaf759e034ec581543" args="" -->
220 <div class="memitem">
221 <div class="memproto">
222       <table class="memname">
223         <tr>
224           <td class="memname">#define comment          </td>
225         </tr>
226       </table>
227 </div>
228 <div class="memdoc">
229
230 <p>
231 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
232   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) { <a class="code" href="parser__macros_8h.html#6da05469a748b57f676bbf67a842b25e">dequeue</a>; } \
233   <span class="keywordflow">if</span> (!<a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a>) { \
234     <a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> = 1; \
235     <span class="keywordflow">if</span> (!<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>) <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = <a class="code" href="parser__macros_8h.html#366fc4d3a72013313c8b00233a5a7690">ts</a>; \
236   } \
237 }
238 </pre></div>The C equivalent of the Ragel 'comment' action. This is typically unused, but here for consistency. <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
239
240 </div>
241 </div><p>
242 <a class="anchor" name="6da05469a748b57f676bbf67a842b25e"></a><!-- doxytag: member="parser_macros.h::dequeue" ref="6da05469a748b57f676bbf67a842b25e" args="" -->
243 <div class="memitem">
244 <div class="memproto">
245       <table class="memname">
246         <tr>
247           <td class="memname">#define dequeue          </td>
248         </tr>
249       </table>
250 </div>
251 <div class="memdoc">
252
253 <p>
254 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
255   <a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a> = 0; \
256   <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = <a class="code" href="parser__macros_8h.html#207101bbc948307c92f53d6521e3e85c">last_line_start</a>; \
257   <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> = <a class="code" href="parser__macros_8h.html#c85645edbf093d7ab236c9861ddcdc05">last_line_contains_code</a>; \
258   <a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> = <a class="code" href="parser__macros_8h.html#00405ce6c748a07e6ed3e3f91fe1d25e">last_whole_line_comment</a>; \
259 }
260 </pre></div>Restores settings for a failed enqueued entity. This is typically used in the ls, code, and comment macros. <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
261
262 </div>
263 </div><p>
264 <a class="anchor" name="2822d59197758531b6f4a0cc13d0257b"></a><!-- doxytag: member="parser_macros.h::emb_internal_newline" ref="2822d59197758531b6f4a0cc13d0257b" args="(lang)" -->
265 <div class="memitem">
266 <div class="memproto">
267       <table class="memname">
268         <tr>
269           <td class="memname">#define emb_internal_newline          </td>
270           <td>(</td>
271           <td class="paramtype">lang&nbsp;</td>
272           <td class="paramname">          </td>
273           <td>&nbsp;)&nbsp;</td>
274           <td></td>
275         </tr>
276       </table>
277 </div>
278 <div class="memdoc">
279
280 <p>
281 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
282   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> &amp;&amp; <a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> != lang) \
283     <a class="code" href="parser__macros_8h.html#b08c3ed468f4ad3e1a9d391c1a4337d0">std_internal_newline</a>(<a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a>) \
284   <span class="keywordflow">else</span> \
285     <a class="code" href="parser__macros_8h.html#b08c3ed468f4ad3e1a9d391c1a4337d0">std_internal_newline</a>(lang) \
286   <a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> = 0; \
287 }
288 </pre></div>Executes emebedded language line counting actions for INTERNAL_NL entities based on whether or not the embedded language's code has been seen in a parent line. This is typically used in the main action for the INTERNAL_NL entity. <dl compact><dt><b>Parameters:</b></dt><dd>
289   <table border="0" cellspacing="2" cellpadding="0">
290     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
291   </table>
292 </dl>
293 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
294
295 </div>
296 </div><p>
297 <a class="anchor" name="b5304b201ce6824e3c021e245d6a5e94"></a><!-- doxytag: member="parser_macros.h::emb_newline" ref="b5304b201ce6824e3c021e245d6a5e94" args="(lang)" -->
298 <div class="memitem">
299 <div class="memproto">
300       <table class="memname">
301         <tr>
302           <td class="memname">#define emb_newline          </td>
303           <td>(</td>
304           <td class="paramtype">lang&nbsp;</td>
305           <td class="paramname">          </td>
306           <td>&nbsp;)&nbsp;</td>
307           <td></td>
308         </tr>
309       </table>
310 </div>
311 <div class="memdoc">
312
313 <p>
314 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
315   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> &amp;&amp; <a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> != lang) \
316     <a class="code" href="parser__macros_8h.html#aaf8abebfd56b683567c15bfa3f063f1">std_newline</a>(<a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a>) \
317   <span class="keywordflow">else</span> \
318     <a class="code" href="parser__macros_8h.html#aaf8abebfd56b683567c15bfa3f063f1">std_newline</a>(lang) \
319   <a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> = 0; \
320 }
321 </pre></div>Executes embedded language line counting actions for NEWLINE entities based on whether or not the embedded language's code has been seen in a parent line. This is typically used in the main action for the NEWLINE entity. <dl compact><dt><b>Parameters:</b></dt><dd>
322   <table border="0" cellspacing="2" cellpadding="0">
323     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
324   </table>
325 </dl>
326 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
327
328 </div>
329 </div><p>
330 <a class="anchor" name="c1af3f499e72dfc161f2fce616dfd8e7"></a><!-- doxytag: member="parser_macros.h::init" ref="c1af3f499e72dfc161f2fce616dfd8e7" args="" -->
331 <div class="memitem">
332 <div class="memproto">
333       <table class="memname">
334         <tr>
335           <td class="memname">#define init          </td>
336         </tr>
337       </table>
338 </div>
339 <div class="memdoc">
340
341 <p>
342 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
343   <a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a> = buffer; \
344   <a class="code" href="parser__macros_8h.html#46103ad966e7f0e086263030e54a2615">pe</a> = buffer + length; \
345   <a class="code" href="parser__macros_8h.html#0f4922f5f610d7bd7db8c21a597b3641">eof</a> = <a class="code" href="parser__macros_8h.html#46103ad966e7f0e086263030e54a2615">pe</a>; \
346   \
347   <a class="code" href="parser__macros_8h.html#f127db1c17ed58547ff5125a912d02b9">buffer_start</a> = buffer; \
348   <a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> = 0; \
349   <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> = 0; \
350   <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = 0; \
351   <a class="code" href="parser__macros_8h.html#d4e4601988acb4a95ecd1ec380359ae5">entity</a> = 0; \
352   <a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> = 0; \
353   <a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a> = 0; \
354 }
355 </pre></div>Initializes variables for parsing a buffer. Required at the beginning of every parser function. 
356 </div>
357 </div><p>
358 <a class="anchor" name="7e82c89c9a3dc533077791088d1ee77b"></a><!-- doxytag: member="parser_macros.h::INTERNAL_NL" ref="7e82c89c9a3dc533077791088d1ee77b" args="" -->
359 <div class="memitem">
360 <div class="memproto">
361       <table class="memname">
362         <tr>
363           <td class="memname">#define INTERNAL_NL&nbsp;&nbsp;&nbsp;-2          </td>
364         </tr>
365       </table>
366 </div>
367 <div class="memdoc">
368
369 <p>
370 Internal newline entity. Used for newlines inside patterns like strings and comments that can have newlines in them. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
371
372 </div>
373 </div><p>
374 <a class="anchor" name="a4df6978a0e35c95ca051f1da0dd7e86"></a><!-- doxytag: member="parser_macros.h::ls" ref="a4df6978a0e35c95ca051f1da0dd7e86" args="" -->
375 <div class="memitem">
376 <div class="memproto">
377       <table class="memname">
378         <tr>
379           <td class="memname">#define ls          </td>
380         </tr>
381       </table>
382 </div>
383 <div class="memdoc">
384
385 <p>
386 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
387   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) { <a class="code" href="parser__macros_8h.html#6da05469a748b57f676bbf67a842b25e">dequeue</a>; } \
388   <span class="keywordflow">if</span> (!<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>) <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = <a class="code" href="parser__macros_8h.html#366fc4d3a72013313c8b00233a5a7690">ts</a>; \
389 }
390 </pre></div>Sets the line_start variable to ts. This is typically used for the SPACE entity in the main action. <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
391
392 </div>
393 </div><p>
394 <a class="anchor" name="806511f4930171733227c99101dc0606"></a><!-- doxytag: member="parser_macros.h::NEWLINE" ref="806511f4930171733227c99101dc0606" args="" -->
395 <div class="memitem">
396 <div class="memproto">
397       <table class="memname">
398         <tr>
399           <td class="memname">#define NEWLINE&nbsp;&nbsp;&nbsp;-1          </td>
400         </tr>
401       </table>
402 </div>
403 <div class="memdoc">
404
405 <p>
406 Newline entity. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
407
408 </div>
409 </div><p>
410 <a class="anchor" name="1adf47f60e418da0f0c3caa471728021"></a><!-- doxytag: member="parser_macros.h::process_last_line" ref="1adf47f60e418da0f0c3caa471728021" args="(lang)" -->
411 <div class="memitem">
412 <div class="memproto">
413       <table class="memname">
414         <tr>
415           <td class="memname">#define process_last_line          </td>
416           <td>(</td>
417           <td class="paramtype">lang&nbsp;</td>
418           <td class="paramname">          </td>
419           <td>&nbsp;)&nbsp;</td>
420           <td></td>
421         </tr>
422       </table>
423 </div>
424 <div class="memdoc">
425
426 <p>
427 <b>Value:</b><div class="fragment"><pre class="fragment">{\
428   <span class="keywordflow">if</span> ((<a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> || <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a>) &amp;&amp; callback) { \
429     <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a>) \
430       callback(lang, <span class="stringliteral">"lcode"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#46103ad966e7f0e086263030e54a2615">pe</a>), userdata); \
431     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a>) \
432       callback(lang, <span class="stringliteral">"lcomment"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#46103ad966e7f0e086263030e54a2615">pe</a>), userdata); \
433   } \
434 }
435 </pre></div>Processes the last line for buffers that don't have a newline at EOF. This is typically used at the end of the parse_lang function after the Ragel parser has been executed. <dl compact><dt><b>Parameters:</b></dt><dd>
436   <table border="0" cellspacing="2" cellpadding="0">
437     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
438   </table>
439 </dl>
440 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
441
442 </div>
443 </div><p>
444 <a class="anchor" name="e9fb722b81bbd8bb0e1de37941fab172"></a><!-- doxytag: member="parser_macros.h::saw" ref="e9fb722b81bbd8bb0e1de37941fab172" args="(lang)" -->
445 <div class="memitem">
446 <div class="memproto">
447       <table class="memname">
448         <tr>
449           <td class="memname">#define saw          </td>
450           <td>(</td>
451           <td class="paramtype">lang&nbsp;</td>
452           <td class="paramname">          </td>
453           <td>&nbsp;)&nbsp;</td>
454           <td></td>
455         </tr>
456       </table>
457 </div>
458 <div class="memdoc">
459
460 <p>
461 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
462   <a class="code" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a> = lang; \
463   <a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> = 0; \
464   <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> = 0; \
465 }
466 </pre></div>Sets up for having seen an embedded language. This is typically used when entering an embedded language which usually does not span multiple lines (e.g. php for &lt;?php echo 'blah' ?&gt; on single lines) so the line is counted as embedded code or comment, not parent code. <dl compact><dt><b>Parameters:</b></dt><dd>
467   <table border="0" cellspacing="2" cellpadding="0">
468     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
469   </table>
470 </dl>
471 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
472
473 </div>
474 </div><p>
475 <a class="anchor" name="b08c3ed468f4ad3e1a9d391c1a4337d0"></a><!-- doxytag: member="parser_macros.h::std_internal_newline" ref="b08c3ed468f4ad3e1a9d391c1a4337d0" args="(lang)" -->
476 <div class="memitem">
477 <div class="memproto">
478       <table class="memname">
479         <tr>
480           <td class="memname">#define std_internal_newline          </td>
481           <td>(</td>
482           <td class="paramtype">lang&nbsp;</td>
483           <td class="paramname">          </td>
484           <td>&nbsp;)&nbsp;</td>
485           <td></td>
486         </tr>
487       </table>
488 </div>
489 <div class="memdoc">
490
491 <p>
492 <b>Value:</b><div class="fragment"><pre class="fragment">{ \
493   <span class="keywordflow">if</span> (callback &amp;&amp; <a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a> &gt; <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>) { \
494     <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a>) { \
495       <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) \
496         <a class="code" href="parser__macros_8h.html#cef933f90a0bd6318613e93f39067ac8">enqueue</a>(lang, <span class="stringliteral">"lcode"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>), userdata); \
497       <span class="keywordflow">else</span> \
498         callback(lang, <span class="stringliteral">"lcode"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>), userdata); \
499     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a>) { \
500       <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) \
501         <a class="code" href="parser__macros_8h.html#cef933f90a0bd6318613e93f39067ac8">enqueue</a>(lang, <span class="stringliteral">"lcomment"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>), userdata); \
502       <span class="keywordflow">else</span> \
503         callback(lang, <span class="stringliteral">"lcomment"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>), userdata); \
504     } <span class="keywordflow">else</span> { \
505       <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) \
506         <a class="code" href="parser__macros_8h.html#cef933f90a0bd6318613e93f39067ac8">enqueue</a>(lang, <span class="stringliteral">"lblank"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>), userdata); \
507       <span class="keywordflow">else</span> \
508         callback(lang, <span class="stringliteral">"lblank"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>), userdata); \
509     } \
510   } \
511   <a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> = 0; \
512   <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> = 0; \
513   <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = <a class="code" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>; \
514 }
515 </pre></div>Executes standard line counting actions for INTERNAL_NL entities. This is typically used in the main action for the INTERNAL_NL entity. <dl compact><dt><b>Parameters:</b></dt><dd>
516   <table border="0" cellspacing="2" cellpadding="0">
517     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
518   </table>
519 </dl>
520 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
521
522 </div>
523 </div><p>
524 <a class="anchor" name="aaf8abebfd56b683567c15bfa3f063f1"></a><!-- doxytag: member="parser_macros.h::std_newline" ref="aaf8abebfd56b683567c15bfa3f063f1" args="(lang)" -->
525 <div class="memitem">
526 <div class="memproto">
527       <table class="memname">
528         <tr>
529           <td class="memname">#define std_newline          </td>
530           <td>(</td>
531           <td class="paramtype">lang&nbsp;</td>
532           <td class="paramname">          </td>
533           <td>&nbsp;)&nbsp;</td>
534           <td></td>
535         </tr>
536       </table>
537 </div>
538 <div class="memdoc">
539
540 <p>
541 <b>Value:</b><div class="fragment"><pre class="fragment">{\
542   <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>) { <a class="code" href="parser__macros_8h.html#6da05469a748b57f676bbf67a842b25e">dequeue</a>; } \
543   <span class="keywordflow">if</span> (callback &amp;&amp; <a class="code" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a> &gt; <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>) { \
544     <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a>) \
545       callback(lang, <span class="stringliteral">"lcode"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a>), userdata); \
546     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a>) \
547       callback(lang, <span class="stringliteral">"lcomment"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a>), userdata); \
548     <span class="keywordflow">else</span> \
549       callback(lang, <span class="stringliteral">"lblank"</span>, <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#366fc4d3a72013313c8b00233a5a7690">ts</a>), <a class="code" href="parser__macros_8h.html#cc0eb0fbef1d4e1ccb5cf27961af93ad">cint</a>(<a class="code" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a>), userdata); \
550   } \
551   <a class="code" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a> = 0; \
552   <a class="code" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a> = 0; \
553   <a class="code" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a> = 0; \
554 }
555 </pre></div>Executes standard line counting actions for NEWLINE entities. This is typically used in the main action for the NEWLINE entity. <dl compact><dt><b>Parameters:</b></dt><dd>
556   <table border="0" cellspacing="2" cellpadding="0">
557     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name string. </td></tr>
558   </table>
559 </dl>
560 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
561
562 </div>
563 </div><p>
564 <hr><h2>Typedef Documentation</h2>
565 <a class="anchor" name="c27bb77f57039cab3883b9e21e6c48f4"></a><!-- doxytag: member="parser_macros.h::Callback" ref="c27bb77f57039cab3883b9e21e6c48f4" args="" -->
566 <div class="memitem">
567 <div class="memproto">
568       <table class="memname">
569         <tr>
570           <td class="memname">typedef struct <a class="el" href="structCallbackItem.html">CallbackItem</a>  <a class="el" href="structCallbackItem.html">Callback</a>          </td>
571         </tr>
572       </table>
573 </div>
574 <div class="memdoc">
575
576 <p>
577
578 </div>
579 </div><p>
580 <hr><h2>Function Documentation</h2>
581 <a class="anchor" name="cef933f90a0bd6318613e93f39067ac8"></a><!-- doxytag: member="parser_macros.h::enqueue" ref="cef933f90a0bd6318613e93f39067ac8" args="(const char *lang, const char *entity, int s, int e, void *udata)" -->
582 <div class="memitem">
583 <div class="memproto">
584       <table class="memname">
585         <tr>
586           <td class="memname">void enqueue           </td>
587           <td>(</td>
588           <td class="paramtype">const char *&nbsp;</td>
589           <td class="paramname"> <em>lang</em>, </td>
590         </tr>
591         <tr>
592           <td class="paramkey"></td>
593           <td></td>
594           <td class="paramtype">const char *&nbsp;</td>
595           <td class="paramname"> <em>entity</em>, </td>
596         </tr>
597         <tr>
598           <td class="paramkey"></td>
599           <td></td>
600           <td class="paramtype">int&nbsp;</td>
601           <td class="paramname"> <em>s</em>, </td>
602         </tr>
603         <tr>
604           <td class="paramkey"></td>
605           <td></td>
606           <td class="paramtype">int&nbsp;</td>
607           <td class="paramname"> <em>e</em>, </td>
608         </tr>
609         <tr>
610           <td class="paramkey"></td>
611           <td></td>
612           <td class="paramtype">void *&nbsp;</td>
613           <td class="paramname"> <em>udata</em></td><td>&nbsp;</td>
614         </tr>
615         <tr>
616           <td></td>
617           <td>)</td>
618           <td></td><td></td><td></td>
619         </tr>
620       </table>
621 </div>
622 <div class="memdoc">
623
624 <p>
625 Enqueues a callback for calling upon commit. This is only necessary for line counting machines. Ragel will execute actions in real-time rather than after a complete match. This is a problem for entities that contain internal newlines, since there is a callback for each internal newline whether or not the end of the entity matches. This means that if, for example, the beginning of a string entity is matched, the text following is treated as code until the ending delimiter. If there is no ending delimiter (it was not actually a string entity), Ragel will jump back to the beginning of the string and reparse the text again. This means all the callbacks called were probably not accurate. To remedy this, any entity which needs an ending delimiter that may not appear will have its callbacks enqueued and then committed when the ending delimitter is reached. If that delimitter is not reached, the callbacks are never called. <dl compact><dt><b>Parameters:</b></dt><dd>
626   <table border="0" cellspacing="2" cellpadding="0">
627     <tr><td valign="top"></td><td valign="top"><em>lang</em>&nbsp;</td><td>The language name. </td></tr>
628     <tr><td valign="top"></td><td valign="top"><em>entity</em>&nbsp;</td><td>The entity (lcode, lcomment, lblank). </td></tr>
629     <tr><td valign="top"></td><td valign="top"><em>s</em>&nbsp;</td><td>The start position of the entity in the buffer. </td></tr>
630     <tr><td valign="top"></td><td valign="top"><em>e</em>&nbsp;</td><td>The end position of the entity in the buffer. </td></tr>
631     <tr><td valign="top"></td><td valign="top"><em>udata</em>&nbsp;</td><td>Userdata. </td></tr>
632   </table>
633 </dl>
634
635 </div>
636 </div><p>
637 <a class="anchor" name="666ec961128241e997f03af3ae16a2ea"></a><!-- doxytag: member="parser_macros.h::free_queue" ref="666ec961128241e997f03af3ae16a2ea" args="()" -->
638 <div class="memitem">
639 <div class="memproto">
640       <table class="memname">
641         <tr>
642           <td class="memname">void free_queue           </td>
643           <td>(</td>
644           <td class="paramname">          </td>
645           <td>&nbsp;)&nbsp;</td>
646           <td></td>
647         </tr>
648       </table>
649 </div>
650 <div class="memdoc">
651
652 <p>
653 Frees the memory used by a queue. 
654 </div>
655 </div><p>
656 <a class="anchor" name="33c0ec8adc93c385bb9560eb42cb52e2"></a><!-- doxytag: member="parser_macros.h::is_blank_entry" ref="33c0ec8adc93c385bb9560eb42cb52e2" args="(char **p)" -->
657 <div class="memitem">
658 <div class="memproto">
659       <table class="memname">
660         <tr>
661           <td class="memname">int is_blank_entry           </td>
662           <td>(</td>
663           <td class="paramtype">char **&nbsp;</td>
664           <td class="paramname"> <em>p</em>          </td>
665           <td>&nbsp;)&nbsp;</td>
666           <td></td>
667         </tr>
668       </table>
669 </div>
670 <div class="memdoc">
671
672 <p>
673 Determines whether or not the rest of the line is blank. This is typically used when entering an embedded language. <dl compact><dt><b>Parameters:</b></dt><dd>
674   <table border="0" cellspacing="2" cellpadding="0">
675     <tr><td valign="top"></td><td valign="top"><em>p</em>&nbsp;</td><td>The position of entry into the emebedded language. </td></tr>
676   </table>
677 </dl>
678 <dl class="return" compact><dt><b>Returns:</b></dt><dd>0 if the rest of the line is not blank, the position at the end of the newline otherwise (inclusive). </dd></dl>
679 <dl class="note" compact><dt><b>Note:</b></dt><dd>Applies only to line counting parsers. </dd></dl>
680
681 </div>
682 </div><p>
683 <hr><h2>Variable Documentation</h2>
684 <a class="anchor" name="534c5331d9ff060f0e653d61e72f489f"></a><!-- doxytag: member="parser_macros.h::act" ref="534c5331d9ff060f0e653d61e72f489f" args="" -->
685 <div class="memitem">
686 <div class="memproto">
687       <table class="memname">
688         <tr>
689           <td class="memname">int <a class="el" href="parser__macros_8h.html#534c5331d9ff060f0e653d61e72f489f">act</a>          </td>
690         </tr>
691       </table>
692 </div>
693 <div class="memdoc">
694
695 <p>
696 Required by Ragel. 
697 </div>
698 </div><p>
699 <a class="anchor" name="f127db1c17ed58547ff5125a912d02b9"></a><!-- doxytag: member="parser_macros.h::buffer_start" ref="f127db1c17ed58547ff5125a912d02b9" args="" -->
700 <div class="memitem">
701 <div class="memproto">
702       <table class="memname">
703         <tr>
704           <td class="memname">char* <a class="el" href="parser__macros_8h.html#f127db1c17ed58547ff5125a912d02b9">buffer_start</a>          </td>
705         </tr>
706       </table>
707 </div>
708 <div class="memdoc">
709
710 <p>
711 The buffer currently being parsed. 
712 </div>
713 </div><p>
714 <a class="anchor" name="55de8ae2eeb299ec915f3f3dc354476e"></a><!-- doxytag: member="parser_macros.h::callback_list_head" ref="55de8ae2eeb299ec915f3f3dc354476e" args="" -->
715 <div class="memitem">
716 <div class="memproto">
717       <table class="memname">
718         <tr>
719           <td class="memname"><a class="el" href="structCallbackItem.html">Callback</a>* <a class="el" href="parser__macros_8h.html#55de8ae2eeb299ec915f3f3dc354476e">callback_list_head</a> = NULL          </td>
720         </tr>
721       </table>
722 </div>
723 <div class="memdoc">
724
725 <p>
726 The head of the Callback queue. 
727 </div>
728 </div><p>
729 <a class="anchor" name="72a0d9ad9216bded86e30678b4972814"></a><!-- doxytag: member="parser_macros.h::callback_list_tail" ref="72a0d9ad9216bded86e30678b4972814" args="" -->
730 <div class="memitem">
731 <div class="memproto">
732       <table class="memname">
733         <tr>
734           <td class="memname"><a class="el" href="structCallbackItem.html">Callback</a>* <a class="el" href="parser__macros_8h.html#72a0d9ad9216bded86e30678b4972814">callback_list_tail</a> = NULL          </td>
735         </tr>
736       </table>
737 </div>
738 <div class="memdoc">
739
740 <p>
741 The tail of the Callback queue. 
742 </div>
743 </div><p>
744 <a class="anchor" name="d35c7ed2784f4fb57849237ce534f17e"></a><!-- doxytag: member="parser_macros.h::cs" ref="d35c7ed2784f4fb57849237ce534f17e" args="" -->
745 <div class="memitem">
746 <div class="memproto">
747       <table class="memname">
748         <tr>
749           <td class="memname">int <a class="el" href="parser__macros_8h.html#d35c7ed2784f4fb57849237ce534f17e">cs</a>          </td>
750         </tr>
751       </table>
752 </div>
753 <div class="memdoc">
754
755 <p>
756 Required by Ragel. 
757 </div>
758 </div><p>
759 <a class="anchor" name="d4e4601988acb4a95ecd1ec380359ae5"></a><!-- doxytag: member="parser_macros.h::entity" ref="d4e4601988acb4a95ecd1ec380359ae5" args="" -->
760 <div class="memitem">
761 <div class="memproto">
762       <table class="memname">
763         <tr>
764           <td class="memname">int <a class="el" href="parser__macros_8h.html#d4e4601988acb4a95ecd1ec380359ae5">entity</a>          </td>
765         </tr>
766       </table>
767 </div>
768 <div class="memdoc">
769
770 <p>
771 State variable for the current entity being matched. 
772 </div>
773 </div><p>
774 <a class="anchor" name="0f4922f5f610d7bd7db8c21a597b3641"></a><!-- doxytag: member="parser_macros.h::eof" ref="0f4922f5f610d7bd7db8c21a597b3641" args="" -->
775 <div class="memitem">
776 <div class="memproto">
777       <table class="memname">
778         <tr>
779           <td class="memname">char* <a class="el" href="parser__macros_8h.html#0f4922f5f610d7bd7db8c21a597b3641">eof</a>          </td>
780         </tr>
781       </table>
782 </div>
783 <div class="memdoc">
784
785 <p>
786 Required by Ragel. 
787 </div>
788 </div><p>
789 <a class="anchor" name="a38b98ec2e96f92062cc7d5fa8ece8a4"></a><!-- doxytag: member="parser_macros.h::inqueue" ref="a38b98ec2e96f92062cc7d5fa8ece8a4" args="" -->
790 <div class="memitem">
791 <div class="memproto">
792       <table class="memname">
793         <tr>
794           <td class="memname">int <a class="el" href="parser__macros_8h.html#a38b98ec2e96f92062cc7d5fa8ece8a4">inqueue</a>          </td>
795         </tr>
796       </table>
797 </div>
798 <div class="memdoc">
799
800 <p>
801 Flag indicating whether or not to enqueue callbacks instead of calling them in real time. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
802
803 </div>
804 </div><p>
805 <a class="anchor" name="c85645edbf093d7ab236c9861ddcdc05"></a><!-- doxytag: member="parser_macros.h::last_line_contains_code" ref="c85645edbf093d7ab236c9861ddcdc05" args="" -->
806 <div class="memitem">
807 <div class="memproto">
808       <table class="memname">
809         <tr>
810           <td class="memname">int <a class="el" href="parser__macros_8h.html#c85645edbf093d7ab236c9861ddcdc05">last_line_contains_code</a>          </td>
811         </tr>
812       </table>
813 </div>
814 <div class="memdoc">
815
816 <p>
817 Backup variable for 'inqueue'ing. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
818
819 </div>
820 </div><p>
821 <a class="anchor" name="207101bbc948307c92f53d6521e3e85c"></a><!-- doxytag: member="parser_macros.h::last_line_start" ref="207101bbc948307c92f53d6521e3e85c" args="" -->
822 <div class="memitem">
823 <div class="memproto">
824       <table class="memname">
825         <tr>
826           <td class="memname">char* <a class="el" href="parser__macros_8h.html#207101bbc948307c92f53d6521e3e85c">last_line_start</a>          </td>
827         </tr>
828       </table>
829 </div>
830 <div class="memdoc">
831
832 <p>
833 Backup variable for 'inqueue'ing. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
834
835 </div>
836 </div><p>
837 <a class="anchor" name="00405ce6c748a07e6ed3e3f91fe1d25e"></a><!-- doxytag: member="parser_macros.h::last_whole_line_comment" ref="00405ce6c748a07e6ed3e3f91fe1d25e" args="" -->
838 <div class="memitem">
839 <div class="memproto">
840       <table class="memname">
841         <tr>
842           <td class="memname">int <a class="el" href="parser__macros_8h.html#00405ce6c748a07e6ed3e3f91fe1d25e">last_whole_line_comment</a>          </td>
843         </tr>
844       </table>
845 </div>
846 <div class="memdoc">
847
848 <p>
849 Backup variable for 'inqueue'ing. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
850
851 </div>
852 </div><p>
853 <a class="anchor" name="6c107b5ead58c230e358212891737cc3"></a><!-- doxytag: member="parser_macros.h::line_contains_code" ref="6c107b5ead58c230e358212891737cc3" args="" -->
854 <div class="memitem">
855 <div class="memproto">
856       <table class="memname">
857         <tr>
858           <td class="memname">int <a class="el" href="parser__macros_8h.html#6c107b5ead58c230e358212891737cc3">line_contains_code</a>          </td>
859         </tr>
860       </table>
861 </div>
862 <div class="memdoc">
863
864 <p>
865 Flag indicating whether or not the current line contains any code. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
866
867 </div>
868 </div><p>
869 <a class="anchor" name="6f5b3cc3254a82d5d28a418a40f59272"></a><!-- doxytag: member="parser_macros.h::line_start" ref="6f5b3cc3254a82d5d28a418a40f59272" args="" -->
870 <div class="memitem">
871 <div class="memproto">
872       <table class="memname">
873         <tr>
874           <td class="memname">char* <a class="el" href="parser__macros_8h.html#6f5b3cc3254a82d5d28a418a40f59272">line_start</a>          </td>
875         </tr>
876       </table>
877 </div>
878 <div class="memdoc">
879
880 <p>
881 The beginning of the current line in the buffer being parsed. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
882
883 </div>
884 </div><p>
885 <a class="anchor" name="aa1ebe818ec1c763a776cc580551f3e6"></a><!-- doxytag: member="parser_macros.h::p" ref="aa1ebe818ec1c763a776cc580551f3e6" args="" -->
886 <div class="memitem">
887 <div class="memproto">
888       <table class="memname">
889         <tr>
890           <td class="memname">char* <a class="el" href="parser__macros_8h.html#aa1ebe818ec1c763a776cc580551f3e6">p</a>          </td>
891         </tr>
892       </table>
893 </div>
894 <div class="memdoc">
895
896 <p>
897 Required by Ragel. 
898 </div>
899 </div><p>
900 <a class="anchor" name="46103ad966e7f0e086263030e54a2615"></a><!-- doxytag: member="parser_macros.h::pe" ref="46103ad966e7f0e086263030e54a2615" args="" -->
901 <div class="memitem">
902 <div class="memproto">
903       <table class="memname">
904         <tr>
905           <td class="memname">char* <a class="el" href="parser__macros_8h.html#46103ad966e7f0e086263030e54a2615">pe</a>          </td>
906         </tr>
907       </table>
908 </div>
909 <div class="memdoc">
910
911 <p>
912 Required by Ragel. 
913 </div>
914 </div><p>
915 <a class="anchor" name="289e4572ae2214b56c963362620009ce"></a><!-- doxytag: member="parser_macros.h::seen" ref="289e4572ae2214b56c963362620009ce" args="" -->
916 <div class="memitem">
917 <div class="memproto">
918       <table class="memname">
919         <tr>
920           <td class="memname">const char* <a class="el" href="parser__macros_8h.html#289e4572ae2214b56c963362620009ce">seen</a>          </td>
921         </tr>
922       </table>
923 </div>
924 <div class="memdoc">
925
926 <p>
927 Keeps track of an embedded language. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
928
929 </div>
930 </div><p>
931 <a class="anchor" name="1998d6eddc359fdb029fe1dc0b9a50b3"></a><!-- doxytag: member="parser_macros.h::stack" ref="1998d6eddc359fdb029fe1dc0b9a50b3" args="[5]" -->
932 <div class="memitem">
933 <div class="memproto">
934       <table class="memname">
935         <tr>
936           <td class="memname">int <a class="el" href="parser__macros_8h.html#1998d6eddc359fdb029fe1dc0b9a50b3">stack</a>[5]          </td>
937         </tr>
938       </table>
939 </div>
940 <div class="memdoc">
941
942 <p>
943 Required by Ragel. 
944 </div>
945 </div><p>
946 <a class="anchor" name="49aa6b4212d238e0be3312cf89738b98"></a><!-- doxytag: member="parser_macros.h::te" ref="49aa6b4212d238e0be3312cf89738b98" args="" -->
947 <div class="memitem">
948 <div class="memproto">
949       <table class="memname">
950         <tr>
951           <td class="memname">char* <a class="el" href="parser__macros_8h.html#49aa6b4212d238e0be3312cf89738b98">te</a>          </td>
952         </tr>
953       </table>
954 </div>
955 <div class="memdoc">
956
957 <p>
958 Required by Ragel. 
959 </div>
960 </div><p>
961 <a class="anchor" name="f93f4f37fc2ad9c37af4a715423b110c"></a><!-- doxytag: member="parser_macros.h::top" ref="f93f4f37fc2ad9c37af4a715423b110c" args="" -->
962 <div class="memitem">
963 <div class="memproto">
964       <table class="memname">
965         <tr>
966           <td class="memname">int <a class="el" href="parser__macros_8h.html#f93f4f37fc2ad9c37af4a715423b110c">top</a>          </td>
967         </tr>
968       </table>
969 </div>
970 <div class="memdoc">
971
972 <p>
973 Required by Ragel. 
974 </div>
975 </div><p>
976 <a class="anchor" name="366fc4d3a72013313c8b00233a5a7690"></a><!-- doxytag: member="parser_macros.h::ts" ref="366fc4d3a72013313c8b00233a5a7690" args="" -->
977 <div class="memitem">
978 <div class="memproto">
979       <table class="memname">
980         <tr>
981           <td class="memname">char* <a class="el" href="parser__macros_8h.html#366fc4d3a72013313c8b00233a5a7690">ts</a>          </td>
982         </tr>
983       </table>
984 </div>
985 <div class="memdoc">
986
987 <p>
988 Required by Ragel. 
989 </div>
990 </div><p>
991 <a class="anchor" name="6610fa10e2ad8df10bb6e04babf0bbd8"></a><!-- doxytag: member="parser_macros.h::whole_line_comment" ref="6610fa10e2ad8df10bb6e04babf0bbd8" args="" -->
992 <div class="memitem">
993 <div class="memproto">
994       <table class="memname">
995         <tr>
996           <td class="memname">int <a class="el" href="parser__macros_8h.html#6610fa10e2ad8df10bb6e04babf0bbd8">whole_line_comment</a>          </td>
997         </tr>
998       </table>
999 </div>
1000 <div class="memdoc">
1001
1002 <p>
1003 Flag indicating whether or not the current line contains only a comment. <dl class="note" compact><dt><b>Note:</b></dt><dd>This is only used for line counting parsers. </dd></dl>
1004
1005 </div>
1006 </div><p>
1007 </div>
1008 <hr size="1"><address style="text-align: right;"><small>Generated on Fri Aug 28 15:20:08 2009 for ohcount by&nbsp;
1009 <a href="http://www.doxygen.org/index.html">
1010 <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
1011 </body>
1012 </html>