Ë
    £èh‘Õ  ã                  ó²  — U d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
Z
d dlZd dlZd dlmZmZ d dlmZ 	 dZ G d„ d	e«      Z G d
„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ dej*                  «      Z G d„ de«      ZdZd„Z G d„ de
j:                  «      Z G d„ de«      Zee e e e f   Z!de"d<   ee e f   Z#de"d<   d[d„Z$d\d„Z% G d „ d!e
j:                  «      Z& G d"„ d#e&«      Z' G d$„ d%e'«      Z( G d&„ d'e(«      Z) G d(„ d)e(«      Z* G d*„ d+e(«      Z+ G d,„ d-e'«      Z, G d.„ d/«      Z- G d0„ d1e,«      Z.d]d^d2„Z/d]d_d3„Z0 G d4„ d5e,«      Z1e.e1fZ2e)e*e+fZ3e.e*fZ4d`d6„Z5 G d7„ d8e&«      Z6 G d9„ d:e'«      Z7 G d;„ d<e6«      Z8 G d=„ d>e6«      Z9 G d?„ d@e6«      Z:dadA„Z; G dB„ dCe,«      Z<dbdD„Z=dcdE„Z> G dF„ dGe«      Z? G dH„ dIej*                  «      Z@ G dJ„ dKe,«      ZA G dL„ dMeA«      ZBdddN„ZCdedO„ZDdfdP„ZE G dQ„ dReB«      ZF G dS„ dTeA«      ZG G dU„ dVeG«      ZH G dW„ dXeG«      ZI	 	 	 	 	 	 	 	 dgdY„ZJy)hé    )Úannotations)ÚSequenceÚIterableÚOptionalÚTupleÚ
NamedTuple)Ú	TypeAliasN)ÚMatrix44ÚBoundingBox2d)Úleadinga+  Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed 
diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed 
diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet 
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
c                  ó   — e Zd Zy)ÚLayoutErrorN©Ú__name__Ú
__module__Ú__qualname__© ó    ú7lib/python3.12/site-packages/ezdxf/tools/text_layout.pyr   r   ‹   ó   „ Ør   r   c                  ó   — e Zd ZdZdZdZy)ÚStackingr   é   é   N)r   r   r   ÚOVERÚLINEÚSLANTEDr   r   r   r   r   �   s   „ Ø€DØ€DØ�Gr   r   c                  ó0   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)ÚLayoutAlignmentr   r   é   é   é   é   é   é   é	   N)r   r   r   ÚTOP_LEFTÚ
TOP_CENTERÚ	TOP_RIGHTÚMIDDLE_LEFTÚMIDDLE_CENTERÚMIDDLE_RIGHTÚBOTTOM_LEFTÚBOTTOM_CENTERÚBOTTOM_RIGHTr   r   r   r   r   •   s/   „ Ø€HØ€JØ€IØ€KØ€MØ€LØ€KØ€MØ�Lr   r   c                  ó   — e Zd ZdZdZdZy)ÚCellAlignmentr   r   r   N)r   r   r   ÚBOTTOMÚCENTERÚTOPr   r   r   r1   r1   ¡   s   „ Ø€FØ€FØ
�Cr   r1   c                  ó   — e Zd ZdZdZdZdZy)ÚParagraphAlignmentr   r   r    r!   N)r   r   r   ÚLEFTÚRIGHTr3   Ú	JUSTIFIEDr   r   r   r6   r6   §   s   „ Ø€DØ€EØ€FØ�Ir   r6   c                  ó   — e Zd ZdZdZdZy)ÚTabStopTyper   r   r   N)r   r   r   r7   r8   r3   r   r   r   r;   r;   ®   s   „ Ø€DØ€EØ�Fr   r;   c                  ó>   — e Zd ZU dZded<   ej                  Zded<   y)ÚTabStopç        ÚfloatÚposr;   ÚkindN)r   r   r   r@   Ú__annotations__r;   r7   rA   r   r   r   r=   r=   ´   s   … Ø€CˆÓØ#×(Ñ(€Dˆ+Ô(r   r=   c                óx   — t        j                  t        j                  t        j	                  «       «      | «      S ©N)Ú	itertoolsÚisliceÚcycleÚLOREM_IPSUMÚsplit)Úcounts    r   Úlorem_ipsumrK   ¹   s'   € Ü×ÑœIŸO™O¬K×,=Ñ,=Ó,?Ó@À%ÓHÐHr   c                  óŒ   — e Zd Zej                  	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Zej                  	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)ÚContentRendererNc                 ó   — y)a_  Render content into the given borders (lower left and upper right
        corners).

        Args:
            left: x coordinate of the left border
            bottom: y coordinate of the bottom border
            right: x coordinate of the right border
            top: y coordinate of the top border
            m: transformation Matrix44

        Nr   ©ÚselfÚleftÚbottomÚrightÚtopÚms         r   ÚrenderzContentRenderer.render¾   ó   � r   c                 ó   — y)z&Draw a line from (x1, y1) to (x2, y2).Nr   ©rP   Úx1Úy1Úx2Úy2rU   s         r   ÚlinezContentRenderer.lineÓ   rW   r   rD   ©rQ   r?   rR   r?   rS   r?   rT   r?   rU   r
   ÚreturnÚNone©rZ   r?   r[   r?   r\   r?   r]   r?   rU   r
   r`   ra   )r   r   r   ÚabcÚabstractmethodrV   r^   r   r   r   rM   rM   ½   s¦   „ Ø×Ñð ðàðð ðð ð	ð
 ðð ðð 
òó ðð( 	×ÑàHLð5Øð5Ø"ð5Ø(-ð5Ø38ð5Ø=Eð5à	ò5ó ñ5r   rM   c                  óP   — e Zd Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚDoNothingRendererNc                 ó   — y rD   r   rO   s         r   rV   zDoNothingRenderer.renderÛ   s   € ð 	r   c                 ó   — y rD   r   rY   s         r   r^   zDoNothingRenderer.lineå   ó   € ð 	r   rD   r_   rb   )r   r   r   rV   r^   r   r   r   rf   rf   Ú   s‚   „ ð ðàðð ðð ð	ð
 ðð ðð 
óð IMðØðØ"ðØ(-ðØ38ðØ=Eðà	ôr   rf   r	   ÚTuple4fÚTuple2fc                óØ   — | €yt        | «      }|dk(  r| d   | d   | d   | d   fS |dk(  r| d   | d   | d   | d   fS |dk(  r| d   | d   | d   | d   fS |dk(  r| d   | d   | d   | d   fS y)zDReturns the box margins in CSS like order: top, right, bottom, left.)r   r   r   r   r!   r   r   r   r    )Úlen)ÚmarginsrJ   s     r   Úresolve_marginsro   ï   s®   € à€ØÜ�‹L€EØ�‚zØ�q‰z˜7 1™: w¨q¡z°7¸1±:Ð=Ð=Ø�‚zØ�q‰z˜7 1™: w¨q¡z°7¸1±:Ð=Ð=Ø�‚zØ�q‰z˜7 1™: w¨q¡z°7¸1±:Ð=Ð=Ø�‚zØ�q‰z˜7 1™: w¨q¡z°7¸1±:Ð=Ð=Ør   c                ó
  — d}d}|dz  }|dz  }| t         j                  k(  r	 ||fS | t         j                  k(  r	| d}}||fS | t         j                  k(  r	| d}}||fS | t         j                  k(  rd|}}||fS | t         j
                  k(  r	| |}}||fS | t         j                  k(  r	| |}}||fS | t         j                  k(  rd|}}||fS | t         j                  k(  r	| |}}||fS | t         j                  k(  r| |}}||fS )z<Returns the left top corner adjusted to the given alignment.r>   ç       @r   )
r   r'   r(   r)   r*   r+   r,   r-   r.   r/   )ÚalignÚwidthÚheightrQ   rT   ÚcenterÚmiddles          r   Úinsert_locationrw   ÿ   sm  € à€DØ€CØ�S‰[€FØ�c‰\€FØ”×(Ñ(Ò(Øð" �ˆ9Ðð! 
”/×,Ñ,Ò	,Ø�W˜aˆcˆð �ˆ9Ðð 
”/×+Ñ+Ò	+Ø�V˜Qˆcˆð �ˆ9Ðð 
”/×-Ñ-Ò	-Ø˜ˆcˆð �ˆ9Ðð 
”/×/Ñ/Ò	/Ø�W˜fˆcˆð �ˆ9Ðð 
”/×.Ñ.Ò	.Ø�V˜Vˆcˆð �ˆ9Ðð 
”/×-Ñ-Ò	-Ø˜ˆcˆð
 �ˆ9Ðð	 
”/×/Ñ/Ò	/Ø�W˜fˆcˆð �ˆ9Ðð 
”/×.Ñ.Ò	.Ø�V˜VˆcˆØ�ˆ9Ðr   c                  óè   — e Zd Zeej
                  dd„«       «       Zeej
                  dd„«       «       Zej
                  d	d„«       Zej
                  d
d„«       Z	ej
                  ddd„«       Z
dd„Zy)ÚBoxc                 ó   — y rD   r   ©rP   s    r   Útotal_widthzBox.total_width  s   € à$'r   c                 ó   — y rD   r   r{   s    r   Útotal_heightzBox.total_height  s   € à%(r   c                 ó   — y©ú(x, y) is the top/left cornerNr   ©rP   ÚxÚys      r   Úplacez	Box.place#  rW   r   c                 ó   — y)z1Returns the final location as the top/left cornerNr   r{   s    r   Úfinal_locationzBox.final_location'  rW   r   Nc                 ó   — y©z%Render content at the final location.Nr   ©rP   rU   s     r   rV   z
Box.render+  rW   r   c                ó´   — 	 | j                  «       \  }}t        ||f|| j                  z   || j
                  z
  fg«      S # t        t        f$ r d\  }}Y ŒAw xY w)zyReturns the 2D bounding box of the container. If the cell is not placed the 
        top/left corner is (0, 0).

        ©r   r   )r‡   r   Ú	TypeErrorr   r|   r~   r‚   s      r   ÚbboxzBox.bbox/  si   € ð
	Ø×&Ñ&Ó(‰DˆAˆqô ˜q !˜f q¨4×+;Ñ+;Ñ';¸QÀ×ARÑARÑ=RÐ&SÐTÓUÐUøô œYÐ'ò 	Ø‰DˆAŠqð	ús   ‚A  Á AÁA©r`   r?   ©rƒ   r?   r„   r?   ©r`   ztuple[float, float]rD   ©rU   r
   r`   ra   )r`   r   )r   r   r   Úpropertyrc   rd   r|   r~   r…   r‡   rV   rŽ   r   r   r   ry   ry     sŽ   „ ØØ×ÑÚ'ó ó à'àØ×ÑÚ(ó ó à(à×Ñò,ó ð,ð 	×Ñò@ó ð@ð 	×Ñó4ó ð4ô	Vr   ry   c                  ó*   — e Zd ZdZdd„Zdd„Zdd	d„Zy)
ÚCellFc                 ó   — y rD   r   r‚   s      r   r…   z
Cell.place>  ri   r   c                 ó   — y)NrŒ   r   r{   s    r   r‡   zCell.final_locationC  s   € ð r   Nc                 ó   — y rD   r   rŠ   s     r   rV   zCell.renderH  ó   € Ør   r�   r‘   rD   r’   )r   r   r   Ú
is_visibler…   r‡   rV   r   r   r   r•   r•   ;  s   „ Ø€Jóó
õ
r   r•   c                  ó’   — e Zd ZU  e«       Zded<   	 	 d	 	 	 	 	 dd„Zdd„Zed„ «       Z	ed„ «       Z
edd„«       Zedd	„«       Zdd
„Zy)ÚGlueÚtupleÚEMPTYNc                ón   — t        |«      | _        |rt        |«      n| j                  | _        || _        y rD   )r?   Ú_widthÚ
_min_widthÚ
_max_width)rP   rs   Ú	min_widthÚ	max_widths       r   Ú__init__zGlue.__init__O  s*   € ô # 5›\ˆŒÙ.7œ% 	Ô*¸T¿[¹[ˆŒØ+4ˆ�r   c                ón   — | j                   }|�t        ||«      }t        || j                  «      | _        y rD   )r¢   ÚminÚmaxr¡   r    )rP   rs   r¤   s      r   ÚresizezGlue.resizeY  s/   € Ø—O‘Oˆ	ØÐ Ü˜	 5Ó)ˆEÜ˜% §¡Ó1ˆ�r   c                ó4   — | j                   | j                  k  S rD   )r¡   r    r{   s    r   Ú
can_shrinkzGlue.can_shrink_  s   € à�‰ §¡Ñ,Ð,r   c                óT   — | j                   d u xs | j                  | j                   k  S rD   )r¢   r    r{   s    r   Úcan_growzGlue.can_growc  s#   € à�‰ $Ð&ÒG¨$¯+©+¸¿¹Ñ*GÐGr   c                ó   — | j                   S rD   ©r    r{   s    r   r|   zGlue.total_widthg  ó   € à�{‰{Ðr   c                 ó   — y©Nr   r   r{   s    r   r~   zGlue.total_heightk  s   € àr   c                óX   — t        | j                  | j                  | j                  «      S rD   )ÚSpacer    r¡   r¢   r{   s    r   Úto_spacezGlue.to_spaceo  s   € Ü�T—[‘[ $§/¡/°4·?±?ÓCÐCr   )NN)rs   r?   r£   úOptional[float]r¤   r¶   ©rs   r?   r�   )r`   r´   )r   r   r   r�   rž   rB   r¥   r©   r“   r«   r­   r|   r~   rµ   r   r   r   rœ   rœ   L  s”   … Ù“7€Eˆ5Óð
 &*Ø%)ð	5àð5ð #ð5ð #ó	5ó2ð ñ-ó ð-ð ñHó ðHð òó ðð òó ðôDr   rœ   c                  ó   — e Zd Zy)r´   Nr   r   r   r   r´   r´   s  r   r   r´   c                  ó   — e Zd Zy)ÚNonBreakingSpaceNr   r   r   r   rº   rº   w  r   r   rº   c                  ó   — e Zd Zy)Ú	TabulatorNr   r   r   r   r¼   r¼   {  r   r   r¼   c                  ó~   — e Zd ZdZdZej                  df	 	 	 	 	 	 	 d
