diff --git a/.appveyor.yml b/.appveyor.yml index bdb414ffc..6d5aac78c 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -2,7 +2,7 @@ image: Visual Studio 2017 environment: global: - CIBW_SKIP: cp3* cp27-win_amd64 + CIBW_SKIP: cp33-* cp34-* cp35-* cp37-* cp27-win_amd64 cp36-win_amd64 CIBW_TEST_REQUIRES: pytest-cov codecov subprocess32 CIBW_TEST_COMMAND: cd {project} && pytest --cov -v && coverage combine && codecov && pip uninstall --yes afdko TWINE_USERNAME: afdko-travis diff --git a/.travis.yml b/.travis.yml index 7f31d9825..f4137a2d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: python env: global: - - CIBW_SKIP="cp3* *i686" + - CIBW_SKIP="cp34-* cp35-* cp37-* *i686" - CIBW_BEFORE_BUILD_LINUX="yum install -y glibc-devel.i386 libgcc_s.so.1" - CIBW_ENVIRONMENT_LINUX="CODECOV_TOKEN=e0067bac-3ded-4432-83c8-667217c76660" - CIBW_TEST_REQUIRES="pytest-cov codecov subprocess32" diff --git a/README.md b/README.md index 50db76bac..0a90ccf75 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,8 @@ path checks). Installation ------------ -The AFDKO requires [Python](http://www.python.org/download) 2.7.x. It -does not yet support Python 3.x. +The AFDKO requires [Python](http://www.python.org/download) 2.7.x. or +3.6.x. Releases are available on the [Python Package Index](https://pypi.python.org/pypi/afdko) (PyPI) and can be installed diff --git a/python/afdko/autohint.py b/python/afdko/autohint.py index f4a041819..821668e0d 100644 --- a/python/afdko/autohint.py +++ b/python/afdko/autohint.py @@ -5,7 +5,7 @@ """ __usage__ = """ -autohint AutoHinting program v1.51 Aug 4 2018 +autohint AutoHinting program v1.6 Aug 28 2018 autohint -h autohint -u autohint -hfd @@ -444,12 +444,12 @@ import re import time import tempfile +from fontTools.misc.py23 import open, tounicode from fontTools.ttLib import TTFont, getTableModule import plistlib import warnings +from afdko import fdkutils, ufotools from afdko.beztools import * -import afdko.fdkutils as fdkutils -import afdko.ufotools as ufotools import traceback import shutil @@ -485,19 +485,19 @@ def __init__(self): self.allowDecimalCoords = 0 self.writeToDefaultLayer = 0 -class ACOptionParseError(KeyError): +class ACOptionParseError(Exception): pass -class ACFontInfoParseError(KeyError): +class ACFontInfoParseError(Exception): pass -class ACFontError(KeyError): +class ACFontError(Exception): pass -class ACHintError(KeyError): +class ACHintError(Exception): pass -class FDKEnvironmentError(AttributeError): +class FDKEnvironmentError(Exception): pass def logMsg(*args): @@ -587,10 +587,11 @@ def expandNames(glyphName): return glyphName def parseGlyphListArg(glyphString): - glyphString = re.sub(r"[ \t\r\n,]+", ",", glyphString) - glyphList = glyphString.split(",") - glyphList = map(expandNames, glyphList) - glyphList = filter(None, glyphList) + glyphList = [] + for item in re.sub(r"[ \t\r\n,]+", ",", glyphString).split(","): + name = expandNames(item) + if name: + glyphList.append(name) return glyphList @@ -770,6 +771,7 @@ def getGlyphID(glyphTag, fontGlyphList): pass return glyphID + def getGlyphNames(glyphTag, fontGlyphList, fontFileName): glyphNameList = [] rangeList = glyphTag.split("-") @@ -793,6 +795,7 @@ def getGlyphNames(glyphTag, fontGlyphList, fontFileName): return glyphNameList + def filterGlyphList(options, fontGlyphList, fontFileName): # Return the list of glyphs which are in the intersection of the argument list and the glyphs in the font # Complain about glyphs in the argument list which are not in the font. @@ -806,12 +809,10 @@ def filterGlyphList(options, fontGlyphList, fontFileName): if glyphNames != None: glyphList.extend(glyphNames) if options.excludeGlyphList: - newList = filter(lambda name: name not in glyphList, fontGlyphList) - glyphList = newList + glyphList = [name for name in fontGlyphList if name not in glyphList[:]] return glyphList - def openFontPlistFile(psName, dirPath): # Find or create the plist file. This hold a Python dictionary in repr() form, # key: glyph name, value: outline point list @@ -918,7 +919,8 @@ def makeACIdentifier(bezText): bezText = whiteSpacePattern.sub("", bezText) return bezText -def openFile(path, outFilePath, useHashMap): + +def openFile(path, outFilePath=None, useHashMap=False): if os.path.isfile(path): font = openOpenTypeFile(path, outFilePath) else: @@ -927,6 +929,7 @@ def openFile(path, outFilePath, useHashMap): font = openUFOFile(path, outFilePath, useHashMap) return font + def openUFOFile(path, outFilePath, useHashMap): # Check if has glyphs/contents.plist contentsPath = os.path.join(path, "glyphs", "contents.plist") @@ -949,19 +952,19 @@ def openUFOFile(path, outFilePath, useHashMap): font.requiredHistory.append(ufotools.kCheckOutlineName) # Programs in this list must be run before autohint, if the outlines have been edited. return font + def openOpenTypeFile(path, outFilePath): # If input font is CFF or PS, build a dummy ttFont in memory.. # return ttFont, and flag if is a real OTF font Return flag is 0 if OTF, 1 if CFF, and 2 if PS/ fontType = 0 # OTF tempPathCFF = fdkutils.get_temp_file_path() try: - ff = open(path, "rb") - data = ff.read(10) - ff.close() + with open(path, "rb") as ff: + head = ff.read(4) except (IOError, OSError): logMsg("Failed to open and read font file %s." % path) - if data[:4] == b"OTTO": # it is an OTF font, can process file directly + if head == b"OTTO": # it is an OTF font, can process file directly try: ttFont = TTFont(path) except (IOError, OSError): @@ -975,16 +978,10 @@ def openOpenTypeFile(path, outFilePath): raise ACFontError("Error: font is not a CFF font <%s>." % fontFileName) else: - # It is not an OTF file. - if (data[0] == '\1') and (data[1] == '\0'): # CFF file + if head[0:2] == b'\x01\x00': # CFF file fontType = 1 tempPathCFF = path - elif not b"%" in data: - #not a PS file either - logMsg("Font file must be a PS, CFF or OTF fontfile: %s." % path) - raise ACFontError("Font file must be PS, CFF or OTF file: %s." % path) - else: # It is a PS file. Convert to CFF. fontType = 2 print("Converting Type1 font to temp CFF font file...") @@ -996,9 +993,8 @@ def openOpenTypeFile(path, outFilePath): raise ACFontError("Failed to convert PS font %s to a temp CFF font." % path) # now package the CFF font as an OTF font. - ff = open(tempPathCFF, "rb") - data = ff.read() - ff.close() + with open(tempPathCFF, "rb") as ff: + data = ff.read() try: ttFont = TTFont() cffModule = getTableModule('CFF ') @@ -1107,9 +1103,8 @@ def hintFile(options): if fdGlyphDict == None: fdDict = fontDictList[0] - fp = open(tempFI, "wt") - fp.write(fdDict.getFontInfo()) - fp.close() + with open(tempFI, "w") as fp: + fp.write(tounicode(fdDict.getFontInfo())) else: if not options.verbose: logMsg("Note: Using alternate FDDict global values from fontinfo file for some glyphs. Remove option '-q' to see which dict is used for which glyphs.") @@ -1172,9 +1167,8 @@ def hintFile(options): if not fdIndex == lastFDIndex: lastFDIndex = fdIndex fdDict = fontData.getFontInfo(psName, path, options.allow_no_blues, options.noFlex, options.vCounterGlyphs, options.hCounterGlyphs, fdIndex) - fp = open(tempFI, "wt") - fp.write(fdDict.getFontInfo()) - fp.close() + with open(tempFI, "w") as fp: + fp.write(tounicode(fdDict.getFontInfo())) else: if (fdGlyphDict != None): try: @@ -1185,9 +1179,8 @@ def hintFile(options): if lastFDIndex != fdIndex: lastFDIndex = fdIndex fdDict = fontDictList[fdIndex] - fp = open(tempFI, "wt") - fp.write(fdDict.getFontInfo()) - fp.close() + with open(tempFI, "w") as fp: + fp.write(tounicode(fdDict.getFontInfo())) # Build autohint point list identifier @@ -1227,9 +1220,8 @@ def hintFile(options): logMsg(".,") # Call auto-hint library on bez string. - bp = open(tempBez, "wt") - bp.write(bezString) - bp.close() + with open(tempBez, "wt") as bp: + bp.write(tounicode(bezString)) #print "oldBezString", oldBezString #print "" diff --git a/python/afdko/beztools.py b/python/afdko/beztools.py index 2a7512da4..722b7ca18 100644 --- a/python/afdko/beztools.py +++ b/python/afdko/beztools.py @@ -1,17 +1,8 @@ from __future__ import print_function import sys -if sys.version_info > (3,): - long = int -try: - from types import FloatType, StringType, LongType -except: - FloatType = float - StringType = str - LongType = int - """ -beztools.py v 1.13 July 11 2017 +beztools.py v 1.14 Aug 28 2018 Utilities for converting between T2 charstrings and the bez data format. Used by autohint and checkoutlines. @@ -22,9 +13,9 @@ import re import time import os -import afdko.fdkutils as fdkutils -import afdko.convertfonttocid as convertfonttocid +from afdko import fdkutils, convertfonttocid from fontTools.misc.psCharStrings import T2OutlineExtractor, SimpleT2Decompiler +from fontTools.misc.py23 import byteord, bytechr from fontTools.pens.basePen import BasePen debug = 0 def debugMsg(*args): @@ -33,16 +24,16 @@ def debugMsg(*args): kStackLimit = 46 kStemLimit = 96 -class ACFontError: +class ACFontError(Exception): pass -class SEACError(KeyError): +class SEACError(Exception): pass def hintOn( i, hintMaskBytes): # used to add the active hints to the bez string, when a T2 hintmask operator is encountered. - byteIndex = i/8 - byteValue = ord(hintMaskBytes[byteIndex]) + byteIndex = i // 8 + byteValue = byteord(hintMaskBytes[byteIndex]) offset = 7 - (i %8) return ((2**offset) & byteValue) > 0 @@ -154,7 +145,7 @@ def updateHints(self, args, hintList, bezCommand, writeHints = 1): return lastval = args[0] - if type(lastval) == LongType: + if isinstance(lastval, int): lastval = float(lastval)/0x10000 arg = str(lastval) + " 100 div" else: @@ -162,16 +153,16 @@ def updateHints(self, args, hintList, bezCommand, writeHints = 1): hintList.append(arg) self.bezProgram.append(arg) - for i in range(len(args))[1:]: + for i in list(range(len(args))[1:]): val = args[i] - if type(val) == LongType: + if isinstance(val, int): val = float(val)/0x10000 newVal = lastval + val lastval = newVal if i % 2: - if (type(val) == FloatType): - if (int(val) != val): + if isinstance(val, float): + if val % 1 != 0: arg = str(int(val*100)) + " 100 div" else: arg = str(int(val)) @@ -181,8 +172,8 @@ def updateHints(self, args, hintList, bezCommand, writeHints = 1): self.bezProgram.append(arg) self.bezProgram.append(bezCommand + "\n") else: - if (type(newVal) == FloatType): - if (int(newVal) != newVal): + if isinstance(newVal, float): + if newVal % 1 != 0: arg = str(int(newVal*100)) + " 100 div" else: arg = str(int(newVal)) @@ -221,12 +212,12 @@ def getCurHints(self, hintMaskBytes): curvhints = [] numhhints = len(self.hhints) - for i in range(numhhints/2): + for i in range(numhhints//2): if hintOn(i, hintMaskBytes): curhhints.extend(self.hhints[2*i:2*i+2]) numvhints = len(self.vhints) - for i in range(numvhints/2): - if hintOn(i + numhhints/2, hintMaskBytes): + for i in range(numvhints//2): + if hintOn(i + numhhints//2, hintMaskBytes): curvhints.extend(self.vhints[2*i:2*i+2]) return curhhints, curvhints @@ -237,14 +228,14 @@ def doMask(self, index, bezCommand): if args: self.vhints = [] self.updateHints(args, self.vhints, "ry") - self.hintMaskBytes = (self.hintCount + 7) / 8 + self.hintMaskBytes = (self.hintCount + 7) // 8 self.hintMaskString, index = self.callingStack[-1].getBytes(index, self.hintMaskBytes) if not self.removeHints: curhhints, curvhints = self.getCurHints( self.hintMaskString) strout = "" - mask = [strout + hex(ord(ch)) for ch in self.hintMaskString] + mask = [strout + hex(byteord(ch)) for ch in self.hintMaskString] debugMsg(bezCommand, mask, curhhints, curvhints, args) self.bezProgram.append("beginsubr snc\n") @@ -273,7 +264,7 @@ def op_cntrmask(self, index): def countHints(self, args): - self.hintCount = self.hintCount + len(args) / 2 + self.hintCount = self.hintCount + len(args) // 2 def convertT2GlyphToBez(t2CharString, removeHints = 0, allowDecimals = 0): # wrapper for T2ToBezExtractor which applies it to the supplied T2 charstring @@ -302,19 +293,19 @@ def maskByte(self, hHints, vHints): maskVal = 0 byteIndex = 0 self.byteLength = byteLength = int((7 + numHHints + numVHints)/8) - mask = "" + mask = b"" self.hList.sort() for hint in self.hList: try: i = hHints.index(hint) except ValueError: continue # we get here if some hints have been dropped because of the stack limit - newbyteIndex = (i/8) + newbyteIndex = (i//8) if newbyteIndex != byteIndex: - mask += chr(maskVal) + mask += bytechr(maskVal) byteIndex +=1 while byteIndex < newbyteIndex: - mask += "\0" + mask += b"\0" byteIndex +=1 maskVal = 0 maskVal += 2**(7 - (i %8)) @@ -325,21 +316,21 @@ def maskByte(self, hHints, vHints): i = numHHints + vHints.index(hint) except ValueError: continue # we get here if some hints have been dropped because of the stack limit - newbyteIndex = (i/8) + newbyteIndex = (i//8) if newbyteIndex != byteIndex: - mask += chr(maskVal) + mask += bytechr(maskVal) byteIndex +=1 while byteIndex < newbyteIndex: - mask += "\0" + mask += b"\0" byteIndex +=1 maskVal = 0 maskVal += 2**(7 - (i %8)) if maskVal: - mask += chr(maskVal) + mask += bytechr(maskVal) if len(mask) < byteLength: - mask += "\0"*(byteLength - len(mask)) + mask += b"\0"*(byteLength - len(mask)) self.mask = mask return mask @@ -354,11 +345,11 @@ def makeHintList(hints, needHintMasks, isH): continue pos1 = hint[0] pos = pos1 - lastPos - if (type(pos) == FloatType) and (int(pos) == pos): + if pos % 1 == 0: pos = int(pos) hintList.append(pos) pos2 = hint[1] - if (type(pos2) == FloatType) and (int(pos2) == pos2): + if pos2 % 1 == 0: pos2 = int(pos2) lastPos = pos1 + pos2 hintList.append(pos2) @@ -754,7 +745,7 @@ def needsDecryption(bezDataBuffer): LEN_IV = 4 #/* Length of initial random byte sequence */ def bezDecrypt(bezDataBuffer): - r = long(11586) + r = 11586 i = 0 # input buffer byte position index lenBuffer = len(bezDataBuffer) byteCnt = 0 # output buffer byte count. @@ -777,20 +768,20 @@ def bezDecrypt(bezDataBuffer): if not ch.islower(): ch = ch.lower() if ch.isdigit(): - ch = ord(ch) - ord('0') + ch = byteord(ch) - byteord('0') else: - ch = ord(ch) - ord('a') + 10 - cipher = (cipher << 4) & long(0xFFFF) + ch = byteord(ch) - byteord('a') + 10 + cipher = (cipher << 4) & 0xFFFF cipher = cipher | ch i += 1 plain = cipher ^ (r >> 8) - r = (cipher + r) * long(902381661) + long(341529579) - if r > long(0xFFFF): - r = r & long(0xFFFF) + r = (cipher + r) * 902381661 + 341529579 + if r > 0xFFFF: + r = r & 0xFFFF byteCnt +=1 if (byteCnt > LEN_IV): - newBuffer += chr(plain) + newBuffer += bytechr(plain) if i >= lenBuffer: break @@ -1186,7 +1177,7 @@ def saveChanges(self): overwriteOriginal = 0 if inputPath == outFilePath: overwriteOriginal = 1 - tempPath = inputPath + ".temp.ac" + tempPath = "{}.temp.ac".format(inputPath) if fontType == 0: # OTF if overwriteOriginal: @@ -1316,7 +1307,7 @@ def getFontInfo(self, fontPSName, inputPath, allow_no_blues, noFlex, vCounterGly blueValues.sort() for i in range(0, numBlueValues,2): blueValues[i] = blueValues[i] - blueValues[i+1] - blueValues = map(str, blueValues) + blueValues = [str(val) for val in blueValues] numBlueValues = min(numBlueValues, len(convertfonttocid.kOtherBlueValueKeys)) for i in range(numBlueValues): key = convertfonttocid.kOtherBlueValueKeys[i] @@ -1412,50 +1403,3 @@ def getfdInfo(self, fontPSName, inputPath, allow_no_blues, noFlex, vCounterGlyp else: convertfonttocid.mergeFDDicts( [finalFDict], topDict.Private ) return fdGlyphDict, fontDictList - -if __name__=='__main__': - import os - -def test(): - # Test program. Takes first argument font file path, optional second argument = glyph name. - # use form "cid0769" for CID keys references. - from fontTools.ttLib import TTFont - path = sys.argv[1] - ttFont = TTFont(path) - if len(sys.argv) > 2: - glyphNames = sys.argv[2:] - else: - glyphNames = ttFont.getGlyphOrder() - cffTable = ttFont["CFF "] - topDict = cffTable.cff.topDictIndex[0] - charStrings = topDict.CharStrings - removeHints = 0 - - for glyphName in glyphNames: - print('') - print(glyphName) - t2CharString = charStrings[glyphName] - bezString, hasHints, t2Width = convertT2GlyphToBez(t2CharString, removeHints) - #print bezString - t2Program = convertBezToT2(bezString) - if t2Width != None: - t2Program.insert(0,t2Width) - - #print len(t2Program), ("t2Program",t2Program) - -def test2(): - # Test program. Takes first argument = bez path, writes t2 string. - # use form "cid0769" for CID keys references. - from fontTools.ttLib import TTFont - path = sys.argv[1] - fp = open(path, "rt") - bezString = fp.read() - fp.close() - if needsDecryption(bezString): - bezString = bezDecrypt(bezString) - - t2Program = convertBezToT2(bezString) - - -if __name__=='__main__': - test2() diff --git a/python/afdko/buildcff2vf.py b/python/afdko/buildcff2vf.py index 5a3cd5766..455282c65 100644 --- a/python/afdko/buildcff2vf.py +++ b/python/afdko/buildcff2vf.py @@ -3,7 +3,7 @@ from __future__ import print_function, division, absolute_import __usage__ = """ -buildcff2vf.py 1.13.4 Feb 07 2018 +buildcff2vf.py 1.14 Aug 28 2018 Build a variable font from a designspace file and the UFO master source fonts. python buildcff2vf.py -h @@ -49,6 +49,7 @@ import sys from fontTools import varLib, version as fontToolsVersion +from fontTools.misc.py23 import tobytes from fontTools.ttLib import TTFont, newTable from fontTools.cffLib import (VarStoreData, buildOpcodeDict, privateDictOperators) @@ -916,7 +917,7 @@ def addSTATTable(varFont, varFontPath): print("Note: Generating simple STAT table from 'fvar' table in " "'%s'." % (statPath)) fvar = varFont["fvar"] - xmlSTATData = makeSTAT(fvar) + xmlSTATData = tobytes(makeSTAT(fvar)) statFile = io.BytesIO(xmlSTATData) varFont.importXML(statFile) varFont.saveXML(statPath, tables=["STAT"]) diff --git a/python/afdko/buildmasterotfs.py b/python/afdko/buildmasterotfs.py index d2a6a22ad..4a34d5aca 100644 --- a/python/afdko/buildmasterotfs.py +++ b/python/afdko/buildmasterotfs.py @@ -4,13 +4,16 @@ import os import shutil -import subprocess import sys import tempfile +from fontTools.misc.py23 import tounicode + import defcon from mutatorMath.ufo.document import DesignSpaceDocumentReader +from afdko.fdkutils import runShellCmd + try: import xml.etree.cElementTree as ET except ImportError: @@ -24,7 +27,7 @@ kFeaturesFile = "features.fea" __usage__ = """ -buildmasterotfs.py 1.7.2 Feb 01 2018 +buildmasterotfs.py 1.8.0 Aug 28 2018 Build master source OpenType/CFF fonts from a Superpolator design space file and the UFO master source fonts. @@ -59,19 +62,6 @@ """ -def runShellCmd(cmd): - try: - p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, - stderr=subprocess.STDOUT).stdout - log = p.read() - return log - except OSError: - import traceback - msg = "Error executing command '%s'. %s" % (cmd, traceback.print_exc()) - print(msg) - return "" - - def compatibilizePaths(otfPath): tempPathCFF = otfPath + ".temp.cff" command = "tx -cff +b -std -no_opt \"%s\" \"%s\" 2>&1" % (otfPath, @@ -158,9 +148,8 @@ def buildTempDesignSpace(dsPath): instance.attrib['postscriptfontname'] = ufo_info.postscriptFontName instances.append(instance) tempDSPath = os.path.splitext(dsPath)[0] + kTempDSExt - fp = open(tempDSPath, "wt") - fp.write(xmlToString(ds)) - fp.close() + with open(tempDSPath, "w") as fp: + fp.write(tounicode(xmlToString(ds))) return tempDSPath, master_paths diff --git a/python/afdko/checkoutlinesufo.py b/python/afdko/checkoutlinesufo.py old mode 100755 new mode 100644 index 061104d71..4ed07f923 --- a/python/afdko/checkoutlinesufo.py +++ b/python/afdko/checkoutlinesufo.py @@ -6,9 +6,10 @@ from __future__ import print_function, absolute_import -__version__ = '2.1.0' +__version__ = '2.2.0' import argparse +from functools import cmp_to_key import hashlib import os import re @@ -23,9 +24,7 @@ from fontPens.digestPointPen import DigestPointPen from afdko import ufotools -# noinspection PyPep8Naming from afdko.ufotools import kProcessedGlyphsLayer as PROCD_GLYPHS_LAYER -# noinspection PyPep8Naming from afdko.ufotools import kProcessedGlyphsLayerName as PROCD_GLYPHS_LAYER_NAME @@ -538,7 +537,6 @@ def get_digest(digest_glyph): return digest -# noinspection PyProtectedMember def remove_coincident_points(bool_glyph, changed, msg): """ Remove coincident points. # a point is (segment_type, pt, smooth, name). @@ -574,7 +572,6 @@ def remove_coincident_points(bool_glyph, changed, msg): return changed, msg -# noinspection PyProtectedMember def remove_tiny_sub_paths(bool_glyph, min_area, msg): """ Removes tiny subpaths that are created by overlap removal when the start @@ -664,7 +661,6 @@ def is_colinear_line(b3, b2, b1, tolerance=0): return True -# noinspection PyProtectedMember def remove_flat_curves(new_glyph, changed, msg, options): """ Remove flat curves. # a point is (segment_type, pt, smooth, name). @@ -703,7 +699,6 @@ def remove_flat_curves(new_glyph, changed, msg, options): return changed, msg -# noinspection PyProtectedMember def remove_colinear_lines(new_glyph, changed, msg, options): """ Remove colinear line- curves. # a point is (segment_type, pt, smooth, name). @@ -739,7 +734,6 @@ def remove_colinear_lines(new_glyph, changed, msg, options): return changed, msg -# noinspection PyProtectedMember def split_touching_paths(new_glyph): """ This hack fixes a design difference between the Adobe checkoutlines logic and booleanGlyph, and is used only when comparing the two. With @@ -801,8 +795,7 @@ def split_touching_paths(new_glyph): def round_point(pt): - pt = map(int, pt) - return pt + return int(pt[0]), int(pt[1]) def do_overlap_removal(bool_glyph, changed, msg, options): @@ -814,9 +807,8 @@ def do_overlap_removal(bool_glyph, changed, msg, options): # I need to fix these in the source, or the old vs new digests will differ, # as BooleanOperations removes these even if it does not do overlap # removal. - old_digest = list(get_digest(bool_glyph)) - old_digest.sort() - old_digest = map(round_point, old_digest) + old_digest = sorted(get_digest(bool_glyph)) + old_digest = [round_point(pt) for pt in old_digest] new_digest = [] prev_digest = old_digest new_glyph = bool_glyph @@ -830,11 +822,10 @@ def do_overlap_removal(bool_glyph, changed, msg, options): # haven't yet looked. prev_digest = new_digest new_glyph = new_glyph.removeOverlap() - new_digest = list(get_digest(new_glyph)) - new_digest.sort() + new_digest = sorted(get_digest(new_glyph)) # The new path points sometimes come back with very small # fractional parts to to rounding issues. - new_digest = map(round_point, new_digest) + new_digest = [round_point(pt) for pt in new_digest] # Can't use change in path number to see if something has changed # - overlap removal can add and subtract paths. @@ -922,7 +913,7 @@ def restore_contour_order(fixed_glyph, original_contours): new_contours = list(fixed_glyph) if len(new_contours) > 1: - new_contours.sort(sort_contours) + new_contours.sort(key=cmp_to_key(sort_contours)) else: set_max_p(new_contours[0]) new_index_list = range(len(new_contours)) @@ -935,8 +926,7 @@ def restore_contour_order(fixed_glyph, original_contours): # This will fix the order of the contours that have not been touched. num_contours = len(new_list) if num_contours > 0: # If the new contours aren't already all matched.. - new_index_list = range(num_contours) - for i in new_index_list: + for i in range(num_contours): ci, contour = new_list[i] for j in old_index_list: ci2, old_contour = old_list[j] @@ -949,12 +939,11 @@ def restore_contour_order(fixed_glyph, original_contours): new_list[i] = None break - new_list = filter(lambda entry: entry is not None, new_list) + new_list = [item for item in new_list if item] num_contours = len(new_list) # Check each extreme for a match. if num_contours > 0: - new_index_list = range(num_contours) - for i in new_index_list: + for i in range(num_contours): ci, contour = new_list[i] max_p = contour.maxP # Now search the old contour list. @@ -970,11 +959,10 @@ def restore_contour_order(fixed_glyph, original_contours): matched = True # See if we can set the start point in the new contour # to match the old one. - if not ((old_contour[0].x == contour[0].x) - and (old_contour[0].y == contour[0].y)): + if not ((old_contour[0].x == contour[0].x) and + (old_contour[0].y == contour[0].y)): old_start_point = old_contour[0] - for pi in range(len(contour)): - point = contour[pi] + for pi, point in enumerate(contour): if (point.x == old_start_point.x) \ and (point.y == old_start_point.y) \ and point.segmentType is not None: @@ -983,7 +971,7 @@ def restore_contour_order(fixed_glyph, original_contours): break if matched: break - new_list = filter(lambda entry: entry is not None, new_list) + new_list = [item for item in new_list if item] num_contours = len(new_list) # If the algorithm didn't work for some contours, diff --git a/python/afdko/comparefamily.py b/python/afdko/comparefamily.py index e8d184a3d..14e6e98ed 100644 --- a/python/afdko/comparefamily.py +++ b/python/afdko/comparefamily.py @@ -1,13 +1,14 @@ -#!/public/bin/python # comparefamily.py # This is not code to copy . The original developer did not know Python well, # and had odd ideas about design. However, it works. +from __future__ import print_function, absolute_import + __copyright__ = """Copyright 2015 Adobe Systems Incorporated (http://www.adobe.com/). All Rights Reserved. """ __usage__ = """ -comparefamily 2.0.53 May 2 2017 +comparefamily 2.1.0 Aug 28 2018 comparefamily [u] -h] [-d ] [-tolerance ] -rm] [-rn] [-rp] [-nohints] [-l] [-rf] [-st n1,..] [-ft n1,..] where 'n1' stands for the number of a test, such as "-st 26" to run Single Test 26. @@ -86,14 +87,15 @@ import sys import os -import string import struct -import os import re import copy import math -import fdkutils + from fontTools import ttLib +from fontTools.misc.py23 import tounicode, byteord + +from afdko import fdkutils gDesignSpaceTolerance = 0 # don't complain about metrics differences greater than this amount. @@ -678,12 +680,12 @@ def readGlyphInfo(cmpfFont): report = fdkutils.runShellCmd(command) metrics = re.findall(r"glyph\S+\s+{([^,]+),[^,]+,([^,]+),{([-0-9]+),([-0-9]+),([-0-9]+),([-0-9]+)}}", report) if not metrics: - print "Error: Quitting. Could not run 'tx' against the font %s to get font metrics." % (cmpfFont.path) - print "\t tx log output <" + report + ">." + print("Error: Quitting. Could not run 'tx' against the font %s to get font metrics." % cmpfFont.path) + print("\t tx log output <" + report + ">.") sys.exit(0) cmpfFont.metricsDict = {} for entry in metrics: - valList = map(lambda val: eval(val), entry[1:]) + valList = [eval(val) for val in entry[1:]] cmpfFont.metricsDict[entry[0]] = valList # use spot to get ligature defintions. command = "spot -t GSUB=7 \"%s\" 2>&1" % (cmpfFont.path) @@ -738,91 +740,6 @@ def readCFFTable(cmpfFont): cmpfFont.isCID = 0 cmpfFont.FDArray = [first_font_topDict] -# Empty structure for font info, to be filled later in the program. - -# For Mac only, to prompt user for Directory name. -def GetMacDirectoryName(): - import macfs - fsspec, ok = macfs.GetDirectory('Select a file in the target directory:') - if not ok: - return None - pathname = fsspec.as_pathname() - return pathname - -# Interactive mode for input options instead of command line arguments. -def interact(): - global directory, nreport, mreport, preport - - if os.name == 'mac': - directory = GetMacDirectoryName() - else: - directory = raw_input("Directory Name? ") - inp = string.upper(raw_input('Print font name report?(Y/N)')) - if inp[0] == 'Y': - nreport = 1 - inp = string.upper(raw_input('Print metrics report?(Y/N)')) - if inp[0] == 'Y': - mreport = 1 - inp = string.upper(raw_input('Print panose report?(Y/N)')) - if inp[0] == 'Y': - preport = 1 - - - - -# Routines converting string to long, shorts and fixed binary value. -# If the OS is 'nt', swap the word and byte order before converting. - -# For unsigned long integer -def ulong_value(str): - if os.name == 'nt': - str1 = str[3] + str[2] + str[1] + str[0] - str = str1 - return struct.unpack('L', str)[0] - -# For signed short integer -def short_value(str): - if os.name == 'nt': - str1 = str[1] + str[0] - str = str1 - return struct.unpack('h', str)[0] - -# For unsigned short integer -def ushort_value(str): - if os.name == 'nt': - str1 = str[1] + str[0] - str = str1 - return struct.unpack('H', str)[0] - -# Fixed value is composed of two words, an integer and a decimal in 1/65536 unit. -def fixed_value(str): - integer = short_value(str[0:2]) - decimal = ushort_value(str[2:4]) - return integer + decimal / 65536.0 - -# convert unicode string to ascii string, value above 127 will be escaped. -def uni2asc(str0): - try: - newStr = str(str0) - except: - newStr = "" - for uniChar in str0: - try: - newStr += str(uniChar) - except: - newStr += "0u/" + str(ord(uniChar)) - return newStr - -def upperascii_to_hex(str0): - str1 = "" - for i in range(len(str0)): - chrCode=ord(str0[i]) - if (chrCode > 127) or (chrCode < 32): - str1 = str1 + "\\" + hex(chrCode)[2:] - else: - str1 = str1 + str0[i] - return str1 - # sorting routines for reports @@ -938,122 +855,122 @@ def readNameTable(cmpfFont): if cmpfFont.hasMacNames: # Fill in font info with Mac Names from Mac Platform, Roman Encoding, English Language try: - cmpfFont.PostScriptName1 = cmpfFont.nameIDDict[(1, 0, 0, 6)] + cmpfFont.PostScriptName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 6)].decode('mac_roman')) except KeyError: - print " Error: Missing Mac Postcriptname from name table! Should be in record", (1, 0, 0, 6) + print(" Error: Missing Mac Postcriptname from name table! Should be in record", (1, 0, 0, 6)) cmpfFont.PostScriptName1 = "" try: - cmpfFont.compatibleFamilyName1 = cmpfFont.nameIDDict[(1, 0, 0, 1)] + cmpfFont.compatibleFamilyName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 1)].decode('mac_roman')) except KeyError: - print " Error: Missing Mac Compatible Family Name from name table! Should be in record", (1, 0, 0, 1) , cmpfFont.PostScriptName1 + print(" Error: Missing Mac Compatible Family Name from name table! Should be in record", (1, 0, 0, 1) , cmpfFont.PostScriptName1) cmpfFont.compatibleFamilyName1 = "" try: - cmpfFont.compatibleSubFamilyName1 = cmpfFont.nameIDDict[(1, 0, 0, 2)] + cmpfFont.compatibleSubFamilyName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 2)].decode('mac_roman')) except KeyError: - print " Error: Missing Mac Compatible SubFamily Name from name table! Should be in record", (1, 0, 0, 2), cmpfFont.PostScriptName1 + print(" Error: Missing Mac Compatible SubFamily Name from name table! Should be in record", (1, 0, 0, 2), cmpfFont.PostScriptName1) cmpfFont.compatibleSubFamilyName1 = "" - if cmpfFont.nameIDDict.has_key((1, 0, 0, 16)): - cmpfFont.preferredFamilyName1 = cmpfFont.nameIDDict[(1, 0, 0, 16)] + if (1, 0, 0, 16) in cmpfFont.nameIDDict: + cmpfFont.preferredFamilyName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 16)].decode('mac_roman')) else: cmpfFont.preferredFamilyName1 = cmpfFont.compatibleFamilyName1 - if cmpfFont.nameIDDict.has_key((1, 0, 0, 17)): - cmpfFont.preferredSubFamilyName1 = cmpfFont.nameIDDict[(1, 0, 0, 17)] + if (1, 0, 0, 17) in cmpfFont.nameIDDict: + cmpfFont.preferredSubFamilyName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 17)].decode('mac_roman')) else: - cmpfFont.preferredSubFamilyName1 = cmpfFont.compatibleSubFamilyName1 + cmpfFont.preferredSubFamilyName1 = cmpfFont.compatibleSubFamilyName1 try: - cmpfFont.FullFontName1 = cmpfFont.nameIDDict[(1, 0, 0, 4)] + cmpfFont.FullFontName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 4)].decode('mac_roman')) except KeyError: - print " Error: Missing Mac Full Font Name from name table! Should be in record", (1, 0, 0, 4), cmpfFont.PostScriptName1 + print(" Error: Missing Mac Full Font Name from name table! Should be in record", (1, 0, 0, 4), cmpfFont.PostScriptName1) cmpfFont.FullFontName1 = "" try: - cmpfFont.VersionStr1 = cmpfFont.nameIDDict[(1, 0, 0, 5)] + cmpfFont.VersionStr1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 5)].decode('mac_roman')) except KeyError: - print " Warning: Missing Mac Version String from name table! Should be in record", (1, 0, 0, 5), cmpfFont.PostScriptName1 + print(" Warning: Missing Mac Version String from name table! Should be in record", (1, 0, 0, 5), cmpfFont.PostScriptName1) cmpfFont.VersionStr1 = "" try: - cmpfFont.copyrightStr1 = cmpfFont.nameIDDict[(1, 0, 0, 0)] + cmpfFont.copyrightStr1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 0)].decode('mac_roman')) except KeyError: - print " Error: Missing Mac Copyright String from name table! Should be in record", (1, 0, 0, 0), cmpfFont.PostScriptName1 + print(" Error: Missing Mac Copyright String from name table! Should be in record", (1, 0, 0, 0), cmpfFont.PostScriptName1) cmpfFont.copyrightStr1 = "" try: - cmpfFont.trademarkStr1 = cmpfFont.nameIDDict[(1, 0, 0, 7)] + cmpfFont.trademarkStr1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 7)].decode('mac_roman')) except KeyError: - print " Error: Missing Mac Trademark String from name table! Should be in record", (1, 0, 0, 7), cmpfFont.PostScriptName1 + print(" Error: Missing Mac Trademark String from name table! Should be in record", (1, 0, 0, 7), cmpfFont.PostScriptName1) cmpfFont.trademarkStr1 = "" try: - temp = cmpfFont.nameIDDict[(1, 0, 0, 14)] + tounicode(cmpfFont.nameIDDict[(1, 0, 0, 14)].decode('mac_roman')) except KeyError: - print " Warning: Missing Mac platform License Notice URL from name table! Should be in record", (1, 0, 0, 14) + print(" Warning: Missing Mac platform License Notice URL from name table! Should be in record", (1, 0, 0, 14)) - if cmpfFont.nameIDDict.has_key((1, 0, 0, 18)): - cmpfFont.MacCompatibleFullName1 = cmpfFont.nameIDDict[(1, 0, 0, 18)] + if (1, 0, 0, 18) in cmpfFont.nameIDDict: + cmpfFont.MacCompatibleFullName1 = tounicode(cmpfFont.nameIDDict[(1, 0, 0, 18)].decode('mac_roman')) else: cmpfFont.MacCompatibleFullName1 = cmpfFont.FullFontName1 # Fill in font info with Win Names from Win Platform, Unicode Encoding, English Language try: - cmpfFont.PostScriptName3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 6)], "utf_16_be")) + cmpfFont.PostScriptName3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 6)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows PostScript Name/Unicode encoding from name table! Should be in record", (3, 1, 1033, 6), cmpfFont.PostScriptName3 + print(" Error: Missing Windows PostScript Name/Unicode encoding from name table! Should be in record", (3, 1, 1033, 6), cmpfFont.PostScriptName3) cmpfFont.PostScriptName3 = "" try: - cmpfFont.compatibleFamilyName3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 1)], "utf_16_be")) + cmpfFont.compatibleFamilyName3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 1)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows Compatible Family Name/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 1), cmpfFont.PostScriptName3 + print(" Error: Missing Windows Compatible Family Name/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 1), cmpfFont.PostScriptName3) cmpfFont.compatibleFamilyName3 = "" - if cmpfFont.nameIDDict.has_key((3, 1, 1033, 16)): - cmpfFont.preferredFamilyName3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 16)], "utf_16_be")) + if (3, 1, 1033, 16) in cmpfFont.nameIDDict: + cmpfFont.preferredFamilyName3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 16)].decode('utf_16_be')) else: cmpfFont.preferredFamilyName3 = cmpfFont.compatibleFamilyName3 try: - cmpfFont.compatibleSubFamilyName3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 2)], "utf_16_be")) + cmpfFont.compatibleSubFamilyName3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 2)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows Compatible SubFamily Name/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 2), cmpfFont.PostScriptName3 + print(" Error: Missing Windows Compatible SubFamily Name/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 2), cmpfFont.PostScriptName3) cmpfFont.compatibleSubFamilyName3 = "" - if cmpfFont.nameIDDict.has_key((3, 1, 1033, 17)): - cmpfFont.preferredSubFamilyName3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 17)], "utf_16_be")) + if (3, 1, 1033, 17) in cmpfFont.nameIDDict: + cmpfFont.preferredSubFamilyName3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 17)].decode('utf_16_be')) else: - cmpfFont.preferredSubFamilyName3 = cmpfFont.compatibleSubFamilyName3 + cmpfFont.preferredSubFamilyName3 = cmpfFont.compatibleSubFamilyName3 try: - cmpfFont.FullFontName3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 4)], "utf_16_be")) + cmpfFont.FullFontName3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 4)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows Full Family Name/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 4), cmpfFont.PostScriptName3 + print(" Error: Missing Windows Full Family Name/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 4), cmpfFont.PostScriptName3) cmpfFont.FullFontName3 = "" try: - cmpfFont.VersionStr3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 5)], "utf_16_be")) + cmpfFont.VersionStr3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 5)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows Version String/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 5), cmpfFont.PostScriptName3 + print(" Error: Missing Windows Version String/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 5), cmpfFont.PostScriptName3) cmpfFont.VersionStr3 = "" try: - cmpfFont.copyrightStr3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 0)], "utf_16_be")) + cmpfFont.copyrightStr3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 0)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows Copyright String/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 0), cmpfFont.PostScriptName3 + print(" Error: Missing Windows Copyright String/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 0), cmpfFont.PostScriptName3) cmpfFont.copyrightStr3 = "" try: - cmpfFont.trademarkStr3 = uni2asc(unicode(cmpfFont.nameIDDict[(3, 1, 1033, 7)], "utf_16_be")) + cmpfFont.trademarkStr3 = tounicode(cmpfFont.nameIDDict[(3, 1, 1033, 7)].decode('utf_16_be')) except KeyError: - print " Error: Missing Windows Trademark String/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 7), cmpfFont.PostScriptName3 + print(" Error: Missing Windows Trademark String/Unicode encoding String from name table! Should be in record", (3, 1, 1033, 7), cmpfFont.PostScriptName3) cmpfFont.trademarkStr3 = "" if not cmpfFont.hasMacNames: @@ -1071,19 +988,19 @@ def readNameTable(cmpfFont): # Complain if preferred font name has preferred subfamily name, or std styles in name. styleList = [cmpfFont.preferredSubFamilyName1] + [ "Regular", "Bold", "Italic", "Bold Italic"] for style in styleList: - stylePat = " " + style + " " + stylePat = " %s " % format(style) if stylePat in cmpfFont.preferredFamilyName1: - print " Error: Preferred family name '%s' contains the style name '%s'. This is usually confusing to users. %s" % (cmpfFont.preferredFamilyName1, style, cmpfFont.PostScriptName1) + print(" Error: Preferred family name '%s' contains the style name '%s'. This is usually confusing to users. %s" % (cmpfFont.preferredFamilyName1, style, cmpfFont.PostScriptName1)) try: temp = cmpfFont.nameIDDict[(3, 1, 1033, 14)] except KeyError: - print " Warning: Missing Windows License Notice URL from name table! Should be in record", (3, 1, 1033, 14) + print(" Warning: Missing Windows License Notice URL from name table! Should be in record", (3, 1, 1033, 14)) try: temp = cmpfFont.nameIDDict[(3, 1, 1033, 8)] except KeyError: - print " Warning: Missing Windows Manufacturer from name table! Should be in record", (3, 1, 1033, 8) + print(" Warning: Missing Windows Manufacturer from name table! Should be in record", (3, 1, 1033, 8)) # Fill in font info with values from OS/2 table @@ -1143,7 +1060,7 @@ def readOS2Table(cmpfFont): os2table.panose.bMidline, os2table.panose.bXHeight ] except KeyError: - print " Error! No OS/2 table!", cmpfFont.PostScriptName1 + print(" Error! No OS/2 table!", cmpfFont.PostScriptName1) headTable = cmpfFont.ttFont['head'] cmpfFont.avgCharWidth = -1 cmpfFont.usWeightClass = -1 @@ -1173,7 +1090,7 @@ def readpostTable(cmpfFont): cmpfFont.underlineThickness = postTable.underlineThickness cmpfFont.isFixedPitch = postTable.isFixedPitch except KeyError: - print " Error! No post table!", cmpfFont.PostScriptName1 + print(" Error! No post table!", cmpfFont.PostScriptName1) cmpfFont.italicAngle = -1 cmpfFont.underlinePos = -1 cmpfFont.underlineThickness = -1 @@ -1228,7 +1145,7 @@ def handle_resource_file(path): res = Carbon.Res.Get1IndResource('sfnt', i) resid, restype, resname = res.GetResInfo() if not resname: - resname = filename + `i` + resname = filename + i tt = ttLib.TTFont(path, i) finally: Carbon.Res.CloseResFile(resref) @@ -1237,17 +1154,16 @@ def handle_resource_file(path): def guessfiletype(path): try: - f = open(path, "rb") - data = f.read(512) - f.close() + with open(path, "rb") as f: + data = f.read(512) except (IOError, OSError): - print "Unable to check file type of file %s. Skipping." % (path) + print("Unable to check file type of file %s. Skipping." % (path)) return "unknown" if not data or len(data) < 512: return "unknown" - if data[:4] in ("\000\001\000\000", "OTTO", "true", 0x00010000): + if data[:4] in (b"\000\001\000\000", b"OTTO", b"true", 0x00010000): return "datafork" elif os.name=='mac': # assume res fork font @@ -1283,7 +1199,7 @@ def build_fontlist_from_dir(directory): # get all files in the directory dirlist = os.listdir(directory) except OSError: - print "No files found in the directory", directory + print("No files found in the directory", directory) return [] fontlist = [] @@ -1318,38 +1234,38 @@ def build_fontlist_from_dir(directory): fontlist.append(cmpfFont) if not fontlist: - print "No TrueType or OpenType files found in the directory. ", directory + print("No TrueType or OpenType files found in the directory. ", directory) return None def doSingleTest1(): global fontlist - print "\nSingle Face Test 1: Length overrun check for name ID 18. Max 63 characters, must be unique within 31 chars." + print("\nSingle Face Test 1: Length overrun check for name ID 18. Max 63 characters, must be unique within 31 chars.") reporter1_fontname = [] reporter1_failedvalue = [] nameDict = {} for font in fontlist: if font.MacCompatibleFullName1: key = font.MacCompatibleFullName1[:32] - if nameDict.has_key(key): + if key in nameDict: nameDict[key].append(font.PostScriptName1) - print " Error: The first 32 chars of the Mac platform name ID 18 Compatible Full Name must be unique within Preferred Family Name group. name: '%s'. Conflicting fonts: %s." % (font.MacCompatibleFullName1, nameDict[key]) + print(" Error: The first 32 chars of the Mac platform name ID 18 Compatible Full Name must be unique within Preferred Family Name group. name: '%s'. Conflicting fonts: %s." % (font.MacCompatibleFullName1, nameDict[key])) else: nameDict[key] = [font.PostScriptName1] if len(font.MacCompatibleFullName1) > 63: reporter1_fontname.append(font.PostScriptName1) reporter1_failedvalue.append(len(font.MacCompatibleFullName1)) for i in range(len(reporter1_fontname)): - print " Error: Name ID 18, Mac-compatible full name, is", - print reporter1_failedvalue[i], "characters for Font", reporter1_fontname[i] + print(" Error: Name ID 18, Mac-compatible full name, is", end=' ') + print(reporter1_failedvalue[i], "characters for Font", reporter1_fontname[i]) def doSingleTest2(): global fontlist - print "\nSingle Face Test 2: Length overrun check for name ID's 1,2, 4, 16, 17. Max 63 characters." + print("\nSingle Face Test 2: Length overrun check for name ID's 1,2, 4, 16, 17. Max 63 characters.") reporter1_fontname = [] reporter1_failedvalue = [] reporter2_fontname = [] @@ -1368,9 +1284,9 @@ def doSingleTest2(): if (len(font.compatibleSubFamilyName3) > 63): reporter2_fontname.append(font.PostScriptName1) reporter2_failedvalue.append(len(font.compatibleSubFamilyName3)) - if nameDict.has_key(font.FullFontName1): + if font.FullFontName1 in nameDict: nameDict[font.FullFontName1].append(font.PostScriptName1) - print " Error: The Mac platform name ID 4 Preferred Full Name must be unique within Preferred Family Name group. name: '%s'. Conflicting fonts: %s." % (nameDict[font.FullFontName1][0], nameDict[font.FullFontName1][-1]) + print(" Error: The Mac platform name ID 4 Preferred Full Name must be unique within Preferred Family Name group. name: '%s'. Conflicting fonts: %s." % (nameDict[font.FullFontName1][0], nameDict[font.FullFontName1][-1])) else: nameDict[font.FullFontName1] = [font.FullFontName1] if (len(font.FullFontName1) > 63): @@ -1383,168 +1299,168 @@ def doSingleTest2(): reporter5_fontname.append(font.PostScriptName1) reporter5_failedvalue.append(len(font.preferredSubFamilyName3)) for i in range(len(reporter1_fontname)): - print " Error: Name ID 1, Font compatible family name, is", - print reporter1_failedvalue[i], "characters for Font", reporter1_fontname[i] + print(" Error: Name ID 1, Font compatible family name, is", end='') + print(reporter1_failedvalue[i], "characters for Font", reporter1_fontname[i]) for i in range(len(reporter2_fontname)): - print " Error: Name ID 2, Font compatible subfamily name, is", - print reporter2_failedvalue[i], "characters for Font", reporter2_fontname[i] + print(" Error: Name ID 2, Font compatible subfamily name, is", end='') + print(reporter2_failedvalue[i], "characters for Font", reporter2_fontname[i]) for i in range(len(reporter3_fontname)): - print " Error: Name ID 4, full font name, is", - print reporter3_failedvalue[i], "characters for Font", reporter3_fontname[i] + print(" Error: Name ID 4, full font name, is", end='') + print(reporter3_failedvalue[i], "characters for Font", reporter3_fontname[i]) for i in range(len(reporter4_fontname)): - print " Error: Name ID 16, preferred family name, is", - print reporter4_failedvalue[i], "characters for Font", reporter4_fontname[i] + print(" Error: Name ID 16, preferred family name, is", end='') + print(reporter4_failedvalue[i], "characters for Font", reporter4_fontname[i]) for i in range(len(reporter5_fontname)): - print " Error: Name ID 17, preferred subfamily name, is", - print reporter5_failedvalue[i], "characters for Font", reporter5_fontname[i] + print(" Error: Name ID 17, preferred subfamily name, is", end='') + print(reporter5_failedvalue[i], "characters for Font", reporter5_fontname[i]) def doSingleTest3(): - print "\nSingle Face Test 3: Check that name ID 4 (Full Name) starts with same string as Preferred Family Name, and is the same as the CFF font Full Name." + print("\nSingle Face Test 3: Check that name ID 4 (Full Name) starts with same string as Preferred Family Name, and is the same as the CFF font Full Name.") for font in fontlist: if not font.FullFontName1.startswith(font.preferredFamilyName1): - print " Error: Mac platform Full Name name id 4) '%s' does not begin with the string used for font Preferred Family Name, '%s', for Font %s." % (font.FullFontName1, font.preferredFamilyName1, font.PostScriptName1) + print(" Error: Mac platform Full Name name id 4) '%s' does not begin with the string used for font Preferred Family Name, '%s', for Font %s." % (font.FullFontName1, font.preferredFamilyName1, font.PostScriptName1)) - if font.ttFont.has_key('CFF '): + if 'CFF ' in font.ttFont: try: cffFullName = font.topDict.FullName if (font.FullFontName1 != cffFullName): - print " Warning: Mac platform Full Name name id 4) '%s' is not the same as the font CFF table Full Name, '%s', for Font %s." % (font.FullFontName1, font.topDict.FullName, font.PostScriptName1) - print "This has no functional effect, as the CFF Full Name in an OpenType CFF table is never used. However, having different values for different copies of the same field and cause confusion when using font development tools." + print(" Warning: Mac platform Full Name name id 4) '%s' is not the same as the font CFF table Full Name, '%s', for Font %s." % (font.FullFontName1, font.topDict.FullName, font.PostScriptName1)) + print("This has no functional effect, as the CFF Full Name in an OpenType CFF table is never used. However, having different values for different copies of the same field and cause confusion when using font development tools.") except AttributeError: - print "Note: font CFF table has no Full Name entry, for Font %s." % (font.PostScriptName1) - print "This has no functional effect, as the CFF Full Name in an OpenType CFF table is never used." + print("Note: font CFF table has no Full Name entry, for Font %s." % (font.PostScriptName1)) + print("This has no functional effect, as the CFF Full Name in an OpenType CFF table is never used.") def doSingleTest4(): global fontlist - print "\nSingle Face Test 4: Version name string matches release font criteria and head table value" + print("\nSingle Face Test 4: Version name string matches release font criteria and head table value") for font in fontlist: - if string.find(font.VersionStr1, "Development") != -1: - print " Warning: Version string contains the word 'Development' for Font", font.PostScriptName1 + if font.VersionStr1.find("Development") != -1: + print(" Warning: Version string contains the word 'Development' for Font", font.PostScriptName1) for font in fontlist: versionMatch = re.search(r"(Version|OTF)\s+(\d+\.(\d+))", font.VersionStr1) if not versionMatch: - print " Error: could not find a valid decimal font version with the prefix 'Version ' or 'OTF ' in the name table name ID 5 'Version' string: %s, for Font %s." % (font.VersionStr1, font.PostScriptName1) + print(" Error: could not find a valid decimal font version with the prefix 'Version ' or 'OTF ' in the name table name ID 5 'Version' string: %s, for Font %s." % (font.VersionStr1, font.PostScriptName1)) continue if len(versionMatch.group(3)) != 3: - print " Error: Version string does not have 3 decimal places in the name table name ID 5 'Version' string: %s, for Font %s." % (font.VersionStr1, font.PostScriptName1) + print(" Error: Version string does not have 3 decimal places in the name table name ID 5 'Version' string: %s, for Font %s." % (font.VersionStr1, font.PostScriptName1)) continue ver = eval(versionMatch.group(2)) if ver <= 1.0: - print " Warning: Version string is not greater than 1.0000 for Font", font.PostScriptName1 + print(" Warning: Version string is not greater than 1.0000 for Font", font.PostScriptName1) if ver != font.OTFVersion: - print"Error: font version %.3f in name table name ID 5 'Version' string does not match the head table fontRevision value %.3f, for font %s." % (ver, font.OTFVersion, font.PostScriptName1) + print("Error: font version %.3f in name table name ID 5 'Version' string does not match the head table fontRevision value %.3f, for font %s." % (ver, font.OTFVersion, font.PostScriptName1)) def doSingleTest5(): global fontlist - print "\nSingle Face Test 5: Check that CFF PostScript name is same as name table name ID 6." + print("\nSingle Face Test 5: Check that CFF PostScript name is same as name table name ID 6.") for font in fontlist: - if font.ttFont.has_key('CFF '): + if 'CFF ' in font.ttFont: cffPSName = font.ttFont['CFF '].cff.fontNames[0] if cffPSName != font.PostScriptName1: - print " Error: Postscript name in CFF table '%s' is not the same as name table Macintosh name ID 6 '%s'." % (cffPSName, font.PostScriptName1) + print(" Error: Postscript name in CFF table '%s' is not the same as name table Macintosh name ID 6 '%s'." % (cffPSName, font.PostScriptName1)) if font.PostScriptName3 != font.PostScriptName1: - print " Error: Windows name table name id 6 '%s' is not the same as Macintosh name ID 6 '%s'." % (font.PostScriptName3, font.PostScriptName1) + print(" Error: Windows name table name id 6 '%s' is not the same as Macintosh name ID 6 '%s'." % (font.PostScriptName3, font.PostScriptName1)) def doSingleTest6(): global fontlist - print "\nSingle Face Test 6: Check that Copyright, Trademark, Designer note, and foundry values are present, and match default values." + print("\nSingle Face Test 6: Check that Copyright, Trademark, Designer note, and foundry values are present, and match default values.") try: defaultURL = os.environ["CF_DEFAULT_URL"] except KeyError: - print " Error: Environment variable CF_DEFAULT_URL is not set, so I can't compare it to Mac Foundry URL name id 11." + print(" Error: Environment variable CF_DEFAULT_URL is not set, so I can't compare it to Mac Foundry URL name id 11.") defaultURL = None try: defaultFoundryCode= os.environ["CF_DEFAULT_FOUNDRY_CODE"] except KeyError: - print " Error: Environment variable CF_DEFAULT_FOUNDRY_CODE is not set, so I can't compare it to the OS/2 table foundry code." + print(" Error: Environment variable CF_DEFAULT_FOUNDRY_CODE is not set, so I can't compare it to the OS/2 table foundry code.") defaultFoundryCode = None for font in fontlist: # verify that there is no patent number in the copyright. if font.copyrightStr1 and re.search("[ \t,]\d\d\d,*\d\d\d[ \t.,]", font.copyrightStr1): - print " Error: There is a patent number in the copyright string. Please check.", font.PostScriptName1 + print(" Error: There is a patent number in the copyright string. Please check.", font.PostScriptName1) # Missing Copyright and Trademark strings are actually already reported in the function Read Nmae Table - if not font.nameIDDict.has_key((1, 0, 0, 9)): - print " Error: Missing Mac Designer Note name id 9 from name table! Should be in record", (1, 0, 0, 9), font.PostScriptName1 - if not font.nameIDDict.has_key((3, 1, 1033, 9)): - print " Error: Missing Windows Designer Note name id 9 from name table! Should be in record", (3, 1, 1033, 9), font.PostScriptName1 - if not font.nameIDDict.has_key((1, 0, 0, 11)): - print " Error: Missing Mac Foundry URL name id 11 from name table! Should be in record", (1, 0, 0, 11), font.PostScriptName1 + if (1, 0, 0, 9) not in font.nameIDDict: + print(" Error: Missing Mac Designer Note name id 9 from name table! Should be in record", (1, 0, 0, 9), font.PostScriptName1) + if (3, 1, 1033, 9) not in font.nameIDDict: + print(" Error: Missing Windows Designer Note name id 9 from name table! Should be in record", (3, 1, 1033, 9), font.PostScriptName1) + if (1, 0, 0, 11) not in font.nameIDDict: + print(" Error: Missing Mac Foundry URL name id 11 from name table! Should be in record", (1, 0, 0, 11), font.PostScriptName1) else: foundryURL = font.nameIDDict[(1, 0, 0, 11)] if defaultURL and (defaultURL != foundryURL): - print " Error: Mac Foundry URL name id 11 '%s' is not the same as the default URL set by the environment variable CF_DEFAULT_URL '%s' for font %s." % (defaultURL, foundryURL, font.PostScriptName1) + print(" Error: Mac Foundry URL name id 11 '%s' is not the same as the default URL set by the environment variable CF_DEFAULT_URL '%s' for font %s." % (defaultURL, foundryURL, font.PostScriptName1)) - if not font.nameIDDict.has_key((3, 1, 1033, 11)): - print " Error: Missing Windows Foundry URL name id 11 from name table! Should be in record", (3, 1, 1033, 11), font.PostScriptName1 + if (3, 1, 1033, 11) not in font.nameIDDict: + print(" Error: Missing Windows Foundry URL name id 11 from name table! Should be in record", (3, 1, 1033, 11), font.PostScriptName1) if defaultFoundryCode and (defaultFoundryCode != font.achVendID): - print " Error: OS/2 table foundry code '%s' is not the same as the default code set by the environment variable CF_DEFAULT_FOUNDRY_CODE '%s' for font %s." % (font.achVendID, defaultFoundryCode, font.PostScriptName1) + print(" Error: OS/2 table foundry code '%s' is not the same as the default code set by the environment variable CF_DEFAULT_FOUNDRY_CODE '%s' for font %s." % (font.achVendID, defaultFoundryCode, font.PostScriptName1)) def doSingleTest7(): global fontlist - print "\nSingle Face Test 7: Checking for deprecated CFF operators." + print("\nSingle Face Test 7: Checking for deprecated CFF operators.") for font in fontlist: - if not font.ttFont.has_key('CFF '): + if 'CFF ' not in font.ttFont: continue command = "tx -dump -5 -n \"%s\" 2>&1" % (font.path) report = fdkutils.runShellCmd(command) glyphList = re.findall(r"glyph[^{]+?\{([^,]+),[^[\]]+\sdotsection\s", report) if glyphList: glyphList = ", ".join(glyphList) - print "Error: font contains deprecated dotsection perator. These should be removed. %s. %s" % (font.PostScriptName1, glyphList) + print("Error: font contains deprecated dotsection perator. These should be removed. %s. %s" % (font.PostScriptName1, glyphList)) glyphList = re.findall(r"glyph[^{]+?\{([^,]+),[^[\]]+\sseac\s", report) if glyphList: glyphList = ", ".join(glyphList) - print "Error: font contains deprecated seac operator. These composite glyphs must be decomposed. %s. %s" % (font.PostScriptName1, glyphList) + print("Error: font contains deprecated seac operator. These composite glyphs must be decomposed. %s. %s" % (font.PostScriptName1, glyphList)) def doSingleTest8(): global fontlist - print "\nSingle Face Test 8: Check SubFamily Name (name ID 2) for Regular Style, Bold Style, Italic Style, and BoldItalic Style" + print("\nSingle Face Test 8: Check SubFamily Name (name ID 2) for Regular Style, Bold Style, Italic Style, and BoldItalic Style") if not fontlist[0].compatibleSubFamilyName3: - print "Skipping test - Windows Unicode SubFamily name does not exist.", fontlist[0].PostScriptName1 + print("Skipping test - Windows Unicode SubFamily name does not exist.", fontlist[0].PostScriptName1) return for font in fontlist: if font.isBold == 0 and font.isItalic == 0: if font.compatibleSubFamilyName3 != "Regular": #Unicode String - print " Warning: Style bit not set, Compatible SubFamily Name with Win Platform is not 'Regular' for Font", font.PostScriptName3 + print(" Warning: Style bit not set, Compatible SubFamily Name with Win Platform is not 'Regular' for Font", font.PostScriptName3) elif font.isBold and font.isItalic == 0: if font.compatibleSubFamilyName3 != "Bold": #Unicode String - print " Warning: Only Bold style bit set, Compatible SubFamily Name with Win Platform is not 'Bold' for Font", font.PostScriptName3 + print(" Warning: Only Bold style bit set, Compatible SubFamily Name with Win Platform is not 'Bold' for Font", font.PostScriptName3) elif font.isBold == 0 and font.isItalic: if font.compatibleSubFamilyName3 != "Italic": #Unicode String - print " Warning: Only Italic style bit set, Compatible SubFamily Name with Win Platform is not 'Italic' for Font", font.PostScriptName3 + print(" Warning: Only Italic style bit set, Compatible SubFamily Name with Win Platform is not 'Italic' for Font", font.PostScriptName3) elif font.isBold and font.isItalic: if font.compatibleSubFamilyName3 != "Bold Italic" and font.compatibleSubFamilyName3 != "Bold Italic": - print " Warning: Both Bold and Italic style bits set, Compatible SubFamily Name with Win Platform is not 'Bold Italic' for Font", font.PostScriptName3 - print "It is", font.compatibleSubFamilyName3 + print(" Warning: Both Bold and Italic style bits set, Compatible SubFamily Name with Win Platform is not 'Bold Italic' for Font", font.PostScriptName3) + print("It is", font.compatibleSubFamilyName3) def doSingleTest9(): global fontlist - print "\nSingle Face Test 9: Check that no OS/2.usWeightClass is less than 250" + print("\nSingle Face Test 9: Check that no OS/2.usWeightClass is less than 250") if fontlist[0].usWeightClass == -1: - print "Skipping test - OS/2 table does not exist.", fontlist[0].PostScriptName1 + print("Skipping test - OS/2 table does not exist.", fontlist[0].PostScriptName1) return for font in fontlist: if font.usWeightClass < 250: - print " Error: OS/2.usWeightClass is", font.usWeightClass, "for Font", font.PostScriptName1, "\nThis may cause the font glyphs to be smear-bolded under Windows 2000." + print(" Error: OS/2.usWeightClass is", font.usWeightClass, "for Font", font.PostScriptName1, "\nThis may cause the font glyphs to be smear-bolded under Windows 2000.") def doSingleTest10(): global fontlist - print "\nSingle Face Test 10: Check that no Bold Style face has OS/2.usWeightClass of less than 500" + print("\nSingle Face Test 10: Check that no Bold Style face has OS/2.usWeightClass of less than 500") if fontlist[0].usWeightClass == -1: - print "Skipping test - OS/2 table does not exist.", fontlist[0].PostScriptName1 + print("Skipping test - OS/2 table does not exist.", fontlist[0].PostScriptName1) return baseFont = None boldFont = None @@ -1552,25 +1468,25 @@ def doSingleTest10(): if font.isBold: boldFont = font if font.usWeightClass < 500: - print " Error: OS/2.usWeightClass is", font.usWeightClass, "and Bold bit is set for Font", font.PostScriptName1 + print(" Error: OS/2.usWeightClass is", font.usWeightClass, "and Bold bit is set for Font", font.PostScriptName1) # warn if bold font has ForceBold set. if not font.isTTF: #is CFF for fontDict in font.FDArray: try: if fontDict.Private.ForceBold: - print "Warning: Font has ForceBold field. This is harmless, but is deprecated.", font.PostScriptName1 + print("Warning: Font has ForceBold field. This is harmless, but is deprecated.", font.PostScriptName1) except KeyError: pass def doSingleTest11(): global fontlist - print "\nSingle Face Test 11: Check that BASE table exists, and has reasonable values" + print("\nSingle Face Test 11: Check that BASE table exists, and has reasonable values") for font in fontlist: try: baseTable = font.ttFont['BASE'] except KeyError: - print " Error: font %s does not have a BASE table. This is necessary for users who are editing in a different script than the font is designed for." % (font.PostScriptName1) + print(" Error: font %s does not have a BASE table. This is necessary for users who are editing in a different script than the font is designed for." % (font.PostScriptName1)) return try: baseDict = {} @@ -1579,44 +1495,44 @@ def doSingleTest11(): if not hasattr(axisRecord, 'BaseTagList'): continue if not axisRecord.BaseScriptList.BaseScriptCount == len(axisRecord.BaseScriptList.BaseScriptRecord): - print " Error: bad BASE table: %s.BaseScriptList.BaseScriptCount is not equal to the number of records in the list %s.BaseScriptList.BaseScriptRecord. %s." % (axisName, axisName, font.PostScriptName1) + print(" Error: bad BASE table: %s.BaseScriptList.BaseScriptCount is not equal to the number of records in the list %s.BaseScriptList.BaseScriptRecord. %s." % (axisName, axisName, font.PostScriptName1)) return if not axisRecord.BaseTagList.BaseTagCount == len(axisRecord.BaseTagList.BaselineTag): - print " Error: bad BASE table: %s.BaseTagList.BaseTagCount is not equal to the number of tags in the list %s.BaseTagList.BaselineTag. %s." % (axisName, axisName, font.PostScriptName1) + print(" Error: bad BASE table: %s.BaseTagList.BaseTagCount is not equal to the number of tags in the list %s.BaseTagList.BaselineTag. %s." % (axisName, axisName, font.PostScriptName1)) return for tag in axisRecord.BaseTagList.BaselineTag: if not tag in kKnownBaseTags: - print " Error: Base table tag '%s' not in list of registered BASE table tags. %s." % (tag, font.PostScriptName1) + print(" Error: Base table tag '%s' not in list of registered BASE table tags. %s." % (tag, font.PostScriptName1)) baseDict[axisName] = {} for baseRecord in axisRecord.BaseScriptList.BaseScriptRecord: baseValues = baseRecord.BaseScript.BaseValues if not baseValues.BaseCoordCount == axisRecord.BaseTagList.BaseTagCount: - print " Error: bad BASE table: %s.BaseTagList.BaseTagCount is not equal to %s.BaseScriptList.BaseScriptRecord.BaseScript.BaseValues.BaseCoordCount. %s." % (axisName, axisName, font.PostScriptName1) + print(" Error: bad BASE table: %s.BaseTagList.BaseTagCount is not equal to %s.BaseScriptList.BaseScriptRecord.BaseScript.BaseValues.BaseCoordCount. %s." % (axisName, axisName, font.PostScriptName1)) return if not (axisRecord.BaseTagList.BaseTagCount == len(axisRecord.BaseTagList.BaselineTag)): - print " Error: bad BASE table: number of records in list %s.BaseScriptList.BaseScriptRecord.BaseScript.BaseValues.BaseCoord is not equal to %s.BaseScriptList.BaseScriptRecord.BaseScript.BaseValues.BaseCoordCount. %s." % (axisName, axisName, font.PostScriptName1) + print(" Error: bad BASE table: number of records in list %s.BaseScriptList.BaseScriptRecord.BaseScript.BaseValues.BaseCoord is not equal to %s.BaseScriptList.BaseScriptRecord.BaseScript.BaseValues.BaseCoordCount. %s." % (axisName, axisName, font.PostScriptName1)) return defaultIndex = baseValues.DefaultIndex coords = {} scriptTag = baseRecord.BaseScriptTag if not scriptTag in kKnownScriptTags: - print " Error: Base table script tag '%s' not in list of registered script tags. %s." % (scriptTag, font.PostScriptName1) + print(" Error: Base table script tag '%s' not in list of registered script tags. %s." % (scriptTag, font.PostScriptName1)) baseDict[axisName][scriptTag] = coords for i in range(axisRecord.BaseTagList.BaseTagCount ): tag = axisRecord.BaseTagList.BaselineTag[i] coord = baseValues.BaseCoord[i].Coordinate coords[tag] = coord if (defaultIndex == i) and (coord != 0): - print "\tWarning: default BASE table offset for script '%s', tag '%s' is non-zero (%s) for the default font BASE tag. %s." % (scriptTag, tag, coord, font.PostScriptName1) + print("\tWarning: default BASE table offset for script '%s', tag '%s' is non-zero (%s) for the default font BASE tag. %s." % (scriptTag, tag, coord, font.PostScriptName1)) elif tag == 'ideo': calculatedValue = -(font.unitsPerEm - font.sCapHeight)/2 diff = abs(coord - calculatedValue) if diff > gDesignSpaceTolerance: - print "\tWarning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script '%s', tag '%s' should be '%s' rather than '%s'. %s." % (scriptTag, tag, calculatedValue, coord, font.PostScriptName1) + print("\tWarning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script '%s', tag '%s' should be '%s' rather than '%s'. %s." % (scriptTag, tag, calculatedValue, coord, font.PostScriptName1)) #else: - # print "\tGood values calculatedValue %s , coord %s,font.sCapHeight %s " % (calculatedValue, coord, font.sCapHeight) - except AttributeError,e : - print " Error: I don't understand this BASE table: Could be bad BASE table, probably this programis out of date or incomplete. %s." % (font.PostScriptName1) + # print("\tGood values calculatedValue %s , coord %s,font.sCapHeight %s " % (calculatedValue, coord, font.sCapHeight)) + except AttributeError as e: + print(" Error: I don't understand this BASE table: Could be bad BASE table, probably this programis out of date or incomplete. %s." % (font.PostScriptName1)) return def getItalicAngle(fontPath): @@ -1626,11 +1542,12 @@ def getItalicAngle(fontPath): command = "tx -bc -z 1000 -g %s \"%s\" 2>&1" % (gname, fontPath) report = fdkutils.runShellCmd(command) scanLines = re.findall(r"([ .#]+)(-*\d+)", report) - testLines = filter(lambda line: "#" in line[0], scanLines) + testLines = [ln for ln in scanLines if not ln.startswith('#')] + if not testLines: continue numLines = len(scanLines) - oneThird = numLines/3 + oneThird = numLines//3 twothird = oneThird*2 topX = scanLines[oneThird][0].find("#") @@ -1654,45 +1571,44 @@ def getItalicAngle(fontPath): for angle in angleList: avgAngle += angle**2 avgAngle = (avgAngle / len(angleList))**0.5 - diffList = map(lambda angle: (abs(avgAngle-angle), angle), angleList) - diffList.sort() + diffList = sorted(map(lambda angle: (abs(avgAngle-angle), angle), angleList)) angle = diffList[0][1] return int(0.5 + angle) def doSingleTest12(): global fontlist - print "\nSingle Face Test 12: Check that Italic style is set when post table italic angle is non-zero, and that italic angle is reasonable." + print("\nSingle Face Test 12: Check that Italic style is set when post table italic angle is non-zero, and that italic angle is reasonable.") if fontlist[0].italicAngle == -1: - print "Skipping test - post table does not exist.", fontlist[0].PostScriptName1 + print("Skipping test - post table does not exist.", fontlist[0].PostScriptName1) return for font in fontlist: if font.isItalic and (abs(font.italicAngle) <= 4): - print "\tWarning: Italic style bit is set, but Italic Angle '%s' is a smaller italic angle than -4 for Font %s." % (font.italicAngle, font.PostScriptName1) + print("\tWarning: Italic style bit is set, but Italic Angle '%s' is a smaller italic angle than -4 for Font %s." % (font.italicAngle, font.PostScriptName1)) if (font.italicAngle > 0.0): - print "\tWarning: Italic Angle '%s' is greater than zero. Is it really supposed to be leaning to the left, rather than the right? %s." % (font.italicAngle, font.PostScriptName1) + print("\tWarning: Italic Angle '%s' is greater than zero. Is it really supposed to be leaning to the left, rather than the right? %s." % (font.italicAngle, font.PostScriptName1)) for font in fontlist: if (not font.isItalic) and (abs(font.italicAngle) > 4): - print "\tWarning: Italic style bit is clear, but Italic Angle '%s' is a larger italic angle than -4 for Font %s." % (font.italicAngle, font.PostScriptName1) + print("\tWarning: Italic style bit is clear, but Italic Angle '%s' is a larger italic angle than -4 for Font %s." % (font.italicAngle, font.PostScriptName1)) for font in fontlist: italicAngle = getItalicAngle(font.path) if italicAngle != None: diff = abs(italicAngle - font.italicAngle) if diff > 3: - print "Warning: font ItalicAngle in the post table is %s, but a rough calculation based on [B, D, E, H, I, L], says it should be %s. Please check. %s" % (font.italicAngle, italicAngle, font.PostScriptName1) + print("Warning: font ItalicAngle in the post table is %s, but a rough calculation based on [B, D, E, H, I, L], says it should be %s. Please check. %s" % (font.italicAngle, italicAngle, font.PostScriptName1)) def doSingleTest13(): global fontlist - print "\nSingle Face Test 13: Warn if post.isFixedPitch is set when font is not monospaced." + print("\nSingle Face Test 13: Warn if post.isFixedPitch is set when font is not monospaced.") if fontlist[0].isFixedPitch == -1: - print "Skipping test - post table is missing", fontlist[0].PostScriptName1 + print("Skipping test - post table is missing", fontlist[0].PostScriptName1) return if fontlist[0].isCID : - print "Skipping test - not useful for CID fonts", fontlist[0].PostScriptName1 + print("Skipping test - not useful for CID fonts", fontlist[0].PostScriptName1) return for font in fontlist: @@ -1705,68 +1621,68 @@ def doSingleTest13(): numWidthEntries = len(glyphwidths) numMostPopularWidth = widthTable[-1][0] - if font.ttFont.has_key('CFF '): + if 'CFF ' in font.ttFont: if font.topDict.isFixedPitch != font.isFixedPitch: if font.isFixedPitch: - print " Error: post table isFixedPitch indicates that the font is monospaced, but the CFF top dict IsFixedPitch is off." + print(" Error: post table isFixedPitch indicates that the font is monospaced, but the CFF top dict IsFixedPitch is off.") else: - print " Error: post table isFixedPitch indicates that the font is not monospaced, but the CFF top dict IsFixedPitch is on." + print(" Error: post table isFixedPitch indicates that the font is not monospaced, but the CFF top dict IsFixedPitch is on.") if font.isFixedPitch: if font.isFixedPitch == -1: - print "Skipping test for this face- post table is missing", font.PostScriptName1 + print("Skipping test for this face- post table is missing", font.PostScriptName1) continue if len(widthTable) > 1: - print " Error: Font is marked as being FIxedPitch in the post table, but not all glyphs are the same width. font", font.PostScriptName1 + print(" Error: Font is marked as being FIxedPitch in the post table, but not all glyphs are the same width. font", font.PostScriptName1) for entry in widthTable[:-1]: - print "non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0]) + print("non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0])) for name in entry[2]: - print "\t\t" + name + print("\t\t" + name) else: if (numWidthEntries * 0.80 < numMostPopularWidth): - print " Warning: More than 80% of the glyphs in this font are the same width. Maybe it should be marked as FixedPitch. font", font.PostScriptName1 + print(" Warning: More than 80% of the glyphs in this font are the same width. Maybe it should be marked as FixedPitch. font", font.PostScriptName1) for entry in widthTable[:-1]: - print "non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0]) + print("non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0])) for name in entry[2]: - print "\t\t" + name + print("\t\t" + name) def doSingleTest14(): global fontlist - print "\nSingle Face Test 14: Warn if Bold/Italic style bits do not match between the head Table and OS/2 Table" + print("\nSingle Face Test 14: Warn if Bold/Italic style bits do not match between the head Table and OS/2 Table") if fontlist[0].isItalic2 == -1: - print "Skipping test - OS/2 table does not exist.", fontlist[0].PostScriptName1 + print("Skipping test - OS/2 table does not exist.", fontlist[0].PostScriptName1) return for font in fontlist: if font.isItalic != font.isItalic2: - print " Error: Italic style bit in head.macStyle does not match with OS/2.fsSelection for Font", font.PostScriptName1 - print "\thead.macStyle:", font.isItalic, "OS/2.fsSelection:",font.isItalic2 + print(" Error: Italic style bit in head.macStyle does not match with OS/2.fsSelection for Font", font.PostScriptName1) + print("\thead.macStyle:", font.isItalic, "OS/2.fsSelection:",font.isItalic2) for font in fontlist: if font.isBold != font.isBold2: - print " Error: Bold style bit in head.macStyle does not match with OS/2.fsSelection for Font", font.PostScriptName1 - print "\thead.macStyle:", font.isBold, "OS/2.fsSelection:",font.isBold2 + print(" Error: Bold style bit in head.macStyle does not match with OS/2.fsSelection for Font", font.PostScriptName1) + print("\thead.macStyle:", font.isBold, "OS/2.fsSelection:",font.isBold2) def doSingleTest15(): global fontlist - print "\nSingle Face Test 15: Warn if Font BBox x/y coordinates are improbable, or differ between head table and CFF." + print("\nSingle Face Test 15: Warn if Font BBox x/y coordinates are improbable, or differ between head table and CFF.") for font in fontlist: limit1 = 2* font.unitsPerEm limit2 = 1.5* font.unitsPerEm if font.fontBBox[0] < -limit1 or font.fontBBox[0] > limit1: - print " Warning: BBox X-Min '%s' is out of usual range for Font %s." % (font.fontBBox[0], font.PostScriptName1) + print(" Warning: BBox X-Min '%s' is out of usual range for Font %s." % (font.fontBBox[0], font.PostScriptName1)) if font.fontBBox[1] < -limit2 or font.fontBBox[1] > limit2: - print " Warning: BBox Y-Min '%s' is out of usual range for Font %s." % (font.fontBBox[1], font.PostScriptName1) + print(" Warning: BBox Y-Min '%s' is out of usual range for Font %s." % (font.fontBBox[1], font.PostScriptName1)) if font.fontBBox[2] < -limit1 or font.fontBBox[2] > limit1: - print " Warning: BBox X-Max '%s' is out of usual range for Font %s." % (font.fontBBox[2], font.PostScriptName1) + print(" Warning: BBox X-Max '%s' is out of usual range for Font %s." % (font.fontBBox[2], font.PostScriptName1)) if font.fontBBox[3] < -limit2 or font.fontBBox[3] > limit2: - print " Warning: BBox Y-Max '%s' is out of usual range for Font %s." % (font.fontBBox[3], font.PostScriptName1) + print(" Warning: BBox Y-Max '%s' is out of usual range for Font %s." % (font.fontBBox[3], font.PostScriptName1)) - if font.ttFont.has_key('CFF '): + if 'CFF ' in font.ttFont: hheaBox = font.fontBBox cffBox = font.topDict.FontBBox diff = 0 @@ -1775,14 +1691,14 @@ def doSingleTest15(): diff = 1 break if diff: - print "The font bounding box in the hhea table '%s' differs from that in the CFF table '%s'. %s." % (hheaBox, cffBox, font.PostScriptName1) + print("The font bounding box in the hhea table '%s' differs from that in the CFF table '%s'. %s." % (hheaBox, cffBox, font.PostScriptName1)) def doSingleTest16(): global fontlist - print "\nSingle Face Test 16: Check values of Ascender and Descender vs em-square." + print("\nSingle Face Test 16: Check values of Ascender and Descender vs em-square.") if fontlist[0].sTypoAscender == -1: - print "Skipping test - OS/2 table does not exist", fontlist[0].PostScriptName1 + print("Skipping test - OS/2 table does not exist", fontlist[0].PostScriptName1) return emSquareeDict = {} @@ -1794,39 +1710,39 @@ def doSingleTest16(): diff = os2table.sTypoAscender - os2table.sTypoDescender if diff != font.unitsPerEm: - print " Warning: Difference of OS/2 sTypoAscender '%s' and sTypoDescender '%s' is not the same as the em-square'%s' for Font %s." % (os2table.sTypoAscender, os2table.sTypoDescender, font.unitsPerEm, font.PostScriptName1) + print(" Warning: Difference of OS/2 sTypoAscender '%s' and sTypoDescender '%s' is not the same as the em-square'%s' for Font %s." % (os2table.sTypoAscender, os2table.sTypoDescender, font.unitsPerEm, font.PostScriptName1)) # usWinDescent is a positive value when below the baseline; sTypoDescender is a negative value. if font.isCID: if os2table.sTypoLineGap != font.unitsPerEm: - print " Warning: OS/2 table sTypoLineGap '%s' is not equal to the font em-square '%s' for this CID font %s." % (os2table.sTypoLineGap, font.unitsPerEm, font.PostScriptName1) + print(" Warning: OS/2 table sTypoLineGap '%s' is not equal to the font em-square '%s' for this CID font %s." % (os2table.sTypoLineGap, font.unitsPerEm, font.PostScriptName1)) # compare with hhea values. if font.sTypoAscender2 != os2table.sTypoAscender: - print " Warning: hhea table ascent field '%s' is not the same as OS/2 table sTypoeAscender '%s'. %s" % (font.sTypoAscender2 , os2table.sTypoAscender, font.PostScriptName1) + print(" Warning: hhea table ascent field '%s' is not the same as OS/2 table sTypoeAscender '%s'. %s" % (font.sTypoAscender2 , os2table.sTypoAscender, font.PostScriptName1)) if font.sTypoDescender2 != os2table.sTypoDescender: - print " Warning: hhea table descent field '%s' is not the same as OS/2 table sTypoDescender '%s'. %s" % (font.sTypoDescender2 , os2table.sTypoDescender, font.PostScriptName1) + print(" Warning: hhea table descent field '%s' is not the same as OS/2 table sTypoDescender '%s'. %s" % (font.sTypoDescender2 , os2table.sTypoDescender, font.PostScriptName1)) if font.sTypoLineGap2 != os2table.sTypoLineGap: - print " Warning: hhea table lineGap field '%s' is not the same as OS/2 table sTypoLineGap '%s'. %s" % (font.sTypoLineGap2 , os2table.sTypoLineGap, font.PostScriptName1) + print(" Warning: hhea table lineGap field '%s' is not the same as OS/2 table sTypoLineGap '%s'. %s" % (font.sTypoLineGap2 , os2table.sTypoLineGap, font.PostScriptName1)) # check the sWin values are same as font Bbox. if font.fontBBox[1] != -os2table.usWinDescent: - print " Warning: OS/2 table usWinDescent field '%s' is not the same as the font bounding box y min '%s'. %s" % (-os2table.usWinDescent, font.fontBBox[1], font.PostScriptName1) + print(" Warning: OS/2 table usWinDescent field '%s' is not the same as the font bounding box y min '%s'. %s" % (-os2table.usWinDescent, font.fontBBox[1], font.PostScriptName1)) if font.fontBBox[3] != os2table.usWinAscent: - print " Warning: OS/2 table usWinAscent field '%s' is not the same as the font bounding box y max '%s'. %s" % (os2table.usWinAscent, font.fontBBox[3], font.PostScriptName1) + print(" Warning: OS/2 table usWinAscent field '%s' is not the same as the font bounding box y max '%s'. %s" % (os2table.usWinAscent, font.fontBBox[3], font.PostScriptName1)) # make sure that USE_TYPO_METRICS is on if not (font.fsSelection & (1<<7)): if os2table.version >= 4: - print " Warning. The OS/2 table version 4 fsSelection field bit 7 'USE_TYPO_METRICS' is not turned on. Windows applications will (eventually) use the OS/2 sTypo fields only if this bit is on. %s." % (font.PostScriptName1) + print(" Warning. The OS/2 table version 4 fsSelection field bit 7 'USE_TYPO_METRICS' is not turned on. Windows applications will (eventually) use the OS/2 sTypo fields only if this bit is on. %s." % (font.PostScriptName1)) else: if os2table.version < 4: - print " Error. The OS/2 table version 4 fsSelection field bit 7 'USE_TYPO_METRICS' is set on, but the OS/2 version '%s' is not 4 or greater.. %s." % (os2table.version, font.PostScriptName1) + print(" Error. The OS/2 table version 4 fsSelection field bit 7 'USE_TYPO_METRICS' is set on, but the OS/2 version '%s' is not 4 or greater.. %s." % (os2table.version, font.PostScriptName1)) if len(emSquareeDict.keys()) > 1: - print " Error: fonts in family have different em-squares! %s." % (font.preferredFamilyName1) + print(" Error: fonts in family have different em-squares! %s." % (font.preferredFamilyName1)) for item in emSquareeDict.items(): - print "\tEm square: %s. Fonts %s." % (item[0], item[1]) + print("\tEm square: %s. Fonts %s." % (item[0], item[1])) if font.unitsPerEm not in [1000, 2048]: - print " Warning: Em square '%s' is not either 1000 or 2048. Some programs will behave oddly with this family. %s." % (font.unitsPerEm, font.preferredFamilyName1) + print(" Warning: Em square '%s' is not either 1000 or 2048. Some programs will behave oddly with this family. %s." % (font.unitsPerEm, font.preferredFamilyName1)) def MakeWidthTable(glyphnames, glyphwidths ): widthTableDict = {} @@ -1836,10 +1752,10 @@ def MakeWidthTable(glyphnames, glyphwidths ): for i in range(numWidths): width = glyphwidths[i] - if widthTableDict.has_key(width): + if width in widthTableDict: tableRecord = widthTableDict[width] - #print "tableRecord", tableRecord - #print "entry", entry + #print("tableRecord", tableRecord) + #print("entry", entry) tableRecord[0] = tableRecord[0] + 1 tableRecord[1].append(glyphnames[i]) else: @@ -1851,11 +1767,10 @@ def MakeWidthTable(glyphnames, glyphwidths ): tableRecord = widthTableDict[key] widthTableList.append([tableRecord[0], key, tableRecord[1]]) - widthTableList.sort() - return widthTableList + return sorted(widthTableList) def doSingleTest17(): - print "\nSingle Face Test 17: Verify that all tabular glyphs have the same width." + print("\nSingle Face Test 17: Verify that all tabular glyphs have the same width.") for font in fontlist: if font.PostScriptName1 in kFixedPitchExceptionList: continue @@ -1867,12 +1782,12 @@ def doSingleTest17(): if numWidthEntries > 9 : numMostPopularWidth = widthTable[-1][0] if (numWidthEntries * 0.5 < numMostPopularWidth) and (len(widthTable) > 1): - print "Tabular Width Check: tablining group, font", font.PostScriptName1 - print " Error: tablining More than 50% the glyphs are the same width - this set of numbers is meant to be tabular. ",font.PostScriptName1 + print("Tabular Width Check: tablining group, font", font.PostScriptName1) + print(" Error: tablining More than 50% the glyphs are the same width - this set of numbers is meant to be tabular. ",font.PostScriptName1) for entry in widthTable[:-1]: - print "non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0]) + print("non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0])) for name in entry[2]: - print "\t\t" + name + print("\t\t" + name) glyphnames = font.glyph_name_list2 glyphwidths = font.glyph_width_list2 @@ -1882,12 +1797,12 @@ def doSingleTest17(): if numWidthEntries > 9 : numMostPopularWidth = widthTable[-1][0] if (numWidthEntries * 0.5 < numMostPopularWidth) and (len(widthTable) > 1): - print "Tabular Width Check: taboldstyle group, font", font.PostScriptName1 - print " Error: taboldstyle More than 50% the glyphs are the same width - this set of numbers is meant to be tabular. ",font.PostScriptName1 + print("Tabular Width Check: taboldstyle group, font", font.PostScriptName1) + print(" Error: taboldstyle More than 50% the glyphs are the same width - this set of numbers is meant to be tabular. ",font.PostScriptName1) for entry in widthTable[:-1]: - print "non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0]) + print("non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0])) for name in entry[2]: - print "\t\t" + name + print("\t\t" + name) glyphnames = font.glyph_name_list3 glyphwidths = font.glyph_width_list3 @@ -1897,12 +1812,12 @@ def doSingleTest17(): if numWidthEntries > 9 : numMostPopularWidth = widthTable[-1][0] if (numWidthEntries * 0.5 < numMostPopularWidth) and (len(widthTable) > 1): - print "Tabular Width Check: tabnumerator group, font", font.PostScriptName1 - print " Error: tabnumerator More than 50% the glyphs are the same width - this set of numbers is meant to be tabular. ",font.PostScriptName1 + print("Tabular Width Check: tabnumerator group, font", font.PostScriptName1) + print(" Error: tabnumerator More than 50% the glyphs are the same width - this set of numbers is meant to be tabular. ",font.PostScriptName1) for entry in widthTable[:-1]: - print "non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0]) + print("non-std width " + str(entry[1]) + " Number of glyphs " + str(entry[0])) for name in entry[2]: - print "\t\t" + name + print("\t\t" + name) hintPat = re.compile(r"(?:(\s-*[0-9.]+)(\s-*[0-9.]+)*)\s([a-z]+)") @@ -1950,20 +1865,20 @@ def checkHintEntry(entry, missingHintsGlyphs, glyphBox, fontPSName): errMsgs += ["Error: edge hint %s %s in glyph %s has a value less than the low value of the glyph bbox (%s). %s." % (lo, op, name, min, fontPSName)] if errMsgs: for msg in errMsgs: - print msg + print(msg) errorCount = len(errMsgs) return errorCount def doSingleTest18(): - print "\nSingle Face Test 18: Hint Check. Verify that there is at least one hint for each charstring in each font, and that no charstring is > 32K limit for Mac OSX 10.3.x and earlier." + print("\nSingle Face Test 18: Hint Check. Verify that there is at least one hint for each charstring in each font, and that no charstring is > 32K limit for Mac OSX 10.3.x and earlier.") recursionLevel = 0 txDumpMathPat = re.compile(r"glyph\[\d+\] \{([^,]+),[^\s]+\s+(\S+)\s+width(.+?)(move|endchar)", re.DOTALL) for cmpfFont in fontlist: # Get glyph name list. - if not cmpfFont.ttFont.has_key('CFF '): - print "Skipping test - can't check hints in TrueType font.", cmpfFont.PostScriptName1 + if 'CFF ' not in cmpfFont.ttFont: + print("Skipping test - can't check hints in TrueType font.", cmpfFont.PostScriptName1) break glyphnames = cmpfFont.glyphnames @@ -1986,7 +1901,7 @@ def doSingleTest18(): if not t2CharString.bytecode: t2CharString,compile() if len(t2CharString.bytecode) > 32767: - print "Error: charstring for glyph %s is greater than 32k bytes. this can cause problems in Mac OSX 1.3.x and earlier." % (key) + print("Error: charstring for glyph %s is greater than 32k bytes. this can cause problems in Mac OSX 1.3.x and earlier." % (key)) # Now check the hints. if not doStemWidthChecks: @@ -1995,8 +1910,8 @@ def doSingleTest18(): command = "tx -dump -6 \"%s\" 2>&1" % (cmpfFont.path) report = fdkutils.runShellCmd(command) if not re.search(r"## glyph", report[:1000]): - print "Error: could not check hinting for %s. 'tx' command found some error. See following log." % (cmpfFont.PostScriptName1) - print report + print("Error: could not check hinting for %s. 'tx' command found some error. See following log." % (cmpfFont.PostScriptName1)) + print(report) return hintList = txDumpMathPat.findall(report) errorCount = 0 @@ -2004,20 +1919,20 @@ def doSingleTest18(): glyphBox = cmpfFont.metricsDict[entry[0]][-4:] errorCount += checkHintEntry(entry, missingHintsGlyphs, glyphBox, cmpfFont.PostScriptName1) if errorCount > 40: - print "Ending processing of hint errors - too many to enumerate." + print("Ending processing of hint errors - too many to enumerate.") break if missingHintsGlyphs: - print "\nError: No hint found in the following glyphs for font:", cmpfFont.PostScriptName1 - print "Missing hints:", missingHintsGlyphs + print("\nError: No hint found in the following glyphs for font:", cmpfFont.PostScriptName1) + print("Missing hints:", missingHintsGlyphs) def doSingleTest19(): global fontlist - print "\nSingle Face Test 19: Warn if the Unicode cmap table does not exist, or there are double mapped glyphs in the Unicode cmap table" + print("\nSingle Face Test 19: Warn if the Unicode cmap table does not exist, or there are double mapped glyphs in the Unicode cmap table") for cmpfFont in fontlist: unicodeCmapList = [] - if cmpfFont.ttFont.has_key('cmap'): + if 'cmap' in cmpfFont.ttFont: cmap_table = cmpfFont.ttFont['cmap'] platformID = 0 platEncID = 3 @@ -2031,11 +1946,11 @@ def doSingleTest19(): unicodeCmapList = cmapUnicodeTable.cmap.items() else: - print " Error: font has no cmap table: ", cmpfFont.PostScriptName1 + print(" Error: font has no cmap table: ", cmpfFont.PostScriptName1) continue if not unicodeCmapList: - print " Error: font has no Unicode cmap table (platform, encoding) (0,3) or (3,1) : ", cmpfFont.PostScriptName1 + print(" Error: font has no Unicode cmap table (platform, encoding) (0,3) or (3,1) : ", cmpfFont.PostScriptName1) continue if cmpfFont.isCID: @@ -2046,7 +1961,7 @@ def doSingleTest19(): nameDict = {} duplicateList = [] for code, glyphName in unicodeCmapList: - if nameDict.has_key(glyphName): + if glyphName in nameDict: code2 = nameDict[glyphName] unicodeComment1 = Unicode[code] unicodeComment2 = Unicode[code2] @@ -2056,15 +1971,15 @@ def doSingleTest19(): nameDict[glyphName] = code cmpfFont.uniNameDict = nameDict if duplicateList: - print " Warning: font %s has glyphs mapped to more than one Unicode value. The OTF spec permits this, but it makes it hard for Acrobat to reverse map from Unicode encodings to char codes for searching." % (cmpfFont.PostScriptName1) + print(" Warning: font %s has glyphs mapped to more than one Unicode value. The OTF spec permits this, but it makes it hard for Acrobat to reverse map from Unicode encodings to char codes for searching." % (cmpfFont.PostScriptName1)) for message in duplicateList: - print message + print(message) def doSingleTest20(): global fontlist - print "\nSingle Face Test 20: Warn if there are double spaces in the name table font menu names." + print("\nSingle Face Test 20: Warn if there are double spaces in the name table font menu names.") reporter1_fontname = [] reporter1_failedvalue = [] @@ -2080,51 +1995,51 @@ def doSingleTest20(): reporter6_failedvalue = [] for font in fontlist: - if (string.find(font.compatibleFamilyName3, " ") != -1): + if (font.compatibleFamilyName3.find(" ") != -1): reporter1_fontname.append(font.PostScriptName1) reporter1_failedvalue.append(font.compatibleFamilyName3) - if (string.find(font.compatibleSubFamilyName3, " ") != -1): + if (font.compatibleSubFamilyName3.find(" ") != -1): reporter2_fontname.append(font.PostScriptName3) reporter2_failedvalue.append(font.compatibleSubFamilyName3) - if (string.find(font.FullFontName1, " ") != -1): + if (font.FullFontName1.find(" ") != -1): reporter3_fontname.append(font.PostScriptName1) reporter3_failedvalue.append(font.FullFontName1) - if font.preferredFamilyName3 and (string.find(font.preferredFamilyName3, " ") != -1): - if (string.find(font.preferredFamilyName3, " ") != -1): + if font.preferredFamilyName3 and (font.preferredFamilyName3.find(" ") != -1): + if (font.preferredFamilyName3.find(" ") != -1): reporter4_fontname.append(font.PostScriptName1) reporter4_failedvalue.append(font.preferredFamilyName3) - if font.compatibleSubFamilyName3 and (string.find(font.compatibleSubFamilyName3, " ") != -1): + if font.compatibleSubFamilyName3 and (font.compatibleSubFamilyName3.find(" ") != -1): reporter5_fontname.append(font.PostScriptName1) reporter5_failedvalue.append(font.compatibleSubFamilyName3) - if font.MacCompatibleFullName1 and (string.find(font.MacCompatibleFullName1, " ") != -1): + if font.MacCompatibleFullName1 and (font.MacCompatibleFullName1.find(" ") != -1): reporter6_fontname.append(font.PostScriptName1) reporter6_failedvalue.append(font.MacCompatibleFullName1) for i in range(len(reporter1_fontname)): - print " Error: Name ID 1, Font compatible family name <" +\ - str(reporter1_failedvalue[i]) + "> has double spaces in name. ", reporter1_fontname[i] + print(" Error: Name ID 1, Font compatible family name <" +\ + str(reporter1_failedvalue[i]) + "> has double spaces in name. ", reporter1_fontname[i]) for i in range(len(reporter2_fontname)): - print " Error: Name ID 2, Font compatible subfamily name <" +\ - str(reporter2_failedvalue[i]) + "> has double spaces in name. ", reporter2_fontname[i] + print(" Error: Name ID 2, Font compatible subfamily name <" +\ + str(reporter2_failedvalue[i]) + "> has double spaces in name. ", reporter2_fontname[i]) for i in range(len(reporter3_fontname)): - print " Error: Name ID 4, full font name <" +\ - str(reporter3_failedvalue[i]) + "> has double spaces in name. ", reporter3_fontname[i] + print(" Error: Name ID 4, full font name <" +\ + str(reporter3_failedvalue[i]) + "> has double spaces in name. ", reporter3_fontname[i]) for i in range(len(reporter4_fontname)): - print " Error: Name ID 16, preferred family name <" +\ - str(reporter4_failedvalue[i]) + "> has double spaces in name. ", reporter4_fontname[i] + print(" Error: Name ID 16, preferred family name <" +\ + str(reporter4_failedvalue[i]) + "> has double spaces in name. ", reporter4_fontname[i]) for i in range(len(reporter5_fontname)): - print " Error: Name ID 17, preferred subfamily name <" +\ - str(reporter5_failedvalue[i]) + "> has double spaces in name. ", reporter5_fontname[i] + print(" Error: Name ID 17, preferred subfamily name <" +\ + str(reporter5_failedvalue[i]) + "> has double spaces in name. ", reporter5_fontname[i]) for i in range(len(reporter6_fontname)): - print " Error: Name ID 18, Mac-compatible full name <" +\ - str(reporter6_failedvalue[i]) + "> has double spaces in name. ", reporter6_fontname[i] + print(" Error: Name ID 18, Mac-compatible full name <" +\ + str(reporter6_failedvalue[i]) + "> has double spaces in name. ", reporter6_fontname[i]) def doSingleTest21(): global fontlist - print "\nSingle Face Test 21: Warn if there trailing or leading spaces in the name table font menu names." + print("\nSingle Face Test 21: Warn if there trailing or leading spaces in the name table font menu names.") reporter1_fontname = [] reporter1_failedvalue = [] @@ -2140,43 +2055,43 @@ def doSingleTest21(): reporter6_failedvalue = [] for font in fontlist: - if (len(string.strip(font.compatibleFamilyName3)) != len(font.compatibleFamilyName3)): + if (len(font.compatibleFamilyName3.strip()) != len(font.compatibleFamilyName3)): reporter1_fontname.append(font.PostScriptName1) reporter1_failedvalue.append(font.compatibleFamilyName3) - if (len(string.strip(font.compatibleSubFamilyName3)) != len(font.compatibleSubFamilyName3)): + if (len(font.compatibleSubFamilyName3.strip()) != len(font.compatibleSubFamilyName3)): reporter2_fontname.append(font.PostScriptName1) reporter2_failedvalue.append(font.compatibleSubFamilyName3) - if (len(string.strip(font.FullFontName1)) != len(font.FullFontName1)): + if (len(font.FullFontName1.strip()) != len(font.FullFontName1)): reporter3_fontname.append(font.PostScriptName1) reporter3_failedvalue.append(font.FullFontName1) - if font.preferredFamilyName3 and (len(string.strip(font.preferredFamilyName3)) != len(font.preferredFamilyName3)): + if font.preferredFamilyName3 and (len(font.preferredFamilyName3.strip()) != len(font.preferredFamilyName3)): reporter4_fontname.append(font.PostScriptName1) reporter4_failedvalue.append(font.preferredFamilyName3) - if font.preferredSubFamilyName3 and (len(string.strip(font.preferredSubFamilyName3)) != len(font.preferredSubFamilyName3)): + if font.preferredSubFamilyName3 and (len(font.preferredSubFamilyName3.strip()) != len(font.preferredSubFamilyName3)): reporter5_fontname.append(font.PostScriptName1) reporter5_failedvalue.append(font.preferredSubFamilyName3) - if font.MacCompatibleFullName1 and (len(string.strip(font.MacCompatibleFullName1)) != len(font.MacCompatibleFullName1)): + if font.MacCompatibleFullName1 and (len(font.MacCompatibleFullName1.strip()) != len(font.MacCompatibleFullName1)): reporter6_fontname.append(font.PostScriptName1) reporter6_failedvalue.append(font.MacCompatibleFullName1) for i in range(len(reporter1_fontname)): - print " Error: Name ID 1, Font compatible family name <" +\ - str(reporter1_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter1_fontname[i] + print(" Error: Name ID 1, Font compatible family name <" +\ + str(reporter1_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter1_fontname[i]) for i in range(len(reporter2_fontname)): - print " Error: Name ID 2, Font compatible subfamily name <"+\ - str(reporter2_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter2_fontname[i] + print(" Error: Name ID 2, Font compatible subfamily name <"+\ + str(reporter2_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter2_fontname[i]) for i in range(len(reporter3_fontname)): - print " Error: Name ID 4, full font name <"+\ - str(reporter3_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter3_fontname[i] + print(" Error: Name ID 4, full font name <"+\ + str(reporter3_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter3_fontname[i]) for i in range(len(reporter4_fontname)): - print " Error: Name ID 16, preferred family name <"+\ - str(reporter4_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter4_fontname[i] + print(" Error: Name ID 16, preferred family name <"+\ + str(reporter4_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter4_fontname[i]) for i in range(len(reporter5_fontname)): - print " Error: Name ID 17, preferred subfamily name <"+\ - str(reporter5_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter5_fontname[i] + print(" Error: Name ID 17, preferred subfamily name <"+\ + str(reporter5_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter5_fontname[i]) for i in range(len(reporter6_fontname)): - print " Error: Name ID 18, Mac-compatible full name <"+\ - str(reporter6_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter6_fontname[i] + print(" Error: Name ID 18, Mac-compatible full name <"+\ + str(reporter6_failedvalue[i]) + "> has trailing or leading spaces in name. ", reporter6_fontname[i]) #ae oe ct ff fi ffi fl ffl ij AE OE IJ CT ST TH TT Th UE ue fk ft gg sl NJ DZ Lj Nj Dz lj nj dz sp st tt zy @@ -2295,11 +2210,11 @@ def getLigatureName(font, name): altBaseName = baseName baseName = baseName + "." + ext altligCompName = ligCompName+ "." + ext - if font.metricsDict.has_key(altligCompName): + if altligCompName in font.metricsDict: ligCompName = altligCompName elif suffixClass == kAddSuffixToEnd: altligCompName = ligCompName+ "." + ext - if font.metricsDict.has_key(altligCompName): + if altligCompName in font.metricsDict: ligCompName = altligCompName else: altBaseName = baseName @@ -2310,11 +2225,11 @@ def getLigatureName(font, name): else: altBaseName = baseName baseName = baseName + "." + ext - if not font.metricsDict.has_key(baseName): + if baseName not in font.metricsDict: baseName = altBaseName altBaseName = None altligCompName = ligCompName+ "." + ext - if font.metricsDict.has_key(altligCompName): + if altligCompName in font.metricsDict: ligCompName = altligCompName entry = [name, baseName, altBaseName, ligCompName] @@ -2331,7 +2246,7 @@ def getLigatureNames(font): return ligatureList def isAccent(glyphName): - if accentNames.has_key(glyphName): + if glyphName in accentNames: return 1 if glyphName.startswith("uni0"): return (glyphName >= "uni0300") and (glyphName <= "uni034F") @@ -2341,7 +2256,7 @@ def isAccent(glyphName): def doSingleTest22(): global fontlist - print "\nSingle Face Test 22: Warn if any ligatures have a width which not larger than the width of the first glyph, or, if first glyph is not in font, if the RSB is negative." + print("\nSingle Face Test 22: Warn if any ligatures have a width which not larger than the width of the first glyph, or, if first glyph is not in font, if the RSB is negative.") for font in fontlist: # Ligature entry = [ligature name, base name, alternate base name, last ligature component]. Base glyph name may be None, if I couldn't find it ligatureNames = font.ligDict.keys() @@ -2354,7 +2269,7 @@ def doSingleTest22(): try: widthLig, lsbLig, bottomLig, rightLig, topLig = font.metricsDict[ligName] except KeyError: - print "Skipping ligature glyph '%s'; not found in metrics dict." % (ligName) + print("Skipping ligature glyph '%s'; not found in metrics dict." % (ligName)) continue rsbLig = widthLig - rightLig @@ -2362,26 +2277,26 @@ def doSingleTest22(): try: widthLeftComp, lsbLeftComp, bottomLeftComp, rightLeftComp, topLeftCompp = font.metricsDict[leftComp] except KeyError: - print "Skipping ligature left component glyph '%s'; not found in metrics dict." % (leftComp) + print("Skipping ligature left component glyph '%s'; not found in metrics dict." % (leftComp)) continue rightComp = ligComponents[-1] try: widthRightComp, lsbRightComp, bottomRightComp, rightRightComp, topRightComp = font.metricsDict[rightComp] except KeyError: - print "Skipping ligature right component glyph '%s'; not found in metrics dict." % (rightComp) + print("Skipping ligature right component glyph '%s'; not found in metrics dict." % (rightComp)) continue if widthLig <= (widthLeftComp - gDesignSpaceTolerance): - print " Warning: Width of ligature %s: %s is less than or the same as that of the left component glyph %s: %s for font %s." % (ligName, widthLig, leftComp, widthLeftComp, font.PostScriptName1) + print(" Warning: Width of ligature %s: %s is less than or the same as that of the left component glyph %s: %s for font %s." % (ligName, widthLig, leftComp, widthLeftComp, font.PostScriptName1)) diff = abs(lsbLig - lsbLeftComp) if diff > gDesignSpaceTolerance: - print " Warning: left side bearing %s of ligature %s is not equal to the lsb %s of the left side component %s for font %s." % (lsbLig, ligName, lsbLeftComp, leftComp, font.PostScriptName1) + print(" Warning: left side bearing %s of ligature %s is not equal to the lsb %s of the left side component %s for font %s." % (lsbLig, ligName, lsbLeftComp, leftComp, font.PostScriptName1)) rsbRightComp = widthRightComp - rightRightComp diff = abs(rsbRightComp - rsbLig) if diff > gDesignSpaceTolerance: - print " Warning: right side bearing %s of ligature %s is not equal to the rsb %s of the last component %s for font %s." % (rsbLig, ligName, rsbRightComp, rightComp, font.PostScriptName1) + print(" Warning: right side bearing %s of ligature %s is not equal to the rsb %s of the last component %s for font %s." % (rsbLig, ligName, rsbRightComp, rightComp, font.PostScriptName1)) accentedNames = accentNames.keys() def getAcentEntries(font): @@ -2405,7 +2320,7 @@ def getAcentEntries(font): def doSingleTest23(): global fontlist - print "\nSingle Face Test 23: Warn if any accented glyphs have a width different than the base glyph." + print("\nSingle Face Test 23: Warn if any accented glyphs have a width different than the base glyph.") for font in fontlist: accentEntries = getAcentEntries(font) # get a list of entries [ accented glyph-name, base-glyph name]. base glyph name may be None, if I couldn't find it hmtxTable = font.ttFont['hmtx'] @@ -2418,13 +2333,13 @@ def doSingleTest23(): widthAccent, lsbLig = hmtxTable[accentName] diff = abs(widthAccent - widthbase) if diff > gDesignSpaceTolerance: - print "\tWarning: Width of glyph %s: %s differs from that of the base glyph %s: %s for font %s." % (accentName, widthAccent, baseName, widthbase, font.PostScriptName1) + print("\tWarning: Width of glyph %s: %s differs from that of the base glyph %s: %s for font %s." % (accentName, widthAccent, baseName, widthbase, font.PostScriptName1)) except KeyError: pass def doSingleTest24(): global fontlist - print "\nSingle Face Test 24: Warn if font has 'size' feature, and design size is not in specified range." + print("\nSingle Face Test 24: Warn if font has 'size' feature, and design size is not in specified range.") for font in fontlist: font.sizeDesignSize = 0 font.sizeSubfFamilyID = 0 @@ -2446,56 +2361,52 @@ def doSingleTest24(): if font.sizeNameID: # only check range if there is one. if (designSize < rangeStart) or (designSize > rangeEnd): - print "\tError: 'size' feature design size %s is not within design range %s - %s for font %s." % (designSize, rangeStart, rangeEnd, font.PostScriptName1) + print("\tError: 'size' feature design size %s is not within design range %s - %s for font %s." % (designSize, rangeStart, rangeEnd, font.PostScriptName1)) font.sizeMenuName = "" for keyTuple in font.nameIDDict.keys(): if keyTuple[3] == font.sizeNameID: font.sizeMenuName = font.nameIDDict[keyTuple] break if not font.sizeMenuName: - print " Error: the 'size' feature refers to name table name ID '%s', but I can't find it. %s." % (font.sizeNameID, font.PostScriptName1) + print(" Error: the 'size' feature refers to name table name ID '%s', but I can't find it. %s." % (font.sizeNameID, font.PostScriptName1)) else: - print "Program error: font has 'size' feature, but could not parse the values for font %s." % ( font.PostScriptName1) + print("Program error: font has 'size' feature, but could not parse the values for font %s." % ( font.PostScriptName1)) def doSingleTest25(): global fontlist - print "\nSingle Face Test 25: Check that fonts do not have UniqueID, UID, or XUID in CFF table." + print("\nSingle Face Test 25: Check that fonts do not have UniqueID, UID, or XUID in CFF table.") - if not fontlist[0].ttFont.has_key('CFF '): - print "Skipping test - applies only to CFF fonts." - return - - if not fontlist[0].ttFont.has_key('CFF '): - print "Skipping test - applies only to CFF fonts." + if 'CFF ' not in fontlist[0].ttFont: + print("Skipping test - applies only to CFF fonts.") return if fontlist[0].isCID: - print "Skipping test - applies only to name-keyed CFF fonts." + print("Skipping test - applies only to name-keyed CFF fonts.") return hasError = 0 for font in fontlist: if hasattr(font.topDict, "UniqueID"): - print " Error: Font has UniqueID in CFF table.", font.PostScriptName1 + print(" Error: Font has UniqueID in CFF table.", font.PostScriptName1) hasError = 1 if hasattr(font.topDict, "XUID"): - print " Error: Font has XUID in CFF table.", font.PostScriptName1 + print(" Error: Font has XUID in CFF table.", font.PostScriptName1) hasError = 1 if hasattr(font.topDict, "UIDBase"): - print " Error: Font has UIDBase in CFF table.", font.PostScriptName1 + print(" Error: Font has UIDBase in CFF table.", font.PostScriptName1) hasError = 1 if hasError: - print """ Use of UniqueID/XUID is still syntactically correct. However, + print(""" Use of UniqueID/XUID is still syntactically correct. However, end='' the advantage in caching the font in printers for fonts smaller than 1 Mbyte is small, and and the risk of conflicting with another font that has an arbitrarily assigned UniqueID value is significant. The Adobe - Type Dept has stopped using them for non-CJK fonts.""" + Type Dept has stopped using them for non-CJK fonts.""") def doSingleTest26(): global fontlist - print "\nSingle Face Test 26: Glyph name checks." + print("\nSingle Face Test 26: Glyph name checks.") matchPats = [ re.compile(r"^uni([0-9A-F][0-9A-F][0-9A-F][0-9A-F])+$"), re.compile(r"^u[0-9A-F][0-9A-F][0-9A-F][0-9A-F]([0-9A-F]*[0-9A-F]*)$")] @@ -2503,11 +2414,11 @@ def doSingleTest26(): if font.usDefaultChar == None: break if font.usDefaultChar!= 0: - print " Warning: the OS/2 default char is set to char code '%s'; it is most usefully set to 0, aka .notdef. %s" % (font.usDefaultChar, font.PostScriptName1) + print(" Warning: the OS/2 default char is set to char code '%s'; it is most usefully set to 0, aka .notdef. %s" % (font.usDefaultChar, font.PostScriptName1)) for font in fontlist: - if not font.ttFont.has_key('CFF '): + if 'CFF ' not in font.ttFont: glyphnames = font.glyphnames notdefGlyphName = glyphnames[0] nullGlyphName = glyphnames[1] @@ -2516,28 +2427,28 @@ def doSingleTest26(): glyphnames = font.glyphnames[4:] if notdefGlyphName != ".notdef": - print " Error: In TrueType fonts, glyphID 0 should be .notdef rather than '%s'. %s." % (notdefGlyphName, font.PostScriptName1) + print(" Error: In TrueType fonts, glyphID 0 should be .notdef rather than '%s'. %s." % (notdefGlyphName, font.PostScriptName1)) notdefGlyphName = None if nullGlyphName != "NULL": if nullGlyphName == ".null": - print " Warning: glyph ID 1 is named '.null'; should be 'NULL'", font.PostScriptName1 + print(" Warning: glyph ID 1 is named '.null'; should be 'NULL'", font.PostScriptName1) else: - print " Error: In TrueType fonts, glyphID 1 should be NULL rather than '%s'. %s." % (nullGlyphName, font.PostScriptName1) + print(" Error: In TrueType fonts, glyphID 1 should be NULL rather than '%s'. %s." % (nullGlyphName, font.PostScriptName1)) nullGlyphName = None if crGlyphName != "CR": if crGlyphName == "nonmarkingreturn": - print " Warning: glyph ID 2 is named 'nonmarkingreturn'; should be 'CR'", font.PostScriptName1 + print(" Warning: glyph ID 2 is named 'nonmarkingreturn'; should be 'CR'", font.PostScriptName1) else: - print " Error: In TrueType fonts, glyphID 2 should be 'CR' rather than '%s'. %s." % (crGlyphName, font.PostScriptName1) + print(" Error: In TrueType fonts, glyphID 2 should be 'CR' rather than '%s'. %s." % (crGlyphName, font.PostScriptName1)) crGlyphName = None if font.isCID: continue if spaceGlyphName != "space": - print " Error: In TrueType fonts, glyphID 3 should be 'space' rather than '%s'. %s." % (spaceGlyphName, font.PostScriptName1) + print(" Error: In TrueType fonts, glyphID 3 should be 'space' rather than '%s'. %s." % (spaceGlyphName, font.PostScriptName1)) spaceGlyphName = None if hasattr(font, "uniNameDict"): @@ -2545,37 +2456,37 @@ def doSingleTest26(): try: code = font.uniNameDict[nullGlyphName] if code != 0: - print " Error: TrueType font should have NULL glyph '%s' encoded at Unicode value 0 rather than %s. %s" % (nullGlyphName, hex(code), font.PostScriptName1) + print(" Error: TrueType font should have NULL glyph '%s' encoded at Unicode value 0 rather than %s. %s" % (nullGlyphName, hex(code), font.PostScriptName1)) except KeyError: - print " Error: TrueType font should have NULL glyph '%s' encoded at Unicode value 0. %s" % (nullGlyphName, font.PostScriptName1) + print(" Error: TrueType font should have NULL glyph '%s' encoded at Unicode value 0. %s" % (nullGlyphName, font.PostScriptName1)) if crGlyphName: try: code = font.uniNameDict[crGlyphName] if code != 0xD: - print " Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0xD rather than %s. %s" % (crGlyphName, hex(code), font.PostScriptName1) + print(" Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0xD rather than %s. %s" % (crGlyphName, hex(code), font.PostScriptName1)) except KeyError: - print " Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0xD. %s" % (crGlyphName, font.PostScriptName1) + print(" Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0xD. %s" % (crGlyphName, font.PostScriptName1)) if spaceGlyphName: try: code = font.uniNameDict[spaceGlyphName] if code != 0x20: - print " Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0x20 rather than %s. %s" % (spaceGlyphName, hex(code), font.PostScriptName1) + print(" Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0x20 rather than %s. %s" % (spaceGlyphName, hex(code), font.PostScriptName1)) except KeyError: - print " Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0x20. %s" % (spaceGlyphName, font.PostScriptName1) + print(" Error: TrueType font should have CR glyph '%s' encoded at Unicode value 0x20. %s" % (spaceGlyphName, font.PostScriptName1)) # Now to check if all names or AGL compliant. for font in fontlist: if font.isCID: continue - if font.ttFont.has_key('CFF '): + if 'CFF ' in font.ttFont: # Check that the total size of glyph names is less than the limit or Mac OSX 10.4.x and earlier. gblock = " ".join(font.glyphnames) + " " glyphNameBufferSize = len(gblock) if glyphNameBufferSize > 32767: - print "\tError: The total size of the glyph names is greater than the safe limit of 32767 for Mac OSX 10.4.x and earlier by %s characters, and will cause crashes. %s." % (glyphNameBufferSize - 32767, font.PostScriptName1) + print("\tError: The total size of the glyph names is greater than the safe limit of 32767 for Mac OSX 10.4.x and earlier by %s characters, and will cause crashes. %s." % (glyphNameBufferSize - 32767, font.PostScriptName1)) elif ((2*len(font.glyphnames)) + glyphNameBufferSize) > 32767: - print "\tWarning: The total size of the glyph names is getting close to than the safe limit of 32767 for Mac OSX 10.4.x..%s\tThe safety margin is %s bytes. If this margin goes below zero, the font will cause crashes. %s" % (os.linesep, 32767 - glyphNameBufferSize, font.PostScriptName1); + print("\tWarning: The total size of the glyph names is getting close to than the safe limit of 32767 for Mac OSX 10.4.x..%s\tThe safety margin is %s bytes. If this margin goes below zero, the font will cause crashes. %s" % (os.linesep, 32767 - glyphNameBufferSize, font.PostScriptName1)) glyphnames = font.glyphnames htmx_table = font.ttFont['hmtx'] @@ -2585,12 +2496,12 @@ def doSingleTest26(): if gname in ["endash ", "onedotenleader", "twodotenleader", "threedotenleader"]: gwidth = htmx_table.metrics[gname][0] if gwidth != enWidth: - print "\tError: glyph %s has a width of %s rather than 1/2 the em-square size. %s" % (gname, gwidth, font.PostScriptName1) + print("\tError: glyph %s has a width of %s rather than 1/2 the em-square size. %s" % (gname, gwidth, font.PostScriptName1)) continue if gname == "emdash": gwidth = htmx_table.metrics[gname][0] if gwidth != font.unitsPerEm: - print "\tError: glyph %s has a width of %s rather than the em-square size. %s" % (gname, gwidth, font.PostScriptName1) + print("\tError: glyph %s has a width of %s rather than the em-square size. %s" % (gname, gwidth, font.PostScriptName1)) continue if gname == "figurespace": gwidth = htmx_table.metrics[gname][0] @@ -2598,7 +2509,7 @@ def doSingleTest26(): try: twidth = htmx_table.metrics[tname][0] if twidth != gwidth: - print "\tError: Width (%s) of %s is not the same as the width (%s) of the tabular glyph %s. %s" % (gwidth, gname, twidth, tname, font.PostScriptName1) + print("\tError: Width (%s) of %s is not the same as the width (%s) of the tabular glyph %s. %s" % (gwidth, gname, twidth, tname, font.PostScriptName1)) break except KeyError: pass @@ -2612,11 +2523,11 @@ def doSingleTest26(): if hasattr(dictGlyph, "fin") and dictGlyph.fin and (dictGlyph.fin != partName): # complain if glyph is an AGD source name if isLig: - print " Warning. Font uses working name '%s' rather than Adobe final name '%s' in ligature name '%s'. %s" % (partName, dictGlyph.fin, gname, font.PostScriptName1) + print(" Warning. Font uses working name '%s' rather than Adobe final name '%s' in ligature name '%s'. %s" % (partName, dictGlyph.fin, gname, font.PostScriptName1)) elif (not dictGlyph.fin in glyphnames): # but only if there is not another glyph with the same final name in the font. Some glypsh are duplicated under "old" and "new" names for legacy issues. # This is becuase underMacmac OSX, glyphs are still encoded based on their glyph name in some cases, so changing Delta to uni0394 is a bad idea. - print " Warning. Font uses working name '%s' rather than Adobe final name '%s'. %s" % (partName, dictGlyph.fin, font.PostScriptName1) + print(" Warning. Font uses working name '%s' rather than Adobe final name '%s'. %s" % (partName, dictGlyph.fin, font.PostScriptName1)) continue # Not in AGD. Check if is an alternate name, and the alternate is in AGD. @@ -2627,9 +2538,9 @@ def doSingleTest26(): if dictGlyph: if hasattr(dictGlyph, "fin") and dictGlyph.fin and (dictGlyph.fin != baseName): if isLig: - print " Warning. Font uses working name '%s' rather than Adobe final name '%s' in ligature name '%s'. %s" % (partName, dictGlyph.fin + "." + nameParts[1], gname, font.PostScriptName1) + print(" Warning. Font uses working name '%s' rather than Adobe final name '%s' in ligature name '%s'. %s" % (partName, dictGlyph.fin + "." + nameParts[1], gname, font.PostScriptName1)) else: - print " Warning. Font uses working name '%s' rather than Adobe final name '%s'. %s" % (partName, dictGlyph.fin + "." + nameParts[1], font.PostScriptName1) + print(" Warning. Font uses working name '%s' rather than Adobe final name '%s'. %s" % (partName, dictGlyph.fin + "." + nameParts[1], font.PostScriptName1)) continue # baseName is not in AGD either. Check if it is a valid uni name. isUniName = 0 @@ -2639,15 +2550,15 @@ def doSingleTest26(): break if not isUniName: if isLig: - print " Warning. Glyph name '%s' in ligature name '%s' is neither in the AGD, nor a 'uni' name, and can't be mapped to a Unicode value. %s" % (partName, gname, font.PostScriptName1) + print(" Warning. Glyph name '%s' in ligature name '%s' is neither in the AGD, nor a 'uni' name, and can't be mapped to a Unicode value. %s" % (partName, gname, font.PostScriptName1)) else: - print " Warning. Glyph name '%s' is neither in the AGD, nor a 'uni' name, and can't be mapped to a Unicode value. %s" % (partName, font.PostScriptName1) + print(" Warning. Glyph name '%s' is neither in the AGD, nor a 'uni' name, and can't be mapped to a Unicode value. %s" % (partName, font.PostScriptName1)) def doSingleTest27(): global fontlist - print "\nSingle Face Test 27: Check strikeout/subscript/superscript positions." + print("\nSingle Face Test 27: Check strikeout/subscript/superscript positions.") for font in fontlist: # Heurisitcs are from makeotf hotconv/source/hot.c::prepWinData() yStrikeoutSize = font.underlineThickness @@ -2676,7 +2587,7 @@ def doSingleTest27(): "ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset"]: diff = abs(eval("font.%s - %s" % (fieldName, fieldName))) if diff > 5: - print "\tWarning: OS/2 table field %s of %s differs from default calculated value %s. Please check. %s." % (fieldName, eval("font.%s" % (fieldName)),eval(fieldName), font.PostScriptName1) + print("\tWarning: OS/2 table field %s of %s differs from default calculated value %s. Please check. %s." % (fieldName, eval("font.%s" % (fieldName)),eval(fieldName), font.PostScriptName1)) def doSingleTest28(): @@ -2770,13 +2681,13 @@ def doSingleTest28(): { "firstUV": 0xFFF0, "secondUV": 0xFFFF, "numRequired": 16, "numFound": 0, "bitNum": 69, "isSupported": 0, "blockName": "Specials" }, ] - print "\nSingle Face Test 28: Check font OS/2 code pages for the a common set of code page bits." + print("\nSingle Face Test 28: Check font OS/2 code pages for the a common set of code page bits.") for font in fontlist: cmapUnicodeTables = [None, None] hmtxTable = font.ttFont['hmtx'].metrics haveUVCmap =0 haveUVCmap32 =0 - if font.ttFont.has_key('cmap'): + if 'cmap' in font.ttFont: cmap_table = font.ttFont['cmap'] platformID = 3 platEncID = 1 @@ -2801,11 +2712,11 @@ def doSingleTest28(): codePage["isSupported"] = 0 for cmapUnicodeTable in cmapUnicodeTables: if cmapUnicodeTable: - if (cmapUnicodeTable.has_key(codePage["uv1"]) or (codePage["uv2"] and cmapUnicodeTable.has_key(codePage["uv2"]))): + if (codePage["uv1"] in cmapUnicodeTable or (codePage["uv2"] and codePage["uv2"] in cmapUnicodeTable)): codePage["isSupported"] = 1 break if not haveUVCmap: - if hmtxTable.has_key(codePage["gname1"]) or (codePage["gname2"] and hmtxTable.has_key(codePage["gname2"])): + if codePage["gname1"] in hmtxTable or (codePage["gname2"] and codePage["gname2"] in hmtxTable): codePage["isSupported"] = 1 codePageDict[codePage["bitNum"]] = codePage["isSupported"] @@ -2815,21 +2726,21 @@ def doSingleTest28(): codeRange = eval("os2table.ulCodePageRange%s" % (codepageIndex+1)) for bitNum in range(32): dictBit = bitNum + ( 32*(codepageIndex)) - if codePageDict.has_key(dictBit): + if dictBit in codePageDict: if codePageDict[dictBit] and not (codeRange & (1< 14: - print "\tError: The font has more than 7 pairs of BlueValues" - print "\t\tFont:", font.PostScriptName1 - print "\t\tBlueValues:", fontDict.Private.BlueValues + print("\tError: The font has more than 7 pairs of BlueValues") + print("\t\tFont:", font.PostScriptName1) + print("\t\tBlueValues:", fontDict.Private.BlueValues) if len(fontDict.Private.BlueValues) % 2 != 0: - print "\tError: The font does not have an even number of BlueValues" - print "\t\tFont:", font.PostScriptName1 - print "\t\tBlueValues:", fontDict.Private.BlueValues + print("\tError: The font does not have an even number of BlueValues") + print("\t\tFont:", font.PostScriptName1) + print("\t\tBlueValues:", fontDict.Private.BlueValues) except AttributeError: - print "\tError: Skipping test: the font has no BlueValues for", font.PostScriptName1 + print("\tError: Skipping test: the font has no BlueValues for", font.PostScriptName1) continue try: # not all fonts have FamilyBlues. if len(fontDict.Private.FamilyBlues) > 14: - print "\nError: The font has more than 7 pairs of FamilyBlues" - print "\tFont:", font.PostScriptName1 - print "\tFamilyBlues:", fontDict.Private.FamilyBlues + print("\nError: The font has more than 7 pairs of FamilyBlues") + print("\tFont:", font.PostScriptName1) + print("\tFamilyBlues:", fontDict.Private.FamilyBlues) if len(fontDict.Private.FamilyBlues) % 2 != 0: - print "\nError: The font does not have an even number of FamilyBlues" - print "\tFont:", font.PostScriptName1 - print "\tFamilyBlues:", fontDict.Private.FamilyBlues + print("\nError: The font does not have an even number of FamilyBlues") + print("\tFont:", font.PostScriptName1) + print("\tFamilyBlues:", fontDict.Private.FamilyBlues) except AttributeError: pass def doSingleTest31(): global preferredFamilyList1 - print "\nSingle Face Test 31: Check that there are no more than 5 pairs of OtherBlues and FamilyOtherBlues in a font, and there is an even number of values." + print("\nSingle Face Test 31: Check that there are no more than 5 pairs of OtherBlues and FamilyOtherBlues in a font, and there is an even number of values.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] for font in fontgroup: if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break for fontDict in font.FDArray: try: # not all fonts have FamilyOtherBlues. if len(fontDict.Private.OtherBlues) > 10: - print "\tError: The font has more than 5 pairs of OtherBlues" - print "\t\tFont:", font.PostScriptName1 - print "\t\tOtherBlues:", fontDict.Private.OtherBlues + print("\tError: The font has more than 5 pairs of OtherBlues") + print("\t\tFont:", font.PostScriptName1) + print("\t\tOtherBlues:", fontDict.Private.OtherBlues) if len(fontDict.Private.OtherBlues) % 2 != 0: - print "\tError: The font does not have an even number of OtherBlues" - print "\t\tFont:", font.PostScriptName1 - print "\t\tOtherBlues:", fontDict.Private.OtherBlues + print("\tError: The font does not have an even number of OtherBlues") + print("\t\tFont:", font.PostScriptName1) + print("\t\tOtherBlues:", fontDict.Private.OtherBlues) except AttributeError: - print "Skipping test - font dict does not contain OtherBlues", font.PostScriptName1 + print("Skipping test - font dict does not contain OtherBlues", font.PostScriptName1) continue try: # not all fonts have FamilyOtherBlues. if len(fontDict.Private.FamilyOtherBlues) > 10: - print "\tError: The font has more than 5 pairs of FamilyOtherBlues" - print "\t\tFont:", font.PostScriptName1 - print "\t\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues + print("\tError: The font has more than 5 pairs of FamilyOtherBlues") + print("\t\tFont:", font.PostScriptName1) + print("\t\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues) if len(fontDict.Private.FamilyOtherBlues) % 2 != 0: - print "\tError: The font does not have an even number of FamilyOtherBlues" - print "\t\tFont:", font.PostScriptName1 - print "\t\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues + print("\tError: The font does not have an even number of FamilyOtherBlues") + print("\t\tFont:", font.PostScriptName1) + print("\t\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues) except AttributeError: pass def doSingleTest32(): global preferredFamilyList1 - print "\nSingle Face Test 32: Check that all fonts have blue value pairs with first integer is less than or equal to the second integer in pairs." + print("\nSingle Face Test 32: Check that all fonts have blue value pairs with first integer is less than or equal to the second integer in pairs.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] for font in fontgroup: if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break for fontDict in font.FDArray: try: # not all fonts have BlueValues, but they should. for i in range(0, len(fontDict.Private.BlueValues), 2): if fontDict.Private.BlueValues[i] > fontDict.Private.BlueValues[i+1]: - print "\nError: The font has BlueValues pairs with the first value is greater than the second value in pairs" - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.BlueValues[i], fontDict.Private.BlueValues[i+1] - print "\tBlueValues:", fontDict.Private.BlueValues + print("\nError: The font has BlueValues pairs with the first value is greater than the second value in pairs") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.BlueValues[i], fontDict.Private.BlueValues[i+1]) + print("\tBlueValues:", fontDict.Private.BlueValues) except AttributeError: - print "Skipping test - missing BlueValues - for ", font.PostScriptName1 + print("Skipping test - missing BlueValues - for ", font.PostScriptName1) continue try: # not all fonts have OtherBlues. for i in range(0, len(fontDict.Private.OtherBlues), 2): if fontDict.Private.OtherBlues[i] > fontDict.Private.OtherBlues[i+1]: - print "\nError: The font has OtherBlues pairs with the first value is greater than the second value in pairs" - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.OtherBlues[i], fontDict.Private.OtherBlues[i+1] - print "\tOtherBlues:", fontDict.Private.OtherBlues + print("\nError: The font has OtherBlues pairs with the first value is greater than the second value in pairs") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.OtherBlues[i], fontDict.Private.OtherBlues[i+1]) + print("\tOtherBlues:", fontDict.Private.OtherBlues) except AttributeError: pass try: # not all fonts have FamilyBlues. for i in range(0, len(fontDict.Private.FamilyBlues), 2): if fontDict.Private.FamilyBlues[i] > fontDict.Private.FamilyBlues[i+1]: - print "\nError: The font has FamilyBlues pairs with the first value is greater than the second value in pairs" - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.FamilyBlues[i], fontDict.Private.FamilyBlues[i+1] - print "\tFamilyBlues:", fontDict.Private.FamilyBlues + print("\nError: The font has FamilyBlues pairs with the first value is greater than the second value in pairs") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.FamilyBlues[i], fontDict.Private.FamilyBlues[i+1]) + print("\tFamilyBlues:", fontDict.Private.FamilyBlues) except AttributeError: pass try: # not all fonts have FamilyOtherBlues. for i in range(0, len(fontDict.Private.FamilyOtherBlues), 2): if fontDict.Private.FamilyOtherBlues[i] > fontDict.Private.FamilyOtherBlues[i+1]: - print "\nError: The font has FamilyOtherBlues pairs with the first value is greater than the second value in pairs" - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.FamilyOtherBlues[i], fontDict.Private.FamilyOtherBlues[i+1] - print "\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues + print("\nError: The font has FamilyOtherBlues pairs with the first value is greater than the second value in pairs") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.FamilyOtherBlues[i], fontDict.Private.FamilyOtherBlues[i+1]) + print("\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues) except AttributeError: pass def doSingleTest33(): global preferredFamilyList1 - print "\nSingle Face Test 33: Check that Bottom Zone blue value pairs and Top Zone blue value pairs are at least (2*BlueFuzz+1) unit apart in a font." + print("\nSingle Face Test 33: Check that Bottom Zone blue value pairs and Top Zone blue value pairs are at least (2*BlueFuzz+1) unit apart in a font.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] for font in fontgroup: if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break for fontDict in font.FDArray: try: # not all fonts have OtherBlues. @@ -3016,58 +2927,58 @@ def doSingleTest33(): try: # not all fonts have BlueValues. bottomZone = fontDict.Private.BlueValues[0:2] except AttributeError: - print "Skipping test - missing BlueValues - for ", font.PostScriptName1 + print("Skipping test - missing BlueValues - for ", font.PostScriptName1) continue for i in range(0,len(bottomZone)-1,2): # compare a pair to the rest for j in range(i+2, len(bottomZone)): if abs(bottomZone[i] - bottomZone[j]) < (2*fontDict.Private.BlueFuzz + 1): # first integer in pair - print "\nError: The BottomZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1) - print "\tFont:", font.PostScriptName1 - print "\tValues:", bottomZone[i], bottomZone[j] - print "\tBottomZone:", bottomZone + print("\nError: The BottomZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1)) + print("\tFont:", font.PostScriptName1) + print("\tValues:", bottomZone[i], bottomZone[j]) + print("\tBottomZone:", bottomZone) if abs(bottomZone[i+1] - bottomZone[j]) < (2*fontDict.Private.BlueFuzz + 1): # second integer in pair - print "\nError: The BottomZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1) - print "\tFont:", font.PostScriptName1 - print "\tValues:", bottomZone[i+1], bottomZone[j] - print "\tBottomZone:", bottomZone + print("\nError: The BottomZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1)) + print("\tFont:", font.PostScriptName1) + print("\tValues:", bottomZone[i+1], bottomZone[j]) + print("\tBottomZone:", bottomZone) topZone = fontDict.Private.BlueValues[2:] for i in range(0,len(topZone)-1,2): # compare a pair to the rest for j in range(i+2, len(topZone)): if abs(topZone[i] - topZone[j]) < (2*fontDict.Private.BlueFuzz + 1): - print "\nError: The TopZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1) - print "\tFont:", font.PostScriptName1 - print "\tValues:", topZone[i], topZone[j] - print "\tTopZone:", topZone + print("\nError: The TopZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1)) + print("\tFont:", font.PostScriptName1) + print("\tValues:", topZone[i], topZone[j]) + print("\tTopZone:", topZone) if abs(topZone[i+1] - topZone[j]) < (2*fontDict.Private.BlueFuzz + 1): - print "\nError: The TopZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1) - print "\tFont:", font.PostScriptName1 - print "\tValues:", topZone[i+1], topZone[j] - print "\tTopZone:", topZone + print("\nError: The TopZone have pairs less than %d units apart." % (2*fontDict.Private.BlueFuzz + 1)) + print("\tFont:", font.PostScriptName1) + print("\tValues:", topZone[i+1], topZone[j]) + print("\tTopZone:", topZone) def doSingleTest34(): global preferredFamilyList1 - print "\nSingle Face Test 34: Check that the difference between numbers in blue value pairs meet the requirement." + print("\nSingle Face Test 34: Check that the difference between numbers in blue value pairs meet the requirement.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] for font in fontgroup: if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break for fontDict in font.FDArray: try: for i in range(0, len(fontDict.Private.BlueValues), 2): diff = abs(fontDict.Private.BlueValues[i] - fontDict.Private.BlueValues[i+1]) if (fontDict.Private.BlueScale*240*diff) >= 240.0: - print "\nError: The BlueValues pair have distance greater than the maximum limit." - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.BlueValues[i], fontDict.Private.BlueValues[i+1] - print "\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale) - print "\tBlueValues:", fontDict.Private.BlueValues + print("\nError: The BlueValues pair have distance greater than the maximum limit.") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.BlueValues[i], fontDict.Private.BlueValues[i+1]) + print("\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale)) + print("\tBlueValues:", fontDict.Private.BlueValues) except AttributeError: - print "Skipping test - font dict does not contain OtherBlues", font.PostScriptName1 + print("Skipping test - font dict does not contain OtherBlues", font.PostScriptName1) continue try: for font in fontgroup: @@ -3075,11 +2986,11 @@ def doSingleTest34(): for i in range(0, len(fontDict.Private.OtherBlues), 2): diff = abs(fontDict.Private.OtherBlues[i] - fontDict.Private.OtherBlues[i+1]) if (fontDict.Private.BlueScale*240*diff) >= 240.0: - print "\nError: The OtherBlues pair have distance greater than the maximum limit." - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.OtherBlues[i], fontDict.Private.OtherBlues[i+1] - print "\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale) - print "\tOtherBlues:", fontDict.Private.OtherBlues + print("\nError: The OtherBlues pair have distance greater than the maximum limit.") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.OtherBlues[i], fontDict.Private.OtherBlues[i+1]) + print("\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale)) + print("\tOtherBlues:", fontDict.Private.OtherBlues) except AttributeError: pass @@ -3089,11 +3000,11 @@ def doSingleTest34(): for i in range(0, len(fontDict.Private.FamilyBlues), 2): diff = abs(fontDict.Private.FamilyBlues[i] - fontDict.Private.FamilyBlues[i+1]) if (fontDict.Private.BlueScale*240*diff) >= 240.0: - print "\nError: The FamilyBlues pair have distance greater than the maximum limit." - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.FamilyBlues[i], fontDict.Private.FamilyBlues[i+1] - print "\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale) - print "\tFamilyBlues:", fontDict.Private.FamilyBlues + print("\nError: The FamilyBlues pair have distance greater than the maximum limit.") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.FamilyBlues[i], fontDict.Private.FamilyBlues[i+1]) + print("\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale)) + print("\tFamilyBlues:", fontDict.Private.FamilyBlues) except AttributeError: pass @@ -3103,11 +3014,11 @@ def doSingleTest34(): for i in range(0, len(fontDict.Private.FamilyOtherBlues), 2): diff = abs(fontDict.Private.FamilyOtherBlues[i] - fontDict.Private.FamilyOtherBlues[i+1]) if (fontDict.Private.BlueScale*240*diff) >= 240.0: - print "\nError: The FamilyOtherBlues pair have distance greater than the maximum limit." - print "\tFont:", font.PostScriptName1 - print "\tPairs:", fontDict.Private.FamilyOtherBlues[i], fontDict.Private.FamilyOtherBlues[i+1] - print "\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale) - print "\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues + print("\nError: The FamilyOtherBlues pair have distance greater than the maximum limit.") + print("\tFont:", font.PostScriptName1) + print("\tPairs:", fontDict.Private.FamilyOtherBlues[i], fontDict.Private.FamilyOtherBlues[i+1]) + print("\tDistance (%d) is greater than 1/BlueScale (%5.2f) " % (diff, 1.0 / fontDict.Private.BlueScale)) + print("\tFamilyOtherBlues:", fontDict.Private.FamilyOtherBlues) except AttributeError: pass @@ -3119,8 +3030,8 @@ def doSingleFaceTests(singleTestList, familyTestList): g = globals() for val in singleTestList: funcName = "doSingleTest%s" % (val) - if not g.has_key(funcName): - print "Error: cannot find function '%s' to execute." % (funcName) + if funcName not in g: + print("Error: cannot find function '%s' to execute." % (funcName)) continue exec("%s()" % (funcName)) else: @@ -3164,26 +3075,26 @@ def doSingleFaceTests(singleTestList, familyTestList): def doFamilyTest1(): global compatibleFamilyList3 - print "\nFamily Test 1: Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts." + print("\nFamily Test 1: Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.") for name in compatibleFamilyList3.keys(): if len(compatibleFamilyList3[name]) > 4: - print "\nError: More than 4 fonts with the same nameID 1, compatible family name" - print "\t Compatible Family Name:", name + print("\nError: More than 4 fonts with the same nameID 1, compatible family name") + print("\t Compatible Family Name:", name) for font in compatibleFamilyList3[name]: - print "\t PostScript Name:", font.PostScriptName3 + print("\t PostScript Name:", font.PostScriptName3) def doFamilyTest2(): global compatibleFamilyList3 kUnicodeLanguageID = 1033 - print "\nFamily Test 2: Check that the Compatible Family group has same name ID's in all languages except for the compatible names 16,17,18, 20, 21 and 22." + print("\nFamily Test 2: Check that the Compatible Family group has same name ID's in all languages except for the compatible names 16,17,18, 20, 21 and 22.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] LanguageDict = {} fontList = "" for font in fontgroup: - fontList += " " + font.PostScriptName1 + fontList += " %s" % font.PostScriptName1 for nameID in font.nameIDDict.keys(): if (nameID[-1] in [16,17,18,20,21,22]) or (nameID[-1] > 255): continue @@ -3193,19 +3104,18 @@ def doFamilyTest2(): minCount = min(countList) maxCount = max(countList) if minCount != maxCount: - print "\tError: There are name table {platform, script, language, name ID} combinations that exist" - print "\tin some fonts but not all fonts within the Compatible Family '%s'. Please check fonts '%s'." % (name, fontList) - print "\t{platform, script, language, name ID} combination : Number of fonts in the family with this combination" - itemList = LanguageDict.items() - itemList.sort() + print("\tError: There are name table {platform, script, language, name ID} combinations that exist") + print("\tin some fonts but not all fonts within the Compatible Family '%s'. Please check fonts '%s'." % (name, fontList)) + print("\t{platform, script, language, name ID} combination : Number of fonts in the family with this combination") + itemList = sorted(LanguageDict.items()) for entry in itemList: - print "\t%s\t%s" % (entry[0], entry[1]) - print "All fonts should have the same set of {platform, script, language, name ID} combinations, so the number of fonts for each combination should be the same, excepting name ID's 16,17,18, and 20." + print("\t%s\t%s" % (entry[0], entry[1])) + print("All fonts should have the same set of {platform, script, language, name ID} combinations, so the number of fonts for each combination should be the same, excepting name ID's 16,17,18, and 20.") def doFamilyTest3(): global compatibleFamilyList3 - print "\nFamily Test 3: Check that the Compatible Family group has same Preferred Family name (name ID 16)in all languagesID 16 in all other languages." + print("\nFamily Test 3: Check that the Compatible Family group has same Preferred Family name (name ID 16)in all languagesID 16 in all other languages.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] LanguageList = [] @@ -3221,19 +3131,19 @@ def doFamilyTest3(): for Language in LanguageList: try: font1 = fontgroup[0] - nameID1 = uni2asc(unicode(font1.nameIDDict[(3, 1, Language, 16)], "utf_16_be")) + nameID1 = font1.nameIDDict[(3, 1, Language, 16)].decode('utf_16_be') except KeyError: nameID1 = None for font in fontgroup[1:]: try: - nameID = uni2asc(unicode(font.nameIDDict[(3, 1, Language, 16)], "utf_16_be")) + nameID = font.nameIDDict[(3, 1, Language, 16)].decode('utf_16_be') except KeyError: nameID = None if nameID != nameID1: - print "\tError: NameID 16 '%s' for language ID %s in font %s is not the same as '%s' in font %s." % (nameID, Language, font.PostScriptName1, nameID1, font1.PostScriptName1) + print("\tError: NameID 16 '%s' for language ID %s in font %s is not the same as '%s' in font %s." % (nameID, Language, font.PostScriptName1, nameID1, font1.PostScriptName1)) def doFamilyTest4(): - print "\nFamily Test 4: Family-wide 'size' feature checks." + print("\nFamily Test 4: Family-wide 'size' feature checks.") # make sure that all fonts with the same subgroup ID have the same size menu name # make sure that within a size subgroup, there is no overlap # make sure that within a size subgroup, coverage is continuous @@ -3272,7 +3182,7 @@ def doFamilyTest4(): font.sizeMenuName = font.nameIDDict[keyTuple] break else: - print "Program error: font has 'size' feature, but could not parse the values for font %s." % ( font.PostScriptName1) + print("Program error: font has 'size' feature, but could not parse the values for font %s." % ( font.PostScriptName1)) for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] @@ -3290,12 +3200,10 @@ def doFamilyTest4(): sizeGroupbyID[font.sizeSubfFamilyID] = gList if not seenSize: continue - fByID = sizeGroupbyID.values() - fByID.sort() - fByName = sizeGroupbyMenu.values() - fByName.sort() + fByID = sorted(sizeGroupbyID.values()) + fByName = sorted(sizeGroupbyMenu.values()) if fByName != fByID: - print " Error: in family %s, the fonts with the same size subgroup ID's do not all have the same menu names" % (name) + print(" Error: in family %s, the fonts with the same size subgroup ID's do not all have the same menu names" % (name)) # now check the ranges. lastList = None @@ -3305,9 +3213,9 @@ def doFamilyTest4(): menuName = fList[0].sizeMenuName sid = fList[0].sizeSubfFamilyID if lastList and len(pList) != len(lastList): - print " Warning: in family %s, the 'size' group (id %s, menu name %s) has %s members, while the group (id %s, menu name %s) has %s members." % (name, sid, menuName, len(pList), lastSID, lastMenuName, len(lastList) ) - print "\t (sub group id %s, menu name %s, fonts: %s" % ( sid, menuName, pList) - print "\t (sub group id %s, menu name %s, fonts: %s" % (lastSID, lastMenuName, lastList) + print(" Warning: in family %s, the 'size' group (id %s, menu name %s) has %s members, while the group (id %s, menu name %s) has %s members." % (name, sid, menuName, len(pList), lastSID, lastMenuName, len(lastList) )) + print("\t (sub group id %s, menu name %s, fonts: %s" % ( sid, menuName, pList)) + print("\t (sub group id %s, menu name %s, fonts: %s" % (lastSID, lastMenuName, lastList)) lastList = pList lastMenuName = menuName lastSID = sid @@ -3328,9 +3236,9 @@ def doFamilyTest4(): errorList.append([lastEntry, entry]) lastEntry = entry if error: - print " Error: design ranges for size subgroup ID %s, size menu %s in family %s are not contiguous." % (sid, font.sizeMenuName, name) + print(" Error: design ranges for size subgroup ID %s, size menu %s in family %s are not contiguous." % (sid, font.sizeMenuName, name)) for item in errorList: - print "previous range: %s - %s for %s, next range: %s - %s for %s. sub group ID %s." % (item[0][0], item[0][1], item[0][2], item[1][0], item[1][1], item[1][2], item[0][3]) + print("previous range: %s - %s for %s, next range: %s - %s for %s. sub group ID %s." % (item[0][0], item[0][1], item[0][2], item[1][0], item[1][1], item[1][2], item[0][3])) @@ -3338,23 +3246,23 @@ def doFamilyTest5(): global compatibleFamilyList3 - print "\nFamily Test 5: Check that style settings for each face is unique within Compatible Family group, in all languages." + print("\nFamily Test 5: Check that style settings for each face is unique within Compatible Family group, in all languages.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] for i in range(len(fontgroup)): font = fontgroup[i] for font1 in fontgroup[i+1:]: if font.isItalic == font1.isItalic and font.isBold == font1.isBold: - print "\nError: These two fonts have the same italic and bold style setting" - print "\tFont 1:", font.PostScriptName3 - print "\t\tItalic Bit:", font.isItalic, "Bold Bit:", font.isBold - print "\tFont 2:", font1.PostScriptName3 - print "\t\tItalic Bit:", font1.isItalic, "Bold Bit:", font1.isBold + print("\nError: These two fonts have the same italic and bold style setting") + print("\tFont 1:", font.PostScriptName3) + print("\t\tItalic Bit:", font.isItalic, "Bold Bit:", font.isBold) + print("\tFont 2:", font1.PostScriptName3) + print("\t\tItalic Bit:", font1.isItalic, "Bold Bit:", font1.isBold) def doFamilyTest6(): global compatibleFamilyList3 - print "\nFamily Test 6: Check that the Compatible Family group has a base font and at least two faces, and check if weight class is valid." + print("\nFamily Test 6: Check that the Compatible Family group has a base font and at least two faces, and check if weight class is valid.") baseBoldRangeDict = {250:(600,1000), 300:(600,950), 350:(600,900), 400:(600,850), 450:(600,800), 500:(650,750), 550:(600,800)} for name in compatibleFamilyList3.keys(): basefont = "" @@ -3367,15 +3275,15 @@ def doFamilyTest6(): if basefont == "": basefont = boldfont if basefont == "": - print "\tError: No base font in the group. Compatible family name:", name + print("\tError: No base font in the group. Compatible family name:", name) continue if basefont.usWeightClass == -1: - print "Skipping test - no OS/2 table.", basefont.PostScriptName1 + print("Skipping test - no OS/2 table.", basefont.PostScriptName1) return if basefont == boldfont and len(compatibleFamilyList3[name]) > 2: - print "\tError: Base font is not Regular face and the group has more than two faces for the group. Compatible family name:", name + print("\tError: Base font is not Regular face and the group has more than two faces for the group. Compatible family name:", name) continue if basefont == boldfont or boldfont == "": continue @@ -3383,29 +3291,29 @@ def doFamilyTest6(): wgtValue = 50*int(basefont.usWeightClass/50) boldRange = baseBoldRangeDict[wgtValue] except KeyError: - print"\tError: usWeightClass %s of regular font %s is outside of range that allows style linking to a Bold face: this will result is fake bolding of the Regular face when the Bold style is chsoen." % (basefont.usWeightClass, font.PostScriptName1) - print "\t\tPermissible range for base font %s in order for it to link to a Bold font: %s - %s" % (basefont.PostScriptName1, 250, 550) + print("\tError: usWeightClass %s of regular font %s is outside of range that allows style linking to a Bold face: this will result is fake bolding of the Regular face when the Bold style is chsoen." % (basefont.usWeightClass, font.PostScriptName1)) + print("\t\tPermissible range for base font %s in order for it to link to a Bold font: %s - %s" % (basefont.PostScriptName1, 250, 550)) continue if boldfont.usWeightClass < boldRange[0] or boldfont.usWeightClass > boldRange[1]: - print "\tError: usWeightClass '%s'of the Bold font is outside of BOLD RANGE [%s - %s] for the group. Compatible family name: %s" % (boldfont.usWeightClass, boldRange[0], boldRange[1], name) - print "\t\tBase Font:", basefont.PostScriptName3 - print "\t\tusWeightClass:", basefont.usWeightClass - print "\t\tBold Font:", boldfont.PostScriptName3 - print "\tu\tsWeightClass:", boldfont.usWeightClass - print "\t\tBOLD RANGE:", boldRange[0], "-", boldRange[1] + print("\tError: usWeightClass '%s'of the Bold font is outside of BOLD RANGE [%s - %s] for the group. Compatible family name: %s" % (boldfont.usWeightClass, boldRange[0], boldRange[1], name)) + print("\t\tBase Font:", basefont.PostScriptName3) + print("\t\tusWeightClass:", basefont.usWeightClass) + print("\t\tBold Font:", boldfont.PostScriptName3) + print("\tu\tsWeightClass:", boldfont.usWeightClass) + print("\t\tBOLD RANGE:", boldRange[0], "-", boldRange[1]) continue if (boldfont.usWeightClass % 50) != 0: - print "\tWarning: usWeightClass of the Bold font is within range, but not in increments of 50 for the group. Compatible family name:", name - print "\t\tBase Font:", basefont.PostScriptName3 - print "\t\tusWeightClass:", basefont.usWeightClass - print "\t\tBold Font:", boldfont.PostScriptName3 - print "\t\tusWeightClass:", boldfont.usWeightClass + print("\tWarning: usWeightClass of the Bold font is within range, but not in increments of 50 for the group. Compatible family name:", name) + print("\t\tBase Font:", basefont.PostScriptName3) + print("\t\tusWeightClass:", basefont.usWeightClass) + print("\t\tBold Font:", boldfont.PostScriptName3) + print("\t\tusWeightClass:", boldfont.usWeightClass) def doFamilyTest7(): global preferredFamilyList1 - print "\nFamily Test 7: Check that all faces in the Preferred Family group have the same Copyright and Trademark string." + print("\nFamily Test 7: Check that all faces in the Preferred Family group have the same Copyright and Trademark string.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] font = fontgroup[0] @@ -3416,13 +3324,13 @@ def doFamilyTest7(): temp1 = re.sub("\s+", " ", temp1) temp2 = re.sub("\s+", " ", temp2) if temp1 != temp2: - print "\nWarning: These two fonts do not have the same Copyright String. Preferred family:", name + print("\nWarning: These two fonts do not have the same Copyright String. Preferred family:", name) else: - print "\nNote: These two fonts differ only in the years in the Copyright String. Preferred family:", name - print "\tFont 1:", font.PostScriptName1 - print "\tCopyright:", font.copyrightStr1 - print "\tFont 2:", font1.PostScriptName1 - print "\tCopyright:", font1.copyrightStr1 + print("\nNote: These two fonts differ only in the years in the Copyright String. Preferred family:", name) + print("\tFont 1:", font.PostScriptName1) + print("\tCopyright:", font.copyrightStr1) + print("\tFont 2:", font1.PostScriptName1) + print("\tCopyright:", font1.copyrightStr1) for font1 in fontgroup[1:]: if font.trademarkStr1 != font1.trademarkStr1: temp1 = re.sub(" *[21][980]\d\d,* *", "", font.trademarkStr1) @@ -3430,24 +3338,24 @@ def doFamilyTest7(): temp1 = re.sub("\s+", " ", temp1) temp2 = re.sub("\s+", " ", temp2) if temp1 != temp2: - print "\nWarning: These two fonts do not have the same Trademark String. Preferred family:", name + print("\nWarning: These two fonts do not have the same Trademark String. Preferred family:", name) else: - print "\nNote: These two fonts differ only in the years in the Trademark String. Preferred family:", name - print "\tFont 1:", font.PostScriptName1 - print "\tTrademark:", font.trademarkStr1 - print "\tFont 2:", font1.PostScriptName1 - print "\tTrademark:", font1.trademarkStr1 + print("\nNote: These two fonts differ only in the years in the Trademark String. Preferred family:", name) + print("\tFont 1:", font.PostScriptName1) + print("\tTrademark:", font.trademarkStr1) + print("\tFont 2:", font1.PostScriptName1) + print("\tTrademark:", font1.trademarkStr1) def doFamilyTest8(): global compatibleFamilyList3, fontlist - print "\nFamily Test 8: Check the Compatible Family group style vs OS/2.usWeightClass settings. Max 2 usWeightClass allowed." + print("\nFamily Test 8: Check the Compatible Family group style vs OS/2.usWeightClass settings. Max 2 usWeightClass allowed.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] weightClassList = [] if fontgroup[0].usWeightClass == -1: - print "Skipping test - no OS/2 table.", fontgroup[0].PostScriptName1 + print("Skipping test - no OS/2 table.", fontgroup[0].PostScriptName1) return boldFont = None @@ -3460,12 +3368,12 @@ def doFamilyTest8(): elif not font.isItalic: baseFont = font if len(weightClassList) > 2: - print "\nError: More than two usWeightClass values in the Group:", name - print "\tusWeightClass values:", weightClassList + print("\nError: More than two usWeightClass values in the Group:", name) + print("\tusWeightClass values:", weightClassList) continue if len(weightClassList) < 2: if boldFont and baseFont: - print "\nError: Bold style font set with same usWeightClass value as the Regular face, for font", boldFont.PostScriptName3 + print("\nError: Bold style font set with same usWeightClass value as the Regular face, for font", boldFont.PostScriptName3) continue if weightClassList[0] > weightClassList[1]: usWeightClass1, usWeightClass2 = weightClassList[1], weightClassList[0] @@ -3473,30 +3381,30 @@ def doFamilyTest8(): usWeightClass1, usWeightClass2 = weightClassList[0], weightClassList[1] for font in fontgroup: if font.usWeightClass == usWeightClass1 and font.isBold: - print "\nError: Bold style set with lower usWeightClass value for the Font", font.PostScriptName3 - print "\tusWeightClass:", font.usWeightClass + print("\nError: Bold style set with lower usWeightClass value for the Font", font.PostScriptName3) + print("\tusWeightClass:", font.usWeightClass) if font.usWeightClass == usWeightClass2 and not font.isBold: - print "\nError: Bold style not set with higher usWeightClass value for the Font", font.PostScriptName3 - print "\tusWeightClass:", font.usWeightClass + print("\nError: Bold style not set with higher usWeightClass value for the Font", font.PostScriptName3) + print("\tusWeightClass:", font.usWeightClass) def doFamilyTest9(): global compatibleFamilyList3 - print "\nFamily Test 9: Check that all faces in the Compatible Family group have the same OS/2.usWidthClass value." + print("\nFamily Test 9: Check that all faces in the Compatible Family group have the same OS/2.usWidthClass value.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] font = fontgroup[0] if font.usWidthClass == -1: - print "Skipping test - no OS/2 table.", font.PostScriptName1 + print("Skipping test - no OS/2 table.", font.PostScriptName1) return for font1 in fontgroup[1:]: if font.usWidthClass != font1.usWidthClass: - print "\nWarning: These two fonts do not have the same usWidthClass in Group", name - print "\tFont 1:", font.PostScriptName3 - print "\tusWidthClass:", font.usWidthClass - print "\tFont 2:", font1.PostScriptName3 - print "\tusWidthClass:", font1.usWidthClass + print("\nWarning: These two fonts do not have the same usWidthClass in Group", name) + print("\tFont 1:", font.PostScriptName3) + print("\tusWidthClass:", font.usWidthClass) + print("\tFont 2:", font1.PostScriptName3) + print("\tusWidthClass:", font1.usWidthClass) def doFamilyTest10(): @@ -3515,11 +3423,11 @@ def getPanoseStatus(panoseList): return panoseStatus # 0 means all the values are 0; 1 means they were probably derived by makeotf; 2 means they exist, and were not derived by makeotf. firstFontName = "" - print "\nFamily Test 10: Check that if all faces in family have a Panose number and that CFF ISFixedPtch matches the Panose monospace setting." + print("\nFamily Test 10: Check that if all faces in family have a Panose number and that CFF ISFixedPtch matches the Panose monospace setting.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] if not fontgroup[0].panose: - print "Skipping test: font is missing the OS.2 table", fontgroup[0].PostScriptName1 + print("Skipping test: font is missing the OS.2 table", fontgroup[0].PostScriptName1) return for i in range(len(fontgroup)): @@ -3527,9 +3435,9 @@ def getPanoseStatus(panoseList): fontPanoseStatus= getPanoseStatus(font.panose) if not fontPanoseStatus == 2: if fontPanoseStatus == 1: - print " Warning: ", font.PostScriptName1, " has only the first 4 Panose values set; these are may be default values derived by makeotf." + print(" Warning: ", font.PostScriptName1, " has only the first 4 Panose values set; these are may be default values derived by makeotf.") elif fontPanoseStatus == 0: - print " Error: ", font.PostScriptName1, " has only 0 Panose values." + print(" Error: ", font.PostScriptName1, " has only 0 Panose values.") else: # if has real Panose value, check Monospace fields. isPanoseMonospaced = 0 @@ -3541,21 +3449,21 @@ def getPanoseStatus(panoseList): isPanoseMonospaced = 1 else: isPanoseMonospaced = 0 - if font.ttFont.has_key('CFF ') and (isPanoseMonospaced != font.topDict.isFixedPitch): + if 'CFF ' in font.ttFont and (isPanoseMonospaced != font.topDict.isFixedPitch): if isPanoseMonospaced: - print " Error: OS/2 Panose digit 4 indicates that the font is monospaced, but the CFF top dict IsFixedPitch value is set false." + print(" Error: OS/2 Panose digit 4 indicates that the font is monospaced, but the CFF top dict IsFixedPitch value is set false.") else: - print " Error: OS/2 Panose digit 4 indicates that the font is not monospaced, but the CFF top dict IsFixedPitch value is set true." + print(" Error: OS/2 Panose digit 4 indicates that the font is not monospaced, but the CFF top dict IsFixedPitch value is set true.") if (isPanoseMonospaced != font.isFixedPitchfromHMTX): if isPanoseMonospaced: - print " Error: OS/2 Panose digit 4 indicates that the font is monospaced, but there is more than one width value in the htmx table." + print(" Error: OS/2 Panose digit 4 indicates that the font is monospaced, but there is more than one width value in the htmx table.") else: - print " Error: OS/2 Panose digit 4 indicates that the font is not monospaced, but there is only one width value in the hmtx table." - if font.ttFont.has_key('CFF ') and (font.topDict.isFixedPitch != font.isFixedPitchfromHMTX): + print(" Error: OS/2 Panose digit 4 indicates that the font is not monospaced, but there is only one width value in the hmtx table.") + if 'CFF ' in font.ttFont and (font.topDict.isFixedPitch != font.isFixedPitchfromHMTX): if font.topDict.isFixedPitch: - print " Error: the CFF top dict IsFixedPitch value is set true, but there is more than one width value in the htmx table." + print(" Error: the CFF top dict IsFixedPitch value is set true, but there is more than one width value in the htmx table.") else: - print " Error: the CFF top dict IsFixedPitch value is set false, but there is only one width value in the hmtx table." + print(" Error: the CFF top dict IsFixedPitch value is set false, but there is only one width value in the hmtx table.") def doFamilyTest11(): @@ -3570,7 +3478,7 @@ def CompareWinToMacMenuName(winMenuName, macMenuName): # might be the same! isEqual = 1 for i in range(lenMac): - if ord(macMenuName[i]) > 127: + if byteord(macMenuName[i]) > 127: continue # ignore upper ascii if (winMenuName[i] == macMenuName[i]): continue @@ -3580,7 +3488,7 @@ def CompareWinToMacMenuName(winMenuName, macMenuName): return isEqual - print "\nFamily Test 11: Check that Mac and Windows menu names differ for all but base font, and are the same for the base font." + print("\nFamily Test 11: Check that Mac and Windows menu names differ for all but base font, and are the same for the base font.") for name in compatibleFamilyList3.keys(): basefont = "" @@ -3592,25 +3500,25 @@ def CompareWinToMacMenuName(winMenuName, macMenuName): Platform, Encoding, Language, ID = nameIDKey if (Platform == 1) and (Encoding == 0) and (ID == 18): - macMenuName = font.nameIDDict[nameIDKey] + macMenuName = tounicode(font.nameIDDict[nameIDKey]) if (Platform == 1) and (Encoding == 0) and (ID == 4) and not macMenuName: - macMenuName = font.nameIDDict[nameIDKey] + macMenuName = tounicode(font.nameIDDict[nameIDKey]) if Platform == 3 and Encoding == 1 and ID == 1: - winMenuName = uni2asc(unicode(font.nameIDDict[nameIDKey], "utf_16_be")) + winMenuName = tounicode(font.nameIDDict[nameIDKey].decode('utf_16_be')) if font.isBold or font.isItalic: if not font.isCID: if CompareWinToMacMenuName(winMenuName, macMenuName): - print "\nError: The Mac and Windows Compatible Names should differ in a style-linked BOLD or Italic font, but do not. Font", font.PostScriptName1 - print "\tMac Compatible Name:", macMenuName - print "\tWindows Compatible Name:", winMenuName + print("\nError: The Mac and Windows Compatible Names should differ in a style-linked BOLD or Italic font, but do not. Font", font.PostScriptName1) + print("\tMac Compatible Name:", macMenuName) + print("\tWindows Compatible Name:", winMenuName) else: if not font.isCID: if not CompareWinToMacMenuName(winMenuName, macMenuName): - print "\nError: The Mac and Windows Compatible Names for the regular face of a style-linked group should be the same. Font", font.PostScriptName1 - print "\tMac Compatible Name:", macMenuName - print "\tWindows Compatible Name:", winMenuName + print("\nError: The Mac and Windows Compatible Names for the regular face of a style-linked group should be the same. Font", font.PostScriptName1) + print("\tMac Compatible Name:", macMenuName) + print("\tWindows Compatible Name:", winMenuName) def doFamilyTest12(): @@ -3619,7 +3527,7 @@ def doFamilyTest12(): where lookupSetIndex is a number that uniquely identifies a set of lookups belonging to a feature. This mapping is kept in lookupDefDict[lookupSetIndex] = """ - print "\nFamily Test 12: Check that GSUB/GPOS script and language feature lists are the same in all faces, and that DFLT/dflt and latn/dflt are present." + print("\nFamily Test 12: Check that GSUB/GPOS script and language feature lists are the same in all faces, and that DFLT/dflt and latn/dflt are present.") dictList = [] for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] @@ -3638,7 +3546,7 @@ def doFamilyTest12(): for scriptRecord in layoutTable.table.ScriptList.ScriptRecord: stag = scriptRecord.ScriptTag scriptDict[stag] = {} - langSysRecords = map(lambda rec: [rec.LangSysTag, rec.LangSys], scriptRecord.Script.LangSysRecord) + langSysRecords = list(map(lambda rec: [rec.LangSysTag, rec.LangSys], scriptRecord.Script.LangSysRecord)) if scriptRecord.Script.DefaultLangSys: langSysRecords.append( ['dflt', scriptRecord.Script.DefaultLangSys]) for langSysRecord in langSysRecords: @@ -3648,12 +3556,12 @@ def doFamilyTest12(): for featIndex in langSysRecord[1].FeatureIndex: featRecord = featList[featIndex] lstr = str(featRecord.Feature.LookupListIndex) - if not lookupListDict.has_key(lstr): + if lstr not in lookupListDict: lookupDef = 1 + len(lookupListDict.keys()) lookupListDict[lstr] = lookupDef lookupDefDict[lookupDef] = lstr lookupDef = lookupListDict[lstr] - if not featDict.has_key(featRecord.FeatureTag): + if featRecord.FeatureTag not in featDict: featDict[featRecord.FeatureTag] = [] featDict[featRecord.FeatureTag].append( [stag, ltag, lookupDef]) scriptDict[stag][ltag][featRecord.FeatureTag] = lookupDef @@ -3661,10 +3569,10 @@ def doFamilyTest12(): for featIndex in langSysRecord[1].ReqFeatureIndex: featRecord = featList[featIndex] lstr = str(featRecord.Feature.LookupListIndex) - if not lookupListDict.has_key(lstr): + if lstr not in lookupListDict: lookupListDict[lstr] = 1 + len(lookupListDict.keys()) lookupDef = lookupListDict[lstr] - if not featDict.has_key(featRecord.FeatureTag): + if featRecord.FeatureTag not in featDict: featDict[featRecord.FeatureTag] = [] featDict[featRecord.FeatureTag].append( [stag, ltag, lookupDef]) scriptDict[stag][ltag][featRecord.FeatureTag] = lookupDef @@ -3675,23 +3583,23 @@ def doFamilyTest12(): # check script and language tags. for tag in scriptDict.keys(): if tag not in kKnownScriptTags: - print " Error: font uses unknown script tag %s. %s." % (tag, font.PostScriptName1) + print(" Error: font uses unknown script tag %s. %s." % (tag, font.PostScriptName1)) for tag in langDict.keys(): if tag not in kKnownLanguageTags: - print " Error: font uses unknown language tag %s. %s." % (tag, font.PostScriptName1) + print(" Error: font uses unknown language tag %s. %s." % (tag, font.PostScriptName1)) fontDict[tableTag] = [scriptDict, featDict] if featDict: - if langDict.has_key("TUR"): - print " Error: font uses incorrect language tag TUR rather the TRK in table %s. %s." % (tableTag, font.PostScriptName1) + if "TUR" in langDict: + print(" Error: font uses incorrect language tag TUR rather the TRK in table %s. %s." % (tableTag, font.PostScriptName1)) try: rec = scriptDict['DFLT']['dflt'] except: - print " Warning: font does not have script 'DFLT' language 'dflt' in table %s. %s." % (tableTag, font.PostScriptName1) + print(" Warning: font does not have script 'DFLT' language 'dflt' in table %s. %s." % (tableTag, font.PostScriptName1)) try: rec = scriptDict['latn']['dflt'] except: - print " Warning: font does not have script 'latn' language 'dflt' in table %s. %s." % (tableTag, font.PostScriptName1) + print(" Warning: font does not have script 'latn' language 'dflt' in table %s. %s." % (tableTag, font.PostScriptName1)) dictList.append( [font.PostScriptName1,fontDict, lookupDefDict]) @@ -3700,78 +3608,73 @@ def doFamilyTest12(): for entry in dictList: key = str(entry[1]) + str(entry[2]) - if langSysDict.has_key(key): + if key in langSysDict: langSysDict[key].append(entry) else: langSysDict[key] = [entry] if len(langSysDict.keys()) > 1: - print " Error: In GPOS/GUSB tables, the sets of lookups used by features in the script-language systems differ between fonts." - print "\tThis may be intended if the faces have different charsets." + print(" Error: In GPOS/GUSB tables, the sets of lookups used by features in the script-language systems differ between fonts.") + print("\tThis may be intended if the faces have different charsets.") for value in langSysDict.values(): - print - print "Lang/Sys Table for font(s): ", + print() + print("Lang/Sys Table for font(s): ", end=' ') for entry in value: - print entry[0], - print + print(entry[0], end=' ') + print() fontDict = entry[1] lookupDefDict = entry[2] - for layoutTag in fontDict.keys(): - print - print "\t%s Table - script:tag list." % layoutTag + for layoutTag in sorted(fontDict.keys()): + print() + print("\t%s Table - script:tag list." % layoutTag) scriptDict = fontDict[layoutTag][0] if not scriptDict: - print "\t\tNo features present for table %s" % (layoutTag) + print("\t\tNo features present for table %s" % (layoutTag)) break featDict = fontDict[layoutTag][1] - scriptList = scriptDict.keys() - scriptList.sort() + scriptList = sorted(scriptDict.keys()) # print script/language lists for stag in scriptList: - print "\t", - print ("%s:" % stag).ljust(6), - langList = scriptDict[stag].keys() - langList.sort() + print("\t", end='') + print(("%s:" % stag).ljust(6), end=' ') + langList = sorted(scriptDict[stag].keys()) for ltag in langList[:-1]: - print ltag.ljust(6), - print langList[-1] - print + print(ltag.ljust(6), end=' ') + print(langList[-1]) + print() # print print lookup def mappings - print "\tlookup group ID to lookup index list:" + print("\tlookup group ID to lookup index list:") for key in lookupDefDict.keys(): - print "\t", - print ("ID %s:" % key).ljust(6), - print (" maps to lookups %s." % lookupDefDict[key]) - print + print("\t", end='') + print(("ID %s:" % key).ljust(6), end=' ') + print(" maps to lookups %s." % lookupDefDict[key]) + print() # print header for feature table - print "\t%s Table - feature lookup groups by script:tag column headers." % layoutTag - print "\t(The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.)" - print "\t", + print("\t%s Table - feature lookup groups by script:tag column headers." % layoutTag) + print("\t(The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.)") + print("\t", end='') for stag in scriptList: - print ("%s:" % stag).rjust(5), - langList = scriptDict[stag].keys() - langList.sort() + print(("%s:" % stag).rjust(5), end=' ') + langList = sorted(scriptDict[stag].keys()) for ltag in langList: - print ltag.ljust(5), - print + print(ltag.ljust(5), end=' ') + print() - fList = featDict.keys() - fList.sort() + fList = sorted(featDict.keys()) for ftag in fList: summary = "" setsDiffer = 0 firstSet = None - print "\t" + ftag.ljust(5), + print("\t" + ftag.ljust(5), end=' ') lastScript = scriptList[0] for stag in scriptList: if lastScript != stag: summary = summary + " "*6 - langList = scriptDict[stag].keys() - langList.sort() + langList = sorted(scriptDict[stag].keys()) for ltag in langList: try: lookupSet = str(scriptDict[stag][ltag][ftag]) @@ -3784,13 +3687,13 @@ def doFamilyTest12(): setsDiffer = 1 summary = summary + setText if setsDiffer: - print summary + print(summary) else: - print "" + print("") def doFamilyTest13(): kTestBit = 1 << 8 - print "\nFamily Test 13: Check that no two faces in a preferred group have the same weight/width/Italic-style values when the OS/2 table fsSelection bit 8 (WEIGHT_WIDTH_SLOPE_ONLY) is set." + print("\nFamily Test 13: Check that no two faces in a preferred group have the same weight/width/Italic-style values when the OS/2 table fsSelection bit 8 (WEIGHT_WIDTH_SLOPE_ONLY) is set.") dictList = [] for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] @@ -3806,10 +3709,10 @@ def doFamilyTest13(): haveError = 1 break if haveError: - print "\tError: fonts in family of %s do not all have the same setting for the WEIGHT_WIDTH_SLOPE_ONLY bit in the OS/2 selection table." % (name) + print("\tError: fonts in family of %s do not all have the same setting for the WEIGHT_WIDTH_SLOPE_ONLY bit in the OS/2 selection table." % (name)) for i in range(numFonts): font = fontgroup[i] - print "\tError: for font %s, WEIGHT_WIDTH_SLOPE_ONLY bit value %s." % (font.FullFontName1, (font.fsSelection & kTestBit) != 0) + print("\tError: for font %s, WEIGHT_WIDTH_SLOPE_ONLY bit value %s." % (font.FullFontName1, (font.fsSelection & kTestBit) != 0)) break # then check that OS/2 version is 4 if bit is on. @@ -3817,7 +3720,7 @@ def doFamilyTest13(): for i in range(numFonts): font = fontgroup[i] if font.OS2version < 4: - print "\tError: font %s has WEIGHT_WIDTH_SLOPE_ONLY bit in the OS/2 selection table set, but the OS/2 table version is less than 4." % (font.FullFontName1) + print("\tError: font %s has WEIGHT_WIDTH_SLOPE_ONLY bit in the OS/2 selection table set, but the OS/2 table version is less than 4." % (font.FullFontName1)) haveError = 1 if haveError: break @@ -3830,42 +3733,42 @@ def doFamilyTest13(): hashStr = "%s %s %s" % (font.usWidthClass, font.usWeightClass, font.isItalic) try: prevName = groupDict[hashStr] - print "\tError: font %s has the same weight/width/Italic values as font %s in the same family group when WEIGHT_WIDTH_SLOPE_ONLY is set." % ( font.FullFontName1, prevName) + print("\tError: font %s has the same weight/width/Italic values as font %s in the same family group when WEIGHT_WIDTH_SLOPE_ONLY is set." % ( font.FullFontName1, prevName)) except KeyError: groupDict[hashStr] = font.FullFontName1 def doFamilyTest14(): kTestBit = 1 << 8 - print "\nFamily Test 14: Check that all faces in a preferred group have the same fsType embedding values." + print("\nFamily Test 14: Check that all faces in a preferred group have the same fsType embedding values.") dictList = [] for name in preferredFamilyList1.keys(): preferredSubFamilyList1 = preferredFamilyList1[name] font0 = preferredSubFamilyList1[0] if font0.fsType == -1: - print "\tError: Skipping Embedding permissions report - OS/2 table does not exist in first font", font0.PostScriptName1 + print("\tError: Skipping Embedding permissions report - OS/2 table does not exist in first font", font0.PostScriptName1) continue if (font0.fsType != 8) and ((not font0.trademarkStr1) or ("Adobe Systems" in font0.trademarkStr1)): - print "\tError: fsType embedding permission '%s' for '%s' should be 8 for Adobe fonts." % (font0.fsType, font0.PostScriptName1) + print("\tError: fsType embedding permission '%s' for '%s' should be 8 for Adobe fonts." % (font0.fsType, font0.PostScriptName1)) for font in preferredSubFamilyList1[1:]: if font.fsType == -1: - print " Error: Skipping font - OS/2 table does not exist in base font", font.PostScriptName1 + print(" Error: Skipping font - OS/2 table does not exist in base font", font.PostScriptName1) continue if font0.fsType != font.fsType: - print "\tError: fsType embedding permission '%s' for '%s' differs from value '%s' in '%s'." % (font.fsType, font.PostScriptName1, font0.fsType, font0.PostScriptName1 ) + print("\tError: fsType embedding permission '%s' for '%s' differs from value '%s' in '%s'." % (font.fsType, font.PostScriptName1, font0.fsType, font0.PostScriptName1 )) if (font.fsType != 8) and ((not font.trademarkStr1) or ("Adobe Systems" in font.trademarkStr1)): - print "\tError: fsType embedding permission '%s' for '%s' should be 8 for Adobe fonts, aka OS/2.achVendID == Adobe." % (font.fsType, font.PostScriptName1) + print("\tError: fsType embedding permission '%s' for '%s' should be 8 for Adobe fonts, aka OS/2.achVendID == Adobe." % (font.fsType, font.PostScriptName1)) def doFamilyTest15(): - print "\nFamily Test 15: Check that all faces in a preferred group have the same underline position and width." + print("\nFamily Test 15: Check that all faces in a preferred group have the same underline position and width.") for name in preferredFamilyList1.keys(): preferredSubFamilyList1 = preferredFamilyList1[name] font0 = preferredSubFamilyList1[0] if font0.underlinePos == -1: - print "\tError: Skipping underline report - post table does not exist in first font", font0.PostScriptName1 + print("\tError: Skipping underline report - post table does not exist in first font", font0.PostScriptName1) continue underlinePos = font0.underlinePos @@ -3873,36 +3776,28 @@ def doFamilyTest15(): for font in preferredSubFamilyList1[1:]: if font.underlinePos == -1: - print "\tError: Skipping font - post table does not exist in base font", font.PostScriptName1 + print("\tError: Skipping font - post table does not exist in base font", font.PostScriptName1) continue if underlinePos != font.underlinePos: - print "\tError: 'post' table underline position '%s' for '%s' differs from value '%s' in '%s'." % (font.underlinePos, font.PostScriptName1, underlinePos, font0.PostScriptName1 ) + print("\tError: 'post' table underline position '%s' for '%s' differs from value '%s' in '%s'." % (font.underlinePos, font.PostScriptName1, underlinePos, font0.PostScriptName1 )) if underlineThickness != font.underlineThickness: - print "\tError: 'post' table underline thickness '%s' for '%s' differs from value '%s' in '%s'." % (font.underlineThickness, font.PostScriptName1, underlineThickness, font0.PostScriptName1 ) + print("\tError: 'post' table underline thickness '%s' for '%s' differs from value '%s' in '%s'." % (font.underlineThickness, font.PostScriptName1, underlineThickness, font0.PostScriptName1 )) + def doFamilyTest16(): kWidthMultiplier = 3 - def byCharsetLength(item1, item2): - len1 = len(item1[0]) - len2 = len(item2[0]) - if len1 > len2: - return 1 - if len1 < len2: - return -1 - return 0 - - print "\nFamily Test 16: Check that for all faces in a preferred family group, that the width of any glyph is not more than %s times the width of the same glyph in any other face." % (kWidthMultiplier) + + print("\nFamily Test 16: Check that for all faces in a preferred family group, that the width of any glyph is not more than %s times the width of the same glyph in any other face." % (kWidthMultiplier)) for name in preferredFamilyList1.keys(): # First, collect charsets. fontgroup = preferredFamilyList1[name] if len(fontgroup) == 1: - print "\tSkipping Family Test 16: can't usefully compare glyph widths between fonts when there is only one font in a preferred family. %s." % (name) + print("\tSkipping Family Test 16: can't usefully compare glyph widths between fonts when there is only one font in a preferred family. %s." % (name)) continue charsetDict = {} for font in fontgroup: - charset = copy.copy(font.glyphnames) - charset.sort() + charset = sorted(copy.copy(font.glyphnames)) charset = tuple(charset) fontList = charsetDict.get(charset, []) fontList.append(font) @@ -3920,8 +3815,7 @@ def byCharsetLength(item1, item2): del charsetDict[charset] lastCharSet = charset if charsetDict: - charsetList = charsetDict.keys() - charsetList.sort(byCharsetLength) + charsetList = sorted(list(charsetDict.keys()), key=len) longestCharset = charsetList[-1] charsetDict[longestCharset].extend(singletonFonts) else: @@ -3937,26 +3831,26 @@ def byCharsetLength(item1, item2): try: widthList.append([htmx_table.metrics[gname][0], font.PostScriptName1]) except KeyError: - print "\tError: Glyph '%s' is in font, but is nt in the width list. This can happen when the number of glyphs in the maxp table is less than the actual number of glyphs." % (gname) + print("\tError: Glyph '%s' is in font, but is nt in the width list. This can happen when the number of glyphs in the maxp table is less than the actual number of glyphs." % (gname)) pass if not widthList: continue widthList.sort() if (widthList[0][0]*kWidthMultiplier < widthList[-1][0]): - print "\tWarning: width (%s) of glyph %s in %s is more than %s times the width (%s) in %s." % (widthList[-1][0], gname, widthList[-1][1], kWidthMultiplier,widthList[0][0], widthList[0][1]) + print("\tWarning: width (%s) of glyph %s in %s is more than %s times the width (%s) in %s." % (widthList[-1][0], gname, widthList[-1][1], kWidthMultiplier,widthList[0][0], widthList[0][1])) def doFamilyTest17(): - print "\nFamily Test 17: Check that fonts have OS/2 table version 4." + print("\nFamily Test 17: Check that fonts have OS/2 table version 4.") for name in preferredFamilyList1.keys(): fontgroup = preferredFamilyList1[name] for font in fontgroup: if font.OS2version < 4: - print "\tWarning: The font %s should have an OS/2 table version of at least 4 instead of %s." % (font.PostScriptName1, font.OS2version) + print("\tWarning: The font %s should have an OS/2 table version of at least 4 instead of %s." % (font.PostScriptName1, font.OS2version)) def doFamilyTest18(): global compatibleFamilyList3 - print "\nFamily Test 18: Check that all faces in a Compatible Family group have the same array size of BlueValues and OtherBlues within a Compatible Family Name Italic or Regular sub-group of the family." + print("\nFamily Test 18: Check that all faces in a Compatible Family group have the same array size of BlueValues and OtherBlues within a Compatible Family Name Italic or Regular sub-group of the family.") # start with Compatible Family Name groups # divide these up into subgroups by charset # further divide these groups by Italic vs Roman. @@ -3974,7 +3868,7 @@ def doFamilyTest18(): for subgroup in groups: font = subgroup[0] if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break # check vs bbox, and check order try: @@ -3988,35 +3882,35 @@ def doFamilyTest18(): tempBlues = copy.copy(font.BlueValues) if len(tempBlues) < 2: - print " Error: font BlueValues field has no blue values! %s." % (font.PostScriptName1) + print(" Error: font BlueValues field has no blue values! %s." % (font.PostScriptName1)) if (len(tempBlues) == 2) and (tempBlues == [0,0]): - print " Error: font BlueValues field has no blue values! %s." % (font.PostScriptName1) + print(" Error: font BlueValues field has no blue values! %s." % (font.PostScriptName1)) if len(tempBlues) > 14: - print " Error: font BlueValues has '%s' zones, but is allowed to hold at most 7. %s" % (len(tempBlues)/2, font.PostScriptName1) + print(" Error: font BlueValues has '%s' zones, but is allowed to hold at most 7. %s" % (len(tempBlues)/2, font.PostScriptName1)) if (len(tempBlues) % 2) != 0: - print " Error: font BlueValues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font.PostScriptName1) + print(" Error: font BlueValues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font.PostScriptName1)) tempBlues.sort() #if tempBlues != font.BlueValues: # this turns out to be OK. - # print " Error: font BlueValues '%s' are not sorted in ascending order. %s." % (font.BlueValues, font.PostScriptName1) + # print(" Error: font BlueValues '%s' are not sorted in ascending order. %s." % (font.BlueValues, font.PostScriptName1)) if tempBlues[1] < font.fontBBox[1]: - print " Error: font BlueValues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font.fontBBox[1], font.PostScriptName1) + print(" Error: font BlueValues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font.fontBBox[1], font.PostScriptName1)) if tempBlues[-2] > font.fontBBox[3]: - print " Error: font BlueValues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2], tempBlues[-1], font.fontBBox[3], font.PostScriptName1) + print(" Error: font BlueValues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2], tempBlues[-1], font.fontBBox[3], font.PostScriptName1)) if font.OtherBlues and (len(tempBlues) < 2): tempBlues = copy.copy(font.OtherBlues) if len(tempBlues) > 10: - print " Error: font OtherBlues has '%s' zones, but is allowed to hold at most 5. %s" % (len(tempBlues)/2, font.PostScriptName1) + print(" Error: font OtherBlues has '%s' zones, but is allowed to hold at most 5. %s" % (len(tempBlues)/2, font.PostScriptName1)) if (len(tempBlues) % 2) != 0: - print " Error: font OtherBlues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font.PostScriptName1) + print(" Error: font OtherBlues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font.PostScriptName1)) tempBlues.sort() #if tempBlues != font.OtherBlues: # this turns out to be OK. - # print " Error: font OtherBlues '%s' are not sorted in ascending order. %s." % (font.OtherBlues, font.PostScriptName1) + # print(" Error: font OtherBlues '%s' are not sorted in ascending order. %s." % (font.OtherBlues, font.PostScriptName1)) if tempBlues[1] < font.fontBBox[1]: - print " Error: font OtherBlues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font.fontBBox[1], font.PostScriptName1) + print(" Error: font OtherBlues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font.fontBBox[1], font.PostScriptName1)) if tempBlues[-2] > font.fontBBox[3]: - print " Error: font OtherBlues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2], tempBlues[-1], font.fontBBox[3], font.PostScriptName1) + print(" Error: font OtherBlues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2], tempBlues[-1], font.fontBBox[3], font.PostScriptName1)) for font1 in subgroup[1:]: try: @@ -4029,51 +3923,51 @@ def doFamilyTest18(): font1.OtherBlues = [] if len(font.BlueValues) != len(font1.BlueValues): - print "\nError: These two fonts do not have the same array size of BlueValues for", name - print "\tFont 1:", font.PostScriptName1 - print "\tBlueValues:", font.BlueValues - print "\tFont 2:", font1.PostScriptName1 - print "\tBlueValues:", font1.BlueValues + print("\nError: These two fonts do not have the same array size of BlueValues for", name) + print("\tFont 1:", font.PostScriptName1) + print("\tBlueValues:", font.BlueValues) + print("\tFont 2:", font1.PostScriptName1) + print("\tBlueValues:", font1.BlueValues) # check vs bbox, and check order tempBlues = copy.copy(font1.BlueValues ) if len(tempBlues) > 14: - print " Error: font BlueValues has '%s' zones, but is allowed to hold at most 7. %s" % (len(tempBlues)/2, font1.PostScriptName1) + print(" Error: font BlueValues has '%s' zones, but is allowed to hold at most 7. %s" % (len(tempBlues)/2, font1.PostScriptName1)) if (len(tempBlues) % 2) != 0: - print " Error: font BlueValues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font1.PostScriptName1) + print(" Error: font BlueValues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font1.PostScriptName1)) tempBlues.sort() #if tempBlues != font1.BlueValues: # this turns out to be OK. - # print " Error: font BlueValues '%s' are not sorted in ascending order. %s." % (font1.BlueValues, font1.PostScriptName1) + # print(" Error: font BlueValues '%s' are not sorted in ascending order. %s." % (font1.BlueValues, font1.PostScriptName1)) if tempBlues[1] < font1.fontBBox[1]: - print " Error: font BlueValues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font1.fontBBox[1], font1.PostScriptName1) + print(" Error: font BlueValues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font1.fontBBox[1], font1.PostScriptName1)) if tempBlues[-2] > font1.fontBBox[3]: - print " Error: font BlueValues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2], tempBlues[-1], font1.fontBBox[3], font1.PostScriptName1) + print(" Error: font BlueValues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2], tempBlues[-1], font1.fontBBox[3], font1.PostScriptName1)) if len(font.OtherBlues) != len(font1.OtherBlues): - print "\nError: These two fonts do not have the same array size of OtherBlues for", name - print "\tFont 1:", font.PostScriptName1 - print "\tOtherBlues:", font.OtherBlues - print "\tFont 2:", font1.PostScriptName1 - print "\tOtherBlues:", font1.OtherBlues + print("\nError: These two fonts do not have the same array size of OtherBlues for", name) + print("\tFont 1:", font.PostScriptName1) + print("\tOtherBlues:", font.OtherBlues) + print("\tFont 2:", font1.PostScriptName1) + print("\tOtherBlues:", font1.OtherBlues) if font1.OtherBlues: tempBlues = copy.copy(font1.OtherBlues) if len(tempBlues) > 10: - print " Error: font OtherBlues has '%s' zones, but is allowed to hold at most 5. %s" % (len(tempBlues)/2, font1.PostScriptName1) + print(" Error: font OtherBlues has '%s' zones, but is allowed to hold at most 5. %s" % (len(tempBlues)/2, font1.PostScriptName1)) if (len(tempBlues) % 2) != 0: - print " Error: font OtherBlues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font1.PostScriptName1) + print(" Error: font OtherBlues has '%s' integer values, List of values must be even as it takes a pair to describe an alignment zone. %s" % (len(tempBlues), font1.PostScriptName1)) tempBlues.sort() #if tempBlues != font1.OtherBlues: # this turns out to be OK. - # print " Error: font OtherBlues '%s' are not sorted in ascending order. %s." % (font1.OtherBlues, font1.PostScriptName1) + # print(" Error: font OtherBlues '%s' are not sorted in ascending order. %s." % (font1.OtherBlues, font1.PostScriptName1)) if tempBlues[1] < font1.fontBBox[1]: - print " Error: font OtherBlues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font1.fontBBox[1], font1.PostScriptName1) + print(" Error: font OtherBlues has lowest zone (%s,%s) outside of minimum y of font bounding box '%s'. %s" % (tempBlues[0], tempBlues[1], font1.fontBBox[1], font1.PostScriptName1)) if tempBlues[-2] > font1.fontBBox[3]: - print " Error: font OtherBlues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2],tempBlues[-1], font1.fontBBox[3], font1.PostScriptName1) + print(" Error: font OtherBlues has highest zone (%s,%s) outside of maximum y of font bounding box '%s'. %s" % (tempBlues[-2],tempBlues[-1], font1.fontBBox[3], font1.PostScriptName1)) def doFamilyTest19(): global compatibleFamilyList3 - print "\nFamily Test 19: Check that all faces in the Preferred Family group have the same values of FamilyBlues and FamilyOtherBlues, and are valid." + print("\nFamily Test 19: Check that all faces in the Preferred Family group have the same values of FamilyBlues and FamilyOtherBlues, and are valid.") # A preferred family can contain groups of fonts that have different Family Blues; different optical sizes, for example. # What I will do is collect a dict of unique FamilyBlue values, and report on any that are unique, or do not contain a "regular" member". @@ -4084,7 +3978,7 @@ def doFamilyTest19(): fontgroup = preferredFamilyList1[name] for font in fontgroup: if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break if not hasattr(font, 'BlueValues'): try: @@ -4106,7 +4000,7 @@ def doFamilyTest19(): maxYBBox = -1000 for font in fontgroup: if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break if font.fontBBox[1] < minYBBox: minYBBox = font.fontBBox[1] @@ -4144,7 +4038,7 @@ def doFamilyTest19(): break # if all the blue values are the same, then FamilyBlues are not needed. if blueValuesDiffer: - print " Warning. The fonts in the family group %s do not have FamilyBlue values. This font feature helps with alignment of different styles of the same family on a text line." % (name) + print(" Warning. The fonts in the family group %s do not have FamilyBlue values. This font feature helps with alignment of different styles of the same family on a text line." % (name)) continue for FBEntry in FBList: @@ -4164,12 +4058,12 @@ def doFamilyTest19(): regularFont = font if len(fontList) > 1: if not regularFont: - print " Warning: In family %s, a group of fonts have %s, but there is no base font with the same value in its %s array. This affects" % (name, FBKey, BKey) + print(" Warning: In family %s, a group of fonts have %s, but there is no base font with the same value in its %s array. This affects" % (name, FBKey, BKey)) for font in fontList: - print "\t\t", font.PostScriptName1 + print("\t\t", font.PostScriptName1) else: if tempBlues: - print " Error: In family %s, a font has a unique %s array. This is certainly unintended. %s." % (name, FBKey, font.PostScriptName1) + print(" Error: In family %s, a font has a unique %s array. This is certainly unintended. %s." % (name, FBKey, font.PostScriptName1)) #print FBKey, tempBlues #for font in fontList: # print font.PostScriptName1, @@ -4177,13 +4071,13 @@ def doFamilyTest19(): if not tempBlues: continue if len(tempBlues) > 14: - print " Error: In family %s, %s has '%s' zones, but is allowed to hold at most 7. This affects:" % (name, FBKey, len(tempBlues)/2) + print(" Error: In family %s, %s has '%s' zones, but is allowed to hold at most 7. This affects:" % (name, FBKey, len(tempBlues)/2)) for font in fontList: - print "\t\t", font.PostScriptName1 + print("\t\t", font.PostScriptName1) if (len(tempBlues) % 2) != 0: - print " Error: In family %s, %s has '%s' integer values. List of values must be even as it takes a pair to describe an alignment zone. This affects:" % (name, FBKey, len(tempBlues)) + print(" Error: In family %s, %s has '%s' integer values. List of values must be even as it takes a pair to describe an alignment zone. This affects:" % (name, FBKey, len(tempBlues))) for font in fontList: - print "\t\t", font.PostScriptName1 + print("\t\t", font.PostScriptName1) # Note: It is not at error to have Family zones outside of font bbox. @@ -4191,54 +4085,54 @@ def doFamilyTest19(): def doFamilyTest20(): global compatibleFamilyList3 - print "\nFamily Test 20: Check that all faces in the Compatible Family group have the same BlueScale value." + print("\nFamily Test 20: Check that all faces in the Compatible Family group have the same BlueScale value.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] font = fontgroup[0] if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) continue baseBlueScale = font.FDArray[0].Private.BlueScale for font1 in fontgroup[1:]: if not font1.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break testBlueScale = font1.FDArray[0].Private.BlueScale if baseBlueScale != testBlueScale: - print "\nNote: These two fonts do not have the same values of BlueScale for", name - print "\tFont 1:", font.PostScriptName1 - print "\tBlueScale:", baseBlueScale - print "\tFont 2:", font1.PostScriptName1 - print "\tBlueScale:", testBlueScale + print("\nNote: These two fonts do not have the same values of BlueScale for", name) + print("\tFont 1:", font.PostScriptName1) + print("\tBlueScale:", baseBlueScale) + print("\tFont 2:", font1.PostScriptName1) + print("\tBlueScale:", testBlueScale) def doFamilyTest21(): global compatibleFamilyList3 - print "\nFamilyTest 21: Check that all faces in the Compatible Family group have the same BlueShift value." + print("\nFamilyTest 21: Check that all faces in the Compatible Family group have the same BlueShift value.") for name in compatibleFamilyList3.keys(): fontgroup = compatibleFamilyList3[name] font = fontgroup[0] if not font.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) continue baseBlueShift = font.FDArray[0].Private.BlueShift for font1 in fontgroup[1:]: if not font1.topDict: # not CFF - print "\t\tSkipping non-PostScript Font:", font.PostScriptName1 + print("\t\tSkipping non-PostScript Font:", font.PostScriptName1) break testBlueShift = font1.FDArray[0].Private.BlueShift if baseBlueShift != testBlueShift: - print "\nNote: These two fonts do not have the same values of BlueShift for", name - print "\tFont 1:", font.PostScriptName1 - print "\tBlueShift:", baseBlueShift - print "\tFont 2:", font1.PostScriptName1 - print "\tBlueShift:", testBlueShift + print("\nNote: These two fonts do not have the same values of BlueShift for", name) + print("\tFont 1:", font.PostScriptName1) + print("\tBlueShift:", baseBlueShift) + print("\tFont 2:", font1.PostScriptName1) + print("\tBlueShift:", testBlueShift) def doFamilyTests(singleTestList, familyTestList): global compatibleFamilyList3 # build a group of fonts with the same nameID 1(Win, Unicode, English) for later use in individual Family Test for font in fontlist: - if compatibleFamilyList3.has_key(font.compatibleFamilyName3): + if font.compatibleFamilyName3 in compatibleFamilyList3: compatibleSubFamilyList3 = compatibleFamilyList3[font.compatibleFamilyName3] else: compatibleSubFamilyList3 = [] @@ -4249,8 +4143,8 @@ def doFamilyTests(singleTestList, familyTestList): g = globals() for val in familyTestList: funcName = "doFamilyTest%s" % (val) - if not g.has_key(funcName): - print "Error: cannot find function '%s' to execute." % (funcName) + if funcName not in g: + print("Error: cannot find function '%s' to execute." % (funcName)) continue exec("%s()" % (funcName)) else: @@ -4282,7 +4176,7 @@ def build_preferredFamilyList(fontlist): preferredFamilyList1 = {} for font in fontlist: - if preferredFamilyList1.has_key(font.preferredFamilyName1): + if font.preferredFamilyName1 in preferredFamilyList1: preferredSubFamilyList1 = preferredFamilyList1[font.preferredFamilyName1] else: preferredSubFamilyList1 = [] @@ -4293,47 +4187,49 @@ def build_preferredFamilyList(fontlist): def print_menu_name_report(): global preferredFamilyList1 - print "\nMenu Name Report:" + print("\nMenu Name Report:") for name in preferredFamilyList1.keys(): preferredSubFamilyList1 = preferredFamilyList1[name] - print "\nPreferred Menu Mac Compatible Menu Windows Compatible Menu" + print("\nPreferred Menu Mac Compatible Menu Windows Compatible Menu") for font in preferredSubFamilyList1: - print string.ljust(upperascii_to_hex(font.preferredFamilyName3)+"/"+upperascii_to_hex(font.preferredSubFamilyName3), 40), string.ljust(upperascii_to_hex(font.MacCompatibleFullName1), 34), string.ljust(font.compatibleFamilyName3+"/"+font.compatibleSubFamilyName3, 34) + print((font.preferredFamilyName3+"/"+font.preferredSubFamilyName3).ljust(40), + font.MacCompatibleFullName1.ljust(34), + font.compatibleFamilyName3+"/"+font.compatibleSubFamilyName3) def print_font_metric_report(): global preferredFamilyList1 - print "\nFONT METRICS REPORT" - print "Report 1:", + print("\nFONT METRICS REPORT") + print("Report 1:", end=' ') for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "Num glyphs from maxp.numGlyphs:" + print("Num glyphs from maxp.numGlyphs:") font0 = preferredSubFamilyList1[0] diff = 0 for font in preferredSubFamilyList1[1:]: if font0.numGlyphs != font.numGlyphs: diff = 1 if diff == 0: - print "All fonts have the same value:", font0.numGlyphs + print("All fonts have the same value:", font0.numGlyphs) continue for font in sort_by_numGlyphs_and_PostScriptName1(preferredSubFamilyList1): - print string.ljust(font.PostScriptName1+":", 40), font.numGlyphs + print(("%s:" % font.PostScriptName1).ljust(40), font.numGlyphs) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] font0 = preferredSubFamilyList1[0] diff = 0 if font0.sTypoAscender == -1: - print "Skipping ascender/descender/linegap report - OS/2 table does not exist", font0.PostScriptName1 + print("Skipping ascender/descender/linegap report - OS/2 table does not exist", font0.PostScriptName1) else: for font in preferredSubFamilyList1[1:]: if font.sTypoAscender == -1: - print "Skipping font - OS/2 table does not exist", font.PostScriptName1 + print("Skipping font - OS/2 table does not exist", font.PostScriptName1) diff = 1 continue @@ -4342,35 +4238,35 @@ def print_font_metric_report(): diff = 1 if diff == 0: - print "OS/2 sTypoAscender/sTypoDescender/sTypoLineGap/sCapHeight/sxHeight" - print "All fonts have the same value:", - print "%5d%5d%5d%5d%5d" % (font0.sTypoAscender, font0.sTypoDescender, font0.sTypoLineGap, font0.sCapHeight, font0.sxHeight) + print("OS/2 sTypoAscender/sTypoDescender/sTypoLineGap/sCapHeight/sxHeight") + print("All fonts have the same value:", end=' ') + print("%5d%5d%5d%5d%5d" % (font0.sTypoAscender, font0.sTypoDescender, font0.sTypoLineGap, font0.sCapHeight, font0.sxHeight)) continue - print "Font TypoAscent/TypoDescent/LineGap/CapHeight/sxHeight" + print("Font TypoAscent/TypoDescent/LineGap/CapHeight/sxHeight") for font in preferredSubFamilyList1: - print "%40s%5d%8d%8d%8d%8d" % (string.ljust(font.PostScriptName1+":", 40), font.sTypoAscender, font.sTypoDescender, font.sTypoLineGap, font.sCapHeight, font.sxHeight) + print("%40s%5d%8d%8d%8d%8d" % (("%s:" % font.PostScriptName1).ljust(40), font.sTypoAscender, font.sTypoDescender, font.sTypoLineGap, font.sCapHeight, font.sxHeight)) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "Italic Angle from post.italicAngle:" + print("Italic Angle from post.italicAngle:") font0 = preferredSubFamilyList1[0] diff = 0 for font in preferredSubFamilyList1[1:]: if font0.italicAngle != font.italicAngle: diff = 1 if diff == 0: - print "All fonts have the same value:", "%7.3f" % font0.italicAngle + print("All fonts have the same value:", "%7.3f" % font0.italicAngle) continue for font in sort_angle(preferredSubFamilyList1): - print string.ljust(font.PostScriptName1+":", 40), "%7.3f" % font.italicAngle + print(("%s:" % font.PostScriptName1).ljust(40), "%7.3f" % font.italicAngle) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "isBold from hhea.mscStyle:" + print("isBold from hhea.mscStyle:") table = ["Not Bold", " Bold"] font0 = preferredSubFamilyList1[0] diff = 0 @@ -4378,7 +4274,7 @@ def print_font_metric_report(): if font0.isBold != font.isBold: diff = 1 if diff == 0: - print "All fonts have the same value:", table[font0.isBold] + print("All fonts have the same value:", table[font0.isBold]) continue boldlist = [] notboldlist = [] @@ -4388,14 +4284,14 @@ def print_font_metric_report(): else: notboldlist.append(font) for font in boldlist: - print string.ljust(font.PostScriptName1+":", 40), table[font.isBold] + print(("%s:" % font.PostScriptName1).ljust(40), table[font.isBold]) for font in notboldlist: - print string.ljust(font.PostScriptName1+":", 40), table[font.isBold] + print(("%s:" % font.PostScriptName1).ljust(40), table[font.isBold]) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "isItalic from hhea.mscStyle:" + print("isItalic from hhea.mscStyle:") table = ["Not Italic", " Italic"] font0 = preferredSubFamilyList1[0] diff = 0 @@ -4403,7 +4299,7 @@ def print_font_metric_report(): if font0.isItalic != font.isItalic: diff = 1 if diff == 0: - print "All fonts have the same value:", table[font0.isItalic] + print("All fonts have the same value:", table[font0.isItalic]) continue italiclist = [] notitaliclist = [] @@ -4413,253 +4309,264 @@ def print_font_metric_report(): else: notitaliclist.append(font) for font in italiclist: - print string.ljust(font.PostScriptName1+":", 40), table[font.isItalic] + print(("%s:" % font.PostScriptName1).ljust(40), table[font.isItalic]) for font in notitaliclist: - print string.ljust(font.PostScriptName1+":", 40), table[font.isItalic] + print(("%s:" % font.PostScriptName1).ljust(40), table[font.isItalic]) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "OTF version from head.fontRevision:" + print("OTF version from head.fontRevision:") font0 = preferredSubFamilyList1[0] diff = 0 for font in preferredSubFamilyList1[1:]: if font0.OTFVersion != font.OTFVersion: diff = 1 if diff == 0: - print "All fonts have the same value:", "%5.3f" % font0.OTFVersion + print("All fonts have the same value:", "%5.3f" % font0.OTFVersion) continue for font in sort_version(preferredSubFamilyList1): - print string.ljust(font.PostScriptName1+":", 40), "%5.3f" % font.OTFVersion + print(("%s:" % font.PostScriptName1).ljust(40), "%5.3f" % font.OTFVersion) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "Embedding permissions setting from OS/2.fsType:" + print("Embedding permissions setting from OS/2.fsType:") font0 = preferredSubFamilyList1[0] if font0.fsType == -1: - print "Skipping Embedding permissions report - OS/2 table does not exist in base font", font0.PostScriptName1 + print("Skipping Embedding permissions report - OS/2 table does not exist in base font", font0.PostScriptName1) else: diff = 0 for font in preferredSubFamilyList1[1:]: if font.fsType == -1: - print "Skipping font - OS/2 table does not exist in base font", font.PostScriptName1 + print("Skipping font - OS/2 table does not exist in base font", font.PostScriptName1) diff = 1 continue if font0.fsType != font.fsType: diff = 1 if diff == 0: - print "All fonts have the same value:", "0x%04x" % font0.fsType, + print("All fonts have the same value:", "0x%04x" % font0.fsType, end=' ') if font0.fsType == 0: - print "'Installable embedding'", + print("'Installable embedding'", end=' ') if font0.fsType & 2: - print "'restricted license embedding'", + print("'restricted license embedding'", end=' ') if font0.fsType & 4: - print "'print and preview'", + print("'print and preview'", end=' ') if font0.fsType & 8: - print "'editable embedding'", + print("'editable embedding'", end=' ') if font0.fsType & 0x0100: - print "'no subsetting'", + print("'no subsetting'", end=' ') if font0.fsType & 0x0200: - print "'bitmapping embedding only'", - print "" + print("'bitmapping embedding only'", end=' ') + print("") continue for font in preferredSubFamilyList1: - print string.ljust(font.PostScriptName1+":", 40), "0x%04x" % font.fsType, + print(("%s:" % font.PostScriptName1).ljust(40), "0x%04x" % font.fsType, end=' ') if font.fsType == 0: - print "'Installable embedding'", + print("'Installable embedding'", end=' ') if font.fsType & 2: - print "'restricted license embedding'", + print("'restricted license embedding'", end=' ') if font.fsType & 4: - print "'print and preview'", + print("'print and preview'", end=' ') if font.fsType & 8: - print "'editable embedding'", + print("'editable embedding'", end=' ') if font.fsType & 0x0100: - print "'no subsetting'", + print("'no subsetting'", end=' ') if font.fsType & 0x0200: - print "'bitmapping embedding only'", - print "" + print("'bitmapping embedding only'", end=' ') + print("") - print ("\nReport 2:") + print("\nReport 2:") for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "FontBBox from head.XY min/max:\t\tX Min, YMin, XMax, YMax" + print("FontBBox from head.XY min/max:\t\tX Min, YMin, XMax, YMax") for font in preferredSubFamilyList1: - print string.ljust(font.PostScriptName1+":", 40), font.fontBBox + print(("%s:" % font.PostScriptName1).ljust(40), font.fontBBox) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "usWeightClass from OS/2.usWeightClass:" + print("usWeightClass from OS/2.usWeightClass:") font0 = preferredSubFamilyList1[0] diff = 0 if font0.usWeightClass == -1: - print "Skipping weightClass - OS/2 table does not exist in base font", font0.PostScriptName1 + print("Skipping weightClass - OS/2 table does not exist in base font", font0.PostScriptName1) else: for font in preferredSubFamilyList1[1:]: if font.usWeightClass == -1: - print "Skipping font - OS/2 table does not exist in base font", font.PostScriptName1 + print("Skipping font - OS/2 table does not exist in base font", font.PostScriptName1) diff = 1 continue if font0.usWeightClass != font.usWeightClass: diff = 1 if diff == 0: - print "All fonts have the same value:", font0.usWeightClass, + print("All fonts have the same value:", font0.usWeightClass, end=' ') if font0.usWeightClass == 100: - print "Thin" + print("Thin") elif font0.usWeightClass == 200: - print "Extra-Light (Ultra-light)" + print("Extra-Light (Ultra-light)") elif font0.usWeightClass == 300: - print "Light" + print("Light") elif font0.usWeightClass == 400: - print "Normal (Regular)" + print("Normal (Regular)") elif font0.usWeightClass == 500: - print "Medium" + print("Medium") elif font0.usWeightClass == 600: - print "Semi-bold (Demi-bold)" + print("Semi-bold (Demi-bold)") elif font0.usWeightClass == 700: - print "Bold" + print("Bold") elif font0.usWeightClass == 800: - print "Extra-Bold (Ultra-bold)" + print("Extra-Bold (Ultra-bold)") elif font0.usWeightClass == 900: - print "Black (Heavy)" + print("Black (Heavy)") elif (font0.usWeightClass > 100) and (font0.usWeightClass < 200): - print "Thin to Extra-Light (Ultra-light)" + print("Thin to Extra-Light (Ultra-light)") elif (font0.usWeightClass > 200) and (font0.usWeightClass < 300): - print "Extra-Light (Ultra-light) to Light" + print("Extra-Light (Ultra-light) to Light") elif (font0.usWeightClass > 300) and (font0.usWeightClass < 400): - print "Light to Normal (Regular)" + print("Light to Normal (Regular)") elif (font0.usWeightClass > 400) and (font0.usWeightClass < 500): - print "Normal (Regular) to Medium" + print("Normal (Regular) to Medium") elif (font0.usWeightClass > 500) and (font0.usWeightClass < 600): - print "Medium to Semi-bold (Demi-bold)" + print("Medium to Semi-bold (Demi-bold)") elif (font0.usWeightClass > 600) and (font0.usWeightClass < 700): - print "Semi-bold (Demi-bold) to Bold" + print("Semi-bold (Demi-bold) to Bold") elif (font0.usWeightClass > 700) and (font0.usWeightClass < 800): - print "Bold to Extra-bold (Ultra-bold)" + print("Bold to Extra-bold (Ultra-bold)") elif (font0.usWeightClass > 800) and (font0.usWeightClass < 900): - print "Extra-bold (Ultra-bold) to Black (Heavy)" + print("Extra-bold (Ultra-bold) to Black (Heavy)") else: - print "value out of range" + print("value out of range") continue for font in sort_weight(preferredSubFamilyList1): - print string.ljust(font.PostScriptName1+":", 40), "%3d" % font.usWeightClass, + print(("%s:" % font.PostScriptName1).ljust(40), "%3d" % font.usWeightClass, end=' ') if font.usWeightClass == 100: - print "Thin" + print("Thin") elif font.usWeightClass == 200: - print "Extra-Light (Ultra-light)" + print("Extra-Light (Ultra-light)") elif font.usWeightClass == 300: - print "Light" + print("Light") elif font.usWeightClass == 400: - print "Normal (Regular)" + print("Normal (Regular)") elif font.usWeightClass == 500: - print "Medium" + print("Medium") elif font.usWeightClass == 600: - print "Semi-bold (Demi-bold)" + print("Semi-bold (Demi-bold)") elif font.usWeightClass == 700: - print "Bold" + print("Bold") elif font.usWeightClass == 800: - print "Extra-Bold (Ultra-bold)" + print("Extra-Bold (Ultra-bold)") elif font.usWeightClass == 900: - print "Black (Heavy)" + print("Black (Heavy)") elif (font.usWeightClass > 100) and (font.usWeightClass < 200): - print "Thin to Extra-Light (Ultra-light)" + print("Thin to Extra-Light (Ultra-light)") elif (font.usWeightClass > 200) and (font.usWeightClass < 300): - print "Extra-Light (Ultra-light) to Light" + print("Extra-Light (Ultra-light) to Light") elif (font.usWeightClass > 300) and (font.usWeightClass < 400): - print "Light to Normal (Regular)" + print("Light to Normal (Regular)") elif (font.usWeightClass > 400) and (font.usWeightClass < 500): - print "Normal (Regular) to Medium" + print("Normal (Regular) to Medium") elif (font.usWeightClass > 500) and (font.usWeightClass < 600): - print "Medium to Semi-bold (Demi-bold)" + print("Medium to Semi-bold (Demi-bold)") elif (font.usWeightClass > 600) and (font.usWeightClass < 700): - print "Semi-bold (Demi-bold) to Bold" + print("Semi-bold (Demi-bold) to Bold") elif (font.usWeightClass > 700) and (font.usWeightClass < 800): - print "Bold to Extra-bold (Ultra-bold)" + print("Bold to Extra-bold (Ultra-bold)") elif (font.usWeightClass > 800) and (font.usWeightClass < 900): - print "Extra-bold (Ultra-bold) to Black (Heavy)" + print("Extra-bold (Ultra-bold) to Black (Heavy)") else: - print "value out of range" + print("value out of range") for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] widthClassTable = ['Ultra-condensed', 'Extra-condensed', 'Condensed', 'Semi-condensed', 'Medium (normal)', 'Semi-expanded', 'Expanded', 'Extra-expanded', 'Ultra-expanded'] - print "usWidthClass from OS/2.usWidthClass:" + print("usWidthClass from OS/2.usWidthClass:") font0 = preferredSubFamilyList1[0] diff = 0 if font0.usWidthClass == -1: - print "Skipping WidthClass report - OS/2 table does not exist in base font", font0.PostScriptName1 + print("Skipping WidthClass report - OS/2 table does not exist in base font", font0.PostScriptName1) else: for font in preferredSubFamilyList1[1:]: if font.usWidthClass == -1: - print "Skipping font - OS/2 table does not exist in base font", font.PostScriptName1 + print("Skipping font - OS/2 table does not exist in base font", font.PostScriptName1) diff = 1 continue if font0.usWidthClass != font.usWidthClass: diff = 1 if diff == 0: - print "All fonts have the same value:", font0.usWidthClass, widthClassTable[font0.usWidthClass-1] + print("All fonts have the same value:", font0.usWidthClass, widthClassTable[font0.usWidthClass-1]) continue for font in sort_width(preferredSubFamilyList1): - print string.ljust(font.PostScriptName1+":", 40), font.usWidthClass, - print widthClassTable[font.usWidthClass-1] + print(("%s:" % font.PostScriptName1).ljust(40), font.usWidthClass, widthClassTable[font.usWidthClass-1]) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "underlinePosition from post.underlinePosition:" + print("underlinePosition from post.underlinePosition:") font0 = preferredSubFamilyList1[0] diff = 0 for font in preferredSubFamilyList1[1:]: if font0.underlinePos != font.underlinePos: diff = 1 if diff == 0: - print "All fonts have the same value:", font0.underlinePos + print("All fonts have the same value:", font0.underlinePos) continue for font in sort_underline(preferredSubFamilyList1): - print string.ljust(font.PostScriptName1+":", 40), font.underlinePos + print(("%s:" % font.PostScriptName1).ljust(40), font.underlinePos) for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] - print "Vendor ID from OS/2.achVendID:" + print("Vendor ID from OS/2.achVendID:") font0 = preferredSubFamilyList1[0] diff = 0 if font0.usWidthClass == -1: - print "Skipping vendor ID report - OS/2 table does not exist in base font", font0.PostScriptName1 + print("Skipping vendor ID report - OS/2 table does not exist in base font", font0.PostScriptName1) else: for font in preferredSubFamilyList1[1:]: if font.usWidthClass == -1: - print "Skipping font - OS/2 table does not exist in base font", font.PostScriptName1 + print("Skipping font - OS/2 table does not exist in base font", font.PostScriptName1) diff = 1 continue if font0.achVendID != font.achVendID: diff = 1 if diff == 0: - print "All fonts have the same value:", font0.achVendID + print("All fonts have the same value:", font0.achVendID) continue for font in preferredSubFamilyList1: - print string.ljust(font.PostScriptName1+":", 40), font.achVendID + print(("%s:" % font.PostScriptName1).ljust(40), font.achVendID) - print "\nReport 3:Copyright and Trademark strings for the first face in the group" + print("\nReport 3:Copyright and Trademark strings for the first face in the group") for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] font = preferredSubFamilyList1[0] - print "First Face:", font.PostScriptName1 - print "Copyright: ", font.copyrightStr1 - print "Trademark: ", font.trademarkStr1 + + cprgt = font.copyrightStr1 + console_encoding = sys.stdout.encoding + if not isinstance(cprgt, str): + # font.copyrightStr1 is bytes + cprgt = font.copyrightStr1.encode('utf-8') + + elif console_encoding and console_encoding != 'UTF-8': + # The console's encoding is set and is different from 'UTF-8'. + # Convert the string to bytes, then decode using the console's encoding + cprgt = cprgt.encode('utf-8').decode(console_encoding) + + print("First Face:", font.PostScriptName1) + print("Copyright: ", cprgt) + print("Trademark: ", font.trademarkStr1) def print_panose_report(): global preferredFamilyList1 - print "\nPanose Report:" + print("\nPanose Report:") familykind = ["Any","No Fit","Latin Text","Latin Hand Written","Latin Decorative","Latin Symbol"] kind2 = [familykind] @@ -4710,7 +4617,7 @@ def print_panose_report(): kindlist = ["Any", "No Fit", kind2, kind3, kind4, kind5] for name in preferredFamilyList1.keys(): - print "\nPreferred Family:", upperascii_to_hex(name) + print("\nPreferred Family:", name) preferredSubFamilyList1 = preferredFamilyList1[name] # find base font which has usWeightClass 400 (regular), usWidthClass 5 (regular) and not italic. baselist = [] @@ -4725,19 +4632,19 @@ def print_panose_report(): font0 = font else: font0 = preferredSubFamilyList1[0] - print string.ljust(font0.PostScriptName1, 36), + print(font0.PostScriptName1.ljust(36), end=' ') panose0 = font0.panose if not panose0: - print "Skipping Panose report - OS/2 table does not exist in base font.", font0.PostScriptName1 + print("Skipping Panose report - OS/2 table does not exist in base font.", font0.PostScriptName1) continue for p in panose0: - print "%3d" % p, - print "" + print("%3d" % p, end=' ') + print("") kind = kindlist[panose0[0]] field = fieldlist[panose0[0]] if panose0[0] < 2 or panose0[0] > 5: - print "%5d" % panose0[0], kind + print("%5d" % panose0[0], kind) continue for i in range(10): subkind = kind[i] @@ -4746,19 +4653,19 @@ def print_panose_report(): subkindText = subkind[fieldValue] except: subkindText = "Error: Panose field value out of range" - print "\t" + string.ljust(field[i], 20) + "%5d" % fieldValue, subkindText + print("\t" + field[i].ljust(20) + "%5d" % fieldValue, subkindText) for font in preferredSubFamilyList1: if font == font0: continue - print string.ljust(font.PostScriptName1, 36), + print(font.PostScriptName1.ljust(36), end=' ') panose = font.panose for p in panose: - print "%3d" % p, - print "" + print("%3d" % p, end=' ') + print("") kind = kindlist[panose[0]] field = fieldlist[panose[0]] if panose[0] < 2 or panose[0] > 5: - print "\t" + string.ljust("Any", 20) + "%5d" % panose[0], kind + print("\t" + "Any".ljust(20) + "%5d" % panose[0], kind) continue for i in range(10): subkind = kind[i] @@ -4768,19 +4675,17 @@ def print_panose_report(): except: subkindText = "Error: Panose field value out of range" if panose[i] != panose0[i]: - print "\t" + string.ljust(field[i], 20) + "%5d" % fieldValue, subkindText + print("\t" + field[i].ljust(20) + "%5d" % fieldValue, subkindText) def print_std_charset_report(charSetName): - charsetList = StdCharSets.CharSetDict.keys() - charsetList.sort() - + charsetList = sorted(StdCharSets.CharSetDict.keys()) if charSetName: charsetList = [ charSetName ] - print "\tCharset Report: Note Yet Implemented." + print("\tCharset Report: Note Yet Implemented.") @@ -4799,15 +4704,15 @@ def read_options(): try: option = flags.index(sys.argv[i]) except ValueError: - print"Error. did not recognize option '%s'." % (sys.argv[i]) - print __usage__ + print("Error. did not recognize option '%s'." % (sys.argv[i])) + print(__usage__) sys.exit() else: if option == 1: - print __usage__ + print(__usage__) sys.exit() elif option == 0: - print __help__ + print(__help__) sys.exit() elif option == 2: i = i + 1 @@ -4832,9 +4737,9 @@ def read_options(): charSetName = sys.argv[i] charsetList = StdCharSets.CharSetDict.keys() if charSetName and (charSetName not in charsetList): - print "Charset name", charSetName,"is not in the known list of charsets:" + print("Charset name", charSetName,"is not in the known list of charsets:") for name in charsetList: - print "\t" + name + print("\t" + name) sys.exit(2) except IndexError: pass @@ -4850,13 +4755,13 @@ def read_options(): elif option == 12: i = i + 1 try: - gDesignSpaceTolerance = eval(sys.argv[i]) + gDesignSpaceTolerance = abs(int(sys.argv[i])) except: - print "Error: argument for option '-tolerance' must be an integer design space value." + print("Error: argument for option '-tolerance' must be an integer design space value.") sys.exit() else: - print "Argument '%s' is not recognized." % (sys.argv[i]) - print __usage__ + print("Argument '%s' is not recognized." % (sys.argv[i])) + print(__usage__) sys.exit() i = i + 1 return directory, nreport, mreport, preport, logfilename, creport, charSetName, doStemWidthChecks, doFeatureReportOnly, singleTestList, familyTestList @@ -4877,11 +4782,11 @@ def main(): if directory != "": build_fontlist_from_dir(directory) else: - print "No directory available for processing." + print("No directory available for processing.") sys.exit(0) if fontlist == []: - print "No font available for processing." + print("No font available for processing.") sys.exit(0) try: @@ -4889,12 +4794,12 @@ def main(): logfile = open(logfilename, "w") sys.stdout = logfile except IOError: - print "Invalid log file name" + print("Invalid log file name") logfile = "" - print "Directory:", os.path.abspath(directory) - print "Loading Adobe Glyph Dict..." - import agd + print("Directory:", os.path.abspath(directory)) + print("Loading Adobe Glyph Dict...") + from afdko import agd resources_dir = fdkutils.get_resources_dir() kAGD_TXTPath = os.path.join(resources_dir, "AGD.txt") fp = open(kAGD_TXTPath, "rU") @@ -4902,12 +4807,12 @@ def main(): fp.close() gAGDDict = agd.dictionary(agdTextPath) - print "building lists of preferred families..." + print("building lists of preferred families...") fontlist = sort_font(fontlist) build_preferredFamilyList(fontlist) - print "Number of preferred families:", len(preferredFamilyList1.keys()), preferredFamilyList1.keys() - print "Number of font faces:", len(fontlist) - print + print("Number of preferred families:", len(preferredFamilyList1.keys()), "[%s]" % ', '.join(["'%s'" % name for name in preferredFamilyList1.keys()])) + print("Number of font faces:", len(fontlist)) + print() if doFeatureReportOnly: doFamilyTest12() return diff --git a/python/afdko/convertfonttocid.py b/python/afdko/convertfonttocid.py index 337deb237..97ba019a4 100644 --- a/python/afdko/convertfonttocid.py +++ b/python/afdko/convertfonttocid.py @@ -1,7 +1,7 @@ # Copyright 2014 Adobe. All rights reserved. """ -convertfonttocid.py. v 1.12.0 Jul 30 2018 +convertfonttocid.py. v 1.13.0 Aug 28 2018 Convert a Type 1 font to CID, given multiple hint dict defs in the "fontinfo" file. See autohint help, with the "-hfd" option, or the makeotf @@ -59,6 +59,8 @@ import re import sys +from fontTools.misc.py23 import open, tounicode, tobytes + from afdko import fdkutils # Tokens seen in font info file that are not part @@ -293,7 +295,7 @@ def buildBlueLists(self): for pairEntry in bluePairList: bluesList.append(pairEntry[1]) bluesList.append(pairEntry[0]) - bluesList = map(str, bluesList) + bluesList = [str(val) for val in bluesList] bluesList = "[%s]" % (" ".join(bluesList)) setattr(self, fieldName, bluesList) @@ -578,7 +580,7 @@ def mergeFDDicts(prevDictList, privateDict): if dList is not None: dList = dList[1:-1] # remove the braces dList = dList.split() - dList = map(int, dList) + dList = [int(val) for val in dList] for width in dList: stemDict[width] = prefDDict.DictName @@ -727,7 +729,7 @@ def getFontBBox(fPath): raise FontInfoParseError("Error: Failed finding FontBBox in tx log " "from %s." % fPath) fontBBox = m.group(1).split(",") - fontBBox = map(int, fontBBox) + fontBBox = [int(val) for val in fontBBox] return fontBBox @@ -797,7 +799,7 @@ def fixFontDict(tempPath, fdDict): if log: print(log) - with open(txtPath, "rt") as fp: + with open(txtPath, "r", encoding='utf-8') as fp: data = fp.read() # fix font name. We always search for it, as it is always present, @@ -884,7 +886,7 @@ def fixFontDict(tempPath, fdDict): if m: data = data[:m.start()] + data[m.end():] - with open(txtPath, "wt") as fp: + with open(txtPath, "w") as fp: fp.write(data) command = "type1 \"%s\" \"%s\" 2>&1" % (txtPath, tempPath) @@ -951,14 +953,14 @@ def makeCIDFontInfo(fontPath, cidfontinfoPath): print("Error: did not find required info '%s' in tx dump of " "font '%s'." % (entry[1], fontPath)) try: - with open(cidfontinfoPath, "wt") as fp: + with open(cidfontinfoPath, "w") as fp: for key in kCIDFontInfokeyList: value = cfiDict[key] if value is None: continue if value[0] == "\"": value = "(" + value[1:-1] + ")" - string = "%s\t%s\n" % (key, value) + string = tounicode("%s\t%s\n" % (key, value)) fp.write(string) except (IOError, OSError): raise FontInfoParseError( @@ -998,7 +1000,7 @@ def makeGAFile(gaPath, fontPath, glyphList, fontDictList, fdGlyphDict, gaText = "mergefonts %s%s%s" % (dictName, langGroup, '\n'.join(lineList)) with open(gaPath, "wb") as gf: - gf.write(gaText) + gf.write(tobytes(gaText)) def merge_fonts(inputFontPath, outputPath, fontList, glyphList, fontDictList, @@ -1038,7 +1040,7 @@ def convertFontToCID(inputPath, outputPath, fontinfoPath=None): and an optional path to a '(cid)fontinfo' file. """ if fontinfoPath and os.path.exists(fontinfoPath): - with open(fontinfoPath, "rU") as fi: + with open(fontinfoPath, "r", encoding='utf-8') as fi: fontInfoData = fi.read() else: fontInfoData = '' diff --git a/python/afdko/fdkutils.py b/python/afdko/fdkutils.py index 57a15ec1d..febe994e9 100755 --- a/python/afdko/fdkutils.py +++ b/python/afdko/fdkutils.py @@ -1,23 +1,17 @@ # Copyright 2016 Adobe. All rights reserved. +""" +fdkutils.py v1.2.7 Aug 28 2018 +A module of functions that are needed by several of the AFDKO scripts. +""" + from __future__ import print_function, absolute_import import os -import platform import subprocess import tempfile -import traceback - -__doc__ = """ -fdkutils.py v1.2.6 Jun 30 2018 -A module of functions that are needed by several of the AFDKO scripts. -""" - -curSystem = platform.system() - -class FDKEnvError(KeyError): - pass +from fontTools.misc.py23 import tounicode def get_temp_file_path(): @@ -27,24 +21,17 @@ def get_temp_file_path(): def get_resources_dir(): - """ Look up the file path to find the "Tools" directory; - then add the os.name for the executables, and 'FDKScripts' - for the scripts. - """ - cjk_dir = os.path.join( - os.path.dirname(__file__), - 'resources') - return cjk_dir + return os.path.join(os.path.dirname(__file__), 'resources') def runShellCmd(cmd): try: p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, - stderr=subprocess.STDOUT).stdout - log = p.read() - return log - except (OSError, ValueError): - msg = "Error executing command '%s'. %s" % (cmd, traceback.print_exc()) + stderr=subprocess.STDOUT) + stdoutdata, _ = p.communicate() + return tounicode(stdoutdata, encoding='utf-8') + except (subprocess.CalledProcessError, OSError) as err: + msg = "Error executing command '%s'\n%s" % (cmd, err) print(msg) return "" @@ -62,8 +49,8 @@ def runShellCmdLogging(cmd): if output: print(output, end=' ') break - except (OSError, ValueError): - msg = "Error executing command '%s'. %s" % (cmd, traceback.print_exc()) + except (subprocess.CalledProcessError, OSError) as err: + msg = "Error executing command '%s'\n%s" % (cmd, err) print(msg) return 1 return 0 diff --git a/python/afdko/fontpdf.py b/python/afdko/fontpdf.py index e112191b1..28b1a59f6 100644 --- a/python/afdko/fontpdf.py +++ b/python/afdko/fontpdf.py @@ -1,5 +1,5 @@ """ -fontpdf v1.26 Jun 18 2018. This module is not run stand-alone; it requires +fontpdf v1.27 Aug 28 2018. This module is not run stand-alone; it requires another module, such as proofpdf, in order to collect the options, and call the MakePDF function. @@ -670,7 +670,6 @@ def draw(self, params, repeat): self.cur_y -= params.metaDataTextSize eval("self." + methodName + "(params)") - return def writeErrorList(self, errorList, params): # At this point, I expect ErrorList to be a list of short strings. @@ -698,9 +697,6 @@ def writeErrorList(self, errorList, params): posX += columnAdvance - - return - def drawGlyph_Outline(self, params, fill = 0): if params.DrawFilledOutline: fill = 1 @@ -763,8 +759,8 @@ def drawGlyph_CenterMarks(self, params): rt_canvas.saveState() xAdvanceColorRGB = params.xAdvanceColorRGB rt_canvas.setStrokeColorRGB(xAdvanceColorRGB[0], xAdvanceColorRGB[1], xAdvanceColorRGB[2]) - y2 = baseLine + (emSquare/2) - x2 = self.xAdvance/2 + y2 = baseLine + (emSquare // 2) + x2 = self.xAdvance // 2 tickSize = 10 rt_canvas.setLineWidth(params.markLineWidth) rt_canvas.line(-tickSize, y2, 0, y2) @@ -873,10 +869,10 @@ def drawGlyph_HHints(self, params): rt_canvas.setFont( params.pointLabelFont, ptSize) prevHint = None xOffset = params.hhintXOffset # used to make the hint rect tick out a bit from the em-box on both sides - for i in range(numHints): + for i in list(range(numHints)): hint = self.hhints[i] - h1 = float(eval(hint[0])) - width =float( eval(hint[1])) + h1 = float(eval(hint[0])) + width = float( eval(hint[1])) h2 = h1 + width if params.rt_hintTableList: showHint = 0 # only show hints that are in the matching hint replacement blocks. @@ -884,7 +880,7 @@ def drawGlyph_HHints(self, params): showHint = 1 # by default, show all hints hintString1 = "h(%s, %s) %s" % (h1, h2, width) hintString2 = "" - for j in range(numTables): + for j in list(range(numTables)): table = self.hintTable[j] if not table: # there is no hint replacement in the glyph. showHint = 1 @@ -933,10 +929,10 @@ def drawGlyph_VHints(self, params): rt_canvas.setFont( params.pointLabelFont, ptSize) prevHint = None yOffset = params.vhintYOffset # used to make the hinte rect tick out a bit from the em-box on both sides - for i in range(numHints): + for i in list(range(numHints)): hint = self.vhints[i] - h1 = float(eval(hint[0])) - width =float( eval(hint[1])) + h1 = float(eval(hint[0])) + width = float( eval(hint[1])) h2 = h1 + width if params.rt_hintTableList: showHint = 0 # only show hints that are in the matching hint replacement blocks. @@ -944,7 +940,7 @@ def drawGlyph_VHints(self, params): showHint = 1 # by default, show all hints hintString1 = "v(%s, %s) %s" % (h1, h2, width) hintString2 = "" - for j in range(numTables): + for j in list(range(numTables)): table = self.hintTable[j] if not table: # there is no hint replacement in the glyph. showHint = 1 @@ -1000,8 +996,7 @@ def drawGlyph_BlueZones(self, params): rt_canvas.setFillColorRGB(alignmentZoneColorRGB[0] *0.5, alignmentZoneColorRGB[1] *0.5, alignmentZoneColorRGB[2] *0.5) blueZoneOffset = 5 # used to make the blue zone rect tick out a bit from the em-box on both sides x0 = -blueZoneOffset - for i in range(len(blueZones)): - zone = blueZones[i] + for i, zone in enumerate(blueZones): y0 = zone[0] y1 = zone[1] width = y1 - y0 @@ -1308,7 +1303,7 @@ def doTitle(rt_canvas, pdfFont, params, numGlyphs, numPages = None): cur_y -= pageTitleSize*1.2 path = repr(params.rt_filePath) # Can be non-ASCII if numPages == None: - numPages = numGlyphs/params.glyphsPerPage + numPages = numGlyphs // params.glyphsPerPage if (numGlyphs % params.glyphsPerPage) > 0: numPages +=1 pageString = ' %d of %s' % (rt_canvas.getPageNumber(), numPages) @@ -1354,7 +1349,7 @@ def getMetaDataHeight(params, fontYMin) : if params.errorLogFilePath and (params.errorLogColumnHeight > yMeta): params.rt_metaDataYOffset = params.errorLogColumnHeight - return + def setDefaultHPadding(params, init = None): # Need to allow extra space for the horizontal and vertical hint labels @@ -1630,12 +1625,11 @@ def makePDF(pdfFont, params, doProgressBar=True): if not params.rt_filePath: params.rt_reporter( "Skipping font. Calling program must set params.rt_filePath.") return - fontPath = params.rt_filePath if params.rt_pdfFileName: pdfPath = params.rt_pdfFileName else: - pdfPath = os.path.splitext(fontPath)[0] + ".pdf" + pdfPath = "{}.pdf".format(os.path.splitext(fontPath)[0]) params.rt_canvas = rt_canvas = pdfgen.Canvas(pdfPath, pagesize=params.pageSize, bottomup = 1) if params.waterfallRange: @@ -1824,9 +1818,8 @@ def getFontDescriptorText(self): elif self.pdfFont.clientFont.has_key('glyf'): fontStreamType = None # don't need Subtype key/value in teh stream object for TrueType fonts. - fp = open(self.pdfFont.path, "rb") - fontStream = fp.read() - fp.close() + with open(self.pdfFont.path, "rb") as fp: + fontStream = fp.read() formatName = "/FontFile2" fontType = "/TrueType" else: @@ -2007,7 +2000,7 @@ def makeFontSetPDF(pdfFontList, params, doProgressBar=True): # We put the PDF wherever the first font is. firstPDFFont = pdfFontList[0][1] fontPath = params.rt_filePath - pdfPath = os.path.splitext(fontPath)[0] + ".fontset.pdf" + pdfPath = "{}.fontset.pdf".format(os.path.splitext(fontPath)[0]) params.rt_canvas = rt_canvas = pdfgen.Canvas(pdfPath, pagesize=params.pageSize, bottomup = 1) # figure out how much space to leave at start of line for PS names and fond index fields. @@ -2081,7 +2074,7 @@ def makeFontSetPDF(pdfFontList, params, doProgressBar=True): groupsOnPageCount = 0 - for groupIndex in range(numGroups): + for groupIndex in list(range(numGroups)): fountCount = 0 groupsOnPageCount += 1 if doWidowControl and (groupsOnPageCount > groupsPerPage): @@ -2171,9 +2164,8 @@ def makeProofPDF(pdfFont, params, doProgressBar=True): print("Warning: log file %s does not exist or is not a file." % repr(params.errorLogFilePath)) else: - lf = file(params.errorLogFilePath, "rU") - errorLines = lf.readlines() - lf.close() + with open(params.errorLogFilePath, "r") as lf: + errorLines = lf.readlines() params.rt_errorLogDict = parseErrorLog(errorLines, params.errorLogFilePath) keys = params.rt_errorLogDict.keys() keys.sort() @@ -2221,7 +2213,7 @@ def makeProofPDF(pdfFont, params, doProgressBar=True): cur_x = params.pageLeftMargin + leftPadding cur_y = yTop - (topPadding + yAdvance) - giRange = range(numGlyphs) + giRange = list(range(numGlyphs)) if params.doAlphabeticOrder: params.rt_glyphList.sort() elif params.rt_optionLayoutDict and pdfFont.isCID: @@ -2267,13 +2259,13 @@ def makeProofPDF(pdfFont, params, doProgressBar=True): if not params.rt_repeatParamList: params.rt_repeatParamList = [params]*params.rt_repeats - for ri in range(params.rt_repeats): + for ri in list(range(params.rt_repeats)): curParams = params.rt_repeatParamList[ri] if ri > 0: - fieldNames = dir(params) - fieldNames = filter(lambda name: name[:3] == "rt_", fieldNames) + fieldNames = vars(params) + fieldNames = [name for name in vars(params) if name.startswith("rt_")] for name in fieldNames: - exec("curParams.%s = params.%s" % (name,name)) + setattr(curParams, name, getattr(params, name)) rt_canvas.saveState() rt_canvas.translate(cur_x, cur_y) @@ -2286,7 +2278,7 @@ def makeProofPDF(pdfFont, params, doProgressBar=True): progressBarInstance.EndProgress() rt_canvas.showPage() rt_canvas.save() - return + def makeKernPairPDF(pdfFont, kernOverlapList, params, doProgressBar=True): """ diff --git a/python/afdko/makeinstancesufo.py b/python/afdko/makeinstancesufo.py index 6ef0b33f9..bb78e2e4a 100755 --- a/python/afdko/makeinstancesufo.py +++ b/python/afdko/makeinstancesufo.py @@ -9,6 +9,8 @@ import sys from subprocess import PIPE, Popen +from fontTools.misc.py23 import open, tounicode, tobytes + from defcon import Font from mutatorMath.ufo import build as mutatorMathBuild from ufonormalizer import normalizeUFO @@ -21,7 +23,7 @@ from afdko.ufotools import validateLayers __usage__ = """ - makeinstancesufo v1.4.1 Jul 13 2018 + makeinstancesufo v1.5.0 Aug 28 2018 makeinstancesufo -h makeinstancesufo -u makeinstancesufo [-d ] [-a] [-c] [-n] [-dec] @@ -128,7 +130,7 @@ def __init__(self, logFilePath=None): self.logFilePath = logFilePath self.logFile = None if self.logFilePath: - self.logFile = open(logFilePath, "wt") + self.logFile = open(logFilePath, "w") def log(self, *args): txt = " ".join(args) @@ -139,7 +141,7 @@ def log(self, *args): def sendTo(self, logFilePath): self.logFilePath = logFilePath - self.logFile = open(logFilePath, "wt") + self.logFile = open(logFilePath, "w") logMsg = LogMsg() @@ -158,9 +160,9 @@ def readDesignSpaceFile(options): instanceEntryList = [] print("Reading design space file: %s ..." % options.dsPath) - f = open(options.dsPath, "rt") - data = f.read() - f.close() + with open(options.dsPath, "r", encoding='utf-8') as f: + data = f.read() + ds = ET.XML(data) instances = ds.find("instances") @@ -193,11 +195,10 @@ def readDesignSpaceFile(options): "postscriptfilename attribute" % options.dsPath) return None, None - dsPath = options.dsPath + ".temp" + dsPath = "{}.temp".format(options.dsPath) data = ET.tostring(ds) - f = open(dsPath, "wt") - f.write(data) - f.close() + with open(dsPath, "wb") as f: + f.write(tobytes(data, encoding='utf-8')) return dsPath, instanceEntryList @@ -220,7 +221,7 @@ def updateInstance(options, fontInstancePath): opList.insert(0, 'checkoutlinesufo') proc = Popen(opList, stdout=PIPE) while 1: - output = proc.stdout.readline() + output = tounicode(proc.stdout.readline()) if output: print('.', end='') logList.append(output) @@ -252,7 +253,7 @@ def updateInstance(options, fontInstancePath): opList.insert(0, 'autohint') proc = Popen(opList, stdout=PIPE) while 1: - output = proc.stdout.readline() + output = tounicode(proc.stdout.readline()) if output: print(output, end='') logList.append(output) diff --git a/python/afdko/makeotf.py b/python/afdko/makeotf.py index fef39c75a..a6b0b0ebe 100755 --- a/python/afdko/makeotf.py +++ b/python/afdko/makeotf.py @@ -7,7 +7,7 @@ import sys from fontTools.ttLib import TTFont -from fontTools.misc.py23 import tounicode +from fontTools.misc.py23 import open, tounicode, tobytes from afdko import convertfonttocid, fdkutils, ufotools @@ -25,7 +25,7 @@ """ __version__ = """\ -makeotf.py v2.4.3 Aug 23 2018 +makeotf.py v2.5.0 Aug 28 2018 """ __methods__ = """ @@ -535,7 +535,7 @@ def readOptionFile(filePath, makeOTFParams, optionIndex): fprDir = os.path.dirname(os.path.abspath(filePath)) currentDir = makeOTFParams.currentDir try: - with open(filePath, "rU") as fp: + with open(filePath, "r", encoding='utf-8') as fp: data = fp.read() except (IOError, OSError): print("makeotf [Error] Could not read the options file %s. " @@ -626,8 +626,8 @@ def writeOptionsFile(makeOTFParams, filePath): if makeOTFParams.verbose: print("makeotf [Note] Writing options file %s" % filePath) try: - with open(filePath, "w") as fp: - fp.write(data) + with open(filePath, "wb") as fp: + fp.write(tobytes(data, encoding='utf-8')) except (IOError, OSError): print("makeotf [Warning] Could not write the options file %s. " "Please check the file protection settings for the file " @@ -662,7 +662,7 @@ def setOptionsFromFontInfo(makeOTFParams): data = '' if fontinfo_path and os.path.exists(fontinfo_path): try: - with open(fontinfo_path, "r") as fi: + with open(fontinfo_path, "r", encoding='utf-8') as fi: data = fi.read() makeOTFParams.fontinfoPath = fontinfo_path except (OSError, IOError): @@ -1584,9 +1584,8 @@ def getROS(fontPath): """ Reg = Ord = Sup = None - fp = open(fontPath, "rb") - data = fp.read(5000) - fp.close() + with open(fontPath, "r", encoding='macroman') as fp: + data = tounicode(fp.read(5000)) match = re.search(r"/Registry\s+\((\S+)\)", data) if not match: return Reg, Ord, Sup @@ -1696,9 +1695,8 @@ def checkIfVertInFeature(featurePath): print("No feature path at", featurePath) return 0 - fp = open(featurePath, "rU") - data = fp.read() - fp.close() + with open(featurePath, "r", encoding='utf-8') as fp: + data = fp.read() match = re.search(RE_FEATURE, data) if match: @@ -1873,17 +1871,17 @@ def setMissingParams(makeOTFParams): raise MakeOTFTXError if makeOTFParams.srcIsTTF or inputFontPath.lower().endswith(".ttf"): - path = psName + ".ttf" + font_filename = "{}.ttf".format(psName) else: - path = psName + ".otf" + font_filename = "{}.otf".format(psName) if output_dir: - path = os.path.join(output_dir, path) + font_path = os.path.join(output_dir, font_filename) else: - path = os.path.join(makeOTFParams.fontDirPath, path) + font_path = os.path.join(makeOTFParams.fontDirPath, font_filename) - path = os.path.abspath(os.path.realpath(path)) - setattr(makeOTFParams, kFileOptPrefix + kOutputFont, path) + output_path = os.path.abspath(os.path.realpath(font_path)) + setattr(makeOTFParams, kFileOptPrefix + kOutputFont, output_path) if error: raise MakeOTFOptionsError @@ -1940,9 +1938,8 @@ def convertFontIfNeeded(makeOTFParams): else: # If not OTF or TTF, better be some legacy Type 1 font. try: - fp = open(filePath, "rb") - data = fp.read(1024) - fp.close() + with open(filePath, "rb") as fp: + data = tounicode(fp.read(1024)) if ("%" not in data[:4]) and ('/FontName' not in data): needsConversion = True else: @@ -2019,9 +2016,8 @@ def convertFontIfNeeded(makeOTFParams): def updateFontRevision(featuresPath, fontRevision): try: - fp = open(featuresPath, "rU") - data = fp.read() - fp.close() + with open(featuresPath, "r", encoding='utf-8') as fp: + data = fp.read() except (IOError, OSError): print("makeotf [Error] When trying to update the head table " "fontRevision field, failed to open '%s'." % featuresPath) @@ -2056,9 +2052,8 @@ def updateFontRevision(featuresPath, fontRevision): newData = re.sub(match.group(0), "FontRevision %s.%s;" % (major, minor), data) try: - fp = open(featuresPath, "wt") - fp.write(newData) - fp.close() + with open(featuresPath, "wb") as fp: + fp.write(tobytes(newData, encoding='utf-8')) except (IOError, OSError): print("makeotf [Error] When trying to update the head table " "fontRevision field, failed to write the new data to '%s'." % @@ -2088,8 +2083,7 @@ def getSourceGOADBData(inputFilePath): # First, get the Unicode mapping from the TTF cmap table. command = "spot -t cmap=7 \"%s\" 2>&1" % inputFilePath report = fdkutils.runShellCmd(command) - spotGlyphList = re.findall( - "[\n\t]\[(....+)\]=<([^>]+)>", tounicode(report)) + spotGlyphList = re.findall("[\n\t]\[(....+)\]=<([^>]+)>", report) # Because this dumps all the Unicode map tables, there are a number # of duplicates; weed them out, and strip out gid part of spot name @@ -2113,8 +2107,7 @@ def getSourceGOADBData(inputFilePath): # as tx doesn't check 32 bit UV's, and doesn't report double-encodings. command = "tx -mtx \"%s\" 2>&1" % inputFilePath report = fdkutils.runShellCmd(command) - txGlyphList = re.findall( - "[\n\r]glyph\[(\d+)\]\s+{([^,]+)", tounicode(report)) + txGlyphList = re.findall("[\n\r]glyph\[(\d+)\]\s+{([^,]+)", report) gnameDict = {} for gid_str, gname in txGlyphList: @@ -2138,7 +2131,7 @@ def getSourceGOADBData(inputFilePath): def getGOADBData(goadbPath): goadbList = [] - with open(goadbPath, "r") as fp: + with open(goadbPath, "r", encoding='utf-8') as fp: for line in fp.readlines(): line = line.strip() if not line: # blank lines @@ -2509,10 +2502,8 @@ def runMakeOTF(makeOTFParams): featuresPath = os.path.join(featuresDir, "features") exec("makeOTFParams.%s%s = featuresPath" % (kFileOptPrefix, kFeature)) - fp = open(featuresPath, "wt") - fp.write(os.linesep + "table head {" + os.linesep + "FontRevision " - "1.000;" + os.linesep + "} head;" + os.linesep) - fp.close() + with open(featuresPath, "w") as fp: + fp.write("\ntable head {\nFontRevision 1.000;\n} head;\n") updateFontRevision(featuresPath, fontRevision) # if converting to CID, save the setting, but @@ -2570,9 +2561,7 @@ def runMakeOTF(makeOTFParams): os.path.basename(makeOTFParams.makeotfPath)) print(" cd \"%s\"" % fontDir) print(" %s" % commandString) - # I use os.system rather than os.pipe so that the user - # will see the log messages from the C program during - # processing, rather than only at the end. + fdkutils.runShellCmdLogging(commandString) if not os.path.exists(tempOutPath) or (os.path.getsize(tempOutPath) < 500): diff --git a/python/afdko/otfpdf.py b/python/afdko/otfpdf.py index fdafc0869..a736a6fcc 100644 --- a/python/afdko/otfpdf.py +++ b/python/afdko/otfpdf.py @@ -1,6 +1,6 @@ # Copyright 2014 Adobe . All rights reserved. """ -otfpdf v1.5.1 May 21 2018 +otfpdf v1.6.0 Aug 28 2018 provides support for the proofpdf script, for working with OpenType/CFF fonts. Provides an implementation of the fontpdf font object. Cannot be run alone. @@ -9,6 +9,7 @@ from fontTools.pens.boundsPen import BoundsPen, BasePen from fontTools.misc.psCharStrings import T2OutlineExtractor +from fontTools.misc.py23 import byteord from afdko.fontpdf import FontPDFGlyph, FontPDFFont, FontPDFPoint @@ -83,7 +84,6 @@ def __init__(self, clientFont, params): self.getBBox() self.GetBlueZones() self.AscentDescent() - return def clientGetPSName(self): psName = self.clientFont['CFF '].cff.fontNames[0] @@ -178,7 +178,7 @@ def clientGetBlueZones(self): try: rawBlueList = fontDict.Private.BlueValues blueList = [] - for i in range(0, len(rawBlueList), 2): + for i in list(range(0, len(rawBlueList), 2)): blueList.append((rawBlueList[i], rawBlueList[i + 1])) blueValues.append(blueList) except AttributeError: @@ -197,8 +197,8 @@ def clientGetAscentDescent(self): def hintOn(i, hintMaskBytes): # used to add the active hints to the bez string, # when a T2 hintmask operator is encountered. - byteIndex = i / 8 - byteValue = ord(hintMaskBytes[byteIndex]) + byteIndex = i // 8 + byteValue = byteord(hintMaskBytes[byteIndex]) offset = 7 - (i % 8) return ((2 ** offset) & byteValue) > 0 @@ -249,7 +249,7 @@ def updateHints(self, args, hintList): arg = str(lastval) hint1 = arg - for i in range(len(args))[1:]: + for i in list(range(len(args))[1:]): val = args[i] newVal = lastval + val lastval = newVal @@ -265,11 +265,11 @@ def getCurHints(self, hintMaskBytes): curvhints = [] numhhints = len(self.hhints) - for i in range(numhhints): + for i in list(range(numhhints)): if hintOn(i, hintMaskBytes): curhhints.append(i) numvhints = len(self.vhints) - for i in range(numvhints): + for i in list(range(numvhints)): if hintOn(i + numhhints, hintMaskBytes): curvhints.append(i) return curhhints, curvhints @@ -280,7 +280,7 @@ def doMask(self, index, maskCommand): if args: self.vhints = [] self.updateHints(args, self.vhints) - self.hintMaskBytes = (self.hintCount + 7) / 8 + self.hintMaskBytes = (self.hintCount + 7) // 8 self.hintMaskString, index = ( self.callingStack[-1].getBytes(index, self.hintMaskBytes)) @@ -292,7 +292,7 @@ def doMask(self, index, maskCommand): return self.hintMaskString, index def countHints(self, args): - self.hintCount = self.hintCount + len(args) / 2 + self.hintCount = self.hintCount + len(args) // 2 def drawCharString(charString, pen): @@ -344,7 +344,7 @@ def clientInitData(self): if lenPath > 1: path[0].next = path[1] path[-1].last = path[-2] - for i in range(lenPath)[1:-1]: + for i in list(range(lenPath)[1:-1]): pt = path[i] pt.next = path[i + 1] pt.last = path[i - 1] @@ -392,4 +392,3 @@ def clientInitData(self): if hasattr(fTopDict, "ROS"): gid = fTopDict.CharStrings.charStrings[self.name] self.fdIndex = fTopDict.FDSelect[gid] - return diff --git a/python/afdko/pdfdoc.py b/python/afdko/pdfdoc.py index bd7866d54..9c8e5ef43 100755 --- a/python/afdko/pdfdoc.py +++ b/python/afdko/pdfdoc.py @@ -19,6 +19,8 @@ import sys import time +from fontTools.misc.py23 import open, tobytes + from afdko import pdfutils from afdko.pdfutils import LINEEND # this constant needed in both @@ -143,11 +145,11 @@ def printXref(self): def writeXref(self, f): self.startxref = f.tell() - f.write('xref' + LINEEND) - f.write('0 %d' % (len(self.objects) + 1) + LINEEND) - f.write('0000000000 65535 f' + LINEEND) + f.write(tobytes('xref' + LINEEND, encoding='utf-8')) + f.write(tobytes('0 %d' % (len(self.objects) + 1) + LINEEND, encoding='utf-8')) + f.write(tobytes('0000000000 65535 f' + LINEEND, encoding='utf-8')) for pos in self.xref: - f.write('%0.10d 00000 n' % pos + LINEEND) + f.write(tobytes('%0.10d 00000 n' % pos + LINEEND, encoding='utf-8')) def printTrailer(self): print('trailer') @@ -157,15 +159,14 @@ def printTrailer(self): print(self.startxref) def writeTrailer(self, f): - f.write('trailer' + LINEEND) - f.write('<< /Size %d /Root %d 0 R /Info %d 0 R>>' % (len(self.objects) + 1, 1, self.infopos) + LINEEND) - f.write('startxref' + LINEEND) - f.write(str(self.startxref) + LINEEND) + f.write(tobytes('trailer' + LINEEND, encoding='utf-8')) + f.write(tobytes('<< /Size %d /Root %d 0 R /Info %d 0 R>>' % (len(self.objects) + 1, 1, self.infopos) + LINEEND, encoding='utf-8')) + f.write(tobytes('startxref' + LINEEND, encoding='utf-8')) + f.write(tobytes(str(self.startxref) + LINEEND, encoding='utf-8')) def SaveToFile(self, filename): - fileobj = open(filename, 'wb') - self.SaveToFileObject(fileobj) - fileobj.close() + with open(filename, 'wb') as fileobj: + self.SaveToFileObject(fileobj) def SaveToFileObject(self, fileobj): """Open a file, and ask each object in turn to write itself to @@ -174,18 +175,18 @@ def SaveToFileObject(self, fileobj): f = fileobj i = 1 self.xref = [] - f.write("%PDF-1.2" + LINEEND) # for CID support - f.write("%\xed\xec\xb6\xbe" + LINEEND) + f.write(tobytes("%PDF-1.2" + LINEEND, encoding='utf-8')) # for CID support + f.write(tobytes(b"%\xed\xec\xb6\xbe\r\n", encoding='utf-8')) for obj in self.objects: pos = f.tell() self.xref.append(pos) - f.write(str(i) + ' 0 obj' + LINEEND) + f.write(tobytes(str(i) + ' 0 obj' + LINEEND, encoding='utf-8')) obj.save(f) - f.write('endobj' + LINEEND) + f.write(tobytes('endobj' + LINEEND, encoding='utf-8')) i = i + 1 self.writeXref(f) self.writeTrailer(f) - f.write('%%EOF') # no lineend needed on this one! + f.write(tobytes('%%EOF', encoding='utf-8')) # no lineend needed on this one! def printPDF(self): "prints it to standard output. Logs positions for doing trailer" @@ -423,7 +424,7 @@ def __init__(self): '>>' ]) def save(self, file): - file.write(self.template % (self.RefPages, self.RefOutlines) + LINEEND) + file.write(tobytes(self.template % (self.RefPages, self.RefOutlines) + LINEEND, encoding='utf-8')) class PDFInfo(PDFObject): @@ -439,7 +440,7 @@ def __init__(self): self.datestr = '%04d%02d%02d%02d%02d%02d' % tuple(now[0:6]) def save(self, file): - file.write(LINEEND.join([ + file.write(tobytes(LINEEND.join([ "<>']) def save(self, file): - file.write(self.template + LINEEND) + file.write(tobytes(self.template + LINEEND, encoding='utf-8')) class PDFPageCollection(PDFObject): @@ -483,7 +483,7 @@ def save(self, file): lines.append(']') lines.append('>>') text = LINEEND.join(lines) - file.write(text + LINEEND) + file.write(tobytes(text + LINEEND, encoding='utf-8')) class PDFPage(PDFObject): @@ -528,7 +528,7 @@ def save(self, file): self.info['procsettext'] = '[/PDF /Text]' self.info['transitionString'] = self.pageTransitionString - file.write(self.template % self.info + LINEEND) + file.write(tobytes(self.template % self.info + LINEEND, encoding='utf-8')) def clear(self): self.drawables = [] @@ -556,7 +556,7 @@ def save(self, file): self.data = TestStream if self.compression == 1: - comp = zlib.compress(self.data) #this bit is very fast... + comp = zlib.compress(tobytes(self.data, encoding='utf-8')) #this bit is very fast... base85 = pdfutils._AsciiBase85Encode(comp) #...sadly this isn't wrapped = pdfutils._wrap(base85) data_to_write = wrapped @@ -569,12 +569,12 @@ def save(self, file): #length = len(self.data) + lines # one extra LF each length = len(data_to_write) + len(LINEEND) #AR 19980202 if self.compression: - file.write('<< /Length %d /Filter [/ASCII85Decode /FlateDecode]>>' % length + LINEEND) + file.write(tobytes('<< /Length %d /Filter [/ASCII85Decode /FlateDecode]>>' % length + LINEEND, encoding='utf-8')) else: - file.write('<< /Length %d >>' % length + LINEEND) - file.write('stream' + LINEEND) - file.write(data_to_write + LINEEND) - file.write('endstream' + LINEEND) + file.write(tobytes('<< /Length %d >>' % length + LINEEND, encoding='utf-8')) + file.write(tobytes('stream' + LINEEND, encoding='utf-8')) + file.write(tobytes(data_to_write + LINEEND, encoding='utf-8')) + file.write(tobytes('endstream' + LINEEND, encoding='utf-8')) class PDFImage(PDFObject): # sample one while developing. Currently, images go in a literals @@ -613,8 +613,7 @@ def save(self, file): if self.compression == 1: comp = zlib.compress(self.data) #this bit is very fast... base85 = pdfutils._AsciiBase85Encode(comp) #...sadly this isn't - wrapped = pdfutils._wrap(base85) - data_to_write = wrapped + data_to_write = pdfutils._wrap(base85) else: data_to_write = self.data # the PDF length key should contain the length including @@ -629,12 +628,12 @@ def save(self, file): fontStreamEntry = "/Subtype %s" % (self.fontType) if self.compression: - file.write('<< %s /Length %d /Filter [/ASCII85Decode /FlateDecode] >>' % (fontStreamEntry, length) + LINEEND) + file.write(tobytes('<< %s /Length %d /Filter [/ASCII85Decode /FlateDecode] >>' % (fontStreamEntry, length) + LINEEND, encoding='utf-8')) else: - file.write('<< /Length %d %s >>' % (length, fontStreamEntry) + LINEEND) - file.write('stream' + LINEEND) - file.write(data_to_write + LINEEND) - file.write('endstream' + LINEEND) + file.write(tobytes('<< /Length %d %s >>' % (length, fontStreamEntry) + LINEEND, encoding='utf-8')) + file.write(tobytes('stream' + LINEEND, encoding='utf-8')) + file.write(data_to_write + b'\r\n') + file.write(tobytes('endstream' + LINEEND, encoding='utf-8')) class PDFType1Font(PDFObject): def __init__(self, key, psName, encoding=kDefaultEncoding, fontDescriptObjectNumber = None, type = kDefaultFontType, firstChar = None, lastChar = None, widths = None): @@ -658,7 +657,7 @@ def __init__(self, key, psName, encoding=kDefaultEncoding, fontDescriptObjectNum self.template = LINEEND.join(textList) def save(self, file): - file.write(self.template % (self.keyname, self.fontname) + LINEEND) + file.write(tobytes(self.template % (self.keyname, self.fontname) + LINEEND, encoding='utf-8')) class PDFType0Font(PDFType1Font): @@ -669,7 +668,7 @@ def __init__(self, text): self.text = text def save(self, file): - file.write(self.text + LINEEND) + file.write(tobytes(self.text + LINEEND, encoding='utf-8')) diff --git a/python/afdko/pdfgen.py b/python/afdko/pdfgen.py index 20808bdc7..d28eb2c6c 100755 --- a/python/afdko/pdfgen.py +++ b/python/afdko/pdfgen.py @@ -61,10 +61,7 @@ from io import StringIO from math import sin, cos, tan, pi -from afdko import pdfdoc -from afdko import pdfgeom -from afdko import pdfmetrics -from afdko import pdfutils +from afdko import pdfdoc, pdfgeom, pdfmetrics, pdfutils # Robert Kern # Constants for closing paths. diff --git a/python/afdko/pdfutils.py b/python/afdko/pdfutils.py index 6d3833008..971837da3 100755 --- a/python/afdko/pdfutils.py +++ b/python/afdko/pdfutils.py @@ -10,6 +10,8 @@ except ImportError: from io import StringIO +from fontTools.misc.py23 import byteord + LINEEND = '\015\012' ########################################################## @@ -117,39 +119,11 @@ def _AsciiHexEncode(input): "Helper function used by images" output = StringIO() for char in input: - output.write('%02x' % ord(char)) + output.write('%02x' % byteord(char)) output.write('>') output.seek(0) return output.read() -def _AsciiHexDecode(input): - "Not used except to provide a test of the preceding" - #strip out all whitespace - stripped = ''.join(input.split()) - assert stripped[-1] == '>', 'Invalid terminator for Ascii Hex Stream' - stripped = stripped[:-1] #chop off terminator - assert len(stripped) % 2 == 0, 'Ascii Hex stream has odd number of bytes' - i = 0 - output = StringIO() - while i < len(stripped): - twobytes = stripped[i:i+2] - output.write(chr(eval('0x'+twobytes))) - i = i + 2 - output.seek(0) - return output.read() - -def _AsciiHexTest(text='What is the average velocity of a sparrow?'): - "Do the obvious test for whether Ascii Hex encoding works" - print('Plain text:', text) - encoded = _AsciiHexEncode(text) - print('Encoded:', encoded) - decoded = _AsciiHexDecode(encoded) - print('Decoded:', decoded) - if decoded == text: - print('Passed') - else: - print('Failed!') - def _AsciiBase85Encode(input): """This is a compact encoding used for binary data within a PDF file. Four bytes of binary data become five bytes of @@ -162,10 +136,10 @@ def _AsciiBase85Encode(input): for i in range(whole_word_count): offset = i*4 - b1 = ord(body[offset]) - b2 = ord(body[offset+1]) - b3 = ord(body[offset+2]) - b4 = ord(body[offset+3]) + b1 = byteord(body[offset]) + b2 = byteord(body[offset+1]) + b3 = byteord(body[offset+2]) + b4 = byteord(body[offset+3]) num = 16777216 * b1 + 65536 * b2 + 256 * b3 + b4 @@ -192,11 +166,11 @@ def _AsciiBase85Encode(input): #encode however many bytes we have as usual if remainder_size > 0: while len(lastbit) < 4: - lastbit = lastbit + '\000' - b1 = ord(lastbit[0]) - b2 = ord(lastbit[1]) - b3 = ord(lastbit[2]) - b4 = ord(lastbit[3]) + lastbit = lastbit + b'\000' + b1 = byteord(lastbit[0]) + b2 = byteord(lastbit[1]) + b3 = byteord(lastbit[2]) + b4 = byteord(lastbit[3]) num = 16777216 * b1 + 65536 * b2 + 256 * b3 + b4 @@ -239,11 +213,11 @@ def _AsciiBase85Decode(input): for i in range(whole_word_count): offset = i*5 - c1 = ord(body[offset]) - 33 - c2 = ord(body[offset+1]) - 33 - c3 = ord(body[offset+2]) - 33 - c4 = ord(body[offset+3]) - 33 - c5 = ord(body[offset+4]) - 33 + c1 = byteord(body[offset]) - 33 + c2 = byteord(body[offset+1]) - 33 + c3 = byteord(body[offset+2]) - 33 + c4 = byteord(body[offset+3]) - 33 + c5 = byteord(body[offset+4]) - 33 num = ((85**4) * c1) + ((85**3) * c2) + ((85**2) * c3) + (85*c4) + c5 @@ -261,11 +235,11 @@ def _AsciiBase85Decode(input): if remainder_size > 0: while len(lastbit) < 5: lastbit = lastbit + '!' - c1 = ord(lastbit[0]) - 33 - c2 = ord(lastbit[1]) - 33 - c3 = ord(lastbit[2]) - 33 - c4 = ord(lastbit[3]) - 33 - c5 = ord(lastbit[4]) - 33 + c1 = byteord(lastbit[0]) - 33 + c2 = byteord(lastbit[1]) - 33 + c3 = byteord(lastbit[2]) - 33 + c4 = byteord(lastbit[3]) - 33 + c5 = byteord(lastbit[4]) - 33 num = ((85**4) * c1) + ((85**3) * c2) + ((85**2) * c3) + (85*c4) + c5 temp, b4 = divmod(num,256) temp, b3 = divmod(temp,256) @@ -303,6 +277,11 @@ def _wrap(input, columns=60): +############################################################## +# +# TESTS +# +############################################################## def _AsciiBase85Test(text='What is the average velocity of a sparrow?'): "Do the obvious test for whether Base 85 encoding works" print('Plain text:', text) @@ -314,3 +293,31 @@ def _AsciiBase85Test(text='What is the average velocity of a sparrow?'): print('Passed') else: print('Failed!') + +def _AsciiHexDecode(input): + "Used only to enable testing _AsciiHexEncode" + #strip out all whitespace + stripped = ''.join(input.split()) + assert stripped[-1] == '>', 'Invalid terminator for Ascii Hex Stream' + stripped = stripped[:-1] #chop off terminator + assert len(stripped) % 2 == 0, 'Ascii Hex stream has odd number of bytes' + i = 0 + output = StringIO() + while i < len(stripped): + twobytes = stripped[i:i+2] + output.write(chr(eval('0x'+twobytes))) + i = i + 2 + output.seek(0) + return output.read() + +def _AsciiHexTest(text='What is the average velocity of a sparrow?'): + "Do the obvious test for whether Ascii Hex encoding works" + print('Plain text:', text) + encoded = _AsciiHexEncode(text) + print('Encoded:', encoded) + decoded = _AsciiHexDecode(encoded) + print('Decoded:', decoded) + if decoded == text: + print('Passed') + else: + print('Failed!') diff --git a/python/afdko/proofpdf.py b/python/afdko/proofpdf.py index 89cea5940..05f09b7c0 100644 --- a/python/afdko/proofpdf.py +++ b/python/afdko/proofpdf.py @@ -1,5 +1,7 @@ -#!/bin/env python +#!/usr/bin/env python + # Copyright 2014 Adobe. All rights reserved. + """ proofpdf.py. A wrapper for the fontpdf.py module. This script verifies the existence of the specified font files, creates a font class object @@ -7,6 +9,9 @@ options to arguments for the fontpdf module; the latter produces a proof file using the provided options annd font instance. """ + +from __future__ import print_function + import copy import os import platform @@ -18,18 +23,17 @@ import subprocess from fontTools.ttLib import TTFont, getTableModule, TTLibError +from fontTools.misc.py23 import open -from fontpdf import (FontPDFParams, makePDF, makeFontSetPDF, kDrawTag, - kDrawPointTag, kShowMetaTag, params_doc) -import ttfpdf -import otfpdf -import fdkutils +from afdko.fontpdf import (FontPDFParams, makePDF, makeFontSetPDF, kDrawTag, + kDrawPointTag, kShowMetaTag, params_doc) +from afdko import ttfpdf, otfpdf, fdkutils curSystem = platform.system() __usage__ = """ -proofpdf v1.20 May 17 2018 +proofpdf v1.21 Aug 28 2018 proofpdf [-h] [-u] proofpdf -help_params proofpdf [-g ] [-gf ] [-gpp ] [-pt ] [-dno] [-baseline ] [-black] [-lf ] [-select_hints <0,1,2..> ] \ @@ -207,22 +211,19 @@ def logMsg(*args): for arg in args: - print arg + print(arg) -class FDKEnvironmentError(AttributeError): +class FDKEnvironmentError(Exception): pass -class OptionParseError(KeyError): +class OptionParseError(Exception): pass -class FontError(KeyError): +class FontError(Exception): pass def CheckEnvironment(): - if curSystem == "Windows": - tx_path = subprocess.check_output(["where", "tx.exe"]).strip() - else: - tx_path = subprocess.check_output(["which", "tx"]).strip() + tx_path = 'tx' txError = 0 command = "%s -u 2>&1" % tx_path @@ -285,17 +286,17 @@ def parseLayoutFile(filePath): layoutDict = None try: - fp = file(filePath, "rt") + fp = open(filePath, "rt") data = fp.read() fp.close() except (IOError,OSError): raise OptionParseError("Option Error: could not open and read the layout file <%s>." % filePath) entryList = re.findall(r"(\d+)\s+(\S+)\s+(\S+)\s+(\S+)", data) - if entryList < 2: - print "Error: Failed to parse layout file %s. Did not match expected entry format." % (filePath) + if len(entryList) < 2: + print("Error: Failed to parse layout file %s. Did not match expected entry format." % filePath) raise OptionParseError - print "Found %s entries in layout file %s. Mac CID: %s" % (len(entryList), os.path.basename(filePath), entryList[-1][0]) + print("Found %s entries in layout file %s. Mac CID: %s" % (len(entryList), os.path.basename(filePath), entryList[-1][0])) layoutDict = {} index = 0 for entry in entryList: @@ -304,7 +305,7 @@ def parseLayoutFile(filePath): reversekey = repr(entry[1:]) layoutDict[reversekey] = [gname, entry[1], entry[2], entry[3]] # add name key -> family, face, cid as cidXXXX entryList = None - if layoutDict.has_key("cid00000"): + if "cid00000" in layoutDict: layoutDict[".notdef"] = layoutDict["cid00000"] return layoutDict @@ -342,22 +343,22 @@ def getOptions(params): raise OptionParseError("Option Error: All file names must follow all other params <%s>." % arg) if arg == "-h": - print __help__ + print(__help__) sys.exit() elif arg == "-u": - print __usage__ + print(__usage__) sys.exit() elif arg == "-help_params": - print params_doc + print(params_doc) sys.exit() elif arg[:2] == "--": name = arg[2:] i +=1 if not hasattr(params, name): - print "Error: low level parameter name %s does not exist in list of display parameters." % (name) + print("Error: low level parameter name %s does not exist in list of display parameters." % name) raise OptionParseError else: value = None @@ -367,14 +368,14 @@ def getOptions(params): if match: value = ( eval(match.group(1)), eval(match.group(2)), eval(match.group(3)) ) else: - print "Error: parameter %s must take an RGB triplet, enclosed in quotes, such as '( 1.0, 0, 0)' for red." % (name) + print("Error: parameter %s must take an RGB triplet, enclosed in quotes, such as '( 1.0, 0, 0)' for red." % name) raise OptionParseError elif name == "pageSize": match = re.search(r"\(\s*([0-9.-]+)\s*,\s*([0-9.-]+)\s*\)", arg) if match: value = ( eval(match.group(1)), eval(match.group(2)) ) else: - print "Error: parameter %s must take an (x,y) pair, enclosed in quotes, such as ' (612.0, 792.0)'." % (name) + print("Error: parameter %s must take an (x,y) pair, enclosed in quotes, such as ' (612.0, 792.0)'." % name) raise OptionParseError elif name.endswith("Font") or name.endswith("Path"): value = arg # it is text - don't need to convert @@ -383,7 +384,7 @@ def getOptions(params): try: value = int(arg) except ValueError: - print "Error: value for parameter %s must be a number." % (name) + print("Error: value for parameter %s must be a number." % name) raise OptionParseError if value != None: exec("params.%s = value" % (name)) @@ -432,7 +433,7 @@ def getOptions(params): params.glyphsPerPage = 2 params.descenderSpace = -120 params.userBaseLine = -120 - params.errorLogFilePath = "Error_file.log" + # params.errorLogFilePath = "Error_file.log" params.errorLogColumnHeight = 250 params.metaDataAboveGlyph = 0 # write meta data below glyph square. params.userPtSize = 255 @@ -569,7 +570,7 @@ def getOptions(params): if rt_filePath[0] == "-": raise OptionParseError("Option Error: it looks like the the glyph list file following '-gf' is another option.") try: - gf = file(rt_filePath, "rt") + gf = open(rt_filePath, "rt") glyphString = gf.read() gf.close() except (IOError,OSError): @@ -718,6 +719,7 @@ def openFile(path, txPath): logMsg("Failed to convert CID-keyed font %s to a temporary CFF data file." % path) cffPath = tempPathCFF os.remove(tempPath1) + elif os.path.isdir(path): # See if it is a UFO font by truing to dump it. command="%s -dump -0 \"%s\" 2>&1" % (txPath, path) @@ -734,35 +736,38 @@ def openFile(path, txPath): logMsg(report) logMsg("Failed to convert ufo font %s to a temporary CFF data file." % path) cffPath = tempPathCFF + else: try: - ff = file(path, "rb") - data = ff.read(10) - ff.close() + with open(path, "rb") as ff: + head = ff.read(10) except (IOError, OSError): traceback.print_exc() raise FontError("Failed to open and read font file %s. Check file/directory permissions." % path) - if len(data) < 10: + if len(head) < 10: raise FontError("Error: font file was zero size: may be a resource fork font, which this program does not process. <%s>." % path) - if (data[:4] == "OTTO") or (data[:4] == "true") or (data[:4] == "\0\1\0\0"): # it is an OTF/TTF font, can process file directly + + # it is an OTF/TTF font, can process file directly + elif head[:4] in (b"OTTO", b"true", b"\0\1\0\0"): try: ttFont = TTFont(path) except (IOError, OSError): raise FontError("Error opening or reading from font file <%s>." % path) except TTLibError: - raise FontError("Error parsing font file 333 <%s>." % path) + raise - if not (ttFont.has_key('CFF ') or ttFont.has_key('glyf')): + if 'CFF ' not in ttFont and 'glyf' not in ttFont: raise FontError("Error: font is not a CFF or TrueType font <%s>." % path) return ttFont, tempPathCFF - # It is not an OTF file. - if (data[0] == '\1') and (data[1] == '\0'): # CFF file + # It is not an SFNT file. + elif head[0:2] == b'\x01\x00': # CFF file cffPath = path - elif not "%" in data: - #not a PS file either + + elif b"%" not in head: + # not a PS file either logMsg("Font file must be a PS, CFF or OTF fontfile: %s." % path) raise FontError("Font file must be PS, CFF or OTF file: %s." % path) @@ -778,9 +783,8 @@ def openFile(path, txPath): raise FontError("Failed to convert PS font %s to a temp CFF font." % path) # now package the CFF font as an OTF font - ff = file(cffPath, "rb") - data = ff.read() - ff.close() + with open(cffPath, "rb") as ff: + data = ff.read() try: ttFont = TTFont() cffModule = getTableModule('CFF ') @@ -809,12 +813,12 @@ def proofMakePDF(pathList, params, txPath): try: ttFont, tempPathCFF = openFile(path, txPath) except FontError: - print traceback.format_exception_only(sys.exc_type, sys.exc_value)[-1] + print(traceback.format_exception_only(sys.exc_type, sys.exc_value)[-1]) return try: fontGlyphList = ttFont.getGlyphOrder() except FontError: - print traceback.format_exception_only(sys.exc_type, sys.exc_value)[-1] + print(traceback.format_exception_only(sys.exc_type, sys.exc_value)[-1]) return @@ -852,7 +856,7 @@ def proofMakePDF(pathList, params, txPath): basedir, pdfName = os.path.split(pdfFilePath) os.chdir(basedir) command = "start %s" % (pdfName) - print command + print(command) fdkutils.runShellCmdLogging(command) os.chdir(curdir) elif os.name == "Linux": @@ -873,19 +877,18 @@ def proofMakePDF(pathList, params, txPath): ttFont, tempPathCFF = openFile(path, txPath) fontGlyphList = ttFont.getGlyphOrder() except FontError: - print traceback.format_exception_only(sys.exc_type, sys.exc_value)[-1] + print(traceback.format_exception_only(sys.exc_type, sys.exc_value)[-1]) return - # filter specified list, if any, with font list. params.rt_glyphList = filterGlyphList(params, fontGlyphList, fontFileName) if not params.rt_glyphList: raise FontError("Error: selected glyph list is empty for font <%s>." % fontFileName) params.rt_reporter = logMsg - if ttFont.has_key("CFF "): + if "CFF " in ttFont: pdfFont = otfpdf.txPDFFont(ttFont, params) - elif ttFont.has_key("glyf"): + elif "glyf" in ttFont: pdfFont = ttfpdf.txPDFFont(ttFont, params) else: logMsg( "Quitting. Font type is not recognized. %s.." % (path)) @@ -894,8 +897,10 @@ def proofMakePDF(pathList, params, txPath): if tempPathCFF: pdfFont.path = tempPathCFF doProgressBar = not params.quietMode + pdfFilePath = makePDF(pdfFont, params, doProgressBar) ttFont.close() + if tempPathCFF: os.remove(tempPathCFF) @@ -907,12 +912,12 @@ def proofMakePDF(pathList, params, txPath): basedir, pdfName = os.path.split(pdfFilePath) os.chdir(basedir) command = "start %s" % (pdfName) - print command + print(command) fdkutils.runShellCmdLogging(command) os.chdir(curdir) elif curSystem == "Linux": command = "xdg-open \"" + pdfFilePath + "\"" + " &" - print command + print(command) fdkutils.runShellCmdLogging(command) else: command = "open \"" + pdfFilePath + "\"" + " &" @@ -957,14 +962,14 @@ def waterfallplot(): def main(): try: txPath = CheckEnvironment() - except FDKEnvironmentError,e: - print e + except FDKEnvironmentError as e: + print(e) return try: params = getOptions(FontPDFParams()) - except OptionParseError,e: - print e - print __usage__ + except OptionParseError as e: + print(e) + print(__usage__) return @@ -972,15 +977,15 @@ def main(): haveFiles = 1 for path in params.rt_fileList: if not os.path.exists(path): - print "File does not exist: <%s>." % path + print("File does not exist: <%s>." % path) haveFiles = 0 if not haveFiles: return try: proofMakePDF(params.rt_fileList, params, txPath) - except (FontError, NotImplementedError),e: - print "\t exception %s" % e + except (FontError, NotImplementedError) as e: + print("\t exception %s" % e) traceback.print_exc() return diff --git a/python/afdko/stemhist.py b/python/afdko/stemhist.py index d2a2d6748..0ac0057fa 100644 --- a/python/afdko/stemhist.py +++ b/python/afdko/stemhist.py @@ -24,7 +24,7 @@ """ __usage__ = """ -stemhist program v1.27 June 10 2016 +stemhist program v1.28 Aug 28 2018 stemhist -h stemhist -u stemhist [-g ] [-gf ] [-xg ] [-xgf ] [-all] [-a] [-new] -q font-path1 font-path2... @@ -113,6 +113,10 @@ import re import time from fontTools.ttLib import TTFont, getTableModule +from fontTools.misc.py23 import open, tounicode +from afdko.autohint import ( + parseGlyphListArg, getGlyphID, getGlyphNames, filterGlyphList, openFile, + ACOptionParseError, ACFontError, logMsg, ACreport, expandNames) from afdko.beztools import * import afdko.fdkutils as fdkutils import afdko.ufotools as ufotools @@ -123,30 +127,6 @@ rawData = [] -kFontPlistSuffix = ".plist" -kBlueValueKeys = [ - "BaselineOvershoot", # 0 - "BaselineYCoord", #1 - "LcHeight", #2 - "LcOvershoot", #3 - "CapHeight", #4 - "CapOvershoot", #5 - "AscenderHeight", #6 - "AscenderOvershoot", #7 - "FigHeight", #8 - "FigOvershoot", #9 - ] - -kOtherBlueValueKeys = [ - "DescenderHeight", # 0 - "DescenderOvershoot", #1 - "Baseline5", #2 - "Baseline5Overshoot", #3 - "SuperiorBaseline", #4 - "SuperiorOvershoot", #5 - ] - - class ACOptions: def __init__(self): self.fileList = [] @@ -164,73 +144,6 @@ def __init__(self): self.debug = 0 -class FDKEnvironmentError(Exception): - pass - - -class ACOptionParseError(Exception): - pass - - -class ACFontError(Exception): - pass - - -class ACHintError(Exception): - pass - - -def logMsg(*args): - for s in args: - print(s) - - -def ACreport(*args): - # long function used by the hinting library - for arg in args: - print(arg, end=' ') - if arg[-1] != os.linesep: - print - - -def CheckEnvironment(): - txPath = 'tx' - txError = 0 - command = "%s -u 2>&1" % (txPath) - report = fdkutils.runShellCmd(command) - if "options" not in report: - txError = 1 - - if txError: - logMsg("Please re-install the FDK. The executable directory \"%s\" is missing the tool: < %s >." % (exe_dir, txPath )) - logMsg("or the files referenced by the shell script is missing.") - raise FDKEnvironmentError - - return txPath - -def expandNames(glyphName): - glyphRange = glyphName.split("-") - if len(glyphRange) > 1: - g1 = expandNames(glyphRange[0]) - g2 = expandNames(glyphRange[1]) - glyphName = "%s-%s" % (g1, g2) - - elif glyphName[0] == "/": - glyphName = "cid" + glyphName[1:].zfill(5) - - elif glyphName.startswith("cid") and (len(glyphName) < 8): - return "cid" + glyphName[3:].zfill(5) - - return glyphName - -def parseGlyphListArg(glyphString): - glyphString = re.sub(r"[ \t\r\n,]+", ",", glyphString) - glyphList = glyphString.split(",") - glyphList = map(expandNames, glyphList) - glyphList = filter(None, glyphList) - return glyphList - - def getOptions(): options = ACOptions() i = 1 @@ -275,9 +188,8 @@ def getOptions(): if filePath[0] == "-": raise ACOptionParseError("Option Error: it looks like the the glyph list file following '-gf' is another option.") try: - gf = open(filePath, "rt") - glyphString = gf.read() - gf.close() + with open(filePath, "r", encoding='utf-8') as gf: + glyphString = gf.read() except (IOError,OSError): raise ACOptionParseError("Option Error: could not open glyph list file <%s>." % filePath) options.glyphList += parseGlyphListArg(glyphString) @@ -294,222 +206,6 @@ def getOptions(): return options -def getGlyphID(glyphTag, fontGlyphList): - glyphID = None - try: - glyphID = int(glyphTag) - glyphName = fontGlyphList[glyphID] - except IndexError: - pass - except ValueError: - try: - glyphID = fontGlyphList.index(glyphTag) - except IndexError: - pass - except ValueError: - pass - return glyphID - -def getGlyphNames(glyphTag, fontGlyphList, fontFileName): - glyphNameList = [] - rangeList = glyphTag.split("-") - prevGID = getGlyphID(rangeList[0], fontGlyphList) - if prevGID == None: - if len(rangeList) > 1: - logMsg( "\tWarning: glyph ID <%s> in range %s from glyph selection list option is not in font. <%s>." % (rangeList[0], glyphTag, fontFileName)) - else: - logMsg( "\tWarning: glyph ID <%s> from glyph selection list option is not in font. <%s>." % (rangeList[0], fontFileName)) - return None - glyphNameList.append(fontGlyphList[prevGID]) - - for glyphTag2 in rangeList[1:]: - gid = getGlyphID(glyphTag2, fontGlyphList) - if gid == None: - logMsg( "\tWarning: glyph ID <%s> in range %s from glyph selection list option is not in font. <%s>." % (glyphTag2, glyphTag, fontFileName)) - return None - for i in range(prevGID+1, gid+1): - glyphNameList.append(fontGlyphList[i]) - prevGID = gid - - return glyphNameList - -def filterGlyphList(options, fontGlyphList, fontFileName): - # Return the list of glyphs which are in the intersection of the argument list and the glyphs in the font - # Complain about glyphs in the argument list which are not in the font. - if not options.glyphList: - glyphList = fontGlyphList - else: - # expand ranges: - glyphList = [] - for glyphTag in options.glyphList: - glyphNames = getGlyphNames(glyphTag, fontGlyphList, fontFileName) - if glyphNames != None: - glyphList.extend(glyphNames) - if options.excludeGlyphList: - newList = filter(lambda name: name not in glyphList, fontGlyphList) - glyphList = newList - return glyphList - - -def getFontInfo(pTopDict, fontPSName, options, fdIndex = 0): - # The AC library needs the global font hint zones and standard stem widths. Format them - # into a single text string. - # The text format is arbitrary, inherited from very old software, but there is no real need to change it. - # Assign arbitrary values that will prevent the alignment zones from affecting AC. - if hasattr(pTopDict, "FDArray"): - pDict = pTopDict.FDArray[fdIndex] - else: - pDict = pTopDict - privateDict = pDict.Private - - fontinfo=[] - fontinfo.append("OrigEmSqUnits") - upm = int(1/pDict.FontMatrix[0]) - fontinfo.append(str(upm) ) # OrigEmSqUnits - - fontinfo.append("FontName") - if hasattr(pTopDict, "FontName"): - fontinfo.append(pDict.FontName ) # FontName - else: - fontinfo.append(fontPSName ) - - low = min( -upm*0.25, pTopDict.FontBBox[1] - 200) - high = max ( upm*1.25, pTopDict.FontBBox[3] + 200) - # Make a set of inactive alignment zones: zones outside of the font bbox so as not to affect stem collection. - # Some fonts have bad BBox values, so I don't let this be smaller than -upm*0.25, upm*1.25. - inactiveAlignmentValues = [low, low, high, high] - blueValues = inactiveAlignmentValues - numBlueValues = len(blueValues) - numBlueValues = min(numBlueValues, len(kBlueValueKeys)) - blueValues = map(str, blueValues) - - for i in range(numBlueValues): - fontinfo.append(kBlueValueKeys[i]) - fontinfo.append(blueValues[i]) - - i = 0 - if numBlueValues < 5: - fontinfo.append("CapHeight") - fontinfo.append('0' ) #CapOvershoot = 0 always needs a value! - - - vstems = [upm] # dummy value. Needs to be larger than any hint will likely be, - # as the autohint program strips out any hint wider than twice the largest global stem width.. - vstems = repr(vstems) - fontinfo.append("DominantV") - fontinfo.append(vstems) - fontinfo.append("StemSnapV") - fontinfo.append(vstems) - - hstems = [upm] # dummy value. Needs to be larger than any hint will likely be, - # as the autohint program strips out any hint wider than twice the largest global stem width. - hstems = repr(hstems) - fontinfo.append("DominantH") - fontinfo.append(hstems) - fontinfo.append("StemSnapH") - fontinfo.append(hstems) - - fontinfo.append("FlexOK") - fontinfo.append("false") - fontinfo.append(" ") - - fontinfoStr = " ".join([str(x) for x in fontinfo]) - return fontinfoStr - - -def openFile(path): - if os.path.isfile(path): - font = openOpenTypeFile(path, None) - else: - # maybe it is a a UFO font. - # We always use the hash map to skip glyphs that have been previously processed, unless the user has said to do all. - font = openUFOFile(path, None, 0) - return font - -def openUFOFile(path, outFilePath, useHashMap): - # Check if has glyphs/contents.plist - contentsPath = os.path.join(path, "glyphs", "contents.plist") - if not os.path.exists(contentsPath): - msg = "Font file must be a PS, CFF, OTF, or ufo font file: %s." % (path) - logMsg(msg) - raise ACFontError(msg) - - # If user has specified a path other than the source font path, then copy the entire - # ufo font, and operate on the copy. - if (outFilePath != None) and (os.path.abspath(path) != os.path.abspath(outFilePath)): - msg = "Copying from source UFO font to output UFO fot before processing..." - logMsg(msg) - path = outFilePath - font = ufotools.UFOFontData(path, useHashMap, ufotools.kAutohintName) - return font - -def openOpenTypeFile(path, outFilePath): - # If input font is CFF or PS, build a dummy ttFont in memory.. - # return ttFont, and flag if is a real OTF font Return flag is 0 if OTF, 1 if CFF, and 2 if PS/ - fontType = 0 # OTF - tempPathCFF = fdkutils.get_temp_file_path() - try: - ff = open(path, "rb") - data = ff.read(10) - ff.close() - except (IOError, OSError): - logMsg("Failed to open and read font file %s." % path) - - if data[:4] == "OTTO": # it is an OTF font, can process file directly - try: - ttFont = TTFont(path) - except (IOError, OSError): - raise ACFontError("Error opening or reading from font file <%s>." % path) - except TTLibError: - raise ACFontError("Error parsing font file <%s>." % path) - - try: - cffTable = ttFont["CFF "] - except KeyError: - raise ACFontError("Error: font is not a CFF font <%s>." % fontFileName) - - else: - - # It is not an OTF file. - if (data[0] == '\1') and (data[1] == '\0'): # CFF file - fontType = 1 - tempPathCFF = path - elif not "%" in data: - #not a PS file either - logMsg("Font file must be a PS, CFF or OTF fontfile: %s." % path) - raise ACFontError("Font file must be PS, CFF or OTF file: %s." % path) - - else: # It is a PS file. Convert to CFF. - fontType = 2 - print("Converting Type1 font to temp CFF font file...") - command="tx -cff +b -std \"%s\" \"%s\" 2>&1" % (path, tempPathCFF) - report = fdkutils.runShellCmd(command) - if "fatal" in report: - logMsg("Attempted to convert font %s from PS to a temporary CFF data file." % path) - logMsg(report) - raise ACFontError("Failed to convert PS font %s to a temp CFF font." % path) - - # now package the CFF font as an OTF font. - ff = open(tempPathCFF, "rb") - data = ff.read() - ff.close() - try: - ttFont = TTFont() - cffModule = getTableModule('CFF ') - cffTable = cffModule.table_C_F_F_('CFF ') - ttFont['CFF '] = cffTable - cffTable.decompile(data, ttFont) - except: - logMsg( "\t%s" %(traceback.format_exception_only(sys.exc_info()[0], sys.exc_info()[1])[-1])) - logMsg("Attempted to read font %s as CFF." % path) - raise ACFontError("Error parsing font file <%s>." % path) - - fontData = CFFFontData(ttFont, path, outFilePath, fontType, logMsg) - return fontData - - - - kCharZone = "charZone" kStemZone = "stemZone" kHStem = "HStem" @@ -549,13 +245,13 @@ def addGlyphReport(self, reportString): self.stemZoneStemList[hintpos] = (x, y) elif key == kHStem: width = x - y - if not self.hStemPosList.has_key(hintpos): # avoid counting duplicates + if hintpos not in self.hStemPosList: # avoid counting duplicates count = self.hStemList.get(width, 0) self.hStemList[width] = count+1 self.hStemPosList[hintpos] = width elif key == kVStem: width = x - y - if not self.vStemPosList.has_key(hintpos): # avoid counting duplicates + if hintpos not in self.vStemPosList: # avoid counting duplicates count = self.vStemList.get(width, 0) self.vStemList[width] = count+1 self.vStemPosList[hintpos] = width @@ -745,16 +441,17 @@ def PrintReports(path, h_stem_list, v_stem_list, top_zone_list, bot_zone_list): title = titles[i] header = headers[i] try: - with open(fName, "wt") as fp: - fp.write(title) - fp.write(header) - fp.writelines(formatReport(rep_list, sortFunc)) + with open(fName, "w") as fp: + fp.write(tounicode(title)) + fp.write(tounicode(header)) + for item in formatReport(rep_list, sortFunc): + fp.write(tounicode(item)) print("Wrote %s" % fName) except (IOError, OSError): print("Error creating file %s!" % fName) -def collectStemsFont(path, options, txPath): +def collectStemsFont(path, options): # use fontTools library to open font and extract CFF table. # If error, skip font and report error. fontFileName = os.path.basename(path) @@ -794,9 +491,8 @@ def collectStemsFont(path, options, txPath): if fdGlyphDict == None: fdDict = fontDictList[0] - fp = open(tempFI, "wt") - fp.write(fdDict.getFontInfo()) - fp.close() + with open(tempFI, "w") as fp: + fp.write(tounicode(fdDict.getFontInfo())) else: if not options.verbose: logMsg("Note: Using alternate FDDict global values from fontinfo file for some glyphs. Remove option '-q' to see which dict is used for which glyphs.") @@ -843,9 +539,8 @@ def collectStemsFont(path, options, txPath): if not fdIndex == lastFDIndex: lastFDIndex = fdIndex fdDict = fontData.getFontInfo(psName, path, options.allow_no_blues, options.noFlex, options.vCounterGlyphs, options.hCounterGlyphs, fdIndex) - fp = open(tempFI, "wt") - fp.write(fdDict.getFontInfo()) - fp.close() + with open(tempFI, "w") as fp: + fp.write(tounicode(fdDict.getFontInfo())) else: if (fdGlyphDict != None): try: @@ -856,17 +551,15 @@ def collectStemsFont(path, options, txPath): if lastFDIndex != fdIndex: lastFDIndex = fdIndex fdDict = fontDictList[fdIndex] - fp = open(tempFI, "wt") - fp.write(fdDict.getFontInfo()) - fp.close() + with open(tempFI, "w") as fp: + fp.write(tounicode(fdDict.getFontInfo())) glyphReports.startGlyphName(name) # Call auto-hint library on bez string. - bp = open(tempBez, "wt") - bp.write(bezString) - bp.close() + with open(tempBez, "w") as bp: + bp.write(tounicode(bezString)) if options.doAlign: doAlign = "-ra" @@ -889,9 +582,8 @@ def collectStemsFont(path, options, txPath): sys.exit() if os.path.exists(tempReport): - bp = open(tempReport, "rt") - report = bp.read() - bp.close() + with open(tempReport, "r", encoding='utf-8') as bp: + report = bp.read() if options.debug: print("Wrote AC fontinfo data file to", tempFI) print("Wrote AC output rpt file to", tempReport) @@ -915,12 +607,6 @@ def collectStemsFont(path, options, txPath): def main(): - try: - txPath = CheckEnvironment() - except FDKEnvironmentError as e: - logMsg(e) - return 1 - try: options = getOptions() except ACOptionParseError as e: @@ -947,14 +633,13 @@ def main(): logMsg( "Skipping %s, as a report already exists." % (path)) continue try: - collectStemsFont(path, options, txPath) + collectStemsFont(path, options) except (ACFontError, ufotools.UFOParseError) as e: logMsg( "\t%s" % e) return 1 if options.debug: - fp = open("rawdata.txt", "wt") - fp.write('\n'.join(rawData)) - fp.close() + with open("rawdata.txt", "w") as fp: + fp.write(tounicode('\n'.join(rawData))) if __name__=='__main__': diff --git a/python/afdko/ttfpdf.py b/python/afdko/ttfpdf.py index 6d25786c0..9882c4f1a 100644 --- a/python/afdko/ttfpdf.py +++ b/python/afdko/ttfpdf.py @@ -1,5 +1,5 @@ """ -otfpdf v1.3 Nov 30 2010 +otfpdf v1.4 Aug 28 2018 provides support for the proofpdf script, for working with OpenType/TTF fonts. Provides an implementation of the fontpdf font object. Cannot be run alone. @@ -8,7 +8,7 @@ """ from fontTools.pens.boundsPen import BoundsPen, BasePen -from fontpdf import FontPDFGlyph, FontPDFFont, FontPDFPoint +from afdko.fontpdf import FontPDFGlyph, FontPDFFont, FontPDFPoint class FontPDFPen(BasePen): def __init__(self, glyphSet = None): @@ -85,14 +85,15 @@ def __init__(self, clientFont, params): return def clientGetPSName(self): - namelist = self.clientFont['name'].names - for nameRec in namelist: - if nameRec.nameID != 6: - continue - psName = nameRec.string - break - namelist = None - return str(psName) # reduce Unicode from MS string to latin1. + psName = 'None' + name_tb = self.clientFont['name'] + mac_name_id_6 = name_tb.getName(6, 1, 0, 0) + win_name_id_6 = name_tb.getName(6, 3, 1, 1033) + if mac_name_id_6: + return mac_name_id_6.string.decode() + elif win_name_id_6: + return win_name_id_6.string.decode('utf_16_be') + return psName def clientGetOTVersion(self): version = self.clientFont['head'].fontRevision @@ -126,7 +127,7 @@ def clientGetBaseline(self): baseScript = baseRecord.BaseScript baseLine = baseScript.BaseValues.BaseCoord[baseTagIndex].Coordinate break - except KeyError, AttributeError: + except (KeyError, AttributeError): baseLine = 0 return baseLine diff --git a/python/afdko/ttxn.py b/python/afdko/ttxn.py index 776a0f54c..f273a85ea 100755 --- a/python/afdko/ttxn.py +++ b/python/afdko/ttxn.py @@ -64,7 +64,7 @@ class name. __help__ = """ -ttxn v1.20.0 Jul 20 2018 +ttxn v1.21.0 Aug 30 2018 Based on the ttx tool, with the same options, except that it is limited to dumping, and cannot compile. Makes a normalized dump of the font, or of @@ -83,7 +83,7 @@ class name. from fontTools.ttLib import TTFont, tagToXML, TTLibError from fontTools.ttLib.tables.DefaultTable import DefaultTable from fontTools.misc.loggingTools import Timer -from fontTools.misc.py23 import basestring, tostr +from fontTools.misc.py23 import open, basestring import copy import subprocess import re @@ -91,19 +91,17 @@ class name. import textwrap import platform import getopt -import tempfile import logging +from afdko.fdkutils import get_temp_file_path + log = logging.getLogger('fontTools.ttx') curSystem = platform.system() -if curSystem == "Windows": - TX_TOOL = subprocess.check_output(["where", "tx.exe"]).strip() -else: - TX_TOOL = subprocess.check_output(["which", "tx"]).strip() +TX_TOOL = 'tx' INDENT = " " @@ -2063,14 +2061,12 @@ def _tableToXML(self, writer, tag, quiet=None, splitGlyphs=False): def shellcmd(cmdList): # In all cases, assume that cmdList does NOT specify the output file. # I use this because tx -dump -6 can be very large. - tempPath = tempfile.mkstemp()[1] + tempPath = get_temp_file_path() cmdList.append(tempPath) subprocess.check_call(cmdList) - fp = open(tempPath, "rt") - data = fp.read() - fp.close() - # XXX is UTF-8 the correct encoding to decode tx output for py3? - return tostr(data, encoding="utf8") + with open(tempPath, "r", encoding="utf-8") as fp: + data = fp.read() + return data def dumpFont(writer, fontPath, supressHints=False): diff --git a/python/afdko/ufotools.py b/python/afdko/ufotools.py index 910edd602..6dd0f0335 100644 --- a/python/afdko/ufotools.py +++ b/python/afdko/ufotools.py @@ -6,17 +6,18 @@ import os import plistlib import re -import sys try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET +from fontTools.misc.py23 import open, tobytes, tounicode + from afdko import convertfonttocid, fdkutils __doc__ = """ -ufotools.py v1.30.7 Aug 4 2018 +ufotools.py v1.31.0 Aug 28 2018 This module supports using the Adobe FDK tools which operate on 'bez' files with UFO fonts. It provides low level utilities to manipulate UFO @@ -439,9 +440,8 @@ def checkForHints(self, glyphName): hasHints = 0 glyphPath = self.getGlyphProcessedPath(glyphName) if glyphPath and os.path.exists(glyphPath): - fp = open(glyphPath, "rt") - data = fp.read() - fp.close() + with open(glyphPath, "r", encoding='utf-8') as fp: + data = fp.read() if "hintSetList" in data: hasHints = 1 return hasHints @@ -472,10 +472,9 @@ def saveChanges(self): for glyphName, glifXML in self.newGlyphMap.items(): glyphPath = self.getWriteGlyphPath(glyphName) # print("Saving file", glyphPath) - fp = open(glyphPath, "wt") - et = ET.ElementTree(glifXML) - et.write(fp, encoding="UTF-8", xml_declaration=True) - fp.close() + with open(glyphPath, "wb") as fp: + et = ET.ElementTree(glifXML) + et.write(fp, encoding="UTF-8", xml_declaration=True) # Update the layer contents.plist file layerContentsFilePath = os.path.join( @@ -508,9 +507,8 @@ def getGlyphMap(self): def readHashMap(self): hashPath = os.path.join(self.parentPath, "data", kAdobHashMapName) if os.path.exists(hashPath): - fp = open(hashPath, "rt") - data = fp.read() - fp.close() + with open(hashPath, "r", encoding='utf-8') as fp: + data = fp.read() newMap = eval(data) else: newMap = {kAdobHashMapVersionName: kAdobHashMapVersion} @@ -527,7 +525,6 @@ def readHashMap(self): print("Updating hash map: was older version") newMap = {kAdobHashMapVersionName: kAdobHashMapVersion} self.hashMap = newMap - return def writeHashMap(self): hashMap = self.hashMap @@ -539,18 +536,15 @@ def writeHashMap(self): os.makedirs(hashDir) hashPath = os.path.join(hashDir, kAdobHashMapName) - hasMapKeys = hashMap.keys() - hasMapKeys.sort() + hasMapKeys = sorted(hashMap.keys()) data = ["{"] for gName in hasMapKeys: data.append("'%s': %s," % (gName, hashMap[gName])) data.append("}") data.append("") data = '\n'.join(data) - fp = open(hashPath, "wt") - fp.write(data) - fp.close() - return + with open(hashPath, "w") as fp: + fp.write(tounicode(data)) def getCurGlyphPath(self, glyphName): if self.curSrcDir is None: @@ -880,7 +874,7 @@ def getFontInfo(self, fontPSName, inputPath, allow_no_blues, noFlex, # Some fonts have bad BBox values, so we don't let this be smaller # than -upm*0.25, upm*1.25. inactiveAlignmentValues = [low, low, high, high] - blueValues = self.fontInfo.get("postscriptBlueValues", []) + blueValues = sorted(self.fontInfo.get("postscriptBlueValues", [])) numBlueValues = len(blueValues) if numBlueValues < 4: if allow_no_blues: @@ -891,7 +885,6 @@ def getFontInfo(self, fontPSName, inputPath, allow_no_blues, noFlex, "ERROR: Font must have at least four values in its " "BlueValues array for AC to work!") - blueValues.sort() # The first pair only is a bottom zone, where the first value # is the overshoot position; the rest are top zones, and second # value of the pair is the overshoot position. @@ -899,7 +892,7 @@ def getFontInfo(self, fontPSName, inputPath, allow_no_blues, noFlex, for i in range(3, numBlueValues, 2): blueValues[i] = blueValues[i] - blueValues[i - 1] - blueValues = map(str, blueValues) + blueValues = [str(val) for val in blueValues] numBlueValues = min( numBlueValues, len(convertfonttocid.kBlueValueKeys)) for i in range(numBlueValues): @@ -916,7 +909,7 @@ def getFontInfo(self, fontPSName, inputPath, allow_no_blues, noFlex, otherBlues.sort() for i in range(0, numBlueValues, 2): otherBlues[i] = otherBlues[i] - otherBlues[i + 1] - otherBlues = map(str, otherBlues) + otherBlues = [str(val) for val in otherBlues] numBlueValues = min( numBlueValues, len(convertfonttocid.kOtherBlueValueKeys)) for i in range(numBlueValues): @@ -997,9 +990,8 @@ def getfdInfo(self, psName, inputPath, allow_no_blues, noFlex, maxY = maxX minY = -self.getUnitsPerEm() if os.path.exists(srcFontInfo): - fi = open(srcFontInfo, "rU") - fontInfoData = fi.read() - fi.close() + with open(srcFontInfo, "r", encoding='utf-8') as fi: + fontInfoData = fi.read() fontInfoData = re.sub(r"#[^\r\n]+", "", fontInfoData) if "FDDict" in fontInfoData: @@ -1124,7 +1116,7 @@ def buildGlyphHashValue(self, width, outlineXML, glyphName, if len(data) < 128: hash = data else: - hash = hashlib.sha512(data).hexdigest() + hash = hashlib.sha512(data.encode("ascii")).hexdigest() return hash, dataList def getComponentOutline(self, componentItem): @@ -1213,10 +1205,9 @@ def parsePList(filePath, dictKey=None): # We uses this rather than the plistlib in order to get a list that # allows preserving key order. - fp = open(filePath, "r") - data = fp.read() - fp.close() - contents = XML(data) + with open(filePath, "r", encoding='utf-8') as fp: + data = fp.read() + contents = XML(tobytes(data, encoding='utf-8')) contents_dict = contents.find("dict") if contents_dict is None: raise UFOParseError("In '%s', failed to find dict. '%s'." % ( @@ -2173,9 +2164,8 @@ def convertBezToGLIF(ufoFontData, glyphName, bezString, hintsOnly=False): # I need to replace the contours with data from the bez string. glyphPath = ufoFontData.getGlyphSrcPath(glyphName) - fp = open(glyphPath, "r") - data = fp.read() - fp.close() + with open(glyphPath, "r", encoding='utf-8') as fp: + data = fp.read() glifXML = XML(data) @@ -2530,31 +2520,6 @@ def makeUFOFMNDB(srcFontPath): parts.append("\ts=%s" % (styleName)) parts.append("") data = '\n'.join(parts) - with open(fmndbPath, "wt") as fp: - fp.write(data) + with open(fmndbPath, "w") as fp: + fp.write(tounicode(data)) return fmndbPath - - -def test1(): - import pprint - ufoFontData = UFOFontData(sys.argv[1]) - - if len(sys.argv) > 2: - gNameList = sys.argv[2:] - else: - gm = ufoFontData.getGlyphMap() - gNameList = gm.keys() - doAll = 0 - for glyphName in gNameList: - bezString, width = convertGLIFToBez(ufoFontData, glyphName, doAll) - glifXML = convertBezToGLIF(ufoFontData, glyphName, bezString) - pprint.pprint(xmlToString(glifXML)) - print(len(gNameList)) - - -def test2(): - checkHashMaps(sys.argv[1], False) - - -if __name__ == '__main__': - test2() diff --git a/requirements.txt b/requirements.txt index 733265292..bdebc5717 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ booleanOperations~=0.8.0 defcon~=0.5.2 -fontMath~=0.4.5 +fontMath~=0.4.7 fontPens~=0.1.0 fontTools~=3.29.0 mutatorMath~=2.1.1 diff --git a/tests/comparefamily_data/expected_output/source-code-pro_otf.txt b/tests/comparefamily_data/expected_output/source-code-pro_otf.txt index aa00ef23d..883353e4a 100644 --- a/tests/comparefamily_data/expected_output/source-code-pro_otf.txt +++ b/tests/comparefamily_data/expected_output/source-code-pro_otf.txt @@ -60,62 +60,6 @@ This may cause the font glyphs to be smear-bolded under Windows 2000. Single Face Test 10: Check that no Bold Style face has OS/2.usWeightClass of less than 500 Single Face Test 11: Check that BASE table exists, and has reasonable values - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. Single Face Test 12: Check that Italic style is set when post table italic angle is non-zero, and that italic angle is reasonable. @@ -284,2820 +228,6 @@ Single Face Test 21: Warn if there trailing or leading spaces in the name table Single Face Test 22: Warn if any ligatures have a width which not larger than the width of the first glyph, or, if first glyph is not in font, if the RSB is negative. Single Face Test 23: Warn if any accented glyphs have a width different than the base glyph. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Regular. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Regular. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Regular. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Regular. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Regular. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Regular. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Regular. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Regular. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Regular. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Regular. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Regular. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Regular. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-It. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-It. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-It. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-It. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-It. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-It. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-It. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-It. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-It. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-It. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-It. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-It. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-It. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-It. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-It. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-It. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-It. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-It. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-It. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-It. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-It. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-It. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-It. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-It. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-It. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-It. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-It. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-It. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-It. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-It. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-It. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-It. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-It. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-It. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-It. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Bold. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Bold. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Bold. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Bold. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Bold. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Bold. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Bold. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Bold. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Bold. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Bold. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Bold. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Bold. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Black. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Black. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Black. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Black. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Black. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Black. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Black. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Black. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Black. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Black. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Black. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Black. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Black. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Black. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Black. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Black. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Black. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Black. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Black. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Black. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Black. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Black. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Black. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Black. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Black. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Black. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Black. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Black. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Black. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Black. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Black. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Black. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Black. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Black. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Black. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Black. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Black. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Light. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Light. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Light. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Light. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Light. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Light. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Light. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Light. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Light. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Light. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Light. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Light. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Light. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Light. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Light. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Light. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Light. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Light. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Light. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Light. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Light. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Light. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Light. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Light. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Light. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Light. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Light. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Light. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Light. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Light. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Light. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Light. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Light. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Light. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Light. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Light. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Light. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Medium. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Medium. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Medium. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Medium. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Medium. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Medium. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Medium. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Medium. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Medium. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Medium. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Medium. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Medium. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-SemiboldIt. Single Face Test 24: Warn if font has 'size' feature, and design size is not in specified range. @@ -3187,7 +317,51 @@ Family Test 12: Check that GSUB/GPOS script and language feature lists are the s Error: In GPOS/GUSB tables, the sets of lookups used by features in the script-language systems differ between fonts. This may be intended if the faces have different charsets. -Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCodePro-Black SourceCodePro-ExtraLight SourceCodePro-Light SourceCodePro-Medium SourceCodePro-Semibold +Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCodePro-Black SourceCodePro-ExtraLight SourceCodePro-Light SourceCodePro-Medium SourceCodePro-Semibold + + GPOS Table - script:tag list. + DFLT: dflt + cyrl: SRB dflt + grek: dflt + latn: NSM SKS dflt + + lookup group ID to lookup index list: + ID 1: maps to lookups [29]. + ID 2: maps to lookups [15, 16, 17, 18, 19]. + ID 3: maps to lookups [0]. + ID 4: maps to lookups [1]. + ID 5: maps to lookups [2]. + ID 6: maps to lookups [3]. + ID 7: maps to lookups [4]. + ID 8: maps to lookups [5]. + ID 9: maps to lookups [6]. + ID 10: maps to lookups [8]. + ID 11: maps to lookups [7]. + ID 12: maps to lookups [9]. + ID 13: maps to lookups [10]. + ID 14: maps to lookups [11]. + ID 15: maps to lookups [12]. + ID 16: maps to lookups [21]. + ID 17: maps to lookups [20, 22, 23]. + ID 18: maps to lookups [20]. + ID 19: maps to lookups [28]. + ID 20: maps to lookups [24]. + ID 21: maps to lookups [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12]. + ID 22: maps to lookups [27]. + ID 23: maps to lookups [10, 11]. + ID 24: maps to lookups [0, 4]. + ID 25: maps to lookups [1, 5, 8]. + ID 26: maps to lookups [3, 6]. + ID 27: maps to lookups [24, 25, 26]. + ID 28: maps to lookups [7, 8]. + ID 29: maps to lookups [13]. + + GPOS Table - feature lookup groups by script:tag column headers. + (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + mark + mkmk + size GSUB Table - script:tag list. DFLT: dflt @@ -3228,7 +402,7 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode GSUB Table - feature lookup groups by script:tag column headers. (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt case ccmp cv01 @@ -3262,6 +436,8 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode sups zero +Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro-BlackIt SourceCodePro-ExtraLightIt SourceCodePro-LightIt SourceCodePro-MediumIt SourceCodePro-SemiboldIt + GPOS Table - script:tag list. DFLT: dflt cyrl: SRB dflt @@ -3269,8 +445,8 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode latn: NSM SKS dflt lookup group ID to lookup index list: - ID 1: maps to lookups [29]. - ID 2: maps to lookups [15, 16, 17, 18, 19]. + ID 1: maps to lookups [23]. + ID 2: maps to lookups [9, 10, 11, 12, 13]. ID 3: maps to lookups [0]. ID 4: maps to lookups [1]. ID 5: maps to lookups [2]. @@ -3278,36 +454,24 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode ID 7: maps to lookups [4]. ID 8: maps to lookups [5]. ID 9: maps to lookups [6]. - ID 10: maps to lookups [8]. - ID 11: maps to lookups [7]. - ID 12: maps to lookups [9]. - ID 13: maps to lookups [10]. - ID 14: maps to lookups [11]. - ID 15: maps to lookups [12]. - ID 16: maps to lookups [21]. - ID 17: maps to lookups [20, 22, 23]. - ID 18: maps to lookups [20]. - ID 19: maps to lookups [28]. - ID 20: maps to lookups [24]. - ID 21: maps to lookups [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12]. - ID 22: maps to lookups [27]. - ID 23: maps to lookups [10, 11]. - ID 24: maps to lookups [0, 4]. - ID 25: maps to lookups [1, 5, 8]. - ID 26: maps to lookups [3, 6]. - ID 27: maps to lookups [24, 25, 26]. - ID 28: maps to lookups [7, 8]. - ID 29: maps to lookups [13]. + ID 10: maps to lookups [7]. + ID 11: maps to lookups [15]. + ID 12: maps to lookups [14, 16, 17]. + ID 13: maps to lookups [14]. + ID 14: maps to lookups [22]. + ID 15: maps to lookups [18]. + ID 16: maps to lookups [0, 1, 2, 4, 5, 6, 7]. + ID 17: maps to lookups [21]. + ID 18: maps to lookups [5, 6]. + ID 19: maps to lookups [18, 19, 20]. GPOS Table - feature lookup groups by script:tag column headers. (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt mark mkmk size -Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro-BlackIt SourceCodePro-ExtraLightIt SourceCodePro-LightIt SourceCodePro-MediumIt SourceCodePro-SemiboldIt - GSUB Table - script:tag list. DFLT: dflt cyrl: SRB dflt @@ -3337,7 +501,7 @@ Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro GSUB Table - feature lookup groups by script:tag column headers. (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt case ccmp cv01 @@ -3365,40 +529,6 @@ Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro sups zero - GPOS Table - script:tag list. - DFLT: dflt - cyrl: SRB dflt - grek: dflt - latn: NSM SKS dflt - - lookup group ID to lookup index list: - ID 1: maps to lookups [23]. - ID 2: maps to lookups [9, 10, 11, 12, 13]. - ID 3: maps to lookups [0]. - ID 4: maps to lookups [1]. - ID 5: maps to lookups [2]. - ID 6: maps to lookups [3]. - ID 7: maps to lookups [4]. - ID 8: maps to lookups [5]. - ID 9: maps to lookups [6]. - ID 10: maps to lookups [7]. - ID 11: maps to lookups [15]. - ID 12: maps to lookups [14, 16, 17]. - ID 13: maps to lookups [14]. - ID 14: maps to lookups [22]. - ID 15: maps to lookups [18]. - ID 16: maps to lookups [0, 1, 2, 4, 5, 6, 7]. - ID 17: maps to lookups [21]. - ID 18: maps to lookups [5, 6]. - ID 19: maps to lookups [18, 19, 20]. - - GPOS Table - feature lookup groups by script:tag column headers. - (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt - mark - mkmk - size - Family Test 13: Check that no two faces in a preferred group have the same weight/width/Italic-style values when the OS/2 table fsSelection bit 8 (WEIGHT_WIDTH_SLOPE_ONLY) is set. Family Test 14: Check that all faces in a preferred group have the same fsType embedding values. @@ -3441,20 +571,20 @@ FamilyTest 21: Check that all faces in the Compatible Family group have the same Menu Name Report: Preferred Menu Mac Compatible Menu Windows Compatible Menu -Source Code Pro/Regular Source Code Pro Source Code Pro/Regular -Source Code Pro/Italic Source Code Pro Italic Source Code Pro/Italic -Source Code Pro/Bold Source Code Pro Bold Source Code Pro/Bold -Source Code Pro/Bold Italic Source Code Pro Bold Italic Source Code Pro/Bold Italic -Source Code Pro/Black Source Code Pro Black Source Code Pro Black/Regular -Source Code Pro/Black Italic Source Code Pro Black Italic Source Code Pro Black/Italic +Source Code Pro/Regular Source Code Pro Source Code Pro/Regular +Source Code Pro/Italic Source Code Pro Italic Source Code Pro/Italic +Source Code Pro/Bold Source Code Pro Bold Source Code Pro/Bold +Source Code Pro/Bold Italic Source Code Pro Bold Italic Source Code Pro/Bold Italic +Source Code Pro/Black Source Code Pro Black Source Code Pro Black/Regular +Source Code Pro/Black Italic Source Code Pro Black Italic Source Code Pro Black/Italic Source Code Pro/ExtraLight Source Code Pro ExtraLight Source Code Pro ExtraLight/Regular -Source Code Pro/ExtraLight Italic Source Code Pro ExtraLight Italic Source Code Pro ExtraLight/Italic -Source Code Pro/Light Source Code Pro Light Source Code Pro Light/Regular -Source Code Pro/Light Italic Source Code Pro Light Italic Source Code Pro Light/Italic -Source Code Pro/Medium Source Code Pro Medium Source Code Pro Medium/Regular -Source Code Pro/Medium Italic Source Code Pro Medium Italic Source Code Pro Medium/Italic -Source Code Pro/Semibold Source Code Pro Semibold Source Code Pro Semibold/Regular -Source Code Pro/Semibold Italic Source Code Pro Semibold Italic Source Code Pro Semibold/Italic +Source Code Pro/ExtraLight Italic Source Code Pro ExtraLight Italic Source Code Pro ExtraLight/Italic +Source Code Pro/Light Source Code Pro Light Source Code Pro Light/Regular +Source Code Pro/Light Italic Source Code Pro Light Italic Source Code Pro Light/Italic +Source Code Pro/Medium Source Code Pro Medium Source Code Pro Medium/Regular +Source Code Pro/Medium Italic Source Code Pro Medium Italic Source Code Pro Medium/Italic +Source Code Pro/Semibold Source Code Pro Semibold Source Code Pro Semibold/Regular +Source Code Pro/Semibold Italic Source Code Pro Semibold Italic Source Code Pro Semibold/Italic FONT METRICS REPORT Report 1: @@ -3603,7 +733,7 @@ Report 3:Copyright and Trademark strings for the first face in the group Preferred Family: Source Code Pro First Face: SourceCodePro-Regular -Copyright: Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ÔSourceÕ. +Copyright: Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. Trademark: Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. Panose Report: diff --git a/tests/comparefamily_data/expected_output/source-code-pro_ttf.txt b/tests/comparefamily_data/expected_output/source-code-pro_ttf.txt index e275e8c78..d23314c7a 100644 --- a/tests/comparefamily_data/expected_output/source-code-pro_ttf.txt +++ b/tests/comparefamily_data/expected_output/source-code-pro_ttf.txt @@ -32,62 +32,6 @@ This may cause the font glyphs to be smear-bolded under Windows 2000. Single Face Test 10: Check that no Bold Style face has OS/2.usWeightClass of less than 500 Single Face Test 11: Check that BASE table exists, and has reasonable values - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Regular. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-It. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Bold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BoldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Black. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-BlackIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLight. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-ExtraLightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Light. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-LightIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Medium. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-MediumIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-Semibold. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'DFLT', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'cyrl', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'grek', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. - Warning: In order to center OS/2 Capheight in the ideo em-square, the BASE table offset for script 'latn', tag 'ideo' should be '-170' rather than '-170'. SourceCodePro-SemiboldIt. Single Face Test 12: Check that Italic style is set when post table italic angle is non-zero, and that italic angle is reasonable. @@ -215,2820 +159,6 @@ Single Face Test 21: Warn if there trailing or leading spaces in the name table Single Face Test 22: Warn if any ligatures have a width which not larger than the width of the first glyph, or, if first glyph is not in font, if the RSB is negative. Single Face Test 23: Warn if any accented glyphs have a width different than the base glyph. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Regular. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Regular. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Regular. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Regular. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Regular. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Regular. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Regular. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Regular. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Regular. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Regular. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Regular. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Regular. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Regular. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Regular. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Regular. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Regular. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Regular. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Regular. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Regular. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Regular. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Regular. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Regular. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Regular. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Regular. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-It. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-It. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-It. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-It. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-It. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-It. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-It. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-It. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-It. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-It. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-It. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-It. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-It. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-It. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-It. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-It. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-It. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-It. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-It. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-It. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-It. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-It. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-It. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-It. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-It. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-It. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-It. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-It. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-It. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-It. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-It. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-It. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-It. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-It. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-It. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-It. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-It. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-It. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-It. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-It. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-It. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-It. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-It. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-It. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-It. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-It. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-It. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-It. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-It. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-It. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-It. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-It. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-It. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-It. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-It. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-It. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-It. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-It. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Bold. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Bold. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Bold. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Bold. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Bold. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Bold. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Bold. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Bold. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Bold. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Bold. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Bold. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Bold. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Bold. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Bold. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Bold. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Bold. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Bold. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Bold. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Bold. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Bold. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Bold. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Bold. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Bold. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Bold. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BoldIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Black. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Black. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Black. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Black. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Black. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Black. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Black. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Black. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Black. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Black. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Black. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Black. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Black. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Black. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Black. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Black. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Black. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Black. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Black. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Black. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Black. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Black. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Black. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Black. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Black. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Black. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Black. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Black. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Black. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Black. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Black. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Black. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Black. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Black. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Black. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Black. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Black. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Black. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Black. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Black. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Black. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Black. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Black. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Black. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Black. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Black. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Black. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Black. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Black. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Black. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Black. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Black. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Black. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Black. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Black. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-BlackIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLight. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-ExtraLightIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Light. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Light. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Light. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Light. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Light. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Light. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Light. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Light. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Light. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Light. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Light. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Light. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Light. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Light. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Light. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Light. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Light. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Light. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Light. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Light. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Light. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Light. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Light. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Light. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Light. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Light. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Light. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Light. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Light. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Light. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Light. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Light. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Light. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Light. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Light. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Light. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Light. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Light. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Light. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Light. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Light. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Light. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Light. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Light. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Light. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Light. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Light. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Light. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Light. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Light. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Light. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Light. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Light. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Light. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Light. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-LightIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Medium. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Medium. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Medium. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Medium. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Medium. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Medium. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Medium. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Medium. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Medium. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Medium. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Medium. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Medium. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Medium. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Medium. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Medium. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Medium. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Medium. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Medium. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Medium. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Medium. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Medium. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Medium. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Medium. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Medium. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-MediumIt. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph igrave.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iacute.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph icircumflex.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph itilde.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph idieresis.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph imacron.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iogonek.a: 600 differs from that of the base glyph i.a: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Iotadieresis: 600 differs from that of the base glyph Iota: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Upsilondieresis: 600 differs from that of the base glyph Upsilon: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iotadieresis: 600 differs from that of the base glyph iota: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph upsilondieresis: 600 differs from that of the base glyph upsilon: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph iotadieresistonos: 600 differs from that of the base glyph iotatonos: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph upsilondieresistonos: 600 differs from that of the base glyph upsilontonos: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph dieresistonos: 600 differs from that of the base glyph tonos: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-Semibold. - Warning: Width of glyph Agrave: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Acircumflex: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Atilde: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Adieresis: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Amacron: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Abreve: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aring: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aringacute: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Aogonek: 600 differs from that of the base glyph A: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph AEacute: 600 differs from that of the base glyph AE: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ccedilla: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Cacute: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ccircumflex: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ccaron: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Cdotaccent: 600 differs from that of the base glyph C: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Dcaron: 600 differs from that of the base glyph D: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Dcroat: 600 differs from that of the base glyph D: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Egrave: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Eacute: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ecircumflex: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ecaron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Edieresis: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Emacron: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ebreve: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Edotaccent: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Eogonek: 600 differs from that of the base glyph E: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gcircumflex: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gbreve: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gdotaccent: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Gcaron: 600 differs from that of the base glyph G: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Hcircumflex: 600 differs from that of the base glyph H: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Hbar: 600 differs from that of the base glyph H: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Igrave: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Iacute: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Icircumflex: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Itilde: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Idieresis: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Imacron: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Idotaccent: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Iogonek: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ibreve: 600 differs from that of the base glyph I: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Jcircumflex: 600 differs from that of the base glyph J: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Lacute: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Lcaron: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Lslash: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ldot: 600 differs from that of the base glyph L: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Nacute: 600 differs from that of the base glyph N: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ncaron: 600 differs from that of the base glyph N: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ntilde: 600 differs from that of the base glyph N: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ograve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Oacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ocircumflex: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Otilde: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Odieresis: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Omacron: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ohungarumlaut: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Obreve: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Oslash: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Oslashacute: 600 differs from that of the base glyph O: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Racute: 600 differs from that of the base glyph R: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Rcaron: 600 differs from that of the base glyph R: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Sacute: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Scircumflex: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Scaron: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Scarondot: 600 differs from that of the base glyph S: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Tcaron: 600 differs from that of the base glyph T: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Tbar: 600 differs from that of the base glyph T: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ugrave: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uacute: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ucircumflex: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Utilde: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Udieresis: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Umacron: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ubreve: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uring: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uhungarumlaut: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Uogonek: 600 differs from that of the base glyph U: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wgrave: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wacute: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wcircumflex: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Wdieresis: 600 differs from that of the base glyph W: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ygrave: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Yacute: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ycircumflex: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Ydieresis: 600 differs from that of the base glyph Y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Zacute: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Zcaron: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph Zdotaccent: 600 differs from that of the base glyph Z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph agrave: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph acircumflex: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph atilde: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph adieresis: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph amacron: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph abreve: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aring: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aringacute: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aogonek: 600 differs from that of the base glyph a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aeacute: 600 differs from that of the base glyph ae: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ccedilla: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph cacute: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ccircumflex: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ccaron: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph cdotaccent: 600 differs from that of the base glyph c: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph dcaron: 600 differs from that of the base glyph d: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph dcroat: 600 differs from that of the base glyph d: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph egrave: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eacute: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ecircumflex: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ecaron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph edieresis: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph emacron: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ebreve: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eogonek: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph edotaccent: 600 differs from that of the base glyph e: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcircumflex: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gbreve: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gdotaccent: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcaron: 600 differs from that of the base glyph g: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph hcircumflex: 600 differs from that of the base glyph h: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph hbar: 600 differs from that of the base glyph h: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph igrave: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph iacute: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph icircumflex: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph itilde: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph idieresis: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph imacron: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph iogonek: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ibreve: 600 differs from that of the base glyph i: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph jcircumflex: 600 differs from that of the base glyph j: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph lacute: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph lcaron: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph lslash: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ldot: 600 differs from that of the base glyph l: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph nacute: 600 differs from that of the base glyph n: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ncaron: 600 differs from that of the base glyph n: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ntilde: 600 differs from that of the base glyph n: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ograve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph oacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ocircumflex: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph otilde: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph odieresis: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph omacron: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ohungarumlaut: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph obreve: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph oslash: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph oslashacute: 600 differs from that of the base glyph o: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph racute: 600 differs from that of the base glyph r: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph rcaron: 600 differs from that of the base glyph r: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph sacute: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph scircumflex: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph scaron: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph scarondot: 600 differs from that of the base glyph s: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph tcaron: 600 differs from that of the base glyph t: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph tbar: 600 differs from that of the base glyph t: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ugrave: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uacute: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ucircumflex: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph utilde: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph udieresis: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph umacron: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ubreve: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uring: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uhungarumlaut: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph uogonek: 600 differs from that of the base glyph u: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wgrave: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wacute: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wcircumflex: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph wdieresis: 600 differs from that of the base glyph w: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ygrave: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph yacute: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ycircumflex: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph ydieresis: 600 differs from that of the base glyph y: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph zacute: 600 differs from that of the base glyph z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph zcaron: 600 differs from that of the base glyph z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph zdotaccent: 600 differs from that of the base glyph z: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph agrave.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph acircumflex.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph atilde.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph adieresis.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph amacron.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph abreve.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aring.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aringacute.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph aogonek.a: 600 differs from that of the base glyph a.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcircumflex.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gbreve.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gdotaccent.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph gcaron.a: 600 differs from that of the base glyph g.a: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph egrave.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eacute.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-SemiboldIt. - Warning: Width of glyph eogonek.sups: 600 differs from that of the base glyph e.sups: 600 for font SourceCodePro-SemiboldIt. Single Face Test 24: Warn if font has 'size' feature, and design size is not in specified range. @@ -3151,7 +281,51 @@ Family Test 12: Check that GSUB/GPOS script and language feature lists are the s Error: In GPOS/GUSB tables, the sets of lookups used by features in the script-language systems differ between fonts. This may be intended if the faces have different charsets. -Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCodePro-Black SourceCodePro-ExtraLight SourceCodePro-Light SourceCodePro-Medium SourceCodePro-Semibold +Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCodePro-Black SourceCodePro-ExtraLight SourceCodePro-Light SourceCodePro-Medium SourceCodePro-Semibold + + GPOS Table - script:tag list. + DFLT: dflt + cyrl: SRB dflt + grek: dflt + latn: NSM SKS dflt + + lookup group ID to lookup index list: + ID 1: maps to lookups [29]. + ID 2: maps to lookups [15, 16, 17, 18, 19]. + ID 3: maps to lookups [0]. + ID 4: maps to lookups [1]. + ID 5: maps to lookups [2]. + ID 6: maps to lookups [3]. + ID 7: maps to lookups [4]. + ID 8: maps to lookups [5]. + ID 9: maps to lookups [6]. + ID 10: maps to lookups [8]. + ID 11: maps to lookups [7]. + ID 12: maps to lookups [9]. + ID 13: maps to lookups [10]. + ID 14: maps to lookups [11]. + ID 15: maps to lookups [12]. + ID 16: maps to lookups [21]. + ID 17: maps to lookups [20, 22, 23]. + ID 18: maps to lookups [20]. + ID 19: maps to lookups [28]. + ID 20: maps to lookups [24]. + ID 21: maps to lookups [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12]. + ID 22: maps to lookups [27]. + ID 23: maps to lookups [10, 11]. + ID 24: maps to lookups [0, 4]. + ID 25: maps to lookups [1, 5, 8]. + ID 26: maps to lookups [3, 6]. + ID 27: maps to lookups [24, 25, 26]. + ID 28: maps to lookups [7, 8]. + ID 29: maps to lookups [13]. + + GPOS Table - feature lookup groups by script:tag column headers. + (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + mark + mkmk + size GSUB Table - script:tag list. DFLT: dflt @@ -3192,7 +366,7 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode GSUB Table - feature lookup groups by script:tag column headers. (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt case ccmp cv01 @@ -3226,6 +400,8 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode sups zero +Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro-BlackIt SourceCodePro-ExtraLightIt SourceCodePro-LightIt SourceCodePro-MediumIt SourceCodePro-SemiboldIt + GPOS Table - script:tag list. DFLT: dflt cyrl: SRB dflt @@ -3233,8 +409,8 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode latn: NSM SKS dflt lookup group ID to lookup index list: - ID 1: maps to lookups [29]. - ID 2: maps to lookups [15, 16, 17, 18, 19]. + ID 1: maps to lookups [23]. + ID 2: maps to lookups [9, 10, 11, 12, 13]. ID 3: maps to lookups [0]. ID 4: maps to lookups [1]. ID 5: maps to lookups [2]. @@ -3242,36 +418,24 @@ Lang/Sys Table for font(s): SourceCodePro-Regular SourceCodePro-Bold SourceCode ID 7: maps to lookups [4]. ID 8: maps to lookups [5]. ID 9: maps to lookups [6]. - ID 10: maps to lookups [8]. - ID 11: maps to lookups [7]. - ID 12: maps to lookups [9]. - ID 13: maps to lookups [10]. - ID 14: maps to lookups [11]. - ID 15: maps to lookups [12]. - ID 16: maps to lookups [21]. - ID 17: maps to lookups [20, 22, 23]. - ID 18: maps to lookups [20]. - ID 19: maps to lookups [28]. - ID 20: maps to lookups [24]. - ID 21: maps to lookups [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12]. - ID 22: maps to lookups [27]. - ID 23: maps to lookups [10, 11]. - ID 24: maps to lookups [0, 4]. - ID 25: maps to lookups [1, 5, 8]. - ID 26: maps to lookups [3, 6]. - ID 27: maps to lookups [24, 25, 26]. - ID 28: maps to lookups [7, 8]. - ID 29: maps to lookups [13]. + ID 10: maps to lookups [7]. + ID 11: maps to lookups [15]. + ID 12: maps to lookups [14, 16, 17]. + ID 13: maps to lookups [14]. + ID 14: maps to lookups [22]. + ID 15: maps to lookups [18]. + ID 16: maps to lookups [0, 1, 2, 4, 5, 6, 7]. + ID 17: maps to lookups [21]. + ID 18: maps to lookups [5, 6]. + ID 19: maps to lookups [18, 19, 20]. GPOS Table - feature lookup groups by script:tag column headers. (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt mark mkmk size -Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro-BlackIt SourceCodePro-ExtraLightIt SourceCodePro-LightIt SourceCodePro-MediumIt SourceCodePro-SemiboldIt - GSUB Table - script:tag list. DFLT: dflt cyrl: SRB dflt @@ -3301,7 +465,7 @@ Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro GSUB Table - feature lookup groups by script:tag column headers. (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt + DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt case ccmp cv01 @@ -3329,40 +493,6 @@ Lang/Sys Table for font(s): SourceCodePro-It SourceCodePro-BoldIt SourceCodePro sups zero - GPOS Table - script:tag list. - DFLT: dflt - cyrl: SRB dflt - grek: dflt - latn: NSM SKS dflt - - lookup group ID to lookup index list: - ID 1: maps to lookups [23]. - ID 2: maps to lookups [9, 10, 11, 12, 13]. - ID 3: maps to lookups [0]. - ID 4: maps to lookups [1]. - ID 5: maps to lookups [2]. - ID 6: maps to lookups [3]. - ID 7: maps to lookups [4]. - ID 8: maps to lookups [5]. - ID 9: maps to lookups [6]. - ID 10: maps to lookups [7]. - ID 11: maps to lookups [15]. - ID 12: maps to lookups [14, 16, 17]. - ID 13: maps to lookups [14]. - ID 14: maps to lookups [22]. - ID 15: maps to lookups [18]. - ID 16: maps to lookups [0, 1, 2, 4, 5, 6, 7]. - ID 17: maps to lookups [21]. - ID 18: maps to lookups [5, 6]. - ID 19: maps to lookups [18, 19, 20]. - - GPOS Table - feature lookup groups by script:tag column headers. - (The lookup group ID assigned to each set of lookups is an arbitrary - see list above for map to actual lookup indices.) - DFLT: dflt cyrl: SRB dflt grek: dflt latn: NSM SKS dflt - mark - mkmk - size - Family Test 13: Check that no two faces in a preferred group have the same weight/width/Italic-style values when the OS/2 table fsSelection bit 8 (WEIGHT_WIDTH_SLOPE_ONLY) is set. Family Test 14: Check that all faces in a preferred group have the same fsType embedding values. @@ -3397,20 +527,20 @@ Family Test 17: Check that fonts have OS/2 table version 4. Menu Name Report: Preferred Menu Mac Compatible Menu Windows Compatible Menu -Source Code Pro/Regular Source Code Pro Source Code Pro/Regular -Source Code Pro/Italic Source Code Pro Italic Source Code Pro/Italic -Source Code Pro/Bold Source Code Pro Bold Source Code Pro/Bold -Source Code Pro/Bold Italic Source Code Pro Bold Italic Source Code Pro/Bold Italic -Source Code Pro/Black Source Code Pro Black Source Code Pro Black/Regular -Source Code Pro/Black Italic Source Code Pro Black Italic Source Code Pro Black/Italic +Source Code Pro/Regular Source Code Pro Source Code Pro/Regular +Source Code Pro/Italic Source Code Pro Italic Source Code Pro/Italic +Source Code Pro/Bold Source Code Pro Bold Source Code Pro/Bold +Source Code Pro/Bold Italic Source Code Pro Bold Italic Source Code Pro/Bold Italic +Source Code Pro/Black Source Code Pro Black Source Code Pro Black/Regular +Source Code Pro/Black Italic Source Code Pro Black Italic Source Code Pro Black/Italic Source Code Pro/ExtraLight Source Code Pro ExtraLight Source Code Pro ExtraLight/Regular -Source Code Pro/ExtraLight Italic Source Code Pro ExtraLight Italic Source Code Pro ExtraLight/Italic -Source Code Pro/Light Source Code Pro Light Source Code Pro Light/Regular -Source Code Pro/Light Italic Source Code Pro Light Italic Source Code Pro Light/Italic -Source Code Pro/Medium Source Code Pro Medium Source Code Pro Medium/Regular -Source Code Pro/Medium Italic Source Code Pro Medium Italic Source Code Pro Medium/Italic -Source Code Pro/Semibold Source Code Pro Semibold Source Code Pro Semibold/Regular -Source Code Pro/Semibold Italic Source Code Pro Semibold Italic Source Code Pro Semibold/Italic +Source Code Pro/ExtraLight Italic Source Code Pro ExtraLight Italic Source Code Pro ExtraLight/Italic +Source Code Pro/Light Source Code Pro Light Source Code Pro Light/Regular +Source Code Pro/Light Italic Source Code Pro Light Italic Source Code Pro Light/Italic +Source Code Pro/Medium Source Code Pro Medium Source Code Pro Medium/Regular +Source Code Pro/Medium Italic Source Code Pro Medium Italic Source Code Pro Medium/Italic +Source Code Pro/Semibold Source Code Pro Semibold Source Code Pro Semibold/Regular +Source Code Pro/Semibold Italic Source Code Pro Semibold Italic Source Code Pro Semibold/Italic FONT METRICS REPORT Report 1: @@ -3559,7 +689,7 @@ Report 3:Copyright and Trademark strings for the first face in the group Preferred Family: Source Code Pro First Face: SourceCodePro-Regular -Copyright: Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ÔSourceÕ. +Copyright: Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. Trademark: Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. Panose Report: diff --git a/tests/comparefamily_test.py b/tests/comparefamily_test.py index 5cd87aa43..8eac4e681 100755 --- a/tests/comparefamily_test.py +++ b/tests/comparefamily_test.py @@ -22,7 +22,9 @@ def _get_input_path(file_name): def _get_temp_file_path(): - return tempfile.mkstemp()[1] + file_descriptor, path = tempfile.mkstemp() + os.close(file_descriptor) + return path # ----- @@ -34,8 +36,8 @@ def _get_temp_file_path(): def test_report(font_family, font_format): input_dir = os.path.join(_get_input_path(font_family), font_format) log_path = _get_temp_file_path() - runner(CMD + ['-n', '-o', 'd', '_{}'.format(input_dir), 'tolerance', '3', + runner(CMD + ['-n', '-o', 'd', '_{}'.format(input_dir), 'tolerance', '_3', 'rm', 'rn', 'rp', 'l', '_{}'.format(log_path)]) expected_path = _get_expected_path('{}_{}.txt'.format( font_family, font_format)) - assert differ([expected_path, log_path, '-e', 'macroman', '-l', '1']) + assert differ([expected_path, log_path, '-l', '1']) diff --git a/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/A_.glif index d1008f998..0b7079261 100644 --- a/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/a.glif index cd5a88005..45f8005ba 100644 --- a/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/black.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/A_.glif index 5a668dd00..01537362e 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/a.glif index d6e9db41d..a8565191c 100644 --- a/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/bold.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/A_.glif index feef9b275..06e1fc8cc 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/a.glif index 5b195f4ca..f96c21e47 100644 --- a/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/extralight.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/A_.glif index 8c68d3245..6f21bdfd6 100644 --- a/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/a.glif index 07504203d..79e2b65a8 100644 --- a/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/light.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/A_.glif index 913aa2ca5..3de4b9b6d 100644 --- a/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/a.glif index 4d899278b..1ced0255e 100644 --- a/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/regular.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/A_.glif index 1f9963fd1..11b082ab4 100644 --- a/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/a.glif index a05cb0ee8..f762b3395 100644 --- a/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/regular1.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/A_.glif b/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/A_.glif index 657efd4e9..b6f604081 100644 --- a/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/A_.glif +++ b/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/A_.glif @@ -39,10 +39,10 @@ - + - + diff --git a/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/a.glif b/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/a.glif index a80eac10a..57e8d5a75 100644 --- a/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/a.glif +++ b/tests/makeinstancesufo_data/expected_output/semibold.ufo/glyphs/a.glif @@ -74,10 +74,10 @@ - + - + diff --git a/tests/makeotf_test.py b/tests/makeotf_test.py index 00f896fe7..5d2c36fd2 100755 --- a/tests/makeotf_test.py +++ b/tests/makeotf_test.py @@ -7,6 +7,7 @@ import pytest from shutil import copy2, copytree, rmtree import subprocess32 as subprocess +import sys import tempfile from fontTools.ttLib import TTFont @@ -33,6 +34,11 @@ temp_dir_path = os.path.join(data_dir_path, 'temp_output') +xfail_py36_win = pytest.mark.xfail( + sys.version_info >= (3, 0) and sys.platform == 'win32', + reason="Console's encoding is not UTF-8 ?") + + def setup_module(): """ Create the temporary output directory @@ -126,6 +132,7 @@ def test_getSourceGOADBData(): ['g2', 'g2', '']] +@xfail_py36_win @pytest.mark.parametrize('input_filename', [ T1PFA_NAME, UFO2_NAME, UFO3_NAME, CID_NAME]) def test_path_with_non_ascii_chars_bug222(input_filename): diff --git a/tests/proofpdf_data/expected_output/waterfallplot_ttf_glyphs_2-7.pdf b/tests/proofpdf_data/expected_output/waterfallplot_ttf_glyphs_2-7.pdf index 3419ac351..20c781615 100644 Binary files a/tests/proofpdf_data/expected_output/waterfallplot_ttf_glyphs_2-7.pdf and b/tests/proofpdf_data/expected_output/waterfallplot_ttf_glyphs_2-7.pdf differ diff --git a/tests/proofpdf_test.py b/tests/proofpdf_test.py index fd28dbb61..1170e3496 100755 --- a/tests/proofpdf_test.py +++ b/tests/proofpdf_test.py @@ -20,6 +20,12 @@ def _get_input_path(file_name): return os.path.join(data_dir_path, 'input', file_name) +def _get_temp_file_path(): + file_descriptor, path = tempfile.mkstemp() + os.close(file_descriptor) + return path + + def _get_filename_label(file_name): sep_index = file_name.find('_') if sep_index == -1: @@ -53,7 +59,7 @@ def test_glyphs_2_7(tool_name, font_filename): font_format = 'otf' pdf_filename = '{}_{}_glyphs_2-7.pdf'.format(tool_name, font_format) font_path = _get_input_path(font_filename) - save_path = tempfile.mkstemp()[1] + save_path = _get_temp_file_path() runner(['-t', tool_name, '-o', 'o', '_{}'.format(save_path), 'g', '_2-7', 'dno', '=pageIncludeTitle', '_0', '-f', font_path, '-n', '-a']) expected_path = _get_expected_path(pdf_filename) @@ -83,7 +89,7 @@ def test_hinting_data(tool_name, font_filename): font_format = 'otf' pdf_filename = '{}_{}{}.pdf'.format(tool_name, font_format, label) font_path = _get_input_path(font_filename) - save_path = tempfile.mkstemp()[1] + save_path = _get_temp_file_path() runner(['-t', tool_name, '-o', 'o', '_{}'.format(save_path), 'g', '_2-7', 'dno', '=pageIncludeTitle', '_0', '-f', font_path, '-n', '-a']) expected_path = _get_expected_path(pdf_filename) @@ -104,7 +110,7 @@ def test_fontplot2_lf_option(font_filename, glyphs): layout_path = _get_input_path('CID_layout') font_path = _get_input_path(font_filename) pdf_filename = '{}_{}_lf_option.pdf'.format(tool_name, font_format) - save_path = tempfile.mkstemp()[1] + save_path = _get_temp_file_path() runner(['-t', tool_name, '-o', 'o', '_{}'.format(save_path), 'dno', 'g', glyphs, 'lf', '_{}'.format(layout_path), '=pageIncludeTitle', '_0', '-f', font_path, '-n', '-a'])