B
    T*                 @   s   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
mZmZ dd 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 )z3
Custom element classes related to the styles part
   )WD_STYLE_TYPE   )ST_DecimalNumberST_OnOff	ST_String)BaseOxmlElementOptionalAttributeRequiredAttribute
ZeroOrMore	ZeroOrOnec             C   s*   ddddddddd	d
d
 | | ddS )zv
    Return the style id corresponding to *name*, taking into account
    special-case names such as 'Heading 1'.
    ZCaptionZHeading1ZHeading2ZHeading3ZHeading4ZHeading5ZHeading6ZHeading7ZHeading8ZHeading9)
Zcaptionz	heading 1z	heading 2z	heading 3z	heading 4z	heading 5z	heading 6z	heading 7z	heading 8z	heading 9  )getreplace)name r   B/var/www/html/venv/lib/python3.7/site-packages/docx/oxml/styles.pystyleId_from_name   s    r   c               @   sp   e Zd ZdZedddZedeZede	Z
ede	Zede	Zed	eZed
e	Zdd Zdd Zdd ZdS )CT_LatentStylesz
    `w:latentStyles` element, defining behavior defaults for latent styles
    and containing `w:lsdException` child elements that each override those
    defaults for a named latent style.
    zw:lsdExceptionr   )
successorszw:countzw:defLockedStatezw:defQFormatzw:defSemiHiddenzw:defUIPriorityzw:defUnhideWhenUsedc             C   s   t | |}|dkrdS |S )zr
        Return the boolean value of the attribute having *attr_name*, or
        |False| if not present.
        NF)getattr)self	attr_namevaluer   r   r   	bool_prop1   s    
zCT_LatentStyles.bool_propc             C   s   |  d| }|sdS |d S )zb
        Return the `w:lsdException` child having *name*, or |None| if not
        found.
        zw:lsdException[@w:name="%s"]N    )xpath)r   r   foundr   r   r   get_by_name;   s    zCT_LatentStyles.get_by_namec             C   s   t | |t| dS )zI
        Set the on/off attribute having *attr_name* to *value*.
        N)setattrbool)r   r   r   r   r   r   set_bool_propE   s    zCT_LatentStyles.set_bool_propN)__name__
__module____qualname____doc__r
   ZlsdExceptionr   r   countr   ZdefLockedStateZ
defQFormatZdefSemiHiddenZdefUIPriorityZdefUnhideWhenUsedr   r   r!   r   r   r   r   r   "   s   







r   c               @   sd   e Zd ZdZedeZedeZ	edeZ
edeZedeZedeZdd	 Zd
d Zdd ZdS )CT_LsdExceptionzl
    ``<w:lsdException>`` element, defining override visibility behaviors for
    a named latent style.
    zw:lockedzw:namez	w:qFormatzw:semiHiddenzw:uiPriorityzw:unhideWhenUsedc             C   s   |   |  dS )zM
        Remove this `w:lsdException` element from the XML document.
        N)	getparentremove)r   r   r   r   deleteX   s    zCT_LsdException.deletec             C   s
   t | |S )zq
        Return the boolean value of the attribute having *attr_name*, or
        |None| if not present.
        )r   )r   r   r   r   r   on_off_prop^   s    zCT_LsdException.on_off_propc             C   s   t | || dS )zI
        Set the on/off attribute having *attr_name* to *value*.
        N)r   )r   r   r   r   r   r   set_on_off_prope   s    zCT_LsdException.set_on_off_propN)r"   r#   r$   r%   r   r   lockedr	   r   r   qFormat
semiHiddenr   
uiPriorityunhideWhenUsedr*   r+   r,   r   r   r   r   r'   L   s   





r'   c               @   s  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ZedeZedeZedeZedd Zejdd Zed d! Z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d,d- Z e jd.d- Z ed/d0 Z!e!jd1d0 Z!ed2d3 Z"e"jd4d3 Z"ed5d6 Z#e#jd7d6 Z#dS )8CT_StylezB
    A ``<w:style>`` element, representing a style definition
    )zw:namez	w:aliasesz	w:basedOnzw:nextzw:linkzw:autoRedefinezw:hiddenzw:uiPriorityzw:semiHiddenzw:unhideWhenUsedz	w:qFormatzw:lockedz
w:personalzw:personalComposezw:personalReplyzw:rsidzw:pPrzw:rPrzw:tblPrzw:trPrzw:tcPrzw:tblStylePrzw:namer   N)r   z	w:basedOn   zw:next   zw:uiPriority   zw:semiHidden	   zw:unhideWhenUsed
   z	w:qFormat   zw:locked   zw:pPr   zw:rPr   zw:typez	w:styleIdz	w:defaultzw:customStylec             C   s   | j }|dkrdS |jS )zG
        Value of `w:basedOn/@w:val` or |None| if not present.
        N)basedOnval)r   r<   r   r   r   basedOn_val   s    zCT_Style.basedOn_valc             C   s    |d kr|    n
||  _d S )N)Z_remove_basedOnZget_or_add_basedOnr=   )r   r   r   r   r   r>      s    
c             C   s6   | j }|dkrdS |  }||j}|dkr2dS |S )z}
        Sibling CT_Style element this style is based on or |None| if no base
        style or base style not found.
        N)r<   r(   	get_by_idr=   )r   r<   styles
base_styler   r   r   rA      s    zCT_Style.base_stylec             C   s   |   |  dS )zS
        Remove this `w:style` element from its parent `w:styles` element.
        N)r(   r)   )r   r   r   r   r*      s    zCT_Style.deletec             C   s   | j }|dkrdS |jS )zG
        Value of `w:locked/@w:val` or |False| if not present.
        NF)r-   r=   )r   r-   r   r   r   
