
     Ich                     v    d Z dZddlmZmZmZ  G d de          Z G d de          Z G d d	e          Z	d
S )a  
This package contains modules for standard tree transforms available
to Docutils components. Tree transforms serve a variety of purposes:

- To tie up certain syntax-specific "loose ends" that remain after the
  initial parsing of the input plaintext. These transforms are used to
  supplement a limited syntax.

- To automate the internal linking of the document tree (hyperlink
  references, footnote references, etc.).

- To extract useful information from the document tree. These
  transforms may be used to construct (for example) indexes and tables
  of contents.

Each transform is an optional step that a Docutils component may
choose to perform on the parsed document.
reStructuredText    )	languagesApplicationErrorTransformSpecc                       e Zd ZdS )TransformErrorN)__name__
__module____qualname__     <lib/python3.11/site-packages/docutils/transforms/__init__.pyr   r      s          r   r   c                   &    e Zd ZdZdZ	 ddZd ZdS )	Transformz;
    Docutils transform component abstract base class.
    Nc                 x    || _         	 || _        	 t          j        |j        j        |j                  | _        dS )zA
        Initial setup for in-place document transforms.
        N)document	startnoder   get_languagesettingslanguage_codereporterlanguage)selfr   r   s      r   __init__zTransform.__init__*   sF    
 !-"	 ".+X->@ @55r   c                      t          d          )z5Override to apply the transform to the document tree.z"subclass must override this method)NotImplementedError)r   kwargss     r   applyzTransform.apply;   s    !"FGGGr   N)r	   r
   r   __doc__default_priorityr   r   r   r   r   r   r   !   sQ          I6 6 6 6"H H H H Hr   r   c                   @    e Zd ZdZd Zd
dZd Zd
dZd Zd Z	d	 Z
dS )Transformerz
    Stores transforms (`Transform` classes) and applies them to document
    trees.  Also keeps track of components by component type name.
    c                 t    g | _         	 g | _        	 || _        	 g | _        	 d| _        	 i | _        	 d| _        d S )Nr   )
transformsunknown_reference_resolversr   appliedsorted
componentsserialno)r   r   s     r   r   zTransformer.__init__G   sX    	 ,.(I J32	. 	 	r   Nc                     ||j         }|                     |          }| j                            ||d|f           d| _        dS )a+  
        Store a single transform.  Use `priority` to override the default.
        `kwargs` is a dictionary whose contents are passed as keyword
        arguments to the `apply` method of the transform.  This can be used to
        pass application-specific data to the transform instance.
        Nr   )r!   get_priority_stringr%   appendr(   )r   transform_classpriorityr   priority_strings        r   add_transformzTransformer.add_transforma   sX      	8&7H228<<otV<	> 	> 	>r   c                     |D ]:}|                      |j                  }| j                            ||di f           ;d| _        dS )z3Store multiple transforms, with default priorities.Nr   )r,   r!   r%   r-   r(   )r   transform_listr.   r0   s       r   add_transformszTransformer.add_transformso   sb    - 	> 	>O"6602 2OO"" /4<> > > >r   c                     |j         }||j        }|                     |          }| j                            |||i f           d| _        dS )z4Store a transform with an associated `pending` node.Nr   )	transformr!   r,   r%   r-   r(   )r   pendingr/   r.   r0   s        r   add_pendingzTransformer.add_pendingx   s^    !+ 	8&7H228<<ow;	= 	= 	=r   c                 :    | xj         dz  c_         d|| j         fz  S )z
        Return a string, `priority` combined with `self.serialno`.

        This ensures FIFO order on transforms with identical priority.
           z	%03d-%03d)r*   )r   r/   s     r   r,   zTransformer.get_priority_string   s&     	h666r   c                 L   |D ];}||                      |                                           || j        |j        <   <d| _        g }|D ]}|                    |j                   t	          d |D                       }| j                            d |D                        dS )z
        Store each component's default transforms, with default priorities.
        Also, store components by type name in a mapping for later lookup.
        Nr   c              3   (   K   | ]}|j         |fV  d S r   )r/   .0fs     r   	<genexpr>z7Transformer.populate_from_components.<locals>.<genexpr>   s(      UUAQUUUUUUr   c              3   &   K   | ]}|d          V  dS )r:   Nr   r=   s     r   r@   z7Transformer.populate_from_components.<locals>.<genexpr>   s&      /M/M!/M/M/M/M/M/Mr   )r4   get_transformsr)   component_typer(   extendr&   )r   r)   	componentr&   idecorated_lists         r   populate_from_componentsz$Transformer.populate_from_components   s    
 $ 	B 	BI 	 8 8 : :;;;8ADOI455 ')# 	N 	NA'..q/LMMMMUU9TUUUUU(///M/Mn/M/M/MMMMMMr   c                    | j         j                            | j         j                   | j        r| j        s9| j                                         | j                                         d| _        | j                                        \  }}}} || j         |          } |j	        di | | j
                            ||||f           | j        dS dS )z6Apply all of the stored transforms, in priority order.r:   )r   Nr   )r   r   attach_observernote_transform_messager%   r(   sortreversepopr   r'   r-   )r   r/   r.   r7   r   r6   s         r   apply_transformszTransformer.apply_transforms   s    ..M0	2 	2 	2o 		N;  $$&&&'')))9=9L9L9N9N6How'IIIIIO%%f%%%L?GV LMMM o 		N 		N 		N 		N 		Nr   r   )r	   r
   r   r    r   r1   r4   r8   r,   rH   rO   r   r   r   r#   r#   @   s         
  4        7 7 7N N N(N N N N Nr   r#   N)
r    __docformat__docutilsr   r   r   r   objectr   r#   r   r   r   <module>rS      s   
 & # @ ? ? ? ? ? ? ? ? ? - , , , ,% , , ,H H H H H H H H>lN lN lN lN lN- lN lN lN lN lNr   