
    N&i%.                     L   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	e
          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
          Z G d de
          Z G d de
          ZdS )a  
Transforms needed by most or all documents:

- `Decorations`: Generate a document's header & footer.
- `ExposeInternals`: Expose internal attributes.
- `Messages`: Placement of system messages generated after parsing.
- `FilterMessages`: Remove system messages below verbosity threshold.
- `TestMessages`: Like `Messages`, used on test runs.
- `StripComments`: Remove comment elements from the document tree.
- `StripClassesAndElements`: Remove elements with classes
  in `self.document.settings.strip_elements_with_classes`
  and class values in `self.document.settings.strip_classes`.
- `SmartQuotes`: Replace ASCII quotation marks with typographic form.
reStructuredText    N)nodesutils)TransformError	Transform)smartquotes)   r   c                   (    e Zd ZdZdZd Zd Zd ZdS )DecorationszD
    Populate a document's decoration element (header, footer).
    i4  c                 j   |                                  }|rB| j                                        }|                                }|                    |           |                                 }|rD| 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footers         j/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/docutils/transforms/universal.pyapplyzDecorations.apply,   s    ++-- 	(5577J**,,FMM,'''++-- 	(5577J**,,FMM,'''''	( 	(    c                     d S r    )r   s    r   r   zDecorations.generate_header8   s    tr   c           
      F   | j         j        }|j        s|j        s|j        s|j        rwg }|j        r|j        s|j        rl|j        r|j        }nt          j        |j	        |j                  }|
                    t          j        dd|          t          j        d          g           |j        rXt          j        |j        t          j                              }|                    t          j        d|z   dz                        |j        rz|
                    t          j        d          t          j        ddd          t          j        d	          t          j        dd
d          t          j        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&   s        r   r   zDecorations.generate_footer;   s    =) 	!3 	x7K 	%	D# 
((8 
()
(& C%0FF"01F191AC CFOB(>+13 3 3Ju%%' ( ( ( ! N M(*<dkmmLL	EJ'7)'Ce'KLLMMM! /J//OB
$FH H HJx((OB(: DH I I IJ|,,. / / / OB2T222334r   N)__name__
__module____qualname____doc__default_priorityr   r   r   r   r   r   r   r   $   sS          
( 
( 
(  $ $ $ $ $r   r   c                   "    e Zd ZdZdZd Zd ZdS )ExposeInternalszL
    Expose internal attributes if ``expose_internals`` setting is set.
    iH  c                 8    t          |t          j                   S r   )
isinstancer   r-   r   nodes     r   not_TextzExposeInternals.not_Textj   s    dEJ////r   c                     | j         j        j        rQ| j                             | j                  D ]3}| j         j        j        D ]}t          ||d           }|||d|z   <   2d S d S )Nz	internal:)r   r$   expose_internalsfindallr@   getattr)r   r?   attvalues       r   r   zExposeInternals.applym   s    =!2 	8--dm<< 8 8=1B 8 8C#D#t44E(27[3./8	8 	88 8r   N)r5   r6   r7   r8   r9   r@   r   r   r   r   r;   r;   b   sD          0 0 08 8 8 8 8r   r;   c                       e Zd ZdZdZd ZdS )Messageszi
    Place any system messages generated after parsing into a dedicated section
    of the document.
    i\  c                 N   | j         j        }| j         j        j        }g }|D ]*}|d         |k    r|j        s|                    |           +|rVt          j        dg          }|t          j        dd          z  }||z  }g | j         j        d d <   | xj         |z  c_         d S d S )Nlevelzsystem-messages)classesr!   zDocutils System Messages)	r   transform_messagesreporterreport_levelparentr1   r   sectiontitle)r   
unfiltered	thresholdmessagesmsgrP   s         r   r   zMessages.apply   s    ]5
M*7	 	% 	%C7|y((($$$ 	%m->,?@@@Gu{2'ABBBGxG24DM,QQQ/MMW$MMMM	% 	%r   Nr5   r6   r7   r8   r9   r   r   r   r   rH   rH   v   s5         
 % % % % %r   rH   c                       e Zd ZdZdZd ZdS )FilterMessagesz;
    Remove system messages below verbosity threshold.
    if  c                     t          | j                            t          j                            D ]7}|d         | j        j        j        k     r|j                            |           8d S )NrJ   )	tupler   rC   r   system_messagerM   rN   rO   remover>   s     r   r   zFilterMessages.apply   sd    $-//0DEEFF 	) 	)DG}t}5BBB""4(((	) 	)r   NrV   r   r   r   rX   rX      s5          ) ) ) ) )r   rX   c                       e Zd ZdZdZd ZdS )TestMessageszk
    Append all post-parse system messages to the end of the document.

    Used for testing purposes.
    ip  c                 R    | j         j        D ]}|j        s| xj         |z  c_         d S r   )r   rL   rO   )r   rU   s     r   r   zTestMessages.apply   s;    =3 	% 	%C: %$	% 	%r   NrV   r   r   r   r^   r^      s5          % % % % %r   r^   c                       e Zd ZdZdZd ZdS )StripCommentszq
    Remove comment elements from the document tree (only if the
    ``strip_comments`` setting is enabled).
    i  c                     | j         j        j        rNt          | j                             t
          j                            D ]}|j                            |           d S d S r   )	r   r$   strip_commentsrZ   rC   r   commentrO   r\   r>   s     r   r   zStripComments.apply   sh    =!0 	)dm33EMBBCC ) )""4((((	) 	)) )r   NrV   r   r   r   ra   ra      s5         
 ) ) ) ) )r   ra   c                   "    e Zd ZdZdZd Z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                    | j         j        j        rlt          | j         j        j                  | _        t          | j                             | j                            D ]}|j        	                    |           | j         j        j
        sd S | j         j        j
        }| j                             t          j                  D ]3}|D ].}	 |d         	                    |           # t          $ r Y +w xY w4d S )NrK   )r   r$   strip_elements_with_classessetstrip_elementsrZ   rC   check_classesrO   r\   strip_classesr   Element
