xmlerror.pxi 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662
  1. # DEBUG and error logging
  2. from lxml.includes cimport xmlerror
  3. from lxml cimport cvarargs
  4. DEF GLOBAL_ERROR_LOG = "_GlobalErrorLog"
  5. DEF XSLT_ERROR_LOG = "_XSLTErrorLog"
  6. # module level API functions
  7. def clear_error_log():
  8. """clear_error_log()
  9. Clear the global error log. Note that this log is already bound to a
  10. fixed size.
  11. Note: since lxml 2.2, the global error log is local to a thread
  12. and this function will only clear the global error log of the
  13. current thread.
  14. """
  15. _getThreadErrorLog(GLOBAL_ERROR_LOG).clear()
  16. # setup for global log:
  17. cdef void _initThreadLogging() noexcept:
  18. # Disable generic error lines from libxml2.
  19. _connectGenericErrorLog(None)
  20. # Divert XSLT error messages to the global XSLT error log instead of stderr.
  21. xslt.xsltSetGenericErrorFunc(NULL, <xmlerror.xmlGenericErrorFunc>_receiveXSLTError)
  22. # Logging classes
  23. @cython.final
  24. @cython.freelist(16)
  25. cdef class _LogEntry:
  26. """A log message entry from an error log.
  27. Attributes:
  28. - message: the message text
  29. - domain: the domain ID (see lxml.etree.ErrorDomains)
  30. - type: the message type ID (see lxml.etree.ErrorTypes)
  31. - level: the log level ID (see lxml.etree.ErrorLevels)
  32. - line: the line at which the message originated (if applicable)
  33. - column: the character column at which the message originated (if applicable)
  34. - filename: the name of the file in which the message originated (if applicable)
  35. - path: the location in which the error was found (if available)
  36. """
  37. cdef readonly int domain
  38. cdef readonly int type
  39. cdef readonly int level
  40. cdef readonly long line
  41. cdef readonly int column
  42. cdef basestring _message
  43. cdef basestring _filename
  44. cdef char* _c_message
  45. cdef xmlChar* _c_filename
  46. cdef xmlChar* _c_path
  47. def __dealloc__(self):
  48. tree.xmlFree(self._c_message)
  49. tree.xmlFree(self._c_filename)
  50. tree.xmlFree(self._c_path)
  51. @cython.final
  52. cdef int _setError(self, const xmlerror.xmlError* error) except -1:
  53. self.domain = error.domain
  54. self.type = error.code
  55. self.level = <int>error.level
  56. self.line = <long>error.line
  57. self.column = error.int2
  58. self._c_message = NULL
  59. self._c_filename = NULL
  60. self._c_path = NULL
  61. if (error.message is NULL or
  62. error.message[0] == b'\0' or
  63. error.message[0] == b'\n' and error.message[1] == b'\0'):
  64. self._message = "unknown error"
  65. else:
  66. self._message = None
  67. self._c_message = <char*> tree.xmlStrdup(
  68. <const_xmlChar*> error.message)
  69. if not self._c_message:
  70. raise MemoryError()
  71. if error.file is NULL:
  72. self._filename = '<string>'
  73. else:
  74. self._filename = None
  75. self._c_filename = tree.xmlStrdup(<const_xmlChar*> error.file)
  76. if not self._c_filename:
  77. raise MemoryError()
  78. if error.node is not NULL:
  79. self._c_path = tree.xmlGetNodePath(<xmlNode*> error.node)
  80. c_line = tree.xmlGetLineNo(<xmlNode*> error.node)
  81. if c_line > limits.INT_MAX:
  82. self.line = c_line
  83. @cython.final
  84. cdef _setGeneric(self, int domain, int type, int level, long line,
  85. message, filename):
  86. self.domain = domain
  87. self.type = type
  88. self.level = level
  89. self.line = line
  90. self.column = 0
  91. self._message = message
  92. self._filename = filename
  93. self._c_path = NULL
  94. def __repr__(self):
  95. return "%s:%d:%d:%s:%s:%s: %s" % (
  96. self.filename, self.line, self.column, self.level_name,
  97. self.domain_name, self.type_name, self.message)
  98. @property
  99. def domain_name(self):
  100. """The name of the error domain. See lxml.etree.ErrorDomains
  101. """
  102. return ErrorDomains._getName(self.domain, "unknown")
  103. @property
  104. def type_name(self):
  105. """The name of the error type. See lxml.etree.ErrorTypes
  106. """
  107. if self.domain == ErrorDomains.RELAXNGV:
  108. getName = RelaxNGErrorTypes._getName
  109. else:
  110. getName = ErrorTypes._getName
  111. return getName(self.type, "unknown")
  112. @property
  113. def level_name(self):
  114. """The name of the error level. See lxml.etree.ErrorLevels
  115. """
  116. return ErrorLevels._getName(self.level, "unknown")
  117. @property
  118. def message(self):
  119. """The log message string.
  120. """
  121. cdef size_t size
  122. if self._message is not None:
  123. return self._message
  124. if self._c_message is NULL:
  125. return None
  126. size = cstring_h.strlen(self._c_message)
  127. if size > 0 and self._c_message[size-1] == b'\n':
  128. size -= 1 # strip EOL
  129. # cannot use funicode() here because the message may contain
  130. # byte encoded file paths etc.
  131. try:
  132. self._message = self._c_message[:size].decode('utf8')
  133. except UnicodeDecodeError:
  134. try:
  135. self._message = self._c_message[:size].decode(
  136. 'ascii', 'backslashreplace')
  137. except UnicodeDecodeError:
  138. self._message = '<undecodable error message>'
  139. if self._c_message:
  140. # clean up early
  141. tree.xmlFree(self._c_message)
  142. self._c_message = NULL
  143. return self._message
  144. @property
  145. def filename(self):
  146. """The file path where the report originated, if any.
  147. """
  148. if self._filename is None:
  149. if self._c_filename is not NULL:
  150. self._filename = _decodeFilename(self._c_filename)
  151. # clean up early
  152. tree.xmlFree(self._c_filename)
  153. self._c_filename = NULL
  154. return self._filename
  155. @property
  156. def path(self):
  157. """The XPath for the node where the error was detected.
  158. """
  159. return funicode(self._c_path) if self._c_path is not NULL else None
  160. cdef class _BaseErrorLog:
  161. cdef _LogEntry _first_error
  162. cdef readonly object last_error
  163. def __init__(self, first_error, last_error):
  164. self._first_error = first_error
  165. self.last_error = last_error
  166. cpdef copy(self):
  167. return _BaseErrorLog(self._first_error, self.last_error)
  168. def __repr__(self):
  169. return ''
  170. cpdef receive(self, _LogEntry entry):
  171. pass
  172. @cython.final
  173. cdef int _receive(self, const xmlerror.xmlError* error) except -1:
  174. cdef bint is_error
  175. cdef _LogEntry entry
  176. cdef _BaseErrorLog global_log
  177. entry = _LogEntry.__new__(_LogEntry)
  178. entry._setError(error)
  179. is_error = error.level == xmlerror.XML_ERR_ERROR or \
  180. error.level == xmlerror.XML_ERR_FATAL
  181. global_log = _getThreadErrorLog(GLOBAL_ERROR_LOG)
  182. if global_log is not self:
  183. global_log.receive(entry)
  184. if is_error:
  185. global_log.last_error = entry
  186. self.receive(entry)
  187. if is_error:
  188. self.last_error = entry
  189. @cython.final
  190. cdef int _receiveGeneric(self, int domain, int type, int level, long line,
  191. message, filename) except -1:
  192. cdef bint is_error
  193. cdef _LogEntry entry
  194. cdef _BaseErrorLog global_log
  195. entry = _LogEntry.__new__(_LogEntry)
  196. entry._setGeneric(domain, type, level, line, message, filename)
  197. is_error = level == xmlerror.XML_ERR_ERROR or \
  198. level == xmlerror.XML_ERR_FATAL
  199. global_log = _getThreadErrorLog(GLOBAL_ERROR_LOG)
  200. if global_log is not self:
  201. global_log.receive(entry)
  202. if is_error:
  203. global_log.last_error = entry
  204. self.receive(entry)
  205. if is_error:
  206. self.last_error = entry
  207. @cython.final
  208. cdef _buildParseException(self, exctype, default_message):
  209. code = xmlerror.XML_ERR_INTERNAL_ERROR
  210. if self._first_error is None:
  211. return exctype(default_message, code, 0, 0)
  212. message = self._first_error.message
  213. if message:
  214. code = self._first_error.type
  215. else:
  216. message = default_message
  217. line = self._first_error.line
  218. column = self._first_error.column
  219. filename = self._first_error.filename
  220. if line > 0:
  221. if column > 0:
  222. message = f"{message}, line {line}, column {column}"
  223. else:
  224. message = f"{message}, line {line}"
  225. return exctype(message, code, line, column, filename)
  226. @cython.final
  227. cdef _buildExceptionMessage(self, default_message):
  228. if self._first_error is None:
  229. return default_message
  230. if self._first_error.message:
  231. message = self._first_error.message
  232. elif default_message is None:
  233. return None
  234. else:
  235. message = default_message
  236. if self._first_error.line > 0:
  237. if self._first_error.column > 0:
  238. message = f"{message}, line {self._first_error.line}, column {self._first_error.column}"
  239. else:
  240. message = f"{message}, line {self._first_error.line}"
  241. return message
  242. cdef class _ListErrorLog(_BaseErrorLog):
  243. "Immutable base version of a list based error log."
  244. cdef list _entries
  245. cdef int _offset
  246. def __init__(self, entries, first_error, last_error):
  247. if entries:
  248. if first_error is None:
  249. first_error = entries[0]
  250. if last_error is None:
  251. last_error = entries[-1]
  252. _BaseErrorLog.__init__(self, first_error, last_error)
  253. self._entries = entries
  254. cpdef copy(self):
  255. """Creates a shallow copy of this error log. Reuses the list of
  256. entries.
  257. """
  258. cdef _ListErrorLog log = _ListErrorLog(
  259. self._entries, self._first_error, self.last_error)
  260. log._offset = self._offset
  261. return log
  262. def __iter__(self):
  263. entries = self._entries
  264. if self._offset:
  265. entries = islice(entries, self._offset)
  266. return iter(entries)
  267. def __repr__(self):
  268. return '\n'.join([repr(entry) for entry in self])
  269. def __getitem__(self, index):
  270. if self._offset:
  271. index += self._offset
  272. return self._entries[index]
  273. def __len__(self):
  274. return len(self._entries) - self._offset
  275. def __contains__(self, error_type):
  276. cdef Py_ssize_t i
  277. for i, entry in enumerate(self._entries):
  278. if i < self._offset:
  279. continue
  280. if entry.type == error_type:
  281. return True
  282. return False
  283. def __bool__(self):
  284. return len(self._entries) > self._offset
  285. def filter_domains(self, domains):
  286. """Filter the errors by the given domains and return a new error log
  287. containing the matches.
  288. """
  289. cdef _LogEntry entry
  290. if isinstance(domains, int):
  291. domains = (domains,)
  292. filtered = [entry for entry in self if entry.domain in domains]
  293. return _ListErrorLog(filtered, None, None)
  294. def filter_types(self, types):
  295. """filter_types(self, types)
  296. Filter the errors by the given types and return a new error
  297. log containing the matches.
  298. """
  299. cdef _LogEntry entry
  300. if isinstance(types, int):
  301. types = (types,)
  302. filtered = [entry for entry in self if entry.type in types]
  303. return _ListErrorLog(filtered, None, None)
  304. def filter_levels(self, levels):
  305. """filter_levels(self, levels)
  306. Filter the errors by the given error levels and return a new
  307. error log containing the matches.
  308. """
  309. cdef _LogEntry entry
  310. if isinstance(levels, int):
  311. levels = (levels,)
  312. filtered = [entry for entry in self if entry.level in levels]
  313. return _ListErrorLog(filtered, None, None)
  314. def filter_from_level(self, level):
  315. """filter_from_level(self, level)
  316. Return a log with all messages of the requested level of worse.
  317. """
  318. cdef _LogEntry entry
  319. filtered = [entry for entry in self if entry.level >= level]
  320. return _ListErrorLog(filtered, None, None)
  321. def filter_from_fatals(self):
  322. """filter_from_fatals(self)
  323. Convenience method to get all fatal error messages.
  324. """
  325. return self.filter_from_level(ErrorLevels.FATAL)
  326. def filter_from_errors(self):
  327. """filter_from_errors(self)
  328. Convenience method to get all error messages or worse.
  329. """
  330. return self.filter_from_level(ErrorLevels.ERROR)
  331. def filter_from_warnings(self):
  332. """filter_from_warnings(self)
  333. Convenience method to get all warnings or worse.
  334. """
  335. return self.filter_from_level(ErrorLevels.WARNING)
  336. @cython.final
  337. @cython.internal
  338. cdef class _ErrorLogContext:
  339. """
  340. Error log context for the 'with' statement.
  341. Stores a reference to the current callbacks to allow for
  342. recursively stacked log contexts.
  343. """
  344. cdef xmlerror.xmlStructuredErrorFunc old_error_func
  345. cdef void* old_error_context
  346. cdef xmlerror.xmlGenericErrorFunc old_xslt_error_func
  347. cdef void* old_xslt_error_context
  348. cdef _BaseErrorLog old_xslt_error_log
  349. cdef int push_error_log(self, _BaseErrorLog log) except -1:
  350. self.old_error_func = xmlerror.xmlStructuredError
  351. self.old_error_context = xmlerror.xmlStructuredErrorContext
  352. xmlerror.xmlSetStructuredErrorFunc(
  353. <void*>log, <xmlerror.xmlStructuredErrorFunc>_receiveError)
  354. # xslt.xsltSetGenericErrorFunc() is not thread-local => keep error log in TLS
  355. self.old_xslt_error_func = xslt.xsltGenericError
  356. self.old_xslt_error_context = xslt.xsltGenericErrorContext
  357. self.old_xslt_error_log = _getThreadErrorLog(XSLT_ERROR_LOG)
  358. _setThreadErrorLog(XSLT_ERROR_LOG, log)
  359. xslt.xsltSetGenericErrorFunc(
  360. NULL, <xmlerror.xmlGenericErrorFunc>_receiveXSLTError)
  361. return 0
  362. cdef int pop_error_log(self) except -1:
  363. xmlerror.xmlSetStructuredErrorFunc(
  364. self.old_error_context, self.old_error_func)
  365. xslt.xsltSetGenericErrorFunc(
  366. self.old_xslt_error_context, self.old_xslt_error_func)
  367. _setThreadErrorLog(XSLT_ERROR_LOG, self.old_xslt_error_log)
  368. self.old_xslt_error_log= None
  369. return 0
  370. cdef class _ErrorLog(_ListErrorLog):
  371. cdef list _logContexts
  372. def __cinit__(self):
  373. self._logContexts = []
  374. def __init__(self):
  375. _ListErrorLog.__init__(self, [], None, None)
  376. @cython.final
  377. cdef int __enter__(self) except -1:
  378. return self.connect()
  379. def __exit__(self, *args):
  380. # TODO: make this a cdef function when Cython supports it
  381. self.disconnect()
  382. @cython.final
  383. cdef int connect(self) except -1:
  384. self._first_error = None
  385. del self._entries[:]
  386. cdef _ErrorLogContext context = _ErrorLogContext.__new__(_ErrorLogContext)
  387. context.push_error_log(self)
  388. self._logContexts.append(context)
  389. return 0
  390. @cython.final
  391. cdef int disconnect(self) except -1:
  392. cdef _ErrorLogContext context = self._logContexts.pop()
  393. context.pop_error_log()
  394. return 0
  395. cpdef clear(self):
  396. self._first_error = None
  397. self.last_error = None
  398. self._offset = 0
  399. del self._entries[:]
  400. cpdef copy(self):
  401. """Creates a shallow copy of this error log and the list of entries.
  402. """
  403. return _ListErrorLog(
  404. self._entries[self._offset:],
  405. self._first_error, self.last_error)
  406. def __iter__(self):
  407. return iter(self._entries[self._offset:])
  408. cpdef receive(self, _LogEntry entry):
  409. if self._first_error is None and entry.level >= xmlerror.XML_ERR_ERROR:
  410. self._first_error = entry
  411. self._entries.append(entry)
  412. cdef class _DomainErrorLog(_ErrorLog):
  413. def __init__(self, domains):
  414. _ErrorLog.__init__(self)
  415. self._accepted_domains = tuple(domains)
  416. cpdef receive(self, _LogEntry entry):
  417. if entry.domain in self._accepted_domains:
  418. _ErrorLog.receive(self, entry)
  419. cdef class _RotatingErrorLog(_ErrorLog):
  420. cdef int _max_len
  421. def __init__(self, max_len):
  422. _ErrorLog.__init__(self)
  423. self._max_len = max_len
  424. cpdef receive(self, _LogEntry entry):
  425. if self._first_error is None and entry.level >= xmlerror.XML_ERR_ERROR:
  426. self._first_error = entry
  427. self._entries.append(entry)
  428. if len(self._entries) > self._max_len:
  429. self._offset += 1
  430. if self._offset > self._max_len // 3:
  431. offset = self._offset
  432. self._offset = 0
  433. del self._entries[:offset]
  434. cdef class PyErrorLog(_BaseErrorLog):
  435. """PyErrorLog(self, logger_name=None, logger=None)
  436. A global error log that connects to the Python stdlib logging package.
  437. The constructor accepts an optional logger name or a readily
  438. instantiated logger instance.
  439. If you want to change the mapping between libxml2's ErrorLevels and Python
  440. logging levels, you can modify the level_map dictionary from a subclass.
  441. The default mapping is::
  442. ErrorLevels.WARNING = logging.WARNING
  443. ErrorLevels.ERROR = logging.ERROR
  444. ErrorLevels.FATAL = logging.CRITICAL
  445. You can also override the method ``receive()`` that takes a LogEntry
  446. object and calls ``self.log(log_entry, format_string, arg1, arg2, ...)``
  447. with appropriate data.
  448. """
  449. cdef readonly dict level_map
  450. cdef object _map_level
  451. cdef object _log
  452. def __init__(self, logger_name=None, logger=None):
  453. _BaseErrorLog.__init__(self, None, None)
  454. import logging
  455. self.level_map = {
  456. ErrorLevels.WARNING : logging.WARNING,
  457. ErrorLevels.ERROR : logging.ERROR,
  458. ErrorLevels.FATAL : logging.CRITICAL
  459. }
  460. self._map_level = self.level_map.get
  461. if logger is None:
  462. if logger_name:
  463. logger = logging.getLogger(logger_name)
  464. else:
  465. logger = logging.getLogger()
  466. self._log = logger.log
  467. cpdef copy(self):
  468. """Dummy method that returns an empty error log.
  469. """
  470. return _ListErrorLog([], None, None)
  471. def log(self, log_entry, message, *args):
  472. """log(self, log_entry, message, *args)
  473. Called by the .receive() method to log a _LogEntry instance to
  474. the Python logging system. This handles the error level
  475. mapping.
  476. In the default implementation, the ``message`` argument
  477. receives a complete log line, and there are no further
  478. ``args``. To change the message format, it is best to
  479. override the .receive() method instead of this one.
  480. """
  481. self._log(
  482. self._map_level(log_entry.level, 0),
  483. message, *args
  484. )
  485. cpdef receive(self, _LogEntry log_entry):
  486. """receive(self, log_entry)
  487. Receive a _LogEntry instance from the logging system. Calls
  488. the .log() method with appropriate parameters::
  489. self.log(log_entry, repr(log_entry))
  490. You can override this method to provide your own log output
  491. format.
  492. """
  493. self.log(log_entry, repr(log_entry))
  494. # thread-local, global list log to collect error output messages from
  495. # libxml2/libxslt
  496. cdef _BaseErrorLog __GLOBAL_ERROR_LOG = _RotatingErrorLog(__MAX_LOG_SIZE)
  497. cdef _BaseErrorLog _getThreadErrorLog(name):
  498. """Retrieve the current error log with name 'name' of this thread."""
  499. cdef python.PyObject* thread_dict
  500. thread_dict = python.PyThreadState_GetDict()
  501. if thread_dict is NULL:
  502. return __GLOBAL_ERROR_LOG
  503. try:
  504. return (<object>thread_dict)[name]
  505. except KeyError:
  506. log = (<object>thread_dict)[name] = \
  507. _RotatingErrorLog(__MAX_LOG_SIZE)
  508. return log
  509. cdef _setThreadErrorLog(name, _BaseErrorLog log):
  510. """Set the global error log of this thread."""
  511. cdef python.PyObject* thread_dict
  512. thread_dict = python.PyThreadState_GetDict()
  513. if thread_dict is NULL:
  514. if name == GLOBAL_ERROR_LOG:
  515. global __GLOBAL_ERROR_LOG
  516. __GLOBAL_ERROR_LOG = log
  517. else:
  518. (<object>thread_dict)[name] = log
  519. cdef __copyGlobalErrorLog():
  520. "Helper function for properties in exceptions."
  521. return _getThreadErrorLog(GLOBAL_ERROR_LOG).copy()
  522. def use_global_python_log(PyErrorLog log not None):
  523. """use_global_python_log(log)
  524. Replace the global error log by an etree.PyErrorLog that uses the
  525. standard Python logging package.
  526. Note that this disables access to the global error log from exceptions.
  527. Parsers, XSLT etc. will continue to provide their normal local error log.
  528. Note: prior to lxml 2.2, this changed the error log globally.
  529. Since lxml 2.2, the global error log is local to a thread and this
  530. function will only set the global error log of the current thread.
  531. """
  532. _setThreadErrorLog(GLOBAL_ERROR_LOG, log)
  533. # local log functions: forward error to logger object
  534. cdef void _forwardError(void* c_log_handler, const xmlerror.xmlError* error) noexcept with gil:
  535. cdef _BaseErrorLog log_handler
  536. if c_log_handler is not NULL:
  537. log_handler = <_BaseErrorLog>c_log_handler
  538. elif error.domain == xmlerror.XML_FROM_XSLT:
  539. log_handler = _getThreadErrorLog(XSLT_ERROR_LOG)
  540. else:
  541. log_handler = _getThreadErrorLog(GLOBAL_ERROR_LOG)
  542. log_handler._receive(error)
  543. cdef void _receiveError(void* c_log_handler, const xmlerror.xmlError* error) noexcept nogil:
  544. # no Python objects here, may be called without thread context !
  545. if __DEBUG:
  546. _forwardError(c_log_handler, error)
  547. cdef void _receiveXSLTError(void* c_log_handler, char* msg, ...) noexcept nogil:
  548. # no Python objects here, may be called without thread context !
  549. cdef cvarargs.va_list args
  550. cvarargs.va_start(args, msg)
  551. _receiveGenericError(c_log_handler, xmlerror.XML_FROM_XSLT, msg, args)
  552. cvarargs.va_end(args)
  553. cdef void _receiveRelaxNGParseError(void* c_log_handler, char* msg, ...) noexcept nogil:
  554. # no Python objects here, may be called without thread context !
  555. cdef cvarargs.va_list args
  556. cvarargs.va_start(args, msg)
  557. _receiveGenericError(c_log_handler, xmlerror.XML_FROM_RELAXNGP, msg, args)
  558. cvarargs.va_end(args)
  559. cdef void _receiveRelaxNGValidationError(void* c_log_handler, char* msg, ...) noexcept nogil:
  560. # no Python objects here, may be called without thread context !
  561. cdef cvarargs.va_list args
  562. cvarargs.va_start(args, msg)
  563. _receiveGenericError(c_log_handler, xmlerror.XML_FROM_RELAXNGV, msg, args)
  564. cvarargs.va_end(args)
  565. # dummy function: no log output at all
  566. cdef void _nullGenericErrorFunc(void* ctxt, char* msg, ...) noexcept nogil:
  567. pass
  568. cdef void _connectGenericErrorLog(log, int c_domain=-1) noexcept:
  569. cdef xmlerror.xmlGenericErrorFunc error_func = NULL
  570. c_log = <void*>log
  571. if c_domain == xmlerror.XML_FROM_XSLT:
  572. error_func = <xmlerror.xmlGenericErrorFunc>_receiveXSLTError
  573. elif c_domain == xmlerror.XML_FROM_RELAXNGP:
  574. error_func = <xmlerror.xmlGenericErrorFunc>_receiveRelaxNGParseError
  575. elif c_domain == xmlerror.XML_FROM_RELAXNGV:
  576. error_func = <xmlerror.xmlGenericErrorFunc>_receiveRelaxNGValidationError
  577. if log is None or error_func is NULL:
  578. c_log = NULL
  579. error_func = <xmlerror.xmlGenericErrorFunc>_nullGenericErrorFunc
  580. xmlerror.xmlSetGenericErrorFunc(c_log, error_func)
  581. cdef void _receiveGenericError(void* c_log_handler, int c_domain,
  582. char* msg, cvarargs.va_list args) noexcept nogil:
  583. # no Python objects here, may be called without thread context !
  584. cdef xmlerror.xmlError c_error
  585. cdef char* c_text
  586. cdef char* c_message
  587. cdef char* c_element
  588. cdef char* c_pos
  589. cdef char* c_name_pos
  590. cdef char* c_str
  591. cdef int text_size, element_size, format_count, c_int
  592. if not __DEBUG or msg is NULL:
  593. return
  594. if msg[0] in b'\n\0':
  595. return
  596. c_text = c_element = c_error.file = c_error.node = NULL
  597. c_error.line = 0
  598. # parse "NAME %s" chunks from the format string
  599. c_name_pos = c_pos = msg
  600. format_count = 0
  601. while c_pos[0]:
  602. if c_pos[0] == b'%':
  603. c_pos += 1
  604. if c_pos[0] == b's': # "%s"
  605. format_count += 1
  606. c_str = cvarargs.va_charptr(args)
  607. if c_pos == msg + 1:
  608. c_text = c_str # msg == "%s..."
  609. elif c_name_pos[0] == b'e':
  610. if cstring_h.strncmp(c_name_pos, 'element %s', 10) == 0:
  611. c_element = c_str
  612. elif c_name_pos[0] == b'f':
  613. if cstring_h.strncmp(c_name_pos, 'file %s', 7) == 0:
  614. if cstring_h.strncmp('string://__STRING__XSLT',
  615. c_str, 23) == 0:
  616. c_str = '<xslt>'
  617. c_error.file = c_str
  618. elif c_pos[0] == b'd': # "%d"
  619. format_count += 1
  620. c_int = cvarargs.va_int(args)
  621. if cstring_h.strncmp(c_name_pos, 'line %d', 7) == 0:
  622. c_error.line = c_int
  623. elif c_pos[0] != b'%': # "%%" == "%"
  624. format_count += 1
  625. break # unexpected format or end of string => abort
  626. elif c_pos[0] == b' ':
  627. if c_pos[1] != b'%':
  628. c_name_pos = c_pos + 1
  629. c_pos += 1
  630. c_message = NULL
  631. if c_text is NULL:
  632. if c_element is not NULL and format_count == 1:
  633. # special case: a single occurrence of 'element %s'
  634. text_size = cstring_h.strlen(msg)
  635. element_size = cstring_h.strlen(c_element)
  636. c_message = <char*>stdlib.malloc(
  637. (text_size + element_size + 1) * sizeof(char))
  638. stdio.sprintf(c_message, msg, c_element)
  639. c_error.message = c_message
  640. else:
  641. c_error.message = ''
  642. elif c_element is NULL:
  643. c_error.message = c_text
  644. else:
  645. text_size = cstring_h.strlen(c_text)
  646. element_size = cstring_h.strlen(c_element)
  647. c_message = <char*>stdlib.malloc(
  648. (text_size + 12 + element_size + 1) * sizeof(char))
  649. if c_message is NULL:
  650. c_error.message = c_text
  651. else:
  652. stdio.sprintf(c_message, "%s, element '%s'", c_text, c_element)
  653. c_error.message = c_message
  654. c_error.domain = c_domain
  655. c_error.code = xmlerror.XML_ERR_OK # what else?
  656. c_error.level = xmlerror.XML_ERR_ERROR # what else?
  657. c_error.int2 = 0
  658. _forwardError(c_log_handler, &c_error)
  659. if c_message is not NULL:
  660. stdlib.free(c_message)
  661. ################################################################################
  662. ## CONSTANTS FROM "xmlerror.h" (or rather libxml-xmlerror.html)
  663. ################################################################################
  664. cdef __initErrorConstants():
  665. "Called at setup time to parse the constants and build the classes below."
  666. global __ERROR_LEVELS, __ERROR_DOMAINS, __PARSER_ERROR_TYPES, __RELAXNG_ERROR_TYPES
  667. const_defs = ((ErrorLevels, __ERROR_LEVELS),
  668. (ErrorDomains, __ERROR_DOMAINS),
  669. (ErrorTypes, __PARSER_ERROR_TYPES),
  670. (RelaxNGErrorTypes, __RELAXNG_ERROR_TYPES))
  671. for cls, constants in const_defs:
  672. reverse_dict = {}
  673. cls._names = reverse_dict
  674. cls._getName = reverse_dict.get
  675. for line in constants.splitlines():
  676. if not line:
  677. continue
  678. name, value = line.split('=')
  679. value = int(value)
  680. setattr(cls, name, value)
  681. reverse_dict[value] = name
  682. # discard the global string references after use
  683. __ERROR_LEVELS = __ERROR_DOMAINS = __PARSER_ERROR_TYPES = __RELAXNG_ERROR_TYPES = None
  684. class ErrorLevels(object):
  685. """Libxml2 error levels"""
  686. class ErrorDomains(object):
  687. """Libxml2 error domains"""
  688. class ErrorTypes(object):
  689. """Libxml2 error types"""
  690. class RelaxNGErrorTypes(object):
  691. """Libxml2 RelaxNG error types"""
  692. # --- BEGIN: GENERATED CONSTANTS ---
  693. # This section is generated by the script 'update-error-constants.py'.
  694. cdef object __ERROR_LEVELS = """\
  695. NONE=0
  696. WARNING=1
  697. ERROR=2
  698. FATAL=3
  699. """
  700. cdef object __ERROR_DOMAINS = """\
  701. NONE=0
  702. PARSER=1
  703. TREE=2
  704. NAMESPACE=3
  705. DTD=4
  706. HTML=5
  707. MEMORY=6
  708. OUTPUT=7
  709. IO=8
  710. FTP=9
  711. HTTP=10
  712. XINCLUDE=11
  713. XPATH=12
  714. XPOINTER=13
  715. REGEXP=14
  716. DATATYPE=15
  717. SCHEMASP=16
  718. SCHEMASV=17
  719. RELAXNGP=18
  720. RELAXNGV=19
  721. CATALOG=20
  722. C14N=21
  723. XSLT=22
  724. VALID=23
  725. CHECK=24
  726. WRITER=25
  727. MODULE=26
  728. I18N=27
  729. SCHEMATRONV=28
  730. BUFFER=29
  731. URI=30
  732. """
  733. cdef object __PARSER_ERROR_TYPES = """\
  734. ERR_OK=0
  735. ERR_INTERNAL_ERROR=1
  736. ERR_NO_MEMORY=2
  737. ERR_DOCUMENT_START=3
  738. ERR_DOCUMENT_EMPTY=4
  739. ERR_DOCUMENT_END=5
  740. ERR_INVALID_HEX_CHARREF=6
  741. ERR_INVALID_DEC_CHARREF=7
  742. ERR_INVALID_CHARREF=8
  743. ERR_INVALID_CHAR=9
  744. ERR_CHARREF_AT_EOF=10
  745. ERR_CHARREF_IN_PROLOG=11
  746. ERR_CHARREF_IN_EPILOG=12
  747. ERR_CHARREF_IN_DTD=13
  748. ERR_ENTITYREF_AT_EOF=14
  749. ERR_ENTITYREF_IN_PROLOG=15
  750. ERR_ENTITYREF_IN_EPILOG=16
  751. ERR_ENTITYREF_IN_DTD=17
  752. ERR_PEREF_AT_EOF=18
  753. ERR_PEREF_IN_PROLOG=19
  754. ERR_PEREF_IN_EPILOG=20
  755. ERR_PEREF_IN_INT_SUBSET=21
  756. ERR_ENTITYREF_NO_NAME=22
  757. ERR_ENTITYREF_SEMICOL_MISSING=23
  758. ERR_PEREF_NO_NAME=24
  759. ERR_PEREF_SEMICOL_MISSING=25
  760. ERR_UNDECLARED_ENTITY=26
  761. WAR_UNDECLARED_ENTITY=27
  762. ERR_UNPARSED_ENTITY=28
  763. ERR_ENTITY_IS_EXTERNAL=29
  764. ERR_ENTITY_IS_PARAMETER=30
  765. ERR_UNKNOWN_ENCODING=31
  766. ERR_UNSUPPORTED_ENCODING=32
  767. ERR_STRING_NOT_STARTED=33
  768. ERR_STRING_NOT_CLOSED=34
  769. ERR_NS_DECL_ERROR=35
  770. ERR_ENTITY_NOT_STARTED=36
  771. ERR_ENTITY_NOT_FINISHED=37
  772. ERR_LT_IN_ATTRIBUTE=38
  773. ERR_ATTRIBUTE_NOT_STARTED=39
  774. ERR_ATTRIBUTE_NOT_FINISHED=40
  775. ERR_ATTRIBUTE_WITHOUT_VALUE=41
  776. ERR_ATTRIBUTE_REDEFINED=42
  777. ERR_LITERAL_NOT_STARTED=43
  778. ERR_LITERAL_NOT_FINISHED=44
  779. ERR_COMMENT_NOT_FINISHED=45
  780. ERR_PI_NOT_STARTED=46
  781. ERR_PI_NOT_FINISHED=47
  782. ERR_NOTATION_NOT_STARTED=48
  783. ERR_NOTATION_NOT_FINISHED=49
  784. ERR_ATTLIST_NOT_STARTED=50
  785. ERR_ATTLIST_NOT_FINISHED=51
  786. ERR_MIXED_NOT_STARTED=52
  787. ERR_MIXED_NOT_FINISHED=53
  788. ERR_ELEMCONTENT_NOT_STARTED=54
  789. ERR_ELEMCONTENT_NOT_FINISHED=55
  790. ERR_XMLDECL_NOT_STARTED=56
  791. ERR_XMLDECL_NOT_FINISHED=57
  792. ERR_CONDSEC_NOT_STARTED=58
  793. ERR_CONDSEC_NOT_FINISHED=59
  794. ERR_EXT_SUBSET_NOT_FINISHED=60
  795. ERR_DOCTYPE_NOT_FINISHED=61
  796. ERR_MISPLACED_CDATA_END=62
  797. ERR_CDATA_NOT_FINISHED=63
  798. ERR_RESERVED_XML_NAME=64
  799. ERR_SPACE_REQUIRED=65
  800. ERR_SEPARATOR_REQUIRED=66
  801. ERR_NMTOKEN_REQUIRED=67
  802. ERR_NAME_REQUIRED=68
  803. ERR_PCDATA_REQUIRED=69
  804. ERR_URI_REQUIRED=70
  805. ERR_PUBID_REQUIRED=71
  806. ERR_LT_REQUIRED=72
  807. ERR_GT_REQUIRED=73
  808. ERR_LTSLASH_REQUIRED=74
  809. ERR_EQUAL_REQUIRED=75
  810. ERR_TAG_NAME_MISMATCH=76
  811. ERR_TAG_NOT_FINISHED=77
  812. ERR_STANDALONE_VALUE=78
  813. ERR_ENCODING_NAME=79
  814. ERR_HYPHEN_IN_COMMENT=80
  815. ERR_INVALID_ENCODING=81
  816. ERR_EXT_ENTITY_STANDALONE=82
  817. ERR_CONDSEC_INVALID=83
  818. ERR_VALUE_REQUIRED=84
  819. ERR_NOT_WELL_BALANCED=85
  820. ERR_EXTRA_CONTENT=86
  821. ERR_ENTITY_CHAR_ERROR=87
  822. ERR_ENTITY_PE_INTERNAL=88
  823. ERR_ENTITY_LOOP=89
  824. ERR_ENTITY_BOUNDARY=90
  825. ERR_INVALID_URI=91
  826. ERR_URI_FRAGMENT=92
  827. WAR_CATALOG_PI=93
  828. ERR_NO_DTD=94
  829. ERR_CONDSEC_INVALID_KEYWORD=95
  830. ERR_VERSION_MISSING=96
  831. WAR_UNKNOWN_VERSION=97
  832. WAR_LANG_VALUE=98
  833. WAR_NS_URI=99
  834. WAR_NS_URI_RELATIVE=100
  835. ERR_MISSING_ENCODING=101
  836. WAR_SPACE_VALUE=102
  837. ERR_NOT_STANDALONE=103
  838. ERR_ENTITY_PROCESSING=104
  839. ERR_NOTATION_PROCESSING=105
  840. WAR_NS_COLUMN=106
  841. WAR_ENTITY_REDEFINED=107
  842. ERR_UNKNOWN_VERSION=108
  843. ERR_VERSION_MISMATCH=109
  844. ERR_NAME_TOO_LONG=110
  845. ERR_USER_STOP=111
  846. ERR_COMMENT_ABRUPTLY_ENDED=112
  847. WAR_ENCODING_MISMATCH=113
  848. ERR_RESOURCE_LIMIT=114
  849. ERR_ARGUMENT=115
  850. ERR_SYSTEM=116
  851. ERR_REDECL_PREDEF_ENTITY=117
  852. ERR_INT_SUBSET_NOT_FINISHED=118
  853. NS_ERR_XML_NAMESPACE=200
  854. NS_ERR_UNDEFINED_NAMESPACE=201
  855. NS_ERR_QNAME=202
  856. NS_ERR_ATTRIBUTE_REDEFINED=203
  857. NS_ERR_EMPTY=204
  858. NS_ERR_COLON=205
  859. DTD_ATTRIBUTE_DEFAULT=500
  860. DTD_ATTRIBUTE_REDEFINED=501
  861. DTD_ATTRIBUTE_VALUE=502
  862. DTD_CONTENT_ERROR=503
  863. DTD_CONTENT_MODEL=504
  864. DTD_CONTENT_NOT_DETERMINIST=505
  865. DTD_DIFFERENT_PREFIX=506
  866. DTD_ELEM_DEFAULT_NAMESPACE=507
  867. DTD_ELEM_NAMESPACE=508
  868. DTD_ELEM_REDEFINED=509
  869. DTD_EMPTY_NOTATION=510
  870. DTD_ENTITY_TYPE=511
  871. DTD_ID_FIXED=512
  872. DTD_ID_REDEFINED=513
  873. DTD_ID_SUBSET=514
  874. DTD_INVALID_CHILD=515
  875. DTD_INVALID_DEFAULT=516
  876. DTD_LOAD_ERROR=517
  877. DTD_MISSING_ATTRIBUTE=518
  878. DTD_MIXED_CORRUPT=519
  879. DTD_MULTIPLE_ID=520
  880. DTD_NO_DOC=521
  881. DTD_NO_DTD=522
  882. DTD_NO_ELEM_NAME=523
  883. DTD_NO_PREFIX=524
  884. DTD_NO_ROOT=525
  885. DTD_NOTATION_REDEFINED=526
  886. DTD_NOTATION_VALUE=527
  887. DTD_NOT_EMPTY=528
  888. DTD_NOT_PCDATA=529
  889. DTD_NOT_STANDALONE=530
  890. DTD_ROOT_NAME=531
  891. DTD_STANDALONE_WHITE_SPACE=532
  892. DTD_UNKNOWN_ATTRIBUTE=533
  893. DTD_UNKNOWN_ELEM=534
  894. DTD_UNKNOWN_ENTITY=535
  895. DTD_UNKNOWN_ID=536
  896. DTD_UNKNOWN_NOTATION=537
  897. DTD_STANDALONE_DEFAULTED=538
  898. DTD_XMLID_VALUE=539
  899. DTD_XMLID_TYPE=540
  900. DTD_DUP_TOKEN=541
  901. HTML_STRUCURE_ERROR=800
  902. HTML_UNKNOWN_TAG=801
  903. HTML_INCORRECTLY_OPENED_COMMENT=802
  904. RNGP_ANYNAME_ATTR_ANCESTOR=1000
  905. RNGP_ATTR_CONFLICT=1001
  906. RNGP_ATTRIBUTE_CHILDREN=1002
  907. RNGP_ATTRIBUTE_CONTENT=1003
  908. RNGP_ATTRIBUTE_EMPTY=1004
  909. RNGP_ATTRIBUTE_NOOP=1005
  910. RNGP_CHOICE_CONTENT=1006
  911. RNGP_CHOICE_EMPTY=1007
  912. RNGP_CREATE_FAILURE=1008
  913. RNGP_DATA_CONTENT=1009
  914. RNGP_DEF_CHOICE_AND_INTERLEAVE=1010
  915. RNGP_DEFINE_CREATE_FAILED=1011
  916. RNGP_DEFINE_EMPTY=1012
  917. RNGP_DEFINE_MISSING=1013
  918. RNGP_DEFINE_NAME_MISSING=1014
  919. RNGP_ELEM_CONTENT_EMPTY=1015
  920. RNGP_ELEM_CONTENT_ERROR=1016
  921. RNGP_ELEMENT_EMPTY=1017
  922. RNGP_ELEMENT_CONTENT=1018
  923. RNGP_ELEMENT_NAME=1019
  924. RNGP_ELEMENT_NO_CONTENT=1020
  925. RNGP_ELEM_TEXT_CONFLICT=1021
  926. RNGP_EMPTY=1022
  927. RNGP_EMPTY_CONSTRUCT=1023
  928. RNGP_EMPTY_CONTENT=1024
  929. RNGP_EMPTY_NOT_EMPTY=1025
  930. RNGP_ERROR_TYPE_LIB=1026
  931. RNGP_EXCEPT_EMPTY=1027
  932. RNGP_EXCEPT_MISSING=1028
  933. RNGP_EXCEPT_MULTIPLE=1029
  934. RNGP_EXCEPT_NO_CONTENT=1030
  935. RNGP_EXTERNALREF_EMTPY=1031
  936. RNGP_EXTERNAL_REF_FAILURE=1032
  937. RNGP_EXTERNALREF_RECURSE=1033
  938. RNGP_FORBIDDEN_ATTRIBUTE=1034
  939. RNGP_FOREIGN_ELEMENT=1035
  940. RNGP_GRAMMAR_CONTENT=1036
  941. RNGP_GRAMMAR_EMPTY=1037
  942. RNGP_GRAMMAR_MISSING=1038
  943. RNGP_GRAMMAR_NO_START=1039
  944. RNGP_GROUP_ATTR_CONFLICT=1040
  945. RNGP_HREF_ERROR=1041
  946. RNGP_INCLUDE_EMPTY=1042
  947. RNGP_INCLUDE_FAILURE=1043
  948. RNGP_INCLUDE_RECURSE=1044
  949. RNGP_INTERLEAVE_ADD=1045
  950. RNGP_INTERLEAVE_CREATE_FAILED=1046
  951. RNGP_INTERLEAVE_EMPTY=1047
  952. RNGP_INTERLEAVE_NO_CONTENT=1048
  953. RNGP_INVALID_DEFINE_NAME=1049
  954. RNGP_INVALID_URI=1050
  955. RNGP_INVALID_VALUE=1051
  956. RNGP_MISSING_HREF=1052
  957. RNGP_NAME_MISSING=1053
  958. RNGP_NEED_COMBINE=1054
  959. RNGP_NOTALLOWED_NOT_EMPTY=1055
  960. RNGP_NSNAME_ATTR_ANCESTOR=1056
  961. RNGP_NSNAME_NO_NS=1057
  962. RNGP_PARAM_FORBIDDEN=1058
  963. RNGP_PARAM_NAME_MISSING=1059
  964. RNGP_PARENTREF_CREATE_FAILED=1060
  965. RNGP_PARENTREF_NAME_INVALID=1061
  966. RNGP_PARENTREF_NO_NAME=1062
  967. RNGP_PARENTREF_NO_PARENT=1063
  968. RNGP_PARENTREF_NOT_EMPTY=1064
  969. RNGP_PARSE_ERROR=1065
  970. RNGP_PAT_ANYNAME_EXCEPT_ANYNAME=1066
  971. RNGP_PAT_ATTR_ATTR=1067
  972. RNGP_PAT_ATTR_ELEM=1068
  973. RNGP_PAT_DATA_EXCEPT_ATTR=1069
  974. RNGP_PAT_DATA_EXCEPT_ELEM=1070
  975. RNGP_PAT_DATA_EXCEPT_EMPTY=1071
  976. RNGP_PAT_DATA_EXCEPT_GROUP=1072
  977. RNGP_PAT_DATA_EXCEPT_INTERLEAVE=1073
  978. RNGP_PAT_DATA_EXCEPT_LIST=1074
  979. RNGP_PAT_DATA_EXCEPT_ONEMORE=1075
  980. RNGP_PAT_DATA_EXCEPT_REF=1076
  981. RNGP_PAT_DATA_EXCEPT_TEXT=1077
  982. RNGP_PAT_LIST_ATTR=1078
  983. RNGP_PAT_LIST_ELEM=1079
  984. RNGP_PAT_LIST_INTERLEAVE=1080
  985. RNGP_PAT_LIST_LIST=1081
  986. RNGP_PAT_LIST_REF=1082
  987. RNGP_PAT_LIST_TEXT=1083
  988. RNGP_PAT_NSNAME_EXCEPT_ANYNAME=1084
  989. RNGP_PAT_NSNAME_EXCEPT_NSNAME=1085
  990. RNGP_PAT_ONEMORE_GROUP_ATTR=1086
  991. RNGP_PAT_ONEMORE_INTERLEAVE_ATTR=1087
  992. RNGP_PAT_START_ATTR=1088
  993. RNGP_PAT_START_DATA=1089
  994. RNGP_PAT_START_EMPTY=1090
  995. RNGP_PAT_START_GROUP=1091
  996. RNGP_PAT_START_INTERLEAVE=1092
  997. RNGP_PAT_START_LIST=1093
  998. RNGP_PAT_START_ONEMORE=1094
  999. RNGP_PAT_START_TEXT=1095
  1000. RNGP_PAT_START_VALUE=1096
  1001. RNGP_PREFIX_UNDEFINED=1097
  1002. RNGP_REF_CREATE_FAILED=1098
  1003. RNGP_REF_CYCLE=1099
  1004. RNGP_REF_NAME_INVALID=1100
  1005. RNGP_REF_NO_DEF=1101
  1006. RNGP_REF_NO_NAME=1102
  1007. RNGP_REF_NOT_EMPTY=1103
  1008. RNGP_START_CHOICE_AND_INTERLEAVE=1104
  1009. RNGP_START_CONTENT=1105
  1010. RNGP_START_EMPTY=1106
  1011. RNGP_START_MISSING=1107
  1012. RNGP_TEXT_EXPECTED=1108
  1013. RNGP_TEXT_HAS_CHILD=1109
  1014. RNGP_TYPE_MISSING=1110
  1015. RNGP_TYPE_NOT_FOUND=1111
  1016. RNGP_TYPE_VALUE=1112
  1017. RNGP_UNKNOWN_ATTRIBUTE=1113
  1018. RNGP_UNKNOWN_COMBINE=1114
  1019. RNGP_UNKNOWN_CONSTRUCT=1115
  1020. RNGP_UNKNOWN_TYPE_LIB=1116
  1021. RNGP_URI_FRAGMENT=1117
  1022. RNGP_URI_NOT_ABSOLUTE=1118
  1023. RNGP_VALUE_EMPTY=1119
  1024. RNGP_VALUE_NO_CONTENT=1120
  1025. RNGP_XMLNS_NAME=1121
  1026. RNGP_XML_NS=1122
  1027. XPATH_EXPRESSION_OK=1200
  1028. XPATH_NUMBER_ERROR=1201
  1029. XPATH_UNFINISHED_LITERAL_ERROR=1202
  1030. XPATH_START_LITERAL_ERROR=1203
  1031. XPATH_VARIABLE_REF_ERROR=1204
  1032. XPATH_UNDEF_VARIABLE_ERROR=1205
  1033. XPATH_INVALID_PREDICATE_ERROR=1206
  1034. XPATH_EXPR_ERROR=1207
  1035. XPATH_UNCLOSED_ERROR=1208
  1036. XPATH_UNKNOWN_FUNC_ERROR=1209
  1037. XPATH_INVALID_OPERAND=1210
  1038. XPATH_INVALID_TYPE=1211
  1039. XPATH_INVALID_ARITY=1212
  1040. XPATH_INVALID_CTXT_SIZE=1213
  1041. XPATH_INVALID_CTXT_POSITION=1214
  1042. XPATH_MEMORY_ERROR=1215
  1043. XPTR_SYNTAX_ERROR=1216
  1044. XPTR_RESOURCE_ERROR=1217
  1045. XPTR_SUB_RESOURCE_ERROR=1218
  1046. XPATH_UNDEF_PREFIX_ERROR=1219
  1047. XPATH_ENCODING_ERROR=1220
  1048. XPATH_INVALID_CHAR_ERROR=1221
  1049. TREE_INVALID_HEX=1300
  1050. TREE_INVALID_DEC=1301
  1051. TREE_UNTERMINATED_ENTITY=1302
  1052. TREE_NOT_UTF8=1303
  1053. SAVE_NOT_UTF8=1400
  1054. SAVE_CHAR_INVALID=1401
  1055. SAVE_NO_DOCTYPE=1402
  1056. SAVE_UNKNOWN_ENCODING=1403
  1057. REGEXP_COMPILE_ERROR=1450
  1058. IO_UNKNOWN=1500
  1059. IO_EACCES=1501
  1060. IO_EAGAIN=1502
  1061. IO_EBADF=1503
  1062. IO_EBADMSG=1504
  1063. IO_EBUSY=1505
  1064. IO_ECANCELED=1506
  1065. IO_ECHILD=1507
  1066. IO_EDEADLK=1508
  1067. IO_EDOM=1509
  1068. IO_EEXIST=1510
  1069. IO_EFAULT=1511
  1070. IO_EFBIG=1512
  1071. IO_EINPROGRESS=1513
  1072. IO_EINTR=1514
  1073. IO_EINVAL=1515
  1074. IO_EIO=1516
  1075. IO_EISDIR=1517
  1076. IO_EMFILE=1518
  1077. IO_EMLINK=1519
  1078. IO_EMSGSIZE=1520
  1079. IO_ENAMETOOLONG=1521
  1080. IO_ENFILE=1522
  1081. IO_ENODEV=1523
  1082. IO_ENOENT=1524
  1083. IO_ENOEXEC=1525
  1084. IO_ENOLCK=1526
  1085. IO_ENOMEM=1527
  1086. IO_ENOSPC=1528
  1087. IO_ENOSYS=1529
  1088. IO_ENOTDIR=1530
  1089. IO_ENOTEMPTY=1531
  1090. IO_ENOTSUP=1532
  1091. IO_ENOTTY=1533
  1092. IO_ENXIO=1534
  1093. IO_EPERM=1535
  1094. IO_EPIPE=1536
  1095. IO_ERANGE=1537
  1096. IO_EROFS=1538
  1097. IO_ESPIPE=1539
  1098. IO_ESRCH=1540
  1099. IO_ETIMEDOUT=1541
  1100. IO_EXDEV=1542
  1101. IO_NETWORK_ATTEMPT=1543
  1102. IO_ENCODER=1544
  1103. IO_FLUSH=1545
  1104. IO_WRITE=1546
  1105. IO_NO_INPUT=1547
  1106. IO_BUFFER_FULL=1548
  1107. IO_LOAD_ERROR=1549
  1108. IO_ENOTSOCK=1550
  1109. IO_EISCONN=1551
  1110. IO_ECONNREFUSED=1552
  1111. IO_ENETUNREACH=1553
  1112. IO_EADDRINUSE=1554
  1113. IO_EALREADY=1555
  1114. IO_EAFNOSUPPORT=1556
  1115. IO_UNSUPPORTED_PROTOCOL=1557
  1116. XINCLUDE_RECURSION=1600
  1117. XINCLUDE_PARSE_VALUE=1601
  1118. XINCLUDE_ENTITY_DEF_MISMATCH=1602
  1119. XINCLUDE_NO_HREF=1603
  1120. XINCLUDE_NO_FALLBACK=1604
  1121. XINCLUDE_HREF_URI=1605
  1122. XINCLUDE_TEXT_FRAGMENT=1606
  1123. XINCLUDE_TEXT_DOCUMENT=1607
  1124. XINCLUDE_INVALID_CHAR=1608
  1125. XINCLUDE_BUILD_FAILED=1609
  1126. XINCLUDE_UNKNOWN_ENCODING=1610
  1127. XINCLUDE_MULTIPLE_ROOT=1611
  1128. XINCLUDE_XPTR_FAILED=1612
  1129. XINCLUDE_XPTR_RESULT=1613
  1130. XINCLUDE_INCLUDE_IN_INCLUDE=1614
  1131. XINCLUDE_FALLBACKS_IN_INCLUDE=1615
  1132. XINCLUDE_FALLBACK_NOT_IN_INCLUDE=1616
  1133. XINCLUDE_DEPRECATED_NS=1617
  1134. XINCLUDE_FRAGMENT_ID=1618
  1135. CATALOG_MISSING_ATTR=1650
  1136. CATALOG_ENTRY_BROKEN=1651
  1137. CATALOG_PREFER_VALUE=1652
  1138. CATALOG_NOT_CATALOG=1653
  1139. CATALOG_RECURSION=1654
  1140. SCHEMAP_PREFIX_UNDEFINED=1700
  1141. SCHEMAP_ATTRFORMDEFAULT_VALUE=1701
  1142. SCHEMAP_ATTRGRP_NONAME_NOREF=1702
  1143. SCHEMAP_ATTR_NONAME_NOREF=1703
  1144. SCHEMAP_COMPLEXTYPE_NONAME_NOREF=1704
  1145. SCHEMAP_ELEMFORMDEFAULT_VALUE=1705
  1146. SCHEMAP_ELEM_NONAME_NOREF=1706
  1147. SCHEMAP_EXTENSION_NO_BASE=1707
  1148. SCHEMAP_FACET_NO_VALUE=1708
  1149. SCHEMAP_FAILED_BUILD_IMPORT=1709
  1150. SCHEMAP_GROUP_NONAME_NOREF=1710
  1151. SCHEMAP_IMPORT_NAMESPACE_NOT_URI=1711
  1152. SCHEMAP_IMPORT_REDEFINE_NSNAME=1712
  1153. SCHEMAP_IMPORT_SCHEMA_NOT_URI=1713
  1154. SCHEMAP_INVALID_BOOLEAN=1714
  1155. SCHEMAP_INVALID_ENUM=1715
  1156. SCHEMAP_INVALID_FACET=1716
  1157. SCHEMAP_INVALID_FACET_VALUE=1717
  1158. SCHEMAP_INVALID_MAXOCCURS=1718
  1159. SCHEMAP_INVALID_MINOCCURS=1719
  1160. SCHEMAP_INVALID_REF_AND_SUBTYPE=1720
  1161. SCHEMAP_INVALID_WHITE_SPACE=1721
  1162. SCHEMAP_NOATTR_NOREF=1722
  1163. SCHEMAP_NOTATION_NO_NAME=1723
  1164. SCHEMAP_NOTYPE_NOREF=1724
  1165. SCHEMAP_REF_AND_SUBTYPE=1725
  1166. SCHEMAP_RESTRICTION_NONAME_NOREF=1726
  1167. SCHEMAP_SIMPLETYPE_NONAME=1727
  1168. SCHEMAP_TYPE_AND_SUBTYPE=1728
  1169. SCHEMAP_UNKNOWN_ALL_CHILD=1729
  1170. SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD=1730
  1171. SCHEMAP_UNKNOWN_ATTR_CHILD=1731
  1172. SCHEMAP_UNKNOWN_ATTRGRP_CHILD=1732
  1173. SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP=1733
  1174. SCHEMAP_UNKNOWN_BASE_TYPE=1734
  1175. SCHEMAP_UNKNOWN_CHOICE_CHILD=1735
  1176. SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD=1736
  1177. SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD=1737
  1178. SCHEMAP_UNKNOWN_ELEM_CHILD=1738
  1179. SCHEMAP_UNKNOWN_EXTENSION_CHILD=1739
  1180. SCHEMAP_UNKNOWN_FACET_CHILD=1740
  1181. SCHEMAP_UNKNOWN_FACET_TYPE=1741
  1182. SCHEMAP_UNKNOWN_GROUP_CHILD=1742
  1183. SCHEMAP_UNKNOWN_IMPORT_CHILD=1743
  1184. SCHEMAP_UNKNOWN_LIST_CHILD=1744
  1185. SCHEMAP_UNKNOWN_NOTATION_CHILD=1745
  1186. SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD=1746
  1187. SCHEMAP_UNKNOWN_REF=1747
  1188. SCHEMAP_UNKNOWN_RESTRICTION_CHILD=1748
  1189. SCHEMAP_UNKNOWN_SCHEMAS_CHILD=1749
  1190. SCHEMAP_UNKNOWN_SEQUENCE_CHILD=1750
  1191. SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD=1751
  1192. SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD=1752
  1193. SCHEMAP_UNKNOWN_TYPE=1753
  1194. SCHEMAP_UNKNOWN_UNION_CHILD=1754
  1195. SCHEMAP_ELEM_DEFAULT_FIXED=1755
  1196. SCHEMAP_REGEXP_INVALID=1756
  1197. SCHEMAP_FAILED_LOAD=1757
  1198. SCHEMAP_NOTHING_TO_PARSE=1758
  1199. SCHEMAP_NOROOT=1759
  1200. SCHEMAP_REDEFINED_GROUP=1760
  1201. SCHEMAP_REDEFINED_TYPE=1761
  1202. SCHEMAP_REDEFINED_ELEMENT=1762
  1203. SCHEMAP_REDEFINED_ATTRGROUP=1763
  1204. SCHEMAP_REDEFINED_ATTR=1764
  1205. SCHEMAP_REDEFINED_NOTATION=1765
  1206. SCHEMAP_FAILED_PARSE=1766
  1207. SCHEMAP_UNKNOWN_PREFIX=1767
  1208. SCHEMAP_DEF_AND_PREFIX=1768
  1209. SCHEMAP_UNKNOWN_INCLUDE_CHILD=1769
  1210. SCHEMAP_INCLUDE_SCHEMA_NOT_URI=1770
  1211. SCHEMAP_INCLUDE_SCHEMA_NO_URI=1771
  1212. SCHEMAP_NOT_SCHEMA=1772
  1213. SCHEMAP_UNKNOWN_MEMBER_TYPE=1773
  1214. SCHEMAP_INVALID_ATTR_USE=1774
  1215. SCHEMAP_RECURSIVE=1775
  1216. SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE=1776
  1217. SCHEMAP_INVALID_ATTR_COMBINATION=1777
  1218. SCHEMAP_INVALID_ATTR_INLINE_COMBINATION=1778
  1219. SCHEMAP_MISSING_SIMPLETYPE_CHILD=1779
  1220. SCHEMAP_INVALID_ATTR_NAME=1780
  1221. SCHEMAP_REF_AND_CONTENT=1781
  1222. SCHEMAP_CT_PROPS_CORRECT_1=1782
  1223. SCHEMAP_CT_PROPS_CORRECT_2=1783
  1224. SCHEMAP_CT_PROPS_CORRECT_3=1784
  1225. SCHEMAP_CT_PROPS_CORRECT_4=1785
  1226. SCHEMAP_CT_PROPS_CORRECT_5=1786
  1227. SCHEMAP_DERIVATION_OK_RESTRICTION_1=1787
  1228. SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1=1788
  1229. SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2=1789
  1230. SCHEMAP_DERIVATION_OK_RESTRICTION_2_2=1790
  1231. SCHEMAP_DERIVATION_OK_RESTRICTION_3=1791
  1232. SCHEMAP_WILDCARD_INVALID_NS_MEMBER=1792
  1233. SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE=1793
  1234. SCHEMAP_UNION_NOT_EXPRESSIBLE=1794
  1235. SCHEMAP_SRC_IMPORT_3_1=1795
  1236. SCHEMAP_SRC_IMPORT_3_2=1796
  1237. SCHEMAP_DERIVATION_OK_RESTRICTION_4_1=1797
  1238. SCHEMAP_DERIVATION_OK_RESTRICTION_4_2=1798
  1239. SCHEMAP_DERIVATION_OK_RESTRICTION_4_3=1799
  1240. SCHEMAP_COS_CT_EXTENDS_1_3=1800
  1241. SCHEMAV_NOROOT=1801
  1242. SCHEMAV_UNDECLAREDELEM=1802
  1243. SCHEMAV_NOTTOPLEVEL=1803
  1244. SCHEMAV_MISSING=1804
  1245. SCHEMAV_WRONGELEM=1805
  1246. SCHEMAV_NOTYPE=1806
  1247. SCHEMAV_NOROLLBACK=1807
  1248. SCHEMAV_ISABSTRACT=1808
  1249. SCHEMAV_NOTEMPTY=1809
  1250. SCHEMAV_ELEMCONT=1810
  1251. SCHEMAV_HAVEDEFAULT=1811
  1252. SCHEMAV_NOTNILLABLE=1812
  1253. SCHEMAV_EXTRACONTENT=1813
  1254. SCHEMAV_INVALIDATTR=1814
  1255. SCHEMAV_INVALIDELEM=1815
  1256. SCHEMAV_NOTDETERMINIST=1816
  1257. SCHEMAV_CONSTRUCT=1817
  1258. SCHEMAV_INTERNAL=1818
  1259. SCHEMAV_NOTSIMPLE=1819
  1260. SCHEMAV_ATTRUNKNOWN=1820
  1261. SCHEMAV_ATTRINVALID=1821
  1262. SCHEMAV_VALUE=1822
  1263. SCHEMAV_FACET=1823
  1264. SCHEMAV_CVC_DATATYPE_VALID_1_2_1=1824
  1265. SCHEMAV_CVC_DATATYPE_VALID_1_2_2=1825
  1266. SCHEMAV_CVC_DATATYPE_VALID_1_2_3=1826
  1267. SCHEMAV_CVC_TYPE_3_1_1=1827
  1268. SCHEMAV_CVC_TYPE_3_1_2=1828
  1269. SCHEMAV_CVC_FACET_VALID=1829
  1270. SCHEMAV_CVC_LENGTH_VALID=1830
  1271. SCHEMAV_CVC_MINLENGTH_VALID=1831
  1272. SCHEMAV_CVC_MAXLENGTH_VALID=1832
  1273. SCHEMAV_CVC_MININCLUSIVE_VALID=1833
  1274. SCHEMAV_CVC_MAXINCLUSIVE_VALID=1834
  1275. SCHEMAV_CVC_MINEXCLUSIVE_VALID=1835
  1276. SCHEMAV_CVC_MAXEXCLUSIVE_VALID=1836
  1277. SCHEMAV_CVC_TOTALDIGITS_VALID=1837
  1278. SCHEMAV_CVC_FRACTIONDIGITS_VALID=1838
  1279. SCHEMAV_CVC_PATTERN_VALID=1839
  1280. SCHEMAV_CVC_ENUMERATION_VALID=1840
  1281. SCHEMAV_CVC_COMPLEX_TYPE_2_1=1841
  1282. SCHEMAV_CVC_COMPLEX_TYPE_2_2=1842
  1283. SCHEMAV_CVC_COMPLEX_TYPE_2_3=1843
  1284. SCHEMAV_CVC_COMPLEX_TYPE_2_4=1844
  1285. SCHEMAV_CVC_ELT_1=1845
  1286. SCHEMAV_CVC_ELT_2=1846
  1287. SCHEMAV_CVC_ELT_3_1=1847
  1288. SCHEMAV_CVC_ELT_3_2_1=1848
  1289. SCHEMAV_CVC_ELT_3_2_2=1849
  1290. SCHEMAV_CVC_ELT_4_1=1850
  1291. SCHEMAV_CVC_ELT_4_2=1851
  1292. SCHEMAV_CVC_ELT_4_3=1852
  1293. SCHEMAV_CVC_ELT_5_1_1=1853
  1294. SCHEMAV_CVC_ELT_5_1_2=1854
  1295. SCHEMAV_CVC_ELT_5_2_1=1855
  1296. SCHEMAV_CVC_ELT_5_2_2_1=1856
  1297. SCHEMAV_CVC_ELT_5_2_2_2_1=1857
  1298. SCHEMAV_CVC_ELT_5_2_2_2_2=1858
  1299. SCHEMAV_CVC_ELT_6=1859
  1300. SCHEMAV_CVC_ELT_7=1860
  1301. SCHEMAV_CVC_ATTRIBUTE_1=1861
  1302. SCHEMAV_CVC_ATTRIBUTE_2=1862
  1303. SCHEMAV_CVC_ATTRIBUTE_3=1863
  1304. SCHEMAV_CVC_ATTRIBUTE_4=1864
  1305. SCHEMAV_CVC_COMPLEX_TYPE_3_1=1865
  1306. SCHEMAV_CVC_COMPLEX_TYPE_3_2_1=1866
  1307. SCHEMAV_CVC_COMPLEX_TYPE_3_2_2=1867
  1308. SCHEMAV_CVC_COMPLEX_TYPE_4=1868
  1309. SCHEMAV_CVC_COMPLEX_TYPE_5_1=1869
  1310. SCHEMAV_CVC_COMPLEX_TYPE_5_2=1870
  1311. SCHEMAV_ELEMENT_CONTENT=1871
  1312. SCHEMAV_DOCUMENT_ELEMENT_MISSING=1872
  1313. SCHEMAV_CVC_COMPLEX_TYPE_1=1873
  1314. SCHEMAV_CVC_AU=1874
  1315. SCHEMAV_CVC_TYPE_1=1875
  1316. SCHEMAV_CVC_TYPE_2=1876
  1317. SCHEMAV_CVC_IDC=1877
  1318. SCHEMAV_CVC_WILDCARD=1878
  1319. SCHEMAV_MISC=1879
  1320. XPTR_UNKNOWN_SCHEME=1900
  1321. XPTR_CHILDSEQ_START=1901
  1322. XPTR_EVAL_FAILED=1902
  1323. XPTR_EXTRA_OBJECTS=1903
  1324. C14N_CREATE_CTXT=1950
  1325. C14N_REQUIRES_UTF8=1951
  1326. C14N_CREATE_STACK=1952
  1327. C14N_INVALID_NODE=1953
  1328. C14N_UNKNOW_NODE=1954
  1329. C14N_RELATIVE_NAMESPACE=1955
  1330. FTP_PASV_ANSWER=2000
  1331. FTP_EPSV_ANSWER=2001
  1332. FTP_ACCNT=2002
  1333. FTP_URL_SYNTAX=2003
  1334. HTTP_URL_SYNTAX=2020
  1335. HTTP_USE_IP=2021
  1336. HTTP_UNKNOWN_HOST=2022
  1337. SCHEMAP_SRC_SIMPLE_TYPE_1=3000
  1338. SCHEMAP_SRC_SIMPLE_TYPE_2=3001
  1339. SCHEMAP_SRC_SIMPLE_TYPE_3=3002
  1340. SCHEMAP_SRC_SIMPLE_TYPE_4=3003
  1341. SCHEMAP_SRC_RESOLVE=3004
  1342. SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE=3005
  1343. SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE=3006
  1344. SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES=3007
  1345. SCHEMAP_ST_PROPS_CORRECT_1=3008
  1346. SCHEMAP_ST_PROPS_CORRECT_2=3009
  1347. SCHEMAP_ST_PROPS_CORRECT_3=3010
  1348. SCHEMAP_COS_ST_RESTRICTS_1_1=3011
  1349. SCHEMAP_COS_ST_RESTRICTS_1_2=3012
  1350. SCHEMAP_COS_ST_RESTRICTS_1_3_1=3013
  1351. SCHEMAP_COS_ST_RESTRICTS_1_3_2=3014
  1352. SCHEMAP_COS_ST_RESTRICTS_2_1=3015
  1353. SCHEMAP_COS_ST_RESTRICTS_2_3_1_1=3016
  1354. SCHEMAP_COS_ST_RESTRICTS_2_3_1_2=3017
  1355. SCHEMAP_COS_ST_RESTRICTS_2_3_2_1=3018
  1356. SCHEMAP_COS_ST_RESTRICTS_2_3_2_2=3019
  1357. SCHEMAP_COS_ST_RESTRICTS_2_3_2_3=3020
  1358. SCHEMAP_COS_ST_RESTRICTS_2_3_2_4=3021
  1359. SCHEMAP_COS_ST_RESTRICTS_2_3_2_5=3022
  1360. SCHEMAP_COS_ST_RESTRICTS_3_1=3023
  1361. SCHEMAP_COS_ST_RESTRICTS_3_3_1=3024
  1362. SCHEMAP_COS_ST_RESTRICTS_3_3_1_2=3025
  1363. SCHEMAP_COS_ST_RESTRICTS_3_3_2_2=3026
  1364. SCHEMAP_COS_ST_RESTRICTS_3_3_2_1=3027
  1365. SCHEMAP_COS_ST_RESTRICTS_3_3_2_3=3028
  1366. SCHEMAP_COS_ST_RESTRICTS_3_3_2_4=3029
  1367. SCHEMAP_COS_ST_RESTRICTS_3_3_2_5=3030
  1368. SCHEMAP_COS_ST_DERIVED_OK_2_1=3031
  1369. SCHEMAP_COS_ST_DERIVED_OK_2_2=3032
  1370. SCHEMAP_S4S_ELEM_NOT_ALLOWED=3033
  1371. SCHEMAP_S4S_ELEM_MISSING=3034
  1372. SCHEMAP_S4S_ATTR_NOT_ALLOWED=3035
  1373. SCHEMAP_S4S_ATTR_MISSING=3036
  1374. SCHEMAP_S4S_ATTR_INVALID_VALUE=3037
  1375. SCHEMAP_SRC_ELEMENT_1=3038
  1376. SCHEMAP_SRC_ELEMENT_2_1=3039
  1377. SCHEMAP_SRC_ELEMENT_2_2=3040
  1378. SCHEMAP_SRC_ELEMENT_3=3041
  1379. SCHEMAP_P_PROPS_CORRECT_1=3042
  1380. SCHEMAP_P_PROPS_CORRECT_2_1=3043
  1381. SCHEMAP_P_PROPS_CORRECT_2_2=3044
  1382. SCHEMAP_E_PROPS_CORRECT_2=3045
  1383. SCHEMAP_E_PROPS_CORRECT_3=3046
  1384. SCHEMAP_E_PROPS_CORRECT_4=3047
  1385. SCHEMAP_E_PROPS_CORRECT_5=3048
  1386. SCHEMAP_E_PROPS_CORRECT_6=3049
  1387. SCHEMAP_SRC_INCLUDE=3050
  1388. SCHEMAP_SRC_ATTRIBUTE_1=3051
  1389. SCHEMAP_SRC_ATTRIBUTE_2=3052
  1390. SCHEMAP_SRC_ATTRIBUTE_3_1=3053
  1391. SCHEMAP_SRC_ATTRIBUTE_3_2=3054
  1392. SCHEMAP_SRC_ATTRIBUTE_4=3055
  1393. SCHEMAP_NO_XMLNS=3056
  1394. SCHEMAP_NO_XSI=3057
  1395. SCHEMAP_COS_VALID_DEFAULT_1=3058
  1396. SCHEMAP_COS_VALID_DEFAULT_2_1=3059
  1397. SCHEMAP_COS_VALID_DEFAULT_2_2_1=3060
  1398. SCHEMAP_COS_VALID_DEFAULT_2_2_2=3061
  1399. SCHEMAP_CVC_SIMPLE_TYPE=3062
  1400. SCHEMAP_COS_CT_EXTENDS_1_1=3063
  1401. SCHEMAP_SRC_IMPORT_1_1=3064
  1402. SCHEMAP_SRC_IMPORT_1_2=3065
  1403. SCHEMAP_SRC_IMPORT_2=3066
  1404. SCHEMAP_SRC_IMPORT_2_1=3067
  1405. SCHEMAP_SRC_IMPORT_2_2=3068
  1406. SCHEMAP_INTERNAL=3069
  1407. SCHEMAP_NOT_DETERMINISTIC=3070
  1408. SCHEMAP_SRC_ATTRIBUTE_GROUP_1=3071
  1409. SCHEMAP_SRC_ATTRIBUTE_GROUP_2=3072
  1410. SCHEMAP_SRC_ATTRIBUTE_GROUP_3=3073
  1411. SCHEMAP_MG_PROPS_CORRECT_1=3074
  1412. SCHEMAP_MG_PROPS_CORRECT_2=3075
  1413. SCHEMAP_SRC_CT_1=3076
  1414. SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3=3077
  1415. SCHEMAP_AU_PROPS_CORRECT_2=3078
  1416. SCHEMAP_A_PROPS_CORRECT_2=3079
  1417. SCHEMAP_C_PROPS_CORRECT=3080
  1418. SCHEMAP_SRC_REDEFINE=3081
  1419. SCHEMAP_SRC_IMPORT=3082
  1420. SCHEMAP_WARN_SKIP_SCHEMA=3083
  1421. SCHEMAP_WARN_UNLOCATED_SCHEMA=3084
  1422. SCHEMAP_WARN_ATTR_REDECL_PROH=3085
  1423. SCHEMAP_WARN_ATTR_POINTLESS_PROH=3086
  1424. SCHEMAP_AG_PROPS_CORRECT=3087
  1425. SCHEMAP_COS_CT_EXTENDS_1_2=3088
  1426. SCHEMAP_AU_PROPS_CORRECT=3089
  1427. SCHEMAP_A_PROPS_CORRECT_3=3090
  1428. SCHEMAP_COS_ALL_LIMITED=3091
  1429. SCHEMATRONV_ASSERT=4000
  1430. SCHEMATRONV_REPORT=4001
  1431. MODULE_OPEN=4900
  1432. MODULE_CLOSE=4901
  1433. CHECK_FOUND_ELEMENT=5000
  1434. CHECK_FOUND_ATTRIBUTE=5001
  1435. CHECK_FOUND_TEXT=5002
  1436. CHECK_FOUND_CDATA=5003
  1437. CHECK_FOUND_ENTITYREF=5004
  1438. CHECK_FOUND_ENTITY=5005
  1439. CHECK_FOUND_PI=5006
  1440. CHECK_FOUND_COMMENT=5007
  1441. CHECK_FOUND_DOCTYPE=5008
  1442. CHECK_FOUND_FRAGMENT=5009
  1443. CHECK_FOUND_NOTATION=5010
  1444. CHECK_UNKNOWN_NODE=5011
  1445. CHECK_ENTITY_TYPE=5012
  1446. CHECK_NO_PARENT=5013
  1447. CHECK_NO_DOC=5014
  1448. CHECK_NO_NAME=5015
  1449. CHECK_NO_ELEM=5016
  1450. CHECK_WRONG_DOC=5017
  1451. CHECK_NO_PREV=5018
  1452. CHECK_WRONG_PREV=5019
  1453. CHECK_NO_NEXT=5020
  1454. CHECK_WRONG_NEXT=5021
  1455. CHECK_NOT_DTD=5022
  1456. CHECK_NOT_ATTR=5023
  1457. CHECK_NOT_ATTR_DECL=5024
  1458. CHECK_NOT_ELEM_DECL=5025
  1459. CHECK_NOT_ENTITY_DECL=5026
  1460. CHECK_NOT_NS_DECL=5027
  1461. CHECK_NO_HREF=5028
  1462. CHECK_WRONG_PARENT=5029
  1463. CHECK_NS_SCOPE=5030
  1464. CHECK_NS_ANCESTOR=5031
  1465. CHECK_NOT_UTF8=5032
  1466. CHECK_NO_DICT=5033
  1467. CHECK_NOT_NCNAME=5034
  1468. CHECK_OUTSIDE_DICT=5035
  1469. CHECK_WRONG_NAME=5036
  1470. CHECK_NAME_NOT_NULL=5037
  1471. I18N_NO_NAME=6000
  1472. I18N_NO_HANDLER=6001
  1473. I18N_EXCESS_HANDLER=6002
  1474. I18N_CONV_FAILED=6003
  1475. I18N_NO_OUTPUT=6004
  1476. BUF_OVERFLOW=7000
  1477. """
  1478. cdef object __RELAXNG_ERROR_TYPES = """\
  1479. RELAXNG_OK=0
  1480. RELAXNG_ERR_MEMORY=1
  1481. RELAXNG_ERR_TYPE=2
  1482. RELAXNG_ERR_TYPEVAL=3
  1483. RELAXNG_ERR_DUPID=4
  1484. RELAXNG_ERR_TYPECMP=5
  1485. RELAXNG_ERR_NOSTATE=6
  1486. RELAXNG_ERR_NODEFINE=7
  1487. RELAXNG_ERR_LISTEXTRA=8
  1488. RELAXNG_ERR_LISTEMPTY=9
  1489. RELAXNG_ERR_INTERNODATA=10
  1490. RELAXNG_ERR_INTERSEQ=11
  1491. RELAXNG_ERR_INTEREXTRA=12
  1492. RELAXNG_ERR_ELEMNAME=13
  1493. RELAXNG_ERR_ATTRNAME=14
  1494. RELAXNG_ERR_ELEMNONS=15
  1495. RELAXNG_ERR_ATTRNONS=16
  1496. RELAXNG_ERR_ELEMWRONGNS=17
  1497. RELAXNG_ERR_ATTRWRONGNS=18
  1498. RELAXNG_ERR_ELEMEXTRANS=19
  1499. RELAXNG_ERR_ATTREXTRANS=20
  1500. RELAXNG_ERR_ELEMNOTEMPTY=21
  1501. RELAXNG_ERR_NOELEM=22
  1502. RELAXNG_ERR_NOTELEM=23
  1503. RELAXNG_ERR_ATTRVALID=24
  1504. RELAXNG_ERR_CONTENTVALID=25
  1505. RELAXNG_ERR_EXTRACONTENT=26
  1506. RELAXNG_ERR_INVALIDATTR=27
  1507. RELAXNG_ERR_DATAELEM=28
  1508. RELAXNG_ERR_VALELEM=29
  1509. RELAXNG_ERR_LISTELEM=30
  1510. RELAXNG_ERR_DATATYPE=31
  1511. RELAXNG_ERR_VALUE=32
  1512. RELAXNG_ERR_LIST=33
  1513. RELAXNG_ERR_NOGRAMMAR=34
  1514. RELAXNG_ERR_EXTRADATA=35
  1515. RELAXNG_ERR_LACKDATA=36
  1516. RELAXNG_ERR_INTERNAL=37
  1517. RELAXNG_ERR_ELEMWRONG=38
  1518. RELAXNG_ERR_TEXTWRONG=39
  1519. """
  1520. # --- END: GENERATED CONSTANTS ---
  1521. __initErrorConstants()