
    -Ph]0                     &   d Z dZddlZddlZddlmZmZ ddlmZ ddl	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          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)	Transform)smartquotesc                   (    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         ]/var/www/html/test/jupyter/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_header2   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 https://docutils.sourceforge.io/z from r   z(https://docutils.sourceforge.io/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_footer5   s    =) 	("4 	#	'/':	D$ 
()9 
(&
(& 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
+MO O OJx((OB(:,/0 0 0 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_Texte   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.applyh   s    =!2 	8--dm<< 8 8=1B 8 8C#D#t44E(27[3./8	8 	88 8r   N)r3   r4   r5   r6   r7   r>   r   r   r   r   r9   r9   ]   sD          0 0 08 8 8 8 8r   r9   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                     | j         j        }d |D             }|rVt          j        dg          }|t          j        dd          z  }||z  }g | j         j        d d <   | xj         |z  c_         d S d S )Nc                      g | ]}|j         	|S r   )parent).0msgs     r   
<listcomp>z"Messages.apply.<locals>.<listcomp>|   s    DDD#D#DDDr   system-messages)classesr   zDocutils System Messages)r   transform_messagesr   sectiontitle)r   messagesloose_messagesrP   s       r   r   zMessages.applyz   s    =3DDDDD 	%m->,?@@@Gu{2'ABBBG~%G24DM,QQQ/MMW$MMMM	% 	%r   Nr3   r4   r5   r6   r7   r   r   r   r   rF   rF   q   s5         
 	% 	% 	% 	% 	%r   rF   c                       e Zd ZdZdZd ZdS )FilterMessagesz
    Remove system messages below verbosity threshold.

    Also convert <problematic> nodes referencing removed messages
    to <Text> nodes and remove "System Messages" section if empty.
    if  c                    t          | j                            t          j                            D ]b}|d         | j        j        j        k     rE|j                            |           	 | j        j	        |d         d         = R# t          $ r Y ^w xY wct          | j                            t          j                            D ]U}|d         | j        j	        vr?|j                            |t          j        |                                                     V| j                            t          j                  D ]9}d|d         v r-t!          |          dk    r|j                            |           :d S )Nlevelidsr   refidrM   rN      )tupler   rA   r   system_messagereporterreport_levelrI   removerY   
IndexErrorproblematicreplacer+   astextrP   lenr<   s     r   r   zFilterMessages.apply   sh   $-//0DEEFF 	 	DG}t}5BBB""4((()$u+a.99"   D	 C $-//0ABBCC 	E 	EDG}DM$555##D%*T[[]]*C*CDDDM))%-88 	) 	)D DO33D		Q""4(((	) 	)s   *B
BBNrT   r   r   r   rV   rV      s5          ) ) ) ) )r   rV   c                        e Zd 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.
    Fip  c                 R    | j         j        D ]}|j        s| xj         |z  c_         d S r   )r   rO   rI   )r   rK   s     r   r   zTestMessages.apply   s;    =3 	% 	%C: %$	% 	%r   N)r3   r4   r5   r6   __test__r7   r   r   r   r   rg   rg      s:          H% % % % %r   rg   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_commentsr\   rA   r   commentrI   r`   r<   s     r   r   zStripComments.apply   sh    =!0 	)dm33EMBBCC ) )""4((((	) 	)) )r   NrT   r   r   r   rk   rk      s5         
 ) ) ) ) )r   rk   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        rah | 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 )NrN   )r   r"   strip_elements_with_classesstrip_elementsr\   rA   check_classesrI   r`   strip_classesr   Element
ValueError)r   r=   ru   class_values       r   r   zStripClassesAndElements.apply   s   =!= 	)#ADM$:$?#AD dm33D4FGGHH ) )""4((((}%3 	F.<M))%-88 	 	D,  O**;7777!   D	 	s   C
C+*C+c                 |    t          |t          j                  sdS |d         d d          D ]}|| j        v r dS dS )NFrN   T)r;   r   rv   rs   )r   r=   rx   s      r   rt   z%StripClassesAndElements.check_classes   sV    $.. 	5	?111- 	 	Kd111tt 2ur   N)r3   r4   r5   r6   r7   r   rt   r   r   r   rp   rp      sD            &    r   rp   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.
    iW  qDec                 Z    t          j        | ||           t                      | _        d S )N)	startnode)r   __init__setunsupported_languages)r   r   r~   s      r   r   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;   rI   literal_nodesstrresub)r   txtnodesr=   txts       r   
get_tokenszSmartQuotes.get_tokens  s        	# 	#D4;(:;; #dk0$2DEE#T***** f4gs4yyIIsl""""	# 	#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| j                                         d S )
Nsmart_quotesFaltc                 P    g | ]#}t          |j        t          j                  !|$S r   )r;   rI   r   option_string)rJ   txtnodes     r   rL   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dictrA   r   TextElementr;   nodes_to_skiprI   r+   get_language_coderc   r   normalize_language_tagr   r^   warningaddeducate_tokensr   smartquotes_actionzipclear)r   r   alternativedocument_languagelc_smartquotesr=   r   langtagteacherr   newtexts               r   r   zSmartQuotes.apply  s   }-889>@ @ 	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DtK"& 3 ( ( ( *..t444 "0)),t= = =G %('$:$: E E &&w
70C0CDDDDE 	"((*****s   < A
AN)r3   r4   r5   r6   r7   r   FixedTextElementSpecialr   imager   mathrawrb   r   r   r   r   r   r   r   r   r{   r{      s          +U];MM+U][%-Y 13M G+ + +# # #<+ <+ <+ <+ <+r   r{   )r6   __docformat__r   r,   docutilsr   r   docutils.transformsr   docutils.utilsr   r	   r9   rF   rV   rg   rk   rp   r{   r   r   r   <module>r      s    # 				  ! ! ! ! ! ! ! ! ) ) ) ) ) ) & & & & & &< < < < <) < < <~8 8 8 8 8i 8 8 8(% % % % %y % % %*) ) ) ) )Y ) ) )6% % % % %9 % % %&) ) ) ) )I ) ) )# # # # #i # # #Lf+ f+ f+ f+ f+) f+ f+ f+ f+ f+r   