o
    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   @D:\Projects\ConvertPro\env\Lib\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   Z
successorszw:countzw:defLockedStatezw:defQFormatzw:defSemiHiddenzw:defUIPriorityzw:defUnhideWhenUsedc                 C   s   t | |}|du 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boolr   r   r   r   set_bool_propE      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.
    w:lockedw:name	w:qFormatw:semiHiddenw:uiPriorityw:unhideWhenUsedc                 C      |   |  dS )zM
        Remove this `w:lsdException` element from the XML document.
        N	getparentremover   r   r   r   deleteX      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 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unhideWhenUsedr8   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
    )r.   z	w:aliases	w:basedOnw:nextzw:linkzw:autoRedefinezw:hiddenr1   r0   r2   r/   r-   z
w:personalzw:personalComposezw:personalReplyzw:rsidw:pPrw:rPrzw:tblPrzw:trPrzw:tcPrzw:tblStylePrr.   r   Nr   rB      rC      r1      r0   	   r2   
   r/      r-      rD      rE      zw:typez	w:styleIdz	w:defaultzw:customStylec                 C      | j }|du r	dS |jS )zG
        Value of `w:basedOn/@w:val` or |None| if not present.
        N)basedOnval)r   rP   r   r   r   basedOn_val      zCT_Style.basedOn_valc                 C   s"   |d u r
|    d S ||  _d S N)Z_remove_basedOnZget_or_add_basedOnrQ   r   r   r   r   r   rR      s   c                 C   s6   | j }|du r	dS |  }||j}|du rdS |S )z}
        Sibling CT_Style element this style is based on or |None| if no base
        style or base style not found.
        N)rP   r5   	get_by_idrQ   )r   rP   styles
base_styler   r   r   rX      s   zCT_Style.base_stylec                 C   r3   )zS
        Remove this `w:style` element from its parent `w:styles` element.
        Nr4   r7   r   r   r   r8      r9   zCT_Style.deletec                 C      | j }|du r	dS |jS )zG
        Value of `w:locked/@w:val` or |False| if not present.
        NF)r<   rQ   )r   r<   r   r   r   
locked_val   rS   zCT_Style.locked_valc                 C   *   |    t|du r|  }||_d S d S NT)Z_remove_lockedr$   Z_add_lockedrQ   )r   r   r<   r   r   r   rZ      
   
c                 C   rO   )zG
        Value of ``<w:name>`` child or |None| if not present.
        N)r   rQ   )r   r   r   r   r   name_val   rS   zCT_Style.name_valc                 C   &   |    |d ur|  }||_d S d S rT   )Z_remove_nameZ	_add_namerQ   )r   r   r   r   r   r   r^      
   
c                 C   s&   | j }|du 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)nextr5   rV   rQ   )r   ra   rW   r   r   r   
next_style   s
   zCT_Style.next_stylec                 C   rY   )zH
        Value of `w:qFormat/@w:val` or |False| if not present.
        NF)r=   rQ   )r   r=   r   r   r   qFormat_val   rS   zCT_Style.qFormat_valc                 C   s    |    t|r|   d S d S rT   )Z_remove_qFormatr$   Z_add_qFormatrU   r   r   r   rc      s   c                 C   rY   )zN
        Value of ``<w:semiHidden>`` child or |False| if not present.
        NF)r>   rQ   )r   r>   r   r   r   semiHidden_val   rS   zCT_Style.semiHidden_valc                 C   r[   r\   )Z_remove_semiHiddenr$   Z_add_semiHiddenrQ   )r   r   r>   r   r   r   rd      r]   c                 C   rO   )zM
        Value of ``<w:uiPriority>`` child or |None| if not present.
        N)r?   rQ   )r   r?   r   r   r   uiPriority_val   rS   zCT_Style.uiPriority_valc                 C   r_   rT   )Z_remove_uiPriorityZ_add_uiPriorityrQ   )r   r   r?   r   r   r   re     r`   c                 C   rY   )zO
        Value of `w:unhideWhenUsed/@w:val` or |False| if not present.
        NF)r@   rQ   )r   r@   r   r   r   unhideWhenUsed_val  rS   zCT_Style.unhideWhenUsed_valc                 C   r[   r\   )Z_remove_unhideWhenUsedr$   Z_add_unhideWhenUsedrQ   )r   r   r@   r   r   r   rf     r]   )$r'   r(   r)   r*   _tag_seqr   r   rP   ra   r?   r>   r@   r=   r<   ZpPrZrPrr   r   typer   styleIdr   defaultcustomStylepropertyrR   setterrX   r8   rZ   r^   rb   rc   rd   re   rf   r   r   r   r   rA   l   sf    




	


	

	


	

	

	

	rA   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:docDefaultsw:latentStylesw:stylero   r   Nr   rp   r   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_stylerh   rk   r   ri   r^   )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   )rh   rj   ).0srq   r   r   
<listcomp><  s
    z)CT_Styles.default_for.<locals>.<listcomp>N)_iter_styles)r   rq   Zdefault_styles_for_typer   rw   r   default_for8  s   
zCT_Styles.default_forc                 C   .   d| }z|  |d W S  ty   Y dS w )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   ri   r   r   r   r   rV   E     zCT_Styles.get_by_idc                 C   r|   )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   Nr}   )r   r   r   r   r   r   r!   P  r   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 rT   r   )ru   rs   r   r   r   	<genexpr>_  s    z)CT_Styles._iter_styles.<locals>.<genexpr>rp   r   r7   r   r   r   rz   [  r&   zCT_Styles._iter_styles)r'   r(   r)   r*   rg   r   ZlatentStylesr
   rs   rt   r{   rV   r!   rz   r   r   r   r   rn   !  s    rn   N)r*   Z
enum.styler   Zsimpletypesr   r   r   Zxmlchemyr   r   r	   r
   r   r   r   r,   rA   rn   r   r   r   r   <module>   s   *  6