[Lxml-checkins] r46643 - lxml/trunk/src/lxml

scoder at codespeak.net scoder at codespeak.net
Sat Sep 15 17:31:14 CEST 2007


Author: scoder
Date: Sat Sep 15 17:31:13 2007
New Revision: 46643

Modified:
   lxml/trunk/src/lxml/parser.pxi
   lxml/trunk/src/lxml/xslt.pxi
Log:
cleanup: remove need for internal parsing functions in XSLT doc resolver code

Modified: lxml/trunk/src/lxml/parser.pxi
==============================================================================
--- lxml/trunk/src/lxml/parser.pxi	(original)
+++ lxml/trunk/src/lxml/parser.pxi	Sat Sep 15 17:31:13 2007
@@ -375,15 +375,11 @@
 cdef class _ParserContext(_ResolverContext)
 cdef class _TargetParserContext(_ParserContext)
 
-cdef extern from "etree_defs.h":
-    # macro call to 't->tp_new()' for fast instantiation
-    cdef _ParserContext NEW_PARSER_CONTEXT "PY_NEW" (object t)
-
 cdef class _ParserContext(_ResolverContext):
     cdef _ErrorLog _error_log
     cdef xmlparser.xmlParserCtxt* _c_ctxt
     def __init__(self):
-        _ResolverContext.__init__(self, _ResolverRegistry())
+        _ResolverContext.__init__(self, None)
         self._error_log = _ErrorLog()
 
     cdef _ParserContext _copy(self):
@@ -394,6 +390,7 @@
 
     cdef void _initParserContext(self, xmlparser.xmlParserCtxt* c_ctxt):
         self._c_ctxt = c_ctxt
+        c_ctxt._private = <void*>self
 
     cdef object _handleParseResult(self, _BaseParser parser,
                                    xmlDoc* result, filename):
@@ -513,7 +510,6 @@
 
         self._context = self._createContext(target)
         self._context._initParserContext(pctxt)
-        pctxt._private = <python.PyObject*>self._context
 
         if remove_comments:
             pctxt.sax.comment = NULL
@@ -983,50 +979,6 @@
                  resolve_entities, remove_comments,
                  remove_pis, target)
 
-cdef xmlDoc* _internalParseDoc(char* c_text, int options,
-                               _ResolverContext context) except NULL:
-    # internal parser function for XSLT
-    cdef xmlparser.xmlParserCtxt* pctxt
-    cdef xmlDoc* c_doc
-    cdef int recover
-    pctxt = xmlparser.xmlNewParserCtxt()
-    if pctxt is NULL:
-        return NULL
-    __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
-    pctxt._private = <python.PyObject*>context
-    c_doc = xmlparser.xmlCtxtReadDoc(
-        pctxt, c_text, NULL, NULL, options)
-    try:
-        recover = options & xmlparser.XML_PARSE_RECOVER
-        c_doc = _handleParseResult(None, pctxt, c_doc, None, recover)
-    finally:
-        xmlparser.xmlFreeParserCtxt(pctxt)
-    return c_doc
-
-cdef xmlDoc* _internalParseDocFromFile(char* c_filename, int options,
-                                       _ResolverContext context) except NULL:
-    # internal parser function for XSLT
-    cdef xmlparser.xmlParserCtxt* pctxt
-    cdef xmlDoc* c_doc
-    cdef int recover
-    pctxt = xmlparser.xmlNewParserCtxt()
-    if pctxt is NULL:
-        return NULL
-    __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
-    pctxt._private = <python.PyObject*>context
-    c_doc = xmlparser.xmlCtxtReadFile(
-        pctxt, c_filename, NULL, options)
-    try:
-        recover = options & xmlparser.XML_PARSE_RECOVER
-        if c_filename is NULL:
-            filename = None
-        else:
-            filename = c_filename
-        c_doc = _handleParseResult(None, pctxt, c_doc, filename, recover)
-    finally:
-        xmlparser.xmlFreeParserCtxt(pctxt)
-    return c_doc
-
 
 cdef XMLParser __DEFAULT_XML_PARSER
 __DEFAULT_XML_PARSER = XMLParser()

Modified: lxml/trunk/src/lxml/xslt.pxi
==============================================================================
--- lxml/trunk/src/lxml/xslt.pxi	(original)
+++ lxml/trunk/src/lxml/xslt.pxi	Sat Sep 15 17:31:13 2007
@@ -69,43 +69,44 @@
             return _copyDoc(c_doc, 1)
     return NULL
 
-cdef xmlDoc* _xslt_resolve_from_python(char* c_uri, void* context,
+cdef xmlDoc* _xslt_resolve_from_python(char* c_uri, void* c_context,
                                        int parse_options, int* error):
     # call the Python document loaders
-    cdef _XSLTResolverContext resolver_context
+    cdef _XSLTResolverContext context
     cdef _ResolverRegistry resolvers
     cdef _InputDocument doc_ref
     cdef xmlDoc* c_doc
 
     error[0] = 0
-    resolver_context = <_XSLTResolverContext>context
-    resolvers = resolver_context._resolvers
+    context = <_XSLTResolverContext>c_context
     try:
+        resolvers = context._resolvers
         uri = funicode(c_uri)
-        doc_ref = resolvers.resolve(uri, None, resolver_context)
+        doc_ref = resolvers.resolve(uri, None, context)
 
         c_doc = NULL
         if doc_ref is not None:
             if doc_ref._type == PARSER_DATA_STRING:
-                c_doc = _internalParseDoc(
-                    _cstr(doc_ref._data_bytes), parse_options,
-                    resolver_context)
+                c_doc = _parseDoc(
+                    doc_ref._data_bytes, None, context._parser)
             elif doc_ref._type == PARSER_DATA_FILENAME:
-                c_doc = _internalParseDocFromFile(
-                    _cstr(doc_ref._data_bytes), parse_options,
-                    resolver_context)
+                if python.PyUnicode_Check(doc_ref._data_bytes):
+                    filename = _utf8(doc_ref._data_bytes)
+                else:
+                    filename = doc_ref._data_bytes
+                c_doc = _parseDocFromFile(filename, context._parser)
             elif doc_ref._type == PARSER_DATA_FILE:
+                filename = _getFilenameForFile(doc_ref._file)
                 data = doc_ref._file.read()
-                c_doc = _internalParseDoc(
-                    _cstr(data), parse_options,
-                    resolver_context)
+                c_doc = _parseDoc(
+                    data, filename, context._parser)
             elif doc_ref._type == PARSER_DATA_EMPTY:
                 c_doc = _newDoc()
             if c_doc is not NULL and c_doc.URL is NULL:
                 c_doc.URL = tree.xmlStrdup(c_uri)
         return c_doc
     except:
-        resolver_context._store_raised()
+        context._store_raised()
         error[0] = 1
         return NULL
 


More information about the lxml-checkins mailing list