+
    ﲴg;  c                   s   R t RtRt^ RIt^ RIt]P
                  ^ ,          ^8  d;   ]P                  ! ]4      ^ ,          t]]3t	]P                  ! R4      ^,          tR tM]t	R t^ RI5 ^ RIHtHt ^ R	IHtHtHtHtHtHtHtHtHtHt  ^ RIt ! R R]P@                  4      t  ! R R]PB                  4      t"R t#R#   ] d'    ]! R
]P>                  ! 4       ^,          ,          4      hi ; i)a  A SAX2 driver for libxml2, on top of it's XmlReader API

USAGE
    # put this file (drv_libxml2.py) in PYTHONPATH
    import xml.sax
    reader = xml.sax.make_parser(["drv_libxml2"])
    # ...and the rest is standard python sax.

CAVEATS
    - Lexical handlers are supported, except for start/endEntity
      (waiting for XmlReader.ResolveEntity) and start/endDTD
    - Error callbacks are not exactly synchronous, they tend
      to be invoked before the corresponding content callback,
      because the underlying reader interface parses
      data by chunks of 512 bytes
    
TODO
    - search for TODO
    - some ErrorHandler events (warning)
    - some ContentHandler events (setDocumentLocator, skippedEntity)
    - EntityResolver (using libxml2.?)
    - DTDHandler (if/when libxml2 exposes such node types)
    - DeclHandler (if/when libxml2 exposes such node types)
    - property_xml_string?
    - feature_string_interning?
    - Incremental parser
    - additional performance tuning:
      - one might cache callbacks to avoid some name lookups
      - one might implement a smarter way to pass attributes to startElement
        (some kind of lazy evaluation?)
      - there might be room for improvement in start/endPrefixMapping
      - other?

u    Stéphane Bidoul <sbi@skynet.be>z0.3NZutf8c                 s2    V f   V # \        V 4      ^ ,          # N)_decoderZs   &0/usr/lib/python3.14/site-packages/drv_libxml2.py_dr   1   s    9HA;q>!    c                 s    V # r     r   r   r   r   r   9   s    r   )Z*)	xmlreadersaxutils)
feature_namespacesfeature_namespace_prefixesfeature_string_interningfeature_validationfeature_external_gesfeature_external_pesproperty_lexical_handlerproperty_declaration_handlerproperty_dom_nodeproperty_xml_stringz+libxml2 not available: import error was: %sc                   sB   a  ] tR t^Pt o RtR tR tR tR tR t	Rt
V tR# )	Locatorz4SAX Locator adapter for libxml2.xmlTextReaderLocatorc                s    Wn         R # r    )_Locator__locator)selflocator   &&r   __init__ZLocator.__init__S   s     r   c                    R# )z6Return the column number where the current event ends.r   r   r   r   getColumnNumberZLocator.getColumnNumberV   s    	r   c                6    V P                   P                  4       # )z4Return the line number where the current event ends.)r   Z
LineNumberr   r   r   getLineNumberZLocator.getLineNumberZ   s    ~~((**r   c                r   )z3Return the public identifier for the current event.Nr   r   r   r   getPublicIdZLocator.getPublicId^   s    r   c                r   )z3Return the system identifier for the current event.)r   ZBaseURIr   r   r   getSystemIdZLocator.getSystemIdb   s    ~~%%''r   )Z	__locatorN)__name__
__module____qualname____firstlineno____doc__r   r   r   r    r!   __static_attributes____classdictcell__Z__classdict__   @r   r   r   P   s&     >!+( (r   r   c                   s\   a  ] tR t^ft o R tR tR tR tR tR t	R t
R tR	 tR
 tRtV tR# )LibXml2Readerc                s    \         P                  P                  V 4       ^ V n        ^ V n        ^ V n        ^V n        ^ V n        RV n        RV n	        RV n
        R# )i    N)r   	XMLReaderr   _LibXml2Reader__ns_LibXml2Reader__nspfx_LibXml2Reader__validate_LibXml2Reader__extparams_LibXml2Reader__parsing_LibXml2Reader__lex_handler_LibXml2Reader__decl_handler_LibXml2Reader__errorsr   r   r   r   ZLibXml2Reader.__init__h   sQ    $$T*	!"r   c           
     s    V P                   f   . V n         V P                   P                  V\        VR \        V4      4      34       R # r    )r4   appendZSAXParseExceptionr   )r   ZargZmsgseverityr   s   &&&&&r   _errorHandlerZLibXml2Reader._errorHandlerw   sC    == DMh/D070@BC 	Dr   c                s|   V P                    F  w  r#V\        P                  \        P                  39   d   V P                  P                  V4       KG  V'       d;   W0P                   R,          ^,          J d   V P                  P                  V4       K  V P                  P                  V4       K  	  RV n         R# )   Nr   )r4   libxml2Z PARSER_SEVERITY_VALIDITY_WARNINGZPARSER_SEVERITY_WARNING_err_handlerZwarning
fatalErrorZerror)r   Zfatalr6   Z	exceptions   &&  r   _reportErrorsZLibXml2Reader._reportErrors~   s    "&--HGDD#;;= =!!)))4
 Y--*;A*>>%%00;%%++I6 #0 r   c                sd   ^V n          \        V\        4      '       d   \        P                  ! V4      pMY\
        P                  ! V4      p\        P                  ! VP                  4       4      pVP                  VP                  4       4      pVP                  V P                  R4       V P                  '       d   VP                  \        P                  ^4       VP                  \        P                   ^4       VP                  \        P"                  ^4       VP                  \        P$                  V P&                  4       M VP                  \        P                  ^ 4       V P(                  '       d   \*        P,                  ! / / 4      pM\*        P.                  ! / 4      p. pV P0                  P3                  4         VP5                  4       pV^8X  d!   V P6                  e   V P9                  ^ 4       MnV^ 8X  d"   V P6                  e   V P9                  ^ 4       EMV P6                  e   V P9                  ^4       M$V P:                  P=                  \?        R4      4       EMVPA                  4       pV^8X  Ed   V P(                  '       Ed   \C        VPE                  4       4      \C        VPG                  4       4      3p	\C        VPI                  4       4      p
