mò kBc"@sþdklZlZdklZlZdklZdkZdk Z dk Z e ei fZdfd„ƒYZdefd„ƒYZd„Zed d d d d dddddg ƒZedddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3g!ƒZed4d5d6gƒZed7d8d9gƒZed:d;d<d=gƒZed d d>d?gƒZhd!ei<d'ei<d&ei<d$ei<d*ei<dd@„<ddA„<ddB„1s(RRRRtgetRtcheckerR(RRR(((R tmatcher.ssunknown class %sR$( RR)R!R"RRRRR(RRRR)R((R tcheck_disallowedClasses-s   cCs@d„}x0ti||ƒD]}|i||idƒqWdS(NcCsqdt|ddƒjoXt|tiƒ oDg}ti|ƒdd!D]!}|i djo |dqHqH~ S( Nt"tdatatiiÿÿÿÿtpretcode(sprescode( RRt isinstancetmicrodomtCommentt_[1]R!t getParentstnR(RR3R5((R R)8sscontains quote( R)R!t findNodesRRRRRt parentNode(RRRRR)((R t check_quote7s cCs4x-ti|dƒD]}|i||dƒqWdS(Ntstylesexplicit style(R!tfindElementsWithAttributeRRRRR(RRRR((R tcheck_styleattr@scCs4x-ti|dƒD]}|i||dƒqWdS(Ntalignsexplicit alignment(R!R:RRRRR(RRRR((R t check_alignDscCsNxGti|dƒD]3}ti|ƒdjo|i||dƒqqWdS(NR9R-shand hacked style(R!tfindNodesNamedRRt getNodeTextRRR(RRRR((R t check_styleHscCsÇ|i}ti|dƒ}t|ƒdjo|i||dƒSnti|dƒ}t|ƒdjo|i||dƒSnti |dƒti |dƒjo|i||ddƒndS(Nttitleisnot exactly one titleth1snot exactly one h1istitle and h1 text differ( RtdocumentElementtdocR!R>RAtlenRRRRBR?(RRRRBRARD((R t check_titleMs 'cCskxpti|dƒD]\}xSti|dƒidƒD]6}t|iƒƒdjo|i ||dƒq5q5WqWxñti|dƒD]Ý}|i ddƒi d ƒo»yItii|ƒ}tii||i d ƒƒ}t|d ƒiƒ}Wn*|i ||d |i d ƒƒq†nXxB|D]6}t|iƒƒdjo|i ||d ƒq%q%Wq†q†WdS(NR.is iPs!text wider than 80 columns in pretaR$R-tlistingthreftrsbad listing href: %rslisting wider than 80 columns(R!R>RRtgatherTextNodestsplittlineREtrstripRRRRtendswithtostpathtdirnametfntjointopent readlinestlines(RRRRRWRMRS((R tcheck_80_columnsXs.   c Cs™x’ti|dƒD]~}|idƒdjoby)ti|ƒ}|iddƒiddƒ}tdg}|i dƒD]} || i ƒqy~ƒ}xag}|D]"}|d djo |d q¦q¦~p)g}|D]}||d qÝ~}q›Wdi|ƒd}yti|ƒWn4tj o(}|id d ƒ}ti|ƒnXWq‘tj o&}|i||dt|ƒƒq‘XqqWdS(NR.R$tpythons>t>s<tRRRR?ttexttreplacetfilterRR3RLtlRNRWRMRTtparsertsuitet parserErrorsteRRRtstr( RRRRR3RdR]RWRMR`((R tcheck_pre_py_listingss&97* cCsŠg}tddƒD]}|d|q~}xU|D]M}xDti||ƒD]0}ti|dƒo|i ||dƒqNqNWq5WdS(Niish%dRGsanchor in heading( R3trangeR5t headingNamesthnameR!R>RRRRR(RRRRRiR5R3Rh((R tcheck_anchor_in_headingŠs.cCs¢x›ti|dƒD]‡}|idƒpqnti|ƒ}ti|ƒd}|oAd|jo4||i ddƒjo|i ||dƒqšqqWdS(NRGRIiR\R-slink text does not match href( R!R>RRRR?R]turlparsetprotoRRRR(RRRRR]Rl((R tcheck_texturl_matches_href‘s c Cs xti|dƒD]ï}|idƒdjoÓtiitii|ƒ|idƒƒ}t |ƒi ƒ}|t|iddƒƒ}xxt|tt|ƒƒƒD]W\}}|idƒo;|i||d|t|iddƒƒ|d fƒq£q£WqqWdS( NRGR$s py-listingRIt skipLinesis"59 Temple Place, Suite 330, BostonsEincluded source file %s has licence boilerplate. Use skipLines="%d".i(R!R>RRRRPRQRTRRRRSRURVRWtinttzipRgRERMtnumtcountRR(RRRRRWRqRMRS((R tcheck_a_py_listingœs  cCsx†ti|dƒti|dƒD]b}|ip|i||dƒnx8|iD]-}|i djo|i||dƒqTqTWq#WdS(Ntultols empty listtlis only list items allowed in lists( R!R>RRt childNodesRRRtchildtnodeName(RRRRRx((R t check_listsªs#   (RRRR#R*R8R;R=R@RFRXRfRjRmRsRz(((R R s         cCs%h}x|D]}d||