o
    	'f%                     @  s   d Z ddlmZ ddlmZmZmZmZ ddlm	Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ erlddlmZ ddl m!Z!m"Z" ddlm#Z# G dd deZ$G dd dZ%dS )z=Run-related proxy objects for python-docx, Run in particular.    )annotations)IOTYPE_CHECKINGIteratorcast)types)Drawing)WD_STYLE_TYPE)WD_BREAK)
CT_Drawing)CT_LastRenderedPageBreak)InlineShape)
StoryChild)CharacterStyle)Font)RenderedPageBreak)WD_UNDERLINE)CT_RCT_Text)Lengthc                      s  e Zd ZdZd= fddZejfd>d
dZ		d?d@ddZdAddZ	dBddZ
edCddZejdDd!dZd"d# ZedEd%d&ZedFd(d)ZedCd*d+ZejdDd,d+ZdGd.d/ZedHd1d2ZejdId5d2ZedJd6d7ZejdBd8d7ZedKd:d;ZejdLd<d;Z  ZS )MRunaI  Proxy object wrapping `<w:r>` element.

    Several of the properties on Run take a tri-state value, |True|, |False|, or |None|.
    |True| and |False| correspond to on and off respectively. |None| indicates the
    property is not specified directly on the run and its effective value is taken from
    the style hierarchy.
    rr   parentt.ProvidesStoryPartc                   s"   t  | | | _ | _| _d S N)super__init___r_elementelement)selfr   r   	__class__ E/home/ubuntu/flask/venv/lib/python3.10/site-packages/docx/text/run.pyr   "   s   zRun.__init__
break_typer
   c                 C  s^   t jdt jdt jdt jdt jdt jdi| \}}| j }|dur$||_	|dur-||_
dS dS )a	  Add a break element of `break_type` to this run.

        `break_type` can take the values `WD_BREAK.LINE`, `WD_BREAK.PAGE`, and
        `WD_BREAK.COLUMN` where `WD_BREAK` is imported from `docx.enum.text`.
        `break_type` defaults to `WD_BREAK.LINE`.
        NN)pageN)columnN)textWrappingleft)r)   right)r)   allN)r
   LINEPAGECOLUMNLINE_CLEAR_LEFTLINE_CLEAR_RIGHTLINE_CLEAR_ALLr   add_brtypeclear)r    r%   type_r5   brr#   r#   r$   	add_break&   s   

zRun.add_breakNimage_path_or_streamstr | IO[bytes]widthLength | Noneheightreturnr   c                 C  s$   | j |||}| j| t|S )a  Return |InlineShape| containing image identified by `image_path_or_stream`.

        The picture is added to the end of this run.

        `image_path_or_stream` can be a path (a string) or a file-like object containing
        a binary image.

        If neither width nor height is specified, the picture appears at
        its native size. If only one is specified, it is used to compute a scaling
        factor that is then applied to the unspecified dimension, preserving the aspect
        ratio of the image. The native size of the picture is calculated using the dots-
        per-inch (dpi) value specified in the image file, defaulting to 72 dpi if no
        value is specified, as is often the case.
        )partnew_pic_inliner   add_drawingr   )r    r9   r;   r=   inliner#   r#   r$   add_picture;   s   zRun.add_pictureNonec                 C  s   | j   dS )zcAdd a ``<w:tab/>`` element at the end of the run, which Word interprets as a
        tab character.N)r   add_tabr    r#   r#   r$   rE   S   s   zRun.add_tabtextstrc                 C  s   | j |}t|S )zReturns a newly appended |_Text| object (corresponding to a new ``<w:t>``
        child element) to the run, containing `text`.

        Compare with the possibly more friendly approach of assigning text to the
        :attr:`Run.text` property.
        )r   add_t_Text)r    rG   tr#   r#   r$   add_textX   s   zRun.add_textbool | Nonec                 C     | j jS )a  Read/write tri-state value.

        When |True|, causes the text of the run to appear in bold face. When |False|,
        the text unconditionally appears non-bold. When |None| the bold setting for this
        run is inherited from the style hierarchy.
        fontboldrF   r#   r#   r$   rQ   b      zRun.boldvaluec                 C     || j _d S r   rO   r    rS   r#   r#   r$   rQ   l      c                 C  s   | j   | S )zoReturn reference to this run after removing all its content.

        All run formatting is preserved.
        )r   clear_contentrF   r#   r#   r$   r5   p   s   
z	Run.clearboolc                 C  s   t | jjS )a  `True` when one or more rendered page-breaks occur in this run.

        Note that "hard" page-breaks inserted by the author are not included. A hard
        page-break gives rise to a rendered page-break in the right position so if those
        were included that page-break would be "double-counted".

        It would be very rare for multiple rendered page-breaks to occur in a single
        run, but it is possible.
        )rX   r   lastRenderedPageBreaksrF   r#   r#   r$   contains_page_breakx   s   zRun.contains_page_breakr   c                 C  s
   t | jS )z{The |Font| object providing access to the character formatting properties for
        this run, such as font name and size.)r   r   rF   r#   r#   r$   rP      s   
