
    Տkh                        d Z ddlmZ ddlZddlmZmZ ddlm	Z	 erddl
mZmZ ddlmZ ddlmZ dd	lmZ  G d
 d      Z G d de	      Zy)z?Collection providing access to comments added to this document.    )annotationsN)TYPE_CHECKINGIterator)BlockItemContainer)
CT_CommentCT_Comments)CommentsPart)ParagraphStyle)	Paragraphc                  :    e Zd ZdZddZd	dZd
dZdddZddZy)Commentsz:Collection containing the comments added to this document.c                     || _         || _        y N)_comments_elm_comments_part)selfcomments_elmcomments_parts      I/var/www/teggl/fontify/venv/lib/python3.12/site-packages/docx/comments.py__init__zComments.__init__   s    )+    c                B      fd j                   j                  D        S )z.Iterator over the comments in this collection.c              3  J   K   | ]  }t        |j                          y wr   )Commentr   ).0comment_elmr   s     r   	<genexpr>z$Comments.__iter__.<locals>.<genexpr>   s&      
 K!4!45
s    #)r   comment_lstr   s   `r   __iter__zComments.__iter__   s!    
#11==
 	
r   c                @    t        | j                  j                        S )z*The number of comments in this collection.)lenr   r   r   s    r   __len__zComments.__len__   s    4%%1122r   c                   | j                   j                         }||_        ||_        t        j
                  j                  t        j                  j                        |_	        t        || j                        }|dk(  r|S t        |j                  d            }t        |      }|j                  d   }|j!                  |       |D ]  }	|j#                  |	        |S )a  Add a new comment to the document and return it.

        The comment is added to the end of the comments collection and is assigned a unique
        comment-id.

        If `text` is provided, it is added to the comment. This option provides for the common
        case where a comment contains a modest passage of plain text. Multiple paragraphs can be
        added using the `text` argument by separating their text with newlines (`"\\n"`).
        Between newlines, text is interpreted as it is in `Document.add_paragraph(text=...)`.

        The default is to place a single empty paragraph in the comment, which is the same
        behavior as the Word UI when you add a comment. New runs can be added to the first
        paragraph in the empty comment with `comments.paragraphs[0].add_run()` to adding more
        complex text with emphasis or images. Additional paragraphs can be added using
        `.add_paragraph()`.

        `author` is a required attribute, set to the empty string by default.

        `initials` is an optional attribute, set to the empty string by default. Passing |None|
        for the `initials` parameter causes that attribute to be omitted from the XML.
         
r   text)r   add_commentauthorinitialsdtdatetimenowtimezoneutcdater   r   itersplitnext
paragraphsadd_runadd_paragraph)
r   r(   r*   r+   r   commentpara_text_iterfirst_para_text
first_parass
             r   r)   zComments.add_comment#   s    , ((446#';;??2;;??;+t':':;2:Ndjj./~.''*
?+ 	*A!!q!)	* r   c                l    | j                   j                  |      }|t        || j                        S dS )zFReturn the comment identified by `comment_id`, or |None| if not found.N)r   get_comment_by_idr   r   )r   
comment_idr   s      r   getzComments.getM   s6    ((:::F<G<Sw{D$7$78]Y]]r   N)r   r   r   r	   )returnzIterator[Comment]rA   int)r%   r%   r%   )r(   strr*   rD   r+   
str | NonerA   r   )r?   rC   rA   zComment | None)	__name__
__module____qualname____doc__r   r    r#   r)   r@    r   r   r   r      s     D,
3(T^r   r   c                       e Zd ZdZd fdZdd fdZedd       Zej                  dd       Zedd       Z	edd       Z
e
j                  dd       Z
edd	       Zedd
       Z xZS )r   as  Proxy for a single comment in the document.

    Provides methods to access comment metadata such as author, initials, and date.

    A comment is also a block-item container, similar to a table cell, so it can contain both
    paragraphs and tables and its paragraphs can contain rich text, hyperlinks and images,
    although the common case is that a comment contains a single paragraph of plain text like a
    sentence or phrase.

    Note that certain content like tables may not be displayed in the Word comment sidebar due to
    space limitations. Such "over-sized" content can still be viewed in the review pane.
    c                4    t         |   ||       || _        y r   )superr   _comment_elm)r   r   r   	__class__s      r   r   zComment.__init__a   s    m4'r   c                N    t         |   ||      }|d|j                  _        |S )aA  Return paragraph newly added to the end of the content in this container.

        The paragraph has `text` in a single run if present, and is given paragraph style `style`.
        When `style` is |None| or ommitted, the "CommentText" paragraph style is applied, which is
        the default style for comments.
        CommentText)rM   r7   _pstyle)r   r(   rS   	paragraphrO   s       r   r7   zComment.add_paragraphe   s/     G)$6	 =!.ILLr   c                .    | j                   j                  S )z}Read/write. The recorded author of this comment.

        This field is required but can be set to the empty string.
        rN   r*   r   s    r   r*   zComment.authoru   s       '''r   c                &    || j                   _        y r   rV   r   values     r   r*   zComment.author}   s    #( r   c                .    | j                   j                  S )z&The unique identifier of this comment.)rN   idr   s    r   r?   zComment.comment_id   s       ###r   c                .    | j                   j                  S )zRead/write. The recorded initials of the comment author.

        This attribute is optional in the XML, returns |None| if not set. Assigning |None| removes
        any existing initials from the XML.
        rN   r+   r   s    r   r+   zComment.initials   s       )))r   c                &    || j                   _        y r   r]   rX   s     r   r+   zComment.initials   s    %*"r   c                F    dj                  d | j                  D              S )zThe text content of this comment as a string.

        Only content in paragraphs is included and of course all emphasis and styling is stripped.

        Paragraph boundaries are indicated with a newline (`"\\n"`)
        r&   c              3  4   K   | ]  }|j                     y wr   r'   )r   ps     r   r   zComment.text.<locals>.<genexpr>   s     9A9s   )joinr5   r   s    r   r(   zComment.text   s     yy9999r   c                .    | j                   j                  S )zThe date and time this comment was authored.

        This attribute is optional in the XML, returns |None| if not set.
        )rN   r1   r   s    r   	timestampzComment.timestamp   s       %%%r   )r   r   r   r	   )r%   N)r(   rD   rS   zstr | ParagraphStyle | NonerA   r   )rA   rD   )rY   rD   rB   )rA   rE   )rY   rE   )rA   zdt.datetime | None)rF   rG   rH   rI   r   r7   propertyr*   setterr?   r+   r(   rd   __classcell__)rO   s   @r   r   r   S   s    (  ( ( ]]) ) $ $ * * __+ + : : & &r   r   )rI   
__future__r   r-   r,   typingr   r   docx.blkcntnrr   docx.oxml.commentsr   r   docx.parts.commentsr	   docx.styles.styler
   docx.text.paragraphr   r   r   rJ   r   r   <module>ro      s?    E "  * ,:00-?^ ?^DP&  P&r   