
    KiF5                       d Z ddlm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 G d de
      Zy)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.
- `Validate`: Validate the document tree, report violations as warning.
    )annotationsreStructuredTextN)nodesutils)	Transform)smartquotesc                  (    e Zd ZdZdZddZd Zd Zy)DecorationszD
    Populate a document's decoration element (header, footer).
    i4  c                :   | j                         }|r;| j                  j                         }|j                         }|j	                  |       | j                         }|r<| j                  j                         }|j                         }|j	                  |       y y N)generate_headerdocumentget_decoration
get_headerextendgenerate_footer
get_footer)selfheader_nodes
decorationheaderfooter_nodesfooters         i/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/docutils/transforms/universal.pyapplyzDecorations.apply)   s    ++-557J**,FMM,'++-557J**,FMM,'     c                     y r    )r   s    r   r   zDecorations.generate_header5   s    r   c           
        | j                   j                  }|j                  s%|j                  s|j                  s|j
                  rg }|j                  r|j                  s|j
                  r|j
                  r|j
                  }n*t        j                  |j                  |j                        }|j                  t        j                  dd|      t        j                  d      g       |j                  r\t        j                  |j                  t        j                                }|j#                  t        j                  d|z   dz                |j                  r{|j                  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| gS y )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output_pathr   r   	referenceTexttimestrftimegmtimeappend	paragraph)r   r#   textsourcer%   s        r   r   zDecorations.generate_footer8   s    ==))("4"4##x':':D$$)9)9&&&&%00F"001E1E191A1ACFOOB(>+13JJu%' ( !! MM(*<*<dkkmL	EJJ'7)'Ce'KLM!!JJ/OOB
+MOJJx(OOB(:,/0 JJ|,. / OOB2T233r   NreturnNone)__name__
__module____qualname____doc__default_priorityr   r   r   r   r   r   r
   r
   !   s     
(%r   r
   c                  $    e Zd ZdZdZddZddZy)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_Texth   s    dEJJ///r   c                   | j                   j                  j                  rh| j                   j                  | j                        D ]?  }| j                   j                  j                  D ]  }t        ||d       }|||d|z   <    A y y )Nz	internal:)r   r#   expose_internalsfindallrB   getattr)r   rA   attvalues       r   r   zExposeInternals.applyk   s~    ==!!22--dmm< 8==11BB 8C#D#t4E(27[3./88 3r   Nr5   boolr4   )r7   r8   r9   r:   r;   rB   r   r   r   r   r=   r=   `   s     08r   r=   c                      e Zd ZdZdZddZy)MessageszHandle "loose" messages.

    Place system messages generated by parsing or transforms that are not
    attached to the document tree into a dedicated section of the document.
    i\  c                n   g | j                   j                  | j                   j                  }|D cg c]  }|j                  r| }}|rdt	        j
                  dg      }|t	        j                  dd      z  }||z  }g | j                   j                  d d  | xj                   |z  c_         y y c c}w )Nsystem-messages)classesr    zDocutils System Messages)r   parse_messagestransform_messagesparentr   sectiontitle)r   messagesmsgloose_messagesrS   s        r   r   zMessages.apply~   s    7T]]11 7]]557)1D##DDmm->,?@Gu{{2'ABBG~%G24DMM,,Q/MMW$M  Es   B2B2Nr4   r7   r8   r9   r:   r;   r   r   r   r   rL   rL   t   s     
%r   rL   c                      e Zd ZdZdZddZy)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                >   g }t        | j                  j                  t        j                              D ]  }|d   | j                  j
                  j                  k  s*|j                  j                  |       |d   D ]9  }| j                  j                  j                  |d        |j                  |       ;  t        | j                  j                  t        j                              D ]L  }d|v s|d   |v s|j                  j                  |t        j                  |j                                      N | j                  j                  t        j                         D ]4  }d|d   v st#        |      dk(  s|j                  j                  |       6 y )NlevelidsrefidrN   rO      )tupler   rE   r   system_messagereporterreport_levelrR   remover]   popr0   problematicreplacer,   astextrS   len)r   removed_idsrA   _ids       r   r   zFilterMessages.apply   sG   $--//0D0DEF 	,DG}t}}55BBB""4(; ,CMM%%))#t4&&s+,	, $--//0A0ABC 	ED$4=K#?##D%**T[[]*CD	E MM))%--8 	)D DO3D	Q""4(	)r   Nr4   rX   r   r   r   rZ   rZ      s     )r   rZ   c                       e Zd ZdZdZdZddZy)TestMessageszk
    Append all post-parse system messages to the end of the document.

    Used for testing purposes.
    Fip  c                ~    | j                   j                  D ]$  }|j                  r| xj                   |z  c_         & y r   )r   rQ   rR   )r   rV   s     r   r   zTestMessages.apply   s0    ==33 	%C::$	%r   Nr4   )r7   r8   r9   r:   __test__r;   r   r   r   r   rm   rm      s     H%r   rm   c                      e Zd ZdZdZddZy)StripCommentszq
    Remove comment elements from the document tree (only if the
    ``strip_comments`` setting is enabled).
    i  c                    | j                   j                  j                  rSt        | j                   j	                  t
        j                              D ]  }|j                  j                  |        y y r   )	r   r#   strip_commentsr`   rE   r   commentrR   rd   r@   s     r   r   zStripComments.apply   sS    ==!!00dmm33EMMBC )""4() 1r   Nr4   rX   r   r   r   rq   rq      s    
 )r   rq   c                  $    e Zd ZdZdZddZddZy)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                b   | j                   j                  j                  ruh | j                   j                  j                  | _        t	        | j                   j                  | j                              D ]  }|j                  j                  |        | j                   j                  j                  sy | j                   j                  j                  }| j                   j                  t        j                        D ]  }|D ]  }	 |d   j                  |          y # t        $ r Y (w xY w)NrO   )r   r#   strip_elements_with_classesstrip_elementsr`   rE   check_classesrR   rd   strip_classesr   Element
