
    hQ                         S r SSKJr  SSKJr  SrSrSrSr\S-   r	S r
S	 rS
 rS rS r " S S\5      r " S S\5      rg)a  
*S*mall, *U*ncomplicated *X*ML.

This is a very simple implementation of XML/HTML as a network
protocol.  It is not at all clever.  Its main features are that it
does not:

  - support namespaces
  - mung mnemonic entity references
  - validate
  - perform *any* external actions (such as fetching URLs or writing files)
    under *any* circumstances
  - has lots and lots of horrible hacks for supporting broken HTML (as an
    option, they're not on by default).
    )Protocol)prefixedMethodNames      z.-_:z;+#/%~c                      g)zDo nothing.N )argskws     V/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/web/sux.pynopr   $   s        c                      / nU  H  nUR                  U5        M     U Vs0 s H  o"S_M     nnUR                  5       $ s  snf )Nr   )extendkeys)r	   lxds       r   	unionlistr   (   sB    
A	 q!AqA668O 	s   ?c                     ^^ UR                  S[        5      m0 n[        S U  5       6  H  m[        UU4S jU  5       5      UT'   M     U$ )Ndefaultc              3   @   #    U  H  oR                  5       v   M     g 7fN)r   ).0fndicts     r   	<genexpr>zipfndict.<locals>.<genexpr>3   s     <tV;;==ts   c              3   F   >#    U  H  oR                  TT5      v   M     g 7fr   )get)r   r   r   keys     r   r   r   4   s     9DquuS'**Ds   !)r   r   r   tuple)r	   r
   r   r   r   s      @@r   	zipfndictr!   0   sF    ffY$G
A<t<=9D99# >Hr   c           	      ^    [        X5       Vs0 s H  nU[        XU-   5      _M     sn$ s  snf r   )r   getattr)clazzprefixnames      r   prefixedMethodClassDictr'   8   s<     (66D 	ged]++6  s   *c           	      t    [        U R                  U5       Vs0 s H  nU[        XU-   5      _M     sn$ s  snf r   )r   	__class__r#   )objr%   r&   s      r   prefixedMethodObjDictr+   ?   sB     (v>>D 	gcD=))>  s   5c                   (    \ rS rSrS rS\4S jrSrg)
ParseErrorF   c                 4    Xl         X l        X0l        X@l        g r   filenamelinecolmessage)selfr1   r2   r3   r4   s        r   __init__ParseError.__init__G   s     	r   returnc                 l    U R                    SU R                   SU R                   SU R                   3$ )N:z: r0   r5   s    r   __str__ParseError.__str__M   s/    --$))AdhhZr$,,HHr   )r3   r1   r2   r4   N)__name__
__module____qualname____firstlineno__r6   strr<   __static_attributes__r   r   r   r-   r-   F   s    I Ir   r-   c                      \ 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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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(S# r)S$ r*S% r+S& r,S' r-S( r.S) r/S* r0S+ r1S, r2S- r3S. r4S/ r5S0 r6S1 r7S2 r8S3 r9S4 r:S5 r;\3r<\4r=S6 r>S7 r?S8 r@S9 rAS: rBS; rCS< rDS=rEg)>	XMLParserQ   Nz<xml />r   c                 .    SU l         SU l        / U l        g )Nr   r   )linenocolno	encodingsr;   s    r   connectionMadeXMLParser.connectionMade]   s    
r   c                 2    U R                   U R                  4$ )z;Get the line number and column of the last character parsed)rH   rI   r;   s    r   saveMarkXMLParser.saveMarkb   s     TZZ((r   c                 R    [        U R                  4U R                  5       -   U4-   6 er   )r-   r1   rN   )r5   r4   s     r   _parseErrorXMLParser._parseErrorg   s&    DMM+dmmo=
JLLr   c                    ^  [        T R                  SS5      nUc#  [        U 4S jS 5       6 =nT R                  l        U$ )z;Return a dictionary of begin, do, end state function tuples__stateTableNc              3   <   >#    U  H  n[        TU5      v   M     g 7fr   )r+   )r   r%   r5   s     r   r   -XMLParser._buildStateTable.<locals>.<genexpr>r   s"      "; *$77";s   )begin_do_end_)r#   r)   r!   _XMLParser__stateTable)r5   
stateTables   ` r   _buildStateTableXMLParser._buildStateTablej   sJ    
 T^^^TB
7@";8 J4 r   c                     SU R                   ;   d  SU R                   ;   a  [        U5      S-  (       a   S5       eU R                  (       a  U R                  U-   nU R                    H  n[        X5      nM     U$ )NUTF-16zUCS-2r   z!UTF-16 must come in pairs for now)rJ   len_prependrB   )r5   dataencodings      r   _decodeXMLParser._decodey   sb    t~~%DNN)B4y1}I&II$====4'DHt&D 'r   c                     U R                   (       a  gU R                  S:X  a"  SU R                  ;  a  U R                  S 5        gg)Nbodydatascriptsrcwaitforendscript)endtagtagNametagAttributesbegin_bodydatar;   s    r   maybeBodyDataXMLParser.maybeBodyData   s=    ;; <<8#T5G5G(G %%r   c                   ^^ U R                  5       nU R                  (       dG  UR                  S5      (       a*  USS U l        U R                  R                  S5        USS  nSU l        U R                  (       a  U R                  U5      nOUR                  S5      nU R                  U R                  smmU R                  nU R                  nUU4S jnXPl
        X#   u  pgn U HB  n	U	S:X  a  TS	-  mSmOTS	-  mU" U	5      n
U
c  M#  X:w  d  M*  U" 5         U
nX#   u  pgnU" U	5        MD     X@l
        TTsU l        U l	        X0l        g ! X@l
        TTsU l        U l	        f = f)
N)s   s   r   r   r_   beginzutf-8c                     > TT 4$ r   r   )rI   rH   s   r   rN   (XMLParser.dataReceived.<locals>.saveMark   s    E?"r   
r   )r\   state
startswithra   rJ   appendrd   decoderH   rI   rN   )r5   rb   r[   curState	_saveMarkrN   beginFndoFnendFnbytenewStaterI   rH   s              @@r   dataReceivedXMLParser.dataReceived   sN   **,
zz9:: $Qq	%%h/ABx DJ>><<%D;;w'DTZZ::MM		# !)3u	44<aKFEQJE:'H,@G'H+5+?(G5DM  &M&,e#DK
 &M&,e#DKs   %!E	 
E	 E	 	E c                 X    U R                  5       nX R                     [           " 5         g)z 
End the last state we were in.
N)r\   rv   END_HANDLER)r5   reasonr[   s      r   connectionLostXMLParser.connectionLost   s$     **,
::{+-r   c                     UR                  5       (       a  g US:w  a.  U R                  (       a  Xl        gU R                  SU< S35        g)N<rg   zFirst char of document [z
] wasn't <tagstart)isspacebeExtremelyLenient_leadingBodyDatarQ   r5   r   s     r   do_beginXMLParser.do_begin   sD    <<>>3;&&(,%!7xzJKr   c                     SU l         g N )
commentbufr   s     r   begin_commentXMLParser.begin_comment   s	    r   c                     U =R                   U-  sl         U R                   R                  S5      (       a  U R                  U R                   S S 5        gg )Nz-->rg   )r   endswith
gotCommentr   s     r   
do_commentXMLParser.do_comment   sD    4??##E**OODOOCR01 +r   c                 <    SU l         0 U l        SU l        SU l        g Nr   r   )rl   rm   termtagrk   r   s     r   begin_tagstartXMLParser.begin_tagstart   s    r   c                    UR                  5       (       d
  U[        ;   a'  U =R                  U-  sl        U R                  S:X  a  gg UR                  5       (       a6  U R                  (       a  U R                  (       a  ggU R                  S5        g US:X  az  U R                  (       a  U R                  U R                  5        gU R                  U R                  0 5        U R                  (       + =(       a    S=(       d    U R                  5       $ US:X  a  U R                  (       a  g	S
U l        g US;   aR  U R                  (       a$  U R                  (       d  U R                  S5        g g U =R                  U-  sl        S
U l
        g US:X  a#  U R                  S:X  a  gU R                  S5        g U R                  (       a  SU l        gU R                  SU-  5        g )Nz!--comment	waitforgtattrszWhitespace before tag-name>rg   /
afterslashr   !?zInvalid character in tag-name[!expectcdatazInvalid '[' in tag-namer   unentityzInvalid tag character: %r)isalnum
identCharsrl   r   rk   rQ   	gotTagEndgotTagStartr   ro   r   rg   r   s     r   do_tagstartXMLParser.do_tagstart   sg   <<>>TZ/LLD L||u$  %\\^^||;; '  !=>S[{{t||,!  r2000@jXDDVDVDX S[||#T\||..$$%DE / $ S[||s"$  !:;&& #!84?@r   c                 .    U =R                   U-  sl         g r   rg   r   s     r   begin_unentityXMLParser.begin_unentity  s    r   c                 .    U =R                   U-  sl         g)Nrg   r   r   s     r   do_unentityXMLParser.do_unentity  s    r   c                 :    U R                  U R                  5        g r   gotTextrg   r;   s    r   end_unentityXMLParser.end_unentity  s    T]]#r   c                     Xl         g r   )cdatabufr   s     r   begin_expectcdataXMLParser.begin_expectcdata  s    r   c                 *   U =R                   U-  sl         U R                   nSn[        U5      [        U5      :  a:  UR                  U5      (       a  g U R                  (       a  gU R	                  S5        X2:X  a  SU l         gU R	                  S5        g )Nz[CDATA[r   zMal-formed CDATA headerr   cdata)r   r`   rw   r   rQ   )r5   r   cdbcds       r   do_expectcdataXMLParser.do_expectcdata!  s{    mmr7SX}}S!!((
 #  !:;9DM23r   c                     U =R                   U-  sl         U R                   R                  S5      (       a  U R                   S S U l         gg )Nz]]>r   rg   )r   r   r   s     r   do_cdataXMLParser.do_cdata5  s?    ==!!%(( MM#2.DM )r   c                 H    U R                  U R                  5        SU l        g r   )gotCDatar   r;   s    r   	end_cdataXMLParser.end_cdata;  s    dmm$r   c                    UR                  5       (       d
  U[        ;   a&  U R                  S:X  a  gU R                  S   S;   a  ggUR                  5       (       a  g US:X  aW  U R	                  U R                  U R
                  5        U R                  (       + =(       a    S=(       d    U R                  5       $ US	:X  a  g
U R                  (       a  g U R                  SU-  5        g )N!DOCTYPEdoctyper   r   r   attrnamer   rg   r   r   zUnexpected character: %r)	r   r   rl   r   r   rm   r   ro   rQ   r   s     r   do_attrsXMLParser.do_attrs?  s    <<>>TZ/||z) ||A$&"\\^^S[T\\4+=+=>///?ZW4CUCUCWWS[$$ 3d:;r   c                     Xl         g r   r   r   s     r   begin_doctypeXMLParser.begin_doctypeT      r   c                 <    US:X  a  gU =R                   U-  sl         g Nr   rg   r   r   s     r   
do_doctypeXMLParser.do_doctypeW  s    3;r   c                 H    U R                  U R                  5        S U l        g r   )
gotDoctyper   r;   s    r   end_doctypeXMLParser.end_doctype\  s    %r   c                 v    US:X  a3  U R                   (       d  U R                  (       d  gU R                  5       $ g r   )rk   r   ro   r   s     r   do_waitforgtXMLParser.do_waitforgt`  s/    3;{{$"9"9!%%'' r   c                     Xl         SU l        g Nr   )r   _attrname_termtagr   s     r   begin_attrnameXMLParser.begin_attrnamef  s    !"r   c                    UR                  5       (       d
  U[        ;   a  U =R                  U-  sl        g US:X  a  gUR                  5       (       a  gU R                  (       a  US;   a  gU[
        ;   d  UR                  5       (       a  U =R                  U-  sl        g US:X  a  SU l        g US:X  a  S	U l        U R                  U R                  U R                  '   U R                  U R                  U R                  5        U R                  (       a  U R                  U R                  5        g
U R                  5       $ g U R                  SU R                  < SU< 35        g )N=beforeattrvalbeforeeq"'attrvalr   r   r   Truerg   zInvalid attribute name:  )r   r   r   r   r   lenientIdentCharsr   r   rm   r   rl   r   ro   rQ   r   s     r   do_attrnameXMLParser.do_attrnamej  s   <<>>TZ/MMT!MS["\\^^$$u} ((DLLNN%s{)*&s{%48LL""4==1  t/A/AB))NN4<<0%))++ 3DMM3DAdXNOr   c                    US;   a  gUR                  5       (       a  g U R                  (       a  U[        ;   d  UR                  5       (       a  gUS:X  a`  SU l        U R                  U R
                  U R                  '   U R                  U R                  U R
                  5        U R                  5       $ US:X  a  g U R                  SU-  5        g )Nr   r   	messyattrr   r   \zEInvalid initial attribute value: %r; Attribute values must be quoted.)r   r   r   r   r   rm   r   r   rl   ro   rQ   r   s     r   do_beforeattrvalXMLParser.do_beforeattrval  s    5=\\^^$$((DLLNN"s{%48LL""4==1  t/A/AB))++t| S	
r   r   c                     SU l         g r   )_beforeeq_termtagr   s     r   begin_beforeeqXMLParser.begin_beforeeq  s
    !"r   c                 X   US:X  a  gUR                  5       (       a  g U R                  (       a  UR                  5       (       d
  U[        ;   a+  SU l        U R                  U R
                  U R                  '   gUS:X  a  SU l        U R                  U R
                  U R                  '   U R                  U R                  U R
                  5        U R                  (       a  U R                  U R                  5        gU R                  5       $ US:X  a  SU l	        g U R                  S	5        g )
Nr   r   r   r   r   rg   r   r   zInvalid attribute)r   r   r   r   r   rm   r   r   rl   r   r   ro   rQ   r   s     r   do_beforeeqXMLParser.do_beforeeq  s    3;"\\^^$$||~~!3%48LL""4==1!%48LL""4==1  t/A/AB))NN4<<0%))++)*&,-r   c                     Xl         SU l        g r   	quotetyper   r   s     r   begin_attrvalXMLParser.begin_attrval  s    r   c                 N    XR                   :X  a  gU =R                  U-  sl        g )Nr   r  r   s     r   
do_attrvalXMLParser.do_attrval  s    >>!r   c                 f    U R                   U R                  U R                  '   S=U l        U l         g r   r   rm   r   r;   s    r   end_attrvalXMLParser.end_attrval  s(    ,0LL4==)'))r   c                     Xl         g r   )r   r   s     r   begin_messyattrXMLParser.begin_messyattr  r   r   c                    UR                  5       (       a  gUS:X  a  SnU R                  R                  S5      (       a  SnU R                  S S U l        U R                  U R                  U R                  '   U R                  U R                  U R                  5        U(       a  U R                  U R                  5        gU R                  5       $ U =R                  U-  sl        g )Nr   r   r   r   r   rg   )	r   r   r   rm   r   r   rl   r   ro   )r5   r   endTags      r   do_messyattrXMLParser.do_messyattr  s    <<>>S[F||$$S))#||CR004Dt}}-T\\4+=+=>t||,!%%''LLD Lr   c                 n    U R                   (       a$  U R                   U R                  U R                  '   g g r   r  r;   s    r   end_messyattrXMLParser.end_messyattr  s&    <<04Dt}}- r   c                     SU l         g r   )_after_slash_closedr   s     r   begin_afterslashXMLParser.begin_afterslash  s
    #$ r   c                 *   U R                   (       a  U R                  S5        US:w  a#  U R                  (       a  g U R                  S5        SU l         U R                  U R                  U R
                  5        U R                  U R                  5        g)Nz
