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.
 
 
 
 

304 line
12 KiB

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