a
    ]j/                     @  s   d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZ erdd	lmZ dd
lmZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ dS )z@Custom element classes related to paragraph properties (CT_PPr).    )annotations)TYPE_CHECKINGCallable)WD_ALIGN_PARAGRAPHWD_LINE_SPACINGWD_TAB_ALIGNMENTWD_TAB_LEADER)CT_DecimalNumber)ST_SignedTwipsMeasureST_TwipsMeasure)BaseOxmlElement	OneOrMoreOptionalAttributeRequiredAttribute	ZeroOrOne)Length)	CT_SectPr)	CT_Stringc                   @  sZ   e Zd ZU dZedeZded< edeZded< ede	Z
ded< ed	e	Zded
< dS )CT_Indz6``<w:ind>`` element, specifying paragraph indentation.zw:leftLength | Noneleftzw:rightrightzw:firstLine	firstLinez	w:hanginghangingN)__name__
__module____qualname____doc__r   r
   r   __annotations__r   r   r   r    r   r   Q/var/www/html/assistant/venv/lib/python3.9/site-packages/docx/oxml/text/parfmt.pyr      s   
r   c                   @  s$   e Zd ZU dZedeZded< dS )CT_Jcz7``<w:jc>`` element, specifying paragraph justification.w:valr   valN)r   r   r   r   r   r   r#   r   r   r   r   r    r!   .   s   
r!   c                   @  s  e Zd ZU dZded< ded< ded< ded	< d
ed< d
ed< dZededd dZded< ededd dZededd dZ	ededd dZ
ededd dZededd dZededd dZed ed!d dZed"ed#d dZd$ed%< ed&ed'd dZed(ed)d dZd*ed+< ed,ed-d dZ[ed.d/d0d1Zejd.d2d3d1Zed.d/d4d5Zejd.d2d6d5Zed.d/d7d8Zejd.d2d9d8Zed:d/d;d<Zejd=d< Zed>d? Zejd@d? ZedAdB ZejdCdB ZedDdE ZejdFdE ZedGdH ZejdIdH ZedJdK ZejdLdK ZedMdN ZejdOdN ZedPdQ ZejdRdQ ZedSd/dTdUZ e jdSdVdWdUZ edXdY Z!e!jdZdY Z!dS )[CT_PPrz?``<w:pPr>`` element, containing the properties for a paragraph.zCallable[[], CT_Ind]get_or_add_indzCallable[[], CT_String]get_or_add_pStylezCallable[[], CT_SectPr]Zget_or_add_sectPrzCallable[[CT_SectPr], None]Z_insert_sectPrzCallable[[], None]_remove_pStyleZ_remove_sectPr)$w:pStyle
w:keepNextw:keepLinesw:pageBreakBeforez	w:framePrw:widowControlw:numPrzw:suppressLineNumberszw:pBdrzw:shdw:tabszw:suppressAutoHyphensz	w:kinsokuz
w:wordWrapzw:overflowPunctzw:topLinePunctzw:autoSpaceDEzw:autoSpaceDNzw:bidizw:adjustRightIndzw:snapToGrid	w:spacingw:indzw:contextualSpacingzw:mirrorIndentszw:suppressOverlapw:jczw:textDirectionzw:textAlignmentzw:textboxTightWrapw:outlineLvlzw:divIdz
w:cnfStylezw:rPrw:sectPrzw:pPrChanger(      N
successorszCT_String | NonepStyler)      r*      r+      r,      r-      r.      r/      r0      zCT_Ind | Noneindr1      r2      r	   
outlineLvlr3   #   r   returnc                 C  s@   | j }|du rdS |j}|dur*t| S |j}|du r<dS |S )zA |Length| value calculated from the values of `w:ind/@w:firstLine` and
        `w:ind/@w:hanging`.

        Returns |None| if the `w:ind` child is not present.
        N)r@   r   r   r   )selfr@   r   r   r   r   r    first_line_indentz   s    
