本文整理汇总了Python中fontTools.ttLib.getTableClass方法的典型用法代码示例。如果您正苦于以下问题:Python ttLib.getTableClass方法的具体用法?Python ttLib.getTableClass怎么用?Python ttLib.getTableClass使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类fontTools.ttLib
的用法示例。
在下文中一共展示了ttLib.getTableClass方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _prune_pre_subset
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def _prune_pre_subset(self, font):
for tag in self._sort_tables(font):
if(tag.strip() in self.options.drop_tables or
(tag.strip() in self.options.hinting_tables and not self.options.hinting) or
(tag == 'kern' and (not self.options.legacy_kern and 'GPOS' in font))):
log.info("%s dropped", tag)
del font[tag]
continue
clazz = ttLib.getTableClass(tag)
if hasattr(clazz, 'prune_pre_subset'):
with timer("load '%s'" % tag):
table = font[tag]
with timer("prune '%s'" % tag):
retain = table.prune_pre_subset(font, self.options)
if not retain:
log.info("%s pruned to empty; dropped", tag)
del font[tag]
continue
else:
log.info("%s pruned", tag)
示例2: parseCmap
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def parseCmap(lines, font):
container = ttLib.getTableClass('cmap')()
log.debug("Parsing cmap")
tables = []
while lines.peek() is not None:
lines.expect('cmap subtable %d' % len(tables))
platId, encId, fmt, lang = [
parseCmapId(lines, field)
for field in ('platformID', 'encodingID', 'format', 'language')]
table = cmap_classes[fmt](fmt)
table.platformID = platId
table.platEncID = encId
table.language = lang
table.cmap = {}
line = next(lines)
while line[0] != 'end subtable':
table.cmap[int(line[0], 16)] = line[1]
line = next(lines)
tables.append(table)
container.tableVersion = 0
container.tables = tables
return container
示例3: create_simple_gsub
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def create_simple_gsub(lookups, script='DFLT', feature='ccmp'):
"""Create a simple GSUB table."""
gsub_class = ttLib.getTableClass('GSUB')
gsub = gsub_class('GSUB')
gsub.table = otTables.GSUB()
gsub.table.Version = 1.0
gsub.table.ScriptList = create_script_list(script)
gsub.table.FeatureList = create_feature_list(feature, len(lookups))
gsub.table.LookupList = create_lookup_list(lookups)
return gsub
示例4: add_gsub_to_font
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def add_gsub_to_font(fontfile):
"""Adds an empty GSUB table to a font."""
font = ttLib.TTFont(fontfile)
gsub_table = ttLib.getTableClass("GSUB")("GSUB")
gsub_table.table = otTables.GSUB()
gsub_table.table.Version = 1.0
gsub_table.table.ScriptList = otTables.ScriptList()
gsub_table.table.ScriptCount = 1
gsub_table.table.LookupList = otTables.LookupList()
gsub_table.table.LookupList.LookupCount = 0
gsub_table.table.LookupList.Lookup = []
gsub_table.table.FeatureList = otTables.FeatureList()
gsub_table.table.FeatureList.FeatureCount = 0
gsub_table.table.LookupList.FeatureRecord = []
script_record = otTables.ScriptRecord()
script_record.ScriptTag = get_opentype_script_tag(fontfile)
script_record.Script = otTables.Script()
script_record.Script.LangSysCount = 0
script_record.Script.LangSysRecord = []
default_lang_sys = otTables.DefaultLangSys()
default_lang_sys.FeatureIndex = []
default_lang_sys.FeatureCount = 0
default_lang_sys.LookupOrder = None
default_lang_sys.ReqFeatureIndex = 65535
script_record.Script.DefaultLangSys = default_lang_sys
gsub_table.table.ScriptList.ScriptRecord = [script_record]
font["GSUB"] = gsub_table
target_file = tempfile.gettempdir() + "/" + os.path.basename(fontfile)
font.save(target_file)
return target_file
示例5: retain_empty_scripts
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def retain_empty_scripts(self):
# https://github.com/behdad/fonttools/issues/518
# https://bugzilla.mozilla.org/show_bug.cgi?id=1080739#c15
return self.__class__ == ttLib.getTableClass('GSUB')
示例6: _subset_glyphs
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def _subset_glyphs(self, font):
for tag in self._sort_tables(font):
clazz = ttLib.getTableClass(tag)
if tag.strip() in self.options.no_subset_tables:
log.info("%s subsetting not needed", tag)
elif hasattr(clazz, 'subset_glyphs'):
with timer("subset '%s'" % tag):
table = font[tag]
self.glyphs = self.glyphs_all
retain = table.subset_glyphs(self)
del self.glyphs
if not retain:
log.info("%s subsetted to empty; dropped", tag)
del font[tag]
else:
log.info("%s subsetted", tag)
else:
log.info("%s NOT subset; don't know how to subset; dropped", tag)
del font[tag]
with timer("subset GlyphOrder"):
glyphOrder = font.getGlyphOrder()
glyphOrder = [g for g in glyphOrder if g in self.glyphs_all]
font.setGlyphOrder(glyphOrder)
font._buildReverseGlyphOrderDict()
示例7: load_font
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def load_font(fontFile,
options,
allowVID=False,
checkChecksums=False,
dontLoadGlyphNames=False,
lazy=True):
font = ttLib.TTFont(fontFile,
allowVID=allowVID,
checkChecksums=checkChecksums,
recalcBBoxes=options.recalc_bounds,
recalcTimestamp=options.recalc_timestamp,
lazy=lazy)
# Hack:
#
# If we don't need glyph names, change 'post' class to not try to
# load them. It avoid lots of headache with broken fonts as well
# as loading time.
#
# Ideally ttLib should provide a way to ask it to skip loading
# glyph names. But it currently doesn't provide such a thing.
#
if dontLoadGlyphNames:
post = ttLib.getTableClass('post')
saved = post.decode_format_2_0
post.decode_format_2_0 = post.decode_format_3_0
f = font['post']
if f.formatType == 2.0:
f.formatType = 3.0
post.decode_format_2_0 = saved
return font
示例8: parseGDEF
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def parseGDEF(lines, font):
container = ttLib.getTableClass('GDEF')()
log.debug("Parsing GDEF")
self = ot.GDEF()
fields = {
'class definition begin':
('GlyphClassDef',
lambda lines, font: parseClassDef(lines, klass=ot.GlyphClassDef)),
'attachment list begin':
('AttachList', parseAttachList),
'carets begin':
('LigCaretList', parseCaretList),
'mark attachment class definition begin':
('MarkAttachClassDef',
lambda lines, font: parseClassDef(lines, klass=ot.MarkAttachClassDef)),
'markfilter set definition begin':
('MarkGlyphSetsDef', parseMarkFilteringSets),
}
for attr,parser in fields.values():
setattr(self, attr, None)
while lines.peek() is not None:
typ = lines.peek()[0].lower()
if typ not in fields:
log.debug('Skipping %s', typ)
next(lines)
continue
attr,parser = fields[typ]
assert getattr(self, attr) is None, attr
setattr(self, attr, parser(lines, font))
self.Version = 1.0 if self.MarkGlyphSetsDef is None else 0x00010002
container.table = self
return container
示例9: startElementHandler
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def startElementHandler(self, name, attrs):
stackSize = self.stackSize
self.stackSize = stackSize + 1
if not stackSize:
if name <> "ttFont":
raise TTXParseError, "illegal root tag: %s" % name
sfntVersion = attrs.get("sfntVersion")
if sfntVersion is not None:
if len(sfntVersion) <> 4:
sfntVersion = safeEval('"' + sfntVersion + '"')
self.ttFont.sfntVersion = sfntVersion
self.contentStack.append([])
elif stackSize == 1:
subFile = attrs.get("src")
if subFile is not None:
subFile = os.path.join(os.path.dirname(self.fileName), subFile)
importXML(self.ttFont, subFile, self.progress)
self.contentStack.append([])
return
tag = ttLib.xmlToTag(name)
msg = "Parsing '%s' table..." % tag
if self.progress:
self.progress.setlabel(msg)
elif self.ttFont.verbose:
ttLib.debugmsg(msg)
else:
print msg
if tag == "GlyphOrder":
tableClass = ttLib.GlyphOrder
elif attrs.has_key("ERROR"):
tableClass = DefaultTable
else:
tableClass = ttLib.getTableClass(tag)
if tableClass is None:
tableClass = DefaultTable
if tag == 'loca' and self.ttFont.has_key(tag):
# Special-case the 'loca' table as we need the
# original if the 'glyf' table isn't recompiled.
self.currentTable = self.ttFont[tag]
else:
self.currentTable = tableClass(tag)
self.ttFont[tag] = self.currentTable
self.contentStack.append([])
elif stackSize == 2:
self.contentStack.append([])
self.root = (name, attrs, self.contentStack[-1])
else:
list = []
self.contentStack[-1].append((name, attrs, list))
self.contentStack.append(list)
示例10: _startElementHandler
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def _startElementHandler(self, name, attrs):
stackSize = self.stackSize
self.stackSize = stackSize + 1
if not stackSize:
if name != "ttFont":
raise TTXParseError("illegal root tag: %s" % name)
sfntVersion = attrs.get("sfntVersion")
if sfntVersion is not None:
if len(sfntVersion) != 4:
sfntVersion = safeEval('"' + sfntVersion + '"')
self.ttFont.sfntVersion = sfntVersion
self.contentStack.append([])
elif stackSize == 1:
subFile = attrs.get("src")
if subFile is not None:
if hasattr(self.file, 'name'):
# if file has a name, get its parent directory
dirname = os.path.dirname(self.file.name)
else:
# else fall back to using the current working directory
dirname = os.getcwd()
subFile = os.path.join(dirname, subFile)
subReader = XMLReader(subFile, self.ttFont, self.progress)
subReader.read()
self.contentStack.append([])
return
tag = ttLib.xmlToTag(name)
msg = "Parsing '%s' table..." % tag
if self.progress:
self.progress.setLabel(msg)
log.info(msg)
if tag == "GlyphOrder":
tableClass = ttLib.GlyphOrder
elif "ERROR" in attrs or ('raw' in attrs and safeEval(attrs['raw'])):
tableClass = DefaultTable
else:
tableClass = ttLib.getTableClass(tag)
if tableClass is None:
tableClass = DefaultTable
if tag == 'loca' and tag in self.ttFont:
# Special-case the 'loca' table as we need the
# original if the 'glyf' table isn't recompiled.
self.currentTable = self.ttFont[tag]
else:
self.currentTable = tableClass(tag)
self.ttFont[tag] = self.currentTable
self.contentStack.append([])
elif stackSize == 2:
self.contentStack.append([])
self.root = (name, attrs, self.contentStack[-1])
else:
l = []
self.contentStack[-1].append((name, attrs, l))
self.contentStack.append(l)
示例11: merge
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def merge(self, fontfiles):
mega = ttLib.TTFont()
#
# Settle on a mega glyph order.
#
fonts = [ttLib.TTFont(fontfile) for fontfile in fontfiles]
glyphOrders = [font.getGlyphOrder() for font in fonts]
megaGlyphOrder = self._mergeGlyphOrders(glyphOrders)
# Reload fonts and set new glyph names on them.
# TODO Is it necessary to reload font? I think it is. At least
# it's safer, in case tables were loaded to provide glyph names.
fonts = [ttLib.TTFont(fontfile) for fontfile in fontfiles]
for font,glyphOrder in zip(fonts, glyphOrders):
font.setGlyphOrder(glyphOrder)
mega.setGlyphOrder(megaGlyphOrder)
for font in fonts:
self._preMerge(font)
self.duplicateGlyphsPerFont = [{} for f in fonts]
allTags = reduce(set.union, (list(font.keys()) for font in fonts), set())
allTags.remove('GlyphOrder')
# Make sure we process cmap before GSUB as we have a dependency there.
if 'GSUB' in allTags:
allTags.remove('GSUB')
allTags = ['GSUB'] + list(allTags)
if 'cmap' in allTags:
allTags.remove('cmap')
allTags = ['cmap'] + list(allTags)
for tag in allTags:
with timer("merge '%s'" % tag):
tables = [font.get(tag, NotImplemented) for font in fonts]
log.info("Merging '%s'.", tag)
clazz = ttLib.getTableClass(tag)
table = clazz(tag).merge(self, tables)
# XXX Clean this up and use: table = mergeObjects(tables)
if table is not NotImplemented and table is not False:
mega[tag] = table
log.info("Merged '%s'.", tag)
else:
log.info("Dropped '%s'.", tag)
del self.duplicateGlyphsPerFont
self._postMerge(mega)
return mega
示例12: parseGSUBGPOS
# 需要导入模块: from fontTools import ttLib [as 别名]
# 或者: from fontTools.ttLib import getTableClass [as 别名]
def parseGSUBGPOS(lines, font, tableTag):
container = ttLib.getTableClass(tableTag)()
lookupMap = DeferredMapping()
featureMap = DeferredMapping()
assert tableTag in ('GSUB', 'GPOS')
log.debug("Parsing %s", tableTag)
self = getattr(ot, tableTag)()
self.Version = 1.0
fields = {
'script table begin':
('ScriptList',
lambda lines: parseScriptList (lines, featureMap)),
'feature table begin':
('FeatureList',
lambda lines: parseFeatureList (lines, lookupMap, featureMap)),
'lookup':
('LookupList',
None),
}
for attr,parser in fields.values():
setattr(self, attr, None)
while lines.peek() is not None:
typ = lines.peek()[0].lower()
if typ not in fields:
log.debug('Skipping %s', lines.peek())
next(lines)
continue
attr,parser = fields[typ]
if typ == 'lookup':
if self.LookupList is None:
self.LookupList = ot.LookupList()
self.LookupList.Lookup = []
_, name, _ = lines.peek()
lookup = parseLookup(lines, tableTag, font, lookupMap)
if lookupMap is not None:
assert name not in lookupMap, "Duplicate lookup name: %s" % name
lookupMap[name] = len(self.LookupList.Lookup)
else:
assert int(name) == len(self.LookupList.Lookup), "%d %d" % (name, len(self.Lookup))
self.LookupList.Lookup.append(lookup)
else:
assert getattr(self, attr) is None, attr
setattr(self, attr, parser(lines))
if self.LookupList:
self.LookupList.LookupCount = len(self.LookupList.Lookup)
if lookupMap is not None:
lookupMap.applyDeferredMappings()
if featureMap is not None:
featureMap.applyDeferredMappings()
container.table = self
return container