Skip to content

Commit 9a82b94

Browse files
committed
Introduce xmlNewSAXParserCtxt and htmlNewSAXParserCtxt
Add API functions to create a parser context with a custom SAX handler without having to mess with ctxt->sax manually.
1 parent 0a04db1 commit 9a82b94

16 files changed

+253
-176
lines changed

HTMLparser.c

+33-27
Original file line numberDiff line numberDiff line change
@@ -5028,17 +5028,17 @@ htmlParseDocument(htmlParserCtxtPtr ctxt) {
50285028
/**
50295029
* htmlInitParserCtxt:
50305030
* @ctxt: an HTML parser context
5031+
* @sax: SAX handler
5032+
* @userData: user data
50315033
*
50325034
* Initialize a parser context
50335035
*
50345036
* Returns 0 in case of success and -1 in case of error
50355037
*/
50365038

50375039
static int
5038-
htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
5040+
htmlInitParserCtxt(htmlParserCtxtPtr ctxt, htmlSAXHandler *sax, void *userData)
50395041
{
5040-
htmlSAXHandler *sax;
5041-
50425042
if (ctxt == NULL) return(-1);
50435043
memset(ctxt, 0, sizeof(htmlParserCtxt));
50445044

@@ -5047,12 +5047,21 @@ htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
50475047
htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
50485048
return(-1);
50495049
}
5050-
sax = (htmlSAXHandler *) xmlMalloc(sizeof(htmlSAXHandler));
5051-
if (sax == NULL) {
5050+
5051+
if (ctxt->sax == NULL)
5052+
ctxt->sax = (htmlSAXHandler *) xmlMalloc(sizeof(htmlSAXHandler));
5053+
if (ctxt->sax == NULL) {
50525054
htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
50535055
return(-1);
50545056
}
5055-
memset(sax, 0, sizeof(htmlSAXHandler));
5057+
if (sax == NULL) {
5058+
memset(ctxt->sax, 0, sizeof(htmlSAXHandler));
5059+
xmlSAX2InitHtmlDefaultSAXHandler(ctxt->sax);
5060+
ctxt->userData = ctxt;
5061+
} else {
5062+
memcpy(ctxt->sax, sax, sizeof(htmlSAXHandler));
5063+
ctxt->userData = userData ? userData : ctxt;
5064+
}
50565065

50575066
/* Allocate the Input stack */
50585067
ctxt->inputTab = (htmlParserInputPtr *)
@@ -5111,10 +5120,6 @@ htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
51115120
ctxt->nodeInfoNr = 0;
51125121
ctxt->nodeInfoMax = 0;
51135122

5114-
ctxt->sax = sax;
5115-
xmlSAX2InitHtmlDefaultSAXHandler(sax);
5116-
5117-
ctxt->userData = ctxt;
51185123
ctxt->myDoc = NULL;
51195124
ctxt->wellFormed = 1;
51205125
ctxt->replaceEntities = 0;
@@ -5157,6 +5162,22 @@ htmlFreeParserCtxt(htmlParserCtxtPtr ctxt)
51575162

51585163
htmlParserCtxtPtr
51595164
htmlNewParserCtxt(void)
5165+
{
5166+
return(htmlNewSAXParserCtxt(NULL, NULL));
5167+
}
5168+
5169+
/**
5170+
* htmlNewSAXParserCtxt:
5171+
* @sax: SAX handler
5172+
* @userData: user data
5173+
*
5174+
* Allocate and initialize a new parser context.
5175+
*
5176+
* Returns the htmlParserCtxtPtr or NULL in case of allocation error
5177+
*/
5178+
5179+
htmlParserCtxtPtr
5180+
htmlNewSAXParserCtxt(htmlSAXHandlerPtr sax, void *userData)
51605181
{
51615182
xmlParserCtxtPtr ctxt;
51625183

@@ -5166,7 +5187,7 @@ htmlNewParserCtxt(void)
51665187
return(NULL);
51675188
}
51685189
memset(ctxt, 0, sizeof(xmlParserCtxt));
5169-
if (htmlInitParserCtxt(ctxt) < 0) {
5190+
if (htmlInitParserCtxt(ctxt, sax, userData) < 0) {
51705191
htmlFreeParserCtxt(ctxt);
51715192
return(NULL);
51725193
}
@@ -6326,28 +6347,13 @@ htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, void *user_data,
63266347
buf = xmlAllocParserInputBuffer(enc);
63276348
if (buf == NULL) return(NULL);
63286349

6329-
ctxt = htmlNewParserCtxt();
6350+
ctxt = htmlNewSAXParserCtxt(sax, user_data);
63306351
if (ctxt == NULL) {
63316352
xmlFreeParserInputBuffer(buf);
63326353
return(NULL);
63336354
}
63346355
if(enc==XML_CHAR_ENCODING_UTF8 || buf->encoder)
63356356
ctxt->charset=XML_CHAR_ENCODING_UTF8;
6336-
if (sax != NULL) {
6337-
#ifdef LIBXML_SAX1_ENABLED
6338-
if (ctxt->sax != (xmlSAXHandlerPtr) &htmlDefaultSAXHandler)
6339-
#endif
6340-
xmlFree(ctxt->sax);
6341-
ctxt->sax = (htmlSAXHandlerPtr) xmlMalloc(sizeof(htmlSAXHandler));
6342-
if (ctxt->sax == NULL) {
6343-
xmlFree(buf);
6344-
xmlFree(ctxt);
6345-
return(NULL);
6346-
}
6347-
memcpy(ctxt->sax, sax, sizeof(htmlSAXHandler));
6348-
if (user_data != NULL)
6349-
ctxt->userData = user_data;
6350-
}
63516357
if (filename == NULL) {
63526358
ctxt->directory = NULL;
63536359
} else {

doc/devhelp/libxml2-HTMLparser.html

+5
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ <h2>Synopsis</h2>
7878
int <a href="#htmlIsAutoClosed">htmlIsAutoClosed</a> (<a href="libxml2-HTMLparser.html#htmlDocPtr">htmlDocPtr</a> doc, <br/> <a href="libxml2-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> elem);
7979
int <a href="#htmlIsScriptAttribute">htmlIsScriptAttribute</a> (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
8080
<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlNewParserCtxt">htmlNewParserCtxt</a> (void);
81+
<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlNewSAXParserCtxt">htmlNewSAXParserCtxt</a> (<a href="libxml2-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br/> void * userData);
8182
<a href="libxml2-HTMLparser.html#htmlStatus">htmlStatus</a> <a href="#htmlNodeStatus">htmlNodeStatus</a> (const <a href="libxml2-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> node, <br/> int legacy);
8283
int <a href="#htmlParseCharRef">htmlParseCharRef</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt);
8384
int <a href="#htmlParseChunk">htmlParseChunk</a> (<a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> ctxt, <br/> const char * chunk, <br/> int size, <br/> int terminate);
@@ -297,6 +298,10 @@ <h2>Details</h2>
297298
<div class="refsect2" lang="en"><h3><a name="htmlNewParserCtxt"/>htmlNewParserCtxt ()</h3><pre class="programlisting"><a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> htmlNewParserCtxt (void)<br/>
298299
</pre><p>Allocate and initialize a new parser context.</p>
299300
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> or NULL in case of allocation error</td></tr></tbody></table></div></div>
301+
<hr/>
302+
<div class="refsect2" lang="en"><h3><a name="htmlNewSAXParserCtxt"/>htmlNewSAXParserCtxt ()</h3><pre class="programlisting"><a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> htmlNewSAXParserCtxt (<a href="libxml2-HTMLparser.html#htmlSAXHandlerPtr">htmlSAXHandlerPtr</a> sax, <br/> void * userData)<br/>
303+
</pre><p>Allocate and initialize a new parser context.</p>
304+
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>SAX handler</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>user data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> or NULL in case of allocation error</td></tr></tbody></table></div></div>
300305
<hr/>
301306
<div class="refsect2" lang="en"><h3><a name="htmlNodeStatus"/>htmlNodeStatus ()</h3><pre class="programlisting"><a href="libxml2-HTMLparser.html#htmlStatus">htmlStatus</a> htmlNodeStatus (const <a href="libxml2-HTMLparser.html#htmlNodePtr">htmlNodePtr</a> node, <br/> int legacy)<br/>
302307
</pre><p>Checks whether the tree node is valid. Experimental (the author only uses the HTML enhancements in a SAX parser)</p>

doc/devhelp/libxml2-parser.html

+6-1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ <h2>Synopsis</h2>
119119
<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlLoadExternalEntity">xmlLoadExternalEntity</a> (const char * URL, <br/> const char * ID, <br/> <a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt);
120120
<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#xmlNewIOInputStream">xmlNewIOInputStream</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br/> <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br/> <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
121121
<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlNewParserCtxt">xmlNewParserCtxt</a> (void);
122+
<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> <a href="#xmlNewSAXParserCtxt">xmlNewSAXParserCtxt</a> (<a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/> void * userData);
122123
int <a href="#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/> <a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/> void * user_data, <br/> int depth, <br/> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * string, <br/> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> * lst);
123124
int <a href="#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a> (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/> <a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/> void * user_data, <br/> int depth, <br/> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * string, <br/> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> * lst, <br/> int recover);
124125
int <a href="#xmlParseChunk">xmlParseChunk</a> (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br/> const char * chunk, <br/> int size, <br/> int terminate);
@@ -580,7 +581,7 @@ <h2>Details</h2>
580581
</div>
581582
<hr/>
582583
<div class="refsect2" lang="en"><h3><a name="xmlInitParserCtxt"/>xmlInitParserCtxt ()</h3><pre class="programlisting">int xmlInitParserCtxt (<a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)<br/>
583-
</pre><p>Initialize a parser context</p>
584+
</pre><p>DEPRECATED: Internal function which will be made private in a future version. Initialize a parser context</p>
584585
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XML parser context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div></div>
585586
<hr/>
586587
<div class="refsect2" lang="en"><h3><a name="xmlKeepBlanksDefault"/>xmlKeepBlanksDefault ()</h3><pre class="programlisting">int xmlKeepBlanksDefault (int val)<br/>
@@ -602,6 +603,10 @@ <h2>Details</h2>
602603
<div class="refsect2" lang="en"><h3><a name="xmlNewParserCtxt"/>xmlNewParserCtxt ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlNewParserCtxt (void)<br/>
603604
</pre><p>Allocate and initialize a new parser context.</p>
604605
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> or NULL</td></tr></tbody></table></div></div>
606+
<hr/>
607+
<div class="refsect2" lang="en"><h3><a name="xmlNewSAXParserCtxt"/>xmlNewSAXParserCtxt ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> xmlNewSAXParserCtxt (<a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/> void * userData)<br/>
608+
</pre><p>Allocate and initialize a new SAX parser context.</p>
609+
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>SAX handler</td></tr><tr><td><span class="term"><i><tt>userData</tt></i>:</span></td><td>user data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> or NULL</td></tr></tbody></table></div></div>
605610
<hr/>
606611
<div class="refsect2" lang="en"><h3><a name="xmlParseBalancedChunkMemory"/>xmlParseBalancedChunkMemory ()</h3><pre class="programlisting">int xmlParseBalancedChunkMemory (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/> <a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/> void * user_data, <br/> int depth, <br/> const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * string, <br/> <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> * lst)<br/>
607612
</pre><p>Parse a well-balanced chunk of an XML document called by the parser The allowed sequence for the Well Balanced Chunk is the one defined by the content production in the XML grammar: [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*</p>

doc/devhelp/libxml2.devhelp2

+2
Original file line numberDiff line numberDiff line change
@@ -1997,6 +1997,7 @@
19971997
<keyword type="function" name="htmlNewDoc ()" link="libxml2-HTMLtree.html#htmlNewDoc"/>
19981998
<keyword type="function" name="htmlNewDocNoDtD ()" link="libxml2-HTMLtree.html#htmlNewDocNoDtD"/>
19991999
<keyword type="function" name="htmlNewParserCtxt ()" link="libxml2-HTMLparser.html#htmlNewParserCtxt"/>
2000+
<keyword type="function" name="htmlNewSAXParserCtxt ()" link="libxml2-HTMLparser.html#htmlNewSAXParserCtxt"/>
20002001
<keyword type="function" name="htmlNodeDump ()" link="libxml2-HTMLtree.html#htmlNodeDump"/>
20012002
<keyword type="function" name="htmlNodeDumpFile ()" link="libxml2-HTMLtree.html#htmlNodeDumpFile"/>
20022003
<keyword type="function" name="htmlNodeDumpFileFormat ()" link="libxml2-HTMLtree.html#htmlNodeDumpFileFormat"/>
@@ -2563,6 +2564,7 @@
25632564
<keyword type="function" name="xmlNewProp ()" link="libxml2-tree.html#xmlNewProp"/>
25642565
<keyword type="function" name="xmlNewRMutex ()" link="libxml2-threads.html#xmlNewRMutex"/>
25652566
<keyword type="function" name="xmlNewReference ()" link="libxml2-tree.html#xmlNewReference"/>
2567+
<keyword type="function" name="xmlNewSAXParserCtxt ()" link="libxml2-parser.html#xmlNewSAXParserCtxt"/>
25662568
<keyword type="function" name="xmlNewStringInputStream ()" link="libxml2-parserInternals.html#xmlNewStringInputStream"/>
25672569
<keyword type="function" name="xmlNewText ()" link="libxml2-tree.html#xmlNewText"/>
25682570
<keyword type="function" name="xmlNewTextChild ()" link="libxml2-tree.html#xmlNewTextChild"/>

doc/libxml2-api.xml

+16-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
<exports symbol='htmlIsAutoClosed' type='function'/>
6363
<exports symbol='htmlIsScriptAttribute' type='function'/>
6464
<exports symbol='htmlNewParserCtxt' type='function'/>
65+
<exports symbol='htmlNewSAXParserCtxt' type='function'/>
6566
<exports symbol='htmlNodeStatus' type='function'/>
6667
<exports symbol='htmlParseCharRef' type='function'/>
6768
<exports symbol='htmlParseChunk' type='function'/>
@@ -813,6 +814,7 @@
813814
<exports symbol='xmlLoadExternalEntity' type='function'/>
814815
<exports symbol='xmlNewIOInputStream' type='function'/>
815816
<exports symbol='xmlNewParserCtxt' type='function'/>
817+
<exports symbol='xmlNewSAXParserCtxt' type='function'/>
816818
<exports symbol='xmlParseBalancedChunkMemory' type='function'/>
817819
<exports symbol='xmlParseBalancedChunkMemoryRecover' type='function'/>
818820
<exports symbol='xmlParseChunk' type='function'/>
@@ -7628,6 +7630,13 @@ Could we use @subtypes for this?'/>
76287630
<info>Allocate and initialize a new parser context.</info>
76297631
<return type='htmlParserCtxtPtr' info='the htmlParserCtxtPtr or NULL in case of allocation error'/>
76307632
</function>
7633+
<function name='htmlNewSAXParserCtxt' file='HTMLparser' module='HTMLparser'>
7634+
<cond>defined(LIBXML_HTML_ENABLED)</cond>
7635+
<info>Allocate and initialize a new parser context.</info>
7636+
<return type='htmlParserCtxtPtr' info='the htmlParserCtxtPtr or NULL in case of allocation error'/>
7637+
<arg name='sax' type='htmlSAXHandlerPtr' info='SAX handler'/>
7638+
<arg name='userData' type='void *' info='user data'/>
7639+
</function>
76317640
<function name='htmlNodeDump' file='HTMLtree' module='HTMLtree'>
76327641
<cond>defined(LIBXML_HTML_ENABLED) &amp;&amp; defined(LIBXML_OUTPUT_ENABLED)</cond>
76337642
<info>Dump an HTML node, recursive behaviour,children are printed too, and formatting returns are added.</info>
@@ -10582,7 +10591,7 @@ Could we use @subtypes for this?'/>
1058210591
<return type='void'/>
1058310592
</function>
1058410593
<function name='xmlInitParserCtxt' file='parser' module='parserInternals'>
10585-
<info>Initialize a parser context</info>
10594+
<info>DEPRECATED: Internal function which will be made private in a future version. Initialize a parser context</info>
1058610595
<return type='int' info='0 in case of success and -1 in case of error'/>
1058710596
<arg name='ctxt' type='xmlParserCtxtPtr' info='an XML parser context'/>
1058810597
</function>
@@ -11596,6 +11605,12 @@ Could we use @subtypes for this?'/>
1159611605
<arg name='doc' type='const xmlDoc *' info='the document'/>
1159711606
<arg name='name' type='const xmlChar *' info='the reference name, or the reference string with &amp; and ;'/>
1159811607
</function>
11608+
<function name='xmlNewSAXParserCtxt' file='parser' module='parserInternals'>
11609+
<info>Allocate and initialize a new SAX parser context.</info>
11610+
<return type='xmlParserCtxtPtr' info='the xmlParserCtxtPtr or NULL'/>
11611+
<arg name='sax' type='xmlSAXHandlerPtr' info='SAX handler'/>
11612+
<arg name='userData' type='void *' info='user data'/>
11613+
</function>
1159911614
<function name='xmlNewStringInputStream' file='parserInternals' module='parserInternals'>
1160011615
<info>Create a new input stream based on a memory buffer.</info>
1160111616
<return type='xmlParserInputPtr' info='the new input stream'/>

doc/symbols.xml

+4
Original file line numberDiff line numberDiff line change
@@ -1771,4 +1771,8 @@
17711771
<release version="2.9.11">
17721772
<symbol file="xmlIO">xmlPopOutputCallbacks</symbol>
17731773
</release>
1774+
<release version="2.11.0">
1775+
<symbol file="HTMLparser">htmlNewSAXParserCtxt</symbol>
1776+
<symbol file="parser">xmlNewSAXParserCtxt</symbol>
1777+
</release>
17741778
</symbols>

include/libxml/HTMLparser.h

+3
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ XMLPUBFUN void XMLCALL
107107

108108
XMLPUBFUN htmlParserCtxtPtr XMLCALL
109109
htmlNewParserCtxt(void);
110+
XMLPUBFUN htmlParserCtxtPtr XMLCALL
111+
htmlNewSAXParserCtxt(htmlSAXHandlerPtr sax,
112+
void *userData);
110113

111114
XMLPUBFUN htmlParserCtxtPtr XMLCALL
112115
htmlCreateMemoryParserCtxt(const char *buffer,

include/libxml/parser.h

+2
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,8 @@ XMLPUBFUN int XMLCALL
975975
*/
976976
XMLPUBFUN xmlParserCtxtPtr XMLCALL
977977
xmlNewParserCtxt (void);
978+
XMLPUBFUN xmlParserCtxtPtr XMLCALL
979+
xmlNewSAXParserCtxt (xmlSAXHandlerPtr sax, void *userData);
978980
XMLPUBFUN int XMLCALL
979981
xmlInitParserCtxt (xmlParserCtxtPtr ctxt);
980982
XMLPUBFUN void XMLCALL

libxml2.syms

+10
Original file line numberDiff line numberDiff line change
@@ -2293,3 +2293,13 @@ LIBXML2_2.9.11 {
22932293
xmlPopOutputCallbacks;
22942294
} LIBXML2_2.9.8;
22952295

2296+
LIBXML2_2.11.0 {
2297+
global:
2298+
2299+
# HTMLparser
2300+
htmlNewSAXParserCtxt;
2301+
2302+
# parser
2303+
xmlNewSAXParserCtxt;
2304+
} LIBXML2_2.9.11;
2305+

0 commit comments

Comments
 (0)