U
    cqe+                     @  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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)ST_SignedTwipsMeasureST_TwipsMeasure)BaseOxmlElement	OneOrMoreOptionalAttributeRequiredAttribute	ZeroOrOne)Length)	CT_SectPr)	CT_Stringc                   @  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_Indz6``<w:ind>`` element, specifying paragraph indentation.zw:leftzw:rightzw:firstLinez	w:hangingN)__name__
__module____qualname____doc__r   r	   leftrightr
   	firstLinehanging r   r   9/tmp/pip-unpacked-wheel-gx5hpqp3/docx/oxml/text/parfmt.pyr      s
   


r   c                   @  s   e Zd ZdZedeZdS )CT_Jcz7``<w:jc>`` element, specifying paragraph justification.w:valN)r   r   r   r   r   r   valr   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	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ed ed!d dZed"ed#d dZ[ed$d% Zejd&d% Zed'd( Zejd)d( Zed*d+ Zejd,d+ Zed-d.d/d0Zejd1d0 Zed2d3 Zejd4d3 Zed5d6 Zejd7d6 Zed8d9 Zejd:d9 Ze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dGd.dHdIZejdGdJdKdIZedLdM Z e jdNdM Z dS )OCT_PPrz?``<w:pPr>`` element, containing the properties for a paragraph.zCallable[[], CT_String]get_or_add_pStylez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:textboxTightWrapzw:outlineLvlzw:divIdz
w:cnfStylezw:rPrw:sectPrzw:pPrChanger$      N
successorszCT_String | NonepStyler%      r&      r'      r(      r)      r*      r+      r,      r-      r.   #   c                 C  s@   | j }|dkrdS |j}|dk	r*t| S |j}|dk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)indr   r   r   )selfr=   r   r   r   r   r   first_line_indenth   s    
zCT_PPr.first_line_indentc                 C  sR   | j d kr|d krd S |  }d  |_|_|d kr6d S |dk rH| |_n||_d S )Nr   )r=   get_or_add_indr   r   r>   valuer=   r   r   r   r?   z   s    
c                 C  s   | j }|dkrdS |jS )z6The value of `w:ind/@w:left` or |None| if not present.N)r=   r   r>   r=   r   r   r   ind_left   s    zCT_PPr.ind_leftc                 C  s(   |d kr| j d krd S |  }||_d S N)r=   r@   r   rA   r   r   r   rD      s    c                 C  s   | j }|dkrdS |jS )z7The value of `w:ind/@w:right` or |None| if not present.N)r=   r   rC   r   r   r   	ind_right   s    zCT_PPr.ind_rightc                 C  s(   |d kr| j d krd S |  }||_d S rE   )r=   r@   r   rA   r   r   r   rF      s    zWD_ALIGN_PARAGRAPH | Nonereturnc                 C  s   | j dk	r| j jS dS )z=Value of the `<w:jc>` child element or |None| if not present.N)jcr    r>   r   r   r   jc_val   s    zCT_PPr.jc_valc                 C  s"   |d kr|    d S ||  _d S rE   )Z
_remove_jcZget_or_add_jcr    r>   rB   r   r   r   rK      s    c                 C  s   | j }|dkrdS |jS )z7The value of `keepLines/@val` or |None| if not present.N)	keepLinesr    )r>   rM   r   r   r   keepLines_val   s    zCT_PPr.keepLines_valc                 C  s    |d kr|    n
||  _d S rE   )Z_remove_keepLinesZget_or_add_keepLinesr    rL   r   r   r   rN      s    
c                 C  s   | j }|dkrdS |jS )z6The value of `keepNext/@val` or |None| if not present.N)keepNextr    )r>   rO   r   r   r   keepNext_val   s    zCT_PPr.keepNext_valc                 C  s    |d kr|    n
||  _d S rE   )Z_remove_keepNextZget_or_add_keepNextr    rL   r   r   r   rP      s    
c                 C  s   | j }|dkrdS |jS )z=The value of `pageBreakBefore/@val` or |None| if not present.N)pageBreakBeforer    )r>   rQ   r   r   r   pageBreakBefore_val   s    zCT_PPr.pageBreakBefore_valc                 C  s    |d kr|    n
||  _d S rE   )Z_remove_pageBreakBeforeZget_or_add_pageBreakBeforer    rL   r   r   r   rR      s    
c                 C  s   | j }|dkrdS |jS )z;The value of `w:spacing/@w:after` or |None| if not present.N)spacingafterr>   rS   r   r   r   spacing_after   s    zCT_PPr.spacing_afterc                 C  s$   |d kr| j d krd S ||  _d S rE   )rS   get_or_add_spacingrT   rL   r   r   r   rV      s    c                 C  s   | j }|dkrdS |jS )z<The value of `w:spacing/@w:before` or |None| if not present.N)rS   beforerU   r   r   r   spacing_before   s    zCT_PPr.spacing_beforec                 C  s$   |d kr| j d krd S ||  _d S rE   )rS   rW   rX   rL   r   r   r   rY      s    c                 C  s   | j }|dkrdS |jS )z:The value of `w:spacing/@w:line` or |None| if not present.N)rS   linerU   r   r   r   spacing_line   s    zCT_PPr.spacing_linec                 C  s$   |d kr| j d krd S ||  _d S rE   )rS   rW   rZ   rL   r   r   r   r[     s    c                 C  s4   | j }|dkrdS |j}|dkr0|jdk	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)rS   lineRulerZ   r   ZMULTIPLE)r>   rS   r\   r   r   r   spacing_lineRule  s    
zCT_PPr.spacing_lineRulec                 C  s$   |d kr| j d krd S ||  _d S rE   )rS   rW   r\   rL   r   r   r   r]     s    z
str | Nonec                 C  s   | j }|dkrdS |jS )zGString contained in `./w:pStyle/@val`, or None if child is not present.N)r2   r    )r>   r2   r   r   r   style   s    zCT_PPr.style)r^   c                 C  s&   |dk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    )r>   r^   r2   r   r   r   r^   (  s
    c                 C  s   | j }|dkrdS |jS )z:The value of `widowControl/@val` or |None| if not present.N)widowControlr    )r>   r_   r   r   r   widowControl_val4  s    zCT_PPr.widowControl_valc                 C  s    |d kr|    n
