
    KiP,                        d Z ddlm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.
    )annotationsreStructuredTextN)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                B   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 ]O  }|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 ]d  }t        |      }|jE                  t	        j8                  ||| j                  jF                  jH                  | jJ                  |z  z         |f       f |d d |d d  b|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#t        |      s0tM        jN                  || jP                         R 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 Ow 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extendsettingspep_base_urlpep_urlr   clean_rcs_keywordsrcs_keyword_substitutions)selfheaderr   fieldvaluecvs_urlmsgmsgidprbprbidr5   namebodydateparanodenewbodyspacerefpeppepnopep_typeuris                         d/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/docutils/transforms/peps.pyapplyzHeaders.apply,   s1   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(( 9	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NN"F$(MM$:$:$G$G&*llU&:%;
 $ 	 "#2,Q(((t/M/MN;;=D$r4HIDG';;=mm,,99DLL2<MM ??2xDEQ"s4y((t/M/MNs9	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&   R1AV1CVVVVN)__name__
__module____qualname____doc__default_priorityrI   r-   rD   compile
IGNORECASErK   ra        r`   r   r      s`     G5K 
0MM
#$)	+	,	-u5!cOrj   r   c                      e Zd ZdZdZd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'   rG   language_coder/   labelsr   r   topicfully_normalize_namehas_nameappendnote_implicit_targetr5   r
   rl   r7   r8   )rL   languagerU   r   rs   r5   s         r`   ra   zContents.apply   s    ))$--*@*@*N*N*.--*@*@Bz*B%B
|<))$/}}%%d+'N!!$'**51--/Q&""7+rj   NreturnNonerb   rc   rd   re   rf   ra   ri   rj   r`   rl   rl      s    
 ,rj   rl   c                  $    e Zd ZdZdZddZd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+   rE   r   r1   r7   rv   r5   r   r~   r8   r   CallBackcleanup_callback)rL   docirefsect
copyright_title_wordsr5   s          r`   ra   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

:w/ 

7#--
 6 67w""7A.--)3T5J5J(KMw""7A.rj   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)rL   r5   s     r`   r   zTargetNotes.cleanup_callback   s6     w~~!#NN!!((8 $rj   Nry   )rb   rc   rd   re   rf   ra   r   ri   rj   r`   r~   r~      s     /<9rj   r~   c                      e Zd ZdZdZddZy)r6   z'
    Special processing for PEP 0.
    i  c                    t        | j                        }| j                  j                  |       | j                  j                  j                  | j                         y N)PEPZeroSpecialr'   walk	startnoder   r   )rL   visitors     r`   ra   zPEPZero.apply   s>     /7#$$T^^4rj   Nry   r|   ri   rj   r`   r6   r6      s     5rj   r6   c                  ^    e Zd ZdZej
                  Zd
dZd
dZd Zd
dZ	d
dZ
d
dZd
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   ri   rL   rY   s     r`   unknown_visitzPEPZeroSpecial.unknown_visit   s    rj   c                8    |j                  t        |             y r   )rA   rB   r   s     r`   visit_referencezPEPZeroSpecial.visit_reference   s    *T*+rj   c                2    d|d   v rt         j                  y )Nr   r   )r   SkipNoder   s     r`   visit_field_listzPEPZeroSpecial.visit_field_list   s    Y'..  (rj   c                ,    |d   dk(  | _         d| _        y )Ncols   r   )	pep_tableentryr   s     r`   visit_tgroupzPEPZeroSpecial.visit_tgroup  s    f*
rj   c                    | xj                   dz  c_         | j                  r%| j                   dk(  r|d   j                  d       y y y )Nr   r   r   num)r   r   rv   r   s     r`   visit_colspeczPEPZeroSpecial.visit_colspec  s9    

a
>>djjAoO""5) .>rj   c                    d| _         y )Nr   )r   r   s     r`   	visit_rowzPEPZeroSpecial.visit_row  s	    
rj   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&   rv   r(   r   r4   r*   r,   r'   rG   rH   rI   r@   r.   )rL   rY   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Nry   )rb   rc   rd   re   r   rI   r   r   r   r   r   r   r   ri   rj   r`   r   r      s5     ooG,!*
rj   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`   rB   rB   #  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
rj   r   )re   
__future__r   __docformat__r=   rD   r:   docutilsr   r   r   r   docutils.transformsr	   r
   r   r   r   rl   r~   r6   SparseNodeVisitorr   r   rB   ri   rj   r`   <module>r      s   
 #" 	 	  , ,  ) 7 7tOi tOn,y ,2/9) /9d5i 50U,, 0f1 
rj   