d„Zdd„Zd„ Z	e
dd„«       Ze
dd„«       Zdd	„Zy)ÚContentCella  Represents visible content like text or fractions.

    Supported vertical alignments (IntEnum):

        === =================
        int CellAlignment
        === =================
        0   BOTTOM
        1   CENTER
        2   TOP
        === =================

    TNc                óŽ   — d | _         d | _        t        |«      | _        t        |«      | _        t        |«      | _        || _        y rD   )Ú_final_xÚ_final_yr?   r    Ú_heightr1   ÚvalignÚrenderer)rP   rs   rt   rÃ   rÄ   s        r   r¥   zContentCell.__init__�  s;   € ð *.ˆŒØ)-ˆŒÜ˜E“lˆŒÜ˜V“}ˆŒÜ# FÓ+ˆŒØ ˆ�r   c                ó    — || _         || _        y rD   ©rÀ   rÁ   r‚   s      r   Úset_final_locationzContentCell.set_final_locationž  s   € ØˆŒØˆ�r   c                ó2   — | j                   | j                  fS rD   rÆ   r{   s    r   r‡   zContentCell.final_location¢  s   € Ø�}‰}˜dŸm™mÐ+Ð+r   c                ó   — | j                   S rD   r¯   r{   s    r   r|   zContentCell.total_width¥  r°   r   c                ó   — | j                   S rD   ©rÂ   r{   s    r   r~   zContentCell.total_height©  ó   € à�|‰|Ðr   c                ó    — || _         || _        yr€   rÆ   r‚   s      r   r…   zContentCell.place­  s   € àˆŒØˆ�r   )rs   r?   rt   r?   rÃ   r1   rÄ   úOptional[ContentRenderer]r�   r�   )r   r   r   Ú__doc__rš   r1   r2   r¥   rÇ   r‡   r“   r|   r~   r…   r   r   r   r¾   r¾     s~   „ ñð €Jð !.× 4Ñ 4Ø.2ð!àð!ð ð!ð ð	!ð
 ,ó!óò,ð òó ðð òó ðôr   r¾   c                  ó    — e Zd ZdZdZdZdZdZy)ÚStroker   r   r   r!   r%   N)r   r   r   Ú	NO_STROKEÚ	UNDERLINEÚSTRIKE_THROUGHÚOVERLINEÚCONTINUEr   r   r   rÑ   rÑ   ³  s   „ à€IØ€IØ€NØ€HØ�Hr   rÑ   c                  óŽ   ‡ — e Zd ZdZej
                  ej                  df	 	 	 	 	 	 	 	 	 dˆ fd„Zddd„Z		 	 	 d		 	 	 	 	 	 	 d
d„Z
ˆ xZS )ÚTexta½  Represents visible text content.

    Supported strokes as bit values (flags), can be combined:

        === =================
        int Stroke
        === =================
        0   NO_STROKE
        1   UNDERLINE
        2   STRIKE THROUGH
        4   OVERLINE
        8   CONTINUE
        === =================

    The CONTINUE flag extends the stroke of the current text cell across the
    glue cells to the following text cell.

    Nc                óJ   •— t         ‰| �  ||||«       t        |«      | _        y rD   )Úsuperr¥   ÚintÚstroke)rP   rs   rt   rÃ   rÜ   rÄ   Ú	__class__s         €r   r¥   zText.__init__Ð  s#   ø€ ô 	‰Ñ˜ ¨°Ô9Ü˜&“kˆ�r   c                óª   — | j                  «       \  }}| j                  }||z
  }|| j                  z   }| j                  j	                  |||||¬«       y )N)rQ   rR   rS   rT   rU   )r‡   r~   r|   rÄ   rV   )rP   rU   rQ   rT   rt   rR   rS   s          r   rV   zText.renderÛ  sZ   € Ø×'Ñ'Ó)‰	ˆˆcØ×"Ñ"ˆØ�v‘ˆØ�t×'Ñ'Ñ'ˆØ�‰×ÑØ˜f¨E°s¸að 	õ 	
r   c                óö  — | j                  «       \  }}||z  }| j                  }||z
  }|| j                  z   |z   }| j                  }	|	€J ‚|dz  }
| j                  t
        j                  z  r||
z
  }|	j                  |||||«       | j                  t
        j                  z  r||z   dz  }|	j                  |||||«       | j                  t
        j                  z  r||
z   }|	j                  |||||«       y y )Nr"   r   )
r‡   r~   r|   rÄ   rÜ   rÑ   rÓ   r^   rÔ   rÕ   )rP   Úextend_leftÚextend_rightrU   rQ   rT   rt   rR   rS   rÄ   Úspacingr„   s               r   Úrender_strokezText.render_strokeä  sÿ   € ð ×'Ñ'Ó)‰	ˆˆcØ�ÑˆØ×"Ñ"ˆØ�v‘ˆØ�t×'Ñ'Ñ'¨,Ñ6ˆØ—=‘=ˆØÐ#Ð#Ð#ð ˜1‘*ˆØ�;‰;œ×)Ñ)Ò)Ø˜Ñ ˆAØ�M‰M˜$  5¨!¨QÔ/Ø�;‰;œ×.Ñ.Ò.Ø�v‘ Ñ"ˆAØ�M‰M˜$  5¨!¨QÔ/Ø�;‰;œŸ™Ò(Ø�g‘ˆAØ�M‰M˜$  5¨!¨QÕ/ð )r   )
rs   r?   rt   r?   rÃ   r1   rÜ   rÛ   rÄ   rÎ   rD   ©rU   zOptional[Matrix44]r`   ra   )r   r   N)rà   r?   rá   r?   rU   r
   r`   ra   )r   r   r   rÏ   r1   r2   rÑ   rÒ   r¥   rV   rã   Ú__classcell__©rÝ   s   @r   rØ   rØ   ¼  s�   ø„ ñð. !.× 4Ñ 4Ø×&Ñ&Ø.2ð	"àð	"ð ð	"ð ð		"ð
 ð	"ð ,õ	"ô
ð ØØð	0àð0ð ð0ð ð	0ð
 
÷0r   rØ   c                óN   — | D ]   }|j                   sŒ|j                  |«       Œ" y rD   )rš   rV   )ÚcellsrU   Úcells      r   Úrender_cellsrê   ÿ  s   € ÛˆØ�?‹?Ø�K‰K˜�Nñ r   c                óè   ‡ ‡— ˆ ˆfd„}t        ‰ «      D ]\  \  Š}t        |t        «      sŒ|j                  sŒ$|j                  t        j
                  z  r |«       nd}|j                  ||¬«       Œ^ y)z+Render text cell strokes across glue cells.c                 óœ   •— d} ‰dz   }t        ‰«      }||k  r3‰|   }t        |t        «      r| |j                  z  } n	 | S |dz  }||k  rŒ3| S )Nr   r   )rm   Ú
