Ë
    ‹`gý  ã                   ó    — d Z ddlZddlmZ ddlmZ d„ Zdd„Zd„ Zdd„Z	d	„ Z
d
„ Zd„ Zdd„Z G d„ de«      Zdd„ZdddddddœZd„ Zd„ Zd„ Zy)zù

.. autofunction:: rgb

.. autofunction:: iterflatlist

.. autofunction:: strlist

.. autofunction:: get_unit

.. autofunction:: split_coordinate

.. autofunction:: split_angle

.. autofunction:: rect_top_left_corner

.. autofunction:: pretty_xml

é    N)ÚPath)Úpatternc                 ó"   — t        | t        «      S ©N)Ú
isinstanceÚstr©Úvalues    ú_/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/svgwrite/utils.pyÚ	is_stringr       s   € Ü�eœSÓ!Ð!ó    c                 óà   — d„ }|j                  «       dk(  r,dt        | «      dz  t        |«      dz  t        |«      dz  fz  S |dk(  rd || «       ||«       ||«      fz  S t        d|z  «      ‚)aM  
    Convert **r**, **g**, **b** values to a `string`.

    :param r: red part
    :param g: green part
    :param b: blue part
    :param string mode: ``'RGB | %'``

    :rtype: string

    ========= =============================================================
    mode      Description
    ========= =============================================================
    ``'RGB'`` returns a rgb-string format: ``'rgb(r, g, b)'``
    ``'%'``   returns percent-values as rgb-string format: ``'rgb(r%, g%, b%)'``
    ========= =============================================================

    c                 ó8   — t        | «      } | dk  rd} | dkD  rd} | S )Nr   éd   )Úfloatr	   s    r   Úpercentzrgb.<locals>.percent8   s(   € Ü�e“ˆØ�1Š9ØˆEØ�3Š;ØˆEØˆr   ÚRGBzrgb(%d,%d,%d)éÿ   Ú%zrgb(%d%%,%d%%,%d%%)zInvalid mode '%s')ÚupperÚintÚ
ValueError)ÚrÚgÚbÚmoder   s        r   Úrgbr   $   sy   € ò(ð ‡z�zƒ|�uÒØ¤# a£&¨3¡,´°A³¸±¼cÀ!»fÀs¹lÐ!KÑKÐKØ	�Šð %©°«
±G¸A³JÁÈÃ
Ð'KÑKÐKäÐ,¨tÑ3Ó4Ð4r   c              #   óz   K  — | D ]2  }t        |d«      r t        |«      st        |«      D ]  }|–— Œ Œ/|–— Œ4 y­w)z:
    Flatten nested *values*, returns an `iterator`.

    Ú__iter__N)Úhasattrr   Úiterflatlist)ÚvaluesÚelementÚitems      r   r!   r!   J   s>   è ø€ ó
 ˆÜ�7˜JÔ'´	¸'Ô0BÜ$ WÖ-�Ø“
ñ .ð ‹Mñ ùs   ‚9;c                 óŽ   — t        | «      r| S |j                  t        | «      D �cg c]  }|€Œt        |«      ‘Œ c}«      S c c}w )z“
    Concatenate **values** with **sepertator**, `None` values will be excluded.

    :param values: `iterable` object
    :returns: `string`

    )r   Újoinr!   r   )r"   Ú	seperatorr
   s      r   Ústrlistr(   W   sB   € ô �ÔØˆà�~‰~´|ÀFÔ7KÓaÑ7K¨eÈuÑO`œs 5�zÐ7KÑaÓbÐbùÒas
   ¦A®Ac                 ó°   — t        | t        t        f«      ryt        j                  j                  | «      }|r|j                  d«      S t        d| z  «      ‚)zŠ
    Get the `unit` identifier of **coordinate**, if **coordinate** has a valid
    `unit` identifier appended, else returns `None`.

    Né   úInvalid format: '%s'©r   r   r   r   Ú
