;ò VÉ]@c@sdZdkZdkZdklZdkZdkZeiZy dkZWne j o e ZnXdfd„ƒYZ de fd„ƒYZ de fd„ƒYZ d e fd „ƒYZd e fd „ƒYZd e fd„ƒYZde fd„ƒYZde fd„ƒYZd„Ze ad„Zd„Zd„Zde fd„ƒYZde fd„ƒYZde fd„ƒYZde fd„ƒYZde fd „ƒYZd!e fd"„ƒYZd#efd$„ƒYZd%efd&„ƒYZd'efd(„ƒYZ d)e fd*„ƒYZ!d+e fd,„ƒYZ"d-e"fd.„ƒYZ#d/e"fd0„ƒYZ$d1„Z%hd2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdGcreate an iterator for this regexp; the 'tag' defines a recordN(sIteratorsselfs make_parsers debug_levelstag(sselfstags debug_levelsIterator((sMartel/Expression.pys make_iteratorVs cCs||ƒSdS(sÍinternal function for manipulating the leaves of an expression This really needs to be some sort of visit pattern, but I'm not sure the best way to do it. THIS METHOD MAY CHANGE. N(sfuncsself(sselfsfunc((sMartel/Expression.pys_modify_leaves[s(s__name__s __module__s__doc__s__add__s__or__s group_namess _find_groupssfeaturess _select_namesscopys__str__s make_parsers make_iterators_modify_leaves(((sMartel/Expression.pys Expression(s          sAnycBs&tZdd„Zd„Zd„ZRS(NicCs||_||_dS(s¤(chars, invert = 0) Match any of the characters appearing in the 'chars' string. If 'invert' is true, match a character not in the string. N(scharssselfsinvert(sselfscharssinvert((sMartel/Expression.pys__init__es cCst|i|iƒSdS(s&do a deep copy on this Expression treeN(sAnysselfscharssinvert(sself((sMartel/Expression.pyscopynscCs4|iodt|iƒSndt|iƒSdS(s the corresponding pattern strings[^%s]s[%s]N(sselfsinverts_minimize_any_rangeschars(sself((sMartel/Expression.pys__str__rs (s__name__s __module__s__init__scopys__str__(((sMartel/Expression.pysAnyds sAssertcBs/tZdd„Zd„Zd„Zd„ZRS(NicCs||_||_dS(s¿(expression, invert = 0) A non-consuming assertion using the given expression. The default is a positive lookahead, which matches if the expression matches at the current position, but does not affect the character position. If 'invert' is false, this is a negative lookahead assertion, and matches if the expression does not match. Again, the character position is not affected. N(s expressionsselfsinvert(sselfs expressionsinvert((sMartel/Expression.pys__init__|s  cCst|iiƒ|iƒSdS(s&do a deep copy on this Expression treeN(sAssertsselfs expressionscopysinvert(sself((sMartel/Expression.pyscopy‹scCs4|iodt|iƒSndt|iƒSdS(s the corresponding pattern strings(?!%s)s(?=%s)N(sselfsinvertsstrs expression(sself((sMartel/Expression.pys__str__s cCs7|ii|ƒ}|tj pt‚||_|SdS(N(sselfs expressions_modify_leavessfuncsexpsNonesAssertionError(sselfsfuncsexp((sMartel/Expression.pys_modify_leaves–s (s__name__s __module__s__init__scopys__str__s_modify_leaves(((sMartel/Expression.pysAssert{s   s AtBeginningcBs tZdZd„Zd„ZRS(sMatch the beginning of a linecCs tƒSdS(s&do a deep copy on this Expression treeN(s AtBeginning(sself((sMartel/Expression.pyscopy£scCsdSdS(s the corresponding pattern strings^N((sself((sMartel/Expression.pys__str__¦s(s__name__s __module__s__doc__scopys__str__(((sMartel/Expression.pys AtBeginning¡s  sAtEndcBs tZdZd„Zd„ZRS(sMatch the end of a linecCs tƒSdS(s&do a deep copy on this Expression treeN(sAtEnd(sself((sMartel/Expression.pyscopy°scCsdSdS(s the corresponding pattern strings$N((sself((sMartel/Expression.pys__str__³s(s__name__s __module__s__doc__scopys__str__(((sMartel/Expression.pysAtEnd®s  sDebugcBs#tZd„Zd„Zd„ZRS(NcCs ||_dS(N(smsgsself(sselfsmsg((sMartel/Expression.pys__init__ºscCsdSdS(Ns((sself((sMartel/Expression.pys__str__¼scCst|iƒSdS(s!do a deep copy on this ExpressionN(sDebugsselfsmsg(sself((sMartel/Expression.pyscopy¿s(s__name__s __module__s__init__s__str__scopy(((sMartel/Expression.pysDebug¹s  sDotcBs tZdZd„Zd„ZRS(s"Match any character except newlinecCs tƒSdS(s&do a deep copy on this Expression treeN(sDot(sself((sMartel/Expression.pyscopyÆscCsdSdS(s the corresponding pattern strings.N((sself((sMartel/Expression.pys__str__És(s__name__s __module__s__doc__scopys__str__(((sMartel/Expression.pysDotÄs  sAnyEolcBs tZdZd„Zd„ZRS(s"Match a newline (" ", " " or " ")cCs tƒSdS(s&do a deep copy on this Expression treeN(sAnyEol(sself((sMartel/Expression.pyscopyÐscCsdSdS(s the corresponding pattern strings (\n|\r\n?)N((sself((sMartel/Expression.pys__str__Ós(s__name__s __module__s__doc__scopys__str__(((sMartel/Expression.pysAnyEolÎs  cCs=|p td‚ti|ƒ otdt|ƒ‚ndS(Ns&Group name can not be the empty strings"Illegal character in group name %s(sssAssertionErrors msre_parsesisnamesrepr(ss((sMartel/Expression.pys _verify_nameÝscCs\d}h}x(tdƒD]}d||t|ƒW|adS(NsAABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-is%%%02X(ssafeslookupsrangescschrs_fast_quote_lookup(scssafeslookup((sMartel/Expression.pys_make_fast_lookupãs cCsettjo tƒnt}g}|o&x#|D]}|i||ƒq2Wnti |dƒSdS(Ns( s_fast_quote_lookupsNones_make_fast_lookupslookupstermsssscsappendsstringsjoin(ssstermsscslookup((sMartel/Expression.pys_quoteñs  cCs¶|tjodt|ƒSn”|oxg}x=|iƒD]/\}}|i dt |ƒt |ƒfƒq9W|dt i |dƒ}d|t|ƒfSnd|t|ƒfSdS(Ns(%s)s%s=%ss?s&s (?P<%s>%s)(snamesNonesstrs expressionsattrsstermssitemssksvsappends_quotesstringsjoinsattrname(snames expressionsattrsstermssksattrnamesv((sMartel/Expression.pys_make_group_patternûs  'sGroupcBsStZed„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z RS( NcCsƒ|tj ot|ƒn||_||_|tjotihƒ}n*t|t hƒƒoti|ƒ}n||_dS(sc(name, expression) Create a group named 'name' which matches the given expression N( snamesNones _verify_namesselfs expressionsattrss xmlreadersAttributesImpls isinstancestype(sselfsnames expressionsattrs((sMartel/Expression.pys__init__ s    cCsQ|iiƒ}|itj o*|i|jo|SqI|if|Sn|SdS(s@the list of group names used by this Expression and its childrenN(sselfs expressions group_namesssubnamessnamesNone(sselfssubnames((sMartel/Expression.pys group_namesscCs?g}|i|jo|i|ƒn||ii|ƒSdS(s2return a list of all groups matching the given tagN(sxsselfsnamestagsappends expressions _find_groups(sselfstagsx((sMartel/Expression.pys _find_groups#s cCs|iiƒSdS(sreturn a list of all featuresN(sselfs expressionsfeatures(sself((sMartel/Expression.pysfeatures*scCsS|itj o |i|jot|_tihƒ|_n|ii|ƒdS(sinternal function: do not useN( sselfsnamesNonesnamess xmlreadersAttributesImplsattrss expressions _select_names(sselfsnames((sMartel/Expression.pys _select_names.s   cCs7|ii|ƒ}|tj pt‚||_|SdS(N(sselfs expressions_modify_leavessfuncsexpsNonesAssertionError(sselfsfuncsexp((sMartel/Expression.pys_modify_leaves5s cCs)t|i|iiƒ|iiƒƒSdS(s&do a deep copy on this Expression treeN(sGroupsselfsnames expressionscopysattrs(sself((sMartel/Expression.pyscopy;scCst|i|i|iƒSdS(s the corresponding pattern stringN(s_make_group_patternsselfsnames expressionsattrs(sself((sMartel/Expression.pys__str__?s( s__name__s __module__sNones__init__s group_namess _find_groupssfeaturess _select_namess_modify_leavesscopys__str__(((sMartel/Expression.pysGroup s      sGroupRefcBs#tZd„Zd„Zd„ZRS(NcCst|ƒ||_dS(sV(name) Match the same text previously found by the given named group N(s _verify_namesnamesself(sselfsname((sMartel/Expression.pys__init__Fs cCst|iƒSdS(s&do a deep copy on this Expression treeN(sGroupRefsselfsname(sself((sMartel/Expression.pyscopyMscCsd|iSdS(s the corresponding pattern strings(?P=%s)N(sselfsname(sself((sMartel/Expression.pys__str__Ps(s__name__s __module__s__init__scopys__str__(((sMartel/Expression.pysGroupRefEs  sLiteralcBs&tZdd„Zd„Zd„ZRS(NicCs||_||_dS(sŽ(char, invert = 0) Match the given character or, if 'invert' is true, match a character which is not this character. N(scharsselfsinvert(sselfscharsinvert((sMartel/Expression.pys__init__Zs cCst|i|iƒSdS(s&do a deep copy on this Expression treeN(sLiteralsselfscharsinvert(sself((sMartel/Expression.pyscopycscCs-t|iƒ}|io d|Sn|SdS(s the corresponding pattern strings[^%s]N(sescapesselfscharscsinvert(sselfsc((sMartel/Expression.pys__str__gs   (s__name__s __module__s__init__scopys__str__(((sMartel/Expression.pysLiteralYs s MaxRepeatcBsVtZded„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z RS( NicCsÍ||_t|ƒtdƒjo]d|jptd|‚t|ƒtdƒjo%||jptd||f‚q·n9t|ƒtdƒjo|djptd|‚n||_||_dS(sÀ(expression, min_count = 0, max_count = MAXREPEAT) Match the expression at least 'min_count' times and no more than 'max_count' times. If max_count == MAXREPEAT then there is no fixed upper limit. min_count and max_count can be strings, in which case they are used as "named group repeats." That is, they are taken to be group names and used to find the repeat counts during evaluation time. The current implementation only understands named group repeats when min_count == max_count. The grouping is greedy. WARNING: There is no check to ensure that a match of 0 size is repeated indefinitely, as with "(a?)*" against the string "b". This will loop forever. WARNING: The current implementation does not support backtracking in MaxRepeats, so ".* " will not match " ". Use a more explicit construct instead, like "[^ ]* ". is&min_count must be non-negative, not %ds(min_count (%d) must be <= max_count (%d)s&max_count must be non-negative, not %dN(s expressionsselfstypes min_countsAssertionErrors max_count(sselfs expressions min_counts max_count((sMartel/Expression.pys__init__ss ) cCs|iiƒSdS(s@the list of group names used by this Expression and its childrenN(sselfs expressions group_names(sself((sMartel/Expression.pys group_namesžscCs|ii|ƒSdS(N(sselfs expressions _find_groupsstag(sselfstag((sMartel/Expression.pys _find_groups£scCs|iiƒSdS(sreturn a list of all featuresN(sselfs expressionsfeatures(sself((sMartel/Expression.pysfeatures¦scCs#t|iiƒ|i|iƒSdS(s&do a deep copy on this Expression treeN(s MaxRepeatsselfs expressionscopys min_counts max_count(sself((sMartel/Expression.pyscopyªscCs|ii|ƒdS(sinternal function: do not useN(sselfs expressions _select_namessnames(sselfsnames((sMartel/Expression.pys _select_names¯scCs7|ii|ƒ}|tj pt‚||_|SdS(N(sselfs expressions_modify_leavessfuncsexpsNonesAssertionError(sselfsfuncsexp((sMartel/Expression.pys_modify_leaves³s cCsÞ|i}|i}|i}t|tƒo d}n!t|tƒo d}nd}|odt |ƒ}n t |ƒ}t |ƒt dƒjpt |ƒt dƒjo/||jod|}qÒd||f}nö|djo |t jo d}nÒ|djo |t jo d}n®|djo |djo d }nŠ||jo djno d}nb||jod |}nG|djod |}n,|t jod |}nd ||f}||SdS(s the corresponding pattern stringiis(%s)ss{%s}s{%s,%s}s*s+s?s{%d}s{,%d}s{%d,}s{%d,%d}N(sselfs min_counts max_counts expressionssubexps isinstancesExpressionLists need_groupsStrsstrssstypesexts MAXREPEAT(sselfssubexpsextsss max_counts need_groups min_count((sMartel/Expression.pys__str__¹s@      2        ( s__name__s __module__s MAXREPEATs__init__s group_namess _find_groupssfeaturesscopys _select_namess_modify_leavess__str__(((sMartel/Expression.pys MaxRepeatrs+      sNullOpcBs>tZd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCsdS(s>() Doesn't match anything. This is a null operation. It's useful if you want a valid initial object from which to build, as in: exp = NullOp() for c in string.split(line): exp = exp + Str(c) (That's contrived -- see Time.py for a real use.) N((sself((sMartel/Expression.pys__init__îs cCsdS(N((sselfsnames((sMartel/Expression.pys _select_namesûscCs tƒSdS(N(sNullOp(sself((sMartel/Expression.pyscopyýscCsdSdS(Ns((sself((sMartel/Expression.pys__str__ÿscCs|SdS(N(sother(sselfsother((sMartel/Expression.pys__add__scCstdƒ‚dS(Ns/Cannot 'or' a NullOp with anything (only 'and')(s TypeError(sselfsother((sMartel/Expression.pys__or__s(s__name__s __module__s__init__s _select_namesscopys__str__s__add__s__or__(((sMartel/Expression.pysNullOpís     s PassThroughcBsPtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS( NcCs ||_dS(sÅ(expression) Match the given subexpression. This class should not be used directly. It is meant for generating specialized parsers which read a record at a time. N(s expressionsself(sselfs expression((sMartel/Expression.pys__init__ scCs|ii|ƒdS(N(sselfs expressions _select_namessnames(sselfsnames((sMartel/Expression.pys _select_namesscCs7|ii|ƒ}|tj pt‚||_|SdS(N(sselfs expressions_modify_leavessfuncsexpsNonesAssertionError(sselfsfuncsexp((sMartel/Expression.pys_modify_leavess cCst|iiƒƒSdS(s&do a deep copy on this Expression treeN(s PassThroughsselfs expressionscopy(sself((sMartel/Expression.pyscopyscCst|iƒSdS(s the corresponding pattern stringN(sstrsselfs expression(sself((sMartel/Expression.pys__str__scCs|iiƒSdS(N(sselfs expressions group_names(sself((sMartel/Expression.pys group_namesscCs|ii|ƒSdS(N(sselfs expressions _find_groupsstag(sselfstag((sMartel/Expression.pys _find_groups scCs|iiƒSdS(sreturn a list of all featuresN(sselfs expressionsfeatures(sself((sMartel/Expression.pysfeatures"s( s__name__s __module__s__init__s _select_namess_modify_leavesscopys__str__s group_namess _find_groupssfeatures(((sMartel/Expression.pys PassThroughs       s FastFeaturecBs#tZd„Zd„Zd„ZRS(NcCs&ti||ƒ||_||_dS(N(s PassThroughs__init__sselfs expressionsfeatures remove_tags(sselfs expressionsfeatures remove_tags((sMartel/Expression.pys__init__'s cCs$t|iiƒ|i|iƒSdS(s&do a deep copy on this Expression treeN(s FastFeaturesselfs expressionscopysfeatures remove_tags(sself((sMartel/Expression.pyscopy+scCs|i|ifgSdS(N(sselfsfeatures remove_tags(sself((sMartel/Expression.pysfeatures/s(s__name__s __module__s__init__scopysfeatures(((sMartel/Expression.pys FastFeature&s  s HeaderFootercBsVtZd„Zd„Zd„Zdd„Zdd„Zd„Zd„Zd „Z RS( Nc Cs|t|tƒotdƒ‚n|tjo4|tjo |tjpt‚t |dƒ} n|t |dƒ} | tj o| | } n"| tjo | tjpt‚ti|t|| |ƒƒ||_|tjotihƒ}n*t|thƒƒoti|ƒ}n||_||_||_||_||_ ||_||_| |_ | |_ | |_dS(NsNLooks like you need an attrs between the format_name and the record_expressioni(s isinstancesattrss Expressions TypeErrorsheader_expressionsNonesmake_header_readers header_argssAssertionErrors MaxRepeatsrecord_expressionsexpsfooter_expressionsmake_footer_readers footer_argss PassThroughs__init__sselfsGroups format_names xmlreadersAttributesImplstypesmake_record_readers record_args( sselfs format_namesattrssheader_expressionsmake_header_readers header_argssrecord_expressionsmake_record_readers record_argssfooter_expressionsmake_footer_readers footer_argssexp((sMartel/Expression.pys__init__3s2 ! !           c Cs¼|i}|tj o|iƒ}n|i}|tj o|iƒ}n|i}|tj o|iƒ}nt |i |i iƒ||i |i ||i|i||i|iƒ SdS(N(sselfsheader_expressions header_expsNonescopysrecord_expressions record_expsfooter_expressions footer_exps HeaderFooters format_namesattrssmake_header_readers header_argssmake_record_readers record_argssmake_footer_readers footer_args(sselfs record_exps header_exps footer_exp((sMartel/Expression.pyscopyZs      cCsÚ|i}|tj o0|i|ƒ}|tj pt‚||_n|i}|tj o0|i|ƒ}|tj pt‚||_n|i }|tj o0|i|ƒ}|tj pt‚||_ n|SdS(N( sselfsheader_expressions header_expsNones modify_leavessfuncsAssertionErrorsrecord_expressions record_expsfooter_expressions footer_exp(sselfsfuncs record_exps header_exps footer_exp((sMartel/Expression.pys_modify_leavesjs          icCs‡dk}dk}d} |itj o7|i|id|ƒ\} }}|i }|i }n"f} d}h}tf}t}|i|i d|ƒ\} } }|i}|i}|i|ƒ| p|} |itj oD|i|id|ƒ\}} }|i}|i} |i|ƒnf}d}t}t} | p|} ti|i|i||| ||| || || ||fƒ SdS(Nis debug_level(sGenerates RecordReaderswantsselfsheader_expressionsNonesgenerates debug_levelsheader_tagtableswant_flgs attrlookupsmake_header_readers header_argssrecord_expressionsrecord_tagtables want_flagstmp_attrlookupsmake_record_readers record_argssupdatesfooter_expressionsfooter_tagtablesmake_footer_readers footer_argssParsersHeaderFooterParsers format_namesattrs(sselfs debug_levelsmake_footer_readers header_argssmake_record_readers record_argss RecordReaderstmp_attrlookups attrlookupswantsrecord_tagtables footer_argssheader_tagtables want_flagsmake_header_readersGenerateswant_flgsfooter_tagtable((sMartel/Expression.pys make_parser|sD                c Cs`dk}||ijo|ii||ƒSn|itjo t}n|ii |ƒ}|i tj pt ‚|i i |ƒ}|itjo t}n|ii |ƒ}t|i tƒo|i i|jo ttj o>ti||i|i||i|i||i|i|ƒ Sn|i||i|i||i|i||i|i|ƒ SdS(s>create an iterator for this regexp; the 'tag' defines a recordN(sIteratorstagsselfs format_names expressions make_iteratorsheader_expressionsNones header_parsers make_parsers debug_levelsrecord_expressionsAssertionErrors record_parsersfooter_expressions footer_parsers isinstancesGroupsnames IterParsersIterHeaderFootersmake_header_readers header_argssmake_record_readers record_argssmake_footer_readers footer_argssIteratorHeaderFooter(sselfstags debug_levelsIterators record_parsers footer_parsers header_parser((sMartel/Expression.pys make_iterator¬s*   3 cCs~|ig}|itj o|i|iiƒƒn|i|iiƒƒ|itj o|i|iiƒƒn|SdS(N( sselfs format_namesxsheader_expressionsNonesextends group_namess expressionsfooter_expression(sselfsx((sMartel/Expression.pys group_namesÑs cCs›||ijp td‚g}|itj o|i|ii|ƒƒn|i|i i|ƒƒ|i tj o|i|i i|ƒƒn|SdS(Nscan't handle that case( stagsselfs format_namesAssertionErrorsxsheader_expressionsNonesextends _find_groupss expressionsfooter_expression(sselfstagsx((sMartel/Expression.pys _find_groupsÙscCsxg}|itj o|i|iiƒƒn|i|iiƒƒ|itj o|i|iiƒƒn|SdS(sreturn a list of all featuresN(sxsselfsheader_expressionsNonesextendsfeaturess expressionsfooter_expression(sselfsx((sMartel/Expression.pysfeaturesãs( s__name__s __module__s__init__scopys_modify_leavess make_parsers make_iterators group_namess _find_groupssfeatures(((sMartel/Expression.pys HeaderFooter2s '   0 %  s ParseRecordscBsYtZfd„Zd„Zdd„Zdd„Zd„Zd„Zd„Zd „Z RS( NcCs¿ti|t|t|dƒ|ƒƒt|t ƒot dƒ‚n||_|t jot i hƒ}n*t|thƒƒot i |ƒ}n||_||_||_||_dS(NisNLooks like you need an attrs between the format_name and the record_expression(s PassThroughs__init__sselfsGroups format_names MaxRepeatsrecord_expressionsattrss isinstances Expressions TypeErrorsNones xmlreadersAttributesImplstypes make_readers reader_args(sselfs format_namesattrssrecord_expressions make_readers reader_args((sMartel/Expression.pys__init__ïs       cCs/t|i|i|iiƒ|i|iƒSdS(s&do a deep copy on this Expression treeN(s ParseRecordssselfs format_namesattrssrecord_expressionscopys make_readers reader_args(sself((sMartel/Expression.pyscopys icCs\dk}|i|i|ƒ\}}}ti |i |i ||||f|i |i ƒSdS(N(sGeneratesgeneratesselfsrecord_expressions debug_levelstagtableswant_flgs attrlookupsParsers RecordParsers format_namesattrss make_readers reader_args(sselfs debug_levelstagtables attrlookupsGenerateswant_flg((sMartel/Expression.pys make_parser s  cCs»dk}||ijo|ii||ƒSnt|itƒo|ii |jo t t j o,t i |ii |ƒ|i|i|ƒSn|i|ii |ƒ|i|i|ƒSdS(s>create an iterator for this regexp; the 'tag' defines a recordN(sIteratorstagsselfs format_names expressions make_iterators isinstancesrecord_expressionsGroupsnames IterParsersNones IterRecordss make_parsers debug_levels make_readers reader_argssIteratorRecords(sselfstags debug_levelsIterator((sMartel/Expression.pys make_iterators 3cCs|i|iiƒSdS(N(sselfs format_names expressions group_names(sself((sMartel/Expression.pys group_names'scCs.||ijp td‚|ii|ƒSdS(Nscan't handle that case(stagsselfs format_namesAssertionErrors expressions _find_groups(sselfstag((sMartel/Expression.pys _find_groups)scCs|iiƒSdS(sreturn a list of all featuresN(sselfs expressionsfeatures(sself((sMartel/Expression.pysfeatures-scCs.|ii|ƒ}|tj pt‚|SdS(N(sselfs expressions modify_leavessfuncsexpsNonesAssertionError(sselfsfuncsexp((sMartel/Expression.pys_modify_leaves1s( s__name__s __module__s__init__scopys make_parsers make_iterators group_namess _find_groupssfeaturess_modify_leaves(((sMartel/Expression.pys ParseRecordsîs      sStrcBs#tZd„Zd„Zd„ZRS(NcCs ||_dS(sN(s) Match the given string exactly (not as a regexp pattern) N(sssselfsstring(sselfss((sMartel/Expression.pys__init__9scCst|iƒSdS(s&do a deep copy on this Expression treeN(sStrsselfsstring(sself((sMartel/Expression.pyscopy@scCst|iƒSdS(s the corresponding pattern stringN(sescapesselfsstring(sself((sMartel/Expression.pys__str__Ds(s__name__s __module__s__init__scopys__str__(((sMartel/Expression.pysStr8s  sExpressionListcBsDtZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(s?shares implementation used by 'Expressions with subexpressions'cCsOh}x2|iD]'}x|iƒD]}d||esN(sselfs __class__smaps expressions(sself((sMartel/Expression.pyscopycscCs[g}x'|iD]}|i|i|ƒƒqWt|jpt‚t |ƒ|_|SdS(N( snew_expressionssselfs expressionssexpsappends_modify_leavessfuncsNonesAssertionErrorstuple(sselfsfuncsexpsnew_expressions((sMartel/Expression.pys_modify_leavesfs ( s__name__s __module__s__doc__s group_namess _find_groupssfeaturess _select_namesscopys_modify_leaves(((sMartel/Expression.pysExpressionListJs      sAltcBs)tZdZd„Zd„Zd„ZRS(s:An Expression tree with a list of alternate matches. cCsSt|tgƒƒot|ƒ}n!t|tƒotdƒ‚n||_dS(sP(expressions) Match one of a list of alternate expressions. The expressions are tested in their input order. For example, Alt( (exp1, exp2, exp3) ) means try to match exp1, and if that fails try to match exp2, and if that fails, try to match exp3. If *that* fails, the match failed. sOMust pass in a list of expressions, not just a single one (put it inside of ()sN(s isinstances expressionsstypestuples Expressions TypeErrorsself(sselfs expressions((sMartel/Expression.pys__init__ss cCs@t|tƒot|i|iƒSnt|i|fƒSdS(N(s isinstancesothersAltsselfs expressions(sselfsother((sMartel/Expression.pys__or__„scCs titt|iƒdƒSdS(s the corresponding pattern strings|N(sstringsjoinsmapsstrsselfs expressions(sself((sMartel/Expression.pys__str__s(s__name__s __module__s__doc__s__init__s__or__s__str__(((sMartel/Expression.pysAltos   sSeqcBs)tZdZd„Zd„Zd„ZRS(sCAn Expression matching a set of subexpressions, in sequential ordercCsSt|tgƒƒot|ƒ}n!t|tƒotdƒ‚n||_dS(s´(expressions) Match the list of sequential expressions, in order. Each expression starts matching at the point where the previous match finished. sOMust pass in a list of expressions, not just a single one (put it inside of ()sN(s isinstances expressionsstypestuples Expressions TypeErrorsself(sselfs expressions((sMartel/Expression.pys__init__˜s cCs@t|tƒot|i|iƒSnt|i|fƒSdS(N(s isinstancesothersSeqsselfs expressions(sselfsother((sMartel/Expression.pys__add__¦scCslg}xO|iD]D}t|ƒ}t|tƒo|id|ƒq|i|ƒqWt i |dƒSdS(s the corresponding pattern strings(%s)sN( spatternssselfs expressionssexpsstrspatterns isinstancesAltsappendsstringsjoin(sselfsexpspatternspatterns((sMartel/Expression.pys__str__¬s  (s__name__s __module__s__doc__s__init__s__add__s__str__(((sMartel/Expression.pysSeq–s   cCs™t|ƒ}tidtid}x^tt|ƒƒD]J}||}||jo-|djod||(c) -> into an appropriately escaped pattern for the characteri s\N(s_minimize_escape_charssgetscsxsNonesord(scsx((sMartel/Expression.pys_minimize_escape_charÖs  cCsst|ƒdt|ƒjot|ƒt|ƒSn|djo |djodSnt|ƒdt|ƒSdS(sE(c1, c2) -> the pattern for the range bounded by those two charactersis0s9s\ds-N(sordsc1sc2s_minimize_escape_char(sc1sc2((sMartel/Expression.pys_minimize_escape_rangeßs c Cs"t|tdƒƒ ot|ƒ}n| o|Snd}d|jod}ti|ddƒ}nt|ƒ}|i ƒg}t } x2|D]*}|| jo|i|ƒ|} q’q’Wti|dƒ}d} t } d}d}x¤|D]œ}t|ƒ}|d| joi| t jo d}q}||djo| t||ƒ} n | t||||dƒ} |}n|} |d}qñW|oL||djo| t||ƒ} qä| t||||dƒ} n|o| d} nhdd<}|i| | ƒ} | SdS(s s -> a string useable inside [] which matches all the characters in s For example, passing in "0123456789" returns "\d". This code isn't perfect. sis-is\dA-Z_a-zÀ-ÖØ-öø-ÿs\wN(s isinstancessstypesstrs has_hyphensstringsreplaceslistscharsssortsuniquesNonesprev_cscsappendsjoinstsprevsprev_posspossordsvals_minimize_escape_chars_minimize_escape_ranges conversionssget( sss conversionssuniquesvalsprev_posscharsscsposs has_hyphensprev_cstsprev((sMartel/Expression.pys_minimize_any_rangeñs\         #cCsët|tƒoÑtƒ}d}xœ|iD]‘}ti|ƒ}ti |ƒ}|||fjp t d‚||jo||}q)|o|t|ƒ}d}n|t ||ƒ}q)W|o|t|ƒ}n|Snt|t ƒoŽ|i}h}x|D]}d|| expression where the text is case insensitiveN(sexprscopys_modify_leavess _make_no_case(sexpr((sMartel/Expression.pysNoCaseqs (,s__doc__sresstringsxml.saxs xmlreaders msre_parsesParsers MAXREPEATs IterParsers SyntaxErrorsNones ExpressionsAnysAsserts AtBeginningsAtEndsDebugsDotsAnyEols _verify_names_fast_quote_lookups_make_fast_lookups_quotes_make_group_patternsGroupsGroupRefsLiterals MaxRepeatsNullOps PassThroughs FastFeatures HeaderFooters ParseRecordssStrsExpressionListsAltsSeqsescapes_minimize_escape_charss_minimize_escape_chars_minimize_escape_ranges_minimize_any_ranges _make_no_casesNoCase('s AtBeginningsGroups IterParsersAtEndsLiteralsescapes_make_group_patterns_minimize_escape_chars ParseRecordssNullOps MaxRepeats_minimize_escape_ranges_make_fast_lookups Expressions _verify_namesGroupRefsAssertsres msre_parses HeaderFooters _make_no_cases MAXREPEATs_minimize_escape_charssstrings PassThroughsExpressionListsStrsDebugsAnyEolsDots_quotesSeqsParsers_minimize_any_ranges xmlreadersNoCasesAlts FastFeaturesAny((sMartel/Expression.pys?sT      <&       <{ ¼J%'& i  T ,