/ ;Xn%        p/ ;Vn&        p. pVPO                  4       '       d   \C        VPI                  4       4      p\C        VPQ                  4       4      pVPS                  R4      '       d^   \U        V4      ^8  d   VR,          pMRpVPW                  V4       V P0                  PY                  VV4       V PZ                  '       g   K  \C        VPE                  4       4      \C        VPG                  4       4      3pWV&   WV&   K  VP]                  4        V P0                  P_                  WV4       VPa                  4       '       dC   V P0                  Pc                  W4       V F  pV P0                  Pe                  V4       K   	  EK  VPW                  V4       EK  \C        VPI                  4       4      p	/ ;Xn%        pVPO                  4       '       d8   \C        VPI                  4       4      p\C        VPQ                  4       4      VV&   KM  VP]                  4        V P0                  Pg                  W4       VPa                  4       '       d   V P0                  Pi                  V	4       EK  EK  V^8X  d   V P(                  '       d   V P0                  Pc                  \C        VPE                  4       4      \C        VPG                  4       4      3\C        VPI                  4       4      4       VPk                  4        F  pV P0                  Pe                  V4       K   	  EKB  V P0                  Pi                  \C        VPI                  4       4      4       EKw  V^8X  d6   V P0                  Pm                  \C        VPQ                  4       4      4       EK  V^8X  d6   V P0                  Po                  \C        VPQ                  4       4      4       EK  V^8X  d6   V P0                  Pm                  \C        VPQ                  4       4      4       EK+  V^8X  d   V Pp                  e   V Pp                  Ps                  4        V P0                  Pm                  \C        VPQ                  4       4      4       V Pp                  e   V Pp                  Pu                  4        EK  EK  V^8X  dJ   V Pp                  e)   V Pw                  \C        VPI                  4       4      4       VPy                  4        EK
  V^8X  d=   V Pp                  e,   V P{                  \C        VPI                  4       4      4       EKJ  EKM  V^8X  dN   V P0                  P}                  \C        VPI                  4       4      \C        VPQ                  4       4      4       EK  V^8X  dG   V Pp                  e6   V Pp                  P                  \C        VPQ                  4       4      4       EK  EK  V^
8X  d   EK  V^8X  d   EK  V^8X  d   EK  V^8X  d   EK  \?        RV,          4      hV^ 8X  d   V P0                  P                  4        VP                  4        ^ V n         R#   ^ T n         i ; i)r8   Nz"Read failed (no details available)Zxmlns:i   NNzUnexpected node type %d)Br1   Z
isinstanceStringTypesr9   ZnewTextReaderFilenamer	   Zprepare_input_sourceZinputBufferZgetByteStreamZnewTextReaderr!   ZSetErrorHandlerr7   r0   ZSetParserPropZPARSER_LOADDTDZPARSER_DEFAULTATTRSZPARSER_SUBST_ENTITIESZPARSER_VALIDATEr/   r-   r   ZAttributesNSImplZAttributesImplZ_cont_handlerZstartDocumentZReadr4   r<   r:   r;   ZSAXExceptionZNodeTyper   ZNamespaceUriZ	LocalNameZNameZ_attrsZ_qnamesZMoveToNextAttributeZValueZ
startswithZlenr5   ZstartPrefixMappingr.   ZMoveToElementZstartElementNSZIsEmptyElementZendElementNSZendPrefixMappingZstartElementZ
endElementZpopZ
charactersZignorableWhitespacer2   Z
startCDATAZendCDATAZstartEntityZResolveEntityZ	endEntityZprocessingInstructionZcommentZendDocumentZClose)r   ZsourceZreaderZinputZattributesNSImplZattributesImplZprefixesZrZnodeTypeZeltNameZeltQNameZattrsZqnamesZnewPrefixesZqnamevalueZ	newPrefixZattNameZprefixs   &&                 r   parseZLibXml2Reader.parse   s   g	&+.. 66v>!66v>++F,@,@,BC,,V-?-?-AB""4#5#5d;$$W%;%;A>$$W%@%@C$$W%B%B1E$$W%<%<T__M$$W%;%;Q?yyy#,#=#=b#D !*!9!9"!=H,,.KKM6==0**1-!V==0**1-==0**1-))44()MNP!??,q=yyy#%f&9&9&;#<#%f&6&6&8#9#;#%fkkm#4:<<(/%<>>(06&($88::$&v{{}$5E$&v||~$6E$//88#&u:>05b	I04I + 2 29 = $ 2 2 E E$-e!5'+|||$,')&*=*=*?'@')&*:*:*<'='?G.37O-2'N,,.**99#-=?!0022 ..;;GM-8	 $ 2 2 C CI N .9 %OOK8"$V[[]"38::-$88::&(&7G-/-?E'N,,.**77#4!0022 ..99'B 3 ^yyy**77 !4!4!676;K;K;M8NO.0 '/llnF ..??G '5 **55b6GH]&&11"V\\^2DE^&&::2flln;MN^&&11"V\\^2DE]--5**557&&11"V\\^2DE--5**335 6 ]--5((FKKM):;((*^--5r&++-'89 6 ]&&<<6;;=)"V\\^*<> ]--5**222flln3EF 6 ^ ^]^ ''@8'KLLAv""..0LLNDNQDNs=   B3d& =B<d& :Dd& A4d& 
B#d& .Dd& <B1d& .N/d& &	d/c                    \        R 4      h)zDTDHandler not supportedSAXNotSupportedException)r   Zhandlerr   r   setDTDHandlerZLibXml2Reader.setDTDHandler8  s    &'ABBr   c                r@   )zEntityResolver not supportedrA   )r   Zresolverr   r   setEntityResolverZLibXml2Reader.setEntityResolver<  s    &'EFFr   c                s    V\         8X  d   V P                  # V\        8X  d   V P                  # V\        8X  d   V P
                  # V\        8X  d   ^# V\        8X  d   V P                  # \        RV,          4      h)r8   Feature '%s' not recognized)
