
    \dQ                         d Z ddlmZ ddlmZ dZdZdZdZedz   Z	d Z
d	 Zd
 Zd Zd Z G d de          Z G d de          ZdS )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                      dS )zDo nothing.N )argskws     /lib/python3.11/site-packages/twisted/web/sux.pynopr   $   s          c                  z    g }| D ]}|                     |           d |D             }|                                S )Nc                     i | ]}|d S )r   r	   ).0xs     r   
<dictcomp>zunionlist.<locals>.<dictcomp>,   s    !Ar   )extendkeys)r
   lr   ds       r   	unionlistr   (   sG    
A  	qA6688Or   c                      |                     dt                    i }t          d | D              D ]!t          fd| D                       |<   "|S )Ndefaultc              3   >   K   | ]}|                                 V  d S N)r   )r   fndicts     r   	<genexpr>zzipfndict.<locals>.<genexpr>3   s*      <<V6;;==<<<<<<r   c              3   D   K   | ]}|                               V  d S r   )get)r   r   r   keys     r   r   zzipfndict.<locals>.<genexpr>4   s1      99qquuS'**999999r   )r    r   r   tuple)r
   r   r   r   r!   s      @@r   	zipfndictr#   0   so    ffY$$G
A<<t<<<= : :99999D99999#Hr   c                 @      fdt                     D             S )Nc                 8    i | ]}|t          |z             S r	   getattr)r   nameclazzprefixs     r   r   z+prefixedMethodClassDict.<locals>.<dictcomp>9   s9        	geVd]++  r   r   )r)   r*   s   ``r   prefixedMethodClassDictr+   8   s>        'v66   r   c                 J      fdt           j                  D             S )Nc                 8    i | ]}|t          |z             S r	   r&   )r   r(   objr*   s     r   r   z)prefixedMethodObjDict.<locals>.<dictcomp>@   s9        	gc6D=))  r   )r   	__class__)r.   r*   s   ``r   prefixedMethodObjDictr0   ?   s@        'v>>   r   c                        e Zd Zd ZdefdZdS )
ParseErrorc                 >    || _         || _        || _        || _        d S r   filenamelinecolmessage)selfr5   r6   r7   r8   s        r   __init__zParseError.__init__G   s"     	r   returnc                 D    | j          d| j         d| j         d| j         S )N:z: r4   r9   s    r   __str__zParseError.__str__M   s.    -HH$)HHdhHH$,HHHr   N)__name__
__module____qualname__r:   strr?   r	   r   r   r2   r2   F   sE          I I I I I I Ir   r2   c                      e 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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* Z0d+ Z1d, Z2d- Z3d. Z4d/ Z5d0 Z6d1 Z7d2 Z8d3 Z9d4 Z:e2Z;e3Z<d5 Z=d6 Z>d7 Z?d8 Z@d9 ZAd: ZBd; ZCdS )<	XMLParserNz<xml />r   c                 0    d| _         d| _        g | _        d S )Nr   r   )linenocolno	encodingsr>   s    r   connectionMadezXMLParser.connectionMade^   s    
r   c                     | j         | j        fS )z;Get the line number and column of the last character parsed)rG   rH   r>   s    r   saveMarkzXMLParser.saveMarkc   s     TZ((r   c                 R    t          | j        f|                                 z   |fz    r   )r2   r5   rL   )r9   r8   s     r   _parseErrorzXMLParser._parseErrorh   s&    DM+dmmoo=
JLLr   c                 z     t           j        dd          }|!t           fddD              x} j        _        |S )z;Return a dictionary of begin, do, end state function tuples__stateTableNc              3   8   K   | ]}t          |          V  d S r   )r0   )r   r*   r9   s     r   r   z-XMLParser._buildStateTable.<locals>.<genexpr>s   sA         *$77     r   )begin_do_end_)r'   r/   r#   _XMLParser__stateTable)r9   
stateTables   ` r   _buildStateTablezXMLParser._buildStateTablek   sb    
 T^^TBB
7@   ";  8 J4 r   c                     d| j         v s	d| j         v rt          |          dz  r
J d            | j        r
| j        |z   }| j         D ]}t          ||          }|S )NUTF-16zUCS-2r   z!UTF-16 must come in pairs for now)rI   len_prependrC   )r9   dataencodings      r   _decodezXMLParser._decodez   sw    t~%%DN)B)B4yy1}II&IIII= 	(=4'D 	' 	'HtX&&DDr   c                 n    | j         rdS | j        dk    r d| j        vr|                     d            dS dS )Nbodydatascriptsrcwaitforendscript)endtagtagNametagAttributesbegin_bodydatar>   s    r   maybeBodyDatazXMLParser.maybeBodyData   sN    ; 	: <8##T5G(G(G %%%%%zr   c                    |                                  }| j        sO|                    d          r3|dd         | _        | j                            d           |dd          }d| _        | j        r|                     |          }n|                    d          }| j        | j	        c| j        }| j
        }fd}|| _
        ||         \  }}}	 |D ]K}	|	dk    rd	z  dnd	z   ||	          }
|
)|
|k    r# |             |
}||         \  }}} ||	           L	 || _
        c| _        | _	        n# || _
        c| _        | _	        w xY w|| _        d S )
N)s   s   r   r   rY   beginzutf-8c                       fS r   r	   )rH   rG   s   r   rL   z(XMLParser.dataReceived.<locals>.saveMark   s    E?"r   
r   )rW   state
startswithr[   rI   appendr^   decoderG   rH   rL   )r9   r\   rV   curState	_saveMarkrL   beginFndoFnendFnbytenewStaterH   rG   s              @@r   dataReceivedzXMLParser.dataReceived   s   **,,
z 	!9::   $QqS	%%h///ABBx DJ> 	(<<%%DD;;w''DTZ:M		# 	# 	# 	# 	# 	# !)(3u	4 " "4<<aKFEEQJE4::'H,@,@EGGG'H+5h+?(GT5GDMMM" &DM&,e#DK &DM&,e#DK3333


s   AD< <Ec                 n    |                                  } || j                 t                                dS )z0
        End the last state we were in.
        N)rW   rm   END_HANDLER)r9   reasonrV   s      r   connectionLostzXMLParser.connectionLost   s5     **,,
+
4:{+-----r   c                     |                                 rd S |dk    r)| j        r	|| _        dS |                     d|d           dS )N<r`   zFirst char of document [z
] wasn't <tagstart)isspacebeExtremelyLenient_leadingBodyDatarN   r9   rv   s     r   do_beginzXMLParser.do_begin   s]    <<>> 	F3;;& "(,%!zJJJJKKKzr   c                     d| _         d S N )
commentbufr   s     r   begin_commentzXMLParser.begin_comment   s    r   c                     | xj         |z  c_         | j                             d          r$|                     | j         d d                    dS d S )Nz-->r`   )r   endswith
gotCommentr   s     r   
do_commentzXMLParser.do_comment   sV    4?##E** 	OODOCRC0111:	 	r   c                 >    d| _         i | _        d| _        d| _        d S Nr   r   )re   rf   termtagrd   r   s     r   begin_tagstartzXMLParser.begin_tagstart   s#    r   c                    |                                 s	|t          v r| xj        |z  c_        | j        dk    rdS d S |                                r)| j        r| j        rdS dS |                     d           d S |dk    r\| j        r|                     | j                   dS |                     | j        i            | j         rdp| 	                                S |dk    r| j        rd	S d
| _        d S |dv r@| j        r | j        s|                     d           d S d S | xj        |z  c_        d
| _
        d S |dk    r$| j        dk    rdS |                     d           d S | j        r	d| _        dS |                     d|z             d S )Nz!--comment	waitforgtattrszWhitespace before tag-name>r`   /
