Ë
    \Rði0  ã                  ó¼   — d Z ddlmZ ddlZddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZmZ erdd	lmZ dd
lmZ  G d„ de«      Z G d„ de«      Zy)z4Custom element classes related to document comments.é    )ÚannotationsN)ÚTYPE_CHECKINGÚCallableÚcast)Únsdecls)Ú	parse_xml)ÚST_DateTimeÚST_DecimalNumberÚ	ST_String)ÚBaseOxmlElementÚOptionalAttributeÚRequiredAttributeÚ
ZeroOrMore)ÚCT_Tbl)ÚCT_Pc                  óD   — e Zd ZU dZded<    ed«      Zd	d„Zd
d„Zdd„Z	y)ÚCT_Commentsa’  `w:comments` element, the root element for the comments part.

    Simply contains a collection of `w:comment` elements, each representing a single comment. Each
    contained comment is identified by a unique `w:id` attribute, used to reference the comment
    from the document text. The offset of the comment in this collection is arbitrary; it is
    essentially a _set_ implemented as a list.
    zlist[CT_Comment]Úcomment_lstz	w:commentc           
     óš   — | j                  «       }t        t        t        dt	        d«      › d|› d�«      «      }| j                  |«       |S )aø  Return newly added `w:comment` child of this `w:comments`.

        The returned `w:comment` element is the minimum valid value, having a `w:id` value unique
        within the existing comments and the required `w:author` attribute present but set to the
        empty string. It's content is limited to a single run containing the necessary annotation
        reference but no text. Content is added by adding runs to this first paragraph and by
        adding additional paragraphs as needed.
        z<w:comment Úwz w:id="z×" w:author="">  <w:p>    <w:pPr>      <w:pStyle w:val="CommentText"/>    </w:pPr>    <w:r>      <w:rPr>        <w:rStyle w:val="CommentReference"/>      </w:rPr>      <w:annotationRef/>    </w:r>  </w:p></w:comment>)Ú_next_available_comment_idr   Ú
CT_Commentr   r   Úappend)ÚselfÚnext_idÚcomments      úM/var/www/html/Extract/venv/lib/python3.12/site-packages/docx/oxml/comments.pyÚadd_commentzCT_Comments.add_comment    sU   € ð ×1Ñ1Ó3ˆÜÜÜØœg c›l˜^¨7°7°)ð <ð  óó
ˆð$ 	�‰�GÔØˆó    c                ó>   — | j                  d|› d�«      }|r|d   S dS )zRReturn the `w:comment` element identified by `comment_id`, or |None| if not found.z(./w:comment[@w:id='z'])[1]r   N©Úxpath)r   Ú
comment_idÚcomment_elmss      r   Úget_comment_by_idzCT_Comments.get_comment_by_id?   s+   € à—z‘zÐ$8¸¸ÀFÐ"KÓLˆÙ".ˆ|˜A‰Ð8°DÐ8r   c                óè   — | j                  d«      D �cg c]  }t        |«      ‘Œ }}t        |d¬«      dz   }|dk  r|S t        t	        |«      «      D ]  \  }}||k7  sŒ|c S  t        |«      S c c}w )an  The next available comment id.

        According to the schema, this can be any positive integer, as big as you like, and the
        default mechanism is to use `max() + 1`. However, if that yields a value larger than will
        fit in a 32-bit signed integer, we take a more deliberate approach to use the first
        ununsed integer starting from 0.
        z./w:comment/@w:idéÿÿÿÿ)Údefaulté   iÿÿÿ)r"   ÚintÚmaxÚ	enumerateÚsortedÚlen)r   ÚxÚused_idsr   ÚexpectedÚactuals         r   r   z&CT_Comments._next_available_comment_idD   s‚   € ð %)§J¡JÐ/BÓ$CÖD˜q”C˜•FÐDˆÐDä�h¨Ô+¨aÑ/ˆà�iÒØˆNô !*¬&°Ó*:Ó ;ò 	 ÑˆH�fØ˜6Ó!Ø’ð	 ô �8‹}Ðùò Es   ”A/N)Úreturnr   )r#   r*   r3   zCT_Comment | None)r3   r*   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r   r   r%   r   © r   r   r   r      s(   … ñð "Ó!á˜Ó%€Góó>9ô
r   r   c                  óä   — e Zd ZU dZ ede«      Zded<    ede«      Z	ded<    e
de«      Zd	ed
<    e
de«      Zded<    edd¬«      Z edd¬«      Zded<   ded<   ded<   ded<   edd„«       Zy)r   aQ  `w:comment` element, representing a single comment.

    A comment is a so-called "story" and can contain paragraphs and tables much like a table-cell.
    While probably most often used for a single sentence or phrase, a comment can contain rich
    content, including multiple rich-text paragraphs, hyperlinks, images, and tables.
    zw:idr*   Úidzw:authorÚstrÚauthorz
w:initialsz
str | NoneÚinitialszw:datezdt.datetime | NoneÚdatezw:pr9   )Ú
successorszw:tblzCallable[[], CT_P]Úadd_pz
list[CT_P]Úp_lstzlist[CT_Tbl]Útbl_lstzCallable[[CT_Tbl], CT_Tbl]Ú_insert_tblc                ó$   — | j                  d«      S )z8Generate all `w:p` and `w:tbl` elements in this comment.z./w:p | ./w:tblr!   )r   s    r   Úinner_content_elementsz!CT_Comment.inner_content_elementsy   s   € ð �z‰zÐ+Ó,Ð,r   N)r3   zlist[CT_P | CT_Tbl])r4   r5   r6   r7   r   r
   r;   r8   r   r=   r   r>   r	   r?   r   ÚpÚtblÚpropertyrF   r9   r   r   r   r   [   s¡   … ññ   Ð(8Ó9€BˆÓ9Ù# J°	Ó:€FˆCÓ:Ù,Ø�ió€Hˆjó ñ  1Ø�+ó €DÐ
ó ñ 	�5 RÔ(€AÙ
�W¨Ô
,€Cð ÓØÓØÓØ+Ó+àò-ó ñ-r   r   )r7   Ú
__future__r   ÚdatetimeÚdtÚtypingr   r   r   Údocx.oxml.nsr   Údocx.oxml.parserr   Údocx.oxml.simpletypesr	   r
   r   Údocx.oxml.xmlchemyr   r   r   r   Údocx.oxml.tabler   Údocx.oxml.text.paragraphr   r   r   r9   r   r   ú<module>rT      sJ   ðÙ :å "ã ß 0Ñ 0å  Ý &ß JÑ Jß `Ó `áÝ&Ý-ôF�/ô FôR!-�õ !-r   