;ò ÈÑœAc@sŒdZdZdZdkZdklZdklZdkl Z dfd„ƒYZ d fd „ƒYZ d „Z d fd „ƒYZdeefd„ƒYZhdds$Revision: 1.4 $N(sUserList(sUserDict(s translatesContextcBstZd„ZRS(NcKs&|ii|ƒg|_g|_dS(N(sselfs__dict__supdateskws resultstacks tablestack(sselfskw((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__init__"s (s__name__s __module__s__init__(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysContext!ss_dummycBstZdZRS(s for marking no-values (s__name__s __module__s__doc__(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys_dummy's cCs±t|tƒo g|fgpg}t|dƒo |iƒ}| o|SnxT|D]L}xCt|ƒD]5\}}|i d|i ƒƒ|i ||fƒqlWqYW|SdS(s[ return a list of path-node tuples. a path is a list of path elements (tag names) sfindiN(s isinstancesnodesElementslshasattrsfindstagsstags build_pathmapspathssubtagsinsertsnamesappend(snodestagsslstagssubtagspath((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys build_pathmap+s& sNodecBsStZd„Zd„Zd„Zd„Zed„Zd„Zd„Z d„Z RS( NcCs¨t|ƒtfƒjo-xˆ|D]}|i|ƒodSq q Wn_t|ƒtdƒtdƒfjo|iƒ|jSn&|tjodSnt|i|ƒSdS(Nisu( stypestagsisselfs_matchessnamesNones issubclasss __class__(sselfstagsi((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys_matches;s% cCstdƒ‚dS(Ns-not implemented, override in inheriting class(s_(sselfsother((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__eq__GscCst|d|iiƒSdS(s return name of tag sxmlnameN(sgetattrsselfs __class__s__name__(sself((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysnameJscCs|iii|ƒSdS(sF return true if the attribute 'name' is an attribute name of this tag N(sselfsattrs__dict__shas_keysname(sselfsname((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pyshasattrNscCs¤|tj o2t|i||ƒ}|tjo|Sn|Snt|iƒi |ƒot|i|ƒSnt dƒ}|i hd|<d|<ƒt |‚dS(s™ return xml attribute value or a given default. if no default value is set and there is no attribute raise an AttributeError. s*${name} attribute not found on tag ${self}snamesselfN(sdefaults_dummysgetattrsselfsattrsnamesretsNonesvarsshas_keys_smessages set_mappingsAttributeError(sselfsnamesdefaultsretsmessage((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysgetattrRs   cCs|itƒƒSdS(N(sselfsconvertsContext(sself((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysconvdscCsÆ|i|ƒ}t|ƒdjo/tdƒ}|ihd|<ƒt|‚nrt|ƒdjot|i ƒdƒdjo|i ƒddSn,tdƒ}|ihd|<ƒt|‚dS(sK return exactly one tag pointed to by a simple 'path' or raise a ValueErrorisno ${path} elementspathismore than one ${path} elementN( sselfsqueryspathsdicslens_smessages set_mappings ValueErrorsvalues(sselfspathsdicsmessage((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys query_onegs  0 c CsPg}x¾|idƒD]­}|djo|idƒq|djo|idƒqd|jo/tdƒ} | ihd|<ƒt| ‚qd|jo|id |ƒq|i|ƒqWdi |ƒd }t i |ƒ}h}xVt|ƒD]H\} }di | ƒ}|i|ƒo|i|gƒi|ƒqüqüW|Sd S( sÒ return a dictionary with path -> node mappings matching the querypath. querypath has the syntax name1/name2/... and each name can be * for any children tag or ** for any children tag in the complete subtree and it can look like "one|or|theother" which would match tags named eitehr 'one', 'or' or 'theother'. The implementation uses the regular expression module. s/s*s[^/]+s**s.+s#intermingling * is not allowed ${i}sis|s(%s)s$N(sls querypathssplitsisappends_smessages set_mappings ValueErrorsjoins searchstringsrescompilesrexsdics build_pathmapsselfspathstagslinesmatchs setdefault( sselfs querypathsrexs searchstringsislineslsdicstagspathsmessage((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysqueryus0       !( s__name__s __module__s_matchess__eq__snameshasattrs_dummysgetattrsconvs query_onesquery(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysNode:s      sFragcBs†tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z e e d„Z d „d „Z d „d „Z d d „ZRS(s, Fragment of Nodes (basically list of Nodes)cGsti|ƒ|i|ŒdS(N(sLists__init__sselfsappendscontent(sselfscontent((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__init__¤s cCs8y|iƒ|iƒjSWntj o dSnXdS(Ni(sselfsasBytessothersAttributeError(sselfsother((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__eq__¨scCs||j SdS(N(sselfsother(sselfsother((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__ne__®scGsŠxƒ|D]{}| oqnt|tƒp/t|ƒtfƒjpt|ƒtgƒjoti||ƒqti||ƒqWdS(N( sotherssothers isinstancesFragstypesListsextendsselfsappend(sselfsotherssother((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysappend±sBcCs‹yt|}Wntj onXtƒ}|ii|ƒ|}x1|o)|i dƒ}|i|i |ƒƒqIW|ii ƒSdS(Ni( sContextscontexts TypeErrorsFragsls resultstacksappendsselfspostspopsnodesconvert(sselfscontextsnodeslspost((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysconvert¼s cCs;g}x!|D]}|i|iƒƒq Wdi|ƒSdS(Nu(slsselfsnodesappends extract_textsjoin(sselfsnodesl((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys extract_textÈs cCs>|iƒ}x'|D]}|iƒ}|i|ƒqW|SdS(N(sselfs __class__snodeschildscompactscchildsappend(sselfsnodescchildschild((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pyscompactÎs   cCs^tƒ}xJ|D]B}|o ||ƒoqn|i|ƒo|i|ƒqqW|SdS(N(sFragsnodesselfschildsignores_matchesstagsappend(sselfstagsignoresnodeschild((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysfindÕs cCstS(N(sNone(sx((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysÞscCs™tƒtƒtƒf\}}}|}x]|oU|idƒ}||ƒ o |i |ƒo|}t|ƒ}Pn|i |ƒq+W|||fSdS(Ni( sFragsElementspresmatchspostsselfsallnodesspopschildsignores_matchesstagsappend(sselfstagsignorespresallnodesschildspostsmatch((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysfind_and_partitionÞs! cCssg}d}x\|D]T}||ƒ o |i|ƒo&|i|| |||dfƒn|d7}qW|SdS(Nii(slsisselfschildsignores_matchesstagsappend(sselfstagsignoresislschild((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysfind_all_partitionsës&sUTF-8cCs>g}x$|D]}|i|i|ƒƒq Wdi|ƒSdS(Ns(slsselfschildsappendsasBytessencodingsjoin(sselfsencodingschildsl((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysasBytesõs (s__name__s __module__s__doc__s__init__s__eq__s__ne__sappendsconverts extract_textscompactsNonesfindsfind_and_partitionsfind_all_partitionssasBytes(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysFrag¢s         sclass_sclasssAttrcBs)tZdZd„Zd„Zd„ZRS(s< an instance of Attr provides a namespace for tag-attributescKs|ii|ƒdS(N(sselfs__dict__supdateskw(sselfskw((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__init__scCs#ti||ƒ}||i||iƒD]0\}}|tj ot |i||ƒqËqËWdS(Nsu(sAttrsselfsattrs newcontentscontentschildsitemssnamesvaluessetattrsAttributeErrorstypesTextsappendsFragskwsNone(sselfscontentskwsvalues newcontentschildsname((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__init__s"  %  cCs |idƒ|idƒjSdS(NsUTF8(sselfsasBytessother(sselfsother((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__eq__&scCs||j SdS(N(sselfsother(sselfsother((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__ne__)scCs|iƒtijSdS(N(sselfsnamesElements__name__(sself((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys __nonzero__,scCs;|iƒ}|iiƒ|_t|ii|_|SdS(N(sselfs __class__snodescontentscompactsAttrsattrs__dict__(sselfsnode((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pyscompact/s cCs|iiƒSdS(N(sselfscontents extract_text(sself((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys extract_text5scCs)|iƒ}t|iiƒƒdjSdS(Ni(sselfscompactstmpslenscontentsfind(sselfstmp((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysisEmpty8s cOs|ii||ŽSdS(N(sselfscontentsfindsargsskwargs(sselfsargsskwargs((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysfind<scOs|ii||ŽSdS(N(sselfscontentsfind_and_partitionsargsskwargs(sselfsargsskwargs((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysfind_and_partition?scOs|ii||ŽSdS(N(sselfscontentsfind_all_partitionssargsskwargs(sselfsargsskwargs((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysfind_all_partitionsBscCs|SdS(N(sself(sselfscontext((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysconvertEscCst|iƒƒSdS(N(sreprsselfsasBytes(sself((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pys__repr__HscCs#|iƒ|_|ii|ƒSdS(N(sselfsfindscontentsindexsitem(sselfsitem((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysindexKssUTF-8cCsQg}x²t|iƒiƒD]›\}}|tjoqn|i|ƒ}t |dƒo|i |ƒ}n3t |ƒt dƒjo|i|ƒ}n|}|i d||fƒqW|ii |ƒ}di|ƒ}|iƒi|ƒ}|odtƒ}nd|i|ƒ}|p ||ijodtƒSn dtƒSd S( s& return canonical xml-representation sasBytesus%s="%s"s s<%(name)s %(attrlist)ss%(subnodes)ss %(start)s/>N(sattrlistsvarssselfsattrsitemssnamesvaluesNonesencodesencodingshasattrsasBytesstypesappendscontentssubnodessjoinslocalssstarts singletons(sselfsencodingsattrlistsnamesvaluesstartssubnodes((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysasBytesOs,  (s__name__s __module__s singletonss__init__s__eq__s__ne__s __nonzero__scompacts extract_textsisEmptysfindsfind_and_partitionsfind_all_partitionssconverts__repr__sindexsasBytes(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysElement s              sCharRefcBstZRS(N(s__name__s __module__(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysCharRefsssquotcBstZdZdZRS(s)quotation mark = APL quote, U+0022 ISOnumi"(s__name__s __module__s__doc__s codepoint(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysquotvs sampcBstZdZdZRS(sampersand, U+0026 ISOnumi&(s__name__s __module__s__doc__s codepoint(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysampws sltcBstZdZdZRS(sless-than sign, U+003C ISOnumi<(s__name__s __module__s__doc__s codepoint(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysltxs sgtcBstZdZdZRS(s greater-than sign, U+003E ISOnumi>(s__name__s __module__s__doc__s codepoint(((sF/mnt/gmirror/ports/www/zope-silva/work/SilvaDocument/transform/base.pysgtys s _escape_charscBs#tZd„Zd„Zd„ZRS(NcCs©h|_xutƒiƒD]d\}}y?t|tƒo |tj od||it|i ƒ