
    ddg+                         d Z dZddlZddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZ ddl
mZmZmZ  G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d dej&                        ZdZddZy)z
Transforms for PEP processing.

- `Headers`: Used to transform a PEP's initial RFC-2822 header.  It remains a
  field list, but some entries get processed.
- `Contents`: Auto-inserts a table of contents.
- `PEPZero`: Special processing for PEP 0.
reStructuredText    N)nodesutils	languages)	DataError)	Transform)parts
referencesmiscc                       e Zd ZdZdZdZdZ ej                  dej                        df ej                  d      dffZ
d Zy	)
Headersz<
    Process fields in a PEP's initial RFC-2822 header.
    ih  zpep-%04dz3http://hg.python.org/peps/file/default/pep-%04d.txtz\$RCSfile: (.+),v \$$z\1z\$[a-zA-Z]+: (.+) \$$c                 `   t        | j                        st        d      | j                  d   }t        |t        j
                        rd|d   vrt        d      d }|D ]V  }|d   j                         j                         dk(  s(|d   j                         }	 t        |      }| j                  |z  } n |t        d      |dk(  rPt	        j"                  t$              }
| j                  j'                  d|
       | j                  j)                  |
       t        |      dk  s'|d   d   j                         j                         dk7  rt        d      |D ]^  }|d   j                         j                         }|d   }t        |      dkD  rt        d|j+                  d      z        t        |      dk(  r;t        |d   t        j                         st        d|j+                  d      z        |dk(  r	 t-        j.                  dt-        j0                  t3        j4                  | j                  d         d               }r3|t	        j                   ddt	        j8                  d||            z  }n&|d   }|dk(  r>|D ]7  }t        |t        j8                        s|j;                  t=        |             9 n|dk(  r?|D ]8  }t        |t        j8                        s|j;                  t=        ||             : |dv rg }t	        j>                  d      }tA        jB                  d|j                               D ]s  }t        |      }|jE                  t	        j8                  ||| j                  jF                  jH                  | jJ                  |z  z                |jE                  |       u |d d |d d  q|dk(  rRtM        jN                  || jP                         s|j                         }t	        j8                  d||      g|d d  |d k(  r^|j                         }| j                  jF                  jH                  | jJ                  d!z  z   }t	        j8                  d||      g|d d  +|d"k(  s2t        |      s?tM        jN                  || jP                         a y # t        $ r |}d }| j                  j                  j                  d|z  |	      }| j                  j                  |      }t	        j                  ||xs d
|      }| j                  j                  |      }	|j                  |	       t        |d         r|g|d   d   d d  n"|dxx   t	        j                   dd|      z  cc<   Y w xY w# t6        $ r d}Y ^w xY w)#NzDocument tree is empty.r   rfc2822classeszADocument does not begin with an RFC-2822 header; it is not a PEP.pep   z?"PEP" header must contain an integer; "%s" is an invalid value.)	base_nodez(none))refid z3Document does not contain an RFC-2822 "PEP" header.   titlez	No title!z4PEP header field body contains multiple elements:
%s)levelz=PEP header field body may only contain a single paragraph:
%szlast-modifiedz%d-%b-%Ysource   unknownrefuriauthorzdiscussions-to)replaceszreplaced-byrequires z,?\s+zcontent-type   version))lendocumentr   
isinstancer   
field_listastextlowerintpep_cvs_url
ValueErrorreporterwarningset_idproblematicadd_backref	paragraphpendingPEPZeroinsertnote_pendingpformattimestrftime	localtimeosstatOSError	referencereplace_self
mask_emailTextresplitappendsettingspep_base_urlpep_urlr   clean_rcs_keywordsrcs_keyword_substitutions)selfheaderr   fieldvaluecvs_urlmsgmsgidprbprbidr4   namebodydateparanodenewbodyspacerefpeppepnopep_typeuris                         :/usr/lib/python3/dist-packages/docutils/transforms/peps.pyapplyzHeaders.apply(   s4   4==!566q!65#3#34y 11 7 8 8 	EQx &&(E1a)Ae*C"..4G  +	, ; & ' '!8mmG,GMM  G,MM&&w/v;?fQil11399;wFK(( 6	OE8??$**,D8D4y1} !027--a-2H!I J JTa!$q'5??;# %>&+mm!m&<%= > > (%=="rwwt}}X/F'G'JKMD
 EOOBD IK KD 7Dx  <D!$8))*T*:;< ))  AD!$8))*T3*?@A @@

