DragonNest/Common/SVNLib/doc/svn__xml_8h-source.html
2024-12-19 09:48:26 +08:00

367 lines
39 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Subversion: svn_xml.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<form action="search.php" method="get">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><label>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</label></td>
<td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
</tr>
</table>
</form>
</li>
</ul>
</div>
<h1>svn_xml.h</h1><a href="svn__xml_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
<a name="l00002"></a>00002 <span class="comment"> * @copyright</span>
<a name="l00003"></a>00003 <span class="comment"> * ====================================================================</span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (c) 2000-2006 CollabNet. All rights reserved.</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> * This software is licensed as described in the file COPYING, which</span>
<a name="l00007"></a>00007 <span class="comment"> * you should have received as part of this distribution. The terms</span>
<a name="l00008"></a>00008 <span class="comment"> * are also available at http://subversion.tigris.org/license-1.html.</span>
<a name="l00009"></a>00009 <span class="comment"> * If newer versions of this license are posted there, you may use a</span>
<a name="l00010"></a>00010 <span class="comment"> * newer version instead, at your option.</span>
<a name="l00011"></a>00011 <span class="comment"> *</span>
<a name="l00012"></a>00012 <span class="comment"> * This software consists of voluntary contributions made by many</span>
<a name="l00013"></a>00013 <span class="comment"> * individuals. For exact contribution history, see the revision</span>
<a name="l00014"></a>00014 <span class="comment"> * history and logs, available at http://subversion.tigris.org/.</span>
<a name="l00015"></a>00015 <span class="comment"> * ====================================================================</span>
<a name="l00016"></a>00016 <span class="comment"> * @endcopyright</span>
<a name="l00017"></a>00017 <span class="comment"> *</span>
<a name="l00018"></a>00018 <span class="comment"> * @file svn_xml.h</span>
<a name="l00019"></a>00019 <span class="comment"> * @brief XML code shared by various Subversion libraries.</span>
<a name="l00020"></a>00020 <span class="comment"> */</span>
<a name="l00021"></a>00021
<a name="l00022"></a>00022
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef SVN_XML_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define SVN_XML_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;apr.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;apr_pools.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;apr_hash.h&gt;</span>
<a name="l00030"></a>00030
<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="svn__error_8h.html" title="Common exception handling for Subversion.">svn_error.h</a>"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="svn__string_8h.html" title="Counted-length strings for Subversion, plus some C string goodies.">svn_string.h</a>"</span>
<a name="l00033"></a>00033
<a name="l00034"></a>00034 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {
<a name="l00036"></a>00036 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00037"></a>00037 <span class="comment"></span>
<a name="l00038"></a>00038 <span class="comment">/** The namespace all Subversion XML uses. */</span>
<a name="l00039"></a>00039 <span class="preprocessor">#define SVN_XML_NAMESPACE "svn:"</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00041"></a>00041 <span class="comment">/** Used as style argument to svn_xml_make_open_tag() and friends. */</span>
<a name="l00042"></a><a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6">00042</a> <span class="keyword">enum</span> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6" title="Used as style argument to svn_xml_make_open_tag() and friends.">svn_xml_open_tag_style</a> {<span class="comment"></span>
<a name="l00043"></a>00043 <span class="comment"> /** &lt;tag ...&gt; */</span>
<a name="l00044"></a><a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6325a91b8ed7a386421fbc4efe6af7751">00044</a> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6325a91b8ed7a386421fbc4efe6af7751" title="&amp;lt;tag .">svn_xml_normal</a> = 1,
<a name="l00045"></a>00045 <span class="comment"></span>
<a name="l00046"></a>00046 <span class="comment"> /** &lt;tag ...&gt;, no cosmetic newline */</span>
<a name="l00047"></a><a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc61d0dae4e4332a29d0cb9e467239f50df">00047</a> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc61d0dae4e4332a29d0cb9e467239f50df" title="&amp;lt;tag .">svn_xml_protect_pcdata</a>,
<a name="l00048"></a>00048 <span class="comment"></span>
<a name="l00049"></a>00049 <span class="comment"> /** &lt;tag .../&gt; */</span>
<a name="l00050"></a><a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc66fdb5e284fb439d68e280d9235127eb5">00050</a> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc66fdb5e284fb439d68e280d9235127eb5" title="&amp;lt;tag .">svn_xml_self_closing</a>
<a name="l00051"></a>00051 };
<a name="l00052"></a>00052
<a name="l00053"></a>00053
<a name="l00054"></a>00054 <span class="comment"></span>
<a name="l00055"></a>00055 <span class="comment">/** Determine if a string of character @a data of length @a len is a</span>
<a name="l00056"></a>00056 <span class="comment"> * safe bet for use with the svn_xml_escape_* functions found in this</span>
<a name="l00057"></a>00057 <span class="comment"> * header.</span>
<a name="l00058"></a>00058 <span class="comment"> *</span>
<a name="l00059"></a>00059 <span class="comment"> * Return @c TRUE if it is, @c FALSE otherwise.</span>
<a name="l00060"></a>00060 <span class="comment"> *</span>
<a name="l00061"></a>00061 <span class="comment"> * Essentially, this function exists to determine whether or not</span>
<a name="l00062"></a>00062 <span class="comment"> * simply running a string of bytes through the Subversion XML escape</span>
<a name="l00063"></a>00063 <span class="comment"> * routines will produce legitimate XML. It should only be necessary</span>
<a name="l00064"></a>00064 <span class="comment"> * for data which might contain bytes that cannot be safely encoded</span>
<a name="l00065"></a>00065 <span class="comment"> * into XML (certain control characters, for example).</span>
<a name="l00066"></a>00066 <span class="comment"> */</span>
<a name="l00067"></a>00067 <a class="code" href="svn__types_8h.html#22b35baddc4213c688d1bb12feea1024" title="YABT: Yet Another Boolean Type.">svn_boolean_t</a> <a class="code" href="svn__xml_8h.html#4e1f838f920694c5d8fb572bb8f158f3" title="Determine if a string of character data of length len is a safe bet for use with...">svn_xml_is_xml_safe</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *data,
<a name="l00068"></a>00068 apr_size_t len);
<a name="l00069"></a>00069 <span class="comment"></span>
<a name="l00070"></a>00070 <span class="comment">/** Create or append in @a *outstr an xml-escaped version of @a string,</span>
<a name="l00071"></a>00071 <span class="comment"> * suitable for output as character data.</span>
<a name="l00072"></a>00072 <span class="comment"> *</span>
<a name="l00073"></a>00073 <span class="comment"> * If @a *outstr is @c NULL, store a new stringbuf, else append to the</span>
<a name="l00074"></a>00074 <span class="comment"> * existing stringbuf there.</span>
<a name="l00075"></a>00075 <span class="comment"> */</span>
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#791aebe273d97127c89d03e20d687fee" title="Create or append in *outstr an xml-escaped version of string, suitable for output...">svn_xml_escape_cdata_stringbuf</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **outstr,
<a name="l00077"></a>00077 <span class="keyword">const</span> <a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> *<span class="keywordtype">string</span>,
<a name="l00078"></a>00078 apr_pool_t *pool);
<a name="l00079"></a>00079 <span class="comment"></span>
<a name="l00080"></a>00080 <span class="comment">/** Same as svn_xml_escape_cdata_stringbuf(), but @a string is an</span>
<a name="l00081"></a>00081 <span class="comment"> * @c svn_string_t.</span>
<a name="l00082"></a>00082 <span class="comment"> */</span>
<a name="l00083"></a>00083 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#203e4a15ff06354096450be45a57ad63" title="Same as svn_xml_escape_cdata_stringbuf(), but string is an svn_string_t.">svn_xml_escape_cdata_string</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **outstr,
<a name="l00084"></a>00084 <span class="keyword">const</span> <a class="code" href="structsvn__string__t.html" title="A simple counted string.">svn_string_t</a> *<span class="keywordtype">string</span>,
<a name="l00085"></a>00085 apr_pool_t *pool);
<a name="l00086"></a>00086 <span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">/** Same as svn_xml_escape_cdata_stringbuf(), but @a string is a</span>
<a name="l00088"></a>00088 <span class="comment"> * NULL-terminated C string.</span>
<a name="l00089"></a>00089 <span class="comment"> */</span>
<a name="l00090"></a>00090 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#68b27ad8ed4dc71a4e94f00a3402f148" title="Same as svn_xml_escape_cdata_stringbuf(), but string is a NULL-terminated C string...">svn_xml_escape_cdata_cstring</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **outstr,
<a name="l00091"></a>00091 <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,
<a name="l00092"></a>00092 apr_pool_t *pool);
<a name="l00093"></a>00093
<a name="l00094"></a>00094 <span class="comment"></span>
<a name="l00095"></a>00095 <span class="comment">/** Create or append in @a *outstr an xml-escaped version of @a string,</span>
<a name="l00096"></a>00096 <span class="comment"> * suitable for output as an attribute value.</span>
<a name="l00097"></a>00097 <span class="comment"> *</span>
<a name="l00098"></a>00098 <span class="comment"> * If @a *outstr is @c NULL, store a new stringbuf, else append to the</span>
<a name="l00099"></a>00099 <span class="comment"> * existing stringbuf there.</span>
<a name="l00100"></a>00100 <span class="comment"> */</span>
<a name="l00101"></a>00101 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#dc69586dc0963c1e90141fda77041137" title="Create or append in *outstr an xml-escaped version of string, suitable for output...">svn_xml_escape_attr_stringbuf</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **outstr,
<a name="l00102"></a>00102 <span class="keyword">const</span> <a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> *<span class="keywordtype">string</span>,
<a name="l00103"></a>00103 apr_pool_t *pool);
<a name="l00104"></a>00104 <span class="comment"></span>
<a name="l00105"></a>00105 <span class="comment">/** Same as svn_xml_escape_attr_stringbuf(), but @a string is an</span>
<a name="l00106"></a>00106 <span class="comment"> * @c svn_string_t.</span>
<a name="l00107"></a>00107 <span class="comment"> */</span>
<a name="l00108"></a>00108 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#15cf427831b36add12969b80df9576f4" title="Same as svn_xml_escape_attr_stringbuf(), but string is an svn_string_t.">svn_xml_escape_attr_string</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **outstr,
<a name="l00109"></a>00109 <span class="keyword">const</span> <a class="code" href="structsvn__string__t.html" title="A simple counted string.">svn_string_t</a> *<span class="keywordtype">string</span>,
<a name="l00110"></a>00110 apr_pool_t *pool);
<a name="l00111"></a>00111 <span class="comment"></span>
<a name="l00112"></a>00112 <span class="comment">/** Same as svn_xml_escape_attr_stringbuf(), but @a string is a</span>
<a name="l00113"></a>00113 <span class="comment"> * NULL-terminated C string.</span>
<a name="l00114"></a>00114 <span class="comment"> */</span>
<a name="l00115"></a>00115 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#fddce35e71a70d50b652c9a2b61a7506" title="Same as svn_xml_escape_attr_stringbuf(), but string is a NULL-terminated C string...">svn_xml_escape_attr_cstring</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **outstr,
<a name="l00116"></a>00116 <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,
<a name="l00117"></a>00117 apr_pool_t *pool);
<a name="l00118"></a>00118 <span class="comment"></span>
<a name="l00119"></a>00119 <span class="comment">/**</span>
<a name="l00120"></a>00120 <span class="comment"> * Return UTF-8 string @a string if it contains no characters that are</span>
<a name="l00121"></a>00121 <span class="comment"> * unrepresentable in XML. Else, return a copy of @a string,</span>
<a name="l00122"></a>00122 <span class="comment"> * allocated in @a pool, with each unrepresentable character replaced</span>
<a name="l00123"></a>00123 <span class="comment"> * by "?\uuu", where "uuu" is the three-digit unsigned decimal value</span>
<a name="l00124"></a>00124 <span class="comment"> * of that character.</span>
<a name="l00125"></a>00125 <span class="comment"> *</span>
<a name="l00126"></a>00126 <span class="comment"> * Neither the input nor the output need be valid XML; however, the</span>
<a name="l00127"></a>00127 <span class="comment"> * output can always be safely XML-escaped.</span>
<a name="l00128"></a>00128 <span class="comment"> *</span>
<a name="l00129"></a>00129 <span class="comment"> * @note The current implementation treats all Unicode characters as</span>
<a name="l00130"></a>00130 <span class="comment"> * representable, except for most ASCII control characters (the</span>
<a name="l00131"></a>00131 <span class="comment"> * exceptions being CR, LF, and TAB, which are valid in XML). There</span>
<a name="l00132"></a>00132 <span class="comment"> * may be other UTF-8 characters that are invalid in XML; see</span>
<a name="l00133"></a>00133 <span class="comment"> * http://subversion.tigris.org/servlets/ReadMsg?list=dev&amp;msgNo=90591</span>
<a name="l00134"></a>00134 <span class="comment"> * and its thread for details.</span>
<a name="l00135"></a>00135 <span class="comment"> *</span>
<a name="l00136"></a>00136 <span class="comment"> * @since New in 1.2.</span>
<a name="l00137"></a>00137 <span class="comment"> */</span>
<a name="l00138"></a>00138 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="svn__xml_8h.html#c1070a1f742deb7666f1fa02a7794ec7" title="Return UTF-8 string string if it contains no characters that are unrepresentable...">svn_xml_fuzzy_escape</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,
<a name="l00139"></a>00139 apr_pool_t *pool);
<a name="l00140"></a>00140
<a name="l00141"></a>00141
<a name="l00142"></a>00142 <span class="comment">/*---------------------------------------------------------------*/</span>
<a name="l00143"></a>00143
<a name="l00144"></a>00144 <span class="comment">/* Generalized Subversion XML Parsing */</span>
<a name="l00145"></a>00145 <span class="comment"></span>
<a name="l00146"></a>00146 <span class="comment">/** A generalized Subversion XML parser object */</span>
<a name="l00147"></a><a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da">00147</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da" title="A generalized Subversion XML parser object.">svn_xml_parser_t</a> <a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da" title="A generalized Subversion XML parser object.">svn_xml_parser_t</a>;
<a name="l00148"></a>00148
<a name="l00149"></a>00149 <span class="keyword">typedef</span> void (*svn_xml_start_elem)(<span class="keywordtype">void</span> *baton,
<a name="l00150"></a>00150 <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00151"></a>00151 <span class="keyword">const</span> <span class="keywordtype">char</span> **atts);
<a name="l00152"></a>00152
<a name="l00153"></a>00153 <span class="keyword">typedef</span> void (*svn_xml_end_elem)(<span class="keywordtype">void</span> *baton, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);
<a name="l00154"></a>00154
<a name="l00155"></a>00155 <span class="comment">/* data is not NULL-terminated. */</span>
<a name="l00156"></a>00156 <span class="keyword">typedef</span> void (*svn_xml_char_data)(<span class="keywordtype">void</span> *baton,
<a name="l00157"></a>00157 <span class="keyword">const</span> <span class="keywordtype">char</span> *data,
<a name="l00158"></a>00158 apr_size_t len);
<a name="l00159"></a>00159
<a name="l00160"></a>00160 <span class="comment"></span>
<a name="l00161"></a>00161 <span class="comment">/** Create a general Subversion XML parser */</span>
<a name="l00162"></a>00162 <a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da" title="A generalized Subversion XML parser object.">svn_xml_parser_t</a> *<a class="code" href="svn__xml_8h.html#1f8f1b81e03621e15d5d4a3412ded766" title="Create a general Subversion XML parser.">svn_xml_make_parser</a>(<span class="keywordtype">void</span> *baton,
<a name="l00163"></a>00163 svn_xml_start_elem start_handler,
<a name="l00164"></a>00164 svn_xml_end_elem end_handler,
<a name="l00165"></a>00165 svn_xml_char_data data_handler,
<a name="l00166"></a>00166 apr_pool_t *pool);
<a name="l00167"></a>00167
<a name="l00168"></a>00168 <span class="comment"></span>
<a name="l00169"></a>00169 <span class="comment">/** Free a general Subversion XML parser */</span>
<a name="l00170"></a>00170 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#8aae298d9c4b403502fd03f8c3e491de" title="Free a general Subversion XML parser.">svn_xml_free_parser</a>(<a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da" title="A generalized Subversion XML parser object.">svn_xml_parser_t</a> *svn_parser);
<a name="l00171"></a>00171
<a name="l00172"></a>00172 <span class="comment"></span>
<a name="l00173"></a>00173 <span class="comment">/** Push @a len bytes of xml data in @a buf at @a svn_parser.</span>
<a name="l00174"></a>00174 <span class="comment"> *</span>
<a name="l00175"></a>00175 <span class="comment"> * If this is the final push, @a is_final must be set.</span>
<a name="l00176"></a>00176 <span class="comment"> *</span>
<a name="l00177"></a>00177 <span class="comment"> * An error will be returned if there was a syntax problem in the XML,</span>
<a name="l00178"></a>00178 <span class="comment"> * or if any of the callbacks set an error using</span>
<a name="l00179"></a>00179 <span class="comment"> * svn_xml_signal_bailout().</span>
<a name="l00180"></a>00180 <span class="comment"> *</span>
<a name="l00181"></a>00181 <span class="comment"> * If an error is returned, the @c svn_xml_parser_t will have been freed</span>
<a name="l00182"></a>00182 <span class="comment"> * automatically, so the caller should not call svn_xml_free_parser().</span>
<a name="l00183"></a>00183 <span class="comment"> */</span>
<a name="l00184"></a>00184 <a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *<a class="code" href="svn__xml_8h.html#57a5745b6c3a8a78f6cf96cec7322593" title="Push len bytes of xml data in buf at svn_parser.">svn_xml_parse</a>(<a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da" title="A generalized Subversion XML parser object.">svn_xml_parser_t</a> *svn_parser,
<a name="l00185"></a>00185 <span class="keyword">const</span> <span class="keywordtype">char</span> *buf,
<a name="l00186"></a>00186 apr_size_t len,
<a name="l00187"></a>00187 <a class="code" href="svn__types_8h.html#22b35baddc4213c688d1bb12feea1024" title="YABT: Yet Another Boolean Type.">svn_boolean_t</a> is_final);
<a name="l00188"></a>00188
<a name="l00189"></a>00189
<a name="l00190"></a>00190 <span class="comment"></span>
<a name="l00191"></a>00191 <span class="comment">/** The way to officially bail out of xml parsing.</span>
<a name="l00192"></a>00192 <span class="comment"> *</span>
<a name="l00193"></a>00193 <span class="comment"> * Store @a error in @a svn_parser and set all expat callbacks to @c NULL.</span>
<a name="l00194"></a>00194 <span class="comment"> */</span>
<a name="l00195"></a>00195 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#c42af5bd3d46c569326baf9fe3dee787" title="The way to officially bail out of xml parsing.">svn_xml_signal_bailout</a>(<a class="code" href="structsvn__error__t.html" title="Subversion error object.">svn_error_t</a> *error,
<a name="l00196"></a>00196 <a class="code" href="svn__xml_8h.html#05c7a03105de7809b8760f1425a888da" title="A generalized Subversion XML parser object.">svn_xml_parser_t</a> *svn_parser);
<a name="l00197"></a>00197
<a name="l00198"></a>00198
<a name="l00199"></a>00199
<a name="l00200"></a>00200
<a name="l00201"></a>00201
<a name="l00202"></a>00202 <span class="comment">/*** Helpers for dealing with the data Expat gives us. ***/</span>
<a name="l00203"></a>00203 <span class="comment"></span>
<a name="l00204"></a>00204 <span class="comment">/** Return the value associated with @a name in expat attribute array @a atts,</span>
<a name="l00205"></a>00205 <span class="comment"> * else return @c NULL.</span>
<a name="l00206"></a>00206 <span class="comment"> *</span>
<a name="l00207"></a>00207 <span class="comment"> * (There could never be a @c NULL attribute value in the XML,</span>
<a name="l00208"></a>00208 <span class="comment"> * although the empty string is possible.)</span>
<a name="l00209"></a>00209 <span class="comment"> *</span>
<a name="l00210"></a>00210 <span class="comment"> * @a atts is an array of c-strings: even-numbered indexes are names,</span>
<a name="l00211"></a>00211 <span class="comment"> * odd-numbers hold values. If all is right, it should end on an</span>
<a name="l00212"></a>00212 <span class="comment"> * even-numbered index pointing to @c NULL.</span>
<a name="l00213"></a>00213 <span class="comment"> */</span>
<a name="l00214"></a>00214 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="svn__xml_8h.html#07a589fa0a35a7550ac452225eacefa0" title="Return the value associated with name in expat attribute array atts, else return...">svn_xml_get_attr_value</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> **atts);
<a name="l00215"></a>00215
<a name="l00216"></a>00216
<a name="l00217"></a>00217
<a name="l00218"></a>00218 <span class="comment">/* Converting between Expat attribute lists and APR hash tables. */</span>
<a name="l00219"></a>00219
<a name="l00220"></a>00220 <span class="comment"></span>
<a name="l00221"></a>00221 <span class="comment">/** Create an attribute hash from @c va_list @a ap.</span>
<a name="l00222"></a>00222 <span class="comment"> *</span>
<a name="l00223"></a>00223 <span class="comment"> * The contents of @a ap are alternating &lt;tt&gt;char *&lt;/tt&gt; keys and</span>
<a name="l00224"></a>00224 <span class="comment"> * &lt;tt&gt;char *&lt;/tt&gt; vals, terminated by a final @c NULL falling on an</span>
<a name="l00225"></a>00225 <span class="comment"> * even index (zero-based).</span>
<a name="l00226"></a>00226 <span class="comment"> */</span>
<a name="l00227"></a>00227 apr_hash_t *<a class="code" href="svn__xml_8h.html#1914b5fb6cf24bb299ea171eddb681f7" title="Create an attribute hash from va_list ap.">svn_xml_ap_to_hash</a>(va_list ap, apr_pool_t *pool);
<a name="l00228"></a>00228 <span class="comment"></span>
<a name="l00229"></a>00229 <span class="comment">/** Create a hash that corresponds to Expat xml attribute list @a atts.</span>
<a name="l00230"></a>00230 <span class="comment"> *</span>
<a name="l00231"></a>00231 <span class="comment"> * The hash's keys and values are &lt;tt&gt;char *&lt;/tt&gt;'s.</span>
<a name="l00232"></a>00232 <span class="comment"> *</span>
<a name="l00233"></a>00233 <span class="comment"> * @a atts may be NULL, in which case you just get an empty hash back</span>
<a name="l00234"></a>00234 <span class="comment"> * (this makes life more convenient for some callers).</span>
<a name="l00235"></a>00235 <span class="comment"> */</span>
<a name="l00236"></a>00236 apr_hash_t *<a class="code" href="svn__xml_8h.html#46344c54e4a536df1cd0d6531e4a4934" title="Create a hash that corresponds to Expat xml attribute list atts.">svn_xml_make_att_hash</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> **atts, apr_pool_t *pool);
<a name="l00237"></a>00237
<a name="l00238"></a>00238 <span class="comment"></span>
<a name="l00239"></a>00239 <span class="comment">/** Like svn_xml_make_att_hash(), but takes a hash and preserves any</span>
<a name="l00240"></a>00240 <span class="comment"> * key/value pairs already in it.</span>
<a name="l00241"></a>00241 <span class="comment"> */</span>
<a name="l00242"></a>00242 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#078fe0e91283b54183cfafb69d733adf" title="Like svn_xml_make_att_hash(), but takes a hash and preserves any key/value pairs...">svn_xml_hash_atts_preserving</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> **atts,
<a name="l00243"></a>00243 apr_hash_t *ht,
<a name="l00244"></a>00244 apr_pool_t *pool);
<a name="l00245"></a>00245 <span class="comment"></span>
<a name="l00246"></a>00246 <span class="comment">/** Like svn_xml_make_att_hash(), but takes a hash and overwrites</span>
<a name="l00247"></a>00247 <span class="comment"> * key/value pairs already in it that also appear in @a atts.</span>
<a name="l00248"></a>00248 <span class="comment"> */</span>
<a name="l00249"></a>00249 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#388721068598aacbdf67e2f9304df67f" title="Like svn_xml_make_att_hash(), but takes a hash and overwrites key/value pairs already...">svn_xml_hash_atts_overlaying</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> **atts,
<a name="l00250"></a>00250 apr_hash_t *ht,
<a name="l00251"></a>00251 apr_pool_t *pool);
<a name="l00252"></a>00252
<a name="l00253"></a>00253
<a name="l00254"></a>00254
<a name="l00255"></a>00255 <span class="comment">/* Printing XML */</span>
<a name="l00256"></a>00256 <span class="comment"></span>
<a name="l00257"></a>00257 <span class="comment">/** Create an XML header and return it in @a *str.</span>
<a name="l00258"></a>00258 <span class="comment"> *</span>
<a name="l00259"></a>00259 <span class="comment"> * Fully-formed XML documents should start out with a header,</span>
<a name="l00260"></a>00260 <span class="comment"> * something like</span>
<a name="l00261"></a>00261 <span class="comment"> * &lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<a name="l00262"></a>00262 <span class="comment"> *</span>
<a name="l00263"></a>00263 <span class="comment"> * This function returns such a header. @a *str must either be @c NULL, in</span>
<a name="l00264"></a>00264 <span class="comment"> * which case a new string is created, or it must point to an existing</span>
<a name="l00265"></a>00265 <span class="comment"> * string to be appended to.</span>
<a name="l00266"></a>00266 <span class="comment"> */</span>
<a name="l00267"></a>00267 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#8952697d8cace5f4db1a05958007b04b" title="Create an XML header and return it in *str.">svn_xml_make_header</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **str, apr_pool_t *pool);
<a name="l00268"></a>00268
<a name="l00269"></a>00269 <span class="comment"></span>
<a name="l00270"></a>00270 <span class="comment">/** Store a new xml tag @a tagname in @a *str.</span>
<a name="l00271"></a>00271 <span class="comment"> *</span>
<a name="l00272"></a>00272 <span class="comment"> * If @a str is @c NULL, allocate @a *str in @a pool; else append the new</span>
<a name="l00273"></a>00273 <span class="comment"> * tag to @a *str, allocating in @a str's pool</span>
<a name="l00274"></a>00274 <span class="comment"> *</span>
<a name="l00275"></a>00275 <span class="comment"> * Take the tag's attributes from varargs, a NULL-terminated list of</span>
<a name="l00276"></a>00276 <span class="comment"> * alternating &lt;tt&gt;char *&lt;/tt&gt; key and &lt;tt&gt;char *&lt;/tt&gt; val. Do xml-escaping</span>
<a name="l00277"></a>00277 <span class="comment"> * on each val.</span>
<a name="l00278"></a>00278 <span class="comment"> *</span>
<a name="l00279"></a>00279 <span class="comment"> * @a style is one of the enumerated styles in @c svn_xml_open_tag_style.</span>
<a name="l00280"></a>00280 <span class="comment"> */</span>
<a name="l00281"></a>00281 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#93ba8523ad3d6063db280ff9d2db544b" title="Store a new xml tag tagname in *str.">svn_xml_make_open_tag</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **str,
<a name="l00282"></a>00282 apr_pool_t *pool,
<a name="l00283"></a>00283 <span class="keyword">enum</span> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6" title="Used as style argument to svn_xml_make_open_tag() and friends.">svn_xml_open_tag_style</a> style,
<a name="l00284"></a>00284 <span class="keyword">const</span> <span class="keywordtype">char</span> *tagname,
<a name="l00285"></a>00285 ...);
<a name="l00286"></a>00286
<a name="l00287"></a>00287 <span class="comment"></span>
<a name="l00288"></a>00288 <span class="comment">/** Like svn_xml_make_open_tag(), but takes a @c va_list instead of being</span>
<a name="l00289"></a>00289 <span class="comment"> * variadic.</span>
<a name="l00290"></a>00290 <span class="comment"> */</span>
<a name="l00291"></a>00291 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#b08389a7d146e02b1f2e2ce6ef49f243" title="Like svn_xml_make_open_tag(), but takes a va_list instead of being variadic.">svn_xml_make_open_tag_v</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **str,
<a name="l00292"></a>00292 apr_pool_t *pool,
<a name="l00293"></a>00293 <span class="keyword">enum</span> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6" title="Used as style argument to svn_xml_make_open_tag() and friends.">svn_xml_open_tag_style</a> style,
<a name="l00294"></a>00294 <span class="keyword">const</span> <span class="keywordtype">char</span> *tagname,
<a name="l00295"></a>00295 va_list ap);
<a name="l00296"></a>00296
<a name="l00297"></a>00297 <span class="comment"></span>
<a name="l00298"></a>00298 <span class="comment">/** Like svn_xml_make_open_tag(), but takes a hash table of attributes</span>
<a name="l00299"></a>00299 <span class="comment"> * (&lt;tt&gt;char *&lt;/tt&gt; keys mapping to &lt;tt&gt;char *&lt;/tt&gt; values).</span>
<a name="l00300"></a>00300 <span class="comment"> *</span>
<a name="l00301"></a>00301 <span class="comment"> * You might ask, why not just provide svn_xml_make_tag_atts()?</span>
<a name="l00302"></a>00302 <span class="comment"> *</span>
<a name="l00303"></a>00303 <span class="comment"> * The reason is that a hash table is the most natural interface to an</span>
<a name="l00304"></a>00304 <span class="comment"> * attribute list; the fact that Expat uses &lt;tt&gt;char **&lt;/tt&gt; atts instead is</span>
<a name="l00305"></a>00305 <span class="comment"> * certainly a defensible implementation decision, but since we'd have</span>
<a name="l00306"></a>00306 <span class="comment"> * to have special code to support such lists throughout Subversion</span>
<a name="l00307"></a>00307 <span class="comment"> * anyway, we might as well write that code for the natural interface</span>
<a name="l00308"></a>00308 <span class="comment"> * (hashes) and then convert in the few cases where conversion is</span>
<a name="l00309"></a>00309 <span class="comment"> * needed. Someday it might even be nice to change expat-lite to work</span>
<a name="l00310"></a>00310 <span class="comment"> * with apr hashes.</span>
<a name="l00311"></a>00311 <span class="comment"> *</span>
<a name="l00312"></a>00312 <span class="comment"> * See conversion functions svn_xml_make_att_hash() and</span>
<a name="l00313"></a>00313 <span class="comment"> * svn_xml_make_att_hash_overlaying(). Callers should use those to</span>
<a name="l00314"></a>00314 <span class="comment"> * convert Expat attr lists into hashes when necessary.</span>
<a name="l00315"></a>00315 <span class="comment"> */</span>
<a name="l00316"></a>00316 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#2505af51b37f20fc09716f7a09718794" title="Like svn_xml_make_open_tag(), but takes a hash table of attributes (char * keys mapping...">svn_xml_make_open_tag_hash</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **str,
<a name="l00317"></a>00317 apr_pool_t *pool,
<a name="l00318"></a>00318 <span class="keyword">enum</span> <a class="code" href="svn__xml_8h.html#96fab6557db17be482982e30d7becbc6" title="Used as style argument to svn_xml_make_open_tag() and friends.">svn_xml_open_tag_style</a> style,
<a name="l00319"></a>00319 <span class="keyword">const</span> <span class="keywordtype">char</span> *tagname,
<a name="l00320"></a>00320 apr_hash_t *attributes);
<a name="l00321"></a>00321
<a name="l00322"></a>00322 <span class="comment"></span>
<a name="l00323"></a>00323 <span class="comment">/** Makes a close tag. */</span>
<a name="l00324"></a>00324 <span class="keywordtype">void</span> <a class="code" href="svn__xml_8h.html#828f71e7c3e1c2550282651e2de529c3" title="Makes a close tag.">svn_xml_make_close_tag</a>(<a class="code" href="structsvn__stringbuf__t.html" title="A buffered string, capable of appending without an allocation and copy for each append...">svn_stringbuf_t</a> **str,
<a name="l00325"></a>00325 apr_pool_t *pool,
<a name="l00326"></a>00326 <span class="keyword">const</span> <span class="keywordtype">char</span> *tagname);
<a name="l00327"></a>00327
<a name="l00328"></a>00328
<a name="l00329"></a>00329
<a name="l00330"></a>00330 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00331"></a>00331 <span class="preprocessor"></span>}
<a name="l00332"></a>00332 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00333"></a>00333
<a name="l00334"></a>00334 <span class="preprocessor">#endif </span><span class="comment">/* SVN_XML_H */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Fri Oct 24 16:18:26 2008 for Subversion by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>