o bQ@sdZddlmZddlmZdZdZdZdZedZ dd Z d d Z d d Z ddZ ddZGdddeZGdddeZdS)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). )ProtocolprefixedMethodNamesz.-_:z;+#/%~cOdS)z Do nothing.N)argskwrr1/usr/lib/python3/dist-packages/twisted/web/sux.pynop$sr cGs.g}|D]}||qdd|D}|S)NcSsi|]}|dqS)rr.0xrrr ,szunionlist..)extendkeys)r lrdrrr unionlist(s  rcsH|dti}tdd|DD]tfdd|D|<q|S)Ndefaultcss|]}|VqdSN)r)rfndictrrr 3szzipfndict..c3s|] }|VqdSr)getr rkeyrr r4s)rr rtuple)r r rrrr zipfndict0s rcsfddtDS)Nci|] }|t|qSrgetattrrnameclazzprefixrr r9z+prefixedMethodClassDict..rr$rr$r prefixedMethodClassDict8s r(csfddtjDS)Ncrrr r"objr&rr r@r'z)prefixedMethodObjDict..)r __class__r)rr)r prefixedMethodObjDict?s  r,c@s"eZdZddZdefddZdS) ParseErrorcCs||_||_||_||_dSrfilenamelinecolmessage)selfr/r0r1r2rrr __init__G zParseError.__init__returncCs"|jd|jd|jd|jS)N:z: r.r3rrr __str__Ms"zParseError.__str__N)__name__ __module__ __qualname__r4strr9rrrr r-Fsr-c@seZdZdZdZdZdZdZdZddZ ddZ dd Z d d Z d d Z ddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Z d4d5Z!d6d7Z"d8d9Z#d:d;Z$dZ'd?d@Z(dAdBZ)dCdDZ*dEdFZ+dGdHZ,dIdJZ-dKdLZ.dMdNZ/dOdPZ0dQdRZ1dSdTZ2dUdVZ3dWdXZ4dYdZZ5d[d\Z6d]d^Z7d_d`Z8dadbZ9dcddZ:e2Z;e3ZdidjZ?dkdlZ@dmdnZAdodpZBdqdrZCdS)s XMLParserNzrcCsd|_d|_g|_dS)Nrr)linenocolno encodingsr8rrr connectionMade^ zXMLParser.connectionMadecCs |j|jfS)z;Get the line number and column of the last character parsed)r?r@r8rrr saveMarkcs zXMLParser.saveMarkcCst|jf||fr)r-r/rD)r3r2rrr _parseErrorhszXMLParser._parseErrorcs8tjdd}|durtfdddD}j_|S)z;Return a dictionary of begin, do, end state function tuples __stateTableNc3s|]}t|VqdSr)r,)rr&r8rr rss  z-XMLParser._buildStateTable..)begin_do_end_)r!r+r_XMLParser__stateTable)r3 stateTablerr8r _buildStateTableks  zXMLParser._buildStateTablecCsRd|jvs d|jvrt|d@rJd|jr|j|}|jD]}t||}q|S)NUTF-16zUCS-2rz!UTF-16 must come in pairs for now)rAlen_prependr=)r3dataencodingrrr _decodezs   zXMLParser._decodecCs0|jrdS|jdkrd|jvr|ddSdS)Nbodydatascriptsrcwaitforendscript)endtagtagName tagAttributesbegin_bodydatar8rrr maybeBodyDatas  zXMLParser.maybeBodyDatac s6|}|js"|dr|dd|_|jd|dd}d|_|jr+||}n|d}|j|j |j}|j }fdd}||_ ||\}}}z<|D]-} | d kr^d 7dnd 7|| } | dur~| |kr~|| }||\}}}|| qQW||_ |_|_ n ||_ |_|_ w||_dS) N)ssrrrMbeginzutf-8csfSrrrr@r?rr rDsz(XMLParser.dataReceived..saveMark r) rLstate startswithrOrAappendrRdecoder?r@rD) r3rPrKcurState _saveMarkrDbeginFndoFnendFnbytenewStaterr]r dataReceivedsF      zXMLParser.dataReceivedcCs|}||jtdS)z0 End the last state we were in. N)rLr_ END_HANDLER)r3reasonrKrrr connectionLostszXMLParser.connectionLostcCs:|rdS|dkr|jr||_dS|d|ddS)NrS)rxendswith gotCommentrsrrr do_comments  zXMLParser.do_commentcCsd|_i|_d|_d|_dSNrwr)rXrYtermtagrWrsrrr begin_tagstartr5zXMLParser.begin_tagstartcCs:|s|tvr|j|7_|jdkrdSdS|r-|jr&|jr$dSdS|ddS|dkrM|jr<||jdS||ji|j rIdpL| S|dkr[|jrVd Sd |_dS|d vrz|jrn|jsl|d dSdS|j|7_d |_ dS|d kr|jdkrdS|ddS|jrd|_ dS|d|dS)Nz!--comment waitforgtattrszWhitespace before tag-name>rS/ afterslashr!?zInvalid character in tag-name[! expectcdatazInvalid '[' in tag-namernunentityzInvalid tag character: %r) isalnum identCharsrXrprWrE gotTagEnd gotTagStartrqr[rrSrsrrr do_tagstartsJ     zXMLParser.do_tagstartcCs|j|7_dSrrSrsrrr begin_unentityszXMLParser.begin_unentitycCs|j|7_dS)NrSrrsrrr do_unentityszXMLParser.do_unentitycC||jdSrgotTextrSr8rrr end_unentityzXMLParser.end_unentitycC ||_dSr)cdatabufrsrrr begin_expectcdatarzzXMLParser.begin_expectcdatacCsj|j|7_|j}d}t|t|kr%||rdS|jr dS|d||kr.d|_dS|ddS)Nz[CDATA[rzMal-formed CDATA headerrwcdata)rrNr`rqrE)r3rhcdbcdrrr do_expectcdata"s  zXMLParser.do_expectcdatacCs2|j|7_|jdr|jdd|_dSdS)Nz]]>r{rS)rr|rsrrr do_cdata6s  zXMLParser.do_cdatacC||jd|_dSrv)gotCDatarr8rrr end_cdata<  zXMLParser.end_cdatacCs|s|tvr|jdkrdS|jddvrdSdS|r dS|dkr6||j|j|j r2dp5|S|d kr' as an argument. rNr)r3rrrr ryszXMLParser.gotDoctypecCstd|dS)z?Encountered closing tag Default behaviour is to print.endNr)r3r#rrr rrzXMLParser.gotTagEnd)Dr:r;r<r_rAr/rqrOrrrBrDrErLrRr[rjrmrtryr~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrZrrrrrrrrrdo_spacebodydataend_spacebodydatarrrr}rrrrrrr r>Qs .  .' r>N)__doc__twisted.internet.protocolrtwisted.python.reflectr BEGIN_HANDLER DO_HANDLERrkrrr rrr(r, Exceptionr-r>rrrr s