||  _d S rE   )Z_remove_widowControlZget_or_add_widowControlr    rL   r   r   r   r`   <  s    
)!r   r   r   r   __annotations__Z_tag_seqr   r2   rO   rM   rQ   r_   ZnumPrtabsrS   r=   rI   ZsectPrpropertyr?   setterrD   rF   rK   rN   rP   rR   rV   rY   r[   r]   r^   r`   r   r   r   r   r!   +   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
   rT   rX   r	   rZ   r   r\   r   r   r   r   re   D  s
   


re   c                   @  sB   e Zd ZdZedeZedeej	dZ
edeZ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   zw:leader)defaultzw:posstrrG   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   rJ   r   r   r   __str__Y  s    zCT_TabStop.__str__N)r   r   r   r   r   r   r    r   r   ZSPACESleaderr	   posrj   r   r   r   r   rf   N  s
   

rf   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   r0   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_tabrl   r    rk   Ztab_lstZaddpreviousappend)r>   rl   Zalignrk   Znew_tabtabr   r   r   insert_tab_in_orderg  s    



zCT_TabStops.insert_tab_in_orderN)r   r   r   r   r   ro   rp   r   r   r   r   rm   b  s   rm   N) r   
__future__r   typingr   r   Zdocx.enum.textr   r   r   r   Zdocx.oxml.simpletypesr	   r
   Zdocx.oxml.xmlchemyr   r   r   r   r   Zdocx.sharedr   Zdocx.oxml.sectionr   Zdocx.oxml.sharedr   r   r   r!   re   rf   rm   r   r   r   r   <module>   s"   	  
