You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

249 lines
11 KiB

4 years ago
  1. from libc.string cimport const_char
  2. from lxml.includes.tree cimport (
  3. xmlDoc, xmlNode, xmlDict, xmlDtd, xmlChar, const_xmlChar)
  4. from lxml.includes.tree cimport xmlInputReadCallback, xmlInputCloseCallback
  5. from lxml.includes.xmlerror cimport xmlError, xmlStructuredErrorFunc
  6. cdef extern from "libxml/parser.h":
  7. ctypedef void (*startElementNsSAX2Func)(void* ctx,
  8. const_xmlChar* localname,
  9. const_xmlChar* prefix,
  10. const_xmlChar* URI,
  11. int nb_namespaces,
  12. const_xmlChar** namespaces,
  13. int nb_attributes,
  14. int nb_defaulted,
  15. const_xmlChar** attributes)
  16. ctypedef void (*endElementNsSAX2Func)(void* ctx,
  17. const_xmlChar* localname,
  18. const_xmlChar* prefix,
  19. const_xmlChar* URI)
  20. ctypedef void (*startElementSAXFunc)(void* ctx, const_xmlChar* name, const_xmlChar** atts)
  21. ctypedef void (*endElementSAXFunc)(void* ctx, const_xmlChar* name)
  22. ctypedef void (*charactersSAXFunc)(void* ctx, const_xmlChar* ch, int len)
  23. ctypedef void (*cdataBlockSAXFunc)(void* ctx, const_xmlChar* value, int len)
  24. ctypedef void (*commentSAXFunc)(void* ctx, const_xmlChar* value)
  25. ctypedef void (*processingInstructionSAXFunc)(void* ctx,
  26. const_xmlChar* target,
  27. const_xmlChar* data)
  28. ctypedef void (*internalSubsetSAXFunc)(void* ctx,
  29. const_xmlChar* name,
  30. const_xmlChar* externalID,
  31. const_xmlChar* systemID)
  32. ctypedef void (*endDocumentSAXFunc)(void* ctx)
  33. ctypedef void (*startDocumentSAXFunc)(void* ctx)
  34. ctypedef void (*referenceSAXFunc)(void * ctx, const_xmlChar* name)
  35. cdef int XML_SAX2_MAGIC
  36. cdef extern from "libxml/tree.h":
  37. ctypedef struct xmlParserInput:
  38. int line
  39. int length
  40. const_xmlChar* base
  41. const_xmlChar* cur
  42. const_xmlChar* end
  43. const_char *filename
  44. ctypedef struct xmlParserInputBuffer:
  45. void* context
  46. xmlInputReadCallback readcallback
  47. xmlInputCloseCallback closecallback
  48. ctypedef struct xmlSAXHandlerV1:
  49. # same as xmlSAXHandler, but without namespaces
  50. pass
  51. ctypedef struct xmlSAXHandler:
  52. internalSubsetSAXFunc internalSubset
  53. startElementNsSAX2Func startElementNs
  54. endElementNsSAX2Func endElementNs
  55. startElementSAXFunc startElement
  56. endElementSAXFunc endElement
  57. charactersSAXFunc characters
  58. cdataBlockSAXFunc cdataBlock
  59. referenceSAXFunc reference
  60. commentSAXFunc comment
  61. processingInstructionSAXFunc processingInstruction
  62. startDocumentSAXFunc startDocument
  63. endDocumentSAXFunc endDocument
  64. int initialized
  65. xmlStructuredErrorFunc serror
  66. void* _private
  67. cdef extern from "libxml/SAX2.h" nogil:
  68. cdef void xmlSAX2StartDocument(void* ctxt)
  69. cdef extern from "libxml/xmlIO.h" nogil:
  70. cdef xmlParserInputBuffer* xmlAllocParserInputBuffer(int enc)
  71. cdef extern from "libxml/parser.h":
  72. cdef xmlDict* xmlDictCreate() nogil
  73. cdef xmlDict* xmlDictCreateSub(xmlDict* subdict) nogil
  74. cdef void xmlDictFree(xmlDict* sub) nogil
  75. cdef int xmlDictReference(xmlDict* dict) nogil
  76. cdef int XML_COMPLETE_ATTRS # SAX option for adding DTD default attributes
  77. cdef int XML_SKIP_IDS # SAX option for not building an XML ID dict
  78. ctypedef enum xmlParserInputState:
  79. XML_PARSER_EOF = -1 # nothing is to be parsed
  80. XML_PARSER_START = 0 # nothing has been parsed
  81. XML_PARSER_MISC = 1 # Misc* before int subset
  82. XML_PARSER_PI = 2 # Within a processing instruction
  83. XML_PARSER_DTD = 3 # within some DTD content
  84. XML_PARSER_PROLOG = 4 # Misc* after internal subset
  85. XML_PARSER_COMMENT = 5 # within a comment
  86. XML_PARSER_START_TAG = 6 # within a start tag
  87. XML_PARSER_CONTENT = 7 # within the content
  88. XML_PARSER_CDATA_SECTION = 8 # within a CDATA section
  89. XML_PARSER_END_TAG = 9 # within a closing tag
  90. XML_PARSER_ENTITY_DECL = 10 # within an entity declaration
  91. XML_PARSER_ENTITY_VALUE = 11 # within an entity value in a decl
  92. XML_PARSER_ATTRIBUTE_VALUE = 12 # within an attribute value
  93. XML_PARSER_SYSTEM_LITERAL = 13 # within a SYSTEM value
  94. XML_PARSER_EPILOG = 14 # the Misc* after the last end tag
  95. XML_PARSER_IGNORE = 15 # within an IGNORED section
  96. XML_PARSER_PUBLIC_LITERAL = 16 # within a PUBLIC value
  97. ctypedef struct xmlParserCtxt:
  98. xmlDoc* myDoc
  99. xmlDict* dict
  100. int dictNames
  101. void* _private
  102. bint wellFormed
  103. bint recovery
  104. int options
  105. bint disableSAX
  106. int errNo
  107. xmlParserInputState instate
  108. bint replaceEntities
  109. int loadsubset # != 0 if enabled, int value == why
  110. bint validate
  111. xmlError lastError
  112. xmlNode* node
  113. xmlSAXHandler* sax
  114. void* userData
  115. int* spaceTab
  116. int spaceMax
  117. bint html
  118. bint progressive
  119. int inSubset
  120. int charset
  121. xmlParserInput* input
  122. ctypedef enum xmlParserOption:
  123. XML_PARSE_RECOVER = 1 # recover on errors
  124. XML_PARSE_NOENT = 2 # substitute entities
  125. XML_PARSE_DTDLOAD = 4 # load the external subset
  126. XML_PARSE_DTDATTR = 8 # default DTD attributes
  127. XML_PARSE_DTDVALID = 16 # validate with the DTD
  128. XML_PARSE_NOERROR = 32 # suppress error reports
  129. XML_PARSE_NOWARNING = 64 # suppress warning reports
  130. XML_PARSE_PEDANTIC = 128 # pedantic error reporting
  131. XML_PARSE_NOBLANKS = 256 # remove blank nodes
  132. XML_PARSE_SAX1 = 512 # use the SAX1 interface internally
  133. XML_PARSE_XINCLUDE = 1024 # Implement XInclude substitution
  134. XML_PARSE_NONET = 2048 # Forbid network access
  135. XML_PARSE_NODICT = 4096 # Do not reuse the context dictionary
  136. XML_PARSE_NSCLEAN = 8192 # remove redundant namespaces declarations
  137. XML_PARSE_NOCDATA = 16384 # merge CDATA as text nodes
  138. XML_PARSE_NOXINCNODE = 32768 # do not generate XINCLUDE START/END nodes
  139. # libxml2 2.6.21+ only:
  140. XML_PARSE_COMPACT = 65536 # compact small text nodes
  141. # libxml2 2.7.0+ only:
  142. XML_PARSE_OLD10 = 131072 # parse using XML-1.0 before update 5
  143. XML_PARSE_NOBASEFIX = 262144 # do not fixup XINCLUDE xml:base uris
  144. XML_PARSE_HUGE = 524288 # relax any hardcoded limit from the parser
  145. # libxml2 2.7.3+ only:
  146. XML_PARSE_OLDSAX = 1048576 # parse using SAX2 interface before 2.7.0
  147. # libxml2 2.8.0+ only:
  148. XML_PARSE_IGNORE_ENC = 2097152 # ignore internal document encoding hint
  149. # libxml2 2.9.0+ only:
  150. XML_PARSE_BIG_LINES = 4194304 # Store big lines numbers in text PSVI field
  151. cdef void xmlInitParser() nogil
  152. cdef void xmlCleanupParser() nogil
  153. cdef int xmlLineNumbersDefault(int onoff) nogil
  154. cdef xmlParserCtxt* xmlNewParserCtxt() nogil
  155. cdef xmlParserInput* xmlNewIOInputStream(xmlParserCtxt* ctxt,
  156. xmlParserInputBuffer* input,
  157. int enc) nogil
  158. cdef int xmlCtxtUseOptions(xmlParserCtxt* ctxt, int options) nogil
  159. cdef void xmlFreeParserCtxt(xmlParserCtxt* ctxt) nogil
  160. cdef void xmlCtxtReset(xmlParserCtxt* ctxt) nogil
  161. cdef void xmlClearParserCtxt(xmlParserCtxt* ctxt) nogil
  162. cdef int xmlParseChunk(xmlParserCtxt* ctxt,
  163. char* chunk, int size, int terminate) nogil
  164. cdef xmlDoc* xmlCtxtReadDoc(xmlParserCtxt* ctxt,
  165. char* cur, char* URL, char* encoding,
  166. int options) nogil
  167. cdef xmlDoc* xmlCtxtReadFile(xmlParserCtxt* ctxt,
  168. char* filename, char* encoding,
  169. int options) nogil
  170. cdef xmlDoc* xmlCtxtReadIO(xmlParserCtxt* ctxt,
  171. xmlInputReadCallback ioread,
  172. xmlInputCloseCallback ioclose,
  173. void* ioctx,
  174. char* URL, char* encoding,
  175. int options) nogil
  176. cdef xmlDoc* xmlCtxtReadMemory(xmlParserCtxt* ctxt,
  177. char* buffer, int size,
  178. char* filename, const_char* encoding,
  179. int options) nogil
  180. # iterparse:
  181. cdef xmlParserCtxt* xmlCreatePushParserCtxt(xmlSAXHandler* sax,
  182. void* user_data,
  183. char* chunk,
  184. int size,
  185. char* filename) nogil
  186. cdef int xmlCtxtResetPush(xmlParserCtxt* ctxt,
  187. char* chunk,
  188. int size,
  189. char* filename,
  190. char* encoding) nogil
  191. # entity loaders:
  192. ctypedef xmlParserInput* (*xmlExternalEntityLoader)(
  193. const_char * URL, const_char * ID, xmlParserCtxt* context) nogil
  194. cdef xmlExternalEntityLoader xmlGetExternalEntityLoader() nogil
  195. cdef void xmlSetExternalEntityLoader(xmlExternalEntityLoader f) nogil
  196. # DTDs:
  197. cdef xmlDtd* xmlParseDTD(const_xmlChar* ExternalID, const_xmlChar* SystemID) nogil
  198. cdef xmlDtd* xmlIOParseDTD(xmlSAXHandler* sax,
  199. xmlParserInputBuffer* input,
  200. int enc) nogil
  201. cdef extern from "libxml/parserInternals.h":
  202. cdef xmlParserInput* xmlNewInputStream(xmlParserCtxt* ctxt)
  203. cdef xmlParserInput* xmlNewStringInputStream(xmlParserCtxt* ctxt,
  204. char* buffer) nogil
  205. cdef xmlParserInput* xmlNewInputFromFile(xmlParserCtxt* ctxt,
  206. char* filename) nogil
  207. cdef void xmlFreeInputStream(xmlParserInput* input) nogil
  208. cdef int xmlSwitchEncoding(xmlParserCtxt* ctxt, int enc) nogil