B
    Sc                 @   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yd dlZW nD ek
r   yd dlZW n" ek
r Z zW d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"   yt  S  tk
r   dS X d S )Nr   )mp	cpu_countNotImplementedError r
   r
   2lib/python3.7/site-packages/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 %sz	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)Zpath1Z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shutilZrmtreeZ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 | }|jddddd |jd d!td"d#t d$d%d& | }|jd'd(dd)d*d+ |jd,d-dd.d/d+ |	| }t
dkr|d0 |jsd1}n|jd#kr
d2}nd3}tj|d4 t|jd#kr<|jr<|d5 |jr|j tj sdt  ntj s|d6    fd7d8|jD }n"|jr|jg}ndgt|j }t|jdk|j|jd9}|jrptd: d;d8 |jD }t|f|rBxlt||D ]0\}	}
td<|
 |
r2|	 |
 n|	   qW n,xt|j|D ]\}}
|
rPt!||
 qPW n|j"d#krt#t|j|j"nd#}|d#krt$t%f|}td=| t&t'(|}|)|t|j| W dQ R X n*x(t|j|D ]\}}
t%||
f| qW dS )>z1Convert 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-errorZERRORNz<maxiumum approximation error measured in EM (default: 0.001))typer)   r,   r*   z--keep-directionreverse_directionZstore_falsez$do not reverse the contour direction)destr%   r*   z-iz--interpolatable
store_truez@whether curve conversion should keep interpolation compatibility)r%   r*   z-jz--jobs?r   Nz9Convert using N multiple processes (default: %(default)s))r-   r(   r,   Z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.)r,   r)   r*   z-dz--output-dirZ	DIRECTORYz-output directory where to save converted UFOsz9Either ufoLib2 or defcon are required to run this script.Z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>)Z
dump_statsZ
max_err_emr.   zConverting curves compatiblyc             S   s   g | ]}t |qS r
   )r   )r8   Zinfiler
   r
   r   r;      s    z	Saving %szRunning %d parallel processes)*argparseArgumentParseradd_argument	fontTools__version__floatZadd_mutually_exclusive_groupintr   
parse_argsr   errorverboseloggingZbasicConfiglenr&   Zoutput_filer:   r   r   r!   mkdirisdirdictZconversion_errorr.   Zinterpolatabler   r   r   zipr   r   jobsminr   r   r   r   ZPoolstarmap)argsparserZmode_parserZoutput_parserZoptionsr5   Zoutput_pathsr   Zufosr   r   r   rL   funcZpoolr
   )r:   r   mainC   s    







"
 rR   )N)N)r   r<   rF   r"   Zmultiprocessingr   
contextlibr   	functoolsr   r?   r   r   r   r   ZufoLib2ImportErrorZdefconeZ	getLoggerr   r   r   r   r   r   rR   r
   r
   r
   r   <module>   s.   

	