*λ
'α:c       sή    d  Z    d k Z  d k Z d k Z  d f  d     YZ 7 d   Z ; d   Z @ d   Z H d   Z M d   Z	 R d	   Z
 X d
   Z b d   Z l 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 y 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()   s  Converts a regular expression pattern string into an Expression tree

This is not meant to be an externally usable module.

This works by using sre_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 sre_parse tuple
node into a Martel Expression node.  It's a recusive implementation.

Ns
   GroupNamesc      sD     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/python/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/python/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/python/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/python/Martel/convert_re.pys
   checkgroup* s   c    sM   - . / x= |  i i   d / r' \ } } 0 | | j o 1 | Sn q Wd S(   s7   group number -> group name, or None if there is no namei    N(   s   selfs	   groupdicts   itemss   keys   vals   id(   s   selfs   ids   keys   val(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   reverse_name- s
    (   s   __init__s   Nones	   opengroups
   closegroups
   checkgroups   reverse_name(    (    (    s*   /mit/seven/lib/python/Martel/convert_re.pys
   GroupNames s
   c    s    7 8 t  i t |  d  Sd  S(   Ni    (   s
   Expressions   Literals   chrs   val(   s   group_namess   names   val(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   convert_literal7 s   c    s    ; < t  i t |  d  Sd  S(   Ni   (   s
   Expressions   Literals   chrs   val(   s   group_namess   names   val(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   convert_not_literal; s   c    sb   @ A | d j o B t i   Sn" C | d j o D t i   Sn E 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/python/Martel/convert_re.pys
   convert_at@ s
   c    s9   H I t  o | t j p t d |  J 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/python/Martel/convert_re.pys   convert_anyH s   %c    sP   M | \ } } N t o | d j p
 t d  O 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/python/Martel/convert_re.pys   convert_assertM s   !c    sP   R | \ } } S t o | d j p
 t d  T 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/python/Martel/convert_re.pys   convert_assert_notR s   !c    s΄   X | \ } } Y t o! | t j p t d t |   Z g  } [ x, | d [ r } \ | i t	 |  |   qO W] t |  d j o ^ | d Sn _ 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   branchs   results(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   convert_branchX s   +	 	c    sr   b c d g  } e xF t t t d   d e r* } f | |  j o g | i |  n q* Wh t i | d  Sd S(   s<   s -> a string containing all the characters not present in si   i    s    N(	   s   letterss   maps   chrs   ranges   cs   ss   appends   strings   join(   s   ss   letterss   c(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   invertb s   	 	s   0123456789_s   category_words   category_digits   	
 s   category_spaces   
s   category_newlines   category_not_words   category_not_digits   category_not_spacec    s+  y z | d d d j } { d } | xλ | | d | rΪ } } | d d j o ~ | t | d  } n¦  | d d j oM  xC t | d d | d d d  d  r }  | t |  } q¨ WnE  | d d j o  | t | d } n  t d | d   q3 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   ss   negates   is   c(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys
   convert_iny s   	 	) 	c    sA    | \ } }  |  i |  }  t i | t |  |   Sd  S(   N(   s   ids   termss   group_namess   reverse_names   pattern_names
   Expressions   Groups   convert_list(   s   group_namess   names   .4s   ids   termss   pattern_name(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   convert_subpattern s   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/python/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/python/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/python/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 Ά rv } · | 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   funcs   resultss   names   term(    (    s*   /mit/seven/lib/python/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	   sre_parses   parses   patterns
   GroupNamess   xs   convert_list(   s   patterns   x(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   make_expressionΕ s   (   s   __doc__s   strings	   sre_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
   categoriess
   Expressions   inverts   convert_assert_nots	   sre_parses   strings   converter_tables   convert_grouprefs   convert_newlines
   GroupNamess
   convert_ins   convert_branchs
   convert_ats   make_expressions   convert_literals   convert_subpatterns   convert_asserts   convert_lists   convert_anys   convert_max_repeats   convert_not_literal(    (    s*   /mit/seven/lib/python/Martel/convert_re.pys   ? s(   

nu