afterslashr   !?zInvalid character in tag-name[!expectcdatazInvalid '[' in tag-namer~   unentityzInvalid tag character: %r)isalnum
identCharsre   r   rd   rN   	gotTagEndgotTagStartr   rh   r   r`   r   s     r   do_tagstartzXMLParser.do_tagstart   s   <<>> +	ATZ//LLD LL|u$$ y %$\\^^ '	A| ?; ' ';w  !=>>>>>S[[{ t|,,,!z  r22200@jXDDVDVDXDX S[[|  #|T\\| !. F$$%DEEEEEF F $ S[[|s""$}  !:;;;;;& " #!z84?@@@@@r   c                 &    | xj         |z  c_         d S r   r`   r   s     r   begin_unentityzXMLParser.begin_unentity  s    r   c                 &    | xj         |z  c_         dS )Nr`   r   r   s     r   do_unentityzXMLParser.do_unentity  s    zr   c                 :    |                      | j                   d S r   gotTextr`   r>   s    r   end_unentityzXMLParser.end_unentity  s    T]#####r   c                     || _         d S r   )cdatabufr   s     r   begin_expectcdatazXMLParser.begin_expectcdata  s    r   c                 *   | xj         |z  c_         | j         }d}t          |          t          |          k    r5|                    |          rd S | j        rdS |                     d           ||k    r	d| _         dS |                     d           d S )Nz[CDATA[r   zMal-formed CDATA headerr   cdata)r   rZ   rn   r   rN   )r9   rv   cdbcds       r   do_expectcdatazXMLParser.do_expectcdata"  s    mr77SXX}}S!! 	<( <
 #{  !:;;;99DM7233333r   c                     | xj         |z  c_         | j                             d          r| j         d d         | _         dS d S )Nz]]>r   r`   )r   r   r   s     r   do_cdatazXMLParser.do_cdata6  sK    =!!%(( 	 M#2#.DM:	 	r   c                 H    |                      | j                   d| _        d S r   )gotCDatar   r>   s    r   	end_cdatazXMLParser.end_cdata<  s!    dm$$$r   c                    |                                 s	|t          v r | j        dk    rdS | j        d         dv rdS dS |                                rd S |dk    r>|                     | j        | j                   | j         rdp|                                 S |d	k    rd
