L i}CdZddlmZmZmZddlmZddlmZddl m Z m Z ddl m Z ddlmZddlmZdd lZdd lZdd lZdd lZdd lZej.d Zej2d ZGd d eZdZeeddZeeddZdZ dZ!dZ"ddZ#e$dk(rejJe#y y )ausage: ttx [options] inputfile1 [... inputfileN] TTX -- From OpenType To XML And Back If an input file is a TrueType or OpenType font file, it will be decompiled to a TTX file (an XML-based text format). If an input file is a TTX file, it will be compiled to whatever format the data is in, a TrueType or OpenType/CFF font file. A special input value of - means read from the standard input. Output files are created so they are unique: an existing file is never overwritten. General options =============== -h Help print this message. --version show version and exit. -d Specify a directory where the output files are to be created. -o Specify a file to write the output to. A special value of - would use the standard output. -f Overwrite existing output file(s), ie. don't append numbers. -v Verbose: more messages will be written to stdout about what is being done. -q Quiet: No messages will be written to stdout about what is being done. -a allow virtual glyphs ID's on compile or decompile. Dump options ============ -l List table info: instead of dumping to a TTX file, list some minimal info about each table. -t Specify a table to dump. Multiple -t options are allowed. When no -t option is specified, all tables will be dumped. -x
Specify a table to exclude from the dump. Multiple -x options are allowed. -t and -x are mutually exclusive. -s Split tables: save the TTX data into separate TTX files per table and write one small TTX file that contains references to the individual table dumps. This file can be used as input to ttx, as long as the table files are in the same directory. -g Split glyf table: Save the glyf data into separate TTX files per glyph and write a small TTX for the glyf table which contains references to the individual TTGlyph elements. NOTE: specifying -g implies -s (no need for -s together with -g) -i Do NOT disassemble TT instructions: when this option is given, all TrueType programs (glyph programs, the font program and the pre-program) will be written to the TTX file as hex data instead of assembly. This saves some time and makes the TTX file smaller. -z Specify a bitmap data export option for EBDT: {'raw', 'row', 'bitwise', 'extfile'} or for the CBDT: {'raw', 'extfile'} Each option does one of the following: -z raw export the bitmap data as a hex dump -z row export each row as hex data -z bitwise export each row as binary in an ASCII art style -z extfile export the data as external files with XML references If no export format is specified 'raw' format is used. -e Don't ignore decompilation errors, but show a full traceback and abort. -y Select font number for TrueType Collection (.ttc/.otc), starting from 0. --unicodedata Use custom database file to write character names in the comments of the cmap TTX output. --newline Control how line endings are written in the XML file. It can be 'LF', 'CR', or 'CRLF'. If not specified, the default platform-specific line endings are used. Compile options =============== -m Merge with TrueType-input-file: specify a TrueType or OpenType font file to be merged with the TTX file. This option is only valid when at most one TTX file is specified. -b Don't recalc glyph bounding boxes: use the values in the TTX file as-is. --recalc-timestamp Set font 'modified' timestamp to current time. By default, the modification time of the TTX file will be used. --no-recalc-timestamp Keep the original font 'modified' timestamp. --flavor Specify flavor of output font file. May be 'woff' or 'woff2'. Note that WOFF2 requires the Brotli Python extension, available at https://github.com/google/brotli --with-zopfli Use Zopfli instead of Zlib to compress WOFF. The Python extension is available at https://pypi.python.org/pypi/zopfli --optimize-font-speed Enable optimizations that prioritize speed over file size. This mainly affects how glyf t able and gvar / VARC tables are compiled. The produced fonts will be larger, but rendering performance will be improved with HarfBuzz and other text layout engines. )OPTIMIZE_FONT_SPEEDTTFont TTLibError)getMacCreatorAndType)setUnicodeData)Tagtostr)timestampSinceEpoch)Timer)makeOutputFileNameNz fontTools.ttxzsfntVersion=['"]OTTO["']c^eZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZdZdZdZdZdZdZy)OptionsFNTraw c g|_g|_d|_|D]\}}|dk(r%ttt j d1|dk(r'ddlm}t|t j d]|dk(r>dkk$$%UV V ??t$$%OP P >>hl$$H  ;;& T^^$$%TU U&4 )__name__ __module__ __qualname__r1r,r-r.r/r0r4r5r6r9r:r;r7r<r=rArBrCrDrQrRrPrrslJIJIG EKK"IL !KJO FIjVrRrc<t||jd}|j}t|j }t d|zd}t |dzt |dz|D]}|j |}|jdk(r*dd lm } |j|j} | | } nt|j} | dkr| d z} d | z} t ||| |j|jfzt |j!y) NT)r!lazyzListing table info for "%s":z %4s %10s %8s %8s)ztag z checksumz lengthz offset)z----z ------------------rYwoff2r) calcChecksumlz0x%08X)rr!readersortedkeysr"tablesrBfontTools.ttLib.sfntr[loadDatatransformBufferr8checkSumlengthoffsetclose) inputoutputoptionsttfr\tagsformattagentryr[datarcchecksums rPttListrqs 7#5#5D AC ZZF &++- D (5 01 &F &A AB &A AB D c" :: 9>>&"8"89D#D)H5>>*H a<+-Hh& fXu||U\\BBC D GIIKrRz&Done dumping TTX in %(time).3f secondsc p|}|dk(r4tjjtjj}}|}|dk(r*tjtjj}}t j d|||jrt|jt|d|j|j}|j||j|j|j|j |j"|j$|j&|j)y)N-zDumping "%s" to "%s"...r)r;r!)r_r r4r5r6r7r=)r$stdinbuffernamestdoutloginfor<rrr;r!saveXMLrr r4r5r6r7r=rf)rgrhri input_name output_namerjs rPttDumpr}sJ |II,,ciinnzK }!jj#**// HH & K@w**+   %;;%%  C KK!!%%'''' ' ? ?%;;%% IIKrRz(Done compiling TTX in %(time).3f secondsc|}|dk(r*tjtjj}}|}|dk(r4tjjtjj}}t j d|d|d|jr ddlm }d|_ t|j|j|j|j}|j r|j |j"t$<|j'||jHd |vrD|tjur2t(j*j-|}t/||d _|j3|y) Nrsz Compiling "z" to "z"...r)sfntT)rBr:rAhead)r$rtrvrwrurxryrCfontTools.ttLibr USE_ZOPFLIrr9rBr:rArDcfgr importXMLr'r(getmtimer modifiedsave)rgrhrir{r|rrjmtimes rP ttCompiler=sJ |IIsyy~~zK }!jj// HHJ ?@( ~~))//  C   '.'@'@#$MM%&6S=U#))=S  '259F HHVrRcJ|dk(r,tjjjd}d}nItj j |\}} t|d5}|jd}dddjdr|jd}t|\}}|dvry|d k(ryt|dd }|d k(ry |d k(ry|dvry|dk(ry|dk(ry|dk(r#t|d}tj!|ryyy#1swYxYw#t$rYywxYw)Nrsrbs%FG G   ''F|(()RSS'w(()W5F5FFVS!'') VUF+,=-> =rRc.|D]\}}}||||yNrV)rrirrgrhs rPprocessrs$!%'vufg&'rRcddlm}|tjdd} t |\}}|j t|y#t j $rC}ttd|tjtjdYd}~rd}~wwxYw#t$r-tjd tjdYyt $rt"$r4}tj|tjdYd}~yd}~wtj%d tjdYyxYw) z&Convert OpenType fonts to XML and backr) configLoggerNrz ERROR: )file)levelz (Cancelled.)z Unhandled exception has occurred)r&rr$argvrr*r+r"r#stderrr%rGrKeyboardInterruptrxerror SystemExitr exception)rrrries rPmainrs& |xx|$T* g w''( g    !,3::>    .!    !    89  s4A B% B"9BB"%3E E +*D/E __main__r)&r#rrrrfontTools.misc.macCreatorTyperfontTools.unicoderfontTools.misc.textToolsrr fontTools.misc.timeToolsr fontTools.misc.loggingToolsr fontTools.misc.cliToolsr r'r$r*rerE getLoggerrxcompilerobjectrrqr}rrrrrrSr%rVrRrPrsm^DC>,/8-6 g(2::<=VfVD4s 456:s 678<%P5p' : z CHHTVrR