isinstancerœ   r|   )ÚextendÚirJ   ré   rè   Úindexs       €€r   Ústroke_extensionz-render_text_strokes.<locals>.stroke_extension  sg   ø€ ØˆØ�A‰IˆÜ�E“
ˆØ�%ŠiØ˜‘8ˆDä˜$¤Ô%Ø˜$×*Ñ*Ñ*‘ààˆð �‰FˆAð �%‹ið ˆr   r   )rá   rU   N)Ú	enumeraterí   rØ   rÜ   rÑ   rÖ   rã   )rè   rU   rñ   ré   rî   rð   s   `    @r   Úrender_text_strokesró     sZ   ù€ õô ! Ö'‰ˆˆtÜ�dœDÕ! d§k£kØ+/¯;©;¼¿¹Ò+HÑ%Ô'ÈaˆFØ×Ñ¨F°aÐÕ8ñ (r   c                  óŠ   ‡ — e Zd ZdZdZej                  ej                  df	 	 	 	 	 	 	 	 	 d	ˆ fd„Z	d„ Z
d
d„Zddd„Zdd„Zˆ xZS )ÚFractionar  Represents visible fractions.

    Supported stacking A/B (IntEnum):

        === =========== =========
        int Stacking    Description
        === =========== =========
        0   OVER        A over B, without horizontal line
        1   LINE        A over B, horizontal line between
        2   SLANTED     A slanted line B
        === =========== =========

    g333333ó?Nc                ót   •— t         ‰| �  dd||«       || _        || _        || _        | j                  «        y r²   )rÚ   r¥   Ú	_stackingÚ_top_contentÚ_bottom_contentÚ_update_size)rP   rT   rR   ÚstackingrÃ   rÄ   rÝ   s         €r   r¥   zFraction.__init__1  s;   ø€ ô 	‰Ñ˜˜A˜v xÔ0Ø!ˆŒØˆÔØ%ˆÔØ×ÑÕr   c                óˆ  — | j                   }| j                  }| j                  t        j                  k(  r=|j
                  |j
                  z   | _        |j                  |j                  z   | _        y | j                  |j
                  |j
                  z   z  | _        t        |j                  |j                  «      | _        y rD   )rø   rù   r÷   r   r   r~   rÂ   r|   r    ÚHEIGHT_SCALEr¨   )rP   rT   rR   s      r   rú   zFraction._update_size?  s“   € Ø×ÑˆØ×%Ñ%ˆØ�>‰>œX×-Ñ-Ò-Ø×+Ñ+¨f×.AÑ.AÑAˆDŒLØŸ/™/¨F×,>Ñ,>Ñ>ˆD�Kà×,Ñ,°×0@Ñ0@À6×CVÑCVÑ0VÑWˆDŒLÜ˜cŸo™o¨v×/AÑ/AÓBˆD�Kr   c                ó.  — || _         || _        | j                  }| j                  }| j                  }| j
                  }|�|€t        d«      ‚| j                  t        j                  k(  rI|j                  ||«       |||j                  z
  z  }|||j                  z
  z  }|j                  ||«       y||dz  z   }||j                  dz  z
  }|j                  ||«       ||j                  dz  z
  }|||j                  z
  z  }|j                  ||«       y)r�   Nzno content setr   )rÀ   rÁ   r|   r~   rø   rù   r   r÷   r   r   r…   )rP   rƒ   r„   rs   rt   Útop_contentÚbottom_contentru   s           r   r…   zFraction.placeI  s  € àˆŒØˆŒØ× Ñ ˆØ×"Ñ"ˆØ×'Ñ'ˆØ×-Ñ-ˆØÐ .Ð"8ÜÐ.Ó/Ð/à�>‰>œX×-Ñ-Ò-Ø×Ñ˜a Ô#Ø�˜×3Ñ3Ñ3Ñ3ˆAØ�˜.×5Ñ5Ñ5Ñ5ˆAØ× Ñ   AÕ&à˜ ™‘]ˆFØ˜×0Ñ0°1Ñ4Ñ4ˆAØ×Ñ˜a Ô#Ø˜×3Ñ3°aÑ7Ñ7ˆAØ�˜.×5Ñ5Ñ5Ñ5ˆAØ× Ñ   AÕ&r   c                óÎ   — | j                   j                  |«       | j                  j                  |«       | j                  t        j
                  k7  r| j                  |«       y y rD   )rø   rV   rù   r÷   r   r   Ú_render_linerŠ   s     r   rV   zFraction.rendera  sM   € Ø×Ñ× Ñ  Ô#Ø×Ñ×#Ñ# AÔ&Ø�>‰>œXŸ]™]Ò*Ø×Ñ˜aÕ ð +r   c                ó   — | j                  «       \  }}| j                  }| j                  }| j                  t        j
                  k(  r|}||z   }||dz  z
  x}}	nUt        ||«      dz  }
|| j                  j                  z   }|| j                  j                  z
  }||
z
  }||
z
  }||
z   }||
z   }	| j                  j                  ||||	|«       y ©Nr   )
r‡   r|   r~   r÷   r   r   r§   rø   rÄ   r^   )rP   rU   rƒ   r„   ÚtwÚthrZ   r\   r[   r]   ÚdeltaÚcxÚcys                r   r  zFraction._render_lineg  sÓ   € Ø×"Ñ"Ó$‰ˆˆ1Ø×ÑˆØ×ÑˆØ�>‰>œXŸ]™]Ò*ØˆBØ�R‘ˆBØ˜"˜q™&‘jÐ ˆB‘ä˜˜B“K !‘OˆEØ�T×&Ñ&×2Ñ2Ñ2ˆBØ�T×&Ñ&×3Ñ3Ñ3ˆBØ�e‘ˆBØ�e‘ˆBØ�e‘ˆBØ�e‘ˆBØ�‰×Ñ˜2˜r 2 r¨1Õ-r   )
rT   r¾   rR   r¾   rû   r   rÃ   r1   rÄ   rÎ   r�   rD   r’   )r   r   r   rÏ   rý   r   r   r1   r2   r¥   rú   r…   rV   r  rå   ræ   s   @r   rõ   rõ      sn   ø„ ñð €Lð &Ÿ]™]Ø -× 4Ñ 4Ø.2ðàðð ðð ð	ð
 ðð ,õòCó'ô0!÷.r   rõ   c                ó¸  ‡ ‡‡‡— ˆfd„}ˆ ˆˆfd„}g Št        ‰ «      Š d Št        ‰ «      D ]q  \  Š}t        |t        «      rt        ‰t        «      r9t	        d«      ‚t        |t
        «      r |«       r|j                  «       } |«        |Š‰j                  |«       Œs ‰r9t        ‰d   t        «      r&‰j                  «        ‰rt        ‰d   t        «      rŒ&‰S )Nc                 ó˜   •— t        ‰«      dz
  } | dk\  r6‰|    }t        |t        «      r|j                  «       ‰| <   | dz  } ny | dk\  rŒ5y y ©Nr   r   )rm   rí   rº   rµ   )rð   ré   Úcontents     €r   Úreplace_pending_nbsp_by_spacesz7normalize_cells.<locals>.replace_pending_nbsp_by_spaces€  sP   ø€ Ü�G“˜qÑ ˆØ�qŠjØ˜5‘>ˆDÜ˜$Ô 0Ô1Ø!%§¡£�˜‘Ø˜‘
‘àð �q�jr   c                 óx   •— 	 ‰‰dz      } t        ‰t        «      rt        | t        «      syy# t         $ r Y yw xY w)Nr   TF)Ú
IndexErrorrí   Ú	_no_break)Úpeekrè   rð   Úprevs    €€€r   Úis_useless_nbspz(normalize_cells.<locals>.is_useless_nbspŠ  sE   ø€ ð	Ø˜ ™Ñ#ˆDô ˜$¤	Ô*´*¸TÄ9Ô2MØØøô	 ò 	Ùð	ús   ƒ- ­	9¸9zno glue between content cellséÿÿÿÿ)
Úlistrò   rí   Ú_contentr   rº   rµ   ÚappendÚ_glueÚpop)rè   r  r  ré   r  rð   r  s   `   @@@r   Únormalize_cellsr    s»   û€ ôöð €GÜ�‹K€EØ€DÜ  Ö'‰ˆˆtÜ�dœHÔ%Ü˜$¤Ô)Ü!Ð"AÓBÐBÜ˜Ô.Ô/±OÔ4EØ—=‘=“?ˆDÙ*Ô,àˆØ�‰�tÕð (ñ ”j ¨¡¬eÔ4Ø�‰Œñ ”j ¨¡¬eÕ4ð €Nr   c                  óF  — e Zd Z	 	 	 d	 	 	 	 	 	 	 dd„Zdd„Zd„ Zdd„Zej                  dd„«       Z	e
dd„«       Ze
dd„«       Ze
dd	„«       Ze
dd
„«       Ze
dd„«       Ze
dd„«       Ze
dd„«       Ze
d„ «       Ze
dd„«       Zddd„Zej                  d„ «       Zddd„Zdd„Zy)Ú	ContainerNc                ój   — d | _         d | _        || _        || _        t	        |«      | _        || _        y rD   )rÀ   rÁ   Ú_content_widthÚ_content_heightro   Ú_marginsrÄ   )rP   rs   rt   rn   rÄ   s        r   r¥   zContainer.__init__©  s=   € ð *.ˆŒØ)-ˆŒð 05ˆÔð 17ˆÔô "1°Ó!9ˆŒð 4<ˆ�r   c                ó@   — || _         || _        | j                  «        y rD   )rÀ   rÁ   Úplace_contentr‚   s      r   r…   zContainer.place¿  s   € ØˆŒØˆŒØ×ÑÕr   c                óh   — | j                  «       st        d«      ‚| j                  | j                  fS )NzContainer is not placed.)Ú	is_placedr   rÀ   rÁ   r{   s    r   r‡   zContainer.final_locationÄ  s+   € Ø�~‰~ÔÜÐ8Ó9Ð9Ø�}‰}˜dŸm™mÐ+Ð+r   c                ó>   — | j                   d uxr | j                  d uS rD   rÆ   r{   s    r   r%  zContainer.is_placedÉ  s   € Ø�}‰} DÐ(ÒF¨T¯]©]À$Ð-FÐFr   c                 ó   — y rD   r   r{   s    r   Ú__iter__zContainer.__iter__Ì  ó   € àr   c                ó    — | j                   d   S r²   ©r!  r{   s    r   Ú
top_marginzContainer.top_marginÐ  ó   € à�}‰}˜QÑÐr   c                ó    — | j                   d   S ©Nr   r+  r{   s    r   Úright_marginzContainer.right_marginÔ  r-  r   c                ó    — | j                   d   S r  r+  r{   s    r   Úbottom_marginzContainer.bottom_marginØ  r-  r   c                ó    — | j                   d   S )Nr    r+  r{   s    r   Úleft_marginzContainer.left_marginÜ  r-  r   c                ó4   — | j                   €y| j                   S r²   )r  r{   s    r   Úcontent_widthzContainer.content_widthà  s   € à×ÑÐ&Øà×&Ñ&Ð&r   c                óN   — | j                   | j                  z   | j                  z   S rD   )r6  r0  r4  r{   s    r   r|   zContainer.total_widthç  s$   € à×!Ñ! D×$5Ñ$5Ñ5¸×8HÑ8HÑHÐHr   c                ó4   — | j                   €y| j                   S r²   ©r   r{   s    r   Úcontent_heightzContainer.content_heightë  s   € à×ÑÐ'Øà×'Ñ'Ð'r   c                ó   — | j                   d u S rD   r9  r{   s    r   Úhas_flex_heightzContainer.has_flex_heightò  s   € à×#Ñ# tÐ+Ð+r   c                óN   — | j                   | j                  z   | j                  z   S rD   )r:  r,  r2  r{   s    r   r~   zContainer.total_heightö  s"   € à×"Ñ" T§_¡_Ñ4°t×7IÑ7IÑIÐIr   c                ó–   — | j                  «       st        d«      ‚| j                  r| j                  |«       | j	                  |«       y)zIRender container content.

        (x, y) is the top/left corner
        z(Layout has to be placed before renderingN)r%  r   rÄ   Úrender_backgroundÚrender_contentrŠ   s     r   rV   zContainer.renderú  s=   € ð
 �~‰~ÔÜÐHÓIÐIØ�=Š=Ø×"Ñ" 1Ô%Ø×Ñ˜AÕr   c                 ó   — y)z.Place container content at the final location.Nr   r{   s    r   r#  zContainer.place_content  ri   r   c                ó4   — | D ]  }|j                  |«       Œ yr‰   )rV   )rP   rU   Úentitys      r   r@  zContainer.render_content
  s   € ãˆFØ�M‰M˜!Õñ r   c                ó¸   — | j                  «       \  }}| j                  r;| j                  j                  ||| j                  z
  ||| j                  z   |¬«       yy)z(Render background at the final location.)rQ   rR   rT   rS   rU   N)r‡   rÄ   rV   r~   r|   )rP   rU   rƒ   r„   s       r   r?  zContainer.render_background  s^   € ð ×"Ñ"Ó$‰ˆˆ1Ø�=Š=Ø�M‰M× Ñ ØØ˜4×,Ñ,Ñ,ØØ˜$×*Ñ*Ñ*Øð !õ ð r   ©NNN)rs   r¶   rt   r¶   rn   úOptional[Sequence[float]]rÄ   rÎ   r�   ©r`   Úbool)r`   ry   r�   rD   r’   )r   r   r   r¥   r…   r‡   r%  rc   rd   r(  r“   r,  r0  r2  r4  r6  r|   r:  r<  r~   rV   r#  r@  r?  r   r   r   r  r  ¨  sC  „ ð #'Ø-1Ø.2ð<àð<ð  ð<ð +ð	<ð
 ,ó<ó,ò
,ó
Gð 	×Ñòó ðð ò ó ð ð ò ó ð ð ò ó ð ð ò ó ð ð ò'ó ð'ð òIó ðIð ò(ó ð(ð ñ,ó ð,ð òJó ðJô	ð 	×Ññó ðôô
r   r  c                  ób   — e Zd ZdZd	d
d„Zedd„«       Zedd„«       Zdd„Zddd„Z	edd„«       Z
y)ÚEmptyParagraphzVSpacer between two paragraphs, represents empty lines like in
    "line1

line2".
    c                óH   — || _         d| _        t        ||«      |z
  | _        y r²   )rÂ   r    r   Ú_last_line_spacing)rP   Ú