coordinateÚmatchÚgroupr   ©r-   Úresults     r   Úget_unitr2   e   sM   € ô �*œs¤E˜lÔ+ØÜ×Ñ×%Ñ% jÓ1€FÙØ�|‰|˜A‹ÐäÐ/°*Ñ<Ó=Ð=r   c                 óü   — t        | t        t        f«      rt        | «      dfS t        j                  j                  | «      }|r+t        |j                  d«      «      |j                  d«      fS t        d| z  «      ‚)zÐ
    Split coordinate into `<number>` and 'unit` identifier.

    :returns: <2-tuple> (number, unit-identifier) or (number, None) if no unit-identifier
      is present or coordinate is an int or float.

    Né   r*   r+   r,   r0   s     r   Úsplit_coordinater5   t   sl   € ô �*œs¤E˜lÔ+Ü�jÓ! 4Ð(Ð(Ü×Ñ×%Ñ% jÓ1€FÙÜ�f—l‘l 1“oÓ&¨¯©°Q«Ð8Ð8äÐ/°*Ñ<Ó=Ð=r   c                 óü   — t        | t        t        f«      rt        | «      dfS t        j                  j                  | «      }|r+t        |j                  d«      «      |j                  d«      fS t        d| z  «      ‚)zË
    Split angle into `<number>` and `<angle>` identifier.

    :returns: <2-tuple> (number, angle-identifier) or (number, None) if no angle-identifier
      is present or angle is an int or float.

    Nr4   r*   r+   )r   r   r   r   Úangler.   r/   r   )r7   r1   s     r   Úsplit_angler8   …   si   € ô �%œ#œu˜Ô&Ü�e“˜dÐ#Ð#Ü�]‰]× Ñ  Ó'€FÙÜ�f—l‘l 1“oÓ&¨¯©°Q«Ð8Ð8äÐ/°%Ñ7Ó8Ð8r   c                 óæ  — |j                  «       j                  d«      \  }}t        | d   «      \  }}t        | d   «      \  }}t        |d   «      \  }	}
t        |d   «      \  }}||
k7  rt        d«      ‚||k7  rt        d«      ‚|dk(  r	||	dz  z
  }n|dk(  r||	z
  }n|d	k7  rt        d
|z  «      ‚|dk(  r	||dz  z
  }n|dk(  r||z
  }n|dk7  rt        d|z  «      ‚|r|›|›�}|r|›|›�}||fS )a4  
    Calculate top-left corner of a rectangle.

    **insert** and **size** must have the same units.

    :param 2-tuple insert: insert point
    :param 2-tuple size: (width, height)
    :param string pos: insert position ``'vert-horiz'``
    :return: ``'top-left'`` corner of the rect
    :rtype: 2-tuple

    ========== ==============================
    pos        valid values
    ========== ==============================
    **vert**   ``'top | middle | bottom'``
    **horiz**  ``'left'|'center'|'right'``
    ========== ==============================
    Ú-r   r4   z0x-coordinate and width has to have the same unitz1y-coordinate and height has to have the same unitÚcenterg       @ÚrightÚleftz!Invalid horizontal position: '%s'ÚmiddleÚbottomÚtopzInvalid vertical position: '%s')ÚlowerÚsplitr5   r   )ÚinsertÚsizeÚposÚvertÚhorizÚxÚxunitÚyÚyunitÚwidthÚwunitÚheightÚhunits                r   Úrect_top_left_cornerrP   —   s+  € ð& —)‘)“+×#Ñ# CÓ(�K€Dˆ%Ü  q¡	Ó*�H€A€uÜ  q¡	Ó*�H€A€uÜ# D¨¡GÓ,�L€Eˆ5Ü$ T¨!¡WÓ-�M€FˆEà�‚~ÜÐKÓLÐLØ�‚~ÜÐLÓMÐMà�ÒØ�˜‘
