o
    ýÞh}  ã                   @   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 )z5Custom 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.úw:abstractNumIdzw:lvlOverrideúw:numIdc                 C   ó   | j |d�S )zmReturn a newly added CT_NumLvl (<w:lvlOverride>) element having its ``ilvl``
        attribute set to `ilvl`.)Úilvl)Ú_add_lvlOverride)Úselfr   © r   úS/var/www/html/premium_crap/venv/lib/python3.10/site-packages/docx/oxml/numbering.pyÚadd_lvlOverride   ó   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`.úw:numr   )r   ÚnumIdr   ÚnewÚappend)ÚclsÚnum_idÚabstractNum_idÚnumÚabstractNumIdr   r   r   r      s
   
z
CT_Num.newN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú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_NumLvlzu``<w:lvlOverride>`` element, which identifies a level in a list definition to
    override with settings it contains.zw:startOverride)zw:lvl©Ú
successorsúw:ilvlc                 C   r   )z|Return a newly added CT_DecimalNumber element having tagname
        ``w:startOverride`` and ``val`` attribute set to `val`.)Úval)Ú_add_startOverride)r   r(   r   r   r   Úadd_startOverride/   r   zCT_NumLvl.add_startOverrideN)
r   r   r    r!   r	   ÚstartOverrider   r   r   r*   r   r   r   r   r$   (   s
    
r$   c                   @   s(   e Zd ZdZeddd�Zeddd�ZdS )ÚCT_NumPrzYA ``<w:numPr>`` element, a container for numbering properties applied to a
    paragraph.r'   )r   úw:numberingChangeúw:insr%   r   )r-   r.   N)r   r   r    r!   r	   r   r   r   r   r   r   r,   5   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_NumberingzX``<w:numbering>`` element, the root element of a numbering part, i.e.
    numbering.xml.r   )zw:numIdMacAtCleanupr%   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   Ú_insert_num)r   r   Únext_num_idr   r   r   r   Úadd_numT   s   
zCT_Numbering.add_numc                 C   s4   d| }z|   |¡d W S  ty   td| ƒ‚w )zYReturn the ``<w:num>`` child element having ``numId`` attribute matching
        `numId`.z./w:num[@w:numId="%d"]r   z no <w:num> element with numId %d)ÚxpathÚ
IndexErrorÚKeyError)r   r   r4   r   r   r   Únum_having_numId[   s   ÿzCT_Numbering.num_having_numIdc                 C   sB   |   d¡}dd„ |D ƒ}tdt|ƒd ƒD ]	}||vr |S q|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)Ú.0Ú	numId_strr   r   r   Ú
<listcomp>i   s    z,CT_Numbering._next_numId.<locals>.<listcomp>é   é   )r4   ÚrangeÚlen)r   Ú
numId_strsÚnum_idsr   r   r   r   r0   d   s   
þzCT_Numbering._next_numIdN)
r   r   r    r!   r   r   r3   r7   Úpropertyr0   r   r   r   r   r/   N   s    	r/   N)r!   Údocx.oxml.parserr   Údocx.oxml.sharedr   Údocx.oxml.simpletypesr   Údocx.oxml.xmlchemyr   r   r   r   r	   r
   r$   r,   r/   r   r   r   r   Ú<module>   s    	