
    Rh>                        d Z dZddl ddlmZmZ ddlmZ ddlmZmZ ddlm	Z	 ddlm
Z
mZ 	 dd	lmZ  eed
      s	 edd      ddlmZmZmZ ej*                  Zej,                  Z	 ddlZddlZej2                  Z[[ G d d      Z G d dej8                        Z G d dej<                  ej8                        Zd Z e!dk(  ryddl"Z# e        Z$e$jK                  e#jL                  j&                  jO                                e$jQ                  e#jL                  jS                                e$jU                  d       yy# e$ r
  edd      w xY w# e$ r d ZY w xY w)z]
SAX driver for the pyexpat C module.  This driver works with
pyexpat.__version__ == '2.22'.
z0.20    )*)feature_validationfeature_namespaces)feature_namespace_prefixes)feature_external_gesfeature_external_pes)feature_string_interning)property_xml_stringproperty_interning_dict)expatParserCreatezexpat not supportedN)	xmlreadersaxutilshandlerc                     | S N )os    */usr/lib/python3.12/xml/sax/expatreader.py_mkproxyr   !   s        c                       e Zd Zy)_ClosedParserN)__name__
__module____qualname__r   r   r   r   r   (   s    r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)ExpatLocatorzLocator for use with the ExpatParser class.

    This uses a weak reference to the parser object to avoid creating
    a circular reference between the parser and the content handler.
    c                 $    t        |      | _        y r   )r   _refselfparsers     r   __init__zExpatLocator.__init__3   s    V$	r   c                 `    | j                   }|j                  y |j                  j                  S r   )r    _parserErrorColumnNumberr!   s     r   getColumnNumberzExpatLocator.getColumnNumber6   s(    >>!~~///r   c                 `    | j                   }|j                  y|j                  j                  S N   )r    r&   ErrorLineNumberr!   s     r   getLineNumberzExpatLocator.getLineNumber<   s(    >>!~~---r   c                 T    | j                   }|y |j                  j                         S r   )r    _sourcegetPublicIdr!   s     r   r0   zExpatLocator.getPublicIdB   &    >~~))++r   c                 T    | j                   }|y |j                  j                         S r   )r    r/   getSystemIdr!   s     r   r3   zExpatLocator.getSystemIdH   r1   r   N)	r   r   r   __doc__r$   r(   r-   r0   r3   r   r   r   r   r   -   s     
%0.,,r   r   c                       e Zd ZdZd#dZd Zd Zd Zd Zd Z	d Z
d	 Zd$d
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#y")%ExpatParserz$SAX driver for the pyexpat C module.c                     t         j                  j                  | |       t        j                         | _        d | _        || _        d | _        d| _        g | _	        d| _
        d | _        y )NFr   )r   IncrementalParserr$   InputSourcer/   r&   _namespaces_lex_handler_prop_parsing_entity_stack_external_ges
_interning)r"   namespaceHandlingbufsizes      r   r$   zExpatParser.__init__T   s]    ##,,T7; ,,.,!%r   c                    t        j                  |      }|| _        	 | j                          | j                  j                  t        |              t        j                  j                  | |       y#  | j                           xY w)z3Parse an XML document from a URL or an InputSource.N)r   prepare_input_sourcer/   reset_cont_handlersetDocumentLocatorr   r   r8   parse_close_sourcer"   sources     r   rG   zExpatParser.parsea   sn    ..v6		JJL11,t2DE''--dF;	  s   AA3 3Bc                 x    |j                         *| j                  j                  |j                                y y r   )r3   r&   SetBaserI   s     r   prepareParserzExpatParser.prepareParserq   s1    +LL  !3!3!56 ,r   c                 ~    t         j                  j                  | |       | j                  r| j	                          y y r   )r   r8   setContentHandlerr<   _reset_cont_handler)r"   r   s     r   rO   zExpatParser.setContentHandlerw   s0    ##55dGD==$$& r   c                     |t         k(  r| j                  S |t        k(  r| j                  d uS |t        t
        t        fv ry|t        k(  r| j                  S t        d|z        )Nr   Feature '%s' not recognized)