S | j        rd S |                     d|z             d S )N!DOCTYPEdoctyper   r   r   attrnamer   r`   r   r   zUnexpected character: %r)	r   r   re   r   r   rf   r   rh   rN   r   s     r   do_attrszXMLParser.do_attrs@  s    <<>> 	TZ//|z)) y|A$&&"{:\\^^ 
	FS[[T\4+=>>>//?ZW4CUCUCWCWWS[[<$ 	 F3d:;;;;;r   c                     || _         d S r   r   r   s     r   begin_doctypezXMLParser.begin_doctypeU      r   c                 6    |dk    rdS | xj         |z  c_         d S Nr   r`   r   r   s     r   
do_doctypezXMLParser.do_doctypeX  s$    3;;:r   c                 H    |                      | j                   d | _        d S r   )
gotDoctyper   r>   s    r   end_doctypezXMLParser.end_doctype]  s!    %%%r   c                 Z    |dk    r$| j         s| j        sdS |                                 S d S r   )rd   r   rh   r   s     r   do_waitforgtzXMLParser.do_waitforgta  s=    3;;{ "$"9 "!z%%''' ;r   c                 "    || _         d| _        d S Nr   )r   _attrname_termtagr   s     r   begin_attrnamezXMLParser.begin_attrnameg  s    !"r   c                 j   |                                 s	|t          v r| xj        |z  c_        d S |dk    rdS |                                rdS | j        r|dv rdS |t
          v s|                                 r| xj        |z  c_        d S |dk    r	d| _        d S |dk    rrd	| _        | j        | j        | j        <   | 	                    | j
        | j                   | j        r|                     | j
                   d
