New to Typophile? Accounts are free, and easy to set up.
I just switch to a brand new computer and set up everything but can’t get TTX to work.
I see this when i type ttx in the terminal so I think it’s installed right?
---------------
TTX 2.3 -- From OpenType To XML And Back
If an input file is a TrueType or OpenType font file, it will be
dumped to an TTX file (an XML-based text format).
If an input file is a TTX file, it will be compiled to a TrueType
or OpenType font file.
etc ....
---------------
But when actually trying to work on a font file I get this:
---------------
File "/usr/local/bin/ttx", line 11, in
ttx.main(sys.argv[1:])
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttx.py", line 295, in main
process(jobs, options)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttx.py", line 280, in process
action(input, output, options)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttx.py", line 170, in ttDump
fontNumber=options.fontNumber)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/__init__.py", line 145, in __init__
if macUtils.getSFNTResIndices(file):
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/macUtils.py", line 28, in getSFNTResIndices
resref = MyOpenResFile(path)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/macUtils.py", line 18, in MyOpenResFile
resref = Res.FSpOpenResFile(path, mode)
AttributeError: 'module' object has no attribute 'FSpOpenResFile'
---------------
On Lion with Python 2.7.
Any ideas what could be wrong? Would really appreciate it.
13 Jan 2012 — 9:40am
I have not installed ttx2.3 on Lion. I am using ttx2.2 from AFDKO with no problem. Here are the differences between 2.2 and 2.3 according to the file changes.txt
TTX/FontTools Version 2.3
- TrueType Collection (TTC) support
- Python 2.6 support
- Update Unicode data to 5.2.0
- Couple of bug fixes
Maybe I should add that the AFDKO ttx comes with its own python, it does not rely on some pre-installed python.
13 Jan 2012 — 9:46am
This is the TTX that comes with Fonttools in the Robofab package.
So. it doesn't support Python 2.7 which came with the computer? Is that what you're meaning?
13 Jan 2012 — 9:55am
Well, on my mac with Lion, there are three versions of python. If I type python2.5 I get python2.5, if I type python2.6, I get python 2.6. Here is a trace of execution:
% ls /usr/bin/python*
/usr/bin/python /usr/bin/python2.5 /usr/bin/python2.6 /usr/bin/python2.7 /usr/bin/pythonw /usr/bin/pythonw2.6
/usr/bin/python-config /usr/bin/python2.5-config /usr/bin/python2.6-config /usr/bin/python2.7-config /usr/bin/pythonw2.5 /usr/bin/pythonw2.7
You are not limited to python2.7 and to use the python fontforge module with a slightly modified mactools installation of fontforge, I have to use python2.6 (works on OS X 10.5 and OS X 10.7; have'nt tried yet on OS X 10.6). I know nothing of fontlab (don't want to pay just to answer questions on typophile).
13 Jan 2012 — 10:12am
Sorry, but I don‘t understand what to do. I just want TTX to work again. In the terminal. Nothing to do with FontLab.
13 Jan 2012 — 10:59am
First, then, do the
ls /usr/bin/python*thing. Also, if your machine has/usr/local/, tryls /usr/local/bin/python*in case there is a Python interpreter lurking there.Assuming you found, say,
/usr/bin/python2.5: Saypython2.5 ttx foo.ttfto check if it runs to completion. If/usr/bin/python2.6exists, try again with that.Then, open the
ttxscript in a text editor and change the#! /usr/bin/env python(the sha-bang line) at the top to reflect the latest version that works. Save it, and you should be back to NERV's motto.13 Jan 2012 — 11:40am
I’m with you through here:
ls /usr/bin/python*
and gets:
/usr/bin/python /usr/bin/python2.6 /usr/bin/pythonw
/usr/bin/python-config /usr/bin/python2.6-config /usr/bin/pythonw2.5
/usr/bin/python2.5 /usr/bin/python2.7 /usr/bin/pythonw2.6
/usr/bin/python2.5-config /usr/bin/python2.7-config /usr/bin/pythonw2.7
But, after that when I type:
python2.5 ttx foo.ttf
this happens:
python2.5: can't open file 'ttx': [Errno 2] No such file or directory
Same with 2.6.
13 Jan 2012 — 12:57pm
Hi Göran,
you need to edit one line in the fontTools source:
https://github.com/mcolyer/fonttools/commit/e732bd3ba63c51df9aed903eb214...
After that you need to run
sudo ./setup.py installagain in the fontTools folder.13 Jan 2012 — 1:09pm
Jens
Does that solve all problems? I see that the deprecated calls FSpOpenResFile and FSpCreateResFile are also used in the files
./Lib/fontTools/fondLib.py ./Lib/fontTools/nfntLib.py ./Lib/fontTools/t1Lib.py ./Mac/TTX.py
Michel
13 Jan 2012 — 1:14pm
You're probably right, somebody should test fontTools thoroughly for stuff like this. As I understand it, it's a 64 bit issue, so the other way to avoid it is by switching Python to 32 bit by default:
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes14 Jan 2012 — 1:11am
Jens, do you know everything? :)
It worked! Thanks so much. Again.
14 Jan 2012 — 1:27am
Ok well. It worked to *create* the TTX but when going back to the TTF I get this:
Parsing 'GlyphOrder' table...
Parsing 'head' table...
Parsing 'hhea' table...
Parsing 'maxp' table...
Parsing 'OS/2' table...
Parsing 'hmtx' table...
Parsing 'cmap' table...
Parsing 'fpgm' table...
Parsing 'prep' table...
Parsing 'cvt ' table...
Parsing 'loca' table...
Parsing 'glyf' table...
Parsing 'kern' table...
Parsing 'name' table...
Parsing 'post' table...
Parsing 'gasp' table...
Parsing 'GPOS' table...
Parsing 'GSUB' table...
Traceback (most recent call last):
File "/usr/local/bin/ttx", line 11, in
ttx.main(sys.argv[1:])
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttx.py", line 295, in main
process(jobs, options)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttx.py", line 280, in process
action(input, output, options)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttx.py", line 186, in ttCompile
ttf.save(output)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/__init__.py", line 201, in save
self._writeTable(tag, writer, done)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/__init__.py", line 597, in _writeTable
tabledata = self.getTableData(tag)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/__init__.py", line 609, in getTableData
return self.tables[tag].compile(self)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otBase.py", line 73, in compile
self.table.compile(writer, font)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otBase.py", line 616, in compile
conv.write(writer, font, tableStack, value)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otConverters.py", line 185, in write
value.compile(subWriter, font, tableStack)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otBase.py", line 604, in compile
conv.write(writer, font, tableStack, value[i], i)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otConverters.py", line 185, in write
value.compile(subWriter, font, tableStack)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otBase.py", line 604, in compile
conv.write(writer, font, tableStack, value[i], i)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otConverters.py", line 185, in write
value.compile(subWriter, font, tableStack)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otBase.py", line 590, in compile
table = self.preWrite(font)
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/tables/otTables.py", line 186, in preWrite
gidItems = [(getGlyphID(item[0]), getGlyphID(item[1])) for item in items]
File "/Library/Python/2.7/site-packages/FontTools/fontTools/ttLib/__init__.py", line 548, in getGlyphID
raise KeyError, glyphName
KeyError: 'glyph65535'
And it only seem to be happening on some fonts I now realized. Must be something wrong with the font perhaps? It’s a TTF generated from Fontlab 5.1.
14 Jan 2012 — 7:50am
Jens, do you know everything? :)
I'm working on it ;)
KeyError: 'glyph65535'
65535 or 2¹⁶ − 1 is the maximum glyph index in OpenType fonts.
This error is usually because of a glyph being referenced in an OT feature but missing from the font. The error is in the GSUB table here, so I'd check the classes and substitution features for missing glyphs.
14 Jan 2012 — 8:26am
That is due to the fact that the python that comes installed on the mac is ucs-2 and not ucs-4. Here is a trace of execution on my mac (python2.5, python2.6 and python2.7 in /usr/bin do the same):
501 % /usr/bin/python -c "import sys; print sys.maxunicode;"
65535
502 % /opt/local/bin/python -c "import sys; print sys.maxunicode;"
1114111
503 %
I installed a ucs-4 python (2.6) with macports to use with fontforge to handle glyphs above 0xFFFF.
14 Jan 2012 — 9:06am
Jens! Hero! You were right again!
For some reason the font could be generated even though a glyph was represented in the code (but not in the font).
I’m happy.
Beer’s on me.
15 Jan 2012 — 4:56am
> 65535 or 2¹⁶ − 1 is the maximum glyph index in OpenType fonts
Sorry, I had misread your comment. GlyphID is indeed 16 bits.