def build_glyphs(bitbucket, f): db = font_db.db_create(f) db['spacing_anchor_heights'] = { 'hi' : 1350, 'x' : 852, 'o' : 453, 'bl' : 40, 'lo' : -420 } propagate_hyphens(f) make_glyph_reference("quotesingle", f["quoteright"]) make_glyph_reference("quotedbl", f["quotedblright"]) f.selection.all() spacing_by_anchors.space_selected_by_anchors(f) f.selection.none() generate_kerning_and_read_features(None, f) #-------------------------------------------------------------------------- font_db.db_close(f)
def build_glyphs(bitbucket, f): import cap_spacing figures = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] caps = [ 'A', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'Amacron', 'Abreve', 'Aogonek', 'B', 'C', 'Ccedilla', 'Cacute', 'Ccircumflex', 'Cdotaccent', 'Ccaron', 'D', 'Dcaron', 'Dcroat', 'E', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Emacron', 'Ebreve', 'Edotaccent', 'Eogonek', 'Ecaron', 'F', 'G', 'Gcircumflex', 'Gbreve', 'Gdotaccent', 'Gcommaaccent', 'H', 'Hcircumflex', 'Hbar', 'I', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Itilde', 'Imacron', 'Ibreve', 'Iogonek', 'J', 'Jcircumflex', 'K', 'Kcommaaccent', 'L', 'Lacute', 'Lcommaaccent', 'Lcaron', 'Ldot', 'Lslash', 'M', 'N', 'Ntilde', 'Nacute', 'Ncommaaccent', 'Ncaron', 'O', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'Oslash', 'Omacron', 'Obreve', 'Ohungarumlaut', 'P', 'Q', 'R', 'Racute', 'Rcommaaccent', 'Rcaron', 'S', 'Sacute', 'Scircumflex', 'Scedilla', 'uni0218', 'Scaron', 'T', 'uni0162', 'uni021A', 'Tcaron', 'Tbar', 'U', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Utilde', 'Umacron', 'Ubreve', 'Uring', 'Uhungarumlaut', 'Uogonek', 'V', 'W', 'Wcircumflex', 'X', 'Y', 'Yacute', 'Ydieresis', 'Ycircumflex', 'Z', 'Zacute', 'Zdotaccent', 'Zcaron', 'IJ', 'AE', 'OE', 'Eth', 'Thorn', 'question', 'questiondown', 'exclam', 'exclamdown', 'ampersand' ] def base(letter): if letter == 'i': base = 'dotlessi' elif letter == 'j': base = 'uni0237' else: base = letter return base db = font_db.db_create(f) db['spacing_anchor_heights'] = { 'hi' : 684, # caps and ascenders # 't' : ???, # top diacritics 'x' : 376, # ex-height 'o' : 195, # like the letter o 'bl' : 15, # baseline 'lo' : -244 } # descenders build_several_space_glyphs(f, emsize = 1000, spacesize = 185, thinspacesize = 1000 / 6, hairspacesize = 1000 / 10, tabwidth = f['zero.lining'].width) propagate_hyphens(f) # propagate_hyphens(f, '.uppercase') build_spacing_marks(f, width = 2 * 195) make_glyph_reference('quotesingle', f['minute']) make_glyph_reference('quotedbl', f['second']) make_glyph_reference('asciitilde', f['uni2053']) # Swung dash. make_glyph_reference('i.TRK', f['i']) make_glyph_reference('Dcroat', f['Eth']) make_glyph_reference('Dcroat.001', f['Eth.001']) build_multigraph('ellipsis', [f['period'], f['period'], f['period']]) for fig in figures + ['dollar']: make_glyph_reference(fig, f[fig + '.hanging']) make_glyph_reference('uni00B9', f['one.sup']) make_glyph_reference('uni00B2', f['two.sup']) make_glyph_reference('uni00B3', f['three.sup']) for extension in [('.numer', 244), ('.sub', -98), ('.sup', 293)]: for fig in figures: make_glyph_reference(fig + extension[0], f[fig + '.denom'], transformation = (1, 0, 0, 1, 0, extension[1]), copy_spacing_anchors = False) build_multigraph('onequarter', [f['one.numer'], f['fraction'], f['four.denom']]) build_multigraph('onehalf', [f['one.numer'], f['fraction'], f['two.denom']]) build_multigraph('threequarters', [f['three.numer'], f['fraction'], f['four.denom']]) #-------------------------------------------------------------------------- for letter in 'GKkLlNnRr': build_accented_glyph(letter + 'commaaccent', f[base(letter)], f['uni0326']) for letter in 'k': build_accented_glyph(letter + 'commaaccent.001', f[base(letter) + '.001'], f['uni0326']) for letter in 'GNR': build_accented_glyph(letter + 'commaaccent.001', f[base(letter) + '.001'], f['uni0326']) build_accented_glyph('uni0218', f['S'], f['uni0326']) build_accented_glyph('uni0219', f['s'], f['uni0326']) build_accented_glyph('uni021A', f['T'], f['uni0326']) build_accented_glyph('uni021A.001', f['T.001'], f['uni0326']) build_accented_glyph('uni021A.002', f['T.002'], f['uni0326']) build_accented_glyph('uni021B', f['t'], f['uni0326']) build_accented_glyph('gcommaaccent', f['g'], f['uni0312']) build_accented_glyph('gcommaaccent.001', f['g.001'], f['uni0312']) #-------------------------------------------------------------------------- for letter in 'CcSs': build_accented_glyph(letter + 'cedilla', f[base(letter)], f['uni0327']) build_accented_glyph('uni0162', f['T'], f['uni0327']) build_accented_glyph('uni0162.001', f['T.001'], f['uni0327']) build_accented_glyph('uni0162.002', f['T.002'], f['uni0327']) build_accented_glyph('uni0163', f['t'], f['uni0327']) #-------------------------------------------------------------------------- for letter in 'aeiou': build_accented_glyph(letter + 'grave', f[base(letter)], f['gravecomb']) for letter in 'AEIOU': build_accented_glyph(letter + 'grave', f[base(letter)], f['gravecomb.cap']) for letter in 'AE': build_accented_glyph(letter + 'grave.001', f[base(letter) + '.001'], f['gravecomb.cap']) #-------------------------------------------------------------------------- for letter in 'aceinorsuyz': build_accented_glyph(letter + 'acute', f[base(letter)], f['acutecomb']) for letter in 'z': build_accented_glyph(letter + 'acute.001', f[base(letter) + '.001'], f['acutecomb']) for letter in 'ACEILNORSUYZ': build_accented_glyph(letter + 'acute', f[base(letter)], f['acutecomb.cap']) for letter in 'ACENR': build_accented_glyph(letter + 'acute.001', f[base(letter) + '.001'], f['acutecomb.cap']) # build_accented_glyph('lacute', f['l'], f['acutecomb.cap']) <-- We are making this one by hand. #-------------------------------------------------------------------------- for letter in 'ainou': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb']) for letter in 'AINOU': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb.cap']) for letter in 'AN': build_accented_glyph(letter + 'tilde.001', f[base(letter) + '.001'], f['tildecomb.cap']) #-------------------------------------------------------------------------- for letter in 'aeouy': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308']) for letter in 'AEIOUY': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308.cap']) for letter in 'AE': build_accented_glyph(letter + 'dieresis.001', f[base(letter) + '.001'], f['uni0308.cap']) for letter in 'i': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308']) #-------------------------------------------------------------------------- for letter in 'au': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A']) for letter in 'AU': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A.cap']) for letter in 'A': build_accented_glyph(letter + 'ring.001', f[base(letter) + '.001'], f['uni030A.cap']) #-------------------------------------------------------------------------- for letter in 'acegijosuwy': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302']) for letter in 'g': build_accented_glyph(letter + 'circumflex.001', f[base(letter) + '.001'], f['uni0302']) for letter in 'hACEGHIJOSUWY': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.cap']) for letter in 'ACEG': build_accented_glyph(letter + 'circumflex.001', f[base(letter) + '.001'], f['uni0302.cap']) for letter in ['f_h', 'f_f_h']: build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.cap']) #-------------------------------------------------------------------------- for letter in 'aegiou': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306']) for letter in 'g': build_accented_glyph(letter + 'breve.001', f[base(letter) + '.001'], f['uni0306']) for letter in 'AEGIOU': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306.cap']) for letter in 'AEG': build_accented_glyph(letter + 'breve.001', f[base(letter) + '.001'], f['uni0306.cap']) #-------------------------------------------------------------------------- for letter in 'cegz': build_accented_glyph(letter + 'dotaccent', f[base(letter)], f['uni0307']) for letter in 'gz': build_accented_glyph(letter + 'dotaccent.001', f[base(letter) + '.001'], f['uni0307']) for letter in 'CEGIZ': build_accented_glyph(letter + 'dotaccent', f[base(letter)], f['uni0307.cap']) for letter in 'CEG': build_accented_glyph(letter + 'dotaccent.001', f[base(letter) + '.001'], f['uni0307.cap']) build_accented_glyph('i', f['dotlessi'], f['uni0307']) build_accented_glyph('iogonek', f['iogonek.dotless'], f['uni0307']) build_accented_glyph('j', f['uni0237'], f['uni0307']) #-------------------------------------------------------------------------- for letter in 'cenrsz': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C']) for letter in 'z': build_accented_glyph(letter + 'caron.001', f[base(letter) + '.001'], f['uni030C']) for letter in 'CDENRTSZ': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C.cap']) for letter in 'CDENRT': build_accented_glyph(letter + 'caron.001', f[base(letter) + '.001'], f['uni030C.cap']) for letter in 'T': build_accented_glyph(letter + 'caron.002', f[base(letter) + '.002'], f['uni030C.cap']) for letter in 'dLlt': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni0315']) #-------------------------------------------------------------------------- for letter in 'aeiou': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304']) for letter in 'AEIOU': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304.cap']) for letter in 'AE': build_accented_glyph(letter + 'macron.001', f[base(letter) + '.001'], f['uni0304.cap']) #-------------------------------------------------------------------------- for letter in 'ou': build_accented_glyph(letter + 'hungarumlaut', f[base(letter)], f['uni030B']) for letter in 'OU': build_accented_glyph(letter + 'hungarumlaut', f[base(letter)], f['uni030B.cap']) #-------------------------------------------------------------------------- # build_multigraph('quotedblleft', [f['quoteleft'], f['quoteleft']]) # build_multigraph('quotedblright', [f['quoteright'], f['quoteright']]) # build_multigraph('quotedblbase', [f['quotesinglbase'], f['quotesinglbase']]) # build_multigraph('uni201F', [f['quotereversed'], f['quotereversed']]) # build_multigraph('guillemotleft', [f['guilsinglleft'], f['guilsinglleft']]) # build_multigraph('guillemotright', [f['guilsinglright'], f['guilsinglright']]) build_multigraph('napostrophe', [f['quoteright'], f['n']]) build_multigraph('IJ', [f['I'], f['J']]) build_multigraph('ij', [f['i'], f['j']]) build_multigraph('Ldot', [f['L'], f['periodcentered']]) build_multigraph('ldot', [f['l'], f['periodcentered']]) #-------------------------------------------------------------------------- f.selection.all() spacing_by_anchors.space_selected_by_anchors(f) f.selection.none() rules = cap_spacing.cap_spacing(f, caps, 0.015) cpsp = open('LindenHill-Italic_cpsp.fea', 'w') print >> cpsp, 'feature cpsp {' print >> cpsp, rules, print >> cpsp, '} cpsp;' cpsp.close() generate_kerning_and_read_features(None, f) #-------------------------------------------------------------------------- font_db.db_close(f)
def build_glyphs(bitbucket, f): import cap_spacing figures = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] def base(letter): if letter == 'i': base = 'dotlessi' elif letter == 'j': base = 'uni0237' else: base = letter return base db = font_db.db_create(f) db['spacing_anchor_heights'] = { 'hi2' : 670, # caps and ascenders, 'hi' : 610, # caps and ascenders, 'x' : 385, # ex-height 'o' : 200, # like the letter o 'bl' : 10, # baseline 'lo' : -200, # descenders } # all_glyphs = set(f) - set(['.notdef']) # (smallcaps, capssmall, uppercase, lowercase, fraction_bar, numerators, denominators, remaining) = \ # tuple(separate_strings(all_glyphs, [ # (lambda s: s[-3:] == '.sc'), # (lambda s: s[-3:] == '.c2'), # (lambda s: is_uppercase(s, last_name)), # (lambda s: is_lowercase(s, last_name)), # (lambda s: s == 'fraction'), # (lambda s: s[-6:] == '.numer'), # (lambda s: s[-6:] == '.denom'), # ])) # db["kerning_sets"] = [ # (remaining, uppercase | lowercase | smallcaps | capssmall | remaining), # (uppercase, uppercase | lowercase | smallcaps | remaining), # (smallcaps, uppercase | smallcaps | capssmall | remaining), # (lowercase, uppercase | lowercase | remaining), # (numerators, fraction_bar), # (fraction_bar, denominators), # ] # db['kerning_rounding'] = '(lambda x: int(round(x/5.0)) * 5)' ## db['kerning_rounding'] = '(lambda x: x if abs(x) < 10 else int(round(x/5.0))*5)' build_several_space_glyphs(f, emsize = emsize, spacesize = spacesize, thinspacesize = emsize / 6, hairspacesize = emsize / 10, # tabwidth = f['zero.l'].width) tabwidth = 300) # <-- FIX: SET THIS CORRECTLY propagate_hyphens(f) # propagate_hyphens(f, '.uppercase') build_spacing_marks(f, width = 2 * 230) # for fig in figures: # make_glyph_reference(fig, f[fig + '.h']) make_glyph_reference('asciitilde', f['uni2053']) # Swung dash. make_glyph_reference('i.TRK', f['i']) make_glyph_reference('Dcroat', f['Eth']) # make_glyph_reference('dcroat.sc', f['eth.sc']) build_multigraph('ellipsis', [f['period'], f['period'], f['period']]) # for fig in figures + ['dollar']: # make_glyph_reference(fig, f[fig + '.hanging']) # # make_glyph_reference('uni00B9', f['one.sup']) # make_glyph_reference('uni00B2', f['two.sup']) # make_glyph_reference('uni00B3', f['three.sup']) ## for extension in [('.numer', 244), ('.sub', -98), ('.sup', 293)]: # for extension in [('.sub', -98), ('.sup', 293)]: # for fig in figures: # make_glyph_reference(fig + extension[0], # f[fig + '.denom'], # transformation = (1, 0, 0, 1, 0, extension[1]), # copy_spacing_anchors = False) # build_multigraph('onequarter', [f['one.numer'], f['fraction'], f['four.denom']]) # build_multigraph('onehalf', [f['one.numer'], f['fraction'], f['two.denom']]) # build_multigraph('threequarters', [f['three.numer'], f['fraction'], f['four.denom']]) # for g in f: # if g[-3:] == '.sc': # if g == 'periodcentered.sc': # make_glyph_reference(g[:-3] + '.c2', f[g]) # elif g == 'uni0163.sc': # make_glyph_reference('uni0162.c2', f[g]) # elif g == 'uni0219.sc': # make_glyph_reference('uni0218.c2', f[g]) # elif g == 'uni021B.sc': # make_glyph_reference('uni021A.c2', f[g]) # elif g in ('ae.sc', 'oe.sc'): # make_glyph_reference(g[:-3].upper() + '.c2', f[g]) # else: # make_glyph_reference(g[:-3].capitalize() + '.c2', f[g]) #-------------------------------------------------------------------------- for letter in 'GKkLlNnRr': build_accented_glyph(letter + 'commaaccent', f[base(letter)], f['uni0326']) build_accented_glyph('uni0218', f['S'], f['uni0326']) build_accented_glyph('uni0219', f['s'], f['uni0326']) build_accented_glyph('uni021A', f['T'], f['uni0326']) build_accented_glyph('uni021B', f['t'], f['uni0326']) build_accented_glyph('gcommaaccent', f['g'], f['uni0312']) build_accented_glyph('gcommaaccent.ld', f['g.ld'], f['uni0312']) # for letter in 'gklnr': # build_accented_glyph(letter + 'commaaccent.sc', f[letter + '.sc'], f['uni0326']) # build_accented_glyph('uni0219.sc', f['s.sc'], f['uni0326']) # build_accented_glyph('uni021B.sc', f['t.sc'], f['uni0326']) #-------------------------------------------------------------------------- for letter in 'CcSs': build_accented_glyph(letter + 'cedilla', f[base(letter)], f['uni0327']) build_accented_glyph('uni0162', f['T'], f['uni0327']) build_accented_glyph('uni0163', f['t'], f['uni0327']) # for letter in 'cs': # build_accented_glyph(letter + 'cedilla.sc', f[letter + '.sc'], f['uni0327']) # build_accented_glyph('uni0163.sc', f['t.sc'], f['uni0327']) #-------------------------------------------------------------------------- for letter in 'aeiou': build_accented_glyph(letter + 'grave', f[base(letter)], f['gravecomb']) for letter in 'AEIOU': build_accented_glyph(letter + 'grave', f[base(letter)], f['gravecomb.cap']) # for letter in 'aeiou': # build_accented_glyph(letter + 'grave.sc', f[letter + '.sc'], f['gravecomb']) # #-------------------------------------------------------------------------- for letter in 'aceinorsuyz': build_accented_glyph(letter + 'acute', f[base(letter)], f['acutecomb']) for letter in 'ACEILNORSUYZ': build_accented_glyph(letter + 'acute', f[base(letter)], f['acutecomb.cap']) build_accented_glyph('lacute', f['l'], f['acutecomb.cap']) for letter in 'y': build_accented_glyph(letter + 'acute.ld', f[base(letter) + '.ld'], f['acutecomb']) # for letter in 'aceilnorsuyz': # build_accented_glyph(letter + 'acute.sc', f[letter + '.sc'], f['acutecomb']) #-------------------------------------------------------------------------- for letter in 'ainou': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb']) for letter in 'AINOU': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb.cap']) # for letter in 'ainou': # build_accented_glyph(letter + 'tilde.sc', f[letter + '.sc'], f['tildecomb']) # # #-------------------------------------------------------------------------- # for letter in 'aeouy': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308']) for letter in 'AEIOUY': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308.cap']) for letter in 'i': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308.narrow']) for letter in 'y': build_accented_glyph(letter + 'dieresis.ld', f[base(letter) + '.ld'], f['uni0308']) # for letter in 'aeiouy': # build_accented_glyph(letter + 'dieresis.sc', f[letter + '.sc'], f['uni0308']) #-------------------------------------------------------------------------- for letter in 'au': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A']) for letter in 'AU': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A.cap']) # for letter in 'au': # build_accented_glyph(letter + 'ring.sc', f[letter + '.sc'], f['uni030A']) #-------------------------------------------------------------------------- for letter in 'acegijosuwy': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302']) for letter in 'ACEGHIJOSUWY': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.cap']) for letter in 'h': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.ascend']) for letter in 'gjy': build_accented_glyph(letter + 'circumflex.ld', f[base(letter) + '.ld'], f['uni0302']) # for letter in ['f_h', 'f_f_h']: # build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.cap']) # for letter in 'aceghijosuwy': # build_accented_glyph(letter + 'circumflex.sc', f[letter + '.sc'], f['uni0302']) #-------------------------------------------------------------------------- for letter in 'aegiou': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306']) for letter in 'AEGIOU': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306.cap']) # for letter in 'aegiou': # build_accented_glyph(letter + 'breve.sc', f[letter + '.sc'], f['uni0306']) #-------------------------------------------------------------------------- for letter in 'cegz': build_accented_glyph(letter + 'dotaccent', f[base(letter)], f['uni0307']) for letter in 'CEGIZ': build_accented_glyph(letter + 'dotaccent', f[base(letter)], f['uni0307.cap']) for letter in 'g': build_accented_glyph(letter + 'dotaccent.ld', f[base(letter) + '.ld'], f['uni0307']) # for letter in 'cegz': # build_accented_glyph(letter + 'dotaccent.sc', f[letter + '.sc'], f['uni0307']) # build_accented_glyph('i.TRK.sc', f['i.sc'], f['uni0307']) build_accented_glyph('i', f['dotlessi'], f['uni0307']) build_accented_glyph('iogonek', f['iogonek.dotless'], f['uni0307']) build_accented_glyph('j', f['uni0237'], f['uni0307']) build_accented_glyph('j.ld', f['uni0237.ld'], f['uni0307']) # Extra dot accents for Old Irish. build_accented_glyph('uni1E02', f['B'], f['uni0307.cap']) build_accented_glyph('uni1E03', f['b'], f['uni0307.cap']) build_accented_glyph('uni1E0A', f['D'], f['uni0307.cap']) build_accented_glyph('uni1E0B', f['d'], f['uni0307.cap']) build_accented_glyph('uni1E1E', f['F'], f['uni0307.cap']) build_accented_glyph('uni1E1F', f['f'], f['uni0307.cap']) build_accented_glyph('uni1E22', f['H'], f['uni0307.cap']) build_accented_glyph('uni1E23', f['h'], f['uni0307.cap']) build_accented_glyph('uni1E40', f['M'], f['uni0307.cap']) build_accented_glyph('uni1E41', f['m'], f['uni0307']) build_accented_glyph('uni1E56', f['P'], f['uni0307.cap']) build_accented_glyph('uni1E57', f['p'], f['uni0307']) build_accented_glyph('uni1E57.ld', f['p.ld'], f['uni0307']) build_accented_glyph('uni1E60', f['S'], f['uni0307.cap']) build_accented_glyph('uni1E61', f['s'], f['uni0307']) build_accented_glyph('uni1E6A', f['T'], f['uni0307.cap']) build_accented_glyph('uni1E6B', f['t'], f['uni0307']) #-------------------------------------------------------------------------- for letter in 'cenrsz': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C']) for letter in 'CDENRTSZ': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C.cap']) for letter in 'dLlt': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni0315']) # for letter in 'cdenrstz': # build_accented_glyph(letter + 'caron.sc', f[letter + '.sc'], f['uni030C']) # build_accented_glyph('lcaron.sc', f['l.sc'], f['uni0315']) #-------------------------------------------------------------------------- for letter in 'aeiou': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304']) for letter in 'AEIOU': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304.cap']) # for letter in 'aeiou': # build_accented_glyph(letter + 'macron.sc', f[letter + '.sc'], f['uni0304']) #-------------------------------------------------------------------------- for letter in 'ou': build_accented_glyph(letter + 'hungarumlaut', f[base(letter)], f['uni030B']) for letter in 'OU': build_accented_glyph(letter + 'hungarumlaut', f[base(letter)], f['uni030B.cap']) # for letter in 'ou': # build_accented_glyph(letter + 'hungarumlaut.sc', f[letter + '.sc'], f['uni030B']) #-------------------------------------------------------------------------- build_multigraph('napostrophe', [f['quoteright'], f['n']]) build_multigraph('IJ', [f['I'], f['J']]) build_multigraph('ij', [f['i'], f['j']]) ## build_multigraph('Ldot', [f['L'], f['periodcentered']]) # Done by hand. # build_multigraph('ldot', [f['l'], f['periodcentered']]) ## build_multigraph('ldot.sc', [f['l.sc'], f['periodcentered.sc']]) # Done by hand. #-------------------------------------------------------------------------- f.selection.all() space_selected_by_anchors(f) f.selection.none() generate_kerning_and_read_features(None, f) #-------------------------------------------------------------------------- font_db.db_close(f)
def build_glyphs(bitbucket, f): import cap_spacing emsize = 2156 spacesize = 448 figures = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] lining_figures = [s + ".lining" for s in figures] caps = [ "A", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "Amacron", "Abreve", "Aogonek", "B", "C", "Ccedilla", "Cacute", "Ccircumflex", "Cdotaccent", "Ccaron", "D", "Dcaron", "Dcroat", "E", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Emacron", "Ebreve", "Edotaccent", "Eogonek", "Ecaron", "F", "G", "Gcircumflex", "Gbreve", "Gdotaccent", "Gcommaaccent", "H", "Hcircumflex", "Hbar", "I", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Itilde", "Imacron", "Ibreve", "Iogonek", "J", "Jcircumflex", "K", "Kcommaaccent", "L", "Lacute", "Lcommaaccent", "Lcaron", "Ldot", "Lslash", "M", "N", "Ntilde", "Nacute", "Ncommaaccent", "Ncaron", "O", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "Oslash", "Omacron", "Obreve", "Ohungarumlaut", "P", "Q", "R", "Racute", "Rcommaaccent", "Rcaron", "S", "Sacute", "Scircumflex", "Scedilla", "uni0218", "Scaron", "T", "uni0162", "uni021A", "Tcaron", "Tbar", "U", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Utilde", "Umacron", "Ubreve", "Uring", "Uhungarumlaut", "Uogonek", "V", "W", "Wcircumflex", "X", "Y", "Yacute", "Ydieresis", "Ycircumflex", "Z", "Zacute", "Zdotaccent", "Zcaron", "IJ", "AE", "OE", "Eth", "Thorn", "question", "questiondown", "exclam", "exclamdown", "ampersand", ] def base(letter): if letter == "i": base = "dotlessi" elif letter == "j": base = "uni0237" else: base = letter return base db = font_db.db_create(f) db["spacing_anchor_heights"] = { "hi": 1400, # caps and ascenders # 't' : 1150, # top diacritics "x": 770, # ex-height "o": 400, # like the letter o "bl": 30, # baseline "lo": -500, } # descenders # build_several_space_glyphs(f, emsize = emsize, spacesize = spacesize, # thinspacesize = emsize / 6, # hairspacesize = emsize / 10, # tabwidth = f['zero.lining'].width) propagate_hyphens(f) # propagate_hyphens(f, '.uppercase') build_spacing_marks(f, width=1100) # make_glyph_reference('quotesingle', f['minute']) # make_glyph_reference('quotedbl', f['second']) # make_glyph_reference('asciitilde', f['uni2053']) # Swung dash. make_glyph_reference("i.TRK", f["i"]) # make_glyph_reference('Dcroat', f['Eth']) # make_glyph_reference('dcroat.sc', f['eth.sc']) build_multigraph("ellipsis", [f["period"], f["period"], f["period"]]) # make_glyph_reference('uni00B9', f['one.sup']) # make_glyph_reference('uni00B2', f['two.sup']) # make_glyph_reference('uni00B3', f['three.sup']) # build_multigraph('onequarter', [f['one.numer'], f['fraction'], f['four.denom']]) # build_multigraph('onehalf', [f['one.numer'], f['fraction'], f['two.denom']]) # build_multigraph('threequarters', [f['three.numer'], f['fraction'], f['four.denom']]) # -------------------------------------------------------------------------- """ for letter in 'GKkLlNnRr': build_accented_glyph(letter + 'commaaccent', f[base(letter)], f['uni0326']) build_accented_glyph('gcommaaccent', f['g'], f['uni0312']) build_accented_glyph('uni0218', f['S'], f['uni0326']) build_accented_glyph('uni0219', f['s'], f['uni0326']) build_accented_glyph('uni021A', f['T'], f['uni0326']) build_accented_glyph('uni021B', f['t'], f['uni0326']) for letter in 'gklnr': build_accented_glyph(letter + 'commaaccent.sc', f[letter + '.sc'], f['uni0326']) build_accented_glyph('uni0219.sc', f['s.sc'], f['uni0326']) build_accented_glyph('uni021B.sc', f['t.sc'], f['uni0326']) """ # -------------------------------------------------------------------------- """ for letter in 'CcSs': build_accented_glyph(letter + 'cedilla', f[base(letter)], f['uni0327']) build_accented_glyph('uni0162', f['T'], f['uni0327']) build_accented_glyph('uni0163', f['t'], f['uni0327']) for letter in 'cs': build_accented_glyph(letter + 'cedilla.sc', f[letter + '.sc'], f['uni0327']) build_accented_glyph('uni0163.sc', f['t.sc'], f['uni0327']) """ # -------------------------------------------------------------------------- for letter in "aeiou": build_accented_glyph(letter + "grave", f[base(letter)], f["gravecomb"]) for letter in "AEIOU": build_accented_glyph(letter + "grave", f[base(letter)], f["gravecomb"]) # for letter in 'aeiou': # build_accented_glyph(letter + 'grave.sc', f[letter + '.sc'], f['gravecomb']) # -------------------------------------------------------------------------- for letter in "aceinorsuyz": build_accented_glyph(letter + "acute", f[base(letter)], f["acutecomb"]) for letter in "ACEILNORSUYZ": build_accented_glyph(letter + "acute", f[base(letter)], f["acutecomb"]) build_accented_glyph("lacute", f["l"], f["acutecomb"]) # for letter in 'aceilnorsuyz': # build_accented_glyph(letter + 'acute.sc', f[letter + '.sc'], f['acutecomb']) # -------------------------------------------------------------------------- """ for letter in 'ainou': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb']) for letter in 'AINOU': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb.cap']) for letter in 'ainou': build_accented_glyph(letter + 'tilde.sc', f[letter + '.sc'], f['tildecomb']) """ # -------------------------------------------------------------------------- """ for letter in 'aeouy': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308']) for letter in 'AEIOUY': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308.cap']) for letter in 'aeiouy': build_accented_glyph(letter + 'dieresis.sc', f[letter + '.sc'], f['uni0308']) for letter in 'i': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308.narrow']) """ # -------------------------------------------------------------------------- """ for letter in 'au': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A']) for letter in 'AU': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A.cap']) for letter in 'au': build_accented_glyph(letter + 'ring.sc', f[letter + '.sc'], f['uni030A']) """ # -------------------------------------------------------------------------- """ for letter in 'acegijosuwy': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302']) for letter in 'hACEGHIJOSUWY': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.cap']) for letter in ['f_h', 'f_f_h']: build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302.cap']) for letter in 'aceghijosuwy': build_accented_glyph(letter + 'circumflex.sc', f[letter + '.sc'], f['uni0302']) """ # -------------------------------------------------------------------------- """ for letter in 'aegiou': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306']) for letter in 'AEGIOU': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306.cap']) for letter in 'aegiou': build_accented_glyph(letter + 'breve.sc', f[letter + '.sc'], f['uni0306']) """ # -------------------------------------------------------------------------- for letter in "cegz": build_accented_glyph(letter + "dotaccent", f[base(letter)], f["uni0307"]) for letter in "CEGIZ": build_accented_glyph(letter + "dotaccent", f[base(letter)], f["uni0307"]) # for letter in 'cegz': # build_accented_glyph(letter + 'dotaccent.sc', f[letter + '.sc'], f['uni0307']) # build_accented_glyph('i.TRK.sc', f['i.sc'], f['uni0307']) build_accented_glyph("i", f["dotlessi"], f["uni0307"]) build_accented_glyph("j", f["uni0237"], f["uni0307"]) # -------------------------------------------------------------------------- """ for letter in 'cenrsz': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C']) for letter in 'CDENRTSZ': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C.cap']) for letter in 'dLlt': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni0315']) for letter in 'cdenrstz': build_accented_glyph(letter + 'caron.sc', f[letter + '.sc'], f['uni030C']) build_accented_glyph('lcaron.sc', f['l.sc'], f['uni0315']) """ # -------------------------------------------------------------------------- """ for letter in 'aeiou': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304']) for letter in 'AEIOU': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304.cap']) for letter in 'aeiou': build_accented_glyph(letter + 'macron.sc', f[letter + '.sc'], f['uni0304']) """ # -------------------------------------------------------------------------- for letter in "ou": build_accented_glyph(letter + "hungarumlaut", f[base(letter)], f["uni030B"]) for letter in "OU": build_accented_glyph(letter + "hungarumlaut", f[base(letter)], f["uni030B"]) # for letter in 'ou': # build_accented_glyph(letter + 'hungarumlaut.sc', f[letter + '.sc'], f['uni030B']) # -------------------------------------------------------------------------- # build_multigraph('quotedblleft', [f['quoteleft'], f['quoteleft']]) # build_multigraph('quotedblright', [f['quoteright'], f['quoteright']]) # build_multigraph('quotedblbase', [f['quotesinglbase'], f['quotesinglbase']]) # build_multigraph('uni201F', [f['quotereversed'], f['quotereversed']]) # build_multigraph('guillemotleft', [f['guilsinglleft'], f['guilsinglleft']]) # build_multigraph('guillemotright', [f['guilsinglright'], f['guilsinglright']]) build_multigraph("napostrophe", [f["quoteright"], f["n"]]) build_multigraph("IJ", [f["I"], f["J"]]) build_multigraph("ij", [f["i"], f["j"]]) # build_multigraph('Ldot', [f['L'], f['periodcentered']]) # build_multigraph('ldot', [f['l'], f['periodcentered']]) # build_multigraph('ldot.sc', [f['l.sc'], f['periodcentered.sc']]) # -------------------------------------------------------------------------- """ f.selection.all() spacing_by_anchors.space_selected_by_anchors(f) f.selection.none() rules = cap_spacing.cap_spacing(f, caps, 0.015) cpsp = open('SlabMediaeval_cpsp.fea', 'w') print >> cpsp, 'feature cpsp {' print >> cpsp, rules, print >> cpsp, '} cpsp;' cpsp.close() """ # generate_kerning_and_read_features(None, f) # -------------------------------------------------------------------------- font_db.db_close(f)
def build_glyphs(bitbucket, f): import cap_spacing figures = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"] lining_figures = [s + ".lining" for s in figures] caps = [ "A", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "Amacron", "Abreve", "Aogonek", "B", "C", "Ccedilla", "Cacute", "Ccircumflex", "Cdotaccent", "Ccaron", "D", "Dcaron", "Dcroat", "E", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Emacron", "Ebreve", "Edotaccent", "Eogonek", "Ecaron", "F", "G", "Gcircumflex", "Gbreve", "Gdotaccent", "Gcommaaccent", "H", "Hcircumflex", "Hbar", "I", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Itilde", "Imacron", "Ibreve", "Iogonek", "J", "Jcircumflex", "K", "Kcommaaccent", "L", "Lacute", "Lcommaaccent", "Lcaron", "Ldot", "Lslash", "M", "N", "Ntilde", "Nacute", "Ncommaaccent", "Ncaron", "O", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "Oslash", "Omacron", "Obreve", "Ohungarumlaut", "P", "Q", "R", "Racute", "Rcommaaccent", "Rcaron", "S", "Sacute", "Scircumflex", "Scedilla", "uni0218", "Scaron", "T", "uni0162", "uni021A", "Tcaron", "Tbar", "U", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Utilde", "Umacron", "Ubreve", "Uring", "Uhungarumlaut", "Uogonek", "V", "W", "Wcircumflex", "X", "Y", "Yacute", "Ydieresis", "Ycircumflex", "Z", "Zacute", "Zdotaccent", "Zcaron", "IJ", "AE", "OE", "Eth", "Thorn", "question", "questiondown", "exclam", "exclamdown", "ampersand", ] def base(letter): if letter == "i": base = "dotlessi" elif letter == "j": base = "uni0237" else: base = letter return base db = font_db.db_create(f) db["spacing_anchor_heights"] = { "hi": 684, # caps and ascenders # 't' : ???, # top diacritics "x": 376, # ex-height "o": 195, # like the letter o "bl": 15, # baseline "lo": -244, } # descenders build_several_space_glyphs( f, emsize=1000, spacesize=185, thinspacesize=1000 / 6, hairspacesize=1000 / 10, tabwidth=f["zero.lining"].width ) propagate_hyphens(f) # propagate_hyphens(f, '.uppercase') build_spacing_marks(f, width=2 * 195) make_glyph_reference("quotesingle", f["minute"]) make_glyph_reference("quotedbl", f["second"]) make_glyph_reference("asciitilde", f["uni2053"]) # Swung dash. make_glyph_reference("i.TRK", f["i"]) # make_glyph_reference('Dcroat', f['Eth']) build_multigraph("ellipsis", [f["period"], f["period"], f["period"]]) for fig in figures + ["dollar"]: make_glyph_reference(fig, f[fig + ".hanging"]) make_glyph_reference("uni00B9", f["one.sup"]) make_glyph_reference("uni00B2", f["two.sup"]) make_glyph_reference("uni00B3", f["three.sup"]) for extension in [(".numer", 244), (".sub", -98), (".sup", 293)]: for fig in figures: make_glyph_reference( fig + extension[0], f[fig + ".denom"], transformation=(1, 0, 0, 1, 0, extension[1]), copy_spacing_anchors=False, ) build_multigraph("onequarter", [f["one.numer"], f["fraction"], f["four.denom"]]) build_multigraph("onehalf", [f["one.numer"], f["fraction"], f["two.denom"]]) build_multigraph("threequarters", [f["three.numer"], f["fraction"], f["four.denom"]]) # -------------------------------------------------------------------------- for letter in "GKkLlNnRr": build_accented_glyph(letter + "commaaccent", f[base(letter)], f["uni0326"]) build_accented_glyph("gcommaaccent", f["g"], f["uni0312"]) build_accented_glyph("uni0218", f["S"], f["uni0326"]) build_accented_glyph("uni0219", f["s"], f["uni0326"]) build_accented_glyph("uni021A", f["T"], f["uni0326"]) build_accented_glyph("uni021B", f["t"], f["uni0326"]) # -------------------------------------------------------------------------- for letter in "CcSs": build_accented_glyph(letter + "cedilla", f[base(letter)], f["uni0327"]) build_accented_glyph("uni0162", f["T"], f["uni0327"]) build_accented_glyph("uni0163", f["t"], f["uni0327"]) # -------------------------------------------------------------------------- for letter in "aeiou": build_accented_glyph(letter + "grave", f[base(letter)], f["gravecomb"]) for letter in "AEIOU": build_accented_glyph(letter + "grave", f[base(letter)], f["gravecomb.cap"]) # -------------------------------------------------------------------------- for letter in "aceinorsuyz": build_accented_glyph(letter + "acute", f[base(letter)], f["acutecomb"]) for letter in "ACEILNORSUYZ": build_accented_glyph(letter + "acute", f[base(letter)], f["acutecomb.cap"]) # build_accented_glyph('lacute', f['l'], f['acutecomb.cap']) <-- We are making this one by hand. # -------------------------------------------------------------------------- for letter in "ainou": build_accented_glyph(letter + "tilde", f[base(letter)], f["tildecomb"]) for letter in "AINOU": build_accented_glyph(letter + "tilde", f[base(letter)], f["tildecomb.cap"]) # -------------------------------------------------------------------------- for letter in "aeouy": build_accented_glyph(letter + "dieresis", f[base(letter)], f["uni0308"]) for letter in "AEIOUY": build_accented_glyph(letter + "dieresis", f[base(letter)], f["uni0308.cap"]) for letter in "i": build_accented_glyph(letter + "dieresis", f[base(letter)], f["uni0308.narrow"]) # -------------------------------------------------------------------------- for letter in "au": build_accented_glyph(letter + "ring", f[base(letter)], f["uni030A"]) for letter in "AU": build_accented_glyph(letter + "ring", f[base(letter)], f["uni030A.cap"]) # -------------------------------------------------------------------------- for letter in "acegijosuwy": build_accented_glyph(letter + "circumflex", f[base(letter)], f["uni0302"]) for letter in "hACEGHIJOSUWY": build_accented_glyph(letter + "circumflex", f[base(letter)], f["uni0302.cap"]) for letter in ["f_h", "f_f_h"]: build_accented_glyph(letter + "circumflex", f[base(letter)], f["uni0302.cap"]) # -------------------------------------------------------------------------- for letter in "aegiou": build_accented_glyph(letter + "breve", f[base(letter)], f["uni0306"]) for letter in "AEGIOU": build_accented_glyph(letter + "breve", f[base(letter)], f["uni0306.cap"]) # -------------------------------------------------------------------------- for letter in "cegz": build_accented_glyph(letter + "dotaccent", f[base(letter)], f["uni0307"]) for letter in "CEGIZ": build_accented_glyph(letter + "dotaccent", f[base(letter)], f["uni0307.cap"]) build_accented_glyph("i", f["dotlessi"], f["uni0307"]) build_accented_glyph("j", f["uni0237"], f["uni0307"]) # -------------------------------------------------------------------------- for letter in "cenrsz": build_accented_glyph(letter + "caron", f[base(letter)], f["uni030C"]) for letter in "CDENRTSZ": build_accented_glyph(letter + "caron", f[base(letter)], f["uni030C.cap"]) for letter in "dLlt": build_accented_glyph(letter + "caron", f[base(letter)], f["uni0315"]) # -------------------------------------------------------------------------- for letter in "aeiou": build_accented_glyph(letter + "macron", f[base(letter)], f["uni0304"]) for letter in "AEIOU": build_accented_glyph(letter + "macron", f[base(letter)], f["uni0304.cap"]) # -------------------------------------------------------------------------- for letter in "ou": build_accented_glyph(letter + "hungarumlaut", f[base(letter)], f["uni030B"]) for letter in "OU": build_accented_glyph(letter + "hungarumlaut", f[base(letter)], f["uni030B.cap"]) # -------------------------------------------------------------------------- build_multigraph("quotedblleft", [f["quoteleft"], f["quoteleft"]]) build_multigraph("quotedblright", [f["quoteright"], f["quoteright"]]) build_multigraph("quotedblbase", [f["quotesinglbase"], f["quotesinglbase"]]) build_multigraph("uni201F", [f["quotereversed"], f["quotereversed"]]) build_multigraph("guillemotleft", [f["guilsinglleft"], f["guilsinglleft"]]) build_multigraph("guillemotright", [f["guilsinglright"], f["guilsinglright"]]) build_multigraph("napostrophe", [f["quoteright"], f["n"]]) build_multigraph("IJ", [f["I"], f["J"]]) build_multigraph("ij", [f["i"], f["j"]]) build_multigraph("Ldot", [f["L"], f["periodcentered"]]) build_multigraph("ldot", [f["l"], f["periodcentered"]]) # -------------------------------------------------------------------------- f.selection.all() spacing_by_anchors.space_selected_by_anchors(f) f.selection.none() rules = cap_spacing.cap_spacing(f, caps, 0.015) cpsp = open("LindenHill-Bold_cpsp.fea", "w") print >> cpsp, "feature cpsp {" print >> cpsp, rules, print >> cpsp, "} cpsp;" cpsp.close() generate_kerning_and_read_features(None, f) # -------------------------------------------------------------------------- font_db.db_close(f)
def build_glyphs(bitbucket, f): import cap_spacing figures = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] lining_figures = [s + '.lining' for s in figures] caps = [ 'A', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'Amacron', 'Abreve', 'Aogonek', 'B', 'C', 'Ccedilla', 'Cacute', 'Ccircumflex', 'Cdotaccent', 'Ccaron', 'D', 'Dcaron', 'Dcroat', 'E', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Emacron', 'Ebreve', 'Edotaccent', 'Eogonek', 'Ecaron', 'F', 'G', 'Gcircumflex', 'Gbreve', 'Gdotaccent', 'Gcommaaccent', 'G.001', 'Gcircumflex.001', 'Gbreve.001', 'Gdotaccent.001', 'Gcommaaccent.001', 'H', 'Hcircumflex', 'Hbar', 'I', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Itilde', 'Imacron', 'Ibreve', 'Iogonek', 'J', 'Jcircumflex', 'J.001', 'Jcircumflex.001', 'K', 'Kcommaaccent', 'L', 'Lacute', 'Lcommaaccent', 'Lcaron', 'Ldot', 'Lslash', 'M', 'N', 'Ntilde', 'Nacute', 'Ncommaaccent', 'Ncaron', 'O', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'Oslash', 'Omacron', 'Obreve', 'Ohungarumlaut', 'P', 'Q', 'R', 'Racute', 'Rcommaaccent', 'Rcaron', 'S', 'Sacute', 'Scircumflex', 'Scedilla', 'uni0218', 'Scaron', 'T', 'uni0162', 'uni021A', 'Tcaron', 'Tbar', 'T.001', 'uni0162.001', 'uni021A.001', 'Tcaron.001', 'Tbar.001', 'U', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Utilde', 'Umacron', 'Ubreve', 'Uring', 'Uhungarumlaut', 'Uogonek', 'V', 'W', 'Wcircumflex', 'X', 'Y', 'Yacute', 'Ydieresis', 'Ycircumflex', 'Y.001', 'Yacute.001', 'Ydieresis.001', 'Ycircumflex.001', 'Z', 'Zacute', 'Zdotaccent', 'Zcaron', 'IJ', 'AE', 'OE', 'Eth', 'Thorn', 'question', 'questiondown', 'exclam', 'exclamdown', 'ampersand' ] def base(letter): if letter == 'i': base = 'dotlessi' elif letter == 'j': base = 'uni0237' else: base = letter return base db = font_db.db_create(f) db['spacing_anchor_heights'] = { 'hi' : 732, # caps and ascenders 't' : 562, # top diacritics 'x' : 415, # ex-height 'o' : 220, # like the letter o 'bl' : 20, # baseline 'lo' : -205 } # descenders build_several_space_glyphs(f, emsize = 1000, spacesize = 213, thinspacesize = 1000 / 6, hairspacesize = 1000 / 10, tabwidth = f['zero.lining'].width) propagate_hyphens(f) propagate_hyphens(f, '.uppercase') build_spacing_marks(f, width = 439) make_glyph_reference('quotesingle', f['quoteright']) make_glyph_reference('quotedbl', f['quotedblright']) make_glyph_reference('i.TRK', f['i']) make_glyph_reference('Dcroat', f['Eth']) make_glyph_reference('florin', f['f']) # I'm not sure whether this # is a good idea. make_glyph_reference('uni00B9', f['one.lining.sup']) make_glyph_reference('uni00B2', f['two.lining.sup']) make_glyph_reference('uni00B3', f['three.lining.sup']) for g in f: if g[-4:] == '.sup': make_glyph_reference(g[:-4] + '.sub', f[g], (1, 0, 0, 1, 0, -707)) for g in lining_figures + ['comma', 'period']: make_glyph_reference(g + '.numer', f[g + '.sup'], (1, 0, 0, 1, 0, -177)) for g in lining_figures + ['comma', 'period']: make_glyph_reference(g + '.denom', f[g + '.sup'], (1, 0, 0, 1, 0, -386)) build_multigraph('onequarter', [f['one.lining.numer'], f['fraction'], f['four.lining.denom']]) build_multigraph('onehalf', [f['one.lining.numer'], f['fraction'], f['two.lining.denom']]) build_multigraph('threequarters', [f['three.lining.numer'], f['fraction'], f['four.lining.denom']]) #-------------------------------------------------------------------------- for letter in 'GKkLlNnRr': build_accented_glyph(letter + 'commaaccent', f[base(letter)], f['uni0326']) build_accented_glyph('Gcommaaccent.001', f['G.001'], f['uni0326']) build_accented_glyph('gcommaaccent', f['g'], f['uni0312']) build_accented_glyph('uni0218', f['S'], f['uni0326']) build_accented_glyph('uni0219', f['s'], f['uni0326']) build_accented_glyph('uni021A', f['T'], f['uni0326']) build_accented_glyph('uni021A.001', f['T.001'], f['uni0326']) build_accented_glyph('uni021B', f['t'], f['uni0326']) #-------------------------------------------------------------------------- for letter in 'CcSs': build_accented_glyph(letter + 'cedilla', f[base(letter)], f['uni0327']) build_accented_glyph('uni0162', f['T'], f['uni0327']) build_accented_glyph('uni0162.001', f['T.001'], f['uni0327']) build_accented_glyph('uni0163', f['t'], f['uni0327']) #-------------------------------------------------------------------------- for letter in 'AaEeIiOoUu': build_accented_glyph(letter + 'grave', f[base(letter)], f['gravecomb']) #-------------------------------------------------------------------------- for letter in 'AaCcEeIiLlNnOoRrSsUuYyZz': build_accented_glyph(letter + 'acute', f[base(letter)], f['acutecomb']) build_accented_glyph('Yacute.001', f['Y.001'], f['acutecomb']) #-------------------------------------------------------------------------- for letter in 'AaIiNnOoUu': build_accented_glyph(letter + 'tilde', f[base(letter)], f['tildecomb']) #-------------------------------------------------------------------------- for letter in 'AaEeIiOoUuYy': build_accented_glyph(letter + 'dieresis', f[base(letter)], f['uni0308']) build_accented_glyph('Ydieresis.001', f['Y.001'], f['uni0308']) #-------------------------------------------------------------------------- for letter in 'AaUu': build_accented_glyph(letter + 'ring', f[base(letter)], f['uni030A']) #-------------------------------------------------------------------------- for letter in 'AaCcEeGgHhIiJjOoSsUuWwYy': build_accented_glyph(letter + 'circumflex', f[base(letter)], f['uni0302']) build_accented_glyph('Gcircumflex.001', f['G.001'], f['uni0302']) build_accented_glyph('Jcircumflex.001', f['J.001'], f['uni0302']) build_accented_glyph('Ycircumflex.001', f['Y.001'], f['uni0302']) #-------------------------------------------------------------------------- for letter in 'AaEeGgIiOoUu': build_accented_glyph(letter + 'breve', f[base(letter)], f['uni0306']) build_accented_glyph('Gbreve.001', f['G.001'], f['uni0306']) #-------------------------------------------------------------------------- for letter in 'CcEeGgIZz': build_accented_glyph(letter + 'dotaccent', f[base(letter)], f['uni0307']) build_accented_glyph('Gdotaccent.001', f['G.001'], f['uni0307']) #-------------------------------------------------------------------------- for letter in 'CcDEeNnRrTSsZz': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni030C']) build_accented_glyph('Tcaron.001', f['T.001'], f['uni030C']) for letter in 'dLlt': build_accented_glyph(letter + 'caron', f[base(letter)], f['uni0315']) #-------------------------------------------------------------------------- for letter in 'AaEeIiOoUu': build_accented_glyph(letter + 'macron', f[base(letter)], f['uni0304']) #-------------------------------------------------------------------------- for letter in 'OoUu': build_accented_glyph(letter + 'hungarumlaut', f[base(letter)], f['uni030B']) #-------------------------------------------------------------------------- build_multigraph('ellipsis', [f['period'], f['period'], f['period']]) build_multigraph('napostrophe', [f['quoteright'], f['n']]) build_multigraph('IJ', [f['I'], f['J']]) build_multigraph('ij', [f['i'], f['j']]) build_multigraph('Ldot', [f['L'], f['periodcentered']]) build_multigraph('ldot', [f['l'], f['periodcentered']]) #-------------------------------------------------------------------------- f.selection.all() spacing_by_anchors.space_selected_by_anchors(f) f.selection.none() generate_kerning_and_read_features(None, f) #-------------------------------------------------------------------------- font_db.db_close(f)