
    <iF5                    N   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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.
- `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dS )
DecorationszD
    Populate a document's decoration element (header, footer).
    i4  returnNonec                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         /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.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_header5   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output_pathr   r   	referenceTexttimestrftimegmtimeappend	paragraph)r   r%   textsourcer'   s        r   r   zDecorations.generate_footer8   s    =) 	("4 	#	'/':	D$ 
()9 
(&
(& C%0FF"01E191A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r   r   )__name__
__module____qualname____doc__default_priorityr   r   r   r    r   r   r
   r
   !   sX          
( 
( 
( 
(  % % % % %r   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  r   boolc                8    t          |t          j                   S r   )
isinstancer   r.   r   nodes     r   not_TextzExposeInternals.not_Texth   s    dEJ////r   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findallrC   getattr)r   rB   attvalues       r   r   zExposeInternals.applyk   s    =!2 	8--dm<< 8 8=1B 8 8C#D#t44E(27[3./8	8 	88 8r   Nr   r>   r6   )r7   r8   r9   r:   r;   rC   r   r    r   r   r=   r=   `   sN          0 0 0 08 8 8 8 8 8r   r=   c                      e Zd ZdZdZddZdS )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\  r   r   c                   g | j         j        | 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   parse_messagestransform_messagesr   sectiontitle)r   messagesloose_messagesrW   s       r   r   zMessages.apply~   s    7T]1 7]57DDDDD 	%m->,?@@@Gu{2'ABBBG~%G24DM,QQQ/MMW$MMMM	% 	%r   Nr6   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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  r   r   c                   g }t          | j                            t          j                            D ]w}|d         | j        j        j        k     rZ|j                            |           |d         D ]7}| j        j	        
                    |d            |                    |           8xt          | j                            t          j                            D ]O}d|v rI|d         |v r?|j                            |t          j        |                                                     P| j                            t          j                  D ]9}d|d         v r-t#          |          dk    r|j                            |           :d S )NlevelidsrefidrS   rT      )tupler   rF   r   system_messagereporterreport_levelrO   remover`   popr2   problematicreplacer.   astextrW   len)r   removed_idsrB   _ids       r   r   zFilterMessages.apply   sq   $-//0DEEFF 	, 	,DG}t}5BBB""4(((; , ,CM%))#t444&&s++++$-//0ABBCC 	E 	ED$4=K#?#?##D%*T[[]]*C*CDDDM))%-88 	) 	)D DO33D		Q""4(((	) 	)r   Nr6   r[   r    r   r   r]   r]      s:          ) ) ) ) ) )r   r]   c                  "    e Zd 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.
    Fip  r   r   c                R    | j         j        D ]}|j        s| xj         |z  c_         d S r   )r   rV   rO   )r   rQ   s     r   r   zTestMessages.apply   s;    =3 	% 	%C: %$	% 	%r   Nr6   )r7   r8   r9   r:   __test__r;   r   r    r   r   rp   rp      s?          H% % % % % %r   rp   c                      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  r   r   c                    | j         j        j        rNt          | j                             t
          j                            D ]}|j                            |           d S d S r   )	r   r%   strip_commentsrc   rF   r   commentrO   rg   rA   s     r   r   zStripComments.apply   sh    =!0 	)dm33EMBBCC ) )""4((((	) 	)) )r   Nr6   r[   r    r   r   rt   rt      s:         
 ) ) ) ) ) )r   rt   c                  &    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  r   r   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 )NrT   )r   r%   strip_elements_with_classesstrip_elementsrc   rF   check_classesrO   rg   strip_classesr   Element
ValueError)r   rB   r~   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+r>   c                |    t          |t          j                  sdS |d         d d          D ]}|| j        v r dS dS )NFrT   T)r@   r   r   r|   )r   rB   r   s      r   r}   z%StripClassesAndElements.check_classes   sV    $.. 	5	?111- 	 	Kd111tt 2ur   Nr6   rJ   )r7   r8   r9   r:   r;   r   r}   r    r   r   ry   ry      sN             &     r   ry   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d	S )SmartQuotesz
    Replace ASCII quotation marks with typographic form.

    Also replace multiple dashes with em-dash/en-dash characters.
    iW  qDer   r   c                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@   rO   literal_nodesstrresub)r   txtnodesrB   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@   rO   r   option_string)rP   txtnodes     r   rR   z%SmartQuotes.apply.<locals>.<listcomp>2  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dictrF   r   TextElementr@   nodes_to_skiprO   r.   get_language_coderj   r   normalize_language_tagr   re   warningaddeducate_tokensr   smartquotes_actionzipclear)r   r   alternativedocument_languagelc_smartquotesrB   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Nr6   )r7   r8   r9   r:   r;   r   FixedTextElementSpecialr   imager   mathrawri   r   r   r   r   r   r    r   r   r   r      s          +U];MM+U][%-Y 13M G+ + + +# # #<+ <+ <+ <+ <+ <+r   r   c                      e Zd ZdZdZddZdS )ValidatezC
    Validate the document tree, report violations as warning.
    iC  r   r   c                H   t          | j        j        dd          sd S | j                                        D ]j}	 |                    d           # t
          j        $ r?}| j        j                            t          |          |j
        p|           Y d }~cd }~ww xY wd S )NvalidateF)	recursiver   )rG   r   r%   rF   r   r   ValidationErrorre   r   r   problematic_element)r   rB   es      r   r   zValidate.apply_  s    t}-z5AA 	FM))++ 	E 	EDE....( E E E&..FFa&;&Ct / E E E E E E E EE	E 	Es   AB 5BBNr6   r[   r    r   r   r   r   W  s@          E E E E E Er   r   )r:   
__future__r   __docformat__r   r/   docutilsr   r   docutils.transformsr   docutils.utilsr   r
   r=   rL   r]   rp   rt   ry   r   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+RE E E E Ey E E E E Er   