locked_val   s    zCT_Style.locked_valc             C   s&   |    t|dkr"|  }||_d S )NT)Z_remove_lockedr    Z_add_lockedr=   )r   r   r-   r   r   r   rB      s    c             C   s   | j }|dkrdS |jS )zG
        Value of ``<w:name>`` child or |None| if not present.
        N)r   r=   )r   r   r   r   r   name_val   s    zCT_Style.name_valc             C   s"   |    |d k	r|  }||_d S )N)Z_remove_nameZ	_add_namer=   )r   r   r   r   r   r   rC      s    c             C   s&   | j }|dkrdS |  }||jS )z
        Sibling CT_Style element identified by the value of `w:name/@w:val`
        or |None| if no value is present or no style with that style id
        is found.
        N)nextr(   r?   r=   )r   rD   r@   r   r   r   
next_style   s
    zCT_Style.next_stylec             C   s   | j }|dkrdS |jS )zH
        Value of `w:qFormat/@w:val` or |False| if not present.
        NF)r.   r=   )r   r.   r   r   r   qFormat_val   s    zCT_Style.qFormat_valc             C   s   |    t|r|   d S )N)Z_remove_qFormatr    Z_add_qFormat)r   r   r   r   r   rF      s    c             C   s   | j }|dkrdS |jS )zN
        Value of ``<w:semiHidden>`` child or |False| if not present.
        NF)r/   r=   )r   r/   r   r   r   semiHidden_val   s    zCT_Style.semiHidden_valc             C   s&   |    t|dkr"|  }||_d S )NT)Z_remove_semiHiddenr    Z_add_semiHiddenr=   )r   r   r/   r   r   r   rG      s    c             C   s   | j }|dkrdS |jS )zM
        Value of ``<w:uiPriority>`` child or |None| if not present.
        N)r0   r=   )r   r0   r   r   r   uiPriority_val   s    zCT_Style.uiPriority_valc             C   s"   |    |d k	r|  }||_d S )N)Z_remove_uiPriorityZ_add_uiPriorityr=   )r   r   r0   r   r   r   rH     s    c             C   s   | j }|dkrdS |jS )zO
        Value of `w:unhideWhenUsed/@w:val` or |False| if not present.
        NF)r1   r=   )r   r1   r   r   r   unhideWhenUsed_val  s    zCT_Style.unhideWhenUsed_valc             C   s&   |    t|dkr"|  }||_d S )NT)Z_remove_unhideWhenUsedr    Z_add_unhideWhenUsedr=   )r   r   r1   r   r   r   rI     s    )$r"   r#   r$   r%   _tag_seqr   r   r<   rD   r0   r/   r1   r.   r-   ZpPrZrPrr   r   typer   styleIdr   defaultcustomStylepropertyr>   setterrA   r*   rB   rC   rE   rF   rG   rH   rI   r   r   r   r   r2   l   sD   










r2   c               @   s^   e Zd ZdZdZededd dZedddZ[d	d
 Z	dd Z
dd Zdd Zdd ZdS )	CT_StyleszX
    ``<w:styles>`` element, the root element of a styles part, i.e.
    styles.xml
    )zw:docDefaultszw:latentStyleszw:stylezw:latentStylesr   N)r   zw:styler   c             C   s0   |   }||_|rdnd|_t||_||_|S )z
        Return a newly added `w:style` element having *name* and
        *style_type*. `w:style/@customStyle` is set based on the value of
        *builtin*.
        NT)Z	add_stylerK   rN   r   rL   rC   )r   r   
style_typebuiltinstyler   r   r   add_style_of_type+  s    
zCT_Styles.add_style_of_typec                s&    fdd|   D }|sdS |d S )zW
        Return `w:style[@w:type="*{style_type}*][-1]` or |None| if not found.
        c                s    g | ]}|j  kr|jr|qS r   )rK   rM   ).0s)rR   r   r   
<listcomp>=  s    z)CT_Styles.default_for.<locals>.<listcomp>N)_iter_styles)r   rR   Zdefault_styles_for_typer   )rR   r   default_for8  s    zCT_Styles.default_forc             C   s0   d| }y|  |d S  tk
r*   dS X dS )z
        Return the ``<w:style>`` child element having ``styleId`` attribute
        matching *styleId*, or |None| if not found.
        zw:style[@w:styleId="%s"]r   N)r   
IndexError)r   rL   r   r   r   r   r?   E  s
    zCT_Styles.get_by_idc             C   s0   d| }y|  |d S  tk
r*   dS X dS )z
        Return the ``<w:style>`` child element having ``<w:name>`` child
        element with value *name*, or |None| if not found.
        zw:style[w:name/@w:val="%s"]r   N)r   r\   )r   r   r   r   r   r   r   P  s
    zCT_Styles.get_by_namec             C   s   dd |  dD S )zR
        Generate each of the `w:style` child elements in document order.
        c             s   s   | ]
}|V  qd S )Nr   )rV   rT   r   r   r   	<genexpr>_  s    z)CT_Styles._iter_styles.<locals>.<genexpr>zw:style)r   )r   r   r   r   rZ   [  s    zCT_Styles._iter_styles)r"   r#   r$   r%   rJ   r   ZlatentStylesr
   rT   rU   r[   r?   r   rZ   r   r   r   r   rQ   !  s   rQ   N)r%   Z
enum.styler   Zsimpletypesr   r   r   Zxmlchemyr   r   r	   r
   r   r   r   r'   r2   rQ   r   r   r   r   <module>   s   *  6