ValueError)r   rA   r{   class_values       r   r   zStripClassesAndElements.apply   s    ==!!==#ADMM$:$:$?$?#AD dmm33D4F4FGH )""4() }}%%33..<<MM))%--8 	D, O**;7	 " s   	D""	D.-D.c                t    t        |t        j                        sy|d   d d  D ]  }|| j                  v s y y)NFrO   T)r?   r   r|   ry   )r   rA   r~   s      r   rz   z%StripClassesAndElements.check_classes   sA    $.	?1- 	Kd111	 r   Nr4   rI   )r7   r8   r9   r:   r;   r   rz   r   r   r   rv   rv      s     &r   rv   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dZd ZddZy)	SmartQuotesz
    Replace ASCII quotation marks with typographic form.

    Also replace multiple dashes with em-dash/en-dash characters.
    iW  qDec                R    t        j                  | ||       t               | _        y )N)	startnode)r   __init__setunsupported_languages)r   r   r   s      r   r   zSmartQuotes.__init__  s    4Y?%(U"r   c              #    K   |D ]  }t        |j                  | j                        s*t        |j                  j                  | j                        rdt        |      f ]t	        j
                  ddt        |            }d|f  y w)Nliteralz(?<= )([-\'".`])z\\\1plain)r?   rR   literal_nodesstrresub)r   txtnodesrA   txts       r   
get_tokenszSmartQuotes.get_tokens  sw       	#D4;;(:(:;dkk00$2D2DET** ff4gs4yIsl"	#s   B	Bc                   | j                   j                  j                  dd      }|sy 	 |j                  d      }| j                   j                  j
                  }| j                   j                  j                  }|r2t        j                  j                  j                  t        |             | j                   j                  t        j                        D ]  }t        || j                         rt        |j"                  t        j                        r@|j                  t        j$                        D cg c](  }t        |j"                  t        j&                        s|* }}|j)                  |      }|rd|v r|j+                  dd      }n|dz  }t-        j.                  |      D ]"  }	|	t        j                  j                  v s |	} nV || j0                  vr*| j                   j2                  j5                  d|z  |       | j0                  j7                  |       d}t        j8                  | j;                  |      | j<                  |      }
t?        ||
      D ]4  \  }}|j"                  j+                  |t        j$                  |             6  | j0                  jA                          y # t        $ r d}Y w xY wc c}w )	Nsmart_quotesFaltz
-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dictrE   r   TextElementr?   nodes_to_skiprR   r,   option_stringget_language_coderg   r   normalize_language_tagr   rb   warningaddeducate_tokensr   smartquotes_actionzipclear)r   r   alternativedocument_languagelc_smartquotesrA   txtnoder   langtagteachernewtexts               r   r   zSmartQuotes.apply  s{   }}--889>@	 &11%8K !MM22@@//CC""))00n1EF MM))%*;*;< )	ED$ 2 23$++u'8'89 04||EJJ/G @G)'..*/*=*= ?   @H @
 ))*;<D4'<<b9DL(D33D9 
+00777D

 t999MM**22DtK"& 3 ( **..t4 "00),,t=G %('$: E &&w

70CDEQ)	EV 	""((*k  	 K	 &@s   J9 :-K9KKNr4   )r7   r8   r9   r:   r;   r   FixedTextElementSpecialr   imager   mathrawrf   r   r   r   r   r   r   r   r   r   r      s~     ++U]];MM++U]][[%--YY 1 13M G+#<+r   r   c                      e Zd ZdZdZddZy)ValidatezC
    Validate the document tree, report violations as warning.
    iC  c                h   t        | j                  j                  dd      sy | j                  j                         D ]  }	 |j	                  d        y # t
        j                  $ rH}| j                  j                  j                  t        |      |j                  xs |       Y d }~od }~ww xY w)NvalidateF)	recursiver   )rF   r   r#   rE   r   r   ValidationErrorrb   r   r   problematic_element)r   rA   es      r   r   zValidate.apply_  s    t}}--z5AMM))+ 	EDE.	E (( E&&..Fa&;&;&Ct / E EEs   AB1)>B,,B1Nr4   rX   r   r   r   r   r   W  s     Er   r   )r:   
__future__r   __docformat__r   r-   docutilsr   r   docutils.transformsr   docutils.utilsr   r
   r=   rL   rZ   rm   rq   rv   r   r   r   r   r   <module>r      s     #" 	  ! ) &<) <~8i 8(%y %.)Y )6%9 %&)I )#i #Lf+) f+REy Er   