zRun.fontc                 C  rN   )a	  Read/write tri-state value.

        When |True|, causes the text of the run to appear in italics. When |False|, the
        text unconditionally appears non-italic. When |None| the italic setting for this
        run is inherited from the style hierarchy.
        rP   italicrF   r#   r#   r$   r\      rR   z
Run.italicc                 C  rT   r   r[   rU   r#   r#   r$   r\      rV   +Iterator[str | Drawing | RenderedPageBreak]c                 c  sT    | j jD ]"}t|tr|V  qt|trt|| V  qt|tr't|| V  qdS )a'  Generate the content-items in this run in the order they appear.

        NOTE: only content-types currently supported by `python-docx` are generated. In
        this version, that is text and rendered page-breaks. Drawing is included but
        currently only provides access to its XML element (CT_Drawing) on its
        `._drawing` attribute. `Drawing` attributes and methods may be expanded in
        future releases.

        There are a number of element-types that can appear inside a run, but most of
        those (w:br, w:cr, w:noBreakHyphen, w:t, w:tab) have a clear plain-text
        equivalent. Any contiguous range of such elements is generated as a single
        `str`. Rendered page-break and drawing elements are generated individually. Any
        other elements are ignored.
        N)r   inner_content_items
isinstancerH   r   r   r   r   )r    itemr#   r#   r$   iter_inner_content   s   

zRun.iter_inner_contentr   c                 C  s   | j j}tt| j|tjS )aa  Read/write.

        A |CharacterStyle| object representing the character style applied to this run.
        The default character style for the document (often `Default Character Font`) is
        returned if the run has no directly-applied character style. Setting this
        property to |None| removes any directly-applied character style.
        )r   styler   r   r?   	get_styler	   	CHARACTER)r    style_idr#   r#   r$   rb      s   	z	Run.stylestyle_or_namestr | CharacterStyle | Nonec                 C  s   | j |tj}|| j_d S r   )r?   get_style_idr	   rd   r   rb   )r    rf   re   r#   r#   r$   rb      s   c                 C  rN   )a"  String formed by concatenating the text equivalent of each run.

        Each `<w:t>` element adds the text characters it contains. A `<w:tab/>` element
        adds a `\t` character. A `<w:cr/>` or `<w:br>` element each add a `\n`
        character. Note that a `<w:br>` element can indicate a page break or column
        break as well as a line break. Only line-break `<w:br>` elements translate to
        a `\n` character. Others are ignored. All other content child elements, such as
        `<w:drawing>`, are ignored.

        Assigning text to this property has the reverse effect, translating each `\t`
        character to a `<w:tab/>` element and each `\n` or `\r` character to a
        `<w:cr/>` element. Any existing run content is replaced. Run formatting is
        preserved.
        r   rG   rF   r#   r#   r$   rG      s   zRun.textc                 C  rT   r   ri   )r    rG   r#   r#   r$   rG      rV   bool | WD_UNDERLINE | Nonec                 C  rN   )a  The underline style for this |Run|.

        Value is one of |None|, |True|, |False|, or a member of :ref:`WdUnderline`.

        A value of |None| indicates the run has no directly-applied underline value and
        so will inherit the underline value of its containing paragraph. Assigning
        |None| to this property removes any directly-applied underline value.

        A value of |False| indicates a directly-applied setting of no underline,
        overriding any inherited value.

        A value of |True| indicates single underline.

        The values from :ref:`WdUnderline` are used to specify other outline styles such
        as double, wavy, and dotted.
        rP   	underlinerF   r#   r#   r$   rl      s   zRun.underlinec                 C  rT   r   rk   rU   r#   r#   r$   rl      rV   )r   r   r   r   )r%   r
   r&   )r9   r:   r;   r<   r=   r<   r>   r   )r>   rD   )rG   rH   )r>   rM   )rS   rM   )r>   rX   )r>   r   )r>   r]   )r>   r   )rf   rg   )r>   rH   )r>   rj   )rS   rX   )__name__
__module____qualname____doc__r   r
   r-   r8   rC   rE   rL   propertyrQ   setterr5   rZ   rP   r\   ra   rb   rG   rl   __classcell__r#   r#   r!   r$   r      sF    


		
r   c                      s"   e Zd ZdZd fddZ  ZS )rJ   z&Proxy object wrapping `<w:t>` element.t_elmr   c                   s   t t|   || _d S r   )r   rJ   r   _t)r    rt   r!   r#   r$   r      s   
z_Text.__init__)rt   r   )rm   rn   ro   rp   r   rs   r#   r#   r!   r$   rJ      s    rJ   N)&rp   
__future__r   typingr   r   r   r   docxr   rK   docx.drawingr   docx.enum.styler	   docx.enum.textr
   docx.oxml.drawingr   docx.oxml.text.pagebreakr   
docx.shaper   docx.sharedr   docx.styles.styler   docx.text.fontr   docx.text.pagebreakr   r   docx.oxml.text.runr   r   r   r   rJ   r#   r#   r#   r$   <module>   s*     \