B
    j6[)                 @   s   d 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 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 )zB
Custom element classes related to paragraph properties (CT_PPr).
   )WD_ALIGN_PARAGRAPHWD_LINE_SPACINGWD_TAB_ALIGNMENTWD_TAB_LEADER)Length   )ST_SignedTwipsMeasureST_TwipsMeasure)BaseOxmlElement	OneOrMoreOptionalAttributeRequiredAttribute	ZeroOrOnec               @   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_Indz@
    ``<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   G/var/www/html/venv/lib/python3.7/site-packages/docx/oxml/text/parfmt.pyr      s
   


r   c               @   s   e Zd ZdZedeZdS )CT_JczA
    ``<w:jc>`` element, specifying paragraph justification.
    zw:valN)r   r   r   r   r   r   valr   r   r   r   r      s   r   c               @   sD  e Zd ZdZ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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% 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. Zejd/d. Zed0d1 Zejd2d1 Zed3d4 Zejd5d4 Zed6d7 Zejd8d7 Zed9d: Zejd;d: Zed<d= Zejd>d= Zed?d@ ZejdAd@ ZdS )BCT_PPrzI
    ``<w:pPr>`` element, containing the properties for a paragraph.
    )$zw:pStylez
w:keepNextzw:keepLineszw:pageBreakBeforez	w:framePrzw:widowControlzw:numPrzw:suppressLineNumberszw:pBdrzw:shdzw:tabszw:suppressAutoHyphensz	w:kinsokuz
w:wordWrapzw:overflowPunctzw:topLinePunctzw:autoSpaceDEzw:autoSpaceDNzw:bidizw:adjustRightIndzw:snapToGridz	w:spacingzw:indzw:contextualSpacingzw:mirrorIndentszw:suppressOverlapzw:jczw:textDirectionzw:textAlignmentzw:textboxTightWrapzw:outlineLvlzw:divIdz
w:cnfStylezw:rPrzw:sectPrzw:pPrChangezw:pStyle   N)
successorsz
w:keepNextr   zw:keepLinesr   zw:pageBreakBefore   zw:widowControl   zw:numPr   zw:tabs   z	w:spacing   zw:ind   zw:jc   zw:sectPr#   c             C   s@   | j }|dkrdS |j}|dk	r*t| S |j}|dkr<dS |S )z
        A |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_indent?   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 )N    )r'   get_or_add_indr   r   )r(   valuer'   r   r   r   r)   Q   s    
