
    ,h}                         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y)z5Custom element classes related to the numbering part.    )OxmlElement)CT_DecimalNumber)ST_DecimalNumber)BaseOxmlElementOneAndOnlyOneRequiredAttribute
ZeroOrMore	ZeroOrOnec                   X    e Zd ZdZ ed      Z ed      Z ede	      Z
d Zed        Zy)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                 &    | j                  |      S )zmReturn a newly added CT_NumLvl (<w:lvlOverride>) element having its ``ilvl``
        attribute set to `ilvl`.)ilvl)_add_lvlOverride)selfr   s     U/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/docx/oxml/numbering.pyadd_lvlOverridezCT_Num.add_lvlOverride   s     $$$$//    c                 x    t        d      }||_        t        j                  d|      }|j	                  |       |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   s9     '"	(,,->O

=!
r   N)__name__
__module____qualname____doc__r   r   r	   lvlOverrider   r   r   r   classmethodr    r   r   r   r      sD    4 ""34M_-Ki)9:E0
  r   r   c                   <    e Zd ZdZ edd      Z ede      Zd Z	y)	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                 &    | j                  |      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(   (   s(    + /JGMX'78D0r   r(   c                   8    e Zd ZdZ edd      Z edd      Zy)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   s#     X*STDi,JKEr   r2   c                   @    e Zd ZdZ edd      Zd Zd Zed        Z	y)	CT_NumberingzX``<w:numbering>`` element, the root element of a numbering part, i.e.
    numbering.xml.r   )zw:numIdMacAtCleanupr)   c                 h    | j                   }t        j                  ||      }| j                  |      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   s0     &&jjn5$$r   c                 l    d|z  }	 | j                  |      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[   sJ     )50	G::e$Q'' 	G=EFF	Gs    3c                     | j                  d      }|D cg c]  }t        |       }}t        dt        |      dz         D ]	  }||vs |S  S c c}w )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:numId      )r=   intrangelen)r   
numId_strs	numId_strnum_idsr   s        r   r8   zCT_Numbering._next_numIdd   se     ZZ 23
3=>i3y>>>CL1,- 	C'!
	 
	 ?s   AN)
r    r!   r"   r#   r	   r   r;   r@   propertyr8   r&   r   r   r6   r6   N   s5     W)A
BC%G  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>rO      sM    ; ( - 2 _ 2
0 
0L L2? r   