mò
­fIc           @   s6  d  Z  d k Z d k Z d d g Z e i d ƒ Z e i d ƒ Z e i d ƒ Z e i d ƒ Z e i d ƒ Z	 e i d	 ƒ Z
 e i d
 ƒ Z e i d ƒ Z e i d ƒ Z e i d ƒ Z e i d ƒ Z d e f d „  ƒ  YZ d e i f d „  ƒ  YZ d e f d „  ƒ  YZ e d „ Z e d j o e ƒ  n d S(   s;   A parser for SGML, using the derived class as a static DTD.Nt
   SGMLParsert   SGMLParseErrors   [&<]sN   &([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|<([a-zA-Z][^<>]*|/([a-zA-Z][^<>]*)?|![^<>]*)?s%   &([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]s   &#([0-9]+)[^0-9]s
   <[>a-zA-Z]s   <[a-zA-Z][-.a-zA-Z0-9]*/s"   <([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/t   >s   [<>]s   [a-zA-Z][-_.a-zA-Z0-9]*se   \s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\s*=\s*(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?c           B   s   t  Z d  Z RS(   s&   Exception raised for all parse errors.(   t   __name__t
   __module__t   __doc__(    (    (    t$   /mit/python/lib/python2.4/sgmllib.pyR   '   s   c           B   s@  t  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z	 d
 Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z h  d d <d d <d d <d d <d d <Z d  „  Z d! „  Z d" „  Z d# „  Z d$ „  Z d% „  Z d& „  Z d' „  Z d( „  Z RS()   Ni    c         C   s   | |  _  |  i ƒ  d S(   s#   Initialize and reset this instance.N(   t   verboset   selft   reset(   R   R   (    (    R   t   __init__9   s     	c         C   sJ   d |  _ d |  _ g  |  _ d |  _ d |  _ d |  _ t i	 i
 |  ƒ d S(   s0   Reset this instance. Loses all unprocessed data.t    s   ???i    N(   t   NoneR   t   _SGMLParser__starttag_textt   rawdatat   stackt   lasttagt
   nomoretagst   literalt
   markupbaset
   ParserBaseR	   (   R   (    (    R   R	   >   s     						c         C   s   d |  _ |  _ d S(   sY   Enter literal mode (CDATA) till EOF.

        Intended for derived classes only.
        i   N(   R   R   R   (   R   (    (    R   t   setnomoretagsH   s     c         G   s   d |  _ d S(   sP   Enter literal mode (CDATA).

        Intended for derived classes only.
        i   N(   R   R   (   R   t   args(    (    R   t
   setliteralO   s     c         C   s!   |  i | |  _ |  i d ƒ d S(   sã   Feed some data to the parser.

        Call this as often as you want, with as little or as much text
        as you want (may include '
').  (This just saves the text,
        all the processing is done by goahead().)
        i    N(   R   R   t   datat   goahead(   R   R   (    (    R   t   feedV   s     c         C   s   |  i d ƒ d S(   s   Handle the remaining data.i   N(   R   R   (   R   (    (    R   t   closea   s     c         C   s   t  | ƒ ‚ d  S(   N(   R   t   message(   R   R   (    (    R   t   errore   s    c   	      C   sy  |  i } d } t | ƒ } x| | j  o
|  i o |  i | | | !ƒ | } Pn t i | | ƒ } | o | i
 ƒ  } n | } | | j  o |  i | | | !ƒ n | } | | j o Pn | | d j oÀt i	 | | ƒ oZ |  i o" |  i | | ƒ | d } q n |  i | ƒ } | d j  o Pn | } q n | i d | ƒ o7 |  i | ƒ } | d j  o Pn | } d |  _ q n |  i o4 | | d j o |  i d ƒ | d } q Pq n | i d | ƒ o. |  i | ƒ } | d j  o Pn | } q n | i d | ƒ o2 |  i | ƒ } | d j  o Pn | | } q n | i d | ƒ o. |  i | ƒ } | d j  o Pn | } q q»n+| | d j o|  i o" |  i | | ƒ | d } q n t i	 | | ƒ } | oU | i d ƒ } |  i | ƒ | i d ƒ } | | d d	 j o | d } q q n t i	 | | ƒ } | oU | i d ƒ } |  i | ƒ | i d ƒ } | | d d	 j o | d } q q q»n |  i d
 ƒ t i	 | | ƒ } | p" |  i | | ƒ | d } q n | i d ƒ } | | j o Pn |  i | | | !ƒ | } q W| o+ | | j  o |  i | | | !ƒ | } n | | |  _ d  S(   Ni    t   <i   s   </s   <!--s   <?s   <!t   &t   ;s   neither < nor & ??(   R   R   t   it   lent   nR   t   handle_datat   interestingt   searcht   matcht   startt   jt   starttagopenR   t   parse_starttagt   kt
   startswitht   parse_endtagt   parse_commentt   parse_pit   parse_declarationt   charreft   groupt   namet   handle_charreft   endt	   entityreft   handle_entityrefR   t
   incomplete(	   R   R6   R4   R!   R)   R#   R   R,   R'   (    (    R   R   k   sÀ    	 
  

  	
  
 

  

t   =c         C   s•   |  i } | | | d !d j o |  i d ƒ n t i | | d ƒ } | p d Sn | i d ƒ } |  i	 | | d | !ƒ | i
 d ƒ } | | S(   Ni   s   <?s   unexpected call to parse_pi()iÿÿÿÿi    (   R   R   R!   R   t   picloseR&   R'   R(   R)   t	   handle_piR6   (   R   R!   R)   R   R'   (    (    R   R0   Õ   s    	c         C   s   |  i S(   N(   R   R   (   R   (    (    R   t   get_starttag_textá   s    c         C   s­  d  |  _ | } |  i } t i | | ƒ o– t i | | ƒ } | p d Sn | i	 d d ƒ \ } }	 d | |  _ | i ƒ  } | i d ƒ }
 |  i | |	 ƒ | | | i d ƒ d !|  _ |
 Sn t i | | d ƒ } | p d Sn | i d ƒ } g  } | | | d !d j o | }
 |  i } n^ t i | | d ƒ } | p |  i d ƒ n | i d ƒ }
 | | d |
 !i ƒ  } | |  _ xä |
 | j  oÖ t i | |
 ƒ } | p Pn | i	 d d d ƒ \ } } } | p
 | } n^ | d  d	 j o | d j n p& | d  d
 j o | d j n o | d d !} n | i | i ƒ  | f ƒ | i d ƒ }
 q†W| | d j o | d } n | | | !|  _ |  i | | ƒ | S(   Niÿÿÿÿi   i   s   <%s/i    s   <>s!   unexpected call to parse_starttagi   s   't   "R   (   R   R   R   R!   t	   start_posR   t   shorttagopenR'   t   shorttagR3   t   tagR   t   lowerR6   R,   t   finish_shorttagt
   endbracketR&   R(   R)   t   attrsR   t   tagfindR   t   attrfindt   attrnamet   restt	   attrvaluet   appendt   finish_starttag(   R   R!   RJ   RK   R)   RI   RB   R   R?   R   R,   R'   RF   (    (    R   R+   å   sZ    			  
Lc         C   sŠ   |  i } t i | | d ƒ } | p d Sn | i d ƒ } | | d | !i ƒ  i	 ƒ  } | | d j o | d } n |  i | ƒ | S(   Ni   iÿÿÿÿi    i   R   (   R   R   RE   R&   R!   R'   R(   R)   t   stripRC   RB   t   finish_endtag(   R   R!   R)   RB   R   R'   (    (    R   R.     s    	c         C   s.   |  i | g  ƒ |  i | ƒ |  i | ƒ d  S(   N(   R   RM   RB   R$   R   RO   (   R   RB   R   (    (    R   RD   ,  s    c         C   s°   y t  |  d | ƒ } Wnk t j
 o_ y t  |  d | ƒ } Wn' t j
 o |  i | | ƒ d Sq¬ X|  i | | | ƒ d Sn) X|  i i	 | ƒ |  i | | | ƒ d Sd  S(   Nt   start_t   do_iÿÿÿÿi    i   (
   t   getattrR   RB   t   methodt   AttributeErrort   unknown_starttagRF   t   handle_starttagR   RL   (   R   RB   RF   RS   (    (    R   RM   3  s    		c         C   sw  | p9 t |  i ƒ d } | d j  o |  i | ƒ d  Sqã n¤ | |  i j oO y t |  d | ƒ } Wn  t j
 o |  i | ƒ n X|  i	 | ƒ d  Sn t |  i ƒ } x2 t
 | ƒ D]$ } |  i | | j o
 | } q» q» Wx t |  i ƒ | j ov |  i d } y t |  d | ƒ } Wn t j
 o d  } n X| o |  i | | ƒ n |  i | ƒ |  i d =qæ Wd  S(   Ni   i    t   end_iÿÿÿÿ(   RB   R"   R   R   t   foundt   unknown_endtagRR   RS   RT   t   report_unbalancedt   rangeR!   R   t   handle_endtag(   R   RB   R!   RX   RS   (    (    R   RO   E  s8       c         C   s   | | ƒ d  S(   N(   RS   RF   (   R   RB   RS   RF   (    (    R   RV   d  s    c         C   s   | ƒ  d  S(   N(   RS   (   R   RB   RS   (    (    R   R\   h  s    c         C   s+   |  i o d | d GHd G|  i GHn d  S(   Ns   *** Unbalanced </R   s
   *** Stack:(   R   R   RB   R   (   R   RB   (    (    R   RZ   l  s    
c         C   s   y t  | ƒ } Wn$ t j
 o |  i | ƒ d Sn Xd | j o
 d j n p |  i | ƒ d Sn |  i t | ƒ ƒ d S(   s0   Handle character reference, no need to override.Ni    iÿ   (   t   intR4   R#   t
   ValueErrorR   t   unknown_charrefR$   t   chr(   R   R4   R#   (    (    R   R5   q  s     	t   ltR   t   gtR   t   ampR   t   quotR>   t   aposs   'c         C   s@   |  i } | | j o |  i | | ƒ n |  i | ƒ d Sd S(   s°   Handle entity references.

        There should be no need to override this method; it can be
        tailored by setting up the self.entitydefs mapping appropriately.
        N(   R   t
   entitydefst   tableR4   R$   t   unknown_entityref(   R   R4   Rg   (    (    R   R8     s     	c         C   s   d  S(   N(    (   R   R   (    (    R   R$     s    c         C   s   d  S(   N(    (   R   R   (    (    R   t   handle_comment“  s    c         C   s   d  S(   N(    (   R   t   decl(    (    R   t   handle_decl—  s    c         C   s   d  S(   N(    (   R   R   (    (    R   R<   ›  s    c         C   s   d  S(   N(    (   R   RB   RF   (    (    R   RU   Ÿ  s    c         C   s   d  S(   N(    (   R   RB   (    (    R   RY      s    c         C   s   d  S(   N(    (   R   t   ref(    (    R   R_   ¡  s    c         C   s   d  S(   N(    (   R   Rl   (    (    R   Rh   ¢  s    (    R   R   R
   R	   R   R   R   R   R   R   t   _decl_othercharsR0   R=   R+   R.   RD   RM   RO   RV   R\   RZ   R5   Rf   R8   R$   Ri   Rk   R<   RU   RY   R_   Rh   (    (    (    R   R    7   s<   	
						g			:								3								t   TestSGMLParserc           B   se   t  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z RS(   Ni    c         C   s   d |  _ t i |  | ƒ d  S(   NR   (   R   t   testdataR    R
   R   (   R   R   (    (    R   R
   §  s    	c         C   s>   |  i | |  _ t t |  i ƒ ƒ d j o |  i ƒ  n d  S(   NiF   (   R   Ro   R   R"   t   reprt   flush(   R   R   (    (    R   R$   «  s    c         C   s0   |  i } | o d |  _ d Gt | ƒ GHn d  S(   NR   s   data:(   R   Ro   R   Rp   (   R   R   (    (    R   Rq   °  s    		c         C   sP   |  i ƒ  t | ƒ } t | ƒ d j o | d  d | d } n d G| GHd  S(   NiD   i    s   ...iàÿÿÿs   comment:(   R   Rq   Rp   R   t   rR"   (   R   R   Rr   (    (    R   Ri   ¶  s
    
c         C   s^   |  i ƒ  | p d | d GHn9 d | Gx( | D]  \ } } | d d | d Gq1 Wd GHd  S(   Ns   start tag: <R   R:   R>   (   R   Rq   RF   RB   R4   t   value(   R   RB   RF   Rs   R4   (    (    R   RU   ½  s    
 c         C   s   |  i ƒ  d | d GHd  S(   Ns   end tag: </R   (   R   Rq   RB   (   R   RB   (    (    R   RY   Ç  s    
c         C   s   |  i ƒ  d | d GHd  S(   Ns   *** unknown entity ref: &R    (   R   Rq   Rl   (   R   Rl   (    (    R   Rh   Ë  s    
c         C   s   |  i ƒ  d | d GHd  S(   Ns   *** unknown char ref: &#R    (   R   Rq   Rl   (   R   Rl   (    (    R   R_   Ï  s    
c         C   s   |  i ƒ  d | d GHd  S(   Ns   *** unknown decl: [t   ](   R   Rq   R   (   R   R   (    (    R   t   unknown_declÓ  s    
c         C   s   t  i |  ƒ |  i ƒ  d  S(   N(   R    R   R   Rq   (   R   (    (    R   R   ×  s    (   R   R   R
   R$   Rq   Ri   RU   RY   Rh   R_   Ru   R   (    (    (    R   Rn   ¥  s   				
				c   	      C   s2  d  k  } |  d  j o | i d }  n |  o% |  d d j o |  d }  t } n t } |  o |  d } n d } | d j o | i } nF y t
 | d ƒ } Wn/ t j
 o# } | Gd G| GH| i d ƒ n X| i ƒ  } | | i j	 o | i ƒ  n | ƒ  } x | D] } | i | ƒ qW| i ƒ  d  S(   Ni   i    s   -ss	   test.htmlt   -Rr   t   :(   t   sysR   R   t   argvR    t   klassRn   t   filet   stdint   ft   opent   IOErrort   msgt   exitt   readR   R   t   xt   cR   (	   R   R{   R}   R   R„   Rx   Rz   Rƒ   R€   (    (    R   t   testÜ  s2    	

	 t   __main__(   R   R   t   ret   __all__t   compileR%   R9   R7   R2   R*   R@   RA   R;   RE   RG   RH   t   RuntimeErrorR   R   R    Rn   R   R…   R   (   R*   R    Rn   R   Rˆ   R‡   R%   R2   RG   R   R…   R7   RA   RH   R@   RE   R;   R9   (    (    R   t   ?   s*   		ÿ o7$