cap_heightÚline_spacings      r   r¥   zEmptyParagraph.__init__#  s$   € Ø(ˆŒØˆŒÜ")¨*°lÓ"CÀjÑ"PˆÕr   c                ó   — | j                   S rD   r¯   r{   s    r   r|   zEmptyParagraph.total_width(  r°   r   c                ó   — | j                   S rD   rË   r{   s    r   r~   zEmptyParagraph.total_height,  rÌ   r   c                ó   — || _         y rD   r¯   ©rP   rs   s     r   Úset_total_widthzEmptyParagraph.set_total_width0  s	   € Øˆ�r   Nc                 ó   — y rD   r   ©rP   rt   s     r   Údistribute_contentz!EmptyParagraph.distribute_content3  r™   r   c                ó   — | j                   S rD   ©rL  r{   s    r   Údistance_to_next_paragraphz)EmptyParagraph.distance_to_next_paragraph6  ó   € à×&Ñ&Ð&r   )r   )rM  r?   rN  r?   r�   r·   rD   )rt   r¶   )r   r   r   rÏ   r¥   r“   r|   r~   rS  rV  rY  r   r   r   rJ  rJ    sS   „ ñôQð
 òó ðð òó ðóôð ò'ó ñ'r   rJ  c                  ó´   ‡ — e Zd Zdej                  dddddf	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zd„ Zed„ «       Zdd„Z	dd„Z
dd	„Zd
„ Zdd„Zdd„Zddd„Zdd„Zˆ xZS )Ú	ParagraphN)r   r   r   r   c                ó¼   •— t         ‰| �  |d ||«       || _        |\  }}	}
|| _        |	| _        |
| _        || _        |xs g | _        g | _        g | _	        d| _
        y )Nr>   )rÚ   r¥   Ú_alignÚ_indent_firstÚ_indent_leftÚ_indent_rightÚ_line_spacingÚ
_tab_stopsÚ_cellsÚ_linesrL  )rP   rs   rr   ÚindentrN  rn   Ú	tab_stopsrÄ   ÚfirstrQ   rS   rÝ   s              €r   r¥   zParagraph.__init__<  sr   ø€ ô 	‰Ñ˜  g¨xÔ8ØˆŒØ#Ñˆˆt�UØ"ˆÔØ ˆÔØ"ˆÔØ)ˆÔØ#š/ rˆŒð #%ˆŒð +-ˆŒð #&ˆÕr   c                ó,   — t        | j                  «      S rD   )Úiterre  r{   s    r   r(  zParagraph.__iter__X  ó   € Ü�D—K‘KÓ Ð r   c                ó   — | j                   S rD   rX  r{   s    r   rY  z$Paragraph.distance_to_next_paragraph[  rZ  r   c                óz   — || j                   z
  | j                  z
  | _        | j                  dk  rt        d«      ‚y )Ng�íµ ÷Æ°>z#invalid width, no usable space left)r4  r0  r  r   rR  s     r   rS  zParagraph.set_total_width_  s?   € Ø# d×&6Ñ&6Ñ6¸×9JÑ9JÑJˆÔØ×Ñ Ò%ÜÐCÓDÐDð &r   c                ó:   — | j                   j                  |«       y rD   )rd  rî   )rP   r  s     r   Úappend_contentzParagraph.append_contentd  s   € Ø�‰×Ñ˜7Õ#r   c                ór   — | j                   }||r| j                  n| j                  z  }| j                  |z
  S rD   )ra  r_  r`  r6  )rP   rh  rf  s      r   Ú
line_widthzParagraph.line_widthg  s8   € Ø×#Ñ#ˆØ©�$×$Ò$°4×3DÑ3DÑDˆØ×!Ñ! FÑ*Ð*r   c                ó"  — | j                  «       \  }}|| j                  z  }|| j                  z  }d}| j                  }|D ]K  }| j	                  ||«      }|j                  ||«       |t        |j                  | j                  «      z  }d}ŒM y )NTF)	r‡   r4  r,  re  Ú_left_borderr…   r   r~   rb  )rP   rƒ   r„   rh  Úlinesr^   Úx_finals          r   r#  zParagraph.place_contentl  sŒ   € Ø×"Ñ"Ó$‰ˆˆ1Ø	ˆT×ÑÑˆØ	ˆT�_‰_ÑˆØˆØ—‘ˆÛˆDØ×'Ñ'¨¨5Ó1ˆGØ�J‰J�w Ô"Ø”˜×*Ñ*¨D×,>Ñ,>Ó?Ñ?ˆAØ‰Eñ	 r   c                ó@   — |r| j                   n| j                  }||z   S )z)Apply indentation and paragraph alignment)r_  r`  )rP   rƒ   rh  Úleft_indents       r   rs  zParagraph._left_borderx  s!   € á,1�d×(Ò(°t×7HÑ7HˆØ�;‰Ðr   c                óÔ   ‡— | j                   }| j                  Šd}t        |«      rA|d   }t        ˆfd„|dd D «       «      }|j                  }t        |‰«      |z
  | _        ||z  }|S )zWReturns the actual content height determined by the distributed
        lines.
        r>   r  c              3  óJ   •K  — | ]  }t        |j                  ‰«      –— Œ y ­wrD   )r   r~   )Ú.0r^   rN  s     €r   Ú	<genexpr>z6Paragraph._calculate_content_height.<locals>.<genexpr>†  s"   øè ø€ ð ÙEO¸T”˜×)Ñ)¨<×8ÁZùs   ƒ #N)re  rb  rm   Úsumr~   r   rL  )rP   rt  rt   Ú	last_lineÚlast_line_heightrN  s        @r   Ú_calculate_content_heightz#Paragraph._calculate_content_height}  s„   ø€ ð —‘ˆØ×)Ñ)ˆØˆÜˆuŒ:Ø˜b™	ˆIÜó ØEJÈ3ÈBÁZóó ˆFð  )×5Ñ5ÐäÐ(¨,Ó7Ð:JÑJð Ô#ð Ð&Ñ&ˆFØˆr   c                ó¾  ‡ ‡‡— dˆˆˆ fd„}t        ‰ j                  «      }t        |«      }‰ j                  j                  «        ‰ j                  Šd}t        |«      }dŠ‰ j                  ‰ j                  z   }t        t        «      \  }}}	||k  �r8|}
 |‰ j                  ‰«      «      }|j                  }||k  r||   }t        |t        «      r7|r5|j                  ||dz      |«      }||k(  r|dz  }n#|j                  s|dz  }n|j!                  |«      }||k(  r|dz  }n||k(  rn||	k(  r|dz  }n||k  rŒ|j                  r||j#                  «        ||k  rt        ||   t$        «      r|dz  }|j&                  }|�||z   |kD  r|
}n=dŠ‰ j(                  j!                  |«       |t+        |‰ j,                  «      z  }||k  r�Œ8||k  }‰t.        j0                  k(  rO|rt        ‰ j(                  «      nd}‰ j(                  d| D ]$  }t        |t2        «      sJ ‚|j5                  «        Œ& ‰ j7                  «       ‰ _        |r‰ j;                  ||d ‰«      S y)	zùDistribute the raw content into lines. Returns the cells which do
        not fit as a new paragraph.

        Args:
            height: available total height (margins + content), ``None`` for
                unrestricted paragraph height

        c                ó�  •— ‰t         j                  t         j                  fv r]‰r‰j                  n‰j                  }t        ‰j                  | | «      }‰t         j                  k(  rt        | |«      S t        | |«      S ‰t         j                  k(  rt        | «      S ‰t         j                  k(  rt        | «      S t        ‰«      ‚rD   )r6   r7   r9   r_  r`  Úshift_tab_stopsrc  ÚLeftLineÚJustifiedLiner8   Ú	RightLiner3   Ú
CenterLiner   )rs   rf  rg  rr   rh  rP   s      €€€r   Únew_linez.Paragraph.distribute_content.<locals>.new_line›  s»   ø€ ØÔ+×0Ñ0Ô2D×2NÑ2NÐOÑOÙ/4˜×+Ò+¸$×:KÑ:K�Ü+¨D¯O©O¸f¸WÀeÓL�	ð Ô 2× 7Ñ 7Ò7ô ˜U IÓ.ðô ' u¨iÓ8ðð
 Ô,×2Ñ2Ò2Ü  Ó'Ð'ØÔ,×3Ñ3Ò3Ü! %Ó(Ð(ä! %Ó(Ð(r   r   Tr   NFr  )rs   r?   r`   ÚAbstractLine)r  rd  Úgroup_non_breakable_cellsÚclearr^  rm   r,  r2  rj  Ú
AppendTyperq  Úhas_tab_supportrí   r¼   Úappend_with_tabÚhas_contentr  Úremove_line_breaking_spacer´   r~   re  r   rb  r6   r9   r„  Ú
distributer  r   Ú_new_paragraph)rP   rt   r‡  rè   rð   rJ   Úparagraph_heightÚFAILÚSUCCESSÚFORCEDÚundor^   rŒ  ré   Úappend_stateÚline_heightÚnot_all_cells_processedÚendrr   rh  s   `                 @@r   rV  zParagraph.distribute_content‘  sw  ú€ ÷	)ô  ,¨D¯K©KÓ8ˆÜ)¨%Ó0ˆà�‰×ÑÔà$(§K¡KˆØˆÜ˜“ZˆØˆð #'§/¡/°D×4FÑ4FÑ"FÐô !%¤ZÓ 0Ñˆˆg�vØ�e‹mð ˆDÙ˜DŸO™O¨EÓ2Ó3ˆDØ"×2Ñ2ˆOØ˜%’-à˜U‘|�Ü˜d¤IÔ.±?Ø#'×#7Ñ#7ð ˜e a™iÑ(Øó	$�Lð $ wÒ.Ø ™
™Ø!×-Ò-ð  ™
™à#'§;¡;¨tÓ#4�Là 7Ò*Ø˜Q‘J‘EØ! TÒ)ØØ! VÒ+Ø˜Q‘J�EØð3 ˜%“-ð6 ×ÒØ×/Ñ/Ô1à˜5’=¤Z°°e±¼eÔ%DØ˜Q‘J�Eà"×/Ñ/�àÐ&Ø(¨;Ñ6¸Ò?ð !�EØà!�EØ—K‘K×&Ñ& tÔ,Ø$¬°¸T×=OÑ=OÓ(PÑPÐ$ðe �eŒmðf #(¨%¡-ÐØÔ&×0Ñ0Ò0ñ '>”#�d—k‘kÔ"À2ˆCØŸ™ D SÓ)�Ü! $¬Ô6Ð6Ð6Ø—‘Õ!ð *ð
  $×=Ñ=Ó?ˆÔñ #Ø×&Ñ& u¨U¨V }°eÓ<Ð<àr   c           	     ó(  — |r| j                   n| j                  }|| j                  | j                  f}t        | j                  | j
                  || j                  | j                  | j                  | j                  «      }|j                  |«       |S rD   )r_  r`  ra  r\  r  r^  rb  r!  rc  rÄ   ro  )rP   rè   rh  Úindent_firstrf  Ú	paragraphs         r   r‘  zParagraph._new_paragraph  s€   € á-2�t×)Ò)¸×8IÑ8IˆØ × 1Ñ 1°4×3EÑ3EÐFˆÜØ×ÑØ�K‰KØØ×ÑØ�M‰MØ�O‰OØ�M‰Mó
