o
    Z2h.                     @  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rFd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                   @  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   f/home/skpark/git/infrasmart_work/infrasmart/venv/lib/python3.10/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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[edUd*d+ZejdVd-d+ZedUd.d/ZejdVd0d/ZedUd1d2ZejdVd3d2ZedWd5d6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dGdH ZejdIdH ZedJdK ZejdLdK ZedXdNdOZejdYdQdOZedRdS Z e jdTdS Z dS )Z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], None]_insert_sectPrzCallable[[], None]_remove_pStyle_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/      r0      r1      zCT_Ind | Noneindr2      r3   #   returnr   c                 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_indentu   s   
zCT_PPr.first_line_indentvaluec                 C  sT   | j d u r|d u rd S |  }d  |_|_|d u rd S |dk r%| |_d S ||_d S )Nr   )r@   r$   r   r   rD   rF   r@   r   r   r   rE      s   
c                 C     | j }|du r	dS |jS )z6The value of `w:ind/@w:left` or |None| if not present.N)r@   r   rD   r@   r   r   r   ind_left      zCT_PPr.ind_leftc                 C  (   |d u r| j d u rd S |  }||_d S N)r@   r$   r   rG   r   r   r   rJ         
c                 C  rH   )z7The value of `w:ind/@w:right` or |None| if not present.N)r@   r   rI   r   r   r   	ind_right   rK   zCT_PPr.ind_rightc                 C  rL   rM   )r@   r$   r   rG   r   r   r   rO      rN   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"   rD   r   r   r   jc_val   s   zCT_PPr.jc_valc                 C  "   |d u r
|    d S ||  _d S rM   )
_remove_jcget_or_add_jcr"   rD   rF   r   r   r   rS      s   c                 C  rH   )z7The value of `keepLines/@val` or |None| if not present.N)	keepLinesr"   )rD   rX   r   r   r   keepLines_val   rK   zCT_PPr.keepLines_valc                 C  rT   rM   )_remove_keepLinesget_or_add_keepLinesr"   rW   r   r   r   rY         c                 C  rH   )z6The value of `keepNext/@val` or |None| if not present.N)keepNextr"   )rD   r]   r   r   r   keepNext_val   rK   zCT_PPr.keepNext_valc                 C  rT   rM   )_remove_keepNextget_or_add_keepNextr"   rW   r   r   r   r^      r\   c                 C  rH   )z=The value of `pageBreakBefore/@val` or |None| if not present.N)pageBreakBeforer"   )rD   ra   r   r   r   pageBreakBefore_val   rK   zCT_PPr.pageBreakBefore_valc                 C  rT   rM   )_remove_pageBreakBeforeget_or_add_pageBreakBeforer"   rW   r   r   r   rb      r\   c                 C  rH   )z;The value of `w:spacing/@w:after` or |None| if not present.N)spacingafterrD   re   r   r   r   spacing_after   rK   zCT_PPr.spacing_afterc                 C  $   |d u r| j d u rd S ||  _d S rM   )re   get_or_add_spacingrf   rW   r   r   r   rh         c                 C  rH   )z<The value of `w:spacing/@w:before` or |None| if not present.N)re   beforerg   r   r   r   spacing_before   rK   zCT_PPr.spacing_beforec                 C  ri   rM   )re   rj   rl   rW   r   r   r   rm     rk   c                 C  rH   )z:The value of `w:spacing/@w:line` or |None| if not present.N)re   linerg   r   r   r   spacing_line  rK   zCT_PPr.spacing_linec                 C  ri   rM   )re   rj   rn   rW   r   r   r   ro     rk   c                 C  s4   | j }|du r	dS |j}|du r|jdurt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)re   lineRulern   r   MULTIPLE)rD   re   rp   r   r   r   spacing_lineRule  s   
zCT_PPr.spacing_lineRulec                 C  ri   rM   )re   rj   rp   rW   r   r   r   rr   '  rk   
str | Nonec                 C  rH   )zGString contained in `./w:pStyle/@val`, or None if child is not present.N)r7   r"   )rD   r7   r   r   r   style-  rK   zCT_PPr.stylert   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"   )rD   rt   r7   r   r   r   rt   5  s
   
c                 C  rH   )z:The value of `widowControl/@val` or |None| if not present.N)widowControlr"   )rD   ru   r   r   r   widowControl_valA  rK   zCT_PPr.widowControl_valc                 C  rT   rM   )_remove_widowControlget_or_add_widowControlr"   rW   r   r   r   rv   I  r\   )rC   r   )rF   r   )rC   rP   )rC   rs   )rt   rs   )!r   r   r   r   r   _tag_seqr   r7   r]   rX   ra   ru   numPrtabsre   r@   rQ   sectPrpropertyrE   setterrJ   rO   rS   rY   r^   rb   rh   rm   ro   rr   rt   rv   r   r   r   r   r#   5   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
   rf   rl   r	   rn   r   rp   r   r   r   r   r   Q  s    


r   c                   @  sX   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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   posrC   strc                 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   rR   r   r   r   __str__l  s   zCT_TabStop.__str__N)rC   r   )r   r   r   r   r   r   r"   r   r   r   SPACESr   r	   r   r   r   r   r   r   r   [  s   
 r   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.)_new_tabr   r"   r   tab_lstaddpreviousappend)rD   r   alignr   new_tabtabr   r   r   insert_tab_in_orderz  s   


zCT_TabStops.insert_tab_in_orderN)r   r   r   r   r   r   r   r   r   r   r   r   u  s    r   N) r   
__future__r   typingr   r   docx.enum.textr   r   r   r   docx.oxml.simpletypesr	   r
   docx.oxml.xmlchemyr   r   r   r   r   docx.sharedr   docx.oxml.sectionr   docx.oxml.sharedr   r   r    r#   r   r   r   r   r   r   r   <module>   s$      