‰N‰Ø	�'Ò	Ø�‰I‰Ø	�&ŠÜÐ<¸uÑDÓEÐEàˆxÒØ�˜‘‰O‰Ø	�Ò	Ø�‰J‰Ø	�ŠÜÐ:¸TÑAÓBÐBáÙ™ÐˆÙÙ™ÐˆØˆaˆ4€Kr   c                   ó<   — e Zd ZdZdd„Zedd„«       Zedd„«       Zy)ÚAutoIDr4   Nc                 ó&   — | j                  |«       y r   )Ú
_set_value)Úselfr
   s     r   Ú__init__zAutoID.__init__Í   s   € Ø�‰˜Õr   c                 ó   — |�|| _         y y r   )Ú_nextid)Úclsr
   s     r   rT   zAutoID._set_valueÐ   s   € àÐØˆC�Kð r   c                 óp   — | j                  |«       d| j                  z  }| xj                  dz  c_        |S )Nzid%dr4   )rT   rX   )rY   r
   Úretvals      r   Únext_idzAutoID.next_idÕ   s/   € à�‰�uÔØ˜#Ÿ+™+Ñ%ˆØ�Š�qÑ�Øˆr   r   )Ú__name__Ú
__module__Ú__qualname__rX   rV   ÚclassmethodrT   r\   © r   r   rR   rR   Ê   s4   „ Ø€Góð ò ó ð ð òó ñr   rR   c                 óê   — ddl mc m} t        | «      dk  r| j	                  «       dk(  ry|j                  | «      }|j                  d|z  ¬«      j                  d«      }dj                  |dd «      S )	zê
    Create human readable XML string.

    :param xml_string: input xml string without line breaks and indentation
    :indent int: how much to indent, by default 2 spaces
    :return: xml_string with linebreaks and indentation

    r   Né   Ú Ú )ÚindentÚ
r4   )	Úxml.dom.minidomÚdomÚminidomÚlenÚstripÚparseStringÚtoprettyxmlrB   r&   )Ú
xml_stringrf   rj   Úxml_treeÚliness        r   Ú
pretty_xmlrr   Ý   sr   € ÷ &Ð%ô ˆ:ƒ˜Ò 
× 0Ñ 0Ó 2°bÒ 8ØØ×"Ñ" :Ó.€HØ× Ñ ¨¨f©Ð Ó5×;Ñ;¸DÓA€Eà�9‰9�U˜1˜2�YÓÐr   zapplication/x-font-ttfzapplication/x-font-opentypezapplication/font-woffzapplication/font-woff2zapplication/vnd.ms-fontobjectzapplication/font-sfnt)ÚttfÚotfÚwoffÚwoff2ÚeotÚsfntc                 ó\   — t         t        | j                  «       «      j                  dd     S )Nr4   )ÚFONT_MIMETYPESr   rA   Úsuffix)Únames    r   Úfont_mimetyper}   û   s%   € Üœ$˜tŸz™z›|Ó,×3Ñ3°A°BÐ7Ñ8Ð8r   c                 ón   — t        j                  | «      j                  «       } dj                  || ¬«      S )Nz+data:{mimetype};charset=utf-8;base64,{data})ÚmimetypeÚdata)Úbase64Ú	b64encodeÚdecodeÚformat)r€   r   s     r   Úbase64_datar…   ÿ   s2   € Ü×Ñ˜DÓ!×(Ñ(Ó*€DØ8×?Ñ?ÈÐX\Ð?Ó]Ð]r   c                 ó>   — dd l }|j                  d| «      }|r|d   S y )Nr   zurl\((.*?)\))ÚreÚfindall)Útextr‡   r1   s      r   Úfind_first_urlrŠ     s%   € ÛØ�Z‰Z˜¨Ó.€FÙØ�a‰yÐàr   )r   r   r   r   )Ú,)ztop-left)é   )Ú__doc__r�   Úpathlibr   Úsvgwrite.datar   r   r   r!   r(   r2   r5   r8   rP   ÚobjectrR   rr   rz   r}   r…   rŠ   ra   r   r   Ú<module>r‘      s|   ðñó& Ý Ý !ò"ó#5òL
ócò>ò>ò"9ó$0ôfˆVô ó& ð* $Ø(Ø#Ø%Ø*Ø#ñ€ò9ò^ó
r   