;ò Û,1Dc@sRdklZlZlZlZlZdklZlZdefd„ƒYZdS((s HTMLParsersHTMLParseErrorspiclosescharrefs entityref(slowersfinds HTML2SafeHTMLcBs«tZdddddgZdddd d d d d gZd„Zd„Zd„Zd„Zdkl Z d„Z d„Z d„Z d„Z d„Zd„Zd„ZRS(NslispsddsdtsoptionsbrswbrshrsinputsisindexsbasesmetasimgcCs,ti|ƒ||_d|_g|_dS(Ns(s HTMLParsers__init__sselfs valid_tagssresultsopenTags(sselfs valid_tags((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pys__init__s   cCsd|i|f|_dS(Ns%s(sselfsresultstag(sselfstag((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pysend_tagscCs|o|i||_ndS(N(sdatasselfsresult(sselfsdata((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pys handle_datascCsd|i|f|_dS(Ns%s&#%s;(sselfsresultsname(sselfsname((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pyshandle_charrefs(s entitydefscCs@|ii|ƒo d}nd}d|i||f|_dS(Ns&s&s%s%s%s;(sselfs entitydefsshas_keysnamesampsresult(sselfsnamesamp((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pyshandle_entityref#s cCsì||ijoØ|id||_x‰|D]\}}|tjo|id|7_q+t|dd!ƒdjot|dd!ƒdjo|id||f7_q+q+W||i jo|i i |ƒn|id |_nd S( s' Delete all tags except for legal ones sN( stagsselfs valid_tagssresultsattrssksvsNoneslowers never_closesopenTagssappend(sselfstagsattrssksv((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pyshandle_starttag+s  4!cCsŒyrx=||idjo|id|ijo|iiƒqW||idjo|i|iiƒƒnWntj onXdS(Niÿÿÿÿ(stagsselfsopenTagss can_closespopsend_tags IndexError(sselfstag((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pys handle_endtag>s+cCsFx?|io4|iiƒ}||ijo|i|ƒqqWdS(s Append missing closing tags N(sselfsopenTagsspopstags can_closesend_tag(sselfstag((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pyscleanupKs  cCseyti||ƒSWnJtj o>yti|i|ƒiƒSWqat j o dSqaXnXdS(Niÿÿÿÿ( s HTMLParsersparse_starttagsselfsisHTMLParseErrorspiclosessearchsrawdatasendsAttributeError(sselfsi((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pysparse_starttagRscCsYyti||ƒSWn>tj o2yti|i|ƒiƒSWqUdSqUXnXdS(Niÿÿÿÿ( s HTMLParsers parse_endtagsselfsisHTMLParseErrorspiclosessearchsrawdatasend(sselfsi((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pys parse_endtag[scCsò|i}d}t|ƒ}d}x||jot|d|ƒ}|djoPn||||!}ti ||ƒpt i ||ƒo|d}n |d}|d}q$W||||_yt i ||ƒSWntj onXdS(Niss&iÿÿÿÿs&i(sselfsrawdatasislensnsnewdatasfindsjscharrefsmatchs entityrefs HTMLParsersgoaheadsendsHTMLParseError(sselfsendsisjsnsrawdatasnewdata((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pysgoaheadds&    & (s__name__s __module__s can_closes never_closes__init__send_tags handle_datashandle_charrefshtmlentitydefss entitydefsshandle_entityrefshandle_starttags handle_endtagscleanupsparse_starttags parse_endtagsgoahead(((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pys HTML2SafeHTML s         N( s HTMLParsersHTMLParseErrorspiclosescharrefs entityrefsstringslowersfinds HTML2SafeHTML(sHTMLParseErrorslowerscharrefs HTML2SafeHTMLs HTMLParsers entityrefspiclosesfind((sN/mnt/gmirror/ports/www/zope-coreblog/work/COREBlog/stripogram/html2safehtml.pys? s%