from libc.string cimport const_char from lxml.includes.tree cimport ( xmlDoc, xmlNode, xmlDict, xmlDtd, xmlChar, const_xmlChar) from lxml.includes.tree cimport xmlInputReadCallback, xmlInputCloseCallback from lxml.includes.xmlerror cimport xmlError, xmlStructuredErrorFunc cdef extern from "libxml/parser.h": ctypedef void (*startElementNsSAX2Func)(void* ctx, const_xmlChar* localname, const_xmlChar* prefix, const_xmlChar* URI, int nb_namespaces, const_xmlChar** namespaces, int nb_attributes, int nb_defaulted, const_xmlChar** attributes) ctypedef void (*endElementNsSAX2Func)(void* ctx, const_xmlChar* localname, const_xmlChar* prefix, const_xmlChar* URI) ctypedef void (*startElementSAXFunc)(void* ctx, const_xmlChar* name, const_xmlChar** atts) ctypedef void (*endElementSAXFunc)(void* ctx, const_xmlChar* name) ctypedef void (*charactersSAXFunc)(void* ctx, const_xmlChar* ch, int len) ctypedef void (*cdataBlockSAXFunc)(void* ctx, const_xmlChar* value, int len) ctypedef void (*commentSAXFunc)(void* ctx, const_xmlChar* value) ctypedef void (*processingInstructionSAXFunc)(void* ctx, const_xmlChar* target, const_xmlChar* data) ctypedef void (*internalSubsetSAXFunc)(void* ctx, const_xmlChar* name, const_xmlChar* externalID, const_xmlChar* systemID) ctypedef void (*endDocumentSAXFunc)(void* ctx) ctypedef void (*startDocumentSAXFunc)(void* ctx) ctypedef void (*referenceSAXFunc)(void * ctx, const_xmlChar* name) cdef int XML_SAX2_MAGIC cdef extern from "libxml/tree.h": ctypedef struct xmlParserInput: int line int length const_xmlChar* base const_xmlChar* cur const_xmlChar* end const_char *filename ctypedef struct xmlParserInputBuffer: void* context xmlInputReadCallback readcallback xmlInputCloseCallback closecallback ctypedef struct xmlSAXHandlerV1: # same as xmlSAXHandler, but without namespaces pass ctypedef struct xmlSAXHandler: internalSubsetSAXFunc internalSubset startElementNsSAX2Func startElementNs endElementNsSAX2Func endElementNs startElementSAXFunc startElement endElementSAXFunc endElement charactersSAXFunc characters cdataBlockSAXFunc cdataBlock referenceSAXFunc reference commentSAXFunc comment processingInstructionSAXFunc processingInstruction startDocumentSAXFunc startDocument endDocumentSAXFunc endDocument int initialized xmlStructuredErrorFunc serror void* _private cdef extern from "libxml/SAX2.h" nogil: cdef void xmlSAX2StartDocument(void* ctxt) cdef extern from "libxml/xmlIO.h" nogil: cdef xmlParserInputBuffer* xmlAllocParserInputBuffer(int enc) cdef extern from "libxml/parser.h": cdef xmlDict* xmlDictCreate() nogil cdef xmlDict* xmlDictCreateSub(xmlDict* subdict) nogil cdef void xmlDictFree(xmlDict* sub) nogil cdef int xmlDictReference(xmlDict* dict) nogil cdef int XML_COMPLETE_ATTRS # SAX option for adding DTD default attributes cdef int XML_SKIP_IDS # SAX option for not building an XML ID dict ctypedef enum xmlParserInputState: XML_PARSER_EOF = -1 # nothing is to be parsed XML_PARSER_START = 0 # nothing has been parsed XML_PARSER_MISC = 1 # Misc* before int subset XML_PARSER_PI = 2 # Within a processing instruction XML_PARSER_DTD = 3 # within some DTD content XML_PARSER_PROLOG = 4 # Misc* after internal subset XML_PARSER_COMMENT = 5 # within a comment XML_PARSER_START_TAG = 6 # within a start tag XML_PARSER_CONTENT = 7 # within the content XML_PARSER_CDATA_SECTION = 8 # within a CDATA section XML_PARSER_END_TAG = 9 # within a closing tag XML_PARSER_ENTITY_DECL = 10 # within an entity declaration XML_PARSER_ENTITY_VALUE = 11 # within an entity value in a decl XML_PARSER_ATTRIBUTE_VALUE = 12 # within an attribute value XML_PARSER_SYSTEM_LITERAL = 13 # within a SYSTEM value XML_PARSER_EPILOG = 14 # the Misc* after the last end tag XML_PARSER_IGNORE = 15 # within an IGNORED section XML_PARSER_PUBLIC_LITERAL = 16 # within a PUBLIC value ctypedef struct xmlParserCtxt: xmlDoc* myDoc xmlDict* dict int dictNames void* _private bint wellFormed bint recovery int options bint disableSAX int errNo xmlParserInputState instate bint replaceEntities int loadsubset # != 0 if enabled, int value == why bint validate xmlError lastError xmlNode* node xmlSAXHandler* sax void* userData int* spaceTab int spaceMax bint html bint progressive int inSubset int charset xmlParserInput* input ctypedef enum xmlParserOption: XML_PARSE_RECOVER = 1 # recover on errors XML_PARSE_NOENT = 2 # substitute entities XML_PARSE_DTDLOAD = 4 # load the external subset XML_PARSE_DTDATTR = 8 # default DTD attributes XML_PARSE_DTDVALID = 16 # validate with the DTD XML_PARSE_NOERROR = 32 # suppress error reports XML_PARSE_NOWARNING = 64 # suppress warning reports XML_PARSE_PEDANTIC = 128 # pedantic error reporting XML_PARSE_NOBLANKS = 256 # remove blank nodes XML_PARSE_SAX1 = 512 # use the SAX1 interface internally XML_PARSE_XINCLUDE = 1024 # Implement XInclude substitution XML_PARSE_NONET = 2048 # Forbid network access XML_PARSE_NODICT = 4096 # Do not reuse the context dictionary XML_PARSE_NSCLEAN = 8192 # remove redundant namespaces declarations XML_PARSE_NOCDATA = 16384 # merge CDATA as text nodes XML_PARSE_NOXINCNODE = 32768 # do not generate XINCLUDE START/END nodes # libxml2 2.6.21+ only: XML_PARSE_COMPACT = 65536 # compact small text nodes # libxml2 2.7.0+ only: XML_PARSE_OLD10 = 131072 # parse using XML-1.0 before update 5 XML_PARSE_NOBASEFIX = 262144 # do not fixup XINCLUDE xml:base uris XML_PARSE_HUGE = 524288 # relax any hardcoded limit from the parser # libxml2 2.7.3+ only: XML_PARSE_OLDSAX = 1048576 # parse using SAX2 interface before 2.7.0 # libxml2 2.8.0+ only: XML_PARSE_IGNORE_ENC = 2097152 # ignore internal document encoding hint # libxml2 2.9.0+ only: XML_PARSE_BIG_LINES = 4194304 # Store big lines numbers in text PSVI field cdef void xmlInitParser() nogil cdef void xmlCleanupParser() nogil cdef int xmlLineNumbersDefault(int onoff) nogil cdef xmlParserCtxt* xmlNewParserCtxt() nogil cdef xmlParserInput* xmlNewIOInputStream(xmlParserCtxt* ctxt, xmlParserInputBuffer* input, int enc) nogil cdef int xmlCtxtUseOptions(xmlParserCtxt* ctxt, int options) nogil cdef void xmlFreeParserCtxt(xmlParserCtxt* ctxt) nogil cdef void xmlCtxtReset(xmlParserCtxt* ctxt) nogil cdef void xmlClearParserCtxt(xmlParserCtxt* ctxt) nogil cdef int xmlParseChunk(xmlParserCtxt* ctxt, char* chunk, int size, int terminate) nogil cdef xmlDoc* xmlCtxtReadDoc(xmlParserCtxt* ctxt, char* cur, char* URL, char* encoding, int options) nogil cdef xmlDoc* xmlCtxtReadFile(xmlParserCtxt* ctxt, char* filename, char* encoding, int options) nogil cdef xmlDoc* xmlCtxtReadIO(xmlParserCtxt* ctxt, xmlInputReadCallback ioread, xmlInputCloseCallback ioclose, void* ioctx, char* URL, char* encoding, int options) nogil cdef xmlDoc* xmlCtxtReadMemory(xmlParserCtxt* ctxt, char* buffer, int size, char* filename, const_char* encoding, int options) nogil # iterparse: cdef xmlParserCtxt* xmlCreatePushParserCtxt(xmlSAXHandler* sax, void* user_data, char* chunk, int size, char* filename) nogil cdef int xmlCtxtResetPush(xmlParserCtxt* ctxt, char* chunk, int size, char* filename, char* encoding) nogil # entity loaders: ctypedef xmlParserInput* (*xmlExternalEntityLoader)( const_char * URL, const_char * ID, xmlParserCtxt* context) nogil cdef xmlExternalEntityLoader xmlGetExternalEntityLoader() nogil cdef void xmlSetExternalEntityLoader(xmlExternalEntityLoader f) nogil # DTDs: cdef xmlDtd* xmlParseDTD(const_xmlChar* ExternalID, const_xmlChar* SystemID) nogil cdef xmlDtd* xmlIOParseDTD(xmlSAXHandler* sax, xmlParserInputBuffer* input, int enc) nogil cdef extern from "libxml/parserInternals.h": cdef xmlParserInput* xmlNewInputStream(xmlParserCtxt* ctxt) cdef xmlParserInput* xmlNewStringInputStream(xmlParserCtxt* ctxt, char* buffer) nogil cdef xmlParserInput* xmlNewInputFromFile(xmlParserCtxt* ctxt, char* filename) nogil cdef void xmlFreeInputStream(xmlParserInput* input) nogil cdef int xmlSwitchEncoding(xmlParserCtxt* ctxt, int enc) nogil