Mal-formedr   zNo data allowed after '/'r   rg   )r  rQ   r   r   rl   rm   r   r   s     r   do_afterslashXMLParser.do_afterslash  sr    ##\*3;&&  !<=#$ t'9'9:t||$ r   c                 \    U R                   (       a  U R                   U l        U ? g SU l        g r   )r   rg   r   s     r   rn   XMLParser.begin_bodydata  s%       11DM%DMr   c                 J    US:X  a  gUS:X  a  gU =R                   U-  sl         g )Nr   r   &	entityrefr   r   s     r   do_bodydataXMLParser.do_bodydata  s$    3;3;r   c                 H    U R                  U R                  5        SU l        g r   r   r;   s    r   end_bodydataXMLParser.end_bodydata  s    T]]#r   c                 <    US:X  a  gU =R                   U-  sl         g )Nr   waitscriptendtagr   r   s     r   do_waitforendscriptXMLParser.do_waitforendscript  s    3;%r   c                 .    SU l         SU l        SU l        g r   )temptagdatarl   rk   r   s     r   begin_waitscriptendtag XMLParser.begin_waitscriptendtag
  s    r   c                    U =R                   U-  sl         US:X  a  SU l        g U R                  (       d#  U =R                  SU R                   -   -  sl        gUR                  5       (       d
  U[        ;   a  U =R
                  U-  sl        SR                  U R
                  5      (       d#  U =R                  SU R                   -   -  sl        gU R
                  S:X  a7  U R                  U R                  5        U R                  U R
                  5        gg UR                  5       (       a  gU =R                  SU R                   -   -  sl        g)Nr   Tr   rj   rh   r   r,  )
r0  rk   rg   r   r   rl   rw   r   r   r   r   s     r   do_waitscriptendtagXMLParser.do_waitscriptendtag  s     	D  3;DKMMS4#3#333M%\\^^tz1LLD L&&t||44t'7'7!77))T]]+t||," *
 \\^^% MMS4#3#333M%r   c                      SU l         SU l        g r   )erefbuf	erefextrar   s     r   begin_entityrefXMLParser.begin_entityref6  s    r   c                 d   UR                  5       (       d  US:X  ay  U R                  (       aV  U R                  (       a!  U R                  S:w  a  U R                  U l        SU l        US:X  a  gU =R                  U-  sl        gU R	                  S5        g US:w  a  U =R                  U-  sl        g g)Nr   ampr   spacebodydatazBad entity reference;rg   )r   r   r7  r8  rQ   r   s     r   do_entityrefXMLParser.do_entityref:  s    <<>>TS[&&<<DLLE$9%)\\DN$3;%NNd*N*34S[LLD Lr   c                 :    U R                  U R                  5        g r   )gotEntityReferencer7  r;   s    r   end_entityrefXMLParser.end_entityrefL  s    -r   c                 4    U R                   U l        S U l         g r   )r8  rg   r   s     r   begin_spacebodydataXMLParser.begin_spacebodydataQ  s    r   c                     [        SX5        g)z;Encountered an opening tag.

Default behaviour is to print.rr   Nprint)r5   r&   
attributess      r   r   XMLParser.gotTagStartZ  s     	gt(r   c                 .    [        S[        U5      5        g)z0Encountered text

Default behaviour is to print.ztext:NrJ  repr)r5   rb   s     r   r   XMLParser.gotText`  s     	gtDz"r   c                      [        SU-  5        g)zEEncountered mnemonic entity reference

Default behaviour is to print.zentityRef: &%s;NrI  )r5   	entityRefs     r   rB  XMLParser.gotEntityReferencef  s     	)+,r   c                     g)z5Encountered comment.

Default behaviour is to ignore.Nr   )r5   r   s     r   r   XMLParser.gotCommentl  s     	r   c                 &    U R                  U5        g)zBEncountered CDATA

Default behaviour is to call the gotText methodN)r   )r5   r   s     r   r   XMLParser.gotCDatar  s     	Ur   c                 .    [        S[        U5      5        g)zEncountered DOCTYPE

This is really grotty: it basically just gives you everything between
'<!DOCTYPE' and '>' as an argument.
r   NrN  )r5   r   s     r   r   XMLParser.gotDoctypex  s     	j$w-(r   c                     [        SU5        g)z7Encountered closing tag

Default behaviour is to print.endNrI  )r5   r&   s     r   r   XMLParser.gotTagEnd  s     	eTr   )r  r   r   r   ra   r   r   rg   r   rI   r   r   rJ   rk   r7  r8  rH   r  rN   rv   rm   rl   r0  r   )Fr>   r?   r@   rA   rv   rJ   r1   r   ra   r   rK   rN   rQ   r\   rd   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r  rn   r&  r)  r-  r1  r4  r9  r?  rC  rF  do_spacebodydataend_spacebodydatar   r   rB  r   r   r   r   rC   r   r   r   rE   rE   Q   sW   EIHH
 
)
M(,\.,A\$4(<*
(#P<
, HG#..
*!"=% 

%&N$.
 #$)#-)r   rE   N)__doc__twisted.internet.protocolr   twisted.python.reflectr   BEGIN_HANDLER
DO_HANDLERr   r   r   r   r   r!   r'   r+   	Exceptionr-   rE   r   r   r   <module>re     sh   " / 6 

) I Is sr   