regenerated fixed a compilation problem some cleanups and one bug fix

* elfgcchack.h testapi.c doc/*: regenerated
* schematron.c: fixed a compilation problem
* xmlregexp.c include/libxml/xmlregexp.h: some cleanups and one bug fix
* result/expr/base: slightly changes the number of Cons.
Daniel
diff --git a/ChangeLog b/ChangeLog
index 162ed43..42746c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Aug 23 15:38:46 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+	* elfgcchack.h testapi.c doc/*: regenerated
+	* schematron.c: fixed a compilation problem
+	* xmlregexp.c include/libxml/xmlregexp.h: some cleanups and one bug fix
+	* result/expr/base: slightly changes the number of Cons.
+
 Mon Aug 22 23:19:50 CEST 2005 Daniel Veillard <daniel@veillard.com>
 
 	* elfgcchack.h testapi.c doc/*: rescanned code and rebuilt
diff --git a/doc/APIchunk10.html b/doc/APIchunk10.html
index e4dba2d..161b4ef 100644
--- a/doc/APIchunk10.html
+++ b/doc/APIchunk10.html
@@ -517,6 +517,10 @@
 </dd><dt>assuming</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
 <a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
 </dd><dt>assure</dt><dd><a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
+</dd><dt>atom</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 </dd><dt>atomic</dt><dd><a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
 <a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
 </dd><dt>attached</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
diff --git a/doc/APIchunk11.html b/doc/APIchunk11.html
index c1be632..763623f 100644
--- a/doc/APIchunk11.html
+++ b/doc/APIchunk11.html
@@ -187,6 +187,7 @@
 <a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>bound</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 </dd><dt>boundaries</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
 </dd><dt>boundary</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
diff --git a/doc/APIchunk12.html b/doc/APIchunk12.html
index a0771d6..e818ee7 100644
--- a/doc/APIchunk12.html
+++ b/doc/APIchunk12.html
@@ -237,7 +237,8 @@
 </dd><dt>childs</dt><dd><a href="html/libxml-tree.html#_xmlNode">_xmlNode</a><br />
 <a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
 <a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
-</dd><dt>choice</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
+</dd><dt>choice</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
 </dd><dt>choices</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
 </dd><dt>choices:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
@@ -598,6 +599,9 @@
 <a href="html/libxml-encoding.html#isolat1ToUTF8">isolat1ToUTF8</a><br />
 <a href="html/libxml-encoding.html#xmlCharEncodingInputFunc">xmlCharEncodingInputFunc</a><br />
 <a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaNewNOTATIONValue">xmlSchemaNewNOTATIONValue</a><br />
@@ -827,6 +831,9 @@
 </dd><dt>cshema</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FINAL_DEFAULT_LIST">XML_SCHEMAS_FINAL_DEFAULT_LIST</a><br />
 </dd><dt>ctrio</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
 <a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
+</dd><dt>ctxt</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 </dd><dt>ctxt-</dt><dd><a href="html/libxml-DOCBparser.html#docbFreeParserCtxt">docbFreeParserCtxt</a><br />
 <a href="html/libxml-HTMLparser.html#htmlFreeParserCtxt">htmlFreeParserCtxt</a><br />
 <a href="html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a><br />
diff --git a/doc/APIchunk14.html b/doc/APIchunk14.html
index 246bbbb..78fd4a8 100644
--- a/doc/APIchunk14.html
+++ b/doc/APIchunk14.html
@@ -302,6 +302,9 @@
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
 </dd><dt>evaulation</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
 </dd><dt>even</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
 <a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
diff --git a/doc/APIchunk17.html b/doc/APIchunk17.html
index afaff84..b797ffd 100644
--- a/doc/APIchunk17.html
+++ b/doc/APIchunk17.html
@@ -247,6 +247,7 @@
 <a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
 <a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
 </dd><dt>infinite</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
 </dd><dt>infinity</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathFloorFunction">xmlXPathFloorFunction</a><br />
diff --git a/doc/APIchunk18.html b/doc/APIchunk18.html
index 40fc604..f02b4d0 100644
--- a/doc/APIchunk18.html
+++ b/doc/APIchunk18.html
@@ -54,7 +54,10 @@
 <a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
-</dd></dl><h2>Letter k:</h2><dl><dt>keep</dt><dd><a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
+</dd></dl><h2>Letter k:</h2><dl><dt>keep</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
 <a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
 <a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
@@ -147,7 +150,9 @@
 <a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
 </dd><dt>least</dt><dd><a href="html/libxml-encoding.html#xmlDetectCharEncoding">xmlDetectCharEncoding</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
-</dd><dt>left</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
+</dd><dt>left</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
+<a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
 </dd><dt>legacy</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
 </dd><dt>len</dt><dd><a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
 <a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
@@ -166,6 +171,7 @@
 <a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
 </dd><dt>lenght</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
 <a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
 <a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
 <a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
@@ -384,6 +390,7 @@
 </dd><dt>lossless</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
+</dd><dt>lower</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 </dd><dt>lowercase</dt><dd><a href="html/libxml-HTMLparser.html#htmlTagLookup">htmlTagLookup</a><br />
 <a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
diff --git a/doc/APIchunk19.html b/doc/APIchunk19.html
index c618478..ade6618 100644
--- a/doc/APIchunk19.html
+++ b/doc/APIchunk19.html
@@ -149,7 +149,8 @@
 <a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
 <a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
-</dd><dt>means</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
+</dd><dt>means</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
 <a href="html/libxml-pattern.html#xmlStreamPush">xmlStreamPush</a><br />
 <a href="html/libxml-pattern.html#xmlStreamPushAttr">xmlStreamPushAttr</a><br />
diff --git a/doc/APIchunk21.html b/doc/APIchunk21.html
index fc2c376..6789f9d 100644
--- a/doc/APIchunk21.html
+++ b/doc/APIchunk21.html
@@ -190,6 +190,9 @@
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
 </dd><dt>operation</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathCompareValues">xmlXPathCompareValues</a><br />
diff --git a/doc/APIchunk23.html b/doc/APIchunk23.html
index 709c780..8b31bf5 100644
--- a/doc/APIchunk23.html
+++ b/doc/APIchunk23.html
@@ -73,6 +73,7 @@
 <a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
 <a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
 <a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
 <a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
@@ -328,6 +329,9 @@
 </dd><dt>release</dt><dd><a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
 <a href="html/libxml-parser.html#xmlClearParserCtxt">xmlClearParserCtxt</a><br />
 <a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
 </dd><dt>releases</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderClose">xmlTextReaderClose</a><br />
 </dd><dt>reliable</dt><dd><a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
@@ -379,6 +383,8 @@
 </dd><dt>removing</dt><dd><a href="html/libxml-catalog.html#xmlLoadSGMLSuperCatalog">xmlLoadSGMLSuperCatalog</a><br />
 </dd><dt>rename</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
 </dd><dt>repeat</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
+</dd><dt>repeated</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+</dd><dt>repetition</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 </dd><dt>replace</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_WHITESPACE_REPLACE">XML_SCHEMAS_TYPE_WHITESPACE_REPLACE</a><br />
 <a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
@@ -564,6 +570,8 @@
 </dd><dt>rewrite</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
 </dd><dt>right</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
 <a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
 <a href="html/libxml-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
 <a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
diff --git a/doc/APIchunk24.html b/doc/APIchunk24.html
index 49df4ba..0ce15fb 100644
--- a/doc/APIchunk24.html
+++ b/doc/APIchunk24.html
@@ -192,6 +192,7 @@
 <a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
 <a href="html/libxml-parser.html#xmlClearNodeInfoSeq">xmlClearNodeInfoSeq</a><br />
 <a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
 <a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
 <a href="html/libxml-parser.html#xmlInitNodeInfoSeq">xmlInitNodeInfoSeq</a><br />
diff --git a/doc/APIchunk25.html b/doc/APIchunk25.html
index 2715338..98b46a8 100644
--- a/doc/APIchunk25.html
+++ b/doc/APIchunk25.html
@@ -139,6 +139,8 @@
 <a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
 </dd><dt>them</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPRead">xmlNanoFTPRead</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
diff --git a/doc/APIchunk26.html b/doc/APIchunk26.html
index 1afcc10..cff6ce4 100644
--- a/doc/APIchunk26.html
+++ b/doc/APIchunk26.html
@@ -89,6 +89,9 @@
 <a href="html/libxml-xmlunicode.html#xmlUCSIsCat">xmlUCSIsCat</a><br />
 </dd><dt>unless</dt><dd><a href="html/libxml-HTMLparser.html#htmlSAXParseDoc">htmlSAXParseDoc</a><br />
 <a href="html/libxml-HTMLparser.html#htmlSAXParseFile">htmlSAXParseFile</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
 <a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
 <a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
@@ -172,7 +175,8 @@
 <a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
 </dd><dt>upon</dt><dd><a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
 <a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
-</dd><dt>upper</dt><dd><a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
+</dd><dt>upper</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
 </dd><dt>uri</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
 </dd><dt>usage</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
 <a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
diff --git a/doc/APIchunk4.html b/doc/APIchunk4.html
index 19521d9..b6dce45 100644
--- a/doc/APIchunk4.html
+++ b/doc/APIchunk4.html
@@ -298,6 +298,9 @@
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPContentLength">xmlNanoHTTPContentLength</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
diff --git a/doc/APIconstructors.html b/doc/APIconstructors.html
index d2c8907..9598e49 100644
--- a/doc/APIconstructors.html
+++ b/doc/APIconstructors.html
@@ -327,6 +327,10 @@
 <a href="html/libxml-xmlerror.html#xmlGetLastError">xmlGetLastError</a><br />
 </p><h2>Type xmlExpCtxtPtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
 </p><h2>Type xmlExpNodePtr:</h2><p><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
 </p><h2>Type xmlExternalEntityLoader:</h2><p><a href="html/libxml-parser.html#xmlGetExternalEntityLoader">xmlGetExternalEntityLoader</a><br />
diff --git a/doc/APIfiles.html b/doc/APIfiles.html
index 9bd4181..35c224b 100644
--- a/doc/APIfiles.html
+++ b/doc/APIfiles.html
@@ -2673,7 +2673,11 @@
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNode">xmlExpNode</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNodeType">xmlExpNodeType</a><br />
diff --git a/doc/APIfunctions.html b/doc/APIfunctions.html
index 639de11..9b25ce2 100644
--- a/doc/APIfunctions.html
+++ b/doc/APIfunctions.html
@@ -221,6 +221,7 @@
 <a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 <a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
 <a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
 <a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
 <a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
@@ -1268,6 +1269,10 @@
 <a href="html/libxml-xmlregexp.html#xmlExpFreeCtxt">xmlExpFreeCtxt</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
@@ -1278,6 +1283,9 @@
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpRef">xmlExpRef</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpStringDerive">xmlExpStringDerive</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpSubsume">xmlExpSubsume</a><br />
diff --git a/doc/APIsymbols.html b/doc/APIsymbols.html
index a3ec3a6..faa8d7b 100644
--- a/doc/APIsymbols.html
+++ b/doc/APIsymbols.html
@@ -1887,7 +1887,11 @@
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpIsNillable">xmlExpIsNillable</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpMaxToken">xmlExpMaxToken</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewOr">xmlExpNewOr</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewSeq">xmlExpNewSeq</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNode">xmlExpNode</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNodeType">xmlExpNodeType</a><br />
diff --git a/doc/html/libxml-xmlregexp.html b/doc/html/libxml-xmlregexp.html
index 5b2bd9d..761e105 100644
--- a/doc/html/libxml-xmlregexp.html
+++ b/doc/html/libxml-xmlregexp.html
@@ -33,7 +33,11 @@
 <pre class="programlisting">int	<a href="#xmlExpGetStart">xmlExpGetStart</a>			(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** list, <br />					 int len)</pre>
 <pre class="programlisting">int	<a href="#xmlExpIsNillable">xmlExpIsNillable</a>		(<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)</pre>
 <pre class="programlisting">int	<a href="#xmlExpMaxToken">xmlExpMaxToken</a>			(<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> expr)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	<a href="#xmlExpNewAtom">xmlExpNewAtom</a>		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 int len)</pre>
 <pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a>	<a href="#xmlExpNewCtxt">xmlExpNewCtxt</a>		(int maxNodes, <br />					 <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	<a href="#xmlExpNewOr">xmlExpNewOr</a>		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> left, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> right)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	<a href="#xmlExpNewRange">xmlExpNewRange</a>		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> subset, <br />					 int min, <br />					 int max)</pre>
+<pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	<a href="#xmlExpNewSeq">xmlExpNewSeq</a>		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> left, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> right)</pre>
 <pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	<a href="#xmlExpParse">xmlExpParse</a>		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 const char * expr)</pre>
 <pre class="programlisting">void	<a href="#xmlExpRef">xmlExpRef</a>			(<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)</pre>
 <pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	<a href="#xmlExpStringDerive">xmlExpStringDerive</a>	(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />					 int len)</pre>
@@ -89,9 +93,17 @@
 </pre><p>Finds if the expression is nillable, i.e. if it accepts the empty sequqnce</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if nillable, 0 if not and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpMaxToken" id="xmlExpMaxToken"></a>Function: xmlExpMaxToken</h3><pre class="programlisting">int	xmlExpMaxToken			(<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> expr)<br />
 </pre><p>Indicate the maximum number of input a expression can accept</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>expr</tt></i>:</span></td><td>a compiled expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the maximum length or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewCtxt" id="xmlExpNewCtxt"></a>Function: xmlExpNewCtxt</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a>	xmlExpNewCtxt		(int maxNodes, <br />					 <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>expr</tt></i>:</span></td><td>a compiled expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the maximum length or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewAtom" id="xmlExpNewAtom"></a>Function: xmlExpNewAtom</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	xmlExpNewAtom		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />					 int len)<br />
+</pre><p>Get the atom associated to this name from that context</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the atom name</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the atom name lenght in byte (or -1);</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewCtxt" id="xmlExpNewCtxt"></a>Function: xmlExpNewCtxt</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a>	xmlExpNewCtxt		(int maxNodes, <br />					 <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
 </pre><p>Creates a new context for manipulating expressions</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>maxNodes</tt></i>:</span></td><td>the maximum number of nodes</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>optional dictionnary to use internally</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpParse" id="xmlExpParse"></a>Function: xmlExpParse</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	xmlExpParse		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 const char * expr)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>maxNodes</tt></i>:</span></td><td>the maximum number of nodes</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>optional dictionnary to use internally</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewOr" id="xmlExpNewOr"></a>Function: xmlExpNewOr</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	xmlExpNewOr		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> left, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> right)<br />
+</pre><p>Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>left</tt></i>:</span></td><td>left expression</td></tr><tr><td><span class="term"><i><tt>right</tt></i>:</span></td><td>right expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewRange" id="xmlExpNewRange"></a>Function: xmlExpNewRange</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	xmlExpNewRange		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> subset, <br />					 int min, <br />					 int max)<br />
+</pre><p>Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>subset</tt></i>:</span></td><td>the expression to be repeated</td></tr><tr><td><span class="term"><i><tt>min</tt></i>:</span></td><td>the lower bound for the repetition</td></tr><tr><td><span class="term"><i><tt>max</tt></i>:</span></td><td>the upper bound for the repetition, -1 means infinite</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewSeq" id="xmlExpNewSeq"></a>Function: xmlExpNewSeq</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	xmlExpNewSeq		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> left, <br />					 <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> right)<br />
+</pre><p>Get the atom associated to the sequence @left , @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>left</tt></i>:</span></td><td>left expression</td></tr><tr><td><span class="term"><i><tt>right</tt></i>:</span></td><td>right expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpParse" id="xmlExpParse"></a>Function: xmlExpParse</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>	xmlExpParse		(<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />					 const char * expr)<br />
 </pre><p>Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expressions context</td></tr><tr><td><span class="term"><i><tt>expr</tt></i>:</span></td><td>the 0 terminated string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new expression or NULL in case of failure</td></tr></tbody></table></div><h3><a name="xmlExpRef" id="xmlExpRef"></a>Function: xmlExpRef</h3><pre class="programlisting">void	xmlExpRef			(<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)<br />
 </pre><p>Increase the <a href="libxml-SAX.html#reference">reference</a> count of the expression</p>
diff --git a/doc/libxml2-api.xml b/doc/libxml2-api.xml
index d527467..38c15fd 100644
--- a/doc/libxml2-api.xml
+++ b/doc/libxml2-api.xml
@@ -2852,6 +2852,7 @@
      <exports symbol='emptyExp' type='variable'/>
      <exports symbol='xmlRegExecCallbacks' type='function'/>
      <exports symbol='xmlRegNewExecCtxt' type='function'/>
+     <exports symbol='xmlExpNewOr' type='function'/>
      <exports symbol='xmlRegFreeRegexp' type='function'/>
      <exports symbol='xmlExpRef' type='function'/>
      <exports symbol='xmlRegexpIsDeterminist' type='function'/>
@@ -2865,17 +2866,20 @@
      <exports symbol='xmlExpIsNillable' type='function'/>
      <exports symbol='xmlExpFreeCtxt' type='function'/>
      <exports symbol='xmlExpDump' type='function'/>
+     <exports symbol='xmlExpNewSeq' type='function'/>
      <exports symbol='xmlExpFree' type='function'/>
+     <exports symbol='xmlExpNewRange' type='function'/>
      <exports symbol='xmlRegexpCompile' type='function'/>
+     <exports symbol='xmlExpNewAtom' type='function'/>
      <exports symbol='xmlRegexpExec' type='function'/>
-     <exports symbol='xmlExpMaxToken' type='function'/>
+     <exports symbol='xmlRegExecPushString' type='function'/>
      <exports symbol='xmlExpGetStart' type='function'/>
      <exports symbol='xmlExpParse' type='function'/>
      <exports symbol='xmlExpNewCtxt' type='function'/>
      <exports symbol='xmlExpGetLanguage' type='function'/>
      <exports symbol='xmlExpStringDerive' type='function'/>
      <exports symbol='xmlExpCtxtNbNodes' type='function'/>
-     <exports symbol='xmlRegExecPushString' type='function'/>
+     <exports symbol='xmlExpMaxToken' type='function'/>
      <exports symbol='xmlRegexpPrint' type='function'/>
     </file>
     <file name='xmlsave'>
@@ -9315,6 +9319,14 @@
       <return type='int' info='the maximum length or -1 in case of error'/>
       <arg name='expr' type='xmlExpNodePtr' info='a compiled expression'/>
     </function>
+    <function name='xmlExpNewAtom' file='xmlregexp' module='xmlregexp'>
+      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+      <info>Get the atom associated to this name from that context</info>
+      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+      <arg name='name' type='const xmlChar *' info='the atom name'/>
+      <arg name='len' type='int' info='the atom name lenght in byte (or -1);'/>
+    </function>
     <function name='xmlExpNewCtxt' file='xmlregexp' module='xmlregexp'>
       <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
       <info>Creates a new context for manipulating expressions</info>
@@ -9322,6 +9334,31 @@
       <arg name='maxNodes' type='int' info='the maximum number of nodes'/>
       <arg name='dict' type='xmlDictPtr' info='optional dictionnary to use internally'/>
     </function>
+    <function name='xmlExpNewOr' file='xmlregexp' module='xmlregexp'>
+      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+      <info>Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</info>
+      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+      <arg name='left' type='xmlExpNodePtr' info='left expression'/>
+      <arg name='right' type='xmlExpNodePtr' info='right expression'/>
+    </function>
+    <function name='xmlExpNewRange' file='xmlregexp' module='xmlregexp'>
+      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+      <info>Get the atom associated to the range (@subset){@min, @max} Note that @subset is consumed in the operation, to keep an handle on it use xmlExpRef() and use xmlExpFree() to release it, this is true even in case of failure (unless ctxt == NULL).</info>
+      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+      <arg name='subset' type='xmlExpNodePtr' info='the expression to be repeated'/>
+      <arg name='min' type='int' info='the lower bound for the repetition'/>
+      <arg name='max' type='int' info='the upper bound for the repetition, -1 means infinite'/>
+    </function>
+    <function name='xmlExpNewSeq' file='xmlregexp' module='xmlregexp'>
+      <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
+      <info>Get the atom associated to the sequence @left , @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</info>
+      <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
+      <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
+      <arg name='left' type='xmlExpNodePtr' info='left expression'/>
+      <arg name='right' type='xmlExpNodePtr' info='right expression'/>
+    </function>
     <function name='xmlExpParse' file='xmlregexp' module='xmlregexp'>
       <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
       <info>Minimal parser for regexps, it understand the following constructs - string terminals - choice operator | - sequence operator , - subexpressions (...) - usual cardinality operators + * and ? - finite sequences  { min, max } - infinite sequences { min, * } There is minimal checkings made especially no checking on strings values</info>
diff --git a/doc/libxml2-refs.xml b/doc/libxml2-refs.xml
index 95cf123..39b02c8 100644
--- a/doc/libxml2-refs.xml
+++ b/doc/libxml2-refs.xml
@@ -1881,7 +1881,11 @@
     <reference name='xmlExpGetStart' href='html/libxml-xmlregexp.html#xmlExpGetStart'/>
     <reference name='xmlExpIsNillable' href='html/libxml-xmlregexp.html#xmlExpIsNillable'/>
     <reference name='xmlExpMaxToken' href='html/libxml-xmlregexp.html#xmlExpMaxToken'/>
+    <reference name='xmlExpNewAtom' href='html/libxml-xmlregexp.html#xmlExpNewAtom'/>
     <reference name='xmlExpNewCtxt' href='html/libxml-xmlregexp.html#xmlExpNewCtxt'/>
+    <reference name='xmlExpNewOr' href='html/libxml-xmlregexp.html#xmlExpNewOr'/>
+    <reference name='xmlExpNewRange' href='html/libxml-xmlregexp.html#xmlExpNewRange'/>
+    <reference name='xmlExpNewSeq' href='html/libxml-xmlregexp.html#xmlExpNewSeq'/>
     <reference name='xmlExpNode' href='html/libxml-xmlregexp.html#xmlExpNode'/>
     <reference name='xmlExpNodePtr' href='html/libxml-xmlregexp.html#xmlExpNodePtr'/>
     <reference name='xmlExpNodeType' href='html/libxml-xmlregexp.html#xmlExpNodeType'/>
@@ -5346,7 +5350,11 @@
       <ref name='xmlExpGetStart'/>
       <ref name='xmlExpIsNillable'/>
       <ref name='xmlExpMaxToken'/>
+      <ref name='xmlExpNewAtom'/>
       <ref name='xmlExpNewCtxt'/>
+      <ref name='xmlExpNewOr'/>
+      <ref name='xmlExpNewRange'/>
+      <ref name='xmlExpNewSeq'/>
       <ref name='xmlExpNode'/>
       <ref name='xmlExpNodePtr'/>
       <ref name='xmlExpNodeType'/>
@@ -7280,6 +7288,10 @@
     </type>
     <type name='xmlExpNodePtr'>
       <ref name='xmlExpExpDerive'/>
+      <ref name='xmlExpNewAtom'/>
+      <ref name='xmlExpNewOr'/>
+      <ref name='xmlExpNewRange'/>
+      <ref name='xmlExpNewSeq'/>
       <ref name='xmlExpParse'/>
       <ref name='xmlExpStringDerive'/>
     </type>
@@ -7876,6 +7888,7 @@
       <ref name='xmlEncodeEntities'/>
       <ref name='xmlEncodeEntitiesReentrant'/>
       <ref name='xmlEncodeSpecialChars'/>
+      <ref name='xmlExpNewAtom'/>
       <ref name='xmlExpStringDerive'/>
       <ref name='xmlGetDocEntity'/>
       <ref name='xmlGetDtdAttrDesc'/>
@@ -9063,6 +9076,10 @@
       <ref name='xmlExpFreeCtxt'/>
       <ref name='xmlExpGetLanguage'/>
       <ref name='xmlExpGetStart'/>
+      <ref name='xmlExpNewAtom'/>
+      <ref name='xmlExpNewOr'/>
+      <ref name='xmlExpNewRange'/>
+      <ref name='xmlExpNewSeq'/>
       <ref name='xmlExpParse'/>
       <ref name='xmlExpStringDerive'/>
       <ref name='xmlExpSubsume'/>
@@ -9075,6 +9092,9 @@
       <ref name='xmlExpGetStart'/>
       <ref name='xmlExpIsNillable'/>
       <ref name='xmlExpMaxToken'/>
+      <ref name='xmlExpNewOr'/>
+      <ref name='xmlExpNewRange'/>
+      <ref name='xmlExpNewSeq'/>
       <ref name='xmlExpRef'/>
       <ref name='xmlExpStringDerive'/>
       <ref name='xmlExpSubsume'/>
@@ -13020,7 +13040,11 @@
       <ref name='xmlExpGetStart'/>
       <ref name='xmlExpIsNillable'/>
       <ref name='xmlExpMaxToken'/>
+      <ref name='xmlExpNewAtom'/>
       <ref name='xmlExpNewCtxt'/>
+      <ref name='xmlExpNewOr'/>
+      <ref name='xmlExpNewRange'/>
+      <ref name='xmlExpNewSeq'/>
       <ref name='xmlExpNode'/>
       <ref name='xmlExpNodePtr'/>
       <ref name='xmlExpNodeType'/>
@@ -16193,6 +16217,9 @@
           <ref name='xmlDocDumpFormatMemoryEnc'/>
           <ref name='xmlDocDumpMemoryEnc'/>
           <ref name='xmlDocFormatDump'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlHasNsProp'/>
           <ref name='xmlNanoHTTPContentLength'/>
           <ref name='xmlNodeDump'/>
@@ -18731,6 +18758,12 @@
         <word name='assure'>
           <ref name='xmlGetUTF8Char'/>
         </word>
+        <word name='atom'>
+          <ref name='xmlExpNewAtom'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
+        </word>
         <word name='atomic'>
           <ref name='xmlGcMemGet'/>
           <ref name='xmlGcMemSetup'/>
@@ -19018,6 +19051,9 @@
           <ref name='xmlXPathCompareValues'/>
           <ref name='xmlXPathIntersection'/>
         </word>
+        <word name='bound'>
+          <ref name='xmlExpNewRange'/>
+        </word>
         <word name='boundaries'>
           <ref name='_xmlParserCtxt'/>
           <ref name='xmlSearchNs'/>
@@ -19435,6 +19471,7 @@
           <ref name='xmlValidGetValidElements'/>
         </word>
         <word name='choice'>
+          <ref name='xmlExpNewOr'/>
           <ref name='xmlExpParse'/>
           <ref name='xmlParseElementChildrenContentDecl'/>
         </word>
@@ -19976,6 +20013,9 @@
           <ref name='isolat1ToUTF8'/>
           <ref name='xmlCharEncodingInputFunc'/>
           <ref name='xmlCharEncodingOutputFunc'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlGetUTF8Char'/>
           <ref name='xmlParserInputBufferRead'/>
           <ref name='xmlSchemaNewNOTATIONValue'/>
@@ -20294,6 +20334,11 @@
           <ref name='xmlXPathIsInf'/>
           <ref name='xmlXPathIsNaN'/>
         </word>
+        <word name='ctxt'>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
+        </word>
         <word name='ctxt-'>
           <ref name='docbFreeParserCtxt'/>
           <ref name='htmlFreeParserCtxt'/>
@@ -21541,6 +21586,9 @@
         </word>
         <word name='even'>
           <ref name='_xmlParserInput'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlNodeGetBase'/>
           <ref name='xmlParseBalancedChunkMemoryRecover'/>
           <ref name='xmlTextWriterFullEndElement'/>
@@ -23026,6 +23074,7 @@
         </word>
         <word name='infinite'>
           <ref name='xmlExpExpDerive'/>
+          <ref name='xmlExpNewRange'/>
           <ref name='xmlExpParse'/>
         </word>
         <word name='infinity'>
@@ -23459,6 +23508,9 @@
       </letter>
       <letter name='k'>
         <word name='keep'>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlParseURIRaw'/>
           <ref name='xmlParserInputGrow'/>
           <ref name='xmlSubstituteEntitiesDefault'/>
@@ -23596,6 +23648,8 @@
           <ref name='xmlXPathStringFunction'/>
         </word>
         <word name='left'>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlTextReaderGetRemainder'/>
         </word>
         <word name='legacy'>
@@ -23621,6 +23675,7 @@
         <word name='lenght'>
           <ref name='xmlExpGetLanguage'/>
           <ref name='xmlExpGetStart'/>
+          <ref name='xmlExpNewAtom'/>
           <ref name='xmlRelaxNGValidatePushCData'/>
           <ref name='xmlSplitQName3'/>
           <ref name='xmlValidatePushCData'/>
@@ -23938,6 +23993,9 @@
           <ref name='xmlOutputBufferWriteEscape'/>
           <ref name='xmlOutputBufferWriteString'/>
         </word>
+        <word name='lower'>
+          <ref name='xmlExpNewRange'/>
+        </word>
         <word name='lowercase'>
           <ref name='htmlTagLookup'/>
           <ref name='xmlIsRef'/>
@@ -24125,6 +24183,7 @@
           <ref name='xmlPatternMaxDepth'/>
         </word>
         <word name='means'>
+          <ref name='xmlExpNewRange'/>
           <ref name='xmlSetGenericErrorFunc'/>
           <ref name='xmlSetStructuredErrorFunc'/>
           <ref name='xmlStreamPush'/>
@@ -25022,6 +25081,9 @@
         <word name='operation'>
           <ref name='xmlBuildRelativeURI'/>
           <ref name='xmlCatalogSetDebug'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlTextReaderConstValue'/>
           <ref name='xmlXPathAddValues'/>
           <ref name='xmlXPathCompareValues'/>
@@ -26054,6 +26116,7 @@
           <ref name='xmlBufferAdd'/>
           <ref name='xmlBufferAddHead'/>
           <ref name='xmlCharInRange'/>
+          <ref name='xmlExpNewRange'/>
           <ref name='xmlTextReaderNormalization'/>
           <ref name='xmlXPathNodeSetItem'/>
           <ref name='xmlXPtrLocationSetAdd'/>
@@ -26435,6 +26498,9 @@
           <ref name='xmlClearNodeInfoSeq'/>
           <ref name='xmlClearParserCtxt'/>
           <ref name='xmlDecodeEntities'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlUnlockLibrary'/>
         </word>
         <word name='releases'>
@@ -26515,6 +26581,12 @@
         <word name='repeat'>
           <ref name='xmlXPathAxisFunc'/>
         </word>
+        <word name='repeated'>
+          <ref name='xmlExpNewRange'/>
+        </word>
+        <word name='repetition'>
+          <ref name='xmlExpNewRange'/>
+        </word>
         <word name='replace'>
           <ref name='XML_SCHEMAS_FACET_REPLACE'/>
           <ref name='XML_SCHEMAS_TYPE_WHITESPACE_REPLACE'/>
@@ -26793,6 +26865,8 @@
         <word name='right'>
           <ref name='xmlAutomataNewCounterTrans'/>
           <ref name='xmlCheckFilename'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlParseCharData'/>
           <ref name='xmlSetListDoc'/>
           <ref name='xmlSetTreeDoc'/>
@@ -27095,6 +27169,7 @@
           <ref name='xmlCharEncOutFunc'/>
           <ref name='xmlClearNodeInfoSeq'/>
           <ref name='xmlCurrentChar'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlExpParse'/>
           <ref name='xmlGetUTF8Char'/>
           <ref name='xmlInitNodeInfoSeq'/>
@@ -28256,6 +28331,8 @@
         <word name='them'>
           <ref name='xmlExpGetLanguage'/>
           <ref name='xmlExpGetStart'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlNanoFTPRead'/>
           <ref name='xmlNanoHTTPRead'/>
           <ref name='xmlParseAttValue'/>
@@ -28727,6 +28804,9 @@
         <word name='unless'>
           <ref name='htmlSAXParseDoc'/>
           <ref name='htmlSAXParseFile'/>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
           <ref name='xmlGetNoNsProp'/>
           <ref name='xmlGetNsProp'/>
           <ref name='xmlGetProp'/>
@@ -28846,6 +28926,7 @@
           <ref name='xlinkNodeDetectFunc'/>
         </word>
         <word name='upper'>
+          <ref name='xmlExpNewRange'/>
           <ref name='xmlIsRef'/>
         </word>
         <word name='uri'>
@@ -29641,6 +29722,16 @@
           <ref name='xmlCopyEnumeration'/>
           <ref name='xmlCreateEnumeration'/>
         </word>
+        <word name='xmlExpFree'>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
+        </word>
+        <word name='xmlExpRef'>
+          <ref name='xmlExpNewOr'/>
+          <ref name='xmlExpNewRange'/>
+          <ref name='xmlExpNewSeq'/>
+        </word>
         <word name='xmlExternalEntityLoader'>
           <ref name='xmlGetExternalEntityLoader'/>
         </word>
diff --git a/elfgcchack.h b/elfgcchack.h
index 93f9c7e..1a101fc 100644
--- a/elfgcchack.h
+++ b/elfgcchack.h
@@ -3229,6 +3229,18 @@
 
 #if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
 #ifdef bottom_xmlregexp
+#undef xmlExpNewAtom
+extern __typeof (xmlExpNewAtom) xmlExpNewAtom __attribute((alias("xmlExpNewAtom__internal_alias")));
+#else
+#ifndef xmlExpNewAtom
+extern __typeof (xmlExpNewAtom) xmlExpNewAtom__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewAtom xmlExpNewAtom__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
 #undef xmlExpNewCtxt
 extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt __attribute((alias("xmlExpNewCtxt__internal_alias")));
 #else
@@ -3241,6 +3253,42 @@
 
 #if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
 #ifdef bottom_xmlregexp
+#undef xmlExpNewOr
+extern __typeof (xmlExpNewOr) xmlExpNewOr __attribute((alias("xmlExpNewOr__internal_alias")));
+#else
+#ifndef xmlExpNewOr
+extern __typeof (xmlExpNewOr) xmlExpNewOr__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewOr xmlExpNewOr__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewRange
+extern __typeof (xmlExpNewRange) xmlExpNewRange __attribute((alias("xmlExpNewRange__internal_alias")));
+#else
+#ifndef xmlExpNewRange
+extern __typeof (xmlExpNewRange) xmlExpNewRange__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewRange xmlExpNewRange__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
+#undef xmlExpNewSeq
+extern __typeof (xmlExpNewSeq) xmlExpNewSeq __attribute((alias("xmlExpNewSeq__internal_alias")));
+#else
+#ifndef xmlExpNewSeq
+extern __typeof (xmlExpNewSeq) xmlExpNewSeq__internal_alias __attribute((visibility("hidden")));
+#define xmlExpNewSeq xmlExpNewSeq__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
+#ifdef bottom_xmlregexp
 #undef xmlExpParse
 extern __typeof (xmlExpParse) xmlExpParse __attribute((alias("xmlExpParse__internal_alias")));
 #else
diff --git a/include/libxml/xmlregexp.h b/include/libxml/xmlregexp.h
index 27a36f9..63ae1a0 100644
--- a/include/libxml/xmlregexp.h
+++ b/include/libxml/xmlregexp.h
@@ -156,6 +156,23 @@
 XMLPUBFUN xmlExpNodePtr XMLCALL
 			xmlExpParse	(xmlExpCtxtPtr ctxt,
 					 const char *expr);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewAtom	(xmlExpCtxtPtr ctxt,
+					 const xmlChar *name,
+					 int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewOr	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr left,
+					 xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewSeq	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr left,
+					 xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewRange	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr subset,
+					 int min,
+					 int max);
 /*
  * The really interesting APIs
  */
