~ubuntu-branches/ubuntu/feisty/fonttools/feisty

« back to all changes in this revision

Viewing changes to MetaTools/roundTrip.py

  • Committer: Bazaar Package Importer
  • Author(s): Anthony Fok
  • Date: 2003-11-18 00:53:59 UTC
  • Revision ID: james.westby@ubuntu.com-20031118005359-pqirsxbgdz0f0xmx
Tags: upstream-1.99+2.0b1+cvs20031014
ImportĀ upstreamĀ versionĀ 1.99+2.0b1+cvs20031014

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/env python
 
2
 
 
3
"""usage: ttroundtrip [options] font1 ... fontN
 
4
 
 
5
    Dump each TT/OT font as a TTX file, compile again to TTF or OTF
 
6
    and dump again. Then do a diff on the two TTX files. Append problems
 
7
    and diffs to a file called "report.txt" in the current directory.
 
8
    This is only for testing FontTools/TTX, the resulting files are
 
9
    deleted afterwards.
 
10
 
 
11
    This tool supports some of ttx's command line options (-i, -t
 
12
    and -x). Specifying -t or -x implies ttx -m <originalfile> on
 
13
    the way back.
 
14
"""
 
15
 
 
16
 
 
17
import sys
 
18
import os
 
19
import tempfile
 
20
import getopt
 
21
import traceback
 
22
from fontTools import ttx
 
23
 
 
24
class Error(Exception): pass
 
25
 
 
26
 
 
27
def usage():
 
28
        print __doc__
 
29
        sys.exit(2)
 
30
 
 
31
 
 
32
def roundTrip(ttFile1, options, report):
 
33
        fn = os.path.basename(ttFile1)
 
34
        xmlFile1 = tempfile.mktemp(".%s.ttx1" % fn)
 
35
        ttFile2 = tempfile.mktemp(".%s" % fn)
 
36
        xmlFile2 = tempfile.mktemp(".%s.ttx2" % fn)
 
37
        
 
38
        try:
 
39
                ttx.ttDump(ttFile1, xmlFile1, options)
 
40
                if options.onlyTables or options.skipTables:
 
41
                        options.mergeFile = ttFile1
 
42
                ttx.ttCompile(xmlFile1, ttFile2, options)
 
43
                options.mergeFile = None
 
44
                ttx.ttDump(ttFile2, xmlFile2, options)
 
45
                
 
46
                diffcmd = 'diff -c2 -I ".*modified value\|checkSumAdjustment.*" "%s" "%s"' % (xmlFile1, xmlFile2)
 
47
                output = os.popen(diffcmd, "r", 1)
 
48
                lines = []
 
49
                while 1:
 
50
                        line = output.readline()
 
51
                        if not line:
 
52
                                break
 
53
                        sys.stdout.write(line)
 
54
                        lines.append(line)
 
55
                if lines:
 
56
                        report.write("=============================================================\n")
 
57
                        report.write("  \"%s\" differs after round tripping\n" % ttFile1)
 
58
                        report.write("-------------------------------------------------------------\n")
 
59
                        report.writelines(lines)
 
60
                else:
 
61
                        print "(TTX files are the same)"
 
62
        finally:
 
63
                for tmpFile in (xmlFile1, ttFile2, xmlFile2):
 
64
                        if os.path.exists(tmpFile):
 
65
                                os.remove(tmpFile)
 
66
 
 
67
 
 
68
def main(args):
 
69
        try:
 
70
                rawOptions, files = getopt.getopt(args, "it:x:")
 
71
        except getopt.GetoptError:
 
72
                usage()
 
73
        
 
74
        if not files:
 
75
                usage()
 
76
        
 
77
        report = open("report.txt", "a+")
 
78
        options = ttx.Options(rawOptions, len(files))
 
79
        for ttFile in files:
 
80
                try:
 
81
                        roundTrip(ttFile, options, report)
 
82
                except KeyboardInterrupt:
 
83
                        print "(Cancelled)"
 
84
                        break
 
85
                except:
 
86
                        print "*** round tripping aborted ***"
 
87
                        traceback.print_exc()
 
88
                        report.write("=============================================================\n")
 
89
                        report.write("  An exception occurred while round tripping")
 
90
                        report.write("  \"%s\"\n" % ttFile)
 
91
                        traceback.print_exc(file=report)
 
92
                        report.write("-------------------------------------------------------------\n")
 
93
        report.close()
 
94
 
 
95
        
 
96
main(sys.argv[1:])