r   r:   r	   r?   r   r   r   r   r>   SAXNotRecognizedExceptionr"   names     r   
getFeaturezExpatParser.getFeature|   sn    %%###--??$..(*>02 2))%%%'(E(LMMr   c                 j   | j                   rt        d      |t        k(  r|| _        y |t        k(  r|| _        y |t        k(  r|r| j                  i | _        y d | _        y y |t        k(  r|rt        d      y |t        k(  r|rt        d      y |t        k(  r|rt        d      y t        d|z        )Nz!Cannot set features while parsingz!expat does not support validationz/expat does not read external parameter entitiesz(expat does not report namespace prefixesrR   )r<   SAXNotSupportedExceptionr   r:   r   r>   r	   r?   r   r   r   rS   )r"   rU   states      r   
setFeaturezExpatParser.setFeature   s    ==*+NOO%%$D))!&D--??*&(DO"& + ''.79 9  )).EG G  //.>@ @  ,-46 6r   c                 <   |t         j                  k(  r| j                  S |t        k(  r| j                  S |t
        k(  rR| j                  r;t        | j                  d      r| j                  j                         S t        d      t        d      t        d|z        )NGetInputContextz=This version of expat does not support getting the XML stringz.XML string cannot be returned when not parsingProperty '%s' not recognized)r   property_lexical_handlerr;   r   r?   r
   r&   hasattrr\   rS   rX   rT   s     r   getPropertyzExpatParser.getProperty   s    7333))),,??"((||4<<):;<<77993*+ + /DF F'(F(MNNr   c                     |t         j                  k(  r%|| _        | j                  r| j	                          y y |t
        k(  r|| _        y |t        k(  rt        d|z        t        d|z        )NzProperty '%s' cannot be setr]   )
r   r^   r;   r<   _reset_lex_handler_propr   r?   r
   rX   rS   )r"   rU   values      r   setPropertyzExpatParser.setProperty   s{    7333%*D"}},,. ,,#DO((*+H+/,0 1 1 ,,J,0-1 2 2r   c                    | j                   s1| j                          d| _         | j                  j                          	 | j                  j                  ||       y # t        j                  $ rO}t        t        j                  |j                        ||       }| j                  j                  |       Y d }~y d }~ww xY w)NT)r<   rD   rE   startDocumentr&   Parser   errorSAXParseExceptionErrorStringcode_err_handler
fatalError)r"   dataisFinaleexcs        r   feedzExpatParser.feed   s    }}JJL DM,,.		.
 LLtW-{{ 	.#E$5$5aff$=q$GC((--	.s   A B>/AB99B>c                    | j                   y | j                   j                         }	 | j                   j                  d       | j                   j                  dd       | j                   j                  |       y # t        j
                  $ rO}t        t	        j                  |j                        ||       }| j                  j                  |       Y d }~yd }~ww xY w# | j                   j                  |       w xY w)NFr   )r&   GetReparseDeferralEnabledSetReparseDeferralEnabledrg   r   rh   ri   rj   rk   rl   rm   )r"   was_enabledrp   rq   s       r   flushzExpatParser.flush   s    <<ll<<>	@LL2259LLsE*
 LL22;?	 {{ 	.#E$5$5aff$=q$GC((--	. LL22;?s*   7A< <CACC! CC! !C>c                     | j                   }	 |j                         }||j                          |j                         }||j                          y y # |j                         }||j                          w w xY wr   )r/   getCharacterStreamclosegetByteStream)r"   rJ   files      r   rH   zExpatParser._close_source   su    	,,.D

'')D

   '')D

  s   "A %A9c                    | j                   s&| j                  t        | j                  t              ry 	 | j	                  dd       | j
                  j                          d| _        d | _        d| _        | j                  Gt               }| j                  j                  |_        | j                  j                  |_	        || _        | j                          y # d| _        | j                  Gt               }| j                  j                  |_        | j                  j                  |_	        || _        | j                          w xY w)Nr   T)ro   F)r=   r&   
