o
    "5p`Ä,  ã                   @   sÞ   d Z dZddlZddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ejdkr-eZG dd	„ d	e
ƒZG d
d„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZdS )a+  
Transforms needed by most or all documents:

- `Decorations`: Generate a document's header & footer.
- `Messages`: Placement of system messages stored in
  `nodes.document.transform_messages`.
- `TestMessages`: Like `Messages`, used on test runs.
- `FinalReferences`: Resolve remaining references.
ÚreStructuredTexté    N)ÚnodesÚutils)ÚTransformErrorÚ	Transform)Úsmartquotes)é   r   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚDecorationszD
    Populate a document's decoration element (header, footer).
    i4  c                 C   sX   |   ¡ }|r| j ¡ }| ¡ }| |¡ |  ¡ }|r*| j ¡ }| ¡ }| |¡ d S d S ©N)Úgenerate_headerÚdocumentÚget_decorationÚ
get_headerÚextendÚgenerate_footerÚ
get_footer)ÚselfÚheader_nodesÚ
decorationÚheaderÚfooter_nodesÚfooter© r   ú?/usr/lib/python3/dist-packages/docutils/transforms/universal.pyÚapply'   s   


ýzDecorations.applyc                 C   s   d S r
   r   )r   r   r   r   r   3   s   zDecorations.generate_headerc              
   C   s  | j j}|js|js|js|jrg }|jr|js|jr:|jr"|j}nt |j	|j¡}| 
tjdd|d�t d¡g¡ |jrRt |jt ¡ ¡}| t d| d ¡¡ |jrt| 
t d¡tjdddd�t d	¡tjdd
dd�t d¡g¡ tjddg|¢R Ž gS d S )NÚ zView document source)Úrefuriz.
zGenerated on: zGenerated by ÚDocutilsz http://docutils.sourceforge.net/z from r   z(http://docutils.sourceforge.net/rst.htmlz	 source.
)r   ÚsettingsÚ	generatorÚ	datestampÚsource_linkÚ
source_urlÚ_sourcer   Úrelative_pathÚ_destinationr   r   Ú	referenceÚTextÚtimeÚstrftimeÚgmtimeÚappendÚ	paragraph)r   r   ÚtextÚsourcer    r   r   r   r   6   sD   ÿÿÿÿýÿùzDecorations.generate_footerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Údefault_priorityr   r   r   r   r   r   r   r	      s    r	   c                   @   ó$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚExposeInternalszL
    Expose internal attributes if ``expose_internals`` setting is set.
    iH  c                 C   s   t |tjƒ S r
   )Ú
isinstancer   r'   ©r   Únoder   r   r   Únot_Texte   s   zExposeInternals.not_Textc                 C   sV   | j jjr'| j  | j¡D ]}| j jjD ]}t||d ƒ}|d ur%||d| < qqd S d S )Nz	internal:)r   r   Úexpose_internalsÚtraverser9   Úgetattr)r   r8   ÚattÚvaluer   r   r   r   h   s   
€ýþzExposeInternals.applyN)r/   r0   r1   r2   r3   r9   r   r   r   r   r   r5   ]   s
    r5   c                   @   ó   e Zd ZdZdZdd„ ZdS )ÚMessageszi
    Place any system messages generated after parsing into a dedicated section
    of the document.
    i\  c                 C   sŒ   | j j}| j jj}g }|D ]}|d |kr|js| |¡ q|rDtjdgd�}|t dd¡7 }||7 }g | j jd d …< |  j |7  _ d S d S )NÚlevelzsystem-messages)Úclassesr   zDocutils System Messages)	r   Útransform_messagesÚreporterÚreport_levelÚparentr+   r   ÚsectionÚtitle)r   Ú
unfilteredÚ	thresholdÚmessagesÚmsgrG   r   r   r   r   z   s   

€úzMessages.applyN©r/   r0   r1   r2   r3   r   r   r   r   r   r@   q   ó    r@   c                   @   r?   )ÚFilterMessagesz;
    Remove system messages below verbosity threshold.
    if  c                 C   s:   t | j tj¡ƒD ]}|d | jjjk r|j |¡ q	d S )NrA   )	Útupler   r;   r   Úsystem_messagerD   rE   rF   Úremover7   r   r   r   r   ’   s
   €þzFilterMessages.applyNrM   r   r   r   r   rO   Š   s    rO   c                   @   r?   )ÚTestMessageszk
    Append all post-parse system messages to the end of the document.

    Used for testing purposes.
    ip  c                 C   s&   | j jD ]}|js|  j |7  _ qd S r
   )r   rC   rF   )r   rL   r   r   r   r   ¢   s
   €þzTestMessages.applyNrM   r   r   r   r   rS   ˜   s    rS   c                   @   r?   )ÚStripCommentszq
    Remove comment elements from the document tree (only if the
    ``strip_comments`` setting is enabled).
    iä  c                 C   s6   | j jjrt| j  tj¡ƒD ]
}|j |¡ qd S d S r
   )	r   r   Ústrip_commentsrP   r;   r   ÚcommentrF   rR   r7   r   r   r   r   ±   s
   