3 hhx? *FKENN5?? $ 6 6 C C"&,,"6!7$9 : NN5)* "#2,Q(((t/M/MN;;=D$r4HIDG';;=mm,,99DLL2<MM ??2xDEQ"s4y((t/M/MNm6	O5 " AC"G--0088)+./:? 9 AC !MM005E++E53DH279C MM005EOOE*58}*-aAaEOOBC$@@AT  %$D%s&   S AV CVVV-,V-N)__name__
__module____qualname____doc__default_priorityrH   r,   rC   compile
IGNORECASErJ   r`        r_   r   r      sZ     G5K 2::2BMMBE
J2::./
7!:`Ori   r   c                       e Zd ZdZdZd Zy)Contentsz~
    Insert an empty table of contents topic and a transform placeholder into
    the document after the RFC 2822 header.
    i|  c                    t        j                  | j                  j                  j                  | j                  j
                        }|j                  d   }t        j                  d|      }t        j                  d|dg      }t        j                  |      }| j                  j                  |      s|d   j                  |       | j                  j                  |       t        j                  t        j                         }||z  }| j                  j#                  d|       | j                  j%                  |       y )Ncontentsr   )r   namesr   )r   get_languager&   rF   language_coder.   labelsr   r   topicfully_normalize_namehas_namerE   note_implicit_targetr4   r	   rk   r6   r7   )rK   languagerT   r   rr   r4   s         r_   r`   zContents.apply   s    ))$--*@*@*N*N*.--*@*@Bz*B%B