zCT_PPr.first_line_indent)valuec                 C  sR   | j d u r|d u rd S |  }d  |_|_|d u r6d S |dk rH| |_n||_d S )Nr   )r@   r%   r   r   rG   rI   r@   r   r   r    rH      s    
c                 C  s   | j }|du rdS |jS )z6The value of `w:ind/@w:left` or |None| if not present.N)r@   r   rG   r@   r   r   r    ind_left   s    zCT_PPr.ind_leftc                 C  s(   |d u r| j d u rd S |  }||_d S N)r@   r%   r   rJ   r   r   r    rL      s    c                 C  s   | j }|du rdS |jS )z7The value of `w:ind/@w:right` or |None| if not present.N)r@   r   rK   r   r   r    	ind_right   s    zCT_PPr.ind_rightc                 C  s(   |d u r| j d u rd S |  }||_d S rM   )r@   r%   r   rJ   r   r   r    rN      s    zWD_ALIGN_PARAGRAPH | Nonec                 C  s   | j dur| j jS dS )z=Value of the `<w:jc>` child element or |None| if not present.N)jcr#   rG   r   r   r    jc_val   s    zCT_PPr.jc_valc                 C  s"   |d u r|    d S ||  _d S rM   )Z
_remove_jcZget_or_add_jcr#   rG   rI   r   r   r    rQ      s    c                 C  s   | j }|du rdS |jS )z7The value of `keepLines/@val` or |None| if not present.N)	keepLinesr#   )rG   rS   r   r   r    keepLines_val   s    zCT_PPr.keepLines_valc                 C  s    |d u r|    n
||  _d S rM   )Z_remove_keepLinesZget_or_add_keepLinesr#   rR   r   r   r    rT      s    
c                 C  s   | j }|du rdS |jS )z6The value of `keepNext/@val` or |None| if not present.N)keepNextr#   )rG   rU   r   r   r    keepNext_val   s    zCT_PPr.keepNext_valc                 C  s    |d u r|    n
||  _d S rM   )Z_remove_keepNextZget_or_add_keepNextr#   rR   r   r   r    rV      s    
c                 C  s   | j }|du rdS |jS )z=The value of `pageBreakBefore/@val` or |None| if not present.N)pageBreakBeforer#   )rG   rW   r   r   r    pageBreakBefore_val   s    zCT_PPr.pageBreakBefore_valc                 C  s    |d u r|    n
||  _d S rM   )Z_remove_pageBreakBeforeZget_or_add_pageBreakBeforer#   rR   r   r   r    rX      s    
c                 C  s   | j }|du rdS |jS )z;The value of `w:spacing/@w:after` or |None| if not present.N)spacingafterrG   rY   r   r   r    spacing_after   s    zCT_PPr.spacing_afterc                 C  s$   |d u r| j d u rd S ||  _d S rM   )rY   get_or_add_spacingrZ   rR   r   r   r    r\      s    c                 C  s   | j }|du rdS |jS )z<The value of `w:spacing/@w:before` or |None| if not present.N)rY   beforer[   r   r   r    spacing_before   s    zCT_PPr.spacing_beforec                 C  s$   |d u r| j d u rd S ||  _d S rM   )rY   r]   r^   rR   r   r   r    r_     s    c                 C  s   | j }|du rdS |jS )z:The value of `w:spacing/@w:line` or |None| if not present.N)rY   liner[   r   r   r    spacing_line  s    zCT_PPr.spacing_linec                 C  s$   |d u r| j d u rd S ||  _d S rM   )rY   r]   r`   rR   r   r   r    ra     s    c                 C  s4   | j }|du rdS |j}|du r0|jdur0tjS |S )au  The value of `w:spacing/@w:lineRule` as a member of the :ref:`WdLineSpacing`
        enumeration.

        Only the `MULTIPLE`, `EXACTLY`, and `AT_LEAST` members are used. It is the
        responsibility of the client to calculate the use of `SINGLE`, `DOUBLE`, and
        `MULTIPLE` based on the value of `w:spacing/@w:line` if that behavior is
        desired.
        N)rY   lineRuler`   r   ZMULTIPLE)rG   rY   rb   r   r   r    spacing_lineRule  s    