ˆ	ð 	× Ñ  Ô'ØÐr   )rs   r¶   rr   r6   rf  ztuple[float, float, float]rN  r?   rn   rF  rg  úOptional[Sequence[TabStop]]rÄ   rÎ   r·   )r  úIterable[Cell])rh  rH  r`   r?   )rƒ   r?   rh  rH  r`   r?   r�   rD   )rt   r¶   r`   zOptional[Paragraph])rè   ú
list[Cell]rh  rH  r`   r\  )r   r   r   r6   r7   r¥   r(  r“   rY  rS  ro  rq  r#  rs  r  rV  r‘  rå   ræ   s   @r   r\  r\  ;  s­   ø„ ð "&Ø$6×$;Ñ$;Ø-6ØØ-1Ø15Ø.2ð&àð&ð "ð&ð +ð	&ð
 ð&ð +ð&ð /ð&ð ,õ&ò8!ð ñ'ó ð'óEó
$ó+ò

óó
ô(n÷`r   r\  c                  ó¬   ‡ — e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zd„ Zd„ Zedd„«       Zdd„Z	ed„ «       Z
edd„«       Zedd	„«       Zd
„ Zdd„Zˆ xZS )ÚColumnc                óF   •— t         ‰| �  ||||«       || _        g | _        y rD   )rÚ   r¥   Ú_gutterÚ_paragraphs)rP   rs   rt   Úgutterrn   rÄ   rÝ   s         €r   r¥   zColumn.__init__  s'   ø€ ô 	‰Ñ˜ ¨°Ô:àˆŒØ,.ˆÕr   c           	     óÖ   — | j                  | j                  | j                  | j                  | j                  | j
                  | j                  | j                  f| j                  ¬«      S )N)rs   rt   r¦  rn   rÄ   )	rÝ   r6  r:  r¦  r,  r0  r2  r4  rÄ   r{   s    r   Úclone_emptyzColumn.clone_empty   sa   € Ø�~‰~Ø×$Ñ$Ø×&Ñ&Ø—;‘;à—‘Ø×!Ñ!Ø×"Ñ"Ø× Ñ ð	ð —]‘]ð ó 
ð 	
r   c                ó,   — t        | j                  «      S rD   )rj  r¥  r{   s    r   r(  zColumn.__iter__.  s   € Ü�D×$Ñ$Ó%Ð%r   c                ó,   — t        | j                  «      S rD   )rm   r¥  r{   s    r   Ú__len__zColumn.__len__1  s   € Ü�4×#Ñ#Ó$Ð$r   c                óB   — | j                   }|€| j                  «       S |S )zoReturns the current content height for flexible columns and the
        max. content height otherwise.
        ©Úmax_content_heightÚused_content_height)rP   Ú
max_heights     r   r:  zColumn.content_height4  s*   € ð
 ×,Ñ,ˆ
ØÐØ×+Ñ+Ó-Ð-àÐr   c                ót   — | j                   }d}|r't        d„ |d d D «       «      }||d   j                  z  }|S )Nr>   c              3  óN   K  — | ]  }|j                   |j                  z   –— Œ y ­wrD   )r~   rY  )rz  Úps     r   r{  z-Column.used_content_height.<locals>.<genexpr>C  s#   è ø€ ð ÙGVÀ!�—‘ ×!=Ñ!=Õ=Áùó   ‚#%r  )r¥  r|  r~   )rP   Ú
paragraphsrt   s      r   r¯  zColumn.used_content_height?  sO   € Ø×%Ñ%ˆ
ØˆÙÜñ ØGQÐRUÐSUÁóó ˆFð �j ‘n×1Ñ1Ñ1ˆFØˆr   c                ó   — | j                   S rD   )r¤  r{   s    r   r¦  zColumn.gutterI  rÌ   r   c                ó   — | j                   S rD   r9  r{   s    r   r®  zColumn.max_content_heightM  ó   € à×#Ñ#Ð#r   c                óV   — | j                   €y| j                  «       | j                   k  S ©NTr­  r{   s    r   Úhas_free_spacezColumn.has_free_spaceQ  s+   € à×"Ñ"Ð*ØØ×'Ñ'Ó)¨D×,CÑ,CÑCÐCr   c                óä   — | j                  «       \  }}|| j                  z  }|| j                  z  }| j                  D ]0  }|j	                  ||«       ||j
                  |j                  z   z  }Œ2 y rD   )r‡   r4  r,  r¥  r…   r~   rY  )rP   rƒ   r„   r³  s       r   r#  zColumn.place_contentW  sh   € Ø×"Ñ"Ó$‰ˆˆ1Ø	ˆT×ÑÑˆØ	ˆT�_‰_ÑˆØ×!Ô!ˆAØ�G‰G�A�qŒMØ�—‘ !×">Ñ">Ñ>Ñ>‰Añ "r   c                óN  — g }|D ]�  }|r|j                  |«       Œ|j                  | j                  «       | j                  rd }n| j                  | j                  «       z
  }|j                  |«      }| j                  j                  |«       |€Œ�|j                  |«       ŒŸ |S rD   )r  rS  r6  r<  r®  r¯  rV  r¥  )rP   rµ  Ú	remainderr�  rt   Úrests         r   Úappend_paragraphszColumn.append_paragraphs_  s    € Ø%'ˆ	Û#ˆIÙØ× Ñ  Ô+ØØ×%Ñ% d×&8Ñ&8Ô9Ø×#Ò#Ø‘à×0Ñ0°4×3KÑ3KÓ3MÑM�Ø×/Ñ/°Ó7ˆDØ×Ñ×#Ñ# IÔ.ØÑØ× Ñ  Õ&ð $ð Ðr   )Nr   NN)
