mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-26 00:37:43 +03:00
Further enhancement for XPath streaming, consolidated with schemas usage
* pattern.c, xpath.c, include/libxml/pattern.h: Further enhancement for XPath streaming, consolidated with schemas usage of pattern.c. Added a new enum xmlPatternFlags. * doc/*, testapi.c, elfgcchack.h: updated to reflect new enum. * test/XPath/tests/mixedpat, test/XPath/docs/mixed, result/XPath/mixedpat: added regression test for problems reported in bug306348
This commit is contained in:
12
ChangeLog
12
ChangeLog
@@ -1,3 +1,15 @@
|
|||||||
|
Wed Jun 9 11:07:42 PDT 2005 William Brack <wbrack@mmm.com.hk>
|
||||||
|
|
||||||
|
* pattern.c, xpath.c, include/libxml/pattern.h: Further
|
||||||
|
enhancement for XPath streaming, consolidated with
|
||||||
|
schemas usage of pattern.c. Added a new enum
|
||||||
|
xmlPatternFlags.
|
||||||
|
* doc/*, testapi.c, elfgcchack.h: updated to reflect new
|
||||||
|
enum.
|
||||||
|
* test/XPath/tests/mixedpat, test/XPath/docs/mixed,
|
||||||
|
result/XPath/mixedpat: added regression test for problems
|
||||||
|
reported in bug306348
|
||||||
|
|
||||||
Thu Jun 9 16:51:31 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
|
Thu Jun 9 16:51:31 CEST 2005 Kasimier Buchcik <libxml2-cvs@cazic.net>
|
||||||
|
|
||||||
* xmlschemastypes.c: Changed non-prefixed QNames to be bound to a
|
* xmlschemastypes.c: Changed non-prefixed QNames to be bound to a
|
||||||
|
|||||||
@@ -856,10 +856,15 @@ A:link, A:visited, A:active { text-decoration: underline }
|
|||||||
<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
|
<a href="html/libxml-parserInternals.html#xmlSwitchEncoding">xmlSwitchEncoding</a><br />
|
||||||
<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
|
<a href="html/libxml-parserInternals.html#xmlSwitchInputEncoding">xmlSwitchInputEncoding</a><br />
|
||||||
<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
|
<a href="html/libxml-parserInternals.html#xmlSwitchToEncoding">xmlSwitchToEncoding</a><br />
|
||||||
</p><h2><a name="pattern" id="pattern">Module pattern</a>:</h2><p><a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
|
</p><h2><a name="pattern" id="pattern">Module pattern</a>:</h2><p><a href="html/libxml-pattern.html#XML_PATTERN_DEFAULT">XML_PATTERN_DEFAULT</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_XPATH">XML_PATTERN_XPATH</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_XSFIELD">XML_PATTERN_XSFIELD</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_XSSEL">XML_PATTERN_XSSEL</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
|
<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlFreeStreamCtxt">xmlFreeStreamCtxt</a><br />
|
<a href="html/libxml-pattern.html#xmlFreeStreamCtxt">xmlFreeStreamCtxt</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPattern">xmlPattern</a><br />
|
<a href="html/libxml-pattern.html#xmlPattern">xmlPattern</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#xmlPatternFlags">xmlPatternFlags</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
|
||||||
|
|||||||
@@ -1705,6 +1705,7 @@ A:link, A:visited, A:active { text-decoration: underline }
|
|||||||
</p><h2>Type xmlParserNodeInfoSeqPtr:</h2><p><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
|
</p><h2>Type xmlParserNodeInfoSeqPtr:</h2><p><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
|
||||||
<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
|
<a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
|
||||||
</p><h2>Type xmlParserSeverities:</h2><p><a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
|
</p><h2>Type xmlParserSeverities:</h2><p><a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
|
||||||
|
</p><h2>Type xmlPatternFlags:</h2><p><a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
|
||||||
</p><h2>Type xmlPatternPtr:</h2><p><a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
|
</p><h2>Type xmlPatternPtr:</h2><p><a href="html/libxml-pattern.html#xmlFreePattern">xmlFreePattern</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
|
<a href="html/libxml-pattern.html#xmlFreePatternList">xmlFreePatternList</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
|
||||||
|
|||||||
@@ -558,6 +558,10 @@ A:link, A:visited, A:active { text-decoration: underline }
|
|||||||
<a href="html/libxml-parser.html#XML_PARSE_SAX1">XML_PARSE_SAX1</a><br />
|
<a href="html/libxml-parser.html#XML_PARSE_SAX1">XML_PARSE_SAX1</a><br />
|
||||||
<a href="html/libxml-parser.html#XML_PARSE_UNKNOWN">XML_PARSE_UNKNOWN</a><br />
|
<a href="html/libxml-parser.html#XML_PARSE_UNKNOWN">XML_PARSE_UNKNOWN</a><br />
|
||||||
<a href="html/libxml-parser.html#XML_PARSE_XINCLUDE">XML_PARSE_XINCLUDE</a><br />
|
<a href="html/libxml-parser.html#XML_PARSE_XINCLUDE">XML_PARSE_XINCLUDE</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_DEFAULT">XML_PATTERN_DEFAULT</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_XPATH">XML_PATTERN_XPATH</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_XSFIELD">XML_PATTERN_XSFIELD</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#XML_PATTERN_XSSEL">XML_PATTERN_XSSEL</a><br />
|
||||||
<a href="html/libxml-tree.html#XML_PI_NODE">XML_PI_NODE</a><br />
|
<a href="html/libxml-tree.html#XML_PI_NODE">XML_PI_NODE</a><br />
|
||||||
<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ATTRIBUTE">XML_READER_TYPE_ATTRIBUTE</a><br />
|
<a href="html/libxml-xmlreader.html#XML_READER_TYPE_ATTRIBUTE">XML_READER_TYPE_ATTRIBUTE</a><br />
|
||||||
<a href="html/libxml-xmlreader.html#XML_READER_TYPE_CDATA">XML_READER_TYPE_CDATA</a><br />
|
<a href="html/libxml-xmlreader.html#XML_READER_TYPE_CDATA">XML_READER_TYPE_CDATA</a><br />
|
||||||
@@ -2336,6 +2340,7 @@ A:link, A:visited, A:active { text-decoration: underline }
|
|||||||
<a href="html/libxml-globals.html#xmlParserVersion">xmlParserVersion</a><br />
|
<a href="html/libxml-globals.html#xmlParserVersion">xmlParserVersion</a><br />
|
||||||
<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
|
<a href="html/libxml-xmlerror.html#xmlParserWarning">xmlParserWarning</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPattern">xmlPattern</a><br />
|
<a href="html/libxml-pattern.html#xmlPattern">xmlPattern</a><br />
|
||||||
|
<a href="html/libxml-pattern.html#xmlPatternFlags">xmlPatternFlags</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternFromRoot">xmlPatternFromRoot</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternGetStreamCtxt">xmlPatternGetStreamCtxt</a><br />
|
||||||
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
|
<a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -951,8 +951,13 @@
|
|||||||
<summary>pattern expression handling</summary>
|
<summary>pattern expression handling</summary>
|
||||||
<description>allows to compile and test pattern expressions for nodes either in a tree or based on a parser state. </description>
|
<description>allows to compile and test pattern expressions for nodes either in a tree or based on a parser state. </description>
|
||||||
<author>Daniel Veillard </author>
|
<author>Daniel Veillard </author>
|
||||||
<exports symbol='xmlStreamCtxt' type='typedef'/>
|
<exports symbol='XML_PATTERN_DEFAULT' type='enum'/>
|
||||||
|
<exports symbol='XML_PATTERN_XSFIELD' type='enum'/>
|
||||||
|
<exports symbol='XML_PATTERN_XSSEL' type='enum'/>
|
||||||
|
<exports symbol='XML_PATTERN_XPATH' type='enum'/>
|
||||||
<exports symbol='xmlStreamCtxtPtr' type='typedef'/>
|
<exports symbol='xmlStreamCtxtPtr' type='typedef'/>
|
||||||
|
<exports symbol='xmlPatternFlags' type='typedef'/>
|
||||||
|
<exports symbol='xmlStreamCtxt' type='typedef'/>
|
||||||
<exports symbol='xmlPattern' type='typedef'/>
|
<exports symbol='xmlPattern' type='typedef'/>
|
||||||
<exports symbol='xmlPatternPtr' type='typedef'/>
|
<exports symbol='xmlPatternPtr' type='typedef'/>
|
||||||
<exports symbol='xmlPatternGetStreamCtxt' type='function'/>
|
<exports symbol='xmlPatternGetStreamCtxt' type='function'/>
|
||||||
@@ -4739,6 +4744,10 @@
|
|||||||
<enum name='XML_PARSE_SAX1' file='parser' value='512' type='xmlParserOption' info='use the SAX1 interface internally'/>
|
<enum name='XML_PARSE_SAX1' file='parser' value='512' type='xmlParserOption' info='use the SAX1 interface internally'/>
|
||||||
<enum name='XML_PARSE_UNKNOWN' file='parser' value='0' type='xmlParserMode'/>
|
<enum name='XML_PARSE_UNKNOWN' file='parser' value='0' type='xmlParserMode'/>
|
||||||
<enum name='XML_PARSE_XINCLUDE' file='parser' value='1024' type='xmlParserOption' info='Implement XInclude substitition'/>
|
<enum name='XML_PARSE_XINCLUDE' file='parser' value='1024' type='xmlParserOption' info='Implement XInclude substitition'/>
|
||||||
|
<enum name='XML_PATTERN_DEFAULT' file='pattern' value='0' type='xmlPatternFlags' info='simple pattern match'/>
|
||||||
|
<enum name='XML_PATTERN_XPATH' file='pattern' value='1' type='xmlPatternFlags' info='standard XPath pattern'/>
|
||||||
|
<enum name='XML_PATTERN_XSFIELD' file='pattern' value='4' type='xmlPatternFlags' info=' XPath subset for schema field'/>
|
||||||
|
<enum name='XML_PATTERN_XSSEL' file='pattern' value='2' type='xmlPatternFlags' info='XPath subset for schema selector'/>
|
||||||
<enum name='XML_PI_NODE' file='tree' value='7' type='xmlElementType'/>
|
<enum name='XML_PI_NODE' file='tree' value='7' type='xmlElementType'/>
|
||||||
<enum name='XML_READER_TYPE_ATTRIBUTE' file='xmlreader' value='2' type='xmlReaderTypes'/>
|
<enum name='XML_READER_TYPE_ATTRIBUTE' file='xmlreader' value='2' type='xmlReaderTypes'/>
|
||||||
<enum name='XML_READER_TYPE_CDATA' file='xmlreader' value='4' type='xmlReaderTypes'/>
|
<enum name='XML_READER_TYPE_CDATA' file='xmlreader' value='4' type='xmlReaderTypes'/>
|
||||||
@@ -5942,6 +5951,7 @@ actually an xmlCharEncoding'/>
|
|||||||
<typedef name='xmlParserProperties' file='xmlreader' type='enum'/>
|
<typedef name='xmlParserProperties' file='xmlreader' type='enum'/>
|
||||||
<typedef name='xmlParserSeverities' file='xmlreader' type='enum'/>
|
<typedef name='xmlParserSeverities' file='xmlreader' type='enum'/>
|
||||||
<struct name='xmlPattern' file='pattern' type='struct _xmlPattern'/>
|
<struct name='xmlPattern' file='pattern' type='struct _xmlPattern'/>
|
||||||
|
<typedef name='xmlPatternFlags' file='pattern' type='enum'/>
|
||||||
<typedef name='xmlPatternPtr' file='pattern' type='xmlPattern *'/>
|
<typedef name='xmlPatternPtr' file='pattern' type='xmlPattern *'/>
|
||||||
<struct name='xmlRMutex' file='threads' type='struct _xmlRMutex'/>
|
<struct name='xmlRMutex' file='threads' type='struct _xmlRMutex'/>
|
||||||
<typedef name='xmlRMutexPtr' file='threads' type='xmlRMutex *'/>
|
<typedef name='xmlRMutexPtr' file='threads' type='xmlRMutex *'/>
|
||||||
@@ -11641,7 +11651,7 @@ actually an xmlCharEncoding'/>
|
|||||||
<return type='xmlPatternPtr' info='the compiled form of the pattern or NULL in case of error'/>
|
<return type='xmlPatternPtr' info='the compiled form of the pattern or NULL in case of error'/>
|
||||||
<arg name='pattern' type='const xmlChar *' info='the pattern to compile'/>
|
<arg name='pattern' type='const xmlChar *' info='the pattern to compile'/>
|
||||||
<arg name='dict' type='xmlDict *' info='an optional dictionary for interned strings'/>
|
<arg name='dict' type='xmlDict *' info='an optional dictionary for interned strings'/>
|
||||||
<arg name='flags' type='int' info='compilation flags, undefined yet'/>
|
<arg name='flags' type='xmlPatternFlags' info='compilation flags, undefined yet'/>
|
||||||
<arg name='namespaces' type='const xmlChar **' info='the prefix definitions, array of [URI, prefix] or NULL'/>
|
<arg name='namespaces' type='const xmlChar **' info='the prefix definitions, array of [URI, prefix] or NULL'/>
|
||||||
</function>
|
</function>
|
||||||
<function name='xmlPedanticParserDefault' file='parser' module='parserInternals'>
|
<function name='xmlPedanticParserDefault' file='parser' module='parserInternals'>
|
||||||
|
|||||||
@@ -552,6 +552,10 @@
|
|||||||
<reference name='XML_PARSE_SAX1' href='html/libxml-parser.html#XML_PARSE_SAX1'/>
|
<reference name='XML_PARSE_SAX1' href='html/libxml-parser.html#XML_PARSE_SAX1'/>
|
||||||
<reference name='XML_PARSE_UNKNOWN' href='html/libxml-parser.html#XML_PARSE_UNKNOWN'/>
|
<reference name='XML_PARSE_UNKNOWN' href='html/libxml-parser.html#XML_PARSE_UNKNOWN'/>
|
||||||
<reference name='XML_PARSE_XINCLUDE' href='html/libxml-parser.html#XML_PARSE_XINCLUDE'/>
|
<reference name='XML_PARSE_XINCLUDE' href='html/libxml-parser.html#XML_PARSE_XINCLUDE'/>
|
||||||
|
<reference name='XML_PATTERN_DEFAULT' href='html/libxml-pattern.html#XML_PATTERN_DEFAULT'/>
|
||||||
|
<reference name='XML_PATTERN_XPATH' href='html/libxml-pattern.html#XML_PATTERN_XPATH'/>
|
||||||
|
<reference name='XML_PATTERN_XSFIELD' href='html/libxml-pattern.html#XML_PATTERN_XSFIELD'/>
|
||||||
|
<reference name='XML_PATTERN_XSSEL' href='html/libxml-pattern.html#XML_PATTERN_XSSEL'/>
|
||||||
<reference name='XML_PI_NODE' href='html/libxml-tree.html#XML_PI_NODE'/>
|
<reference name='XML_PI_NODE' href='html/libxml-tree.html#XML_PI_NODE'/>
|
||||||
<reference name='XML_READER_TYPE_ATTRIBUTE' href='html/libxml-xmlreader.html#XML_READER_TYPE_ATTRIBUTE'/>
|
<reference name='XML_READER_TYPE_ATTRIBUTE' href='html/libxml-xmlreader.html#XML_READER_TYPE_ATTRIBUTE'/>
|
||||||
<reference name='XML_READER_TYPE_CDATA' href='html/libxml-xmlreader.html#XML_READER_TYPE_CDATA'/>
|
<reference name='XML_READER_TYPE_CDATA' href='html/libxml-xmlreader.html#XML_READER_TYPE_CDATA'/>
|
||||||
@@ -2330,6 +2334,7 @@
|
|||||||
<reference name='xmlParserVersion' href='html/libxml-globals.html#xmlParserVersion'/>
|
<reference name='xmlParserVersion' href='html/libxml-globals.html#xmlParserVersion'/>
|
||||||
<reference name='xmlParserWarning' href='html/libxml-xmlerror.html#xmlParserWarning'/>
|
<reference name='xmlParserWarning' href='html/libxml-xmlerror.html#xmlParserWarning'/>
|
||||||
<reference name='xmlPattern' href='html/libxml-pattern.html#xmlPattern'/>
|
<reference name='xmlPattern' href='html/libxml-pattern.html#xmlPattern'/>
|
||||||
|
<reference name='xmlPatternFlags' href='html/libxml-pattern.html#xmlPatternFlags'/>
|
||||||
<reference name='xmlPatternFromRoot' href='html/libxml-pattern.html#xmlPatternFromRoot'/>
|
<reference name='xmlPatternFromRoot' href='html/libxml-pattern.html#xmlPatternFromRoot'/>
|
||||||
<reference name='xmlPatternGetStreamCtxt' href='html/libxml-pattern.html#xmlPatternGetStreamCtxt'/>
|
<reference name='xmlPatternGetStreamCtxt' href='html/libxml-pattern.html#xmlPatternGetStreamCtxt'/>
|
||||||
<reference name='xmlPatternMatch' href='html/libxml-pattern.html#xmlPatternMatch'/>
|
<reference name='xmlPatternMatch' href='html/libxml-pattern.html#xmlPatternMatch'/>
|
||||||
@@ -3875,6 +3880,10 @@
|
|||||||
<ref name='XML_PARSE_SAX1'/>
|
<ref name='XML_PARSE_SAX1'/>
|
||||||
<ref name='XML_PARSE_UNKNOWN'/>
|
<ref name='XML_PARSE_UNKNOWN'/>
|
||||||
<ref name='XML_PARSE_XINCLUDE'/>
|
<ref name='XML_PARSE_XINCLUDE'/>
|
||||||
|
<ref name='XML_PATTERN_DEFAULT'/>
|
||||||
|
<ref name='XML_PATTERN_XPATH'/>
|
||||||
|
<ref name='XML_PATTERN_XSFIELD'/>
|
||||||
|
<ref name='XML_PATTERN_XSSEL'/>
|
||||||
<ref name='XML_PI_NODE'/>
|
<ref name='XML_PI_NODE'/>
|
||||||
<ref name='XML_READER_TYPE_ATTRIBUTE'/>
|
<ref name='XML_READER_TYPE_ATTRIBUTE'/>
|
||||||
<ref name='XML_READER_TYPE_CDATA'/>
|
<ref name='XML_READER_TYPE_CDATA'/>
|
||||||
@@ -5689,6 +5698,7 @@
|
|||||||
<ref name='xmlParserVersion'/>
|
<ref name='xmlParserVersion'/>
|
||||||
<ref name='xmlParserWarning'/>
|
<ref name='xmlParserWarning'/>
|
||||||
<ref name='xmlPattern'/>
|
<ref name='xmlPattern'/>
|
||||||
|
<ref name='xmlPatternFlags'/>
|
||||||
<ref name='xmlPatternFromRoot'/>
|
<ref name='xmlPatternFromRoot'/>
|
||||||
<ref name='xmlPatternGetStreamCtxt'/>
|
<ref name='xmlPatternGetStreamCtxt'/>
|
||||||
<ref name='xmlPatternMatch'/>
|
<ref name='xmlPatternMatch'/>
|
||||||
@@ -9345,6 +9355,9 @@
|
|||||||
<type name='xmlParserSeverities'>
|
<type name='xmlParserSeverities'>
|
||||||
<ref name='xmlTextReaderErrorFunc'/>
|
<ref name='xmlTextReaderErrorFunc'/>
|
||||||
</type>
|
</type>
|
||||||
|
<type name='xmlPatternFlags'>
|
||||||
|
<ref name='xmlPatterncompile'/>
|
||||||
|
</type>
|
||||||
<type name='xmlPatternPtr'>
|
<type name='xmlPatternPtr'>
|
||||||
<ref name='xmlFreePattern'/>
|
<ref name='xmlFreePattern'/>
|
||||||
<ref name='xmlFreePatternList'/>
|
<ref name='xmlFreePatternList'/>
|
||||||
@@ -10826,10 +10839,15 @@
|
|||||||
<ref name='xmlSwitchToEncoding'/>
|
<ref name='xmlSwitchToEncoding'/>
|
||||||
</file>
|
</file>
|
||||||
<file name='pattern'>
|
<file name='pattern'>
|
||||||
|
<ref name='XML_PATTERN_DEFAULT'/>
|
||||||
|
<ref name='XML_PATTERN_XPATH'/>
|
||||||
|
<ref name='XML_PATTERN_XSFIELD'/>
|
||||||
|
<ref name='XML_PATTERN_XSSEL'/>
|
||||||
<ref name='xmlFreePattern'/>
|
<ref name='xmlFreePattern'/>
|
||||||
<ref name='xmlFreePatternList'/>
|
<ref name='xmlFreePatternList'/>
|
||||||
<ref name='xmlFreeStreamCtxt'/>
|
<ref name='xmlFreeStreamCtxt'/>
|
||||||
<ref name='xmlPattern'/>
|
<ref name='xmlPattern'/>
|
||||||
|
<ref name='xmlPatternFlags'/>
|
||||||
<ref name='xmlPatternFromRoot'/>
|
<ref name='xmlPatternFromRoot'/>
|
||||||
<ref name='xmlPatternGetStreamCtxt'/>
|
<ref name='xmlPatternGetStreamCtxt'/>
|
||||||
<ref name='xmlPatternMatch'/>
|
<ref name='xmlPatternMatch'/>
|
||||||
|
|||||||
@@ -29,6 +29,20 @@ extern "C" {
|
|||||||
typedef struct _xmlPattern xmlPattern;
|
typedef struct _xmlPattern xmlPattern;
|
||||||
typedef xmlPattern *xmlPatternPtr;
|
typedef xmlPattern *xmlPatternPtr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xmlPatternFlags:
|
||||||
|
*
|
||||||
|
* This is the set of options affecting the behaviour of pattern
|
||||||
|
* matching with this module
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
XML_PATTERN_DEFAULT = 0, /* simple pattern match */
|
||||||
|
XML_PATTERN_XPATH = 1<<0, /* standard XPath pattern */
|
||||||
|
XML_PATTERN_XSSEL = 1<<1, /* XPath subset for schema selector */
|
||||||
|
XML_PATTERN_XSFIELD = 1<<2 /* XPath subset for schema field */
|
||||||
|
} xmlPatternFlags;
|
||||||
|
|
||||||
XMLPUBFUN void XMLCALL
|
XMLPUBFUN void XMLCALL
|
||||||
xmlFreePattern (xmlPatternPtr comp);
|
xmlFreePattern (xmlPatternPtr comp);
|
||||||
|
|
||||||
@@ -38,7 +52,7 @@ XMLPUBFUN void XMLCALL
|
|||||||
XMLPUBFUN xmlPatternPtr XMLCALL
|
XMLPUBFUN xmlPatternPtr XMLCALL
|
||||||
xmlPatterncompile (const xmlChar *pattern,
|
xmlPatterncompile (const xmlChar *pattern,
|
||||||
xmlDict *dict,
|
xmlDict *dict,
|
||||||
int flags,
|
xmlPatternFlags flags,
|
||||||
const xmlChar **namespaces);
|
const xmlChar **namespaces);
|
||||||
XMLPUBFUN int XMLCALL
|
XMLPUBFUN int XMLCALL
|
||||||
xmlPatternMatch (xmlPatternPtr comp,
|
xmlPatternMatch (xmlPatternPtr comp,
|
||||||
|
|||||||
73
pattern.c
73
pattern.c
@@ -48,7 +48,10 @@
|
|||||||
#define XML_STREAM_STEP_ROOT 4
|
#define XML_STREAM_STEP_ROOT 4
|
||||||
#define XML_STREAM_STEP_ATTR 8
|
#define XML_STREAM_STEP_ATTR 8
|
||||||
|
|
||||||
#define XML_PATTERN_NOTPATTERN 1
|
#define XML_PATTERN_NOTPATTERN (XML_PATTERN_XPATH | \
|
||||||
|
XML_PATTERN_XSSEL | \
|
||||||
|
XML_PATTERN_XSFIELD)
|
||||||
|
#define XML_PATTERN_XSD (XML_PATTERN_XSSEL | XML_PATTERN_XSFIELD)
|
||||||
|
|
||||||
typedef struct _xmlStreamStep xmlStreamStep;
|
typedef struct _xmlStreamStep xmlStreamStep;
|
||||||
typedef xmlStreamStep *xmlStreamStepPtr;
|
typedef xmlStreamStep *xmlStreamStepPtr;
|
||||||
@@ -119,16 +122,15 @@ struct _xmlStepOp {
|
|||||||
const xmlChar *value2;
|
const xmlChar *value2;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PAT_FROM_ROOT 1
|
#define PAT_FROM_ROOT (1<<8)
|
||||||
#define PAT_FROM_CUR 2
|
#define PAT_FROM_CUR (1<<9)
|
||||||
|
|
||||||
struct _xmlPattern {
|
struct _xmlPattern {
|
||||||
void *data; /* the associated template */
|
void *data; /* the associated template */
|
||||||
xmlDictPtr dict; /* the optional dictionary */
|
xmlDictPtr dict; /* the optional dictionary */
|
||||||
struct _xmlPattern *next; /* next pattern if | is used */
|
struct _xmlPattern *next; /* next pattern if | is used */
|
||||||
const xmlChar *pattern; /* the pattern */
|
const xmlChar *pattern; /* the pattern */
|
||||||
|
xmlPatternFlags flags; /* flags */
|
||||||
int flags; /* flags */
|
|
||||||
int nbStep;
|
int nbStep;
|
||||||
int maxStep;
|
int maxStep;
|
||||||
xmlStepOpPtr steps; /* ops for computation */
|
xmlStepOpPtr steps; /* ops for computation */
|
||||||
@@ -1047,8 +1049,8 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
|
|||||||
}
|
}
|
||||||
if (i >= ctxt->nb_namespaces) {
|
if (i >= ctxt->nb_namespaces) {
|
||||||
ERROR5(NULL, NULL, NULL,
|
ERROR5(NULL, NULL, NULL,
|
||||||
"xmlCompileStepPattern : no namespace bound to prefix %s\n",
|
"xmlCompileStepPattern : no namespace bound "
|
||||||
prefix);
|
"to prefix %s\n", prefix);
|
||||||
ctxt->error = 1;
|
ctxt->error = 1;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@@ -1122,9 +1124,10 @@ xmlCompilePathPattern(xmlPatParserContextPtr ctxt) {
|
|||||||
SKIP_BLANKS;
|
SKIP_BLANKS;
|
||||||
if (CUR == '/') {
|
if (CUR == '/') {
|
||||||
ctxt->comp->flags |= PAT_FROM_ROOT;
|
ctxt->comp->flags |= PAT_FROM_ROOT;
|
||||||
} else if (CUR == '.') {
|
} else if ((CUR == '.') || (ctxt->comp->flags & XML_PATTERN_NOTPATTERN)) {
|
||||||
ctxt->comp->flags |= PAT_FROM_CUR;
|
ctxt->comp->flags |= PAT_FROM_CUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((CUR == '/') && (NXT(1) == '/')) {
|
if ((CUR == '/') && (NXT(1) == '/')) {
|
||||||
PUSH(XML_OP_ANCESTOR, NULL, NULL);
|
PUSH(XML_OP_ANCESTOR, NULL, NULL);
|
||||||
NEXT;
|
NEXT;
|
||||||
@@ -1581,9 +1584,9 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
|
|||||||
*/
|
*/
|
||||||
if (comp->nbStep == 0) {
|
if (comp->nbStep == 0) {
|
||||||
/*
|
/*
|
||||||
* For non-pattern like evaluation like XML Schema IDCs,
|
* For non-pattern like evaluation like XML Schema IDCs
|
||||||
* this will match if we are at the first level only,
|
* or traditional XPath expressions, this will match if
|
||||||
* otherwise on every level.
|
* we are at the first level only, otherwise on every level.
|
||||||
*/
|
*/
|
||||||
if ((nodeType == XML_ELEMENT_NODE) &&
|
if ((nodeType == XML_ELEMENT_NODE) &&
|
||||||
(((stream->flags & XML_PATTERN_NOTPATTERN) == 0) ||
|
(((stream->flags & XML_PATTERN_NOTPATTERN) == 0) ||
|
||||||
@@ -1593,6 +1596,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
|
|||||||
stream->level++;
|
stream->level++;
|
||||||
goto stream_next;
|
goto stream_next;
|
||||||
}
|
}
|
||||||
|
if ((stream->flags & XML_PATTERN_NOTPATTERN) != 0) {
|
||||||
tmp = stream->level;
|
tmp = stream->level;
|
||||||
for (i = 0; i < comp->nbStep; i++) {
|
for (i = 0; i < comp->nbStep; i++) {
|
||||||
if (comp->steps[i].flags & XML_STREAM_STEP_DESC) {
|
if (comp->steps[i].flags & XML_STREAM_STEP_DESC) {
|
||||||
@@ -1600,11 +1604,12 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (comp->nbStep < tmp) {
|
if (comp->nbStep <= tmp) {
|
||||||
stream->level++;
|
stream->level++;
|
||||||
goto stream_next;
|
goto stream_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Check evolution of existing states
|
* Check evolution of existing states
|
||||||
*/
|
*/
|
||||||
@@ -1685,7 +1690,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
|
|||||||
*/
|
*/
|
||||||
desc = comp->steps[0].flags & XML_STREAM_STEP_DESC;
|
desc = comp->steps[0].flags & XML_STREAM_STEP_DESC;
|
||||||
if ( ((comp->steps[0].flags & XML_STREAM_STEP_ROOT) == 0) &&
|
if ( ((comp->steps[0].flags & XML_STREAM_STEP_ROOT) == 0) &&
|
||||||
( ((stream->flags & XML_PATTERN_NOTPATTERN) == 0) ||
|
( ((stream->flags & XML_PATTERN_XSD) == 0) ||
|
||||||
( (desc || (stream->level == 1)) )
|
( (desc || (stream->level == 1)) )
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@@ -1709,48 +1714,26 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
|
|||||||
if (!(comp->steps[0].flags & XML_STREAM_STEP_ROOT)) {
|
if (!(comp->steps[0].flags & XML_STREAM_STEP_ROOT)) {
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
match = 0;
|
|
||||||
if (comp->dict) {
|
|
||||||
if (comp->steps[0].name == NULL) {
|
if (comp->steps[0].name == NULL) {
|
||||||
if (comp->steps[0].ns == NULL)
|
if (comp->steps[0].ns == NULL)
|
||||||
match = 1;
|
match = 1;
|
||||||
else
|
else {
|
||||||
|
if (comp->dict)
|
||||||
match = (comp->steps[0].ns == ns);
|
match = (comp->steps[0].ns == ns);
|
||||||
} else {
|
|
||||||
if (stream->flags & XML_PATTERN_NOTPATTERN) {
|
|
||||||
/*
|
|
||||||
* Workaround for missing "self::node() on "foo".
|
|
||||||
*/
|
|
||||||
if (!desc) {
|
|
||||||
xmlStreamCtxtAddState(stream, 0, stream->level);
|
|
||||||
goto stream_next;
|
|
||||||
} else {
|
|
||||||
match = ((comp->steps[0].name == name) &&
|
|
||||||
(comp->steps[0].ns == ns));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
match = ((comp->steps[0].name == name) &&
|
|
||||||
(comp->steps[0].ns == ns));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (comp->steps[0].name == NULL) {
|
|
||||||
if (comp->steps[0].ns == NULL)
|
|
||||||
match = 1;
|
|
||||||
else
|
else
|
||||||
match = xmlStrEqual(comp->steps[0].ns, ns);
|
match = xmlStrEqual(comp->steps[0].ns, ns);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (stream->flags & XML_PATTERN_NOTPATTERN) {
|
if ((stream->flags & XML_PATTERN_XSD) && (!desc)) {
|
||||||
/*
|
/*
|
||||||
* Workaround for missing "self::node() on "foo".
|
* Workaround for missing "self::node() on "foo".
|
||||||
*/
|
*/
|
||||||
if (!desc) {
|
|
||||||
xmlStreamCtxtAddState(stream, 0, stream->level);
|
xmlStreamCtxtAddState(stream, 0, stream->level);
|
||||||
goto stream_next;
|
goto stream_next;
|
||||||
} else {
|
} else {
|
||||||
match = ((xmlStrEqual(comp->steps[0].name, name)) &&
|
if (comp->dict) {
|
||||||
(xmlStrEqual(comp->steps[0].ns, ns)));
|
match = ((comp->steps[0].name == name) &&
|
||||||
}
|
(comp->steps[0].ns == ns));
|
||||||
} else {
|
} else {
|
||||||
match = ((xmlStrEqual(comp->steps[0].name, name)) &&
|
match = ((xmlStrEqual(comp->steps[0].name, name)) &&
|
||||||
(xmlStrEqual(comp->steps[0].ns, ns)));
|
(xmlStrEqual(comp->steps[0].ns, ns)));
|
||||||
@@ -1873,7 +1856,7 @@ xmlStreamPop(xmlStreamCtxtPtr stream) {
|
|||||||
*/
|
*/
|
||||||
xmlPatternPtr
|
xmlPatternPtr
|
||||||
xmlPatterncompile(const xmlChar *pattern, xmlDict *dict,
|
xmlPatterncompile(const xmlChar *pattern, xmlDict *dict,
|
||||||
int flags ATTRIBUTE_UNUSED,
|
xmlPatternFlags flags,
|
||||||
const xmlChar **namespaces) {
|
const xmlChar **namespaces) {
|
||||||
xmlPatternPtr ret = NULL, cur;
|
xmlPatternPtr ret = NULL, cur;
|
||||||
xmlPatParserContextPtr ctxt = NULL;
|
xmlPatParserContextPtr ctxt = NULL;
|
||||||
@@ -1933,8 +1916,10 @@ xmlPatterncompile(const xmlChar *pattern, xmlDict *dict,
|
|||||||
xmlStreamCompile(cur);
|
xmlStreamCompile(cur);
|
||||||
if (xmlReversePattern(cur) < 0)
|
if (xmlReversePattern(cur) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
if (tmp != NULL)
|
if (tmp != NULL) {
|
||||||
xmlFree(tmp);
|
xmlFree(tmp);
|
||||||
|
tmp = NULL;
|
||||||
|
}
|
||||||
start = or;
|
start = or;
|
||||||
}
|
}
|
||||||
if (streamable == 0) {
|
if (streamable == 0) {
|
||||||
|
|||||||
101
result/XPath/tests/mixedpat
Normal file
101
result/XPath/tests/mixedpat
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
|
||||||
|
========================
|
||||||
|
Expression: s
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 1 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
|
||||||
|
========================
|
||||||
|
Expression: s|p1/s
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 2 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
2 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p1
|
||||||
|
|
||||||
|
========================
|
||||||
|
Expression: s|/root/p1/s
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 2 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
2 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p1
|
||||||
|
|
||||||
|
========================
|
||||||
|
Expression: /root/p1/s|s
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 2 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
2 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p1
|
||||||
|
|
||||||
|
========================
|
||||||
|
Expression: //s
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 3 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
2 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p1
|
||||||
|
3 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p2
|
||||||
|
|
||||||
|
========================
|
||||||
|
Expression: //s|p1
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 4 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
2 ELEMENT p1
|
||||||
|
3 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p1
|
||||||
|
4 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p2
|
||||||
|
|
||||||
|
========================
|
||||||
|
Expression: p1|//s
|
||||||
|
Object is a Node Set :
|
||||||
|
Set contains 4 nodes:
|
||||||
|
1 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=root
|
||||||
|
2 ELEMENT p1
|
||||||
|
3 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p1
|
||||||
|
4 ELEMENT s
|
||||||
|
ATTRIBUTE p
|
||||||
|
TEXT
|
||||||
|
content=p2
|
||||||
10
test/XPath/docs/mixed
Normal file
10
test/XPath/docs/mixed
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<root>
|
||||||
|
<s p="root"/>
|
||||||
|
<p1>
|
||||||
|
<s p="p1"/>
|
||||||
|
</p1>
|
||||||
|
<p2>
|
||||||
|
<s p="p2"/>
|
||||||
|
</p2>
|
||||||
|
</root>
|
||||||
7
test/XPath/tests/mixedpat
Normal file
7
test/XPath/tests/mixedpat
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
s
|
||||||
|
s|p1/s
|
||||||
|
s|/root/p1/s
|
||||||
|
/root/p1/s|s
|
||||||
|
//s
|
||||||
|
//s|p1
|
||||||
|
p1|//s
|
||||||
15
testapi.c
15
testapi.c
@@ -1053,6 +1053,21 @@ static void des_xmlElementTypeVal(int no ATTRIBUTE_UNUSED, xmlElementTypeVal val
|
|||||||
static void desret_xmlParserErrors(xmlParserErrors val ATTRIBUTE_UNUSED) {
|
static void desret_xmlParserErrors(xmlParserErrors val ATTRIBUTE_UNUSED) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LIBXML_PATTERN_ENABLED
|
||||||
|
#define gen_nb_xmlPatternFlags 4
|
||||||
|
static xmlPatternFlags gen_xmlPatternFlags(int no, int nr ATTRIBUTE_UNUSED) {
|
||||||
|
if (no == 1) return(XML_PATTERN_DEFAULT);
|
||||||
|
if (no == 2) return(XML_PATTERN_XPATH);
|
||||||
|
if (no == 3) return(XML_PATTERN_XSFIELD);
|
||||||
|
if (no == 4) return(XML_PATTERN_XSSEL);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void des_xmlPatternFlags(int no ATTRIBUTE_UNUSED, xmlPatternFlags val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef LIBXML_SCHEMAS_ENABLED
|
#ifdef LIBXML_SCHEMAS_ENABLED
|
||||||
#define gen_nb_xmlSchemaValType 4
|
#define gen_nb_xmlSchemaValType 4
|
||||||
static xmlSchemaValType gen_xmlSchemaValType(int no, int nr ATTRIBUTE_UNUSED) {
|
static xmlSchemaValType gen_xmlSchemaValType(int no, int nr ATTRIBUTE_UNUSED) {
|
||||||
|
|||||||
3
xpath.c
3
xpath.c
@@ -11322,7 +11322,8 @@ xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stream = xmlPatterncompile(str, dict, 0, &namespaces[0]);
|
stream = xmlPatterncompile(str, dict, XML_PATTERN_XPATH,
|
||||||
|
&namespaces[0]);
|
||||||
if ((stream != NULL) && (xmlPatternStreamable(stream) == 1)) {
|
if ((stream != NULL) && (xmlPatternStreamable(stream) == 1)) {
|
||||||
comp = xmlXPathNewCompExpr();
|
comp = xmlXPathNewCompExpr();
|
||||||
if (comp == NULL) {
|
if (comp == NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user