
    Wh                        d Z ddlmZ ddlZddlZej
                  Z G d de      Zd Z	d Z
d Zdd	Zd
 Zd Zd ZdddZdddZd Zd ZddZddZedk(  r4ddlZddlZ ej2                   ej4                         j6                         yy)z6fontTools.misc.textTools.py -- miscellaneous routines.    )annotationsNc                  :    e Zd Zed        Zd Zd Zd Zd Zd Z	y)Tagc                H    t        | t              r| j                  d      } | S Nzlatin-1)
isinstancebytesdecode)blobs    R/var/www/html/jupyter_env/lib/python3.12/site-packages/fontTools/misc/textTools.py	transcodezTag.transcode   s    dE";;y)D    c                L    t         j                  | | j                  |            S N)str__new__r   )selfcontents     r   r   zTag.__new__   s    {{4!899r   c                &    | j                  |       S r   )__eq__r   others     r   __ne__z
Tag.__ne__   s    ;;u%%%r   c                L    t         j                  | | j                  |            S r   )r   r   r   r   s     r   r   z
Tag.__eq__   s    zz$u 566r   c                ,    t         j                  |       S r   )r   __hash__r   s    r   r   zTag.__hash__   s    ||D!!r   c                $    | j                  d      S r   )encoder   s    r   tobyteszTag.tobytes    s    {{9%%r   N)
__name__
__module____qualname__staticmethodr   r   r   r   r   r     r   r   r   r      s-     
:&7"&r   r   c                8    t        t        d | D                    S )z-Convert a list of hex strings to binary data.c              3  B   K   | ]  }t        |t              s|  y wr   )r   r   ).0chunks     r   	<genexpr>zreadHex.<locals>.<genexpr>&   s     Qe*UC:PEQs   )deHexStrstrjoin)r   s    r   readHexr-   $   s    GQwQQRRr   c                    t        | j                               } t        |       dz  r| dz   } g }t        dt        |       d      D ],  }|j	                  t        t        | ||dz    d                   . t        |      S )z$Convert a hex string to binary data.   0r      )r,   splitlenrangeappendbytechrint	bytesjoin)hexdatadatais      r   r+   r+   )   su    gmmo&G
7|aC-D1c'lA& :GCAE 2B789:T?r   c                |    t         j                  }d}| D ]$  }t        |      }|||dz	  dz     z   ||dz     z   }& |S )z$Convert binary data to a hex string.       )string	hexdigitsbyteord)r:   hrcr;   s        r   hexStrrF   4   sU    A
A /AJ16S.!!Aa#gJ./ Hr   c                
   g }d}t        |      D ]3  }| dz  rd|z   }nd|z   }| dz	  } |dz   dz  r!|j                  |       d}5 |r|j                  |       |j                          | dv sJ d       dj                  |      S )	Nr=      1r0      )r   z$number doesn't fit in number of bits )r4   r5   reversejoin)lbitsitemsbinaryr;   s        r   
num2binaryrS   >   s    EF4[ s76\F6\FFQ!LL F V	MMO<???<88E?r   c                j    t        | j                               } d}| D ]  }|dz  }|dk7  s|dz  } |S )Nr   rH   r0   )r,   r2   )binrO   digits      r   
binary2numrW   Q   sF    
#))+
C	A FC<CA Hr   c                T    	 t        | d       S # t        $ r t        |       cY S w xY w)zjReturn a sorted copy of a list. If there are only strings
    in the list, it will not consider case.
    c                &    | j                         | fS r   )lower)as    r   <lambda>zcaselessSort.<locals>.<lambda>a   s    AGGIq> r   )key)sorted	TypeError)alists    r   caselessSortra   [   s.    
e!9:: e}s    ''c                \    t        |       } |dkD  rt        |       |z  }|r| d||z
  z  z  } | S )zPad byte string 'data' with null bytes until its length is a
    multiple of 'size'.

    >>> len(pad(b'abcd', 4))
    4
    >>> len(pad(b'abcde', 2))
    6
    >>> len(pad(b'abcde', 4))
    8
    >>> pad(b'abcdef', 4) == b'abcdef\x00\x00'
    True
    rH       )r    r3   )r:   size	remainders      r   padrf   f   s>     4=DaxI$	ETI-..DKr   c                J    t        | t              s| j                  ||      S | S r   )r   r   r
   sencodingerrorss      r   tostrrl   {   s"    axx&))r   c                \    t        | t              r| j                  ||      S t        |       S r   )r   r   r   r	   rh   s      r   r    r       s&    !Sxx&))Qxr   c                    t        | g      S r   )r	   )ns    r   r6   r6      s    !:r   c                <    t        | t              r| S t        |       S r   )r   r7   ord)rE   s    r   rB   rB      s    1c"1.A.r   c                6    t        |      j                  |       S r   )rl   rN   iterablejoiners     r   r,   r,      s    =h''r   c                D    t        |      j                  d | D              S )Nc              3  2   K   | ]  }t        |        y wr   )r    )r(   items     r   r*   zbytesjoin.<locals>.<genexpr>   s     C$Cs   )r    rN   rs   s     r   r8   r8      s    6?C(CCCr   __main__)    )asciistrict)ri   str | bytesrj   r   rk   r   returnr   )ri   r}   rj   r   rk   r   r~   r	   )r=   )r   )__doc__
__future__r   astr@   literal_evalsafeEvalr   r   r-   r+   rF   rS   rW   ra   rf   rl   r    r6   rB   r,   r8   r!   doctestsysexittestmodfailedr%   r   r   <module>r      s    < " 
  &# &.S
&*/(D zCHH_W__%%& r   