r
   r-   r   r.   r   r/   r   r   r0   SAXNotRecognizedExceptionr   namer   r   
getFeatureZLibXml2Reader.getFeature@  st    %%99//<<''??"))))###+,I,0-1 2 2r   c                sR   V P                   '       d   \        R V,          4      hV\        8X  d	   W n        R# V\        8X  d	   W n        R# V\        8X  d	   W n        R# V\        8X  d   V^ 8X  d   \        RV,          4      hR# V\        8X  d	   W n
        R# \        RV,          4      h)z#Cannot set feature %s while parsingzFeature '%s' not supportedrE   N)r1   rB   r
   r-   r   r.   r   r/   r   r   r0   rF   )r   rH   Zstate   &&&r   
setFeatureZLibXml2Reader.setFeatureO  s    >>>* ,;=A,B C C%%I// L''#O))z./K/304 5 5  ))$+,I,0-1 2 2r   c                s    V\         8X  d   V P                  # V\        8X  d   V P                  # \	        R V,          4      h)Property '%s' not recognized)r   r2   r   r3   rF   rG   r   r   getPropertyZLibXml2Reader.getPropertyd  sD    ++%%%11&&&+,J,0-1 2 2r   c                s    V\         8X  d	   W n        R# V\        8X  d   \        R V,          4      h\        RV,          4      h)zProperty '%s' not supportedrL   N)r   r2   r   rB   r3   rF   )r   rH   r>   rJ   r   setPropertyZLibXml2Reader.setPropertym  sL    ++!&11*+H+/,0 1 1 ,,J,0-1 2 2r   )Z__decl_handlerZ__errorsZ__extparamsZ__lex_handlerZ__nsZ__nspfxZ	__parsingZ
__validateN)r"   r#   r$   r%   r   r7   r<   r?   rC   rD   rI   rK   rM   rN   r'   r(   r)   r*   r   r+   r+   f   sA     DiVCG22*2
2 
2r   r+   c                  s    \        4       # r    )r+   r   r   r   create_parserrO   y  s
    ?r   )$r&   Z
__author__Z__version__ZsysZcodecsZversion_infoZunicode_escape_decodeZstrZunicoder=   Zlookupr   r   Zxml.sax._exceptionsZxml.saxr   r	   Zxml.sax.handlerr
   r   r   r   r   r   r   r   r   r   r9   ZImportErrorZSAXReaderNotAvailableZexc_infor   r,   r+   rO   r   r   r   <module>rP      s   !F 1
 
 A..z:1=J.K}}V$Q'H" K " '
 
 
L
(i (,Q2I'' Q2f[	  L
 !79<9J!K L LLs   B? ?-C,