U
    Dvf                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
Z
ddlmZmZ dZzd dlZW nD ek
r   zd dlZW n" ek
r Z zW 5 dZ[X Y nX Y nX edZdd Zd	d
 ZdddZdd Zdd ZdddZdS )    N)closing)partial   )font_to_quadraticfonts_to_quadraticzfontTools.cu2quc                   C   s&   z
t  W S  tk
r    Y dS X d S )Nr   )mp	cpu_countNotImplementedError r
   r
   7/tmp/pip-unpacked-wheel-qlge9rch/fontTools/cu2qu/cli.py
_cpu_count   s    
r   c                 C   s"   t tjdrtj| S t| S )Nopen)hasattr
ufo_moduleZFontr   )pathr
   r
   r   open_ufo    s    r   c                 K   sX   t | }td|  t|f|rFtd| |r<|| qT|  n|rTt| | d S )NzConverting curves for %s	Saving %s)r   loggerinfor   save	_copytree)
input_pathoutput_pathkwargsufor
   r
   r   _font_to_quadratic&   s    
r   c                 C   s@   t jt jt j| } t jt jt j|}| |kS )N)osr   normcaseabspathrealpath)path1path2r
   r
   r   	_samepath3   s    r"   c                 C   s>   t | |rtd d S tj|r.t| t| | d S )Nz6input and output paths are the same file; skipped copy)	r"   r   debugr   r   existsshutilrmtreecopytree)r   r   r
   r
   r   r   :   s    


r   c              
      s,  t jdd}|jddtjd |jdddd	d
 |jddddd |jddtdddd |jdddddd |jddddd  | }|jd!d"dd#d$ |jd%d&td'd(t d)d*d+ | }|jd,d-dd.d/d0 |jd1d2dd3d4d0 |	| }t
dkr|d5 |jsd6}n|jd(kr"d7}nd8}tj|d9 t|jd(krT|jrT|d: |jr|j tj s|t  ntj s|d;    fd<d=|jD }n"|jr|jg}ndgt|j }t|jdk|j|j|jrdnd>d?}|jrtd@ dAd= |jD }t|f|rdt ||D ]0\}	}
tdB|
 |
rV|	!|
 n|	!  q0n(t |j|D ]\}}
|
rpt"||
 qpn|j#d(krt$t|j|j#nd(}|d(krt%t&f|}tdC| t't()|}|*|t |j| W 5 Q R X n&t |j|D ]\}}
t&||
f| qdS )Dz1Convert a UFO font from cubic to quadratic curvesZcu2qu)progz	--versionversion)actionr)   infiles+ZINPUTz%one or more input UFO source file(s).)nargsmetavarhelpz-vz	--verbosecountr   )r*   defaultz-ez--conversion-errorERRORNz<maxiumum approximation error measured in EM (default: 0.001))typer.   r1   r/   z-mz--mixedF
store_truez0whether to used mixed quadratic and cubic curves)r1   r*   r/   z--keep-directionreverse_directionstore_falsez$do not reverse the contour direction)destr*   r/   z-iz--interpolatablez@whether curve conversion should keep interpolation compatibility)r*   r/   z-jz--jobs?r   Nz9Convert using N multiple processes (default: %(default)s))r3   r-   r1   constr.   r/   z-oz--output-fileZOUTPUTzsoutput filename for the converted UFO. By default fonts are modified in place. This only works with a single input.)r1   r.   r/   z-dz--output-dirZ	DIRECTORYz-output directory where to save converted UFOsz9Either ufoLib2 or defcon are required to run this script.WARNINGINFODEBUG)levelz2-o/--output-file can't be used with multile inputsz'%s' is not a directoryc                    s"   g | ]}t j t j|qS r
   )r   r   joinbasename).0p
output_dirr
   r   
<listcomp>   s    zmain.<locals>.<listcomp>T)Z
dump_statsZ
max_err_emr5   Zall_quadraticzConverting curves compatiblyc                 S   s   g | ]}t |qS r
   )r   )rA   infiler
   r
   r   rE      s     r   zRunning %d parallel processes)+argparseArgumentParseradd_argument	fontTools__version__floatadd_mutually_exclusive_groupintr   
parse_argsr   errorverboseloggingbasicConfiglenr+   Zoutput_filerD   r   r   r$   mkdirisdirdictZconversion_errorr5   mixedZinterpolatabler   r   r   zipr   r   jobsminr   r   r   r   ZPoolstarmap)argsparserZmode_parserZoutput_parseroptionsr>   Zoutput_pathsr   Zufosr   r   r   rZ   funcpoolr
   rC   r   mainC   s    







"
 rb   )N)N)r   rG   rR   r%   multiprocessingr   
contextlibr   	functoolsr   rJ   r   r   r   r   ZufoLib2ImportErrorZdefcone	getLoggerr   r   r   r   r"   r   rb   r
   r
   r
   r   <module>   s.   

	