isinstancer   rr   rE   endDocumentr<   r'   r,   rH   r!   s     r   rz   zExpatParser.close   s    $,,"6t||]3	!IIc4I(**,!DMDL!DM||'&+/<<+I+I()-)E)E&%  "DM||'&+/<<+I+I()-)E)E&% s   ;C A,Ec                     | j                   j                  | j                  _        | j                   j                  | j                  _        y r   )rE   processingInstructionr&   ProcessingInstructionHandler
charactersCharacterDataHandlerr"   s    r   rP   zExpatParser._reset_cont_handler  s5    $($6$6$L$L 	1,0,>,>,I,I)r   c                 *   | j                   }| j                  }|$d |_        d |_        d |_        d |_        d |_        y |j                  |_        |j                  |_        |j                  |_        | j                  |_        |j                  |_        y r   )r;   r&   CommentHandlerStartCdataSectionHandlerEndCdataSectionHandlerStartDoctypeDeclHandlerEndDoctypeDeclHandlercomment
startCDATAendCDATAstart_doctype_declendDTD)r"   lexr#   s      r   rb   z#ExpatParser._reset_lex_handler_prop  s    $$;$(F!.2F+,0F)-1F*+/F($'KKF!.1nnF+,/LLF)-1-D-DF*+.::F(r   c                 J   | j                   rt        j                  | j                  j	                         d| j
                        | _        d| j                  _        | j                  | j                  _	        | j                  | j                  _        ntt        j                  | j                  j	                         | j
                        | _        | j                  | j                  _	        | j                  | j                  _        | j                          | j                  | j                  _        | j"                  | j                  _        | j&                  | j                  _        | j*                  | j                  _        d | _        | j0                  r| j3                          | j4                  | j                  _        	 | j8                  | j                  _        | j                  j?                  t        j@                         d| _!        g | _"        y # t<        $ r Y Cw xY w)N )internr+   F)#r:   r   r   r/   getEncodingr?   r&   namespace_prefixesstart_element_nsStartElementHandlerend_element_nsEndElementHandlerstart_elementend_elementrP   unparsed_entity_declUnparsedEntityDeclHandlernotation_declNotationDeclHandlerstart_namespace_declStartNamespaceDeclHandlerend_namespace_declEndNamespaceDeclHandler_decl_handler_propr;   rb   external_entity_refExternalEntityRefHandlerskipped_entity_handlerSkippedEntityHandlerAttributeErrorSetParamEntityParsing*XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONEr<   r=   r   s    r   rD   zExpatParser.reset  s    --dll.F.F.H#59__FDL./DLL+/3/D/DDLL,-1-@-@DLL* --dll.F.F.H7;HDL/3/A/ADLL,-1-=-=DLL*  "151J1J.+/+=+=(151J1J./3/F/F,"&!!((* 150H0H-	040K0KDLL- 	**<<	>   		s   H 	H"!H"c                 H    | j                   y | j                   j                  S r   )r&   r'   r   s    r   r(   zExpatParser.getColumnNumberC  s    <<||---r   c                 H    | j                   y| j                   j                  S r*   )r&   r,   r   s    r   r-   zExpatParser.getLineNumberH  s    <<||+++r   c                 6    | j                   j                         S r   )r/   r0   r   s    r   r0   zExpatParser.getPublicIdM      ||''))r   c                 6    | j                   j                         S r   )r/   r3   r   s    r   r3   zExpatParser.getSystemIdP  r   r   c                 N    | j                   j                  |t        |             y r   )rE   startElementAttributesImpl)r"   rU   attrss      r   r   zExpatParser.start_elementT  s    ''nU.CDr   c                 :    | j                   j                  |       y r   )rE   