c             C   s   | j }|dkrdS |jS )zH
        The 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   )r(   r,   r'   r   r   r   r-   h   s    c             C   s   | j }|dkrdS |jS )zI
        The value of `w:ind/@w:right` or |None| if not present.
        N)r'   r   )r(   r'   r   r   r   	ind_righto   s    zCT_PPr.ind_rightc             C   s(   |d kr| j d krd S |  }||_d S )N)r'   r+   r   )r(   r,   r'   r   r   r   r.   y   s    c             C   s   | j }|dkrdS |jS )zU
        The value of the ``<w:jc>`` child element or |None| if not present.
        N)jcr   )r(   r/   r   r   r   jc_val   s    zCT_PPr.jc_valc             C   s"   |d kr|    d S ||  _d S )N)Z
_remove_jcZget_or_add_jcr   )r(   r,   r   r   r   r0      s    c             C   s   | j }|dkrdS |jS )zI
        The value of `keepLines/@val` or |None| if not present.
        N)	keepLinesr   )r(   r1   r   r   r   keepLines_val   s    zCT_PPr.keepLines_valc             C   s    |d kr|    n
||  _d S )N)Z_remove_keepLinesZget_or_add_keepLinesr   )r(   r,   r   r   r   r2      s    
c             C   s   | j }|dkrdS |jS )zH
        The value of `keepNext/@val` or |None| if not present.
        N)keepNextr   )r(   r3   r   r   r   keepNext_val   s    zCT_PPr.keepNext_valc             C   s    |d kr|    n
||  _d S )N)Z_remove_keepNextZget_or_add_keepNextr   )r(   r,   r   r   r   r4      s    
c             C   s   | j }|dkrdS |jS )zO
        The value of `pageBreakBefore/@val` or |None| if not present.
        N)pageBreakBeforer   )r(   r5   r   r   r   pageBreakBefore_val   s    zCT_PPr.pageBreakBefore_valc             C   s    |d kr|    n
||  _d S )N)Z_remove_pageBreakBeforeZget_or_add_pageBreakBeforer   )r(   r,   r   r   r   r6      s    
c             C   s   | j }|dkrdS |jS )zM
        The value of `w:spacing/@w:after` or |None| if not present.
        N)spacingafter)r(   r7   r   r   r   spacing_after   s    zCT_PPr.spacing_afterc             C   s$   |d kr| j d krd S ||  _d S )N)r7   get_or_add_spacingr8   )r(   r,   r   r   r   r9      s    c             C   s   | j }|dkrdS |jS )zN
        The value of `w:spacing/@w:before` or |None| if not present.
        N)r7   before)r(   r7   r   r   r   spacing_before   s    zCT_PPr.spacing_beforec             C   s$   |d kr| j d krd S ||  _d S )N)r7   r:   r;   )r(   r,   r   r   r   r<      s    c             C   s   | j }|dkrdS |jS )zL
        The value of `w:spacing/@w:line` or |None| if not present.
        N)r7   line)r(   r7   r   r   r   spacing_line   s    zCT_PPr.spacing_linec             C   s$   |d kr| j d krd S ||  _d S )N)r7   r:   r=   )r(   r,   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)r7   lineRuler=   r   ZMULTIPLE)r(   r7   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 )N)r7   r:   r?   )r(   r,   r   r   r   r@     s    c             C   s   | j }|dkrdS |jS )zg
        String contained in <w:pStyle> child, or None if that element is not
        present.
        N)pStyler   )r(   rA   r   r   r   style  s    zCT_PPr.stylec             C   s&   |dkr|    dS |  }||_dS )z
        Set val attribute of <w:pStyle> child element to *style*, adding a
        new element if necessary. If *style* is |None|, remove the <w:pStyle>
        element if present.
        N)Z_remove_pStyleZget_or_add_pStyler   )r(   rB   rA   r   r   r   rB     s
    c             C   s   | j }|dkrdS |jS )zL
        The value of `widowControl/@val` or |None| if not present.
        N)widowControlr   )r(   rC   r   r   r   widowControl_val#  s    zCT_PPr.widowControl_valc             C   s    |d kr|    n
||  _d S )N)Z_remove_widowControlZget_or_add_widowControlr   )r(   r,   r   r   r   rD   -  s    
) r   r   r   r   Z_tag_seqr   rA   r3   r1   r5   rC   ZnumPrtabsr7   r'   r/   ZsectPrpropertyr)   setterr-   r.   r0   r2   r4   r6   r9   r<   r>   r@   rB   rD   r   r   r   r   r   #   sP   










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_Spacingzu
    ``<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	   r8   r;   r   r=   r   r?   r   r   r   r   rH   5  s
   


rH   c               @   s4   e Zd ZdZedeZedeej	dZ
edeZdS )
CT_TabStopzC
    ``<w:tab>`` element, representing an individual tab stop.
    zw:valzw:leader)defaultzw:posN)r   r   r   r   r   r   r   r   r   ZSPACESleaderr   posr   r   r   r   rI   @  s
   
rI   c               @   s$   e Zd ZdZedddZdd ZdS )CT_TabStopszM
    ``<w:tabs>`` element, container for a sorted sequence of tab stops.
    zw:tabr   )r   c             C   sV   |   }|||  |_|_|_x(| jD ]}|j|jk r&|| |S q&W | | |S )zN
        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_orderQ  s    

zCT_TabStops.insert_tab_in_orderN)r   r   r   r   r   rO   rP   r   r   r   r   rM   K  s   rM   N)r   Z	enum.textr   r   r   r   sharedr   Zsimpletypesr   r	   Zxmlchemyr
   r   r   r   r   r   r   r   rH   rI   rM   r   r   r   r   <module>   s   
  