
     h                         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    j/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/svgwrite/utils.py	is_stringr       s    eS!!    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19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    ( zz|u#a&3,Ac!fsl!KKK	 %
GAJ
'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   sH     
  7J'	'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   s<     ~~|F7KaeuO`s5z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     *sEl+%%j1F||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     *sEl+j!4((%%j1Ffll1o&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fll1o&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(KD%q	*HAuq	*HAu#DG,LE5$T!W-MFE~KLL~LMM
N	'	I	&<uDEExO		J	:TABBa4Kr   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    CK 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 2b 8"":.H  f 5;;DAE99U12Y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%    $tzz|,33AB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%    ZZ.Fay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|   &   !"#5L
c>>"9$0fV & * $(#%*#9^
r   