S |                                 S d S |                     d| j        d|           d S )N=beforeattrvalbeforeeq"'attrvalr   r   r   Truer`   zInvalid attribute name:  )r   r   r   r   r   lenientIdentCharsr   r   rf   r   re   r   rh   rN   r   s     r   do_attrnamezXMLParser.do_attrnamek  sW   <<>> 	TZ//MMT!MMFS[["?\\^^ 	:$ 	u}} y(((DLLNN(%s{{)*&s{{%48L"4=1  t/ABBB) &NN4<000%:))+++ FNDMNNdNNOOOOOr   c                 t   |dv rdS |                                 rd S | j        r||t          v s|                                rdS |dk    rOd| _        | j        | j        | j        <   |                     | j        | j                   | 	                                S |dk    rd S | 
                    d|z             d S )Nr   r   	messyattrr   r   \zEInvalid initial attribute value: %r; Attribute values must be quoted.)r   r   r   r   r   rf   r   r   re   rh   rN   r   s     r   do_beforeattrvalzXMLParser.do_beforeattrval  s    5==9\\^^ 	F$ 	(((DLLNN("{s{{%48L"4=1  t/ABBB))+++t|| S	
 	
 	
 	
 	
r   r   c                     d| _         d S r   )_beforeeq_termtagr   s     r   begin_beforeeqzXMLParser.begin_beforeeq  s    !"r   c                    |dk    rdS |                                 rd S | j        r|                                s	|t          v rd| _        | j        | j        | j        <   dS |dk    rrd| _        | j        | j        | j        <   |                     | j        | j                   | j	        r| 
                    | j                   dS |                                 S |dk    r	d| _	        d S |                     d	           d S )
Nr   r   r   r   r   r`   r   r   zInvalid attribute)r   r   r   r   r   rf   r   r   re   r   r   rh   rN   r   s     r   do_beforeeqzXMLParser.do_beforeeq  s
   3;;"?\\^^ 	F$ 	||~~ !3!3%48L"4=1!z%48L"4=1  t/ABBB) &NN4<000%:))+++)*&,-----r   c                 "    || _         d| _        d S r   	quotetyper   r   s     r   begin_attrvalzXMLParser.begin_attrval  s    r   c                 @    || j         k    rdS | xj        |z  c_        d S )Nr   r   r   s     r   
do_attrvalzXMLParser.do_attrval  s(    4>!!7r   c                 J    | j         | j        | j        <   dx| _        | _         d S r   r   rf   r   r>   s    r   end_attrvalzXMLParser.end_attrval  s%    ,0L4=)'))r   c                     || _         d S r   )r   r   s     r   begin_messyattrzXMLParser.begin_messyattr  r   r   c                    |                                 rdS |dk    rd}| j                            d          rd}| j        d d         | _        | j        | j        | j        <   |                     | j        | j                   |r|                     | j                   dS |                                 S | xj        |z  c_        d S )Nr   r   r   r   r   r`   )	r   r   r   rf   r   r   re   r   rh   )r9   rv   endTags      r   do_messyattrzXMLParser.do_messyattr  s    <<>> 	!7S[[F|$$S)) 1#|CRC004Dt}-T\4+=>>> "t|,,,!z%%'''LLD LLLLr   c                 @    | j         r| j         | j        | j        <   d S d S r   r   r>   s    r   end_messyattrzXMLParser.end_messyattr  s-    < 	=04Dt}---	= 	=r   c                     d| _         d S r   )_after_slash_closedr   s     r   begin_afterslashzXMLParser.begin_afterslash  s    #$   r   c                    | j         r|                     d           |dk    r| j        rd S |                     d           d| _         |                     | j        | j                   |                     | j                   dS )Nz
Mal-formedr   zNo data allowed after '/'r   r`   )r   rN   r   r   re   rf   r   r   s     r   do_afterslashzXMLParser.do_afterslash  s    # 	+\***3;;& >  !<===#$ t'9:::t|$$$ zr   c                 B    | j         r| j         | _        | ` d S d| _        d S r   )r   r`   r   s     r   rg   zXMLParser.begin_bodydata  s.      	 1DM%%%DMMMr   c                 F    |dk    rdS |dk    rdS | xj         |z  c_         d S )Nr~   r   &	entityrefr   r   s     r   do_bodydatazXMLParser.do_bodydata  s2    3;;:3;;;r   c                 H    |                      | j                   d| _        d S r   r   r>   s    r   end_bodydatazXMLParser.end_bodydata  s!    T]###r   c                 6    |dk    rdS | xj         |z  c_         d S )Nr~   waitscriptendtagr   r   s     r   do_waitforendscriptzXMLParser.do_waitforendscript  s%    3;;%%r   c                 0    d| _         d| _        d| _        d S r   )temptagdatare   rd   r   s     r   begin_waitscriptendtagz XMLParser.begin_waitscriptendtag  s    r   c                 *   | xj         |z  c_         |dk    r	d| _        d S | j        s| xj        d| j         z   z  c_        dS |                                s	|t          v r| xj        |z  c_        d                    | j                  s| xj        d| j         z   z  c_        dS | j        dk    r6|                     | j                   |                     | j                   dS d S |	                                rdS | xj        d| j         z   z  c_        dS )Nr   Tr~   rc   ra   r   r   )
r  rd   r`   r   r   re   rn   r   r   r   r   s     r   do_waitscriptendtagzXMLParser.do_waitscriptendtag  s0    	D  3;;DKKK 	&MMS4#333MM%%\\^^ 	&tz11LLD LL&&t|44 #t'7!77))))T]+++t|,,,"{ *)
 \\^^ 	&%% MMS4#333MM%%r   c                 "    d| _         d| _        d S r   )erefbuf	erefextrar   s     r   begin_entityrefzXMLParser.begin_entityref7  s    r   c                 $   |                                 s|dk    r]| j        r?| j        r| j        dk    r| j        | _        d| _        |dk    rdS | xj        |z  c_        dS |                     d           d S |dk    r| xj        |z  c_        d S dS )Nr~   ampr   spacebodydatazBad entity reference;r`   )r   r   r  r	  rN   r   s     r   do_entityrefzXMLParser.do_entityref;  s    <<>> 	TS[[& 	+< 2DLE$9$9%)\DN$3;;%:NNd*NN*?344444S[[LLD LLLL:r   c                 :    |                      | j                   d S r   )gotEntityReferencer  r>   s    r   end_entityrefzXMLParser.end_entityrefM  s    -----r   c                 ,    | j         | _        d | _         d S r   )r	  r`   r   s     r   begin_spacebodydatazXMLParser.begin_spacebodydataR  s    r   c                 (    t          d||           dS )zCEncountered an opening tag.

        Default behaviour is to print.rj   Nprint)r9   r(   
attributess      r   r   zXMLParser.gotTagStart[  s     	gtZ(((((r   c                 @    t          dt          |                     dS )z8Encountered text

        Default behaviour is to print.ztext:Nr  repr)r9   r\   s     r   r   zXMLParser.gotTexta  s      	gtDzz"""""r   c                 *    t          d|z             dS )zMEncountered mnemonic entity reference

        Default behaviour is to print.zentityRef: &%s;Nr  )r9   	entityRefs     r   r  zXMLParser.gotEntityReferenceg  s     	)+,,,,,r   c                     dS )z=Encountered comment.

        Default behaviour is to ignore.Nr	   )r9   r   s     r   r   zXMLParser.gotCommentm  s	     	r   c                 0    |                      |           dS )zJEncountered CDATA

        Default behaviour is to call the gotText methodN)r   )r9   r   s     r   r   zXMLParser.gotCDatas  s     	Ur   c                 @    t          dt          |                     dS )zEncountered DOCTYPE

        This is really grotty: it basically just gives you everything between
        '<!DOCTYPE' and '>' as an argument.
        r   Nr  )r9   r   s     r   r   zXMLParser.gotDoctypey  s      	j$w--(((((r   c                 &    t          d|           dS )z?Encountered closing tag

        Default behaviour is to print.endNr  )r9   r(   s     r   r   zXMLParser.gotTagEnd  s     	eTr   )Dr@   rA   rB   rm   rI   r5   r   r[   r   rJ   rL   rN   rW   r^   rh   rx   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   rg   r   r   r  r  r  r
  r  r  r  do_spacebodydataend_spacebodydatar   r   r  r   r   r   r   r	   r   r   rE   rE   Q   s       EIHH
   
) ) )
M M M      (, , ,\. . .        ,A ,A ,A\    $ $ $  4 4 4(    < < <*    
  ( ( (# # #P P P<
 
 
, HG# # #. . ..    
* * *  ! ! !"= = =% % %           
  
%& %& %&N    $. . .
   #$) ) )# # #- - -    ) ) )    r   rE   N)__doc__twisted.internet.protocolr   twisted.python.reflectr   BEGIN_HANDLER
DO_HANDLERrz   r   r   r   r   r#   r+   r0   	Exceptionr2   rE   r	   r   r   <module>r+     s   " / . . . . . 6 6 6 6 6 6 

)           I I I I I I I It t t t t t t t t tr   