[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