320
<td class="listing_code"><pre class="programlisting"><span class="keyword">const</span><span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">store </span><span class="symbol">=</span><span class="normal"> </span><span class="string">"Fortnum & Mason"</span><span class="symbol">;</span>
321
<span class="keyword">const</span><span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">item </span><span class="symbol">=</span><span class="normal"> </span><span class="string">"Tea"</span><span class="symbol">;</span>
322
<span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">output</span><span class="symbol">;</span>
320
<td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">const char</span> <span class="gtkdoc opt">*</span>store <span class="gtkdoc opt">=</span> <span class="string">"Fortnum & Mason"</span><span class="gtkdoc opt">;</span>
321
<span class="gtkdoc kwb">const char</span> <span class="gtkdoc opt">*</span>item <span class="gtkdoc opt">=</span> <span class="string">"Tea"</span><span class="gtkdoc opt">;</span>
322
<span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">*</span>output<span class="gtkdoc opt">;</span>
324
<span class="normal">output </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Simple-XML-Subset-Parser.html#g-markup-printf-escaped">g_markup_printf_escaped</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"<purchase>"</span>
325
<span class="normal"> </span><span class="string">"<store>%s</store>"</span>
326
<span class="normal"> </span><span class="string">"<item>%s</item>"</span>
327
<span class="normal"> </span><span class="string">"</purchase>"</span><span class="symbol">,</span>
328
<span class="normal"> store</span><span class="symbol">,</span><span class="normal"> item</span><span class="symbol">);</span></pre></td>
324
output <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-Simple-XML-Subset-Parser.html#g-markup-printf-escaped">g_markup_printf_escaped</a></span> <span class="gtkdoc opt">(</span><span class="string">"<purchase>"</span>
325
<span class="string">"<store>%s</store>"</span>
326
<span class="string">"<item>%s</item>"</span>
327
<span class="string">"</purchase>"</span><span class="gtkdoc opt">,</span>
328
store<span class="gtkdoc opt">,</span> item<span class="gtkdoc opt">);</span></pre></td>
794
<td class="listing_code"><pre class="programlisting"><span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span>
795
<span class="cbracket">{</span>
796
<span class="normal"> </span><span class="usertype">gint</span><span class="normal"> tag_count</span><span class="symbol">;</span>
797
<span class="cbracket">}</span><span class="normal"> CounterData</span><span class="symbol">;</span>
799
<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
800
<span class="function">counter_start_element</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GMarkupParseContext</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">context</span><span class="symbol">,</span>
801
<span class="normal"> </span><span class="keyword">const</span><span class="normal"> </span><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">element_name</span><span class="symbol">,</span>
802
<span class="normal"> </span><span class="keyword">const</span><span class="normal"> </span><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">**</span><span class="normal">attribute_names</span><span class="symbol">,</span>
803
<span class="normal"> </span><span class="keyword">const</span><span class="normal"> </span><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">**</span><span class="normal">attribute_values</span><span class="symbol">,</span>
804
<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> user_data</span><span class="symbol">,</span>
805
<span class="normal"> </span><span class="usertype">GError</span><span class="normal"> </span><span class="symbol">**</span><span class="normal">error</span><span class="symbol">)</span>
806
<span class="cbracket">{</span>
807
<span class="normal"> </span><span class="usertype">CounterData</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">data </span><span class="symbol">=</span><span class="normal"> user_data</span><span class="symbol">;</span>
809
<span class="normal"> data</span><span class="symbol">-></span><span class="normal">tag_count</span><span class="symbol">++;</span>
810
<span class="cbracket">}</span>
812
<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
813
<span class="function">counter_error</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GMarkupParseContext</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">context</span><span class="symbol">,</span>
814
<span class="normal"> </span><span class="usertype">GError</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">error</span><span class="symbol">,</span>
815
<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> user_data</span><span class="symbol">)</span>
816
<span class="cbracket">{</span>
817
<span class="normal"> </span><span class="usertype">CounterData</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">data </span><span class="symbol">=</span><span class="normal"> user_data</span><span class="symbol">;</span>
819
<span class="normal"> </span><span class="function"><a href="glib-Memory-Slices.html#g-slice-free">g_slice_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">CounterData</span><span class="symbol">,</span><span class="normal"> data</span><span class="symbol">);</span>
820
<span class="cbracket">}</span>
822
<span class="keyword">static</span><span class="normal"> </span><span class="usertype">GMarkupParser</span><span class="normal"> counter_subparser </span><span class="symbol">=</span>
823
<span class="cbracket">{</span>
824
<span class="normal"> counter_start_element</span><span class="symbol">,</span>
825
<span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">,</span>
826
<span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">,</span>
827
<span class="normal"> <a href="glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">,</span>
828
<span class="normal"> counter_error</span>
829
<span class="cbracket">}</span><span class="symbol">;</span></pre></td>
794
<td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwc">typedef</span> <span class="gtkdoc kwb">struct</span>
795
<span class="gtkdoc opt">{</span>
796
gint tag_count<span class="gtkdoc opt">;</span>
797
<span class="gtkdoc opt">}</span> CounterData<span class="gtkdoc opt">;</span>
799
<span class="gtkdoc kwb">static void</span>
800
<span class="function">counter_start_element</span> <span class="gtkdoc opt">(</span>GMarkupParseContext <span class="gtkdoc opt">*</span>context<span class="gtkdoc opt">,</span>
801
<span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">*</span>element_name<span class="gtkdoc opt">,</span>
802
<span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">**</span>attribute_names<span class="gtkdoc opt">,</span>
803
<span class="gtkdoc kwb">const</span> gchar <span class="gtkdoc opt">**</span>attribute_values<span class="gtkdoc opt">,</span>
804
gpointer user_data<span class="gtkdoc opt">,</span>
805
GError <span class="gtkdoc opt">**</span>error<span class="gtkdoc opt">)</span>
806
<span class="gtkdoc opt">{</span>
807
CounterData <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> user_data<span class="gtkdoc opt">;</span>
809
data<span class="gtkdoc opt">-></span>tag_count<span class="gtkdoc opt">++;</span>
810
<span class="gtkdoc opt">}</span>
812
<span class="gtkdoc kwb">static void</span>
813
<span class="function">counter_error</span> <span class="gtkdoc opt">(</span>GMarkupParseContext <span class="gtkdoc opt">*</span>context<span class="gtkdoc opt">,</span>
814
GError <span class="gtkdoc opt">*</span>error<span class="gtkdoc opt">,</span>
815
gpointer user_data<span class="gtkdoc opt">)</span>
816
<span class="gtkdoc opt">{</span>
817
CounterData <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> user_data<span class="gtkdoc opt">;</span>
819
<span class="function"><a href="glib-Memory-Slices.html#g-slice-free">g_slice_free</a></span> <span class="gtkdoc opt">(</span>CounterData<span class="gtkdoc opt">,</span> data<span class="gtkdoc opt">);</span>
820
<span class="gtkdoc opt">}</span>
822
<span class="gtkdoc kwb">static</span> GMarkupParser counter_subparser <span class="gtkdoc opt">=</span>
823
<span class="gtkdoc opt">{</span>
824
counter_start_element<span class="gtkdoc opt">,</span>
825
NULL<span class="gtkdoc opt">,</span>
826
NULL<span class="gtkdoc opt">,</span>
827
NULL<span class="gtkdoc opt">,</span>
829
<span class="gtkdoc opt">};</span></pre></td>
862
<td class="listing_code"><pre class="programlisting"><span class="type">void</span>
863
<span class="function">start_counting</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GMarkupParseContext</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">context</span><span class="symbol">)</span>
864
<span class="cbracket">{</span>
865
<span class="normal"> </span><span class="usertype">CounterData</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">data </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Memory-Slices.html#g-slice-new">g_slice_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">CounterData</span><span class="symbol">);</span>
867
<span class="normal"> data</span><span class="symbol">-></span><span class="normal">tag_count </span><span class="symbol">=</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
868
<span class="normal"> </span><span class="function"><a href="glib-Simple-XML-Subset-Parser.html#g-markup-parse-context-push">g_markup_parse_context_push</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">context</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">counter_subparser</span><span class="symbol">,</span><span class="normal"> data</span><span class="symbol">);</span>
869
<span class="cbracket">}</span>
871
<span class="normal"><a href="glib-Basic-Types.html#gint">gint</a></span>
872
<span class="function">end_counting</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GMarkupParseContext</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">context</span><span class="symbol">)</span>
873
<span class="cbracket">{</span>
874
<span class="normal"> </span><span class="usertype">CounterData</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">data </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="glib-Simple-XML-Subset-Parser.html#g-markup-parse-context-pop">g_markup_parse_context_pop</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">context</span><span class="symbol">);</span>
875
<span class="normal"> </span><span class="type">int</span><span class="normal"> result</span><span class="symbol">;</span>
877
<span class="normal"> result </span><span class="symbol">=</span><span class="normal"> data</span><span class="symbol">-></span><span class="normal">tag_count</span><span class="symbol">;</span>
878
<span class="normal"> </span><span class="function"><a href="glib-Memory-Slices.html#g-slice-free">g_slice_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">CounterData</span><span class="symbol">,</span><span class="normal"> data</span><span class="symbol">);</span>
880
<span class="normal"> </span><span class="keyword">return</span><span class="normal"> result</span><span class="symbol">;</span>
881
<span class="cbracket">}</span></pre></td>
862
<td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">void</span>
863
<span class="function">start_counting</span> <span class="gtkdoc opt">(</span>GMarkupParseContext <span class="gtkdoc opt">*</span>context<span class="gtkdoc opt">)</span>
864
<span class="gtkdoc opt">{</span>
865
CounterData <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-Memory-Slices.html#g-slice-new">g_slice_new</a></span> <span class="gtkdoc opt">(</span>CounterData<span class="gtkdoc opt">);</span>
867
data<span class="gtkdoc opt">-></span>tag_count <span class="gtkdoc opt">=</span> <span class="number">0</span><span class="gtkdoc opt">;</span>
868
<span class="function"><a href="glib-Simple-XML-Subset-Parser.html#g-markup-parse-context-push">g_markup_parse_context_push</a></span> <span class="gtkdoc opt">(</span>context<span class="gtkdoc opt">, &</span>counter_subparser<span class="gtkdoc opt">,</span> data<span class="gtkdoc opt">);</span>
869
<span class="gtkdoc opt">}</span>
872
<span class="function">end_counting</span> <span class="gtkdoc opt">(</span>GMarkupParseContext <span class="gtkdoc opt">*</span>context<span class="gtkdoc opt">)</span>
873
<span class="gtkdoc opt">{</span>
874
CounterData <span class="gtkdoc opt">*</span>data <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-Simple-XML-Subset-Parser.html#g-markup-parse-context-pop">g_markup_parse_context_pop</a></span> <span class="gtkdoc opt">(</span>context<span class="gtkdoc opt">);</span>
875
<span class="gtkdoc kwb">int</span> result<span class="gtkdoc opt">;</span>
877
result <span class="gtkdoc opt">=</span> data<span class="gtkdoc opt">-></span>tag_count<span class="gtkdoc opt">;</span>
878
<span class="function"><a href="glib-Memory-Slices.html#g-slice-free">g_slice_free</a></span> <span class="gtkdoc opt">(</span>CounterData<span class="gtkdoc opt">,</span> data<span class="gtkdoc opt">);</span>
880
<span class="keyword">return</span> result<span class="gtkdoc opt">;</span>
881
<span class="gtkdoc opt">}</span></pre></td>
908
<td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal"> </span><span class="function">start_element</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">context</span><span class="symbol">,</span><span class="normal"> element_name</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">...)</span>
909
<span class="cbracket">{</span>
910
<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="function">strcmp</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">element_name</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"count-these"</span><span class="symbol">)</span><span class="normal"> </span><span class="symbol">==</span><span class="normal"> </span><span class="number">0</span><span class="symbol">)</span>
911
<span class="normal"> </span><span class="function">start_counting</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">context</span><span class="symbol">);</span>
913
<span class="normal"> </span><span class="comment">// else, handle other tags...</span>
914
<span class="cbracket">}</span>
916
<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span><span class="normal"> </span><span class="function">end_element</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">context</span><span class="symbol">,</span><span class="normal"> element_name</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">...)</span>
917
<span class="cbracket">{</span>
918
<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="function">strcmp</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">element_name</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"count-these"</span><span class="symbol">)</span><span class="normal"> </span><span class="symbol">==</span><span class="normal"> </span><span class="number">0</span><span class="symbol">)</span>
919
<span class="normal"> </span><span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Counted %d tags</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function">end_counting</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">context</span><span class="symbol">));</span>
921
<span class="normal"> </span><span class="comment">// else, handle other tags...</span>
922
<span class="cbracket">}</span></pre></td>
908
<td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static void</span> <span class="function">start_element</span> <span class="gtkdoc opt">(</span>context<span class="gtkdoc opt">,</span> element_name<span class="gtkdoc opt">, ...)</span>
909
<span class="gtkdoc opt">{</span>
910
<span class="keyword">if</span> <span class="gtkdoc opt">(</span><span class="function">strcmp</span> <span class="gtkdoc opt">(</span>element_name<span class="gtkdoc opt">,</span> <span class="string">"count-these"</span><span class="gtkdoc opt">) ==</span> <span class="number">0</span><span class="gtkdoc opt">)</span>
911
<span class="function">start_counting</span> <span class="gtkdoc opt">(</span>context<span class="gtkdoc opt">);</span>
913
<span class="gtkdoc slc">// else, handle other tags...</span>
914
<span class="gtkdoc opt">}</span>
916
<span class="gtkdoc kwb">static void</span> <span class="function">end_element</span> <span class="gtkdoc opt">(</span>context<span class="gtkdoc opt">,</span> element_name<span class="gtkdoc opt">, ...)</span>
917
<span class="gtkdoc opt">{</span>
918
<span class="keyword">if</span> <span class="gtkdoc opt">(</span><span class="function">strcmp</span> <span class="gtkdoc opt">(</span>element_name<span class="gtkdoc opt">,</span> <span class="string">"count-these"</span><span class="gtkdoc opt">) ==</span> <span class="number">0</span><span class="gtkdoc opt">)</span>
919
<span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">"Counted %d tags</span><span class="gtkdoc esc">\n</span><span class="string">"</span><span class="gtkdoc opt">,</span> <span class="function">end_counting</span> <span class="gtkdoc opt">(</span>context<span class="gtkdoc opt">));</span>
921
<span class="gtkdoc slc">// else, handle other tags...</span>
922
<span class="gtkdoc opt">}</span></pre></td>