
    jke2                        d 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Z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j.                   ej0                         j2                         yy)z6fontTools.misc.textTools.py -- miscellaneous routines.    Nc                   :    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    :/usr/lib/python3/dist-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)r9   hrcr:   s        r   hexStrrE   3   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<      1r/      )r   z$number doesn't fit in number of bits )r3   r4   reversejoin)lbitsitemsbinaryr:   s        r   
num2binaryrR   =   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   rG   r/   )r+   r1   )binrN   digits      r   
binary2numrV   P   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>`   s    AGGIq> r   )key)sorted	TypeError)alists    r   caselessSortr`   Z   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
    rG       )r   r2   )r9   size	remainders      r   padre   e   s>     4=DaxI$	ETI-..DKr   c                 J    t        | t              s| j                  ||      S | S r   )r   r   r	   sencodingerrorss      r   tostrrk   z   s"    axx&))r   c                 \    t        | t              r| j                  ||      S t        |       S r   )r   r   r   r   rg   s      r   r   r      s&    !Sxx&))Qxr   c                     t        | g      S r   )r   )ns    r   r5   r5      s    !:r   c                 <    t        | t              r| S t        |       S r   )r   r6   ord)rD   s    r   rA   rA      s    1c"1.A.r   c                 6    t        |      j                  |       S r   )rk   rM   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   rM   rr   s     r   r7   r7      s    6?C(CCCr   __main__)    )asciistrict)r<   )r   )__doc__astr?   literal_evalsafeEvalr   r   r,   r*   rE   rR   rV   r`   re   rk   r   r5   rA   r+   r7   r    doctestsysexittestmodfailedr$   r   r   <module>r      s    <   &# &.S
&*/(D zCHH_W__%%& r   