o
    nĎi                     @  s   d Z ddlmZ ddlZddlZejZG dd deZdd Z	dd	 Z
d
d Zd-ddZdd Zdd Zdd Zd.d/ddZd.d0d d!Zd"d# Zd$d% Zd1d'd(Zd2d*d+Zed,krlddlZddlZee j dS dS )3z6fontTools.misc.textTools.py -- miscellaneous routines.    )annotationsNc                   @  s@   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )Tagc                 C  s   t | tr
| d} | S Nzlatin-1)
isinstancebytesdecode)blob r	   T/home/jeff/fluffinator/venv/lib/python3.10/site-packages/fontTools/misc/textTools.py	transcode   s   

zTag.transcodec                 C     t | | |S N)str__new__r   )selfcontentr	   r	   r
   r         zTag.__new__c                 C  s   |  | S r   )__eq__r   otherr	   r	   r
   __ne__   s   z
Tag.__ne__c                 C  r   r   )r   r   r   r   r	   r	   r
   r      r   z
Tag.__eq__c                 C  s
   t | S r   )r   __hash__r   r	   r	   r
   r         
zTag.__hash__c                 C  s
   |  dS r   )encoder   r	   r	   r
   tobytes    r   zTag.tobytesN)
__name__
__module____qualname__staticmethodr   r   r   r   r   r   r	   r	   r	   r
   r      s    
r   c                 C  s   t tdd | D S )z-Convert a list of hex strings to binary data.c                 s  s    | ]
}t |tr|V  qd S r   )r   r   ).0chunkr	   r	   r
   	<genexpr>&   s    zreadHex.<locals>.<genexpr>)deHexStrstrjoin)r   r	   r	   r
   readHex$   s   r%   c              	   C  sb   t |  } t| d r| d } g }tdt| dD ]}|tt| ||d  d qt|S )z$Convert a hex string to binary data.   0r      )r$   splitlenrangeappendbytechrint	bytesjoin)hexdatadatair	   r	   r
   r#   )   s   "r#   c                 C  s@   t j}d}| D ]}t|}|||d? d@   ||d@   }q|S )z$Convert binary data to a hex string.       )string	hexdigitsbyteord)r1   hrcr2   r	   r	   r
   hexStr4   s   "r<       c                 C  s   g }d}t |D ] }| d@ rd| }nd| }| d? } |d d s(|| d}q|r0|| |  | dv s<J dd|S )	Nr3      1r'      )r   z$number doesn't fit in number of bits )r+   r,   reversejoin)lbitsitemsbinaryr2   r	   r	   r
   
num2binary>   s    



rI   c                 C  s6   t |  } d}| D ]}|d> }|dkr|dB }q
|S )Nr   r>   r'   )r$   r)   )binrE   digitr	   r	   r
   
binary2numQ   s   rL   c                 C  s.   z	t | dd dW S  ty   t |  Y S w )zjReturn a sorted copy of a list. If there are only strings
    in the list, it will not consider case.
    c                 S  s   |   | fS r   )lower)ar	   r	   r
   <lambda>a   s    zcaselessSort.<locals>.<lambda>)key)sorted	TypeError)alistr	   r	   r
   caselessSort[   s
   rT   c                 C  s4   t | } |dkrt| | }|r| d||  7 } | 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
    r>       )r   r*   )r1   size	remainderr	   r	   r
   padf   s   rX   asciistrictsstr | bytesencodingr   errorsreturnc                 C  s   t | ts| ||S | S r   )r   r   r   r[   r]   r^   r	   r	   r
   tostr{   s   
ra   r   c                 C  s   t | tr| ||S t| S r   )r   r   r   r   r`   r	   r	   r
   r      s   
r   c                 C  s
   t | gS r   )r   )nr	   r	   r
   r-      r   r-   c                 C  s   t | tr| S t| S r   )r   r.   ord)r;   r	   r	   r
   r8      s   r8   r3   c                 C  s   t || S r   )ra   rD   iterablejoinerr	   r	   r
   r$      s   r$       c                 C  s   t |dd | D S )Nc                 s  s    | ]}t |V  qd S r   )r   )r    itemr	   r	   r
   r"      s    zbytesjoin.<locals>.<genexpr>)r   rD   rd   r	   r	   r
   r/      s   r/   __main__)r=   )rY   rZ   )r[   r\   r]   r   r^   r   r_   r   )r[   r\   r]   r   r^   r   r_   r   )r3   )rg   )__doc__
__future__r   astr6   literal_evalsafeEvalr   r   r%   r#   r<   rI   rL   rT   rX   ra   r   r-   r8   r$   r/   r   doctestsysexittestmodfailedr	   r	   r	   r
   <module>   s.    




