ϪfQdZddlmZddlmZdZdZdZdZedzZ dZ d Z d Z d Z d ZGd deZGddeZy)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)prefixedMethodNamesz.-_:z;+#/%~cy)z Do nothing.N)argskws 1/usr/lib/python3/dist-packages/twisted/web/sux.pynopr $scg}|D]}|j||Dcic]}|d}}|jScc}w)Nr)extendkeys)r lxds r unionlistr(sH A   !AA 668O s ;c|jdti}td|DD]tfd|D|<|S)Ndefaultc3<K|]}|jywN)r).0fndicts r zzipfndict..3s.4s9qquuS'*9s)rr rtuple)r r rrrs @@r zipfndictr 0sKffY$G A   gc6D=))  s3ceZdZdZdefdZy) ParseErrorc<||_||_||_||_yrfilenamelinecolmessage)selfr/r0r1r2s r __init__zParseError.__init__Gs    r returncl|jd|jd|jd|jS)N:z: r.r3s r __str__zParseError.__str__Ms/--$))AdhhZr$,,HHr N)__name__ __module__ __qualname__r4strr9rr r r,r,Fs IIr r,c~eZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ d Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$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/Z5d0Z6d1Z7d2Z8d3Z9d4Z:e2Z;e3Zd7Z?d8Z@d9ZAd:ZBd;ZCy)< XMLParserNzrc.d|_d|_g|_y)Nrr)linenocolno encodingsr8s r connectionMadezXMLParser.connectionMade]s  r c2|j|jfS)z;Get the line number and column of the last character parsed)rArBr8s r saveMarkzXMLParser.saveMarkbs TZZ((r cRt|jf|jz|fzr)r,r/rF)r3r2s r _parseErrorzXMLParser._parseErrorgs&DMM+dmmo= JLLr c~tjdd}|"tfddDx}j_|S)z;Return a dictionary of begin, do, end state function tuples __stateTableNc36K|]}t|ywr)r*)rr$r3s r rz-XMLParser._buildStateTable..rs *$7s)begin_do_end_)r"r(r _XMLParser__stateTable)r3 stateTables` r _buildStateTablezXMLParser._buildStateTablejsJ T^^^TB  7@";8 J4 r cd|jvsd|jvrt|dzrJd|jr|j|z}|jD]}t||}|S)NUTF-16zUCS-2rz!UTF-16 must come in pairs for now)rClen_prependr=)r3dataencodings r _decodezXMLParser._decodeysi t~~ %DNN)B4y1} I&I I$ ====4'D 'HtX&D ' r c||jry|jdk(r d|jvr|jdyy)Nbodydatascriptsrcwaitforendscript)endtagtagName tagAttributesbegin_bodydatar8s r maybeBodyDatazXMLParser.maybeBodyDatas= ;; <<8 #T5G5G(G    %%r c |j}|jsB|jdr*|dd|_|jj d|dd}d|_|jr|j |}n|jd}|j|jc |j}|j} fd}||_ ||\}}} |D]?} | dk(r d z d n d z || } |  | |k7s&|| }||\}}}|| A ||_ c|_|_ ||_y#||_ c|_|_ wxYw) N)ssrrrSbeginzutf-8c fSrr)rBrAsr rFz(XMLParser.dataReceived..saveMarks E? "r  r) rQstate startswithrUrCappendrXdecoderArBrF) r3rVrPcurState _saveMarkrFbeginFndoFnendFnbytenewStaterBrAs @@r dataReceivedzXMLParser.dataReceivedsb**, zz9: $Qq  %%h/ABx DJ >><<%D;;w'D TZZ ::MM  #! )(3u 4 "4<aKFEQJE:'H,@G'H+5h+?(GT5DM "&DM&,e #DK &DM&,e #DKs!D;:D;D;;EcZ|j}||jty)z0 End the last state we were in. N)rQrg END_HANDLER)r3reasonrPs r connectionLostzXMLParser.connectionLosts(**, + 4::{+-r c|jry|dk7r)|jr||_y|jd|dy)N  3;&&(,%!   7xzJ Kr cd|_yN) commentbufr}s r begin_commentzXMLParser.begin_comments r c|xj|z c_|jjdr|j|jddyy)Nz-->rZ)rendswith gotCommentr}s r do_commentzXMLParser.do_commentsA 4 ?? # #E * OODOOCR0 1 +r c<d|_i|_d|_d|_yNrr)r_r`termtagr^r}s r begin_tagstartzXMLParser.begin_tagstarts   r c:|js|tvr&|xj|z c_|jdk(ryy|jr,|jr|jryy|j dy|dk(rg|jr|j |jy|j|ji|j xrdxs|jS|dk(r|jry d |_y|d vrH|jr|js/|j d y|xj|z c_d |_ yy|d k(r"|jdk(ry|j dy|jrd|_ y|j d|zy)Nz!--comment waitforgtattrszWhitespace before tag-name>rZ/ afterslashr!?zInvalid character in tag-name[! expectcdatazInvalid '[' in tag-namerxunentityzInvalid tag character: %r) isalnum identCharsr_rzr^rH gotTagEnd gotTagStartr{rbrrZr}s r do_tagstartzXMLParser.do_tagstartsc <<>TZ/ LLD L||u$ % \\^||;;'  !=> S[{{t||,!  r2000@jXDDVDVDXS[||# T\||..$$%DE $   / S[||s"$  !:;&& # !   84? @r c.|xj|z c_yrrZr}s r begin_unentityzXMLParser.begin_unentitys  r c.|xj|z c_y)NrZrr}s r do_unentityzXMLParser.do_unentitys  r c:|j|jyrgotTextrZr8s r end_unentityzXMLParser.end_unentitys T]]#r c||_yr)cdatabufr}s r begin_expectcdatazXMLParser.begin_expectcdatas  r c|xj|z c_|j}d}t|t|kDr0|j|ry|jry|j d||k(rd|_y|j dy)Nz[CDATA[rzMal-formed CDATA headerrcdata)rrTrhr{rH)r3rpcdbcds r do_expectcdatazXMLParser.do_expectcdata!sz  mm  r7SX }}S!(( #  !:; 9DM 23r c|xj|z c_|jjdr|jdd|_yy)Nz]]>rrZ)rrr}s r do_cdatazXMLParser.do_cdata5s<  == ! !% ( MM#2.DM )r cH|j|jd|_yr)gotCDatarr8s r end_cdatazXMLParser.end_cdata;s dmm$ r c|js|tvr#|jdk(ry|jddvryy|jry|dk(rI|j |j|j |j xrdxs|jS|d k(ry |j ry|jd |zy) N!DOCTYPEdoctyperrrattrnamerrZrrzUnexpected character: %r) rrr_rzrr`r{rbrHr}s r do_attrszXMLParser.do_attrs?s <<>TZ/||z) ||A$&" \\^  S[   T\\4+=+= >///?ZW4CUCUCW W S[  $ $  3d:;r c||_yrrr}s r begin_doctypezXMLParser.begin_doctypeT  r c:|dk(ry|xj|z c_yNrrZrr}s r do_doctypezXMLParser.do_doctypeWs 3;  r cH|j|jd|_yr) gotDoctyperr8s r end_doctypezXMLParser.end_doctype\s  % r c`|dk(r)|js |jsy|jSyr)r^r{rbr}s r do_waitforgtzXMLParser.do_waitforgt`s/ 3;{{$"9"9!%%' ' r c ||_d|_yNr)r_attrname_termtagr}s r begin_attrnamezXMLParser.begin_attrnamefs !"r c|js|tvr|xj|z c_y|dk(ry|jry|jr|dvry|t vs|jr|xj|z c_y|dk(rd|_y|dk(rd |_|j|j|j<|j|j|j|j r|j|jy |jSy|jd |jd |y) N= beforeattrvalbeforeeq"'attrvalrrrTruerZzInvalid attribute name:  )rrrrzr{lenientIdentCharsrrr`rr_rrbrHr}s r do_attrnamezXMLParser.do_attrnamejs <<>TZ/ MMT !M  S[" \\^  $ $u} ((DLLN % s{)*&s{% 48LL""4==1  t/A/AB))NN4<<0%))++  3DMM3DAdXNOr cx|dvry|jry|jr|tvs|jry|dk(r`d|_|j|j |j <|j|j|j |jS|dk(ry|jd|zy)Nrr messyattrrr\zEInvalid initial attribute value: %r; Attribute values must be quoted.) rzr{rrrr`rrr_rbrHr}s r do_beforeattrvalzXMLParser.do_beforeattrvals 5= \\^   $ $((DLLN"s{% 48LL""4==1  t/A/AB))++t|  S  r rcd|_yr)_beforeeq_termtagr}s r begin_beforeeqzXMLParser.begin_beforeeqs !"r c&|dk(ry|jry|jr|js|tvr+d|_|j|j |j <y|dk(rd|_|j|j |j <|j|j|j |jr|j|jy|jS|dk(rd|_ y|jd y) NrrrrrrZrrzInvalid attribute) rzr{rrrr`rrr_rrrbrHr}s r do_beforeeqzXMLParser.do_beforeeqs 3;" \\^   $ $||~!3% 48LL""4==1!% 48LL""4==1  t/A/AB))NN4<<0%))++)*& ,-r c ||_d|_yr quotetyperr}s r begin_attrvalzXMLParser.begin_attrvals r cN||jk(ry|xj|z c_y)Nrrr}s r do_attrvalzXMLParser.do_attrvals 4>> !  r cf|j|j|j<dx|_|_yrrr`rr8s r end_attrvalzXMLParser.end_attrvals(,0LL4==)'))  r c||_yr)rr}s r begin_messyattrzXMLParser.begin_messyattrrr c|jry|dk(rd}|jjdrd}|jdd|_|j|j|j<|j |j |j|r|j|j y|jS|xj|z c_y)NrrrrrrZ) rzrrr`rrr_rrb)r3rpendTags r do_messyattrzXMLParser.do_messyattrs <<> S[F||$$S)#||CR0 04 D  t}} -   T\\4+=+= >t||,!%%' ' LLD Lr cd|jr$|j|j|j<yyrrr8s r end_messyattrzXMLParser.end_messyattrs& <<04 D  t}} - r cd|_yr)_after_slash_closedr}s r begin_afterslashzXMLParser.begin_afterslashs #$ r c|jr|jd|dk7r|jry|jdd|_|j|j|j |j |jy)Nz Mal-formedrzNo data allowed after '/'rrZ)rrHr{rr_r`rr}s r do_afterslashzXMLParser.do_afterslashsr  # #   \ * 3;&&  !<=#$  t'9'9: t||$r cR|jr|j|_|`yd|_yr)r|rZr}s r razXMLParser.begin_bodydatas%   11DM%DMr cF|dk(ry|dk(ry|xj|z c_y)Nrxry& entityrefrr}s r do_bodydatazXMLParser.do_bodydatas$ 3; 3;  r cH|j|jd|_yrrr8s r end_bodydatazXMLParser.end_bodydatas T]]# r c:|dk(ry|xj|z c_y)Nrxwaitscriptendtagrr}s r do_waitforendscriptzXMLParser.do_waitforendscripts 3;%  r c.d|_d|_d|_yr) temptagdatar_r^r}s r begin_waitscriptendtagz XMLParser.begin_waitscriptendtag s  r cp|xj|z c_|dk(rd|_y|js#|xjd|jzz c_y|js|tvr|xj |z c_dj |j s#|xjd|jzz c_y|j dk(r7|j|j|j|j yy|jry|xjd|jzz c_y)NrTrxr]r[rr) rr^rZrrr_rhrrrzr}s r do_waitscriptendtagzXMLParser.do_waitscriptendtags D  3;DK MMS4#3#33 3M% \\^tz1 LLD L&&t||4 t'7'7!77 )) T]]+t||,"* \\^% MMS4#3#33 3M%r c d|_d|_yr)erefbuf erefextrar}s r begin_entityrefzXMLParser.begin_entityref6s r c>|js|dk(rm|jrO|jr |jdk7r|j|_d|_|dk(ry|xj|z c_y|j dy|dk7r|xj|z c_yy)Nrxampry spacebodydatazBad entity reference;rZ)rzr{rrrHr}s r do_entityrefzXMLParser.do_entityref:s <<>TS[&&<' as an argument. rNr)r3rs r rzXMLParser.gotDoctypexs j$w-(r ctd|y)z?Encountered closing tag Default behaviour is to print.endNr)r3r%s r rzXMLParser.gotTagEnds eTr )Dr:r;r<rgrCr/r{rUr|rDrFrHrQrXrbrrrvr~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrarrrrrrr r rdo_spacebodydataend_spacebodydatarrr rrrrrr r r?r?QsW EIHH  ) M (,\.  ,A\$4( <* ( #P< ,HG#.. *!"=%   %&N$. #$) # -   )r r?N)__doc__twisted.internet.protocolrtwisted.python.reflectr BEGIN_HANDLER DO_HANDLERrtrrr rr r&r* Exceptionr,r?rr r r%sh"/6    ) IIssr