zCT_PPr.spacing_lineRulec                 C  s$   |d u r| j d u rd S ||  _d S rM   )rY   r]   rb   rR   r   r   r    rc   ,  s    z
str | Nonec                 C  s   | j }|du rdS |jS )zGString contained in `./w:pStyle/@val`, or None if child is not present.N)r7   r#   )rG   r7   r   r   r    style2  s    zCT_PPr.style)rd   c                 C  s&   |du r|    dS |  }||_dS )zSet `./w:pStyle/@val` `style`, adding a new element if necessary.

        If `style` is |None|, remove `./w:pStyle` when present.
        N)r'   r&   r#   )rG   rd   r7   r   r   r    rd   :  s
    c                 C  s   | j }|du rdS |jS )z:The value of `widowControl/@val` or |None| if not present.N)widowControlr#   )rG   re   r   r   r    widowControl_valF  s    zCT_PPr.widowControl_valc                 C  s    |d u r|    n
||  _d S rM   )Z_remove_widowControlZget_or_add_widowControlr#   rR   r   r   r    rf   N  s    
)"r   r   r   r   r   Z_tag_seqr   r7   rU   rS   rW   re   ZnumPrtabsrY   r@   rO   rC   ZsectPrpropertyrH   setterrL   rN   rQ   rT   rV   rX   r\   r_   ra   rc   rd   rf   r   r   r   r    r$   6   s   
&















r$   c                   @  s8   e Zd ZdZedeZedeZedeZ	ede
ZdS )
CT_Spacingzk``<w:spacing>`` element, specifying paragraph spacing attributes such as space
    before and line spacing.zw:afterzw:beforezw:linez
w:lineRuleN)r   r   r   r   r   r   rZ   r^   r
   r`   r   rb   r   r   r   r    rj   V  s
   


rj   c                   @  s\   e Zd ZU dZedeZded< ede	e	j
dZded< ed	eZd
ed< ddddZdS )
CT_TabStopz`<w:tab>` element, representing an individual tab stop.

    Overloaded to use for a tab-character in a run, which also uses the w:tab tag but
    only needs a __str__ method.
    r"   r   r#   zw:leader)defaultzWD_TAB_LEADER | Noneleaderzw:posr   posstrrE   c                 C  s   dS )zText equivalent of a `w:tab` element appearing in a run.

        Allows text of run inner-content to be accessed consistently across all text
        inner-content.
        	r   rP   r   r   r    __str__q  s    zCT_TabStop.__str__N)r   r   r   r   r   r   r#   r   r   r   ZSPACESrm   r
   rn   rq   r   r   r   r    rk   `  s   
rk   c                   @  s$   e Zd ZdZedddZdd ZdS )CT_TabStopszC``<w:tabs>`` element, container for a sorted sequence of tab stops.zw:tabr   r5   c                 C  sV   |   }|||  |_|_|_| jD ]"}|j|jk r$|| |  S q$| | |S )z<Insert a newly created `w:tab` child element in `pos` order.)Z_new_tabrn   r#   rm   Ztab_lstZaddpreviousappend)rG   rn   alignrm   Znew_tabtabr   r   r    insert_tab_in_order  s    



zCT_TabStops.insert_tab_in_orderN)r   r   r   r   r   ru   rv   r   r   r   r    rr   z  s   rr   N)!r   
__future__r   typingr   r   Zdocx.enum.textr   r   r   r   Zdocx.oxml.sharedr	   Zdocx.oxml.simpletypesr
   r   Zdocx.oxml.xmlchemyr   r   r   r   r   Zdocx.sharedr   Zdocx.oxml.sectionr   r   r   r!   r$   rj   rk   rr   r   r   r   r    <module>   s$     "
