
    hi}                         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e          Z G d d	e          Z G d
 de          Z G d de          ZdS )z5Custom element classes related to the numbering part.    )OxmlElement)CT_DecimalNumber)ST_DecimalNumber)BaseOxmlElementOneAndOnlyOneRequiredAttribute
ZeroOrMore	ZeroOrOnec                   r    e Zd ZdZ ed          Z ed          Z ede	          Z
d Ze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                 .    |                      |          S )zmReturn a newly added CT_NumLvl (<w:lvlOverride>) element having its ``ilvl``
        attribute set to `ilvl`.)ilvl)_add_lvlOverride)selfr   s     k/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/docx/oxml/numbering.pyadd_lvlOverridezCT_Num.add_lvlOverride   s     $$$$///    c                     t          d          }||_        t          j        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)clsnum_idabstractNum_idnumabstractNumIds        r   r   z
CT_Num.new   sB     '""	(,->OO

=!!!
r   N)__name__
__module____qualname____doc__r   r   r	   lvlOverrider   r   r   r   classmethodr    r   r   r   r      s|        4 4 "M"344M*_--Ki)9::E0 0 0
   [  r   r   c                   J    e Zd ZdZ edd          Z ede          Z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                 .    |                      |          S )z|Return a newly added CT_DecimalNumber element having tagname
        ``w:startOverride`` and ``val`` attribute set to `val`.)val)_add_startOverride)r   r-   s     r   add_startOverridezCT_NumLvl.add_startOverride/   s     &&3&///r   N)
r    r!   r"   r#   r
   startOverrider   r   r   r/   r&   r   r   r(   r(   (   sW        + + I/JGGGMX'788D0 0 0 0 0r   r(   c                   F    e Zd ZdZ edd          Z e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   )r3   r4   N)r    r!   r"   r#   r
   r   r   r&   r   r   r2   r2   5   sD          9X*STTTDIi,JKKKEEEr   r2   c                   N    e Zd ZdZ edd          Zd Zd Ze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                 p    | j         }t                              ||          }|                     |          S )zReturn 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   s       r   add_numzCT_Numbering.add_numT   s3     &jjn55$$$r   c                     d|z  }	 |                      |          d         S # t          $ r t          d|z            w xY 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=   s      r   num_having_numIdzCT_Numbering.num_having_numId[   s^     )50	G::e$$Q'' 	G 	G 	G=EFFF	Gs   " ?c                     |                      d          }d |D             }t          dt          |          dz             D ]}||vr n	|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                 ,    g | ]}t          |          S r&   )int).0	numId_strs     r   
<listcomp>z,CT_Numbering._next_numId.<locals>.<listcomp>i   s    >>>i3y>>>>>r         )r=   rangelen)r   
numId_strsnum_idsr   s       r   r8   zCT_Numbering._next_numIdd   sg     ZZ 233
>>:>>>CLL1,-- 	 	C'!! "
r   N)
r    r!   r"   r#   r	   r   r;   r@   propertyr8   r&   r   r   r6   r6   N   sq          *W)A
B
B
BC% % %G G G   X  r   r6   N)r#   docx.oxml.parserr   docx.oxml.sharedr   docx.oxml.simpletypesr   docx.oxml.xmlchemyr   r   r   r	   r
   r   r(   r2   r6   r&   r   r   <module>rR      sA   ; ; ( ( ( ( ( ( - - - - - - 2 2 2 2 2 2                 _   2
0 
0 
0 
0 
0 
0 
0 
0L L L L L L L L2    ?     r   