diff --git a/result/expr/base b/result/expr/base
index b682818..9ab0d19 100644
--- a/result/expr/base
+++ b/result/expr/base
@@ -82,4 +82,4 @@
 Subexp: a{0,101},(a|c) => reject, Ok
 Expression: (a, ((b, c, d){0,5}, e{0,1}){0,4}, f)
 Subexp: (a, b, (c, d, b){2,3}, c, d, e, f) => accept, Ok
-Ops: 0 nodes, 205 cons
+Ops: 0 nodes, 221 cons
diff --git a/schematron.c b/schematron.c
index 67f97b66..9cb5027 100644
--- a/schematron.c
+++ b/schematron.c
@@ -1724,4 +1724,6 @@
     return (0);
 }
 #endif
+#define bottom_schematron
+#include "elfgcchack.h"
 #endif /* LIBXML_SCHEMATRON_ENABLED */
diff --git a/testapi.c b/testapi.c
index 2f448a1..35358b5 100644
--- a/testapi.c
+++ b/testapi.c
@@ -32205,6 +32205,16 @@
 
 
 static int
+test_xmlExpNewAtom(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
 test_xmlExpNewCtxt(void) {
     int test_ret = 0;
 
@@ -32215,6 +32225,36 @@
 
 
 static int
+test_xmlExpNewOr(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
+test_xmlExpNewRange(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
+test_xmlExpNewSeq(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
 test_xmlExpParse(void) {
     int test_ret = 0;
 
@@ -32705,7 +32745,7 @@
 test_xmlregexp(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing xmlregexp : 16 of 26 functions ...\n");
+    if (quiet == 0) printf("Testing xmlregexp : 16 of 30 functions ...\n");
     test_ret += test_xmlExpCtxtNbCons();
     test_ret += test_xmlExpCtxtNbNodes();
     test_ret += test_xmlExpDump();
@@ -32714,7 +32754,11 @@
     test_ret += test_xmlExpGetStart();
     test_ret += test_xmlExpIsNillable();
     test_ret += test_xmlExpMaxToken();
+    test_ret += test_xmlExpNewAtom();
     test_ret += test_xmlExpNewCtxt();
+    test_ret += test_xmlExpNewOr();
+    test_ret += test_xmlExpNewRange();
+    test_ret += test_xmlExpNewSeq();
     test_ret += test_xmlExpParse();
     test_ret += test_xmlExpRef();
     test_ret += test_xmlExpStringDerive();
diff --git a/win32/libxml2.def.src b/win32/libxml2.def.src
index cf6cc4e..99efa4c 100644
--- a/win32/libxml2.def.src
+++ b/win32/libxml2.def.src
@@ -815,9 +815,21 @@
 xmlExpMaxToken
 #endif
 #ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewAtom
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
 xmlExpNewCtxt
 #endif
 #ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewOr
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewRange
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
+xmlExpNewSeq
+#endif
+#ifdef LIBXML_REGEXP_ENABLED
 xmlExpParse
 #endif
 #ifdef LIBXML_REGEXP_ENABLED
diff --git a/xmlregexp.c b/xmlregexp.c
index 3c975f0..45b917b 100644
--- a/xmlregexp.c
+++ b/xmlregexp.c
@@ -5957,13 +5957,6 @@
     if ((exp == NULL) || (exp == forbiddenExp) || (exp == emptyExp))
         return;
     exp->ref--;
-#if 0
-    if (exp->ref == 0) {
-        printf("Freeing "); PRINT_EXP(exp)
-    } else {
-        printf("Dec to %d ", exp->ref); PRINT_EXP(exp)
-    }
-#endif
     if (exp->ref == 0) {
         unsigned short key;
 
@@ -6007,6 +6000,97 @@
         exp->ref++;
 }
 
+/**
+ * xmlExpNewAtom:
+ * @ctxt: the expression context
+ * @name: the atom name
+ * @len: the atom name lenght in byte (or -1);
+ *
+ * Get the atom associated to this name from that context
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewAtom(xmlExpCtxtPtr ctxt, const xmlChar *name, int len) {
+    if ((ctxt == NULL) || (name == NULL))
+        return(NULL);
+    name = xmlDictLookup(ctxt->dict, name, len);
+    if (name == NULL)
+        return(NULL);
+    return(xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, name, 0, 0));
+}
+
+/**
+ * xmlExpNewOr:
+ * @ctxt: the expression context
+ * @left: left expression
+ * @right: right expression
+ *
+ * Get the atom associated to the choice @left | @right
+ * Note that @left and @right are consumed in the operation, to keep
+ * an handle on them use xmlExpRef() and use xmlExpFree() to release them,
+ * this is true even in case of failure (unless ctxt == NULL).
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewOr(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
+    if ((ctxt == NULL) || (left == NULL) || (right == NULL)) {
+        xmlExpFree(ctxt, left);
+        xmlExpFree(ctxt, right);
+        return(NULL);
+    }
+    return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, left, right, NULL, 0, 0));
+}
+
+/**
+ * xmlExpNewSeq:
+ * @ctxt: the expression context
+ * @left: left expression
+ * @right: right expression
+ *
+ * Get the atom associated to the sequence @left , @right
+ * Note that @left and @right are consumed in the operation, to keep
+ * an handle on them use xmlExpRef() and use xmlExpFree() to release them,
+ * this is true even in case of failure (unless ctxt == NULL).
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewSeq(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
+    if ((ctxt == NULL) || (left == NULL) || (right == NULL)) {
+        xmlExpFree(ctxt, left);
+        xmlExpFree(ctxt, right);
+        return(NULL);
+    }
+    return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, left, right, NULL, 0, 0));
+}
+
+/**
+ * xmlExpNewRange:
+ * @ctxt: the expression context
+ * @subset: the expression to be repeated
+ * @min: the lower bound for the repetition
+ * @max: the upper bound for the repetition, -1 means infinite
+ *
+ * Get the atom associated to the range (@subset){@min, @max}
+ * Note that @subset is consumed in the operation, to keep
+ * an handle on it use xmlExpRef() and use xmlExpFree() to release it,
+ * this is true even in case of failure (unless ctxt == NULL).
+ *
+ * Returns the node or NULL in case of error
+ */
+xmlExpNodePtr
+xmlExpNewRange(xmlExpCtxtPtr ctxt, xmlExpNodePtr subset, int min, int max) {
+    if ((ctxt == NULL) || (subset == NULL) || (min < 0) || (max < -1) ||
+        ((max >= 0) && (min > max))) {
+	xmlExpFree(ctxt, subset);
+        return(NULL);
+    }
+    return(xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, subset,
+                              NULL, NULL, min, max));
+}
+
 /************************************************************************
  *									*
  *		Public API for operations on expressions		*
@@ -6748,6 +6832,16 @@
 	}
     }
 
+#ifdef DEBUG_DERIV
+    printf("Fallback to derivative\n");
+#endif
+    if (IS_NILLABLE(sub)) {
+        if (!(IS_NILLABLE(exp)))
+	    return(forbiddenExp);
+	else
+	    ret = emptyExp;
+    } else
+	ret = NULL;
     /*
      * here the structured derivation made no progress so
      * we use the default token based derivation to force one more step
@@ -6761,9 +6855,6 @@
 	return(NULL);
     }
 
-#ifdef DEBUG_DERIV
-    printf("Fallback to derivative\n");
-#endif
     /*
      * collect all the strings accepted by the subexpression on input
      */
@@ -6780,7 +6871,6 @@
 	ctxt->tabSize *= 2;
 	len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
     }
-    ret = NULL;
     for (i = 0;i < len;i++) {
         tmp = xmlExpStringDeriveInt(ctxt, exp, tab[i]);
 	if ((tmp == NULL) || (tmp == forbiddenExp)) {