|<))$/}}%%d+'N!!$'**51--/Q&""7+ri   Nra   rb   rc   rd   re   r`   rh   ri   r_   rk   rk      s    
 ,ri   rk   c                        e Zd ZdZdZd Zd Zy)TargetNotesz
    Locate the "References" section, insert a placeholder for an external
    target footnote insertion transform at the end, and schedule the
    transform to run immediately.
    i  c                    | j                   }t        |      dz
  }d x}}|dk\  rt        ||   t        j                        rj||   d   j                         j                         j                         }d|v r||   }n.d|v r|}|dz  }|dk\  rt        ||   t        j                        rj|sdt        j                         }|t        j                  dd      z  }|j                  |       |r|j                  ||       n|j                  |       t        j                  t        j                        }|j                  |       | j                   j                  |d       t        j                  t         j"                  d| j$                  i      }|j                  |       | j                   j                  |d       y )	Nr   r   r
   	copyrightr   
Referencescallback)details)r&   r%   r'   r   sectionr)   r*   rD   r   r0   r6   rE   r4   r
   ry   r7   r   CallBackcleanup_callback)rK   docirefsectr{   title_wordsr4   s          r_   r`   zTargetNotes.apply   sm   mmHqL"")1fCFEMM:a&)**,224::<K{*a&+	FA 1fCFEMM: mmoGu{{2|44GJJw

9g. 

7#--
 6 67w""7A.--)3T5J5J(KMw""7A.ri   c                     t        |j                        dk(  r0|j                  j                  j                  |j                         yy)z
        Remove an empty "References" section.

        Called after the `references.TargetNotes` transform is complete.
        r   N)r%   parentremove)rK   r4   s     r_   r   zTargetNotes.cleanup_callback   s6     w~~!#NN!!((8 $ri   N)ra   rb   rc   rd   re   r`   r   rh   ri   r_   ry   ry      s     /<9ri   ry   c                       e Zd ZdZdZd Zy)r5   z'
    Special processing for PEP 0.
    i  c                     t        | j                        }| j                  j                  |       | j                  j                  j                  | j                         y N)PEPZeroSpecialr&   walk	startnoder   r   )rK   visitors     r_   r`   zPEPZero.apply   s>     /7#$$T^^4ri   Nrw   rh   ri   r_   r5   r5      s     5ri   r5   c                   R    e Zd ZdZej
                  Zd Zd Zd Zd Z	d Z
d Zd Zy	)
r   z
    Perform the special processing needed by PEP 0:

    - Mask email addresses.

    - Link PEP numbers in the second column of 4-column tables to the PEPs
      themselves.
    c                      y r   rh   rK   rX   s     r_   unknown_visitzPEPZeroSpecial.unknown_visit   s    ri   c                 8    |j                  t        |             y r   )r@   rA   r   s     r_   visit_referencezPEPZeroSpecial.visit_reference   s    *T*+ri   c                 2    d|d   v rt         j                  y )Nr   r   )r   SkipNoder   s     r_   visit_field_listzPEPZeroSpecial.visit_field_list   s    Y'..  (ri   c                 ,    |d   dk(  | _         d| _        y )Ncols   r   )	pep_tableentryr   s     r_   visit_tgroupzPEPZeroSpecial.visit_tgroup   s    f*
ri   c                     | xj                   dz  c_         | j                  r%| j                   dk(  r|d   j                  d       y y y )Nr   r   r   num)r   r   rE   r   s     r_   visit_colspeczPEPZeroSpecial.visit_colspec   s9    

a
>>djjAoO""5) .>ri   c                     d| _         y )Nr   )r   r   s     r_   	visit_rowzPEPZeroSpecial.visit_row  s	    
ri   c                    | xj                   dz  c_         | j                  r| j                   dk(  rt        |      dk(  r|d   j                  d       |d   }t	        |t
        j                        rwt        |      dk(  rh|j                         }	 t        |      }| j                  j                  j                  | j                  |z  z   }t        j                  |||      |d<   y y y y y y # t        $ r Y y w xY w)Nr   r   r   r   r   r   )r   r   r%   rE   r'   r   r3   r)   r+   r&   rF   rG   rH   r?   r-   )rK   rX   ptextr   refs         r_   visit_entryzPEPZeroSpecial.visit_entry  s    

a
>>djjAo#d)q.O""5)QA!U__-#a&A+xxzd)C==11>>!\\C/0C ??4cBAaD 3>- 3Ao> " s   AC- -	C98C9N)ra   rb   rc   rd   r   rH   r   r   r   r   r   r   r   rh   ri   r_   r   r      s5     ooG,!*
ri   r   )zpeps@python.orgzpython-list@python.orgzpython-dev@python.orgc                     | j                  d      r|| d   j                  d      rh| d   dd t        v r| d   }n8| j                         j	                  dd      }t        j                  d|d	
      }||S | dxx   d|z  z  cc<   |g| dd | S | S )a  
    Mask the email address in `ref` and return a replacement node.

    `ref` is returned unchanged if it contains no email address.

    For email addresses such as "user@host", mask the address as "user at
    host" (text) to thwart simple email address harvesters (except for those
    listed in `non_masked_addresses`).  If a PEP number (`pepno`) is given,
    return a reference including a default email subject.
    r   zmailto:r   Nr   @z&#32;&#97;t&#32;r   html)formatz?subject=PEP%%20%s)hasattr
startswithnon_masked_addressesr)   replacer   raw)r   r\   replacementreplacement_texts       r_   rA   rA     s     {{8X!9!9)!Dx= 44a&K"zz|33C9KL))B(8HK=M1E99M!]CFJ
ri   r   )rd   __docformat__r<   rC   r9   docutilsr   r   r   r   docutils.transformsr   r	   r
   r   r   rk   ry   r5   SparseNodeVisitorr   r   rA   rh   ri   r_   <module>r      s   
 # 	 	  , ,  ) 7 7oOi oOd,y ,2/9) /9d5i 50U,, 0f1 
ri   