B
    Sc                 @   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rddlZddlZee j 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   7lib/python3.7/site-packages/fontTools/misc/textTools.py	transcode   s    

zTag.transcodec             C   s   t | | |S )N)str__new__r   )selfcontentr   r   r   r
      s    zTag.__new__c             C   s   |  | S )N)__eq__)r   otherr   r   r   __ne__   s    z
Tag.__ne__c             C   s   t | | |S )N)r	   r   r   )r   r   r   r   r   r      s    z
Tag.__eq__c             C   s
   t | S )N)r	   __hash__)r   r   r   r   r      s    zTag.__hash__c             C   s
   |  dS )Nzlatin-1)encode)r   r   r   r   tobytes   s    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 )N)r   r	   ).0chunkr   r   r   	<genexpr>%   s    zreadHex.<locals>.<genexpr>)deHexStrstrjoin)r   r   r   r   readHex#   s    r   c          	   C   sf   t |  } t| d r | d } g }x8tdt| dD ]$}|tt| ||d  d q6W 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   sD   t j}d}x4| D ],}t|}|||d? d@   ||d@   }qW |S )z$Convert binary data to a hex string.       )stringZ	hexdigitsbyteord)r'   hrcr(   r   r   r   hexStr3   s    
$r1       c             C   s   g }d}xLt |D ]@}| d@ r(d| }nd| }| d? } |d d s|| d}qW |rd|| |  | dks|tdd|S )	Nr)      1r      )r   z$number doesn't fit in number of bits )r"   r#   reverseAssertionErrorjoin)lbitsitemsZbinaryr(   r   r   r   
num2binary=   s    


r>   c             C   s:   t |  } d}x$| D ]}|d> }|dkr|dB }qW |S )Nr   r3   r   )r   r    )binr;   Zdigitr   r   r   
binary2numP   s    
r@   c             C   s.   yt | dd dS  tk
r(   t | S X dS )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 )N)lower)ar   r   r   <lambda>`       zcaselessSort.<locals>.<lambda>)keyN)sorted	TypeError)Zalistr   r   r   caselessSortZ   s    rH   c             C   s4   t | } |dkr0t| | }|r0| 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
	r3       )r   r!   )r'   sizeZ	remainderr   r   r   pade   s    rK   asciistrictc             C   s   t | ts| ||S | S d S )N)r   r	   r   )sencodingerrorsr   r   r   tostrz   s    
rQ   c             C   s"   t | tr| ||S t| S d S )N)r   r	   r   r   )rN   rO   rP   r   r   r   r      s    
r   c             C   s
   t | gS )N)r   )nr   r   r   r$      s    r$   c             C   s   t | tr| S t| S )N)r   r%   ord)r0   r   r   r   r-      s    r-   r)   c             C   s   t || S )N)rQ   r:   )iterablejoinerr   r   r   r      s    r   rD   c             C   s   t |dd | D S )Nc             s   s   | ]}t |V  qd S )N)r   )r   itemr   r   r   r      s    zbytesjoin.<locals>.<genexpr>)r   r:   )rT   rU   r   r   r   r&      s    r&   __main__)r2   )rL   rM   )rL   rM   )r)   )rD   )__doc__Zastr,   Zliteral_evalZsafeEvalr	   r   r   r   r1   r>   r@   rH   rK   rQ   r   r$   r-   r   r&   r   ZdoctestsysexitZtestmodZfailedr   r   r   r   <module>   s(   

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