rs   r?   rt   r¶   r¦  r?   rn   rF  rÄ   rÎ   ©r`   r¢  r�   )r`   r¶   rG  )rµ  úIterable[Paragraph]r`   zlist[Paragraph])r   r   r   r¥   r¨  r(  r«  r“   r:  r¯  r¦  r®  r»  r#  rÀ  rå   ræ   s   @r   r¢  r¢    s¶   ø„ ð #'ØØ-1Ø.2ð/àð/ð  ð/ð ð	/ð
 +ð/ð ,õ/ó
ò&ò%ð òó ðóð ñó ðð ò$ó ð$ð òDó ðDò
?÷r   r¢  c                  óü   ‡ — e Zd Z	 	 	 d	 	 	 	 	 	 	 dˆ fd„Zd„ Zd„ Zed„ «       Zed„ «       Zdd„Z	ed„ «       Z
dd„Zd	d	ej                  f	 	 	 	 	 dˆ fd
„Zd„ Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zˆ xZS )ÚLayoutc                óT   •— t         ‰| �  ||||«       || _        d| _        g | _        y r²   )rÚ   r¥   Ú_reference_column_widthÚ_current_columnÚ_columns)rP   rs   rt   rn   rÄ   rÝ   s        €r   r¥   zLayout.__init__r  s/   ø€ ô 	‰Ñ˜ ¨°Ô:Ø',ˆÔ$Ø ˆÔØ&(ˆ�r   c                ó,   — t        | j                  «      S rD   )rj  rÈ  r{   s    r   r(  zLayout.__iter__~  s   € Ü�D—M‘MÓ"Ð"r   c                ó,   — t        | j                  «      S rD   )rm   rÈ  r{   s    r   r«  zLayout.__len__�  s   € Ü�4—=‘=Ó!Ð!r   c                ó   — | j                   S rD   )rÇ  r{   s    r   Úcurrent_column_indexzLayout.current_column_index„  r¸  r   c                óV   — | j                   }| j                  r| j                  «       }|S rD   )r  rÈ  Ú_calculate_content_widthrR  s     r   r6  zLayout.content_widthˆ  s'   € à×#Ñ#ˆØ�=Š=Ø×1Ñ1Ó3ˆEØˆr   c                ó”   — t        d„ | j                  d d D «       «      }| j                  r|| j                  d   j                  z  }|S )Nc              3  óN   K  — | ]  }|j                   |j                  z   –— Œ y ­wrD   )r|   r¦  ©rz  Úcs     r   r{  z2Layout._calculate_content_width.<locals>.<genexpr>�  s    è ø€ ÐIÑ6H°�A—M‘M A§H¡HÕ,Ñ6Hùr´  r  )r|  rÈ  r|   rR  s     r   rÎ  zLayout._calculate_content_width�  sB   € ÜÑI°d·m±mÀCÀRÑ6HÓIÓIˆØ�=Š=Ø�T—]‘] 2Ñ&×2Ñ2Ñ2ˆEØˆr   c                ób   — | j                   }| j                  r| j                  «       }|S |€d}|S r²   )r   rÈ  r  rU  s     r   r:  zLayout.content_height•  s:   € à×%Ñ%ˆØ�=Š=Ø×3Ñ3Ó5ˆFð ˆð ˆ^ØˆFØˆr   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrD   ©r~   rÑ  s     r   r{  z3Layout._calculate_content_height.<locals>.<genexpr>Ÿ  s   è ø€ Ð9©= a�1—>•>©=ùó   ‚)r¨   rÈ  r{   s    r   r  z Layout._calculate_content_heightž  s   € ÜÑ9¨4¯=ª=Ó9Ó9Ð9r   r   c                ó‚   •— | j                   }| j                  }t        |||«      \  }}t        ‰| �  ||z   ||z   «       y)aH  Place layout and all sub-entities at the final location, relative
        to the insertion point (x, y) by the alignment defined by the argument
        `align` (IntEnum).

        === ================
        int LayoutAlignment
        === ================
        1   TOP_LEFT
        2   TOP_CENTER
        3   TOP_RIGHT
        4   MIDDLE_LEFT
        5   MIDDLE_CENTER
        6   MIDDLE_RIGHT
        7   BOTTOM_LEFT
        8   BOTTOM_CENTER
        9   BOTTOM_RIGHT
        === ================

        It is possible to add content after calling :meth:`place`, but
        :meth:`place` has to be called again before calling :meth:`render`.

        It is recommended to place the layout at origin (0, 0) and use a
        transformation matrix to move the layout to the final location in
        the target DXF layout.

        N)r|   r~   rw   rÚ   r…   )	rP   rƒ   r„   rr   rs   rt   rQ   rT   rÝ   s	           €r   r…   zLayout.place¡  sD   ø€ ðB × Ñ ˆØ×"Ñ"ˆÜ# E¨5°&Ó9‰	ˆˆcÜ‰‰�a˜$‘h  C¡Õ(r   c                óÐ   — | j                  «       \  }}|| j                  z   }|| j                  z
  }| D ]0  }|j                  ||«       ||j                  |j
                  z   z  }Œ2 y)z$Place content at the final location.N)r‡   r4  r,  r…   r|   r¦  )rP   rƒ   r„   Úcolumns       r   r#  zLayout.place_contentÇ  sc   € à×"Ñ"Ó$‰ˆˆ1Ø�× Ñ Ñ ˆØ�—‘ÑˆÛˆFØ�L‰L˜˜AÔØ�×#Ñ# f§m¡mÑ3Ñ3‰Añ r   c                óx   — |s| j                   }t        |||||¬«      }| j                  j                  |«       |S )z"Append a new column to the layout.)r¦  rn   rÄ   )rÆ  r¢  rÈ  r  )rP   rs   rt   r¦  rn   rÄ   rÚ  s          r   Úappend_columnzLayout.append_columnÐ  s@   € ñ Ø×0Ñ0ˆEÜØ�6 &°'ÀHô
ˆð 	�‰×Ñ˜VÔ$Øˆr   c                óØ  — t        |«      }| j                  }| j                  t        |«      k  r]|| j                     }|j	                  |«      }t        |«      dk(  ry | xj                  dz  c_        | j                  t        |«      k  rŒ]|r\| j                  «       }t        | j                  «      dz
  | _        |j	                  |«      }| j                  dkD  rt        d«      ‚|rŒ[y y )Nr   r   éd   z#Internal error - not enough space!?)r  rÈ  rÇ  rm   rÀ  Ú_new_columnr   )rP   rµ  r¾  ÚcolumnsrÚ  s        r   rÀ  zLayout.append_paragraphsá  sÓ   € Ü˜Ó$ˆ	à—-‘-ˆØ×"Ñ"¤S¨£\Ò1Ø˜T×1Ñ1Ñ2ˆFØ×0Ñ0°Ó;ˆIÜ�9‹~ Ò"ØØ× Ò  AÑ%Õ ð ×"Ñ"¤S¨£\Ó1ñ Ø×%Ñ%Ó'ˆFÜ#& t§}¡}Ó#5¸Ñ#9ˆDÔ Ø×0Ñ0°Ó;ˆIØ×#Ñ# cÒ)Ü!Ð"GÓHÐHô r   c                ó¼   — t        | j                  «      dk(  rt        d«      ‚| j                  d   j                  «       }| j                  j	                  |«       |S )Nr   zno column existr  )rm   rÈ  r   r¨  r  )rP   Úemptys     r   rß  zLayout._new_columnô  sM   € Üˆt�}‰}Ó Ò"ÜÐ/Ó0Ð0Ø—‘˜bÑ!×-Ñ-Ó/ˆØ�‰×Ñ˜UÔ#Øˆr   c                ó”   — | xj                   dz  c_         | j                   t        | j                  «      k\  r| j                  «        y y r/  )rÇ  rm   rÈ  rß  r{   s    r   Únext_columnzLayout.next_columnû  s;   € Ø×Ò Ñ!ÕØ×Ñ¤3 t§}¡}Ó#5Ò5Ø×ÑÕð 6r   rE  )rs   r?   rt   r¶   rn   rF  rÄ   rÎ   r�   )rƒ   r?   r„   r?   rr   r   )NNr   NN)rs   r¶   rt   r¶   r¦  r?   rn   rF  rÄ   rÎ   r`   r¢  )rµ  rÂ  rÁ  )r`   ra   )r   r   r   r¥   r(  r«  r“   rÌ  r6  rÎ  r:  r  r   r'   r…   r#  rÜ  rÀ  rß  rä  rå   ræ   s   @r   rÄ  rÄ  q  s!  ø„ ð #'Ø-1Ø.2ð
)àð
)ð  ð
)ð +ð	
)ð
 ,õ
)ò#ò"ð ñ$ó ð$ð ñó ðóð ñó ðó:ð
 ØØ!0×!9Ñ!9ð	$)àð$)ð ð$)ð õ	$)òL4ð "&Ø"&ØØ-1Ø.2ðàðð  ðð ð	ð
 +ðð ,ðð 
óó"Ió&÷r   rÄ  c                óT   — | D ]#  }|j                  ||«       ||j                  z  }Œ% y rD   )r…   r|   )rè   rƒ   r„   ré   s       r   Úlinear_placingræ    s*   € ÛˆØ�
‰
�1�aÔØ	ˆT×ÑÑ‰ñ r   c                  ó„   ‡ — e Zd Zdej                  f	 d	ˆ fd„Zd„ Zed
d„«       Zed
d„«       Z	ddd„Z
dˆ fd„Zdd„Zˆ xZS )ÚRigidConnectionNc                ó^   •— t         ‰| �  dd|¬«       |rt        |«      | _        y g | _        y )Nr   )rÃ   )rÚ   r¥   r  rd  )rP   rè   rÃ   rÝ   s      €r   r¥   zRigidConnection.__init__  s,   ø€ ô 	‰Ñ˜˜A fÐÔ-Ù16¤$ u£+ˆ�¸Bˆ�r   c                ó,   — t        | j                  «      S rD   )rj  rd  r{   s    r   r(  zRigidConnection.__iter__  rk  r   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrD   ©r|   ©rz  ré   s     r   r{  z.RigidConnection.total_width.<locals>.<genexpr>  s   è ø€ Ð<±¨�4×#Õ#±ùr×  )r|  rd  r{   s    r   r|   zRigidConnection.total_width  s   € äÑ<°·²Ó<Ó<Ð<r   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrD   rÖ  rî  s     r   r{  z/RigidConnection.total_height.<locals>.<genexpr>  s   è ø€ Ð=±¨�4×$Õ$±ùr×  )r¨   rd  r{   s    r   r~   zRigidConnection.total_height  s   € äÑ=°·²Ó=Ó=Ð=r   c                ó\   — t        | j                  |«       t        | j                  |«       y rD   )rê   rd  ró   rŠ   s     r   rV   zRigidConnection.render  s   € Ü�T—[‘[ !Ô$Ü˜DŸK™K¨Õ+r   c                óT   •— t         ‰| �  ||«       t        | j                  ||«       y rD   )rÚ   r…   ræ  rd  ©rP   rƒ   r„   rÝ   s      €r   r…   zRigidConnection.place  s!   ø€ Ü‰‰�a˜ÔÜ�t—{‘{ A qÕ)r   c                ó(   — d„ | j                   D «       S )Nc              3  ó\   K  — | ]$  }t        |t        «      sŒ|j                  sŒ!|–— Œ& y ­wrD   )rí   rœ   r­   rî  s     r   r{  z0RigidConnection.growable_glue.<locals>.<genexpr>"  s#   è ø€ ð 
Ù(�T¬J°t¼TÕ,BÀtÇ}Ã}ŒD™[ùs   ‚,˜,¥,)rd  r{   s    r   Úgrowable_gluezRigidConnection.growable_glue!  s   € ñ
Ø!Ÿ[š[ó
ð 	
r   )rè   zOptional[Iterable[Cell]]r�   rD   rä   r�   )r`   zIterable[Glue])r   r   r   r1   r2   r¥   r(  r“   r|   r~   rV   r…   rö  rå   ræ   s   @r   rè  rè    sW   ø„ à04¸]×=QÑ=Qð?Ø-õ?ò!ð ò=ó ð=ð ò>ó ð>ô,õ*÷
r   rè  c                ó*  ‡ ‡— dˆ ˆfd„}d}t        ‰ «      }g Š||k  ru‰ |   }t        |t        «      rD|}|dz  }||k  r(t        ‰ |   t        «      s
 |||«       n|dz  }||k  rŒ(||k(  r
 |||«       nŒ^‰j                  |«       |dz  }||k  rŒu‰S )Nc                óŠ   •— ‰| | }t        |«      dkD  r‰j                  t        |«      «       y ‰j                  |d   «       y r  )rm   r  rè  )ÚsÚeÚ_rigid_contentrè   Ú	new_cellss      €€r   Úappend_rigid_contentz7group_non_breakable_cells.<locals>.append_rigid_content(  sA   ø€ Ø˜q ˜ˆÜˆ~Ó Ò"Ø×Ñœ_¨^Ó<Õ=à×Ñ˜^¨AÑ.Õ/r   r   r   )rù  rÛ   rú  rÛ   )rm   rí   r  r  )rè   rý  rð   rJ   ré   Ústartrü  s   `     @r   r‰  r‰  '  s·   ù€ ö0ð €EÜ�‹J€EØ€IØ
�%Š-Ø�U‰|ˆÜ�dœIÔ&ØˆEØ�Q‰JˆEØ˜%’-Ü! %¨¡,´	Ô:Ù(¨°Ô6ØØ˜‘
�ð	 ˜%“-ð
 ˜Š~Ù$ U¨EÕ2àà×Ñ˜TÔ"Ø�‰
ˆð! �%‹-ð" Ðr   c                óÆ   — d}t        | t        «      rN| j                  t        j                  k7  r1| j
                  |z
  }| j                  t        j                  k(  r|dz  }|S )Nr>   rq   )rí   r¾   rÃ   r1   r4   r~   r3   )ré   Úgroup_heightÚdys      r   Úvertical_cell_shiftr  F  sR   € Ø	€BÜ�$œÔ$¨¯©¼×8IÑ8IÒ)IØ×Ñ Ñ-ˆØ�;‰;œ-×.Ñ.Ò.Ø�#‰IˆBØ€Ir   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)ÚLineCellr•   ré   r?   ÚoffsetrH  ÚlockedN)r   r   r   rB   r   r   r   r  r  O  s   … Ø
