-í
,VL;c       sÞ    d  Z    d k Z  d k Z d k Z  d f  d „  ƒ  YZ 9 d „  Z = d „  Z B d „  Z J d „  Z O d „  Z	 T d	 „  Z
 Z d
 „  Z d d „  Z n h  e i d d <e i d <d d <d d <e e i d ƒ d <e e i ƒ d <e d ƒ d <Z { d „  Z Œ d „  Z ® d „  Z ³ d „  Z ¸ d „  Z Ã h  e d <e	 d <e
 d <e d <e d <e d  <e d! <e d" <e d# <e d$ <e d% <e d& <Z Ó d' „  Z å d( „  Z d S()   sL  Converts a regular expression pattern string into an Expression tree

This is not meant to be an externally usable module.

This works by using msre_parse.py to parse the pattern.  The result is
a tree data structure, where the nodes in the tree are tuples.  The
first element of the tuple is the name of the node type.  The format
of the other elements depends on the type.

The conversion routine is pretty simple - convert each msre_parse tuple
node into a Martel Expression node.  It's a recusive implementation.

'msre_parse.py' is a modified version of Secret Labs' 'sre_parse.py'

Ns
   GroupNamesc      sJ    t  Z  d „  Z # e d „ Z * d „  Z , d „  Z / d „  Z RS(   Nc    s7     d |  _   g  |  _ ! d |  _ " h  |  _ d  S(   Ni    i   (   s   selfs   flagss   opens   groupss	   groupdict(   s   self(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   __init__ s   c    sq   # $ |  i } % | d |  _ & | o* ' |  i i | g  ƒ | g |  i | <n ( |  i i | ƒ ) | Sd  S(   Ni   (   s   selfs   groupss   gids   names	   groupdicts   gets   opens   append(   s   selfs   names   gid(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys	   opengroup# s   
*c    s   * + |  i i | ƒ d  S(   N(   s   selfs   opens   removes   gid(   s   selfs   gid(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys
   closegroup* s   c    s'   , - | |  i j  o | |  i j Sd  S(   N(   s   gids   selfs   groupss   open(   s   selfs   gid(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys
   checkgroup, s   c    sK   / 0 1 x; |  i i ƒ  D1 ]' \ } } 2 | | j o 3 | Sn q Wd S(   s7   group number -> group name, or None if there is no nameN(   s   selfs	   groupdicts   itemss   keys   vals   id(   s   selfs   ids   vals   key(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   reverse_name/ s
    (   s   __name__s
   __module__s   __init__s   Nones	   opengroups
   closegroups
   checkgroups   reverse_name(    (    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys
   GroupNames s
   	c    s    9 : t  i t | ƒ d ƒ Sd  S(   Ni    (   s
   Expressions   Literals   chrs   val(   s   group_namess   names   val(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_literal9 s   c    s    = > t  i t | ƒ d ƒ Sd  S(   Ni   (   s
   Expressions   Literals   chrs   val(   s   group_namess   names   val(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_not_literal= s   c    sb   B C | d j o D t i ƒ  Sn" E | d j o F t i ƒ  Sn G t d t | ƒ ƒ ‚ d  S(   Ns   at_beginnings   at_ends   Unknown at name: %s(   s   wheres
   Expressions   AtBeginnings   AtEnds   AssertionErrors   repr(   s   group_namess   names   where(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys
   convert_atB s
   c    s9   J K t  o | t j p t d | ‚ L t i ƒ  Sd  S(   Ns)   what does it mean when the field is '%s'?(   s	   __debug__s   ignores   Nones   AssertionErrors
   Expressions   Dot(   s   group_namess   names   ignore(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_anyJ s   %c    sP   O | \ } } P t o | d j p
 t d ‚ Q t i t |  | ƒ d ƒ Sd  S(   Ni   s   does not support lookbehindi    (   s	   directions   termss	   __debug__s   AssertionErrors
   Expressions   Asserts   convert_lists   group_names(   s   group_namess   names   .4s	   directions   terms(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_assertO s   !c    sP   T | \ } } U t o | d j p
 t d ‚ V t i t |  | ƒ d ƒ Sd  S(   Ni   s   does not support lookbehind(   s	   directions   termss	   __debug__s   AssertionErrors
   Expressions   Asserts   convert_lists   group_names(   s   group_namess   names   .4s	   directions   terms(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_assert_notT s   !c    s²   Z | \ } } [ t o! | t j p t d t | ƒ ‚ \ g  } ] x* | D] ] } ^ | i t	 |  | ƒ ƒ qM W_ t | ƒ d j o ` | d Sn a t i t | ƒ ƒ Sd  S(   Ns   what is %s?i   i    (   s   ignores   branchess	   __debug__s   Nones   AssertionErrors   reprs   resultss   branchs   appends   convert_lists   group_namess   lens
   Expressions   Alts   tuple(   s   group_namess   names   .4s   ignores   branchess   resultss   branch(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_branchZ s   +	
 	c    sp   d e f g  } g xD t t t d ƒ ƒ Dg ]* } h | |  j o i | i | ƒ n q( Wj t i | d ƒ Sd S(   s<   s -> a string containing all the characters not present in si   s    N(	   s   letterss   maps   chrs   ranges   cs   ss   appends   strings   join(   s   ss   letterss   c(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   invertd s   	 	s   0123456789_s   category_words   category_digits   	
 s   category_spaces   
s   category_newlines   category_not_words   category_not_digits   category_not_spacec    s'  { | | d d d j } } d } ~ xç | | D~ ]Ø }  | d d j o € | t | d ƒ } n¤  | d d j oK ‚ xA t | d d | d d d ƒ D‚ ] } ƒ | t | ƒ } q¤ WnE „ | d d j o … | t | d } n ‡ t d | d ƒ ‚ q1 Wˆ t	 i
 | | ƒ Sd  S(	   Ni    s   negates    s   literali   s   ranges   categorys   unknown option for 'in': %s(   s   termss   negates   ss   cs   chrs   ranges   is
   categoriess   AssertionErrors
   Expressions   Any(   s   group_namess   names   termss   cs   is   ss   negate(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys
   convert_in{ s   	 	' 	c    s€  Œ | \ } }  |  i | ƒ }
 ‘ d } ’ h  }	 “ |
 t j	 o ” t i	 |
 d ƒ } n – | d j oî — d  k
 } ˜ |
 | d } ™ | o › h  }	 n-  | i |
 | d ž d d Ÿ d d ƒ}	   |
 |  }
 ¢ xv |	 i ƒ  D¢ ]e \ } } £ t | ƒ d j o2 ¤ t d t | ƒ t | ƒ t |
 ƒ f ƒ ‚ n ¨ | d |	 | <qê Wn ª t i |
 t |  | ƒ « |	 ƒ Sd  S(   Niÿÿÿÿs   ?i   s   keep_blank_valuess   strict_parsingsG   The attribute name %s was found more than once (%d times) in the tag %si    (   s   ids   termss   group_namess   reverse_names   pattern_names   poss   attrss   Nones   strings   finds   cgis   qss   parse_qss   itemss   ks   vs   lens   AssertionErrors   reprs
   Expressions   Groups   convert_list(   s   group_namess   names   .4s   ids   termss   cgis   ks   vs   poss   attrss   pattern_names   qs(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_subpatternŒ s*   			 2c    s:   ® ¯ t  o | t j p t d | ‚ ° t i ƒ  Sd  S(   Ns#   what does it mean when field is %s?(   s	   __debug__s   ignores   Nones   AssertionErrors
   Expressions   AnyEol(   s   group_namess   names   ignore(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_newline® s   &c    s8   ³ | \ } } } ´ t i t |  | ƒ µ | | ƒ Sd  S(   N(   s	   min_counts	   max_counts   termss
   Expressions	   MaxRepeats   convert_lists   group_names(   s   group_namess   names   .4s	   min_counts	   max_counts   terms(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_max_repeat³ s   c    s^   ¸ ¹ t  o' t | ƒ t d ƒ j p t d | ‚ ½ |  i | d ƒ } ¾ t i | ƒ Sd  S(   Ni    s.   Martel cannot use numbered group reference: %d(	   s	   __debug__s   types   ids   AssertionErrors   group_namess   reverse_names   pattern_names
   Expressions   GroupRef(   s   group_namess   names   ids   pattern_name(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_groupref¸ s   1s   anys   asserts
   assert_nots   ats   branchs   grouprefs   ins   literals
   max_repeats   newlines   not_literals
   subpatternc    sÒ   Ó Õ g  } Ö x | DÖ ]v } × | d } Ø y Ù t | } Wn, Ú t j
 o Û t d t | ƒ ‚ n XÞ | i	 t
 | |  f | ƒ ƒ q Wß t | ƒ d j o à | d Sn á t i t | ƒ ƒ Sd  S(   Ni    s#   Do not understand sre expression %si   (   s   resultss   termss   terms   names   converter_tables   funcs   KeyErrors   AssertionErrors   reprs   appends   applys   group_namess   lens
   Expressions   Seqs   tuple(   s   group_namess   termss   terms   names   resultss   func(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   convert_listÓ s   	
 	$c    s;   å æ ì t  i d |  d t ƒ  ƒ } ï t | i | ƒ Sd S(   s;   pattern -> the Expression tree for the given pattern strings   strs   patternN(   s
   msre_parses   parses   patterns
   GroupNamess   xs   convert_list(   s   patterns   x(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   make_expressionå s   (   s   __doc__s   strings
   msre_parses
   Expressions
   GroupNamess   convert_literals   convert_not_literals
   convert_ats   convert_anys   convert_asserts   convert_assert_nots   convert_branchs   inverts   letterss   digitss
   categoriess
   convert_ins   convert_subpatterns   convert_newlines   convert_max_repeats   convert_grouprefs   converter_tables   convert_lists   make_expression(   s   convert_not_literals   convert_grouprefs   strings   make_expressions   convert_asserts   convert_literals
   convert_ats   convert_branchs
   convert_ins
   GroupNamess   convert_newlines   convert_lists   convert_max_repeats   converter_tables   convert_subpatterns
   msre_parses   convert_assert_nots
   Expressions   inverts
   categoriess   convert_any(    (    s;   /mit/seven/lib/python2.2/site-packages/Martel/convert_re.pys   ? s(   

n"u