From 9d751504d56ee9591a5094d570555367d814c614 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Wed, 29 Oct 2003 13:21:47 +0000 Subject: [PATCH] applied patch from Steve Ball to make a schema parser from a preparsed * xmlschemas.c include/libxml/xmlschemas.h: applied patch from Steve Ball to make a schema parser from a preparsed document. Daniel --- ChangeLog | 5 +++++ include/libxml/xmlschemas.h | 2 ++ xmlschemas.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/ChangeLog b/ChangeLog index b50623e6..df97fd84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 29 14:20:14 CET 2003 Daniel Veillard + + * xmlschemas.c include/libxml/xmlschemas.h: applied patch + from Steve Ball to make a schema parser from a preparsed document. + Wed Oct 29 13:52:25 CET 2003 Daniel Veillard * tree.c: applied a couple of patches from Mark Lilback about text diff --git a/include/libxml/xmlschemas.h b/include/libxml/xmlschemas.h index 0e563f4e..ea469a33 100644 --- a/include/libxml/xmlschemas.h +++ b/include/libxml/xmlschemas.h @@ -77,6 +77,8 @@ XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL xmlSchemaNewMemParserCtxt (const char *buffer, int size); +XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL + xmlSchemaNewDocParserCtxt (xmlDocPtr doc); XMLPUBFUN void XMLCALL xmlSchemaFreeParserCtxt (xmlSchemaParserCtxtPtr ctxt); XMLPUBFUN void XMLCALL diff --git a/xmlschemas.c b/xmlschemas.c index 7c6c5fbe..f64c1b5e 100644 --- a/xmlschemas.c +++ b/xmlschemas.c @@ -3183,6 +3183,35 @@ xmlSchemaNewMemParserCtxt(const char *buffer, int size) return (ret); } +/** + * xmlSchemaNewDocParserCtxt: + * @doc: a preparsed document tree + * + * Create an XML Schemas parse context for that document. + * NB. The document may be modified during the parsing process. + * + * Returns the parser context or NULL in case of error + */ +xmlSchemaParserCtxtPtr +xmlSchemaNewDocParserCtxt(xmlDocPtr doc) +{ + xmlSchemaParserCtxtPtr ret; + + if (doc == NULL) + return (NULL); + + ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt)); + if (ret == NULL) { + xmlSchemaPErrMemory(NULL, "allocating schema parser context", + NULL); + return (NULL); + } + memset(ret, 0, sizeof(xmlSchemaParserCtxt)); + ret->doc = doc; + + return (ret); +} + /** * xmlSchemaFreeParserCtxt: * @ctxt: the schema parser context @@ -4224,6 +4253,8 @@ xmlSchemaParse(xmlSchemaParserCtxtPtr ctxt) } doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer"); ctxt->URL = xmlStrdup(BAD_CAST "in_memory_buffer"); + } else if (ctxt->doc != NULL) { + doc = ctxt->doc; } else { xmlSchemaPErr(ctxt, NULL, XML_SCHEMAP_NOTHING_TO_PARSE,