ƒJØƒMØ„Lr   r  c                  ó   — e Zd ZdZdZdZy)r‹  r   r   r   N)r   r   r   r“  r”  r•  r   r   r   r‹  r‹  U  s   „ Ø€DØ€GØ�Fr   r‹  c                  óê   ‡ — e Zd ZdZdˆ fd„Zd„ Zej                  dd„«       Zej                  dd„«       Z	e
d„ «       Zdˆ fd„Ze
dd„«       Ze
dd	„«       Ze
dd
„«       Zdd„Zdd„Zddd„Zdd„Zˆ xZS )rˆ  Fc                ób   •— t         ‰| �  |dt        j                  ¬«       g | _        d| _        y )Nr   )rs   rt   rÃ   r>   )rÚ   r¥   r1   r2   rd  Ú_current_offset)rP   rs   rÝ   s     €r   r¥   zAbstractLine.__init__^  s,   ø€ Ü‰Ñ˜u¨Q´}×7KÑ7KÐÔLØ&(ˆŒØ&)ˆÕr   c                ó"   — | j                  «       S rD   )Úflattenr{   s    r   r(  zAbstractLine.__iter__c  s   € Ø�|‰|‹~Ðr   c                 ó   — y)z;Append cell to the line content and report SUCCESS or FAIL.Nr   ©rP   ré   s     r   r  zAbstractLine.appendf  ri   r   c                 ó   — y)zjAppend cell with preceding tabulator cell to the line content
        and report SUCCESS or FAIL.
        Nr   ©rP   ré   Útabs      r   r�  zAbstractLine.append_with_tabk  s   € ð
 	r   c                ó,   — t        | j                  «      S rD   )rH  rd  r{   s    r   rŽ  zAbstractLine.has_contentr  s   € ä�D—K‘KÓ Ð r   c                óØ   •— t         ‰| �  ||«       | j                  }| j                  D ]>  }|j                  }||j
                  z   }|t        ||«      z   }|j                  ||«       Œ@ y rD   )rÚ   r…   r~   rd  ré   r  r  )	rP   rƒ   r„   r   Ú	line_cellré   r  r	  rÝ   s	           €r   r…   zAbstractLine.placev  sc   ø€ Ü‰‰�a˜ÔØ×(Ñ(ˆØŸœˆIØ—>‘>ˆDØ�Y×%Ñ%Ñ%ˆBØÔ(¨¨|Ó<Ñ<ˆBØ�J‰J�r˜2Õñ	 %r   c                ó   — | j                   S rD   r¯   r{   s    r   rq  zAbstractLine.line_width  r°   r   c                ó˜   — d}t        | j                  «      r2| j                  d   }|j                  |j                  j                  z   }|S )Nr>   r  )rm   rd  r  ré   r|   )rP   rs   Ú	last_cells      r   r|   zAbstractLine.total_widthƒ  s?   € àˆÜˆt�{‰{ÔØŸ™ B™ˆIØ×$Ñ$ y§~¡~×'AÑ'AÑAˆEØˆr   c                óf   — t        | j                  «      rt        d„ | j                  D «       «      S y)Nc              3  óH   K  — | ]  }|j                   j                  –— Œ y ­wrD   )ré   r~   rÑ  s     r   r{  z,AbstractLine.total_height.<locals>.<genexpr>Ž  s   è ø€ Ð@±K¨q�q—v‘v×*Õ*±Kùó   ‚ "r>   )rm   rd  r¨   r{   s    r   r~   zAbstractLine.total_height‹  s&   € äˆt�{‰{ÔÜÑ@°D·K²KÓ@Ó@Ð@Ør   c                óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w )z.Yield line content including RigidConnections.)rd  ré   )rP   rÒ  s     r   rè   zAbstractLine.cells‘  s"   € à $§¢Ó,¡˜1�—“ Ñ,Ð,ùÒ,s   �%c              #  óx   K  — | j                  «       D ]!  }t        |t        «      r|E d{  –—†  Œ|–— Œ# y7 Œ­w)z2Yield line content with resolved RigidConnections.N)rè   rí   rè  r  s     r   r  zAbstractLine.flatten•  s/   è ø€ à—J‘J–LˆDÜ˜$¤Ô0Ø—‘à“
ñ	 !àús   ‚):«8¬:c                óf   — t        | j                  «       «      }t        ||«       t        ||«       y rD   )r  rè   rê   ró   )rP   rU   rè   s      r   rV   zAbstractLine.render�  s&   € Ü�T—Z‘Z“\Ó"ˆÜ�U˜AÔÜ˜E 1Õ%r   c                ó|   — | j                   }|r.t        |d   j                  t        «      r|j	                  «        yy)z]Remove the last space in the line. Returns True if such a space was
        removed.
        r  TF)rd  rí   ré   r´   r  )rP   rd  s     r   r�  z'AbstractLine.remove_line_breaking_space¢  s0   € ð —‘ˆÙ”j ¨¡§¡´%Ô8Ø�J‰JŒLØØr   r·   ©ré   r•   r`   r‹  ©ré   r•   r  r¼   r`   r‹  r�   r�   )r`   rŸ  rD   r’   rG  )r   r   r   rŒ  r¥   r(  rc   rd   r  r�  r“   rŽ  r…   rq  r|   r~   rè   r  rV   r�  rå   ræ   s   @r   rˆ  rˆ  [  s¯   ø„ Ø€Oõ*ò
ð 	×Ñòó ðð 	×Ñòó ðð ñ!ó ð!õð òó ðð òó ðð òó ðó
-óô&÷
r   rˆ  c                  óv   ‡ — e Zd ZdZddˆ fd„Z	 d	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zd
„ Zˆ xZS )rƒ  Tc                ó<   •— t         ‰| �  |¬«       |xs g | _        y )N)rs   )rÚ   r¥   rc  )rP   rs   rg  rÝ   s      €r   r¥   zLeftLine.__init__°  s   ø€ Ü‰Ñ˜uÐÔ%Ø#š/ rˆ�r   c                óP   — | j                   j                  t        |||«      «       y rD   )rd  r  r  )rP   ré   r  r  s       r   Ú_append_line_cellzLeftLine._append_line_cell´  s   € ð 	�‰×Ñœ8 D¨&°&Ó9Õ:r   c                óh  — |j                   }| j                  |z   | j                  k  rA| j                  || j                  «       | xj                  |z  c_        t        j
                  S t        | j                  «      dk(  r"| j                  |d«       t        j                  S t        j                  S r²   )
r|   r
  rq  r$  r‹  r”  rm   rd  r•  r“  ©rP   ré   rs   s      r   r  zLeftLine.append¹  s�   € Ø× Ñ ˆØ×Ñ %Ñ'¨4¯?©?Ò:Ø×"Ñ" 4¨×)=Ñ)=Ô>Ø× Ò  EÑ)Õ Ü×%Ñ%Ð%Üˆt�{‰{Ó˜qÒ ð ×"Ñ" 4¨Ô+Ü×$Ñ$Ð$Ü�‰Ðr   c                óþ  — |j                   }| j                  }||z   | j                  kD  rt        j                  S |}||dz  z   }||z   }| j                  |||«      }|€| j                  ||«      S |j                  t        j                  k(  r| j                  ||j                  «      S |j                  t        j                  k(  r| j                  ||j                  «      S | j                  ||j                  «      S r  )r|   r
  rq  r‹  r“  Ú_next_tab_stopÚ_append_unlocked_tabrA   r;   r7   Ú_append_leftr@   r3   Ú_append_centerÚ_append_right)	rP   ré   r  rs   r@   Úleft_posÚ
center_posÚ	right_posÚtab_stops	            r   r�  zLeftLine.append_with_tabÆ  så   € Ø× Ñ ˆØ×"Ñ"ˆà�‰;˜Ÿ™Ò(Ü—?‘?Ð"ð ˆØ˜5 1™9‘_ˆ
Ø˜%‘Kˆ	Ø×&Ñ& x°¸YÓGˆØÐØ×,Ñ,¨S°$Ó7Ð7à�}‰}¤× 0Ñ 0Ò0Ø×(Ñ(¨¨x¯|©|Ó<Ð<Ø—‘¤+×"4Ñ"4Ò4Ø×*Ñ*¨4°·±Ó>Ð>à×)Ñ)¨$°·±Ó=Ð=r   c                ó0  — | j                   }|j                  «       }||j                  z   }|j                  }||z   | j                  k  r>| j	                  ||«       | j	                  ||«       ||z   | _         t
        j                  S t
        j                  S rD   )r
  rµ   r|   rq  r$  r‹  r”  r“  )rP   r  ré   Úpos0ÚspaceÚpos1rs   s          r   r)  zLeftLine._append_unlocked_tabÜ  s…   € Ø×#Ñ#ˆØ—‘“ˆØ�e×'Ñ'Ñ'ˆØ× Ñ ˆØ�%‰<˜4Ÿ?™?Ò*à×"Ñ" 5¨$Ô/Ø×"Ñ" 4¨Ô.Ø#'¨%¡<ˆDÔ Ü×%Ñ%Ð%Ü�‰Ðr   c                ó¸   — |j                   }||z   | j                  k  r-| j                  ||d«       ||z   | _        t        j
                  S t        j                  S rº  )r|   rq  r$  r
  r‹  r”  r“  )rP   ré   r@   rs   s       r   r*  zLeftLine._append_lefté  sQ   € Ø× Ñ ˆØ�‰;˜$Ÿ/™/Ò)Ø×"Ñ" 4¨¨dÔ3Ø#&¨¡;ˆDÔ Ü×%Ñ%Ð%Ü�‰Ðr   c                ó
  — |j                   dz  }| j                  |z   |kD  r| j                  |«      S ||z   | j                  k  r0| j	                  |||z
  d«       ||z   | _        t
        j                  S t
        j                  S )Nr   T)r|   r
  r  rq  r$  r‹  r”  r“  )rP   ré   r@   Úwidth2s       r   r+  zLeftLine._append_centerñ  s|   € Ø×!Ñ! AÑ%ˆØ×Ñ &Ñ(¨3Ò.Ø—;‘;˜tÓ$Ð$Ø�6‰\˜TŸ_™_Ò,Ø×"Ñ" 4¨¨v©°tÔ<Ø#&¨¡<ˆDÔ Ü×%Ñ%Ð%Ü�‰Ðr   c                óü   — |j                   }| j                  |z   }|| j                  kD  rt        j                  S ||kD  r| j                  |«      S | j                  |||z
  d«       || _        t        j                  S rº  )r|   r
  rq  r‹  r“  r  r$  r”  )rP   ré   r@   rs   Úend_of_cell_poss        r   r,  zLeftLine._append_rightû  st   € Ø× Ñ ˆØ×.Ñ.°Ñ6ˆØ˜TŸ_™_Ò,Ü—?‘?Ð"Ø˜SÒ Ø—;‘;˜tÓ$Ð$Ø×Ñ˜t S¨5¡[°$Ô7Ø"ˆÔÜ×!Ñ!Ð!r   c                óH  — | j                   D ]“  }|j                  t        j                  k(  r|j                  |kD  r|c S |j                  t        j
                  k(  r|j                  |kD  r|c S |j                  t        j                  k(  sŒ�|j                  |kD  sŒ‘|c S  y rD   )rc  rA   r;   r7   r@   r3   r8   )rP   rQ   ru   rS   r  s        r   r(  zLeftLine._next_tab_stop  sy   € Ø—?”?ˆCØ�x‰xœ;×+Ñ+Ò+°·±¸$²Ø’
Ø—‘œ[×/Ñ/Ò/°C·G±G¸fÒ4DØ’
Ø—‘œ[×.Ñ.Ó.°3·7±7¸U³?Ø’
ð #ð r   rD   )rs   r?   rg  rž  )F)ré   r•   r  r?   r  rH  r`   ra   r  r   )r`   r‹  )r   r   r   rŒ  r¥   r$  r  r�  r)  r*  r+  r,  r(  rå   ræ   s   @r   rƒ  rƒ  ­  sZ   ø„ Ø€Oö*ð
 9>ð;Øð;Ø"'ð;Ø15ð;à	ó;ó
ó>ó,óóó	"ör   rƒ  c                ó&   — t        d„ | D «       «      S )Nc              3  ó4   K  — | ]  }|j                   –— Œ y ­wrD   rí  rî  s     r   r{  z content_width.<locals>.<genexpr>  s   è ø€ Ð2©E Dˆt×Õ©Eùr×  )r|  )rè   s    r   r6  r6    s   € ÜÑ2©EÓ2Ó2Ð2r   c                óÔ   — g }| D ]`  }t        |t        «      r|j                  r|j                  |«       Œ1t        |t        «      sŒB|j                  |j                  «       «       Œb |S rD   )rí   rœ   r­   r  rè  rî   rö  )rè   Úgrowableré   s      r   Úgrowable_cellsr?    sS   € Ø€HÛˆÜ�dœDÔ! d§m¢mØ�O‰O˜DÕ!Ü˜œoÕ.Ø�O‰O˜D×.Ñ.Ó0Õ1ð	 ð
 €Or   c                ó  — t        | «      }|dk(  s||kD  ry | |dz
     }|j                  |j                  j                  z   }||k  r:| |   j                  }t	        ||d«      | |<   ||j                  z  }|dz  }||k  rŒ9y y )Nr   r   F)rm   r  ré   r|   r  )rè   rð   rJ   r  r  ré   s         r   Úupdate_offsetsrA    s�   € Ü�‹J€EØ�‚z�U˜U’]Øà�e˜a‘iÑ €IØ×Ñ 	§¡× :Ñ :Ñ:€FØ