endElementrT   s     r   r   zExpatParser.end_elementW      %%d+r   c                    |j                         }t        |      dk(  rd |f}n$t        |      dk(  r|d   |d   f}nt        |      }i }i }|j                         D ]c  \  }}|j                         }t        |      }	|	dk(  r|}
d |f}n-|	dk(  r|d   d|d   }
|d   |d   f}n|d   }
t        |      }|||<   |
||<   e | j                  j                  |d t        ||             y )Nr+      r      :)splitlentupleitemsrE   startElementNSAttributesNSImpl)r"   rU   r   pairnewattrsqnamesanamerc   partslengthqnameapairs               r   r   zExpatParser.start_element_nsZ  s   zz|t9>$<DY!^7DG#D ;D#kkm 	"NUEKKMEZF{u1#(8U1X6a%(* ae#HUO!F5M!	"$ 	))$*:8V*L	Nr   c                     |j                         }t        |      dk(  rd |f}n$t        |      dk(  r|d   |d   f}nt        |      }| j                  j	                  |d        y )Nr+   r   r   )r   r   r   rE   endElementNS)r"   rU   r   s      r   r   zExpatParser.end_element_ns|  s]    zz|t9>$<DY!^7DG#D;D''d3r   c                 <    | j                   j                  ||       y r   )rE   r   )r"   targetrn   s      r   processing_instructionz"ExpatParser.processing_instruction  s    00>r   c                 :    | j                   j                  |       y r   )rE   r   )r"   rn   s     r   character_datazExpatParser.character_data  r   r   c                 <    | j                   j                  ||       y r   )rE   startPrefixMapping)r"   prefixuris      r   r   z ExpatParser.start_namespace_decl  s    --fc:r   c                 :    | j                   j                  |       y r   )rE   endPrefixMapping)r"   r   s     r   r   zExpatParser.end_namespace_decl  s    ++F3r   c                 >    | j                   j                  |||       y r   )r;   startDTD)r"   rU   sysidpubidhas_internal_subsets        r   r   zExpatParser.start_doctype_decl  s    ''eU;r   c                 @    | j                   j                  ||||       y r   )_dtd_handlerunparsedEntityDecl)r"   rU   baser   r   notation_names         r   r   z ExpatParser.unparsed_entity_decl  s    ,,T5%Or   c                 >    | j                   j                  |||       y r   )r   notationDecl)r"   rU   r   r   r   s        r   r   zExpatParser.notation_decl  s    &&tUE:r   c                    | j                   sy| j                  j                  ||      }t        j                  || j
                  j                         xs d      }| j                  j                  | j                  | j
                  f       | j                  j                  |      | _	        || _        	 t        j                  j                  | |       | j                  d   \  | _	        | _        | j                  d= y#  Y yxY w)Nr+    r   )r>   _ent_handlerresolveEntityr   rC   r/   r3   r=   appendr&   ExternalEntityParserCreater   r8   rG   )r"   contextr   r   r   rJ   s         r   r   zExpatParser.external_entity_ref  s    !!""00>..v/3||/G/G/I 02/13 	!!4<<">?||>>wG	''--dF; (,'9'9"'=$t|r"	s   5 C? ?Dc                 H    |rd|z   }| j                   j                  |       y )N%)rE   skippedEntity)r"   rU   is_pes      r   r   z"ExpatParser.skipped_entity_handler  s"    t8D((.r   N)r   i  )F)$r   r   r   r4   r$   rG   rM   rO   rV   rZ   r`   rd   rr   rw   rH   rz   rP   rb   rD   r(   r-   r0   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r6   Q   s    .	 7'

N6<O$2 ."@	!*J
6 # N.
,
**E, ND	4?,;4<P;,/r   r6   c                      t        | i |S r   )r6   )argskwargss     r   create_parserr     s    '''r   __main__z:http://www.ibiblio.org/xml/examples/shakespeare/hamlet.xml)+r4   versionxml.sax._exceptionsxml.sax.handlerr   r   r   r   r   r	   r
   r   xml.parsersr   r_   SAXReaderNotAvailableImportErrorxml.saxr   r   r   r   r   _weakrefweakrefproxyr   r   Locatorr   r8   r6   r   r   xml.sax.saxutilsxmlprO   saxXMLGeneratorsetErrorHandlerErrorHandlerrG   r   r   r   <module>r     sT  
  ! B 6 F 4 HA! 5.)#$94@@ 0 0))-- 

 }}H	 	
,9$$ ,Hg/)--y/@/@ g/V(
 zA((5578cgg**,-GGHI a  =
 5t
<<=  s   E *E EEE