B
    ´yY^+  ã               @   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 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)Úsmartquotesc               @   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   sT   |   ¡ }|r(| j ¡ }| ¡ }| |¡ |  ¡ }|rP| j ¡ }| ¡ }| |¡ d S )N)Úgenerate_headerÚdocumentZget_decorationZ
get_headerÚextendÚgenerate_footerZ
get_footer)ÚselfZheader_nodesZ
decorationÚheaderZfooter_nodesZfooter© r   ú<lib/python3.7/site-packages/docutils/transforms/universal.pyÚapply"   s    


zDecorations.applyc             C   s   d S )Nr   )r   r   r   r   r	   .   s    zDecorations.generate_headerc          
   C   s   | j j}|js |js |js |jrøg }|jr0|js6|jrt|jrD|j}nt |j	|j¡}| 
tjdd|dt d¡g¡ |jr¤t |jt ¡ ¡}| t d| d ¡¡ |jrè| 
t d¡tjddddt d	¡tjdd
ddt d¡g¡ tjd|žŽ gS d S d S )NÚ zView document source)Zrefuriz.
zGenerated on: zGenerated by ZDocutilsz http://docutils.sourceforge.net/z from r   z(http://docutils.sourceforge.net/rst.htmlz	 source.
)r   r   )r
   ÚsettingsÚ	generatorÚ	datestampZsource_linkZ
source_urlZ_sourcer   Zrelative_pathZ_destinationr   r   Z	referenceÚTextÚtimeZstrftimeZgmtimeÚappendZ	paragraph)r   r   ÚtextÚsourcer   r   r   r   r   1   s6    zDecorations.generate_footerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Údefault_priorityr   r	   r   r   r   r   r   r      s
   r   c               @   s$   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 )N)Ú