�%Š-Ø�U‰|× Ñ ˆÜ  f¨eÓ4ˆˆe‰Ø�$×"Ñ"Ñ"ˆØ�‰
ˆð	 �%�-r   c                  ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)r„  c                óÊ  — | j                   }| j                  «       }|t        |«      k(  ry | j                  |«      }||dz   d  D �cg c]  }|j                  ‘Œ }}d}	 t        |«      }t        |«      dk(  rnJ|t        |«      z
  }|dk  rn6|t        |«      z  }|D ]   }	|	j                  |	j                  |z   «       Œ" d}Œd|rt        | j                   |dz   «       y y c c}w )Nr   FTr   g•Ö&è.>)
rd  Ú_last_locked_cellrm   Ú_available_spaceré   r?  r6  r©   r|   rA  )
rP   rè   Úlast_locked_cellÚavailable_spacerÒ  Úmodifiedr>  Úspace_to_distributer  ré   s
             r   r�  zJustifiedLine.distribute.  sû   € Ø—‘ˆØ×1Ñ1Ó3ÐØœs 5›zÒ)Øà×/Ñ/Ð0@ÓAˆØ!&Ð'7¸!Ñ';Ð'=Ñ!>Ó?Ñ!>˜A�—“Ð!>ˆÐ?ØˆØÜ% eÓ,ˆHÜ�8‹} Ò!Øà"1´MÀ%Ó4HÑ"HÐØ" dÒ*Øà'¬#¨h«-Ñ7ˆEÛ �Ø—‘˜D×,Ñ,¨uÑ4Õ5ð !àˆHð ñ Ü˜4Ÿ;™;Ð(8¸1Ñ(<Õ=ð ùò! @s   ÁC c                óf   — | j                   |   }|j                  |j                  j                  z   S rD   )rd  r  ré   r|   )rP   rð   ré   s      r   Ú_end_offsetzJustifiedLine._end_offsetH  s)   € Ø�{‰{˜5Ñ!ˆØ�{‰{˜TŸY™Y×2Ñ2Ñ2Ð2r   c                ó>   — | j                   | j                  |«      z
  S rD   )rq  rK  )rP   rð   s     r   rE  zJustifiedLine._available_spaceL  s   € Ø�‰ ×!1Ñ!1°%Ó!8Ñ8Ð8r   c                óz   — | j                   }t        |«      dz
  }|dkD  r||   j                  r|S |dz  }|dkD  rŒyr  )rd  rm   r  )rP   rè   rð   s      r   rD  zJustifiedLine._last_locked_cellO  sH   € Ø—‘ˆÜ�E“
˜Q‘ˆØ�aŠiØ�U‰|×"Ò"Ø�Ø�Q‰JˆEð �a‹ið r   N)r   r   r   r�  rK  rE  rD  r   r   r   r„  r„  -  s   „ ò>ò43ò9ór   r„  c                  ó^   ‡ — e Zd ZdZdZdd„Zdd„Zd	ˆ fd„Zej                  d
d„«       Z
ˆ xZS )Ú	NoTabLinez.Base class for lines without tab stop support!Fc                óø  — t        |t        «      r|j                  «       }|j                  }| j                  |z   | j
                  k  rU| j                  j                  t        || j                  d«      «       | xj                  |z  c_        t        j                  S t        | j                  «      dk(  r6| j                  j                  t        |dd«      «       t        j                  S t        j                  S )NFr   )rí   r¼   rµ   r|   r
  rq  rd  r  r  r‹  r”  rm   r•  r“  r&  s      r   r  zNoTabLine.append^  s»   € Ü�dœIÔ&Ø—=‘=“?ˆDØ× Ñ ˆØ×Ñ %Ñ'¨$¯/©/Ò9Ø�K‰K×Ñœx¨¨d×.BÑ.BÀEÓJÔKØ× Ò  EÑ)Õ Ü×%Ñ%Ð%Üˆt�{‰{Ó˜qÒ ð �K‰K×Ñœx¨¨a°Ó7Ô8Ü×$Ñ$Ð$Ü�‰Ðr   c                ó   — t        «       ‚)zNo tabulator support!)ÚNotImplementedErrorr  s      r   r�  zNoTabLine.append_with_tabm  s   € ä!Ó#Ð#r   c                óH   •— t         ‰| �  || j                  «       z   |«       y rD   )rÚ   r…   Ústart_offsetró  s      €r   r…   zNoTabLine.placeq  s   ø€ ä‰‰�a˜$×+Ñ+Ó-Ñ-¨qÕ1r   c                 ó   — y rD   r   r{   s    r   rT  zNoTabLine.start_offsetu  r)  r   r  r   r�   r�   )r   r   r   rÏ   rŒ  r  r�  r…   rc   rd   rT  rå   ræ   s   @r   rO  rO  Y  s4   ø„ Ù8à€Oóó$õ2ð 	×Ñòó ôr   rO  c                  ó   — e Zd ZdZdd„Zy)r†  ú-Right aligned lines do not support tab stops!c                ó^   — t        d„ | j                  D «       «      }| j                  |z
  dz  S )Nc              3  óH   K  — | ]  }|j                   j                  –— Œ y ­wrD   ©ré   r|   rÑ  s     r   r{  z*CenterLine.start_offset.<locals>.<genexpr>~  ó   è ø€ ÐA±[°˜Ÿ™×+Õ+±[ùr  r   ©r|  rd  rq  ©rP   Ú
real_widths     r   rT  zCenterLine.start_offset}  s*   € ÜÑA°T·[²[ÓAÓAˆ
Ø—‘ *Ñ,°Ñ1Ð1r   Nr�   ©r   r   r   rÏ   rT  r   r   r   r†  r†  z  s
   „ Ù7ô2r   r†  c                  ó   — e Zd ZdZdd„Zy)r…  rW  c                óX   — t        d„ | j                  D «       «      }| j                  |z
  S )Nc              3  óH   K  — | ]  }|j                   j                  –— Œ y ­wrD   rZ  rÑ  s     r   r{  z)RightLine.start_offset.<locals>.<genexpr>†  r[  r  r\  r]  s     r   rT  zRightLine.start_offset…  s%   € ÜÑA°T·[²[ÓAÓAˆ
Ø�‰ Ñ+Ð+r   Nr�   r_  r   r   r   r…  r…  ‚  s
   „ Ù7ô,r   r…  c                óp   ‡— ˆfd„| D «       D �cg c]  }d|j                   cxk  r|k  rn n|‘Œ c}S c c}w )Nc              3  óB   •K  — | ]  \  }}t        |‰z   |«      –— Œ y ­wrD   )r=   )rz  r@   rA   r  s      €r   r{  z"shift_tab_stops.<locals>.<genexpr>�  s!   øè ø€ ÐPÁi¹¸¸dœ  v¡¨t×4Áiùs   ƒr   )r@   )rg  r  Úright_borderr0  s    `  r   r‚  r‚  Š  sA   ø€ ó
 QÁiÔPóáPˆHØˆx�|‰|Ô+˜|Õ+ò 	ØPñð ùò s   �!3)rÞ  )rn   rF  r`   rj   )rr   r   rs   r?   rt   r?   r`   rk   rD   )rè   rŸ  rU   r
   r`   ra   )rè   r   rU   r
   r`   ra   )rè   rŸ  r`   r   )rè   zSequence[Cell]rƒ   r?   r„   r?   )rè   r   r`   r   )ré   r•   r   r?   r`   r?   )rè   rŸ  r`   r?   )rè   rŸ  r`   z
list[Glue])rè   zlist[LineCell]rð   rÛ   r`   ra   )rg  zIterable[TabStop]r  r?   re  r?   r`   zlist[TabStop])KÚ
__future__r   Útypingr   r   r   r   r   Útyping_extensionsr	   rc   rE   ÚenumÚ
ezdxf.mathr
   r   Úezdxf.tools.textr   rH   Ú	Exceptionr   ÚIntEnumr   r   r1   r6   r;   r=   rK   ÚABCrM   rf   r?   rj   rB   rk   ro   rw   ry   r•   rœ   r´   rº   r¼   r¾   rÑ   rØ   rê   ró   rõ   r  r  r  r  r  rJ  r\  r¢  rÄ  ræ  rè  r‰  r  r  r‹  rˆ  rƒ  r6  r?  rA  r„  rO  r†  r…  r‚  r   r   r   Ú<module>ro     s°  ðö #ß BÕ BÝ 'Û 
Û Û ç .Ý $ðuðn€ô	�)ô 	ôˆt�|‰|ô ô	�d—l‘lô 	ô�D—L‘Lô ô˜Ÿ™ô ô�$—,‘,ô ô)ˆjô )ó
Iô5�c—g‘gô 5ô:˜ô ð" ˜5 %¨°Ð5Ñ6€ˆÓ 6Ø˜5 %˜<Ñ(€ˆÓ (óó ô6Vˆ#�'‰'ô VôBˆ3ô ô"$Dˆ4ô $DôN	ˆDô 	ô	�tô 	ô	�ô 	ô1�$ô 1÷hñ ô@0ˆ;ô @0ôFô9ô6W.ˆ{ô W.ðt �(Ð€Ø	Ð  )Ð,€ØÐ#Ð$€	ó&ôRs�ô sôl'�Tô 'ô:T�	ô Tôn\ˆYô \ô~MˆYô Mó`ô
�kô 
ó@ó>ôˆzô ô�—‘ô ôO�;ô Oôdaˆ|ô aóH3óóô)�Hô )ôX�ô ôB2�ô 2ô,�	ô ,ðØ ðØ*/ðØ?Dðàôr   