ó
QíXc           @   sµ  d  Z  d d l Z d Z d Z e j e ƒ Z d e d Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ	 d e	 f d „  ƒ  YZ
 d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e	 f d „  ƒ  YZ d e f d  „  ƒ  YZ d! e	 f d" „  ƒ  YZ d# „  Z d$ „  Z d% „  Z d& „  Z d' „  Z d( d) „ Z d* „  Z d S(+   sy   
Transformation of the tuples which are returned by the parser
into "scan items", which are used to make decision trees.
iÿÿÿÿNs    v[1-9][0-9]*s    \((?! )[a-zA-Z0-9;\ ]+\)(?<! )s   (?:s   )+t   ScanItemc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s)   t  t |  ƒ j ƒ  | |  _ | |  _ d  S(   N(   t   superR    t   __init__t   typet   pos(   t   selfR   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ,   s    	c         C   s   |  j  | j  k S(   N(   R   (   R   t   other(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   __eq__1   s    c         C   s   t  |  j ƒ S(   N(   t   hashR   (   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   __hash__4   s    c         C   s   t  ƒ  ‚ d S(   sª   Returns a pair (match_len, report_items)

        match_len     The length of the data which matched
        report_items  "Stuff" to be reported about the match
        N(   t   NotImplementedError(   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   matches7   s    (   t   __name__t
   __module__R   R   R	   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR    +   s   			t   ValuedScanItemc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s&   t  t |  ƒ j | | ƒ | |  _ d  S(   N(   R   R   R   t   value(   R   R   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   A   s    c         C   s(   t  t |  ƒ j | ƒ o' |  j | j k S(   N(   R   R   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   E   s    c         C   s   t  |  j |  j f ƒ S(   N(   R   R   R   (   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR	   I   s    (   R   R   R   R   R	   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   @   s   		t   StringScanItemc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s/   t  t |  ƒ j d | | ƒ t | ƒ |  _ d  S(   Nt   string(   R   R   R   t   lent	   value_len(   R   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   N   s    c         C   s:   | d k r, |  j  | d k r, |  j g  f Sd g  f Sd  S(   Nt    i    (   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   R   s    (   R   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   M   s   	t   UserStrScanItemc           B   sX   e  Z d  Z e d d e d d d e d Z e j e ƒ Z d d „ Z d „  Z RS(	   s   [A-Za-z0-9,\#\.\'&,]s   (?:s   |\-s   |(?: (?!\- ))s   )*s   )?s
   <user_str>c         C   s$   t  t |  ƒ j | d d !| ƒ d  S(   Ni   iÿÿÿÿ(   R   R   R   (   R   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   g   s    c         C   s   t  |  j | ƒ S(   N(   t   match_or_emptyt   PATTERN(   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   j   s    (	   R   R   t   TERMINAL_CHARSt   PATTERN_STRt   ret   compileR   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   Y   s   	t   SpecialUserStrScanItemc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c            sA   t  t ˆ ƒ j | | ƒ ‡  ‡ f d †  } ˆ  ˆ _ | ˆ _ d  S(   Nc            sV   y |  j  ˆ  ƒ } Wn t k
 r2 t |  ƒ } n X|  d | !} t t ˆ ƒ j | ƒ S(   Ni    (   t   indext
   ValueErrorR   R   R   R   (   R   t   next_str_post   stripped(   t   next_strR   (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   special_matchesr   s    (   R   R   R   R!   R   (   R   R   R   R!   R"   (    (   R!   R   s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   o   s    	c         C   s7   t  t |  ƒ j | ƒ o6 t | t ƒ o6 |  j | j k S(   N(   R   R   R   t
   isinstanceR!   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   }   s    c         C   s   t  |  j t |  j f ƒ S(   N(   R   R   R   R!   (   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR	   ‚   s    (   R   R   R   R   R	   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   n   s   		t   HashScanItemc           B   s/   e  Z d  Z e j e ƒ Z d „  Z d „  Z RS(   s   [0-9]+c         C   s   t  t |  ƒ j d | ƒ d  S(   NR   (   R   R$   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   Š   s    c         C   s   t  |  j | ƒ S(   N(   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR      s    (   R   R   R   R   R   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR$   †   s   	t   EntityScanItemc           B   s   e  Z d  „  Z RS(   c         C   s   t  t |  ƒ j | d ƒ d  S(   Ns   <entity>(   R   R%   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ’   s    (   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR%   ‘   s   t   DateScanItemc           B   s/   e  Z d  Z e j e ƒ Z d „  Z d „  Z RS(   s   [0-9]{4}-[0-9]{2}-[0-9]{2}c         C   s   t  t |  ƒ j d | ƒ d  S(   Nt   date(   R   R&   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   š   s    c         C   s   t  |  j | ƒ S(   N(   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR      s    (   R   R   R   R   R   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR&   –   s   	t   YearScanItemc           B   s/   e  Z d  Z e j e ƒ Z d „  Z d „  Z RS(   s   [0-9]{4}c         C   s   t  t |  ƒ j d | ƒ d  S(   Nt   year(   R   R(   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ¥   s    c         C   s   t  |  j | ƒ S(   N(   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ¨   s    (   R   R   R   R   R   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR(   ¡   s   	t   Last4DigitsScanItemc           B   s/   e  Z d  Z e j e ƒ Z d „  Z d „  Z RS(   s   [0-9]{4}c         C   s   t  t |  ƒ j d | ƒ d  S(   Nt   last_4_digits(   R   R*   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   °   s    c         C   s   t  |  j | ƒ S(   N(   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ³   s    (   R   R   R   R   R   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR*   ¬   s   	t   VersionScanItemc           B   s)   e  Z e j e ƒ Z d  „  Z d „  Z RS(   c         C   s   t  t |  ƒ j d | ƒ d  S(   Nt   version(   R   R,   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   º   s    c         C   s   t  |  j | ƒ S(   N(   R   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ½   s    (   R   R   R   R   t   VERSION_RE_STRR   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR,   ·   s   	t   ParenScanItemc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sW   t  t |  ƒ j d | | ƒ d j d |  j d d !d d g ƒ } t j | ƒ |  _ d  S(   Nt   parenR   s   \ \(i   iÿÿÿÿs   (; [a-zA-Z0-9,&\#\.\ ]+)?s   \)(   R   R/   R   t   joinR   R   R   t   pattern(   R   R   R   t   pattern_str(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   Â   s    	c         C   s   |  j  j | ƒ } | d  k r( d g  f S| j d ƒ ro | j ƒ  } | j ƒ  } | | | | d | d !g f S| j ƒ  | j ƒ  g  f Sd  S(   Ni    i   i   (   R2   t   matcht   Nonet   groupt   startt   end(   R   R   R4   R7   R8   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   Ê   s    
 (   R   R   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR/   Á   s   	t   RepeatedParensScanItemc           B   s)   e  Z e j e ƒ Z d  „  Z d „  Z RS(   c         C   s   t  t |  ƒ j d | ƒ d  S(   Nt   repeated_paren(   R   R9   R   (   R   R   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   Ù   s    c         C   s_   |  j  j | ƒ } | d  k r( d g  f S| j ƒ  | j ƒ  t | | j ƒ  | j ƒ  !ƒ f Sd  S(   Ni    (   R   R4   R5   R8   R7   t   repeated_paren_content(   R   R   R4   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   Ü   s
    
(   R   R   R   R   t   REPEATED_PAREN_RE_STRR   R   R   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR9   Ö   s   	t   OptionalScanItemc           B   s   e  Z d  „  Z d Z RS(   c         C   s    t  t |  ƒ j d | | ƒ d  S(   Nt   optional(   R   R=   R   (   R   R   t   options(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   æ   s    N(   R   R   R   R5   R	   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR=   å   s   	c         C   s?   |  j  | ƒ } | d k r% d g  f St | j ƒ  ƒ g  f Sd S(   s8   Return a "no match tuple" when re pattern does not matchi    N(   R4   R5   R   R6   (   R2   t   valR4   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR   ò   s    
c         C   sT   g  } xG |  rO t  j |  ƒ } | j ƒ  } | j |  d | d !ƒ |  | }  q	 W| S(   Ni   i   (   t   PAREN_RER4   R8   t   append(   t   matchedt   resultR4   R8   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyR;   û   s    	c         C   sJ   |  d } | d k r( t  |  d ƒ d S| d k r8 d St |  d ƒ Sd S(   s0   Get the length of a tuple returned by the parseri    R>   i   i   t   repeated_parensN(   t   scanlenR   (   t   tuplt   typ(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   tupllen  s    
c         C   s+   d } x |  D] } | t  | ƒ 7} q W| S(   s-   Get the length of a scan's pattern componentsi    (   RI   (   t   scanR   RG   (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyRF     s    c         C   sa   g  } x7 |  d D]+ } | d d k r+ Pn  | j  | d ƒ q Wt | |  d d d j | ƒ ƒ S(   Ni   i    R   R   (   RB   R   R1   (   RJ   R   t   trailing_strst	   next_tupl(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   scan_to_specialuserstrscanitem  s    i    c         C   sR   g  } |  } x> | rM | j  t | | ƒ ƒ | t | d ƒ 7} | d } q W| S(   s0   Convert a parse scan to (singular) scanned itemsi    i   (   t   extendt   tuple_to_itemsRI   (   RJ   R   t   itemst   tail(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   to_scan_items"  s    	c         C   s   |  d } | d } | d k r^ g  } xÓ| d D]& } | j  t | | ƒ ƒ | d 7} q1 Wnž| d k r¾ t |  ƒ d k r¥ |  d d d k r¥ t |  | ƒ g } qüt | | d ƒ g } n>| d k rÜ t | ƒ g } n | d k rú t | ƒ g } n| d k rt | ƒ g } nä | d k r6t | ƒ g } nÆ | d	 k rTt	 | ƒ g } n¨ | d
 k rrt
 | ƒ g } nŠ | d k r—t | | d ƒ g } ne | d k rµt | ƒ g } nG | d k rçt | t | d | d ƒ ƒ g } n t d j | ƒ ƒ ‚ | S(   Ni    R   i   t   user_strR   t   entityR'   R)   R+   R-   R0   RE   R>   s   Unknown type of tuple '{0}'(   RB   R   R   RM   R   R$   R%   R&   R(   R*   R,   R/   R9   R=   RR   R   t   format(   RJ   R   RG   RH   RP   t   ch(    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyRO   -  s@    

&#(   t   __doc__R   R.   t   PAREN_RE_STRR   RA   R<   t   objectR    R   R   R   R   R$   R%   R&   R(   R*   R,   R/   R9   R=   R   R;   RI   RF   RM   RR   RO   (    (    (    s{   /home/kop/biz/barnett/enforcer_project/BRIEF-Script/Enforcer/devel/pytest/lib/python2.7/site-packages/enforcer/scan_item.pyt   <module>   s6   
			
				