ó
    ¤%j”;  ã                   ó°  • S r SrSrSSKrSSKr\R
                  S   S:  a2  \R                  " \5      S   r\\4r	\R                  " S5      S   rS rO\r	S	 rSS
K7  SSKJrJr  SSKJrJrJrJrJrJrJrJrJrJr   SSKr " S S\R@                  5      r  " S S\RB                  5      r"S r#g! \ a    \" S\R>                  " 5       S   -  5      ef = f)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.3é    Né   Úutf8é   c                 ó(   • U c  U $ [        U 5      S   $ )Nr   )Ú_decoder©Úss    Ú-/usr/lib/python3/dist-packages/drv_libxml2.pyÚ_dr   1   s   € Ø‰9ØˆHä˜A“;˜q‘>Ð!ó    c                 ó   • U $ ©N© r   s    r
   r   r   9   s   € Øˆr   )Ú*)Ú	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                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚLocatoréP   z4SAX Locator adapter for libxml2.xmlTextReaderLocatorc                 ó   • Xl         g r   )Ú_Locator__locator)ÚselfÚlocators     r
   Ú__init__ÚLocator.__init__S   s   € Ø �r   c                 ó   • g)z6Return the column number where the current event ends.éÿÿÿÿr   ©r"   s    r
   ÚgetColumnNumberÚLocator.getColumnNumberV   s   € àr   c                 ó6   • U R                   R                  5       $ )z4Return the line number where the current event ends.)r!   Ú