isinstancer   r   )r   Únoder   r   r   Únot_Text`   s    zExposeInternals.not_Textc             C   sZ   | j jjrVxJ| j  | j¡D ]8}x2| j jjD ]$}t||d ƒ}|d k	r*||d| < q*W qW d S )Nz	internal:)r
   r   Zexpose_internalsÚtraverser#   Úgetattr)r   r"   ZattÚvaluer   r   r   r   c   s    
zExposeInternals.applyN)r   r   r   r   r   r#   r   r   r   r   r   r    X   s   r    c               @   s   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 }x(|D ] }|d |kr|js| |¡ qW |rˆtjdgd}|t dd¡7 }||7 }g | j jd d …< |  j |7  _ d S )NÚlevelzsystem-messages)Úclassesr   zDocutils System Messages)	r
   Útransform_messagesÚreporterÚreport_levelÚparentr   r   ÚsectionÚtitle)r   Z
unfilteredZ	thresholdZmessagesÚmsgr.   r   r   r   r   u   s    

zMessages.applyN)r   r   r   r   r   r   r   r   r   r   r'   l   s   r'   c               @   s   e Zd ZdZdZdd„ ZdS )ÚFilterMessagesz;
    Remove system messages below verbosity threshold.
    if  c             C   s:   x4| j  tj¡D ]"}|d | j jjk r|j |¡ qW d S )Nr(   )r
   r$   r   Zsystem_messager+   r,   r-   Úremove)r   r"   r   r   r   r      s    zFilterMessages.applyN)r   r   r   r   r   r   r   r   r   r   r1   …   s   r1   c               @   s   e Zd ZdZdZdd„ ZdS )ÚTestMessageszk
    Append all post-parse system messages to the end of the document.

    Used for testing purposes.
    ip  c             C   s*   x$| j jD ]}|js
|  j |7  _ q
W d S )N)r
   r*   r-   )r   r0   r   r   r   r      s    zTestMessages.applyN)r   r   r   r   r   r   r   r   r   r   r3   “   s   r3   c               @   s   e Zd ZdZdZdd„ ZdS )ÚStripCommentszq
    Remove comment elements from the document tree (only if the
    ``strip_comments`` setting is enabled).
    iä  c             C   s2   | j jjr.x"| j  tj¡D ]}|j |¡ qW d S )N)r
   r   Zstrip_commentsr$   r   Úcommentr-   r2   )r   r"   r   r   r   r   ¬   s    
zStripComments.applyN)r   r   r   r   r   r   r   r   r   r   r4   £   s   r4   c               @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )Ú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s| j jjsd S tdd„ | j jjp,g D ƒƒ| _tdd„ | j jjpJg D ƒƒ| _x"| j  | j¡D ]}|j 	|¡ qdW d S )Nc             S   s   g | ]}|d f‘qS )Nr   )Ú.0Úkeyr   r   r   ú
<listcomp>Â   s   z1StripClassesAndElements.apply.<locals>.<listcomp>c             S   s   g | ]}|d f‘qS )Nr   )r7   r8   r   r   r   r9   Æ   s    )
r
   r   Zstrip_elements_with_classesÚstrip_classesÚdictÚstrip_elementsr$   Úcheck_classesr-   r2   )r   r"   r   r   r   r   ¼   s    


zStripClassesAndElements.applyc             C   sP   t |tjƒrLx>|d d d … D ]*}|| jkr:|d  |¡ || jkrdS qW d S )Nr)   é   )r!   r   ZElementr:   r2   r<   )r   r"   Zclass_valuer   r   r   r=   Ë   s    

z%StripClassesAndElements.check_classesN)r   r   r   r   r   r   r=   r   r   r   r   r6   ²   s   r6   c               @   sT   e Zd ZdZdZejejfZ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  ZqDec             C   s   t j| ||d tƒ | _d S )N)Ú	startnode)r   Ú__init__ÚsetÚunsupported_languages)r   r
   r@   r   r   r   rA   ì   s    zSmartQuotes.__init__c             c   s<   dddœ}x,|D ]$}|t |j| jƒ }|| ¡ fV  qW d S )NÚliteralZplain)TF)r!   r-   Úliteral_nodesZastext)r   ÚtxtnodesZtexttypeÚtxtnodeZnodetyper   r   r   Ú
get_tokensð   s    

zSmartQuotes.get_tokensc          	   C   s  | j jj}|sd S y| d¡}W n tk
r8   d}Y nX | j jj}| j jj}|rdtjj	 
t|ƒ¡ x| j  tj¡D ]}t|| jƒrŠqvt|jtjƒršqvdd„ | tj¡D ƒ}| |¡}|rÜd|krÔ| dd¡}n|d7 }xVt |¡D ]}|tjj	krè|}P qèW || jkr$| j jjd| |d | j |¡ d}tj|  |¡| j|d	}	x2t||	ƒD ]$\}
}|
j |
tj||
jd
¡ qXW qvW t ƒ | _d S )NZaltFc             S   s   g | ]}t |jtjƒs|‘qS r   )r!   r-   r   Zoption_string)r7   rG   r   r   r   r9     s    z%SmartQuotes.apply.<locals>.<listcomp>z
-x-altquotr   z*No smart quotes defined for language "%s".)Z	base_node)ÚattrZlanguage)Ú	rawsource)!r
   r   Úsmart_quotesÚ
startswithÚAttributeErrorZlanguage_codeZsmartquotes_localesr   Z
smartcharsZquotesÚupdater;   r$   r   ZTextElementr!   Únodes_to_skipr-   r   Zget_language_codeÚreplacer   Znormalize_language_tagrC   r+   ZwarningÚaddZeducate_tokensrH   Úsmartquotes_actionÚziprJ   rB   )r   rK   ZalternativeZdocument_languageZlc_smartquotesr"   rF   ZlangÚtagZteacherrG   Znewtextr   r   r   r   ü   sJ    





zSmartQuotes.applyN)r   r   r   r   r   r   ZFixedTextElementÚSpecialrO   ZimagerD   ZmathÚrawZproblematicrE   rR   rA   rH   r   r   r   r   r   r?   Ô   s   r?   )r   Z__docformat__ÚreÚsysr   Zdocutilsr   r   Zdocutils.transformsr   r   Zdocutils.utilsr   r   r    r'   r1   r3   r4   r6   r?   r   r   r   r   Ú<module>   s   >"