diff options
author | Haibo Huang <hhb@google.com> | 2019-05-20 12:05:57 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-05-20 12:05:57 -0700 |
commit | 9f1c6e1658173bec62072db472b77a3eeae9d45c (patch) | |
tree | cfeb5f4e886f8902407dc4c5bab3a88513d0fe55 | |
parent | 3573c3e336f800513596dce38d86abf12ddb25df (diff) | |
parent | 3df2f1b457ebb56ee28ddc85f5c9d324e94de662 (diff) | |
download | fonttools-9f1c6e1658173bec62072db472b77a3eeae9d45c.tar.gz |
Upgrade fonttools to 3.41.2 am: d648c2a486
am: 3df2f1b457
Change-Id: I91ee6712e67d642dd4e2f441215a7533331dd155
104 files changed, 18867 insertions, 598 deletions
diff --git a/Lib/fontTools/__init__.py b/Lib/fontTools/__init__.py index b0b99739..ad773e89 100644 --- a/Lib/fontTools/__init__.py +++ b/Lib/fontTools/__init__.py @@ -5,6 +5,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "3.39.0" +version = __version__ = "3.41.2" __all__ = ["version", "log", "configLogger"] diff --git a/Lib/fontTools/afmLib.py b/Lib/fontTools/afmLib.py index e0ccafee..db01d346 100644 --- a/Lib/fontTools/afmLib.py +++ b/Lib/fontTools/afmLib.py @@ -9,52 +9,52 @@ from fontTools.misc.py23 import * import re # every single line starts with a "word" -identifierRE = re.compile("^([A-Za-z]+).*") +identifierRE = re.compile(r"^([A-Za-z]+).*") # regular expression to parse char lines charRE = re.compile( - "(-?\d+)" # charnum - "\s*;\s*WX\s+" # ; WX - "(-?\d+)" # width - "\s*;\s*N\s+" # ; N - "([.A-Za-z0-9_]+)" # charname - "\s*;\s*B\s+" # ; B - "(-?\d+)" # left - "\s+" - "(-?\d+)" # bottom - "\s+" - "(-?\d+)" # right - "\s+" - "(-?\d+)" # top - "\s*;\s*" # ; + r"(-?\d+)" # charnum + r"\s*;\s*WX\s+" # ; WX + r"(-?\d+)" # width + r"\s*;\s*N\s+" # ; N + r"([.A-Za-z0-9_]+)" # charname + r"\s*;\s*B\s+" # ; B + r"(-?\d+)" # left + r"\s+" + r"(-?\d+)" # bottom + r"\s+" + r"(-?\d+)" # right + r"\s+" + r"(-?\d+)" # top + r"\s*;\s*" # ; ) # regular expression to parse kerning lines kernRE = re.compile( - "([.A-Za-z0-9_]+)" # leftchar - "\s+" - "([.A-Za-z0-9_]+)" # rightchar - "\s+" - "(-?\d+)" # value - "\s*" + r"([.A-Za-z0-9_]+)" # leftchar + r"\s+" + r"([.A-Za-z0-9_]+)" # rightchar + r"\s+" + r"(-?\d+)" # value + r"\s*" ) # regular expressions to parse composite info lines of the form: # Aacute 2 ; PCC A 0 0 ; PCC acute 182 211 ; compositeRE = re.compile( - "([.A-Za-z0-9_]+)" # char name - "\s+" - "(\d+)" # number of parts - "\s*;\s*" + r"([.A-Za-z0-9_]+)" # char name + r"\s+" + r"(\d+)" # number of parts + r"\s*;\s*" ) componentRE = re.compile( - "PCC\s+" # PPC - "([.A-Za-z0-9_]+)" # base char name - "\s+" - "(-?\d+)" # x offset - "\s+" - "(-?\d+)" # y offset - "\s*;\s*" + r"PCC\s+" # PPC + r"([.A-Za-z0-9_]+)" # base char name + r"\s+" + r"(-?\d+)" # x offset + r"\s+" + r"(-?\d+)" # y offset + r"\s*;\s*" ) preferredAttributeOrder = [ diff --git a/Lib/fontTools/cffLib/__init__.py b/Lib/fontTools/cffLib/__init__.py index c1750479..3c5f36df 100644 --- a/Lib/fontTools/cffLib/__init__.py +++ b/Lib/fontTools/cffLib/__init__.py @@ -207,6 +207,13 @@ class CFFFontSet(object): continue name, attrs, content = element topDict.fromXML(name, attrs, content) + + if hasattr(topDict, "VarStore") and topDict.FDArray[0].vstore is None: + fdArray = topDict.FDArray + for fontDict in fdArray: + if hasattr(fontDict, "Private"): + fontDict.Private.vstore = topDict.VarStore + elif name == "GlobalSubrs": subrCharStringClass = psCharStrings.T2CharString if not hasattr(self, "GlobalSubrs"): diff --git a/Lib/fontTools/cffLib/specializer.py b/Lib/fontTools/cffLib/specializer.py index caf8c3b3..db6e5f3d 100644 --- a/Lib/fontTools/cffLib/specializer.py +++ b/Lib/fontTools/cffLib/specializer.py @@ -4,6 +4,7 @@ from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * +from fontTools.cffLib import maxStackLimit def stringToProgram(string): @@ -26,14 +27,21 @@ def programToString(program): return ' '.join(str(x) for x in program) -def programToCommands(program): +def programToCommands(program, getNumRegions=None): """Takes a T2CharString program list and returns list of commands. Each command is a two-tuple of commandname,arg-list. The commandname might be empty string if no commandname shall be emitted (used for glyph width, hintmask/cntrmask argument, as well as stray arguments at the end of the - program (¯\_(ツ)_/¯).""" + program (¯\_(ツ)_/¯). + 'getNumRegions' may be None, or a callable object. It must return the + number of regions. 'getNumRegions' takes a single argument, vsindex. If + the vsindex argument is None, getNumRegions returns the default number + of regions for the charstring, else it returns the numRegions for + the vsindex.""" width = None + seenWidthOp = False + vsIndex = None commands = [] stack = [] it = iter(program) @@ -42,10 +50,37 @@ def programToCommands(program): stack.append(token) continue - if width is None and token in {'hstem', 'hstemhm', 'vstem', 'vstemhm', - 'cntrmask', 'hintmask', - 'hmoveto', 'vmoveto', 'rmoveto', - 'endchar'}: + if token == 'blend': + assert getNumRegions is not None + numSourceFonts = 1 + getNumRegions(vsIndex) + # replace the blend op args on the stack with a single list + # containing all the blend op args. + numBlendOps = stack[-1] * numSourceFonts + 1 + # replace first blend op by a list of the blend ops. + stack[-numBlendOps:] = [stack[-numBlendOps:]] + + # Check for width. + if not seenWidthOp: + seenWidthOp = True + widthLen = len(stack) - numBlendOps + if widthLen and (widthLen % 2): + stack.pop(0) + elif width is not None: + commands.pop(0) + width = None + # We do NOT add the width to the command list if a blend is seen: + # if a blend op exists, this is or will be a CFF2 charstring. + continue + + elif token == 'vsindex': + vsIndex = stack[-1] + assert type(vsIndex) is int + + elif (not seenWidthOp) and token in {'hstem', 'hstemhm', 'vstem', 'vstemhm', + 'cntrmask', 'hintmask', + 'hmoveto', 'vmoveto', 'rmoveto', + 'endchar'}: + seenWidthOp = True parity = token in {'hmoveto', 'vmoveto'} if stack and (len(stack) % 2) ^ parity: width = stack.pop(0) @@ -64,11 +99,23 @@ def programToCommands(program): return commands +def _flattenBlendArgs(args): + token_list = [] + for arg in args: + if isinstance(arg, list): + token_list.extend(arg) + token_list.append('blend') + else: + token_list.append(arg) + return token_list + def commandsToProgram(commands): """Takes a commands list as returned by programToCommands() and converts it back to a T2CharString program list.""" program = [] for op,args in commands: + if any(isinstance(arg, list) for arg in args): + args = _flattenBlendArgs(args) program.extend(args) if op: program.append(op) @@ -203,11 +250,58 @@ class _GeneralizerDecombinerCommandsMap(object): yield ('rlineto', args) yield ('rrcurveto', last_args) +def _convertBlendOpToArgs(blendList): + # args is list of blend op args. Since we are supporting + # recursive blend op calls, some of these args may also + # be a list of blend op args, and need to be converted before + # we convert the current list. + if any([isinstance(arg, list) for arg in blendList]): + args = [i for e in blendList for i in + (_convertBlendOpToArgs(e) if isinstance(e,list) else [e]) ] + else: + args = blendList + + # We now know that blendList contains a blend op argument list, even if + # some of the args are lists that each contain a blend op argument list. + # Convert from: + # [default font arg sequence x0,...,xn] + [delta tuple for x0] + ... + [delta tuple for xn] + # to: + # [ [x0] + [delta tuple for x0], + # ..., + # [xn] + [delta tuple for xn] ] + numBlends = args[-1] + # Can't use args.pop() when the args are being used in a nested list + # comprehension. See calling context + args = args[:-1] + + numRegions = len(args)//numBlends - 1 + if not (numBlends*(numRegions + 1) == len(args)): + raise ValueError(blendList) + + defaultArgs = [[arg] for arg in args[:numBlends]] + deltaArgs = args[numBlends:] + numDeltaValues = len(deltaArgs) + deltaList = [ deltaArgs[i:i + numRegions] for i in range(0, numDeltaValues, numRegions) ] + blend_args = [ a + b for a, b in zip(defaultArgs,deltaList)] + return blend_args def generalizeCommands(commands, ignoreErrors=False): result = [] mapping = _GeneralizerDecombinerCommandsMap - for op,args in commands: + for op, args in commands: + # First, generalize any blend args in the arg list. + if any([isinstance(arg, list) for arg in args]): + try: + args = [n for arg in args for n in (_convertBlendOpToArgs(arg) if isinstance(arg, list) else [arg])] + except ValueError: + if ignoreErrors: + # Store op as data, such that consumers of commands do not have to + # deal with incorrect number of arguments. + result.append(('', args)) + result.append(('', [op])) + else: + raise + func = getattr(mapping, op, None) if not func: result.append((op,args)) @@ -225,8 +319,8 @@ def generalizeCommands(commands, ignoreErrors=False): raise return result -def generalizeProgram(program, **kwargs): - return commandsToProgram(generalizeCommands(programToCommands(program), **kwargs)) +def generalizeProgram(program, getNumRegions=None, **kwargs): + return commandsToProgram(generalizeCommands(programToCommands(program, getNumRegions), **kwargs)) def _categorizeVector(v): @@ -267,6 +361,70 @@ def _negateCategory(a): assert a in '0r' return a +def _convertToBlendCmds(args): + # return a list of blend commands, and + # the remaining non-blended args, if any. + num_args = len(args) + stack_use = 0 + new_args = [] + i = 0 + while i < num_args: + arg = args[i] + if not isinstance(arg, list): + new_args.append(arg) + i += 1 + stack_use += 1 + else: + prev_stack_use = stack_use + # The arg is a tuple of blend values. + # These are each (master 0,delta 1..delta n) + # Combine as many successive tuples as we can, + # up to the max stack limit. + num_sources = len(arg) + blendlist = [arg] + i += 1 + stack_use += 1 + num_sources # 1 for the num_blends arg + while (i < num_args) and isinstance(args[i], list): + blendlist.append(args[i]) + i += 1 + stack_use += num_sources + if stack_use + num_sources > maxStackLimit: + # if we are here, max stack is the CFF2 max stack. + # I use the CFF2 max stack limit here rather than + # the 'maxstack' chosen by the client, as the default + # maxstack may have been used unintentionally. For all + # the other operators, this just produces a little less + # optimization, but here it puts a hard (and low) limit + # on the number of source fonts that can be used. + break + # blendList now contains as many single blend tuples as can be + # combined without exceeding the CFF2 stack limit. + num_blends = len(blendlist) + # append the 'num_blends' default font values + blend_args = [] + for arg in blendlist: + blend_args.append(arg[0]) + for arg in blendlist: + blend_args.extend(arg[1:]) + blend_args.append(num_blends) + new_args.append(blend_args) + stack_use = prev_stack_use + num_blends + + return new_args + +def _addArgs(a, b): + if isinstance(b, list): + if isinstance(a, list): + if len(a) != len(b): + raise ValueError() + return [_addArgs(va, vb) for va,vb in zip(a, b)] + else: + a, b = b, a + if isinstance(a, list): + return [_addArgs(a[0], b)] + a[1:] + return a + b + + def specializeCommands(commands, ignoreErrors=False, generalizeFirst=True, @@ -302,6 +460,8 @@ def specializeCommands(commands, # I have convinced myself that this produces optimal bytecode (except for, possibly # one byte each time maxstack size prohibits combining.) YMMV, but you'd be wrong. :-) # A dynamic-programming approach can do the same but would be significantly slower. + # + # 7. For any args which are blend lists, convert them to a blend command. # 0. Generalize commands. @@ -417,12 +577,18 @@ def specializeCommands(commands, continue # Merge adjacent hlineto's and vlineto's. + # In CFF2 charstrings from variable fonts, each + # arg item may be a list of blendable values, one from + # each source font. if (i and op in {'hlineto', 'vlineto'} and - (op == commands[i-1][0]) and - (not isinstance(args[0], list))): + (op == commands[i-1][0])): _, other_args = commands[i-1] assert len(args) == 1 and len(other_args) == 1 - commands[i-1] = (op, [other_args[0]+args[0]]) + try: + new_args = [_addArgs(args[0], other_args[0])] + except ValueError: + continue + commands[i-1] = (op, new_args) del commands[i] continue @@ -534,10 +700,16 @@ def specializeCommands(commands, commands[i] = op0+op1+'curveto', args continue + # 7. For any series of args which are blend lists, convert the series to a single blend arg. + for i in range(len(commands)): + op, args = commands[i] + if any(isinstance(arg, list) for arg in args): + commands[i] = op, _convertToBlendCmds(args) + return commands -def specializeProgram(program, **kwargs): - return commandsToProgram(specializeCommands(programToCommands(program), **kwargs)) +def specializeProgram(program, getNumRegions=None, **kwargs): + return commandsToProgram(specializeCommands(programToCommands(program, getNumRegions), **kwargs)) if __name__ == '__main__': @@ -554,4 +726,3 @@ if __name__ == '__main__': assert program == program2 print("Generalized program:"); print(programToString(generalizeProgram(program))) print("Specialized program:"); print(programToString(specializeProgram(program))) - diff --git a/Lib/fontTools/designspaceLib/__init__.py b/Lib/fontTools/designspaceLib/__init__.py index 4c5be8b4..e40f5edf 100644 --- a/Lib/fontTools/designspaceLib/__init__.py +++ b/Lib/fontTools/designspaceLib/__init__.py @@ -755,7 +755,6 @@ class BaseDocReader(LogMixin): axisObject.labelNames[lang] = tounicode(labelNameElement.text) self.documentObject.axes.append(axisObject) self.axisDefaults[axisObject.name] = axisObject.default - self.documentObject.defaultLoc = self.axisDefaults def readSources(self): for sourceCount, sourceElement in enumerate(self.root.findall(".sources/source")): @@ -998,7 +997,6 @@ class DesignSpaceDocument(LogMixin, AsDictMixin): self.axes = [] self.rules = [] self.default = None # name of the default master - self.defaultLoc = None self.lib = {} """Custom data associated with the whole document.""" @@ -1188,10 +1186,7 @@ class DesignSpaceDocument(LogMixin, AsDictMixin): # Convert the default location from user space to design space before comparing # it against the SourceDescriptor locations (always in design space). - default_location_design = { - axis.name: axis.map_forward(self.defaultLoc[axis.name]) - for axis in self.axes - } + default_location_design = self.newDefaultLocation() for sourceDescriptor in self.sources: if sourceDescriptor.location == default_location_design: @@ -1267,3 +1262,50 @@ class DesignSpaceDocument(LogMixin, AsDictMixin): newConditions.append(dict(name=cond['name'], minimum=minimum, maximum=maximum)) newConditionSets.append(newConditions) rule.conditionSets = newConditionSets + + def loadSourceFonts(self, opener, **kwargs): + """Ensure SourceDescriptor.font attributes are loaded, and return list of fonts. + + Takes a callable which initializes a new font object (e.g. TTFont, or + defcon.Font, etc.) from the SourceDescriptor.path, and sets the + SourceDescriptor.font attribute. + If the font attribute is already not None, it is not loaded again. + Fonts with the same path are only loaded once and shared among SourceDescriptors. + + For example, to load UFO sources using defcon: + + designspace = DesignSpaceDocument.fromfile("path/to/my.designspace") + designspace.loadSourceFonts(defcon.Font) + + Or to load masters as FontTools binary fonts, including extra options: + + designspace.loadSourceFonts(ttLib.TTFont, recalcBBoxes=False) + + Args: + opener (Callable): takes one required positional argument, the source.path, + and an optional list of keyword arguments, and returns a new font object + loaded from the path. + **kwargs: extra options passed on to the opener function. + + Returns: + List of font objects in the order they appear in the sources list. + """ + # we load fonts with the same source.path only once + loaded = {} + fonts = [] + for source in self.sources: + if source.font is not None: # font already loaded + fonts.append(source.font) + continue + if source.path in loaded: + source.font = loaded[source.path] + else: + if source.path is None: + raise DesignSpaceDocumentError( + "Designspace source '%s' has no 'path' attribute" + % (source.name or "<Unknown>") + ) + source.font = opener(source.path, **kwargs) + loaded[source.path] = source.font + fonts.append(source.font) + return fonts diff --git a/Lib/fontTools/feaLib/ast.py b/Lib/fontTools/feaLib/ast.py index 39dc4bcf..1994fc08 100644 --- a/Lib/fontTools/feaLib/ast.py +++ b/Lib/fontTools/feaLib/ast.py @@ -1143,6 +1143,12 @@ class ValueRecord(Expression): elif yAdvance is None and not vertical: return str(xAdvance) + # Make any remaining None value 0 to avoid generating invalid records. + x = x or 0 + y = y or 0 + xAdvance = xAdvance or 0 + yAdvance = yAdvance or 0 + # Try format B, if possible. if (xPlaDevice is None and yPlaDevice is None and xAdvDevice is None and yAdvDevice is None): diff --git a/Lib/fontTools/feaLib/builder.py b/Lib/fontTools/feaLib/builder.py index 456ae3cc..8880acf1 100644 --- a/Lib/fontTools/feaLib/builder.py +++ b/Lib/fontTools/feaLib/builder.py @@ -7,6 +7,7 @@ from fontTools.feaLib.error import FeatureLibError from fontTools.feaLib.parser import Parser from fontTools.feaLib.ast import FeatureFile from fontTools.otlLib import builder as otl +from fontTools.otlLib.maxContextCalc import maxCtxFont from fontTools.ttLib import newTable, getTableModule from fontTools.ttLib.tables import otBase, otTables from collections import defaultdict, OrderedDict @@ -137,6 +138,9 @@ class Builder(object): fontTable.table = table elif tag in self.font: del self.font[tag] + if (any(tag in self.font for tag in ("GPOS", "GSUB")) and + "OS/2" in self.font): + self.font["OS/2"].usMaxContext = maxCtxFont(self.font) if "GDEF" in tables: gdef = self.buildGDEF() if gdef: diff --git a/Lib/fontTools/fontBuilder.py b/Lib/fontTools/fontBuilder.py index 8854c164..ef14b045 100644 --- a/Lib/fontTools/fontBuilder.py +++ b/Lib/fontTools/fontBuilder.py @@ -21,6 +21,7 @@ that works: fb.setupHorizontalHeader() fb.setupNameTable(...) fb.setupOS2() + fb.addOpenTypeFeatures(...) fb.setupPost() fb.save(...) @@ -100,9 +101,10 @@ charString = pen.getCharString() charStrings = {".notdef": charString, "A": charString, "a": charString, ".null": charString} fb.setupCFF(nameStrings['psName'], {"FullName": nameStrings['psName']}, charStrings, {}) +lsb = {gn: cs.calcBounds(None)[0] for gn, cs in charStrings.items()} metrics = {} for gn, advanceWidth in advanceWidths.items(): - metrics[gn] = (advanceWidth, 100) # XXX lsb from glyph + metrics[gn] = (advanceWidth, lsb[gn]) fb.setupHorizontalMetrics(metrics) fb.setupHorizontalHeader(ascent=824, descent=200) @@ -298,7 +300,7 @@ _OS2Defaults = dict( sCapHeight = 0, usDefaultChar = 0, # .notdef usBreakChar = 32, # space - usMaxContext = 2, # just kerning + usMaxContext = 0, usLowerOpticalPointSize = 0, usUpperOpticalPointSize = 0, ) @@ -690,8 +692,9 @@ class FontBuilder(object): """Create a new `post` table and initialize it with default values, which can be overridden by keyword arguments. """ + isCFF2 = 'CFF2' in self.font postTable = self._initTableWithValues("post", _postDefaults, values) - if self.isTTF and keepGlyphNames: + if (self.isTTF or isCFF2) and keepGlyphNames: postTable.formatType = 2.0 postTable.extraNames = [] postTable.mapping = {} diff --git a/Lib/fontTools/misc/arrayTools.py b/Lib/fontTools/misc/arrayTools.py index f2cfac83..ed20230c 100644 --- a/Lib/fontTools/misc/arrayTools.py +++ b/Lib/fontTools/misc/arrayTools.py @@ -6,6 +6,7 @@ from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * +from fontTools.misc.fixedTools import otRound from numbers import Number import math import operator @@ -20,10 +21,11 @@ def calcBounds(array): ys = [y for x, y in array] return min(xs), min(ys), max(xs), max(ys) -def calcIntBounds(array): +def calcIntBounds(array, round=otRound): """Return the integer bounding rectangle of a 2D points array as a tuple: (xMin, yMin, xMax, yMax) - Values are rounded to closest integer. + Values are rounded to closest integer towards +Infinity using otRound + function by default, unless an optional 'round' function is passed. """ return tuple(round(v) for v in calcBounds(array)) diff --git a/Lib/fontTools/misc/cliTools.py b/Lib/fontTools/misc/cliTools.py index 59ac3be1..8420e3e7 100644 --- a/Lib/fontTools/misc/cliTools.py +++ b/Lib/fontTools/misc/cliTools.py @@ -5,7 +5,7 @@ import os import re -numberAddedRE = re.compile("#\d+$") +numberAddedRE = re.compile(r"#\d+$") def makeOutputFileName(input, outputDir=None, extension=None, overWrite=False): diff --git a/Lib/fontTools/misc/filenames.py b/Lib/fontTools/misc/filenames.py index 6cf02e36..260ace4c 100644 --- a/Lib/fontTools/misc/filenames.py +++ b/Lib/fontTools/misc/filenames.py @@ -15,7 +15,7 @@ from __future__ import unicode_literals from fontTools.misc.py23 import basestring, unicode -illegalCharacters = "\" * + / : < > ? [ \ ] | \0".split(" ") +illegalCharacters = r"\" * + / : < > ? [ \ ] | \0".split(" ") illegalCharacters += [chr(i) for i in range(1, 32)] illegalCharacters += [chr(0x7F)] reservedFileNames = "CON PRN AUX CLOCK$ NUL A:-Z: COM1".lower().split(" ") diff --git a/Lib/fontTools/misc/psCharStrings.py b/Lib/fontTools/misc/psCharStrings.py index 7fc7a26f..a97ec96d 100644 --- a/Lib/fontTools/misc/psCharStrings.py +++ b/Lib/fontTools/misc/psCharStrings.py @@ -944,6 +944,16 @@ class T2CharString(object): self.program = program self.private = private self.globalSubrs = globalSubrs if globalSubrs is not None else [] + self._cur_vsindex = None + + def getNumRegions(self, vsindex=None): + pd = self.private + assert(pd is not None) + if vsindex is not None: + self._cur_vsindex = vsindex + elif self._cur_vsindex is None: + self._cur_vsindex = pd.vsindex if hasattr(pd, 'vsindex') else 0 + return pd.getNumRegions(self._cur_vsindex) def __repr__(self): if self.bytecode is None: diff --git a/Lib/fontTools/misc/sstruct.py b/Lib/fontTools/misc/sstruct.py index 528b5e02..6b7e783e 100644 --- a/Lib/fontTools/misc/sstruct.py +++ b/Lib/fontTools/misc/sstruct.py @@ -110,20 +110,20 @@ def calcsize(fmt): # matches "name:formatchar" (whitespace is allowed) _elementRE = re.compile( - "\s*" # whitespace - "([A-Za-z_][A-Za-z_0-9]*)" # name (python identifier) - "\s*:\s*" # whitespace : whitespace - "([cbBhHiIlLqQfd]|[0-9]+[ps]|" # formatchar... - "([0-9]+)\.([0-9]+)(F))" # ...formatchar - "\s*" # whitespace - "(#.*)?$" # [comment] + end of string + r"\s*" # whitespace + r"([A-Za-z_][A-Za-z_0-9]*)" # name (python identifier) + r"\s*:\s*" # whitespace : whitespace + r"([cbBhHiIlLqQfd]|[0-9]+[ps]|" # formatchar... + r"([0-9]+)\.([0-9]+)(F))" # ...formatchar + r"\s*" # whitespace + r"(#.*)?$" # [comment] + end of string ) # matches the special struct fmt chars and 'x' (pad byte) -_extraRE = re.compile("\s*([x@=<>!])\s*(#.*)?$") +_extraRE = re.compile(r"\s*([x@=<>!])\s*(#.*)?$") # matches an "empty" string, possibly containing whitespace and/or a comment -_emptyRE = re.compile("\s*(#.*)?$") +_emptyRE = re.compile(r"\s*(#.*)?$") _fixedpointmappings = { 8: "b", diff --git a/Lib/fontTools/otlLib/builder.py b/Lib/fontTools/otlLib/builder.py index efe66d53..f8b3ce3b 100644 --- a/Lib/fontTools/otlLib/builder.py +++ b/Lib/fontTools/otlLib/builder.py @@ -408,7 +408,8 @@ def buildSinglePos(mapping, glyphMap): # If a ValueRecord is shared between multiple glyphs, we generate # a SinglePos format 1 subtable; that is the most compact form. for key, glyphs in coverages.items(): - if len(glyphs) > 1: + # 5 ushorts is the length of introducing another sublookup + if len(glyphs) * _getSinglePosValueSize(key) > 5: format1Mapping = {g: values[key] for g in glyphs} result.append(buildSinglePosSubtable(format1Mapping, glyphMap)) handled.add(key) @@ -419,17 +420,18 @@ def buildSinglePos(mapping, glyphMap): for valueFormat, keys in masks.items(): f2 = [k for k in keys if k not in handled] if len(f2) > 1: - format2Mapping = {coverages[k][0]: values[k] for k in f2} + format2Mapping = {} + for k in f2: + format2Mapping.update((g, values[k]) for g in coverages[k]) result.append(buildSinglePosSubtable(format2Mapping, glyphMap)) handled.update(f2) - # The remaining ValueRecords are singletons in the sense that - # they are only used by a single glyph, and their valueFormat - # is unique as well. We encode these in format 1 again. + # The remaining ValueRecords are only used by a few glyphs, normally + # one. We encode these in format 1 again. for key, glyphs in coverages.items(): if key not in handled: - assert len(glyphs) == 1, glyphs - st = buildSinglePosSubtable({glyphs[0]: values[key]}, glyphMap) + for g in glyphs: + st = buildSinglePosSubtable({g: values[key]}, glyphMap) result.append(st) # When the OpenType layout engine traverses the subtables, it will @@ -491,6 +493,15 @@ def _makeDeviceTuple(device): return (device.DeltaFormat, device.StartSize, device.EndSize, tuple(device.DeltaValue)) +def _getSinglePosValueSize(valueKey): + """Returns how many ushorts this valueKey (short form of ValueRecord) takes up""" + count = 0 + for k in valueKey[1:]: + if hasattr(k[1], '__len__') and len(k[1]): + count += len(k[1][3]) + 3 + else: + count += 1 + return count def buildValue(value): self = ValueRecord() diff --git a/Lib/fontTools/otlLib/maxContextCalc.py b/Lib/fontTools/otlLib/maxContextCalc.py new file mode 100644 index 00000000..5659310f --- /dev/null +++ b/Lib/fontTools/otlLib/maxContextCalc.py @@ -0,0 +1,101 @@ +from __future__ import print_function, division, absolute_import, unicode_literals + +__all__ = ['maxCtxFont'] + + +def maxCtxFont(font): + """Calculate the usMaxContext value for an entire font.""" + + maxCtx = 0 + for tag in ('GSUB', 'GPOS'): + if tag not in font: + continue + table = font[tag].table + if not table.LookupList: + continue + for lookup in table.LookupList.Lookup: + for st in lookup.SubTable: + maxCtx = maxCtxSubtable(maxCtx, tag, lookup.LookupType, st) + return maxCtx + + +def maxCtxSubtable(maxCtx, tag, lookupType, st): + """Calculate usMaxContext based on a single lookup table (and an existing + max value). + """ + + # single positioning, single / multiple substitution + if (tag == 'GPOS' and lookupType == 1) or ( + tag == 'GSUB' and lookupType in (1, 2, 3)): + maxCtx = max(maxCtx, 1) + + # pair positioning + elif tag == 'GPOS' and lookupType == 2: + maxCtx = max(maxCtx, 2) + + # ligatures + elif tag == 'GSUB' and lookupType == 4: + for ligatures in st.ligatures.values(): + for ligature in ligatures: + maxCtx = max(maxCtx, ligature.CompCount) + + # context + elif (tag == 'GPOS' and lookupType == 7) or ( + tag == 'GSUB' and lookupType == 5): + maxCtx = maxCtxContextualSubtable( + maxCtx, st, 'Pos' if tag == 'GPOS' else 'Sub') + + # chained context + elif (tag == 'GPOS' and lookupType == 8) or ( + tag == 'GSUB' and lookupType == 6): + maxCtx = maxCtxContextualSubtable( + maxCtx, st, 'Pos' if tag == 'GPOS' else 'Sub', 'Chain') + + # extensions + elif (tag == 'GPOS' and lookupType == 9) or ( + tag == 'GSUB' and lookupType == 7): + maxCtx = maxCtxSubtable( + maxCtx, tag, st.ExtensionLookupType, st.ExtSubTable) + + # reverse-chained context + elif tag == 'GSUB' and lookupType == 8: + maxCtx = maxCtxContextualRule(maxCtx, st, 'Reverse') + + return maxCtx + + +def maxCtxContextualSubtable(maxCtx, st, ruleType, chain=''): + """Calculate usMaxContext based on a contextual feature subtable.""" + + if st.Format == 1: + for ruleset in getattr(st, '%s%sRuleSet' % (chain, ruleType)): + if ruleset is None: + continue + for rule in getattr(ruleset, '%s%sRule' % (chain, ruleType)): + if rule is None: + continue + maxCtx = maxCtxContextualRule(maxCtx, rule, chain) + + elif st.Format == 2: + for ruleset in getattr(st, '%s%sClassSet' % (chain, ruleType)): + if ruleset is None: + continue + for rule in getattr(ruleset, '%s%sClassRule' % (chain, ruleType)): + if rule is None: + continue + maxCtx = maxCtxContextualRule(maxCtx, rule, chain) + + elif st.Format == 3: + maxCtx = maxCtxContextualRule(maxCtx, st, chain) + + return maxCtx + + +def maxCtxContextualRule(maxCtx, st, chain): + """Calculate usMaxContext based on a contextual feature rule.""" + + if not chain: + return max(maxCtx, st.GlyphCount) + elif chain == 'Reverse': + return max(maxCtx, st.GlyphCount + st.LookAheadGlyphCount) + return max(maxCtx, st.InputGlyphCount + st.LookAheadGlyphCount) diff --git a/Lib/fontTools/subset/__init__.py b/Lib/fontTools/subset/__init__.py index 6e17cc33..efa06c4c 100644 --- a/Lib/fontTools/subset/__init__.py +++ b/Lib/fontTools/subset/__init__.py @@ -7,6 +7,7 @@ from fontTools.misc.py23 import * from fontTools.misc.fixedTools import otRound from fontTools import ttLib from fontTools.ttLib.tables import otTables +from fontTools.otlLib.maxContextCalc import maxCtxFont from fontTools.pens.basePen import NullPen from fontTools.misc.loggingTools import Timer from fontTools.subset.cff import * @@ -322,6 +323,10 @@ Other font-specific options: Update the 'OS/2 xAvgCharWidth' field after subsetting. --no-recalc-average-width Don't change the 'OS/2 xAvgCharWidth' field. [default] + --recalc-max-context + Update the 'OS/2 usMaxContext' field after subsetting. + --no-recalc-max-context + Don't change the 'OS/2 usMaxContext' field. [default] --font-number=<number> Select font number for TrueType Collection (.ttc/.otc), starting from 0. @@ -1789,39 +1794,47 @@ def subset_glyphs(self, s): self.glyphCount = len(self.variations) return bool(self.variations) +def _remap_index_map(s, varidx_map, table_map): + map_ = {k:varidx_map[v] for k,v in table_map.mapping.items()} + # Emptied glyphs are remapped to: + # if GID <= last retained GID, 0/0: delta set for 0/0 is expected to exist & zeros compress well + # if GID > last retained GID, major/minor of the last retained glyph: will be optimized out by table compiler + last_idx = varidx_map[table_map.mapping[s.last_retained_glyph]] + for g,i in s.reverseEmptiedGlyphMap.items(): + map_[g] = last_idx if i > s.last_retained_order else 0 + return map_ + @_add_method(ttLib.getTableClass('HVAR')) def subset_glyphs(self, s): table = self.table - # TODO Update for retain_gids - used = set() + advIdxes_ = set() + retainAdvMap = False if table.AdvWidthMap: - if not s.options.retain_gids: - table.AdvWidthMap.mapping = _dict_subset(table.AdvWidthMap.mapping, s.glyphs) + table.AdvWidthMap.mapping = _dict_subset(table.AdvWidthMap.mapping, s.glyphs) used.update(table.AdvWidthMap.mapping.values()) else: - assert table.LsbMap is None and table.RsbMap is None, "File a bug." used.update(s.reverseOrigGlyphMap.values()) + advIdxes_ = used.copy() + retainAdvMap = s.options.retain_gids if table.LsbMap: - if not s.options.retain_gids: - table.LsbMap.mapping = _dict_subset(table.LsbMap.mapping, s.glyphs) + table.LsbMap.mapping = _dict_subset(table.LsbMap.mapping, s.glyphs) used.update(table.LsbMap.mapping.values()) if table.RsbMap: - if not s.options.retain_gids: - table.RsbMap.mapping = _dict_subset(table.RsbMap.mapping, s.glyphs) + table.RsbMap.mapping = _dict_subset(table.RsbMap.mapping, s.glyphs) used.update(table.RsbMap.mapping.values()) - varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used) + varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=retainAdvMap, advIdxes=advIdxes_) if table.AdvWidthMap: - table.AdvWidthMap.mapping = {k:varidx_map[v] for k,v in table.AdvWidthMap.mapping.items()} + table.AdvWidthMap.mapping = _remap_index_map(s, varidx_map, table.AdvWidthMap) if table.LsbMap: - table.LsbMap.mapping = {k:varidx_map[v] for k,v in table.LsbMap.mapping.items()} + table.LsbMap.mapping = _remap_index_map(s, varidx_map, table.LsbMap) if table.RsbMap: - table.RsbMap.mapping = {k:varidx_map[v] for k,v in table.RsbMap.mapping.items()} + table.RsbMap.mapping = _remap_index_map(s, varidx_map, table.RsbMap) # TODO Return emptiness... return True @@ -1831,13 +1844,17 @@ def subset_glyphs(self, s): table = self.table used = set() + advIdxes_ = set() + retainAdvMap = False if table.AdvHeightMap: table.AdvHeightMap.mapping = _dict_subset(table.AdvHeightMap.mapping, s.glyphs) used.update(table.AdvHeightMap.mapping.values()) else: - assert table.TsbMap is None and table.BsbMap is None and table.VOrgMap is None, "File a bug." used.update(s.reverseOrigGlyphMap.values()) + advIdxes_ = used.copy() + retainAdvMap = s.options.retain_gids + if table.TsbMap: table.TsbMap.mapping = _dict_subset(table.TsbMap.mapping, s.glyphs) used.update(table.TsbMap.mapping.values()) @@ -1848,16 +1865,16 @@ def subset_glyphs(self, s): table.VOrgMap.mapping = _dict_subset(table.VOrgMap.mapping, s.glyphs) used.update(table.VOrgMap.mapping.values()) - varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used) + varidx_map = varStore.VarStore_subset_varidxes(table.VarStore, used, retainFirstMap=retainAdvMap, advIdxes=advIdxes_) if table.AdvHeightMap: - table.AdvHeightMap.mapping = {k:varidx_map[v] for k,v in table.AdvHeightMap.mapping.items()} + table.AdvHeightMap.mapping = _remap_index_map(s, varidx_map, table.AdvHeightMap) if table.TsbMap: - table.TsbMap.mapping = {k:varidx_map[v] for k,v in table.TsbMap.mapping.items()} + table.TsbMap.mapping = _remap_index_map(s, varidx_map, table.TsbMap) if table.BsbMap: - table.BsbMap.mapping = {k:varidx_map[v] for k,v in table.BsbMap.mapping.items()} + table.BsbMap.mapping = _remap_index_map(s, varidx_map, table.BsbMap) if table.VOrgMap: - table.VOrgMap.mapping = {k:varidx_map[v] for k,v in table.VOrgMap.mapping.items()} + table.VOrgMap.mapping = _remap_index_map(s, varidx_map, table.VOrgMap) # TODO Return emptiness... return True @@ -2301,6 +2318,7 @@ class Options(object): self.recalc_timestamp = False # Recalculate font modified timestamp self.prune_unicode_ranges = True # Clear unused 'ulUnicodeRange' bits self.recalc_average_width = False # update 'xAvgCharWidth' + self.recalc_max_context = False # update 'usMaxContext' self.canonical_order = None # Order tables as recommended self.flavor = None # May be 'woff' or 'woff2' self.with_zopfli = False # use zopfli instead of zlib for WOFF 1.0 @@ -2561,6 +2579,9 @@ class Subsetter(object): order = font.getReverseGlyphMap() self.reverseOrigGlyphMap = {g:order[g] for g in self.glyphs_retained} + self.reverseEmptiedGlyphMap = {g:order[g] for g in self.glyphs_emptied} + self.last_retained_order = max(self.reverseOrigGlyphMap.values()) + self.last_retained_glyph = font.getGlyphOrder()[self.last_retained_order] log.info("Retaining %d glyphs", len(self.glyphs_retained)) @@ -2610,6 +2631,11 @@ class Subsetter(object): if avg_width != font[tag].xAvgCharWidth: font[tag].xAvgCharWidth = avg_width log.info("%s xAvgCharWidth updated: %d", tag, avg_width) + if self.options.recalc_max_context: + max_context = maxCtxFont(font) + if max_context != font[tag].usMaxContext: + font[tag].usMaxContext = max_context + log.info("%s usMaxContext updated: %d", tag, max_context) clazz = ttLib.getTableClass(tag) if hasattr(clazz, 'prune_post_subset'): with timer("prune '%s'" % tag): diff --git a/Lib/fontTools/subset/cff.py b/Lib/fontTools/subset/cff.py index 274071e5..fc29f182 100644 --- a/Lib/fontTools/subset/cff.py +++ b/Lib/fontTools/subset/cff.py @@ -366,7 +366,7 @@ class StopHintCountEvent(Exception): class _DesubroutinizingT2Decompiler(psCharStrings.SimpleT2Decompiler): - stop_hintcount_ops = ("op_hstem", "op_vstem", "op_rmoveto", "op_hmoveto", + stop_hintcount_ops = ("op_hintmask", "op_cntrmask", "op_rmoveto", "op_hmoveto", "op_vmoveto") def __init__(self, localSubrs, globalSubrs, private=None): @@ -379,6 +379,10 @@ class _DesubroutinizingT2Decompiler(psCharStrings.SimpleT2Decompiler): setattr(self, op_name, self.stop_hint_count) if hasattr(charString, '_desubroutinized'): + # If a charstring has already been desubroutinized, we will still + # need to execute it if we need to count hints in order to + # compute the byte length for mask arguments, and haven't finished + # counting hints pairs. if self.need_hintcount and self.callingStack: try: psCharStrings.SimpleT2Decompiler.execute(self, charString) diff --git a/Lib/fontTools/svgLib/path/__init__.py b/Lib/fontTools/svgLib/path/__init__.py index 017ff57e..5dd3329c 100644 --- a/Lib/fontTools/svgLib/path/__init__.py +++ b/Lib/fontTools/svgLib/path/__init__.py @@ -55,6 +55,10 @@ class SVGPath(object): # xpath | doesn't seem to reliable work so just walk it for el in self.root.iter(): pb.add_path_from_element(el) - for path in pb.paths: + original_pen = pen + for path, transform in zip(pb.paths, pb.transforms): + if transform: + pen = TransformPen(original_pen, transform) + else: + pen = original_pen parse_path(path, pen) - diff --git a/Lib/fontTools/svgLib/path/parser.py b/Lib/fontTools/svgLib/path/parser.py index ae0aba39..bdf3de0c 100644 --- a/Lib/fontTools/svgLib/path/parser.py +++ b/Lib/fontTools/svgLib/path/parser.py @@ -18,7 +18,7 @@ COMMANDS = set('MmZzLlHhVvCcSsQqTtAa') UPPERCASE = set('MZLHVCSQTA') COMMAND_RE = re.compile("([MmZzLlHhVvCcSsQqTtAa])") -FLOAT_RE = re.compile("[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?") +FLOAT_RE = re.compile(r"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?") def _tokenize_path(pathdef): diff --git a/Lib/fontTools/svgLib/path/shapes.py b/Lib/fontTools/svgLib/path/shapes.py index a83274e4..4cc633ad 100644 --- a/Lib/fontTools/svgLib/path/shapes.py +++ b/Lib/fontTools/svgLib/path/shapes.py @@ -1,3 +1,6 @@ +import re + + def _prefer_non_zero(*args): for arg in args: if arg != 0: @@ -16,12 +19,28 @@ def _strip_xml_ns(tag): return tag.split('}', 1)[1] if '}' in tag else tag +def _transform(raw_value): + # TODO assumes a 'matrix' transform. + # No other transform functions are supported at the moment. + # https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform + # start simple: if you aren't exactly matrix(...) then no love + match = re.match(r'matrix\((.*)\)', raw_value) + if not match: + raise NotImplementedError + matrix = tuple(float(p) for p in re.split(r'\s+|,', match.group(1))) + if len(matrix) != 6: + raise ValueError('wrong # of terms in %s' % raw_value) + return matrix + + class PathBuilder(object): def __init__(self): self.paths = [] + self.transforms = [] def _start_path(self, initial_path=''): self.paths.append(initial_path) + self.transforms.append(None) def _end_path(self): self._add('z') @@ -68,6 +87,25 @@ class PathBuilder(object): def v(self, y): self._vhline('v', y) + def _line(self, c, x, y): + self._add('%s%s,%s' % (c, _ntos(x), _ntos(y))) + + def L(self, x, y): + self._line('L', x, y) + + def l(self, x, y): + self._line('l', x, y) + + def _parse_line(self, line): + x1 = float(line.attrib.get('x1', 0)) + y1 = float(line.attrib.get('y1', 0)) + x2 = float(line.attrib.get('x2', 0)) + y2 = float(line.attrib.get('y2', 0)) + + self._start_path() + self.M(x1, y1) + self.L(x2, y2) + def _parse_rect(self, rect): x = float(rect.attrib.get('x', 0)) y = float(rect.attrib.get('y', 0)) @@ -105,6 +143,10 @@ class PathBuilder(object): self._start_path('M' + poly.attrib['points']) self._end_path() + def _parse_polyline(self, poly): + if 'points' in poly.attrib: + self._start_path('M' + poly.attrib['points']) + def _parse_circle(self, circle): cx = float(circle.attrib.get('cx', 0)) cy = float(circle.attrib.get('cy', 0)) @@ -116,10 +158,24 @@ class PathBuilder(object): self.A(r, r, cx + r, cy, large_arc=1) self.A(r, r, cx - r, cy, large_arc=1) + def _parse_ellipse(self, ellipse): + cx = float(ellipse.attrib.get('cx', 0)) + cy = float(ellipse.attrib.get('cy', 0)) + rx = float(ellipse.attrib.get('rx')) + ry = float(ellipse.attrib.get('ry')) + + # arc doesn't seem to like being a complete shape, draw two halves + self._start_path() + self.M(cx - rx, cy) + self.A(rx, ry, cx + rx, cy, large_arc=1) + self.A(rx, ry, cx - rx, cy, large_arc=1) + def add_path_from_element(self, el): tag = _strip_xml_ns(el.tag) parse_fn = getattr(self, '_parse_%s' % tag.lower(), None) if not callable(parse_fn): return False parse_fn(el) + if 'transform' in el.attrib: + self.transforms[-1] = _transform(el.attrib['transform']) return True diff --git a/Lib/fontTools/ttLib/tables/S__i_l_f.py b/Lib/fontTools/ttLib/tables/S__i_l_f.py index e68b9b2e..00d5f616 100644 --- a/Lib/fontTools/ttLib/tables/S__i_l_f.py +++ b/Lib/fontTools/ttLib/tables/S__i_l_f.py @@ -82,6 +82,12 @@ Silf_pseudomap_format = ''' nPseudo: H ''' +Silf_pseudomap_format_h = ''' + > + unicode: H + nPseudo: H +''' + Silf_classmap_format = ''' > numClass: H @@ -219,7 +225,7 @@ def disassemble(aCode): pc += struct.calcsize(fmt) return res -instre = re.compile("^\s*([^(]+)\s*(?:\(([^)]+)\))?") +instre = re.compile(r"^\s*([^(]+)\s*(?:\(([^)]+)\))?") def assemble(instrs): res = b"" for inst in instrs: @@ -231,7 +237,7 @@ def assemble(instrs): if m.group(2): if parmfmt == 0: continue - parms = [int(x) for x in re.split(",\s*", m.group(2))] + parms = [int(x) for x in re.split(r",\s*", m.group(2))] if parmfmt == -1: l = len(parms) res += struct.pack(("%dB" % (l+1)), l, *parms) @@ -406,7 +412,7 @@ class Silf(object): if version >= 3.0: pseudo = sstruct.unpack(Silf_pseudomap_format, data[8+6*i:14+6*i], _Object()) else: - pseudo = struct.unpack('>HH', data[8+4*i:12+4*i], _Object()) + pseudo = sstruct.unpack(Silf_pseudomap_format_h, data[8+4*i:12+4*i], _Object()) self.pMap[pseudo.unicode] = ttFont.getGlyphName(pseudo.nPseudo) data = data[8 + 6 * numPseudo:] currpos = (sstruct.calcsize(Silf_part1_format) diff --git a/Lib/fontTools/ttLib/tables/S__i_l_l.py b/Lib/fontTools/ttLib/tables/S__i_l_l.py index 4671e137..bf9d83f5 100644 --- a/Lib/fontTools/ttLib/tables/S__i_l_l.py +++ b/Lib/fontTools/ttLib/tables/S__i_l_l.py @@ -28,7 +28,7 @@ class table_S__i_l_l(DefaultTable.DefaultTable): data[i * 8:(i+1) * 8]) offset = int(offset / 8) - (numLangs + 1) langcode = langcode.replace(b'\000', b'') - langinfo.append((langcode, numsettings, offset)) + langinfo.append((langcode.decode("utf-8"), numsettings, offset)) maxsetting = max(maxsetting, offset + numsettings) data = data[numLangs * 8:] finfo = [] diff --git a/Lib/fontTools/ttLib/tables/_g_l_y_f.py b/Lib/fontTools/ttLib/tables/_g_l_y_f.py index b8020ca7..83d5315b 100644 --- a/Lib/fontTools/ttLib/tables/_g_l_y_f.py +++ b/Lib/fontTools/ttLib/tables/_g_l_y_f.py @@ -917,8 +917,12 @@ class Glyph(object): expanding it.""" if not hasattr(self, "data"): if remove_hinting: - self.program = ttProgram.Program() - self.program.fromBytecode([]) + if self.isComposite(): + if hasattr(self, "program"): + del self.program + else: + self.program = ttProgram.Program() + self.program.fromBytecode([]) # No padding to trim. return if not self.data: diff --git a/Lib/fontTools/ttLib/tables/_g_v_a_r.py b/Lib/fontTools/ttLib/tables/_g_v_a_r.py index 608b6a2d..f9c9e528 100644 --- a/Lib/fontTools/ttLib/tables/_g_v_a_r.py +++ b/Lib/fontTools/ttLib/tables/_g_v_a_r.py @@ -107,8 +107,15 @@ class table__g_v_a_r(DefaultTable.DefaultTable): glyph = ttFont["glyf"][glyphName] numPointsInGlyph = self.getNumPoints_(glyph) gvarData = data[offsetToData + offsets[i] : offsetToData + offsets[i + 1]] - self.variations[glyphName] = decompileGlyph_( - numPointsInGlyph, sharedCoords, axisTags, gvarData) + try: + self.variations[glyphName] = decompileGlyph_( + numPointsInGlyph, sharedCoords, axisTags, gvarData) + except Exception: + log.error( + "Failed to decompile deltas for glyph '%s' (%d points)", + glyphName, numPointsInGlyph, + ) + raise @staticmethod def decompileOffsets_(data, tableFormat, glyphCount): diff --git a/Lib/fontTools/ttLib/tables/_h_e_a_d.py b/Lib/fontTools/ttLib/tables/_h_e_a_d.py index 4235acf4..42fbb1d4 100644 --- a/Lib/fontTools/ttLib/tables/_h_e_a_d.py +++ b/Lib/fontTools/ttLib/tables/_h_e_a_d.py @@ -4,6 +4,7 @@ from fontTools.misc import sstruct from fontTools.misc.textTools import safeEval, num2binary, binary2num from fontTools.misc.timeTools import timestampFromString, timestampToString, timestampNow from fontTools.misc.timeTools import epoch_diff as mac_epoch_diff # For backward compat +from fontTools.misc.arrayTools import intRect from . import DefaultTable import logging @@ -63,7 +64,7 @@ class table__h_e_a_d(DefaultTable.DefaultTable): # For TT-flavored fonts, xMin, yMin, xMax and yMax are set in table__m_a_x_p.recalc(). if 'CFF ' in ttFont: topDict = ttFont['CFF '].cff.topDictIndex[0] - self.xMin, self.yMin, self.xMax, self.yMax = topDict.FontBBox + self.xMin, self.yMin, self.xMax, self.yMax = intRect(topDict.FontBBox) if ttFont.recalcTimestamp: self.modified = timestampNow() data = sstruct.pack(headFormat, self) diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py index 81ab354e..816f1cd0 100644 --- a/Lib/fontTools/ttLib/tables/otBase.py +++ b/Lib/fontTools/ttLib/tables/otBase.py @@ -104,6 +104,7 @@ class BaseTTXConverter(DefaultTable): tableClass = getattr(otTables, self.tableTag) self.table = tableClass() self.table.fromXML(name, attrs, content, font) + self.table.populateDefaults() class OTTableReader(object): diff --git a/Lib/fontTools/ttLib/tables/otTables.py b/Lib/fontTools/ttLib/tables/otTables.py index af2a7c6c..737e5615 100644 --- a/Lib/fontTools/ttLib/tables/otTables.py +++ b/Lib/fontTools/ttLib/tables/otTables.py @@ -1130,6 +1130,7 @@ class LigatureSubst(FormatSwitchingBaseTable): lig.LigGlyph = attrs["glyph"] components = attrs["components"] lig.Component = components.split(",") if components else [] + lig.CompCount = len(lig.Component) ligs.append(lig) @@ -1495,7 +1496,7 @@ def _buildClasses(): import re from .otData import otData - formatPat = re.compile("([A-Za-z0-9]+)Format(\d+)$") + formatPat = re.compile(r"([A-Za-z0-9]+)Format(\d+)$") namespace = globals() # populate module with classes diff --git a/Lib/fontTools/ufoLib/filenames.py b/Lib/fontTools/ufoLib/filenames.py index 98f53b1f..1c5630f0 100644 --- a/Lib/fontTools/ufoLib/filenames.py +++ b/Lib/fontTools/ufoLib/filenames.py @@ -6,7 +6,7 @@ from __future__ import absolute_import, unicode_literals from fontTools.misc.py23 import basestring, unicode -illegalCharacters = "\" * + / : < > ? [ \ ] | \0".split(" ") +illegalCharacters = r"\" * + / : < > ? [ \ ] | \0".split(" ") illegalCharacters += [chr(i) for i in range(1, 32)] illegalCharacters += [chr(0x7F)] reservedFileNames = "CON PRN AUX CLOCK$ NUL A:-Z: COM1".lower().split(" ") diff --git a/Lib/fontTools/varLib/__init__.py b/Lib/fontTools/varLib/__init__.py index 0543ee37..db567062 100644 --- a/Lib/fontTools/varLib/__init__.py +++ b/Lib/fontTools/varLib/__init__.py @@ -463,46 +463,120 @@ def _merge_TTHinting(font, masterModel, master_ttfs, tolerance=0.5): var = TupleVariation(support, delta) cvar.variations.append(var) +MetricsFields = namedtuple('MetricsFields', + ['tableTag', 'metricsTag', 'sb1', 'sb2', 'advMapping', 'vOrigMapping']) + +hvarFields = MetricsFields(tableTag='HVAR', metricsTag='hmtx', sb1='LsbMap', + sb2='RsbMap', advMapping='AdvWidthMap', vOrigMapping=None) + +vvarFields = MetricsFields(tableTag='VVAR', metricsTag='vmtx', sb1='TsbMap', + sb2='BsbMap', advMapping='AdvHeightMap', vOrigMapping='VOrgMap') + def _add_HVAR(font, masterModel, master_ttfs, axisTags): + _add_VHVAR(font, masterModel, master_ttfs, axisTags, hvarFields) + +def _add_VVAR(font, masterModel, master_ttfs, axisTags): + _add_VHVAR(font, masterModel, master_ttfs, axisTags, vvarFields) - log.info("Generating HVAR") +def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields): + + tableTag = tableFields.tableTag + assert tableTag not in font + log.info("Generating " + tableTag) + VHVAR = newTable(tableTag) + tableClass = getattr(ot, tableTag) + vhvar = VHVAR.table = tableClass() + vhvar.Version = 0x00010000 glyphOrder = font.getGlyphOrder() - hAdvanceDeltasAndSupports = {} - metricses = [m["hmtx"].metrics for m in master_ttfs] + # Build list of source font advance widths for each glyph + metricsTag = tableFields.metricsTag + advMetricses = [m[metricsTag].metrics for m in master_ttfs] + + # Build list of source font vertical origin coords for each glyph + if tableTag == 'VVAR' and 'VORG' in master_ttfs[0]: + vOrigMetricses = [m['VORG'].VOriginRecords for m in master_ttfs] + defaultYOrigs = [m['VORG'].defaultVertOriginY for m in master_ttfs] + vOrigMetricses = list(zip(vOrigMetricses, defaultYOrigs)) + else: + vOrigMetricses = None + + metricsStore, advanceMapping, vOrigMapping = _get_advance_metrics(font, + masterModel, master_ttfs, axisTags, glyphOrder, advMetricses, + vOrigMetricses) + + vhvar.VarStore = metricsStore + if advanceMapping is None: + setattr(vhvar, tableFields.advMapping, None) + else: + setattr(vhvar, tableFields.advMapping, advanceMapping) + if vOrigMapping is not None: + setattr(vhvar, tableFields.vOrigMapping, vOrigMapping) + setattr(vhvar, tableFields.sb1, None) + setattr(vhvar, tableFields.sb2, None) + + font[tableTag] = VHVAR + return + +def _get_advance_metrics(font, masterModel, master_ttfs, + axisTags, glyphOrder, advMetricses, vOrigMetricses=None): + + vhAdvanceDeltasAndSupports = {} + vOrigDeltasAndSupports = {} for glyph in glyphOrder: - hAdvances = [metrics[glyph][0] if glyph in metrics else None for metrics in metricses] - hAdvanceDeltasAndSupports[glyph] = masterModel.getDeltasAndSupports(hAdvances) + vhAdvances = [metrics[glyph][0] if glyph in metrics else None for metrics in advMetricses] + vhAdvanceDeltasAndSupports[glyph] = masterModel.getDeltasAndSupports(vhAdvances) - singleModel = models.allEqual(id(v[1]) for v in hAdvanceDeltasAndSupports.values()) + singleModel = models.allEqual(id(v[1]) for v in vhAdvanceDeltasAndSupports.values()) + + if vOrigMetricses: + singleModel = False + for glyph in glyphOrder: + # We need to supply a vOrigs tuple with non-None default values + # for each glyph. vOrigMetricses contains values only for those + # glyphs which have a non-default vOrig. + vOrigs = [metrics[glyph] if glyph in metrics else defaultVOrig + for metrics, defaultVOrig in vOrigMetricses] + vOrigDeltasAndSupports[glyph] = masterModel.getDeltasAndSupports(vOrigs) directStore = None if singleModel: # Build direct mapping - - supports = next(iter(hAdvanceDeltasAndSupports.values()))[1][1:] + supports = next(iter(vhAdvanceDeltasAndSupports.values()))[1][1:] varTupleList = builder.buildVarRegionList(supports, axisTags) varTupleIndexes = list(range(len(supports))) varData = builder.buildVarData(varTupleIndexes, [], optimize=False) for glyphName in glyphOrder: - varData.addItem(hAdvanceDeltasAndSupports[glyphName][0]) + varData.addItem(vhAdvanceDeltasAndSupports[glyphName][0]) varData.optimize() directStore = builder.buildVarStore(varTupleList, [varData]) # Build optimized indirect mapping storeBuilder = varStore.OnlineVarStoreBuilder(axisTags) - mapping = {} + advMapping = {} for glyphName in glyphOrder: - deltas,supports = hAdvanceDeltasAndSupports[glyphName] + deltas, supports = vhAdvanceDeltasAndSupports[glyphName] storeBuilder.setSupports(supports) - mapping[glyphName] = storeBuilder.storeDeltas(deltas) + advMapping[glyphName] = storeBuilder.storeDeltas(deltas) + + if vOrigMetricses: + vOrigMap = {} + for glyphName in glyphOrder: + deltas, supports = vOrigDeltasAndSupports[glyphName] + storeBuilder.setSupports(supports) + vOrigMap[glyphName] = storeBuilder.storeDeltas(deltas) + indirectStore = storeBuilder.finish() mapping2 = indirectStore.optimize() - mapping = [mapping2[mapping[g]] for g in glyphOrder] - advanceMapping = builder.buildVarIdxMap(mapping, glyphOrder) + advMapping = [mapping2[advMapping[g]] for g in glyphOrder] + advanceMapping = builder.buildVarIdxMap(advMapping, glyphOrder) + + if vOrigMetricses: + vOrigMap = [mapping2[vOrigMap[g]] for g in glyphOrder] - use_direct = False + useDirect = False + vOrigMapping = None if directStore: # Compile both, see which is more compact @@ -515,20 +589,17 @@ def _add_HVAR(font, masterModel, master_ttfs, axisTags): advanceMapping.compile(writer, font) indirectSize = len(writer.getAllData()) - use_direct = directSize < indirectSize - - # Done; put it all together. - assert "HVAR" not in font - HVAR = font["HVAR"] = newTable('HVAR') - hvar = HVAR.table = ot.HVAR() - hvar.Version = 0x00010000 - hvar.LsbMap = hvar.RsbMap = None - if use_direct: - hvar.VarStore = directStore - hvar.AdvWidthMap = None + useDirect = directSize < indirectSize + + if useDirect: + metricsStore = directStore + advanceMapping = None else: - hvar.VarStore = indirectStore - hvar.AdvWidthMap = advanceMapping + metricsStore = indirectStore + if vOrigMetricses: + vOrigMapping = builder.buildVarIdxMap(vOrigMap, glyphOrder) + + return metricsStore, advanceMapping, vOrigMapping def _add_MVAR(font, masterModel, master_ttfs, axisTags): @@ -688,12 +759,11 @@ _DesignSpaceData = namedtuple( def _add_CFF2(varFont, model, master_fonts): - from .cff import (convertCFFtoCFF2, addCFFVarStore, merge_region_fonts) + from .cff import (convertCFFtoCFF2, merge_region_fonts) glyphOrder = varFont.getGlyphOrder() convertCFFtoCFF2(varFont) ordered_fonts_list = model.reorderMasters(master_fonts, model.reverseMapping) # re-ordering the master list simplifies building the CFF2 data item lists. - addCFFVarStore(varFont, model) # Add VarStore to the CFF2 font. merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder) @@ -840,6 +910,8 @@ def build(designspace, master_finder=lambda s:s, exclude=[], optimize=True): _add_MVAR(vf, model, master_fonts, axisTags) if 'HVAR' not in exclude: _add_HVAR(vf, model, master_fonts, axisTags) + if 'VVAR' not in exclude and 'vmtx' in vf: + _add_VVAR(vf, model, master_fonts, axisTags) if 'GDEF' not in exclude or 'GPOS' not in exclude: _merge_OTL(vf, model, master_fonts, axisTags) if 'gvar' not in exclude and 'glyf' in vf: @@ -850,6 +922,13 @@ def build(designspace, master_finder=lambda s:s, exclude=[], optimize=True): _add_GSUB_feature_variations(vf, ds.axes, ds.internal_axis_supports, ds.rules) if 'CFF2' not in exclude and 'CFF ' in vf: _add_CFF2(vf, model, master_fonts) + if "post" in vf: + # set 'post' to format 2 to keep the glyph names dropped from CFF2 + post = vf["post"] + if post.formatType != 2.0: + post.formatType = 2.0 + post.extraNames = [] + post.mapping = {} for tag in exclude: if tag in vf: @@ -859,7 +938,7 @@ def build(designspace, master_finder=lambda s:s, exclude=[], optimize=True): return vf, model, master_ttfs -def _open_font(path, master_finder): +def _open_font(path, master_finder=lambda s: s): # load TTFont masters from given 'path': this can be either a .TTX or an # OpenType binary font; or if neither of these, try use the 'master_finder' # callable to resolve the path to a valid .TTX or OpenType font binary. @@ -893,35 +972,17 @@ def load_masters(designspace, master_finder=lambda s: s): Return list of master TTFont objects in the same order they are listed in the DesignSpaceDocument. """ - master_fonts = [] - for master in designspace.sources: - # 1. If the caller already supplies a TTFont for a source, just take it. - if master.font: - font = master.font - master_fonts.append(font) - else: - # If a SourceDescriptor has a layer name, demand that the compiled TTFont - # be supplied by the caller. This spares us from modifying MasterFinder. - if master.layerName: - raise AttributeError( - "Designspace source '%s' specified a layer name but lacks the " - "required TTFont object in the 'font' attribute." - % (master.name or "<Unknown>") + # If a SourceDescriptor has a layer name, demand that the compiled TTFont + # be supplied by the caller. This spares us from modifying MasterFinder. + if master.layerName and master.font is None: + raise AttributeError( + "Designspace source '%s' specified a layer name but lacks the " + "required TTFont object in the 'font' attribute." + % (master.name or "<Unknown>") ) - else: - if master.path is None: - raise AttributeError( - "Designspace source '%s' has neither 'font' nor 'path' " - "attributes" % (master.name or "<Unknown>") - ) - # 2. A SourceDescriptor's path might point an OpenType binary, a - # TTX file, or another source file (e.g. UFO), in which case we - # resolve the path using 'master_finder' function - master.font = font = _open_font(master.path, master_finder) - master_fonts.append(font) - - return master_fonts + + return designspace.loadSourceFonts(_open_font, master_finder=master_finder) class MasterFinder(object): diff --git a/Lib/fontTools/varLib/builder.py b/Lib/fontTools/varLib/builder.py index e923b800..43fb92a1 100644 --- a/Lib/fontTools/varLib/builder.py +++ b/Lib/fontTools/varLib/builder.py @@ -15,7 +15,6 @@ def buildVarRegion(support, axisTags): self.VarRegionAxis = [] for tag in axisTags: self.VarRegionAxis.append(buildVarRegionAxis(support.get(tag, (0,0,0)))) - self.VarRegionAxisCount = len(self.VarRegionAxis) return self def buildVarRegionList(supports, axisTags): diff --git a/Lib/fontTools/varLib/cff.py b/Lib/fontTools/varLib/cff.py index a000dd48..a8da2145 100644..100755 --- a/Lib/fontTools/varLib/cff.py +++ b/Lib/fontTools/varLib/cff.py @@ -1,7 +1,5 @@ +from collections import namedtuple import os -from fontTools.misc.py23 import BytesIO -from fontTools.misc.psCharStrings import T2CharString, T2OutlineExtractor -from fontTools.pens.t2CharStringPen import T2CharStringPen, t2c_round from fontTools.cffLib import ( maxStackLimit, TopDictIndex, @@ -14,20 +12,21 @@ from fontTools.cffLib import ( FontDict, VarStoreData ) -from fontTools.cffLib.specializer import (commandsToProgram, specializeCommands) +from fontTools.misc.py23 import BytesIO +from fontTools.cffLib.specializer import ( + specializeCommands, commandsToProgram) from fontTools.ttLib import newTable from fontTools import varLib from fontTools.varLib.models import allEqual +from fontTools.misc.psCharStrings import T2CharString, T2OutlineExtractor +from fontTools.pens.t2CharStringPen import T2CharStringPen, t2c_round -def addCFFVarStore(varFont, varModel): - supports = varModel.supports[1:] +def addCFFVarStore(varFont, varModel, varDataList, masterSupports): fvarTable = varFont['fvar'] axisKeys = [axis.axisTag for axis in fvarTable.axes] - varTupleList = varLib.builder.buildVarRegionList(supports, axisKeys) - varTupleIndexes = list(range(len(supports))) - varDeltasCFFV = varLib.builder.buildVarData(varTupleIndexes, None, False) - varStoreCFFV = varLib.builder.buildVarStore(varTupleList, [varDeltasCFFV]) + varTupleList = varLib.builder.buildVarRegionList(masterSupports, axisKeys) + varStoreCFFV = varLib.builder.buildVarStore(varTupleList, varDataList) topDict = varFont['CFF2'].cff.topDictIndex[0] topDict.VarStore = VarStoreData(otVarStore=varStoreCFFV) @@ -143,16 +142,61 @@ pd_blend_fields = ("BlueValues", "OtherBlues", "FamilyBlues", "StemSnapV") -def merge_PrivateDicts(topDict, region_top_dicts, num_masters, var_model): +def get_private(regionFDArrays, fd_index, ri, fd_map): + region_fdArray = regionFDArrays[ri] + region_fd_map = fd_map[fd_index] + if ri in region_fd_map: + region_fdIndex = region_fd_map[ri] + private = region_fdArray[region_fdIndex].Private + else: + private = None + return private + + +def merge_PrivateDicts(top_dicts, vsindex_dict, var_model, fd_map): + """ + I step through the FontDicts in the FDArray of the varfont TopDict. + For each varfont FontDict: + step through each key in FontDict.Private. + For each key, step through each relevant source font Private dict, and + build a list of values to blend. + The 'relevant' source fonts are selected by first getting the right + submodel using model_keys[vsindex]. The indices of the + subModel.locations are mapped to source font list indices by + assuming the latter order is the same as the order of the + var_model.locations. I can then get the index of each subModel + location in the list of var_model.locations. + """ + + topDict = top_dicts[0] + region_top_dicts = top_dicts[1:] if hasattr(region_top_dicts[0], 'FDArray'): regionFDArrays = [fdTopDict.FDArray for fdTopDict in region_top_dicts] else: regionFDArrays = [[fdTopDict] for fdTopDict in region_top_dicts] for fd_index, font_dict in enumerate(topDict.FDArray): private_dict = font_dict.Private - pds = [private_dict] + [ - regionFDArray[fd_index].Private for regionFDArray in regionFDArrays - ] + vsindex = getattr(private_dict, 'vsindex', 0) + # At the moment, no PrivateDict has a vsindex key, but let's support + # how it should work. See comment at end of + # merge_charstrings() - still need to optimize use of vsindex. + sub_model, model_keys = vsindex_dict[vsindex] + master_indices = [] + for loc in sub_model.locations[1:]: + i = var_model.locations.index(loc) - 1 + master_indices.append(i) + pds = [private_dict] + last_pd = private_dict + for ri in master_indices: + pd = get_private(regionFDArrays, fd_index, ri, fd_map) + # If the region font doesn't have this FontDict, just reference + # the last one used. + if pd is None: + pd = last_pd + else: + last_pd = pd + pds.append(pd) + num_masters = len(pds) for key, value in private_dict.rawDict.items(): if key not in pd_blend_fields: continue @@ -192,7 +236,7 @@ def merge_PrivateDicts(topDict, region_top_dicts, num_masters, var_model): if (not any_points_differ) and not allEqual(rel_list): any_points_differ = True prev_val_list = val_list - deltas = var_model.getDeltas(rel_list) + deltas = sub_model.getDeltas(rel_list) # Convert numbers with no decimal part to an int. deltas = [conv_to_int(delta) for delta in deltas] # For PrivateDict BlueValues, the default font @@ -206,61 +250,159 @@ def merge_PrivateDicts(topDict, region_top_dicts, num_masters, var_model): else: values = [pd.rawDict[key] for pd in pds] if not allEqual(values): - dataList = var_model.getDeltas(values) + dataList = sub_model.getDeltas(values) else: dataList = values[0] private_dict.rawDict[key] = dataList +def getfd_map(varFont, fonts_list): + """ Since a subset source font may have fewer FontDicts in their + FDArray than the default font, we have to match up the FontDicts in + the different fonts . We do this with the FDSelect array, and by + assuming that the same glyph will reference matching FontDicts in + each source font. We return a mapping from fdIndex in the default + font to a dictionary which maps each master list index of each + region font to the equivalent fdIndex in the region font.""" + fd_map = {} + default_font = fonts_list[0] + region_fonts = fonts_list[1:] + num_regions = len(region_fonts) + topDict = default_font['CFF '].cff.topDictIndex[0] + if not hasattr(topDict, 'FDSelect'): + fd_map[0] = [0]*num_regions + return fd_map + + gname_mapping = {} + default_fdSelect = topDict.FDSelect + glyphOrder = default_font.getGlyphOrder() + for gid, fdIndex in enumerate(default_fdSelect): + gname_mapping[glyphOrder[gid]] = fdIndex + if fdIndex not in fd_map: + fd_map[fdIndex] = {} + for ri, region_font in enumerate(region_fonts): + region_glyphOrder = region_font.getGlyphOrder() + region_topDict = region_font['CFF '].cff.topDictIndex[0] + if not hasattr(region_topDict, 'FDSelect'): + # All the glyphs share the same FontDict. Pick any glyph. + default_fdIndex = gname_mapping[region_glyphOrder[0]] + fd_map[default_fdIndex][ri] = 0 + else: + region_fdSelect = region_topDict.FDSelect + for gid, fdIndex in enumerate(region_fdSelect): + default_fdIndex = gname_mapping[region_glyphOrder[gid]] + region_map = fd_map[default_fdIndex] + if ri not in region_map: + region_map[ri] = fdIndex + return fd_map + + +CVarData = namedtuple('CVarData', 'varDataList masterSupports vsindex_dict') def merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder): topDict = varFont['CFF2'].cff.topDictIndex[0] - default_charstrings = topDict.CharStrings - region_fonts = ordered_fonts_list[1:] - region_top_dicts = [ - ttFont['CFF '].cff.topDictIndex[0] for ttFont in region_fonts - ] + top_dicts = [topDict] + [ + ttFont['CFF '].cff.topDictIndex[0] + for ttFont in ordered_fonts_list[1:] + ] num_masters = len(model.mapping) - merge_PrivateDicts(topDict, region_top_dicts, num_masters, model) - merge_charstrings(default_charstrings, - glyphOrder, - num_masters, - region_top_dicts, model) - - -def merge_charstrings(default_charstrings, - glyphOrder, - num_masters, - region_top_dicts, - var_model): - for gname in glyphOrder: - default_charstring = default_charstrings[gname] + cvData = merge_charstrings(glyphOrder, num_masters, top_dicts, model) + fd_map = getfd_map(varFont, ordered_fonts_list) + merge_PrivateDicts(top_dicts, cvData.vsindex_dict, model, fd_map) + addCFFVarStore(varFont, model, cvData.varDataList, + cvData.masterSupports) + + +def _get_cs(charstrings, glyphName): + if glyphName not in charstrings: + return None + return charstrings[glyphName] + + +def merge_charstrings(glyphOrder, num_masters, top_dicts, masterModel): + + vsindex_dict = {} + vsindex_by_key = {} + varDataList = [] + masterSupports = [] + default_charstrings = top_dicts[0].CharStrings + for gid, gname in enumerate(glyphOrder): + all_cs = [ + _get_cs(td.CharStrings, gname) + for td in top_dicts] + if len([gs for gs in all_cs if gs is not None]) == 1: + continue + model, model_cs = masterModel.getSubModel(all_cs) + # create the first pass CFF2 charstring, from + # the default charstring. + default_charstring = model_cs[0] var_pen = CFF2CharStringMergePen([], gname, num_masters, 0) - default_charstring.outlineExtractor = CFFToCFF2OutlineExtractor + # We need to override outlineExtractor because these + # charstrings do have widths in the 'program'; we need to drop these + # values rather than post assertion error for them. + default_charstring.outlineExtractor = MergeOutlineExtractor default_charstring.draw(var_pen) - for region_idx, region_td in enumerate(region_top_dicts, start=1): - region_charstrings = region_td.CharStrings - region_charstring = region_charstrings[gname] + + # Add the coordinates from all the other regions to the + # blend lists in the CFF2 charstring. + region_cs = model_cs[1:] + for region_idx, region_charstring in enumerate(region_cs, start=1): var_pen.restart(region_idx) + region_charstring.outlineExtractor = MergeOutlineExtractor region_charstring.draw(var_pen) - new_charstring = var_pen.getCharString( + + # Collapse each coordinate list to a blend operator and its args. + new_cs = var_pen.getCharString( private=default_charstring.private, globalSubrs=default_charstring.globalSubrs, - var_model=var_model, optimize=True) - default_charstrings[gname] = new_charstring + var_model=model, optimize=True) + default_charstrings[gname] = new_cs + + if (not var_pen.seen_moveto) or ('blend' not in new_cs.program): + # If this is not a marking glyph, or if there are no blend + # arguments, then we can use vsindex 0. No need to + # check if we need a new vsindex. + continue + + # If the charstring required a new model, create + # a VarData table to go with, and set vsindex. + try: + key = tuple(v is not None for v in all_cs) + vsindex = vsindex_by_key[key] + except KeyError: + varTupleIndexes = [] + for support in model.supports[1:]: + if support not in masterSupports: + masterSupports.append(support) + varTupleIndexes.append(masterSupports.index(support)) + var_data = varLib.builder.buildVarData(varTupleIndexes, None, False) + vsindex = len(vsindex_dict) + vsindex_by_key[key] = vsindex + vsindex_dict[vsindex] = (model, [key]) + varDataList.append(var_data) + # We do not need to check for an existing new_cs.private.vsindex, + # as we know it doesn't exist yet. + if vsindex != 0: + new_cs.program[:0] = [vsindex, 'vsindex'] + cvData = CVarData(varDataList=varDataList, masterSupports=masterSupports, + vsindex_dict=vsindex_dict) + # XXX To do: optimize use of vsindex between the PrivateDicts and + # charstrings + return cvData class MergeTypeError(TypeError): def __init__(self, point_type, pt_index, m_index, default_type, glyphName): - self.error_msg = [ - "In glyph '{gname}' " - "'{point_type}' at point index {pt_index} in master " - "index {m_index} differs from the default font point " - "type '{default_type}'" - "".format(gname=glyphName, - point_type=point_type, pt_index=pt_index, - m_index=m_index, default_type=default_type) - ][0] - super(MergeTypeError, self).__init__(self.error_msg) + self.error_msg = [ + "In glyph '{gname}' " + "'{point_type}' at point index {pt_index} in master " + "index {m_index} differs from the default font point " + "type '{default_type}'" + "".format( + gname=glyphName, + point_type=point_type, pt_index=pt_index, + m_index=m_index, default_type=default_type) + ][0] + super(MergeTypeError, self).__init__(self.error_msg) def makeRoundNumberFunc(tolerance): @@ -274,10 +416,9 @@ def makeRoundNumberFunc(tolerance): class CFFToCFF2OutlineExtractor(T2OutlineExtractor): - """ This class is used to remove the initial width - from the CFF charstring without adding the width - to self.nominalWidthX, which is None. - """ + """ This class is used to remove the initial width from the CFF + charstring without trying to add the width to self.nominalWidthX, + which is None. """ def popallWidth(self, evenOdd=0): args = self.popall() if not self.gotWidth: @@ -288,60 +429,127 @@ class CFFToCFF2OutlineExtractor(T2OutlineExtractor): return args +class MergeOutlineExtractor(CFFToCFF2OutlineExtractor): + """ Used to extract the charstring commands - including hints - from a + CFF charstring in order to merge it as another set of region data + into a CFF2 variable font charstring.""" + + def __init__(self, pen, localSubrs, globalSubrs, + nominalWidthX, defaultWidthX, private=None): + super(CFFToCFF2OutlineExtractor, self).__init__(pen, localSubrs, + globalSubrs, nominalWidthX, defaultWidthX, private) + + def countHints(self): + args = self.popallWidth() + self.hintCount = self.hintCount + len(args) // 2 + return args + + def _hint_op(self, type, args): + self.pen.add_hint(type, args) + + def op_hstem(self, index): + args = self.countHints() + self._hint_op('hstem', args) + + def op_vstem(self, index): + args = self.countHints() + self._hint_op('vstem', args) + + def op_hstemhm(self, index): + args = self.countHints() + self._hint_op('hstemhm', args) + + def op_vstemhm(self, index): + args = self.countHints() + self._hint_op('vstemhm', args) + + def _get_hintmask(self, index): + if not self.hintMaskBytes: + args = self.countHints() + if args: + self._hint_op('vstemhm', args) + self.hintMaskBytes = (self.hintCount + 7) // 8 + hintMaskBytes, index = self.callingStack[-1].getBytes(index, + self.hintMaskBytes) + return index, hintMaskBytes + + def op_hintmask(self, index): + index, hintMaskBytes = self._get_hintmask(index) + self.pen.add_hintmask('hintmask', [hintMaskBytes]) + return hintMaskBytes, index + + def op_cntrmask(self, index): + index, hintMaskBytes = self._get_hintmask(index) + self.pen.add_hintmask('cntrmask', [hintMaskBytes]) + return hintMaskBytes, index + + class CFF2CharStringMergePen(T2CharStringPen): """Pen to merge Type 2 CharStrings. """ - def __init__(self, default_commands, - glyphName, num_masters, master_idx, roundTolerance=0.5): + def __init__( + self, default_commands, glyphName, num_masters, master_idx, + roundTolerance=0.5): super( CFF2CharStringMergePen, - self).__init__(width=None, - glyphSet=None, CFF2=True, - roundTolerance=roundTolerance) + self).__init__( + width=None, + glyphSet=None, CFF2=True, + roundTolerance=roundTolerance) self.pt_index = 0 self._commands = default_commands self.m_index = master_idx self.num_masters = num_masters self.prev_move_idx = 0 + self.seen_moveto = False self.glyphName = glyphName self.roundNumber = makeRoundNumberFunc(roundTolerance) - def _p(self, pt): - """ Unlike T2CharstringPen, this class stores absolute values. - This is to allow the logic in check_and_fix_closepath() to work, - where the current or previous absolute point has to be compared to - the path start-point. - """ - self._p0 = pt - return list(self._p0) - def add_point(self, point_type, pt_coords): if self.m_index == 0: self._commands.append([point_type, [pt_coords]]) else: cmd = self._commands[self.pt_index] if cmd[0] != point_type: - # Fix some issues that show up in some - # CFF workflows, even when fonts are - # topologically merge compatible. - success, pt_coords = self.check_and_fix_flat_curve( - cmd, point_type, pt_coords) - if not success: - success = self.check_and_fix_closepath( - cmd, point_type, pt_coords) - if success: - # We may have incremented self.pt_index - cmd = self._commands[self.pt_index] - if cmd[0] != point_type: - success = False - if not success: - raise MergeTypeError(point_type, - self.pt_index, len(cmd[1]), - cmd[0], self.glyphName) + raise MergeTypeError( + point_type, + self.pt_index, len(cmd[1]), + cmd[0], self.glyphName) cmd[1].append(pt_coords) self.pt_index += 1 + def add_hint(self, hint_type, args): + if self.m_index == 0: + self._commands.append([hint_type, [args]]) + else: + cmd = self._commands[self.pt_index] + if cmd[0] != hint_type: + raise MergeTypeError(hint_type, self.pt_index, len(cmd[1]), + cmd[0], self.glyphName) + cmd[1].append(args) + self.pt_index += 1 + + def add_hintmask(self, hint_type, abs_args): + # For hintmask, fonttools.cffLib.specializer.py expects + # each of these to be represented by two sequential commands: + # first holding only the operator name, with an empty arg list, + # second with an empty string as the op name, and the mask arg list. + if self.m_index == 0: + self._commands.append([hint_type, []]) + self._commands.append(["", [abs_args]]) + else: + cmd = self._commands[self.pt_index] + if cmd[0] != hint_type: + raise MergeTypeError(hint_type, self.pt_index, len(cmd[1]), + cmd[0], self.glyphName) + self.pt_index += 1 + cmd = self._commands[self.pt_index] + cmd[1].append(abs_args) + self.pt_index += 1 + def _moveTo(self, pt): + if not self.seen_moveto: + self.seen_moveto = True pt_coords = self._p(pt) self.add_point('rmoveto', pt_coords) # I set prev_move_idx here because add_point() @@ -371,7 +579,7 @@ class CFF2CharStringMergePen(T2CharStringPen): def getCommands(self): return self._commands - def reorder_blend_args(self, commands): + def reorder_blend_args(self, commands, get_delta_func, round_func): """ We first re-order the master coordinate values. For a moveto to lineto, the args are now arranged as: @@ -380,9 +588,13 @@ class CFF2CharStringMergePen(T2CharStringPen): [ [master_0 x, master_1 x, master_2 x], [master_0 y, master_1 y, master_2 y] ] - We also make the value relative. If the master values are all the same, we collapse the list to as single value instead of a list. + + We then convert this to: + [ [master_0 x] + [x delta tuple] + [numBlends=1] + [master_0 y] + [y delta tuple] + [numBlends=1] + ] """ for cmd in commands: # arg[i] is the set of arguments for this operator from master i. @@ -390,113 +602,46 @@ class CFF2CharStringMergePen(T2CharStringPen): m_args = zip(*args) # m_args[n] is now all num_master args for the i'th argument # for this operation. - cmd[1] = m_args - - # Now convert from absolute to relative - x0 = [0]*self.num_masters - y0 = [0]*self.num_masters - for cmd in self._commands: - is_x = True - coords = cmd[1] - rel_coords = [] - for coord in coords: - prev_coord = x0 if is_x else y0 - rel_coord = [pt[0] - pt[1] for pt in zip(coord, prev_coord)] - - if allEqual(rel_coord): - rel_coord = rel_coord[0] - rel_coords.append(rel_coord) - if is_x: - x0 = coord - else: - y0 = coord - is_x = not is_x - cmd[1] = rel_coords - return commands - - @staticmethod - def mergeCommandsToProgram(commands, var_model, round_func): - """ - Takes a commands list as returned by programToCommands() and - converts it back to a T2CharString or CFF2Charstring program list. I - need to use this rather than specialize.commandsToProgram, as the - commands produced by CFF2CharStringMergePen initially contains a - list of coordinate values, one for each master, wherever a single - coordinate value is expected by the regular logic. The problem with - doing using the specialize.py functions is that a commands list is - expected to be a op name with its associated argument list. For the - commands list here, some of the arguments may need to be converted - to a new argument list and opcode. - This version will convert each list of master arguments to a blend - op and its arguments, and will also combine successive blend ops up - to the stack limit. - """ - program = [] - for op, args in commands: - num_args = len(args) - # some of the args may be blend lists, and some may be - # single coordinate values. - i = 0 - stack_use = 0 - while i < num_args: - arg = args[i] - if not isinstance(arg, list): - program.append(arg) - i += 1 - stack_use += 1 - else: - prev_stack_use = stack_use - """ The arg is a tuple of blend values. - These are each (master 0,master 1..master n) - Combine as many successive tuples as we can, - up to the max stack limit. - """ - num_masters = len(arg) - blendlist = [arg] - i += 1 - stack_use += 1 + num_masters # 1 for the num_blends arg - while (i < num_args) and isinstance(args[i], list): - blendlist.append(args[i]) - i += 1 - stack_use += num_masters - if stack_use + num_masters > maxStackLimit: - # if we are here, max stack is is the CFF2 max stack. - break - num_blends = len(blendlist) - # append the 'num_blends' default font values - for arg in blendlist: - if round_func: - arg[0] = round_func(arg[0]) - program.append(arg[0]) - for arg in blendlist: - # for each coordinate tuple, append the region deltas - if len(arg) != 3: - print(arg) - import pdb - pdb.set_trace() - deltas = var_model.getDeltas(arg) + cmd[1] = list(m_args) + lastOp = None + for cmd in commands: + op = cmd[0] + # masks are represented by two cmd's: first has only op names, + # second has only args. + if lastOp in ['hintmask', 'cntrmask']: + coord = list(cmd[1]) + assert allEqual(coord), ( + "hintmask values cannot differ between source fonts.") + cmd[1] = [coord[0][0]] + else: + coords = cmd[1] + new_coords = [] + for coord in coords: + if allEqual(coord): + new_coords.append(coord[0]) + else: + # convert to deltas + deltas = get_delta_func(coord)[1:] if round_func: deltas = [round_func(delta) for delta in deltas] - # First item in 'deltas' is the default master value; - # for CFF2 data, that has already been written. - program.extend(deltas[1:]) - program.append(num_blends) - program.append('blend') - stack_use = prev_stack_use + num_blends - if op: - program.append(op) - return program - - - def getCharString(self, private=None, globalSubrs=None, - var_model=None, optimize=True): + coord = [coord[0]] + deltas + new_coords.append(coord) + cmd[1] = new_coords + lastOp = op + return commands + + def getCharString( + self, private=None, globalSubrs=None, + var_model=None, optimize=True): commands = self._commands - commands = self.reorder_blend_args(commands) + commands = self.reorder_blend_args(commands, var_model.getDeltas, + self.roundNumber) if optimize: - commands = specializeCommands(commands, generalizeFirst=False, - maxstack=maxStackLimit) - program = self.mergeCommandsToProgram(commands, var_model=var_model, - round_func=self.roundNumber) - charString = T2CharString(program=program, private=private, - globalSubrs=globalSubrs) + commands = specializeCommands( + commands, generalizeFirst=False, + maxstack=maxStackLimit) + program = commandsToProgram(commands) + charString = T2CharString( + program=program, private=private, + globalSubrs=globalSubrs) return charString diff --git a/Lib/fontTools/varLib/mutator.py b/Lib/fontTools/varLib/mutator.py index de612365..04ab3577 100644 --- a/Lib/fontTools/varLib/mutator.py +++ b/Lib/fontTools/varLib/mutator.py @@ -65,24 +65,29 @@ def interpolate_cff2_charstrings(topDict, interpolateFromDeltas, glyphOrder): charstrings = topDict.CharStrings for gname in glyphOrder: # Interpolate charstring + # e.g replace blend op args with regular args, + # and use and discard vsindex op. charstring = charstrings[gname] - pd = charstring.private - vsindex = pd.vsindex if (hasattr(pd, 'vsindex')) else 0 - num_regions = pd.getNumRegions(vsindex) - numMasters = num_regions + 1 new_program = [] + vsindex = 0 last_i = 0 for i, token in enumerate(charstring.program): - if token == 'blend': + if token == 'vsindex': + vsindex = charstring.program[i - 1] + if last_i != 0: + new_program.extend(charstring.program[last_i:i - 1]) + last_i = i + 1 + elif token == 'blend': + num_regions = charstring.getNumRegions(vsindex) + numMasters = 1 + num_regions num_args = charstring.program[i - 1] - """ The stack is now: - ..args for following operations - num_args values from the default font - num_args tuples, each with numMasters-1 delta values - num_blend_args - 'blend' - """ - argi = i - (num_args*numMasters + 1) + # The program list starting at program[i] is now: + # ..args for following operations + # num_args values from the default font + # num_args tuples, each with numMasters-1 delta values + # num_blend_args + # 'blend' + argi = i - (num_args * numMasters + 1) end_args = tuplei = argi + num_args while argi < end_args: next_ti = tuplei + num_regions diff --git a/Lib/fontTools/varLib/varStore.py b/Lib/fontTools/varLib/varStore.py index 66d0c95a..f8ce8199 100644 --- a/Lib/fontTools/varLib/varStore.py +++ b/Lib/fontTools/varLib/varStore.py @@ -187,8 +187,10 @@ class VarStoreInstancer(object): # # Optimizations # +# retainFirstMap - If true, major 0 mappings are retained. Deltas for unused indices are zeroed +# advIdxes - Set of major 0 indices for advance deltas to be listed first. Other major 0 indices follow. -def VarStore_subset_varidxes(self, varIdxes, optimize=True): +def VarStore_subset_varidxes(self, varIdxes, optimize=True, retainFirstMap=False, advIdxes=set()): # Sort out used varIdxes by major/minor. used = {} @@ -217,10 +219,19 @@ def VarStore_subset_varidxes(self, varIdxes, optimize=True): items = data.Item newItems = [] - for minor in sorted(usedMinors): - newMinor = len(newItems) - newItems.append(items[minor]) - varDataMap[(major<<16)+minor] = (newMajor<<16)+newMinor + if major == 0 and retainFirstMap: + for minor in range(len(items)): + newItems.append(items[minor] if minor in usedMinors else [0] * len(items[minor])) + varDataMap[minor] = minor + else: + if major == 0: + minors = sorted(advIdxes) + sorted(usedMinors - advIdxes) + else: + minors = sorted(usedMinors) + for minor in minors: + newMinor = len(newItems) + newItems.append(items[minor]) + varDataMap[(major<<16)+minor] = (newMajor<<16)+newMinor data.Item = newItems data.ItemCount = len(data.Item) diff --git a/Lib/fontTools/voltLib/lexer.py b/Lib/fontTools/voltLib/lexer.py index 271fe3b0..53102b99 100644 --- a/Lib/fontTools/voltLib/lexer.py +++ b/Lib/fontTools/voltLib/lexer.py @@ -39,10 +39,13 @@ class Lexer(object): if token_type not in {Lexer.NEWLINE}: return (token_type, token, location) + def location_(self): + column = self.pos_ - self.line_start_ + 1 + return (self.filename_ or "<volt>", self.line_, column) + def next_(self): self.scan_over_(Lexer.CHAR_WHITESPACE_) - column = self.pos_ - self.line_start_ + 1 - location = (self.filename_, self.line_, column) + location = self.location_() start = self.pos_ text = self.text_ limit = len(text) diff --git a/Lib/fontTools/voltLib/parser.py b/Lib/fontTools/voltLib/parser.py index 4fe10a0e..df035aa6 100644 --- a/Lib/fontTools/voltLib/parser.py +++ b/Lib/fontTools/voltLib/parser.py @@ -32,10 +32,19 @@ class Parser(object): self.lookups_ = SymbolTable() self.next_token_type_, self.next_token_ = (None, None) self.next_token_location_ = None - with open(path, "r") as f: - self.lexer_ = Lexer(f.read(), path) + self.make_lexer_(path) self.advance_lexer_() + def make_lexer_(self, file_or_path): + if hasattr(file_or_path, "read"): + filename = getattr(file_or_path, "name", None) + data = file_or_path.read() + else: + filename = file_or_path + with open(file_or_path, "r") as f: + data = f.read() + self.lexer_ = Lexer(data, filename) + def parse(self): statements = self.doc_.statements while self.next_token_type_ is not None: diff --git a/Lib/fonttools.egg-info/PKG-INFO b/Lib/fonttools.egg-info/PKG-INFO index d57498f3..d64332fc 100644 --- a/Lib/fonttools.egg-info/PKG-INFO +++ b/Lib/fonttools.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fonttools -Version: 3.39.0 +Version: 3.41.2 Summary: Tools to manipulate font files Home-page: http://github.com/fonttools/fonttools Author: Just van Rossum @@ -373,15 +373,15 @@ Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |Py Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland, Jelle Bosma, Sascha Brawer, Tom Byrer, Frédéric Coiffier, Vincent - Connare, Dave Crossland, Simon Daniels, Behdad Esfahbod, Behnam - Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis Haralambous, - Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo - Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca, - Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura, - Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret Rieger, Read - Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, Georg - Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, Paul - Wise. + Connare, Dave Crossland, Simon Daniels, Peter Dekkers, Behdad Esfahbod, + Behnam Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis + Haralambous, Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, + Denis Moyogo Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, + Antoine Leca, Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, + Masaya Nakamura, Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret + Rieger, Read Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, + Georg Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, + Paul Wise. Copyrights ~~~~~~~~~~ @@ -415,6 +415,64 @@ Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |Py Changelog ~~~~~~~~~ + 3.41.2 (released 2019-05-13) + ---------------------------- + + - [cffLib] Fixed issue when importing a ``CFF2`` variable font from XML, whereby + the VarStore state was not propagated to PrivateDict (#1598). + - [varLib] Don't drop ``post`` glyph names when building CFF2 variable font (#1609). + + + 3.41.1 (released 2019-05-13) + ---------------------------- + + - [designspaceLib] Added ``loadSourceFonts`` method to load source fonts using + custom opener function (#1606). + - [head] Round font bounding box coordinates to integers to fix compile error + if CFF font has float coordinates (#1604, #1605). + - [feaLib] Don't write ``None`` in ``ast.ValueRecord.asFea()`` (#1599). + - [subset] Fixed issue ``AssertionError`` when using ``--desubroutinize`` option + (#1590, #1594). + - [graphite] Fixed bug in ``Silf`` table's ``decompile`` method unmasked by + previous typo fix (#1597). Decode languange code as UTF-8 in ``Sill`` table's + ``decompile`` method (#1600). + + 3.41.0 (released 2019-04-29) + ---------------------------- + + - [varLib/cffLib] Added support for building ``CFF2`` variable font from sparse + masters, or masters with more than one model (multiple ``VarStore.VarData``). + In ``cffLib.specializer``, added support for ``CFF2`` CharStrings with + ``blend`` operators (#1547, #1591). + - [subset] Fixed subsetting ``HVAR`` and ``VVAR`` with ``--retain-gids`` option, + and when advances mapping is null while sidebearings mappings are non-null + (#1587, #1588). + - Added ``otlLib.maxContextCalc`` module to compute ``OS/2.usMaxContext`` value. + Calculate it automatically when compiling features with feaLib. Added option + ``--recalc-max-context`` to ``subset`` module (#1582). + - [otBase/otTables] Fixed ``AttributeError`` on missing OT table fields after + importing font from TTX (#1584). + - [graphite] Fixed typo ``Silf`` table's ``decompile`` method (#1586). + - [otlLib] Better compress ``GPOS`` SinglePos (LookupType 1) subtables (#1539). + + 3.40.0 (released 2019-04-08) + ---------------------------- + + - [subset] Fixed error while subsetting ``VVAR`` with ``--retain-gids`` + option (#1552). + - [designspaceLib] Use up-to-date default location in ``findDefault`` method + (#1554). + - [voltLib] Allow passing file-like object to Parser. + - [arrayTools/glyf] ``calcIntBounds`` (used to compute bounding boxes of glyf + table's glyphs) now uses ``otRound`` instead of ``round3`` (#1566). + - [svgLib] Added support for converting more SVG shapes to path ``d`` strings + (ellipse, line, polyline), as well as support for ``transform`` attributes. + Only ``matrix`` transformations are currently supported (#1564, #1564). + - [varLib] Added support for building ``VVAR`` table from ``vmtx`` and ``VORG`` + tables (#1551). + - [fontBuilder] Enable making CFF2 fonts with ``post`` table format 2 (#1557). + - Fixed ``DeprecationWarning`` on invalid escape sequences (#1562). + 3.39.0 (released 2019-03-19) ---------------------------- @@ -1684,13 +1742,13 @@ Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Text Processing :: Fonts Classifier: Topic :: Multimedia :: Graphics Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion -Provides-Extra: symfont -Provides-Extra: type1 Provides-Extra: lxml -Provides-Extra: ufo -Provides-Extra: interpolatable Provides-Extra: all Provides-Extra: woff -Provides-Extra: plot Provides-Extra: unicode +Provides-Extra: interpolatable +Provides-Extra: plot +Provides-Extra: type1 +Provides-Extra: ufo +Provides-Extra: symfont Provides-Extra: graphite diff --git a/Lib/fonttools.egg-info/SOURCES.txt b/Lib/fonttools.egg-info/SOURCES.txt index 3bb752fa..4ff321a1 100644 --- a/Lib/fonttools.egg-info/SOURCES.txt +++ b/Lib/fonttools.egg-info/SOURCES.txt @@ -137,6 +137,7 @@ Lib/fontTools/mtiLib/__init__.py Lib/fontTools/mtiLib/__main__.py Lib/fontTools/otlLib/__init__.py Lib/fontTools/otlLib/builder.py +Lib/fontTools/otlLib/maxContextCalc.py Lib/fontTools/pens/__init__.py Lib/fontTools/pens/areaPen.py Lib/fontTools/pens/basePen.py @@ -336,7 +337,8 @@ Tests/afmLib/afmLib_test.py Tests/afmLib/data/TestAFM.afm Tests/cffLib/cffLib_test.py Tests/cffLib/specializer_test.py -Tests/cffLib/data/TestOTF.otf +Tests/cffLib/data/TestOTF.ttx +Tests/cffLib/data/TestSparseCFF2VF.ttx Tests/designspaceLib/designspace_test.py Tests/designspaceLib/data/test.designspace Tests/encodings/codecs_test.py @@ -630,6 +632,11 @@ Tests/mtiLib/data/mti/scripttable.ttx.GPOS Tests/mtiLib/data/mti/scripttable.ttx.GSUB Tests/mtiLib/data/mti/scripttable.txt Tests/otlLib/builder_test.py +Tests/otlLib/maxContextCalc_test.py +Tests/otlLib/data/gpos_91.ttx +Tests/otlLib/data/gsub_51.ttx +Tests/otlLib/data/gsub_52.ttx +Tests/otlLib/data/gsub_71.ttx Tests/pens/areaPen_test.py Tests/pens/basePen_test.py Tests/pens/boundsPen_test.py @@ -651,6 +658,7 @@ Tests/subset/data/TestBSLN-3.ttx Tests/subset/data/TestCID-Regular.ttx Tests/subset/data/TestCLR-Regular.ttx Tests/subset/data/TestGVAR.ttx +Tests/subset/data/TestHVVAR.ttx Tests/subset/data/TestLCAR-0.ttx Tests/subset/data/TestLCAR-1.ttx Tests/subset/data/TestMATH-Regular.ttx @@ -660,6 +668,8 @@ Tests/subset/data/TestOTF-Regular.ttx Tests/subset/data/TestPROP.ttx Tests/subset/data/TestTTF-Regular.ttx Tests/subset/data/TestTTF-Regular_non_BMP_char.ttx +Tests/subset/data/expect_HVVAR.ttx +Tests/subset/data/expect_HVVAR_retain_gids.ttx Tests/subset/data/expect_ankr.ttx Tests/subset/data/expect_bsln_0.ttx Tests/subset/data/expect_bsln_1.ttx @@ -684,6 +694,8 @@ Tests/subset/data/expect_opbd_1.ttx Tests/subset/data/expect_prop_0.ttx Tests/subset/data/expect_prop_1.ttx Tests/subset/data/google_color.ttx +Tests/subset/data/test_cntrmask_CFF.desub.ttx +Tests/subset/data/test_cntrmask_CFF.ttx Tests/subset/data/test_hinted_subrs_CFF.desub.ttx Tests/subset/data/test_hinted_subrs_CFF.ttx Tests/svgLib/path/__init__.py @@ -1432,10 +1444,23 @@ Tests/varLib/data/InterpolateLayout2.designspace Tests/varLib/data/InterpolateLayout3.designspace Tests/varLib/data/SparseMasters.designspace Tests/varLib/data/TestCFF2.designspace -Tests/varLib/data/TestCFF2VF.otf -Tests/varLib/data/master_cff2/TestCFF2_Black.otf -Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.otf -Tests/varLib/data/master_cff2/TestCFF2_Regular.otf +Tests/varLib/data/TestSparseCFF2VF.designspace +Tests/varLib/data/TestVVAR.designspace +Tests/varLib/data/master_cff2/TestCFF2_Black.ttx +Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.ttx +Tests/varLib/data/master_cff2/TestCFF2_Regular.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w0.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w1000.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w439.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w440.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w599.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w600.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w669.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w670.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w799.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w800.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w889.00.ttx +Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w890.00.ttx Tests/varLib/data/master_ttx_getvar_ttf/Mutator_Getvar.ttx Tests/varLib/data/master_ttx_interpolatable_otf/TestFamily2-Master0.ttx Tests/varLib/data/master_ttx_interpolatable_otf/TestFamily2-Master1.ttx @@ -1459,6 +1484,7 @@ Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily3-Regular.ttx Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily3-SemiBold.ttx Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Italic15.ttx Tests/varLib/data/master_ttx_interpolatable_ttf/TestFamily4-Regular.ttx +Tests/varLib/data/master_ttx_varfont_otf/TestCFF2VF.ttx Tests/varLib/data/master_ttx_varfont_ttf/Mutator_IUP.ttx Tests/varLib/data/master_ufo/TestFamily-Master0.ufo/features.fea Tests/varLib/data/master_ufo/TestFamily-Master0.ufo/fontinfo.plist @@ -1721,6 +1747,8 @@ Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/co Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/dieresiscomb.glif Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/n.glif Tests/varLib/data/master_ufo/TestFamily4-Regular.ufo/glyphs.public.background/o.glif +Tests/varLib/data/master_vvar_cff2/TestVVAR.0.ttx +Tests/varLib/data/master_vvar_cff2/TestVVAR.1.ttx Tests/varLib/data/test_results/Build.ttx Tests/varLib/data/test_results/BuildAvarEmptyAxis.ttx Tests/varLib/data/test_results/BuildAvarIdentityMaps.ttx @@ -1757,5 +1785,7 @@ Tests/varLib/data/test_results/Mutator.ttx Tests/varLib/data/test_results/Mutator_Getvar-instance.ttx Tests/varLib/data/test_results/Mutator_IUP-instance.ttx Tests/varLib/data/test_results/SparseMasters.ttx +Tests/varLib/data/test_results/TestSparseCFF2VF.ttx +Tests/varLib/data/test_results/TestVVAR.ttx Tests/voltLib/lexer_test.py Tests/voltLib/parser_test.py
\ No newline at end of file @@ -7,12 +7,12 @@ third_party { } url { type: ARCHIVE - value: "https://github.com/fonttools/fonttools/releases/download/3.39.0/fonttools-3.39.0.zip" + value: "https://github.com/fonttools/fonttools/releases/download/3.41.2/fonttools-3.41.2.zip" } - version: "3.39.0" + version: "3.41.2" last_upgrade_date { year: 2019 - month: 3 - day: 19 + month: 5 + day: 13 } } @@ -1,3 +1,61 @@ +3.41.2 (released 2019-05-13) +---------------------------- + +- [cffLib] Fixed issue when importing a ``CFF2`` variable font from XML, whereby + the VarStore state was not propagated to PrivateDict (#1598). +- [varLib] Don't drop ``post`` glyph names when building CFF2 variable font (#1609). + + +3.41.1 (released 2019-05-13) +---------------------------- + +- [designspaceLib] Added ``loadSourceFonts`` method to load source fonts using + custom opener function (#1606). +- [head] Round font bounding box coordinates to integers to fix compile error + if CFF font has float coordinates (#1604, #1605). +- [feaLib] Don't write ``None`` in ``ast.ValueRecord.asFea()`` (#1599). +- [subset] Fixed issue ``AssertionError`` when using ``--desubroutinize`` option + (#1590, #1594). +- [graphite] Fixed bug in ``Silf`` table's ``decompile`` method unmasked by + previous typo fix (#1597). Decode languange code as UTF-8 in ``Sill`` table's + ``decompile`` method (#1600). + +3.41.0 (released 2019-04-29) +---------------------------- + +- [varLib/cffLib] Added support for building ``CFF2`` variable font from sparse + masters, or masters with more than one model (multiple ``VarStore.VarData``). + In ``cffLib.specializer``, added support for ``CFF2`` CharStrings with + ``blend`` operators (#1547, #1591). +- [subset] Fixed subsetting ``HVAR`` and ``VVAR`` with ``--retain-gids`` option, + and when advances mapping is null while sidebearings mappings are non-null + (#1587, #1588). +- Added ``otlLib.maxContextCalc`` module to compute ``OS/2.usMaxContext`` value. + Calculate it automatically when compiling features with feaLib. Added option + ``--recalc-max-context`` to ``subset`` module (#1582). +- [otBase/otTables] Fixed ``AttributeError`` on missing OT table fields after + importing font from TTX (#1584). +- [graphite] Fixed typo ``Silf`` table's ``decompile`` method (#1586). +- [otlLib] Better compress ``GPOS`` SinglePos (LookupType 1) subtables (#1539). + +3.40.0 (released 2019-04-08) +---------------------------- + +- [subset] Fixed error while subsetting ``VVAR`` with ``--retain-gids`` + option (#1552). +- [designspaceLib] Use up-to-date default location in ``findDefault`` method + (#1554). +- [voltLib] Allow passing file-like object to Parser. +- [arrayTools/glyf] ``calcIntBounds`` (used to compute bounding boxes of glyf + table's glyphs) now uses ``otRound`` instead of ``round3`` (#1566). +- [svgLib] Added support for converting more SVG shapes to path ``d`` strings + (ellipse, line, polyline), as well as support for ``transform`` attributes. + Only ``matrix`` transformations are currently supported (#1564, #1564). +- [varLib] Added support for building ``VVAR`` table from ``vmtx`` and ``VORG`` + tables (#1551). +- [fontBuilder] Enable making CFF2 fonts with ``post`` table format 2 (#1557). +- Fixed ``DeprecationWarning`` on invalid escape sequences (#1562). + 3.39.0 (released 2019-03-19) ---------------------------- @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fonttools -Version: 3.39.0 +Version: 3.41.2 Summary: Tools to manipulate font files Home-page: http://github.com/fonttools/fonttools Author: Just van Rossum @@ -373,15 +373,15 @@ Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |Py Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland, Jelle Bosma, Sascha Brawer, Tom Byrer, Frédéric Coiffier, Vincent - Connare, Dave Crossland, Simon Daniels, Behdad Esfahbod, Behnam - Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis Haralambous, - Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo - Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca, - Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura, - Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret Rieger, Read - Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, Georg - Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, Paul - Wise. + Connare, Dave Crossland, Simon Daniels, Peter Dekkers, Behdad Esfahbod, + Behnam Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis + Haralambous, Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, + Denis Moyogo Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, + Antoine Leca, Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, + Masaya Nakamura, Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret + Rieger, Read Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, + Georg Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, + Paul Wise. Copyrights ~~~~~~~~~~ @@ -415,6 +415,64 @@ Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |Py Changelog ~~~~~~~~~ + 3.41.2 (released 2019-05-13) + ---------------------------- + + - [cffLib] Fixed issue when importing a ``CFF2`` variable font from XML, whereby + the VarStore state was not propagated to PrivateDict (#1598). + - [varLib] Don't drop ``post`` glyph names when building CFF2 variable font (#1609). + + + 3.41.1 (released 2019-05-13) + ---------------------------- + + - [designspaceLib] Added ``loadSourceFonts`` method to load source fonts using + custom opener function (#1606). + - [head] Round font bounding box coordinates to integers to fix compile error + if CFF font has float coordinates (#1604, #1605). + - [feaLib] Don't write ``None`` in ``ast.ValueRecord.asFea()`` (#1599). + - [subset] Fixed issue ``AssertionError`` when using ``--desubroutinize`` option + (#1590, #1594). + - [graphite] Fixed bug in ``Silf`` table's ``decompile`` method unmasked by + previous typo fix (#1597). Decode languange code as UTF-8 in ``Sill`` table's + ``decompile`` method (#1600). + + 3.41.0 (released 2019-04-29) + ---------------------------- + + - [varLib/cffLib] Added support for building ``CFF2`` variable font from sparse + masters, or masters with more than one model (multiple ``VarStore.VarData``). + In ``cffLib.specializer``, added support for ``CFF2`` CharStrings with + ``blend`` operators (#1547, #1591). + - [subset] Fixed subsetting ``HVAR`` and ``VVAR`` with ``--retain-gids`` option, + and when advances mapping is null while sidebearings mappings are non-null + (#1587, #1588). + - Added ``otlLib.maxContextCalc`` module to compute ``OS/2.usMaxContext`` value. + Calculate it automatically when compiling features with feaLib. Added option + ``--recalc-max-context`` to ``subset`` module (#1582). + - [otBase/otTables] Fixed ``AttributeError`` on missing OT table fields after + importing font from TTX (#1584). + - [graphite] Fixed typo ``Silf`` table's ``decompile`` method (#1586). + - [otlLib] Better compress ``GPOS`` SinglePos (LookupType 1) subtables (#1539). + + 3.40.0 (released 2019-04-08) + ---------------------------- + + - [subset] Fixed error while subsetting ``VVAR`` with ``--retain-gids`` + option (#1552). + - [designspaceLib] Use up-to-date default location in ``findDefault`` method + (#1554). + - [voltLib] Allow passing file-like object to Parser. + - [arrayTools/glyf] ``calcIntBounds`` (used to compute bounding boxes of glyf + table's glyphs) now uses ``otRound`` instead of ``round3`` (#1566). + - [svgLib] Added support for converting more SVG shapes to path ``d`` strings + (ellipse, line, polyline), as well as support for ``transform`` attributes. + Only ``matrix`` transformations are currently supported (#1564, #1564). + - [varLib] Added support for building ``VVAR`` table from ``vmtx`` and ``VORG`` + tables (#1551). + - [fontBuilder] Enable making CFF2 fonts with ``post`` table format 2 (#1557). + - Fixed ``DeprecationWarning`` on invalid escape sequences (#1562). + 3.39.0 (released 2019-03-19) ---------------------------- @@ -1684,13 +1742,13 @@ Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Text Processing :: Fonts Classifier: Topic :: Multimedia :: Graphics Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion -Provides-Extra: symfont -Provides-Extra: type1 Provides-Extra: lxml -Provides-Extra: ufo -Provides-Extra: interpolatable Provides-Extra: all Provides-Extra: woff -Provides-Extra: plot Provides-Extra: unicode +Provides-Extra: interpolatable +Provides-Extra: plot +Provides-Extra: type1 +Provides-Extra: ufo +Provides-Extra: symfont Provides-Extra: graphite @@ -363,15 +363,15 @@ In alphabetical order: Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland, Jelle Bosma, Sascha Brawer, Tom Byrer, Frédéric Coiffier, Vincent -Connare, Dave Crossland, Simon Daniels, Behdad Esfahbod, Behnam -Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis Haralambous, -Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo -Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca, -Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura, -Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret Rieger, Read -Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, Georg -Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, Paul -Wise. +Connare, Dave Crossland, Simon Daniels, Peter Dekkers, Behdad Esfahbod, +Behnam Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis +Haralambous, Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, +Denis Moyogo Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, +Antoine Leca, Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, +Masaya Nakamura, Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret +Rieger, Read Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, +Georg Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, +Paul Wise. Copyrights ~~~~~~~~~~ diff --git a/Tests/cffLib/cffLib_test.py b/Tests/cffLib/cffLib_test.py index ce73b344..cc28e4e9 100644 --- a/Tests/cffLib/cffLib_test.py +++ b/Tests/cffLib/cffLib_test.py @@ -47,16 +47,19 @@ class CffLibTest(DataFilesHandler): self.assertEqual(topDict.FontBBox, [0, 0, 0, 0]) def test_topDict_set_Encoding(self): - file_name = 'TestOTF.otf' - font_path = self.getpath(file_name) - temp_path = self.temp_font(font_path, file_name) - save_path = temp_path[:-4] + '2.otf' - font = TTFont(temp_path) + ttx_path = self.getpath('TestOTF.ttx') + font = TTFont(recalcBBoxes=False, recalcTimestamp=False) + font.importXML(ttx_path) + topDict = font["CFF "].cff.topDictIndex[0] encoding = [".notdef"] * 256 encoding[0x20] = "space" topDict.Encoding = encoding + + self.temp_dir() + save_path = os.path.join(self.tempdir, 'TestOTF.otf') font.save(save_path) + font2 = TTFont(save_path) topDict2 = font2["CFF "].cff.topDictIndex[0] self.assertEqual(topDict2.Encoding[32], "space") diff --git a/Tests/cffLib/data/TestOTF.otf b/Tests/cffLib/data/TestOTF.otf Binary files differdeleted file mode 100644 index cd0bdf67..00000000 --- a/Tests/cffLib/data/TestOTF.otf +++ /dev/null diff --git a/Tests/cffLib/data/TestOTF.ttx b/Tests/cffLib/data/TestOTF.ttx new file mode 100644 index 00000000..0e0c4d70 --- /dev/null +++ b/Tests/cffLib/data/TestOTF.ttx @@ -0,0 +1,325 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name=".null"/> + <GlyphID id="2" name="CR"/> + <GlyphID id="3" name="space"/> + <GlyphID id="4" name="period"/> + <GlyphID id="5" name="ellipsis"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.0"/> + <checkSumAdjustment value="0x4e5f578f"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Jun 4 14:29:11 2015"/> + <modified value="Sun Mar 26 22:38:12 2017"/> + <xMin value="50"/> + <yMin value="0"/> + <xMax value="668"/> + <yMax value="750"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="9"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="900"/> + <descent value="-300"/> + <lineGap value="0"/> + <advanceWidthMax value="723"/> + <minLeftSideBearing value="50"/> + <minRightSideBearing value="50"/> + <xMaxExtent value="668"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="6"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="6"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="4"/> + <xAvgCharWidth value="392"/> + <usWeightClass value="400"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="700"/> + <ySubscriptYSize value="650"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="140"/> + <ySuperscriptXSize value="700"/> + <ySuperscriptYSize value="650"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="477"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="250"/> + <sFamilyClass value="2050"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="11"/> + <bWeight value="6"/> + <bProportion value="4"/> + <bContrast value="4"/> + <bStrokeVariation value="2"/> + <bArmStyle value="7"/> + <bLetterForm value="8"/> + <bMidline value="1"/> + <bXHeight value="4"/> + </panose> + <ulUnicodeRange1 value="10000000 00000000 00000000 00000001"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="NONE"/> + <fsSelection value="00000000 11000000"/> + <usFirstCharIndex value="0"/> + <usLastCharIndex value="8230"/> + <sTypoAscender value="750"/> + <sTypoDescender value="-250"/> + <sTypoLineGap value="200"/> + <usWinAscent value="900"/> + <usWinDescent value="300"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="500"/> + <sCapHeight value="700"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="0"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Copyright (c) 2015 by FontTools. No rights reserved. + </namerecord> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Test OTF + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + FontTools: Test OTF: 2015 + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Test OTF + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.000 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestOTF-Regular + </namerecord> + <namerecord nameID="7" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Test OTF is not a trademark of FontTools. + </namerecord> + <namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True"> + FontTools + </namerecord> + <namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True"> + FontTools + </namerecord> + <namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True"> + https://github.com/behdad/fonttools + </namerecord> + <namerecord nameID="12" platformID="1" platEncID="0" langID="0x0" unicode="True"> + https://github.com/behdad/fonttools + </namerecord> + <namerecord nameID="14" platformID="1" platEncID="0" langID="0x0" unicode="True"> + https://github.com/behdad/fonttools/blob/master/LICENSE.txt + </namerecord> + <namerecord nameID="18" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Test TTF + </namerecord> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright (c) 2015 by FontTools. No rights reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Test OTF + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + FontTools: Test OTF: 2015 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Test OTF + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.000 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + TestOTF-Regular + </namerecord> + <namerecord nameID="7" platformID="3" platEncID="1" langID="0x409"> + Test OTF is not a trademark of FontTools. + </namerecord> + <namerecord nameID="8" platformID="3" platEncID="1" langID="0x409"> + FontTools + </namerecord> + <namerecord nameID="9" platformID="3" platEncID="1" langID="0x409"> + FontTools + </namerecord> + <namerecord nameID="11" platformID="3" platEncID="1" langID="0x409"> + https://github.com/behdad/fonttools + </namerecord> + <namerecord nameID="12" platformID="3" platEncID="1" langID="0x409"> + https://github.com/behdad/fonttools + </namerecord> + <namerecord nameID="14" platformID="3" platEncID="1" langID="0x409"> + https://github.com/behdad/fonttools/blob/master/LICENSE.txt + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x0" name=".null"/><!-- ???? --> + <map code="0xd" name="CR"/><!-- ???? --> + <map code="0x20" name="space"/><!-- SPACE --> + <map code="0x2e" name="period"/><!-- FULL STOP --> + <map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + <map code="0x0" name=".null"/> + <map code="0xd" name="CR"/> + <map code="0x20" name="space"/> + <map code="0x2e" name="period"/> + <map code="0xc9" name="ellipsis"/> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x0" name=".null"/><!-- ???? --> + <map code="0xd" name="CR"/><!-- ???? --> + <map code="0x20" name="space"/><!-- SPACE --> + <map code="0x2e" name="period"/><!-- FULL STOP --> + <map code="0x2026" name="ellipsis"/><!-- HORIZONTAL ELLIPSIS --> + </cmap_format_4> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="TestOTF-Regular"> + <version value="001.001"/> + <Notice value="Copyright \(c\) 2015 by FontTools. No rights reserved."/> + <FullName value="Test OTF"/> + <FamilyName value="Test OTF"/> + <Weight value="Regular"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="50 0 668 750"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="0"/> + <nominalWidthX value="0"/> + <Subrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + <CharString index="0"> + 131 122 -131 hlineto + return + </CharString> + </Subrs> + </Private> + <CharStrings> + <CharString name=".notdef"> + 500 450 hmoveto + 750 -400 -750 vlineto + 50 50 rmoveto + 650 300 -650 vlineto + endchar + </CharString> + <CharString name=".null"> + 0 endchar + </CharString> + <CharString name="CR"> + 250 endchar + </CharString> + <CharString name="ellipsis"> + 723 55 hmoveto + -107 callsubr + 241 -122 rmoveto + -107 callsubr + 241 -122 rmoveto + -107 callsubr + endchar + </CharString> + <CharString name="period"> + 241 55 hmoveto + -107 callsubr + endchar + </CharString> + <CharString name="space"> + 250 endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <hmtx> + <mtx name=".notdef" width="500" lsb="50"/> + <mtx name=".null" width="0" lsb="0"/> + <mtx name="CR" width="250" lsb="0"/> + <mtx name="ellipsis" width="723" lsb="55"/> + <mtx name="period" width="241" lsb="55"/> + <mtx name="space" width="250" lsb="0"/> + </hmtx> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/cffLib/data/TestSparseCFF2VF.ttx b/Tests/cffLib/data/TestSparseCFF2VF.ttx new file mode 100644 index 00000000..f1ae063b --- /dev/null +++ b/Tests/cffLib/data/TestSparseCFF2VF.ttx @@ -0,0 +1,1980 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="uni0000"/> + <GlyphID id="2" name="exclam"/> + <GlyphID id="3" name="uni610F"/> + <GlyphID id="4" name="uni85A8"/> + <GlyphID id="5" name="uni8E59"/> + <GlyphID id="6" name="uni9A40"/> + <GlyphID id="7" name="uniF9DC"/> + <GlyphID id="8" name="uni50CE"/> + <GlyphID id="9" name="uni6A1A"/> + <GlyphID id="10" name="uni82E8"/> + <GlyphID id="11" name="uni8552"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0x65319c93"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:06:21 2018"/> + <modified value="Tue Mar 19 15:57:18 2019"/> + <xMin value="14"/> + <yMin value="-120"/> + <xMax value="976"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="14"/> + <minRightSideBearing value="24"/> + <xMaxExtent value="976"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="4"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="12"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="977"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000011"/> + <ulUnicodeRange2 value="00101000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="0"/> + <usLastCharIndex value="63964"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="exclam" width="222" lsb="74"/> + <mtx name="uni0000" width="231" lsb="0"/> + <mtx name="uni50CE" width="1000" lsb="14"/> + <mtx name="uni610F" width="1000" lsb="48"/> + <mtx name="uni6A1A" width="1000" lsb="30"/> + <mtx name="uni82E8" width="1000" lsb="35"/> + <mtx name="uni8552" width="1000" lsb="53"/> + <mtx name="uni85A8" width="1000" lsb="52"/> + <mtx name="uni8E59" width="1000" lsb="34"/> + <mtx name="uni9A40" width="1000" lsb="36"/> + <mtx name="uniF9DC" width="1000" lsb="82"/> + </hmtx> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x0" name="uni0000"/><!-- ???? --> + <map code="0x1" name="uni0000"/><!-- ???? --> + <map code="0x2" name="uni0000"/><!-- ???? --> + <map code="0x3" name="uni0000"/><!-- ???? --> + <map code="0x4" name="uni0000"/><!-- ???? --> + <map code="0x5" name="uni0000"/><!-- ???? --> + <map code="0x6" name="uni0000"/><!-- ???? --> + <map code="0x7" name="uni0000"/><!-- ???? --> + <map code="0x8" name="uni0000"/><!-- ???? --> + <map code="0x9" name="uni0000"/><!-- ???? --> + <map code="0xa" name="uni0000"/><!-- ???? --> + <map code="0xb" name="uni0000"/><!-- ???? --> + <map code="0xc" name="uni0000"/><!-- ???? --> + <map code="0xd" name="uni0000"/><!-- ???? --> + <map code="0xe" name="uni0000"/><!-- ???? --> + <map code="0xf" name="uni0000"/><!-- ???? --> + <map code="0x10" name="uni0000"/><!-- ???? --> + <map code="0x11" name="uni0000"/><!-- ???? --> + <map code="0x12" name="uni0000"/><!-- ???? --> + <map code="0x13" name="uni0000"/><!-- ???? --> + <map code="0x14" name="uni0000"/><!-- ???? --> + <map code="0x15" name="uni0000"/><!-- ???? --> + <map code="0x16" name="uni0000"/><!-- ???? --> + <map code="0x17" name="uni0000"/><!-- ???? --> + <map code="0x18" name="uni0000"/><!-- ???? --> + <map code="0x19" name="uni0000"/><!-- ???? --> + <map code="0x1a" name="uni0000"/><!-- ???? --> + <map code="0x1b" name="uni0000"/><!-- ???? --> + <map code="0x1c" name="uni0000"/><!-- ???? --> + <map code="0x1d" name="uni0000"/><!-- ???? --> + <map code="0x1e" name="uni0000"/><!-- ???? --> + <map code="0x1f" name="uni0000"/><!-- ???? --> + <map code="0x20" name="uni0000"/><!-- SPACE --> + <map code="0x21" name="exclam"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="uni0000"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="uni50CE"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="uni610F"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="uni6A1A"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="uni82E8"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="uni8552"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="uni85A8"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="uni8E59"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="uni9A40"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="uniF9DC"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="532" language="0" nGroups="43"> + <map code="0x0" name="uni0000"/><!-- ???? --> + <map code="0x1" name="uni0000"/><!-- ???? --> + <map code="0x2" name="uni0000"/><!-- ???? --> + <map code="0x3" name="uni0000"/><!-- ???? --> + <map code="0x4" name="uni0000"/><!-- ???? --> + <map code="0x5" name="uni0000"/><!-- ???? --> + <map code="0x6" name="uni0000"/><!-- ???? --> + <map code="0x7" name="uni0000"/><!-- ???? --> + <map code="0x8" name="uni0000"/><!-- ???? --> + <map code="0x9" name="uni0000"/><!-- ???? --> + <map code="0xa" name="uni0000"/><!-- ???? --> + <map code="0xb" name="uni0000"/><!-- ???? --> + <map code="0xc" name="uni0000"/><!-- ???? --> + <map code="0xd" name="uni0000"/><!-- ???? --> + <map code="0xe" name="uni0000"/><!-- ???? --> + <map code="0xf" name="uni0000"/><!-- ???? --> + <map code="0x10" name="uni0000"/><!-- ???? --> + <map code="0x11" name="uni0000"/><!-- ???? --> + <map code="0x12" name="uni0000"/><!-- ???? --> + <map code="0x13" name="uni0000"/><!-- ???? --> + <map code="0x14" name="uni0000"/><!-- ???? --> + <map code="0x15" name="uni0000"/><!-- ???? --> + <map code="0x16" name="uni0000"/><!-- ???? --> + <map code="0x17" name="uni0000"/><!-- ???? --> + <map code="0x18" name="uni0000"/><!-- ???? --> + <map code="0x19" name="uni0000"/><!-- ???? --> + <map code="0x1a" name="uni0000"/><!-- ???? --> + <map code="0x1b" name="uni0000"/><!-- ???? --> + <map code="0x1c" name="uni0000"/><!-- ???? --> + <map code="0x1d" name="uni0000"/><!-- ???? --> + <map code="0x1e" name="uni0000"/><!-- ???? --> + <map code="0x1f" name="uni0000"/><!-- ???? --> + <map code="0x20" name="uni0000"/><!-- SPACE --> + <map code="0x21" name="exclam"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="uni0000"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="uni50CE"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="uni610F"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="uni6A1A"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="uni82E8"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="uni8552"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="uni85A8"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="uni8E59"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="uni9A40"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="uniF9DC"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + <cmap_format_14 platformID="0" platEncID="5"> + <map uv="0x9686" uvs="0xfe00" name="uniF9DC"/> + <map uv="0x9686" uvs="0xe0101" name="uniF9DC"/> + </cmap_format_14> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x0" name="uni0000"/><!-- ???? --> + <map code="0x1" name="uni0000"/><!-- ???? --> + <map code="0x2" name="uni0000"/><!-- ???? --> + <map code="0x3" name="uni0000"/><!-- ???? --> + <map code="0x4" name="uni0000"/><!-- ???? --> + <map code="0x5" name="uni0000"/><!-- ???? --> + <map code="0x6" name="uni0000"/><!-- ???? --> + <map code="0x7" name="uni0000"/><!-- ???? --> + <map code="0x8" name="uni0000"/><!-- ???? --> + <map code="0x9" name="uni0000"/><!-- ???? --> + <map code="0xa" name="uni0000"/><!-- ???? --> + <map code="0xb" name="uni0000"/><!-- ???? --> + <map code="0xc" name="uni0000"/><!-- ???? --> + <map code="0xd" name="uni0000"/><!-- ???? --> + <map code="0xe" name="uni0000"/><!-- ???? --> + <map code="0xf" name="uni0000"/><!-- ???? --> + <map code="0x10" name="uni0000"/><!-- ???? --> + <map code="0x11" name="uni0000"/><!-- ???? --> + <map code="0x12" name="uni0000"/><!-- ???? --> + <map code="0x13" name="uni0000"/><!-- ???? --> + <map code="0x14" name="uni0000"/><!-- ???? --> + <map code="0x15" name="uni0000"/><!-- ???? --> + <map code="0x16" name="uni0000"/><!-- ???? --> + <map code="0x17" name="uni0000"/><!-- ???? --> + <map code="0x18" name="uni0000"/><!-- ???? --> + <map code="0x19" name="uni0000"/><!-- ???? --> + <map code="0x1a" name="uni0000"/><!-- ???? --> + <map code="0x1b" name="uni0000"/><!-- ???? --> + <map code="0x1c" name="uni0000"/><!-- ???? --> + <map code="0x1d" name="uni0000"/><!-- ???? --> + <map code="0x1e" name="uni0000"/><!-- ???? --> + <map code="0x1f" name="uni0000"/><!-- ???? --> + <map code="0x20" name="uni0000"/><!-- SPACE --> + <map code="0x21" name="exclam"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="uni0000"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="uni50CE"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="uni610F"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="uni6A1A"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="uni82E8"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="uni8552"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="uni85A8"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="uni8E59"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="uni9A40"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="uniF9DC"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="532" language="0" nGroups="43"> + <map code="0x0" name="uni0000"/><!-- ???? --> + <map code="0x1" name="uni0000"/><!-- ???? --> + <map code="0x2" name="uni0000"/><!-- ???? --> + <map code="0x3" name="uni0000"/><!-- ???? --> + <map code="0x4" name="uni0000"/><!-- ???? --> + <map code="0x5" name="uni0000"/><!-- ???? --> + <map code="0x6" name="uni0000"/><!-- ???? --> + <map code="0x7" name="uni0000"/><!-- ???? --> + <map code="0x8" name="uni0000"/><!-- ???? --> + <map code="0x9" name="uni0000"/><!-- ???? --> + <map code="0xa" name="uni0000"/><!-- ???? --> + <map code="0xb" name="uni0000"/><!-- ???? --> + <map code="0xc" name="uni0000"/><!-- ???? --> + <map code="0xd" name="uni0000"/><!-- ???? --> + <map code="0xe" name="uni0000"/><!-- ???? --> + <map code="0xf" name="uni0000"/><!-- ???? --> + <map code="0x10" name="uni0000"/><!-- ???? --> + <map code="0x11" name="uni0000"/><!-- ???? --> + <map code="0x12" name="uni0000"/><!-- ???? --> + <map code="0x13" name="uni0000"/><!-- ???? --> + <map code="0x14" name="uni0000"/><!-- ???? --> + <map code="0x15" name="uni0000"/><!-- ???? --> + <map code="0x16" name="uni0000"/><!-- ???? --> + <map code="0x17" name="uni0000"/><!-- ???? --> + <map code="0x18" name="uni0000"/><!-- ???? --> + <map code="0x19" name="uni0000"/><!-- ???? --> + <map code="0x1a" name="uni0000"/><!-- ???? --> + <map code="0x1b" name="uni0000"/><!-- ???? --> + <map code="0x1c" name="uni0000"/><!-- ???? --> + <map code="0x1d" name="uni0000"/><!-- ???? --> + <map code="0x1e" name="uni0000"/><!-- ???? --> + <map code="0x1f" name="uni0000"/><!-- ???? --> + <map code="0x20" name="uni0000"/><!-- SPACE --> + <map code="0x21" name="exclam"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="uni0000"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="uni50CE"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="uni610F"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="uni6A1A"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="uni82E8"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="uni8552"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="uni85A8"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="uni8E59"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="uni9A40"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="uniF9DC"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + </cmap> + + <name> + <namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Weight + </namerecord> + <namerecord nameID="257" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w0.00 + </namerecord> + <namerecord nameID="258" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w0.00 + </namerecord> + <namerecord nameID="259" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w239.00 + </namerecord> + <namerecord nameID="260" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w239.00 + </namerecord> + <namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w240.00 + </namerecord> + <namerecord nameID="262" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w240.00 + </namerecord> + <namerecord nameID="263" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w439.00 + </namerecord> + <namerecord nameID="264" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w439.00 + </namerecord> + <namerecord nameID="265" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w440.00 + </namerecord> + <namerecord nameID="266" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w440.00 + </namerecord> + <namerecord nameID="267" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w499.00 + </namerecord> + <namerecord nameID="268" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w499.00 + </namerecord> + <namerecord nameID="269" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w500.00 + </namerecord> + <namerecord nameID="270" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w500.00 + </namerecord> + <namerecord nameID="271" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w599.00 + </namerecord> + <namerecord nameID="272" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w599.00 + </namerecord> + <namerecord nameID="273" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w600.00 + </namerecord> + <namerecord nameID="274" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w600.00 + </namerecord> + <namerecord nameID="275" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w669.00 + </namerecord> + <namerecord nameID="276" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w669.00 + </namerecord> + <namerecord nameID="277" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w670.00 + </namerecord> + <namerecord nameID="278" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w670.00 + </namerecord> + <namerecord nameID="279" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w699.00 + </namerecord> + <namerecord nameID="280" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w699.00 + </namerecord> + <namerecord nameID="281" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w700.00 + </namerecord> + <namerecord nameID="282" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w700.00 + </namerecord> + <namerecord nameID="283" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-799.00 + </namerecord> + <namerecord nameID="284" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-799.00 + </namerecord> + <namerecord nameID="285" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w800.00 + </namerecord> + <namerecord nameID="286" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w800.00 + </namerecord> + <namerecord nameID="287" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w889.00 + </namerecord> + <namerecord nameID="288" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w889.00 + </namerecord> + <namerecord nameID="289" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w890.00 + </namerecord> + <namerecord nameID="290" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w890.00 + </namerecord> + <namerecord nameID="291" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Kanji-w1000.00 + </namerecord> + <namerecord nameID="292" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansJPVFTest-Kanji-w1000.00 + </namerecord> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w0.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w0.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w0.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w0.00 + </namerecord> + <namerecord nameID="256" platformID="3" platEncID="1" langID="0x409"> + Weight + </namerecord> + <namerecord nameID="257" platformID="3" platEncID="1" langID="0x409"> + Kanji-w0.00 + </namerecord> + <namerecord nameID="258" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w0.00 + </namerecord> + <namerecord nameID="259" platformID="3" platEncID="1" langID="0x409"> + Kanji-w239.00 + </namerecord> + <namerecord nameID="260" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w239.00 + </namerecord> + <namerecord nameID="261" platformID="3" platEncID="1" langID="0x409"> + Kanji-w240.00 + </namerecord> + <namerecord nameID="262" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w240.00 + </namerecord> + <namerecord nameID="263" platformID="3" platEncID="1" langID="0x409"> + Kanji-w439.00 + </namerecord> + <namerecord nameID="264" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w439.00 + </namerecord> + <namerecord nameID="265" platformID="3" platEncID="1" langID="0x409"> + Kanji-w440.00 + </namerecord> + <namerecord nameID="266" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w440.00 + </namerecord> + <namerecord nameID="267" platformID="3" platEncID="1" langID="0x409"> + Kanji-w499.00 + </namerecord> + <namerecord nameID="268" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w499.00 + </namerecord> + <namerecord nameID="269" platformID="3" platEncID="1" langID="0x409"> + Kanji-w500.00 + </namerecord> + <namerecord nameID="270" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w500.00 + </namerecord> + <namerecord nameID="271" platformID="3" platEncID="1" langID="0x409"> + Kanji-w599.00 + </namerecord> + <namerecord nameID="272" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w599.00 + </namerecord> + <namerecord nameID="273" platformID="3" platEncID="1" langID="0x409"> + Kanji-w600.00 + </namerecord> + <namerecord nameID="274" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w600.00 + </namerecord> + <namerecord nameID="275" platformID="3" platEncID="1" langID="0x409"> + Kanji-w669.00 + </namerecord> + <namerecord nameID="276" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w669.00 + </namerecord> + <namerecord nameID="277" platformID="3" platEncID="1" langID="0x409"> + Kanji-w670.00 + </namerecord> + <namerecord nameID="278" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w670.00 + </namerecord> + <namerecord nameID="279" platformID="3" platEncID="1" langID="0x409"> + Kanji-w699.00 + </namerecord> + <namerecord nameID="280" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w699.00 + </namerecord> + <namerecord nameID="281" platformID="3" platEncID="1" langID="0x409"> + Kanji-w700.00 + </namerecord> + <namerecord nameID="282" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w700.00 + </namerecord> + <namerecord nameID="283" platformID="3" platEncID="1" langID="0x409"> + Kanji-799.00 + </namerecord> + <namerecord nameID="284" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-799.00 + </namerecord> + <namerecord nameID="285" platformID="3" platEncID="1" langID="0x409"> + Kanji-w800.00 + </namerecord> + <namerecord nameID="286" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w800.00 + </namerecord> + <namerecord nameID="287" platformID="3" platEncID="1" langID="0x409"> + Kanji-w889.00 + </namerecord> + <namerecord nameID="288" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w889.00 + </namerecord> + <namerecord nameID="289" platformID="3" platEncID="1" langID="0x409"> + Kanji-w890.00 + </namerecord> + <namerecord nameID="290" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w890.00 + </namerecord> + <namerecord nameID="291" platformID="3" platEncID="1" langID="0x409"> + Kanji-w1000.00 + </namerecord> + <namerecord nameID="292" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVFTest-Kanji-w1000.00 + </namerecord> + </name> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF2> + <major value="2"/> + <minor value="0"/> + <CFFFont name="CFF2Font"> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + </Private> + </FontDict> + <FontDict index="1"> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + </Private> + </FontDict> + <FontDict index="2"> + <Private> + <BlueValues value="0 0"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 100 -120 rmoveto + 800 1000 -800 hlineto + 400 -459 rmoveto + -318 409 rlineto + 636 hlineto + -286 -450 rmoveto + 318 409 rlineto + -818 vlineto + -668 -41 rmoveto + 318 409 318 -409 rlineto + -668 859 rmoveto + 318 -409 -318 -409 rlineto + </CharString> + <CharString name="exclam" fdSelectIndex="2"> + 134 755 107 18 2 blend + rmoveto + -48 -137 1 blend + hlineto + 8 -565 16 50 2 blend + rlineto + 32 106 1 blend + hlineto + -17 -202 -52 -67 2 blend + rmoveto + 24 14 18 22 25 -14 18 -22 -23 -14 -21 -24 -18 13 -20 22 38 25 26 38 37 -28 25 -37 -34 -30 -22 -38 -40 27 -26 39 16 blend + hvcurveto + </CharString> + <CharString name="uni0000" fdSelectIndex="2"> + </CharString> + <CharString name="uni50CE" fdSelectIndex="1"> + 5 vsindex + 326 793 1 0 2 17 0 29 2 blend + rmoveto + -280 24 0 40 1 blend + vlineto + -47 16 -8 59 -31 0 -53 6 0 10 -13 0 -21 20 0 33 4 blend + vhcurveto + 13 120 4 0 6 -46 0 -76 2 blend + 0 13 4 0 7 1 blend + hhcurveto + 49 10 20 82 4 12 0 19 12 0 20 3 0 5 2 0 3 4 0 8 5 blend + hvcurveto + -10 2 -11 5 -8 6 -12 0 -21 3 0 5 -21 0 -35 6 0 11 -9 0 -14 7 0 11 6 blend + rrcurveto + -75 19 0 32 1 blend + -3 -5 -10 -29 -24 -102 1 0 1 1 0 2 7 0 12 9 0 14 42 0 70 5 blend + 0 -18 6 0 10 1 blend + hhcurveto + -38 -6 4 21 10 0 18 2 0 3 0 0 -1 4 0 7 4 blend + hvcurveto + 280 -25 0 -41 1 blend + vlineto + -41 -464 -40 -8 -74 10 20 41 2 blend + rmoveto + -30 617 30 -50 -4 -90 -5 12 5 50 4 90 3 blend + vlineto + -661 -178 11 -4 12 4 -13 -7 2 blend + rmoveto + -30 689 30 -52 -3 -92 -11 0 -18 52 3 92 3 blend + vlineto + -481 284 -27 -2 -48 -32 36 -21 2 blend + rmoveto + -306 30 306 0 -13 0 60 2 103 0 13 0 3 blend + vlineto + 218 0 -61 0 -102 -1 0 -1 2 blend + rmoveto + -306 30 306 0 -13 0 61 1 104 0 13 0 3 blend + vlineto + -417 358 -17 -1 -30 19 -43 -12 2 blend + rmoveto + -30 217 -116 -217 -30 247 176 -36 0 -61 -52 0 -87 50 0 84 52 0 87 -37 0 -62 -6 0 -10 23 0 39 7 blend + vlineto + 75 -26 0 -44 1 blend + hmoveto + -280 24 0 40 1 blend + vlineto + -47 17 -8 60 -31 0 -53 5 0 9 -13 0 -21 20 0 33 4 blend + vhcurveto + 12 125 5 0 8 -47 0 -78 2 blend + 0 14 4 0 7 1 blend + hhcurveto + 49 11 20 82 3 12 0 20 12 0 19 3 1 6 2 1 6 5 0 9 5 blend + hvcurveto + -9 2 -12 4 -8 7 -14 1 -22 3 0 5 -19 -1 -34 7 0 12 -9 0 -14 6 0 10 6 blend + rrcurveto + -75 19 -1 29 1 blend + -3 -5 -10 -30 -25 -105 1 -1 1 8 0 13 8 0 14 42 0 70 4 blend + 0 -18 6 0 9 1 blend + hhcurveto + -40 -6 4 21 11 0 19 2 0 3 0 0 -1 4 1 8 4 blend + hvcurveto + 280 -25 -1 -42 1 blend + vlineto + -16 -29 0 -48 1 blend + hmoveto + -30 217 -116 -217 -30 247 176 -36 0 -61 -50 0 -84 50 0 84 50 0 84 -37 0 -62 -3 0 -5 23 0 39 7 blend + vlineto + -424 -714 -19 0 -32 -12 0 -21 2 blend + rmoveto + -52 -54 -91 -49 -81 -33 8 -5 11 -13 4 -6 80 36 94 56 56 58 7 0 11 9 0 15 5 0 9 11 0 18 -2 0 -3 9 0 15 13 0 22 -11 0 -18 24 0 39 -22 0 -36 11 0 19 -12 0 -21 4 0 7 -4 0 -6 2 0 2 -2 0 -4 -1 0 -1 3 0 5 18 blend + rrcurveto + 200 -7 -92 0 -154 -5 0 -8 2 blend + rmoveto + 76 -41 90 -62 46 -42 -6 0 -10 5 0 8 -5 0 -7 6 0 10 -4 0 -7 4 0 7 6 blend + rrcurveto + 22 23 -46 42 -91 60 -75 39 60 0 100 29 0 48 0 0 -1 -3 0 -5 3 0 5 -7 0 -11 6 0 11 -7 0 -11 8 blend + rlinecurve + -499 750 -48 0 -81 6 0 10 2 blend + rmoveto + -54 -167 -87 -164 -96 -108 7 -6 11 -12 4 -6 98 116 88 165 58 175 7 0 13 15 0 25 10 0 16 14 0 22 11 0 19 10 0 17 9 0 15 -20 0 -33 15 0 24 -44 0 -73 4 0 7 -18 0 -30 4 0 6 4 0 6 3 0 6 19 0 32 0 0 -1 1 0 1 18 blend + rrcurveto + -113 -214 -60 0 -100 -23 0 -37 2 blend + rmoveto + -691 30 718 20 0 33 64 0 108 43 0 72 3 blend + vlineto + -1 -1 0 -3 1 blend + 2 rlineto + </CharString> + <CharString name="uni610F" fdSelectIndex="1"> + 1 vsindex + 306 142 -19 1 -27 7 0 10 2 blend + rmoveto + -156 45 -2 64 1 blend + vlineto + -50 22 -8 79 -42 2 -59 8 -1 11 -18 0 -27 43 -1 62 4 blend + vhcurveto + 17 186 8 -1 11 -68 3 -97 2 blend + 0 18 8 0 12 1 blend + hhcurveto + 70 13 25 114 5 22 -1 31 17 -1 24 2 1 4 0 -1 -1 7 0 10 5 blend + hvcurveto + -9 3 -12 4 -9 6 -20 1 -28 3 0 4 -31 1 -45 10 0 15 -13 0 -19 9 -1 13 6 blend + rrcurveto + -109 -4 -7 -13 -49 -38 -156 33 -1 47 -1 0 -1 1 0 1 2 0 3 10 0 15 9 0 13 60 -3 85 7 blend + 0 -27 5 0 8 1 blend + hhcurveto + -59 -10 5 22 11 0 16 2 -1 2 -1 0 -2 4 0 6 4 blend + hvcurveto + 157 -47 2 -67 1 blend + vlineto + 63 34 -74 3 -106 -25 1 -36 2 blend + rmoveto + 65 -30 74 -47 37 -37 -7 1 -10 5 -1 7 -3 0 -4 5 0 7 -3 0 -4 6 0 9 6 blend + rrcurveto + 20 22 -37 36 -75 47 -65 28 48 -2 68 47 -2 67 -1 0 -1 -6 1 -8 2 0 3 -8 0 -11 8 -1 11 -6 0 -9 8 blend + rlinecurve + 320 -64 -49 3 -69 -32 1 -46 2 blend + rmoveto + 76 -49 83 -75 38 -12 0 -18 -6 1 -8 -13 0 -19 -4 0 -6 -9 1 -12 5 blend + -54 rrcurveto + 23 19 -38 54 -84 73 -76 49 69 -3 98 35 -2 50 5 0 8 2 0 3 11 0 16 2 0 2 13 -1 18 2 0 4 8 blend + rlinecurve + -557 -5 -85 4 -121 -6 0 -9 2 blend + rmoveto + -28 -68 -50 -72 -77 -40 5 -1 6 1 0 1 3 1 5 6 0 9 13 -1 18 1 0 1 6 blend + rrcurveto + 24 -17 79 42 47 74 31 71 62 -3 89 -42 2 -60 -7 1 -10 5 -1 7 -6 0 -8 1 0 1 -2 -1 -4 4 1 7 8 blend + rlinecurve + -117 625 -26 2 -36 42 -3 59 2 blend + rmoveto + -30 775 30 -57 3 -81 -3 0 -5 57 -3 81 3 blend + vlineto + -818 -176 -1 0 -2 12 0 18 2 blend + rmoveto + -30 869 30 -56 2 -81 3 0 5 56 -2 81 3 blend + vlineto + -455 258 -40 2 -57 -38 2 -54 2 blend + rmoveto + -99 30 99 -18 0 -27 81 -3 116 18 0 27 3 blend + vlineto + -236 -127 -60 2 -86 -18 0 -27 2 blend + rmoveto + 26 -40 25 -53 9 -36 -12 1 -17 10 0 15 -10 -1 -15 13 0 19 -4 0 -6 11 -1 15 6 blend + rrcurveto + 29 12 -10 35 -25 53 -27 39 76 -3 109 12 0 18 3 1 5 -10 0 -15 10 -1 14 -15 1 -21 11 0 16 -11 0 -16 8 blend + rlinecurve + 393 2 -112 4 -161 -1 0 -2 2 blend + rmoveto + -16 -38 -31 -57 -23 -35 7 0 11 12 -1 17 13 -1 18 19 0 28 10 0 14 8 -1 11 6 blend + rrcurveto + 27 -12 24 36 26 48 23 46 70 -2 101 -10 1 -14 -8 0 -12 -13 1 -18 -6 -1 -9 -17 0 -25 -1 1 -1 -10 1 -14 8 blend + rlinecurve + -504 -378 27 -1 39 -8 0 -12 2 blend + rmoveto + 559 -94 -559 -110 5 -157 44 -2 63 110 -5 157 3 blend + hlineto + 216 -52 2 -74 1 blend + vmoveto + 559 -92 -559 -110 5 -157 43 -1 62 110 -5 157 3 blend + hlineto + -30 122 -75 3 -107 -4 0 -6 2 blend + rmoveto + -276 619 276 -26 0 -38 45 -2 64 26 0 38 3 blend + vlineto + </CharString> + <CharString name="uni6A1A" fdSelectIndex="1"> + 5 vsindex + 51 612 -8 0 -14 29 0 49 2 blend + rmoveto + -30 -60 0 -100 1 blend + 307 30 60 0 100 1 blend + vlineto + -149 228 -32 0 -53 -20 0 -34 2 blend + rmoveto + -918 30 918 -19 0 -32 62 0 103 19 0 32 3 blend + vlineto + -36 -238 -55 0 -91 -32 0 -53 2 blend + rmoveto + -31 -160 -74 -193 -68 -95 7 -5 10 -11 6 -8 70 101 74 203 33 160 6 0 10 25 0 42 13 0 21 23 0 37 4 0 7 1 0 2 8 0 14 -18 0 -30 13 0 21 -27 0 -44 4 0 7 -19 0 -32 1 0 2 6 0 10 -12 0 -20 -2 0 -3 -2 0 -4 -1 0 -2 18 blend + rrcurveto + 4 -143 19 0 32 77 0 128 2 blend + rmoveto + -21 -16 25 -26 72 -92 21 -33 -23 0 -38 -34 0 -57 1 0 2 -15 0 -24 -12 0 -21 -6 0 -11 2 0 3 -18 0 -29 8 blend + rlinecurve + 24 24 -18 25 -81 96 -22 22 28 0 48 63 0 105 2 0 2 -1 0 -2 1 0 3 10 0 16 1 0 1 1 0 2 8 blend + rlinecurve + 157 278 1 0 1 -14 0 -23 2 blend + rmoveto + -30 559 30 -54 0 -90 -17 3 -23 54 0 90 3 blend + vlineto + -457 -518 29 -3 43 -9 -3 -20 2 blend + rmoveto + -30 176 30 -46 0 -77 -17 0 -27 46 0 77 3 blend + vlineto + -194 120 -3 0 -5 -42 37 -35 2 blend + rmoveto + -365 30 365 38 -29 45 53 0 88 -38 29 -45 3 blend + vlineto + 135 508 -87 0 -146 33 -34 24 2 blend + rmoveto + -122 30 122 -19 0 -31 63 0 106 19 0 31 3 blend + vlineto + -115 -172 -60 0 -100 -27 34 -19 2 blend + rmoveto + -288 30 288 11 -24 18 50 0 83 -11 24 -18 3 blend + vlineto + 148 -62 -2 -106 1 blend + hmoveto + -288 30 288 11 -24 18 50 0 83 -11 24 -18 3 blend + vlineto + 156 -394 -30 2 -47 19 -34 6 2 blend + rmoveto + -52 -36 -89 -48 -61 -29 7 0 12 2 0 4 14 0 23 3 0 4 11 0 18 4 0 8 6 blend + rrcurveto + 15 -21 62 28 86 41 57 44 25 0 42 -39 0 -66 -10 0 -17 -4 0 -6 -12 0 -19 -3 0 -5 -6 0 -11 -5 0 -9 8 blend + rlinecurve + -541 323 10 0 17 44 5 84 2 blend + rmoveto + -30 517 -150 -517 -30 547 210 -46 -2 -81 -74 0 -123 54 -13 80 74 0 123 -46 -2 -81 -19 0 -32 38 17 82 7 blend + vlineto + -232 -242 -10 0 -16 -28 29 -27 2 blend + rmoveto + -344 58 -32 71 1 blend + vlineto + -47 15 -9 54 -33 -2 -58 3 0 4 -15 0 -25 22 0 37 4 blend + vhcurveto + 12 100 3 0 5 -47 0 -78 2 blend + 0 12 4 0 6 1 blend + hhcurveto + 48 10 25 102 3 12 0 20 11 0 19 4 1 9 11 -1 16 5 0 8 5 blend + hvcurveto + -9 3 -11 4 -8 6 -14 0 -23 3 -1 5 -23 1 -37 8 1 15 -8 -1 -15 8 0 12 6 blend + rrcurveto + -97 11 1 20 1 blend + -3 -4 -14 -29 -21 -84 0 0 1 1 -1 1 10 0 16 10 1 17 43 -1 71 5 blend + 0 -16 7 0 12 1 blend + hhcurveto + -33 -6 5 22 13 0 22 3 0 5 -1 0 -2 4 0 7 4 blend + hvcurveto + 344 -59 34 -71 1 blend + vlineto + -346 -371 -24 0 -41 65 -34 78 2 blend + rmoveto + 10 -31 77 16 100 22 99 21 3 0 5 -54 0 -90 -2 0 -3 -3 0 -5 -9 0 -15 -6 0 -10 -10 0 -17 -5 0 -8 8 blend + rlinecurve + -2 29 -108 -22 -104 -22 -72 -13 -3 0 -5 52 0 86 9 0 16 6 0 10 8 0 13 6 0 11 4 0 6 4 0 6 8 blend + rlinecurve + -16 767 -44 0 -72 -13 0 -21 2 blend + rmoveto + -316 -6 0 -11 1 blend + vlineto + -142 -7 -194 -74 -141 2 0 2 -2 0 -2 2 0 4 6 0 9 4 blend + vhcurveto + 8 -3 13 -7 5 -6 13 0 21 -7 0 -11 25 0 43 -20 0 -34 11 0 17 -10 0 -17 6 blend + rrcurveto + 75 143 10 205 145 4 0 7 3 0 5 2 0 4 21 0 35 9 0 15 5 blend + vvcurveto + 316 6 0 11 1 blend + vlineto + </CharString> + <CharString name="uni82E8" fdSelectIndex="1"> + 3 vsindex + 58 743 -1 0 -2 26 0 60 2 blend + rmoveto + -30 887 30 -43 0 -99 2 0 5 43 0 99 3 blend + vlineto + -630 96 -29 0 -66 -19 0 -44 2 blend + rmoveto + -207 30 207 -2 -2 -9 50 0 114 2 2 9 3 blend + vlineto + 305 -44 0 -100 1 blend + hmoveto + -207 30 207 -2 -2 -9 51 0 115 2 2 9 3 blend + vlineto + -521 -240 -36 0 -82 2 0 4 2 blend + rmoveto + -206 -5 0 -10 1 blend + vlineto + -137 -15 -184 -109 -136 5 0 11 3 0 6 5 0 10 -1 0 -1 8 0 19 5 blend + vhcurveto + 7 -3 12 -9 5 -6 12 0 27 -6 0 -13 22 0 51 -15 0 -35 10 0 21 -8 0 -19 6 blend + rrcurveto + 112 139 18 194 141 3 0 7 -4 0 -8 1 0 3 11 0 24 4 0 10 5 blend + vvcurveto + 207 5 0 11 1 blend + vlineto + -19 -18 0 -42 1 blend + hmoveto + -30 670 -153 -670 -30 700 213 -38 0 -87 -64 0 -144 48 0 111 64 0 144 -38 0 -87 -14 0 -30 28 0 63 7 blend + vlineto + -531 -249 -15 0 -36 -23 0 -51 2 blend + rmoveto + -343 50 0 112 1 blend + vlineto + -66 31 -12 105 -29 0 -66 6 0 14 -13 0 -28 29 0 66 4 blend + vhcurveto + 23 278 5 0 12 -59 0 -134 2 blend + 0 24 6 0 14 1 blend + hhcurveto + 96 15 31 123 8 20 0 44 11 0 26 4 0 8 14 0 32 5 0 11 5 blend + hvcurveto + -9 3 -13 4 -9 7 -13 0 -30 2 0 5 -21 0 -48 8 0 17 -10 -1 -23 6 0 15 6 blend + rrcurveto + -117 -6 -11 -21 -69 -56 -236 8 0 18 -1 1 -1 1 -1 1 3 0 7 3 1 9 7 0 15 49 0 112 7 blend + 0 -41 4 0 8 1 blend + hhcurveto + -84 -16 11 37 4 0 10 2 0 5 -3 0 -7 1 0 2 4 blend + hvcurveto + 343 -51 0 -115 1 blend + vlineto + 444 -47 -59 0 -135 26 0 59 2 blend + rmoveto + -101 -52 -195 -56 -169 -40 4 -7 5 -10 3 -7 172 40 193 54 120 56 4 0 8 3 0 7 18 0 43 9 0 19 12 0 26 8 0 19 5 0 12 -10 0 -22 7 0 15 -18 0 -41 1 0 3 -11 0 -25 -8 0 -19 -9 0 -21 -8 0 -18 -8 0 -19 5 0 11 0 0 1 18 blend + rrcurveto + </CharString> + <CharString name="uni8552" fdSelectIndex="1"> + 2 vsindex + 53 761 -3 0 -3 36 0 40 2 blend + rmoveto + -30 896 30 -65 -1 -73 5 0 5 65 1 73 3 blend + vlineto + -631 78 -46 0 -52 -22 0 -24 2 blend + rmoveto + -162 30 162 -8 -32 -41 98 1 111 8 32 41 3 blend + vlineto + 296 -105 -1 -118 1 blend + hmoveto + -162 30 162 -8 -32 -41 100 1 112 8 32 41 3 blend + vlineto + -47 -217 -23 0 -26 -57 -1 -64 2 blend + rmoveto + 209 -109 -209 -101 -1 -113 72 1 81 101 1 113 3 blend + hlineto + -235 109 24 0 27 -72 -1 -81 2 blend + rmoveto + 205 -109 -205 -99 -1 -111 72 1 81 99 1 111 3 blend + hlineto + -227 109 18 1 21 -72 -1 -81 2 blend + rmoveto + 197 -109 -197 -93 -2 -105 72 1 81 93 2 105 3 blend + hlineto + -30 139 -87 -2 -98 -15 0 -17 2 blend + rmoveto + -169 731 169 -41 0 -46 38 0 42 41 0 46 3 blend + vlineto + -650 -375 62 1 70 -32 0 -36 2 blend + rmoveto + 571 -76 -571 -159 -1 -179 48 0 54 159 1 179 3 blend + hlineto + -30 -38 0 -43 1 blend + vmoveto + 571 -77 -571 -159 -1 -179 48 0 54 159 1 179 3 blend + hlineto + 287 -66 -1 -74 1 blend + vmoveto + 571 -74 -571 -159 -1 -179 46 0 52 159 1 179 3 blend + hlineto + -30 104 -99 -1 -111 -4 0 -5 2 blend + rmoveto + -347 631 347 -18 0 -20 45 0 50 18 0 20 3 blend + vlineto + -216 -389 -86 -1 -96 -31 0 -35 2 blend + rmoveto + 127 -34 121 -39 72 -31 -17 0 -19 2 0 2 -13 0 -15 -2 0 -2 -13 0 -15 3 0 3 6 blend + rrcurveto + 31 22 -78 32 -126 39 -121 136 1 153 39 0 44 1 0 1 -3 0 -3 -8 0 -9 4 0 5 9 0 10 7 blend + 31 rlinecurve + -258 -1 -67 -1 -75 0 0 -1 2 blend + rmoveto + -81 -39 -128 -36 -107 -23 8 -6 12 -12 5 -6 103 25 130 41 86 43 9 0 10 6 0 7 3 0 4 7 0 8 -4 0 -5 7 0 8 19 0 22 -14 0 -16 32 0 36 -32 0 -36 17 0 19 -19 0 -21 3 0 3 -1 0 -1 5 0 6 2 0 2 1 0 1 4 0 5 18 blend + rrcurveto + </CharString> + <CharString name="uni85A8" fdSelectIndex="1"> + 2 vsindex + 53 761 -3 0 -3 31 0 35 2 blend + rmoveto + -30 896 30 -76 -1 -86 5 0 5 76 1 86 3 blend + vlineto + -802 -461 2 0 2 -23 0 -26 2 blend + rmoveto + -30 703 30 -53 0 -60 3 0 4 53 0 60 3 blend + vlineto + -532 539 -58 -1 -65 6 0 7 2 blend + rmoveto + -171 30 171 -16 -19 -36 102 1 114 16 19 36 3 blend + vlineto + 299 -100 -1 -112 1 blend + hmoveto + -171 30 171 -16 -19 -36 102 1 115 16 19 36 3 blend + vlineto + -46 -219 -34 0 -39 -64 -1 -72 2 blend + rmoveto + 204 -121 -204 -110 -1 -123 83 1 93 110 1 123 3 blend + hlineto + -230 121 33 1 38 -83 -1 -93 2 blend + rmoveto + 200 -121 -200 -108 -2 -122 83 1 93 108 2 122 3 blend + hlineto + -222 121 27 -1 30 -83 -1 -93 2 blend + rmoveto + 192 -121 -192 -101 -1 -114 83 1 93 101 1 114 3 blend + hlineto + -30 151 -87 -1 -98 -29 0 -33 2 blend + rmoveto + -181 716 181 -24 0 -27 11 0 12 24 0 27 3 blend + vlineto + -788 -240 -17 0 -19 9 0 11 2 blend + rmoveto + -130 30 100 786 -100 30 130 -37 0 -42 88 1 99 -20 0 -23 -150 -1 -168 20 0 23 95 1 106 37 0 42 7 blend + vlineto + -610 -123 -56 -1 -63 -44 0 -50 2 blend + rmoveto + -50 -62 -93 -73 -118 -54 8 -4 10 -9 6 -7 121 58 92 75 59 70 9 0 11 13 0 15 19 0 21 29 0 32 9 0 10 22 0 25 12 0 14 -11 0 -12 19 0 21 -26 0 -30 7 0 8 -16 0 -18 3 0 3 -13 0 -14 -10 0 -11 -19 0 -21 -2 0 -2 8 0 8 18 blend + rrcurveto + 124 -78 -89 -1 -100 32 0 36 2 blend + rmoveto + -7 -6 0 -6 1 blend + vlineto + -65 -139 -176 -81 -162 -31 6 -6 8 -12 3 -8 168 37 178 84 72 154 16 0 17 30 0 34 36 0 41 26 0 29 -7 0 -8 12 0 13 12 0 14 -16 0 -18 15 0 16 -30 0 -33 5 0 6 -18 0 -21 26 0 29 -5 0 -5 -23 0 -26 -12 0 -14 -5 0 -5 6 0 7 18 blend + rrcurveto + -19 11 -6 -2 -47 0 -53 13 0 15 -13 0 -15 0 0 -1 4 blend + rlineto + -333 -72 75 1 85 -55 0 -61 2 blend + rmoveto + 65 -25 75 -46 38 -35 -35 0 -40 8 0 9 -38 0 -42 15 0 17 -18 0 -21 14 0 15 6 blend + rrcurveto + 26 19 -39 34 -76 45 -64 25 49 0 56 31 0 35 19 0 21 -14 0 -16 39 0 44 -18 0 -20 32 0 36 -9 0 -10 8 blend + rlinecurve + 72 55 -55 0 -62 28 0 31 2 blend + rmoveto + -30 -30 -42 0 -47 -42 0 -47 2 blend + rlineto + 269 30 -14 0 -16 42 0 47 2 blend + hlineto + 74 74 13 0 15 -22 0 -24 2 blend + rmoveto + -276 80 1 90 1 blend + vlineto + -52 21 -9 77 -48 0 -54 8 0 9 -21 0 -24 44 0 49 4 blend + vhcurveto + 16 182 8 0 9 -90 -1 -101 2 blend + 0 18 8 0 9 1 blend + hhcurveto + 62 12 21 88 4 25 0 28 20 0 22 6 0 7 10 0 11 9 0 10 5 blend + hvcurveto + -9 2 -12 5 -8 6 -24 0 -26 4 0 5 -34 0 -39 12 0 13 -16 0 -18 10 0 11 6 blend + rrcurveto + -81 25 0 28 1 blend + -4 -6 -11 -41 -37 -154 -1 0 -1 0 1 1 11 -1 12 15 1 17 79 1 89 5 blend + 0 -26 9 0 10 1 blend + hhcurveto + -56 -9 6 25 17 0 19 2 0 3 -1 -1 -2 4 0 5 4 blend + hvcurveto + 276 -81 -1 -91 1 blend + vlineto + 278 -62 -114 -1 -128 32 0 36 2 blend + rmoveto + -66 -32 -126 -33 -107 -23 5 -7 5 -10 2 -7 110 22 126 32 81 36 10 0 11 7 0 8 30 0 34 11 0 12 21 0 23 9 0 10 7 0 8 -14 0 -16 9 0 10 -27 0 -30 3 0 4 -15 0 -17 -15 0 -17 -10 0 -11 -12 0 -14 -11 0 -12 3 0 4 -3 0 -4 18 blend + rrcurveto + </CharString> + <CharString name="uni8E59" fdSelectIndex="1"> + 3 vsindex + 193 296 41 0 93 -8 0 -19 2 blend + rmoveto + 625 -94 -625 -84 -1 -192 27 0 63 84 1 192 3 blend + hlineto + -30 124 -48 0 -110 -6 0 -14 2 blend + rmoveto + -154 685 154 -15 0 -34 16 0 38 15 0 34 3 blend + vlineto + -365 -132 -33 0 -76 1 1 3 2 blend + rmoveto + -232 -7 -1 -16 1 blend + vlineto + 30 -5 51 0 117 -11 0 -27 2 blend + rlineto + 237 18 1 43 1 blend + vlineto + -11 -92 -27 0 -62 1 -1 2 2 blend + rmoveto + -30 397 30 -22 0 -52 -12 0 -27 22 0 52 3 blend + vlineto + -760 647 25 0 56 -4 0 -9 2 blend + rmoveto + -30 811 30 -28 0 -65 -12 0 -27 28 0 65 3 blend + vlineto + -823 -13 0 -29 1 blend + hmoveto + -143 12 0 27 1 blend + vlineto + -83 -13 -107 -75 -82 4 0 9 3 0 6 5 1 12 -1 0 -1 5 -1 11 5 blend + vhcurveto + 7 -4 11 -9 5 -6 10 0 21 -5 0 -12 20 0 46 -17 0 -38 6 0 15 -8 0 -18 6 blend + rrcurveto + 79 5 0 11 1 blend + 85 16 118 88 1 1 3 9 0 19 6 0 15 3 blend + vvcurveto + 143 -11 0 -25 1 blend + vlineto + 199 -25 -46 -1 -106 -23 0 -54 2 blend + rmoveto + -167 30 37 0 85 1 blend + 167 vlineto + -14 -59 -18 0 -42 8 0 18 2 blend + rmoveto + -30 185 30 -12 0 -26 -4 0 -9 12 0 26 3 blend + vlineto + -365 -96 10 0 22 7 0 17 2 blend + rmoveto + -30 392 30 -17 0 -39 -4 0 -9 17 0 39 3 blend + vlineto + -218 -10 -15 0 -33 -6 0 -13 2 blend + rmoveto + -160 23 0 51 1 blend + vlineto + -8 -2 0 0 -1 1 blend + -3 -11 -1 1 0 3 0 0 1 2 blend + vhcurveto + -11 -1 -30 2 0 4 1 0 1 4 0 10 3 blend + 0 -47 13 0 30 1 blend + 1 5 -9 6 -10 2 -9 4 0 8 -6 0 -13 6 0 13 -11 0 -25 2 0 6 -8 0 -19 6 blend + rrcurveto + 50 30 -5 0 -11 1 0 2 2 blend + 0 6 17 3 0 8 5 1 12 2 blend + hvcurveto + 17 5 4 9 21 6 -1 12 4 0 9 1 0 3 4 0 8 11 0 25 5 blend + vvcurveto + 159 -21 0 -46 1 blend + vlineto + -132 -50 -39 0 -88 1 0 1 2 blend + rmoveto + -25 -42 -40 -39 -44 -30 8 -4 13 -10 5 -4 41 6 0 12 3 0 8 7 0 16 3 0 5 5 0 13 1 0 4 6 0 13 -3 0 -8 10 0 22 -6 0 -14 5 0 12 -5 0 -10 -3 0 -8 13 blend + 30 45 -7 0 -14 1 blend + 47 26 45 -3 0 -8 1 0 1 2 blend + rrcurveto + 153 -7 -13 0 -30 -1 0 -2 2 blend + rmoveto + 35 -27 38 -39 18 -28 -8 3 -11 3 -5 -3 -9 3 -14 6 -7 -3 -5 1 -9 4 -4 0 6 blend + rrcurveto + 24 18 -18 27 -39 39 -34 25 23 1 55 6 -1 12 4 -1 8 -3 4 1 9 -3 13 -6 7 2 7 -3 9 -4 5 4 8 blend + rlinecurve + 115 330 -53 -1 -124 9 1 21 2 blend + rmoveto + 14 -286 131 -209 160 0 50 1 18 34 6 108 -9 3 -11 5 -9 7 -4 -92 -9 -34 -31 -1 -137 -2 -126 185 -12 281 3 0 8 6 0 14 5 0 10 -10 0 -22 -3 0 -6 0 0 -1 14 0 33 -1 0 -1 11 0 23 -3 0 -8 5 0 12 10 0 24 -10 0 -23 3 0 7 -14 0 -32 8 0 18 -8 0 -17 8 0 17 0 0 -1 11 0 26 0 0 1 4 0 9 5 0 11 1 0 1 29 0 67 0 1 2 8 0 17 0 -1 -1 -2 0 -4 -37 0 -85 30 blend + rrcurveto + 207 -169 -37 0 -85 -4 0 -9 2 blend + rmoveto + -61 -129 -111 -108 -121 -69 7 -5 12 -11 5 -6 119 74 113 110 66 136 4 15 19 8 14 33 4 28 29 8 5 22 2 28 27 6 2 17 8 1 20 -6 0 -14 14 1 34 -13 -1 -31 6 0 15 -7 0 -17 0 -28 -23 -4 -2 -10 0 -27 -20 -1 -3 -5 -1 -16 -12 -1 -15 -19 18 blend + rrcurveto + -156 153 -20 -2 -49 -2 0 -3 2 blend + rmoveto + 52 -15 63 -26 34 -1 0 -3 -1 0 -1 0 0 1 0 0 -2 0 0 -2 5 blend + -21 rrcurveto + 15 27 -34 20 -64 24 -51 14 21 0 48 20 0 47 -1 0 -1 1 0 1 0 0 -1 0 0 1 1 0 3 -1 0 -2 8 blend + rlinecurve + -453 -763 1 0 2 12 0 27 2 blend + rmoveto + -25 -16 -31 0 -71 -7 0 -17 2 blend + rlineto + -100 89 146 -18 233 -21 0 -46 -5 0 -12 -13 0 -29 -4 0 -9 -8 0 -18 5 blend + hhcurveto + 249 23 0 53 1 blend + hlineto + 2 8 6 14 6 8 -35 0 -207 2 -1 3 11 0 25 5 1 12 17 0 38 4 0 10 8 0 18 -16 0 -37 -1 0 -3 -1 0 -2 9 blend + 0 -22 -14 0 -32 1 blend + 0 -214 0 -150 15 -78 89 24 0 55 0 0 1 18 0 40 -2 0 -5 12 0 28 -1 0 -2 6 blend + rrcurveto + 5 62 -50 0 -114 -10 0 -22 2 blend + rmoveto + -30 -97 -92 -60 -107 -36 8 -6 12 -11 4 -6 105 41 99 65 32 106 5 0 12 7 0 15 15 0 34 1 0 3 7 0 16 1 0 2 10 0 22 -6 0 -15 18 0 41 -17 0 -37 8 0 18 -8 0 -19 -2 0 -5 4 0 9 -12 0 -27 7 0 16 -1 0 -2 6 0 14 18 blend + rrcurveto + </CharString> + <CharString name="uni9A40" fdSelectIndex="1"> + 1 vsindex + 55 767 2 0 3 37 -2 55 2 blend + rmoveto + -30 892 30 -44 2 -62 -6 0 -9 44 -2 62 3 blend + vlineto + -637 72 -28 1 -40 -26 2 -39 2 blend + rmoveto + -153 30 153 -27 0 -27 77 -2 111 27 0 27 3 blend + vlineto + 315 -89 3 -128 1 blend + hmoveto + -153 30 153 -27 0 -27 79 -3 113 27 0 27 3 blend + vlineto + -462 -288 8 0 12 -11 0 -16 2 blend + rmoveto + 571 -62 -571 -102 3 -147 27 -1 39 102 -3 147 3 blend + hlineto + 152 -29 1 -42 1 blend + vmoveto + 571 -60 -571 -102 3 -147 26 -1 37 102 -3 147 3 blend + hlineto + -30 -71 2 -102 1 blend + 90 rmoveto + -212 631 212 -23 1 -32 45 -2 64 23 -1 32 3 blend + vlineto + -776 -263 -22 1 -31 -4 0 -5 2 blend + rmoveto + -30 905 30 -42 2 -60 10 0 14 42 -2 60 3 blend + vlineto + -716 -160 36 -1 52 -26 2 -37 2 blend + rmoveto + -30 554 30 -13 0 -19 -59 2 -85 13 0 19 3 blend + vlineto + -554 -78 59 -2 85 5 -1 7 2 blend + rmoveto + -30 563 30 -13 1 -19 -56 1 -81 13 -1 19 3 blend + vlineto + -578 -79 2 1 4 6 0 8 2 blend + rmoveto + -30 617 30 -27 1 -39 4 -1 5 27 -1 39 3 blend + vlineto + -477 382 -24 2 -34 8 0 12 2 blend + rmoveto + -46 -92 -113 -104 -167 -65 7 -5 10 -9 5 -8 172 70 111 106 55 101 6 -1 8 -5 -1 -8 17 0 25 11 0 16 -3 -1 -5 6 0 9 12 0 18 -11 0 -16 18 0 26 -27 1 -39 6 -1 8 -16 1 -23 14 0 20 3 0 5 -6 0 -8 1 0 1 3 0 4 28 -1 41 18 blend + rrcurveto + 298 -65 -24 0 -35 3 0 4 2 blend + rmoveto + -25 -12 -55 2 -79 -15 0 -22 2 blend + rlineto + 62 -80 121 -81 100 -38 5 8 9 11 7 6 -101 33 -119 76 -59 77 2 0 3 -14 1 -20 -10 1 -14 2 0 3 20 0 29 1 0 2 9 -1 13 18 -1 25 20 -1 28 26 -1 38 14 0 21 14 -1 19 -13 0 -19 -7 0 -10 9 0 13 -18 2 -25 4 -1 5 -7 0 -10 18 blend + rrcurveto + -211 -88 -39 3 -55 -12 1 -17 2 blend + rmoveto + -239 30 239 -2 -1 -4 69 -4 98 2 1 4 3 blend + vlineto + 316 -223 -74 3 -106 11 -1 15 2 blend + rmoveto + -6 -4 0 -6 1 blend + vlineto + -8 -87 -7 -34 -10 -10 2 0 3 24 -1 35 -1 1 -1 6 0 9 1 -1 1 1 0 1 6 blend + rrcurveto + -6 -1 0 -1 1 blend + -6 -6 -1 -12 2 0 3 1 blend + hhcurveto + -11 -31 1 0 1 10 0 15 2 blend + 1 3 -34 0 -1 -1 9 0 13 2 blend + hvcurveto + 5 -8 3 -13 6 -1 8 -11 1 -16 5 0 8 -19 1 -26 4 blend + 1 -8 28 -2 30 -1 14 1 -14 1 -20 7 -1 9 1 0 1 2 0 3 2 -1 2 3 1 5 0 1 1 7 blend + 21 0 10 4 10 9 16 15 7 35 2 -1 2 8 -1 11 2 0 3 5 0 7 5 0 8 3 -1 4 3 0 4 2 1 4 3 0 4 9 blend + 9 89 -15 1 -21 1 blend + rrcurveto + 7 1 1 12 6 -1 8 1 0 1 1 -1 1 9 0 13 4 blend + 0 hhcurveto + -660 -34 -57 3 -82 -8 0 -11 2 blend + rmoveto + -17 -46 1 0 2 7 0 10 2 blend + -32 -46 -46 5 0 7 5 0 7 2 blend + -23 rrcurveto + 20 -21 52 28 31 51 17 46 56 -2 81 -24 0 -35 -4 -1 -7 0 1 1 -4 1 -5 -7 0 -10 1 -1 1 0 0 -1 8 blend + rlinecurve + 110 -3 -67 3 -96 1 0 2 2 blend + rmoveto + 13 -38 10 -49 0 -32 -3 0 -4 4 -1 5 -2 0 -3 2 1 4 -1 1 -1 3 0 4 6 blend + rrcurveto + 29 6 55 -3 78 8 -1 11 2 blend + -1 31 -10 50 -15 37 -3 0 -4 0 1 1 -4 0 -6 3 -1 4 -4 1 -5 5 blend + rlinecurve + 113 -6 -56 3 -80 -7 0 -10 2 blend + rmoveto + 22 -32 20 -44 7 -30 2 0 3 1 -1 1 3 -1 3 1 0 1 2 0 3 5 blend + rrcurveto + 28 10 -8 29 -21 44 -23 32 48 -2 69 15 0 22 -2 1 -2 -1 0 -2 0 -1 -1 -5 1 -6 -1 1 -1 -4 0 -6 8 blend + rlinecurve + 117 -5 -45 1 -65 -17 1 -24 2 blend + rmoveto + 25 -23 -1 0 -1 2 -1 2 2 blend + 27 -32 13 -23 -2 1 -2 1 0 2 2 blend + rrcurveto + 21 14 -12 44 -2 63 20 -1 28 0 0 -1 3 blend + 22 -27 32 -26 22 -2 0 -2 -2 0 -3 1 0 1 -2 1 -2 4 blend + rlinecurve + -381 267 39 -1 56 7 -1 10 2 blend + rmoveto + -16 -30 -33 1 -47 -23 1 -33 2 blend + rlineto + 498 30 -42 1 -61 23 -1 33 2 blend + hlineto + -516 -23 21 0 31 -14 0 -21 2 blend + rmoveto + -224 30 247 6 0 9 75 -4 106 10 0 14 3 blend + vlineto + </CharString> + <CharString name="uniF9DC" fdSelectIndex="1"> + 4 vsindex + 529 746 23 0 29 30 4 43 2 blend + rmoveto + -30 320 30 -58 0 -73 -29 0 -36 58 0 73 3 blend + vlineto + -397 -495 15 0 18 12 -4 10 2 blend + rmoveto + -30 442 30 -56 0 -71 21 0 27 56 0 71 3 blend + vlineto + -420 149 -6 0 -8 6 -4 2 2 blend + rmoveto + -30 374 30 -54 0 -68 -25 0 -31 54 0 68 3 blend + vlineto + -514 -420 34 0 42 -3 4 1 2 blend + rmoveto + -30 626 30 -66 0 -82 -29 0 -36 66 0 82 3 blend + vlineto + -531 144 15 0 19 -9 0 -11 2 blend + rmoveto + -30 460 30 -55 0 -69 -4 0 -5 55 0 69 3 blend + vlineto + -53 622 -42 0 -53 -6 4 -2 2 blend + rmoveto + -7 -9 0 -12 1 blend + vlineto + -86 -171 -222 -118 -188 -45 7 -7 8 -11 3 -8 192 51 224 119 94 187 14 0 18 37 0 46 27 0 34 19 0 24 -7 0 -9 5 0 7 15 0 18 -16 0 -20 17 0 22 -32 0 -40 9 0 11 -19 0 -24 21 0 26 3 0 3 -17 0 -21 -9 0 -11 2 0 2 -3 0 -4 18 blend + rrcurveto + -19 12 -6 -2 -55 0 -68 27 0 34 -12 0 -15 -3 0 -3 4 blend + rlineto + -323 -32 55 0 69 -25 0 -32 2 blend + rmoveto + -25 -11 -68 0 -86 -23 0 -28 2 blend + rlineto + 83 -154 177 -116 201 -44 4 8 9 12 7 6 -200 39 -177 113 -79 147 11 0 14 12 0 15 -18 0 -22 21 0 26 -1 0 -1 4 0 5 11 0 13 21 0 26 21 0 27 32 0 40 17 0 21 16 0 20 9 0 11 -10 0 -12 17 0 21 -36 0 -45 1 0 2 -37 0 -47 18 blend + rrcurveto + 59 127 -46 0 -58 9 -4 6 2 blend + rmoveto + -40 -82 -80 -104 -112 -75 8 -4 10 -9 6 -7 115 80 2 0 2 8 0 10 7 0 9 23 0 29 2 0 3 16 0 20 16 0 20 -12 0 -15 26 0 32 -30 0 -37 10 0 13 -18 0 -23 8 0 10 -4 0 -5 14 blend + 80 106 47 90 -13 0 -16 11 0 13 14 0 17 3 blend + rrcurveto + -129 -493 -106 -5 -137 21 6 34 2 blend + rmoveto + -27 -73 -43 -71 -51 -50 8 -5 13 -9 5 -5 49 52 47 77 29 77 6 0 8 11 0 14 7 0 8 8 0 10 5 0 7 8 0 10 16 0 20 -8 0 -10 28 0 35 -17 -1 -22 15 0 18 -11 0 -14 -3 0 -4 -4 0 -5 -2 0 -2 -1 0 -1 -3 0 -4 -3 1 -3 18 blend + rrcurveto + 124 -1 -66 4 -77 10 15 31 2 blend + rmoveto + -374 30 374 4 0 5 84 0 105 -4 0 -5 3 blend + vlineto + -586 460 -72 0 -90 2 -21 -24 2 blend + rmoveto + -875 30 845 209 30 -27 0 -33 77 0 96 -53 0 -66 -79 0 -99 80 0 99 5 blend + vlineto + -8 -29 0 -36 1 blend + hmoveto + -7 -29 0 -36 1 blend + vlineto + -28 -75 -43 -102 -46 -95 14 0 17 10 0 13 11 0 14 -41 0 -51 17 0 22 4 0 5 6 blend + rrcurveto + 89 -91 24 -74 -63 -32 0 -40 23 0 28 -11 0 -14 10 0 13 17 0 21 5 blend + vvcurveto + -33 -6 -35 -19 -13 3 0 4 1 0 1 15 0 18 7 0 9 4 0 5 5 blend + vhcurveto + -10 -6 -12 3 0 3 0 0 1 1 0 2 3 blend + -3 -14 -1 -20 -2 -26 1 -29 4 0 5 1 0 1 7 0 9 2 0 2 13 0 16 -1 0 -1 11 0 14 7 blend + 2 7 -9 4 -13 11 0 13 -21 0 -26 5 0 6 -33 0 -41 4 blend + 1 -8 22 -2 27 0 22 -21 0 -27 1 0 2 1 0 1 -3 0 -4 0 0 1 -4 0 -5 6 blend + 2 19 2 17 5 12 9 3 0 4 2 0 2 3 0 3 2 0 2 4 0 5 3 0 4 6 blend + rrcurveto + 25 17 10 7 0 9 5 0 7 4 0 5 3 blend + 43 44 22 0 27 1 blend + vvcurveto + 67 -22 76 -86 89 -8 0 -10 9 0 12 -6 0 -8 24 0 30 -11 0 -13 5 blend + vhcurveto + 39 84 42 98 33 81 -10 0 -13 -4 0 -5 -8 0 -10 14 0 17 -6 0 -8 7 0 9 6 blend + rrcurveto + -20 14 -6 -2 -60 0 -75 32 0 40 -12 0 -14 -2 0 -3 4 blend + rlineto + </CharString> + </CharStrings> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=16 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.669"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="2"> + <VarRegionAxis index="0"> + <StartCoord value="0.669"/> + <PeakCoord value="0.67"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="3"> + <VarRegionAxis index="0"> + <StartCoord value="0.67"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="4"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.889"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="5"> + <VarRegionAxis index="0"> + <StartCoord value="0.889"/> + <PeakCoord value="0.89"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="6"> + <VarRegionAxis index="0"> + <StartCoord value="0.89"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="7"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.439"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="8"> + <VarRegionAxis index="0"> + <StartCoord value="0.439"/> + <PeakCoord value="0.44"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="9"> + <VarRegionAxis index="0"> + <StartCoord value="0.44"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="10"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.799"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="11"> + <VarRegionAxis index="0"> + <StartCoord value="0.799"/> + <PeakCoord value="0.8"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="12"> + <VarRegionAxis index="0"> + <StartCoord value="0.8"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="13"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.599"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="14"> + <VarRegionAxis index="0"> + <StartCoord value="0.599"/> + <PeakCoord value="0.6"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="15"> + <VarRegionAxis index="0"> + <StartCoord value="0.6"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=6 --> + <VarData index="0"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="0"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="1"/> + <VarRegionIndex index="1" value="2"/> + <VarRegionIndex index="2" value="3"/> + </VarData> + <VarData index="2"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="4"/> + <VarRegionIndex index="1" value="5"/> + <VarRegionIndex index="2" value="6"/> + </VarData> + <VarData index="3"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="7"/> + <VarRegionIndex index="1" value="8"/> + <VarRegionIndex index="2" value="9"/> + </VarData> + <VarData index="4"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="10"/> + <VarRegionIndex index="1" value="11"/> + <VarRegionIndex index="2" value="12"/> + </VarData> + <VarData index="5"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="13"/> + <VarRegionIndex index="1" value="14"/> + <VarRegionIndex index="2" value="15"/> + </VarData> + </VarStore> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF2> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <HVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=20 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.439"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.439"/> + <PeakCoord value="0.44"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="2"> + <VarRegionAxis index="0"> + <StartCoord value="0.44"/> + <PeakCoord value="0.599"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="3"> + <VarRegionAxis index="0"> + <StartCoord value="0.599"/> + <PeakCoord value="0.6"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="4"> + <VarRegionAxis index="0"> + <StartCoord value="0.6"/> + <PeakCoord value="0.669"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="5"> + <VarRegionAxis index="0"> + <StartCoord value="0.669"/> + <PeakCoord value="0.67"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="6"> + <VarRegionAxis index="0"> + <StartCoord value="0.67"/> + <PeakCoord value="0.799"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="7"> + <VarRegionAxis index="0"> + <StartCoord value="0.799"/> + <PeakCoord value="0.8"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="8"> + <VarRegionAxis index="0"> + <StartCoord value="0.8"/> + <PeakCoord value="0.889"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="9"> + <VarRegionAxis index="0"> + <StartCoord value="0.889"/> + <PeakCoord value="0.89"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="10"> + <VarRegionAxis index="0"> + <StartCoord value="0.89"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="11"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="12"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.669"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="13"> + <VarRegionAxis index="0"> + <StartCoord value="0.67"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="14"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.889"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="15"> + <VarRegionAxis index="0"> + <StartCoord value="0.44"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="16"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.799"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="17"> + <VarRegionAxis index="0"> + <StartCoord value="0.8"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="18"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.599"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="19"> + <VarRegionAxis index="0"> + <StartCoord value="0.6"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=1 --> + <VarData index="0"> + <!-- ItemCount=3 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="11"/> + <Item index="0" value="[-22]"/> + <Item index="1" value="[0]"/> + <Item index="2" value="[76]"/> + </VarData> + </VarStore> + <AdvWidthMap> + <Map glyph=".notdef" outer="0" inner="1"/> + <Map glyph="exclam" outer="0" inner="2"/> + <Map glyph="uni0000" outer="0" inner="0"/> + <Map glyph="uni50CE" outer="0" inner="1"/> + <Map glyph="uni610F" outer="0" inner="1"/> + <Map glyph="uni6A1A" outer="0" inner="1"/> + <Map glyph="uni82E8" outer="0" inner="1"/> + <Map glyph="uni8552" outer="0" inner="1"/> + <Map glyph="uni85A8" outer="0" inner="1"/> + <Map glyph="uni8E59" outer="0" inner="1"/> + <Map glyph="uni9A40" outer="0" inner="1"/> + <Map glyph="uniF9DC" outer="0" inner="1"/> + </AdvWidthMap> + </HVAR> + + <STAT> + <Version value="0x00010001"/> + <DesignAxisRecordSize value="8"/> + <!-- DesignAxisCount=1 --> + <DesignAxisRecord> + <Axis index="0"> + <AxisTag value="wght"/> + <AxisNameID value="256"/> <!-- Weight --> + <AxisOrdering value="0"/> + </Axis> + </DesignAxisRecord> + <!-- AxisValueCount=0 --> + <ElidedFallbackNameID value="2"/> <!-- Regular --> + </STAT> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <avar> + <segment axis="wght"> + <mapping from="-1.0" to="-1.0"/> + <mapping from="0.0" to="0.0"/> + <mapping from="0.1429" to="0.16"/> + <mapping from="0.2143" to="0.32"/> + <mapping from="0.2857" to="0.39"/> + <mapping from="0.4286" to="0.56"/> + <mapping from="0.7143" to="0.78"/> + <mapping from="1.0" to="1.0"/> + </segment> + </avar> + + <fvar> + + <!-- Weight --> + <Axis> + <AxisTag>wght</AxisTag> + <Flags>0x0</Flags> + <MinValue>200.0</MinValue> + <DefaultValue>200.0</DefaultValue> + <MaxValue>900.0</MaxValue> + <AxisNameID>256</AxisNameID> + </Axis> + + <!-- Kanji-w0.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w0.00 --> + <NamedInstance flags="0x0" postscriptNameID="258" subfamilyNameID="257"> + <coord axis="wght" value="200.0"/> + </NamedInstance> + + <!-- Kanji-w239.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w239.00 --> + <NamedInstance flags="0x0" postscriptNameID="260" subfamilyNameID="259"> + <coord axis="wght" value="324.6875"/> + </NamedInstance> + + <!-- Kanji-w240.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w240.00 --> + <NamedInstance flags="0x0" postscriptNameID="262" subfamilyNameID="261"> + <coord axis="wght" value="325.0"/> + </NamedInstance> + + <!-- Kanji-w439.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w439.00 --> + <NamedInstance flags="0x0" postscriptNameID="264" subfamilyNameID="263"> + <coord axis="wght" value="428.82353"/> + </NamedInstance> + + <!-- Kanji-w440.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w440.00 --> + <NamedInstance flags="0x0" postscriptNameID="266" subfamilyNameID="265"> + <coord axis="wght" value="429.41176"/> + </NamedInstance> + + <!-- Kanji-w499.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w499.00 --> + <NamedInstance flags="0x0" postscriptNameID="268" subfamilyNameID="267"> + <coord axis="wght" value="464.11765"/> + </NamedInstance> + + <!-- Kanji-w500.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w500.00 --> + <NamedInstance flags="0x0" postscriptNameID="270" subfamilyNameID="269"> + <coord axis="wght" value="464.70589"/> + </NamedInstance> + + <!-- Kanji-w599.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w599.00 --> + <NamedInstance flags="0x0" postscriptNameID="272" subfamilyNameID="271"> + <coord axis="wght" value="535.45454"/> + </NamedInstance> + + <!-- Kanji-w600.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w600.00 --> + <NamedInstance flags="0x0" postscriptNameID="274" subfamilyNameID="273"> + <coord axis="wght" value="536.36363"/> + </NamedInstance> + + <!-- Kanji-w669.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w669.00 --> + <NamedInstance flags="0x0" postscriptNameID="276" subfamilyNameID="275"> + <coord axis="wght" value="599.09091"/> + </NamedInstance> + + <!-- Kanji-w670.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w670.00 --> + <NamedInstance flags="0x0" postscriptNameID="278" subfamilyNameID="277"> + <coord axis="wght" value="600.0"/> + </NamedInstance> + + <!-- Kanji-w699.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w699.00 --> + <NamedInstance flags="0x0" postscriptNameID="280" subfamilyNameID="279"> + <coord axis="wght" value="626.36363"/> + </NamedInstance> + + <!-- Kanji-w700.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w700.00 --> + <NamedInstance flags="0x0" postscriptNameID="282" subfamilyNameID="281"> + <coord axis="wght" value="627.27272"/> + </NamedInstance> + + <!-- Kanji-799.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-799.00 --> + <NamedInstance flags="0x0" postscriptNameID="284" subfamilyNameID="283"> + <coord axis="wght" value="717.27272"/> + </NamedInstance> + + <!-- Kanji-w800.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w800.00 --> + <NamedInstance flags="0x0" postscriptNameID="286" subfamilyNameID="285"> + <coord axis="wght" value="718.18182"/> + </NamedInstance> + + <!-- Kanji-w889.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w889.00 --> + <NamedInstance flags="0x0" postscriptNameID="288" subfamilyNameID="287"> + <coord axis="wght" value="799.09091"/> + </NamedInstance> + + <!-- Kanji-w890.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w890.00 --> + <NamedInstance flags="0x0" postscriptNameID="290" subfamilyNameID="289"> + <coord axis="wght" value="800.0"/> + </NamedInstance> + + <!-- Kanji-w1000.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w1000.00 --> + <NamedInstance flags="0x0" postscriptNameID="292" subfamilyNameID="291"> + <coord axis="wght" value="900.0"/> + </NamedInstance> + </fvar> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="exclam" height="1000" tsb="125"/> + <mtx name="uni0000" height="1000" tsb="880"/> + <mtx name="uni50CE" height="1000" tsb="49"/> + <mtx name="uni610F" height="1000" tsb="40"/> + <mtx name="uni6A1A" height="1000" tsb="40"/> + <mtx name="uni82E8" height="1000" tsb="41"/> + <mtx name="uni8552" height="1000" tsb="41"/> + <mtx name="uni85A8" height="1000" tsb="41"/> + <mtx name="uni8E59" height="1000" tsb="40"/> + <mtx name="uni9A40" height="1000" tsb="41"/> + <mtx name="uniF9DC" height="1000" tsb="39"/> + </vmtx> + +</ttFont> diff --git a/Tests/cffLib/specializer_test.py b/Tests/cffLib/specializer_test.py index 912e66ee..a52c9269 100644 --- a/Tests/cffLib/specializer_test.py +++ b/Tests/cffLib/specializer_test.py @@ -1,7 +1,13 @@ from __future__ import print_function, division, absolute_import from fontTools.cffLib.specializer import (programToString, stringToProgram, - generalizeProgram, specializeProgram) + generalizeProgram, specializeProgram, + programToCommands, commandsToProgram, + generalizeCommands, + specializeCommands) +from fontTools.ttLib import TTFont +import os import unittest +from fontTools.misc.testTools import parseXML, DataFilesHandler # TODO # https://github.com/fonttools/fonttools/pull/959#commitcomment-22059841 @@ -913,6 +919,30 @@ class CFFSpecializeProgramTest(unittest.TestCase): self.assertEqual(get_specialized_charstr(test_charstr), xpct_charstr) +class CFF2VFTestSpecialize(DataFilesHandler): + + def test_blend_round_trip(self): + ttx_path = self.getpath('TestSparseCFF2VF.ttx') + ttf_font = TTFont(recalcBBoxes=False, recalcTimestamp=False) + ttf_font.importXML(ttx_path) + fontGlyphList = ttf_font.getGlyphOrder() + topDict = ttf_font['CFF2'].cff.topDictIndex[0] + charstrings = topDict.CharStrings + for glyphName in fontGlyphList: + cs = charstrings[glyphName] + cs.decompile() + cmds = programToCommands(cs.program, getNumRegions=cs.getNumRegions) + cmds_g = generalizeCommands(cmds) + cmds = specializeCommands(cmds_g, generalizeFirst=False) + program = commandsToProgram(cmds) + self.assertEqual(program, cs.program) + program = specializeProgram(program, getNumRegions=cs.getNumRegions) + self.assertEqual(program, cs.program) + program_g = generalizeProgram(program, getNumRegions=cs.getNumRegions) + program = commandsToProgram(cmds_g) + self.assertEqual(program, program_g) + + if __name__ == "__main__": import sys sys.exit(unittest.main()) diff --git a/Tests/designspaceLib/designspace_test.py b/Tests/designspaceLib/designspace_test.py index 2d01c659..608ffb1c 100644 --- a/Tests/designspaceLib/designspace_test.py +++ b/Tests/designspaceLib/designspace_test.py @@ -13,6 +13,7 @@ from fontTools.misc import plistlib from fontTools.designspaceLib import ( DesignSpaceDocument, SourceDescriptor, AxisDescriptor, RuleDescriptor, InstanceDescriptor, evaluateRule, processRules, posix, DesignSpaceDocumentError) +from fontTools import ttLib def _axesAsDict(axes): """ @@ -905,3 +906,46 @@ def test_findDefault_axis_mapping(): """ designspace = DesignSpaceDocument.fromstring(designspace_string) assert designspace.findDefault().filename == "Font-Italic.ufo" + + designspace.axes[1].default = 0 + + assert designspace.findDefault().filename == "Font-Regular.ufo" + + +def test_loadSourceFonts(): + + def opener(path): + font = ttLib.TTFont() + font.importXML(path) + return font + + # this designspace file contains .TTX source paths + path = os.path.join( + os.path.dirname(os.path.dirname(__file__)), + "varLib", + "data", + "SparseMasters.designspace" + ) + designspace = DesignSpaceDocument.fromfile(path) + + # force two source descriptors to have the same path + designspace.sources[1].path = designspace.sources[0].path + + fonts = designspace.loadSourceFonts(opener) + + assert len(fonts) == 3 + assert all(isinstance(font, ttLib.TTFont) for font in fonts) + assert fonts[0] is fonts[1] # same path, identical font object + + fonts2 = designspace.loadSourceFonts(opener) + + for font1, font2 in zip(fonts, fonts2): + assert font1 is font2 + + +def test_loadSourceFonts_no_required_path(): + designspace = DesignSpaceDocument() + designspace.sources.append(SourceDescriptor()) + + with pytest.raises(DesignSpaceDocumentError, match="no 'path' attribute"): + designspace.loadSourceFonts(lambda p: p) diff --git a/Tests/feaLib/ast_test.py b/Tests/feaLib/ast_test.py index 7a43d7bf..54bd5b3e 100644 --- a/Tests/feaLib/ast_test.py +++ b/Tests/feaLib/ast_test.py @@ -11,6 +11,10 @@ class AstTest(unittest.TestCase): statement.append(ast.GlyphName(name)) self.assertEqual(statement.asFea(), r"[\BASE \NULL foo a]") + def test_valuerecord_none(self): + statement = ast.ValueRecord(xPlacement=10, xAdvance=20) + self.assertEqual(statement.asFea(), "<10 0 20 0>") + if __name__ == "__main__": import sys diff --git a/Tests/feaLib/data/GPOS_1.ttx b/Tests/feaLib/data/GPOS_1.ttx index bd320136..1a24f0b2 100644 --- a/Tests/feaLib/data/GPOS_1.ttx +++ b/Tests/feaLib/data/GPOS_1.ttx @@ -40,39 +40,36 @@ <Lookup index="0"> <LookupType value="1"/> <LookupFlag value="0"/> - <!-- SubTableCount=8 --> - <SinglePos index="0" Format="1"> - <Coverage> - <Glyph value="one"/> - <Glyph value="two"/> - <Glyph value="three"/> - <Glyph value="five"/> - </Coverage> - <ValueFormat value="5"/> - <Value XPlacement="-80" XAdvance="-160"/> - </SinglePos> - <SinglePos index="1" Format="2"> + <!-- SubTableCount=7 --> + <SinglePos index="0" Format="2"> <Coverage> <Glyph value="four"/> <Glyph value="six"/> + <Glyph value="seven"/> + <Glyph value="eight"/> + <Glyph value="nine"/> <Glyph value="four.oldstyle"/> </Coverage> <ValueFormat value="4"/> - <!-- ValueCount=3 --> + <!-- ValueCount=6 --> <Value index="0" XAdvance="400"/> <Value index="1" XAdvance="-200"/> - <Value index="2" XAdvance="401"/> + <Value index="2" XAdvance="-100"/> + <Value index="3" XAdvance="-100"/> + <Value index="4" XAdvance="-100"/> + <Value index="5" XAdvance="401"/> </SinglePos> - <SinglePos index="2" Format="1"> + <SinglePos index="1" Format="1"> <Coverage> - <Glyph value="seven"/> - <Glyph value="eight"/> - <Glyph value="nine"/> + <Glyph value="one"/> + <Glyph value="two"/> + <Glyph value="three"/> + <Glyph value="five"/> </Coverage> - <ValueFormat value="4"/> - <Value XAdvance="-100"/> + <ValueFormat value="5"/> + <Value XPlacement="-80" XAdvance="-160"/> </SinglePos> - <SinglePos index="3" Format="2"> + <SinglePos index="2" Format="2"> <Coverage> <Glyph value="P"/> <Glyph value="Q"/> @@ -84,7 +81,7 @@ <Value index="1" XPlacement="1" XAdvance="801"/> <Value index="2" XPlacement="1" XAdvance="802"/> </SinglePos> - <SinglePos index="4" Format="2"> + <SinglePos index="3" Format="2"> <Coverage> <Glyph value="S"/> <Glyph value="T"/> @@ -96,7 +93,7 @@ <Value index="1" XPlacement="1" YPlacement="1" XAdvance="804"/> <Value index="2" XPlacement="1" YPlacement="1" XAdvance="805"/> </SinglePos> - <SinglePos index="5" Format="1"> + <SinglePos index="4" Format="1"> <Coverage> <Glyph value="A"/> <Glyph value="B"/> @@ -123,13 +120,13 @@ </XAdvDevice> </Value> </SinglePos> - <SinglePos index="6" Format="1"> + <SinglePos index="5" Format="1"> <Coverage> <Glyph value="zero"/> </Coverage> <ValueFormat value="0"/> </SinglePos> - <SinglePos index="7" Format="1"> + <SinglePos index="6" Format="1"> <Coverage> <Glyph value="C"/> </Coverage> diff --git a/Tests/feaLib/parser_test.py b/Tests/feaLib/parser_test.py index 98ac1014..9343495a 100644 --- a/Tests/feaLib/parser_test.py +++ b/Tests/feaLib/parser_test.py @@ -1185,7 +1185,7 @@ class ParserTest(unittest.TestCase): self.assertRaisesRegex( FeatureLibError, 'In reverse chaining single substitutions, the replacement ' - '\(after "by"\) must be a single glyph or glyph class', + r'\(after "by"\) must be a single glyph or glyph class', self.parse, "feature test {rsub f_i by f i;} test;") def test_script(self): diff --git a/Tests/fontBuilder/data/test.otf.ttx b/Tests/fontBuilder/data/test.otf.ttx index 4c9a2a75..76ebb177 100644 --- a/Tests/fontBuilder/data/test.otf.ttx +++ b/Tests/fontBuilder/data/test.otf.ttx @@ -233,6 +233,57 @@ </GlobalSubrs> </CFF> + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="kern"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="2"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <PairPos index="0" Format="1"> + <Coverage Format="1"> + <Glyph value="A"/> + </Coverage> + <ValueFormat1 value="4"/> + <ValueFormat2 value="0"/> + <!-- PairSetCount=1 --> + <PairSet index="0"> + <!-- PairValueCount=1 --> + <PairValueRecord index="0"> + <SecondGlyph value="a"/> + <Value1 XAdvance="-50"/> + </PairValueRecord> + </PairSet> + </PairPos> + </Lookup> + </LookupList> + </GPOS> + <hmtx> <mtx name=".notdef" width="600" lsb="100"/> <mtx name=".null" width="600" lsb="100"/> diff --git a/Tests/fontBuilder/data/test.ttf.ttx b/Tests/fontBuilder/data/test.ttf.ttx index b2804ccd..28e179e0 100644 --- a/Tests/fontBuilder/data/test.ttf.ttx +++ b/Tests/fontBuilder/data/test.ttf.ttx @@ -119,7 +119,7 @@ <sCapHeight value="0"/> <usDefaultChar value="0"/> <usBreakChar value="32"/> - <usMaxContext value="2"/> + <usMaxContext value="1"/> </OS_2> <hmtx> @@ -257,6 +257,45 @@ </extraNames> </post> + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="salt"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="A" out="a"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + <DSIG> <!-- note that the Digital Signature will be invalid after recompilation! --> <tableHeader flag="0x1" numSigs="1" version="1"/> diff --git a/Tests/fontBuilder/data/test_var.otf.ttx b/Tests/fontBuilder/data/test_var.otf.ttx index c9465d23..e00d33c5 100644 --- a/Tests/fontBuilder/data/test_var.otf.ttx +++ b/Tests/fontBuilder/data/test_var.otf.ttx @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<ttFont sfntVersion="OTTO" ttLibVersion="3.33"> +<ttFont sfntVersion="OTTO" ttLibVersion="3.38"> <GlyphOrder> <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> <GlyphID id="0" name=".notdef"/> - <GlyphID id="1" name="glyph00001"/> + <GlyphID id="1" name=".null"/> <GlyphID id="2" name="A"/> <GlyphID id="3" name="a"/> </GlyphOrder> @@ -13,12 +13,12 @@ <!-- Most of this table will be recalculated by the compiler --> <tableVersion value="1.0"/> <fontRevision value="1.0"/> - <checkSumAdjustment value="0xed07360f"/> + <checkSumAdjustment value="0x79eab779"/> <magicNumber value="0x5f0f3cf5"/> <flags value="00000000 00000011"/> <unitsPerEm value="1000"/> - <created value="Wed Dec 5 11:55:26 2018"/> - <modified value="Wed Dec 5 11:55:26 2018"/> + <created value="Wed Mar 27 00:23:21 2019"/> + <modified value="Wed Mar 27 00:23:21 2019"/> <xMin value="0"/> <yMin value="0"/> <xMax value="0"/> @@ -105,14 +105,14 @@ <sCapHeight value="0"/> <usDefaultChar value="0"/> <usBreakChar value="32"/> - <usMaxContext value="2"/> + <usMaxContext value="0"/> </OS_2> <hmtx> <mtx name=".notdef" width="600" lsb="0"/> + <mtx name=".null" width="600" lsb="0"/> <mtx name="A" width="600" lsb="0"/> <mtx name="a" width="600" lsb="0"/> - <mtx name="glyph00001" width="600" lsb="0"/> </hmtx> <cmap> @@ -179,7 +179,7 @@ </name> <post> - <formatType value="3.0"/> + <formatType value="2.0"/> <italicAngle value="0.0"/> <underlinePosition value="0"/> <underlineThickness value="0"/> @@ -188,6 +188,18 @@ <maxMemType42 value="0"/> <minMemType1 value="0"/> <maxMemType1 value="0"/> + <psNames> + <!-- This file uses unique glyph names based on the information + found in the 'post' table. Since these names might not be unique, + we have to invent artificial names in case of clashes. In order to + be able to retain the original information, we need a name to + ps name mapping for those cases where they differ. That's what + you see below. + --> + </psNames> + <extraNames> + <!-- following are the name that are not taken from the standard Mac glyph order --> + </extraNames> </post> <CFF2> @@ -212,6 +224,13 @@ 67 66 33 67 67 hvcurveto -900 vlineto </CharString> + <CharString name=".null"> + 100 100 rmoveto + 900 vlineto + -67 67 66 -33 67 hhcurveto + 67 66 33 67 67 hvcurveto + -900 vlineto + </CharString> <CharString name="A"> 100 100 rmoveto 900 vlineto @@ -229,13 +248,6 @@ -400 -400 1 blend hlineto </CharString> - <CharString name="glyph00001"> - 100 100 rmoveto - 900 vlineto - -67 67 66 -33 67 hhcurveto - 67 66 33 67 67 hvcurveto - -900 vlineto - </CharString> </CharStrings> <VarStore Format="1"> <Format value="1"/> diff --git a/Tests/fontBuilder/data/test_var.ttf.ttx b/Tests/fontBuilder/data/test_var.ttf.ttx index 760e65a5..54ddfb06 100644 --- a/Tests/fontBuilder/data/test_var.ttf.ttx +++ b/Tests/fontBuilder/data/test_var.ttf.ttx @@ -119,7 +119,7 @@ <sCapHeight value="0"/> <usDefaultChar value="0"/> <usBreakChar value="32"/> - <usMaxContext value="2"/> + <usMaxContext value="0"/> </OS_2> <hmtx> diff --git a/Tests/fontBuilder/fontBuilder_test.py b/Tests/fontBuilder/fontBuilder_test.py index 97d7cb6a..30952846 100644 --- a/Tests/fontBuilder/fontBuilder_test.py +++ b/Tests/fontBuilder/fontBuilder_test.py @@ -2,14 +2,13 @@ from __future__ import print_function, division, absolute_import from __future__ import unicode_literals import os -import shutil +import pytest import re from fontTools.ttLib import TTFont from fontTools.pens.ttGlyphPen import TTGlyphPen from fontTools.pens.t2CharStringPen import T2CharStringPen from fontTools.fontBuilder import FontBuilder from fontTools.ttLib.tables.TupleVariation import TupleVariation -from fontTools.ttLib.tables._g_l_y_f import GlyphCoordinates from fontTools.misc.psCharStrings import T2CharString @@ -53,6 +52,43 @@ def _setupFontBuilder(isTTF, unitsPerEm=1024): return fb, advanceWidths, nameStrings +def _setupFontBuilderFvar(fb): + assert 'name' in fb.font, 'Must run setupNameTable() first.' + + axes = [ + ('TEST', 0, 0, 100, "Test Axis"), + ] + instances = [ + dict(location=dict(TEST=0), stylename="TotallyNormal"), + dict(location=dict(TEST=100), stylename="TotallyTested"), + ] + fb.setupFvar(axes, instances) + + return fb + + +def _setupFontBuilderCFF2(fb): + assert 'fvar' in fb.font, 'Must run _setupFontBuilderFvar() first.' + + pen = T2CharStringPen(None, None, CFF2=True) + drawTestGlyph(pen) + charString = pen.getCharString() + + program = [ + 200, 200, -200, -200, 2, "blend", "rmoveto", + 400, 400, 1, "blend", "hlineto", + 400, 400, 1, "blend", "vlineto", + -400, -400, 1, "blend", "hlineto" + ] + charStringVariable = T2CharString(program=program) + + charStrings = {".notdef": charString, "A": charString, + "a": charStringVariable, ".null": charString} + fb.setupCFF2(charStrings, regions=[{"TEST": (0, 1, 1)}]) + + return fb + + def _verifyOutput(outPath, tables=None): f = TTFont(outPath) f.saveXML(outPath + ".ttx", tables=tables) @@ -81,6 +117,7 @@ def test_build_ttf(tmpdir): fb.setupHorizontalHeader(ascent=824, descent=200) fb.setupNameTable(nameStrings) fb.setupOS2() + fb.addOpenTypeFeatures("feature salt { sub A by a; } salt;") fb.setupPost() fb.setupDummyDSIG() @@ -99,14 +136,17 @@ def test_build_otf(tmpdir): charString = pen.getCharString() charStrings = {".notdef": charString, "A": charString, "a": charString, ".null": charString} fb.setupCFF(nameStrings['psName'], {"FullName": nameStrings['psName']}, charStrings, {}) + + lsb = {gn: cs.calcBounds(None)[0] for gn, cs in charStrings.items()} metrics = {} for gn, advanceWidth in advanceWidths.items(): - metrics[gn] = (advanceWidth, 100) # XXX lsb from glyph + metrics[gn] = (advanceWidth, lsb[gn]) fb.setupHorizontalMetrics(metrics) fb.setupHorizontalHeader(ascent=824, descent=200) fb.setupNameTable(nameStrings) fb.setupOS2() + fb.addOpenTypeFeatures("feature kern { pos A a -50; } kern;") fb.setupPost() fb.setupDummyDSIG() @@ -118,17 +158,7 @@ def test_build_otf(tmpdir): def test_build_var(tmpdir): outPath = os.path.join(str(tmpdir), "test_var.ttf") - fb = FontBuilder(1024, isTTF=True) - fb.setupGlyphOrder([".notdef", ".null", "A", "a"]) - fb.setupCharacterMap({65: "A", 97: "a"}) - - advanceWidths = {".notdef": 600, "A": 600, "a": 600, ".null": 600} - - familyName = "HelloTestFont" - styleName = "TotallyNormal" - nameStrings = dict(familyName=dict(en="HelloTestFont", nl="HalloTestFont"), - styleName=dict(en="TotallyNormal", nl="TotaalNormaal")) - nameStrings['psName'] = familyName + "-" + styleName + fb, advanceWidths, nameStrings = _setupFontBuilder(True) pen = TTGlyphPen(None) pen.moveTo((100, 0)) @@ -191,32 +221,9 @@ def test_build_cff2(tmpdir): outPath = os.path.join(str(tmpdir), "test_var.otf") fb, advanceWidths, nameStrings = _setupFontBuilder(False, 1000) - fb.setupNameTable(nameStrings) - - axes = [ - ('TEST', 0, 0, 100, "Test Axis"), - ] - instances = [ - dict(location=dict(TEST=0), stylename="TotallyNormal"), - dict(location=dict(TEST=100), stylename="TotallyTested"), - ] - fb.setupFvar(axes, instances) - - pen = T2CharStringPen(None, None, CFF2=True) - drawTestGlyph(pen) - charString = pen.getCharString() - - program = [ - 200, 200, -200, -200, 2, "blend", "rmoveto", - 400, 400, 1, "blend", "hlineto", - 400, 400, 1, "blend", "vlineto", - -400, -400, 1, "blend", "hlineto" - ] - charStringVariable = T2CharString(program=program) - - charStrings = {".notdef": charString, "A": charString, "a": charStringVariable, ".null": charString} - fb.setupCFF2(charStrings, regions=[{"TEST": (0, 1, 1)}]) + fb = _setupFontBuilderFvar(fb) + fb = _setupFontBuilderCFF2(fb) metrics = {gn: (advanceWidth, 0) for gn, advanceWidth in advanceWidths.items()} fb.setupHorizontalMetrics(metrics) @@ -246,6 +253,31 @@ def test_setupNameTable_no_windows(): assert not any(n for n in fb.font["name"].names if n.platformID == 3) +@pytest.mark.parametrize('is_ttf, keep_glyph_names, make_cff2, post_format', [ + (True, True, False, 2), # TTF with post table format 2.0 + (True, False, False, 3), # TTF with post table format 3.0 + (False, True, False, 3), # CFF with post table format 3.0 + (False, False, False, 3), # CFF with post table format 3.0 + (False, True, True, 2), # CFF2 with post table format 2.0 + (False, False, True, 3), # CFF2 with post table format 3.0 +]) +def test_setupPost(is_ttf, keep_glyph_names, make_cff2, post_format): + fb, _, nameStrings = _setupFontBuilder(is_ttf) + + if make_cff2: + fb.setupNameTable(nameStrings) + fb = _setupFontBuilderCFF2(_setupFontBuilderFvar(fb)) + + if keep_glyph_names: + fb.setupPost() + else: + fb.setupPost(keepGlyphNames=keep_glyph_names) + + assert fb.isTTF is is_ttf + assert ('CFF2' in fb.font) is make_cff2 + assert fb.font["post"].formatType == post_format + + def test_unicodeVariationSequences(tmpdir): familyName = "UVSTestFont" styleName = "Regular" diff --git a/Tests/misc/arrayTools_test.py b/Tests/misc/arrayTools_test.py index 108b50da..2610c0fc 100644 --- a/Tests/misc/arrayTools_test.py +++ b/Tests/misc/arrayTools_test.py @@ -1,5 +1,6 @@ from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * +from fontTools.misc.py23 import round3 from fontTools.misc.arrayTools import ( calcBounds, calcIntBounds, updateBounds, pointInRect, pointsInRect, vectorLength, asInt16, normRect, scaleRect, offsetRect, insetRect, @@ -15,8 +16,13 @@ def test_calcBounds(): def test_calcIntBounds(): assert calcIntBounds( - [(0.1, 40.1), (0.1, 100.1), (49.9, 49.9), (79.5, 9.5)] - ) == (0, 10, 80, 100) + [(0.1, 40.1), (0.1, 100.1), (49.9, 49.9), (78.5, 9.5)] + ) == (0, 10, 79, 100) + + assert calcIntBounds( + [(0.1, 40.1), (0.1, 100.1), (49.9, 49.9), (78.5, 9.5)], + round=round3 + ) == (0, 10, 78, 100) def test_updateBounds(): diff --git a/Tests/misc/loggingTools_test.py b/Tests/misc/loggingTools_test.py index b402efa5..18b71b19 100644 --- a/Tests/misc/loggingTools_test.py +++ b/Tests/misc/loggingTools_test.py @@ -89,7 +89,7 @@ class TimerTest(object): time.sleep(0.01) assert re.match( - "Took [0-9]\.[0-9]{3}s to do something", + r"Took [0-9]\.[0-9]{3}s to do something", logger.handlers[0].stream.getvalue()) def test_using_logger_calling_instance(self, logger): @@ -98,7 +98,7 @@ class TimerTest(object): time.sleep(0.01) assert re.match( - "elapsed time: [0-9]\.[0-9]{3}s", + r"elapsed time: [0-9]\.[0-9]{3}s", logger.handlers[0].stream.getvalue()) # do it again but with custom level @@ -106,7 +106,7 @@ class TimerTest(object): time.sleep(0.02) assert re.search( - "WARNING: Took [0-9]\.[0-9]{3}s to redo it", + r"WARNING: Took [0-9]\.[0-9]{3}s to redo it", logger.handlers[0].stream.getvalue()) def test_function_decorator(self, logger): diff --git a/Tests/otlLib/builder_test.py b/Tests/otlLib/builder_test.py index 63a35d61..0829176c 100644 --- a/Tests/otlLib/builder_test.py +++ b/Tests/otlLib/builder_test.py @@ -913,24 +913,21 @@ class BuilderTest(unittest.TestCase): "six": builder.buildValue({"YPlacement": -6}), }, self.GLYPHMAP) self.assertEqual(sum([getXML(t.toXML) for t in subtables], []), - ['<SinglePos Format="1">', + ['<SinglePos Format="2">', ' <Coverage>', ' <Glyph value="one"/>', ' <Glyph value="two"/>', - ' <Glyph value="five"/>', - ' </Coverage>', - ' <ValueFormat value="1"/>', - ' <Value XPlacement="500"/>', - '</SinglePos>', - '<SinglePos Format="2">', - ' <Coverage>', ' <Glyph value="three"/>', ' <Glyph value="four"/>', + ' <Glyph value="five"/>', ' </Coverage>', ' <ValueFormat value="1"/>', - ' <!-- ValueCount=2 -->', - ' <Value index="0" XPlacement="200"/>', - ' <Value index="1" XPlacement="400"/>', + ' <!-- ValueCount=5 -->', + ' <Value index="0" XPlacement="500"/>', + ' <Value index="1" XPlacement="500"/>', + ' <Value index="2" XPlacement="200"/>', + ' <Value index="3" XPlacement="400"/>', + ' <Value index="4" XPlacement="500"/>', '</SinglePos>', '<SinglePos Format="1">', ' <Coverage>', diff --git a/Tests/otlLib/data/gpos_91.ttx b/Tests/otlLib/data/gpos_91.ttx new file mode 100644 index 00000000..ee7bf7c2 --- /dev/null +++ b/Tests/otlLib/data/gpos_91.ttx @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="A"/> + </GlyphOrder> + + <maxp> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="0x10000"/> + <numGlyphs value="2"/> + <maxPoints value="0"/> + <maxContours value="0"/> + <maxCompositePoints value="0"/> + <maxCompositeContours value="0"/> + <maxZones value="2"/> + <maxTwilightPoints value="0"/> + <maxStorage value="0"/> + <maxFunctionDefs value="0"/> + <maxInstructionDefs value="0"/> + <maxStackElements value="0"/> + <maxSizeOfInstructions value="0"/> + <maxComponentElements value="0"/> + <maxComponentDepth value="0"/> + </maxp> + + <post> + <formatType value="2.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="0"/> + <underlineThickness value="0"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + <psNames> + <!-- This file uses unique glyph names based on the information + found in the 'post' table. Since these names might not be unique, + we have to invent artificial names in case of clashes. In order to + be able to retain the original information, we need a name to + ps name mapping for those cases where they differ. That's what + you see below. + --> + </psNames> + <extraNames> + <!-- following are the name that are not taken from the standard Mac glyph order --> + </extraNames> + </post> + + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="latn"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="9"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <ExtensionPos index="0" Format="1"> + <ExtensionLookupType value="1"/> + <SinglePos Format="1"> + <Coverage Format="1"> + <Glyph value="A"/> + </Coverage> + <ValueFormat value="4"/> + <Value XAdvance="20"/> + </SinglePos> + </ExtensionPos> + </Lookup> + </LookupList> + </GPOS> + +</ttFont> diff --git a/Tests/otlLib/data/gsub_51.ttx b/Tests/otlLib/data/gsub_51.ttx new file mode 100644 index 00000000..280582c9 --- /dev/null +++ b/Tests/otlLib/data/gsub_51.ttx @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="g20"/> + <GlyphID id="2" name="g21"/> + <GlyphID id="3" name="g22"/> + <GlyphID id="4" name="g60"/> + <GlyphID id="5" name="g61"/> + <GlyphID id="6" name="g62"/> + <GlyphID id="7" name="g63"/> + </GlyphOrder> + + <maxp> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="0x10000"/> + <numGlyphs value="8"/> + <maxPoints value="0"/> + <maxContours value="0"/> + <maxCompositePoints value="0"/> + <maxCompositeContours value="0"/> + <maxZones value="2"/> + <maxTwilightPoints value="0"/> + <maxStorage value="0"/> + <maxFunctionDefs value="0"/> + <maxInstructionDefs value="0"/> + <maxStackElements value="0"/> + <maxSizeOfInstructions value="0"/> + <maxComponentElements value="0"/> + <maxComponentDepth value="0"/> + </maxp> + + <post> + <formatType value="2.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="0"/> + <underlineThickness value="0"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + <psNames> + <!-- This file uses unique glyph names based on the information + found in the 'post' table. Since these names might not be unique, + we have to invent artificial names in case of clashes. In order to + be able to retain the original information, we need a name to + ps name mapping for those cases where they differ. That's what + you see below. + --> + </psNames> + <extraNames> + <!-- following are the name that are not taken from the standard Mac glyph order --> + </extraNames> + </post> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="latn"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="4"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=5 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="g20" out="g60"/> + <Substitution in="g21" out="g61"/> + </SingleSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="4"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <LigatureSubst index="0" Format="1"> + <LigatureSet glyph="g21"> + <Ligature components="g22" glyph="g61"/> + </LigatureSet> + </LigatureSubst> + </Lookup> + <Lookup index="2"> + <LookupType value="4"/> + <LookupFlag value="8"/> + <!-- SubTableCount=1 --> + <LigatureSubst index="0" Format="1"> + <LigatureSet glyph="g21"> + <Ligature components="g22" glyph="g61"/> + </LigatureSet> + </LigatureSubst> + </Lookup> + <Lookup index="3"> + <LookupType value="2"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <MultipleSubst index="0" Format="1"> + <Substitution in="g21" out="g61,g62,g63"/> + </MultipleSubst> + </Lookup> + <Lookup index="4"> + <LookupType value="5"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <ContextSubst index="0" Format="1"> + <Coverage Format="1"> + <Glyph value="g20"/> + </Coverage> + <!-- SubRuleSetCount=1 --> + <SubRuleSet index="0"> + <!-- SubRuleCount=1 --> + <SubRule index="0"> + <!-- GlyphCount=2 --> + <!-- SubstCount=0 --> + <Input index="0" value="g20"/> + </SubRule> + </SubRuleSet> + </ContextSubst> + </Lookup> + </LookupList> + </GSUB> + +</ttFont> diff --git a/Tests/otlLib/data/gsub_52.ttx b/Tests/otlLib/data/gsub_52.ttx new file mode 100644 index 00000000..189178c3 --- /dev/null +++ b/Tests/otlLib/data/gsub_52.ttx @@ -0,0 +1,150 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="g20"/> + <GlyphID id="2" name="g21"/> + <GlyphID id="3" name="g22"/> + <GlyphID id="4" name="g60"/> + <GlyphID id="5" name="g61"/> + <GlyphID id="6" name="g62"/> + <GlyphID id="7" name="g63"/> + </GlyphOrder> + + <maxp> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="0x10000"/> + <numGlyphs value="8"/> + <maxPoints value="0"/> + <maxContours value="0"/> + <maxCompositePoints value="0"/> + <maxCompositeContours value="0"/> + <maxZones value="2"/> + <maxTwilightPoints value="0"/> + <maxStorage value="0"/> + <maxFunctionDefs value="0"/> + <maxInstructionDefs value="0"/> + <maxStackElements value="0"/> + <maxSizeOfInstructions value="0"/> + <maxComponentElements value="0"/> + <maxComponentDepth value="0"/> + </maxp> + + <post> + <formatType value="2.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="0"/> + <underlineThickness value="0"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + <psNames> + <!-- This file uses unique glyph names based on the information + found in the 'post' table. Since these names might not be unique, + we have to invent artificial names in case of clashes. In order to + be able to retain the original information, we need a name to + ps name mapping for those cases where they differ. That's what + you see below. + --> + </psNames> + <extraNames> + <!-- following are the name that are not taken from the standard Mac glyph order --> + </extraNames> + </post> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="latn"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="4"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=5 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="g20" out="g60"/> + <Substitution in="g21" out="g61"/> + </SingleSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="4"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <LigatureSubst index="0" Format="1"> + <LigatureSet glyph="g21"> + <Ligature components="g22" glyph="g61"/> + </LigatureSet> + </LigatureSubst> + </Lookup> + <Lookup index="2"> + <LookupType value="4"/> + <LookupFlag value="8"/> + <!-- SubTableCount=1 --> + <LigatureSubst index="0" Format="1"> + <LigatureSet glyph="g21"> + <Ligature components="g22" glyph="g61"/> + </LigatureSet> + </LigatureSubst> + </Lookup> + <Lookup index="3"> + <LookupType value="2"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <MultipleSubst index="0" Format="1"> + <Substitution in="g21" out="g61,g62,g63"/> + </MultipleSubst> + </Lookup> + <Lookup index="4"> + <LookupType value="5"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <ContextSubst index="0" Format="2"> + <Coverage Format="1"> + <Glyph value="g20"/> + </Coverage> + <ClassDef Format="2"> + <ClassDef glyph="g20" class="1"/> + </ClassDef> + <!-- SubClassSetCount=2 --> + <SubClassSet index="0" empty="1"/> + <SubClassSet index="1"> + <!-- SubClassRuleCount=1 --> + <SubClassRule index="0"> + <!-- GlyphCount=2 --> + <!-- SubstCount=0 --> + <Class index="0" value="1"/> + </SubClassRule> + </SubClassSet> + </ContextSubst> + </Lookup> + </LookupList> + </GSUB> + +</ttFont> diff --git a/Tests/otlLib/data/gsub_71.ttx b/Tests/otlLib/data/gsub_71.ttx new file mode 100644 index 00000000..201de4cb --- /dev/null +++ b/Tests/otlLib/data/gsub_71.ttx @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="g18"/> + <GlyphID id="2" name="g19"/> + <GlyphID id="3" name="g23"/> + <GlyphID id="4" name="g24"/> + </GlyphOrder> + + <maxp> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="0x10000"/> + <numGlyphs value="5"/> + <maxPoints value="0"/> + <maxContours value="0"/> + <maxCompositePoints value="0"/> + <maxCompositeContours value="0"/> + <maxZones value="2"/> + <maxTwilightPoints value="0"/> + <maxStorage value="0"/> + <maxFunctionDefs value="0"/> + <maxInstructionDefs value="0"/> + <maxStackElements value="0"/> + <maxSizeOfInstructions value="0"/> + <maxComponentElements value="0"/> + <maxComponentDepth value="0"/> + </maxp> + + <post> + <formatType value="2.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="0"/> + <underlineThickness value="0"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + <psNames> + <!-- This file uses unique glyph names based on the information + found in the 'post' table. Since these names might not be unique, + we have to invent artificial names in case of clashes. In order to + be able to retain the original information, we need a name to + ps name mapping for those cases where they differ. That's what + you see below. + --> + </psNames> + <extraNames> + <!-- following are the name that are not taken from the standard Mac glyph order --> + </extraNames> + </post> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="latn"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="7"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <ExtensionSubst index="0" Format="1"> + <ExtensionLookupType value="1"/> + <SingleSubst Format="1"> + <Substitution in="g18" out="g23"/> + <Substitution in="g19" out="g24"/> + </SingleSubst> + </ExtensionSubst> + </Lookup> + </LookupList> + </GSUB> + +</ttFont> diff --git a/Tests/otlLib/maxContextCalc_test.py b/Tests/otlLib/maxContextCalc_test.py new file mode 100644 index 00000000..759b30dd --- /dev/null +++ b/Tests/otlLib/maxContextCalc_test.py @@ -0,0 +1,76 @@ +from __future__ import print_function, division, absolute_import +from __future__ import unicode_literals + +import os +import pytest +from fontTools.ttLib import TTFont +from fontTools.otlLib.maxContextCalc import maxCtxFont +from fontTools.feaLib.builder import addOpenTypeFeaturesFromString + + +def test_max_ctx_calc_no_features(): + font = TTFont() + assert maxCtxFont(font) == 0 + font.setGlyphOrder(['.notdef']) + addOpenTypeFeaturesFromString(font, '') + assert maxCtxFont(font) == 0 + + +def test_max_ctx_calc_features(): + glyphs = '.notdef space A B C a b c'.split() + features = """ + lookup GSUB_EXT useExtension { + sub a by b; + } GSUB_EXT; + + lookup GPOS_EXT useExtension { + pos a b -10; + } GPOS_EXT; + + feature sub1 { + sub A by a; + sub A B by b; + sub A B C by c; + sub [A B] C by c; + sub [A B] C [A B] by c; + sub A by A B; + sub A' C by A B; + sub a' by b; + sub a' b by c; + sub a from [A B C]; + rsub a by b; + rsub a' by b; + rsub a b' by c; + rsub a b' c by A; + rsub [a b] c' by A; + rsub [a b] c' [a b] by B; + lookup GSUB_EXT; + } sub1; + + feature pos1 { + pos A 20; + pos A B -50; + pos A B' 10 C; + lookup GPOS_EXT; + } pos1; + """ + font = TTFont() + font.setGlyphOrder(glyphs) + addOpenTypeFeaturesFromString(font, features) + + assert maxCtxFont(font) == 3 + + +@pytest.mark.parametrize('file_name, max_context', [ + ('gsub_51', 2), + ('gsub_52', 2), + ('gsub_71', 1), + ('gpos_91', 1), +]) +def test_max_ctx_calc_features_ttx(file_name, max_context): + ttx_path = os.path.join(os.path.dirname(__file__), + 'data', '{}.ttx'.format(file_name)) + font = TTFont() + font.importXML(ttx_path) + + assert maxCtxFont(font) == max_context diff --git a/Tests/subset/data/TestHVVAR.ttx b/Tests/subset/data/TestHVVAR.ttx new file mode 100644 index 00000000..3e746527 --- /dev/null +++ b/Tests/subset/data/TestHVVAR.ttx @@ -0,0 +1,443 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="A"/> + <GlyphID id="2" name="B"/> + <GlyphID id="3" name="C"/> + <GlyphID id="4" name="D"/> + <GlyphID id="5" name="E"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.0"/> + <checkSumAdjustment value="0xddab44f"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000001"/> + <unitsPerEm value="1000"/> + <created value="Tue Apr 23 17:22:52 2019"/> + <modified value="Tue Apr 23 17:22:52 2019"/> + <xMin value="0"/> + <yMin value="0"/> + <xMax value="0"/> + <yMax value="0"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="7"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1000"/> + <descent value="-200"/> + <lineGap value="0"/> + <advanceWidthMax value="700"/> + <minLeftSideBearing value="40"/> + <minRightSideBearing value="580"/> + <xMaxExtent value="80"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="4"/> + </hhea> + + <maxp> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="0x10000"/> + <numGlyphs value="6"/> + <maxPoints value="1"/> + <maxContours value="1"/> + <maxCompositePoints value="0"/> + <maxCompositeContours value="0"/> + <maxZones value="1"/> + <maxTwilightPoints value="0"/> + <maxStorage value="0"/> + <maxFunctionDefs value="1"/> + <maxInstructionDefs value="0"/> + <maxStackElements value="0"/> + <maxSizeOfInstructions value="0"/> + <maxComponentElements value="0"/> + <maxComponentDepth value="0"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="606"/> + <usWeightClass value="400"/> + <usWidthClass value="5"/> + <fsType value="00000000 00001000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="300"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="5"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="UKWN"/> + <fsSelection value="00000000 01000000"/> + <usFirstCharIndex value="32"/> + <usLastCharIndex value="8722"/> + <sTypoAscender value="800"/> + <sTypoDescender value="-200"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1000"/> + <usWinDescent value="200"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="500"/> + <sCapHeight value="700"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="0"/> + </OS_2> + + <hmtx> + <mtx name=".notdef" width="700" lsb="80"/> + <mtx name="A" width="700" lsb="0"/> + <mtx name="B" width="625" lsb="40"/> + <mtx name="C" width="660" lsb="80"/> + <mtx name="D" width="660" lsb="80"/> + <mtx name="E" width="660" lsb="80"/> + </hmtx> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x41" name="A"/><!-- SPACE --> + <map code="0x42" name="B"/><!-- DIGIT ZERO --> + <map code="0x43" name="C"/><!-- EQUALS SIGN --> + <map code="0x44" name="D"/><!-- MINUS SIGN --> + <map code="0x45" name="E"/><!-- PLUS SIGN --> + </cmap_format_4> + </cmap> + + <loca> + <!-- The 'loca' table will be calculated by the compiler --> + </loca> + + <glyf> + + <!-- The xMin, yMin, xMax and yMax values + will be recalculated by the compiler. --> + + <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="0" yMax="0"> + <contour> + <pt x="0" y="0" on="1"/> + </contour> + <instructions/> + </TTGlyph> + + <TTGlyph name="A"/><!-- contains no outline data --> + + <TTGlyph name="B" xMin="0" yMin="0" xMax="0" yMax="0"> + <contour> + <pt x="0" y="0" on="1"/> + </contour> + <instructions/> + </TTGlyph> + + <TTGlyph name="C" xMin="0" yMin="0" xMax="0" yMax="0"> + <contour> + <pt x="0" y="0" on="1"/> + </contour> + <instructions/> + </TTGlyph> + + <TTGlyph name="D" xMin="0" yMin="0" xMax="0" yMax="0"> + <contour> + <pt x="0" y="0" on="1"/> + </contour> + <instructions/> + </TTGlyph> + + <TTGlyph name="E" xMin="0" yMin="0" xMax="0" yMax="0"> + <contour> + <pt x="0" y="0" on="1"/> + </contour> + <instructions/> + </TTGlyph> + + </glyf> + + <name> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestHVVAR + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.000;UKWN;TestHVVAR-Regular + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestHVVAR + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.000 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestHVVAR-Regular + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + TestHVVAR + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.000;UKWN;TestHVVAR-Regular + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + TestHVVAR-Regular + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.000 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + TestHVVAR-Regular + </namerecord> + </name> + + <post> + <formatType value="2.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + <psNames> + <!-- This file uses unique glyph names based on the information + found in the 'post' table. Since these names might not be unique, + we have to invent artificial names in case of clashes. In order to + be able to retain the original information, we need a name to + ps name mapping for those cases where they differ. That's what + you see below. + --> + </psNames> + <extraNames> + <!-- following are the name that are not taken from the standard Mac glyph order --> + </extraNames> + </post> + + <HVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=2 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=2 --> + <VarData index="0"> + <!-- ItemCount=6 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="1"/> + <Item index="0" value="[1]"/> + <Item index="1" value="[2]"/> + <Item index="2" value="[3]"/> + <Item index="3" value="[4]"/> + <Item index="4" value="[5]"/> + <Item index="5" value="[6]"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=6 --> + <NumShorts value="1"/> + <!-- VarRegionCount=2 --> + <VarRegionIndex index="0" value="0"/> + <VarRegionIndex index="1" value="1"/> + <Item index="0" value="[10, 21]"/> + <Item index="1" value="[11, 22]"/> + <Item index="2" value="[126, 23]"/> + <Item index="3" value="[127, 24]"/> + <Item index="4" value="[-128, 25]"/> + <Item index="5" value="[-129, 26]"/> + </VarData> + </VarStore> + <LsbMap> + <Map glyph=".notdef" outer="0" inner="2"/> + <Map glyph="A" outer="0" inner="5"/> + <Map glyph="B" outer="1" inner="1"/> + <Map glyph="C" outer="1" inner="4"/> + <Map glyph="D" outer="0" inner="3"/> + <Map glyph="E" outer="1" inner="0"/> + </LsbMap> + <RsbMap> + <Map glyph=".notdef" outer="0" inner="1"/> + <Map glyph="A" outer="0" inner="4"/> + <Map glyph="B" outer="1" inner="5"/> + <Map glyph="C" outer="0" inner="0"/> + <Map glyph="D" outer="1" inner="2"/> + <Map glyph="E" outer="1" inner="3"/> + </RsbMap> + </HVAR> + + <VVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=4 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="2"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-0.5"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="3"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.5"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=2 --> + <VarData index="0"> + <!-- ItemCount=4 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="1"/> + <Item index="0" value="[32]"/> + <Item index="1" value="[17]"/> + <Item index="2" value="[0]"/> + <Item index="3" value="[14]"/> + <Item index="4" value="[5]"/> + <Item index="5" value="[6]"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=6 --> + <NumShorts value="3"/> + <!-- VarRegionCount=4 --> + <VarRegionIndex index="0" value="0"/> + <VarRegionIndex index="1" value="1"/> + <VarRegionIndex index="2" value="2"/> + <VarRegionIndex index="3" value="3"/> + <Item index="0" value="[0, 1, 11, 21]"/> + <Item index="1" value="[0, 2, 12, 22]"/> + <Item index="2" value="[128, 130, 13, 23]"/> + <Item index="3" value="[0, 4, 14, 24]"/> + <Item index="4" value="[0, 5, -129, 25]"/> + <Item index="5" value="[14, 6, 16, 26]"/> + </VarData> + </VarStore> + <AdvHeightMap> + <Map glyph=".notdef" outer="1" inner="0"/> + <Map glyph="A" outer="1" inner="2"/> + <Map glyph="B" outer="0" inner="2"/> + <Map glyph="C" outer="0" inner="0"/> + <Map glyph="D" outer="1" inner="1"/> + <Map glyph="E" outer="0" inner="1"/> + </AdvHeightMap> + <VOrgMap> + <Map glyph=".notdef" outer="1" inner="3"/> + <Map glyph="A" outer="1" inner="5"/> + <Map glyph="B" outer="0" inner="5"/> + <Map glyph="C" outer="0" inner="3"/> + <Map glyph="D" outer="1" inner="4"/> + <Map glyph="E" outer="0" inner="4"/> + </VOrgMap> + </VVAR> + + <avar> + <segment axis="wght"> + <mapping from="-1.0" to="-1.0"/> + <mapping from="0.0" to="0.0"/> + <mapping from="0.3" to="0.5"/> + <mapping from="1.0" to="1.0"/> + </segment> + </avar> + + <fvar> + <Axis> + <AxisTag>wght</AxisTag> + <Flags>0x0</Flags> + <MinValue>100.0</MinValue> + <DefaultValue>400.0</DefaultValue> + <MaxValue>900.0</MaxValue> + <AxisNameID>257</AxisNameID> + </Axis> + <NamedInstance flags="0x0" subfamilyNameID="258"> + <coord axis="wght" value="100.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="259"> + <coord axis="wght" value="300.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="260"> + <coord axis="wght" value="400.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="261"> + <coord axis="wght" value="700.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="262"> + <coord axis="wght" value="900.0"/> + </NamedInstance> + </fvar> + +</ttFont> diff --git a/Tests/subset/data/expect_HVVAR.ttx b/Tests/subset/data/expect_HVVAR.ttx new file mode 100644 index 00000000..5fbc1770 --- /dev/null +++ b/Tests/subset/data/expect_HVVAR.ttx @@ -0,0 +1,166 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="B"/> + <GlyphID id="2" name="D"/> + </GlyphOrder> + + <HVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=2 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=2 --> + <VarData index="0"> + <!-- ItemCount=5 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="1"/> + <Item index="0" value="[1]"/> + <Item index="1" value="[3]"/> + <Item index="2" value="[5]"/> + <Item index="3" value="[2]"/> + <Item index="4" value="[4]"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=3 --> + <NumShorts value="1"/> + <!-- VarRegionCount=2 --> + <VarRegionIndex index="0" value="0"/> + <VarRegionIndex index="1" value="1"/> + <Item index="0" value="[11, 22]"/> + <Item index="1" value="[126, 23]"/> + <Item index="2" value="[-129, 26]"/> + </VarData> + </VarStore> + <LsbMap> + <Map glyph=".notdef" outer="0" inner="1"/> + <Map glyph="B" outer="1" inner="0"/> + <Map glyph="D" outer="0" inner="4"/> + </LsbMap> + <RsbMap> + <Map glyph=".notdef" outer="0" inner="3"/> + <Map glyph="B" outer="1" inner="2"/> + <Map glyph="D" outer="1" inner="1"/> + </RsbMap> + </HVAR> + + <VVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=3 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-0.5"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="2"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.5"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=2 --> + <VarData index="0"> + <!-- ItemCount=2 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="0"/> + <Item index="0" value="[0]"/> + <Item index="1" value="[6]"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=4 --> + <NumShorts value="1"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="1"/> + <VarRegionIndex index="1" value="0"/> + <VarRegionIndex index="2" value="2"/> + <Item index="0" value="[11, 1, 21]"/> + <Item index="1" value="[12, 2, 22]"/> + <Item index="2" value="[14, 4, 24]"/> + <Item index="3" value="[-129, 5, 25]"/> + </VarData> + </VarStore> + <AdvHeightMap> + <Map glyph=".notdef" outer="1" inner="0"/> + <Map glyph="B" outer="0" inner="0"/> + <Map glyph="D" outer="1" inner="1"/> + </AdvHeightMap> + <VOrgMap> + <Map glyph=".notdef" outer="1" inner="2"/> + <Map glyph="B" outer="0" inner="1"/> + <Map glyph="D" outer="1" inner="3"/> + </VOrgMap> + </VVAR> + + <avar> + <segment axis="wght"> + <mapping from="-1.0" to="-1.0"/> + <mapping from="0.0" to="0.0"/> + <mapping from="0.3" to="0.5"/> + <mapping from="1.0" to="1.0"/> + </segment> + </avar> + + <fvar> + <Axis> + <AxisTag>wght</AxisTag> + <Flags>0x0</Flags> + <MinValue>100.0</MinValue> + <DefaultValue>400.0</DefaultValue> + <MaxValue>900.0</MaxValue> + <AxisNameID>257</AxisNameID> + </Axis> + <NamedInstance flags="0x0" subfamilyNameID="258"> + <coord axis="wght" value="100.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="259"> + <coord axis="wght" value="300.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="260"> + <coord axis="wght" value="400.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="261"> + <coord axis="wght" value="700.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="262"> + <coord axis="wght" value="900.0"/> + </NamedInstance> + </fvar> + +</ttFont> diff --git a/Tests/subset/data/expect_HVVAR_retain_gids.ttx b/Tests/subset/data/expect_HVVAR_retain_gids.ttx new file mode 100644 index 00000000..da2eaf4f --- /dev/null +++ b/Tests/subset/data/expect_HVVAR_retain_gids.ttx @@ -0,0 +1,182 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.40"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="glyph00001"/> + <GlyphID id="2" name="B"/> + <GlyphID id="3" name="glyph00003"/> + <GlyphID id="4" name="D"/> + <GlyphID id="5" name="glyph00005"/> + </GlyphOrder> + + <HVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=2 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=2 --> + <VarData index="0"> + <!-- ItemCount=6 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="1"/> + <Item index="0" value="[1]"/> + <Item index="1" value="[2]"/> + <Item index="2" value="[3]"/> + <Item index="3" value="[4]"/> + <Item index="4" value="[5]"/> + <Item index="5" value="[0]"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=3 --> + <NumShorts value="1"/> + <!-- VarRegionCount=2 --> + <VarRegionIndex index="0" value="0"/> + <VarRegionIndex index="1" value="1"/> + <Item index="0" value="[11, 22]"/> + <Item index="1" value="[126, 23]"/> + <Item index="2" value="[-129, 26]"/> + </VarData> + </VarStore> + <LsbMap> + <Map glyph=".notdef" outer="0" inner="2"/> + <Map glyph="B" outer="1" inner="0"/> + <Map glyph="D" outer="0" inner="3"/> + <Map glyph="glyph00001" outer="0" inner="0"/> + <Map glyph="glyph00003" outer="0" inner="0"/> + <Map glyph="glyph00005" outer="0" inner="3"/> + </LsbMap> + <RsbMap> + <Map glyph=".notdef" outer="0" inner="1"/> + <Map glyph="B" outer="1" inner="2"/> + <Map glyph="D" outer="1" inner="1"/> + <Map glyph="glyph00001" outer="0" inner="0"/> + <Map glyph="glyph00003" outer="0" inner="0"/> + <Map glyph="glyph00005" outer="1" inner="1"/> + </RsbMap> + </HVAR> + + <VVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=3 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-0.5"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="2"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.5"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=2 --> + <VarData index="0"> + <!-- ItemCount=2 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="0"/> + <Item index="0" value="[0]"/> + <Item index="1" value="[6]"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=4 --> + <NumShorts value="1"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="1"/> + <VarRegionIndex index="1" value="0"/> + <VarRegionIndex index="2" value="2"/> + <Item index="0" value="[11, 1, 21]"/> + <Item index="1" value="[12, 2, 22]"/> + <Item index="2" value="[14, 4, 24]"/> + <Item index="3" value="[-129, 5, 25]"/> + </VarData> + </VarStore> + <AdvHeightMap> + <Map glyph=".notdef" outer="1" inner="0"/> + <Map glyph="B" outer="0" inner="0"/> + <Map glyph="D" outer="1" inner="1"/> + <Map glyph="glyph00001" outer="0" inner="0"/> + <Map glyph="glyph00003" outer="0" inner="0"/> + <Map glyph="glyph00005" outer="1" inner="1"/> + </AdvHeightMap> + <VOrgMap> + <Map glyph=".notdef" outer="1" inner="2"/> + <Map glyph="B" outer="0" inner="1"/> + <Map glyph="D" outer="1" inner="3"/> + <Map glyph="glyph00001" outer="0" inner="0"/> + <Map glyph="glyph00003" outer="0" inner="0"/> + <Map glyph="glyph00005" outer="1" inner="3"/> + </VOrgMap> + </VVAR> + + <avar> + <segment axis="wght"> + <mapping from="-1.0" to="-1.0"/> + <mapping from="0.0" to="0.0"/> + <mapping from="0.3" to="0.5"/> + <mapping from="1.0" to="1.0"/> + </segment> + </avar> + + <fvar> + <Axis> + <AxisTag>wght</AxisTag> + <Flags>0x0</Flags> + <MinValue>100.0</MinValue> + <DefaultValue>400.0</DefaultValue> + <MaxValue>900.0</MaxValue> + <AxisNameID>257</AxisNameID> + </Axis> + <NamedInstance flags="0x0" subfamilyNameID="258"> + <coord axis="wght" value="100.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="259"> + <coord axis="wght" value="300.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="260"> + <coord axis="wght" value="400.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="261"> + <coord axis="wght" value="700.0"/> + </NamedInstance> + <NamedInstance flags="0x0" subfamilyNameID="262"> + <coord axis="wght" value="900.0"/> + </NamedInstance> + </fvar> + +</ttFont> diff --git a/Tests/subset/data/test_cntrmask_CFF.desub.ttx b/Tests/subset/data/test_cntrmask_CFF.desub.ttx new file mode 100644 index 00000000..ff1c8c59 --- /dev/null +++ b/Tests/subset/data/test_cntrmask_CFF.desub.ttx @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="LibertinusSerif-Regular"> + <version value="6.8"/> + <Notice value="Copyright © 2012-2019 The Libertinus Project Authors."/> + <FullName value="Libertinus Serif Regular"/> + <FamilyName value="Libertinus Serif"/> + <Weight value="Regular"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-98"/> + <UnderlineThickness value="40"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="-6275 -256 6171 1125"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="-12 0 429 442 460 472 600 610 645 658 688 698"/> + <OtherBlues value="-238 -227"/> + <FamilyBlues value="-12 0 429 442 460 472 600 610 645 658 688 698"/> + <FamilyOtherBlues value="-238 -227"/> + <BlueScale value="0.0396"/> + <BlueShift value="6"/> + <BlueFuzz value="1"/> + <StdHW value="36"/> + <StdVW value="79"/> + <StemSnapH value="36"/> + <StemSnapV value="79 86"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="0"/> + <nominalWidthX value="595"/> + </Private> + <CharStrings> + <CharString name=".notdef"> + -95 endchar + </CharString> + <CharString name="Idieresis"> + -298 -2 33 583 33 62 96 hstem + 6 96 4 85 4 96 vstem + cntrmask 00011100 + 191 122 rmoveto + 401 vlineto + 0 83 17 5 70 3 6 6 0 21 -6 6 -44 -1 -47.5 -1 -38.5 0 -33.5 0 -48.5 1 -47 1 -6 -6 0 -21 6 -6 70 -3 17 -5 0 -83 rrcurveto + -401 vlineto + 0 -83 -17 -5 -70 -3 -6 -6 0 -21 6 -6 45 1 48.7002 1 36.2998 0 35.59961 0 48.40039 -1 45 -1 6 6 0 21 -6 6 -70 3 -17 5 0 83 rrcurveto + 4 635 rmoveto + -26 22 -22 26 26 22 22 26 26 -22 22 -26 -26 -22 -22 -26 vhcurveto + -189 hmoveto + -26 22 -22 26 26 22 22 26 26 -22 22 -26 -26 -22 -22 -26 vhcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + +</ttFont> diff --git a/Tests/subset/data/test_cntrmask_CFF.ttx b/Tests/subset/data/test_cntrmask_CFF.ttx new file mode 100644 index 00000000..5ab6268f --- /dev/null +++ b/Tests/subset/data/test_cntrmask_CFF.ttx @@ -0,0 +1,417 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="Idieresis"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="6.79999"/> + <checkSumAdjustment value="0xd2a3b881"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00001011"/> + <unitsPerEm value="1000"/> + <created value="Thu Aug 24 21:44:22 2006"/> + <modified value="Thu Jan 1 00:00:00 1970"/> + <xMin value="-6275"/> + <yMin value="-256"/> + <xMax value="6171"/> + <yMax value="1125"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="8"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="894"/> + <descent value="-246"/> + <lineGap value="0"/> + <advanceWidthMax value="6272"/> + <minLeftSideBearing value="-6275"/> + <minRightSideBearing value="-953"/> + <xMaxExtent value="6171"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="2"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="2"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="4"/> + <xAvgCharWidth value="559"/> + <usWeightClass value="400"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="700"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="140"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="700"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="480"/> + <yStrikeoutSize value="49"/> + <yStrikeoutPosition value="258"/> + <sFamilyClass value="261"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="0"/> + <bWeight value="5"/> + <bProportion value="3"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000010"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ALIF"/> + <fsSelection value="00000000 11000000"/> + <usFirstCharIndex value="207"/> + <usLastCharIndex value="207"/> + <sTypoAscender value="894"/> + <sTypoDescender value="-246"/> + <sTypoLineGap value="0"/> + <usWinAscent value="894"/> + <usWinDescent value="246"/> + <ulCodePageRange1 value="01100000 00000000 00000001 10111111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="429"/> + <sCapHeight value="658"/> + <usDefaultChar value="32"/> + <usBreakChar value="32"/> + <usMaxContext value="12"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2012-2019 The Libertinus Project Authors. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Libertinus Serif + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 6.8;ALIF;LibertinusSerif-Regular + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Libertinus Serif Regular + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 6.8 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + LibertinusSerif-Regular + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0xcf" name="Idieresis"/><!-- LATIN CAPITAL LETTER I WITH DIAERESIS --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="28" language="0" nGroups="1"> + <map code="0xcf" name="Idieresis"/><!-- LATIN CAPITAL LETTER I WITH DIAERESIS --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0xcf" name="Idieresis"/><!-- LATIN CAPITAL LETTER I WITH DIAERESIS --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="28" language="0" nGroups="1"> + <map code="0xcf" name="Idieresis"/><!-- LATIN CAPITAL LETTER I WITH DIAERESIS --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-78"/> + <underlineThickness value="40"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="LibertinusSerif-Regular"> + <version value="6.8"/> + <Notice value="Copyright © 2012-2019 The Libertinus Project Authors."/> + <FullName value="Libertinus Serif Regular"/> + <FamilyName value="Libertinus Serif"/> + <Weight value="Regular"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-98"/> + <UnderlineThickness value="40"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="-6275 -256 6171 1125"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="-12 0 429 442 460 472 600 610 645 658 688 698"/> + <OtherBlues value="-238 -227"/> + <FamilyBlues value="-12 0 429 442 460 472 600 610 645 658 688 698"/> + <FamilyOtherBlues value="-238 -227"/> + <BlueScale value="0.0396"/> + <BlueShift value="6"/> + <BlueFuzz value="1"/> + <StdHW value="36"/> + <StdVW value="79"/> + <StemSnapH value="36"/> + <StemSnapV value="79 86"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="0"/> + <nominalWidthX value="595"/> + <Subrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + <CharString index="0"> + -26 22 -22 26 26 22 22 26 26 -22 22 -26 -26 -22 -22 -26 vhcurveto + return + </CharString> + <CharString index="1"> + 401 vlineto + 0 83 17 5 70 3 6 6 0 21 -6 6 -44 -1 -47.5 -1 -38.5 0 -33.5 0 -48.5 1 -47 1 -6 -6 0 -21 6 -6 70 -3 17 -5 0 -83 rrcurveto + -401 vlineto + 0 -83 -17 -5 -70 -3 -6 -6 0 -21 6 -6 45 1 48.7002 1 36.2998 0 35.59961 0 48.40039 -1 45 -1 6 6 0 21 -6 6 -70 3 -17 5 0 83 rrcurveto + return + </CharString> + </Subrs> + </Private> + <CharStrings> + <CharString name=".notdef"> + -95 endchar + </CharString> + <CharString name="Idieresis"> + -298 -2 33 583 33 62 96 hstem + 6 96 4 85 4 96 vstem + cntrmask 00011100 + 191 122 rmoveto + -106 callsubr + 4 635 rmoveto + -107 callsubr + -189 hmoveto + -107 callsubr + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GDEF> + <Version value="0x00010002"/> + <GlyphClassDef Format="1"> + <ClassDef glyph="Idieresis" class="1"/> + </GlyphClassDef> + <MarkGlyphSetsDef> + <MarkSetTableFormat value="1"/> + <!-- MarkSetCount=1 --> + <Coverage index="0" Format="1"> + </Coverage> + </MarkGlyphSetsDef> + </GDEF> + + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=4 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="1"> + <ScriptTag value="cyrl"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="1"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="2"> + <ScriptTag value="grek"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="2"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="3"> + <ScriptTag value="latn"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="3"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=4 --> + <FeatureRecord index="0"> + <FeatureTag value="kern"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="1"> + <FeatureTag value="kern"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="2"> + <FeatureTag value="kern"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="3"> + <FeatureTag value="kern"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="2"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <PairPos index="0" Format="2"> + <Coverage Format="1"> + <Glyph value="Idieresis"/> + </Coverage> + <ValueFormat1 value="4"/> + <ValueFormat2 value="0"/> + <ClassDef1 Format="1"> + <ClassDef glyph="Idieresis" class="1"/> + </ClassDef1> + <ClassDef2 Format="2"> + </ClassDef2> + <!-- Class1Count=2 --> + <!-- Class2Count=1 --> + <Class1Record index="0"> + <Class2Record index="0"> + <Value1 XAdvance="0"/> + </Class2Record> + </Class1Record> + <Class1Record index="1"> + <Class2Record index="0"> + <Value1 XAdvance="0"/> + </Class2Record> + </Class1Record> + </PairPos> + </Lookup> + </LookupList> + </GPOS> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=5 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="1"> + <ScriptTag value="cyrl"/> + <Script> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="2"> + <ScriptTag value="grek"/> + <Script> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="3"> + <ScriptTag value="hebr"/> + <Script> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + <ScriptRecord index="4"> + <ScriptTag value="latn"/> + <Script> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <hmtx> + <mtx name=".notdef" width="500" lsb="0"/> + <mtx name="Idieresis" width="297" lsb="6"/> + </hmtx> + +</ttFont> diff --git a/Tests/subset/subset_test.py b/Tests/subset/subset_test.py index 2fc3b8af..eb632dc0 100644 --- a/Tests/subset/subset_test.py +++ b/Tests/subset/subset_test.py @@ -426,6 +426,16 @@ class SubsetTest(unittest.TestCase): self.expect_ttx(subsetfont, self.getpath( "test_hinted_subrs_CFF.desub.ttx"), ["CFF "]) + def test_desubroutinize_cntrmask_CFF(self): + ttxpath = self.getpath("test_cntrmask_CFF.ttx") + _, fontpath = self.compile_font(ttxpath, ".otf") + subsetpath = self.temp_path(".otf") + subset.main([fontpath, "--desubroutinize", "--notdef-outline", + "--output-file=%s" % subsetpath, "*"]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath( + "test_cntrmask_CFF.desub.ttx"), ["CFF "]) + def test_no_hinting_desubroutinize_CFF(self): ttxpath = self.getpath("test_hinted_subrs_CFF.ttx") _, fontpath = self.compile_font(ttxpath, ".otf") @@ -485,6 +495,24 @@ class SubsetTest(unittest.TestCase): subset.main([fontpath, "--recalc-timestamp", "--output-file=%s" % subsetpath, "*"]) self.assertLess(modified, TTFont(subsetpath)['head'].modified) + def test_recalc_max_context(self): + ttxpath = self.getpath("Lobster.subset.ttx") + font = TTFont() + font.importXML(ttxpath) + max_context = font['OS/2'].usMaxContext + _, fontpath = self.compile_font(ttxpath, ".otf") + subsetpath = self.temp_path(".otf") + + # by default, the subsetter does not recalculate the usMaxContext + subset.main([fontpath, "--drop-tables+=GSUB,GPOS", + "--output-file=%s" % subsetpath]) + self.assertEqual(max_context, TTFont(subsetpath)['OS/2'].usMaxContext) + + subset.main([fontpath, "--recalc-max-context", + "--drop-tables+=GSUB,GPOS", + "--output-file=%s" % subsetpath]) + self.assertEqual(0, TTFont(subsetpath)['OS/2'].usMaxContext) + def test_retain_gids_ttf(self): _, fontpath = self.compile_font(self.getpath("TestTTF-Regular.ttx"), ".ttf") font = TTFont(fontpath) @@ -553,8 +581,8 @@ class SubsetTest(unittest.TestCase): self.assertEqual(cs["B"].program, ["endchar"]) def test_retain_gids_cff2(self): - fontpath = self.getpath("../../varLib/data/TestCFF2VF.otf") - font = TTFont(fontpath) + ttx_path = self.getpath("../../varLib/data/master_ttx_varfont_otf/TestCFF2VF.ttx") + font, fontpath = self.compile_font(ttx_path, ".otf") self.assertEqual(font["hmtx"]["A"], (600, 31)) self.assertEqual(font["hmtx"]["T"], (600, 41)) @@ -586,6 +614,20 @@ class SubsetTest(unittest.TestCase): self.assertGreater(len(cs["A"].program), 0) self.assertEqual(cs["glyph00002"].program, []) + def test_HVAR_VVAR(self): + _, fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--text=BD", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("expect_HVVAR.ttx"), ["GlyphOrder", "HVAR", "VVAR", "avar", "fvar"]) + + def test_HVAR_VVAR_retain_gids(self): + _, fontpath = self.compile_font(self.getpath("TestHVVAR.ttx"), ".ttf") + subsetpath = self.temp_path(".ttf") + subset.main([fontpath, "--text=BD", "--retain-gids", "--output-file=%s" % subsetpath]) + subsetfont = TTFont(subsetpath) + self.expect_ttx(subsetfont, self.getpath("expect_HVVAR_retain_gids.ttx"), ["GlyphOrder", "HVAR", "VVAR", "avar", "fvar"]) + if __name__ == "__main__": sys.exit(unittest.main()) diff --git a/Tests/svgLib/path/shapes_test.py b/Tests/svgLib/path/shapes_test.py index ee9ddeae..99c70fdb 100644 --- a/Tests/svgLib/path/shapes_test.py +++ b/Tests/svgLib/path/shapes_test.py @@ -1,68 +1,133 @@ from __future__ import print_function, absolute_import, division from fontTools.misc.py23 import * -from fontTools.pens.recordingPen import RecordingPen from fontTools.svgLib.path import shapes from fontTools.misc import etree import pytest @pytest.mark.parametrize( - "svg_xml, expected_path", + "svg_xml, expected_path, expected_transform", [ # path: direct passthrough ( - "<path d='I love kittens'/>", - "I love kittens" + "<path d='I love kittens'/>", + "I love kittens", + None ), # path no @d ( - "<path duck='Mallard'/>", - None + "<path duck='Mallard'/>", + None, + None + ), + # line + ( + '<line x1="10" x2="50" y1="110" y2="150"/>', + 'M10,110 L50,150', + None + ), + # line, decimal positioning + ( + '<line x1="10.0" x2="50.5" y1="110.2" y2="150.7"/>', + 'M10,110.2 L50.5,150.7', + None ), # rect: minimal valid example ( "<rect width='1' height='1'/>", "M0,0 H1 V1 H0 V0 z", + None ), # rect: sharp corners ( "<rect x='10' y='11' width='17' height='11'/>", "M10,11 H27 V22 H10 V11 z", + None ), # rect: round corners ( "<rect x='9' y='9' width='11' height='7' rx='2'/>", "M11,9 H18 A2,2 0 0 1 20,11 V14 A2,2 0 0 1 18,16 H11" " A2,2 0 0 1 9,14 V11 A2,2 0 0 1 11,9 z", + None + ), + # rect: simple + ( + "<rect x='11.5' y='16' width='11' height='2'/>", + "M11.5,16 H22.5 V18 H11.5 V16 z", + None + ), + # rect: the one above plus a rotation + ( + "<rect x='11.5' y='16' transform='matrix(0.7071 -0.7071 0.7071 0.7071 -7.0416 16.9999)' width='11' height='2'/>", + "M11.5,16 H22.5 V18 H11.5 V16 z", + (0.7071, -0.7071, 0.7071, 0.7071, -7.0416, 16.9999) ), # polygon ( "<polygon points='30,10 50,30 10,30'/>", - "M30,10 50,30 10,30 z" + "M30,10 50,30 10,30 z", + None + ), + # polyline + ( + "<polyline points='30,10 50,30 10,30'/>", + "M30,10 50,30 10,30", + None ), # circle, minimal valid example ( "<circle r='1'/>", - "M-1,0 A1,1 0 1 1 1,0 A1,1 0 1 1 -1,0" + "M-1,0 A1,1 0 1 1 1,0 A1,1 0 1 1 -1,0", + None ), # circle ( "<circle cx='600' cy='200' r='100'/>", - "M500,200 A100,100 0 1 1 700,200 A100,100 0 1 1 500,200" + "M500,200 A100,100 0 1 1 700,200 A100,100 0 1 1 500,200", + None ), # circle, decimal positioning ( "<circle cx='12' cy='6.5' r='1.5'></circle>", - "M10.5,6.5 A1.5,1.5 0 1 1 13.5,6.5 A1.5,1.5 0 1 1 10.5,6.5" - ) + "M10.5,6.5 A1.5,1.5 0 1 1 13.5,6.5 A1.5,1.5 0 1 1 10.5,6.5", + None + ), + # circle, with transform + ( + '<circle transform="matrix(0.9871 -0.1602 0.1602 0.9871 -7.525 8.6516)" cx="49.9" cy="51" r="14.3"/>', + 'M35.6,51 A14.3,14.3 0 1 1 64.2,51 A14.3,14.3 0 1 1 35.6,51', + (0.9871, -0.1602, 0.1602, 0.9871, -7.525, 8.6516) + ), + # ellipse + ( + '<ellipse cx="100" cy="50" rx="100" ry="50"/>', + 'M0,50 A100,50 0 1 1 200,50 A100,50 0 1 1 0,50', + None + ), + # ellipse, decimal positioning + ( + '<ellipse cx="100.5" cy="50" rx="10" ry="50.5"/>', + 'M90.5,50 A10,50.5 0 1 1 110.5,50 A10,50.5 0 1 1 90.5,50', + None + ), + # ellipse, with transform + ( + '<ellipse transform="matrix(0.9557 -0.2945 0.2945 0.9557 -14.7694 20.1454)" cx="59.5" cy="59.1" rx="30.9" ry="11.9"/>', + 'M28.6,59.1 A30.9,11.9 0 1 1 90.4,59.1 A30.9,11.9 0 1 1 28.6,59.1', + (0.9557, -0.2945, 0.2945, 0.9557, -14.7694, 20.1454) + ), ] ) -def test_el_to_path(svg_xml, expected_path): +def test_el_to_path(svg_xml, expected_path, expected_transform): pb = shapes.PathBuilder() pb.add_path_from_element(etree.fromstring(svg_xml)) if expected_path: - expected = [expected_path] + expected_paths = [expected_path] + expected_transforms = [expected_transform] else: - expected = [] - assert pb.paths == expected + expected_paths = [] + expected_transforms = [] + assert pb.paths == expected_paths + assert pb.transforms == expected_transforms diff --git a/Tests/ttLib/tables/_g_l_y_f_test.py b/Tests/ttLib/tables/_g_l_y_f_test.py index 00c74bcf..b30528aa 100644 --- a/Tests/ttLib/tables/_g_l_y_f_test.py +++ b/Tests/ttLib/tables/_g_l_y_f_test.py @@ -4,6 +4,7 @@ from fontTools.misc.fixedTools import otRound from fontTools.pens.ttGlyphPen import TTGlyphPen from fontTools.ttLib import TTFont, newTable, TTLibError from fontTools.ttLib.tables._g_l_y_f import GlyphCoordinates +from fontTools.ttLib.tables import ttProgram import sys import array import pytest @@ -240,6 +241,41 @@ class glyfTableTest(unittest.TestCase): with self.assertRaisesRegex(TTLibError, "glyph '.' contains a recursive component reference"): glyph_A.getCoordinates(glyphSet) + def test_trim_remove_hinting_composite_glyph(self): + glyphSet = {"dummy": TTGlyphPen(None).glyph()} + + pen = TTGlyphPen(glyphSet) + pen.addComponent("dummy", (1, 0, 0, 1, 0, 0)) + composite = pen.glyph() + p = ttProgram.Program() + p.fromAssembly(['SVTCA[0]']) + composite.program = p + glyphSet["composite"] = composite + + glyfTable = newTable("glyf") + glyfTable.glyphs = glyphSet + glyfTable.glyphOrder = sorted(glyphSet) + + composite.compact(glyfTable) + + self.assertTrue(hasattr(composite, "data")) + + # remove hinting from the compacted composite glyph, without expanding it + composite.trim(remove_hinting=True) + + # check that, after expanding the glyph, we have no instructions + composite.expand(glyfTable) + self.assertFalse(hasattr(composite, "program")) + + # now remove hinting from expanded composite glyph + composite.program = p + composite.trim(remove_hinting=True) + + # check we have no instructions + self.assertFalse(hasattr(composite, "program")) + + composite.compact(glyfTable) + if __name__ == "__main__": import sys diff --git a/Tests/varLib/data/TestCFF2VF.otf b/Tests/varLib/data/TestCFF2VF.otf Binary files differdeleted file mode 100644 index 590ad271..00000000 --- a/Tests/varLib/data/TestCFF2VF.otf +++ /dev/null diff --git a/Tests/varLib/data/TestSparseCFF2VF.designspace b/Tests/varLib/data/TestSparseCFF2VF.designspace new file mode 100644 index 00000000..d8165cf8 --- /dev/null +++ b/Tests/varLib/data/TestSparseCFF2VF.designspace @@ -0,0 +1,229 @@ +<?xml version='1.0' encoding='utf-8'?> +<designspace format="3"> + <axes> + <axis default="200" maximum="900" minimum="200" name="weight" tag="wght"> + <map input="200" output="0" /> <!-- ExtraLight --> + <map input="300" output="160" /> <!-- Light --> + <map input="350" output="320" /> <!-- Normal --> + <map input="400" output="390" /> <!-- Regular --> + <map input="500" output="560" /> <!-- Medium --> + <map input="700" output="780" /> <!-- Bold --> + <map input="900" output="1000" /><!-- Heavy --> + </axis> + </axes> + <sources> + <source filename="master_sparse_cff2/MasterSet_Kanji-w0.00.ufo" stylename="w0.00"> + <info copy="1" /> + <location> + <dimension name="weight" xvalue="0.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w439.00.ufo" stylename="w439.00"> + + <location> + <dimension name="weight" xvalue="439.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w440.00.ufo" stylename="w440.00"> + + <location> + <dimension name="weight" xvalue="440.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w599.00.ufo" stylename="w599.00"> + + <location> + <dimension name="weight" xvalue="599.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w600.00.ufo" stylename="w600.00"> + + <location> + <dimension name="weight" xvalue="600.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w669.00.ufo" stylename="w669.00"> + + <location> + <dimension name="weight" xvalue="669.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w670.00.ufo" stylename="w670.00"> + + <location> + <dimension name="weight" xvalue="670.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w799.00.ufo" stylename="w799.00"> + + <location> + <dimension name="weight" xvalue="799.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w800.00.ufo" stylename="w800.00"> + + <location> + <dimension name="weight" xvalue="800.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w889.00.ufo" stylename="w889.00"> + + <location> + <dimension name="weight" xvalue="889.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w890.00.ufo" stylename="w890.00"> + + <location> + <dimension name="weight" xvalue="890.00" /> + </location> + </source> + <source filename="master_sparse_cff2/MasterSet_Kanji-w1000.00.ufo" stylename="w1000.00"> + + <location> + <dimension name="weight" xvalue="1000.00" /> + </location> + </source> + </sources> + <instances> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w0.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w0.00" stylename="Kanji-w0.00"> + <location> + <dimension name="weight" xvalue="0" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w239.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w239.00" stylename="Kanji-w239.00"> + <location> + <dimension name="weight" xvalue="239" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w240.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w240.00" stylename="Kanji-w240.00"> + <location> + <dimension name="weight" xvalue="240" /> + </location> + <kerning /> + <info /> + </instance> + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w439.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w439.00" stylename="Kanji-w439.00"> + <location> + <dimension name="weight" xvalue="439" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w440.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w440.00" stylename="Kanji-w440.00"> + <location> + <dimension name="weight" xvalue="440" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w499.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w499.00" stylename="Kanji-w499.00"> + <location> + <dimension name="weight" xvalue="499" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w500.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w500.00" stylename="Kanji-w500.00"> + <location> + <dimension name="weight" xvalue="500" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w599.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w599.00" stylename="Kanji-w599.00"> + <location> + <dimension name="weight" xvalue="599" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w600.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w600.00" stylename="Kanji-w600.00"> + <location> + <dimension name="weight" xvalue="600" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w669.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w669.00" stylename="Kanji-w669.00"> + <location> + <dimension name="weight" xvalue="669" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w670.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w670.00" stylename="Kanji-w670.00"> + <location> + <dimension name="weight" xvalue="670" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w699.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w699.00" stylename="Kanji-w699.00"> + <location> + <dimension name="weight" xvalue="699" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w700.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w700.00" stylename="Kanji-w700.00"> + <location> + <dimension name="weight" xvalue="700" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-799.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-799.00" stylename="Kanji-799.00"> + <location> + <dimension name="weight" xvalue="799" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w800.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w800.00" stylename="Kanji-w800.00"> + <location> + <dimension name="weight" xvalue="800" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w889.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w889.00" stylename="Kanji-w889.00"> + <location> + <dimension name="weight" xvalue="889" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w890.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w890.00" stylename="Kanji-w890.00"> + <location> + <dimension name="weight" xvalue="890" /> + </location> + <kerning /> + <info /> + </instance> + + + <instance familyname="SHSansJPVFTest" filename="instances/SHSansJPVFTest-Kanji-w1000.00.otf" postscriptfontname="SHSansJPVFTest-Kanji-w1000.00" stylename="Kanji-w1000.00"> + <location> + <dimension name="weight" xvalue="1000" /> + </location> + </instance> + </instances> +</designspace> diff --git a/Tests/varLib/data/TestVVAR.designspace b/Tests/varLib/data/TestVVAR.designspace new file mode 100644 index 00000000..162f7385 --- /dev/null +++ b/Tests/varLib/data/TestVVAR.designspace @@ -0,0 +1,36 @@ +<?xml version='1.0' encoding='utf-8'?> +<designspace format="3"> + <axes> + <axis default="0" maximum="1000" minimum="0" name="weight" tag="wght" /> + </axes> + <sources> + <source filename="master_vvar_cff2/TestVVAR.0.ufo" stylename="w0.00"> + <info copy="1" /> + <location> + <dimension name="weight" xvalue="0.00" /> + </location> + </source> + <source filename="master_vvar_cff2/TestVVAR.1.ufo" stylename="w1000.00"> + + <location> + <dimension name="weight" xvalue="1000.00" /> + </location> + </source> + </sources> + <instances> + <instance familyname="TestVVAR" filename="instances/TestVVAR-ExtraLight.otf" postscriptfontname="TestVVAR-ExtraLight" stylename="ExtraLight"> + <location> + <dimension name="weight" xvalue="0" /> + </location> + <kerning /> + <info /> + </instance> + <instance familyname="TestVVAR" filename="instances/TestVVAR-Heavy.otf" postscriptfontname="TestVVAR-Heavy" stylename="Heavy"> + <location> + <dimension name="weight" xvalue="1000" /> + </location> + <kerning /> + <info /> + </instance> + </instances> +</designspace> diff --git a/Tests/varLib/data/master_cff2/TestCFF2_Black.otf b/Tests/varLib/data/master_cff2/TestCFF2_Black.otf Binary files differdeleted file mode 100644 index b4249e10..00000000 --- a/Tests/varLib/data/master_cff2/TestCFF2_Black.otf +++ /dev/null diff --git a/Tests/varLib/data/master_cff2/TestCFF2_Black.ttx b/Tests/varLib/data/master_cff2/TestCFF2_Black.ttx new file mode 100644 index 00000000..7270a161 --- /dev/null +++ b/Tests/varLib/data/master_cff2/TestCFF2_Black.ttx @@ -0,0 +1,518 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="A"/> + <GlyphID id="2" name="T"/> + <GlyphID id="3" name="dollar.a"/> + <GlyphID id="4" name="dollar"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.01"/> + <checkSumAdjustment value="0x26378952"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Nov 29 14:52:09 2018"/> + <modified value="Thu Nov 29 14:52:09 2018"/> + <xMin value="0"/> + <yMin value="-116"/> + <xMax value="600"/> + <yMax value="750"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="984"/> + <descent value="-273"/> + <lineGap value="0"/> + <advanceWidthMax value="600"/> + <minLeftSideBearing value="0"/> + <minRightSideBearing value="0"/> + <xMaxExtent value="600"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="5"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="5"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="592"/> + <usWeightClass value="900"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="300"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="11"/> + <bWeight value="8"/> + <bProportion value="9"/> + <bContrast value="3"/> + <bStrokeVariation value="4"/> + <bArmStyle value="3"/> + <bLetterForm value="2"/> + <bMidline value="2"/> + <bXHeight value="4"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBO"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="36"/> + <usLastCharIndex value="84"/> + <sTypoAscender value="750"/> + <sTypoDescender value="-250"/> + <sTypoLineGap value="0"/> + <usWinAscent value="984"/> + <usWinDescent value="273"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="500"/> + <sCapHeight value="660"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.010;ADBO;SourceCode_Black + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SourceCode_Black + </namerecord> + <namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Roman Master 2 + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.010;ADBO;SourceCode_Black + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + SourceCode_Black + </namerecord> + <namerecord nameID="17" platformID="3" platEncID="1" langID="0x409"> + Roman Master 2 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + <map code="0x24" name="dollar"/> + <map code="0x41" name="A"/> + <map code="0x54" name="T"/> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="1"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="SourceCode_Black"> + <version value="1.0"/> + <Notice value="Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries."/> + <Copyright value="Copyright 2010 - 2012 Adobe Systems Incorporated. All Rights Reserved."/> + <FamilyName value="Source Code"/> + <isFixedPitch value="1"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="0 -116 600 750"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="-12 0 500 512 580 592 634 646 650 662 696 708"/> + <OtherBlues value="-188 -176"/> + <FamilyBlues value="-12 0 486 498 574 586 638 650 656 668 712 724"/> + <FamilyOtherBlues value="-217 -205"/> + <BlueScale value="0.0625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="134"/> + <StdVW value="172"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="600"/> + <nominalWidthX value="667"/> + </Private> + <CharStrings> + <CharString name=".notdef"> + 24 0 rmoveto + 552 0 rlineto + 0 660 rlineto + -552 0 rlineto + 0 -660 rlineto + 212 104 rmoveto + 26 56 rlineto + 36 96 rlineto + 4 0 rlineto + 36 -96 rlineto + 26 -56 rlineto + -128 0 rlineto + -100 68 rmoveto + 0 336 rlineto + 82 -168 rlineto + -82 -168 rlineto + 162 252 rmoveto + -40 96 rlineto + -18 36 rlineto + 120 0 rlineto + -18 -36 rlineto + -40 -96 rlineto + -4 0 rlineto + 84 -84 rmoveto + 82 168 rlineto + 0 -336 rlineto + -82 168 rlineto + endchar + </CharString> + <CharString name="A"> + 0 0 rmoveto + 176 0 rlineto + 73 316 rlineto + 14 62 17 78 14 66 rrcurveto + 4 0 rlineto + 14 -66 19 -78 14 -62 rrcurveto + 73 -316 rlineto + 182 0 rlineto + -196 650 rlineto + -208 0 rlineto + -196 -650 rlineto + 141 138 rmoveto + 316 0 rlineto + 0 133 rlineto + -316 0 rlineto + 0 -133 rlineto + endchar + </CharString> + <CharString name="T"> + 214 0 rmoveto + 172 0 rlineto + 0 506 rlineto + 187 0 rlineto + 0 144 rlineto + -546 0 rlineto + 0 -144 rlineto + 187 0 rlineto + 0 -506 rlineto + endchar + </CharString> + <CharString name="dollar"> + -107 260 39 rmoveto + -65 0 -28 11 -49 24 rrcurveto + 89 -53 rlineto + -15 89 rlineto + -9 52 -22 18 -43 0 rrcurveto + -26 0 -27 -14 -14 -38 rrcurveto + 0 -90 71 -54 139 0 rrcurveto + 163 0 99 84 0 117 rrcurveto + 0 98 -58 68 -142 45 rrcurveto + -33 10 rlineto + -72 22 -24 24 0 49 rrcurveto + 0 61 47 23 67 0 rrcurveto + 42 0 27 -4 52 -24 rrcurveto + -85 47 rlineto + 10 -67 rlineto + 11 -75 37 -14 39 0 rrcurveto + 26 0 29 15 5 41 rrcurveto + -8 88 -76 48 -121 0 rrcurveto + -158 0 -85 -80 0 -115 rrcurveto + 0 -93 66 -69 121 -39 rrcurveto + 32 -11 rlineto + 80 -28 23 -19 0 -53 rrcurveto + 0 -55 -43 -39 -72 0 rrcurveto + 64 275 rmoveto + 0 417 rlineto + -71 0 rlineto + 0 -417 rlineto + 71 0 rlineto + -79 -429 rmoveto + 71 0 rlineto + 0 429 rlineto + -71 0 rlineto + 0 -429 rlineto + endchar + </CharString> + <CharString name="dollar.a"> + 292 34 rmoveto + 163 0 83 80 0 100 rrcurveto + 0 182 -302 -4 0 56 rrcurveto + 0 21 18 11 36 0 rrcurveto + 55 0 39 -16 52 -32 rrcurveto + 84 98 rlineto + -53 52 -69 36 -97 0 rrcurveto + -141 0 -88 -68 0 -104 rrcurveto + 0 -188 302 12 0 -68 rrcurveto + 0 -20 -19 -10 -37 0 rrcurveto + -61 0 -55 20 -72 40 rrcurveto + -74 -116 rlineto + 65 -54 101 -28 70 0 rrcurveto + -19 -150 rmoveto + 160 854 rlineto + -100 12 rlineto + -160 -854 rlineto + 100 -12 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <BASE> + <Version value="0x00010000"/> + <HorizAxis> + <BaseTagList> + <!-- BaseTagCount=2 --> + <BaselineTag index="0" value="ideo"/> + <BaselineTag index="1" value="romn"/> + </BaseTagList> + <BaseScriptList> + <!-- BaseScriptCount=4 --> + <BaseScriptRecord index="0"> + <BaseScriptTag value="DFLT"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="1"> + <BaseScriptTag value="cyrl"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="2"> + <BaseScriptTag value="grek"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="3"> + <BaseScriptTag value="latn"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + </BaseScriptList> + </HorizAxis> + </BASE> + + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="size"/> + <Feature> + <FeatureParamsSize> + <DesignSize value="10.0"/> + <SubfamilyID value="0"/> + <SubfamilyNameID value="0"/> + <RangeStart value="0.0"/> + <RangeEnd value="0.0"/> + </FeatureParamsSize> + <!-- LookupCount=0 --> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GPOS> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="dollar" out="dollar.a"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + + <hmtx> + <mtx name=".notdef" width="600" lsb="24"/> + <mtx name="A" width="600" lsb="0"/> + <mtx name="T" width="600" lsb="27"/> + <mtx name="dollar" width="560" lsb="51"/> + <mtx name="dollar.a" width="600" lsb="56"/> + </hmtx> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.otf b/Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.otf Binary files differdeleted file mode 100644 index 4464791a..00000000 --- a/Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.otf +++ /dev/null diff --git a/Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.ttx b/Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.ttx new file mode 100644 index 00000000..41dbb750 --- /dev/null +++ b/Tests/varLib/data/master_cff2/TestCFF2_ExtraLight.ttx @@ -0,0 +1,518 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="A"/> + <GlyphID id="2" name="T"/> + <GlyphID id="3" name="dollar.a"/> + <GlyphID id="4" name="dollar"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.01"/> + <checkSumAdjustment value="0xeb345d38"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Nov 29 14:52:09 2018"/> + <modified value="Thu Nov 29 14:52:09 2018"/> + <xMin value="50"/> + <yMin value="-115"/> + <xMax value="550"/> + <yMax value="762"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="984"/> + <descent value="-273"/> + <lineGap value="0"/> + <advanceWidthMax value="600"/> + <minLeftSideBearing value="50"/> + <minRightSideBearing value="50"/> + <xMaxExtent value="550"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="5"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="5"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="578"/> + <usWeightClass value="200"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="286"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="11"/> + <bWeight value="3"/> + <bProportion value="9"/> + <bContrast value="3"/> + <bStrokeVariation value="4"/> + <bArmStyle value="3"/> + <bLetterForm value="2"/> + <bMidline value="2"/> + <bXHeight value="4"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBO"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="36"/> + <usLastCharIndex value="84"/> + <sTypoAscender value="750"/> + <sTypoDescender value="-250"/> + <sTypoLineGap value="0"/> + <usWinAscent value="984"/> + <usWinDescent value="273"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="478"/> + <sCapHeight value="660"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.010;ADBO;SourceCode_ExtraLight + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SourceCode_ExtraLight + </namerecord> + <namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Roman Master 0 + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.010;ADBO;SourceCode_ExtraLight + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + SourceCode_ExtraLight + </namerecord> + <namerecord nameID="17" platformID="3" platEncID="1" langID="0x409"> + Roman Master 0 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + <map code="0x24" name="dollar"/> + <map code="0x41" name="A"/> + <map code="0x54" name="T"/> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="1"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="SourceCode_ExtraLight"> + <version value="1.0"/> + <Notice value="Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries."/> + <Copyright value="Copyright 2010 - 2012 Adobe Systems Incorporated. All Rights Reserved."/> + <FamilyName value="Source Code"/> + <isFixedPitch value="1"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="50 -115 550 762"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="-12 0 478 490 570 582 640 652 660 672 722 734"/> + <OtherBlues value="-234 -222"/> + <FamilyBlues value="-12 0 486 498 574 586 638 650 656 668 712 724"/> + <FamilyOtherBlues value="-217 -205"/> + <BlueScale value="0.0625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="28"/> + <StdVW value="34"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="600"/> + <nominalWidthX value="597"/> + </Private> + <CharStrings> + <CharString name=".notdef"> + 84 0 rmoveto + 432 0 rlineto + 0 660 rlineto + -432 0 rlineto + 0 -660 rlineto + 48 32 rmoveto + 102 176 rlineto + 64 106 rlineto + 4 0 rlineto + 62 -106 rlineto + 100 -176 rlineto + -332 0 rlineto + -10 42 rmoveto + 0 536 rlineto + 154 -270 rlineto + -154 -266 rlineto + 176 292 rmoveto + -56 92 rlineto + -94 168 rlineto + 302 0 rlineto + -94 -168 rlineto + -54 -92 rlineto + -4 0 rlineto + 26 -26 rmoveto + 152 270 rlineto + 0 -536 rlineto + -152 266 rlineto + endchar + </CharString> + <CharString name="A"> + 50 0 rmoveto + 32 0 rlineto + 140 396 rlineto + 28 80 24 68 24 82 rrcurveto + 4 0 rlineto + 24 -82 24 -68 28 -80 rrcurveto + 138 -396 rlineto + 34 0 rlineto + -236 660 rlineto + -28 0 rlineto + -236 -660 rlineto + 102 236 rmoveto + 293 0 rlineto + 0 28 rlineto + -293 0 rlineto + 0 -28 rlineto + endchar + </CharString> + <CharString name="T"> + 284 0 rmoveto + 32 0 rlineto + 0 632 rlineto + 234 0 rlineto + 0 28 rlineto + -500 0 rlineto + 0 -28 rlineto + 234 0 rlineto + 0 -632 rlineto + endchar + </CharString> + <CharString name="dollar"> + -107 245 7 rmoveto + -65 0 -39 15 -46 50 rrcurveto + 36 -48 rlineto + -28 100 rlineto + -4 16 -12 4 -11 0 rrcurveto + -14 0 -8 -7 -1 -14 rrcurveto + 24 -85 61 -51 107 0 rrcurveto + 91 0 90 53 0 111 rrcurveto + 0 70 -26 66 -134 57 rrcurveto + -19 8 rlineto + -93 39 -42 49 0 68 rrcurveto + 0 91 60 48 88 0 rrcurveto + 56 0 35 -14 44 -50 rrcurveto + -38 47 rlineto + 28 -100 rlineto + 6 -15 10 -5 11 0 rrcurveto + 14 0 8 7 1 14 rrcurveto + -24 88 -67 48 -84 0 rrcurveto + -92 0 -82 -51 0 -108 rrcurveto + 0 -80 45 -53 92 -42 rrcurveto + 37 -17 rlineto + 114 -52 26 -46 0 -65 rrcurveto + 0 -92 -65 -54 -90 0 rrcurveto + 18 327 rmoveto + 0 428 rlineto + -22 0 rlineto + 0 -428 rlineto + 22 0 rlineto + -22 -449 rmoveto + 22 0 rlineto + 0 449 rlineto + -22 0 rlineto + 0 -449 rlineto + endchar + </CharString> + <CharString name="dollar.a"> + 311 34 rmoveto + 103 0 88 56 0 94 rrcurveto + 0 184 -338 -32 0 142 rrcurveto + 0 68 57 44 85 0 rrcurveto + 76 0 34 -24 44 -38 rrcurveto + 20 20 rlineto + -41 38 -45 32 -85 0 rrcurveto + -99 0 -78 -54 0 -88 rrcurveto + 0 -166 338 28 0 -156 rrcurveto + 0 -70 -56 -50 -103 0 rrcurveto + -85 0 -66 38 -40 34 rrcurveto + -18 -22 rlineto + 45 -38 73 -40 91 0 rrcurveto + -70 -146 rmoveto + 158 860 rlineto + -30 4 rlineto + -158 -860 rlineto + 30 -4 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <BASE> + <Version value="0x00010000"/> + <HorizAxis> + <BaseTagList> + <!-- BaseTagCount=2 --> + <BaselineTag index="0" value="ideo"/> + <BaselineTag index="1" value="romn"/> + </BaseTagList> + <BaseScriptList> + <!-- BaseScriptCount=4 --> + <BaseScriptRecord index="0"> + <BaseScriptTag value="DFLT"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="1"> + <BaseScriptTag value="cyrl"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="2"> + <BaseScriptTag value="grek"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="3"> + <BaseScriptTag value="latn"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + </BaseScriptList> + </HorizAxis> + </BASE> + + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="size"/> + <Feature> + <FeatureParamsSize> + <DesignSize value="10.0"/> + <SubfamilyID value="0"/> + <SubfamilyNameID value="0"/> + <RangeStart value="0.0"/> + <RangeEnd value="0.0"/> + </FeatureParamsSize> + <!-- LookupCount=0 --> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GPOS> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="dollar" out="dollar.a"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + + <hmtx> + <mtx name=".notdef" width="600" lsb="84"/> + <mtx name="A" width="600" lsb="50"/> + <mtx name="T" width="600" lsb="50"/> + <mtx name="dollar" width="490" lsb="53"/> + <mtx name="dollar.a" width="600" lsb="102"/> + </hmtx> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/varLib/data/master_cff2/TestCFF2_Regular.otf b/Tests/varLib/data/master_cff2/TestCFF2_Regular.otf Binary files differdeleted file mode 100644 index c87342e4..00000000 --- a/Tests/varLib/data/master_cff2/TestCFF2_Regular.otf +++ /dev/null diff --git a/Tests/varLib/data/master_cff2/TestCFF2_Regular.ttx b/Tests/varLib/data/master_cff2/TestCFF2_Regular.ttx new file mode 100644 index 00000000..49d116ce --- /dev/null +++ b/Tests/varLib/data/master_cff2/TestCFF2_Regular.ttx @@ -0,0 +1,516 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="A"/> + <GlyphID id="2" name="T"/> + <GlyphID id="3" name="dollar.a"/> + <GlyphID id="4" name="dollar"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.01"/> + <checkSumAdjustment value="0x60d07155"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Nov 29 14:52:09 2018"/> + <modified value="Thu Nov 29 14:52:09 2018"/> + <xMin value="31"/> + <yMin value="-115"/> + <xMax value="569"/> + <yMax value="751"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="984"/> + <descent value="-273"/> + <lineGap value="0"/> + <advanceWidthMax value="600"/> + <minLeftSideBearing value="31"/> + <minRightSideBearing value="31"/> + <xMaxExtent value="569"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="5"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="5"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="579"/> + <usWeightClass value="400"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="291"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="11"/> + <bWeight value="5"/> + <bProportion value="9"/> + <bContrast value="3"/> + <bStrokeVariation value="4"/> + <bArmStyle value="3"/> + <bLetterForm value="2"/> + <bMidline value="2"/> + <bXHeight value="4"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBO"/> + <fsSelection value="00000000 01000000"/> + <usFirstCharIndex value="36"/> + <usLastCharIndex value="84"/> + <sTypoAscender value="750"/> + <sTypoDescender value="-250"/> + <sTypoLineGap value="0"/> + <usWinAscent value="984"/> + <usWinDescent value="273"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="486"/> + <sCapHeight value="660"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.010;ADBO;SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Roman + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.010;ADBO;SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="17" platformID="3" platEncID="1" langID="0x409"> + Roman + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + <map code="0x24" name="dollar"/> + <map code="0x41" name="A"/> + <map code="0x54" name="T"/> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="1"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="SourceCodeVariable-Roman"> + <version value="1.0"/> + <Notice value="Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries."/> + <Copyright value="Copyright 2010 - 2012 Adobe Systems Incorporated. All Rights Reserved."/> + <FamilyName value="Source Code"/> + <isFixedPitch value="1"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="31 -115 569 751"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="-12 0 486 498 574 586 638 650 656 668 712 724"/> + <OtherBlues value="-217 -205"/> + <BlueScale value="0.0625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="67"/> + <StdVW value="85"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="600"/> + <nominalWidthX value="604"/> + </Private> + <CharStrings> + <CharString name=".notdef"> + 62 0 rmoveto + 476 0 rlineto + 0 660 rlineto + -476 0 rlineto + 0 -660 rlineto + 109 59 rmoveto + 73 131 rlineto + 54 102 rlineto + 4 0 rlineto + 52 -102 rlineto + 73 -131 rlineto + -256 0 rlineto + -44 52 rmoveto + 0 461 rlineto + 127 -232 rlineto + -127 -229 rlineto + 171 277 rmoveto + -50 93 rlineto + -66 119 rlineto + 234 0 rlineto + -65 -119 rlineto + -49 -93 rlineto + -4 0 rlineto + 48 -48 rmoveto + 126 232 rlineto + 0 -461 rlineto + -126 229 rlineto + endchar + </CharString> + <CharString name="A"> + 31 0 rmoveto + 86 0 rlineto + 115 366 rlineto + 23 73 21 72 21 76 rrcurveto + 4 0 rlineto + 20 -76 22 -72 23 -73 rrcurveto + 113 -366 rlineto + 90 0 rlineto + -221 656 rlineto + -96 0 rlineto + -221 -656 rlineto + 117 199 rmoveto + 301 0 rlineto + 0 68 rlineto + -301 0 rlineto + 0 -68 rlineto + endchar + </CharString> + <CharString name="T"> + 258 0 rmoveto + 84 0 rlineto + 0 585 rlineto + 217 0 rlineto + 0 71 rlineto + -518 0 rlineto + 0 -71 rlineto + 217 0 rlineto + 0 -585 rlineto + endchar + </CharString> + <CharString name="dollar"> + -107 248 35 rmoveto + -39 0 -45 5 -46 18 rrcurveto + 53 -36 rlineto + -17 76 rlineto + -12 53 -22 13 -24 0 rrcurveto + -22 0 -14 -11 -9 -20 rrcurveto + 4 -87 81 -59 107 0 rrcurveto + 136 0 82 76 0 107 rrcurveto + 0 82 -41 65 -135 47 rrcurveto + -38 13 rlineto + -71 23 -40 35 0 64 rrcurveto + 0 75 57 37 74 0 rrcurveto + 30 0 36 -5 42 -17 rrcurveto + -52 36 rlineto + 17 -76 rlineto + 12 -52 25 -14 22 0 rrcurveto + 19 0 17 10 8 21 rrcurveto + -6 86 -80 60 -101 0 rrcurveto + -115 0 -83 -80 0 -102 rrcurveto + 0 -100 62 -54 105 -37 rrcurveto + 37 -13 rlineto + 85 -30 36 -30 0 -63 rrcurveto + 0 -74 -53 -42 -82 0 rrcurveto + 31 287 rmoveto + 0 428 rlineto + -40 0 rlineto + 0 -428 rlineto + 40 0 rlineto + -41 -437 rmoveto + 40 0 rlineto + 0 437 rlineto + -40 0 rlineto + 0 -437 rlineto + endchar + </CharString> + <CharString name="dollar.a"> + 304 34 rmoveto + 125 0 86 65 0 96 rrcurveto + 0 183 -324 -21 0 110 rrcurveto + 0 50 42 32 67 0 rrcurveto + 68 0 36 -21 47 -36 rrcurveto + 44 49 rlineto + -46 44 -54 33 -89 0 rrcurveto + -115 0 -81 -59 0 -94 rrcurveto + 0 -174 324 22 0 -124 rrcurveto + 0 -51 -42 -35 -78 0 rrcurveto + -76 0 -62 31 -52 37 rrcurveto + -39 -58 rlineto + 52 -43 84 -36 83 0 rrcurveto + -51 -147 rmoveto + 159 857 rlineto + -56 7 rlineto + -159 -858 rlineto + 56 -6 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <BASE> + <Version value="0x00010000"/> + <HorizAxis> + <BaseTagList> + <!-- BaseTagCount=2 --> + <BaselineTag index="0" value="ideo"/> + <BaselineTag index="1" value="romn"/> + </BaseTagList> + <BaseScriptList> + <!-- BaseScriptCount=4 --> + <BaseScriptRecord index="0"> + <BaseScriptTag value="DFLT"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="1"> + <BaseScriptTag value="cyrl"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="2"> + <BaseScriptTag value="grek"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="3"> + <BaseScriptTag value="latn"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + </BaseScriptList> + </HorizAxis> + </BASE> + + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="size"/> + <Feature> + <FeatureParamsSize> + <DesignSize value="10.0"/> + <SubfamilyID value="0"/> + <SubfamilyNameID value="0"/> + <RangeStart value="0.0"/> + <RangeEnd value="0.0"/> + </FeatureParamsSize> + <!-- LookupCount=0 --> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GPOS> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=1 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="dollar" out="dollar.a"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + + <hmtx> + <mtx name=".notdef" width="600" lsb="62"/> + <mtx name="A" width="600" lsb="31"/> + <mtx name="T" width="600" lsb="41"/> + <mtx name="dollar" width="497" lsb="51"/> + <mtx name="dollar.a" width="600" lsb="85"/> + </hmtx> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w0.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w0.00.ttx new file mode 100644 index 00000000..57731584 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w0.00.ttx @@ -0,0 +1,1266 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid00001"/> + <GlyphID id="2" name="cid00002"/> + <GlyphID id="3" name="cid01177"/> + <GlyphID id="4" name="cid06449"/> + <GlyphID id="5" name="cid06821"/> + <GlyphID id="6" name="cid07253"/> + <GlyphID id="7" name="cid13393"/> + <GlyphID id="8" name="cid17290"/> + <GlyphID id="9" name="cid17852"/> + <GlyphID id="10" name="cid18480"/> + <GlyphID id="11" name="cid22370"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xab835f00"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:06:21 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="14"/> + <yMin value="-120"/> + <xMax value="976"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="14"/> + <minRightSideBearing value="24"/> + <xMaxExtent value="976"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="4"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="12"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="977"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000011"/> + <ulUnicodeRange2 value="00101000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="0"/> + <usLastCharIndex value="63964"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w0.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w0.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w0.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w0.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="532" language="0" nGroups="43"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + <cmap_format_14 platformID="0" platEncID="5"> + <map uv="0x9686" uvs="0xfe00" name="cid13393"/> + <map uv="0x9686" uvs="0xe0101" name="cid13393"/> + </cmap_format_14> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="532" language="0" nGroups="43"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w0.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w0.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="14 -120 976 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w0.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w0.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + <FontDict index="2"> + <FontName value="MasterSet_Kanji-w0.00-Proportional"/> + <Private> + <BlueValues value="0 0"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="668"/> + <nominalWidthX value="504"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid00001" fdSelectIndex="2"> + -273 endchar + </CharString> + <CharString name="cid00002" fdSelectIndex="2"> + -282 -12 83 hstemhm + 74 73 -57 40 hintmask 10100000 + 134 755 rmoveto + -48 0 rlineto + 8 -565 rlineto + 32 0 rlineto + hintmask 11000000 + -17 -202 rmoveto + 24 0 14 18 0 22 rrcurveto + 0 25 -14 18 -22 0 rrcurveto + -23 0 -14 -21 0 -24 rrcurveto + 0 -18 13 -20 22 0 rrcurveto + endchar + </CharString> + <CharString name="cid01177" fdSelectIndex="1"> + 1000 -72 30 253 30 94 30 92 30 65 30 131 45 -30 112 -99 17 hstemhm + 193 30 83 30 147 30 173 30 66 30 hintmask 1111100011111000 + 306 142 rmoveto + 0 -156 rlineto + 0 -50 22 -8 79 0 rrcurveto + 17 0 186 0 18 0 rrcurveto + 70 0 13 25 5 114 rrcurveto + -9 3 -12 4 -9 6 rrcurveto + -4 -109 -7 -13 -49 0 rrcurveto + -38 0 -156 0 -27 0 rrcurveto + -59 0 -10 5 0 22 rrcurveto + 0 157 rlineto + 63 34 rmoveto + 65 -30 74 -47 37 -37 rrcurveto + 20 22 rlineto + -37 36 -75 47 -65 28 rrcurveto + 320 -64 rmoveto + 76 -49 83 -75 38 -54 rrcurveto + 23 19 rlineto + -38 54 -84 73 -76 49 rrcurveto + -557 -5 rmoveto + -28 -68 -50 -72 -77 -40 rrcurveto + 24 -17 rlineto + 79 42 47 74 31 71 rrcurveto + -117 625 rmoveto + 0 -30 rlineto + 775 0 rlineto + 0 30 rlineto + -818 -176 rmoveto + 0 -30 rlineto + 869 0 rlineto + 0 30 rlineto + hintmask 0000001000100000 + -455 258 rmoveto + hintmask 0000000100100000 + 0 -99 rlineto + 30 0 rlineto + hintmask 0000001000100000 + 0 99 rlineto + hintmask 0111010010001000 + -236 -127 rmoveto + 26 -40 25 -53 9 -36 rrcurveto + 29 12 rlineto + -10 35 -25 53 -27 39 rrcurveto + 393 2 rmoveto + -16 -38 -31 -57 -23 -35 rrcurveto + 27 -12 rlineto + 24 36 26 48 23 46 rrcurveto + -504 -378 rmoveto + 559 0 rlineto + 0 -94 rlineto + -559 0 rlineto + 0 216 rmoveto + 559 0 rlineto + 0 -92 rlineto + -559 0 rlineto + -30 122 rmoveto + 0 -276 rlineto + 619 0 rlineto + 0 276 rlineto + endchar + </CharString> + <CharString name="cid06449" fdSelectIndex="1"> + 1000 -60 30 203 30 -9 9 67 7 -7 14 -14 30 -20 20 80 30 59 30 121 30 18 93 -30 30 -30 108 hstemhm + 77 30 42 30 139 30 23 30 71 10 74 30 15 30 16 30 158 30 28 30 -4 29 hintmask 110001011101011101101101 + 53 761 rmoveto + 0 -30 rlineto + 896 0 rlineto + 0 30 rlineto + -802 -461 rmoveto + 0 -30 rlineto + 703 0 rlineto + 0 30 rlineto + hintmask 000000000000100100000000 + -532 539 rmoveto + hintmask 000000000010000100000000 + 0 -171 rlineto + 30 0 rlineto + hintmask 000000000000100100001000 + 0 171 rlineto + 299 0 rmoveto + hintmask 000000000010000000001000 + 0 -171 rlineto + 30 0 rlineto + hintmask 000000000000100000001000 + 0 171 rlineto + hintmask 000000111100011010010100 + -46 -219 rmoveto + 204 0 rlineto + 0 -121 rlineto + -204 0 rlineto + -230 121 rmoveto + 200 0 rlineto + 0 -121 rlineto + -200 0 rlineto + -222 121 rmoveto + 192 0 rlineto + 0 -121 rlineto + -192 0 rlineto + -30 151 rmoveto + 0 -181 rlineto + 716 0 rlineto + 0 181 rlineto + -788 -240 rmoveto + 0 -130 rlineto + 30 0 rlineto + 0 100 rlineto + hintmask 000000110000000000000010 + 786 0 rlineto + 0 -100 rlineto + 30 0 rlineto + 0 130 rlineto + hintmask 000010000000000100000000 + -610 -123 rmoveto + -50 -62 -93 -73 -118 -54 rrcurveto + 8 -4 10 -9 6 -7 rrcurveto + hintmask 010000000000000001000000 + 121 58 92 75 59 70 rrcurveto + 124 -78 rmoveto + 0 -7 rlineto + -65 -139 -176 -81 -162 -31 rrcurveto + 6 -6 8 -12 3 -8 rrcurveto + hintmask 001000000000000001000000 + 168 37 178 84 72 154 rrcurveto + hintmask 110100000000000001100001 + -19 11 rlineto + -6 -2 rlineto + -333 -72 rmoveto + 65 -25 75 -46 38 -35 rrcurveto + 26 19 rlineto + -39 34 -76 45 -64 25 rrcurveto + 72 55 rmoveto + -30 -30 rlineto + 269 0 rlineto + 0 30 rlineto + 74 74 rmoveto + 0 -276 rlineto + 0 -52 21 -9 77 0 rrcurveto + 16 0 182 0 18 0 rrcurveto + 62 0 12 21 4 88 rrcurveto + -9 2 -12 5 -8 6 rrcurveto + -4 -81 -6 -11 -41 0 rrcurveto + -37 0 -154 0 -26 0 rrcurveto + -56 0 -9 6 0 25 rrcurveto + 0 276 rlineto + 278 -62 rmoveto + -66 -32 -126 -33 -107 -23 rrcurveto + 5 -7 5 -10 2 -7 rrcurveto + 110 22 126 32 81 36 rrcurveto + endchar + </CharString> + <CharString name="cid06821" fdSelectIndex="1"> + 1000 -58 30 100 30 70 22 -22 30 94 30 19 31 -17 28 152 20 -20 30 -12 12 66 30 -30 89 -5 30 -30 121 hstemhm + 127 30 -18 18 199 30 -20 20 -20 30 -24 14 97 30 -11 11 72 31 202 30 87 29 hintmask 00011000000000000000000100000000 + 193 296 rmoveto + 625 0 rlineto + 0 -94 rlineto + -625 0 rlineto + -30 124 rmoveto + 0 -154 rlineto + 685 0 rlineto + 0 154 rlineto + hintmask 00100000000000000000100000000000 + -365 -132 rmoveto + 0 -232 rlineto + 30 -5 rlineto + 0 237 rlineto + hintmask 01000000000010010000010000000000 + -11 -92 rmoveto + 0 -30 rlineto + 397 0 rlineto + 0 30 rlineto + -760 647 rmoveto + 0 -30 rlineto + 811 0 rlineto + 0 30 rlineto + hintmask 00000000000010100000000000000000 + -823 0 rmoveto + 0 -143 rlineto + 0 -83 -13 -107 -75 -82 rrcurveto + 7 -4 11 -9 5 -6 rrcurveto + 79 85 16 118 0 88 rrcurveto + 0 143 rlineto + hintmask 00000000010100001000000000000000 + 199 -25 rmoveto + 0 -167 rlineto + hintmask 00000000010100000100000000000000 + 30 0 rlineto + 0 167 rlineto + hintmask 00000000101000000001000000000000 + -14 -59 rmoveto + 0 -30 rlineto + 185 0 rlineto + 0 30 rlineto + -365 -96 rmoveto + 0 -30 rlineto + 392 0 rlineto + 0 30 rlineto + hintmask 00000011000000000100000000000000 + -218 -10 rmoveto + 0 -160 rlineto + 0 -8 -2 -3 -11 -1 rrcurveto + -11 -1 -30 0 -47 1 rrcurveto + 5 -9 6 -10 2 -9 rrcurveto + hintmask 00000011000001000010001000000000 + 50 0 30 0 17 6 rrcurveto + 17 5 4 9 0 21 rrcurveto + 0 159 rlineto + -132 -50 rmoveto + -25 -42 -40 -39 -44 -30 rrcurveto + 8 -4 13 -10 5 -4 rrcurveto + 41 30 45 47 26 45 rrcurveto + 153 -7 rmoveto + 35 -27 38 -39 18 -28 rrcurveto + 24 18 rlineto + -18 27 -39 39 -34 25 rrcurveto + 115 330 rmoveto + hintmask 10000101000001000000001010000000 + 14 -286 131 -209 160 0 rrcurveto + 50 1 18 34 6 108 rrcurveto + -9 3 -11 5 -9 7 rrcurveto + -4 -92 -9 -34 -31 -1 rrcurveto + -137 -2 -126 185 -12 281 rrcurveto + 207 -169 rmoveto + -61 -129 -111 -108 -121 -69 rrcurveto + 7 -5 12 -11 5 -6 rrcurveto + 119 74 113 110 66 136 rrcurveto + -156 153 rmoveto + 52 -15 63 -26 34 -21 rrcurveto + 15 27 rlineto + -34 20 -64 24 -51 14 rrcurveto + -453 -763 rmoveto + -25 -16 rlineto + 89 -100 146 -18 233 0 rrcurveto + 185 0 rlineto + 64 0 rlineto + 2 8 6 14 6 8 rrcurveto + -35 0 -207 0 -22 0 rrcurveto + -214 0 -150 15 -78 89 rrcurveto + 5 62 rmoveto + -30 -97 -92 -60 -107 -36 rrcurveto + 8 -6 12 -11 4 -6 rrcurveto + 105 41 99 65 32 106 rrcurveto + endchar + </CharString> + <CharString name="cid07253" fdSelectIndex="1"> + 1000 -80 27 95 49 -48 48 -45 45 -30 30 -16 16 -13 13 49 30 48 30 47 19 -19 30 53 30 -18 18 51 11 -11 30 -22 22 62 30 60 30 15 81 -30 30 -30 102 hstemhm + 193 30 -1 30 -15 15 106 29 96 30 142 30 109 30 5 10 hintmask 10000011101100101101000101110000 + 55 767 rmoveto + 0 -30 rlineto + 892 0 rlineto + 0 30 rlineto + hintmask 00000000000000000000100000000000 + -637 72 rmoveto + hintmask 00000000000000000010000000000000 + 0 -153 rlineto + 30 0 rlineto + hintmask 00000000000000000000100000100000 + 0 153 rlineto + 315 0 rmoveto + hintmask 00000000000000000010000000100000 + 0 -153 rlineto + 30 0 rlineto + hintmask 00000000000100101100110000110000 + 0 153 rlineto + -462 -288 rmoveto + 571 0 rlineto + 0 -62 rlineto + -571 0 rlineto + 0 152 rmoveto + 571 0 rlineto + 0 -60 rlineto + -571 0 rlineto + -30 90 rmoveto + 0 -212 rlineto + 631 0 rlineto + 0 212 rlineto + -776 -263 rmoveto + 0 -30 rlineto + 905 0 rlineto + 0 30 rlineto + hintmask 00000001100000000000000100000000 + -716 -160 rmoveto + 0 -30 rlineto + 554 0 rlineto + 0 30 rlineto + -554 -78 rmoveto + 0 -30 rlineto + 563 0 rlineto + 0 30 rlineto + hintmask 00000010000000000000001000000000 + -578 -79 rmoveto + hintmask 00001000000000000000001000001000 + 0 -30 rlineto + 617 0 rlineto + hintmask 00000010000001000000000000001000 + 0 30 rlineto + -477 382 rmoveto + -46 -92 -113 -104 -167 -65 rrcurveto + 7 -5 10 -9 5 -8 rrcurveto + hintmask 00000100010010010000000001000000 + 172 70 111 106 55 101 rrcurveto + 298 -65 rmoveto + -25 -12 rlineto + 62 -80 121 -81 100 -38 rrcurveto + 5 8 9 11 7 6 rrcurveto + -101 33 -119 76 -59 77 rrcurveto + -211 -88 rmoveto + 0 -239 rlineto + 30 0 rlineto + 0 239 rlineto + hintmask 10000010000000000000000000001000 + 316 -223 rmoveto + 0 -6 rlineto + -8 -87 -7 -34 -10 -10 rrcurveto + -6 -6 -6 -1 -12 0 rrcurveto + -11 0 -31 1 -34 3 rrcurveto + 5 -8 3 -13 1 -8 rrcurveto + 28 -2 30 -1 14 1 rrcurveto + 21 0 10 4 10 9 rrcurveto + 16 15 7 35 9 89 rrcurveto + 1 7 1 12 0 0 rrcurveto + -660 -34 rmoveto + -17 -46 -32 -46 -46 -23 rrcurveto + 20 -21 rlineto + hintmask 10010000000000000000000000000000 + 52 28 31 51 17 46 rrcurveto + hintmask 00100000000000000000000010000000 + 110 -3 rmoveto + 13 -38 10 -49 0 -32 rrcurveto + 29 6 rlineto + -1 31 -10 50 -15 37 rrcurveto + hintmask 01000000000000000000000000100000 + 113 -6 rmoveto + 22 -32 20 -44 7 -30 rrcurveto + 28 10 rlineto + -8 29 -21 44 -23 32 rrcurveto + hintmask 00010000001000000000001000000000 + 117 -5 rmoveto + 25 -23 27 -32 13 -23 rrcurveto + 21 14 rlineto + -12 22 -27 32 -26 22 rrcurveto + -381 267 rmoveto + -16 -30 rlineto + 498 0 rlineto + 0 30 rlineto + -516 -23 rmoveto + hintmask 00000010000000000000001000000000 + 0 -224 rlineto + hintmask 00000010001000000000000100000000 + 30 0 rlineto + 0 247 rlineto + endchar + </CharString> + <CharString name="cid13393" fdSelectIndex="1"> + 1000 -50 30 -19 19 114 30 44 30 23 30 -30 114 35 30 316 30 -10 10 37 12 hstemhm + 82 30 197 30 -26 8 317 30 168 13 hintmask 1010101101110110 + 529 746 rmoveto + 0 -30 rlineto + 320 0 rlineto + 0 30 rlineto + -397 -495 rmoveto + 0 -30 rlineto + 442 0 rlineto + 0 30 rlineto + -420 149 rmoveto + 0 -30 rlineto + 374 0 rlineto + 0 30 rlineto + -514 -420 rmoveto + 0 -30 rlineto + 626 0 rlineto + 0 30 rlineto + -531 144 rmoveto + 0 -30 rlineto + 460 0 rlineto + 0 30 rlineto + -53 622 rmoveto + 0 -7 rlineto + -86 -171 -222 -118 -188 -45 rrcurveto + 7 -7 8 -11 3 -8 rrcurveto + hintmask 0000000010000010 + 192 51 224 119 94 187 rrcurveto + hintmask 0100010100000110 + -19 12 rlineto + -6 -2 rlineto + -323 -32 rmoveto + -25 -11 rlineto + 83 -154 177 -116 201 -44 rrcurveto + 4 8 9 12 7 6 rrcurveto + -200 39 -177 113 -79 147 rrcurveto + 59 127 rmoveto + -40 -82 -80 -104 -112 -75 rrcurveto + 8 -4 10 -9 6 -7 rrcurveto + 115 80 80 106 47 90 rrcurveto + -129 -493 rmoveto + -27 -73 -43 -71 -51 -50 rrcurveto + 8 -5 13 -9 5 -5 rrcurveto + 49 52 47 77 29 77 rrcurveto + 124 -1 rmoveto + 0 -374 rlineto + 30 0 rlineto + 0 374 rlineto + hintmask 0000000000101000 + -586 460 rmoveto + 0 -875 rlineto + 30 0 rlineto + 0 845 rlineto + 209 0 rlineto + 0 30 rlineto + -8 0 rmoveto + 0 -7 rlineto + -28 -75 -43 -102 -46 -95 rrcurveto + hintmask 0001000000010000 + 89 -91 24 -74 0 -63 rrcurveto + 0 -33 -6 -35 -19 -13 rrcurveto + -10 -6 -12 -3 -14 -1 rrcurveto + -20 -2 -26 1 -29 2 rrcurveto + 7 -9 4 -13 1 -8 rrcurveto + 22 -2 27 0 22 2 rrcurveto + 19 2 17 5 12 9 rrcurveto + 25 17 10 43 0 44 rrcurveto + 0 67 -22 76 -86 89 rrcurveto + hintmask 0000000001001000 + 39 84 42 98 33 81 rrcurveto + hintmask 0000000000001000 + -20 14 rlineto + -6 -2 rlineto + endchar + </CharString> + <CharString name="cid17290" fdSelectIndex="1"> + 1000 121 30 -22 22 148 30 -30 136 23 30 129 30 116 30 hstemhm + 167 30 129 30 -16 16 123 30 48 30 -6 29 -29 111 -30 30 -16 16 201 30 1 29 hintmask 011011111011001010000000 + 326 793 rmoveto + 0 -280 rlineto + 0 -47 16 -8 59 0 rrcurveto + hintmask 000010000000100000000000 + 13 0 120 0 13 0 rrcurveto + 49 0 10 20 4 82 rrcurveto + hintmask 101010101000010000000000 + -10 2 -11 5 -8 6 rrcurveto + -3 -75 -5 -10 -29 0 rrcurveto + -24 0 -102 0 -18 0 rrcurveto + -38 0 -6 4 0 21 rrcurveto + 0 280 rlineto + -41 -464 rmoveto + 0 -30 rlineto + 617 0 rlineto + 0 30 rlineto + -661 -178 rmoveto + 0 -30 rlineto + 689 0 rlineto + 0 30 rlineto + hintmask 010101100111001000000000 + -481 284 rmoveto + 0 -306 rlineto + 30 0 rlineto + 0 306 rlineto + 218 0 rmoveto + 0 -306 rlineto + 30 0 rlineto + 0 306 rlineto + -417 358 rmoveto + 0 -30 rlineto + 217 0 rlineto + 0 -116 rlineto + -217 0 rlineto + 0 -30 rlineto + 247 0 rlineto + 0 176 rlineto + 75 0 rmoveto + hintmask 000010100000001001000000 + 0 -280 rlineto + 0 -47 17 -8 60 0 rrcurveto + 12 0 125 0 14 0 rrcurveto + 49 0 11 20 3 82 rrcurveto + -9 2 -12 4 -8 7 rrcurveto + -3 -75 -5 -10 -30 0 rrcurveto + -25 0 -105 0 -18 0 rrcurveto + -40 0 -6 4 0 21 rrcurveto + 0 280 rlineto + hintmask 000001110000000110000000 + -16 0 rmoveto + 0 -30 rlineto + 217 0 rlineto + 0 -116 rlineto + -217 0 rlineto + 0 -30 rlineto + 247 0 rlineto + 0 176 rlineto + -424 -714 rmoveto + -52 -54 -91 -49 -81 -33 rrcurveto + 8 -5 11 -13 4 -6 rrcurveto + 80 36 94 56 56 58 rrcurveto + 200 -7 rmoveto + 76 -41 90 -62 46 -42 rrcurveto + 22 23 rlineto + -46 42 -91 60 -75 39 rrcurveto + -499 750 rmoveto + -54 -167 -87 -164 -96 -108 rrcurveto + 7 -6 11 -12 4 -6 rrcurveto + 98 116 88 165 58 175 rrcurveto + -113 -214 rmoveto + 0 -691 rlineto + 30 0 rlineto + 0 718 rlineto + -1 2 rlineto + endchar + </CharString> + <CharString name="cid17852" fdSelectIndex="1"> + 1000 -67 29 219 30 154 30 -16 16 150 30 -30 122 -85 30 -18 18 87 30 -30 140 -122 12 hstemhm + 51 188 -30 30 -30 149 21 30 -18 18 -13 13 66 30 -12 12 135 30 41 30 172 30 -6 28 hintmask 000000100001000000000000 + 51 612 rmoveto + 0 -30 rlineto + hintmask 000000100000010000000000 + 307 0 rlineto + 0 30 rlineto + hintmask 000000010010100100000000 + -149 228 rmoveto + 0 -918 rlineto + 30 0 rlineto + 0 918 rlineto + -36 -238 rmoveto + -31 -160 -74 -193 -68 -95 rrcurveto + 7 -5 10 -11 6 -8 rrcurveto + 70 101 74 203 33 160 rrcurveto + 4 -143 rmoveto + -21 -16 rlineto + 25 -26 72 -92 21 -33 rrcurveto + 24 24 rlineto + -18 25 -81 96 -22 22 rrcurveto + 157 278 rmoveto + hintmask 000000001000000100000000 + 0 -30 rlineto + 559 0 rlineto + hintmask 010000000010000000100000 + 0 30 rlineto + -457 -518 rmoveto + 0 -30 rlineto + 176 0 rlineto + 0 30 rlineto + hintmask 000000000100000001010000 + -194 120 rmoveto + 0 -365 rlineto + 30 0 rlineto + 0 365 rlineto + 135 508 rmoveto + hintmask 000000000010000000010000 + 0 -122 rlineto + 30 0 rlineto + hintmask 000101000100000000010000 + 0 122 rlineto + -115 -172 rmoveto + 0 -288 rlineto + 30 0 rlineto + 0 288 rlineto + 148 0 rmoveto + 0 -288 rlineto + 30 0 rlineto + 0 288 rlineto + 156 -394 rmoveto + -52 -36 -89 -48 -61 -29 rrcurveto + 15 -21 rlineto + 62 28 86 41 57 44 rrcurveto + hintmask 101010000000000010001100 + -541 323 rmoveto + 0 -30 rlineto + 517 0 rlineto + 0 -150 rlineto + -517 0 rlineto + 0 -30 rlineto + 547 0 rlineto + 0 210 rlineto + -232 -242 rmoveto + 0 -344 rlineto + 0 -47 15 -9 54 0 rrcurveto + hintmask 100000000010001000001010 + 12 0 100 0 12 0 rrcurveto + 48 0 10 25 3 102 rrcurveto + -9 3 -11 4 -8 6 rrcurveto + -3 -97 -4 -14 -29 0 rrcurveto + -21 0 -84 0 -16 0 rrcurveto + -33 0 -6 5 0 22 rrcurveto + 0 344 rlineto + -346 -371 rmoveto + 10 -31 rlineto + 77 16 100 22 99 21 rrcurveto + -2 29 rlineto + -108 -22 -104 -22 -72 -13 rrcurveto + -16 767 rmoveto + 0 -316 rlineto + 0 -142 -7 -194 -74 -141 rrcurveto + 8 -3 13 -7 5 -6 rrcurveto + 75 143 10 205 0 145 rrcurveto + 0 316 rlineto + endchar + </CharString> + <CharString name="cid18480" fdSelectIndex="1"> + 1000 -71 30 427 30 153 30 33 111 -30 30 -30 126 hstemhm + 159 30 -19 19 126 30 -6 30 281 30 160 30 18 31 hintmask 1110100101110000 + 58 743 rmoveto + 0 -30 rlineto + 887 0 rlineto + 0 30 rlineto + hintmask 0000010010000000 + -630 96 rmoveto + hintmask 0001000010000000 + 0 -207 rlineto + 30 0 rlineto + hintmask 0000010010100000 + 0 207 rlineto + 305 0 rmoveto + hintmask 0001000000100000 + 0 -207 rlineto + 30 0 rlineto + hintmask 0010011000100000 + 0 207 rlineto + -521 -240 rmoveto + 0 -206 rlineto + 0 -137 -15 -184 -109 -136 rrcurveto + 7 -3 12 -9 5 -6 rrcurveto + hintmask 1110000101010000 + 112 139 18 194 0 141 rrcurveto + 0 207 rlineto + -19 0 rmoveto + 0 -30 rlineto + 670 0 rlineto + 0 -153 rlineto + -670 0 rlineto + 0 -30 rlineto + 700 0 rlineto + 0 213 rlineto + -531 -249 rmoveto + 0 -343 rlineto + 0 -66 31 -12 105 0 rrcurveto + 23 0 278 0 24 0 rrcurveto + hintmask 1000000001001000 + 96 0 15 31 8 123 rrcurveto + -9 3 -13 4 -9 7 rrcurveto + -6 -117 -11 -21 -69 0 rrcurveto + -56 0 -236 0 -41 0 rrcurveto + -84 0 -16 11 0 37 rrcurveto + 0 343 rlineto + 444 -47 rmoveto + -101 -52 -195 -56 -169 -40 rrcurveto + 4 -7 5 -10 3 -7 rrcurveto + 172 40 193 54 120 56 rrcurveto + endchar + </CharString> + <CharString name="cid22370" fdSelectIndex="1"> + 1000 64 30 77 30 76 30 74 30 72 30 109 30 25 84 -30 30 -30 108 hstemhm + 135 30 21 30 102 30 14 30 205 30 17 30 113 30 19 30 hintmask 111111010011001100000000 + 53 761 rmoveto + 0 -30 rlineto + 896 0 rlineto + 0 30 rlineto + hintmask 000000001001000000000000 + -631 78 rmoveto + hintmask 000000100001000000000000 + 0 -162 rlineto + 30 0 rlineto + hintmask 000000001001001000000000 + 0 162 rlineto + 296 0 rmoveto + hintmask 000000100000001000000000 + 0 -162 rlineto + 30 0 rlineto + hintmask 000000001000001000000000 + 0 162 rlineto + hintmask 000011000100110010000000 + -47 -217 rmoveto + 209 0 rlineto + 0 -109 rlineto + -209 0 rlineto + -235 109 rmoveto + 205 0 rlineto + 0 -109 rlineto + -205 0 rlineto + -227 109 rmoveto + 197 0 rlineto + 0 -109 rlineto + -197 0 rlineto + -30 139 rmoveto + 0 -169 rlineto + 731 0 rlineto + 0 169 rlineto + hintmask 111100000010000100000000 + -650 -375 rmoveto + 571 0 rlineto + 0 -76 rlineto + -571 0 rlineto + 0 -30 rmoveto + 571 0 rlineto + 0 -77 rlineto + -571 0 rlineto + 0 287 rmoveto + 571 0 rlineto + 0 -74 rlineto + -571 0 rlineto + -30 104 rmoveto + 0 -347 rlineto + 631 0 rlineto + 0 347 rlineto + -216 -389 rmoveto + 127 -34 121 -39 72 -31 rrcurveto + 31 22 rlineto + -78 32 -126 39 -121 31 rrcurveto + -258 -1 rmoveto + -81 -39 -128 -36 -107 -23 rrcurveto + 8 -6 12 -12 5 -6 rrcurveto + 103 25 130 41 86 43 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid00001" width="231" lsb="0"/> + <mtx name="cid00002" width="222" lsb="74"/> + <mtx name="cid01177" width="1000" lsb="48"/> + <mtx name="cid06449" width="1000" lsb="52"/> + <mtx name="cid06821" width="1000" lsb="34"/> + <mtx name="cid07253" width="1000" lsb="36"/> + <mtx name="cid13393" width="1000" lsb="82"/> + <mtx name="cid17290" width="1000" lsb="14"/> + <mtx name="cid17852" width="1000" lsb="30"/> + <mtx name="cid18480" width="1000" lsb="35"/> + <mtx name="cid22370" width="1000" lsb="53"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid00001" height="1000" tsb="880"/> + <mtx name="cid00002" height="1000" tsb="125"/> + <mtx name="cid01177" height="1000" tsb="40"/> + <mtx name="cid06449" height="1000" tsb="41"/> + <mtx name="cid06821" height="1000" tsb="40"/> + <mtx name="cid07253" height="1000" tsb="41"/> + <mtx name="cid13393" height="1000" tsb="39"/> + <mtx name="cid17290" height="1000" tsb="49"/> + <mtx name="cid17852" height="1000" tsb="40"/> + <mtx name="cid18480" height="1000" tsb="41"/> + <mtx name="cid22370" height="1000" tsb="41"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w1000.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w1000.00.ttx new file mode 100644 index 00000000..e527d075 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w1000.00.ttx @@ -0,0 +1,1266 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid00001"/> + <GlyphID id="2" name="cid00002"/> + <GlyphID id="3" name="cid01177"/> + <GlyphID id="4" name="cid06449"/> + <GlyphID id="5" name="cid06821"/> + <GlyphID id="6" name="cid07253"/> + <GlyphID id="7" name="cid13393"/> + <GlyphID id="8" name="cid17290"/> + <GlyphID id="9" name="cid17852"/> + <GlyphID id="10" name="cid18480"/> + <GlyphID id="11" name="cid22370"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xc54fcf7b"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:08:26 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="8"/> + <yMin value="-120"/> + <xMax value="995"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="8"/> + <minRightSideBearing value="5"/> + <xMaxExtent value="995"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="4"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="12"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="979"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000011"/> + <ulUnicodeRange2 value="00101000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="0"/> + <usLastCharIndex value="63964"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w1000.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w1000.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w1000.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w1000.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="532" language="0" nGroups="43"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + <cmap_format_14 platformID="0" platEncID="5"> + <map uv="0x9686" uvs="0xfe00" name="cid13393"/> + <map uv="0x9686" uvs="0xe0101" name="cid13393"/> + </cmap_format_14> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="532" language="0" nGroups="43"> + <map code="0x0" name="cid00001"/><!-- ???? --> + <map code="0x1" name="cid00001"/><!-- ???? --> + <map code="0x2" name="cid00001"/><!-- ???? --> + <map code="0x3" name="cid00001"/><!-- ???? --> + <map code="0x4" name="cid00001"/><!-- ???? --> + <map code="0x5" name="cid00001"/><!-- ???? --> + <map code="0x6" name="cid00001"/><!-- ???? --> + <map code="0x7" name="cid00001"/><!-- ???? --> + <map code="0x8" name="cid00001"/><!-- ???? --> + <map code="0x9" name="cid00001"/><!-- ???? --> + <map code="0xa" name="cid00001"/><!-- ???? --> + <map code="0xb" name="cid00001"/><!-- ???? --> + <map code="0xc" name="cid00001"/><!-- ???? --> + <map code="0xd" name="cid00001"/><!-- ???? --> + <map code="0xe" name="cid00001"/><!-- ???? --> + <map code="0xf" name="cid00001"/><!-- ???? --> + <map code="0x10" name="cid00001"/><!-- ???? --> + <map code="0x11" name="cid00001"/><!-- ???? --> + <map code="0x12" name="cid00001"/><!-- ???? --> + <map code="0x13" name="cid00001"/><!-- ???? --> + <map code="0x14" name="cid00001"/><!-- ???? --> + <map code="0x15" name="cid00001"/><!-- ???? --> + <map code="0x16" name="cid00001"/><!-- ???? --> + <map code="0x17" name="cid00001"/><!-- ???? --> + <map code="0x18" name="cid00001"/><!-- ???? --> + <map code="0x19" name="cid00001"/><!-- ???? --> + <map code="0x1a" name="cid00001"/><!-- ???? --> + <map code="0x1b" name="cid00001"/><!-- ???? --> + <map code="0x1c" name="cid00001"/><!-- ???? --> + <map code="0x1d" name="cid00001"/><!-- ???? --> + <map code="0x1e" name="cid00001"/><!-- ???? --> + <map code="0x1f" name="cid00001"/><!-- ???? --> + <map code="0x20" name="cid00001"/><!-- SPACE --> + <map code="0x21" name="cid00002"/><!-- EXCLAMATION MARK --> + <map code="0xa0" name="cid00001"/><!-- NO-BREAK SPACE --> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w1000.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w1000.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="8 -120 995 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w1000.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w1000.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + <FontDict index="2"> + <FontName value="MasterSet_Kanji-w1000.00-Proportional"/> + <Private> + <BlueValues value="0 0"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="683"/> + <nominalWidthX value="614"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid00001" fdSelectIndex="2"> + -405 endchar + </CharString> + <CharString name="cid00002" fdSelectIndex="2"> + -316 -11 209 hstemhm + 48 202 -182 161.5 hintmask 10100000 + 241 773 rmoveto + -185 0 rlineto + 24 -515 rlineto + 138 0 rlineto + hintmask 11000000 + -69 -269 rmoveto + 62 0 39 44 0 60 rrcurveto + 0 62 -42 43 -59 0 rrcurveto + -57 0 -44 -43 0 -62 rrcurveto + 0 -58 40 -46 61 0 rrcurveto + endchar + </CharString> + <CharString name="cid01177" fdSelectIndex="1"> + 1000 -84 115 161 86 31 81 30 86 34 111 50 108 -111 157 -126 80 hstemhm + 165 137 -23 141 6 146 59 122 -49 144 hintmask 1111100011111000 + 279 152 rmoveto + 0 -92 rlineto + 0 -109 33 -35 141 0 rrcurveto + 28 0 89 0 30 0 rrcurveto + 101 0 37 29 15 113 rrcurveto + -37 7 -57 19 -28 19 rrcurveto + -5 -62 -6 -10 -34 0 rrcurveto + -25 0 -71 0 -19 0 rrcurveto + -43 0 -8 3 0 28 rrcurveto + 0 90 rlineto + -43 -2 rmoveto + 55 -23 70 -40 33 -28 rrcurveto + 88 89 rlineto + -38 28 -72 36 -54 19 rrcurveto + 251 -110 rmoveto + 58 -57 64 -81 26 -54 rrcurveto + 121 69 rlineto + -30 57 -68 75 -58 53 rrcurveto + -678 -14 rmoveto + -22 -67 -45 -63 -59 -39 rrcurveto + 113 -77 rlineto + 69 49 39 75 27 78 rrcurveto + -153 684 rmoveto + 0 -111 rlineto + 770 0 rlineto + 0 111 rlineto + -820 -158 rmoveto + 0 -111 rlineto + 874 0 rlineto + 0 111 rlineto + hintmask 0000001000100000 + -512 204 rmoveto + hintmask 0000000100100000 + 0 -126 rlineto + 146 0 rlineto + hintmask 0000001000100000 + 0 126 rlineto + hintmask 0111010010001000 + -322 -154 rmoveto + 9 -25 10 -34 3 -21 rrcurveto + 138 30 rlineto + -5 20 -11 32 -11 23 rrcurveto + 232 0 rmoveto + -5 -21 -13 -29 -9 -24 rrcurveto + 128 -26 rlineto + 12 18 17 23 22 32 rrcurveto + -465 -390 rmoveto + 402 0 rlineto + 0 -31 rlineto + -402 0 rlineto + 0 142 rmoveto + 402 0 rlineto + 0 -30 rlineto + -402 0 rlineto + -137 116 rmoveto + 0 -314 rlineto + 683 0 rlineto + 0 314 rlineto + endchar + </CharString> + <CharString name="cid06449" fdSelectIndex="1"> + 1000 -86 106 92 77 -23 23 30 20 -20 22.5 -22.5 90 -56 56 21 95 21 90 28 90 -6 148 -116 116 -116 175 hstemhm + 61 129 -50 128 -7 144 -59 114 -55 40 89 131 -127 114 -60 145 -4 135 -60 136 -95 112 hintmask 110001011101011101101101 + 50 796 rmoveto + 0 -116 rlineto + 901 0 rlineto + 0 116 rlineto + -800 -487 rmoveto + 0 -90 rlineto + 707 0 rlineto + 0 90 rlineto + hintmask 000000000000100100000000 + -597 546 rmoveto + hintmask 000000000010000100000000 + 0 -207 rlineto + 144 0 rlineto + hintmask 000000000000100100001000 + 0 207 rlineto + 187 0 rmoveto + hintmask 000000000010000000001000 + 0 -207 rlineto + 145 0 rlineto + hintmask 000000000000100000001000 + 0 207 rlineto + hintmask 000000111100011010010100 + -85 -291 rmoveto + 81 0 rlineto + 0 -28 rlineto + -81 0 rlineto + -192 28 rmoveto + 78 0 rlineto + 0 -28 rlineto + -78 0 rlineto + -192 28 rmoveto + 78 0 rlineto + 0 -28 rlineto + -78 0 rlineto + -128 118 rmoveto + 0 -208 rlineto + 728 0 rlineto + 0 208 rlineto + -807 -229 rmoveto + 0 -172 rlineto + 129 0 rlineto + 0 77 rlineto + hintmask 000000110000000000000010 + 618 0 rlineto + 0 -77 rlineto + 136 0 rlineto + 0 172 rlineto + hintmask 000010000000000100000000 + -673 -173 rmoveto + -39 -47 -72 -41 -108 -29 rrcurveto + 22 -16 31 -39 14 -25 rrcurveto + hintmask 010000000000000001000000 + 124 44 81 54 57 78 rrcurveto + 24 -42 rmoveto + 0 -13 rlineto + -48 -105 -135 -52 -170 -18 rrcurveto + 20 -24 24 -45 9 -29 rrcurveto + hintmask 001000000000000001000000 + 197 32 152 70 67 161 rrcurveto + hintmask 110100000000000001100001 + -72 26 rlineto + -21 -3 rlineto + -248 -133 rmoveto + 25 -16 33 -29 17 -20 rrcurveto + 82 54 rlineto + -18 18 -32 25 -28 15 rrcurveto + 10 86 rmoveto + -77 -77 rlineto + 253 0 rlineto + 0 77 rlineto + 89 50 rmoveto + 0 -186 rlineto + 0 -106 30 -33 126 0 rrcurveto + 25 0 81 0 27 0 rrcurveto + 90 0 34 28 14 99 rrcurveto + -35 7 -51 18 -26 17 rrcurveto + -4 -53 -7 -10 -29 0 rrcurveto + -20 0 -65 0 -16 0 rrcurveto + -37 0 -6 4 0 30 rrcurveto + 0 185 rlineto + 150 -26 rmoveto + -55 -24 -92 -21 -84 -13 rrcurveto + 13 -23 15 -40 6 -24 rrcurveto + 93 11 112 20 85 32 rrcurveto + endchar + </CharString> + <CharString name="cid06821" fdSelectIndex="1"> + 1000 -82 111 26 82 31 59 -59 78 31 79 -7 124 -124 84 74 46 -46 69 -47 47 23 56 -56 97 -16 95 -95 173 hstemhm + 100 131 -63 63 93 115 -91 91 -91 121 -86 56 -11 147 -73 73 -50 130 64 150 14 101 hintmask 00011000000000000000000100000000 + 286 277 rmoveto + 433 0 rlineto + 0 -31 rlineto + -433 0 rlineto + -140 110 rmoveto + 0 -188 rlineto + 723 0 rlineto + 0 188 rlineto + hintmask 00100000000000000000100000000000 + -441 -129 rmoveto + 0 -248 rlineto + 147 -32 rlineto + 0 280 rlineto + hintmask 01000000000010010000010000000000 + -73 -90 rmoveto + 0 -82 rlineto + 370 0 rlineto + 0 82 rlineto + -704 638 rmoveto + 0 -95 rlineto + 784 0 rlineto + 0 95 rlineto + hintmask 00000000000010100000000000000000 + -852 0 rmoveto + 0 -116 rlineto + 0 -74 -7 -95 -76 -71 rrcurveto + 28 -16 57 -47 20 -24 rrcurveto + 90 85 19 137 0 103 rrcurveto + 0 118 rlineto + hintmask 00000000010100001000000000000000 + 93 -79 rmoveto + 0 -167 rlineto + hintmask 00000000010100000100000000000000 + 115 0 rlineto + 0 167 rlineto + hintmask 00000000101000000001000000000000 + -56 -41 rmoveto + 0 -56 rlineto + 176 0 rlineto + 0 56 rlineto + -343 -79 rmoveto + 0 -69 rlineto + 383 0 rlineto + 0 69 rlineto + hintmask 00000011000000000100000000000000 + -251 -23 rmoveto + 0 -109 rlineto + 0 -8 -3 -3 -8 0 rrcurveto + -7 0 -20 0 -17 1 rrcurveto + 13 -22 19 -35 8 -28 rrcurveto + hintmask 00000011000001000010001000000000 + 39 0 32 0 29 14 rrcurveto + 29 14 7 17 0 46 rrcurveto + 0 113 rlineto + -220 -49 rmoveto + -13 -34 -24 -34 -31 -26 rrcurveto + 21 -12 35 -24 17 -14 rrcurveto + 33 30 31 47 18 46 rrcurveto + 123 -9 rmoveto + 24 -30 24 -42 9 -28 rrcurveto + 79 30 rlineto + -10 28 -26 41 -25 29 rrcurveto + -9 351 rmoveto + hintmask 10000101000001000000001010000000 + 22 -272 141 -231 154 -1 rrcurveto + 83 0 41 26 18 132 rrcurveto + -32 10 -43 23 -26 24 rrcurveto + -5 -66 -8 -25 -20 0 rrcurveto + -70 0 -109 184 -16 196 rrcurveto + 122 -178 rmoveto + -42 -96 -82 -86 -94 -52 rrcurveto + 27 -19 46 -42 20 -23 rrcurveto + 96 64 93 105 54 117 rrcurveto + -205 150 rmoveto + 49 -16 64 -28 32 -21 rrcurveto + 63 74 rlineto + -35 21 -65 25 -48 12 rrcurveto + -451 -736 rmoveto + -96 -33 rlineto + 77 -146 117 -27 215 0 rrcurveto + 234 0 rlineto + 68 0 rlineto + 5 33 18 52 16 26 rrcurveto + -72 -3 -209 0 -54 0 rrcurveto + -159 1 -110 10 -50 87 rrcurveto + -109 40 rmoveto + -18 -82 -58 -57 -91 -34 rrcurveto + 30 -21 53 -48 22 -25 rrcurveto + 100 50 72 81 30 120 rrcurveto + endchar + </CharString> + <CharString name="cid07253" fdSelectIndex="1"> + 1000 -94 86 19 87 -85 85 -84 84 -69 69 -35 35 -33 33 22 49 22 49 21 45 -45 63 23 90 -60 60 24 21 -21 67 -56 56 23 64 23 67 -30 147 -92 92 -92 125 hstemhm + 153 132 -81 136 -44 44 -42 107 37 128 22 143 -26 139 -68 46 hintmask 10000011101100101101000101110000 + 58 822 rmoveto + 0 -92 rlineto + 883 0 rlineto + 0 92 rlineto + hintmask 00000000000000000000100000000000 + -677 33 rmoveto + hintmask 00000000000000000010000000000000 + 0 -180 rlineto + 141 0 rlineto + hintmask 00000000000000000000100000100000 + 0 180 rlineto + 187 0 rmoveto + hintmask 00000000000000000010000000100000 + 0 -180 rlineto + 143 0 rlineto + hintmask 00000000000100101100110000110000 + 0 180 rlineto + -450 -304 rmoveto + 424 0 rlineto + 0 -23 rlineto + -424 0 rlineto + 0 110 rmoveto + 424 0 rlineto + 0 -23 rlineto + -424 0 rlineto + -132 90 rmoveto + 0 -244 rlineto + 695 0 rlineto + 0 244 rlineto + -807 -268 rmoveto + 0 -90 rlineto + 919 0 rlineto + 0 90 rlineto + hintmask 00000001100000000000000100000000 + -664 -197 rmoveto + 0 -49 rlineto + 469 0 rlineto + 0 49 rlineto + -469 -71 rmoveto + 0 -49 rlineto + 482 0 rlineto + 0 49 rlineto + hintmask 00000010000000000000001000000000 + -574 -71 rmoveto + hintmask 00001000000000000000001000001000 + 0 -69 rlineto + 622 0 rlineto + hintmask 00000010000001000000000000001000 + 0 69 rlineto + -511 394 rmoveto + -38 -100 -88 -88 -172 -56 rrcurveto + 25 -21 36 -48 13 -31 rrcurveto + hintmask 00000100010010010000000001000000 + 192 75 103 107 59 142 rrcurveto + 263 -61 rmoveto + -104 -34 rlineto + 65 -100 107 -78 129 -36 rrcurveto + 18 33 37 49 28 25 rrcurveto + -120 23 -106 51 -54 67 rrcurveto + -266 -105 rmoveto + 0 -243 rlineto + 128 0 rlineto + 0 243 rlineto + hintmask 10000010000000000000000000001000 + 210 -208 rmoveto + 0 -12 rlineto + -5 -52 -8 -25 -9 -9 rrcurveto + -6 -7 -6 -1 -9 0 rrcurveto + -10 0 -16 1 -21 2 rrcurveto + 13 -24 11 -39 1 -28 rrcurveto + 37 -1 33 1 19 2 rrcurveto + 21 2 21 7 17 17 rrcurveto + 20 19 11 39 9 68 rrcurveto + 2 15 2 25 0 0 rrcurveto + -742 -45 rmoveto + -15 -36 -32 -39 -39 -23 rrcurveto + 101 -56 rlineto + hintmask 10010000000000000000000000000000 + 45 29 26 41 18 45 rrcurveto + hintmask 00100000000000000000000010000000 + 14 -1 rmoveto + 9 -33 7 -45 -1 -28 rrcurveto + 107 17 rlineto + -1 27 -9 44 -11 32 rrcurveto + hintmask 01000000000000000000000000100000 + 33 -16 rmoveto + 22 -29 21 -41 8 -27 rrcurveto + 97 32 rlineto + -10 27 -22 38 -24 26 rrcurveto + hintmask 00010000001000000000001000000000 + 52 -29 rmoveto + 24 -21 27 -32 11 -21 rrcurveto + 84 42 rlineto + -13 22 -29 29 -25 20 rrcurveto + -325 277 rmoveto + -63 -63 rlineto + 437 0 rlineto + 0 63 rlineto + -485 -44 rmoveto + hintmask 00000010000000000000001000000000 + 0 -215 rlineto + hintmask 00000010001000000000000100000000 + 136 0 rlineto + 0 261 rlineto + endchar + </CharString> + <CharString name="cid13393" fdSelectIndex="1"> + 1000 -76 112 -29 29 34 99 -55 124 -35 101 -101 173 -19 98 231 103 -41 41 -26 49 hstemhm + 66 126 61 127 -122 44 305 135 60 40 hintmask 1010101101110110 + 558 789 rmoveto + 0 -103 rlineto + 284 0 rlineto + 0 103 rlineto + -379 -485 rmoveto + 0 -101 rlineto + 469 0 rlineto + 0 101 rlineto + -428 151 rmoveto + 0 -98 rlineto + 343 0 rlineto + 0 98 rlineto + -472 -419 rmoveto + 0 -112 rlineto + 590 0 rlineto + 0 112 rlineto + -512 133 rmoveto + 0 -99 rlineto + 455 0 rlineto + 0 99 rlineto + -106 620 rmoveto + 0 -19 rlineto + -68 -125 -188 -94 -197 -38 rrcurveto + 25 -27 30 -51 14 -32 rrcurveto + hintmask 0000000010000010 + 218 54 203 108 96 183 rrcurveto + hintmask 0100010100000110 + -87 46 rlineto + -21 -5 rlineto + -254 -64 rmoveto + -111 -39 rlineto + 97 -139 155 -90 200 -39 rrcurveto + 17 34 36 52 28 26 rrcurveto + -189 27 -156 68 -77 100 rrcurveto + 1 133 rmoveto + -38 -72 -71 -75 -109 -55 rrcurveto + 28 -19 42 -46 19 -30 rrcurveto + 125 75 80 90 60 107 rrcurveto + -266 -459 rmoveto + -19 -59 -35 -61 -44 -40 rrcurveto + 28 -15 48 -31 23 -19 rrcurveto + 45 47 45 76 25 74 rrcurveto + 47 30 rmoveto + 0 -369 rlineto + 135 0 rlineto + 0 369 rlineto + hintmask 0000000000101000 + -676 436 rmoveto + 0 -908 rlineto + 126 0 rlineto + 0 779 rlineto + 110 0 rlineto + 0 129 rlineto + -44 0 rmoveto + 0 -43 rlineto + -11 -62 -29 -153 -24 -90 rrcurveto + hintmask 0001000000010000 + 49 -63 10 -61 0 -42 rrcurveto + 0 -29 -5 -17 -10 -8 rrcurveto + -7 -5 -10 -3 -9 0 rrcurveto + -11 0 -10 0 -15 2 rrcurveto + 20 -35 10 -54 1 -35 rrcurveto + 24 -1 23 1 17 2 rrcurveto + 23 4 20 7 17 13 rrcurveto + 34 24 15 43 0 71 rrcurveto + 0 57 -10 68 -56 76 rrcurveto + hintmask 0000000001001000 + 26 79 32 115 25 90 rrcurveto + hintmask 0000000000001000 + -95 54 rlineto + -20 -5 rlineto + endchar + </CharString> + <CharString name="cid17290" fdSelectIndex="1"> + 1000 92 122 -43 43 65 120 -120 198 -24 99 55 92 32 91 hstemhm + 118 138 72 115 -64 64 0 133 -67 107 -76 99 -99 222 -115 115 -64 64 69 109 -74 99 hintmask 011011111011001010000000 + 328 822 rmoveto + 0 -240 rlineto + 0 -100 26 -29 92 0 rrcurveto + hintmask 000010000000100000000000 + 19 0 44 0 20 0 rrcurveto + 68 0 30 25 12 85 rrcurveto + hintmask 101010101000010000000000 + -31 7 -46 16 -22 17 rrcurveto + -3 -43 -4 -8 -17 0 rrcurveto + -10 0 -32 0 -8 0 rrcurveto + -20 0 -3 3 0 28 rrcurveto + 0 239 rlineto + -115 -423 rmoveto + 0 -120 rlineto + 622 0 rlineto + 0 120 rlineto + -649 -185 rmoveto + 0 -122 rlineto + 671 0 rlineto + 0 122 rlineto + hintmask 010101100111001000000000 + -529 263 rmoveto + 0 -306 rlineto + 133 0 rlineto + 0 306 rlineto + 116 -1 rmoveto + 0 -306 rlineto + 134 0 rlineto + 0 306 rlineto + -447 346 rmoveto + 0 -91 rlineto + 130 0 rlineto + 0 -32 rlineto + -130 0 rlineto + 0 -92 rlineto + 237 0 rlineto + 0 215 rlineto + 31 0 rmoveto + hintmask 000010100000001001000000 + 0 -240 rlineto + 0 -100 26 -29 93 0 rrcurveto + 20 0 47 0 21 0 rrcurveto + 69 0 30 26 12 88 rrcurveto + -31 7 -46 16 -22 17 rrcurveto + -3 -46 -5 -9 -17 0 rrcurveto + -11 0 -35 0 -9 0 rrcurveto + -21 0 -3 3 0 29 rrcurveto + 0 238 rlineto + hintmask 000001110000000110000000 + -64 0 rmoveto + 0 -91 rlineto + 133 0 rlineto + 0 -32 rlineto + -133 0 rlineto + 0 -92 rlineto + 242 0 rlineto + 0 215 rlineto + -456 -735 rmoveto + -41 -39 -82 -31 -84 -18 rrcurveto + 30 -23 50 -49 23 -27 rrcurveto + 87 30 96 52 55 63 rrcurveto + 46 -15 rmoveto + 66 -33 83 -52 39 -35 rrcurveto + 122 71 rlineto + -47 37 -86 49 -64 28 rrcurveto + -580 760 rmoveto + -41 -142 -71 -142 -77 -91 rrcurveto + 22 -39 35 -85 11 -36 rrcurveto + 104 122 94 197 57 176 rrcurveto + -213 -251 rmoveto + 0 -658 rlineto + 138 0 rlineto + 0 790 rlineto + -4 2 rlineto + endchar + </CharString> + <CharString name="cid17852" fdSelectIndex="1"> + 1000 -89 107 113 107 62 111 -17 17 70 111 -111 183 -133 130 -125 125 -5 120 -120 199 -153 74 hstemhm + 37 238 -133 133 -133 202 14 128 -59 59 -40 40 13 118 -68 68 -11 136 -29 120 7 121 -76 103 hintmask 000000100001000000000000 + 37 661 rmoveto + 0 -130 rlineto + hintmask 000000100000010000000000 + 307 0 rlineto + 0 130 rlineto + hintmask 000000010010100100000000 + -202 194 rmoveto + 0 -950 rlineto + 133 0 rlineto + 0 950 rlineto + -127 -291 rmoveto + -21 -118 -53 -156 -61 -93 rrcurveto + 21 -35 31 -55 13 -40 rrcurveto + 72 111 54 200 29 158 rrcurveto + 36 -15 rmoveto + -59 -73 rlineto + 27 -50 51 -103 24 -62 rrcurveto + 72 129 rlineto + -16 23 -78 112 -21 24 rrcurveto + 158 255 rmoveto + hintmask 000000001000000100000000 + 0 -120 rlineto + 536 0 rlineto + hintmask 010000000010000000100000 + 0 120 rlineto + -414 -538 rmoveto + 0 -107 rlineto + 149 0 rlineto + 0 107 rlineto + hintmask 000000000100000001010000 + -199 85 rmoveto + 0 -320 rlineto + 118 0 rlineto + 0 320 rlineto + -11 532 rmoveto + hintmask 000000000010000000010000 + 0 -153 rlineto + 136 0 rlineto + hintmask 000101000100000000010000 + 0 153 rlineto + -215 -191 rmoveto + 0 -270 rlineto + 113 0 rlineto + 0 270 rlineto + 42 0 rmoveto + 0 -270 rlineto + 113 0 rlineto + 0 270 rlineto + 109 -388 rmoveto + -40 -32 -66 -44 -43 -21 rrcurveto + 57 -87 rlineto + 45 22 67 36 46 35 rrcurveto + hintmask 101010000000000010001100 + -524 407 rmoveto + 0 -111 rlineto + 394 0 rlineto + 0 -70 rlineto + -394 0 rlineto + 0 -111 rlineto + 515 0 rlineto + 0 292 rlineto + -248 -269 rmoveto + 0 -273 rlineto + 0 -105 19 -34 91 0 rrcurveto + hintmask 100000000010001000001010 + 17 0 22 0 18 0 rrcurveto + 68 0 29 34 11 118 rrcurveto + -32 8 -48 19 -23 18 rrcurveto + -3 -77 -3 -13 -13 0 rrcurveto + -4 0 -13 0 -4 0 rrcurveto + -11 0 -1 3 0 29 rrcurveto + 0 273 rlineto + -387 -293 rmoveto + 15 -121 rlineto + 74 11 85 12 82 13 rrcurveto + -7 115 rlineto + -92 -12 -91 -11 -66 -7 rrcurveto + -88 746 rmoveto + 0 -327 rlineto + 0 -142 -5 -196 -70 -132 rrcurveto + 29 -14 56 -41 22 -23 rrcurveto + 82 148 14 240 0 160 rrcurveto + 0 327 rlineto + endchar + </CharString> + <CharString name="cid18480" fdSelectIndex="1"> + 1000 -84 132 295 117 42 117 20 164 -129 129 -129 181 hstemhm + 143 144 -61 61 -35 144 -67 141 131 145 6 144 -66 132 hintmask 1110100101110000 + 56 803 rmoveto + 0 -129 rlineto + 892 0 rlineto + 0 129 rlineto + hintmask 0000010010000000 + -696 52 rmoveto + hintmask 0001000010000000 + 0 -216 rlineto + 144 0 rlineto + hintmask 0000010010100000 + 0 216 rlineto + 205 0 rmoveto + hintmask 0001000000100000 + 0 -216 rlineto + 145 0 rlineto + hintmask 0010011000100000 + 0 216 rlineto + -603 -236 rmoveto + 0 -216 rlineto + 0 -126 -9 -174 -110 -117 rrcurveto + 34 -16 63 -44 26 -25 rrcurveto + hintmask 1110000101010000 + 119 131 21 218 0 151 rrcurveto + 0 218 rlineto + -61 0 rmoveto + 0 -117 rlineto + 526 0 rlineto + 0 -42 rlineto + -526 0 rlineto + 0 -117 rlineto + 670 0 rlineto + 0 276 rlineto + -567 -300 rmoveto + 0 -231 rlineto + 0 -132 45 -40 171 0 rrcurveto + 35 0 144 0 38 0 rrcurveto + hintmask 1000000001001000 + 140 0 41 39 19 155 rrcurveto + -39 8 -61 21 -32 22 rrcurveto + -7 -99 -10 -14 -60 0 rrcurveto + -41 0 -124 0 -33 0 rrcurveto + -74 0 -11 4 0 39 rrcurveto + 0 228 rlineto + 309 12 rmoveto + -93 -45 -152 -37 -143 -21 rrcurveto + 16 -29 20 -51 6 -32 rrcurveto + 153 19 175 35 131 57 rrcurveto + endchar + </CharString> + <CharString name="cid22370" fdSelectIndex="1"> + 1000 62 77 23 73 22 73 22 77 24 93 28 94 -16 149 -103 103 -103 157 hstemhm + 114 128 -76 141 -39 141 -75 114 94 114 -69 142 -30 148 -95 135 hintmask 111111010011001100000000 + 50 801 rmoveto + 0 -103 rlineto + 901 0 rlineto + 0 103 rlineto + hintmask 000000001001000000000000 + -683 54 rmoveto + hintmask 000000100001000000000000 + 0 -203 rlineto + 141 0 rlineto + hintmask 000000001001001000000000 + 0 203 rlineto + 178 0 rmoveto + hintmask 000000100000001000000000 + 0 -203 rlineto + 142 0 rlineto + hintmask 000000001000001000000000 + 0 203 rlineto + hintmask 000011000100110010000000 + -73 -281 rmoveto + 96 0 rlineto + 0 -28 rlineto + -96 0 rlineto + -208 28 rmoveto + 94 0 rlineto + 0 -28 rlineto + -94 0 rlineto + -206 28 rmoveto + 92 0 rlineto + 0 -28 rlineto + -92 0 rlineto + -128 122 rmoveto + 0 -215 rlineto + 773 0 rlineto + 0 215 rlineto + hintmask 111100000010000100000000 + -580 -411 rmoveto + 392 0 rlineto + 0 -22 rlineto + -392 0 rlineto + 0 -73 rmoveto + 392 0 rlineto + 0 -23 rlineto + -392 0 rlineto + 0 213 rmoveto + 392 0 rlineto + 0 -22 rlineto + -392 0 rlineto + -141 99 rmoveto + 0 -367 rlineto + 681 0 rlineto + 0 367 rlineto + -312 -424 rmoveto + 108 -32 106 -41 57 -28 rrcurveto + 184 66 rlineto + -77 29 -135 44 -111 31 rrcurveto + -333 -2 rmoveto + -71 -32 -124 -28 -112 -15 rrcurveto + 30 -22 48 -48 24 -27 rrcurveto + 106 24 136 43 87 48 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid00001" width="209" lsb="0"/> + <mtx name="cid00002" width="298" lsb="48"/> + <mtx name="cid01177" width="1000" lsb="19"/> + <mtx name="cid06449" width="1000" lsb="50"/> + <mtx name="cid06821" width="1000" lsb="17"/> + <mtx name="cid07253" width="1000" lsb="17"/> + <mtx name="cid13393" width="1000" lsb="66"/> + <mtx name="cid17290" width="1000" lsb="8"/> + <mtx name="cid17852" width="1000" lsb="13"/> + <mtx name="cid18480" width="1000" lsb="24"/> + <mtx name="cid22370" width="1000" lsb="27"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid00001" height="1000" tsb="880"/> + <mtx name="cid00002" height="1000" tsb="107"/> + <mtx name="cid01177" height="1000" tsb="25"/> + <mtx name="cid06449" height="1000" tsb="25"/> + <mtx name="cid06821" height="1000" tsb="20"/> + <mtx name="cid07253" height="1000" tsb="25"/> + <mtx name="cid13393" height="1000" tsb="22"/> + <mtx name="cid17290" height="1000" tsb="25"/> + <mtx name="cid17852" height="1000" tsb="25"/> + <mtx name="cid18480" height="1000" tsb="25"/> + <mtx name="cid22370" height="1000" tsb="25"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w439.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w439.00.ttx new file mode 100644 index 00000000..5a0df527 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w439.00.ttx @@ -0,0 +1,466 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid06821"/> + <GlyphID id="2" name="cid18480"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0x3ae58124"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:06:43 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="29"/> + <yMin value="-120"/> + <xMax value="973"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="29"/> + <minRightSideBearing value="27"/> + <xMaxExtent value="973"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="977"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="33512"/> + <usLastCharIndex value="36441"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w439.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w439.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w439.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w439.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w439.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w439.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="29 -120 973 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w439.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w439.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid06821" fdSelectIndex="1"> + 1000 -69 66 68 52 53 38 -38 51 67 51 8 72 -64 52 118 31 -31 47 -27 27 47 42 -42 93 -10 58 -58 144 hstemhm + 115 74 -37 37 153 67 -51 51 -51 70 -51 32 50 81 -38 38 19 74 142 82 55 61 hintmask 00011000000000000000000100000000 + 234 288 rmoveto + 541 0 rlineto + 0 -67 rlineto + -541 0 rlineto + -78 118 rmoveto + 0 -169 rlineto + 701 0 rlineto + 0 169 rlineto + hintmask 00100000000000000000100000000000 + -398 -131 rmoveto + 0 -239 rlineto + 81 -16 rlineto + 0 255 rlineto + hintmask 01000000000010010000010000000000 + -38 -91 rmoveto + 0 -52 rlineto + 385 0 rlineto + 0 52 rlineto + -735 643 rmoveto + 0 -58 rlineto + 799 0 rlineto + 0 58 rlineto + hintmask 00000000000010100000000000000000 + -836 0 rmoveto + 0 -131 rlineto + 0 -79 -10 -102 -76 -77 rrcurveto + 17 -9 31 -26 11 -14 rrcurveto + 84 85 17 127 0 94 rrcurveto + 0 132 rlineto + hintmask 00000000010100001000000000000000 + 153 -48 rmoveto + 0 -167 rlineto + hintmask 00000000010100000100000000000000 + 67 0 rlineto + 0 167 rlineto + hintmask 00000000101000000001000000000000 + -32 -51 rmoveto + 0 -42 rlineto + 181 0 rlineto + 0 42 rlineto + -355 -89 rmoveto + 0 -47 rlineto + 388 0 rlineto + 0 47 rlineto + hintmask 00000011000000000100000000000000 + -233 -16 rmoveto + 0 -137 rlineto + 0 -8 -2 -3 -10 -1 rrcurveto + -9 0 -26 0 -34 1 rrcurveto + 9 -15 12 -21 4 -17 rrcurveto + hintmask 00000011000001000010001000000000 + 45 0 31 0 22 9 rrcurveto + 23 9 5 13 0 32 rrcurveto + 0 138 rlineto + -171 -49 rmoveto + -19 -39 -33 -36 -39 -29 rrcurveto + 14 -7 23 -16 10 -9 rrcurveto + 38 30 38 47 23 46 rrcurveto + 140 -8 rmoveto + 27 -24 29 -33 13 -24 rrcurveto + 47 24 rlineto + -14 24 -30 33 -27 21 rrcurveto + 62 339 rmoveto + hintmask 10000101000001000000001010000000 + 17 -280 136 -219 157 0 rrcurveto + 64 0 29 31 11 118 rrcurveto + -19 6 -25 13 -17 15 rrcurveto + -4 -81 -9 -30 -26 0 rrcurveto + -108 -2 -118 185 -14 244 rrcurveto + 170 -173 rmoveto + -57 -121 -107 -100 -119 -63 rrcurveto + 15 -11 26 -24 11 -13 rrcurveto + 119 70 113 109 65 135 rrcurveto + -176 151 rmoveto + 51 -16 63 -26 34 -21 rrcurveto + 36 47 rlineto + -35 21 -64 24 -50 13 rrcurveto + -452 -751 rmoveto + -56 -23 rlineto + 84 -121 133 -22 225 0 rrcurveto + 206 0 rlineto + 66 0 rlineto + 4 19 11 31 10 16 rrcurveto + -51 -1 -208 0 -36 0 rrcurveto + -190 0 -132 13 -66 88 rrcurveto + -45 52 rmoveto + -25 -90 -77 -59 -100 -35 rrcurveto + 18 -12 30 -28 12 -14 rrcurveto + 103 45 87 72 31 112 rrcurveto + endchar + </CharString> + <CharString name="cid18480" fdSelectIndex="1"> + 1000 -77 75 369 68 105 68 29 132 -73 73 -73 150 hstemhm + 152 80 -37 37 55 80 -32 78 215 81 92 80 -18 75 hintmask 1110100101110000 + 57 769 rmoveto + 0 -73 rlineto + 889 0 rlineto + 0 73 rlineto + hintmask 0000010010000000 + -659 77 rmoveto + hintmask 0001000010000000 + 0 -209 rlineto + 80 0 rlineto + hintmask 0000010010100000 + 0 209 rlineto + 261 0 rmoveto + hintmask 0001000000100000 + 0 -209 rlineto + 81 0 rlineto + hintmask 0010011000100000 + 0 209 rlineto + -557 -238 rmoveto + 0 -211 rlineto + 0 -132 -12 -179 -110 -128 rrcurveto + 19 -9 34 -24 15 -14 rrcurveto + hintmask 1110000101010000 + 115 135 19 205 0 145 rrcurveto + 0 212 rlineto + -37 0 rmoveto + 0 -68 rlineto + 606 0 rlineto + 0 -105 rlineto + -606 0 rlineto + 0 -68 rlineto + 686 0 rlineto + 0 241 rlineto + -546 -272 rmoveto + 0 -293 rlineto + 0 -95 37 -25 134 0 rrcurveto + 28 0 219 0 30 0 rrcurveto + hintmask 1000000001001000 + 116 0 26 35 13 137 rrcurveto + -22 5 -34 12 -19 13 rrcurveto + -7 -109 -10 -18 -66 0 rrcurveto + -49 0 -187 0 -37 0 rrcurveto + -80 0 -14 8 0 38 rrcurveto + 0 292 rlineto + 385 -21 rmoveto + -97 -49 -177 -47 -157 -32 rrcurveto + 9 -17 12 -28 4 -18 rrcurveto + 164 31 185 46 125 56 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid06821" width="1000" lsb="29"/> + <mtx name="cid18480" width="1000" lsb="30"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid06821" height="1000" tsb="32"/> + <mtx name="cid18480" height="1000" tsb="34"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w440.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w440.00.ttx new file mode 100644 index 00000000..b0a8ffa6 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w440.00.ttx @@ -0,0 +1,466 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid06821"/> + <GlyphID id="2" name="cid18480"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xc82be45b"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:06:51 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="29"/> + <yMin value="-120"/> + <xMax value="973"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="29"/> + <minRightSideBearing value="27"/> + <xMaxExtent value="973"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="977"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="33512"/> + <usLastCharIndex value="36441"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w440.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w440.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w440.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w440.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x82e8" name="cid18480"/><!-- CJK UNIFIED IDEOGRAPH-82E8 --> + <map code="0x8e59" name="cid06821"/><!-- CJK UNIFIED IDEOGRAPH-8E59 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w440.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w440.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="29 -120 973 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w440.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w440.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid06821" fdSelectIndex="1"> + 1000 -69 66 68 52 53 39 -39 51 67 51 8 72 -64 52 118 31 -31 47 -27 27 47 42 -42 93 -10 58 -58 144 hstemhm + 115 75 -38 38 152 67 -51 51 -51 70 -51 32 50 81 -38 38 19 74 141 83 55 61 hintmask 00011000000000000000000100000000 + 234 288 rmoveto + 540 0 rlineto + 0 -67 rlineto + -540 0 rlineto + -78 118 rmoveto + 0 -169 rlineto + 701 0 rlineto + 0 169 rlineto + hintmask 00100000000000000000100000000000 + -398 -130 rmoveto + 0 -240 rlineto + 81 -16 rlineto + 0 256 rlineto + hintmask 01000000000010010000010000000000 + -38 -92 rmoveto + 0 -52 rlineto + 385 0 rlineto + 0 52 rlineto + -735 643 rmoveto + 0 -58 rlineto + 799 0 rlineto + 0 58 rlineto + hintmask 00000000000010100000000000000000 + -836 0 rmoveto + 0 -131 rlineto + 0 -79 -10 -101 -76 -78 rrcurveto + 17 -9 31 -26 11 -14 rrcurveto + 84 85 18 127 0 94 rrcurveto + 0 132 rlineto + hintmask 00000000010100001000000000000000 + 152 -48 rmoveto + 0 -167 rlineto + hintmask 00000000010100000100000000000000 + 67 0 rlineto + 0 167 rlineto + hintmask 00000000101000000001000000000000 + -32 -51 rmoveto + 0 -42 rlineto + 181 0 rlineto + 0 42 rlineto + -355 -89 rmoveto + 0 -47 rlineto + 388 0 rlineto + 0 47 rlineto + hintmask 00000011000000000100000000000000 + -233 -16 rmoveto + 0 -137 rlineto + 0 -8 -2 -3 -10 -1 rrcurveto + -9 0 -26 0 -34 1 rrcurveto + 9 -15 12 -21 4 -17 rrcurveto + hintmask 00000011000001000010001000000000 + 45 0 31 0 23 9 rrcurveto + 22 9 5 13 0 32 rrcurveto + 0 138 rlineto + -171 -49 rmoveto + -19 -39 -33 -36 -39 -29 rrcurveto + 14 -7 23 -16 10 -9 rrcurveto + 38 30 38 47 23 46 rrcurveto + 140 -8 rmoveto + 30 -29 32 -40 14 -28 rrcurveto + 48 23 rlineto + -15 28 -33 40 -30 26 rrcurveto + 61 340 rmoveto + hintmask 10000101000001000000001010000000 + 17 -280 136 -219 157 0 rrcurveto + 64 0 29 31 11 118 rrcurveto + -19 6 -25 13 -17 15 rrcurveto + -4 -81 -9 -30 -26 0 rrcurveto + -108 -1 -118 184 -14 244 rrcurveto + 170 -173 rmoveto + -42 -107 -79 -95 -91 -61 rrcurveto + 16 -11 27 -25 11 -13 rrcurveto + 91 68 86 106 49 120 rrcurveto + -178 151 rmoveto + 51 -16 63 -26 34 -21 rrcurveto + 36 47 rlineto + -35 21 -64 24 -50 13 rrcurveto + -452 -751 rmoveto + -56 -23 rlineto + 84 -121 133 -22 225 0 rrcurveto + 206 0 rlineto + 66 0 rlineto + 3 19 12 31 10 16 rrcurveto + -51 -1 -208 0 -36 0 rrcurveto + -190 0 -132 13 -66 88 rrcurveto + -45 52 rmoveto + -25 -90 -77 -59 -100 -35 rrcurveto + 18 -12 30 -28 12 -14 rrcurveto + 103 45 87 72 31 112 rrcurveto + endchar + </CharString> + <CharString name="cid18480" fdSelectIndex="1"> + 1000 -77 75 369 68 105 68 27 134 -73 73 -73 150 hstemhm + 152 80 -37 37 55 80 -32 78 215 81 92 80 -19 76 hintmask 1110100101110000 + 57 769 rmoveto + 0 -73 rlineto + 889 0 rlineto + 0 73 rlineto + hintmask 0000010010000000 + -659 77 rmoveto + hintmask 0001000010000000 + 0 -211 rlineto + 80 0 rlineto + hintmask 0000010010100000 + 0 211 rlineto + 261 0 rmoveto + hintmask 0001000000100000 + 0 -211 rlineto + 81 0 rlineto + hintmask 0010011000100000 + 0 211 rlineto + -557 -238 rmoveto + 0 -211 rlineto + 0 -132 -12 -179 -110 -128 rrcurveto + 19 -9 34 -24 15 -14 rrcurveto + hintmask 1110000101010000 + 115 135 19 205 0 145 rrcurveto + 0 212 rlineto + -37 0 rmoveto + 0 -68 rlineto + 606 0 rlineto + 0 -105 rlineto + -606 0 rlineto + 0 -68 rlineto + 686 0 rlineto + 0 241 rlineto + -546 -272 rmoveto + 0 -293 rlineto + 0 -95 37 -25 134 0 rrcurveto + 28 0 219 0 30 0 rrcurveto + hintmask 1000000001001000 + 116 0 26 35 13 137 rrcurveto + -22 5 -34 12 -20 13 rrcurveto + -6 -109 -11 -18 -65 0 rrcurveto + -49 0 -187 0 -37 0 rrcurveto + -80 0 -14 8 0 38 rrcurveto + 0 292 rlineto + 385 -21 rmoveto + -97 -49 -177 -47 -157 -32 rrcurveto + 9 -17 12 -28 4 -18 rrcurveto + 164 31 185 46 125 56 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid06821" width="1000" lsb="29"/> + <mtx name="cid18480" width="1000" lsb="30"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid06821" height="1000" tsb="32"/> + <mtx name="cid18480" height="1000" tsb="34"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w599.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w599.00.ttx new file mode 100644 index 00000000..65809d40 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w599.00.ttx @@ -0,0 +1,487 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid17290"/> + <GlyphID id="2" name="cid17852"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0x1125c42f"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:07:13 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="10"/> + <yMin value="-120"/> + <xMax value="979"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="10"/> + <minRightSideBearing value="21"/> + <xMaxExtent value="979"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="20686"/> + <usLastCharIndex value="27162"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w599.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w599.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w599.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w599.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w599.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w599.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="10 -120 979 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w599.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w599.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid17290" fdSelectIndex="1"> + 1000 100 82 -54 54 94 80 -80 158 21 71 85 67 66 66 hstemhm + 138 94 95 81 -45 45 51 90 -21 76 -48 71 -71 178 -81 81 -45 45 122 77 -44 71 hintmask 011011111011001010000000 + 327 810 rmoveto + 0 -256 rlineto + 0 -78 22 -21 79 0 rrcurveto + hintmask 000010000000100000000000 + 17 0 74 0 17 0 rrcurveto + 61 0 22 23 8 84 rrcurveto + hintmask 101010101000010000000000 + -22 5 -32 11 -17 13 rrcurveto + -3 -56 -4 -9 -22 0 rrcurveto + -15 0 -60 0 -12 0 rrcurveto + -28 0 -4 4 0 25 rrcurveto + 0 255 rlineto + -81 -454 rmoveto + 0 -80 rlineto + 612 0 rlineto + 0 80 rlineto + -650 -174 rmoveto + 0 -82 rlineto + 678 0 rlineto + 0 82 rlineto + hintmask 010101100111001000000000 + -508 252 rmoveto + 0 -306 rlineto + 90 0 rlineto + 0 306 rlineto + 157 -1 rmoveto + 0 -306 rlineto + 91 0 rlineto + 0 306 rlineto + -434 377 rmoveto + 0 -66 rlineto + 165 0 rlineto + 0 -66 rlineto + -165 0 rlineto + 0 -67 rlineto + 241 0 rlineto + 0 199 rlineto + 49 0 rmoveto + hintmask 000010100000001001000000 + 0 -256 rlineto + 0 -78 22 -21 80 0 rrcurveto + 17 0 78 0 18 0 rrcurveto + 61 0 23 23 8 84 rrcurveto + -23 5 -31 11 -17 13 rrcurveto + -3 -56 -5 -9 -22 0 rrcurveto + -17 0 -63 0 -12 0 rrcurveto + -29 0 -4 4 0 25 rrcurveto + 0 255 rlineto + hintmask 000001110000000110000000 + -45 0 rmoveto + 0 -66 rlineto + 167 0 rlineto + 0 -66 rlineto + -167 0 rlineto + 0 -67 rlineto + 244 0 rlineto + 0 199 rlineto + -443 -726 rmoveto + -45 -45 -86 -38 -83 -24 rrcurveto + 21 -16 35 -35 15 -18 rrcurveto + 84 32 96 54 55 61 rrcurveto + 108 -12 rmoveto + 70 -36 85 -56 42 -38 rrcurveto + 82 52 rlineto + -46 39 -88 53 -69 32 rrcurveto + -547 756 rmoveto + -47 -152 -77 -150 -85 -98 rrcurveto + 16 -26 26 -56 8 -24 rrcurveto + 102 120 91 184 58 176 rrcurveto + -173 -237 rmoveto + 0 -671 rlineto + 94 0 rlineto + 0 761 rlineto + -2 2 rlineto + endchar + </CharString> + <CharString name="cid17852" fdSelectIndex="1"> + 1000 -81 75 160 76 101 76 -34 34 96 76 -76 147 -99 90 -82 82 32 84 -84 176 -141 49 hstemhm + 43 218 -92 92 -92 181 16 89 -42 42 -29 29 34 83 -45 45 48 93 -1 84 73 85 -48 73 hintmask 000000100001000000000000 + 43 641 rmoveto + 0 -90 rlineto + hintmask 000000100000010000000000 + 307 0 rlineto + 0 90 rlineto + hintmask 000000010010100100000000 + -181 208 rmoveto + 0 -937 rlineto + 92 0 rlineto + 0 937 rlineto + -91 -270 rmoveto + -25 -135 -61 -170 -64 -94 rrcurveto + 15 -23 23 -38 10 -27 rrcurveto + 71 107 62 201 31 159 rrcurveto + 23 -66 rmoveto + -44 -50 rlineto + 26 -41 60 -98 23 -51 rrcurveto + 52 87 rlineto + -16 24 -80 106 -21 23 rrcurveto + 158 264 rmoveto + hintmask 000000001000000100000000 + 0 -84 rlineto + 542 0 rlineto + hintmask 010000000010000000100000 + 0 84 rlineto + -428 -527 rmoveto + 0 -76 rlineto + 159 0 rlineto + 0 76 rlineto + hintmask 000000000100000001010000 + -197 78 rmoveto + 0 -327 rlineto + 83 0 rlineto + 0 327 rlineto + 48 541 rmoveto + hintmask 000000000010000000010000 + 0 -141 rlineto + 93 0 rlineto + hintmask 000101000100000000010000 + 0 141 rlineto + -175 -199 rmoveto + 0 -277 rlineto + 80 0 rlineto + 0 277 rlineto + 86 0 rmoveto + 0 -277 rlineto + 80 0 rlineto + 0 277 rlineto + 126 -375 rmoveto + -45 -34 -75 -45 -50 -25 rrcurveto + 40 -60 rlineto + 52 24 74 38 51 39 rrcurveto + hintmask 101010000000000010001100 + -531 367 rmoveto + 0 -76 rlineto + 443 0 rlineto + 0 -96 rlineto + -443 0 rlineto + 0 -76 rlineto + 528 0 rlineto + 0 248 rlineto + -242 -270 rmoveto + 0 -286 rlineto + 0 -80 18 -24 76 0 rrcurveto + hintmask 100000000010001000001010 + 15 0 53 0 16 0 rrcurveto + 60 0 21 29 8 113 rrcurveto + -23 6 -34 12 -16 14 rrcurveto + -3 -86 -4 -13 -19 0 rrcurveto + -11 0 -41 0 -9 0 rrcurveto + -20 0 -3 4 0 26 rrcurveto + 0 285 rlineto + -370 -306 rmoveto + 13 -85 rlineto + 75 13 91 16 89 16 rrcurveto + -5 81 rlineto + -99 -16 -96 -16 -68 -9 rrcurveto + -60 754 rmoveto + 0 -322 rlineto + 0 -142 -5 -196 -72 -135 rrcurveto + 21 -10 38 -27 16 -16 rrcurveto + 79 146 12 226 0 154 rrcurveto + 0 322 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid17290" width="1000" lsb="10"/> + <mtx name="cid17852" width="1000" lsb="20"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid17290" height="1000" tsb="35"/> + <mtx name="cid17852" height="1000" tsb="31"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w600.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w600.00.ttx new file mode 100644 index 00000000..e0b217f8 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w600.00.ttx @@ -0,0 +1,487 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid17290"/> + <GlyphID id="2" name="cid17852"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xa6c15fdb"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:07:20 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="10"/> + <yMin value="-120"/> + <xMax value="979"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="10"/> + <minRightSideBearing value="21"/> + <xMaxExtent value="979"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="20686"/> + <usLastCharIndex value="27162"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w600.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w600.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w600.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w600.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x50ce" name="cid17290"/><!-- CJK UNIFIED IDEOGRAPH-50CE --> + <map code="0x6a1a" name="cid17852"/><!-- CJK UNIFIED IDEOGRAPH-6A1A --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w600.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w600.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="10 -120 979 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w600.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w600.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid17290" fdSelectIndex="1"> + 1000 104 85 -31 31 103 84 -84 185 -22 71 85 67 66 66 hstemhm + 138 94 95 81 -45 45 49 92 -21 76 -48 71 -71 178 -81 81 -45 45 122 77 -44 71 hintmask 011011111011001010000000 + 327 810 rmoveto + 0 -256 rlineto + 0 -78 22 -21 79 0 rrcurveto + hintmask 000010000000100000000000 + 17 0 74 0 17 0 rrcurveto + 61 0 22 23 8 84 rrcurveto + hintmask 101010101000010000000000 + -22 5 -32 11 -17 13 rrcurveto + -3 -56 -4 -9 -22 0 rrcurveto + -15 0 -60 0 -12 0 rrcurveto + -28 0 -4 4 0 25 rrcurveto + 0 255 rlineto + -89 -434 rmoveto + 0 -84 rlineto + 624 0 rlineto + 0 84 rlineto + -654 -187 rmoveto + 0 -85 rlineto + 678 0 rlineto + 0 85 rlineto + hintmask 010101100111001000000000 + -510 288 rmoveto + 0 -319 rlineto + 92 0 rlineto + 0 319 rlineto + 157 -1 rmoveto + 0 -319 rlineto + 92 0 rlineto + 0 319 rlineto + -435 334 rmoveto + 0 -66 rlineto + 165 0 rlineto + 0 -66 rlineto + -165 0 rlineto + 0 -67 rlineto + 241 0 rlineto + 0 199 rlineto + 49 0 rmoveto + hintmask 000010100000001001000000 + 0 -256 rlineto + 0 -78 22 -21 80 0 rrcurveto + 17 0 78 0 18 0 rrcurveto + 61 0 23 24 8 85 rrcurveto + -22 5 -32 11 -17 13 rrcurveto + -3 -57 -5 -10 -22 0 rrcurveto + -17 0 -63 0 -12 0 rrcurveto + -29 0 -4 4 0 26 rrcurveto + 0 254 rlineto + hintmask 000001110000000110000000 + -45 0 rmoveto + 0 -66 rlineto + 167 0 rlineto + 0 -66 rlineto + -167 0 rlineto + 0 -67 rlineto + 244 0 rlineto + 0 199 rlineto + -443 -726 rmoveto + -45 -45 -86 -38 -83 -24 rrcurveto + 21 -16 35 -35 15 -18 rrcurveto + 84 32 96 54 55 61 rrcurveto + 108 -12 rmoveto + 70 -36 85 -56 42 -38 rrcurveto + 82 52 rlineto + -46 39 -88 53 -69 32 rrcurveto + -547 756 rmoveto + -47 -152 -77 -150 -85 -98 rrcurveto + 16 -26 26 -56 8 -24 rrcurveto + 102 120 91 184 58 176 rrcurveto + -173 -237 rmoveto + 0 -671 rlineto + 94 0 rlineto + 0 761 rlineto + -2 2 rlineto + endchar + </CharString> + <CharString name="cid17852" fdSelectIndex="1"> + 1000 -81 75 157 76 92 78 -14 14 109 78 -78 178 -133 90 -82 82 32 84 -84 176 -141 49 hstemhm + 43 218 -92 92 -92 181 16 89 -42 42 -29 29 34 83 -45 45 48 93 -1 84 73 85 -48 73 hintmask 000000100001000000000000 + 43 641 rmoveto + 0 -90 rlineto + hintmask 000000100000010000000000 + 307 0 rlineto + 0 90 rlineto + hintmask 000000010010100100000000 + -181 208 rmoveto + 0 -937 rlineto + 92 0 rlineto + 0 937 rlineto + -91 -270 rmoveto + -25 -135 -61 -170 -64 -94 rrcurveto + 15 -23 23 -38 10 -27 rrcurveto + 71 107 62 201 31 159 rrcurveto + 23 -66 rmoveto + -44 -50 rlineto + 26 -41 60 -98 23 -51 rrcurveto + 52 87 rlineto + -16 24 -80 106 -21 23 rrcurveto + 158 264 rmoveto + hintmask 000000001000000100000000 + 0 -84 rlineto + 545 0 rlineto + hintmask 010000000010000000100000 + 0 84 rlineto + -431 -530 rmoveto + 0 -76 rlineto + 159 0 rlineto + 0 76 rlineto + hintmask 000000000100000001010000 + -197 115 rmoveto + 0 -356 rlineto + 83 0 rlineto + 0 356 rlineto + 48 507 rmoveto + hintmask 000000000010000000010000 + 0 -141 rlineto + 93 0 rlineto + hintmask 000101000100000000010000 + 0 141 rlineto + -175 -165 rmoveto + 0 -301 rlineto + 80 0 rlineto + 0 301 rlineto + 84 0 rmoveto + 0 -301 rlineto + 80 0 rlineto + 0 301 rlineto + 128 -409 rmoveto + -45 -34 -75 -45 -50 -25 rrcurveto + 40 -60 rlineto + 52 24 74 38 51 39 rrcurveto + hintmask 101010000000000010001100 + -531 372 rmoveto + 0 -78 rlineto + 443 0 rlineto + 0 -109 rlineto + -443 0 rlineto + 0 -78 rlineto + 528 0 rlineto + 0 265 rlineto + -242 -241 rmoveto + 0 -318 rlineto + 0 -82 18 -24 76 0 rrcurveto + hintmask 100000000010001000001010 + 15 0 53 0 16 0 rrcurveto + 60 0 21 30 8 112 rrcurveto + -23 5 -33 13 -17 14 rrcurveto + -3 -85 -4 -14 -19 0 rrcurveto + -10 0 -42 0 -9 0 rrcurveto + -20 0 -3 4 0 26 rrcurveto + 0 319 rlineto + -370 -340 rmoveto + 13 -85 rlineto + 75 13 91 16 89 16 rrcurveto + -5 81 rlineto + -99 -16 -96 -16 -68 -9 rrcurveto + -60 754 rmoveto + 0 -322 rlineto + 0 -142 -5 -196 -72 -135 rrcurveto + 21 -10 38 -27 16 -16 rrcurveto + 79 146 12 226 0 154 rrcurveto + 0 322 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid17290" width="1000" lsb="10"/> + <mtx name="cid17852" width="1000" lsb="20"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid17290" height="1000" tsb="35"/> + <mtx name="cid17852" height="1000" tsb="31"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w669.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w669.00.ttx new file mode 100644 index 00000000..94831b49 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w669.00.ttx @@ -0,0 +1,492 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid01177"/> + <GlyphID id="2" name="cid07253"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0x6e00b443"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:07:27 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="23"/> + <yMin value="-120"/> + <xMax value="983"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="23"/> + <minRightSideBearing value="17"/> + <xMaxExtent value="983"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="24847"/> + <usLastCharIndex value="39488"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w669.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w669.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w669.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w669.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w669.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w669.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="23 -120 983 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w669.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w669.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid01177" fdSelectIndex="1"> + 1000 -80 89 189 69 50 65 49 69 44 86 75 89 -87 143 -117 61 hstemhm + 173 105 9 108 48 111 94 94 -15 110 hintmask 1111100011111000 + 287 149 rmoveto + 0 -111 rlineto + 0 -92 30 -26 122 0 rrcurveto + 25 0 118 0 26 0 rrcurveto + 92 0 30 27 12 114 rrcurveto + -29 6 -43 14 -22 15 rrcurveto + -5 -76 -6 -11 -39 0 rrcurveto + -29 0 -96 0 -22 0 rrcurveto + -48 0 -8 4 0 26 rrcurveto + 0 110 rlineto + -11 9 rmoveto + 58 -25 71 -42 34 -31 rrcurveto + 68 69 rlineto + -38 30 -73 39 -57 22 rrcurveto + 271 -96 rmoveto + 64 -55 70 -79 29 -54 rrcurveto + 92 54 rlineto + -33 56 -73 75 -63 51 rrcurveto + -642 -11 rmoveto + -23 -67 -47 -66 -64 -39 rrcurveto + 86 -59 rlineto + 72 47 41 75 29 75 rrcurveto + -143 667 rmoveto + 0 -87 rlineto + 772 0 rlineto + 0 87 rlineto + -819 -164 rmoveto + 0 -86 rlineto + 872 0 rlineto + 0 86 rlineto + hintmask 0000001000100000 + -495 220 rmoveto + hintmask 0000000100100000 + 0 -117 rlineto + 111 0 rlineto + hintmask 0000001000100000 + 0 117 rlineto + hintmask 0111010010001000 + -296 -145 rmoveto + 14 -30 15 -40 5 -25 rrcurveto + 105 24 rlineto + -7 25 -15 38 -16 28 rrcurveto + 281 1 rmoveto + -9 -26 -18 -38 -13 -27 rrcurveto + 97 -22 rlineto + 16 23 20 31 22 36 rrcurveto + -477 -386 rmoveto + 449 0 rlineto + 0 -50 rlineto + -449 0 rlineto + 0 164 rmoveto + 449 0 rlineto + 0 -49 rlineto + -449 0 rlineto + -105 118 rmoveto + 0 -302 rlineto + 664 0 rlineto + 0 302 rlineto + endchar + </CharString> + <CharString name="cid07253" fdSelectIndex="1"> + 1000 -90 68 42 76 -74 74 -72 72 -57 57 -29 29 -27 27 30 43 30 43 29 37 -37 53 32 72 -47 47 32 18 -18 56 -46 46 35 54 34 56 -25 134 -74 74 -74 120 hstemhm + 165 101 -57 105 -36 36 2 84 54 99 58 109 15 106 -46 35 hintmask 10000011101100101101000101110000 + 57 804 rmoveto + 0 -74 rlineto + 886 0 rlineto + 0 74 rlineto + hintmask 00000000000000000000100000000000 + -665 46 rmoveto + hintmask 00000000000000000010000000000000 + 0 -180 rlineto + 107 0 rlineto + hintmask 00000000000000000000100000100000 + 0 180 rlineto + 226 0 rmoveto + hintmask 00000000000000000010000000100000 + 0 -180 rlineto + 109 0 rlineto + hintmask 00000000000100101100110000110000 + 0 180 rlineto + -454 -299 rmoveto + 469 0 rlineto + 0 -35 rlineto + -469 0 rlineto + 0 123 rmoveto + 469 0 rlineto + 0 -34 rlineto + -469 0 rlineto + -101 90 rmoveto + 0 -235 rlineto + 676 0 rlineto + 0 235 rlineto + -798 -267 rmoveto + 0 -72 rlineto + 915 0 rlineto + 0 72 rlineto + hintmask 00000001100000000000000100000000 + -680 -186 rmoveto + 0 -43 rlineto + 495 0 rlineto + 0 43 rlineto + -495 -73 rmoveto + 0 -43 rlineto + 507 0 rlineto + 0 43 rlineto + hintmask 00000010000000000000001000000000 + -576 -73 rmoveto + hintmask 00001000000000000000001000001000 + 0 -57 rlineto + 621 0 rlineto + hintmask 00000010000001000000000000001000 + 0 57 rlineto + -501 390 rmoveto + -40 -97 -96 -93 -170 -59 rrcurveto + 19 -16 28 -36 11 -24 rrcurveto + hintmask 00000100010010010000000001000000 + 186 73 105 107 58 129 rrcurveto + 274 -62 rmoveto + -80 -27 rlineto + 64 -94 111 -79 120 -37 rrcurveto + 14 26 29 37 21 20 rrcurveto + -114 26 -110 58 -55 70 rrcurveto + -250 -100 rmoveto + 0 -241 rlineto + 99 0 rlineto + 0 241 rlineto + hintmask 10000010000000000000000000001000 + 242 -212 rmoveto + 0 -10 rlineto + -6 -63 -8 -28 -9 -9 rrcurveto + -6 -7 -6 -1 -10 0 rrcurveto + -10 0 -21 1 -25 3 rrcurveto + 11 -19 8 -32 1 -22 rrcurveto + 35 -1 32 1 17 1 rrcurveto + 21 2 18 6 15 14 rrcurveto + 19 18 9 38 9 74 rrcurveto + 2 13 2 21 0 0 rrcurveto + -717 -42 rmoveto + -16 -39 -32 -41 -41 -23 rrcurveto + 76 -45 rlineto + hintmask 10010000000000000000000000000000 + 48 28 27 44 18 46 rrcurveto + hintmask 00100000000000000000000010000000 + 43 -2 rmoveto + 10 -34 8 -47 -1 -29 rrcurveto + 84 14 rlineto + -1 28 -10 46 -12 33 rrcurveto + hintmask 01000000000000000000000000100000 + 57 -13 rmoveto + 22 -30 21 -41 8 -28 rrcurveto + 76 25 rlineto + -10 28 -21 39 -24 28 rrcurveto + hintmask 00010000001000000000001000000000 + 72 -22 rmoveto + 24 -21 27 -32 11 -22 rrcurveto + 65 34 rlineto + -12 22 -29 30 -25 20 rrcurveto + -342 274 rmoveto + -49 -53 rlineto + 456 0 rlineto + 0 53 rlineto + -495 -37 rmoveto + hintmask 00000010000000000000001000000000 + 0 -218 rlineto + hintmask 00000010001000000000000100000000 + 105 0 rlineto + 0 257 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid01177" width="1000" lsb="28"/> + <mtx name="cid07253" width="1000" lsb="23"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid01177" height="1000" tsb="30"/> + <mtx name="cid07253" height="1000" tsb="30"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w670.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w670.00.ttx new file mode 100644 index 00000000..eff2eec2 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w670.00.ttx @@ -0,0 +1,492 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid01177"/> + <GlyphID id="2" name="cid07253"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0x97cdda5"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:07:35 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="23"/> + <yMin value="-120"/> + <xMax value="983"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="23"/> + <minRightSideBearing value="17"/> + <xMaxExtent value="983"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="24847"/> + <usLastCharIndex value="39488"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w670.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w670.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w670.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w670.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x610f" name="cid01177"/><!-- CJK UNIFIED IDEOGRAPH-610F --> + <map code="0x9a40" name="cid07253"/><!-- CJK UNIFIED IDEOGRAPH-9A40 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w670.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w670.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="23 -120 983 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w670.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w670.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid01177" fdSelectIndex="1"> + 1000 -80 87 191 68 52 64 50 68 44 84 77 87 -84 142 -117 59 hstemhm + 174 102 12 104 53 108 96 92 -11 106 hintmask 1111100011111000 + 288 149 rmoveto + 0 -113 rlineto + 0 -90 29 -26 121 0 rrcurveto + 24 0 121 0 26 0 rrcurveto + 91 0 29 28 12 113 rrcurveto + -28 6 -42 14 -22 14 rrcurveto + -5 -77 -6 -11 -39 0 rrcurveto + -29 0 -99 0 -22 0 rrcurveto + -48 0 -9 4 0 26 rrcurveto + 0 112 rlineto + -8 10 rmoveto + 59 -26 71 -42 34 -31 rrcurveto + 66 67 rlineto + -38 31 -73 39 -58 22 rrcurveto + 274 -95 rmoveto + 64 -54 70 -79 30 -54 rrcurveto + 89 52 rlineto + -33 56 -73 75 -64 51 rrcurveto + -638 -11 rmoveto + -24 -67 -46 -66 -65 -39 rrcurveto + 83 -57 rlineto + 73 46 41 75 28 76 rrcurveto + -141 664 rmoveto + 0 -84 rlineto + 772 0 rlineto + 0 84 rlineto + -819 -164 rmoveto + 0 -84 rlineto + 872 0 rlineto + 0 84 rlineto + hintmask 0000001000100000 + -493 222 rmoveto + hintmask 0000000100100000 + 0 -117 rlineto + 108 0 rlineto + hintmask 0000001000100000 + 0 117 rlineto + hintmask 0111010010001000 + -294 -145 rmoveto + 15 -30 14 -40 5 -26 rrcurveto + 102 24 rlineto + -6 25 -16 39 -16 28 rrcurveto + 285 1 rmoveto + -9 -27 -19 -38 -13 -28 rrcurveto + 95 -21 rlineto + 16 24 19 31 23 37 rrcurveto + -478 -386 rmoveto + 454 0 rlineto + 0 -52 rlineto + -454 0 rlineto + 0 166 rmoveto + 454 0 rlineto + 0 -50 rlineto + -454 0 rlineto + -102 118 rmoveto + 0 -302 rlineto + 662 0 rlineto + 0 302 rlineto + endchar + </CharString> + <CharString name="cid07253" fdSelectIndex="1"> + 1000 -89 66 44 75 -73 73 -71 71 -56 56 -29 29 -27 27 31 42 31 43 29 37 -37 52 33 70 -46 46 33 18 -18 55 -45 45 36 53 35 55 -24 132 -72 72 -72 120 hstemhm + 166 99 -55 101 -34 34 7 81 57 95 62 106 18 103 -44 34 hintmask 10000011101100101101000101110000 + 57 802 rmoveto + 0 -72 rlineto + 886 0 rlineto + 0 72 rlineto + hintmask 00000000000000000000100000000000 + -664 48 rmoveto + hintmask 00000000000000000010000000000000 + 0 -180 rlineto + 105 0 rlineto + hintmask 00000000000000000000100000100000 + 0 180 rlineto + 229 0 rmoveto + hintmask 00000000000000000010000000100000 + 0 -180 rlineto + 106 0 rlineto + hintmask 00000000000100101100110000110000 + 0 180 rlineto + -454 -299 rmoveto + 472 0 rlineto + 0 -36 rlineto + -472 0 rlineto + 0 124 rmoveto + 472 0 rlineto + 0 -35 rlineto + -472 0 rlineto + -99 90 rmoveto + 0 -234 rlineto + 674 0 rlineto + 0 234 rlineto + -797 -267 rmoveto + 0 -70 rlineto + 915 0 rlineto + 0 70 rlineto + hintmask 00000001100000000000000100000000 + -681 -184 rmoveto + 0 -43 rlineto + 497 0 rlineto + 0 43 rlineto + -497 -74 rmoveto + 0 -42 rlineto + 508 0 rlineto + 0 42 rlineto + hintmask 00000010000000000000001000000000 + -575 -73 rmoveto + hintmask 00001000000000000000001000001000 + 0 -56 rlineto + 620 0 rlineto + hintmask 00000010000001000000000000001000 + 0 56 rlineto + -499 390 rmoveto + -41 -98 -96 -93 -171 -59 rrcurveto + 19 -16 28 -35 10 -23 rrcurveto + hintmask 00000100010010010000000001000000 + 186 73 105 107 58 128 rrcurveto + 274 -62 rmoveto + -78 -27 rlineto + 64 -93 112 -79 120 -37 rrcurveto + 13 25 28 36 21 19 rrcurveto + -114 26 -110 60 -56 70 rrcurveto + -247 -99 rmoveto + 0 -242 rlineto + 95 0 rlineto + 0 242 rlineto + hintmask 10000010000000000000000000001000 + 245 -213 rmoveto + 0 -10 rlineto + -6 -64 -7 -28 -10 -9 rrcurveto + -6 -7 -6 -1 -10 0 rrcurveto + -10 0 -21 1 -25 2 rrcurveto + 10 -18 8 -31 1 -21 rrcurveto + 34 -1 32 0 18 2 rrcurveto + 21 1 17 6 15 14 rrcurveto + 18 18 10 38 9 75 rrcurveto + 2 12 1 21 0 0 rrcurveto + -714 -42 rmoveto + -16 -39 -32 -41 -41 -23 rrcurveto + 74 -45 rlineto + hintmask 10010000000000000000000000000000 + 47 29 28 44 17 46 rrcurveto + hintmask 00100000000000000000000010000000 + 46 -2 rmoveto + 10 -35 8 -46 0 -29 rrcurveto + 81 13 rlineto + -1 28 -9 46 -13 34 rrcurveto + hintmask 01000000000000000000000000100000 + 60 -13 rmoveto + 22 -30 20 -42 8 -28 rrcurveto + 74 25 rlineto + -9 28 -22 40 -23 28 rrcurveto + hintmask 00010000001000000000001000000000 + 73 -21 rmoveto + 24 -22 27 -32 12 -22 rrcurveto + 63 33 rlineto + -12 22 -29 30 -25 21 rrcurveto + -343 273 rmoveto + -48 -52 rlineto + 457 0 rlineto + 0 52 rlineto + -495 -37 rmoveto + hintmask 00000010000000000000001000000000 + 0 -218 rlineto + hintmask 00000010001000000000000100000000 + 101 0 rlineto + 0 257 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid01177" width="1000" lsb="29"/> + <mtx name="cid07253" width="1000" lsb="23"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid01177" height="1000" tsb="30"/> + <mtx name="cid07253" height="1000" tsb="30"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w799.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w799.00.ttx new file mode 100644 index 00000000..cfccfa21 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w799.00.ttx @@ -0,0 +1,393 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid13393"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xb0503f01"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:07:57 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="69"/> + <yMin value="-120"/> + <xMax value="991"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="69"/> + <minRightSideBearing value="9"/> + <xMaxExtent value="991"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="2"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00100000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="63964"/> + <usLastCharIndex value="63964"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w799.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w799.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w799.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w799.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="28" language="0" nGroups="1"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + <cmap_format_14 platformID="0" platEncID="5"> + <map uv="0x9686" uvs="0xfe00" name="cid13393"/> + <map uv="0x9686" uvs="0xe0101" name="cid13393"/> + </cmap_format_14> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="28" language="0" nGroups="1"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w799.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w799.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="69 -120 991 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w799.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w799.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid13393" fdSelectIndex="1"> + 1000 -71 96 -48 48 50 85 -35 105 -23 86 -86 140 17 84 240 88 -34 34 -9 42 hstemhm + 69 107 88 108 -103 37 307 114 82 34 hintmask 1010101101110110 + 552 776 rmoveto + 0 -88 rlineto + 291 0 rlineto + 0 88 rlineto + -382 -483 rmoveto + 0 -86 rlineto + 463 0 rlineto + 0 86 rlineto + -426 155 rmoveto + 0 -84 rlineto + 349 0 rlineto + 0 84 rlineto + -480 -423 rmoveto + 0 -96 rlineto + 597 0 rlineto + 0 96 rlineto + -516 135 rmoveto + 0 -85 rlineto + 456 0 rlineto + 0 85 rlineto + -95 616 rmoveto + 0 -16 rlineto + -72 -134 -195 -99 -195 -40 rrcurveto + 22 -23 25 -43 12 -27 rrcurveto + hintmask 0000000010000010 + 213 54 207 110 96 184 rrcurveto + hintmask 0100010100000110 + -74 39 rlineto + -18 -5 rlineto + -268 -57 rmoveto + -93 -34 rlineto + 94 -142 159 -95 200 -40 rrcurveto + 15 29 30 44 24 22 rrcurveto + -191 29 -160 77 -78 110 rrcurveto + 13 136 rmoveto + -38 -74 -73 -81 -110 -59 rrcurveto + 24 -16 36 -39 16 -25 rrcurveto + 123 76 80 93 58 104 rrcurveto + -235 -472 rmoveto + -21 -62 -36 -63 -46 -42 rrcurveto + 24 -13 41 -26 20 -16 rrcurveto + 46 48 45 76 26 74 rrcurveto + 58 9 rmoveto + 0 -370 rlineto + 114 0 rlineto + 0 370 rlineto + hintmask 0000000000101000 + -658 462 rmoveto + 0 -902 rlineto + 107 0 rlineto + 0 792 rlineto + 130 0 rlineto + 0 110 rlineto + -37 0 rmoveto + 0 -36 rlineto + -14 -65 -32 -143 -29 -91 rrcurveto + hintmask 0001000000010000 + 57 -68 13 -64 0 -46 rrcurveto + 0 -30 -5 -20 -12 -9 rrcurveto + -7 -6 -11 -3 -10 0 rrcurveto + -13 0 -13 0 -18 2 rrcurveto + 18 -30 9 -46 1 -29 rrcurveto + 23 -1 24 0 18 2 rrcurveto + 22 4 20 7 16 12 rrcurveto + 32 22 14 43 0 66 rrcurveto + 0 59 -13 70 -62 78 rrcurveto + hintmask 0000000001001000 + 29 80 34 112 27 88 rrcurveto + hintmask 0000000000001000 + -80 46 rlineto + -18 -4 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid13393" width="1000" lsb="69"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid13393" height="1000" tsb="25"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w800.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w800.00.ttx new file mode 100644 index 00000000..765a381d --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w800.00.ttx @@ -0,0 +1,393 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid13393"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xab041b5d"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:08:04 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="69"/> + <yMin value="-120"/> + <xMax value="991"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="69"/> + <minRightSideBearing value="9"/> + <xMaxExtent value="991"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="2"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00100000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="63964"/> + <usLastCharIndex value="63964"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w800.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w800.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w800.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w800.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="28" language="0" nGroups="1"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + <cmap_format_14 platformID="0" platEncID="5"> + <map uv="0x9686" uvs="0xfe00" name="cid13393"/> + <map uv="0x9686" uvs="0xe0101" name="cid13393"/> + </cmap_format_14> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="28" language="0" nGroups="1"> + <map code="0xf9dc" name="cid13393"/><!-- CJK COMPATIBILITY IDEOGRAPH-F9DC --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w800.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w800.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="69 -120 991 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w800.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w800.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid13393" fdSelectIndex="1"> + 1000 -71 96 -27 27 50 85 -35 105 -23 86 -86 161 -8 84 248 88 -34 34 -13 42 hstemhm + 69 107 88 108 -103 37 307 114 82 34 hintmask 1010101101110110 + 552 780 rmoveto + 0 -88 rlineto + 291 0 rlineto + 0 88 rlineto + -382 -487 rmoveto + 0 -86 rlineto + 463 0 rlineto + 0 86 rlineto + -426 151 rmoveto + 0 -84 rlineto + 349 0 rlineto + 0 84 rlineto + -480 -419 rmoveto + 0 -96 rlineto + 597 0 rlineto + 0 96 rlineto + -516 135 rmoveto + 0 -85 rlineto + 456 0 rlineto + 0 85 rlineto + -95 620 rmoveto + 0 -16 rlineto + -72 -134 -195 -99 -195 -40 rrcurveto + 22 -23 25 -43 12 -27 rrcurveto + hintmask 0000000010000010 + 213 54 207 110 96 184 rrcurveto + hintmask 0100010100000110 + -74 39 rlineto + -18 -5 rlineto + -268 -57 rmoveto + -93 -34 rlineto + 94 -142 159 -95 200 -40 rrcurveto + 15 29 30 44 24 22 rrcurveto + -191 29 -160 77 -78 110 rrcurveto + 13 132 rmoveto + -38 -74 -73 -81 -110 -59 rrcurveto + 24 -16 36 -39 16 -25 rrcurveto + 123 76 80 93 58 104 rrcurveto + -239 -466 rmoveto + -21 -62 -36 -63 -46 -42 rrcurveto + 24 -13 41 -27 20 -16 rrcurveto + 46 48 45 76 26 75 rrcurveto + 62 24 rmoveto + 0 -370 rlineto + 114 0 rlineto + 0 370 rlineto + hintmask 0000000000101000 + -658 441 rmoveto + 0 -902 rlineto + 107 0 rlineto + 0 792 rlineto + 130 0 rlineto + 0 110 rlineto + -37 0 rmoveto + 0 -36 rlineto + -14 -65 -32 -143 -29 -91 rrcurveto + hintmask 0001000000010000 + 57 -68 13 -64 0 -46 rrcurveto + 0 -30 -5 -20 -12 -9 rrcurveto + -7 -6 -11 -3 -10 0 rrcurveto + -13 0 -13 0 -18 2 rrcurveto + 18 -30 9 -46 1 -29 rrcurveto + 23 -1 24 0 18 2 rrcurveto + 22 4 20 7 16 12 rrcurveto + 32 22 14 43 0 66 rrcurveto + 0 59 -13 70 -62 78 rrcurveto + hintmask 0000000001001000 + 29 80 34 112 27 88 rrcurveto + hintmask 0000000000001000 + -80 46 rlineto + -18 -4 rlineto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid13393" width="1000" lsb="69"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid13393" height="1000" tsb="25"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w889.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w889.00.ttx new file mode 100644 index 00000000..a90da39a --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w889.00.ttx @@ -0,0 +1,473 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid06449"/> + <GlyphID id="2" name="cid22370"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0xe198766"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:08:11 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="30"/> + <yMin value="-120"/> + <xMax value="986"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="30"/> + <minRightSideBearing value="14"/> + <xMaxExtent value="986"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="34130"/> + <usLastCharIndex value="34216"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w889.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w889.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w889.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w889.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w889.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w889.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="30 -120 986 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w889.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w889.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid06449" fdSelectIndex="1"> + 1000 -83 97 105 72 -22 22 34 18 -18 21.5 -21.5 83 -52 52 28 87 26 83 38 84 12 126 -106 106 -106 167 hstemhm + 63 118 -40 117 9 132 -50 104 -41 37 87 120 -111 105 -52 132 14 124 -51 125 -85 103 hintmask 110001011101011101101101 + 50 792 rmoveto + 0 -106 rlineto + 901 0 rlineto + 0 106 rlineto + -800 -484 rmoveto + 0 -83 rlineto + 706 0 rlineto + 0 83 rlineto + hintmask 000000000000100100000000 + -590 545 rmoveto + hintmask 000000000010000100000000 + 0 -187 rlineto + 132 0 rlineto + hintmask 000000000000100100001000 + 0 187 rlineto + 199 0 rmoveto + hintmask 000000000010000000001000 + 0 -187 rlineto + 132 0 rlineto + hintmask 000000000000100000001000 + 0 187 rlineto + hintmask 000000111100011010010100 + -80 -283 rmoveto + 94 0 rlineto + 0 -38 rlineto + -94 0 rlineto + -197 38 rmoveto + 92 0 rlineto + 0 -38 rlineto + -92 0 rlineto + -195 38 rmoveto + 91 0 rlineto + 0 -38 rlineto + -91 0 rlineto + -117 122 rmoveto + 0 -205 rlineto + 727 0 rlineto + 0 205 rlineto + -805 -231 rmoveto + 0 -167 rlineto + 118 0 rlineto + 0 80 rlineto + hintmask 000000110000000000000010 + 636 0 rlineto + 0 -80 rlineto + 125 0 rlineto + 0 167 rlineto + hintmask 000010000000000100000000 + -666 -167 rmoveto + -41 -49 -74 -44 -109 -32 rrcurveto + 20 -15 29 -35 13 -23 rrcurveto + hintmask 010000000000000001000000 + 124 45 82 56 57 78 rrcurveto + 35 -46 rmoveto + 0 -13 rlineto + -49 -109 -140 -55 -169 -19 rrcurveto + 18 -22 23 -42 8 -26 rrcurveto + hintmask 001000000000000001000000 + 194 32 155 72 67 160 rrcurveto + hintmask 110100000000000001100001 + -66 24 rlineto + -19 -2 rlineto + -258 -127 rmoveto + 30 -17 37 -31 20 -21 rrcurveto + 75 50 rlineto + -20 20 -37 27 -32 16 rrcurveto + 17 83 rmoveto + -72 -72 rlineto + 255 0 rlineto + 0 72 rlineto + 87 52 rmoveto + 0 -196 rlineto + 0 -100 29 -30 121 0 rrcurveto + 24 0 92 0 26 0 rrcurveto + 87 0 32 27 13 98 rrcurveto + -33 6 -46 17 -24 16 rrcurveto + -4 -56 -7 -11 -30 0 rrcurveto + -22 0 -75 0 -17 0 rrcurveto + -39 0 -7 5 0 29 rrcurveto + 0 195 rlineto + 164 -30 rmoveto + -56 -25 -96 -22 -86 -14 rrcurveto + 12 -21 14 -37 5 -22 rrcurveto + 95 12 114 21 84 33 rrcurveto + endchar + </CharString> + <CharString name="cid22370" fdSelectIndex="1"> + 1000 62 72 29 68 28 68 28 72 29 86 37 87 17 114 -95 95 -95 151 hstemhm + 116 117 -65 129 -23 128 -65 105 106 105 -60 130 -14 135 -83 124 hintmask 111111010011001100000000 + 50 797 rmoveto + 0 -95 rlineto + 901 0 rlineto + 0 95 rlineto + hintmask 000000001001000000000000 + -677 56 rmoveto + hintmask 000000100001000000000000 + 0 -170 rlineto + 128 0 rlineto + hintmask 000000001001001000000000 + 0 170 rlineto + 191 0 rmoveto + hintmask 000000100000001000000000 + 0 -170 rlineto + 130 0 rlineto + hintmask 000000001000001000000000 + 0 170 rlineto + hintmask 000011000100110010000000 + -70 -274 rmoveto + 108 0 rlineto + 0 -37 rlineto + -108 0 rlineto + -211 37 rmoveto + 106 0 rlineto + 0 -37 rlineto + -106 0 rlineto + -209 37 rmoveto + 104 0 rlineto + 0 -37 rlineto + -104 0 rlineto + -117 124 rmoveto + 0 -210 rlineto + 769 0 rlineto + 0 210 rlineto + hintmask 111100000010000100000000 + -588 -407 rmoveto + 412 0 rlineto + 0 -28 rlineto + -412 0 rlineto + 0 -68 rmoveto + 412 0 rlineto + 0 -29 rlineto + -412 0 rlineto + 0 221 rmoveto + 412 0 rlineto + 0 -28 rlineto + -412 0 rlineto + -129 100 rmoveto + 0 -365 rlineto + 676 0 rlineto + 0 365 rlineto + -302 -420 rmoveto + 110 -32 108 -41 59 -28 rrcurveto + 167 61 rlineto + -77 29 -134 43 -112 31 rrcurveto + -325 -1 rmoveto + -72 -33 -125 -29 -111 -16 rrcurveto + 27 -20 44 -44 22 -25 rrcurveto + 106 24 135 43 87 47 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid06449" width="1000" lsb="50"/> + <mtx name="cid22370" width="1000" lsb="30"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid06449" height="1000" tsb="27"/> + <mtx name="cid22370" height="1000" tsb="27"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w890.00.ttx b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w890.00.ttx new file mode 100644 index 00000000..a0aed4f5 --- /dev/null +++ b/Tests/varLib/data/master_sparse_cff2/MasterSet_Kanji-w890.00.ttx @@ -0,0 +1,473 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="cid06449"/> + <GlyphID id="2" name="cid22370"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.002"/> + <checkSumAdjustment value="0x3deef2bc"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Thu Dec 13 12:08:19 2018"/> + <modified value="Tue Apr 16 22:17:21 2019"/> + <xMin value="30"/> + <yMin value="-120"/> + <xMax value="986"/> + <yMax value="880"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="30"/> + <minRightSideBearing value="14"/> + <xMaxExtent value="986"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="3"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="978"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00001000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBE"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="34130"/> + <usLastCharIndex value="34216"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00100000 00000010 00000000 10011111"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w890.00 + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.002;ADBE;MasterSet_Kanji-w890.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + SHSansJPVF w890.00 + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.002;hotconv 1.0.109;makeotfexe 2.5.65596 DEVELOPMENT + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + MasterSet_Kanji-w890.00 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_4> + <cmap_format_12 platformID="0" platEncID="4" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_12> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_4> + <cmap_format_12 platformID="3" platEncID="10" format="12" reserved="0" length="40" language="0" nGroups="2"> + <map code="0x8552" name="cid22370"/><!-- CJK UNIFIED IDEOGRAPH-8552 --> + <map code="0x85a8" name="cid06449"/><!-- CJK UNIFIED IDEOGRAPH-85A8 --> + </cmap_format_12> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="MasterSet_Kanji-w890.00"> + <ROS Registry="Adobe" Order="Japan1" Supplement="6"/> + <Notice value="1997-2007, 2012 Adobe Systems Incorporated. All Rights Reserved. Kozuka Mincho is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries.""/> + <FullName value="Master Set Kanji w890.00"/> + <FamilyName value="Master Set Kanji"/> + <Weight value="ExtraLight"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="30 -120 986 880"/> + <StrokeWidth value="0"/> + <XUID value="1119273886"/> + <CIDFontVersion value="6.004"/> + <CIDFontRevision value="0"/> + <CIDFontType value="0"/> + <CIDCount value="23058"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <FontName value="MasterSet_Kanji-w890.00-Generic"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="607"/> + </Private> + </FontDict> + <FontDict index="1"> + <FontName value="MasterSet_Kanji-w890.00-Kanji"/> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="1"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="0"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + 393 -120 50 859 91 -50 50 hstemhm + 100 50 700 50 hintmask 10111000 + 100 -120 rmoveto + 800 0 rlineto + 0 1000 rlineto + -800 0 rlineto + 400 -459 rmoveto + -318 409 rlineto + 636 0 rlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + 0 -818 rlineto + -668 -41 rmoveto + 318 409 rlineto + 318 -409 rlineto + -668 859 rmoveto + 318 -409 rlineto + -318 -409 rlineto + endchar + </CharString> + <CharString name="cid06449" fdSelectIndex="1"> + 1000 -83 98 104 72 -22 22 34 18 -18 21.5 -21.5 83 -52 52 28 87 26 83 38 84 -7 145 -106 106 -106 167 hstemhm + 63 118 -40 117 9 132 -50 105 -42 37 87 120 -111 105 -52 132 14 124 -51 125 -85 103 hintmask 110001011101011101101101 + 50 792 rmoveto + 0 -106 rlineto + 901 0 rlineto + 0 106 rlineto + -800 -484 rmoveto + 0 -83 rlineto + 706 0 rlineto + 0 83 rlineto + hintmask 000000000000100100000000 + -590 545 rmoveto + hintmask 000000000010000100000000 + 0 -206 rlineto + 132 0 rlineto + hintmask 000000000000100100001000 + 0 206 rlineto + 199 0 rmoveto + hintmask 000000000010000000001000 + 0 -206 rlineto + 132 0 rlineto + hintmask 000000000000100000001000 + 0 206 rlineto + hintmask 000000111100011010010100 + -80 -283 rmoveto + 94 0 rlineto + 0 -38 rlineto + -94 0 rlineto + -196 38 rmoveto + 91 0 rlineto + 0 -38 rlineto + -91 0 rlineto + -196 38 rmoveto + 91 0 rlineto + 0 -38 rlineto + -91 0 rlineto + -117 122 rmoveto + 0 -205 rlineto + 727 0 rlineto + 0 205 rlineto + -805 -231 rmoveto + 0 -167 rlineto + 118 0 rlineto + 0 80 rlineto + hintmask 000000110000000000000010 + 636 0 rlineto + 0 -80 rlineto + 125 0 rlineto + 0 167 rlineto + hintmask 000010000000000100000000 + -666 -167 rmoveto + -41 -49 -74 -44 -109 -32 rrcurveto + 20 -15 29 -35 13 -23 rrcurveto + hintmask 010000000000000001000000 + 124 45 82 56 57 78 rrcurveto + 35 -46 rmoveto + 0 -13 rlineto + -49 -109 -140 -55 -169 -19 rrcurveto + 18 -22 23 -42 8 -26 rrcurveto + hintmask 001000000000000001000000 + 194 32 155 72 67 160 rrcurveto + hintmask 110100000000000001100001 + -66 24 rlineto + -19 -2 rlineto + -258 -127 rmoveto + 30 -17 37 -31 20 -21 rrcurveto + 75 50 rlineto + -20 20 -37 27 -32 16 rrcurveto + 17 83 rmoveto + -72 -72 rlineto + 255 0 rlineto + 0 72 rlineto + 87 52 rmoveto + 0 -196 rlineto + 0 -100 29 -30 121 0 rrcurveto + 24 0 92 0 26 0 rrcurveto + 87 0 32 27 13 98 rrcurveto + -33 6 -46 17 -24 16 rrcurveto + -4 -56 -7 -10 -31 0 rrcurveto + -21 0 -75 0 -17 0 rrcurveto + -39 0 -7 4 0 29 rrcurveto + 0 195 rlineto + 164 -30 rmoveto + -56 -25 -96 -22 -86 -14 rrcurveto + 12 -21 14 -37 5 -22 rrcurveto + 95 12 114 21 84 33 rrcurveto + endchar + </CharString> + <CharString name="cid22370" fdSelectIndex="1"> + 1000 62 72 29 68 28 68 28 72 29 86 37 87 -15 146 -95 95 -95 151 hstemhm + 116 118 -66 129 -23 128 -65 105 106 105 -60 130 -14 135 -83 124 hintmask 111111010011001100000000 + 50 797 rmoveto + 0 -95 rlineto + 901 0 rlineto + 0 95 rlineto + hintmask 000000001001000000000000 + -677 56 rmoveto + hintmask 000000100001000000000000 + 0 -202 rlineto + 128 0 rlineto + hintmask 000000001001001000000000 + 0 202 rlineto + 191 0 rmoveto + hintmask 000000100000001000000000 + 0 -202 rlineto + 130 0 rlineto + hintmask 000000001000001000000000 + 0 202 rlineto + hintmask 000011000100110010000000 + -70 -274 rmoveto + 108 0 rlineto + 0 -37 rlineto + -108 0 rlineto + -211 37 rmoveto + 106 0 rlineto + 0 -37 rlineto + -106 0 rlineto + -208 37 rmoveto + 103 0 rlineto + 0 -37 rlineto + -103 0 rlineto + -118 124 rmoveto + 0 -210 rlineto + 769 0 rlineto + 0 210 rlineto + hintmask 111100000010000100000000 + -588 -407 rmoveto + 412 0 rlineto + 0 -28 rlineto + -412 0 rlineto + 0 -68 rmoveto + 412 0 rlineto + 0 -29 rlineto + -412 0 rlineto + 0 221 rmoveto + 412 0 rlineto + 0 -28 rlineto + -412 0 rlineto + -129 100 rmoveto + 0 -365 rlineto + 676 0 rlineto + 0 365 rlineto + -302 -420 rmoveto + 110 -32 108 -41 59 -28 rrcurveto + 167 61 rlineto + -77 29 -134 43 -112 31 rrcurveto + -325 -1 rmoveto + -72 -33 -125 -29 -111 -16 rrcurveto + 27 -20 44 -44 22 -25 rrcurveto + 106 24 135 43 87 47 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=0 --> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=0 --> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="0"/> + </VORG> + + <hmtx> + <mtx name=".notdef" width="1000" lsb="100"/> + <mtx name="cid06449" width="1000" lsb="50"/> + <mtx name="cid22370" width="1000" lsb="30"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="0"/> + <minBottomSideBearing value="0"/> + <yMaxExtent value="1000"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="1"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="0"/> + <mtx name="cid06449" height="1000" tsb="27"/> + <mtx name="cid22370" height="1000" tsb="27"/> + </vmtx> + +</ttFont> diff --git a/Tests/varLib/data/master_ttx_varfont_otf/TestCFF2VF.ttx b/Tests/varLib/data/master_ttx_varfont_otf/TestCFF2VF.ttx new file mode 100644 index 00000000..c2a718ec --- /dev/null +++ b/Tests/varLib/data/master_ttx_varfont_otf/TestCFF2VF.ttx @@ -0,0 +1,835 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="A"/> + <GlyphID id="2" name="T"/> + <GlyphID id="3" name="glyph00003"/> + <GlyphID id="4" name="dollar"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.01"/> + <checkSumAdjustment value="0xf8d4dd69"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Wed Oct 17 15:44:59 2018"/> + <modified value="Tue Nov 13 20:50:41 2018"/> + <xMin value="31"/> + <yMin value="-113"/> + <xMax value="569"/> + <yMax value="751"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="984"/> + <descent value="-273"/> + <lineGap value="0"/> + <advanceWidthMax value="600"/> + <minLeftSideBearing value="31"/> + <minRightSideBearing value="31"/> + <xMaxExtent value="569"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="1"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="5"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="600"/> + <usWeightClass value="400"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000000"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="291"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="2"/> + <bSerifStyle value="11"/> + <bWeight value="5"/> + <bProportion value="9"/> + <bContrast value="3"/> + <bStrokeVariation value="4"/> + <bArmStyle value="3"/> + <bLetterForm value="2"/> + <bMidline value="2"/> + <bXHeight value="4"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="ADBO"/> + <fsSelection value="00000000 01000000"/> + <usFirstCharIndex value="36"/> + <usLastCharIndex value="84"/> + <sTypoAscender value="750"/> + <sTypoDescender value="-250"/> + <sTypoLineGap value="0"/> + <usWinAscent value="984"/> + <usWinDescent value="273"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="486"/> + <sCapHeight value="660"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <hmtx> + <mtx name=".notdef" width="600" lsb="62"/> + <mtx name="A" width="600" lsb="31"/> + <mtx name="T" width="600" lsb="41"/> + <mtx name="dollar" width="600" lsb="85"/> + <mtx name="glyph00003" width="600" lsb="85"/> + </hmtx> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + <map code="0x24" name="dollar"/> + <map code="0x41" name="A"/> + <map code="0x54" name="T"/> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x24" name="dollar"/><!-- DOLLAR SIGN --> + <map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A --> + <map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T --> + </cmap_format_4> + </cmap> + + <name> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.010;ADBO;SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Roman + </namerecord> + <namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Weight + </namerecord> + <namerecord nameID="257" platformID="1" platEncID="0" langID="0x0" unicode="True"> + ExtraLight + </namerecord> + <namerecord nameID="258" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-ExtraLight + </namerecord> + <namerecord nameID="259" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Light + </namerecord> + <namerecord nameID="260" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-Light + </namerecord> + <namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="262" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-Regular + </namerecord> + <namerecord nameID="263" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Medium + </namerecord> + <namerecord nameID="264" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-Medium + </namerecord> + <namerecord nameID="265" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Semibold + </namerecord> + <namerecord nameID="266" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-Semibold + </namerecord> + <namerecord nameID="267" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Bold + </namerecord> + <namerecord nameID="268" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-Bold + </namerecord> + <namerecord nameID="269" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Black + </namerecord> + <namerecord nameID="270" platformID="1" platEncID="0" langID="0x0" unicode="True"> + TestCFF2Roman-Black + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.010;ADBO;SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Source Code Variable + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.010;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + SourceCodeVariable-Roman + </namerecord> + <namerecord nameID="17" platformID="3" platEncID="1" langID="0x409"> + Roman + </namerecord> + <namerecord nameID="256" platformID="3" platEncID="1" langID="0x409"> + Weight + </namerecord> + <namerecord nameID="257" platformID="3" platEncID="1" langID="0x409"> + ExtraLight + </namerecord> + <namerecord nameID="258" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-ExtraLight + </namerecord> + <namerecord nameID="259" platformID="3" platEncID="1" langID="0x409"> + Light + </namerecord> + <namerecord nameID="260" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-Light + </namerecord> + <namerecord nameID="261" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="262" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-Regular + </namerecord> + <namerecord nameID="263" platformID="3" platEncID="1" langID="0x409"> + Medium + </namerecord> + <namerecord nameID="264" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-Medium + </namerecord> + <namerecord nameID="265" platformID="3" platEncID="1" langID="0x409"> + Semibold + </namerecord> + <namerecord nameID="266" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-Semibold + </namerecord> + <namerecord nameID="267" platformID="3" platEncID="1" langID="0x409"> + Bold + </namerecord> + <namerecord nameID="268" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-Bold + </namerecord> + <namerecord nameID="269" platformID="3" platEncID="1" langID="0x409"> + Black + </namerecord> + <namerecord nameID="270" platformID="3" platEncID="1" langID="0x409"> + TestCFF2Roman-Black + </namerecord> + </name> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="1"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <BASE> + <Version value="0x00010000"/> + <HorizAxis> + <BaseTagList> + <!-- BaseTagCount=2 --> + <BaselineTag index="0" value="ideo"/> + <BaselineTag index="1" value="romn"/> + </BaseTagList> + <BaseScriptList> + <!-- BaseScriptCount=4 --> + <BaseScriptRecord index="0"> + <BaseScriptTag value="DFLT"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="1"> + <BaseScriptTag value="cyrl"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="2"> + <BaseScriptTag value="grek"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + <BaseScriptRecord index="3"> + <BaseScriptTag value="latn"/> + <BaseScript> + <BaseValues> + <DefaultIndex value="1"/> + <!-- BaseCoordCount=2 --> + <BaseCoord index="0" Format="1"> + <Coordinate value="-170"/> + </BaseCoord> + <BaseCoord index="1" Format="1"> + <Coordinate value="0"/> + </BaseCoord> + </BaseValues> + <!-- BaseLangSysCount=0 --> + </BaseScript> + </BaseScriptRecord> + </BaseScriptList> + </HorizAxis> + </BASE> + + <CFF2> + <major value="2"/> + <minor value="0"/> + <CFFFont name="CFF2Font"> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FDArray> + <FontDict index="0"> + <Private> + <BlueValues> + <blend value="-12 0 0"/> + <blend value="0 0 0"/> + <blend value="486 -8 14"/> + <blend value="498 0 0"/> + <blend value="574 4 -8"/> + <blend value="586 0 0"/> + <blend value="638 6 -10"/> + <blend value="650 0 0"/> + <blend value="656 2 -2"/> + <blend value="668 0 0"/> + <blend value="712 6 -10"/> + <blend value="724 0 0"/> + </BlueValues> + <OtherBlues> + <blend value="-217 -17 29"/> + <blend value="-205 0 0"/> + </OtherBlues> + <BlueScale value="0.0625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW> + <blend value="67 -39 67"/> + </StdHW> + <StdVW> + <blend value="85 -51 87"/> + </StdVW> + <Subrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + <CharString index="0"> + 304 7 -12 1 blend + 34 rmoveto + 125 86 65 96 -22 38 2 -3 -9 15 -2 4 4 blend + hvcurveto + 183 -324 -21 110 1 -1 -14 22 -11 17 32 -54 4 blend + vvcurveto + 50 42 32 67 68 36 -21 -36 47 18 -29 15 -24 12 -21 18 -31 8 -13 -2 3 -3 5 -2 4 -3 5 9 blend + vhcurveto + 44 49 -24 40 -29 49 2 blend + rlineto + 44 -46 -54 33 -89 -6 8 5 -7 9 -15 -1 3 4 -8 5 blend + hhcurveto + -115 -81 -59 -94 16 -26 3 -7 5 -9 6 -10 4 blend + hvcurveto + -174 324 22 -124 8 -14 14 -22 6 -10 -32 56 4 blend + vvcurveto + -51 -42 -35 -78 -76 -62 31 37 -52 -19 31 -14 23 -15 25 -25 41 -9 15 -4 7 7 -11 -3 3 12 -20 9 blend + vhcurveto + -39 -58</CharString> + <CharString index="1"> + 1 blend + hlineto + </CharString> + <CharString index="2"> + 2 blend + rmoveto + </CharString> + </Subrs> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef"> + 62 22 -38 1 blend + hmoveto + 476 -44 76 1 blend + 660 -476 44 -76 -106 callsubr + 109 -601 -61 103 -27 45 -105 callsubr + 73 131 54 102 29 -47 45 -75 10 -18 4 -6 4 blend + rlineto + 4 hlineto + 52 -102 73 -131 10 -16 -4 6 27 -47 -45 75 4 blend + rlineto + -300 52 -42 72 -10 16 -105 callsubr + 461 75 -125 1 blend + vlineto + 127 -232 27 -45 -38 64 2 blend + rlineto + 44 48 -22 36 -22 36 -105 callsubr + -50 93 -66 119 -6 10 -1 3 -28 48 49 -83 4 blend + rlineto + 234 68 -114 -106 callsubr + -65 -119 -49 -93 -29 47 -49 83 -5 9 1 -3 4 blend + rlineto + 44 -48 -22 36 22 -36 -105 callsubr + 126 232 26 -44 38 -64 2 blend + rlineto + -461 -75 125 1 blend + vlineto + </CharString> + <CharString name="A"> + 31 19 -31 1 blend + hmoveto + 86 -54 90 -106 callsubr + 115 366 23 73 21 72 21 76 25 -42 30 -50 5 -9 7 -11 3 -4 -4 6 3 -7 6 -10 8 blend + rlinecurve + 4 hlineto + 20 -76 22 -72 23 -73 113 -366 4 -6 -6 10 2 -3 4 -6 5 -9 -7 11 25 -40 -30 50 8 blend + rcurveline + 90 -56 92 -106 callsubr + -221 656 -15 25 4 -6 2 blend + rlineto + -96 68 -112 -106 callsubr + -104 -457 -30 49 33 -55 -105 callsubr + 301 68 -301 -8 15 -40 65 8 -15 3 blend + hlineto + </CharString> + <CharString name="T"> + 258 26 -44 1 blend + hmoveto + 84 585 217 71 -518 -71 217 -52 88 47 -79 17 -30 -43 73 18 -28 43 -73 17 -30 7 blend + hlineto + </CharString> + <CharString name="dollar"> + -107 callsubr + 73 -26 73 -26 73 -27 21 -35 36 -58 -28 -8 -12 -28 0 28 -14 -2 18 -3 27 27 8 blend + rlinecurve + -24 566 6 -21 0 -34 -105 callsubr + 56 -26 56 -106 callsubr + 50 0 9 1 blend + 0 50 50 0 9 0 10 2 blend + vvcurveto + -56 26 -56 -106 callsubr + -50 0 -9 1 blend + 0 -50 -50 0 -9 0 -10 2 blend + vvcurveto + -562 0 102 1 blend + vmoveto + -148 56 148 0 -68 -26 56 0 68 3 blend + vlineto + </CharString> + <CharString name="glyph00003"> + -107 callsubr + 21 -35 36 -58 2 blend + rlineto + -43 52 84 -36 83 5 -11 -7 13 -11 17 -4 8 8 -13 5 blend + hhcurveto + -51 -147 -19 32 1 -3 -105 callsubr + 159 857 -56 7 -159 -858 -1 1 3 -3 26 -44 -3 5 1 -1 -2 4 6 blend + rlineto + </CharString> + </CharStrings> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=2 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=1 --> + <VarData index="0"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=2 --> + <VarRegionIndex index="0" value="0"/> + <VarRegionIndex index="1" value="1"/> + </VarData> + </VarStore> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF2> + + <GPOS> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=1 --> + <FeatureIndex index="0" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=1 --> + <FeatureRecord index="0"> + <FeatureTag value="size"/> + <Feature> + <FeatureParamsSize> + <DesignSize value="10.0"/> + <SubfamilyID value="0"/> + <SubfamilyNameID value="0"/> + <RangeStart value="0.0"/> + <RangeEnd value="0.0"/> + </FeatureParamsSize> + <!-- LookupCount=0 --> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=0 --> + </LookupList> + </GPOS> + + <GSUB> + <Version value="0x00010001"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=2 --> + <FeatureIndex index="0" value="1"/> + <FeatureIndex index="1" value="0"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=2 --> + <FeatureRecord index="0"> + <FeatureTag value="rvrn"/> + <Feature> + <!-- LookupCount=0 --> + </Feature> + </FeatureRecord> + <FeatureRecord index="1"> + <FeatureTag value="test"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=2 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="dollar" out="glyph00003"/> + </SingleSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="dollar" out="glyph00003"/> + </SingleSubst> + </Lookup> + </LookupList> + <FeatureVariations> + <Version value="0x00010000"/> + <!-- FeatureVariationCount=1 --> + <FeatureVariationRecord index="0"> + <ConditionSet> + <!-- ConditionCount=1 --> + <ConditionTable index="0" Format="1"> + <AxisIndex value="0"/> + <FilterRangeMinValue value="-1.0"/> + <FilterRangeMaxValue value="0.36707"/> + </ConditionTable> + </ConditionSet> + <FeatureTableSubstitution> + <Version value="0x00010000"/> + <!-- SubstitutionCount=1 --> + <SubstitutionRecord index="0"> + <FeatureIndex value="0"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="1"/> + </Feature> + </SubstitutionRecord> + </FeatureTableSubstitution> + </FeatureVariationRecord> + </FeatureVariations> + </GSUB> + + <HVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=2 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=1 --> + <VarData index="0"> + <!-- ItemCount=5 --> + <NumShorts value="0"/> + <!-- VarRegionCount=0 --> + <Item index="0" value="[]"/> + <Item index="1" value="[]"/> + <Item index="2" value="[]"/> + <Item index="3" value="[]"/> + <Item index="4" value="[]"/> + </VarData> + </VarStore> + </HVAR> + + <MVAR> + <Version value="0x00010000"/> + <Reserved value="0"/> + <ValueRecordSize value="8"/> + <!-- ValueRecordCount=2 --> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=2 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="-1.0"/> + <PeakCoord value="-1.0"/> + <EndCoord value="0.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=1 --> + <VarData index="0"> + <!-- ItemCount=2 --> + <NumShorts value="0"/> + <!-- VarRegionCount=2 --> + <VarRegionIndex index="0" value="0"/> + <VarRegionIndex index="1" value="1"/> + <Item index="0" value="[-8, 14]"/> + <Item index="1" value="[-5, 9]"/> + </VarData> + </VarStore> + <ValueRecord index="0"> + <ValueTag value="stro"/> + <VarIdx value="1"/> + </ValueRecord> + <ValueRecord index="1"> + <ValueTag value="xhgt"/> + <VarIdx value="0"/> + </ValueRecord> + </MVAR> + + <STAT> + <Version value="0x00010002"/> + <DesignAxisRecordSize value="8"/> + <!-- DesignAxisCount=1 --> + <DesignAxisRecord> + <Axis index="0"> + <AxisTag value="wght"/> + <AxisNameID value="256"/> <!-- Weight --> + <AxisOrdering value="0"/> + </Axis> + </DesignAxisRecord> + <!-- AxisValueCount=0 --> + <ElidedFallbackNameID value="2"/> <!-- Regular --> + </STAT> + + <avar> + <segment axis="wght"> + <mapping from="-1.0" to="-1.0"/> + <mapping from="-0.5" to="-0.7283"/> + <mapping from="0.0" to="0.0"/> + <mapping from="0.2" to="0.1867"/> + <mapping from="0.4" to="0.36707"/> + <mapping from="0.6" to="0.7215"/> + <mapping from="1.0" to="1.0"/> + </segment> + </avar> + + <fvar> + + <!-- Weight --> + <Axis> + <AxisTag>wght</AxisTag> + <Flags>0x0</Flags> + <MinValue>200.0</MinValue> + <DefaultValue>400.0</DefaultValue> + <MaxValue>900.0</MaxValue> + <AxisNameID>256</AxisNameID> + </Axis> + + <!-- ExtraLight --> + <!-- PostScript: TestCFF2Roman-ExtraLight --> + <NamedInstance flags="0x0" postscriptNameID="258" subfamilyNameID="257"> + <coord axis="wght" value="200.0"/> + </NamedInstance> + + <!-- Light --> + <!-- PostScript: TestCFF2Roman-Light --> + <NamedInstance flags="0x0" postscriptNameID="260" subfamilyNameID="259"> + <coord axis="wght" value="300.0"/> + </NamedInstance> + + <!-- Regular --> + <!-- PostScript: TestCFF2Roman-Regular --> + <NamedInstance flags="0x0" postscriptNameID="262" subfamilyNameID="261"> + <coord axis="wght" value="400.0"/> + </NamedInstance> + + <!-- Medium --> + <!-- PostScript: TestCFF2Roman-Medium --> + <NamedInstance flags="0x0" postscriptNameID="264" subfamilyNameID="263"> + <coord axis="wght" value="500.0"/> + </NamedInstance> + + <!-- Semibold --> + <!-- PostScript: TestCFF2Roman-Semibold --> + <NamedInstance flags="0x0" postscriptNameID="266" subfamilyNameID="265"> + <coord axis="wght" value="600.0"/> + </NamedInstance> + + <!-- Bold --> + <!-- PostScript: TestCFF2Roman-Bold --> + <NamedInstance flags="0x0" postscriptNameID="268" subfamilyNameID="267"> + <coord axis="wght" value="700.0"/> + </NamedInstance> + + <!-- Black --> + <!-- PostScript: TestCFF2Roman-Black --> + <NamedInstance flags="0x0" postscriptNameID="270" subfamilyNameID="269"> + <coord axis="wght" value="900.0"/> + </NamedInstance> + </fvar> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/varLib/data/master_vvar_cff2/TestVVAR.0.ttx b/Tests/varLib/data/master_vvar_cff2/TestVVAR.0.ttx new file mode 100644 index 00000000..7383c171 --- /dev/null +++ b/Tests/varLib/data/master_vvar_cff2/TestVVAR.0.ttx @@ -0,0 +1,821 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="uniFF20"/> + <GlyphID id="2" name="uniFF21"/> + <GlyphID id="3" name="uniFF41"/> + <GlyphID id="4" name="uni3042"/> + <GlyphID id="5" name="uni6280"/> + <GlyphID id="6" name="uni56FD"/> + <GlyphID id="7" name="c30719"/> + <GlyphID id="8" name="c30790"/> + <GlyphID id="9" name="c30816"/> + <GlyphID id="10" name="c30843"/> + <GlyphID id="11" name="c31621"/> + <GlyphID id="12" name="c32051"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.00299"/> + <checkSumAdjustment value="0xaa083de0"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Tue Feb 19 17:21:59 2019"/> + <modified value="Tue Feb 19 17:21:59 2019"/> + <xMin value="19"/> + <yMin value="-83"/> + <xMax value="966"/> + <yMax value="840"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="19"/> + <minRightSideBearing value="23"/> + <xMaxExtent value="966"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="8"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="13"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="822"/> + <usWeightClass value="250"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="3"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="UKWN"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="12354"/> + <usLastCharIndex value="65345"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.003;UKWN;SHSansVVARTest_75-w0.00 + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.003;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansVVARTest_75-w0.00 + </namerecord> + <namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Adobe Systems Co., Ltd. + </namerecord> + <namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Ryoko Nishizuka + </namerecord> + <namerecord nameID="10" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Masataka HATTORI (variable font production) + </namerecord> + <namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True"> + http://www.adobe.com + </namerecord> + <namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Master3 + </namerecord> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.003;UKWN;SHSansVVARTest_75-w0.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.003;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + SHSansVVARTest_75-w0.00 + </namerecord> + <namerecord nameID="8" platformID="3" platEncID="1" langID="0x409"> + Adobe Systems Co., Ltd. + </namerecord> + <namerecord nameID="9" platformID="3" platEncID="1" langID="0x409"> + Ryoko Nishizuka + </namerecord> + <namerecord nameID="10" platformID="3" platEncID="1" langID="0x409"> + Masataka HATTORI 服部正貴 (variable font production) + </namerecord> + <namerecord nameID="11" platformID="3" platEncID="1" langID="0x409"> + http://www.adobe.com + </namerecord> + <namerecord nameID="17" platformID="3" platEncID="1" langID="0x409"> + Master3 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x3042" name="uni3042"/><!-- HIRAGANA LETTER A --> + <map code="0x56fd" name="uni56FD"/><!-- CJK UNIFIED IDEOGRAPH-56FD --> + <map code="0x6280" name="uni6280"/><!-- CJK UNIFIED IDEOGRAPH-6280 --> + <map code="0xff20" name="uniFF20"/><!-- FULLWIDTH COMMERCIAL AT --> + <map code="0xff21" name="uniFF21"/><!-- FULLWIDTH LATIN CAPITAL LETTER A --> + <map code="0xff41" name="uniFF41"/><!-- FULLWIDTH LATIN SMALL LETTER A --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x3042" name="uni3042"/><!-- HIRAGANA LETTER A --> + <map code="0x56fd" name="uni56FD"/><!-- CJK UNIFIED IDEOGRAPH-56FD --> + <map code="0x6280" name="uni6280"/><!-- CJK UNIFIED IDEOGRAPH-6280 --> + <map code="0xff20" name="uniFF20"/><!-- FULLWIDTH COMMERCIAL AT --> + <map code="0xff21" name="uniFF21"/><!-- FULLWIDTH LATIN CAPITAL LETTER A --> + <map code="0xff41" name="uniFF41"/><!-- FULLWIDTH LATIN SMALL LETTER A --> + </cmap_format_4> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="SHSansVVARTest_75-w0.00"> + <version value="1.0"/> + <FamilyName value="SHSansVVARTest_75"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="19 -83 966 840"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="0 0"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="857"/> + </Private> + <CharStrings> + <CharString name=".notdef"> + -669 endchar + </CharString> + <CharString name="c30719"> + 667 26 rmoveto + -12 22 rlineto + -47 -20 -60 -12 -73 0 rrcurveto + -168 0 -128 95 0 142 rrcurveto + 0 170 146 130 211 0 rrcurveto + 180 0 104 -93 0 -133 rrcurveto + 0 -100 -81 -70 -60 0 rrcurveto + -50 0 -17 22 22 78 rrcurveto + 49 166 rlineto + -31 9 -32 8 -47 0 rrcurveto + -150 0 -117 -98 0 -105 rrcurveto + 0 -65 58 -38 58 0 rrcurveto + 74 0 53 25 44 55 rrcurveto + 4 0 rlineto + -9 -60 39 -20 43 0 rrcurveto + 90 0 96 72 0 128 rrcurveto + 0 140 -120 103 -193 0 rrcurveto + -233 0 -168 -141 0 -184 rrcurveto + 0 -160 149 -102 182 0 rrcurveto + 70 0 67 11 57 25 rrcurveto + -23 379 rmoveto + -32 -109 rlineto + -20 -69 -71 -69 -88 0 rrcurveto + -62 0 -31 34 0 42 rrcurveto + 0 95 102 86 124 0 rrcurveto + 38 0 25 -5 15 -5 rrcurveto + endchar + </CharString> + <CharString name="c30790"> + 768 0 rmoveto + 37 0 rlineto + -297 546 rlineto + -35 0 rlineto + -296 -546 rlineto + 34 0 rlineto + 106 190 rlineto + 346 0 rlineto + 105 -190 rlineto + -439 217 rmoveto + 62 110 rlineto + 34 65 32 55 32 67 rrcurveto + 4 0 rlineto + 34 -67 30 -54 35 -66 rrcurveto + 61 -110 rlineto + -324 0 rlineto + endchar + </CharString> + <CharString name="c30816"> + 276 98 rmoveto + 0 -74 92 -33 92 0 rrcurveto + 80 0 83 33 62 36 rrcurveto + 2 0 rlineto + 4 -60 rlineto + 29 0 rlineto + 0 255 rlineto + 0 83 -54 68 -140 0 rrcurveto + -94 0 -93 -35 -37 -24 rrcurveto + 18 -25 rlineto + 40 23 81 32 83 0 rrcurveto + 128 0 34 -62 1 -67 rrcurveto + -290 -19 -121 -42 0 -89 rrcurveto + 35 2 rmoveto + 0 65 93 39 283 19 rrcurveto + 0 -131 rlineto + -79 -48 -75 -25 -70 0 rrcurveto + -74 0 -78 23 0 58 rrcurveto + endchar + </CharString> + <CharString name="c30843"> + 411 586 rmoveto + 0 -5 -1 -11 -1 -12 rrcurveto + -7 -56 -23 -131 0 -107 rrcurveto + 0 -83 26 -102 28 -67 rrcurveto + 28 10 rlineto + -29 66 -27 95 0 79 rrcurveto + 0 111 18 128 14 56 rrcurveto + 2 10 4 14 3 4 rrcurveto + -35 1 rlineto + -254 -92 rmoveto + 1 -31 rlineto + 35 -2 78 -2 33 0 rrcurveto + 147 0 184 11 152 19 rrcurveto + -1 29 rlineto + -124 -20 -198 -13 -161 0 rrcurveto + -25 0 -87 3 -34 6 rrcurveto + 513 -70 rmoveto + -1 -9 -3 -10 -2 -6 rrcurveto + -51 -139 -97 -93 -105 -65 rrcurveto + -69 -42 -62 -17 -53 0 rrcurveto + -42 0 -26 18 0 36 rrcurveto + 0 84 110 92 126 39 rrcurveto + 53 17 75 18 77 0 rrcurveto + 164 0 92 -72 0 -81 rrcurveto + 0 -117 -146 -66 -168 -14 rrcurveto + 18 -25 rlineto + 219 27 106 85 0 109 rrcurveto + 0 93 -99 84 -191 0 rrcurveto + -55 0 -80 -11 -67 -20 rrcurveto + -137 -43 -128 -101 0 -100 rrcurveto + 0 -52 42 -29 59 0 rrcurveto + 54 0 73 23 64 39 rrcurveto + 115 68 96 106 63 142 rrcurveto + 3 8 3 8 4 8 rrcurveto + -34 8 rlineto + endchar + </CharString> + <CharString name="c31621"> + 389 497 rmoveto + 0 -26 rlineto + 554 0 rlineto + 0 26 rlineto + -554 0 rlineto + 23 -174 rmoveto + 0 -27 rlineto + 479 0 rlineto + 0 27 rlineto + -479 0 rlineto + 241 308 rmoveto + 0 -324 rlineto + 28 0 rlineto + 0 324 rlineto + -28 0 rlineto + -158 -332 rmoveto + -27 -9 rlineto + 80 -174 169 -123 229 -55 rrcurveto + 5 8 7 10 8 6 rrcurveto + -229 49 -166 122 -76 166 rrcurveto + 386 24 rmoveto + 0 -6 rlineto + -86 -194 -242 -117 -228 -43 rrcurveto + 7 -6 7 -11 3 -8 rrcurveto + 234 49 243 118 94 211 rrcurveto + -19 9 rlineto + -6 -2 rlineto + -7 0 rlineto + -854 -111 rmoveto + 14 -28 rlineto + 91 23 125 31 119 30 rrcurveto + -5 27 rlineto + -128 -33 -131 -31 -85 -19 rrcurveto + 15 254 rmoveto + 0 -26 rlineto + 325 0 rlineto + 0 26 rlineto + -325 0 rlineto + 164 164 rmoveto + 0 -650 rlineto + 0 -11 -6 -3 -13 0 rrcurveto + -13 -1 -43 0 -53 1 rrcurveto + 4 -8 6 -12 2 -7 rrcurveto + 64 0 34 1 18 4 rrcurveto + 19 5 9 10 0 22 rrcurveto + 0 649 rlineto + -28 0 rlineto + endchar + </CharString> + <CharString name="c32051"> + 231 479 rmoveto + 0 -26 rlineto + 546 0 rlineto + 0 26 rlineto + -546 0 rlineto + 30 -166 rmoveto + 0 -27 rlineto + 487 0 rlineto + 0 27 rlineto + -487 0 rlineto + -50 -190 rmoveto + 0 -26 rlineto + 592 0 rlineto + 0 26 rlineto + -592 0 rlineto + 270 348 rmoveto + 0 -362 rlineto + 28 0 rlineto + 0 362 rlineto + -28 0 rlineto + 124 -227 rmoveto + 46 -28 52 -40 25 -26 rrcurveto + 22 13 rlineto + -25 27 -52 38 -47 28 rrcurveto + -21 -12 rlineto + -518 347 rmoveto + 0 -653 rlineto + 29 0 rlineto + 0 627 rlineto + 771 0 rlineto + 0 -627 rlineto + 28 0 rlineto + 0 653 rlineto + -828 0 rlineto + 14 -588 rmoveto + 0 -26 rlineto + 799 0 rlineto + 0 26 rlineto + -799 0 rlineto + endchar + </CharString> + <CharString name="uni3042"> + -107 304 779 rmoveto + 0 -6 -1 -13 -1 -16 rrcurveto + -5 -73 -17 -177 0 -145 rrcurveto + 0 -105 19 -135 22 -89 rrcurveto + 30 9 rlineto + -22 88 -20 128 0 100 rrcurveto + 0 151 13 173 11 74 rrcurveto + 1 12 3 18 3 5 rrcurveto + -36 1 rlineto + -188 -126 rmoveto + 1 -33 rlineto + 27 -3 58 -3 27 0 rrcurveto + 110 0 142 16 111 25 rrcurveto + 0 31 rlineto + -95 -26 -144 -19 -125 0 rrcurveto + -21 0 -66 5 -25 7 rrcurveto + 382 -89 rmoveto + -1 -11 -2 -9 -3 -9 rrcurveto + -37 -188 -69 -128 -76 -89 rrcurveto + -51 -56 -47 -22 -39 0 rrcurveto + -30 0 -19 24 0 49 rrcurveto + 0 117 79 126 92 53 rrcurveto + 39 23 56 23 59 0 rrcurveto + 120 0 67 -98 0 -110 rrcurveto + 0 -162 -102 -88 -128 -18 rrcurveto + 18 -26 rlineto + 167 36 77 111 0 145 rrcurveto + 0 122 -78 112 -144 0 rrcurveto + -42 0 -61 -15 -50 -27 rrcurveto + -105 -57 -96 -133 0 -133 rrcurveto + 0 -67 34 -37 46 0 rrcurveto + 44 0 56 30 48 51 rrcurveto + 83 92 74 143 46 190 rrcurveto + 4 10 3 7 3 9 rrcurveto + -35 10 rlineto + endchar + </CharString> + <CharString name="uni56FD"> + -107 175 638 rmoveto + 0 -28 rlineto + 404 0 rlineto + 0 28 rlineto + -404 0 rlineto + 22 -225 rmoveto + 0 -28 rlineto + 362 0 rlineto + 0 28 rlineto + -362 0 rlineto + -36 -254 rmoveto + 0 -29 rlineto + 437 0 rlineto + 0 29 rlineto + -437 0 rlineto + 196 470 rmoveto + 0 -487 rlineto + 30 0 rlineto + 0 487 rlineto + -30 0 rlineto + 95 -303 rmoveto + 33 -38 37 -54 17 -36 rrcurveto + 23 16 rlineto + -18 36 -37 52 -34 38 rrcurveto + -21 -14 rlineto + -388 460 rmoveto + 0 -868 rlineto + 31 0 rlineto + 0 841 rlineto + 562 0 rlineto + 0 -841 rlineto + 31 0 rlineto + 0 868 rlineto + -624 0 rlineto + 16 -788 rmoveto + 0 -27 rlineto + 590 0 rlineto + 0 27 rlineto + -590 0 rlineto + endchar + </CharString> + <CharString name="uni6280"> + -107 293 659 rmoveto + 0 -28 rlineto + 415 0 rlineto + 0 28 rlineto + -415 0 rlineto + 16 -233 rmoveto + 0 -28 rlineto + 355 0 rlineto + 0 28 rlineto + -355 0 rlineto + 177 414 rmoveto + 0 -432 rlineto + 31 0 rlineto + 0 432 rlineto + -31 0 rlineto + -108 -439 rmoveto + -29 -9 rlineto + 61 -235 124 -167 171 -73 rrcurveto + 5 8 9 11 8 6 rrcurveto + -169 66 -124 165 -56 228 rrcurveto + 276 25 rmoveto + 0 -7 rlineto + -62 -262 -176 -156 -173 -58 rrcurveto + 7 -5 8 -12 2 -9 rrcurveto + 180 66 178 156 69 278 rrcurveto + -20 11 rlineto + -6 -2 rlineto + -7 0 rlineto + -635 -150 rmoveto + 13 -28 rlineto + 68 30 95 43 89 40 rrcurveto + -5 28 rlineto + -96 -43 -99 -43 -65 -27 rrcurveto + 12 342 rmoveto + 0 -28 rlineto + 245 0 rlineto + 0 28 rlineto + -245 0 rlineto + 119 221 rmoveto + 0 -873 rlineto + 0 -15 -5 -4 -9 0 rrcurveto + -10 -1 -32 0 -39 1 rrcurveto + 5 -8 5 -12 2 -7 rrcurveto + 49 -1 26 1 16 5 rrcurveto + 16 6 6 10 0 26 rrcurveto + 0 872 rlineto + -30 0 rlineto + endchar + </CharString> + <CharString name="uniFF20"> + -107 501 35 rmoveto + -9 27 rlineto + -35 -29 -45 -16 -54 0 rrcurveto + -126 0 -96 130 0 189 rrcurveto + 0 226 111 176 155 0 rrcurveto + 135 0 77 -123 0 -181 rrcurveto + 0 -133 -60 -95 -44 0 rrcurveto + -34 0 -13 29 15 106 rrcurveto + 35 223 rlineto + -22 12 -26 9 -36 0 rrcurveto + -114 0 -86 -130 0 -141 rrcurveto + 0 -85 43 -51 45 0 rrcurveto + 54 0 40 34 32 75 rrcurveto + 3 0 rlineto + -6 -82 29 -27 34 0 rrcurveto + 71 0 72 95 0 172 rrcurveto + 0 185 -93 138 -146 0 rrcurveto + -176 0 -126 -187 0 -246 rrcurveto + 0 -213 113 -136 137 0 rrcurveto + 53 0 50 15 43 34 rrcurveto + -24 509 rmoveto + -22 -149 rlineto + -15 -95 -50 -94 -61 0 rrcurveto + -45 0 -23 46 0 58 rrcurveto + 0 128 73 119 89 0 rrcurveto + 26 0 18 -7 10 -6 rrcurveto + endchar + </CharString> + <CharString name="uniFF21"> + -107 569 0 rmoveto + 41 0 rlineto + -220 726 rlineto + -42 0 rlineto + -219 -726 rlineto + 38 0 rlineto + 75 260 rlineto + 253 0 rlineto + 74 -260 rlineto + -316 288 rmoveto + 42 153 rlineto + 25 87 24 73 23 89 rrcurveto + 3 0 rlineto + 25 -89 22 -71 25 -89 rrcurveto + 43 -153 rlineto + -232 0 rlineto + endchar + </CharString> + <CharString name="uniFF41"> + -107 202 128 rmoveto + 0 -99 68 -41 71 0 rrcurveto + 59 0 62 44 46 49 rrcurveto + 2 0 rlineto + 4 -81 rlineto + 31 0 rlineto + 0 341 rlineto + 0 106 -45 90 -106 0 rrcurveto + -71 0 -70 -48 -31 -30 rrcurveto + 17 -26 rlineto + 32 31 59 43 59 0 rrcurveto + 92 0 26 -87 2 -93 rrcurveto + -217 -26 -90 -56 0 -117 rrcurveto + 38 2 rmoveto + 0 90 65 53 204 26 rrcurveto + 0 -180 rlineto + -57 -68 -53 -33 -52 0 rrcurveto + -53 0 -54 30 0 82 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=2 --> + <FeatureIndex index="0" value="0"/> + <FeatureIndex index="1" value="1"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=2 --> + <FeatureRecord index="0"> + <FeatureTag value="vert"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="1"> + <FeatureTag value="vrt2"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="1"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=2 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="uni3042" out="c30843"/> + <Substitution in="uni56FD" out="c32051"/> + <Substitution in="uni6280" out="c31621"/> + <Substitution in="uniFF20" out="c30719"/> + <Substitution in="uniFF21" out="c30790"/> + <Substitution in="uniFF41" out="c30816"/> + </SingleSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="uni3042" out="c30843"/> + <Substitution in="uni56FD" out="c32051"/> + <Substitution in="uni6280" out="c31621"/> + <Substitution in="uniFF20" out="c30719"/> + <Substitution in="uniFF21" out="c30790"/> + <Substitution in="uniFF41" out="c30816"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="6"/> + <VOriginRecord> + <glyphName value="c30719"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c30790"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c30816"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c30843"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c31621"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c32051"/> + <vOrigin value="660"/> + </VOriginRecord> + </VORG> + + <hmtx> + <mtx name=".notdef" width="188" lsb="0"/> + <mtx name="c30719" width="1000" lsb="142"/> + <mtx name="c30790" width="1000" lsb="177"/> + <mtx name="c30816" width="1000" lsb="276"/> + <mtx name="c30843" width="1000" lsb="128"/> + <mtx name="c31621" width="1000" lsb="27"/> + <mtx name="c32051" width="1000" lsb="87"/> + <mtx name="uni3042" width="750" lsb="92"/> + <mtx name="uni56FD" width="750" lsb="64"/> + <mtx name="uni6280" width="750" lsb="19"/> + <mtx name="uniFF20" width="750" lsb="105"/> + <mtx name="uniFF21" width="750" lsb="129"/> + <mtx name="uniFF41" width="750" lsb="202"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="29"/> + <minBottomSideBearing value="28"/> + <yMaxExtent value="963"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="8"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="880"/> + <mtx name="c30719" height="750" tsb="83"/> + <mtx name="c30790" height="750" tsb="114"/> + <mtx name="c30816" height="750" tsb="254"/> + <mtx name="c30843" height="750" tsb="74"/> + <mtx name="c31621" height="750" tsb="29"/> + <mtx name="c32051" height="750" tsb="69"/> + <mtx name="uni3042" height="1000" tsb="101"/> + <mtx name="uni56FD" height="1000" tsb="94"/> + <mtx name="uni6280" height="1000" tsb="40"/> + <mtx name="uniFF20" height="1000" tsb="112"/> + <mtx name="uniFF21" height="1000" tsb="154"/> + <mtx name="uniFF41" height="1000" tsb="343"/> + </vmtx> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/varLib/data/master_vvar_cff2/TestVVAR.1.ttx b/Tests/varLib/data/master_vvar_cff2/TestVVAR.1.ttx new file mode 100644 index 00000000..f6020977 --- /dev/null +++ b/Tests/varLib/data/master_vvar_cff2/TestVVAR.1.ttx @@ -0,0 +1,821 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <GlyphOrder> + <!-- The 'id' attribute is only for humans; it is ignored when parsed. --> + <GlyphID id="0" name=".notdef"/> + <GlyphID id="1" name="uniFF20"/> + <GlyphID id="2" name="uniFF21"/> + <GlyphID id="3" name="uniFF41"/> + <GlyphID id="4" name="uni3042"/> + <GlyphID id="5" name="uni6280"/> + <GlyphID id="6" name="uni56FD"/> + <GlyphID id="7" name="c30719"/> + <GlyphID id="8" name="c30790"/> + <GlyphID id="9" name="c30816"/> + <GlyphID id="10" name="c30843"/> + <GlyphID id="11" name="c31621"/> + <GlyphID id="12" name="c32051"/> + </GlyphOrder> + + <head> + <!-- Most of this table will be recalculated by the compiler --> + <tableVersion value="1.0"/> + <fontRevision value="1.00299"/> + <checkSumAdjustment value="0x1101e854"/> + <magicNumber value="0x5f0f3cf5"/> + <flags value="00000000 00000011"/> + <unitsPerEm value="1000"/> + <created value="Tue Feb 19 17:22:00 2019"/> + <modified value="Tue Feb 19 17:22:00 2019"/> + <xMin value="11"/> + <yMin value="-96"/> + <xMax value="987"/> + <yMax value="854"/> + <macStyle value="00000000 00000000"/> + <lowestRecPPEM value="3"/> + <fontDirectionHint value="2"/> + <indexToLocFormat value="0"/> + <glyphDataFormat value="0"/> + </head> + + <hhea> + <tableVersion value="0x00010000"/> + <ascent value="1160"/> + <descent value="-317"/> + <lineGap value="0"/> + <advanceWidthMax value="1000"/> + <minLeftSideBearing value="11"/> + <minRightSideBearing value="4"/> + <xMaxExtent value="987"/> + <caretSlopeRise value="1"/> + <caretSlopeRun value="0"/> + <caretOffset value="0"/> + <reserved0 value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <metricDataFormat value="0"/> + <numberOfHMetrics value="8"/> + </hhea> + + <maxp> + <tableVersion value="0x5000"/> + <numGlyphs value="13"/> + </maxp> + + <OS_2> + <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex' + will be recalculated by the compiler --> + <version value="3"/> + <xAvgCharWidth value="822"/> + <usWeightClass value="900"/> + <usWidthClass value="5"/> + <fsType value="00000000 00000100"/> + <ySubscriptXSize value="650"/> + <ySubscriptYSize value="600"/> + <ySubscriptXOffset value="0"/> + <ySubscriptYOffset value="75"/> + <ySuperscriptXSize value="650"/> + <ySuperscriptYSize value="600"/> + <ySuperscriptXOffset value="0"/> + <ySuperscriptYOffset value="350"/> + <yStrikeoutSize value="50"/> + <yStrikeoutPosition value="228"/> + <sFamilyClass value="0"/> + <panose> + <bFamilyType value="0"/> + <bSerifStyle value="0"/> + <bWeight value="10"/> + <bProportion value="0"/> + <bContrast value="0"/> + <bStrokeVariation value="0"/> + <bArmStyle value="0"/> + <bLetterForm value="0"/> + <bMidline value="0"/> + <bXHeight value="0"/> + </panose> + <ulUnicodeRange1 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/> + <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/> + <achVendID value="UKWN"/> + <fsSelection value="00000000 00000000"/> + <usFirstCharIndex value="12354"/> + <usLastCharIndex value="65345"/> + <sTypoAscender value="880"/> + <sTypoDescender value="-120"/> + <sTypoLineGap value="200"/> + <usWinAscent value="1160"/> + <usWinDescent value="317"/> + <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/> + <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/> + <sxHeight value="380"/> + <sCapHeight value="760"/> + <usDefaultChar value="0"/> + <usBreakChar value="32"/> + <usMaxContext value="1"/> + </OS_2> + + <name> + <namerecord nameID="0" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Regular + </namerecord> + <namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True"> + 1.003;UKWN;SHSansVVARTest_75-w1000.00 + </namerecord> + <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="5" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Version 1.003;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True"> + SHSansVVARTest_75-w1000.00 + </namerecord> + <namerecord nameID="8" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Adobe Systems Co., Ltd. + </namerecord> + <namerecord nameID="9" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Ryoko Nishizuka + </namerecord> + <namerecord nameID="10" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Masataka HATTORI (variable font production) + </namerecord> + <namerecord nameID="11" platformID="1" platEncID="0" langID="0x0" unicode="True"> + http://www.adobe.com + </namerecord> + <namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True"> + Master4 + </namerecord> + <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409"> + Copyright © 2018 Adobe systems Co., Ltd. All Rights Reserved. + </namerecord> + <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409"> + Regular + </namerecord> + <namerecord nameID="3" platformID="3" platEncID="1" langID="0x409"> + 1.003;UKWN;SHSansVVARTest_75-w1000.00 + </namerecord> + <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409"> + Source Han Sans VVAR TEST + </namerecord> + <namerecord nameID="5" platformID="3" platEncID="1" langID="0x409"> + Version 1.003;hotconv 1.0.109;makeotfexe 2.5.65596 + </namerecord> + <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409"> + SHSansVVARTest_75-w1000.00 + </namerecord> + <namerecord nameID="8" platformID="3" platEncID="1" langID="0x409"> + Adobe Systems Co., Ltd. + </namerecord> + <namerecord nameID="9" platformID="3" platEncID="1" langID="0x409"> + Ryoko Nishizuka + </namerecord> + <namerecord nameID="10" platformID="3" platEncID="1" langID="0x409"> + Masataka HATTORI 服部正貴 (variable font production) + </namerecord> + <namerecord nameID="11" platformID="3" platEncID="1" langID="0x409"> + http://www.adobe.com + </namerecord> + <namerecord nameID="17" platformID="3" platEncID="1" langID="0x409"> + Master4 + </namerecord> + </name> + + <cmap> + <tableVersion version="0"/> + <cmap_format_4 platformID="0" platEncID="3" language="0"> + <map code="0x3042" name="uni3042"/><!-- HIRAGANA LETTER A --> + <map code="0x56fd" name="uni56FD"/><!-- CJK UNIFIED IDEOGRAPH-56FD --> + <map code="0x6280" name="uni6280"/><!-- CJK UNIFIED IDEOGRAPH-6280 --> + <map code="0xff20" name="uniFF20"/><!-- FULLWIDTH COMMERCIAL AT --> + <map code="0xff21" name="uniFF21"/><!-- FULLWIDTH LATIN CAPITAL LETTER A --> + <map code="0xff41" name="uniFF41"/><!-- FULLWIDTH LATIN SMALL LETTER A --> + </cmap_format_4> + <cmap_format_6 platformID="1" platEncID="0" language="0"> + </cmap_format_6> + <cmap_format_4 platformID="3" platEncID="1" language="0"> + <map code="0x3042" name="uni3042"/><!-- HIRAGANA LETTER A --> + <map code="0x56fd" name="uni56FD"/><!-- CJK UNIFIED IDEOGRAPH-56FD --> + <map code="0x6280" name="uni6280"/><!-- CJK UNIFIED IDEOGRAPH-6280 --> + <map code="0xff20" name="uniFF20"/><!-- FULLWIDTH COMMERCIAL AT --> + <map code="0xff21" name="uniFF21"/><!-- FULLWIDTH LATIN CAPITAL LETTER A --> + <map code="0xff41" name="uniFF41"/><!-- FULLWIDTH LATIN SMALL LETTER A --> + </cmap_format_4> + </cmap> + + <post> + <formatType value="3.0"/> + <italicAngle value="0.0"/> + <underlinePosition value="-75"/> + <underlineThickness value="50"/> + <isFixedPitch value="0"/> + <minMemType42 value="0"/> + <maxMemType42 value="0"/> + <minMemType1 value="0"/> + <maxMemType1 value="0"/> + </post> + + <CFF> + <major value="1"/> + <minor value="0"/> + <CFFFont name="SHSansVVARTest_75-w1000.00"> + <version value="1.0"/> + <FamilyName value="SHSansVVARTest_75"/> + <isFixedPitch value="0"/> + <ItalicAngle value="0"/> + <UnderlinePosition value="-100"/> + <UnderlineThickness value="50"/> + <PaintType value="0"/> + <CharstringType value="2"/> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FontBBox value="11 -96 987 854"/> + <StrokeWidth value="0"/> + <!-- charset is dumped separately as the 'GlyphOrder' element --> + <Encoding name="StandardEncoding"/> + <Private> + <BlueValues value="0 0"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + <ForceBold value="0"/> + <LanguageGroup value="0"/> + <ExpansionFactor value="0.06"/> + <initialRandomSeed value="0"/> + <defaultWidthX value="1000"/> + <nominalWidthX value="857"/> + </Private> + <CharStrings> + <CharString name=".notdef"> + -669 endchar + </CharString> + <CharString name="c30719"> + 683 21 rmoveto + -20 52 rlineto + -46 -17 -62 -8 -59 0 rrcurveto + -170 0 -122 79 0 145 rrcurveto + 0 163 152 100 177 0 rrcurveto + 178 0 96 -86 0 -108 rrcurveto + 0 -100 -63 -45 -49 2 rrcurveto + -33 1 -9 22 12 47 rrcurveto + 35 160 rlineto + -29 12 -55 10 -50 0 rrcurveto + -164 0 -104 -95 0 -105 rrcurveto + 0 -72 54 -42 74 0 rrcurveto + 61 0 51 22 36 42 rrcurveto + 3 0 rlineto + 4 -42 38 -22 55 0 rrcurveto + 121 0 94 81 0 125 rrcurveto + 0 145 -142 105 -201 0 rrcurveto + -256 0 -171 -154 0 -174 rrcurveto + 0 -171 167 -103 188 0 rrcurveto + 80 0 60 8 69 23 rrcurveto + -98 352 rmoveto + -18 -78 rlineto + -10 -49 -46 -34 -44 0 rrcurveto + -38 0 -19 18 0 31 rrcurveto + 0 63 60 52 78 0 rrcurveto + 15 0 12 -1 10 -2 rrcurveto + endchar + </CharString> + <CharString name="c30790"> + 688 0 rmoveto + 179 0 rlineto + -266 562 rlineto + -207 0 rlineto + -261 -562 rlineto + 172 0 rlineto + 55 125 rlineto + 272 0 rlineto + 56 -125 rlineto + -293 232 rmoveto + 24 44 rlineto + 24 56 27 68 23 58 rrcurveto + 4 0 rlineto + 25 -56 28 -70 24 -56 rrcurveto + 23 -44 rlineto + -202 0 rlineto + endchar + </CharString> + <CharString name="c30816"> + 229 121 rmoveto + 0 -71 73 -59 114 0 rrcurveto + 74 0 72 25 57 30 rrcurveto + 5 0 rlineto + 11 -46 rlineto + 132 0 rlineto + 0 242 rlineto + 0 138 -96 61 -158 0 rrcurveto + -96 0 -91 -23 -77 -34 rrcurveto + 59 -92 rlineto + 62 25 56 14 57 0 rrcurveto + 78 0 40 -18 4 -34 rrcurveto + -270 -12 -106 -51 0 -95 rrcurveto + 154 12 rmoveto + 0 32 49 25 173 6 rrcurveto + 0 -63 rlineto + -42 -19 -45 -17 -51 0 rrcurveto + -50 0 -34 11 0 25 rrcurveto + endchar + </CharString> + <CharString name="c30843"> + 361 613 rmoveto + 1 -15 -2 -21 -2 -15 rrcurveto + -12 -81 -17 -104 0 -94 rrcurveto + 0 -120 29 -115 31 -68 rrcurveto + 126 33 rlineto + -34 78 -29 80 0 133 rrcurveto + 0 87 16 101 20 74 rrcurveto + 4 13 4 14 6 17 rrcurveto + -141 3 rlineto + -230 -68 rmoveto + 3 -107 rlineto + 48 -2 78 -3 55 0 rrcurveto + 152 0 213 10 136 19 rrcurveto + -1 108 rlineto + -157 -31 -145 -5 -193 0 rrcurveto + -66 0 -88 8 -35 3 rrcurveto + 490 -108 rmoveto + -1 -20 -8 -40 -7 -19 rrcurveto + -39 -92 -64 -56 -69 -45 rrcurveto + -60 -43 -67 -27 -47 0 rrcurveto + -32 0 -12 11 0 20 rrcurveto + 0 38 67 64 97 34 rrcurveto + 48 16 71 21 93 0 rrcurveto + 132 0 70 -47 0 -58 rrcurveto + 0 -58 -70 -76 -196 -17 rrcurveto + 73 -98 rlineto + 249 29 80 109 0 105 rrcurveto + 0 125 -143 81 -186 0 rrcurveto + -78 0 -82 -12 -65 -17 rrcurveto + -162 -44 -126 -113 0 -108 rrcurveto + 0 -84 64 -36 74 0 rrcurveto + 91 0 89 36 65 36 rrcurveto + 92 47 104 98 57 134 rrcurveto + 7 18 17 44 8 17 rrcurveto + -134 27 rlineto + endchar + </CharString> + <CharString name="c31621"> + 399 539 rmoveto + 0 -104 rlineto + 554 0 rlineto + 0 104 rlineto + -554 0 rlineto + 16 -169 rmoveto + 0 -102 rlineto + 426 0 rlineto + 0 102 rlineto + -426 0 rlineto + 193 273 rmoveto + 0 -321 rlineto + 132 0 rlineto + 0 321 rlineto + -132 0 rlineto + -41 -370 rmoveto + -120 -33 rlineto + 91 -146 145 -105 217 -53 rrcurveto + 19 30 39 46 29 24 rrcurveto + -202 38 -147 87 -71 112 rrcurveto + 242 97 rmoveto + 0 -17 rlineto + -59 -167 -186 -106 -249 -42 rrcurveto + 25 -24 32 -50 13 -30 rrcurveto + 276 61 199 122 81 229 rrcurveto + -86 27 rlineto + -22 -3 rlineto + -24 0 rlineto + -792 -100 rmoveto + 31 -108 rlineto + 102 19 129 22 120 24 rrcurveto + -16 104 rlineto + -131 -24 -140 -23 -95 -14 rrcurveto + 17 238 rmoveto + 0 -105 rlineto + 349 0 rlineto + 0 105 rlineto + -349 0 rlineto + 122 134 rmoveto + 0 -596 rlineto + 0 -11 -5 -3 -14 0 rrcurveto + -13 0 -42 0 -37 1 rrcurveto + 16 -29 16 -45 4 -29 rrcurveto + 72 0 50 3 36 17 rrcurveto + 35 17 11 28 0 51 rrcurveto + 0 596 rlineto + -129 0 rlineto + endchar + </CharString> + <CharString name="c32051"> + 252 482 rmoveto + 0 -92 rlineto + 490 0 rlineto + 0 92 rlineto + -490 0 rlineto + 26 -138 rmoveto + 0 -89 rlineto + 443 0 rlineto + 0 89 rlineto + -443 0 rlineto + -36 -167 rmoveto + 0 -94 rlineto + 515 0 rlineto + 0 94 rlineto + -515 0 rlineto + 194 280 rmoveto + 0 -319 rlineto + 122 0 rlineto + 0 319 rlineto + -122 0 rlineto + 146 -225 rmoveto + 27 -22 32 -31 15 -18 rrcurveto + 87 41 rlineto + -16 18 -35 29 -27 20 rrcurveto + -83 -37 rlineto + -513 380 rmoveto + 0 -686 rlineto + 132 0 rlineto + 0 581 rlineto + 595 0 rlineto + 0 -581 rlineto + 137 0 rlineto + 0 686 rlineto + -864 0 rlineto + 77 -550 rmoveto + 0 -105 rlineto + 702 0 rlineto + 0 105 rlineto + -702 0 rlineto + endchar + </CharString> + <CharString name="uni3042"> + -107 260 812 rmoveto + 0 -18 -1 -26 -2 -20 rrcurveto + -10 -103 -11 -143 0 -129 rrcurveto + 0 -153 22 -150 23 -90 rrcurveto + 118 38 rlineto + -28 103 -21 110 0 166 rrcurveto + 0 121 12 139 15 96 rrcurveto + 4 16 3 18 6 22 rrcurveto + -130 3 rlineto + -168 -96 rmoveto + 3 -128 rlineto + 40 -2 58 -4 47 0 rrcurveto + 114 0 167 14 98 25 rrcurveto + -1 128 rlineto + -126 -39 -96 -8 -152 0 rrcurveto + -59 0 -66 9 -27 5 rrcurveto + 363 -137 rmoveto + -1 -23 -7 -48 -6 -23 rrcurveto + -27 -131 -41 -83 -43 -63 rrcurveto + -43 -57 -52 -35 -34 0 rrcurveto + -21 0 -6 16 0 30 rrcurveto + 0 60 41 91 66 47 rrcurveto + 34 22 53 26 74 0 rrcurveto + 92 0 47 -68 0 -82 rrcurveto + 0 -89 -35 -99 -154 -21 rrcurveto + 67 -117 rlineto + 194 37 53 141 0 142 rrcurveto + 0 160 -116 109 -138 0 rrcurveto + -64 0 -63 -16 -48 -23 rrcurveto + -127 -58 -94 -150 0 -142 rrcurveto + 0 -106 52 -46 61 0 rrcurveto + 75 0 70 46 50 48 rrcurveto + 65 66 78 134 42 179 rrcurveto + 6 23 16 51 7 20 rrcurveto + -123 32 rlineto + endchar + </CharString> + <CharString name="uni56FD"> + -107 194 642 rmoveto + 0 -110 rlineto + 355 0 rlineto + 0 110 rlineto + -355 0 rlineto + 18 -190 rmoveto + 0 -106 rlineto + 323 0 rlineto + 0 106 rlineto + -323 0 rlineto + -23 -227 rmoveto + 0 -111 rlineto + 368 0 rlineto + 0 111 rlineto + -368 0 rlineto + 128 387 rmoveto + 0 -434 rlineto + 112 0 rlineto + 0 434 rlineto + -112 0 rlineto + 114 -300 rmoveto + 16 -31 20 -43 9 -26 rrcurveto + 80 49 rlineto + -11 26 -22 40 -15 28 rrcurveto + -77 -43 rlineto + -383 499 rmoveto + 0 -907 rlineto + 122 0 rlineto + 0 784 rlineto + 407 0 rlineto + 0 -784 rlineto + 127 0 rlineto + 0 907 rlineto + -656 0 rlineto + 72 -741 rmoveto + 0 -123 rlineto + 505 0 rlineto + 0 123 rlineto + -505 0 rlineto + endchar + </CharString> + <CharString name="uni6280"> + -107 301 710 rmoveto + 0 -123 rlineto + 416 0 rlineto + 0 123 rlineto + -416 0 rlineto + 10 -226 rmoveto + 0 -121 rlineto + 309 0 rlineto + 0 121 rlineto + -309 0 rlineto + 135 370 rmoveto + 0 -428 rlineto + 122 0 rlineto + 0 428 rlineto + -122 0 rlineto + -4 -486 rmoveto + -112 -37 rlineto + 72 -202 103 -143 160 -71 rrcurveto + 17 35 37 54 27 28 rrcurveto + -147 54 -106 123 -51 159 rrcurveto + 148 116 rmoveto + 0 -21 rlineto + -38 -227 -126 -145 -191 -56 rrcurveto + 22 -29 29 -58 12 -36 rrcurveto + 217 80 140 160 58 302 rrcurveto + -80 34 rlineto + -20 -4 rlineto + -23 0 rlineto + -579 -136 rmoveto + 27 -128 rlineto + 78 26 99 32 90 32 rrcurveto + -14 123 rlineto + -100 -33 -107 -33 -73 -19 rrcurveto + 13 320 rmoveto + 0 -123 rlineto + 267 0 rlineto + 0 123 rlineto + -267 0 rlineto + 82 185 rmoveto + 0 -805 rlineto + 0 -14 -4 -4 -10 -1 rrcurveto + -10 0 -31 0 -24 2 rrcurveto + 14 -34 15 -55 3 -34 rrcurveto + 56 0 41 4 30 20 rrcurveto + 31 21 8 32 0 63 rrcurveto + 0 805 rlineto + -119 0 rlineto + endchar + </CharString> + <CharString name="uniFF20"> + -107 516 29 rmoveto + -17 64 rlineto + -34 -24 -47 -12 -41 0 rrcurveto + -127 0 -92 109 0 192 rrcurveto + 0 219 116 140 126 0 rrcurveto + 132 0 70 -115 0 -151 rrcurveto + 0 -133 -42 -64 -35 2 rrcurveto + -21 0 -5 30 7 68 rrcurveto + 23 215 rlineto + -20 16 -49 12 -37 0 rrcurveto + -127 0 -74 -127 0 -140 rrcurveto + 0 -94 40 -55 58 0 rrcurveto + 44 0 36 30 25 59 rrcurveto + 3 0 rlineto + 6 -60 29 -29 43 0 rrcurveto + 98 0 70 105 0 169 rrcurveto + 0 191 -110 140 -154 0 rrcurveto + -198 0 -128 -202 0 -236 rrcurveto + 0 -224 129 -137 143 0 rrcurveto + 62 0 43 10 55 32 rrcurveto + -90 475 rmoveto + -11 -111 rlineto + -5 -69 -28 -52 -24 0 rrcurveto + -23 0 -12 27 0 44 rrcurveto + 0 90 37 76 47 0 rrcurveto + 7 0 5 -2 7 -3 rrcurveto + endchar + </CharString> + <CharString name="uniFF21"> + -107 498 0 rmoveto + 166 0 rlineto + -192 746 rlineto + -195 0 rlineto + -188 -746 rlineto + 162 0 rlineto + 29 179 rlineto + 187 0 rlineto + 31 -179 rlineto + -187 306 rmoveto + 10 73 rlineto + 15 76 20 87 16 80 rrcurveto + 3 0 rlineto + 15 -78 21 -89 15 -76 rrcurveto + 10 -73 rlineto + -125 0 rlineto + endchar + </CharString> + <CharString name="uniFF41"> + -107 161 157 rmoveto + 0 -95 51 -74 91 0 rrcurveto + 53 0 52 34 42 43 rrcurveto + 3 0 rlineto + 11 -65 rlineto + 122 0 rlineto + 0 326 rlineto + 0 172 -81 82 -124 0 rrcurveto + -72 0 -68 -32 -66 -44 rrcurveto + 53 -108 rlineto + 51 32 37 22 37 0 rrcurveto + 48 0 30 -33 5 -52 rrcurveto + -199 -17 -76 -65 0 -126 rrcurveto + 143 13 rmoveto + 0 50 27 37 105 9 rrcurveto + 0 -96 rlineto + -24 -33 -27 -23 -35 0 rrcurveto + -30 0 -16 17 0 39 rrcurveto + endchar + </CharString> + </CharStrings> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF> + + <GSUB> + <Version value="0x00010000"/> + <ScriptList> + <!-- ScriptCount=1 --> + <ScriptRecord index="0"> + <ScriptTag value="DFLT"/> + <Script> + <DefaultLangSys> + <ReqFeatureIndex value="65535"/> + <!-- FeatureCount=2 --> + <FeatureIndex index="0" value="0"/> + <FeatureIndex index="1" value="1"/> + </DefaultLangSys> + <!-- LangSysCount=0 --> + </Script> + </ScriptRecord> + </ScriptList> + <FeatureList> + <!-- FeatureCount=2 --> + <FeatureRecord index="0"> + <FeatureTag value="vert"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="0"/> + </Feature> + </FeatureRecord> + <FeatureRecord index="1"> + <FeatureTag value="vrt2"/> + <Feature> + <!-- LookupCount=1 --> + <LookupListIndex index="0" value="1"/> + </Feature> + </FeatureRecord> + </FeatureList> + <LookupList> + <!-- LookupCount=2 --> + <Lookup index="0"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="uni3042" out="c30843"/> + <Substitution in="uni56FD" out="c32051"/> + <Substitution in="uni6280" out="c31621"/> + <Substitution in="uniFF20" out="c30719"/> + <Substitution in="uniFF21" out="c30790"/> + <Substitution in="uniFF41" out="c30816"/> + </SingleSubst> + </Lookup> + <Lookup index="1"> + <LookupType value="1"/> + <LookupFlag value="0"/> + <!-- SubTableCount=1 --> + <SingleSubst index="0" Format="1"> + <Substitution in="uni3042" out="c30843"/> + <Substitution in="uni56FD" out="c32051"/> + <Substitution in="uni6280" out="c31621"/> + <Substitution in="uniFF20" out="c30719"/> + <Substitution in="uniFF21" out="c30790"/> + <Substitution in="uniFF41" out="c30816"/> + </SingleSubst> + </Lookup> + </LookupList> + </GSUB> + + <VORG> + <majorVersion value="1"/> + <minorVersion value="0"/> + <defaultVertOriginY value="880"/> + <numVertOriginYMetrics value="6"/> + <VOriginRecord> + <glyphName value="c30719"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c30790"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c30816"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c30843"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c31621"/> + <vOrigin value="660"/> + </VOriginRecord> + <VOriginRecord> + <glyphName value="c32051"/> + <vOrigin value="660"/> + </VOriginRecord> + </VORG> + + <hmtx> + <mtx name=".notdef" width="188" lsb="0"/> + <mtx name="c30719" width="1000" lsb="119"/> + <mtx name="c30790" width="1000" lsb="133"/> + <mtx name="c30816" width="1000" lsb="229"/> + <mtx name="c30843" width="1000" lsb="87"/> + <mtx name="c31621" width="1000" lsb="17"/> + <mtx name="c32051" width="1000" lsb="69"/> + <mtx name="uni3042" width="750" lsb="56"/> + <mtx name="uni56FD" width="750" lsb="48"/> + <mtx name="uni6280" width="750" lsb="11"/> + <mtx name="uniFF20" width="750" lsb="84"/> + <mtx name="uniFF21" width="750" lsb="89"/> + <mtx name="uniFF41" width="750" lsb="161"/> + </hmtx> + + <vhea> + <tableVersion value="0x00011000"/> + <ascent value="500"/> + <descent value="-500"/> + <lineGap value="0"/> + <advanceHeightMax value="1000"/> + <minTopSideBearing value="17"/> + <minBottomSideBearing value="16"/> + <yMaxExtent value="976"/> + <caretSlopeRise value="0"/> + <caretSlopeRun value="1"/> + <caretOffset value="0"/> + <reserved1 value="0"/> + <reserved2 value="0"/> + <reserved3 value="0"/> + <reserved4 value="0"/> + <metricDataFormat value="0"/> + <numberOfVMetrics value="8"/> + </vhea> + + <vmtx> + <mtx name=".notdef" height="1000" tsb="880"/> + <mtx name="c30719" height="750" tsb="68"/> + <mtx name="c30790" height="750" tsb="98"/> + <mtx name="c30816" height="750" tsb="219"/> + <mtx name="c30843" height="750" tsb="47"/> + <mtx name="c31621" height="750" tsb="17"/> + <mtx name="c32051" height="750" tsb="48"/> + <mtx name="uni3042" height="1000" tsb="68"/> + <mtx name="uni56FD" height="1000" tsb="69"/> + <mtx name="uni6280" height="1000" tsb="26"/> + <mtx name="uniFF20" height="1000" tsb="94"/> + <mtx name="uniFF21" height="1000" tsb="134"/> + <mtx name="uniFF41" height="1000" tsb="300"/> + </vmtx> + + <DSIG> + <!-- note that the Digital Signature will be invalid after recompilation! --> + <tableHeader flag="0x0" numSigs="0" version="1"/> + </DSIG> + +</ttFont> diff --git a/Tests/varLib/data/test_results/BuildTestCFF2.ttx b/Tests/varLib/data/test_results/BuildTestCFF2.ttx index a4e859f1..37ed3aaf 100644 --- a/Tests/varLib/data/test_results/BuildTestCFF2.ttx +++ b/Tests/varLib/data/test_results/BuildTestCFF2.ttx @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<ttFont sfntVersion="OTTO" ttLibVersion="3.32"> +<ttFont sfntVersion="OTTO" ttLibVersion="3.38"> <fvar> @@ -67,29 +67,29 @@ <BlueValues> <blend value="-12 0 0"/> <blend value="0 0 0"/> - <blend value="486 -8 14"/> + <blend value="486 -8 -8"/> <blend value="498 0 0"/> - <blend value="574 4 -8"/> + <blend value="574 4 4"/> <blend value="586 0 0"/> - <blend value="638 6 -10"/> + <blend value="638 6 6"/> <blend value="650 0 0"/> - <blend value="656 2 -2"/> + <blend value="656 2 2"/> <blend value="668 0 0"/> - <blend value="712 6 -10"/> + <blend value="712 6 6"/> <blend value="724 0 0"/> </BlueValues> <OtherBlues> - <blend value="-217 -17 29"/> + <blend value="-217 -17 -17"/> <blend value="-205 0 0"/> </OtherBlues> <BlueScale value="0.0625"/> <BlueShift value="7"/> <BlueFuzz value="0"/> <StdHW> - <blend value="67 -39.0 67.0"/> + <blend value="67 -39.0 -39.0"/> </StdHW> <StdVW> - <blend value="85 -51.0 87.0"/> + <blend value="85 -51.0 -51.0"/> </StdVW> </Private> </FontDict> @@ -197,7 +197,7 @@ 40 437 -40 -437 -18 31 12 -8 18 -31 -12 8 4 blend hlineto </CharString> - <CharString name="glyph00003"> + <CharString name="dollar.a"> 304 7 -12 1 blend 34 rmoveto 125 86 65 96 -22 38 2 -3 -9 15 -2 4 4 blend diff --git a/Tests/varLib/data/test_results/TestSparseCFF2VF.ttx b/Tests/varLib/data/test_results/TestSparseCFF2VF.ttx new file mode 100644 index 00000000..442ae91e --- /dev/null +++ b/Tests/varLib/data/test_results/TestSparseCFF2VF.ttx @@ -0,0 +1,1301 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.41"> + + <fvar> + + <!-- Weight --> + <Axis> + <AxisTag>wght</AxisTag> + <Flags>0x0</Flags> + <MinValue>200.0</MinValue> + <DefaultValue>200.0</DefaultValue> + <MaxValue>900.0</MaxValue> + <AxisNameID>256</AxisNameID> + </Axis> + + <!-- Kanji-w0.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w0.00 --> + <NamedInstance flags="0x0" postscriptNameID="258" subfamilyNameID="257"> + <coord axis="wght" value="200.0"/> + </NamedInstance> + + <!-- Kanji-w239.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w239.00 --> + <NamedInstance flags="0x0" postscriptNameID="260" subfamilyNameID="259"> + <coord axis="wght" value="324.6875"/> + </NamedInstance> + + <!-- Kanji-w240.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w240.00 --> + <NamedInstance flags="0x0" postscriptNameID="262" subfamilyNameID="261"> + <coord axis="wght" value="325.0"/> + </NamedInstance> + + <!-- Kanji-w439.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w439.00 --> + <NamedInstance flags="0x0" postscriptNameID="264" subfamilyNameID="263"> + <coord axis="wght" value="428.82353"/> + </NamedInstance> + + <!-- Kanji-w440.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w440.00 --> + <NamedInstance flags="0x0" postscriptNameID="266" subfamilyNameID="265"> + <coord axis="wght" value="429.41176"/> + </NamedInstance> + + <!-- Kanji-w499.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w499.00 --> + <NamedInstance flags="0x0" postscriptNameID="268" subfamilyNameID="267"> + <coord axis="wght" value="464.11765"/> + </NamedInstance> + + <!-- Kanji-w500.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w500.00 --> + <NamedInstance flags="0x0" postscriptNameID="270" subfamilyNameID="269"> + <coord axis="wght" value="464.70589"/> + </NamedInstance> + + <!-- Kanji-w599.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w599.00 --> + <NamedInstance flags="0x0" postscriptNameID="272" subfamilyNameID="271"> + <coord axis="wght" value="535.45454"/> + </NamedInstance> + + <!-- Kanji-w600.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w600.00 --> + <NamedInstance flags="0x0" postscriptNameID="274" subfamilyNameID="273"> + <coord axis="wght" value="536.36363"/> + </NamedInstance> + + <!-- Kanji-w669.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w669.00 --> + <NamedInstance flags="0x0" postscriptNameID="276" subfamilyNameID="275"> + <coord axis="wght" value="599.09091"/> + </NamedInstance> + + <!-- Kanji-w670.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w670.00 --> + <NamedInstance flags="0x0" postscriptNameID="278" subfamilyNameID="277"> + <coord axis="wght" value="600.0"/> + </NamedInstance> + + <!-- Kanji-w699.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w699.00 --> + <NamedInstance flags="0x0" postscriptNameID="280" subfamilyNameID="279"> + <coord axis="wght" value="626.36363"/> + </NamedInstance> + + <!-- Kanji-w700.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w700.00 --> + <NamedInstance flags="0x0" postscriptNameID="282" subfamilyNameID="281"> + <coord axis="wght" value="627.27272"/> + </NamedInstance> + + <!-- Kanji-799.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-799.00 --> + <NamedInstance flags="0x0" postscriptNameID="284" subfamilyNameID="283"> + <coord axis="wght" value="717.27272"/> + </NamedInstance> + + <!-- Kanji-w800.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w800.00 --> + <NamedInstance flags="0x0" postscriptNameID="286" subfamilyNameID="285"> + <coord axis="wght" value="718.18182"/> + </NamedInstance> + + <!-- Kanji-w889.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w889.00 --> + <NamedInstance flags="0x0" postscriptNameID="288" subfamilyNameID="287"> + <coord axis="wght" value="799.09091"/> + </NamedInstance> + + <!-- Kanji-w890.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w890.00 --> + <NamedInstance flags="0x0" postscriptNameID="290" subfamilyNameID="289"> + <coord axis="wght" value="800.0"/> + </NamedInstance> + + <!-- Kanji-w1000.00 --> + <!-- PostScript: SHSansJPVFTest-Kanji-w1000.00 --> + <NamedInstance flags="0x0" postscriptNameID="292" subfamilyNameID="291"> + <coord axis="wght" value="900.0"/> + </NamedInstance> + </fvar> + + <CFF2> + <major value="2"/> + <minor value="0"/> + <CFFFont name="CFF2Font"> + <FontMatrix value="0.001 0 0 0.001 0 0"/> + <FDSelect format="3"/> + <FDArray> + <FontDict index="0"> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + </Private> + </FontDict> + <FontDict index="1"> + <Private> + <BlueValues value="-250 -250 1100 1100"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="0"/> + <StdHW value="1"/> + <StdVW value="1"/> + </Private> + </FontDict> + <FontDict index="2"> + <Private> + <BlueValues value="0 0"/> + <BlueScale value="0.039625"/> + <BlueShift value="7"/> + <BlueFuzz value="1"/> + </Private> + </FontDict> + </FDArray> + <CharStrings> + <CharString name=".notdef" fdSelectIndex="0"> + -120 50 859 91 -50 50 hstemhm + 100 50 700 50 vstemhm + hintmask 10111000 + 100 -120 rmoveto + 800 1000 -800 hlineto + 400 -459 rmoveto + -318 409 rlineto + 636 hlineto + -286 -450 rmoveto + hintmask 11011000 + 318 409 rlineto + -818 vlineto + -668 -41 rmoveto + 318 409 318 -409 rlineto + -668 859 rmoveto + 318 -409 -318 -409 rlineto + </CharString> + <CharString name="cid00001" fdSelectIndex="2"> + </CharString> + <CharString name="cid00002" fdSelectIndex="2"> + -12 83 1 126 2 blend + hstemhm + 74 73 -57 40 -26 129 -125 122 4 blend + vstemhm + hintmask 10100000 + 134 755 107 18 2 blend + rmoveto + -48 -137 1 blend + hlineto + 8 -565 16 50 2 blend + rlineto + 32 106 1 blend + hlineto + hintmask 11000000 + -17 -202 -52 -67 2 blend + rmoveto + 24 14 18 22 25 -14 18 -22 -23 -14 -21 -24 -18 13 -20 22 38 25 26 38 37 -28 25 -37 -34 -30 -22 -38 -40 27 -26 39 16 blend + hvcurveto + </CharString> + <CharString name="cid01177" fdSelectIndex="1"> + 1 vsindex + -72 30 253 30 94 30 92 30 65 30 131 45 -30 112 -99 17 -8 0 -12 59 -2 85 -64 2 -92 39 -1 56 -44 2 -63 35 -1 51 -43 1 -62 39 -1 56 -21 0 -31 56 -2 81 -56 2 -81 44 -2 63 -57 3 -81 31 -1 45 -18 0 -27 44 -2 63 16 blend + hstemhm + 193 30 83 30 147 30 173 30 66 30 -20 1 -28 75 -3 107 -74 3 -106 78 -4 111 -99 5 -141 81 -3 116 -79 2 -114 64 -2 92 -81 4 -115 80 -4 114 10 blend + vstemhm + hintmask 1111100011111000 + 306 142 -19 1 -27 7 0 10 2 blend + rmoveto + -156 45 -2 64 1 blend + vlineto + -50 22 -8 79 -42 2 -59 8 -1 11 -18 0 -27 43 -1 62 4 blend + vhcurveto + 17 186 8 -1 11 -68 3 -97 2 blend + 0 18 8 0 12 1 blend + hhcurveto + 70 13 25 114 5 22 -1 31 17 -1 24 2 1 4 0 -1 -1 7 0 10 5 blend + hvcurveto + -9 3 -12 4 -9 6 -20 1 -28 3 0 4 -31 1 -45 10 0 15 -13 0 -19 9 -1 13 6 blend + rrcurveto + -109 -4 -7 -13 -49 -38 -156 33 -1 47 -1 0 -1 1 0 1 2 0 3 10 0 15 9 0 13 60 -3 85 7 blend + 0 -27 5 0 8 1 blend + hhcurveto + -59 -10 5 22 11 0 16 2 -1 2 -1 0 -2 4 0 6 4 blend + hvcurveto + 157 -47 2 -67 1 blend + vlineto + 63 34 -74 3 -106 -25 1 -36 2 blend + rmoveto + 65 -30 74 -47 37 -37 -7 1 -10 5 -1 7 -3 0 -4 5 0 7 -3 0 -4 6 0 9 6 blend + rrcurveto + 20 22 -37 36 -75 47 -65 28 48 -2 68 47 -2 67 -1 0 -1 -6 1 -8 2 0 3 -8 0 -11 8 -1 11 -6 0 -9 8 blend + rlinecurve + 320 -64 -49 3 -69 -32 1 -46 2 blend + rmoveto + 76 -49 83 -75 38 -12 0 -18 -6 1 -8 -13 0 -19 -4 0 -6 -9 1 -12 5 blend + -54 rrcurveto + 23 19 -38 54 -84 73 -76 49 69 -3 98 35 -2 50 5 0 8 2 0 3 11 0 16 2 0 2 13 -1 18 2 0 4 8 blend + rlinecurve + -557 -5 -85 4 -121 -6 0 -9 2 blend + rmoveto + -28 -68 -50 -72 -77 -40 5 -1 6 1 0 1 3 1 5 6 0 9 13 -1 18 1 0 1 6 blend + rrcurveto + 24 -17 79 42 47 74 31 71 62 -3 89 -42 2 -60 -7 1 -10 5 -1 7 -6 0 -8 1 0 1 -2 -1 -4 4 1 7 8 blend + rlinecurve + -117 625 -26 2 -36 42 -3 59 2 blend + rmoveto + -30 775 30 -57 3 -81 -3 0 -5 57 -3 81 3 blend + vlineto + -818 -176 -1 0 -2 12 0 18 2 blend + rmoveto + -30 869 30 -56 2 -81 3 0 5 56 -2 81 3 blend + vlineto + hintmask 0000001000100000 + -455 258 -40 2 -57 -38 2 -54 2 blend + rmoveto + hintmask 0000000100100000 + -99 30 -18 0 -27 81 -3 116 2 blend + vlineto + hintmask 0000001000100000 + 99 18 0 27 1 blend + vlineto + hintmask 0111010010001000 + -236 -127 -60 2 -86 -18 0 -27 2 blend + rmoveto + 26 -40 25 -53 9 -36 -12 1 -17 10 0 15 -10 -1 -15 13 0 19 -4 0 -6 11 -1 15 6 blend + rrcurveto + 29 12 -10 35 -25 53 -27 39 76 -3 109 12 0 18 3 1 5 -10 0 -15 10 -1 14 -15 1 -21 11 0 16 -11 0 -16 8 blend + rlinecurve + 393 2 -112 4 -161 -1 0 -2 2 blend + rmoveto + -16 -38 -31 -57 -23 -35 7 0 11 12 -1 17 13 -1 18 19 0 28 10 0 14 8 -1 11 6 blend + rrcurveto + 27 -12 24 36 26 48 23 46 70 -2 101 -10 1 -14 -8 0 -12 -13 1 -18 -6 -1 -9 -17 0 -25 -1 1 -1 -10 1 -14 8 blend + rlinecurve + -504 -378 27 -1 39 -8 0 -12 2 blend + rmoveto + 559 -94 -559 -110 5 -157 44 -2 63 110 -5 157 3 blend + hlineto + 216 -52 2 -74 1 blend + vmoveto + 559 -92 -559 -110 5 -157 43 -1 62 110 -5 157 3 blend + hlineto + -30 122 -75 3 -107 -4 0 -6 2 blend + rmoveto + -276 619 276 -26 0 -38 45 -2 64 26 0 38 3 blend + vlineto + </CharString> + <CharString name="cid06449" fdSelectIndex="1"> + 2 vsindex + -60 30 203 30 -9 9 67 7 -7 14 -14 30 -20 20 80 30 59 30 121 30 18 93 -30 30 -30 108 -23 0 -26 67 2 76 -98 -2 -111 42 0 47 -13 0 -14 13 0 14 -33 0 -37 11 0 13 -11 0 -13 8 0 9 -7 0 -8 53 0 60 -32 0 -36 32 0 36 -52 0 -59 57 1 65 -33 0 -38 53 0 60 -83 -1 -93 54 0 60 -6 -19 -24 33 19 55 -76 -1 -86 76 1 86 -76 -1 -86 59 1 67 26 blend + hstemhm + 77 30 42 30 139 30 23 30 71 10 74 30 15 30 16 30 158 30 28 30 -4 29 -14 0 -16 88 1 99 -82 -1 -92 87 1 98 -130 -1 -146 102 1 114 -73 -1 -82 74 2 84 -112 -2 -126 27 0 30 13 0 15 90 1 101 -126 -1 -142 75 1 84 -68 -1 -76 102 1 115 -144 -1 -162 94 1 105 -79 -1 -88 95 1 106 -81 -1 -91 74 1 83 22 blend + vstemhm + hintmask 110001011101011101101101 + 53 761 -3 0 -3 31 0 35 2 blend + rmoveto + -30 896 30 -76 -1 -86 5 0 5 76 1 86 3 blend + vlineto + -802 -461 2 0 2 -23 0 -26 2 blend + rmoveto + -30 703 30 -53 0 -60 3 0 4 53 0 60 3 blend + vlineto + hintmask 000000000000100100000000 + -532 539 -58 -1 -65 6 0 7 2 blend + rmoveto + hintmask 000000000010000100000000 + -171 30 -16 -19 -36 102 1 114 2 blend + vlineto + hintmask 000000000000100100001000 + 171 16 19 36 1 blend + vlineto + 299 -100 -1 -112 1 blend + hmoveto + hintmask 000000000010000000001000 + -171 30 -16 -19 -36 102 1 115 2 blend + vlineto + hintmask 000000000000100000001000 + 171 16 19 36 1 blend + vlineto + hintmask 000000111100011010010100 + -46 -219 -34 0 -39 -64 -1 -72 2 blend + rmoveto + 204 -121 -204 -110 -1 -123 83 1 93 110 1 123 3 blend + hlineto + -230 121 33 1 38 -83 -1 -93 2 blend + rmoveto + 200 -121 -200 -108 -2 -122 83 1 93 108 2 122 3 blend + hlineto + -222 121 27 -1 30 -83 -1 -93 2 blend + rmoveto + 192 -121 -192 -101 -1 -114 83 1 93 101 1 114 3 blend + hlineto + -30 151 -87 -1 -98 -29 0 -33 2 blend + rmoveto + -181 716 181 -24 0 -27 11 0 12 24 0 27 3 blend + vlineto + -788 -240 -17 0 -19 9 0 11 2 blend + rmoveto + -130 30 100 -37 0 -42 88 1 99 -20 0 -23 3 blend + vlineto + hintmask 000000110000000000000010 + 786 -100 30 130 -150 -1 -168 20 0 23 95 1 106 37 0 42 4 blend + hlineto + hintmask 000010000000000100000000 + -610 -123 -56 -1 -63 -44 0 -50 2 blend + rmoveto + -50 -62 -93 -73 -118 -54 8 -4 10 -9 6 -7 9 0 11 13 0 15 19 0 21 29 0 32 9 0 10 22 0 25 12 0 14 -11 0 -12 19 0 21 -26 0 -30 7 0 8 -16 0 -18 12 blend + rrcurveto + hintmask 010000000000000001000000 + 121 58 92 75 59 70 3 0 3 -13 0 -14 -10 0 -11 -19 0 -21 -2 0 -2 8 0 8 6 blend + rrcurveto + 124 -78 -89 -1 -100 32 0 36 2 blend + rmoveto + -7 -6 0 -6 1 blend + vlineto + -65 -139 -176 -81 -162 -31 6 -6 8 -12 3 -8 16 0 17 30 0 34 36 0 41 26 0 29 -7 0 -8 12 0 13 12 0 14 -16 0 -18 15 0 16 -30 0 -33 5 0 6 -18 0 -21 12 blend + rrcurveto + hintmask 001000000000000001000000 + 168 37 178 84 72 154 26 0 29 -5 0 -5 -23 0 -26 -12 0 -14 -5 0 -5 6 0 7 6 blend + rrcurveto + hintmask 110100000000000001100001 + -19 11 -6 -2 -47 0 -53 13 0 15 -13 0 -15 0 0 -1 4 blend + rlineto + -333 -72 75 1 85 -55 0 -61 2 blend + rmoveto + 65 -25 75 -46 38 -35 -35 0 -40 8 0 9 -38 0 -42 15 0 17 -18 0 -21 14 0 15 6 blend + rrcurveto + 26 19 -39 34 -76 45 -64 25 49 0 56 31 0 35 19 0 21 -14 0 -16 39 0 44 -18 0 -20 32 0 36 -9 0 -10 8 blend + rlinecurve + 72 55 -55 0 -62 28 0 31 2 blend + rmoveto + -30 -30 -42 0 -47 -42 0 -47 2 blend + rlineto + 269 30 -14 0 -16 42 0 47 2 blend + hlineto + 74 74 13 0 15 -22 0 -24 2 blend + rmoveto + -276 80 1 90 1 blend + vlineto + -52 21 -9 77 -48 0 -54 8 0 9 -21 0 -24 44 0 49 4 blend + vhcurveto + 16 182 8 0 9 -90 -1 -101 2 blend + 0 18 8 0 9 1 blend + hhcurveto + 62 12 21 88 4 25 0 28 20 0 22 6 0 7 10 0 11 9 0 10 5 blend + hvcurveto + -9 2 -12 5 -8 6 -24 0 -26 4 0 5 -34 0 -39 12 0 13 -16 0 -18 10 0 11 6 blend + rrcurveto + -81 25 0 28 1 blend + -4 -6 -11 -41 -37 -154 -1 0 -1 0 1 1 11 -1 12 15 1 17 79 1 89 5 blend + 0 -26 9 0 10 1 blend + hhcurveto + -56 -9 6 25 17 0 19 2 0 3 -1 -1 -2 4 0 5 4 blend + hvcurveto + 276 -81 -1 -91 1 blend + vlineto + 278 -62 -114 -1 -128 32 0 36 2 blend + rmoveto + -66 -32 -126 -33 -107 -23 5 -7 5 -10 2 -7 110 22 126 32 81 36 10 0 11 7 0 8 30 0 34 11 0 12 21 0 23 9 0 10 7 0 8 -14 0 -16 9 0 10 -27 0 -30 3 0 4 -15 0 -17 -15 0 -17 -10 0 -11 -12 0 -14 -11 0 -12 3 0 4 -3 0 -4 18 blend + rrcurveto + </CharString> + <CharString name="cid06821" fdSelectIndex="1"> + 3 vsindex + -58 30 100 30 70 22 -22 30 94 30 19 31 -17 28 152 20 -20 30 -12 12 66 30 -30 89 -5 30 -30 121 -11 0 -24 36 0 81 -32 0 -74 22 0 52 -17 0 -39 16 1 37 -16 -1 -37 21 0 48 -27 0 -63 21 0 49 -11 0 -26 41 0 93 -47 0 -107 24 0 56 -34 0 -78 11 0 26 -11 0 -26 17 0 39 -15 0 -35 15 0 35 -19 0 -43 12 0 26 -12 0 -26 4 0 8 -5 0 -11 28 0 65 -28 0 -65 23 0 52 28 blend + hstemhm + 127 30 -18 18 199 30 -20 20 -20 30 -24 14 97 30 -11 11 72 31 202 30 87 29 -12 0 -27 44 1 101 -19 -1 -45 19 1 45 -46 -1 -106 37 0 85 -31 0 -71 31 0 71 -31 0 -71 40 0 91 -27 0 -62 18 0 42 -47 0 -108 51 0 117 -27 0 -62 27 0 62 -53 0 -122 43 0 99 -60 -1 -138 52 1 120 -32 0 -73 32 0 72 22 blend + vstemhm + hintmask 00011000000000000000000100000000 + 193 296 41 0 93 -8 0 -19 2 blend + rmoveto + 625 -94 -625 -84 -1 -192 27 0 63 84 1 192 3 blend + hlineto + -30 124 -48 0 -110 -6 0 -14 2 blend + rmoveto + -154 685 154 -15 0 -34 16 0 38 15 0 34 3 blend + vlineto + hintmask 00100000000000000000100000000000 + -365 -132 -33 0 -76 1 1 3 2 blend + rmoveto + -232 -7 -1 -16 1 blend + vlineto + 30 -5 51 0 117 -11 0 -27 2 blend + rlineto + 237 18 1 43 1 blend + vlineto + hintmask 01000000000010010000010000000000 + -11 -92 -27 0 -62 1 -1 2 2 blend + rmoveto + -30 397 30 -22 0 -52 -12 0 -27 22 0 52 3 blend + vlineto + -760 647 25 0 56 -4 0 -9 2 blend + rmoveto + -30 811 30 -28 0 -65 -12 0 -27 28 0 65 3 blend + vlineto + hintmask 00000000000010100000000000000000 + -823 -13 0 -29 1 blend + hmoveto + -143 12 0 27 1 blend + vlineto + -83 -13 -107 -75 -82 4 0 9 3 0 6 5 1 12 -1 0 -1 5 -1 11 5 blend + vhcurveto + 7 -4 11 -9 5 -6 10 0 21 -5 0 -12 20 0 46 -17 0 -38 6 0 15 -8 0 -18 6 blend + rrcurveto + 79 5 0 11 1 blend + 85 16 118 88 1 1 3 9 0 19 6 0 15 3 blend + vvcurveto + 143 -11 0 -25 1 blend + vlineto + hintmask 00000000010100001000000000000000 + 199 -25 -46 -1 -106 -23 0 -54 2 blend + rmoveto + -167 vlineto + hintmask 00000000010100000100000000000000 + 30 37 0 85 1 blend + 167 hlineto + hintmask 00000000101000000001000000000000 + -14 -59 -18 0 -42 8 0 18 2 blend + rmoveto + -30 185 30 -12 0 -26 -4 0 -9 12 0 26 3 blend + vlineto + -365 -96 10 0 22 7 0 17 2 blend + rmoveto + -30 392 30 -17 0 -39 -4 0 -9 17 0 39 3 blend + vlineto + hintmask 00000011000000000100000000000000 + -218 -10 -15 0 -33 -6 0 -13 2 blend + rmoveto + -160 23 0 51 1 blend + vlineto + -8 -2 0 0 -1 1 blend + -3 -11 -1 1 0 3 0 0 1 2 blend + vhcurveto + -11 -1 -30 2 0 4 1 0 1 4 0 10 3 blend + 0 -47 13 0 30 1 blend + 1 5 -9 6 -10 2 -9 4 0 8 -6 0 -13 6 0 13 -11 0 -25 2 0 6 -8 0 -19 6 blend + rrcurveto + hintmask 00000011000001000010001000000000 + 50 30 -5 0 -11 1 0 2 2 blend + 0 6 17 3 0 8 5 1 12 2 blend + hvcurveto + 17 5 4 9 21 6 -1 12 4 0 9 1 0 3 4 0 8 11 0 25 5 blend + vvcurveto + 159 -21 0 -46 1 blend + vlineto + -132 -50 -39 0 -88 1 0 1 2 blend + rmoveto + -25 -42 -40 -39 -44 -30 8 -4 13 -10 5 -4 41 6 0 12 3 0 8 7 0 16 3 0 5 5 0 13 1 0 4 6 0 13 -3 0 -8 10 0 22 -6 0 -14 5 0 12 -5 0 -10 -3 0 -8 13 blend + 30 45 -7 0 -14 1 blend + 47 26 45 -3 0 -8 1 0 1 2 blend + rrcurveto + 153 -7 -13 0 -30 -1 0 -2 2 blend + rmoveto + 35 -27 38 -39 18 -28 -8 3 -11 3 -5 -3 -9 3 -14 6 -7 -3 -5 1 -9 4 -4 0 6 blend + rrcurveto + 24 18 -18 27 -39 39 -34 25 23 1 55 6 -1 12 4 -1 8 -3 4 1 9 -3 13 -6 7 2 7 -3 9 -4 5 4 8 blend + rlinecurve + 115 330 -53 -1 -124 9 1 21 2 blend + rmoveto + hintmask 10000101000001000000001010000000 + 14 -286 131 -209 160 0 50 1 18 34 6 108 -9 3 -11 5 -9 7 -4 -92 -9 -34 -31 -1 -137 -2 -126 185 -12 281 3 0 8 6 0 14 5 0 10 -10 0 -22 -3 0 -6 0 0 -1 14 0 33 -1 0 -1 11 0 23 -3 0 -8 5 0 12 10 0 24 -10 0 -23 3 0 7 -14 0 -32 8 0 18 -8 0 -17 8 0 17 0 0 -1 11 0 26 0 0 1 4 0 9 5 0 11 1 0 1 29 0 67 0 1 2 8 0 17 0 -1 -1 -2 0 -4 -37 0 -85 30 blend + rrcurveto + 207 -169 -37 0 -85 -4 0 -9 2 blend + rmoveto + -61 -129 -111 -108 -121 -69 7 -5 12 -11 5 -6 119 74 113 110 66 136 4 15 19 8 14 33 4 28 29 8 5 22 2 28 27 6 2 17 8 1 20 -6 0 -14 14 1 34 -13 -1 -31 6 0 15 -7 0 -17 0 -28 -23 -4 -2 -10 0 -27 -20 -1 -3 -5 -1 -16 -12 -1 -15 -19 18 blend + rrcurveto + -156 153 -20 -2 -49 -2 0 -3 2 blend + rmoveto + 52 -15 63 -26 34 -1 0 -3 -1 0 -1 0 0 1 0 0 -2 0 0 -2 5 blend + -21 rrcurveto + 15 27 -34 20 -64 24 -51 14 21 0 48 20 0 47 -1 0 -1 1 0 1 0 0 -1 0 0 1 1 0 3 -1 0 -2 8 blend + rlinecurve + -453 -763 1 0 2 12 0 27 2 blend + rmoveto + -25 -16 -31 0 -71 -7 0 -17 2 blend + rlineto + -100 89 146 -18 233 -21 0 -46 -5 0 -12 -13 0 -29 -4 0 -9 -8 0 -18 5 blend + hhcurveto + 249 23 0 53 1 blend + hlineto + 2 8 6 14 6 8 -35 0 -207 2 -1 3 11 0 25 5 1 12 17 0 38 4 0 10 8 0 18 -16 0 -37 -1 0 -3 -1 0 -2 9 blend + 0 -22 -14 0 -32 1 blend + 0 -214 0 -150 15 -78 89 24 0 55 0 0 1 18 0 40 -2 0 -5 12 0 28 -1 0 -2 6 blend + rrcurveto + 5 62 -50 0 -114 -10 0 -22 2 blend + rmoveto + -30 -97 -92 -60 -107 -36 8 -6 12 -11 4 -6 105 41 99 65 32 106 5 0 12 7 0 15 15 0 34 1 0 3 7 0 16 1 0 2 10 0 22 -6 0 -15 18 0 41 -17 0 -37 8 0 18 -8 0 -19 -2 0 -5 4 0 9 -12 0 -27 7 0 16 -1 0 -2 6 0 14 18 blend + rrcurveto + </CharString> + <CharString name="cid07253" fdSelectIndex="1"> + 1 vsindex + -80 27 95 49 -48 48 -45 45 -30 30 -16 16 -13 13 49 30 48 30 47 19 -19 30 53 30 -18 18 51 11 -11 30 -22 22 62 30 60 30 15 81 -30 30 -30 102 -10 1 -14 41 -2 59 -53 2 -76 27 -1 38 -26 1 -37 26 -1 37 -27 1 -39 27 -1 39 -27 1 -39 27 -1 39 -13 0 -19 13 0 19 -14 0 -20 14 0 20 -19 1 -27 13 -1 19 -18 1 -26 13 0 19 -18 0 -26 18 0 26 -18 0 -26 23 -1 33 -21 1 -30 42 -2 60 -29 1 -42 29 -1 42 -19 1 -27 7 0 10 -7 0 -10 26 -1 37 -24 1 -34 24 -1 34 -27 1 -39 24 -1 34 -26 1 -37 26 -1 37 -40 1 -45 53 -2 66 -44 2 -62 44 -2 62 -44 2 -62 18 0 23 42 blend + hstemhm + 193 30 -1 30 -15 15 106 29 96 30 142 30 109 30 5 10 -28 1 -40 71 -2 102 -56 2 -80 75 -4 106 -21 2 -29 21 -2 29 -104 5 -148 55 -3 78 -42 3 -59 69 -4 98 -84 4 -120 79 -3 113 -94 3 -135 76 -3 109 -51 2 -73 25 -1 36 16 blend + vstemhm + hintmask 10000011101100101101000101110000 + 55 767 2 0 3 37 -2 55 2 blend + rmoveto + -30 892 30 -44 2 -62 -6 0 -9 44 -2 62 3 blend + vlineto + hintmask 00000000000000000000100000000000 + -637 72 -28 1 -40 -26 2 -39 2 blend + rmoveto + hintmask 00000000000000000010000000000000 + -153 30 -27 0 -27 77 -2 111 2 blend + vlineto + hintmask 00000000000000000000100000100000 + 153 27 0 27 1 blend + vlineto + 315 -89 3 -128 1 blend + hmoveto + hintmask 00000000000000000010000000100000 + -153 30 -27 0 -27 79 -3 113 2 blend + vlineto + hintmask 00000000000100101100110000110000 + 153 27 0 27 1 blend + vlineto + -462 -288 8 0 12 -11 0 -16 2 blend + rmoveto + 571 -62 -571 -102 3 -147 27 -1 39 102 -3 147 3 blend + hlineto + 152 -29 1 -42 1 blend + vmoveto + 571 -60 -571 -102 3 -147 26 -1 37 102 -3 147 3 blend + hlineto + -30 -71 2 -102 1 blend + 90 rmoveto + -212 631 212 -23 1 -32 45 -2 64 23 -1 32 3 blend + vlineto + -776 -263 -22 1 -31 -4 0 -5 2 blend + rmoveto + -30 905 30 -42 2 -60 10 0 14 42 -2 60 3 blend + vlineto + hintmask 00000001100000000000000100000000 + -716 -160 36 -1 52 -26 2 -37 2 blend + rmoveto + -30 554 30 -13 0 -19 -59 2 -85 13 0 19 3 blend + vlineto + -554 -78 59 -2 85 5 -1 7 2 blend + rmoveto + -30 563 30 -13 1 -19 -56 1 -81 13 -1 19 3 blend + vlineto + hintmask 00000010000000000000001000000000 + -578 -79 2 1 4 6 0 8 2 blend + rmoveto + hintmask 00001000000000000000001000001000 + -30 617 -27 1 -39 4 -1 5 2 blend + vlineto + hintmask 00000010000001000000000000001000 + 30 27 -1 39 1 blend + vlineto + -477 382 -24 2 -34 8 0 12 2 blend + rmoveto + -46 -92 -113 -104 -167 -65 7 -5 10 -9 5 -8 6 -1 8 -5 -1 -8 17 0 25 11 0 16 -3 -1 -5 6 0 9 12 0 18 -11 0 -16 18 0 26 -27 1 -39 6 -1 8 -16 1 -23 12 blend + rrcurveto + hintmask 00000100010010010000000001000000 + 172 70 111 106 55 101 14 0 20 3 0 5 -6 0 -8 1 0 1 3 0 4 28 -1 41 6 blend + rrcurveto + 298 -65 -24 0 -35 3 0 4 2 blend + rmoveto + -25 -12 -55 2 -79 -15 0 -22 2 blend + rlineto + 62 -80 121 -81 100 -38 5 8 9 11 7 6 -101 33 -119 76 -59 77 2 0 3 -14 1 -20 -10 1 -14 2 0 3 20 0 29 1 0 2 9 -1 13 18 -1 25 20 -1 28 26 -1 38 14 0 21 14 -1 19 -13 0 -19 -7 0 -10 9 0 13 -18 2 -25 4 -1 5 -7 0 -10 18 blend + rrcurveto + -211 -88 -39 3 -55 -12 1 -17 2 blend + rmoveto + -239 30 239 -2 -1 -4 69 -4 98 2 1 4 3 blend + vlineto + hintmask 10000010000000000000000000001000 + 316 -223 -74 3 -106 11 -1 15 2 blend + rmoveto + -6 -4 0 -6 1 blend + vlineto + -8 -87 -7 -34 -10 -10 2 0 3 24 -1 35 -1 1 -1 6 0 9 1 -1 1 1 0 1 6 blend + rrcurveto + -6 -1 0 -1 1 blend + -6 -6 -1 -12 2 0 3 1 blend + hhcurveto + -11 -31 1 0 1 10 0 15 2 blend + 1 3 -34 0 -1 -1 9 0 13 2 blend + hvcurveto + 5 -8 3 -13 6 -1 8 -11 1 -16 5 0 8 -19 1 -26 4 blend + 1 -8 28 -2 30 -1 14 1 -14 1 -20 7 -1 9 1 0 1 2 0 3 2 -1 2 3 1 5 0 1 1 7 blend + 21 0 10 4 10 9 16 15 7 35 2 -1 2 8 -1 11 2 0 3 5 0 7 5 0 8 3 -1 4 3 0 4 2 1 4 3 0 4 9 blend + 9 89 -15 1 -21 1 blend + rrcurveto + 7 1 1 12 6 -1 8 1 0 1 1 -1 1 9 0 13 4 blend + 0 hhcurveto + -660 -34 -57 3 -82 -8 0 -11 2 blend + rmoveto + -17 -46 1 0 2 7 0 10 2 blend + -32 -46 -46 5 0 7 5 0 7 2 blend + -23 20 -21 56 -2 81 -24 0 -35 2 blend + rcurveline + hintmask 10010000000000000000000000000000 + 52 28 31 51 17 46 -4 -1 -7 0 1 1 -4 1 -5 -7 0 -10 1 -1 1 0 0 -1 6 blend + rrcurveto + hintmask 00100000000000000000000010000000 + 110 -3 -67 3 -96 1 0 2 2 blend + rmoveto + 13 -38 10 -49 0 -32 -3 0 -4 4 -1 5 -2 0 -3 2 1 4 -1 1 -1 3 0 4 6 blend + rrcurveto + 29 6 55 -3 78 8 -1 11 2 blend + -1 31 -10 50 -15 37 -3 0 -4 0 1 1 -4 0 -6 3 -1 4 -4 1 -5 5 blend + rlinecurve + hintmask 01000000000000000000000000100000 + 113 -6 -56 3 -80 -7 0 -10 2 blend + rmoveto + 22 -32 20 -44 7 -30 2 0 3 1 -1 1 3 -1 3 1 0 1 2 0 3 5 blend + rrcurveto + 28 10 -8 29 -21 44 -23 32 48 -2 69 15 0 22 -2 1 -2 -1 0 -2 0 -1 -1 -5 1 -6 -1 1 -1 -4 0 -6 8 blend + rlinecurve + hintmask 00010000001000000000001000000000 + 117 -5 -45 1 -65 -17 1 -24 2 blend + rmoveto + 25 -23 -1 0 -1 2 -1 2 2 blend + 27 -32 13 -23 -2 1 -2 1 0 2 2 blend + rrcurveto + 21 14 -12 44 -2 63 20 -1 28 0 0 -1 3 blend + 22 -27 32 -26 22 -2 0 -2 -2 0 -3 1 0 1 -2 1 -2 4 blend + rlinecurve + -381 267 39 -1 56 7 -1 10 2 blend + rmoveto + -16 -30 -33 1 -47 -23 1 -33 2 blend + rlineto + 498 30 -42 1 -61 23 -1 33 2 blend + hlineto + -516 -23 21 0 31 -14 0 -21 2 blend + rmoveto + hintmask 00000010000000000000001000000000 + -224 6 0 9 1 blend + vlineto + hintmask 00000010001000000000000100000000 + 30 247 75 -4 106 10 0 14 2 blend + hlineto + </CharString> + <CharString name="cid13393" fdSelectIndex="1"> + 4 vsindex + -50 30 -19 19 114 30 44 30 23 30 -30 114 35 30 316 30 -10 10 37 12 -21 0 -26 66 0 82 -29 21 -10 29 -21 10 -64 0 -80 55 0 69 -79 0 -99 75 0 94 -46 0 -58 56 0 71 -56 0 -71 26 21 59 -18 -25 -54 54 0 68 -76 8 -85 58 0 73 -24 0 -31 24 0 31 -46 -4 -63 30 0 37 20 blend + hstemhm + 82 30 197 30 -26 8 317 30 168 13 -13 0 -16 77 0 96 -109 -1 -136 78 0 97 -77 0 -96 29 0 36 -10 0 -12 84 0 105 -86 0 -108 21 0 27 10 blend + vstemhm + hintmask 1010101101110110 + 529 746 23 0 29 30 4 43 2 blend + rmoveto + -30 320 30 -58 0 -73 -29 0 -36 58 0 73 3 blend + vlineto + -397 -495 15 0 18 12 -4 10 2 blend + rmoveto + -30 442 30 -56 0 -71 21 0 27 56 0 71 3 blend + vlineto + -420 149 -6 0 -8 6 -4 2 2 blend + rmoveto + -30 374 30 -54 0 -68 -25 0 -31 54 0 68 3 blend + vlineto + -514 -420 34 0 42 -3 4 1 2 blend + rmoveto + -30 626 30 -66 0 -82 -29 0 -36 66 0 82 3 blend + vlineto + -531 144 15 0 19 -9 0 -11 2 blend + rmoveto + -30 460 30 -55 0 -69 -4 0 -5 55 0 69 3 blend + vlineto + -53 622 -42 0 -53 -6 4 -2 2 blend + rmoveto + -7 -9 0 -12 1 blend + vlineto + -86 -171 -222 -118 -188 -45 7 -7 8 -11 3 -8 14 0 18 37 0 46 27 0 34 19 0 24 -7 0 -9 5 0 7 15 0 18 -16 0 -20 17 0 22 -32 0 -40 9 0 11 -19 0 -24 12 blend + rrcurveto + hintmask 0000000010000010 + 192 51 224 119 94 187 21 0 26 3 0 3 -17 0 -21 -9 0 -11 2 0 2 -3 0 -4 6 blend + rrcurveto + hintmask 0100010100000110 + -19 12 -6 -2 -55 0 -68 27 0 34 -12 0 -15 -3 0 -3 4 blend + rlineto + -323 -32 55 0 69 -25 0 -32 2 blend + rmoveto + -25 -11 -68 0 -86 -23 0 -28 2 blend + rlineto + 83 -154 177 -116 201 -44 4 8 9 12 7 6 -200 39 -177 113 -79 147 11 0 14 12 0 15 -18 0 -22 21 0 26 -1 0 -1 4 0 5 11 0 13 21 0 26 21 0 27 32 0 40 17 0 21 16 0 20 9 0 11 -10 0 -12 17 0 21 -36 0 -45 1 0 2 -37 0 -47 18 blend + rrcurveto + 59 127 -46 0 -58 9 -4 6 2 blend + rmoveto + -40 -82 -80 -104 -112 -75 8 -4 10 -9 6 -7 115 80 2 0 2 8 0 10 7 0 9 23 0 29 2 0 3 16 0 20 16 0 20 -12 0 -15 26 0 32 -30 0 -37 10 0 13 -18 0 -23 8 0 10 -4 0 -5 14 blend + 80 106 47 90 -13 0 -16 11 0 13 14 0 17 3 blend + rrcurveto + -129 -493 -106 -5 -137 21 6 34 2 blend + rmoveto + -27 -73 -43 -71 -51 -50 8 -5 13 -9 5 -5 49 52 47 77 29 77 6 0 8 11 0 14 7 0 8 8 0 10 5 0 7 8 0 10 16 0 20 -8 0 -10 28 0 35 -17 -1 -22 15 0 18 -11 0 -14 -3 0 -4 -4 0 -5 -2 0 -2 -1 0 -1 -3 0 -4 -3 1 -3 18 blend + rrcurveto + 124 -1 -66 4 -77 10 15 31 2 blend + rmoveto + -374 30 374 4 0 5 84 0 105 -4 0 -5 3 blend + vlineto + hintmask 0000000000101000 + -586 460 -72 0 -90 2 -21 -24 2 blend + rmoveto + -875 30 845 209 30 -27 0 -33 77 0 96 -53 0 -66 -79 0 -99 80 0 99 5 blend + vlineto + -8 -29 0 -36 1 blend + hmoveto + -7 -29 0 -36 1 blend + vlineto + -28 -75 -43 -102 -46 -95 14 0 17 10 0 13 11 0 14 -41 0 -51 17 0 22 4 0 5 6 blend + rrcurveto + hintmask 0001000000010000 + 89 -91 24 -74 -63 -32 0 -40 23 0 28 -11 0 -14 10 0 13 17 0 21 5 blend + vvcurveto + -33 -6 -35 -19 -13 3 0 4 1 0 1 15 0 18 7 0 9 4 0 5 5 blend + vhcurveto + -10 -6 -12 3 0 3 0 0 1 1 0 2 3 blend + -3 -14 -1 -20 -2 -26 1 -29 4 0 5 1 0 1 7 0 9 2 0 2 13 0 16 -1 0 -1 11 0 14 7 blend + 2 7 -9 4 -13 11 0 13 -21 0 -26 5 0 6 -33 0 -41 4 blend + 1 -8 22 -2 27 0 22 -21 0 -27 1 0 2 1 0 1 -3 0 -4 0 0 1 -4 0 -5 6 blend + 2 19 2 17 5 12 9 3 0 4 2 0 2 3 0 3 2 0 2 4 0 5 3 0 4 6 blend + rrcurveto + 25 17 10 7 0 9 5 0 7 4 0 5 3 blend + 43 44 22 0 27 1 blend + vvcurveto + 67 -22 76 -86 89 -8 0 -10 9 0 12 -6 0 -8 24 0 30 -11 0 -13 5 blend + vhcurveto + hintmask 0000000001001000 + 39 84 42 98 33 81 -10 0 -13 -4 0 -5 -8 0 -10 14 0 17 -6 0 -8 7 0 9 6 blend + rrcurveto + hintmask 0000000000001000 + -20 14 -6 -2 -60 0 -75 32 0 40 -12 0 -14 -2 0 -3 4 blend + rlineto + </CharString> + <CharString name="cid17290" fdSelectIndex="1"> + 5 vsindex + 121 30 -22 22 148 30 -30 136 23 30 129 30 116 30 -21 4 -29 52 3 92 -32 23 -21 32 -23 21 -54 9 -83 50 4 90 -50 -4 -90 22 27 62 -2 -43 -47 41 0 69 -44 0 -74 37 0 62 -50 0 -84 36 0 61 14 blend + hstemhm + 167 30 129 30 -16 16 123 30 48 30 -6 29 -29 111 -30 30 -16 16 201 30 1 29 -29 0 -49 64 0 108 -34 0 -57 51 0 85 -29 0 -48 29 0 48 -72 -2 -123 60 2 103 -69 0 -115 46 0 77 -42 0 -70 42 0 70 -42 0 -70 67 0 111 -51 0 -85 51 0 85 -29 0 -48 29 0 48 -79 0 -132 47 0 79 -45 0 -75 42 0 70 22 blend + vstemhm + hintmask 011011111011001010000000 + 326 793 1 0 2 17 0 29 2 blend + rmoveto + -280 24 0 40 1 blend + vlineto + -47 16 -8 59 -31 0 -53 6 0 10 -13 0 -21 20 0 33 4 blend + vhcurveto + hintmask 000010000000100000000000 + 13 120 4 0 6 -46 0 -76 2 blend + 0 13 4 0 7 1 blend + hhcurveto + 49 10 20 82 4 12 0 19 12 0 20 3 0 5 2 0 3 4 0 8 5 blend + hvcurveto + hintmask 101010101000010000000000 + -10 2 -11 5 -8 6 -12 0 -21 3 0 5 -21 0 -35 6 0 11 -9 0 -14 7 0 11 6 blend + rrcurveto + -75 19 0 32 1 blend + -3 -5 -10 -29 -24 -102 1 0 1 1 0 2 7 0 12 9 0 14 42 0 70 5 blend + 0 -18 6 0 10 1 blend + hhcurveto + -38 -6 4 21 10 0 18 2 0 3 0 0 -1 4 0 7 4 blend + hvcurveto + 280 -25 0 -41 1 blend + vlineto + -41 -464 -40 -8 -74 10 20 41 2 blend + rmoveto + -30 617 30 -50 -4 -90 -5 12 5 50 4 90 3 blend + vlineto + -661 -178 11 -4 12 4 -13 -7 2 blend + rmoveto + -30 689 30 -52 -3 -92 -11 0 -18 52 3 92 3 blend + vlineto + hintmask 010101100111001000000000 + -481 284 -27 -2 -48 -32 36 -21 2 blend + rmoveto + -306 30 306 0 -13 0 60 2 103 0 13 0 3 blend + vlineto + 218 0 -61 0 -102 -1 0 -1 2 blend + rmoveto + -306 30 306 0 -13 0 61 1 104 0 13 0 3 blend + vlineto + -417 358 -17 -1 -30 19 -43 -12 2 blend + rmoveto + -30 217 -116 -217 -30 247 176 -36 0 -61 -52 0 -87 50 0 84 52 0 87 -37 0 -62 -6 0 -10 23 0 39 7 blend + vlineto + 75 -26 0 -44 1 blend + hmoveto + hintmask 000010100000001001000000 + -280 24 0 40 1 blend + vlineto + -47 17 -8 60 -31 0 -53 5 0 9 -13 0 -21 20 0 33 4 blend + vhcurveto + 12 125 5 0 8 -47 0 -78 2 blend + 0 14 4 0 7 1 blend + hhcurveto + 49 11 20 82 3 12 0 20 12 0 19 3 1 6 2 1 6 5 0 9 5 blend + hvcurveto + -9 2 -12 4 -8 7 -14 1 -22 3 0 5 -19 -1 -34 7 0 12 -9 0 -14 6 0 10 6 blend + rrcurveto + -75 19 -1 29 1 blend + -3 -5 -10 -30 -25 -105 1 -1 1 8 0 13 8 0 14 42 0 70 4 blend + 0 -18 6 0 9 1 blend + hhcurveto + -40 -6 4 21 11 0 19 2 0 3 0 0 -1 4 1 8 4 blend + hvcurveto + 280 -25 -1 -42 1 blend + vlineto + hintmask 000001110000000110000000 + -16 -29 0 -48 1 blend + hmoveto + -30 217 -116 -217 -30 247 176 -36 0 -61 -50 0 -84 50 0 84 50 0 84 -37 0 -62 -3 0 -5 23 0 39 7 blend + vlineto + -424 -714 -19 0 -32 -12 0 -21 2 blend + rmoveto + -52 -54 -91 -49 -81 -33 8 -5 11 -13 4 -6 80 36 94 56 56 58 7 0 11 9 0 15 5 0 9 11 0 18 -2 0 -3 9 0 15 13 0 22 -11 0 -18 24 0 39 -22 0 -36 11 0 19 -12 0 -21 4 0 7 -4 0 -6 2 0 2 -2 0 -4 -1 0 -1 3 0 5 18 blend + rrcurveto + 200 -7 -92 0 -154 -5 0 -8 2 blend + rmoveto + 76 -41 90 -62 46 -42 -6 0 -10 5 0 8 -5 0 -7 6 0 10 -4 0 -7 4 0 7 6 blend + rrcurveto + 22 23 -46 42 -91 60 -75 39 60 0 100 29 0 48 0 0 -1 -3 0 -5 3 0 5 -7 0 -11 6 0 11 -7 0 -11 8 blend + rlinecurve + -499 750 -48 0 -81 6 0 10 2 blend + rmoveto + -54 -167 -87 -164 -96 -108 7 -6 11 -12 4 -6 98 116 88 165 58 175 7 0 13 15 0 25 10 0 16 14 0 22 11 0 19 10 0 17 9 0 15 -20 0 -33 15 0 24 -44 0 -73 4 0 7 -18 0 -30 4 0 6 4 0 6 3 0 6 19 0 32 0 0 -1 1 0 1 18 blend + rrcurveto + -113 -214 -60 0 -100 -23 0 -37 2 blend + rmoveto + -691 30 718 20 0 33 64 0 108 43 0 72 3 blend + vlineto + -1 -1 0 -3 1 blend + 2 rlineto + </CharString> + <CharString name="cid17852" fdSelectIndex="1"> + 5 vsindex + -67 29 219 30 154 30 -16 16 150 30 -30 122 -85 30 -18 18 87 30 -30 140 -122 12 -14 0 -22 46 0 78 -59 -3 -106 46 0 77 -53 -9 -92 46 2 81 -18 20 -1 18 -20 1 -54 13 -80 46 2 81 -46 -2 -81 25 31 61 -14 -34 -48 60 0 100 -64 0 -107 64 0 107 -55 0 -92 54 0 90 -54 0 -90 36 0 59 -19 0 -31 37 0 62 22 blend + hstemhm + 51 188 -30 30 -30 149 21 30 -18 18 -13 13 66 30 -12 12 135 30 41 30 172 30 -6 28 -8 0 -14 30 0 50 -62 0 -103 62 0 103 -62 0 -103 32 0 53 -5 0 -7 59 0 98 -24 0 -41 24 0 41 -16 0 -27 16 0 27 -32 0 -53 53 0 88 -33 0 -56 33 0 56 -87 0 -146 63 0 106 -42 0 -70 54 0 90 -99 0 -165 55 0 91 -42 0 -70 45 0 75 24 blend + vstemhm + hintmask 000000100001000000000000 + 51 612 -8 0 -14 29 0 49 2 blend + rmoveto + -30 -60 0 -100 1 blend + vlineto + hintmask 000000100000010000000000 + 307 30 60 0 100 1 blend + hlineto + hintmask 000000010010100100000000 + -149 228 -32 0 -53 -20 0 -34 2 blend + rmoveto + -918 30 918 -19 0 -32 62 0 103 19 0 32 3 blend + vlineto + -36 -238 -55 0 -91 -32 0 -53 2 blend + rmoveto + -31 -160 -74 -193 -68 -95 7 -5 10 -11 6 -8 70 101 74 203 33 160 6 0 10 25 0 42 13 0 21 23 0 37 4 0 7 1 0 2 8 0 14 -18 0 -30 13 0 21 -27 0 -44 4 0 7 -19 0 -32 1 0 2 6 0 10 -12 0 -20 -2 0 -3 -2 0 -4 -1 0 -2 18 blend + rrcurveto + 4 -143 19 0 32 77 0 128 2 blend + rmoveto + -21 -16 25 -26 72 -92 21 -33 -23 0 -38 -34 0 -57 1 0 2 -15 0 -24 -12 0 -21 -6 0 -11 2 0 3 -18 0 -29 8 blend + rlinecurve + 24 24 -18 25 -81 96 -22 22 28 0 48 63 0 105 2 0 2 -1 0 -2 1 0 3 10 0 16 1 0 1 1 0 2 8 blend + rlinecurve + 157 278 1 0 1 -14 0 -23 2 blend + rmoveto + hintmask 000000001000000100000000 + -30 559 -54 0 -90 -17 3 -23 2 blend + vlineto + hintmask 010000000010000000100000 + 30 54 0 90 1 blend + vlineto + -457 -518 29 -3 43 -9 -3 -20 2 blend + rmoveto + -30 176 30 -46 0 -77 -17 0 -27 46 0 77 3 blend + vlineto + hintmask 000000000100000001010000 + -194 120 -3 0 -5 -42 37 -35 2 blend + rmoveto + -365 30 365 38 -29 45 53 0 88 -38 29 -45 3 blend + vlineto + 135 508 -87 0 -146 33 -34 24 2 blend + rmoveto + hintmask 000000000010000000010000 + -122 30 -19 0 -31 63 0 106 2 blend + vlineto + hintmask 000101000100000000010000 + 122 19 0 31 1 blend + vlineto + -115 -172 -60 0 -100 -27 34 -19 2 blend + rmoveto + -288 30 288 11 -24 18 50 0 83 -11 24 -18 3 blend + vlineto + 148 -62 -2 -106 1 blend + hmoveto + -288 30 288 11 -24 18 50 0 83 -11 24 -18 3 blend + vlineto + 156 -394 -30 2 -47 19 -34 6 2 blend + rmoveto + -52 -36 -89 -48 -61 -29 7 0 12 2 0 4 14 0 23 3 0 4 11 0 18 4 0 8 6 blend + rrcurveto + 15 -21 62 28 86 41 57 44 25 0 42 -39 0 -66 -10 0 -17 -4 0 -6 -12 0 -19 -3 0 -5 -6 0 -11 -5 0 -9 8 blend + rlinecurve + hintmask 101010000000000010001100 + -541 323 10 0 17 44 5 84 2 blend + rmoveto + -30 517 -150 -517 -30 547 210 -46 -2 -81 -74 0 -123 54 -13 80 74 0 123 -46 -2 -81 -19 0 -32 38 17 82 7 blend + vlineto + -232 -242 -10 0 -16 -28 29 -27 2 blend + rmoveto + -344 58 -32 71 1 blend + vlineto + -47 15 -9 54 -33 -2 -58 3 0 4 -15 0 -25 22 0 37 4 blend + vhcurveto + hintmask 100000000010001000001010 + 12 100 3 0 5 -47 0 -78 2 blend + 0 12 4 0 6 1 blend + hhcurveto + 48 10 25 102 3 12 0 20 11 0 19 4 1 9 11 -1 16 5 0 8 5 blend + hvcurveto + -9 3 -11 4 -8 6 -14 0 -23 3 -1 5 -23 1 -37 8 1 15 -8 -1 -15 8 0 12 6 blend + rrcurveto + -97 11 1 20 1 blend + -3 -4 -14 -29 -21 -84 0 0 1 1 -1 1 10 0 16 10 1 17 43 -1 71 5 blend + 0 -16 7 0 12 1 blend + hhcurveto + -33 -6 5 22 13 0 22 3 0 5 -1 0 -2 4 0 7 4 blend + hvcurveto + 344 -59 34 -71 1 blend + vlineto + -346 -371 -24 0 -41 65 -34 78 2 blend + rmoveto + 10 -31 77 16 100 22 99 21 3 0 5 -54 0 -90 -2 0 -3 -3 0 -5 -9 0 -15 -6 0 -10 -10 0 -17 -5 0 -8 8 blend + rlinecurve + -2 29 -108 -22 -104 -22 -72 -13 -3 0 -5 52 0 86 9 0 16 6 0 10 8 0 13 6 0 11 4 0 6 4 0 6 8 blend + rlinecurve + -16 767 -44 0 -72 -13 0 -21 2 blend + rmoveto + -316 -6 0 -11 1 blend + vlineto + -142 -7 -194 -74 -141 2 0 2 -2 0 -2 2 0 4 6 0 9 4 blend + vhcurveto + 8 -3 13 -7 5 -6 13 0 21 -7 0 -11 25 0 43 -20 0 -34 11 0 17 -10 0 -17 6 blend + rrcurveto + 75 143 10 205 145 4 0 7 3 0 5 2 0 4 21 0 35 9 0 15 5 blend + vvcurveto + 316 6 0 11 1 blend + vlineto + </CharString> + <CharString name="cid18480" fdSelectIndex="1"> + 3 vsindex + -71 30 427 30 153 30 33 111 -30 30 -30 126 -6 0 -13 45 0 102 -58 0 -132 38 0 87 -48 0 -111 38 0 87 -4 -2 -13 21 2 53 -43 0 -99 43 0 99 -43 0 -99 24 0 55 12 blend + hstemhm + 159 30 -19 19 126 30 -6 30 281 30 160 30 18 31 -7 0 -16 50 0 114 -18 0 -42 18 0 42 -71 0 -161 50 0 114 -26 0 -61 48 0 111 -66 0 -150 51 0 115 -68 0 -154 50 0 114 -36 -1 -84 44 1 101 14 blend + vstemhm + hintmask 1110100101110000 + 58 743 -1 0 -2 26 0 60 2 blend + rmoveto + -30 887 30 -43 0 -99 2 0 5 43 0 99 3 blend + vlineto + hintmask 0000010010000000 + -630 96 -29 0 -66 -19 0 -44 2 blend + rmoveto + hintmask 0001000010000000 + -207 30 -2 -2 -9 50 0 114 2 blend + vlineto + hintmask 0000010010100000 + 207 2 2 9 1 blend + vlineto + 305 -44 0 -100 1 blend + hmoveto + hintmask 0001000000100000 + -207 30 -2 -2 -9 51 0 115 2 blend + vlineto + hintmask 0010011000100000 + 207 2 2 9 1 blend + vlineto + -521 -240 -36 0 -82 2 0 4 2 blend + rmoveto + -206 -5 0 -10 1 blend + vlineto + -137 -15 -184 -109 -136 5 0 11 3 0 6 5 0 10 -1 0 -1 8 0 19 5 blend + vhcurveto + 7 -3 12 -9 5 -6 12 0 27 -6 0 -13 22 0 51 -15 0 -35 10 0 21 -8 0 -19 6 blend + rrcurveto + hintmask 1110000101010000 + 112 139 18 194 141 3 0 7 -4 0 -8 1 0 3 11 0 24 4 0 10 5 blend + vvcurveto + 207 5 0 11 1 blend + vlineto + -19 -18 0 -42 1 blend + hmoveto + -30 670 -153 -670 -30 700 213 -38 0 -87 -64 0 -144 48 0 111 64 0 144 -38 0 -87 -14 0 -30 28 0 63 7 blend + vlineto + -531 -249 -15 0 -36 -23 0 -51 2 blend + rmoveto + -343 50 0 112 1 blend + vlineto + -66 31 -12 105 -29 0 -66 6 0 14 -13 0 -28 29 0 66 4 blend + vhcurveto + 23 278 5 0 12 -59 0 -134 2 blend + 0 24 6 0 14 1 blend + hhcurveto + hintmask 1000000001001000 + 96 15 31 123 8 20 0 44 11 0 26 4 0 8 14 0 32 5 0 11 5 blend + hvcurveto + -9 3 -13 4 -9 7 -13 0 -30 2 0 5 -21 0 -48 8 0 17 -10 -1 -23 6 0 15 6 blend + rrcurveto + -117 -6 -11 -21 -69 -56 -236 8 0 18 -1 1 -1 1 -1 1 3 0 7 3 1 9 7 0 15 49 0 112 7 blend + 0 -41 4 0 8 1 blend + hhcurveto + -84 -16 11 37 4 0 10 2 0 5 -3 0 -7 1 0 2 4 blend + hvcurveto + 343 -51 0 -115 1 blend + vlineto + 444 -47 -59 0 -135 26 0 59 2 blend + rmoveto + -101 -52 -195 -56 -169 -40 4 -7 5 -10 3 -7 172 40 193 54 120 56 4 0 8 3 0 7 18 0 43 9 0 19 12 0 26 8 0 19 5 0 12 -10 0 -22 7 0 15 -18 0 -41 1 0 3 -11 0 -25 -8 0 -19 -9 0 -21 -8 0 -18 -8 0 -19 5 0 11 0 0 1 18 blend + rrcurveto + </CharString> + <CharString name="cid22370" fdSelectIndex="1"> + 2 vsindex + 64 30 77 30 76 30 74 30 72 30 109 30 25 84 -30 30 -30 108 -2 0 -2 42 0 47 -48 0 -54 38 0 43 -48 0 -54 38 0 43 -46 0 -52 42 0 47 -43 0 -48 56 1 63 -72 -1 -81 57 1 64 -8 -32 -41 30 32 65 -65 -1 -73 65 1 73 -65 -1 -73 43 0 49 18 blend + hstemhm + 135 30 21 30 102 30 14 30 205 30 17 30 113 30 19 30 -19 0 -21 87 2 98 -86 -2 -97 99 1 111 -125 -1 -141 98 1 111 -79 -1 -89 75 1 84 -99 -1 -111 75 1 84 -77 -1 -86 100 1 112 -127 -1 -143 105 1 118 -102 -1 -114 94 1 105 16 blend + vstemhm + hintmask 111111010011001100000000 + 53 761 -3 0 -3 36 0 40 2 blend + rmoveto + -30 896 30 -65 -1 -73 5 0 5 65 1 73 3 blend + vlineto + hintmask 000000001001000000000000 + -631 78 -46 0 -52 -22 0 -24 2 blend + rmoveto + hintmask 000000100001000000000000 + -162 30 -8 -32 -41 98 1 111 2 blend + vlineto + hintmask 000000001001001000000000 + 162 8 32 41 1 blend + vlineto + 296 -105 -1 -118 1 blend + hmoveto + hintmask 000000100000001000000000 + -162 30 -8 -32 -41 100 1 112 2 blend + vlineto + hintmask 000000001000001000000000 + 162 8 32 41 1 blend + vlineto + hintmask 000011000100110010000000 + -47 -217 -23 0 -26 -57 -1 -64 2 blend + rmoveto + 209 -109 -209 -101 -1 -113 72 1 81 101 1 113 3 blend + hlineto + -235 109 24 0 27 -72 -1 -81 2 blend + rmoveto + 205 -109 -205 -99 -1 -111 72 1 81 99 1 111 3 blend + hlineto + -227 109 18 1 21 -72 -1 -81 2 blend + rmoveto + 197 -109 -197 -93 -2 -105 72 1 81 93 2 105 3 blend + hlineto + -30 139 -87 -2 -98 -15 0 -17 2 blend + rmoveto + -169 731 169 -41 0 -46 38 0 42 41 0 46 3 blend + vlineto + hintmask 111100000010000100000000 + -650 -375 62 1 70 -32 0 -36 2 blend + rmoveto + 571 -76 -571 -159 -1 -179 48 0 54 159 1 179 3 blend + hlineto + -30 -38 0 -43 1 blend + vmoveto + 571 -77 -571 -159 -1 -179 48 0 54 159 1 179 3 blend + hlineto + 287 -66 -1 -74 1 blend + vmoveto + 571 -74 -571 -159 -1 -179 46 0 52 159 1 179 3 blend + hlineto + -30 104 -99 -1 -111 -4 0 -5 2 blend + rmoveto + -347 631 347 -18 0 -20 45 0 50 18 0 20 3 blend + vlineto + -216 -389 -86 -1 -96 -31 0 -35 2 blend + rmoveto + 127 -34 121 -39 72 -31 -17 0 -19 2 0 2 -13 0 -15 -2 0 -2 -13 0 -15 3 0 3 6 blend + rrcurveto + 31 22 -78 32 -126 39 -121 136 1 153 39 0 44 1 0 1 -3 0 -3 -8 0 -9 4 0 5 9 0 10 7 blend + 31 rlinecurve + -258 -1 -67 -1 -75 0 0 -1 2 blend + rmoveto + -81 -39 -128 -36 -107 -23 8 -6 12 -12 5 -6 103 25 130 41 86 43 9 0 10 6 0 7 3 0 4 7 0 8 -4 0 -5 7 0 8 19 0 22 -14 0 -16 32 0 36 -32 0 -36 17 0 19 -19 0 -21 3 0 3 -1 0 -1 5 0 6 2 0 2 1 0 1 4 0 5 18 blend + rrcurveto + </CharString> + </CharStrings> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=16 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="1"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.669"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="2"> + <VarRegionAxis index="0"> + <StartCoord value="0.669"/> + <PeakCoord value="0.67"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="3"> + <VarRegionAxis index="0"> + <StartCoord value="0.67"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="4"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.889"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="5"> + <VarRegionAxis index="0"> + <StartCoord value="0.889"/> + <PeakCoord value="0.89"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="6"> + <VarRegionAxis index="0"> + <StartCoord value="0.89"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="7"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.439"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="8"> + <VarRegionAxis index="0"> + <StartCoord value="0.439"/> + <PeakCoord value="0.44"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="9"> + <VarRegionAxis index="0"> + <StartCoord value="0.44"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="10"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.799"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="11"> + <VarRegionAxis index="0"> + <StartCoord value="0.799"/> + <PeakCoord value="0.8"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="12"> + <VarRegionAxis index="0"> + <StartCoord value="0.8"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="13"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="0.599"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="14"> + <VarRegionAxis index="0"> + <StartCoord value="0.599"/> + <PeakCoord value="0.6"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + <Region index="15"> + <VarRegionAxis index="0"> + <StartCoord value="0.6"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=6 --> + <VarData index="0"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=1 --> + <VarRegionIndex index="0" value="0"/> + </VarData> + <VarData index="1"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="1"/> + <VarRegionIndex index="1" value="2"/> + <VarRegionIndex index="2" value="3"/> + </VarData> + <VarData index="2"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="4"/> + <VarRegionIndex index="1" value="5"/> + <VarRegionIndex index="2" value="6"/> + </VarData> + <VarData index="3"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="7"/> + <VarRegionIndex index="1" value="8"/> + <VarRegionIndex index="2" value="9"/> + </VarData> + <VarData index="4"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="10"/> + <VarRegionIndex index="1" value="11"/> + <VarRegionIndex index="2" value="12"/> + </VarData> + <VarData index="5"> + <!-- ItemCount=0 --> + <NumShorts value="0"/> + <!-- VarRegionCount=3 --> + <VarRegionIndex index="0" value="13"/> + <VarRegionIndex index="1" value="14"/> + <VarRegionIndex index="2" value="15"/> + </VarData> + </VarStore> + </CFFFont> + + <GlobalSubrs> + <!-- The 'index' attribute is only for humans; it is ignored when parsed. --> + </GlobalSubrs> + </CFF2> + +</ttFont> diff --git a/Tests/varLib/data/test_results/TestVVAR.ttx b/Tests/varLib/data/test_results/TestVVAR.ttx new file mode 100644 index 00000000..53c038c1 --- /dev/null +++ b/Tests/varLib/data/test_results/TestVVAR.ttx @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ttFont sfntVersion="OTTO" ttLibVersion="3.39"> + + <VVAR> + <Version value="0x00010000"/> + <VarStore Format="1"> + <Format value="1"/> + <VarRegionList> + <!-- RegionAxisCount=1 --> + <!-- RegionCount=1 --> + <Region index="0"> + <VarRegionAxis index="0"> + <StartCoord value="0.0"/> + <PeakCoord value="1.0"/> + <EndCoord value="1.0"/> + </VarRegionAxis> + </Region> + </VarRegionList> + <!-- VarDataCount=1 --> + <VarData index="0"> + <!-- ItemCount=1 --> + <NumShorts value="0"/> + <!-- VarRegionCount=0 --> + <Item index="0" value="[]"/> + </VarData> + </VarStore> + <AdvHeightMap> + <Map glyph=".notdef" outer="0" inner="0"/> + <Map glyph="c30719" outer="0" inner="0"/> + <Map glyph="c30790" outer="0" inner="0"/> + <Map glyph="c30816" outer="0" inner="0"/> + <Map glyph="c30843" outer="0" inner="0"/> + <Map glyph="c31621" outer="0" inner="0"/> + <Map glyph="c32051" outer="0" inner="0"/> + <Map glyph="uni3042" outer="0" inner="0"/> + <Map glyph="uni56FD" outer="0" inner="0"/> + <Map glyph="uni6280" outer="0" inner="0"/> + <Map glyph="uniFF20" outer="0" inner="0"/> + <Map glyph="uniFF21" outer="0" inner="0"/> + <Map glyph="uniFF41" outer="0" inner="0"/> + </AdvHeightMap> + <VOrgMap> + <Map glyph=".notdef" outer="0" inner="0"/> + <Map glyph="c30719" outer="0" inner="0"/> + <Map glyph="c30790" outer="0" inner="0"/> + <Map glyph="c30816" outer="0" inner="0"/> + <Map glyph="c30843" outer="0" inner="0"/> + <Map glyph="c31621" outer="0" inner="0"/> + <Map glyph="c32051" outer="0" inner="0"/> + <Map glyph="uni3042" outer="0" inner="0"/> + <Map glyph="uni56FD" outer="0" inner="0"/> + <Map glyph="uni6280" outer="0" inner="0"/> + <Map glyph="uniFF20" outer="0" inner="0"/> + <Map glyph="uniFF21" outer="0" inner="0"/> + <Map glyph="uniFF41" outer="0" inner="0"/> + </VOrgMap> + </VVAR> + +</ttFont> diff --git a/Tests/varLib/mutator_test.py b/Tests/varLib/mutator_test.py index 8625de3c..d781d59e 100644 --- a/Tests/varLib/mutator_test.py +++ b/Tests/varLib/mutator_test.py @@ -162,13 +162,22 @@ class MutatorTest(unittest.TestCase): self.expect_ttx(instfont, expected_ttx_path, tables) def test_varlib_mutator_CFF2(self): + suffix = '.otf' + ttx_dir = self.get_test_input('master_ttx_varfont_otf') + + self.temp_dir() + ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestCFF2VF') + for path in ttx_paths: + self.compile_font(path, suffix, self.tempdir) + + varfont_name = 'TestCFF2VF' + varfont_path = os.path.join(self.tempdir, varfont_name + suffix) - otf_vf_path = self.get_test_input('TestCFF2VF.otf') expected_ttx_name = 'InterpolateTestCFF2VF' tables = ["hmtx", "CFF2"] loc = {'wght':float(200)} - varfont = TTFont(otf_vf_path) + varfont = TTFont(varfont_path) new_font = make_instance(varfont, loc) expected_ttx_path = self.get_test_output(expected_ttx_name + '.ttx') self.expect_ttx(new_font, expected_ttx_path, tables) diff --git a/Tests/varLib/varLib_test.py b/Tests/varLib/varLib_test.py index 32e7ab5e..f3037339 100644 --- a/Tests/varLib/varLib_test.py +++ b/Tests/varLib/varLib_test.py @@ -229,20 +229,49 @@ class BuildTest(unittest.TestCase): def test_varlib_build_CFF2(self): ds_path = self.get_test_input('TestCFF2.designspace') - suffix = '.otf' - expected_ttx_name = 'BuildTestCFF2' + ttx_dir = self.get_test_input("master_cff2") + expected_ttx_path = self.get_test_output("BuildTestCFF2.ttx") + + self.temp_dir() + for path in self.get_file_list(ttx_dir, '.ttx', 'TestCFF2_'): + self.compile_font(path, ".otf", self.tempdir) + + ds = DesignSpaceDocument.fromfile(ds_path) + for source in ds.sources: + source.path = os.path.join( + self.tempdir, os.path.basename(source.filename).replace(".ufo", ".otf") + ) + ds.updatePaths() + + varfont, _, _ = build(ds) + varfont = reload_font(varfont) + tables = ["fvar", "CFF2"] + self.expect_ttx(varfont, expected_ttx_path, tables) - finder = lambda s: s.replace('.ufo', suffix) - varfont, model, _ = build(ds_path, finder) - # some data (e.g. counts printed in TTX inline comments) is only - # calculated at compile time, so before we can compare the TTX - # dumps we need to save to a temporary stream, and realod the font + + def test_varlib_build_sparse_CFF2(self): + ds_path = self.get_test_input('TestSparseCFF2VF.designspace') + ttx_dir = self.get_test_input("master_sparse_cff2") + expected_ttx_path = self.get_test_output("TestSparseCFF2VF.ttx") + + self.temp_dir() + for path in self.get_file_list(ttx_dir, '.ttx', 'MasterSet_Kanji-'): + self.compile_font(path, ".otf", self.tempdir) + + ds = DesignSpaceDocument.fromfile(ds_path) + for source in ds.sources: + source.path = os.path.join( + self.tempdir, os.path.basename(source.filename).replace(".ufo", ".otf") + ) + ds.updatePaths() + + varfont, _, _ = build(ds) varfont = reload_font(varfont) - expected_ttx_path = self.get_test_output(expected_ttx_name + '.ttx') + tables = ["fvar", "CFF2"] self.expect_ttx(varfont, expected_ttx_path, tables) - self.check_ttx_dump(varfont, expected_ttx_path, tables, suffix) + def test_varlib_main_ttf(self): """Mostly for testing varLib.main() @@ -442,6 +471,31 @@ class BuildTest(unittest.TestCase): mvar_tags = [vr.ValueTag for vr in varfont["MVAR"].table.ValueRecord] assert all(tag in mvar_tags for tag in fontTools.varLib.mvar.MVAR_ENTRIES) + def test_varlib_build_VVAR_CFF2(self): + ds_path = self.get_test_input('TestVVAR.designspace') + ttx_dir = self.get_test_input("master_vvar_cff2") + expected_ttx_name = 'TestVVAR' + suffix = '.otf' + + self.temp_dir() + for path in self.get_file_list(ttx_dir, '.ttx', 'TestVVAR'): + font, savepath = self.compile_font(path, suffix, self.tempdir) + + ds = DesignSpaceDocument.fromfile(ds_path) + for source in ds.sources: + source.path = os.path.join( + self.tempdir, os.path.basename(source.filename).replace(".ufo", suffix) + ) + ds.updatePaths() + + varfont, _, _ = build(ds) + varfont = reload_font(varfont) + + expected_ttx_path = self.get_test_output(expected_ttx_name + '.ttx') + tables = ["VVAR"] + self.expect_ttx(varfont, expected_ttx_path, tables) + self.check_ttx_dump(varfont, expected_ttx_path, tables, suffix) + def test_load_masters_layerName_without_required_font(): ds = DesignSpaceDocument() diff --git a/Tests/voltLib/parser_test.py b/Tests/voltLib/parser_test.py index a532b375..3bfa17c8 100644 --- a/Tests/voltLib/parser_test.py +++ b/Tests/voltLib/parser_test.py @@ -1,12 +1,9 @@ from __future__ import print_function, division, absolute_import from __future__ import unicode_literals +from fontTools.misc.py23 import * from fontTools.voltLib import ast from fontTools.voltLib.error import VoltLibError from fontTools.voltLib.parser import Parser -from io import open -import os -import shutil -import tempfile import unittest @@ -1119,22 +1116,8 @@ class ParserTest(unittest.TestCase): def_glyph.type, def_glyph.components), (".notdef", 0, None, "BASE", None)) - def setUp(self): - self.tempdir = None - self.num_tempfiles = 0 - - def tearDown(self): - if self.tempdir: - shutil.rmtree(self.tempdir) - def parse(self, text): - if not self.tempdir: - self.tempdir = tempfile.mkdtemp() - self.num_tempfiles += 1 - path = os.path.join(self.tempdir, "tmp%d.vtp" % self.num_tempfiles) - with open(path, "w") as outfile: - outfile.write(text) - return Parser(path).parse() + return Parser(UnicodeIO(text)).parse() if __name__ == "__main__": import sys diff --git a/requirements.txt b/requirements.txt index 8532edd5..f26fe104 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,4 +6,4 @@ unicodedata2==11.0.0; python_version < '3.7' and platform_python_implementation scipy==1.2.1; platform_python_implementation != "PyPy" munkres==1.0.12; platform_python_implementation == "PyPy" # pyup: ignore zopfli==0.1.6 -fs==2.4.4 +fs==2.4.5 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.39.0 +current_version = 3.41.2 commit = True tag = False tag_name = {new_version} @@ -352,7 +352,7 @@ def find_data_files(manpath="share/man"): setup( name="fonttools", - version="3.39.0", + version="3.41.2", description="Tools to manipulate font files", author="Just van Rossum", author_email="just@letterror.com", |