Merge pull request #1628 from fonttools/partial-instancer
add new varLib.instancer module
This commit is contained in:
commit
cf612321d9
@ -30,6 +30,7 @@ log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TupleVariation(object):
|
||||
|
||||
def __init__(self, axes, coordinates):
|
||||
self.axes = axes.copy()
|
||||
self.coordinates = coordinates[:]
|
||||
@ -54,10 +55,7 @@ class TupleVariation(object):
|
||||
If the result is False, the TupleVariation can be omitted from the font
|
||||
without making any visible difference.
|
||||
"""
|
||||
for c in self.coordinates:
|
||||
if c is not None:
|
||||
return True
|
||||
return False
|
||||
return any(c is not None for c in self.coordinates)
|
||||
|
||||
def toXML(self, writer, axisTags):
|
||||
writer.begintag("tuple")
|
||||
@ -306,7 +304,7 @@ class TupleVariation(object):
|
||||
elif type(c) is int:
|
||||
deltaX.append(c)
|
||||
elif c is not None:
|
||||
raise ValueError("invalid type of delta: %s" % type(c))
|
||||
raise TypeError("invalid type of delta: %s" % type(c))
|
||||
return self.compileDeltaValues_(deltaX) + self.compileDeltaValues_(deltaY)
|
||||
|
||||
@staticmethod
|
||||
@ -446,6 +444,125 @@ class TupleVariation(object):
|
||||
size += axisCount * 4
|
||||
return size
|
||||
|
||||
def getCoordWidth(self):
|
||||
""" Return 2 if coordinates are (x, y) as in gvar, 1 if single values
|
||||
as in cvar, or 0 if empty.
|
||||
"""
|
||||
firstDelta = next((c for c in self.coordinates if c is not None), None)
|
||||
if firstDelta is None:
|
||||
return 0 # empty or has no impact
|
||||
if type(firstDelta) in (int, float):
|
||||
return 1
|
||||
if type(firstDelta) is tuple and len(firstDelta) == 2:
|
||||
return 2
|
||||
raise TypeError(
|
||||
"invalid type of delta; expected (int or float) number, or "
|
||||
"Tuple[number, number]: %r" % firstDelta
|
||||
)
|
||||
|
||||
def scaleDeltas(self, scalar):
|
||||
if scalar == 1.0:
|
||||
return # no change
|
||||
coordWidth = self.getCoordWidth()
|
||||
self.coordinates = [
|
||||
None
|
||||
if d is None
|
||||
else d * scalar
|
||||
if coordWidth == 1
|
||||
else (d[0] * scalar, d[1] * scalar)
|
||||
for d in self.coordinates
|
||||
]
|
||||
|
||||
def roundDeltas(self):
|
||||
coordWidth = self.getCoordWidth()
|
||||
self.coordinates = [
|
||||
None
|
||||
if d is None
|
||||
else otRound(d)
|
||||
if coordWidth == 1
|
||||
else (otRound(d[0]), otRound(d[1]))
|
||||
for d in self.coordinates
|
||||
]
|
||||
|
||||
def calcInferredDeltas(self, origCoords, endPts):
|
||||
from fontTools.varLib.iup import iup_delta
|
||||
|
||||
if self.getCoordWidth() == 1:
|
||||
raise TypeError(
|
||||
"Only 'gvar' TupleVariation can have inferred deltas"
|
||||
)
|
||||
if None in self.coordinates:
|
||||
if len(self.coordinates) != len(origCoords):
|
||||
raise ValueError(
|
||||
"Expected len(origCoords) == %d; found %d"
|
||||
% (len(self.coordinates), len(origCoords))
|
||||
)
|
||||
self.coordinates = iup_delta(self.coordinates, origCoords, endPts)
|
||||
|
||||
def optimize(self, origCoords, endPts, tolerance=0.5, isComposite=False):
|
||||
from fontTools.varLib.iup import iup_delta_optimize
|
||||
|
||||
if None in self.coordinates:
|
||||
return # already optimized
|
||||
|
||||
deltaOpt = iup_delta_optimize(
|
||||
self.coordinates, origCoords, endPts, tolerance=tolerance
|
||||
)
|
||||
if None in deltaOpt:
|
||||
if isComposite and all(d is None for d in deltaOpt):
|
||||
# Fix for macOS composites
|
||||
# https://github.com/fonttools/fonttools/issues/1381
|
||||
deltaOpt = [(0, 0)] + [None] * (len(deltaOpt) - 1)
|
||||
# Use "optimized" version only if smaller...
|
||||
varOpt = TupleVariation(self.axes, deltaOpt)
|
||||
|
||||
# Shouldn't matter that this is different from fvar...?
|
||||
axisTags = sorted(self.axes.keys())
|
||||
tupleData, auxData, _ = self.compile(axisTags, [], None)
|
||||
unoptimizedLength = len(tupleData) + len(auxData)
|
||||
tupleData, auxData, _ = varOpt.compile(axisTags, [], None)
|
||||
optimizedLength = len(tupleData) + len(auxData)
|
||||
|
||||
if optimizedLength < unoptimizedLength:
|
||||
self.coordinates = varOpt.coordinates
|
||||
|
||||
def __iadd__(self, other):
|
||||
if not isinstance(other, TupleVariation):
|
||||
return NotImplemented
|
||||
deltas1 = self.coordinates
|
||||
length = len(deltas1)
|
||||
deltas2 = other.coordinates
|
||||
if len(deltas2) != length:
|
||||
raise ValueError(
|
||||
"cannot sum TupleVariation deltas with different lengths"
|
||||
)
|
||||
# 'None' values have different meanings in gvar vs cvar TupleVariations:
|
||||
# within the gvar, when deltas are not provided explicitly for some points,
|
||||
# they need to be inferred; whereas for the 'cvar' table, if deltas are not
|
||||
# provided for some CVT values, then no adjustments are made (i.e. None == 0).
|
||||
# Thus, we cannot sum deltas for gvar TupleVariations if they contain
|
||||
# inferred inferred deltas (the latter need to be computed first using
|
||||
# 'calcInferredDeltas' method), but we can treat 'None' values in cvar
|
||||
# deltas as if they are zeros.
|
||||
if self.getCoordWidth() == 2:
|
||||
for i, d2 in zip(range(length), deltas2):
|
||||
d1 = deltas1[i]
|
||||
try:
|
||||
deltas1[i] = (d1[0] + d2[0], d1[1] + d2[1])
|
||||
except TypeError:
|
||||
raise ValueError(
|
||||
"cannot sum gvar deltas with inferred points"
|
||||
)
|
||||
else:
|
||||
for i, d2 in zip(range(length), deltas2):
|
||||
d1 = deltas1[i]
|
||||
if d1 is not None and d2 is not None:
|
||||
deltas1[i] = d1 + d2
|
||||
elif d1 is None and d2 is not None:
|
||||
deltas1[i] = d2
|
||||
# elif d2 is None do nothing
|
||||
return self
|
||||
|
||||
|
||||
def decompileSharedTuples(axisTags, sharedTupleCount, data, offset):
|
||||
result = []
|
||||
|
@ -243,6 +243,162 @@ class table__g_l_y_f(DefaultTable.DefaultTable):
|
||||
assert len(self.glyphOrder) == len(self.glyphs)
|
||||
return len(self.glyphs)
|
||||
|
||||
def getPhantomPoints(self, glyphName, ttFont, defaultVerticalOrigin=None):
|
||||
"""Compute the four "phantom points" for the given glyph from its bounding box
|
||||
and the horizontal and vertical advance widths and sidebearings stored in the
|
||||
ttFont's "hmtx" and "vmtx" tables.
|
||||
|
||||
If the ttFont doesn't contain a "vmtx" table, the hhea.ascent is used as the
|
||||
vertical origin, and the head.unitsPerEm as the vertical advance.
|
||||
|
||||
The "defaultVerticalOrigin" (Optional[int]) is needed when the ttFont contains
|
||||
neither a "vmtx" nor an "hhea" table, as may happen with 'sparse' masters.
|
||||
The value should be the hhea.ascent of the default master.
|
||||
|
||||
https://docs.microsoft.com/en-us/typography/opentype/spec/tt_instructing_glyphs#phantoms
|
||||
"""
|
||||
glyph = self[glyphName]
|
||||
assert glyphName in ttFont["hmtx"].metrics, ttFont["hmtx"].metrics
|
||||
horizontalAdvanceWidth, leftSideBearing = ttFont["hmtx"].metrics[glyphName]
|
||||
if not hasattr(glyph, 'xMin'):
|
||||
glyph.recalcBounds(self)
|
||||
leftSideX = glyph.xMin - leftSideBearing
|
||||
rightSideX = leftSideX + horizontalAdvanceWidth
|
||||
if "vmtx" in ttFont:
|
||||
verticalAdvanceWidth, topSideBearing = ttFont["vmtx"].metrics[glyphName]
|
||||
topSideY = topSideBearing + glyph.yMax
|
||||
else:
|
||||
# without vmtx, use ascent as vertical origin and UPEM as vertical advance
|
||||
# like HarfBuzz does
|
||||
verticalAdvanceWidth = ttFont["head"].unitsPerEm
|
||||
if "hhea" in ttFont:
|
||||
topSideY = ttFont["hhea"].ascent
|
||||
else:
|
||||
# sparse masters may not contain an hhea table; use the ascent
|
||||
# of the default master as the vertical origin
|
||||
if defaultVerticalOrigin is not None:
|
||||
topSideY = defaultVerticalOrigin
|
||||
else:
|
||||
log.warning(
|
||||
"font is missing both 'vmtx' and 'hhea' tables, "
|
||||
"and no 'defaultVerticalOrigin' was provided; "
|
||||
"the vertical phantom points may be incorrect."
|
||||
)
|
||||
topSideY = verticalAdvanceWidth
|
||||
bottomSideY = topSideY - verticalAdvanceWidth
|
||||
return [
|
||||
(leftSideX, 0),
|
||||
(rightSideX, 0),
|
||||
(0, topSideY),
|
||||
(0, bottomSideY),
|
||||
]
|
||||
|
||||
def getCoordinatesAndControls(self, glyphName, ttFont, defaultVerticalOrigin=None):
|
||||
"""Return glyph coordinates and controls as expected by "gvar" table.
|
||||
|
||||
The coordinates includes four "phantom points" for the glyph metrics,
|
||||
as mandated by the "gvar" spec.
|
||||
|
||||
The glyph controls is a namedtuple with the following attributes:
|
||||
- numberOfContours: -1 for composite glyphs.
|
||||
- endPts: list of indices of end points for each contour in simple
|
||||
glyphs, or component indices in composite glyphs (used for IUP
|
||||
optimization).
|
||||
- flags: array of contour point flags for simple glyphs (None for
|
||||
composite glyphs).
|
||||
- components: list of base glyph names (str) for each component in
|
||||
composite glyphs (None for simple glyphs).
|
||||
|
||||
The "ttFont" and "defaultVerticalOrigin" args are used to compute the
|
||||
"phantom points" (see "getPhantomPoints" method).
|
||||
|
||||
Return None if the requested glyphName is not present.
|
||||
"""
|
||||
if glyphName not in self.glyphs:
|
||||
return None
|
||||
glyph = self[glyphName]
|
||||
if glyph.isComposite():
|
||||
coords = GlyphCoordinates(
|
||||
[(getattr(c, 'x', 0), getattr(c, 'y', 0)) for c in glyph.components]
|
||||
)
|
||||
controls = _GlyphControls(
|
||||
numberOfContours=glyph.numberOfContours,
|
||||
endPts=list(range(len(glyph.components))),
|
||||
flags=None,
|
||||
components=[c.glyphName for c in glyph.components],
|
||||
)
|
||||
else:
|
||||
coords, endPts, flags = glyph.getCoordinates(self)
|
||||
coords = coords.copy()
|
||||
controls = _GlyphControls(
|
||||
numberOfContours=glyph.numberOfContours,
|
||||
endPts=endPts,
|
||||
flags=flags,
|
||||
components=None,
|
||||
)
|
||||
# Add phantom points for (left, right, top, bottom) positions.
|
||||
phantomPoints = self.getPhantomPoints(
|
||||
glyphName, ttFont, defaultVerticalOrigin=defaultVerticalOrigin
|
||||
)
|
||||
coords.extend(phantomPoints)
|
||||
return coords, controls
|
||||
|
||||
def setCoordinates(self, glyphName, coord, ttFont):
|
||||
"""Set coordinates and metrics for the given glyph.
|
||||
|
||||
"coord" is an array of GlyphCoordinates which must include the "phantom
|
||||
points" as the last four coordinates.
|
||||
|
||||
Both the horizontal/vertical advances and left/top sidebearings in "hmtx"
|
||||
and "vmtx" tables (if any) are updated from four phantom points and
|
||||
the glyph's bounding boxes.
|
||||
"""
|
||||
# TODO: Create new glyph if not already present
|
||||
assert glyphName in self.glyphs
|
||||
glyph = self[glyphName]
|
||||
|
||||
# Handle phantom points for (left, right, top, bottom) positions.
|
||||
assert len(coord) >= 4
|
||||
leftSideX = coord[-4][0]
|
||||
rightSideX = coord[-3][0]
|
||||
topSideY = coord[-2][1]
|
||||
bottomSideY = coord[-1][1]
|
||||
|
||||
coord = coord[:-4]
|
||||
|
||||
if glyph.isComposite():
|
||||
assert len(coord) == len(glyph.components)
|
||||
for p, comp in zip(coord, glyph.components):
|
||||
if hasattr(comp, 'x'):
|
||||
comp.x, comp.y = p
|
||||
elif glyph.numberOfContours == 0:
|
||||
assert len(coord) == 0
|
||||
else:
|
||||
assert len(coord) == len(glyph.coordinates)
|
||||
glyph.coordinates = GlyphCoordinates(coord)
|
||||
|
||||
glyph.recalcBounds(self)
|
||||
|
||||
horizontalAdvanceWidth = otRound(rightSideX - leftSideX)
|
||||
if horizontalAdvanceWidth < 0:
|
||||
# unlikely, but it can happen, see:
|
||||
# https://github.com/fonttools/fonttools/pull/1198
|
||||
horizontalAdvanceWidth = 0
|
||||
leftSideBearing = otRound(glyph.xMin - leftSideX)
|
||||
ttFont["hmtx"].metrics[glyphName] = horizontalAdvanceWidth, leftSideBearing
|
||||
|
||||
if "vmtx" in ttFont:
|
||||
verticalAdvanceWidth = otRound(topSideY - bottomSideY)
|
||||
if verticalAdvanceWidth < 0: # unlikely but do the same as horizontal
|
||||
verticalAdvanceWidth = 0
|
||||
topSideBearing = otRound(topSideY - glyph.yMax)
|
||||
ttFont["vmtx"].metrics[glyphName] = verticalAdvanceWidth, topSideBearing
|
||||
|
||||
|
||||
_GlyphControls = namedtuple(
|
||||
"_GlyphControls", "numberOfContours endPts flags components"
|
||||
)
|
||||
|
||||
|
||||
glyphHeaderFormat = """
|
||||
> # big endian
|
||||
|
@ -217,8 +217,9 @@ def compileGlyph_(variations, pointCount, axisTags, sharedCoordIndices):
|
||||
variations, pointCount, axisTags, sharedCoordIndices)
|
||||
if tupleVariationCount == 0:
|
||||
return b""
|
||||
result = (struct.pack(">HH", tupleVariationCount, 4 + len(tuples)) +
|
||||
tuples + data)
|
||||
result = (
|
||||
struct.pack(">HH", tupleVariationCount, 4 + len(tuples)) + tuples + data
|
||||
)
|
||||
if len(result) % 2 != 0:
|
||||
result = result + b"\0" # padding
|
||||
return result
|
||||
@ -229,6 +230,8 @@ def decompileGlyph_(pointCount, sharedTuples, axisTags, data):
|
||||
return []
|
||||
tupleVariationCount, offsetToData = struct.unpack(">HH", data[:4])
|
||||
dataPos = offsetToData
|
||||
return tv.decompileTupleVariationStore("gvar", axisTags,
|
||||
tupleVariationCount, pointCount,
|
||||
sharedTuples, data, 4, offsetToData)
|
||||
return tv.decompileTupleVariationStore(
|
||||
"gvar", axisTags,
|
||||
tupleVariationCount, pointCount,
|
||||
sharedTuples, data, 4, offsetToData
|
||||
)
|
||||
|
@ -209,102 +209,6 @@ def _add_stat(font, axes):
|
||||
stat.ElidedFallbackNameID = 2
|
||||
|
||||
|
||||
def _get_phantom_points(font, glyphName, defaultVerticalOrigin=None):
|
||||
glyf = font["glyf"]
|
||||
glyph = glyf[glyphName]
|
||||
horizontalAdvanceWidth, leftSideBearing = font["hmtx"].metrics[glyphName]
|
||||
if not hasattr(glyph, 'xMin'):
|
||||
glyph.recalcBounds(glyf)
|
||||
leftSideX = glyph.xMin - leftSideBearing
|
||||
rightSideX = leftSideX + horizontalAdvanceWidth
|
||||
if "vmtx" in font:
|
||||
verticalAdvanceWidth, topSideBearing = font["vmtx"].metrics[glyphName]
|
||||
topSideY = topSideBearing + glyph.yMax
|
||||
else:
|
||||
# without vmtx, use ascent as vertical origin and UPEM as vertical advance
|
||||
# like HarfBuzz does
|
||||
verticalAdvanceWidth = font["head"].unitsPerEm
|
||||
try:
|
||||
topSideY = font["hhea"].ascent
|
||||
except KeyError:
|
||||
# sparse masters may not contain an hhea table; use the ascent
|
||||
# of the default master as the vertical origin
|
||||
assert defaultVerticalOrigin is not None
|
||||
topSideY = defaultVerticalOrigin
|
||||
bottomSideY = topSideY - verticalAdvanceWidth
|
||||
return [
|
||||
(leftSideX, 0),
|
||||
(rightSideX, 0),
|
||||
(0, topSideY),
|
||||
(0, bottomSideY),
|
||||
]
|
||||
|
||||
|
||||
# TODO Move to glyf or gvar table proper
|
||||
def _GetCoordinates(font, glyphName, defaultVerticalOrigin=None):
|
||||
"""font, glyphName --> glyph coordinates as expected by "gvar" table
|
||||
|
||||
The result includes four "phantom points" for the glyph metrics,
|
||||
as mandated by the "gvar" spec.
|
||||
"""
|
||||
glyf = font["glyf"]
|
||||
if glyphName not in glyf.glyphs: return None
|
||||
glyph = glyf[glyphName]
|
||||
if glyph.isComposite():
|
||||
coord = GlyphCoordinates([(getattr(c, 'x', 0),getattr(c, 'y', 0)) for c in glyph.components])
|
||||
control = (glyph.numberOfContours,[c.glyphName for c in glyph.components])
|
||||
else:
|
||||
allData = glyph.getCoordinates(glyf)
|
||||
coord = allData[0]
|
||||
control = (glyph.numberOfContours,)+allData[1:]
|
||||
|
||||
# Add phantom points for (left, right, top, bottom) positions.
|
||||
phantomPoints = _get_phantom_points(font, glyphName, defaultVerticalOrigin)
|
||||
coord = coord.copy()
|
||||
coord.extend(phantomPoints)
|
||||
|
||||
return coord, control
|
||||
|
||||
# TODO Move to glyf or gvar table proper
|
||||
def _SetCoordinates(font, glyphName, coord):
|
||||
glyf = font["glyf"]
|
||||
assert glyphName in glyf.glyphs
|
||||
glyph = glyf[glyphName]
|
||||
|
||||
# Handle phantom points for (left, right, top, bottom) positions.
|
||||
assert len(coord) >= 4
|
||||
if not hasattr(glyph, 'xMin'):
|
||||
glyph.recalcBounds(glyf)
|
||||
leftSideX = coord[-4][0]
|
||||
rightSideX = coord[-3][0]
|
||||
topSideY = coord[-2][1]
|
||||
bottomSideY = coord[-1][1]
|
||||
|
||||
for _ in range(4):
|
||||
del coord[-1]
|
||||
|
||||
if glyph.isComposite():
|
||||
assert len(coord) == len(glyph.components)
|
||||
for p,comp in zip(coord, glyph.components):
|
||||
if hasattr(comp, 'x'):
|
||||
comp.x,comp.y = p
|
||||
elif glyph.numberOfContours is 0:
|
||||
assert len(coord) == 0
|
||||
else:
|
||||
assert len(coord) == len(glyph.coordinates)
|
||||
glyph.coordinates = coord
|
||||
|
||||
glyph.recalcBounds(glyf)
|
||||
|
||||
horizontalAdvanceWidth = otRound(rightSideX - leftSideX)
|
||||
if horizontalAdvanceWidth < 0:
|
||||
# unlikely, but it can happen, see:
|
||||
# https://github.com/fonttools/fonttools/pull/1198
|
||||
horizontalAdvanceWidth = 0
|
||||
leftSideBearing = otRound(glyph.xMin - leftSideX)
|
||||
# XXX Handle vertical
|
||||
font["hmtx"].metrics[glyphName] = horizontalAdvanceWidth, leftSideBearing
|
||||
|
||||
def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
|
||||
|
||||
assert tolerance >= 0
|
||||
@ -319,13 +223,13 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
|
||||
glyf = font['glyf']
|
||||
|
||||
# use hhea.ascent of base master as default vertical origin when vmtx is missing
|
||||
defaultVerticalOrigin = font['hhea'].ascent
|
||||
baseAscent = font['hhea'].ascent
|
||||
for glyph in font.getGlyphOrder():
|
||||
|
||||
isComposite = glyf[glyph].isComposite()
|
||||
|
||||
allData = [
|
||||
_GetCoordinates(m, glyph, defaultVerticalOrigin=defaultVerticalOrigin)
|
||||
m["glyf"].getCoordinatesAndControls(glyph, m, defaultVerticalOrigin=baseAscent)
|
||||
for m in master_ttfs
|
||||
]
|
||||
model, allData = masterModel.getSubModel(allData)
|
||||
@ -346,7 +250,7 @@ def _add_gvar(font, masterModel, master_ttfs, tolerance=0.5, optimize=True):
|
||||
|
||||
# Prepare for IUP optimization
|
||||
origCoords = deltas[0]
|
||||
endPts = control[1] if control[0] >= 1 else list(range(len(control[1])))
|
||||
endPts = control.endPts
|
||||
|
||||
for i,(delta,support) in enumerate(zip(deltas[1:], supports[1:])):
|
||||
if all(abs(v) <= tolerance for v in delta.array) and not isComposite:
|
||||
@ -462,20 +366,20 @@ def _merge_TTHinting(font, masterModel, master_ttfs, tolerance=0.5):
|
||||
var = TupleVariation(support, delta)
|
||||
cvar.variations.append(var)
|
||||
|
||||
MetricsFields = namedtuple('MetricsFields',
|
||||
_MetricsFields = namedtuple('_MetricsFields',
|
||||
['tableTag', 'metricsTag', 'sb1', 'sb2', 'advMapping', 'vOrigMapping'])
|
||||
|
||||
hvarFields = MetricsFields(tableTag='HVAR', metricsTag='hmtx', sb1='LsbMap',
|
||||
HVAR_FIELDS = _MetricsFields(tableTag='HVAR', metricsTag='hmtx', sb1='LsbMap',
|
||||
sb2='RsbMap', advMapping='AdvWidthMap', vOrigMapping=None)
|
||||
|
||||
vvarFields = MetricsFields(tableTag='VVAR', metricsTag='vmtx', sb1='TsbMap',
|
||||
VVAR_FIELDS = _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)
|
||||
_add_VHVAR(font, masterModel, master_ttfs, axisTags, HVAR_FIELDS)
|
||||
|
||||
def _add_VVAR(font, masterModel, master_ttfs, axisTags):
|
||||
_add_VHVAR(font, masterModel, master_ttfs, axisTags, vvarFields)
|
||||
_add_VHVAR(font, masterModel, master_ttfs, axisTags, VVAR_FIELDS)
|
||||
|
||||
def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
|
||||
|
||||
@ -692,9 +596,15 @@ def _merge_OTL(font, model, master_fonts, axisTags):
|
||||
GDEF = font['GDEF'].table
|
||||
assert GDEF.Version <= 0x00010002
|
||||
except KeyError:
|
||||
font['GDEF']= newTable('GDEF')
|
||||
font['GDEF'] = newTable('GDEF')
|
||||
GDEFTable = font["GDEF"] = newTable('GDEF')
|
||||
GDEF = GDEFTable.table = ot.GDEF()
|
||||
GDEF.GlyphClassDef = None
|
||||
GDEF.AttachList = None
|
||||
GDEF.LigCaretList = None
|
||||
GDEF.MarkAttachClassDef = None
|
||||
GDEF.MarkGlyphSetsDef = None
|
||||
|
||||
GDEF.Version = 0x00010003
|
||||
GDEF.VarStore = store
|
||||
|
||||
|
@ -285,6 +285,7 @@ def addFeatureVariationsRaw(font, conditionalSubstitutions):
|
||||
|
||||
rvrnFeature = buildFeatureRecord('rvrn', [])
|
||||
gsub.FeatureList.FeatureRecord.append(rvrnFeature)
|
||||
gsub.FeatureList.FeatureCount = len(gsub.FeatureList.FeatureRecord)
|
||||
|
||||
sortFeatureList(gsub)
|
||||
rvrnFeatureIndex = gsub.FeatureList.FeatureRecord.index(rvrnFeature)
|
||||
@ -348,6 +349,7 @@ def buildGSUB():
|
||||
srec.Script.DefaultLangSys = langrec.LangSys
|
||||
|
||||
gsub.ScriptList.ScriptRecord.append(srec)
|
||||
gsub.ScriptList.ScriptCount = 1
|
||||
gsub.FeatureVariations = None
|
||||
|
||||
return fontTable
|
||||
@ -382,6 +384,7 @@ def buildSubstitutionLookups(gsub, allSubstitutions):
|
||||
lookup = buildLookup([buildSingleSubstSubtable(substMap)])
|
||||
gsub.LookupList.Lookup.append(lookup)
|
||||
assert gsub.LookupList.Lookup[lookupMap[subst]] is lookup
|
||||
gsub.LookupList.LookupCount = len(gsub.LookupList.Lookup)
|
||||
return lookupMap
|
||||
|
||||
|
||||
@ -399,6 +402,7 @@ def buildFeatureRecord(featureTag, lookupListIndices):
|
||||
fr.FeatureTag = featureTag
|
||||
fr.Feature = ot.Feature()
|
||||
fr.Feature.LookupListIndex = lookupListIndices
|
||||
fr.Feature.populateDefaults()
|
||||
return fr
|
||||
|
||||
|
||||
|
1037
Lib/fontTools/varLib/instancer.py
Normal file
1037
Lib/fontTools/varLib/instancer.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -292,7 +292,8 @@ def merge(merger, self, lst):
|
||||
if vpair is None:
|
||||
v1, v2 = None, None
|
||||
else:
|
||||
v1, v2 = vpair.Value1, vpair.Value2
|
||||
v1 = getattr(vpair, "Value1", None)
|
||||
v2 = getattr(vpair, "Value2", None)
|
||||
v.Value1 = otBase.ValueRecord(merger.valueFormat1, src=v1) if merger.valueFormat1 else None
|
||||
v.Value2 = otBase.ValueRecord(merger.valueFormat2, src=v2) if merger.valueFormat2 else None
|
||||
values[j] = v
|
||||
@ -518,19 +519,19 @@ def merge(merger, self, lst):
|
||||
if self.Format == 1:
|
||||
for pairSet in self.PairSet:
|
||||
for pairValueRecord in pairSet.PairValueRecord:
|
||||
pv1 = pairValueRecord.Value1
|
||||
pv1 = getattr(pairValueRecord, "Value1", None)
|
||||
if pv1 is not None:
|
||||
vf1 |= pv1.getFormat()
|
||||
pv2 = pairValueRecord.Value2
|
||||
pv2 = getattr(pairValueRecord, "Value2", None)
|
||||
if pv2 is not None:
|
||||
vf2 |= pv2.getFormat()
|
||||
elif self.Format == 2:
|
||||
for class1Record in self.Class1Record:
|
||||
for class2Record in class1Record.Class2Record:
|
||||
pv1 = class2Record.Value1
|
||||
pv1 = getattr(class2Record, "Value1", None)
|
||||
if pv1 is not None:
|
||||
vf1 |= pv1.getFormat()
|
||||
pv2 = class2Record.Value2
|
||||
pv2 = getattr(class2Record, "Value2", None)
|
||||
if pv2 is not None:
|
||||
vf2 |= pv2.getFormat()
|
||||
self.ValueFormat1 = vf1
|
||||
@ -886,17 +887,10 @@ class MutatorMerger(AligningMerger):
|
||||
the operation can benefit from many operations that the
|
||||
aligning merger does."""
|
||||
|
||||
def __init__(self, font, location):
|
||||
def __init__(self, font, instancer, deleteVariations=True):
|
||||
Merger.__init__(self, font)
|
||||
self.location = location
|
||||
|
||||
store = None
|
||||
if 'GDEF' in font:
|
||||
gdef = font['GDEF'].table
|
||||
if gdef.Version >= 0x00010003:
|
||||
store = gdef.VarStore
|
||||
|
||||
self.instancer = VarStoreInstancer(store, font['fvar'].axes, location)
|
||||
self.instancer = instancer
|
||||
self.deleteVariations = deleteVariations
|
||||
|
||||
@MutatorMerger.merger(ot.CaretValue)
|
||||
def merge(merger, self, lst):
|
||||
@ -909,14 +903,16 @@ def merge(merger, self, lst):
|
||||
|
||||
instancer = merger.instancer
|
||||
dev = self.DeviceTable
|
||||
del self.DeviceTable
|
||||
if merger.deleteVariations:
|
||||
del self.DeviceTable
|
||||
if dev:
|
||||
assert dev.DeltaFormat == 0x8000
|
||||
varidx = (dev.StartSize << 16) + dev.EndSize
|
||||
delta = otRound(instancer[varidx])
|
||||
self.Coordinate += delta
|
||||
self.Coordinate += delta
|
||||
|
||||
self.Format = 1
|
||||
if merger.deleteVariations:
|
||||
self.Format = 1
|
||||
|
||||
@MutatorMerger.merger(ot.Anchor)
|
||||
def merge(merger, self, lst):
|
||||
@ -933,7 +929,8 @@ def merge(merger, self, lst):
|
||||
if not hasattr(self, tableName):
|
||||
continue
|
||||
dev = getattr(self, tableName)
|
||||
delattr(self, tableName)
|
||||
if merger.deleteVariations:
|
||||
delattr(self, tableName)
|
||||
if dev is None:
|
||||
continue
|
||||
|
||||
@ -944,7 +941,8 @@ def merge(merger, self, lst):
|
||||
attr = v+'Coordinate'
|
||||
setattr(self, attr, getattr(self, attr) + delta)
|
||||
|
||||
self.Format = 1
|
||||
if merger.deleteVariations:
|
||||
self.Format = 1
|
||||
|
||||
@MutatorMerger.merger(otBase.ValueRecord)
|
||||
def merge(merger, self, lst):
|
||||
@ -953,7 +951,6 @@ def merge(merger, self, lst):
|
||||
self.__dict__ = lst[0].__dict__.copy()
|
||||
|
||||
instancer = merger.instancer
|
||||
# TODO Handle differing valueformats
|
||||
for name, tableName in [('XAdvance','XAdvDevice'),
|
||||
('YAdvance','YAdvDevice'),
|
||||
('XPlacement','XPlaDevice'),
|
||||
@ -962,7 +959,8 @@ def merge(merger, self, lst):
|
||||
if not hasattr(self, tableName):
|
||||
continue
|
||||
dev = getattr(self, tableName)
|
||||
delattr(self, tableName)
|
||||
if merger.deleteVariations:
|
||||
delattr(self, tableName)
|
||||
if dev is None:
|
||||
continue
|
||||
|
||||
|
@ -10,7 +10,6 @@ from fontTools.pens.boundsPen import BoundsPen
|
||||
from fontTools.ttLib import TTFont, newTable
|
||||
from fontTools.ttLib.tables import ttProgram
|
||||
from fontTools.ttLib.tables._g_l_y_f import GlyphCoordinates, flagOverlapSimple, OVERLAP_COMPOUND
|
||||
from fontTools.varLib import _GetCoordinates, _SetCoordinates
|
||||
from fontTools.varLib.models import (
|
||||
supportScalar,
|
||||
normalizeLocation,
|
||||
@ -195,7 +194,7 @@ def instantiateVariableFont(varfont, location, inplace=False, overlap=True):
|
||||
name))
|
||||
for glyphname in glyphnames:
|
||||
variations = gvar.variations[glyphname]
|
||||
coordinates,_ = _GetCoordinates(varfont, glyphname)
|
||||
coordinates, _ = glyf.getCoordinatesAndControls(glyphname, varfont)
|
||||
origCoords, endPts = None, None
|
||||
for var in variations:
|
||||
scalar = supportScalar(loc, var.axes)
|
||||
@ -203,11 +202,10 @@ def instantiateVariableFont(varfont, location, inplace=False, overlap=True):
|
||||
delta = var.coordinates
|
||||
if None in delta:
|
||||
if origCoords is None:
|
||||
origCoords,control = _GetCoordinates(varfont, glyphname)
|
||||
endPts = control[1] if control[0] >= 1 else list(range(len(control[1])))
|
||||
delta = iup_delta(delta, origCoords, endPts)
|
||||
origCoords, g = glyf.getCoordinatesAndControls(glyphname, varfont)
|
||||
delta = iup_delta(delta, origCoords, g.endPts)
|
||||
coordinates += GlyphCoordinates(delta) * scalar
|
||||
_SetCoordinates(varfont, glyphname, coordinates)
|
||||
glyf.setCoordinates(glyphname, coordinates, varfont)
|
||||
else:
|
||||
glyf = None
|
||||
|
||||
@ -291,7 +289,7 @@ def instantiateVariableFont(varfont, location, inplace=False, overlap=True):
|
||||
gdef = varfont['GDEF'].table
|
||||
instancer = VarStoreInstancer(gdef.VarStore, fvar.axes, loc)
|
||||
|
||||
merger = MutatorMerger(varfont, loc)
|
||||
merger = MutatorMerger(varfont, instancer)
|
||||
merger.mergeTables(varfont, [varfont], ['GDEF', 'GPOS'])
|
||||
|
||||
# Downgrade GDEF.
|
||||
|
@ -133,8 +133,11 @@ def VarData_addItem(self, deltas):
|
||||
ot.VarData.addItem = VarData_addItem
|
||||
|
||||
def VarRegion_get_support(self, fvar_axes):
|
||||
return {fvar_axes[i].axisTag: (reg.StartCoord,reg.PeakCoord,reg.EndCoord)
|
||||
for i,reg in enumerate(self.VarRegionAxis)}
|
||||
return {
|
||||
fvar_axes[i].axisTag: (reg.StartCoord,reg.PeakCoord,reg.EndCoord)
|
||||
for i, reg in enumerate(self.VarRegionAxis)
|
||||
if reg.PeakCoord != 0
|
||||
}
|
||||
|
||||
ot.VarRegion.get_support = VarRegion_get_support
|
||||
|
||||
|
28
Tests/conftest.py
Normal file
28
Tests/conftest.py
Normal file
@ -0,0 +1,28 @@
|
||||
import fontTools
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True, scope="session")
|
||||
def disableConfigLogger():
|
||||
"""Session-scoped fixture to make fontTools.configLogger function no-op.
|
||||
|
||||
Logging in python maintains a global state. When in the tests we call a main()
|
||||
function from modules subset or ttx, a call to configLogger is made that modifies
|
||||
this global state (to configures a handler for the fontTools logger).
|
||||
To prevent that, we monkey-patch the `configLogger` attribute of the `fontTools`
|
||||
module (the one used in the scripts main() functions) so that it does nothing,
|
||||
to avoid any side effects.
|
||||
|
||||
NOTE: `fontTools.configLogger` is only an alias for the configLogger function in
|
||||
`fontTools.misc.loggingTools` module; the original function is not modified.
|
||||
"""
|
||||
|
||||
def noop(*args, **kwargs):
|
||||
return
|
||||
|
||||
originalConfigLogger = fontTools.configLogger
|
||||
fontTools.configLogger = noop
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
fontTools.configLogger = originalConfigLogger
|
@ -69,6 +69,13 @@ SKIA_GVAR_I_DATA = deHexStr(
|
||||
|
||||
|
||||
class TupleVariationTest(unittest.TestCase):
|
||||
def __init__(self, methodName):
|
||||
unittest.TestCase.__init__(self, methodName)
|
||||
# Python 3 renamed assertRaisesRegexp to assertRaisesRegex,
|
||||
# and fires deprecation warnings if a program uses the old name.
|
||||
if not hasattr(self, "assertRaisesRegex"):
|
||||
self.assertRaisesRegex = self.assertRaisesRegexp
|
||||
|
||||
def test_equal(self):
|
||||
var1 = TupleVariation({"wght":(0.0, 1.0, 1.0)}, [(0,0), (9,8), (7,6)])
|
||||
var2 = TupleVariation({"wght":(0.0, 1.0, 1.0)}, [(0,0), (9,8), (7,6)])
|
||||
@ -681,6 +688,167 @@ class TupleVariationTest(unittest.TestCase):
|
||||
content = writer.file.getvalue().decode("utf-8")
|
||||
return [line.strip() for line in content.splitlines()][1:]
|
||||
|
||||
def test_getCoordWidth(self):
|
||||
empty = TupleVariation({}, [])
|
||||
self.assertEqual(empty.getCoordWidth(), 0)
|
||||
|
||||
empty = TupleVariation({}, [None])
|
||||
self.assertEqual(empty.getCoordWidth(), 0)
|
||||
|
||||
gvarTuple = TupleVariation({}, [None, (0, 0)])
|
||||
self.assertEqual(gvarTuple.getCoordWidth(), 2)
|
||||
|
||||
cvarTuple = TupleVariation({}, [None, 0])
|
||||
self.assertEqual(cvarTuple.getCoordWidth(), 1)
|
||||
|
||||
cvarTuple.coordinates[1] *= 1.0
|
||||
self.assertEqual(cvarTuple.getCoordWidth(), 1)
|
||||
|
||||
with self.assertRaises(TypeError):
|
||||
TupleVariation({}, [None, "a"]).getCoordWidth()
|
||||
|
||||
def test_scaleDeltas_cvar(self):
|
||||
var = TupleVariation({}, [100, None])
|
||||
|
||||
var.scaleDeltas(1.0)
|
||||
self.assertEqual(var.coordinates, [100, None])
|
||||
|
||||
var.scaleDeltas(0.333)
|
||||
self.assertAlmostEqual(var.coordinates[0], 33.3)
|
||||
self.assertIsNone(var.coordinates[1])
|
||||
|
||||
var.scaleDeltas(0.0)
|
||||
self.assertEqual(var.coordinates, [0, None])
|
||||
|
||||
def test_scaleDeltas_gvar(self):
|
||||
var = TupleVariation({}, [(100, 200), None])
|
||||
|
||||
var.scaleDeltas(1.0)
|
||||
self.assertEqual(var.coordinates, [(100, 200), None])
|
||||
|
||||
var.scaleDeltas(0.333)
|
||||
self.assertAlmostEqual(var.coordinates[0][0], 33.3)
|
||||
self.assertAlmostEqual(var.coordinates[0][1], 66.6)
|
||||
self.assertIsNone(var.coordinates[1])
|
||||
|
||||
var.scaleDeltas(0.0)
|
||||
self.assertEqual(var.coordinates, [(0, 0), None])
|
||||
|
||||
def test_roundDeltas_cvar(self):
|
||||
var = TupleVariation({}, [55.5, None, 99.9])
|
||||
var.roundDeltas()
|
||||
self.assertEqual(var.coordinates, [56, None, 100])
|
||||
|
||||
def test_roundDeltas_gvar(self):
|
||||
var = TupleVariation({}, [(55.5, 100.0), None, (99.9, 100.0)])
|
||||
var.roundDeltas()
|
||||
self.assertEqual(var.coordinates, [(56, 100), None, (100, 100)])
|
||||
|
||||
def test_calcInferredDeltas(self):
|
||||
var = TupleVariation({}, [(0, 0), None, None, None])
|
||||
coords = [(1, 1), (1, 1), (1, 1), (1, 1)]
|
||||
|
||||
var.calcInferredDeltas(coords, [])
|
||||
|
||||
self.assertEqual(
|
||||
var.coordinates,
|
||||
[(0, 0), (0, 0), (0, 0), (0, 0)]
|
||||
)
|
||||
|
||||
def test_calcInferredDeltas_invalid(self):
|
||||
# cvar tuples can't have inferred deltas
|
||||
with self.assertRaises(TypeError):
|
||||
TupleVariation({}, [0]).calcInferredDeltas([], [])
|
||||
|
||||
# origCoords must have same length as self.coordinates
|
||||
with self.assertRaises(ValueError):
|
||||
TupleVariation({}, [(0, 0), None]).calcInferredDeltas([], [])
|
||||
|
||||
# at least 4 phantom points required
|
||||
with self.assertRaises(AssertionError):
|
||||
TupleVariation({}, [(0, 0), None]).calcInferredDeltas([(0, 0), (0, 0)], [])
|
||||
|
||||
with self.assertRaises(AssertionError):
|
||||
TupleVariation({}, [(0, 0)] + [None]*5).calcInferredDeltas(
|
||||
[(0, 0)]*6,
|
||||
[1, 0] # endPts not in increasing order
|
||||
)
|
||||
|
||||
def test_optimize(self):
|
||||
var = TupleVariation({"wght": (0.0, 1.0, 1.0)}, [(0, 0)]*5)
|
||||
|
||||
var.optimize([(0, 0)]*5, [0])
|
||||
|
||||
self.assertEqual(var.coordinates, [None, None, None, None, None])
|
||||
|
||||
def test_optimize_isComposite(self):
|
||||
# when a composite glyph's deltas are all (0, 0), we still want
|
||||
# to write out an entry in gvar, else macOS doesn't apply any
|
||||
# variations to the composite glyph (even if its individual components
|
||||
# do vary).
|
||||
# https://github.com/fonttools/fonttools/issues/1381
|
||||
var = TupleVariation({"wght": (0.0, 1.0, 1.0)}, [(0, 0)]*5)
|
||||
var.optimize([(0, 0)]*5, [0], isComposite=True)
|
||||
self.assertEqual(var.coordinates, [(0, 0)]*5)
|
||||
|
||||
# it takes more than 128 (0, 0) deltas before the optimized tuple with
|
||||
# (None) inferred deltas (except for the first) becomes smaller than
|
||||
# the un-optimized one that has all deltas explicitly set to (0, 0).
|
||||
var = TupleVariation({"wght": (0.0, 1.0, 1.0)}, [(0, 0)]*129)
|
||||
var.optimize([(0, 0)]*129, list(range(129-4)), isComposite=True)
|
||||
self.assertEqual(var.coordinates, [(0, 0)] + [None]*128)
|
||||
|
||||
def test_sum_deltas_gvar(self):
|
||||
var1 = TupleVariation(
|
||||
{},
|
||||
[
|
||||
(-20, 0), (-20, 0), (20, 0), (20, 0),
|
||||
(0, 0), (0, 0), (0, 0), (0, 0),
|
||||
]
|
||||
)
|
||||
var2 = TupleVariation(
|
||||
{},
|
||||
[
|
||||
(-10, 0), (-10, 0), (10, 0), (10, 0),
|
||||
(0, 0), (20, 0), (0, 0), (0, 0),
|
||||
]
|
||||
)
|
||||
|
||||
var1 += var2
|
||||
|
||||
self.assertEqual(
|
||||
var1.coordinates,
|
||||
[
|
||||
(-30, 0), (-30, 0), (30, 0), (30, 0),
|
||||
(0, 0), (20, 0), (0, 0), (0, 0),
|
||||
]
|
||||
)
|
||||
|
||||
def test_sum_deltas_gvar_invalid_length(self):
|
||||
var1 = TupleVariation({}, [(1, 2)])
|
||||
var2 = TupleVariation({}, [(1, 2), (3, 4)])
|
||||
|
||||
with self.assertRaisesRegex(ValueError, "deltas with different lengths"):
|
||||
var1 += var2
|
||||
|
||||
def test_sum_deltas_gvar_with_inferred_points(self):
|
||||
var1 = TupleVariation({}, [(1, 2), None])
|
||||
var2 = TupleVariation({}, [(2, 3), None])
|
||||
|
||||
with self.assertRaisesRegex(ValueError, "deltas with inferred points"):
|
||||
var1 += var2
|
||||
|
||||
def test_sum_deltas_cvar(self):
|
||||
axes = {"wght": (0.0, 1.0, 1.0)}
|
||||
var1 = TupleVariation(axes, [0, 1, None, None])
|
||||
var2 = TupleVariation(axes, [None, 2, None, 3])
|
||||
var3 = TupleVariation(axes, [None, None, None, 4])
|
||||
|
||||
var1 += var2
|
||||
var1 += var3
|
||||
|
||||
self.assertEqual(var1.coordinates, [0, 3, None, 7])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
@ -953,7 +953,7 @@ def test_main_getopterror_missing_directory():
|
||||
ttx.main(args)
|
||||
|
||||
|
||||
def test_main_keyboard_interrupt(tmpdir, monkeypatch, capsys):
|
||||
def test_main_keyboard_interrupt(tmpdir, monkeypatch, caplog):
|
||||
with pytest.raises(SystemExit):
|
||||
inpath = os.path.join("Tests", "ttx", "data", "TestTTF.ttx")
|
||||
outpath = tmpdir.join("TestTTF.ttf")
|
||||
@ -963,8 +963,7 @@ def test_main_keyboard_interrupt(tmpdir, monkeypatch, capsys):
|
||||
)
|
||||
ttx.main(args)
|
||||
|
||||
out, err = capsys.readouterr()
|
||||
assert "(Cancelled.)" in err
|
||||
assert "(Cancelled.)" in caplog.text
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
@ -982,7 +981,7 @@ def test_main_system_exit(tmpdir, monkeypatch):
|
||||
ttx.main(args)
|
||||
|
||||
|
||||
def test_main_ttlib_error(tmpdir, monkeypatch, capsys):
|
||||
def test_main_ttlib_error(tmpdir, monkeypatch, caplog):
|
||||
with pytest.raises(SystemExit):
|
||||
inpath = os.path.join("Tests", "ttx", "data", "TestTTF.ttx")
|
||||
outpath = tmpdir.join("TestTTF.ttf")
|
||||
@ -994,15 +993,14 @@ def test_main_ttlib_error(tmpdir, monkeypatch, capsys):
|
||||
)
|
||||
ttx.main(args)
|
||||
|
||||
out, err = capsys.readouterr()
|
||||
assert "Test error" in err
|
||||
assert "Test error" in caplog.text
|
||||
|
||||
|
||||
@pytest.mark.skipif(
|
||||
sys.platform == "win32",
|
||||
reason="waitForKeyPress function causes test to hang on Windows platform",
|
||||
)
|
||||
def test_main_base_exception(tmpdir, monkeypatch, capsys):
|
||||
def test_main_base_exception(tmpdir, monkeypatch, caplog):
|
||||
with pytest.raises(SystemExit):
|
||||
inpath = os.path.join("Tests", "ttx", "data", "TestTTF.ttx")
|
||||
outpath = tmpdir.join("TestTTF.ttf")
|
||||
@ -1014,8 +1012,7 @@ def test_main_base_exception(tmpdir, monkeypatch, capsys):
|
||||
)
|
||||
ttx.main(args)
|
||||
|
||||
out, err = capsys.readouterr()
|
||||
assert "Unhandled exception has occurred" in err
|
||||
assert "Unhandled exception has occurred" in caplog.text
|
||||
|
||||
|
||||
# ---------------------------
|
||||
|
1131
Tests/varLib/data/PartialInstancerTest-VF.ttx
Normal file
1131
Tests/varLib/data/PartialInstancerTest-VF.ttx
Normal file
File diff suppressed because it is too large
Load Diff
1803
Tests/varLib/data/PartialInstancerTest2-VF.ttx
Normal file
1803
Tests/varLib/data/PartialInstancerTest2-VF.ttx
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,484 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" 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="grave"/>
|
||||
<GlyphID id="4" name="Agrave"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0x982d27a8"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 15 19:50:39 2016"/>
|
||||
<modified value="Tue May 21 16:23:19 2019"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="577"/>
|
||||
<yMax value="952"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1069"/>
|
||||
<descent value="-293"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="600"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="0"/>
|
||||
<xMaxExtent value="577"/>
|
||||
<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>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="5"/>
|
||||
<maxPoints value="19"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="32"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="2"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="577"/>
|
||||
<usWeightClass value="100"/>
|
||||
<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="317"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="5"/>
|
||||
<bProportion value="2"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="5"/>
|
||||
<bArmStyle value="4"/>
|
||||
<bLetterForm value="2"/>
|
||||
<bMidline value="2"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11111111"/>
|
||||
<ulUnicodeRange2 value="01000000 00000000 00100000 00011111"/>
|
||||
<ulUnicodeRange3 value="00001000 00000000 00000000 00101001"/>
|
||||
<ulUnicodeRange4 value="00000000 00010000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000001 01000000"/>
|
||||
<usFirstCharIndex value="65"/>
|
||||
<usLastCharIndex value="192"/>
|
||||
<sTypoAscender value="1069"/>
|
||||
<sTypoDescender value="-293"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
<usWinAscent value="1069"/>
|
||||
<usWinDescent value="293"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000001 10011111"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="528"/>
|
||||
<sCapHeight value="714"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="4"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="600" lsb="94"/>
|
||||
<mtx name="A" width="577" lsb="0"/>
|
||||
<mtx name="Agrave" width="577" lsb="0"/>
|
||||
<mtx name="T" width="505" lsb="2"/>
|
||||
<mtx name="grave" width="249" lsb="40"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</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="94" yMin="0" xMax="505" yMax="714">
|
||||
<contour>
|
||||
<pt x="94" y="0" on="1" overlap="1"/>
|
||||
<pt x="94" y="714" on="1"/>
|
||||
<pt x="505" y="714" on="1"/>
|
||||
<pt x="505" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="145" y="51" on="1"/>
|
||||
<pt x="454" y="51" on="1"/>
|
||||
<pt x="454" y="663" on="1"/>
|
||||
<pt x="145" y="663" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="A" xMin="0" yMin="0" xMax="577" yMax="716">
|
||||
<contour>
|
||||
<pt x="549" y="0" on="1" overlap="1"/>
|
||||
<pt x="445" y="271" on="1"/>
|
||||
<pt x="135" y="271" on="1"/>
|
||||
<pt x="28" y="0" on="1"/>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="282" y="716" on="1"/>
|
||||
<pt x="307" y="716" on="1"/>
|
||||
<pt x="577" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="435" y="296" on="1"/>
|
||||
<pt x="325" y="594" on="1"/>
|
||||
<pt x="321" y="606" on="0"/>
|
||||
<pt x="311" y="632" on="0"/>
|
||||
<pt x="300" y="664" on="0"/>
|
||||
<pt x="293" y="682" on="1"/>
|
||||
<pt x="288" y="667" on="0"/>
|
||||
<pt x="277" y="636" on="0"/>
|
||||
<pt x="265" y="607" on="0"/>
|
||||
<pt x="260" y="593" on="1"/>
|
||||
<pt x="144" y="296" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="Agrave" xMin="0" yMin="0" xMax="577" yMax="952">
|
||||
<component glyphName="A" x="0" y="0" flags="0x604"/>
|
||||
<component glyphName="grave" x="131" y="186" flags="0x4"/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="T" xMin="2" yMin="0" xMax="503" yMax="714">
|
||||
<contour>
|
||||
<pt x="265" y="0" on="1" overlap="1"/>
|
||||
<pt x="239" y="0" on="1"/>
|
||||
<pt x="239" y="689" on="1"/>
|
||||
<pt x="2" y="689" on="1"/>
|
||||
<pt x="2" y="714" on="1"/>
|
||||
<pt x="503" y="714" on="1"/>
|
||||
<pt x="503" y="689" on="1"/>
|
||||
<pt x="265" y="689" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="grave" xMin="40" yMin="606" xMax="209" yMax="766">
|
||||
<contour>
|
||||
<pt x="70" y="766" on="1" overlap="1"/>
|
||||
<pt x="85" y="745" on="0"/>
|
||||
<pt x="133" y="688" on="0"/>
|
||||
<pt x="187" y="632" on="0"/>
|
||||
<pt x="209" y="612" on="1"/>
|
||||
<pt x="209" y="606" on="1"/>
|
||||
<pt x="188" y="606" on="1"/>
|
||||
<pt x="168" y="623" on="0"/>
|
||||
<pt x="127" y="662" on="0"/>
|
||||
<pt x="88" y="703" on="0"/>
|
||||
<pt x="53" y="742" on="0"/>
|
||||
<pt x="40" y="759" on="1"/>
|
||||
<pt x="40" y="766" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
|
||||
Designed by Monotype design team.
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
http://scripts.sil.org/OFL
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<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>
|
||||
|
||||
<GDEF>
|
||||
<Version value="0x00010002"/>
|
||||
<GlyphClassDef Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</GlyphClassDef>
|
||||
<MarkGlyphSetsDef>
|
||||
<MarkSetTableFormat value="1"/>
|
||||
<!-- MarkSetCount=4 -->
|
||||
<Coverage index="0" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="1" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="2" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="3" 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="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="2">
|
||||
<ScriptTag value="grek"/>
|
||||
<Script>
|
||||
<DefaultLangSys>
|
||||
<ReqFeatureIndex value="65535"/>
|
||||
<!-- FeatureCount=1 -->
|
||||
<FeatureIndex index="0" value="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="3">
|
||||
<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="kern"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="2"/>
|
||||
<LookupFlag value="8"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<PairPos index="0" Format="2">
|
||||
<Coverage Format="1">
|
||||
<Glyph value="A"/>
|
||||
<Glyph value="T"/>
|
||||
<Glyph value="Agrave"/>
|
||||
</Coverage>
|
||||
<ValueFormat1 value="4"/>
|
||||
<ValueFormat2 value="0"/>
|
||||
<ClassDef1 Format="1">
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</ClassDef1>
|
||||
<ClassDef2 Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="2"/>
|
||||
</ClassDef2>
|
||||
<!-- Class1Count=2 -->
|
||||
<!-- Class2Count=3 -->
|
||||
<Class1Record index="0">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="-70"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
<Class1Record index="1">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="-70"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="20"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
</PairPos>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GPOS>
|
||||
|
||||
<GSUB>
|
||||
<Version value="0x00010000"/>
|
||||
<ScriptList>
|
||||
<!-- ScriptCount=4 -->
|
||||
<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="latn"/>
|
||||
<Script>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
</ScriptList>
|
||||
<FeatureList>
|
||||
<!-- FeatureCount=0 -->
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=0 -->
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
</ttFont>
|
@ -0,0 +1,484 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" 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="grave"/>
|
||||
<GlyphID id="4" name="Agrave"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0x1d4f3a2e"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 15 19:50:39 2016"/>
|
||||
<modified value="Tue May 21 16:23:19 2019"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="496"/>
|
||||
<yMax value="931"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1069"/>
|
||||
<descent value="-293"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="600"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="0"/>
|
||||
<xMaxExtent value="496"/>
|
||||
<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>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="5"/>
|
||||
<maxPoints value="19"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="32"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="2"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="577"/>
|
||||
<usWeightClass value="100"/>
|
||||
<usWidthClass value="2"/>
|
||||
<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="316"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="5"/>
|
||||
<bProportion value="2"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="5"/>
|
||||
<bArmStyle value="4"/>
|
||||
<bLetterForm value="2"/>
|
||||
<bMidline value="2"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11111111"/>
|
||||
<ulUnicodeRange2 value="01000000 00000000 00100000 00011111"/>
|
||||
<ulUnicodeRange3 value="00001000 00000000 00000000 00101001"/>
|
||||
<ulUnicodeRange4 value="00000000 00010000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000001 01000000"/>
|
||||
<usFirstCharIndex value="65"/>
|
||||
<usLastCharIndex value="192"/>
|
||||
<sTypoAscender value="1069"/>
|
||||
<sTypoDescender value="-293"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
<usWinAscent value="1069"/>
|
||||
<usWinDescent value="293"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000001 10011111"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="527"/>
|
||||
<sCapHeight value="714"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="4"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="600" lsb="85"/>
|
||||
<mtx name="A" width="377" lsb="0"/>
|
||||
<mtx name="Agrave" width="377" lsb="0"/>
|
||||
<mtx name="T" width="336" lsb="7"/>
|
||||
<mtx name="grave" width="225" lsb="40"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</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="85" yMin="0" xMax="496" yMax="714">
|
||||
<contour>
|
||||
<pt x="85" y="0" on="1" overlap="1"/>
|
||||
<pt x="85" y="714" on="1"/>
|
||||
<pt x="496" y="714" on="1"/>
|
||||
<pt x="496" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="136" y="51" on="1"/>
|
||||
<pt x="445" y="51" on="1"/>
|
||||
<pt x="445" y="663" on="1"/>
|
||||
<pt x="136" y="663" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="A" xMin="0" yMin="0" xMax="377" yMax="714">
|
||||
<contour>
|
||||
<pt x="351" y="0" on="1" overlap="1"/>
|
||||
<pt x="284" y="281" on="1"/>
|
||||
<pt x="94" y="281" on="1"/>
|
||||
<pt x="26" y="0" on="1"/>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="170" y="714" on="1"/>
|
||||
<pt x="208" y="714" on="1"/>
|
||||
<pt x="377" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="278" y="306" on="1"/>
|
||||
<pt x="208" y="612" on="1"/>
|
||||
<pt x="204" y="629" on="0"/>
|
||||
<pt x="198" y="655" on="0"/>
|
||||
<pt x="192" y="681" on="0"/>
|
||||
<pt x="189" y="695" on="1"/>
|
||||
<pt x="186" y="681" on="0"/>
|
||||
<pt x="180" y="656" on="0"/>
|
||||
<pt x="174" y="629" on="0"/>
|
||||
<pt x="170" y="612" on="1"/>
|
||||
<pt x="100" y="306" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="Agrave" xMin="0" yMin="0" xMax="377" yMax="931">
|
||||
<component glyphName="A" x="0" y="0" flags="0x604"/>
|
||||
<component glyphName="grave" x="11" y="168" flags="0x4"/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="T" xMin="7" yMin="0" xMax="328" yMax="714">
|
||||
<contour>
|
||||
<pt x="180" y="0" on="1" overlap="1"/>
|
||||
<pt x="154" y="0" on="1"/>
|
||||
<pt x="154" y="689" on="1"/>
|
||||
<pt x="7" y="689" on="1"/>
|
||||
<pt x="7" y="714" on="1"/>
|
||||
<pt x="328" y="714" on="1"/>
|
||||
<pt x="328" y="689" on="1"/>
|
||||
<pt x="180" y="689" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="grave" xMin="40" yMin="606" xMax="185" yMax="763">
|
||||
<contour>
|
||||
<pt x="71" y="763" on="1" overlap="1"/>
|
||||
<pt x="89" y="736" on="0"/>
|
||||
<pt x="126" y="686" on="0"/>
|
||||
<pt x="166" y="640" on="0"/>
|
||||
<pt x="185" y="617" on="1"/>
|
||||
<pt x="185" y="606" on="1"/>
|
||||
<pt x="169" y="606" on="1"/>
|
||||
<pt x="155" y="620" on="0"/>
|
||||
<pt x="120" y="656" on="0"/>
|
||||
<pt x="85" y="696" on="0"/>
|
||||
<pt x="52" y="737" on="0"/>
|
||||
<pt x="40" y="756" on="1"/>
|
||||
<pt x="40" y="763" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
|
||||
Designed by Monotype design team.
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
http://scripts.sil.org/OFL
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<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>
|
||||
|
||||
<GDEF>
|
||||
<Version value="0x00010002"/>
|
||||
<GlyphClassDef Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</GlyphClassDef>
|
||||
<MarkGlyphSetsDef>
|
||||
<MarkSetTableFormat value="1"/>
|
||||
<!-- MarkSetCount=4 -->
|
||||
<Coverage index="0" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="1" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="2" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="3" 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="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="2">
|
||||
<ScriptTag value="grek"/>
|
||||
<Script>
|
||||
<DefaultLangSys>
|
||||
<ReqFeatureIndex value="65535"/>
|
||||
<!-- FeatureCount=1 -->
|
||||
<FeatureIndex index="0" value="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="3">
|
||||
<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="kern"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="2"/>
|
||||
<LookupFlag value="8"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<PairPos index="0" Format="2">
|
||||
<Coverage Format="1">
|
||||
<Glyph value="A"/>
|
||||
<Glyph value="T"/>
|
||||
<Glyph value="Agrave"/>
|
||||
</Coverage>
|
||||
<ValueFormat1 value="4"/>
|
||||
<ValueFormat2 value="0"/>
|
||||
<ClassDef1 Format="1">
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</ClassDef1>
|
||||
<ClassDef2 Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="2"/>
|
||||
</ClassDef2>
|
||||
<!-- Class1Count=2 -->
|
||||
<!-- Class2Count=3 -->
|
||||
<Class1Record index="0">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="-17"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
<Class1Record index="1">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="-17"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="12"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
</PairPos>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GPOS>
|
||||
|
||||
<GSUB>
|
||||
<Version value="0x00010000"/>
|
||||
<ScriptList>
|
||||
<!-- ScriptCount=4 -->
|
||||
<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="latn"/>
|
||||
<Script>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
</ScriptList>
|
||||
<FeatureList>
|
||||
<!-- FeatureCount=0 -->
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=0 -->
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
</ttFont>
|
@ -0,0 +1,484 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" 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="grave"/>
|
||||
<GlyphID id="4" name="Agrave"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0xf43664b4"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 15 19:50:39 2016"/>
|
||||
<modified value="Tue May 21 16:23:19 2019"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="638"/>
|
||||
<yMax value="944"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1069"/>
|
||||
<descent value="-293"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="639"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="1"/>
|
||||
<xMaxExtent value="638"/>
|
||||
<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>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="5"/>
|
||||
<maxPoints value="19"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="32"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="2"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="577"/>
|
||||
<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="322"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="5"/>
|
||||
<bProportion value="2"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="5"/>
|
||||
<bArmStyle value="4"/>
|
||||
<bLetterForm value="2"/>
|
||||
<bMidline value="2"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11111111"/>
|
||||
<ulUnicodeRange2 value="01000000 00000000 00100000 00011111"/>
|
||||
<ulUnicodeRange3 value="00001000 00000000 00000000 00101001"/>
|
||||
<ulUnicodeRange4 value="00000000 00010000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000001 01000000"/>
|
||||
<usFirstCharIndex value="65"/>
|
||||
<usLastCharIndex value="192"/>
|
||||
<sTypoAscender value="1069"/>
|
||||
<sTypoDescender value="-293"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
<usWinAscent value="1069"/>
|
||||
<usWinDescent value="293"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000001 10011111"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="536"/>
|
||||
<sCapHeight value="714"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="4"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="600" lsb="94"/>
|
||||
<mtx name="A" width="639" lsb="0"/>
|
||||
<mtx name="Agrave" width="639" lsb="0"/>
|
||||
<mtx name="T" width="556" lsb="10"/>
|
||||
<mtx name="grave" width="281" lsb="40"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</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="94" yMin="0" xMax="505" yMax="714">
|
||||
<contour>
|
||||
<pt x="94" y="0" on="1" overlap="1"/>
|
||||
<pt x="94" y="714" on="1"/>
|
||||
<pt x="505" y="714" on="1"/>
|
||||
<pt x="505" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="145" y="51" on="1"/>
|
||||
<pt x="454" y="51" on="1"/>
|
||||
<pt x="454" y="663" on="1"/>
|
||||
<pt x="145" y="663" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="A" xMin="0" yMin="0" xMax="638" yMax="717">
|
||||
<contour>
|
||||
<pt x="545" y="0" on="1" overlap="1"/>
|
||||
<pt x="459" y="221" on="1"/>
|
||||
<pt x="176" y="221" on="1"/>
|
||||
<pt x="91" y="0" on="1"/>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="279" y="717" on="1"/>
|
||||
<pt x="360" y="717" on="1"/>
|
||||
<pt x="638" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="432" y="301" on="1"/>
|
||||
<pt x="352" y="517" on="1"/>
|
||||
<pt x="349" y="525" on="0"/>
|
||||
<pt x="335" y="567" on="0"/>
|
||||
<pt x="322" y="612" on="0"/>
|
||||
<pt x="318" y="624" on="1"/>
|
||||
<pt x="313" y="604" on="0"/>
|
||||
<pt x="302" y="563" on="0"/>
|
||||
<pt x="291" y="529" on="0"/>
|
||||
<pt x="287" y="517" on="1"/>
|
||||
<pt x="206" y="301" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="Agrave" xMin="0" yMin="0" xMax="638" yMax="944">
|
||||
<component glyphName="A" x="0" y="0" flags="0x604"/>
|
||||
<component glyphName="grave" x="147" y="178" flags="0x4"/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="T" xMin="10" yMin="0" xMax="545" yMax="714">
|
||||
<contour>
|
||||
<pt x="323" y="0" on="1" overlap="1"/>
|
||||
<pt x="233" y="0" on="1"/>
|
||||
<pt x="233" y="635" on="1"/>
|
||||
<pt x="10" y="635" on="1"/>
|
||||
<pt x="10" y="714" on="1"/>
|
||||
<pt x="545" y="714" on="1"/>
|
||||
<pt x="545" y="635" on="1"/>
|
||||
<pt x="323" y="635" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="grave" xMin="40" yMin="606" xMax="241" yMax="766">
|
||||
<contour>
|
||||
<pt x="145" y="766" on="1" overlap="1"/>
|
||||
<pt x="156" y="744" on="0"/>
|
||||
<pt x="189" y="689" on="0"/>
|
||||
<pt x="226" y="637" on="0"/>
|
||||
<pt x="241" y="618" on="1"/>
|
||||
<pt x="241" y="606" on="1"/>
|
||||
<pt x="182" y="606" on="1"/>
|
||||
<pt x="165" y="620" on="0"/>
|
||||
<pt x="123" y="659" on="0"/>
|
||||
<pt x="82" y="702" on="0"/>
|
||||
<pt x="49" y="742" on="0"/>
|
||||
<pt x="40" y="756" on="1"/>
|
||||
<pt x="40" y="766" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
|
||||
Designed by Monotype design team.
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
http://scripts.sil.org/OFL
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<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>
|
||||
|
||||
<GDEF>
|
||||
<Version value="0x00010002"/>
|
||||
<GlyphClassDef Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</GlyphClassDef>
|
||||
<MarkGlyphSetsDef>
|
||||
<MarkSetTableFormat value="1"/>
|
||||
<!-- MarkSetCount=4 -->
|
||||
<Coverage index="0" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="1" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="2" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="3" 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="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="2">
|
||||
<ScriptTag value="grek"/>
|
||||
<Script>
|
||||
<DefaultLangSys>
|
||||
<ReqFeatureIndex value="65535"/>
|
||||
<!-- FeatureCount=1 -->
|
||||
<FeatureIndex index="0" value="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="3">
|
||||
<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="kern"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="2"/>
|
||||
<LookupFlag value="8"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<PairPos index="0" Format="2">
|
||||
<Coverage Format="1">
|
||||
<Glyph value="A"/>
|
||||
<Glyph value="T"/>
|
||||
<Glyph value="Agrave"/>
|
||||
</Coverage>
|
||||
<ValueFormat1 value="4"/>
|
||||
<ValueFormat2 value="0"/>
|
||||
<ClassDef1 Format="1">
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</ClassDef1>
|
||||
<ClassDef2 Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="2"/>
|
||||
</ClassDef2>
|
||||
<!-- Class1Count=2 -->
|
||||
<!-- Class2Count=3 -->
|
||||
<Class1Record index="0">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="-70"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
<Class1Record index="1">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="-70"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="20"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
</PairPos>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GPOS>
|
||||
|
||||
<GSUB>
|
||||
<Version value="0x00010000"/>
|
||||
<ScriptList>
|
||||
<!-- ScriptCount=4 -->
|
||||
<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="latn"/>
|
||||
<Script>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
</ScriptList>
|
||||
<FeatureList>
|
||||
<!-- FeatureCount=0 -->
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=0 -->
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
</ttFont>
|
@ -0,0 +1,484 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" 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="grave"/>
|
||||
<GlyphID id="4" name="Agrave"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0xd9290bac"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 15 19:50:39 2016"/>
|
||||
<modified value="Tue May 21 16:23:19 2019"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="496"/>
|
||||
<yMax value="930"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1069"/>
|
||||
<descent value="-293"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="595"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="0"/>
|
||||
<xMaxExtent value="496"/>
|
||||
<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>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="5"/>
|
||||
<maxPoints value="19"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="32"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="2"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="577"/>
|
||||
<usWeightClass value="400"/>
|
||||
<usWidthClass value="2"/>
|
||||
<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="322"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="5"/>
|
||||
<bProportion value="2"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="5"/>
|
||||
<bArmStyle value="4"/>
|
||||
<bLetterForm value="2"/>
|
||||
<bMidline value="2"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11111111"/>
|
||||
<ulUnicodeRange2 value="01000000 00000000 00100000 00011111"/>
|
||||
<ulUnicodeRange3 value="00001000 00000000 00000000 00101001"/>
|
||||
<ulUnicodeRange4 value="00000000 00010000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000001 01000000"/>
|
||||
<usFirstCharIndex value="65"/>
|
||||
<usLastCharIndex value="192"/>
|
||||
<sTypoAscender value="1069"/>
|
||||
<sTypoDescender value="-293"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
<usWinAscent value="1069"/>
|
||||
<usWinDescent value="293"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000001 10011111"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="537"/>
|
||||
<sCapHeight value="714"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="4"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="595" lsb="85"/>
|
||||
<mtx name="A" width="450" lsb="0"/>
|
||||
<mtx name="Agrave" width="450" lsb="0"/>
|
||||
<mtx name="T" width="381" lsb="10"/>
|
||||
<mtx name="grave" width="266" lsb="40"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</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="85" yMin="0" xMax="496" yMax="714">
|
||||
<contour>
|
||||
<pt x="85" y="0" on="1" overlap="1"/>
|
||||
<pt x="85" y="714" on="1"/>
|
||||
<pt x="496" y="714" on="1"/>
|
||||
<pt x="496" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="136" y="51" on="1"/>
|
||||
<pt x="445" y="51" on="1"/>
|
||||
<pt x="445" y="663" on="1"/>
|
||||
<pt x="136" y="663" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="A" xMin="0" yMin="0" xMax="450" yMax="714">
|
||||
<contour>
|
||||
<pt x="361" y="0" on="1" overlap="1"/>
|
||||
<pt x="309" y="223" on="1"/>
|
||||
<pt x="142" y="223" on="1"/>
|
||||
<pt x="90" y="0" on="1"/>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="173" y="714" on="1"/>
|
||||
<pt x="274" y="714" on="1"/>
|
||||
<pt x="450" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="293" y="301" on="1"/>
|
||||
<pt x="240" y="535" on="1"/>
|
||||
<pt x="237" y="554" on="0"/>
|
||||
<pt x="230" y="589" on="0"/>
|
||||
<pt x="225" y="623" on="0"/>
|
||||
<pt x="223" y="638" on="1"/>
|
||||
<pt x="222" y="623" on="0"/>
|
||||
<pt x="217" y="589" on="0"/>
|
||||
<pt x="210" y="554" on="0"/>
|
||||
<pt x="206" y="536" on="1"/>
|
||||
<pt x="155" y="301" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="Agrave" xMin="0" yMin="0" xMax="450" yMax="930">
|
||||
<component glyphName="A" x="0" y="0" flags="0x604"/>
|
||||
<component glyphName="grave" x="32" y="164" flags="0x4"/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="T" xMin="10" yMin="0" xMax="370" yMax="714">
|
||||
<contour>
|
||||
<pt x="232" y="0" on="1" overlap="1"/>
|
||||
<pt x="148" y="0" on="1"/>
|
||||
<pt x="148" y="638" on="1"/>
|
||||
<pt x="10" y="638" on="1"/>
|
||||
<pt x="10" y="714" on="1"/>
|
||||
<pt x="370" y="714" on="1"/>
|
||||
<pt x="370" y="638" on="1"/>
|
||||
<pt x="232" y="638" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="grave" xMin="40" yMin="606" xMax="226" yMax="766">
|
||||
<contour>
|
||||
<pt x="137" y="766" on="1" overlap="1"/>
|
||||
<pt x="148" y="743" on="0"/>
|
||||
<pt x="179" y="688" on="0"/>
|
||||
<pt x="212" y="636" on="0"/>
|
||||
<pt x="226" y="617" on="1"/>
|
||||
<pt x="226" y="606" on="1"/>
|
||||
<pt x="174" y="606" on="1"/>
|
||||
<pt x="159" y="619" on="0"/>
|
||||
<pt x="121" y="657" on="0"/>
|
||||
<pt x="82" y="700" on="0"/>
|
||||
<pt x="50" y="741" on="0"/>
|
||||
<pt x="40" y="757" on="1"/>
|
||||
<pt x="40" y="766" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
|
||||
Designed by Monotype design team.
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
http://scripts.sil.org/OFL
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<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>
|
||||
|
||||
<GDEF>
|
||||
<Version value="0x00010002"/>
|
||||
<GlyphClassDef Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</GlyphClassDef>
|
||||
<MarkGlyphSetsDef>
|
||||
<MarkSetTableFormat value="1"/>
|
||||
<!-- MarkSetCount=4 -->
|
||||
<Coverage index="0" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="1" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="2" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="3" 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="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="2">
|
||||
<ScriptTag value="grek"/>
|
||||
<Script>
|
||||
<DefaultLangSys>
|
||||
<ReqFeatureIndex value="65535"/>
|
||||
<!-- FeatureCount=1 -->
|
||||
<FeatureIndex index="0" value="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="3">
|
||||
<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="kern"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="2"/>
|
||||
<LookupFlag value="8"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<PairPos index="0" Format="2">
|
||||
<Coverage Format="1">
|
||||
<Glyph value="A"/>
|
||||
<Glyph value="T"/>
|
||||
<Glyph value="Agrave"/>
|
||||
</Coverage>
|
||||
<ValueFormat1 value="4"/>
|
||||
<ValueFormat2 value="0"/>
|
||||
<ClassDef1 Format="1">
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</ClassDef1>
|
||||
<ClassDef2 Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="2"/>
|
||||
</ClassDef2>
|
||||
<!-- Class1Count=2 -->
|
||||
<!-- Class2Count=3 -->
|
||||
<Class1Record index="0">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="-17"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
<Class1Record index="1">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="-17"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="12"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
</PairPos>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GPOS>
|
||||
|
||||
<GSUB>
|
||||
<Version value="0x00010000"/>
|
||||
<ScriptList>
|
||||
<!-- ScriptCount=4 -->
|
||||
<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="latn"/>
|
||||
<Script>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
</ScriptList>
|
||||
<FeatureList>
|
||||
<!-- FeatureCount=0 -->
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=0 -->
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
</ttFont>
|
@ -0,0 +1,484 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" 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="grave"/>
|
||||
<GlyphID id="4" name="Agrave"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0xa514fda"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 15 19:50:39 2016"/>
|
||||
<modified value="Tue May 21 16:23:19 2019"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="726"/>
|
||||
<yMax value="927"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1069"/>
|
||||
<descent value="-293"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="726"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="0"/>
|
||||
<xMaxExtent value="726"/>
|
||||
<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>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="5"/>
|
||||
<maxPoints value="19"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="32"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="2"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="577"/>
|
||||
<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="332"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="5"/>
|
||||
<bProportion value="2"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="5"/>
|
||||
<bArmStyle value="4"/>
|
||||
<bLetterForm value="2"/>
|
||||
<bMidline value="2"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11111111"/>
|
||||
<ulUnicodeRange2 value="01000000 00000000 00100000 00011111"/>
|
||||
<ulUnicodeRange3 value="00001000 00000000 00000000 00101001"/>
|
||||
<ulUnicodeRange4 value="00000000 00010000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000001 01000000"/>
|
||||
<usFirstCharIndex value="65"/>
|
||||
<usLastCharIndex value="192"/>
|
||||
<sTypoAscender value="1069"/>
|
||||
<sTypoDescender value="-293"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
<usWinAscent value="1069"/>
|
||||
<usWinDescent value="293"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000001 10011111"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="553"/>
|
||||
<sCapHeight value="714"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="4"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="582" lsb="85"/>
|
||||
<mtx name="A" width="726" lsb="0"/>
|
||||
<mtx name="Agrave" width="726" lsb="0"/>
|
||||
<mtx name="T" width="591" lsb="25"/>
|
||||
<mtx name="grave" width="418" lsb="40"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</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="85" yMin="0" xMax="496" yMax="714">
|
||||
<contour>
|
||||
<pt x="85" y="0" on="1" overlap="1"/>
|
||||
<pt x="85" y="714" on="1"/>
|
||||
<pt x="496" y="714" on="1"/>
|
||||
<pt x="496" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="136" y="51" on="1"/>
|
||||
<pt x="445" y="51" on="1"/>
|
||||
<pt x="445" y="663" on="1"/>
|
||||
<pt x="136" y="663" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="A" xMin="0" yMin="0" xMax="726" yMax="717">
|
||||
<contour>
|
||||
<pt x="515" y="0" on="1" overlap="1"/>
|
||||
<pt x="480" y="134" on="1"/>
|
||||
<pt x="248" y="134" on="1"/>
|
||||
<pt x="212" y="0" on="1"/>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="233" y="717" on="1"/>
|
||||
<pt x="490" y="717" on="1"/>
|
||||
<pt x="726" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="440" y="292" on="1"/>
|
||||
<pt x="409" y="409" on="1"/>
|
||||
<pt x="404" y="428" on="0"/>
|
||||
<pt x="386" y="499" on="0"/>
|
||||
<pt x="368" y="575" on="0"/>
|
||||
<pt x="363" y="599" on="1"/>
|
||||
<pt x="359" y="575" on="0"/>
|
||||
<pt x="342" y="503" on="0"/>
|
||||
<pt x="325" y="433" on="0"/>
|
||||
<pt x="319" y="409" on="1"/>
|
||||
<pt x="288" y="292" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="Agrave" xMin="0" yMin="0" xMax="726" yMax="927">
|
||||
<component glyphName="A" x="0" y="0" flags="0x604"/>
|
||||
<component glyphName="grave" x="112" y="161" flags="0x4"/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="T" xMin="25" yMin="0" xMax="566" yMax="714">
|
||||
<contour>
|
||||
<pt x="392" y="0" on="1" overlap="1"/>
|
||||
<pt x="199" y="0" on="1"/>
|
||||
<pt x="199" y="556" on="1"/>
|
||||
<pt x="25" y="556" on="1"/>
|
||||
<pt x="25" y="714" on="1"/>
|
||||
<pt x="566" y="714" on="1"/>
|
||||
<pt x="566" y="556" on="1"/>
|
||||
<pt x="392" y="556" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="grave" xMin="40" yMin="606" xMax="378" yMax="766">
|
||||
<contour>
|
||||
<pt x="250" y="766" on="1" overlap="1"/>
|
||||
<pt x="267" y="744" on="0"/>
|
||||
<pt x="314" y="690" on="0"/>
|
||||
<pt x="362" y="639" on="0"/>
|
||||
<pt x="378" y="620" on="1"/>
|
||||
<pt x="378" y="606" on="1"/>
|
||||
<pt x="251" y="606" on="1"/>
|
||||
<pt x="231" y="619" on="0"/>
|
||||
<pt x="174" y="658" on="0"/>
|
||||
<pt x="113" y="701" on="0"/>
|
||||
<pt x="58" y="742" on="0"/>
|
||||
<pt x="40" y="756" on="1"/>
|
||||
<pt x="40" y="766" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
|
||||
Designed by Monotype design team.
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
http://scripts.sil.org/OFL
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<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>
|
||||
|
||||
<GDEF>
|
||||
<Version value="0x00010002"/>
|
||||
<GlyphClassDef Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</GlyphClassDef>
|
||||
<MarkGlyphSetsDef>
|
||||
<MarkSetTableFormat value="1"/>
|
||||
<!-- MarkSetCount=4 -->
|
||||
<Coverage index="0" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="1" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="2" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="3" 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="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="2">
|
||||
<ScriptTag value="grek"/>
|
||||
<Script>
|
||||
<DefaultLangSys>
|
||||
<ReqFeatureIndex value="65535"/>
|
||||
<!-- FeatureCount=1 -->
|
||||
<FeatureIndex index="0" value="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="3">
|
||||
<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="kern"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="2"/>
|
||||
<LookupFlag value="8"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<PairPos index="0" Format="2">
|
||||
<Coverage Format="1">
|
||||
<Glyph value="A"/>
|
||||
<Glyph value="T"/>
|
||||
<Glyph value="Agrave"/>
|
||||
</Coverage>
|
||||
<ValueFormat1 value="4"/>
|
||||
<ValueFormat2 value="0"/>
|
||||
<ClassDef1 Format="1">
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</ClassDef1>
|
||||
<ClassDef2 Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="2"/>
|
||||
</ClassDef2>
|
||||
<!-- Class1Count=2 -->
|
||||
<!-- Class2Count=3 -->
|
||||
<Class1Record index="0">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="-70"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
<Class1Record index="1">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="-70"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="20"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
</PairPos>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GPOS>
|
||||
|
||||
<GSUB>
|
||||
<Version value="0x00010000"/>
|
||||
<ScriptList>
|
||||
<!-- ScriptCount=4 -->
|
||||
<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="latn"/>
|
||||
<Script>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
</ScriptList>
|
||||
<FeatureList>
|
||||
<!-- FeatureCount=0 -->
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=0 -->
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
</ttFont>
|
@ -0,0 +1,484 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ttFont sfntVersion="\x00\x01\x00\x00" 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="grave"/>
|
||||
<GlyphID id="4" name="Agrave"/>
|
||||
</GlyphOrder>
|
||||
|
||||
<head>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="1.0"/>
|
||||
<fontRevision value="2.001"/>
|
||||
<checkSumAdjustment value="0xc8e8b846"/>
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
<flags value="00000000 00000011"/>
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Tue Mar 15 19:50:39 2016"/>
|
||||
<modified value="Tue May 21 16:23:19 2019"/>
|
||||
<xMin value="0"/>
|
||||
<yMin value="0"/>
|
||||
<xMax value="574"/>
|
||||
<yMax value="927"/>
|
||||
<macStyle value="00000000 00000000"/>
|
||||
<lowestRecPPEM value="6"/>
|
||||
<fontDirectionHint value="2"/>
|
||||
<indexToLocFormat value="0"/>
|
||||
<glyphDataFormat value="0"/>
|
||||
</head>
|
||||
|
||||
<hhea>
|
||||
<tableVersion value="0x00010000"/>
|
||||
<ascent value="1069"/>
|
||||
<descent value="-293"/>
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="582"/>
|
||||
<minLeftSideBearing value="0"/>
|
||||
<minRightSideBearing value="0"/>
|
||||
<xMaxExtent value="574"/>
|
||||
<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>
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
<tableVersion value="0x10000"/>
|
||||
<numGlyphs value="5"/>
|
||||
<maxPoints value="19"/>
|
||||
<maxContours value="2"/>
|
||||
<maxCompositePoints value="32"/>
|
||||
<maxCompositeContours value="3"/>
|
||||
<maxZones value="1"/>
|
||||
<maxTwilightPoints value="0"/>
|
||||
<maxStorage value="0"/>
|
||||
<maxFunctionDefs value="0"/>
|
||||
<maxInstructionDefs value="0"/>
|
||||
<maxStackElements value="0"/>
|
||||
<maxSizeOfInstructions value="0"/>
|
||||
<maxComponentElements value="2"/>
|
||||
<maxComponentDepth value="1"/>
|
||||
</maxp>
|
||||
|
||||
<OS_2>
|
||||
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
|
||||
will be recalculated by the compiler -->
|
||||
<version value="4"/>
|
||||
<xAvgCharWidth value="577"/>
|
||||
<usWeightClass value="900"/>
|
||||
<usWidthClass value="2"/>
|
||||
<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="332"/>
|
||||
<sFamilyClass value="0"/>
|
||||
<panose>
|
||||
<bFamilyType value="2"/>
|
||||
<bSerifStyle value="11"/>
|
||||
<bWeight value="5"/>
|
||||
<bProportion value="2"/>
|
||||
<bContrast value="4"/>
|
||||
<bStrokeVariation value="5"/>
|
||||
<bArmStyle value="4"/>
|
||||
<bLetterForm value="2"/>
|
||||
<bMidline value="2"/>
|
||||
<bXHeight value="4"/>
|
||||
</panose>
|
||||
<ulUnicodeRange1 value="11100000 00000000 00000010 11111111"/>
|
||||
<ulUnicodeRange2 value="01000000 00000000 00100000 00011111"/>
|
||||
<ulUnicodeRange3 value="00001000 00000000 00000000 00101001"/>
|
||||
<ulUnicodeRange4 value="00000000 00010000 00000000 00000000"/>
|
||||
<achVendID value="GOOG"/>
|
||||
<fsSelection value="00000001 01000000"/>
|
||||
<usFirstCharIndex value="65"/>
|
||||
<usLastCharIndex value="192"/>
|
||||
<sTypoAscender value="1069"/>
|
||||
<sTypoDescender value="-293"/>
|
||||
<sTypoLineGap value="0"/>
|
||||
<usWinAscent value="1069"/>
|
||||
<usWinDescent value="293"/>
|
||||
<ulCodePageRange1 value="00000000 00000000 00000001 10011111"/>
|
||||
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
|
||||
<sxHeight value="553"/>
|
||||
<sCapHeight value="714"/>
|
||||
<usDefaultChar value="0"/>
|
||||
<usBreakChar value="32"/>
|
||||
<usMaxContext value="4"/>
|
||||
</OS_2>
|
||||
|
||||
<hmtx>
|
||||
<mtx name=".notdef" width="582" lsb="85"/>
|
||||
<mtx name="A" width="574" lsb="0"/>
|
||||
<mtx name="Agrave" width="574" lsb="0"/>
|
||||
<mtx name="T" width="460" lsb="17"/>
|
||||
<mtx name="grave" width="340" lsb="40"/>
|
||||
</hmtx>
|
||||
|
||||
<cmap>
|
||||
<tableVersion version="0"/>
|
||||
<cmap_format_4 platformID="0" platEncID="3" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</cmap_format_4>
|
||||
<cmap_format_4 platformID="3" platEncID="1" language="0">
|
||||
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
|
||||
<map code="0x54" name="T"/><!-- LATIN CAPITAL LETTER T -->
|
||||
<map code="0xc0" name="Agrave"/><!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
</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="85" yMin="0" xMax="496" yMax="714">
|
||||
<contour>
|
||||
<pt x="85" y="0" on="1" overlap="1"/>
|
||||
<pt x="85" y="714" on="1"/>
|
||||
<pt x="496" y="714" on="1"/>
|
||||
<pt x="496" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="136" y="51" on="1"/>
|
||||
<pt x="445" y="51" on="1"/>
|
||||
<pt x="445" y="663" on="1"/>
|
||||
<pt x="136" y="663" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="A" xMin="0" yMin="0" xMax="574" yMax="714">
|
||||
<contour>
|
||||
<pt x="392" y="0" on="1" overlap="1"/>
|
||||
<pt x="365" y="139" on="1"/>
|
||||
<pt x="211" y="139" on="1"/>
|
||||
<pt x="184" y="0" on="1"/>
|
||||
<pt x="0" y="0" on="1"/>
|
||||
<pt x="174" y="714" on="1"/>
|
||||
<pt x="398" y="714" on="1"/>
|
||||
<pt x="574" y="0" on="1"/>
|
||||
</contour>
|
||||
<contour>
|
||||
<pt x="339" y="285" on="1"/>
|
||||
<pt x="310" y="445" on="1"/>
|
||||
<pt x="305" y="472" on="0"/>
|
||||
<pt x="297" y="522" on="0"/>
|
||||
<pt x="291" y="569" on="0"/>
|
||||
<pt x="288" y="589" on="1"/>
|
||||
<pt x="286" y="570" on="0"/>
|
||||
<pt x="280" y="524" on="0"/>
|
||||
<pt x="271" y="474" on="0"/>
|
||||
<pt x="266" y="447" on="1"/>
|
||||
<pt x="236" y="285" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="Agrave" xMin="0" yMin="0" xMax="574" yMax="927">
|
||||
<component glyphName="A" x="0" y="0" flags="0x604"/>
|
||||
<component glyphName="grave" x="83" y="161" flags="0x4"/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="T" xMin="17" yMin="0" xMax="443" yMax="714">
|
||||
<contour>
|
||||
<pt x="315" y="0" on="1" overlap="1"/>
|
||||
<pt x="146" y="0" on="1"/>
|
||||
<pt x="146" y="567" on="1"/>
|
||||
<pt x="17" y="567" on="1"/>
|
||||
<pt x="17" y="714" on="1"/>
|
||||
<pt x="443" y="714" on="1"/>
|
||||
<pt x="443" y="567" on="1"/>
|
||||
<pt x="315" y="567" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
<TTGlyph name="grave" xMin="40" yMin="606" xMax="300" yMax="766">
|
||||
<contour>
|
||||
<pt x="222" y="766" on="1" overlap="1"/>
|
||||
<pt x="231" y="747" on="0"/>
|
||||
<pt x="261" y="688" on="0"/>
|
||||
<pt x="291" y="634" on="0"/>
|
||||
<pt x="300" y="620" on="1"/>
|
||||
<pt x="300" y="606" on="1"/>
|
||||
<pt x="181" y="606" on="1"/>
|
||||
<pt x="169" y="617" on="0"/>
|
||||
<pt x="130" y="657" on="0"/>
|
||||
<pt x="87" y="703" on="0"/>
|
||||
<pt x="50" y="744" on="0"/>
|
||||
<pt x="40" y="756" on="1"/>
|
||||
<pt x="40" y="766" on="1"/>
|
||||
</contour>
|
||||
<instructions/>
|
||||
</TTGlyph>
|
||||
|
||||
</glyf>
|
||||
|
||||
<name>
|
||||
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
|
||||
Copyright 2015 Google Inc. All Rights Reserved.
|
||||
</namerecord>
|
||||
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans
|
||||
</namerecord>
|
||||
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
|
||||
Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
|
||||
2.001;GOOG;NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto Sans Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
|
||||
Version 2.001
|
||||
</namerecord>
|
||||
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
|
||||
NotoSans-Regular
|
||||
</namerecord>
|
||||
<namerecord nameID="7" platformID="3" platEncID="1" langID="0x409">
|
||||
Noto is a trademark of Google Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="8" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Imaging Inc.
|
||||
</namerecord>
|
||||
<namerecord nameID="9" platformID="3" platEncID="1" langID="0x409">
|
||||
Monotype Design Team
|
||||
</namerecord>
|
||||
<namerecord nameID="10" platformID="3" platEncID="1" langID="0x409">
|
||||
Designed by Monotype design team.
|
||||
</namerecord>
|
||||
<namerecord nameID="11" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.google.com/get/noto/
|
||||
</namerecord>
|
||||
<namerecord nameID="12" platformID="3" platEncID="1" langID="0x409">
|
||||
http://www.monotype.com/studio
|
||||
</namerecord>
|
||||
<namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. This Font Software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.
|
||||
</namerecord>
|
||||
<namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
|
||||
http://scripts.sil.org/OFL
|
||||
</namerecord>
|
||||
</name>
|
||||
|
||||
<post>
|
||||
<formatType value="2.0"/>
|
||||
<italicAngle value="0.0"/>
|
||||
<underlinePosition value="-100"/>
|
||||
<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>
|
||||
|
||||
<GDEF>
|
||||
<Version value="0x00010002"/>
|
||||
<GlyphClassDef Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</GlyphClassDef>
|
||||
<MarkGlyphSetsDef>
|
||||
<MarkSetTableFormat value="1"/>
|
||||
<!-- MarkSetCount=4 -->
|
||||
<Coverage index="0" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="1" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="2" Format="1">
|
||||
</Coverage>
|
||||
<Coverage index="3" 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="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="2">
|
||||
<ScriptTag value="grek"/>
|
||||
<Script>
|
||||
<DefaultLangSys>
|
||||
<ReqFeatureIndex value="65535"/>
|
||||
<!-- FeatureCount=1 -->
|
||||
<FeatureIndex index="0" value="0"/>
|
||||
</DefaultLangSys>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
<ScriptRecord index="3">
|
||||
<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="kern"/>
|
||||
<Feature>
|
||||
<!-- LookupCount=1 -->
|
||||
<LookupListIndex index="0" value="0"/>
|
||||
</Feature>
|
||||
</FeatureRecord>
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=1 -->
|
||||
<Lookup index="0">
|
||||
<LookupType value="2"/>
|
||||
<LookupFlag value="8"/>
|
||||
<!-- SubTableCount=1 -->
|
||||
<PairPos index="0" Format="2">
|
||||
<Coverage Format="1">
|
||||
<Glyph value="A"/>
|
||||
<Glyph value="T"/>
|
||||
<Glyph value="Agrave"/>
|
||||
</Coverage>
|
||||
<ValueFormat1 value="4"/>
|
||||
<ValueFormat2 value="0"/>
|
||||
<ClassDef1 Format="1">
|
||||
<ClassDef glyph="T" class="1"/>
|
||||
</ClassDef1>
|
||||
<ClassDef2 Format="1">
|
||||
<ClassDef glyph="A" class="1"/>
|
||||
<ClassDef glyph="Agrave" class="1"/>
|
||||
<ClassDef glyph="T" class="2"/>
|
||||
</ClassDef2>
|
||||
<!-- Class1Count=2 -->
|
||||
<!-- Class2Count=3 -->
|
||||
<Class1Record index="0">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="-17"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
<Class1Record index="1">
|
||||
<Class2Record index="0">
|
||||
<Value1 XAdvance="0"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="1">
|
||||
<Value1 XAdvance="-17"/>
|
||||
</Class2Record>
|
||||
<Class2Record index="2">
|
||||
<Value1 XAdvance="12"/>
|
||||
</Class2Record>
|
||||
</Class1Record>
|
||||
</PairPos>
|
||||
</Lookup>
|
||||
</LookupList>
|
||||
</GPOS>
|
||||
|
||||
<GSUB>
|
||||
<Version value="0x00010000"/>
|
||||
<ScriptList>
|
||||
<!-- ScriptCount=4 -->
|
||||
<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="latn"/>
|
||||
<Script>
|
||||
<!-- LangSysCount=0 -->
|
||||
</Script>
|
||||
</ScriptRecord>
|
||||
</ScriptList>
|
||||
<FeatureList>
|
||||
<!-- FeatureCount=0 -->
|
||||
</FeatureList>
|
||||
<LookupList>
|
||||
<!-- LookupCount=0 -->
|
||||
</LookupList>
|
||||
</GSUB>
|
||||
|
||||
</ttFont>
|
1406
Tests/varLib/instancer_test.py
Normal file
1406
Tests/varLib/instancer_test.py
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user