þzStripComments.applyNrM   r   r   r   r   rT   ¨   rN   rT   c                   @   r4   )ÚStripClassesAndElementszÏ
    Remove from the document tree all elements with classes in
    `self.document.settings.strip_elements_with_classes` and all "classes"
    attribute values in `self.document.settings.strip_classes`.
    i¤  c              
   C   sœ   | j jjrt| j jjƒ| _t| j  | j¡ƒD ]}|j 	|¡ q| j jj
s&d S | j jj
}| j  tj¡D ]}|D ]}z	|d  	|¡ W q6 tyJ   Y q6w q2d S )NrB   )r   r   Ústrip_elements_with_classesÚsetÚstrip_elementsrP   r;   Úcheck_classesrF   rR   Ústrip_classesr   ÚElementÚ
ValueError)r   r8   r\   Úclass_valuer   r   r   r   Á   s$   
ÿ

ÿýÿzStripClassesAndElements.applyc                 C   s:   t |tjƒsdS |d d d … D ]
}|| jv r dS qdS )NFrB   T)r6   r   r]   rZ   )r   r8   r_   r   r   r   r[   Ô   s   
ÿz%StripClassesAndElements.check_classesN)r/   r0   r1   r2   r3   r   r[   r   r   r   r   rW   ·   s
    rW   c                   @   sb   e Zd ZdZdZejejfZ	 ejejej	ej
ejejejfZ	 dZ	 dd„ Zdd„ Zdd	„ Zd
S )ÚSmartQuotesz�
    Replace ASCII quotation marks with typographic form.

    Also replace multiple dashes with em-dash/en-dash characters.
    iR  ÚqDec                 C   s   t j| ||d� tƒ | _d S )N)Ú	startnode)r   Ú__init__rY   Úunsupported_languages)r   r   rb   r   r   r   rc   ö   s   zSmartQuotes.__init__c                 c   sZ   � |D ]'}t |j| jƒst |jj| jƒrdt|ƒfV  qt ddt|ƒ¡}d|fV  qd S )NÚliteralz(?<= )([-\'".`])z\\\1Úplain)r6   rF   Úliteral_nodesÚunicodeÚreÚsub)r   Útxtnodesr8   Útxtr   r   r   Ú
get_tokensú   s   €ÿùzSmartQuotes.get_tokensc              	   C   s‚  | j j dd¡}|sd S z| d¡}W n ty   d}Y nw | j jj}| j jj}|r4tjj	 
t|ƒ¡ | j  tj¡D ]}t|| jƒrDq;t|jtjƒrLq;dd„ | tj¡D ƒ}| |¡}|rmd|v ri| dd¡}n|d7 }t |¡D ]}|tjj	v r~|} nqr|| jvr�| j jjd| |d	� | j |¡ d}tj|  |¡| j|d
�}	t||	ƒD ]\}
}|
j |
tj||
jd�¡ q¨q;t ƒ | _d S )NÚsmart_quotesFÚaltc                 S   s   g | ]}t |jtjƒs|‘qS r   )r6   rF   r   Úoption_string)Ú.0Útxtnoder   r   r   Ú
<listcomp>   s
    ÿ
ÿz%SmartQuotes.apply.<locals>.<listcomp>z
-x-altquotr   z*No smart quotes defined for language "%s".)Ú	base_node)ÚattrÚlanguage)Ú	rawsource)!r   r   Ú
setdefaultÚ
startswithÚAttributeErrorÚlanguage_codeÚsmartquotes_localesr   Ú
smartcharsÚquotesÚupdateÚdictr;   r   ÚTextElementr6   Únodes_to_skiprF   r'   Úget_language_codeÚreplacer   Únormalize_language_tagrd   rD   ÚwarningÚaddÚeducate_tokensrm   Úsmartquotes_actionÚziprw   rY   )r   rn   ÚalternativeÚdocument_languageÚlc_smartquotesr8   rk   ÚlangÚtagÚteacherrr   Únewtextr   r   r   r     s^   
ÿÿ


þ

ÿÿÿ
ÿÿzSmartQuotes.applyN)r/   r0   r1   r2   r3   r   ÚFixedTextElementÚSpecialr‚   Úimagere   ÚmathÚrawÚproblematicrg   r‰   rc   rm   r   r   r   r   r   r`   Ý   s    þr`   )r2   Ú__docformat__ri   Úsysr(   Údocutilsr   r   Údocutils.transformsr   r   Údocutils.utilsr   Úversion_infoÚstrrh   r	   r5   r@   rO   rS   rT   rW   r`   r   r   r   r   Ú<module>   s$   

>&