Merge pull request #1628 from fonttools/partial-instancer

add new varLib.instancer module
This commit is contained in:
Cosimo Lupo 2019-07-31 16:41:25 +01:00 committed by GitHub
commit cf612321d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 8818 additions and 155 deletions

View File

@ -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 = []

View File

@ -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

View File

@ -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,
return tv.decompileTupleVariationStore(
"gvar", axisTags,
tupleVariationCount, pointCount,
sharedTuples, data, 4, offsetToData)
sharedTuples, data, 4, offsetToData
)

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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,6 +903,7 @@ def merge(merger, self, lst):
instancer = merger.instancer
dev = self.DeviceTable
if merger.deleteVariations:
del self.DeviceTable
if dev:
assert dev.DeltaFormat == 0x8000
@ -916,6 +911,7 @@ def merge(merger, self, lst):
delta = otRound(instancer[varidx])
self.Coordinate += delta
if merger.deleteVariations:
self.Format = 1
@MutatorMerger.merger(ot.Anchor)
@ -933,6 +929,7 @@ def merge(merger, self, lst):
if not hasattr(self, tableName):
continue
dev = getattr(self, tableName)
if merger.deleteVariations:
delattr(self, tableName)
if dev is None:
continue
@ -944,6 +941,7 @@ def merge(merger, self, lst):
attr = v+'Coordinate'
setattr(self, attr, getattr(self, attr) + delta)
if merger.deleteVariations:
self.Format = 1
@MutatorMerger.merger(otBase.ValueRecord)
@ -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,6 +959,7 @@ def merge(merger, self, lst):
if not hasattr(self, tableName):
continue
dev = getattr(self, tableName)
if merger.deleteVariations:
delattr(self, tableName)
if dev is None:
continue

View File

@ -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.

View File

@ -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
View 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

View File

@ -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

View File

@ -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
# ---------------------------

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

File diff suppressed because it is too large Load Diff