o
    j}                     @   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)Z_add_lvlOverride)selfr    r   T/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/docx/oxml/numbering.pyadd_lvlOverride      zCT_Num.add_lvlOverridec                 C   s(   t d}||_td|}|| |S )zReturn 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)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_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)Z_add_startOverride)r   r%   r   r   r   add_startOverride/   r   zCT_NumLvl.add_startOverrideN)
r   r   r   r   r	   Z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 )zReturn 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_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   r-   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 )zThe 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>i   s    z,CT_Numbering._next_numId.<locals>.<listcomp>      )r-   rangelen)r   Z
numId_strsZnum_idsr   r   r   r   r+   d   s   
zCT_Numbering._next_numIdN)
r   r   r   r   r   r   r,   r0   propertyr+   r   r   r   r   r*   N   s    	r*   N)r   Zdocx.oxml.parserr   Zdocx.oxml.sharedr   Zdocx.oxml.simpletypesr   Zdocx.oxml.xmlchemyr   r   r   r   r	   r
   r!   r'   r*   r   r   r   r   <module>   s    	