12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- This folder is a subpackage of ttLib. Each module here is a
- specialized TT/OT table converter: they can convert raw data
- to Python objects and vice versa. Usually you don't need to
- use the modules directly: they are imported and used
- automatically when needed by ttLib.
- If you are writing you own table converter the following is
- important.
- The modules here have pretty strange names: this is due to the
- fact that we need to map TT table tags (which are case sensitive)
- to filenames (which on Mac and Win aren't case sensitive) as well
- as to Python identifiers. The latter means it can only contain
- [A-Za-z0-9_] and cannot start with a number.
- ttLib provides functions to expand a tag into the format used here:
- >>> from fontTools import ttLib
- >>> ttLib.tagToIdentifier("FOO ")
- 'F_O_O_'
- >>> ttLib.tagToIdentifier("cvt ")
- '_c_v_t'
- >>> ttLib.tagToIdentifier("OS/2")
- 'O_S_2f_2'
- >>> ttLib.tagToIdentifier("glyf")
- '_g_l_y_f'
- >>>
- And vice versa:
- >>> ttLib.identifierToTag("F_O_O_")
- 'FOO '
- >>> ttLib.identifierToTag("_c_v_t")
- 'cvt '
- >>> ttLib.identifierToTag("O_S_2f_2")
- 'OS/2'
- >>> ttLib.identifierToTag("_g_l_y_f")
- 'glyf'
- >>>
- Eg. the 'glyf' table converter lives in a Python file called:
- _g_l_y_f.py
- The converter itself is a class, named "table_" + expandedtag. Eg:
- class table__g_l_y_f:
- etc.
- Note that if you _do_ need to use such modules or classes manually,
- there are two convenient API functions that let you find them by tag:
- >>> ttLib.getTableModule('glyf')
- <module 'ttLib.tables._g_l_y_f'>
- >>> ttLib.getTableClass('glyf')
- <class ttLib.tables._g_l_y_f.table__g_l_y_f at 645f400>
- >>>
- You must subclass from DefaultTable.DefaultTable. It provides some default
- behavior, as well as a constructor method (__init__) that you don't need to
- override.
- Your converter should minimally provide two methods:
- class table_F_O_O_(DefaultTable.DefaultTable): # converter for table 'FOO '
-
- def decompile(self, data, ttFont):
- # 'data' is the raw table data. Unpack it into a
- # Python data structure.
- # 'ttFont' is a ttLib.TTfile instance, enabling you to
- # refer to other tables. Do ***not*** keep a reference to
- # it: it will cause a circular reference (ttFont saves
- # a reference to us), and that means we'll be leaking
- # memory. If you need to use it in other methods, just
- # pass it around as a method argument.
-
- def compile(self, ttFont):
- # Return the raw data, as converted from the Python
- # data structure.
- # Again, 'ttFont' is there so you can access other tables.
- # Same warning applies.
- If you want to support TTX import/export as well, you need to provide two
- additional methods:
- def toXML(self, writer, ttFont):
- # XXX
-
- def fromXML(self, (name, attrs, content), ttFont):
- # XXX
|