B
    W_                 @   s   d Z ddlmZ ddlmZ ddl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dS )z6
Custom element classes related to the numbering part
   )OxmlElement)CT_DecimalNumber)ST_DecimalNumber)BaseOxmlElementOneAndOnlyOneRequiredAttribute
ZeroOrMore	ZeroOrOnec               @   s>   e Zd ZdZedZedZede	Z
dd Zedd Zd	S )
CT_Numz
    ``<w:num>`` element, which represents a concrete list definition
    instance, having a required child <w:abstractNumId> that references an
    abstract numbering definition that defines most of the formatting details.
    zw:abstractNumIdzw:lvlOverridezw:numIdc             C   s   | j |dS )z
        Return a newly added CT_NumLvl (<w:lvlOverride>) element having its
        ``ilvl`` attribute set to *ilvl*.
        )ilvl)Z_add_lvlOverride)selfr    r   E/var/www/html/venv/lib/python3.7/site-packages/docx/oxml/numbering.pyadd_lvlOverride   s    zCT_Num.add_lvlOverridec             C   s(   t d}||_td|}|| |S )z
        Return a new ``<w:num>`` element having numId of *num_id* and having
        a ``<w:abstractNumId>`` child with val attribute set to
        *abstractNum_id*.
        zw:numzw:abstractNumId)r   numIdr   newappend)clsZnum_idabstractNum_idnumabstractNumIdr   r   r   r       s    
z
CT_Num.newN)__name__
__module____qualname____doc__r   r   r   ZlvlOverrider   r   r   r   classmethodr   r   r   r   r   r
      s   
r
   c               @   s.   e Zd ZdZedddZedeZdd Z	dS )		CT_NumLvlz
    ``<w:lvlOverride>`` element, which identifies a level in a list
    definition to override with settings it contains.
    zw:startOverride)zw:lvl)
successorszw:ilvlc             C   s   | j |dS )z
        Return a newly added CT_DecimalNumber element having tagname
        ``w:startOverride`` and ``val`` attribute set to *val*.
        )val)Z_add_startOverride)r   r   r   r   r   add_startOverride8   s    zCT_NumLvl.add_startOverrideN)
r   r   r   r   r	   ZstartOverrider   r   r   r   r   r   r   r   r   0   s   
r   c               @   s(   e Zd ZdZedddZedddZdS )CT_NumPrzc
    A ``<w:numPr>`` element, a container for numbering properties applied to
    a paragraph.
    zw:ilvl)zw:numIdzw:numberingChangezw:ins)r   zw:numId)zw:numberingChangezw:insN)r   r   r   r   r	   r   r   r   r   r   r   r    @   s   r    c               @   s8   e Zd ZdZedddZdd Zdd Zed	d
 Z	dS )CT_Numberingza
    ``<w:numbering>`` element, the root element of a numbering part, i.e.
    numbering.xml
    zw:num)zw:numIdMacAtCleanup)r   c             C   s   | j }t||}| |S )z
        Return a newly added CT_Num (<w:num>) element referencing the
        abstract numbering definition identified by *abstractNum_id*.
        )_next_numIdr
   r   Z_insert_num)r   r   Znext_num_idr   r   r   r   add_numc   s    zCT_Numbering.add_numc             C   s<   d| }y|  |d S  tk
r6   td| Y nX dS )zk
        Return the ``<w:num>`` child element having ``numId`` attribute
        matching *numId*.
        z./w:num[@w:numId="%d"]    z no <w:num> element with numId %dN)xpath
IndexErrorKeyError)r   r   r%   r   r   r   num_having_numIdl   s
    zCT_Numbering.num_having_numIdc             C   sB   |  d}dd |D }x$tdt|d D ]}||kr,P q,W |S )z
        The first ``numId`` unused by a ``<w:num>`` element, starting at
        1 and filling any gaps in numbering between existing ``<w:num>``
        elements.
        z./w:num/@w:numIdc             S   s   g | ]}t |qS r   )int).0Z	numId_strr   r   r   
<listcomp>   s    z,CT_Numbering._next_numId.<locals>.<listcomp>r      )r%   rangelen)r   Z
numId_strsZnum_idsr   r   r   r   r"   w   s    
zCT_Numbering._next_numIdN)
r   r   r   r   r   r   r#   r(   propertyr"   r   r   r   r   r!   \   s
   	r!   N)r    r   sharedr   Zsimpletypesr   Zxmlchemyr   r   r   r   r	   r
   r   r    r!   r   r   r   r   <module>   s   !