ValueError)r   r?   rl   class_values       r   r   zStripClassesAndElements.apply   s   =!= 	)"%&B#D #DD dm33D4FGGHH ) )""4((((}%3 	F.<M))%-88 	 	D,  O**;7777!   D	 	s   C))
C65C6c                 |    t          |t          j                  sdS |d         d d          D ]}|| j        v r dS dS )NFrK   T)r=   r   rm   rj   )r   r?   ro   s      r   rk   z%StripClassesAndElements.check_classes   sV    $.. 	5	?111- 	 	Kd111tt 2ur   N)r5   r6   r7   r8   r9   r   rk   r   r   r   rf   rf      sD            &    r   rf   c                       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 Zd Zd ZdS )SmartQuotesz
    Replace ASCII quotation marks with typographic form.

    Also replace multiple dashes with em-dash/en-dash characters.
    iR  qDec                 Z    t          j        | ||           t                      | _        d S )N)	startnode)r   __init__ri   unsupported_languages)r   r   ru   s      r   rv   zSmartQuotes.__init__   s,    4Y????%(UU"""r   c              #      K   |D ]x}t          |j        | j                  st          |j        j        | j                  rdt          |          fV  Ot	          j        ddt          |                    }d|fV  yd S )Nliteralz(?<= )([-\'".`])z\\\1plain)r=   rO   literal_nodesunicoderesub)r   txtnodesr?   txts       r   
get_tokenszSmartQuotes.get_tokens   s        	% 	%D4;(:;; %dk0$2DEE% '$--00000 f4gwt}}MMn$$$$	% 	%r   c                    | j         j                            dd          }|sd S 	 |                    d          }n# t          $ r d}Y nw xY w| j         j        j        }| j         j        j        }|r1t          j        j	        
                    t          |                     | j                             t          j                  D ]}t          || j                  rt          |j        t          j                  r9d |                    t          j                  D             }|                    |          }|r d|v r|                    dd          }n|dz  }t+          j        |          D ]}|t          j        j	        v r|} nJ|| j        vr$| j         j                            d|z  |           | j                            |           d}t          j        |                     |          | j        |	          }	t=          ||	          D ]2\  }
}|
j                            |
t          j        |                     3t?                      | _        d S )
Nsmart_quotesFaltc                 P    g | ]#}t          |j        t          j                  !|$S r   )r=   rO   r   option_string).0txtnodes     r   
<listcomp>z%SmartQuotes.apply.<locals>.<listcomp>&  sG     @ @ @G)'.*/*= ?  ?@ @ @ @r   z
-x-altquotr!   z*No smart quotes defined for language "%s".)	base_node)attrlanguage) r   r$   
setdefault
startswithAttributeErrorlanguage_codesmartquotes_localesr   
smartcharsquotesupdatedictrC   r   TextElementr=   nodes_to_skiprO   r-   get_language_codereplacer   normalize_language_tagrw   rM   warningaddeducate_tokensr   smartquotes_actionzipri   )r   r   alternativedocument_languagelc_smartquotesr?   r   langtagteacherr   newtexts               r   r   zSmartQuotes.apply  s   }-88;@B B 	F	 &11%88KK 	  	  	 KKK	  !M2@/C 	G")00n1E1EFFF M))%*;<< '	E '	ED$ 233 $+u'899 @ @t||EJ/G/G @ @ @H
 ))*;<<D )4''<<b99DDL(D3D99 	 	+0777DE 8 t999M*22 45594:EI 3 K K K*..t444 "01J1J%)%<tM M MG %('$:$: E E &&w
70C0CDDDDE &)UU"""s   < A
AN)r5   r6   r7   r8   r9   r   FixedTextElementSpecialr   imagery   mathrawproblematicr{   r   rv   r   r   r   r   r   rr   rr      s          +U];MM+U][%-Y 13M C+ + +% % %:+ :+ :+ :+ :+r   rr   )r8   __docformat__r}   sysr.   docutilsr   r   docutils.transformsr   r   docutils.utilsr   version_infostrr|   r   r;   rH   rX   r^   ra   rf   rr   r   r   r   <module>r      s    # 				 



  ! ! ! ! ! ! ! ! 9 9 9 9 9 9 9 9 & & & & & & vG; ; ; ; ;) ; ; ;|8 8 8 8 8i 8 8 8(% % % % %y % % %2) ) ) ) )Y ) ) )% % % % %9 % % % ) ) ) ) )I ) ) )# # # # #i # # #Ld+ d+ d+ d+ d+) d+ d+ d+ d+ d+r   