LineNumberr(   s    r
   ÚgetLineNumberÚLocator.getLineNumberZ   s   € à�~‰~×(Ñ(Ó*Ð*r   c                 ó   • g)z3Return the public identifier for the current event.Nr   r(   s    r
   ÚgetPublicIdÚLocator.getPublicId^   s   € àr   c                 ó6   • U R                   R                  5       $ )z3Return the system identifier for the current event.)r!   ÚBaseURIr(   s    r
   ÚgetSystemIdÚLocator.getSystemIdb   s   € à�~‰~×%Ñ%Ó'Ð'r   )Ú	__locatorN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r$   r)   r-   r0   r4   Ú__static_attributes__r   r   r
   r   r   P   s   † Ù>ò!òò+òõ(r   r   c                   óP   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)ÚLibXml2Readeréf   c                 ó²   • [         R                  R                  U 5        SU l        SU l        SU l        SU l        SU l        S U l        S U l	        S U l
        g )Nr   r   )r   Ú	XMLReaderr$   Ú_LibXml2Reader__nsÚ_LibXml2Reader__nspfxÚ_LibXml2Reader__validateÚ_LibXml2Reader__extparamsÚ_LibXml2Reader__parsingÚ_LibXml2Reader__lex_handlerÚ_LibXml2Reader__decl_handlerÚ_LibXml2Reader__errorsr(   s    r
   r$   ÚLibXml2Reader.__init__h   sQ   € Ü×Ñ×$Ñ$ TÔ*àˆŒ	ØˆŒØˆŒØˆÔàˆŒà!ˆÔØ"ˆÔàˆ�r   c           
      óŽ   • U R                   c  / U l         U R                   R                  U[        US [        U5      5      45        g r   )rI   ÚappendÚSAXParseExceptionr   )r"   ÚargÚmsgÚseverityr#   s        r
   Ú_errorHandlerÚLibXml2Reader._errorHandlerw   sC   € Ø�=‰=Ñ ØˆDŒMØ�‰×Ñ˜hÜ/°°DÜ07¸Ó0@óBðCõ 	Dr   c                 ód  • U R                    H™  u  p#U[        R                  [        R                  4;   a  U R                  R                  U5        MF  U(       a1  X0R                   S   S   L a  U R                  R                  U5        M~  U R                  R                  U5        M›     S U l         g )Nr'   r   )rI   Úlibxml2Ú PARSER_SEVERITY_VALIDITY_WARNINGÚPARSER_SEVERITY_WARNINGÚ_err_handlerÚwarningÚ
fatalErrorÚerror)r"   ÚfatalrP   Ú	exceptions       r
   Ú_reportErrorsÚLibXml2Reader._reportErrors~   sŽ   € Ø"&§-¤-ÑˆHØœG×DÑDÜ#×;Ñ;ð=ó =à×!Ñ!×)Ñ)¨)Ö4ö
 ˜Y¯-©-¸Ñ*;¸AÑ*>Ò>Ø×%Ñ%×0Ñ0°Ö;à×%Ñ%×+Ñ+¨IÖ6ñ #0ð ˆ�r   c                 ó  • SU l          [        U[        5      (       a  [        R                  " U5      nOY[
        R                  " U5      n[        R                  " UR                  5       5      nUR                  UR                  5       5      nUR                  U R                  S 5        U R                  (       a‹  UR                  [        R                  S5        UR                  [        R                   S5        UR                  [        R"                  S5        UR                  [        R$                  U R&                  5        O UR                  [        R                  S5        U R(                  (       a  [*        R,                  " 0 0 5      nO[*        R.                  " 0 5      n/ nU R0                  R3                  5          UR5                  5       nUS:X  a  U R6                  b  U R9                  S5        OkUS:X  a   U R6                  b  U R9                  S5        GO«U R6                  b  U R9                  S5        O$U R:                  R=                  [?        S5      5        GOfURA                  5       nUS:X  Gaë  U R(                  (       Gaù  [C        URE                  5       5      [C        URG                  5       5      4n	[C        URI                  5       5      n
0 =Wl%        n0 =Ul&        n/ nURO                  5       (       að  [C        URI                  5       5      n[C        URQ                  5       5      nURS                  S5      (       aW  [U        U5      S:”  a  USS  nOS nURW                  U5        U R0                  RY                  UU5        U RZ                  (       d  M´  [C        URE                  5       5      [C        URG                  5       5      4nXìU'   XûU'   URO                  5       (       a  Mð  UR]                  5         U R0                  R_                  XšU5        URa                  5       (       aA  U R0                  Rc                  Xš5        U H  nU R0                  Re                  U5        M      GOTURW                  U5        GOA[C        URI                  5       5      n	0 =Wl%        nURO                  5       (       aL  [C        URI                  5       5      n[C        URQ                  5       5      UU'   URO                  5       (       a  ML  UR]                  5         U R0                  Rg                  X•5        URa                  5       (       a  U R0                  Ri                  U	5        GOaUS:X  aÜ  U R(                  (       a—  U R0                  Rc                  [C        URE                  5       5      [C        URG                  5       5      4[C        URI                  5       5      5        URk                  5        H  nU R0                  Re                  U5        M      GO³U R0                  Ri                  [C        URI                  5       5      5        GOUS:X  a4  U R0                  Rm                  [C        URQ                  5       5      5        GOEUS	:X  a4  U R0                  Ro                  [C        URQ                  5       5      5        GOUS
:X  a4  U R0                  Rm                  [C        URQ                  5       5      5        GOÑUS:X  a‚  U Rp                  b  U Rp                  Rs                  5         U R0                  Rm                  [C        URQ                  5       5      5        U Rp                  b  U Rp                  Ru                  5         GOIUS:X  aF  U Rp                  b(  U Rw                  [C        URI                  5       5      5        URy                  5         OýUS:X  a6  U Rp                  b(  U R{                  [C        URI                  5       5      5        OÁUS:X  aK  U R0                  R}                  [C        URI                  5       5      [C        URQ                  5       5      5        OpUS:X  a@  U Rp                  b2  U Rp                  R                  [C        URQ                  5       5      5        O*US:X  a  O#US:X  a  OUS:X  a  OUS:X  a  O[?        SU-  5      eGM  US:X  a  U R0                  R�                  5         URƒ                  5         SU l         g ! SU l         f = f)Nr   r   z"Read failed (no details available)Úxmlnsé   é   é   r   é   é   é   é   é   é   é
   é   é   zUnexpected node type %d)BrF   Ú
isinstanceÚStringTypesrT   ÚnewTextReaderFilenamer   Úprepare_input_sourceÚinputBufferÚgetByteStreamÚnewTextReaderr4   ÚSetErrorHandlerrQ   rE   ÚSetParserPropÚPARSER_LOADDTDÚPARSER_DEFAULTATTRSÚPARSER_SUBST_ENTITIESÚPARSER_VALIDATErD   rB   r   ÚAttributesNSImplÚAttributesImplÚ_cont_handlerÚstartDocumentÚReadrI   r]   rW   rY   ÚSAXExceptionÚNodeTyper   ÚNamespaceUriÚ	LocalNameÚNameÚ_attrsÚ_qnamesÚMoveToNextAttributeÚValueÚ
startswithÚlenrL   ÚstartPrefixMappingrC   ÚMoveToElementÚstartElementNSÚIsEmptyElementÚendElementNSÚendPrefixMappingÚstartElementÚ
endElementÚpopÚ
charactersÚignorableWhitespacerG   Ú
startCDATAÚendCDATAÚstartEntityÚResolveEntityÚ	endEntityÚprocessingInstructionÚcommentÚendDocumentÚClose)r"   ÚsourceÚreaderÚinputÚattributesNSImplÚattributesImplÚprefixesÚrÚnodeTypeÚeltNameÚeltQNameÚattrsÚqnamesÚnewPrefixesÚqnameÚvalueÚ	newPrefixÚattNameÚprefixs                      r
   ÚparseÚLibXml2Reader.parse�   sé  € ØˆŒðg	ä˜&¤+×.Ñ.Ü ×6Ò6°vÓ>‘ä!×6Ò6°vÓ>�Ü×+Ò+¨F×,@Ñ,@Ó,BÓC�Ø×,Ñ,¨V×-?Ñ-?Ó-AÓB�Ø×"Ñ" 4×#5Ñ#5°dÔ;à××Ø×$Ñ$¤W×%;Ñ%;¸AÔ>Ø×$Ñ$¤W×%@Ñ%@ÀÔCØ×$Ñ$¤W×%BÑ%BÀ1ÔEØ×$Ñ$¤W×%<Ñ%<¸T¿_¹_ÕMà×$Ñ$¤W×%;Ñ%;¸QÔ?à�y�yÜ#,×#=Ò#=¸bÀÓ#DÑ ä!*×!9Ò!9¸"Ó!=�àˆHà×Ñ×,Ñ,Ô.ØØ—K‘K“M�à˜“6ØŸ=™=Ñ0Ø×*Ñ*¨1Ô-øØ˜!“VØŸ=™=Ñ0Ø×*Ñ*¨1Ô-ÙàŸ=™=Ñ0Ø×*Ñ*¨1Õ-à×)Ñ)×4Ñ4Ü(Ð)MÓNôPáà!Ÿ?™?Ó,�à˜q”=Ø—y—y�yÜ#% f×&9Ñ&9Ó&;Ó#<Ü#% f×&6Ñ&6Ó&8Ó#9ð#;˜ä#% f§k¡k£mÓ#4˜Ø:<Ð<Ð(Ô/°%Ø<>Ð>Ð(Ô0°6Ø&(˜Ø$×8Ñ8×:Ñ:Ü$& v§{¡{£}Ó$5˜EÜ$& v§|¡|£~Ó$6˜EØ$×/Ñ/°×8Ñ8Ü#& u£:°£>Ø05°a°b°	¡Ià04 IØ +× 2Ñ 2°9Ô =Ø $× 2Ñ 2× EÑ EØ$-¨eô!5à'+§|§|Ù$,Ü')¨&×*=Ñ*=Ó*?Ó'@Ü')¨&×*:Ñ*:Ó*<Ó'=ð'?˜Gà.3 7™OØ-2 '™Nð! %×8Ñ8×:Ó:ð" ×,Ñ,Ô.Ø×*Ñ*×9Ñ9Ø#Ð-=ô?à!×0Ñ0×2Ñ2Ø ×.Ñ.×;Ñ;¸GÔMÛ-8 	Ø $× 2Ñ 2× CÑ CÀIÖ Nó .9ð %ŸO™O¨KÖ8ä"$ V§[¡[£]Ó"3˜Ø8:Ð:˜Ô-°Ø$×8Ñ8×:Ñ:Ü&(¨¯©«Ó&7˜GÜ-/°·±³Ó-?˜E '™Nð %×8Ñ8×:Ó:ð ×,Ñ,Ô.Ø×*Ñ*×7Ñ7Ø#ô4à!×0Ñ0×2Ñ2Ø ×.Ñ.×9Ñ9¸'ÔBùà “^Ø—y—yØ×*Ñ*×7Ñ7Ü  ×!4Ñ!4Ó!6Ó7¼¸6×;KÑ;KÓ;MÓ8NÐOÜ §¡£Ó.ô0ð '/§l¡l¦n˜FØ ×.Ñ.×?Ñ?ÀÖGó '5ð ×*Ñ*×5Ñ5´b¸¿¹»Ó6GÖHà “]Ø×&Ñ&×1Ñ1´"°V·\±\³^Ó2DÖEà “^Ø×&Ñ&×:Ñ:¼2¸f¿l¹l»nÓ;MÖNà “^Ø×&Ñ&×1Ñ1´"°V·\±\³^Ó2DÖEà “]Ø×-Ñ-Ñ5Ø×*Ñ*×5Ñ5Ô7Ø×&Ñ&×1Ñ1´"°V·\±\³^Ó2DÔEØ×-Ñ-Ñ5Ø×*Ñ*×3Ñ3Ô5ùà “]Ø×-Ñ-Ñ5Ø×(Ñ(¬¨F¯K©K«MÓ):Ô;Ø×(Ñ(Õ*à “^Ø×-Ñ-Ñ5ØŸ™¤r¨&¯+©+«-Ó'8Ô9øà “]Ø×&Ñ&×<Ñ<Ü˜6Ÿ;™;›=Ó)¬"¨V¯\©\«^Ó*<õ>ð  “]Ø×-Ñ-Ñ5Ø×*Ñ*×2Ñ2´2°f·l±l³nÓ3EÔFøà “^ð à “^Øà “]Øà “^Øô 'Ð'@À8Ñ'KÓLÐLòQ ðR �A‹vØ×"Ñ"×.Ñ.Ô0Ø�L‰LŒNàˆD�Nø˜QˆD�Nús   ‰O$d  Ï/Dd  ÔO1d  ä 	d	c                 ó   • [        S5      e)NzDTDHandler not supported©ÚSAXNotSupportedException)r"   Úhandlers     r
   ÚsetDTDHandlerÚLibXml2Reader.setDTDHandler8  s   € ä&Ð'AÓBÐBr   c                 ó   • [        S5      e)NzEntityResolver not supportedr³   )r"   Úresolvers     r
   ÚsetEntityResolverÚLibXml2Reader.setEntityResolver<  s   € ä&Ð'EÓFÐFr   c                 óä   • U[         :X  a  U R                  $ U[        :X  a  U R                  $ U[        :X  a  U R
                  $ U[        :X  a  gU[        :X  a  U R                  $ [        SU-  5      e)Nr   úFeature '%s' not recognized)
r   rB   r   rC   r   rD   r   r   rE   ÚSAXNotRecognizedException©r"   Únames     r
   Ú
getFeatureÚLibXml2Reader.getFeature@  st   € ØÔ%Ó%Ø—9‘9ÐØÔ/Ó/Ø—<‘<ÐØÔ'Ó'Ø—?‘?Ð"ØÔ)Ó)ØØÔ)Ó)Ø×#Ñ#Ð#ä+Ð,IØ,0ñ-1ó 2ð 2r   c                 ó"  • U R                   (       a  [        SU-  5      eU[        :X  a  X l        g U[        :X  a  X l        g U[        :X  a  X l        g U[        :X  a  US:X  a  [        SU-  5      eg U[        :X  a  X l
        g [        SU-  5      e)Nz#Cannot set feature %s while parsingr   zFeature '%s' not supportedr½   )rF   r´   r   rB   r   rC   r   rD   r   r   rE   r¾   )r"   rÀ   Ústates      r
   Ú
setFeatureÚLibXml2Reader.setFeatureO  s¦   € Ø�>�>Ü*ð ,;Ø=Añ,Bó Cð CàÔ%Ó%Ø�IØÔ/Ó/Ø �LØÔ'Ó'Ø#�OØÔ)Ó)Ø˜‹zä.Ð/KØ/3ñ04ó 5ð 5ð ð Ô)Ó)Ø$Õä+Ð,IØ,0ñ-1ó 2ð 2r   c                 óv   • U[         :X  a  U R                  $ U[        :X  a  U R                  $ [	        SU-  5      e)NúProperty '%s' not recognized)r   rG   r   rH   r¾   r¿   s     r
   ÚgetPropertyÚLibXml2Reader.getPropertyd  sD   € ØÔ+Ó+Ø×%Ñ%Ð%ØÔ1Ó1Ø×&Ñ&Ð&ä+Ð,JØ,0ñ-1ó 2ð 2r   c                 óp   • U[         :X  a  X l        g U[        :X  a  [        SU-  5      e[        SU-  5      e)NzProperty '%s' not supportedrÈ   )r   rG   r   r´   rH   r¾   )r"   rÀ   r¬   s      r
   ÚsetPropertyÚLibXml2Reader.setPropertym  sL   € ØÔ+Ó+Ø!&ÕØÔ1Ó1ä*Ð+HØ+/ñ,0ó 1ð 1ô ,Ð,JØ,0ñ-1ó 2ð 2r   )Ú__decl_handlerÚ__errorsÚ__extparamsÚ__lex_handlerÚ__nsÚ__nspfxÚ	__parsingÚ
__validateN)r7   r8   r9   r:   r$   rQ   r]   r°   r¶   rº   rÁ   rÅ   rÉ   rÌ   r<   r   r   r
   r>   r>   f   s9   † òòDòòiòVCòGò2ò2ò*2õ
2r   r>   c                  ó   • [        5       $ r   )r>   r   r   r
   Úcreate_parserr×   y  s
   € Ü‹?Ðr   )$r;   Ú
__author__Ú__version__ÚsysÚcodecsÚversion_infoÚunicode_escape_decodeÚstrÚunicodern   Úlookupr   r   Úxml.sax._exceptionsÚxml.saxr   r   Úxml.sax.handlerr   r   r   r   r   r   r   r   r   r   rT   ÚImportErrorÚSAXReaderNotAvailableÚexc_infor   rA   r>   r×   r   r   r
   Ú<module>rç      sú   ðñ!ðF 1€
Ø€ã 
Û à×Ñ�AÑ˜ÓØ×.Ò.¨zÓ:¸1Ñ=€Jà˜�.€Kà�}Š}˜VÓ$ QÑ'€Hó"ð €Kòô "ß '÷
÷ 
÷ 
ðLÛô
(ˆi×Ñô (ô,Q2�I×'Ñ'ô Q2óføð[	 ó LÙ
ð !7Ø9<¿º»ÈÑ9Jñ!Kó Lð LðLús   Á?B1 Â1$C