mò á¸Ec@sVdZdkZdkZeidƒiZeidƒiZ[dfd„ƒYZdS(sIShared support for scanning document type declarations in HTML and XHTML.Ns[a-zA-Z][-_.a-zA-Z0-9]*\s*s(\'[^\']*\'|"[^"]*")\s*t ParserBasecBswtZdZd„Zd„Zd„Zd„ZdZd„Zd„Z d„Z d „Z d „Z d „Z d „ZRS( siParser base class which provides some common support methods used by the SGML/HTML and XHTML parsers.cCsd|_d|_dS(Nii(tselftlinenotoffset(R((t-/data/zmath/zope/lib/python/TAL/markupbase.pytresets cCs|i|ifS(s&Return current line number and offset.N(RRR(R((RtgetposscCs t‚dS(s{Return an error, showing current line number and offset. Concrete subclasses *must* override this method. N(tNotImplementedError(Rtmessage((RterrorscCsŒ||jo|Sn|i}|id||ƒ}|o:|i||_|id||ƒ}||d|_ n|i |||_ |S(Ns i( titjRtrawdatatcounttnlinesRtrindextposR(RR R RR R((Rt updatepos"s  tc Cs|i} dk}|d}| ||!djp td‚| ||d!djodSnt| ƒ}|i||ƒ\}}|djo|Sn|d jo d|_ nxc||joU| |}|d joH| |d|!} |d jo|i | ƒn|i| ƒ|dSn|d jo.t| |ƒ}|pdSn|iƒ}n£|d jo|i||ƒ\}}nz||i jo|d}n\|d jo8|d jo|i|d|ƒ}qù|idƒn|id| | ƒ|djo|Sq°q°WdS(Niss"'t4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZt[s"unexpected '[' char in declarations!unexpected %s char in declaration(RR(RR tsysR R tAssertionErrortlentnt _scan_nametdecltypet_decl_othercharstctdatat handle_declt unknown_declt_declstringlit_matchtmtendtnamet_parse_doctype_subsetR ( RR RRR&R R$RRR R ((Rtparse_declaration2sL                   c Cs|i}t|ƒ}|}x÷||joé||}|djo{|||d!}|djodSn|djo*|i||dƒ|i d| ƒn|d|jodSn|d|jodSn|||d!djo1|i |d d ƒ}|d jo|Sqqn|i |d|ƒ\}}|djodSn|djo*|i||dƒ|i d| ƒnt|d|ƒ} | ||ƒ}|d jo|Sqq|djom|d|jodSn|i |d|ƒ\}}|d jo|Sn||djo|d}qq|djoŒ|d}x0||jo"||tijo|d}qQW||jo:||djo|Sn|i||ƒ|i dƒqdSq|tijo|d}q|i||ƒ|i d| ƒqWdS(Nt