o
    a                     @   s   d 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Zd&ddZdd Zdd Zd'dd Zd(d"d#Zed$krdddlZddlZee j dS dS ))z6fontTools.misc.textTools.py -- miscellaneous routines.    Nc                   @   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)Zblob r   :/usr/lib/python3/dist-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)Z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.       )stringZ	hexdigitsbyteord)r.   hrcr/   r   r   r   hexStr3   s   "r8       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 )	Nr0      1r%      )r   z$number doesn't fit in number of bits )r)   r*   reversejoin)lbitsitemsbinaryr/   r   r   r   
num2binary=   s    



rE   c                 C   s6   t |  } d}| D ]}|d> }|dkr|dB }q
|S )Nr   r:   r%   )r"   r'   )binrA   Zdigitr   r   r   
binary2numP   s   rG   c                 C   s.   z	t | dd dW S  ty   t |  Y S w )zdReturn 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>`   s    zcaselessSort.<locals>.<lambda>)key)sorted	TypeError)Zalistr   r   r   caselessSortZ   s
   rN   c                 C   s4   t | } |dkrt| | }|r| d||  7 } | S )z Pad 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(   )r.   sizeZ	remainderr   r   r   pade   s   rQ   asciistrictc                 C   s   t | ts| ||S | S r   )r   r   r   sencodingerrorsr   r   r   tostrz   s   
rX   c                 C   s   t | tr| ||S t| S r   )r   r   r   r   rT   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)r7   r   r   r   r4      s   r4   r0   c                 C   s   t || S r   )rX   r@   iterableZ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   r@   r[   r   r   r   r-      s   r-   __main__)r9   )rR   rS   )r0   )r]   )__doc__astr3   Zliteral_evalZsafeEvalr   r   r#   r!   r8   rE   rG   rN   rQ   rX   r   r+   r4   r"   r-   r   ZdoctestsysexitZtestmodZfailedr   r   r   r   <module>   s,    

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