arrowtype / recursive

Recursive Mono & Sans is a variable font family for code & UI
https://recursive.design
SIL Open Font License 1.1
3.26k stars 51 forks source link

Not-quite-tabular figures: kerning between period and default 7 #482

Closed arrowtype closed 2 years ago

arrowtype commented 3 years ago

Problem description In issue https://github.com/arrowtype/recursive/issues/472 and release 1.079, I corrected the problem that the default 1 and 7 had kerning, which prevented them from being properly tabular figures. However, there is still kerning between the period and 7 (and vice versa) that disrupts tabular data.

It’s also possible that other disruptive kerns exist, so resolving this issue should include a check for and solution to any other kerning that might be lurking around to disrupt tabular data.

image

Expected behavior

Default figures should work fully as tabular figures, including by having no kerning against adjacent punctuation likely to show up in tabular data (especially the period).

That, OR there should be a tnum feature that adds in a alts for period, etc, that are not kerned against numbers.

arrowtype commented 3 years ago

It turns out, there are quite a few kerns against the basic numbers.

from fontParts.fontshell import RFont as Font

font = Font("src/ufo/sans/Recursive Sans-Casual A.ufo")

numbers = "zero one two three four five six seven eight nine".split(" ")

for key in font.kerning.keys():
    if key[0] in numbers or key[1] in numbers:
        print(key)

Yields:

('P', 'seven')
('at', 'seven')
('eight', 'public.kern2.Punct_low_left')
('eight', 'public.kern2.Punct_straight_quote')
('eight', 'public.kern2.Punct_top_left')
('eight', 'public.kern2.braceright')
('eight', 'public.kern2.bracketright')
('eight', 'public.kern2.parenright')
('eight', 'question')
('five', 'public.kern2.Punct_low_left')
('five', 'public.kern2.Punct_straight_quote')
('five', 'public.kern2.Punct_top_left')
('five', 'public.kern2.braceright')
('five', 'public.kern2.bracketright')
('five', 'public.kern2.parenright')
('five', 'question')
('four', 'public.kern2.Punct_low_left')
('four', 'public.kern2.Punct_straight_quote')
('four', 'public.kern2.Punct_top_left')
('four', 'public.kern2.braceright')
('four', 'question')
('one', 'public.kern2.Punct_low_left')
('one', 'public.kern2.Punct_straight_quote')
('one', 'public.kern2.Punct_top_left')
('one', 'question')
('public.kern1.A_right', 'seven')
('public.kern1.B_right', 'seven')
('public.kern1.C_right', 'seven')
('public.kern1.G_right', 'seven')
('public.kern1.K_right', 'four')
('public.kern1.K_right', 'seven')
('public.kern1.M_right', 'seven')
('public.kern1.O_right', 'seven')
('public.kern1.Punct_low_right', 'eight')
('public.kern1.Punct_low_right', 'five')
('public.kern1.Punct_low_right', 'four')
('public.kern1.Punct_low_right', 'nine')
('public.kern1.Punct_low_right', 'one')
('public.kern1.Punct_low_right', 'seven')
('public.kern1.Punct_low_right', 'three')
('public.kern1.Punct_low_right', 'two')
('public.kern1.Punct_straight_quote', 'eight')
('public.kern1.Punct_straight_quote', 'five')
('public.kern1.Punct_straight_quote', 'four')
('public.kern1.Punct_straight_quote', 'nine')
('public.kern1.Punct_straight_quote', 'one')
('public.kern1.Punct_straight_quote', 'seven')
('public.kern1.Punct_straight_quote', 'three')
('public.kern1.Punct_straight_quote', 'two')
('public.kern1.Punct_top_right', 'eight')
('public.kern1.Punct_top_right', 'five')
('public.kern1.Punct_top_right', 'four')
('public.kern1.Punct_top_right', 'nine')
('public.kern1.Punct_top_right', 'one')
('public.kern1.Punct_top_right', 'seven')
('public.kern1.Punct_top_right', 'three')
('public.kern1.Punct_top_right', 'two')
('public.kern1.R_right', 'seven')
('public.kern1.T_right', 'four')
('public.kern1.T_right', 'seven')
('public.kern1.Y_right', 'four')
('public.kern1.Y_right', 'seven')
('public.kern1.a_right', 'seven')
('public.kern1.braceleft', 'eight')
('public.kern1.braceleft', 'five')
('public.kern1.braceleft', 'four')
('public.kern1.braceleft', 'nine')
('public.kern1.bracketleft', 'eight')
('public.kern1.bracketleft', 'five')
('public.kern1.bracketleft', 'four')
('public.kern1.bracketleft', 'nine')
('public.kern1.bracketleft', 'seven')
('public.kern1.bracketleft', 'two')
('public.kern1.e_right', 'seven')
('public.kern1.n_right', 'seven')
('public.kern1.o_right', 'seven')
('public.kern1.parenleft', 'eight')
('public.kern1.parenleft', 'five')
('public.kern1.parenleft', 'four')
('public.kern1.parenleft', 'nine')
('public.kern1.x_right', 'seven')
('question', 'nine')
('questiondown', 'eight')
('questiondown', 'four')
('questiondown', 'nine')
('questiondown', 'one')
('questiondown', 'seven')
('questiondown', 'three')
('questiondown', 'two')
('seven', 'at')
('seven', 'four')
('seven', 'public.kern2.O_left')
('seven', 'public.kern2.Punct_low_left')
('seven', 'public.kern2.Punct_straight_quote')
('seven', 'public.kern2.Punct_top_left')
('seven', 'public.kern2.braceright')
('seven', 'question')
('six', 'public.kern2.Punct_low_left')
('six', 'public.kern2.Punct_straight_quote')
('six', 'public.kern2.Punct_top_left')
('six', 'public.kern2.braceright')
('six', 'public.kern2.bracketright')
('six', 'public.kern2.parenright')
('six', 'question')
('three', 'public.kern2.Punct_low_left')
('three', 'public.kern2.Punct_straight_quote')
('three', 'public.kern2.Punct_top_left')
('three', 'question')
('two', 'public.kern2.Punct_low_left')
('two', 'public.kern2.Punct_straight_quote')
('two', 'public.kern2.Punct_top_left')
('two', 'public.kern2.braceright')
('two', 'question')

Until I test it, I’ll be unsure whether the best way forward is to remove all that kerning, or to make fresh .tnum figures without attaching any kerning. I’ll probably make some branches to explore this.

arrowtype commented 3 years ago

I wanted to see kerning values a little more clearly, so I improved the Python script a bit:

"""
    Recursive is intended to have tabular figures by default. However, there are some kerns present in these figures, which disrupts their tabularity.

    A known issue is kerning between /seven and /period. But, there may be other kerns beyond that. This will check for them so they can be removed.
"""

# from fontParts.fontshell import RFont as Font
from ufoLib2 import Font
from fontTools.ufoLib.kerning import lookupKerningValue

font = Font("src/ufo/sans/Recursive Sans-Casual A.ufo")

numbers = "zero one two three four five six seven eight nine".split(" ")

grouped = []
for value in font.groups.values():
    for name in value:
        grouped.append(name)

numberKerns = {}

for number in numbers:
    numberKerns[number] = []
    for name in font.keys():
        kern1 = lookupKerningValue((number, name), font.kerning, font.groups)
        kern2 = lookupKerningValue((name, number), font.kerning, font.groups)

        if kern1 != 0:
            numberKerns[number].append(((number, name), kern1))
        if kern2 != 0:
            numberKerns[number].append(((name, number), kern2))

import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(numberKerns)
Full list of number kerns (Click to expand) ``` 'eight': [ (('apostrophemod', 'eight'), -50), (('eight', 'backslash'), -20), (('backslash', 'eight'), -40), (('eight', 'backslash.case'), -20), (('backslash.case', 'eight'), -40), (('braceleft', 'eight'), -50), (('braceleft.case', 'eight'), -50), (('eight', 'braceright'), -50), (('eight', 'braceright.case'), -50), (('bracketleft', 'eight'), -20), (('bracketleft.case', 'eight'), -20), (('eight', 'bracketright'), -20), (('eight', 'bracketright.case'), -20), (('eight', 'breve'), -20), (('breve', 'eight'), -50), (('eight', 'caron'), -20), (('caron', 'eight'), -50), (('eight', 'circumflex'), -20), (('circumflex', 'eight'), -50), (('eight', 'comma'), -60), (('comma', 'eight'), -40), (('eight', 'commaturnedmod'), -20), (('commaturnedmod', 'eight'), -50), (('eight', 'degree'), -20), (('degree', 'eight'), -50), (('eight', 'dieresis'), -20), (('dieresis', 'eight'), -50), (('eight', 'dotaccent'), -20), (('dotaccent', 'eight'), -50), (('eight', 'ellipsis'), -60), (('ellipsis', 'eight'), -40), (('eight', 'fraction'), -60), (('fraction', 'eight'), -50), (('grave', 'eight'), -50), (('hungarumlaut', 'eight'), -50), (('eight', 'macron'), -20), (('macron', 'eight'), -50), (('eight', 'macronmod'), -20), (('macronmod', 'eight'), -50), (('eight', 'minus'), -20), (('eight', 'minute'), -20), (('minute', 'eight'), -50), (('eight', 'overline'), -20), (('overline', 'eight'), -50), (('parenleft', 'eight'), -30), (('parenleft.case', 'eight'), -30), (('eight', 'parenright'), -20), (('eight', 'parenright.case'), -20), (('eight', 'period'), -60), (('period', 'eight'), -40), (('eight', 'plus'), -20), (('eight', 'primedblmod'), -20), (('primedblmod', 'eight'), -50), (('eight', 'primemod'), -20), (('primemod', 'eight'), -50), (('eight', 'question'), -40), (('questiondown', 'eight'), -60), (('eight', 'quotedbl'), -40), (('quotedbl', 'eight'), -40), (('eight', 'quotedblbase'), -60), (('quotedblbase', 'eight'), -40), (('eight', 'quotedblleft'), -20), (('quotedblleft', 'eight'), -50), (('eight', 'quotedblright'), -20), (('quotedblright', 'eight'), -50), (('eight', 'quoteleft'), -20), (('quoteleft', 'eight'), -50), (('eight', 'quoteright'), -20), (('quoteright', 'eight'), -50), (('eight', 'quotesinglbase'), -60), (('quotesinglbase', 'eight'), -40), (('eight', 'quotesingle'), -40), (('quotesingle', 'eight'), -40), (('eight', 'ring'), -20), (('ring', 'eight'), -50), (('eight', 'ringacute'), -20), (('ringacute', 'eight'), -50), (('eight', 'ringhalfleftmod'), -20), (('ringhalfleftmod', 'eight'), -50), (('eight', 'ringhalfrightmod'), -20), (('ringhalfrightmod', 'eight'), -50), (('eight', 'second'), -20), (('second', 'eight'), -50), (('eight', 'slash'), -60), (('slash', 'eight'), -50), (('eight', 'slash.case'), -60), (('slash.case', 'eight'), -50), (('eight', 'tilde'), -20), (('tilde', 'eight'), -50), (('eight', 'trademark'), -20), (('trademark', 'eight'), -50), (('eight', 'underscore'), -60), (('underscore', 'eight'), -40), (('eight', 'verticallinelowmod'), -60), (('verticallinelowmod', 'eight'), -40), (('eight', 'verticallinemod'), -20), (('verticallinemod', 'eight'), -50)], 'five': [ (('apostrophemod', 'five'), -40), (('five', 'backslash'), -40), (('backslash', 'five'), -30), (('five', 'backslash.case'), -40), (('backslash.case', 'five'), -30), (('braceleft', 'five'), -40), (('braceleft.case', 'five'), -40), (('five', 'braceright'), -40), (('five', 'braceright.case'), -40), (('bracketleft', 'five'), -20), (('bracketleft.case', 'five'), -20), (('five', 'bracketright'), -20), (('five', 'bracketright.case'), -20), (('five', 'breve'), -40), (('breve', 'five'), -40), (('five', 'caron'), -40), (('caron', 'five'), -40), (('five', 'circumflex'), -40), (('circumflex', 'five'), -40), (('five', 'comma'), -50), (('comma', 'five'), -30), (('five', 'commaturnedmod'), -40), (('commaturnedmod', 'five'), -40), (('five', 'degree'), -40), (('degree', 'five'), -40), (('five', 'dieresis'), -40), (('dieresis', 'five'), -40), (('five', 'dotaccent'), -40), (('dotaccent', 'five'), -40), (('five', 'ellipsis'), -50), (('ellipsis', 'five'), -30), (('five', 'fraction'), -50), (('fraction', 'five'), -40), (('grave', 'five'), -40), (('hungarumlaut', 'five'), -40), (('five', 'macron'), -40), (('macron', 'five'), -40), (('five', 'macronmod'), -40), (('macronmod', 'five'), -40), (('five', 'minus'), -40), (('five', 'minute'), -40), (('minute', 'five'), -40), (('five', 'overline'), -40), (('overline', 'five'), -40), (('parenleft', 'five'), -30), (('parenleft.case', 'five'), -30), (('five', 'parenright'), -20), (('five', 'parenright.case'), -20), (('five', 'period'), -50), (('period', 'five'), -30), (('five', 'plus'), -40), (('five', 'primedblmod'), -40), (('primedblmod', 'five'), -40), (('five', 'primemod'), -40), (('primemod', 'five'), -40), (('five', 'question'), -20), (('five', 'quotedbl'), -30), (('quotedbl', 'five'), -50), (('five', 'quotedblbase'), -50), (('quotedblbase', 'five'), -30), (('five', 'quotedblleft'), -40), (('quotedblleft', 'five'), -40), (('five', 'quotedblright'), -40), (('quotedblright', 'five'), -40), (('five', 'quoteleft'), -40), (('quoteleft', 'five'), -40), (('five', 'quoteright'), -40), (('quoteright', 'five'), -40), (('five', 'quotesinglbase'), -50), (('quotesinglbase', 'five'), -30), (('five', 'quotesingle'), -30), (('quotesingle', 'five'), -50), (('five', 'ring'), -40), (('ring', 'five'), -40), (('five', 'ringacute'), -40), (('ringacute', 'five'), -40), (('five', 'ringhalfleftmod'), -40), (('ringhalfleftmod', 'five'), -40), (('five', 'ringhalfrightmod'), -40), (('ringhalfrightmod', 'five'), -40), (('five', 'second'), -40), (('second', 'five'), -40), (('five', 'slash'), -50), (('slash', 'five'), -40), (('five', 'slash.case'), -50), (('slash.case', 'five'), -40), (('five', 'tilde'), -40), (('tilde', 'five'), -40), (('five', 'trademark'), -40), (('trademark', 'five'), -40), (('five', 'underscore'), -50), (('underscore', 'five'), -30), (('five', 'verticallinelowmod'), -50), (('verticallinelowmod', 'five'), -30), (('five', 'verticallinemod'), -40), (('verticallinemod', 'five'), -40)], 'four': [ (('K', 'four'), -30), (('Kcommaaccent', 'four'), -30), (('T', 'four'), -50), (('Tbar', 'four'), -50), (('Tcaron', 'four'), -50), (('Tcedilla', 'four'), -50), (('Tcommaaccent', 'four'), -50), (('Tdotbelow', 'four'), -50), (('Tlinebelow', 'four'), -50), (('X', 'four'), -30), (('Y', 'four'), -40), (('Yacute', 'four'), -40), (('Ycircumflex', 'four'), -40), (('Ydieresis', 'four'), -40), (('Ydot', 'four'), -40), (('Ydotbelow', 'four'), -40), (('Ygrave', 'four'), -40), (('Yhookabove', 'four'), -40), (('Ymacron', 'four'), -40), (('Ytilde', 'four'), -40), (('apostrophemod', 'four'), -80), (('four', 'backslash'), -30), (('backslash', 'four'), -50), (('four', 'backslash.case'), -30), (('backslash.case', 'four'), -50), (('braceleft', 'four'), -40), (('braceleft.case', 'four'), -40), (('four', 'braceright'), -40), (('four', 'braceright.case'), -40), (('bracketleft', 'four'), -40), (('bracketleft.case', 'four'), -40), (('four', 'breve'), -30), (('breve', 'four'), -80), (('four', 'caron'), -30), (('caron', 'four'), -80), (('four', 'circumflex'), -30), (('circumflex', 'four'), -80), (('four', 'comma'), -40), (('comma', 'four'), -50), (('four', 'commaturnedmod'), -30), (('commaturnedmod', 'four'), -80), (('four', 'degree'), -30), (('degree', 'four'), -80), (('four', 'dieresis'), -30), (('dieresis', 'four'), -80), (('four', 'dotaccent'), -30), (('dotaccent', 'four'), -80), (('four', 'ellipsis'), -40), (('ellipsis', 'four'), -50), (('four', 'fraction'), -40), (('fraction', 'four'), -80), (('grave', 'four'), -80), (('hungarumlaut', 'four'), -80), (('four', 'macron'), -30), (('macron', 'four'), -80), (('four', 'macronmod'), -30), (('macronmod', 'four'), -80), (('four', 'minus'), -30), (('four', 'minute'), -30), (('minute', 'four'), -80), (('four', 'overline'), -30), (('overline', 'four'), -80), (('parenleft', 'four'), -70), (('parenleft.case', 'four'), -70), (('four', 'period'), -40), (('period', 'four'), -50), (('four', 'plus'), -30), (('four', 'primedblmod'), -30), (('primedblmod', 'four'), -80), (('four', 'primemod'), -30), (('primemod', 'four'), -80), (('four', 'question'), -20), (('questiondown', 'four'), -80), (('four', 'quotedbl'), -20), (('quotedbl', 'four'), -70), (('four', 'quotedblbase'), -40), (('quotedblbase', 'four'), -50), (('four', 'quotedblleft'), -30), (('quotedblleft', 'four'), -80), (('four', 'quotedblright'), -30), (('quotedblright', 'four'), -80), (('four', 'quoteleft'), -30), (('quoteleft', 'four'), -80), (('four', 'quoteright'), -30), (('quoteright', 'four'), -80), (('four', 'quotesinglbase'), -40), (('quotesinglbase', 'four'), -50), (('four', 'quotesingle'), -20), (('quotesingle', 'four'), -70), (('four', 'ring'), -30), (('ring', 'four'), -80), (('four', 'ringacute'), -30), (('ringacute', 'four'), -80), (('four', 'ringhalfleftmod'), -30), (('ringhalfleftmod', 'four'), -80), (('four', 'ringhalfrightmod'), -30), (('ringhalfrightmod', 'four'), -80), (('four', 'second'), -30), (('second', 'four'), -80), (('seven', 'four'), -30), (('four', 'slash'), -40), (('slash', 'four'), -80), (('four', 'slash.case'), -40), (('slash.case', 'four'), -80), (('tenge', 'four'), -50), (('four', 'tilde'), -30), (('tilde', 'four'), -80), (('four', 'trademark'), -30), (('trademark', 'four'), -80), (('four', 'underscore'), -40), (('underscore', 'four'), -50), (('four', 'verticallinelowmod'), -40), (('verticallinelowmod', 'four'), -50), (('four', 'verticallinemod'), -30), (('verticallinemod', 'four'), -80)], 'nine': [ (('apostrophemod', 'nine'), -40), (('nine', 'backslash'), -10), (('backslash', 'nine'), -50), (('nine', 'backslash.case'), -10), (('backslash.case', 'nine'), -50), (('braceleft', 'nine'), -50), (('braceleft.case', 'nine'), -50), (('nine', 'braceright'), -50), (('nine', 'braceright.case'), -50), (('bracketleft', 'nine'), -20), (('bracketleft.case', 'nine'), -20), (('nine', 'bracketright'), -20), (('nine', 'bracketright.case'), -20), (('nine', 'breve'), -10), (('breve', 'nine'), -40), (('nine', 'caron'), -10), (('caron', 'nine'), -40), (('nine', 'circumflex'), -10), (('circumflex', 'nine'), -40), (('nine', 'comma'), -70), (('comma', 'nine'), -50), (('nine', 'commaturnedmod'), -10), (('commaturnedmod', 'nine'), -40), (('nine', 'degree'), -10), (('degree', 'nine'), -40), (('nine', 'dieresis'), -10), (('dieresis', 'nine'), -40), (('nine', 'dotaccent'), -10), (('dotaccent', 'nine'), -40), (('nine', 'ellipsis'), -70), (('ellipsis', 'nine'), -50), (('nine', 'fraction'), -70), (('fraction', 'nine'), -40), (('grave', 'nine'), -40), (('hungarumlaut', 'nine'), -40), (('nine', 'macron'), -10), (('macron', 'nine'), -40), (('nine', 'macronmod'), -10), (('macronmod', 'nine'), -40), (('nine', 'minus'), -10), (('nine', 'minute'), -10), (('minute', 'nine'), -40), (('nine', 'overline'), -10), (('overline', 'nine'), -40), (('parenleft', 'nine'), -40), (('parenleft.case', 'nine'), -40), (('nine', 'parenright'), -30), (('nine', 'parenright.case'), -30), (('nine', 'period'), -70), (('period', 'nine'), -50), (('nine', 'plus'), -10), (('nine', 'primedblmod'), -10), (('primedblmod', 'nine'), -40), (('nine', 'primemod'), -10), (('primemod', 'nine'), -40), (('nine', 'question'), -30), (('question', 'nine'), -10), (('questiondown', 'nine'), -70), (('nine', 'quotedbl'), -30), (('quotedbl', 'nine'), -30), (('nine', 'quotedblbase'), -70), (('quotedblbase', 'nine'), -50), (('nine', 'quotedblleft'), -10), (('quotedblleft', 'nine'), -40), (('nine', 'quotedblright'), -10), (('quotedblright', 'nine'), -40), (('nine', 'quoteleft'), -10), (('quoteleft', 'nine'), -40), (('nine', 'quoteright'), -10), (('quoteright', 'nine'), -40), (('nine', 'quotesinglbase'), -70), (('quotesinglbase', 'nine'), -50), (('nine', 'quotesingle'), -30), (('quotesingle', 'nine'), -30), (('nine', 'ring'), -10), (('ring', 'nine'), -40), (('nine', 'ringacute'), -10), (('ringacute', 'nine'), -40), (('nine', 'ringhalfleftmod'), -10), (('ringhalfleftmod', 'nine'), -40), (('nine', 'ringhalfrightmod'), -10), (('ringhalfrightmod', 'nine'), -40), (('nine', 'second'), -10), (('second', 'nine'), -40), (('nine', 'slash'), -70), (('slash', 'nine'), -40), (('nine', 'slash.case'), -70), (('slash.case', 'nine'), -40), (('nine', 'tilde'), -10), (('tilde', 'nine'), -40), (('nine', 'trademark'), -10), (('trademark', 'nine'), -40), (('nine', 'underscore'), -70), (('underscore', 'nine'), -50), (('nine', 'verticallinelowmod'), -70), (('verticallinelowmod', 'nine'), -50), (('nine', 'verticallinemod'), -10), (('verticallinemod', 'nine'), -40)], 'one': [ (('apostrophemod', 'one'), -40), (('one', 'backslash'), -60), (('backslash', 'one'), -30), (('one', 'backslash.case'), -60), (('backslash.case', 'one'), -30), (('one', 'breve'), -60), (('breve', 'one'), -40), (('one', 'caron'), -60), (('caron', 'one'), -40), (('one', 'circumflex'), -60), (('circumflex', 'one'), -40), (('one', 'comma'), -30), (('comma', 'one'), -30), (('one', 'commaturnedmod'), -60), (('commaturnedmod', 'one'), -40), (('one', 'degree'), -60), (('degree', 'one'), -40), (('one', 'dieresis'), -60), (('dieresis', 'one'), -40), (('one', 'dotaccent'), -60), (('dotaccent', 'one'), -40), (('one', 'ellipsis'), -30), (('ellipsis', 'one'), -30), (('one', 'fraction'), -30), (('fraction', 'one'), -40), (('grave', 'one'), -40), (('hungarumlaut', 'one'), -40), (('one', 'macron'), -60), (('macron', 'one'), -40), (('one', 'macronmod'), -60), (('macronmod', 'one'), -40), (('one', 'minus'), -60), (('one', 'minute'), -60), (('minute', 'one'), -40), (('one', 'overline'), -60), (('overline', 'one'), -40), (('one', 'period'), -30), (('period', 'one'), -30), (('one', 'plus'), -60), (('one', 'primedblmod'), -60), (('primedblmod', 'one'), -40), (('one', 'primemod'), -60), (('primemod', 'one'), -40), (('one', 'question'), -100), (('questiondown', 'one'), -30), (('one', 'quotedbl'), -80), (('quotedbl', 'one'), -20), (('one', 'quotedblbase'), -30), (('quotedblbase', 'one'), -30), (('one', 'quotedblleft'), -60), (('quotedblleft', 'one'), -40), (('one', 'quotedblright'), -60), (('quotedblright', 'one'), -40), (('one', 'quoteleft'), -60), (('quoteleft', 'one'), -40), (('one', 'quoteright'), -60), (('quoteright', 'one'), -40), (('one', 'quotesinglbase'), -30), (('quotesinglbase', 'one'), -30), (('one', 'quotesingle'), -80), (('quotesingle', 'one'), -20), (('one', 'ring'), -60), (('ring', 'one'), -40), (('one', 'ringacute'), -60), (('ringacute', 'one'), -40), (('one', 'ringhalfleftmod'), -60), (('ringhalfleftmod', 'one'), -40), (('one', 'ringhalfrightmod'), -60), (('ringhalfrightmod', 'one'), -40), (('one', 'second'), -60), (('second', 'one'), -40), (('one', 'slash'), -30), (('slash', 'one'), -40), (('one', 'slash.case'), -30), (('slash.case', 'one'), -40), (('one', 'tilde'), -60), (('tilde', 'one'), -40), (('one', 'trademark'), -60), (('trademark', 'one'), -40), (('one', 'underscore'), -30), (('underscore', 'one'), -30), (('one', 'verticallinelowmod'), -30), (('verticallinelowmod', 'one'), -30), (('one', 'verticallinemod'), -60), (('verticallinemod', 'one'), -40)], 'seven': [ (('A', 'seven'), -50), (('Aacute', 'seven'), -50), (('Abreve', 'seven'), -50), (('Abreveacute', 'seven'), -50), (('Abrevedot', 'seven'), -50), (('Abrevegrave', 'seven'), -50), (('Abrevehook', 'seven'), -50), (('Abrevetilde', 'seven'), -50), (('Acircumflex', 'seven'), -50), (('Acircumflexacute', 'seven'), -50), (('Acircumflexdot', 'seven'), -50), (('Acircumflexgrave', 'seven'), -50), (('Acircumflexhook', 'seven'), -50), (('Acircumflextilde', 'seven'), -50), (('Adieresis', 'seven'), -50), (('Adotbelow', 'seven'), -50), (('Agrave', 'seven'), -50), (('Agravedbl', 'seven'), -50), (('Ahook', 'seven'), -50), (('Ainvertedbreve', 'seven'), -50), (('Amacron', 'seven'), -50), (('Aogonek', 'seven'), -50), (('Aring', 'seven'), -50), (('Aringacute', 'seven'), -50), (('Atilde', 'seven'), -50), (('B', 'seven'), -20), (('Beta', 'seven'), -20), (('seven', 'C'), -20), (('C', 'seven'), -20), (('seven', 'Cacute'), -20), (('Cacute', 'seven'), -20), (('seven', 'Ccaron'), -20), (('Ccaron', 'seven'), -20), (('seven', 'Ccedilla'), -20), (('Ccedilla', 'seven'), -20), (('seven', 'Ccedillaacute'), -20), (('Ccedillaacute', 'seven'), -20), (('seven', 'Ccircumflex'), -20), (('Ccircumflex', 'seven'), -20), (('seven', 'Cdotaccent'), -20), (('Cdotaccent', 'seven'), -20), (('D', 'seven'), -30), (('Dcaron', 'seven'), -30), (('Dcroat', 'seven'), -30), (('Ddotbelow', 'seven'), -30), (('Dlinebelow', 'seven'), -30), (('Eth', 'seven'), -30), (('seven', 'G'), -20), (('G', 'seven'), -30), (('seven', 'Gbreve'), -20), (('Gbreve', 'seven'), -30), (('seven', 'Gcaron'), -20), (('Gcaron', 'seven'), -30), (('seven', 'Gcircumflex'), -20), (('Gcircumflex', 'seven'), -30), (('seven', 'Gcommaaccent'), -20), (('Gcommaaccent', 'seven'), -30), (('seven', 'Gdotaccent'), -20), (('Gdotaccent', 'seven'), -30), (('Germandbls', 'seven'), -20), (('seven', 'Gmacron'), -20), (('Gmacron', 'seven'), -30), (('K', 'seven'), -20), (('Kcommaaccent', 'seven'), -20), (('M', 'seven'), -20), (('Mdotbelow', 'seven'), -20), (('seven', 'O'), -20), (('O', 'seven'), -30), (('seven', 'OE'), -20), (('seven', 'Oacute'), -20), (('Oacute', 'seven'), -30), (('seven', 'Obreve'), -20), (('Obreve', 'seven'), -30), (('seven', 'Ocircumflex'), -20), (('Ocircumflex', 'seven'), -30), (('seven', 'Ocircumflexacute'), -20), (('Ocircumflexacute', 'seven'), -30), (('seven', 'Ocircumflexdot'), -20), (('Ocircumflexdot', 'seven'), -30), (('seven', 'Ocircumflexgrave'), -20), (('Ocircumflexgrave', 'seven'), -30), (('seven', 'Ocircumflexhook'), -20), (('Ocircumflexhook', 'seven'), -30), (('seven', 'Ocircumflextilde'), -20), (('Ocircumflextilde', 'seven'), -30), (('seven', 'Odieresis'), -20), (('Odieresis', 'seven'), -30), (('seven', 'Odieresismacron'), -20), (('Odieresismacron', 'seven'), -30), (('seven', 'Odotbelow'), -20), (('Odotbelow', 'seven'), -30), (('seven', 'Odotmacron'), -20), (('Odotmacron', 'seven'), -30), (('seven', 'Ograve'), -20), (('Ograve', 'seven'), -30), (('seven', 'Ogravedbl'), -20), (('Ogravedbl', 'seven'), -30), (('seven', 'Ohook'), -20), (('Ohook', 'seven'), -30), (('seven', 'Ohorn'), -20), (('Ohorn', 'seven'), -30), (('seven', 'Ohornacute'), -20), (('Ohornacute', 'seven'), -30), (('seven', 'Ohorndot'), -20), (('Ohorndot', 'seven'), -30), (('seven', 'Ohorngrave'), -20), (('Ohorngrave', 'seven'), -30), (('seven', 'Ohornhook'), -20), (('Ohornhook', 'seven'), -30), (('seven', 'Ohorntilde'), -20), (('Ohorntilde', 'seven'), -30), (('seven', 'Ohungarumlaut'), -20), (('Ohungarumlaut', 'seven'), -30), (('seven', 'Oinvertedbreve'), -20), (('Oinvertedbreve', 'seven'), -30), (('seven', 'Omacron'), -20), (('Omacron', 'seven'), -30), (('seven', 'Omacronacute'), -20), (('Omacronacute', 'seven'), -30), (('seven', 'Omacrongrave'), -20), (('Omacrongrave', 'seven'), -30), (('seven', 'Oogonek'), -20), (('Oogonek', 'seven'), -30), (('seven', 'Oslash'), -20), (('Oslash', 'seven'), -30), (('seven', 'Oslashacute'), -20), (('Oslashacute', 'seven'), -30), (('seven', 'Otilde'), -20), (('Otilde', 'seven'), -30), (('seven', 'Otildeacute'), -20), (('Otildeacute', 'seven'), -30), (('seven', 'Otildedieresis'), -20), (('Otildedieresis', 'seven'), -30), (('seven', 'Otildemacron'), -20), (('Otildemacron', 'seven'), -30), (('P', 'seven'), -30), (('seven', 'Q'), -20), (('Q', 'seven'), -30), (('seven', 'Q.titl'), -20), (('R', 'seven'), -20), (('Racute', 'seven'), -20), (('Rcaron', 'seven'), -20), (('Rcommaaccent', 'seven'), -20), (('Rdotbelow', 'seven'), -20), (('Rgravedbl', 'seven'), -20), (('Rinvertedbreve', 'seven'), -20), (('Rlinebelow', 'seven'), -20), (('Schwa', 'seven'), -30), (('T', 'seven'), -30), (('Tbar', 'seven'), -30), (('Tcaron', 'seven'), -30), (('Tcedilla', 'seven'), -30), (('Tcommaaccent', 'seven'), -30), (('Tdotbelow', 'seven'), -30), (('Tlinebelow', 'seven'), -30), (('X', 'seven'), -20), (('Y', 'seven'), -40), (('Yacute', 'seven'), -40), (('Ycircumflex', 'seven'), -40), (('Ydieresis', 'seven'), -40), (('Ydot', 'seven'), -40), (('Ydotbelow', 'seven'), -40), (('Ygrave', 'seven'), -40), (('Yhookabove', 'seven'), -40), (('Ymacron', 'seven'), -40), (('Ytilde', 'seven'), -40), (('a', 'seven'), -30), (('a.simple', 'seven'), -30), (('aacute', 'seven'), -30), (('aacute.simple', 'seven'), -30), (('abreve', 'seven'), -30), (('abreve.simple', 'seven'), -30), (('abreveacute', 'seven'), -30), (('abreveacute.simple', 'seven'), -30), (('abrevedot', 'seven'), -30), (('abrevedot.simple', 'seven'), -30), (('abrevegrave', 'seven'), -30), (('abrevegrave.simple', 'seven'), -30), (('abrevehook', 'seven'), -30), (('abrevehook.simple', 'seven'), -30), (('abrevetilde', 'seven'), -30), (('abrevetilde.simple', 'seven'), -30), (('acircumflex', 'seven'), -30), (('acircumflex.simple', 'seven'), -30), (('acircumflexacute', 'seven'), -30), (('acircumflexacute.simple', 'seven'), -30), (('acircumflexdot', 'seven'), -30), (('acircumflexdot.simple', 'seven'), -30), (('acircumflexgrave', 'seven'), -30), (('acircumflexgrave.simple', 'seven'), -30), (('acircumflexhook', 'seven'), -30), (('acircumflexhook.simple', 'seven'), -30), (('acircumflextilde', 'seven'), -30), (('acircumflextilde.simple', 'seven'), -30), (('adieresis', 'seven'), -30), (('adieresis.simple', 'seven'), -30), (('adotbelow', 'seven'), -30), (('adotbelow.simple', 'seven'), -30), (('ae', 'seven'), -30), (('aeacute', 'seven'), -30), (('agrave', 'seven'), -30), (('agrave.simple', 'seven'), -30), (('agravedbl', 'seven'), -30), (('ahook', 'seven'), -30), (('ahook.simple', 'seven'), -30), (('ainvertedbreve', 'seven'), -30), (('amacron', 'seven'), -30), (('amacron.simple', 'seven'), -30), (('aogonek', 'seven'), -30), (('aogonek.simple', 'seven'), -30), (('apostrophemod', 'seven'), -20), (('aring', 'seven'), -30), (('aring.simple', 'seven'), -30), (('aringacute', 'seven'), -30), (('aringacute.simple', 'seven'), -30), (('seven', 'at'), -70), (('at', 'seven'), -30), (('atilde', 'seven'), -30), (('atilde.simple', 'seven'), -30), (('b', 'seven'), -30), (('b.italic', 'seven'), -30), (('b.italic_191117-17_02', 'seven'), -30), (('seven', 'backslash'), -20), (('backslash', 'seven'), -120), (('seven', 'backslash.case'), -20), (('backslash.case', 'seven'), -120), (('beta', 'seven'), -20), (('bitcoin', 'seven'), -20), (('braceleft', 'seven'), -40), (('braceleft.case', 'seven'), -40), (('seven', 'braceright'), -40), (('seven', 'braceright.case'), -40), (('seven', 'breve'), -20), (('breve', 'seven'), -20), (('seven', 'caron'), -20), (('caron', 'seven'), -20), (('seven', 'cedi'), -20), (('seven', 'circumflex'), -20), (('circumflex', 'seven'), -20), (('seven', 'colonmonetary'), -20), (('colonmonetary', 'seven'), -20), (('seven', 'comma'), -150), (('comma', 'seven'), -120), (('seven', 'commaturnedmod'), -20), (('commaturnedmod', 'seven'), -20), (('seven', 'degree'), -20), (('degree', 'seven'), -20), (('seven', 'dieresis'), -20), (('dieresis', 'seven'), -20), (('seven', 'dotaccent'), -20), (('dotaccent', 'seven'), -20), (('e', 'seven'), -30), (('e.italic', 'seven'), -30), (('eacute', 'seven'), -30), (('eacute.italic', 'seven'), -30), (('ebreve', 'seven'), -30), (('ebreve.italic', 'seven'), -30), (('ecaron', 'seven'), -30), (('ecaron.italic', 'seven'), -30), (('ecedillabreve', 'seven'), -30), (('ecedillabreve.italic', 'seven'), -30), (('ecircumflex', 'seven'), -30), (('ecircumflex.italic', 'seven'), -30), (('ecircumflexacute', 'seven'), -30), (('ecircumflexacute.italic', 'seven'), -30), (('ecircumflexdot', 'seven'), -30), (('ecircumflexdot.italic', 'seven'), -30), (('ecircumflexgrave', 'seven'), -30), (('ecircumflexgrave.italic', 'seven'), -30), (('ecircumflexhook', 'seven'), -30), (('ecircumflexhook.italic', 'seven'), -30), (('ecircumflextilde', 'seven'), -30), (('ecircumflextilde.italic', 'seven'), -30), (('edieresis', 'seven'), -30), (('edieresis.italic', 'seven'), -30), (('edotaccent', 'seven'), -30), (('edotaccent.italic', 'seven'), -30), (('edotbelow', 'seven'), -30), (('edotbelow.italic', 'seven'), -30), (('egrave', 'seven'), -30), (('egrave.italic', 'seven'), -30), (('egravedbl', 'seven'), -30), (('egravedbl.italic', 'seven'), -30), (('ehook', 'seven'), -30), (('ehook.italic', 'seven'), -30), (('einvertedbreve', 'seven'), -30), (('einvertedbreve.italic', 'seven'), -30), (('seven', 'ellipsis'), -150), (('ellipsis', 'seven'), -120), (('emacron', 'seven'), -30), (('emacron.italic', 'seven'), -30), (('emacronacute', 'seven'), -30), (('emacronacute.italic', 'seven'), -30), (('emacrongrave', 'seven'), -30), (('emacrongrave.italic', 'seven'), -30), (('eng', 'seven'), -10), (('eogonek', 'seven'), -30), (('eogonek.italic', 'seven'), -30), (('eth', 'seven'), -30), (('etilde', 'seven'), -30), (('etilde.italic', 'seven'), -30), (('seven', 'four'), -30), (('seven', 'fraction'), -150), (('fraction', 'seven'), -20), (('germandbls', 'seven'), -20), (('grave', 'seven'), -20), (('seven', 'guarani'), -20), (('h', 'seven'), -10), (('h.italic', 'seven'), -10), (('hbar', 'seven'), -10), (('hbrevebelow', 'seven'), -10), (('hbrevebelow.italic', 'seven'), -10), (('hcircumflex', 'seven'), -10), (('hcircumflex.italic', 'seven'), -10), (('hdotbelow', 'seven'), -10), (('hdotbelow.italic', 'seven'), -10), (('hungarumlaut', 'seven'), -20), (('k', 'seven'), -30), (('k.italic', 'seven'), -30), (('kcommaaccent', 'seven'), -30), (('kcommaaccent.italic', 'seven'), -30), (('kgreenlandic', 'seven'), -30), (('m', 'seven'), -10), (('m.italic', 'seven'), -10), (('seven', 'macron'), -20), (('macron', 'seven'), -20), (('seven', 'macronmod'), -20), (('macronmod', 'seven'), -20), (('mdotbelow', 'seven'), -10), (('mdotbelow.italic', 'seven'), -10), (('seven', 'minus'), -20), (('seven', 'minute'), -20), (('minute', 'seven'), -20), (('n', 'seven'), -10), (('n.italic', 'seven'), -10), (('nacute', 'seven'), -10), (('nacute.italic', 'seven'), -10), (('napostrophe', 'seven'), -10), (('napostrophe.italic', 'seven'), -10), (('ncaron', 'seven'), -10), (('ncaron.italic', 'seven'), -10), (('ncommaaccent', 'seven'), -10), (('ncommaaccent.italic', 'seven'), -10), (('ndot', 'seven'), -10), (('ndot.italic', 'seven'), -10), (('ndotbelow', 'seven'), -10), (('ndotbelow.italic', 'seven'), -10), (('nhookleft', 'seven'), -10), (('nlinebelow', 'seven'), -10), (('nlinebelow.italic', 'seven'), -10), (('ntilde', 'seven'), -10), (('ntilde.italic', 'seven'), -10), (('o', 'seven'), -30), (('oacute', 'seven'), -30), (('obreve', 'seven'), -30), (('ocircumflex', 'seven'), -30), (('ocircumflexacute', 'seven'), -30), (('ocircumflexdot', 'seven'), -30), (('ocircumflexgrave', 'seven'), -30), (('ocircumflexhook', 'seven'), -30), (('ocircumflextilde', 'seven'), -30), (('odieresis', 'seven'), -30), (('odieresismacron', 'seven'), -30), (('odotbelow', 'seven'), -30), (('odotmacron', 'seven'), -30), (('oe', 'seven'), -30), (('ograve', 'seven'), -30), (('ogravedbl', 'seven'), -30), (('ohook', 'seven'), -30), (('ohorn', 'seven'), -30), (('ohornacute', 'seven'), -30), (('ohorndot', 'seven'), -30), (('ohorngrave', 'seven'), -30), (('ohornhook', 'seven'), -30), (('ohorntilde', 'seven'), -30), (('ohungarumlaut', 'seven'), -30), (('oinvertedbreve', 'seven'), -30), (('omacron', 'seven'), -30), (('omacronacute', 'seven'), -30), (('omacrongrave', 'seven'), -30), (('oogonek', 'seven'), -30), (('oslash', 'seven'), -30), (('oslashacute', 'seven'), -30), (('otilde', 'seven'), -30), (('otildeacute', 'seven'), -30), (('otildedieresis', 'seven'), -30), (('otildemacron', 'seven'), -30), (('seven', 'overline'), -20), (('overline', 'seven'), -20), (('p', 'seven'), -30), (('seven', 'period'), -150), (('period', 'seven'), -120), (('seven', 'plus'), -20), (('seven', 'primedblmod'), -20), (('primedblmod', 'seven'), -20), (('seven', 'primemod'), -20), (('primemod', 'seven'), -20), (('seven', 'question'), -30), (('questiondown', 'seven'), -120), (('seven', 'quotedbl'), -10), (('quotedbl', 'seven'), -10), (('seven', 'quotedblbase'), -150), (('quotedblbase', 'seven'), -120), (('seven', 'quotedblleft'), -20), (('quotedblleft', 'seven'), -20), (('seven', 'quotedblright'), -20), (('quotedblright', 'seven'), -20), (('seven', 'quoteleft'), -20), (('quoteleft', 'seven'), -20), (('seven', 'quoteright'), -20), (('quoteright', 'seven'), -20), (('seven', 'quotesinglbase'), -150), (('quotesinglbase', 'seven'), -120), (('seven', 'quotesingle'), -10), (('quotesingle', 'seven'), -10), (('seven', 'ring'), -20), (('ring', 'seven'), -20), (('seven', 'ringacute'), -20), (('ringacute', 'seven'), -20), (('seven', 'ringhalfleftmod'), -20), (('ringhalfleftmod', 'seven'), -20), (('seven', 'ringhalfrightmod'), -20), (('ringhalfrightmod', 'seven'), -20), (('schwa', 'seven'), -30), (('seven', 'second'), -20), (('second', 'seven'), -20), (('seven', 'slash'), -150), (('slash', 'seven'), -20), (('seven', 'slash.case'), -150), (('slash.case', 'seven'), -20), (('tenge', 'seven'), -30), (('thai:baht', 'seven'), -20), (('thorn', 'seven'), -30), (('seven', 'tilde'), -20), (('tilde', 'seven'), -20), (('seven', 'trademark'), -20), (('trademark', 'seven'), -20), (('seven', 'underscore'), -150), (('underscore', 'seven'), -120), (('seven', 'verticallinelowmod'), -150), (('verticallinelowmod', 'seven'), -120), (('seven', 'verticallinemod'), -20), (('verticallinemod', 'seven'), -20), (('x', 'seven'), -30), (('x.italic', 'seven'), -30)], 'six': [ (('apostrophemod', 'six'), -60), (('six', 'backslash'), -40), (('backslash', 'six'), -50), (('six', 'backslash.case'), -40), (('backslash.case', 'six'), -50), (('braceleft', 'six'), -40), (('braceleft.case', 'six'), -40), (('six', 'braceright'), -40), (('six', 'braceright.case'), -40), (('bracketleft', 'six'), -30), (('bracketleft.case', 'six'), -30), (('six', 'bracketright'), -30), (('six', 'bracketright.case'), -30), (('six', 'breve'), -40), (('breve', 'six'), -60), (('six', 'caron'), -40), (('caron', 'six'), -60), (('six', 'circumflex'), -40), (('circumflex', 'six'), -60), (('six', 'comma'), -50), (('comma', 'six'), -50), (('six', 'commaturnedmod'), -40), (('commaturnedmod', 'six'), -60), (('six', 'degree'), -40), (('degree', 'six'), -60), (('six', 'dieresis'), -40), (('dieresis', 'six'), -60), (('six', 'dotaccent'), -40), (('dotaccent', 'six'), -60), (('six', 'ellipsis'), -50), (('ellipsis', 'six'), -50), (('six', 'fraction'), -50), (('fraction', 'six'), -60), (('grave', 'six'), -60), (('hungarumlaut', 'six'), -60), (('six', 'macron'), -40), (('macron', 'six'), -60), (('six', 'macronmod'), -40), (('macronmod', 'six'), -60), (('six', 'minus'), -40), (('six', 'minute'), -40), (('minute', 'six'), -60), (('six', 'overline'), -40), (('overline', 'six'), -60), (('parenleft', 'six'), -40), (('parenleft.case', 'six'), -40), (('six', 'parenright'), -30), (('six', 'parenright.case'), -30), (('six', 'period'), -50), (('period', 'six'), -50), (('six', 'plus'), -40), (('six', 'primedblmod'), -40), (('primedblmod', 'six'), -60), (('six', 'primemod'), -40), (('primemod', 'six'), -60), (('six', 'question'), -10), (('questiondown', 'six'), -50), (('six', 'quotedbl'), -40), (('quotedbl', 'six'), -40), (('six', 'quotedblbase'), -50), (('quotedblbase', 'six'), -50), (('six', 'quotedblleft'), -40), (('quotedblleft', 'six'), -60), (('six', 'quotedblright'), -40), (('quotedblright', 'six'), -60), (('six', 'quoteleft'), -40), (('quoteleft', 'six'), -60), (('six', 'quoteright'), -40), (('quoteright', 'six'), -60), (('six', 'quotesinglbase'), -50), (('quotesinglbase', 'six'), -50), (('six', 'quotesingle'), -40), (('quotesingle', 'six'), -40), (('six', 'ring'), -40), (('ring', 'six'), -60), (('six', 'ringacute'), -40), (('ringacute', 'six'), -60), (('six', 'ringhalfleftmod'), -40), (('ringhalfleftmod', 'six'), -60), (('six', 'ringhalfrightmod'), -40), (('ringhalfrightmod', 'six'), -60), (('six', 'second'), -40), (('second', 'six'), -60), (('six', 'slash'), -50), (('slash', 'six'), -60), (('six', 'slash.case'), -50), (('slash.case', 'six'), -60), (('six', 'tilde'), -40), (('tilde', 'six'), -60), (('six', 'trademark'), -40), (('trademark', 'six'), -60), (('six', 'underscore'), -50), (('underscore', 'six'), -50), (('six', 'verticallinelowmod'), -50), (('verticallinelowmod', 'six'), -50), (('six', 'verticallinemod'), -40), (('verticallinemod', 'six'), -60)], 'three': [ (('apostrophemod', 'three'), -50), (('three', 'backslash'), -30), (('backslash', 'three'), -30), (('three', 'backslash.case'), -30), (('backslash.case', 'three'), -30), (('three', 'breve'), -30), (('breve', 'three'), -50), (('three', 'caron'), -30), (('caron', 'three'), -50), (('three', 'circumflex'), -30), (('circumflex', 'three'), -50), (('three', 'comma'), -60), (('comma', 'three'), -30), (('three', 'commaturnedmod'), -30), (('commaturnedmod', 'three'), -50), (('three', 'degree'), -30), (('degree', 'three'), -50), (('three', 'dieresis'), -30), (('dieresis', 'three'), -50), (('three', 'dotaccent'), -30), (('dotaccent', 'three'), -50), (('three', 'ellipsis'), -60), (('ellipsis', 'three'), -30), (('three', 'fraction'), -60), (('fraction', 'three'), -50), (('grave', 'three'), -50), (('hungarumlaut', 'three'), -50), (('three', 'macron'), -30), (('macron', 'three'), -50), (('three', 'macronmod'), -30), (('macronmod', 'three'), -50), (('three', 'minus'), -30), (('three', 'minute'), -30), (('minute', 'three'), -50), (('three', 'overline'), -30), (('overline', 'three'), -50), (('three', 'period'), -60), (('period', 'three'), -30), (('three', 'plus'), -30), (('three', 'primedblmod'), -30), (('primedblmod', 'three'), -50), (('three', 'primemod'), -30), (('primemod', 'three'), -50), (('three', 'question'), -20), (('questiondown', 'three'), -30), (('three', 'quotedbl'), -20), (('quotedbl', 'three'), -50), (('three', 'quotedblbase'), -60), (('quotedblbase', 'three'), -30), (('three', 'quotedblleft'), -30), (('quotedblleft', 'three'), -50), (('three', 'quotedblright'), -30), (('quotedblright', 'three'), -50), (('three', 'quoteleft'), -30), (('quoteleft', 'three'), -50), (('three', 'quoteright'), -30), (('quoteright', 'three'), -50), (('three', 'quotesinglbase'), -60), (('quotesinglbase', 'three'), -30), (('three', 'quotesingle'), -20), (('quotesingle', 'three'), -50), (('three', 'ring'), -30), (('ring', 'three'), -50), (('three', 'ringacute'), -30), (('ringacute', 'three'), -50), (('three', 'ringhalfleftmod'), -30), (('ringhalfleftmod', 'three'), -50), (('three', 'ringhalfrightmod'), -30), (('ringhalfrightmod', 'three'), -50), (('three', 'second'), -30), (('second', 'three'), -50), (('three', 'slash'), -60), (('slash', 'three'), -50), (('three', 'slash.case'), -60), (('slash.case', 'three'), -50), (('three', 'tilde'), -30), (('tilde', 'three'), -50), (('three', 'trademark'), -30), (('trademark', 'three'), -50), (('three', 'underscore'), -60), (('underscore', 'three'), -30), (('three', 'verticallinelowmod'), -60), (('verticallinelowmod', 'three'), -30), (('three', 'verticallinemod'), -30), (('verticallinemod', 'three'), -50)], 'two': [ (('apostrophemod', 'two'), -60), (('two', 'backslash'), -30), (('backslash', 'two'), -40), (('two', 'backslash.case'), -30), (('backslash.case', 'two'), -40), (('braceleft', 'two'), -30), (('braceleft.case', 'two'), -30), (('two', 'braceright'), -30), (('two', 'braceright.case'), -30), (('two', 'breve'), -30), (('breve', 'two'), -60), (('two', 'caron'), -30), (('caron', 'two'), -60), (('two', 'circumflex'), -30), (('circumflex', 'two'), -60), (('two', 'comma'), -20), (('comma', 'two'), -40), (('two', 'commaturnedmod'), -30), (('commaturnedmod', 'two'), -60), (('two', 'degree'), -30), (('degree', 'two'), -60), (('two', 'dieresis'), -30), (('dieresis', 'two'), -60), (('two', 'dotaccent'), -30), (('dotaccent', 'two'), -60), (('two', 'ellipsis'), -20), (('ellipsis', 'two'), -40), (('two', 'fraction'), -20), (('fraction', 'two'), -60), (('grave', 'two'), -60), (('hungarumlaut', 'two'), -60), (('two', 'macron'), -30), (('macron', 'two'), -60), (('two', 'macronmod'), -30), (('macronmod', 'two'), -60), (('two', 'minus'), -30), (('two', 'minute'), -30), (('minute', 'two'), -60), (('two', 'overline'), -30), (('overline', 'two'), -60), (('two', 'period'), -20), (('period', 'two'), -40), (('two', 'plus'), -30), (('two', 'primedblmod'), -30), (('primedblmod', 'two'), -60), (('two', 'primemod'), -30), (('primemod', 'two'), -60), (('two', 'question'), -40), (('questiondown', 'two'), -30), (('two', 'quotedbl'), -30), (('quotedbl', 'two'), -50), (('two', 'quotedblbase'), -20), (('quotedblbase', 'two'), -40), (('two', 'quotedblleft'), -30), (('quotedblleft', 'two'), -60), (('two', 'quotedblright'), -30), (('quotedblright', 'two'), -60), (('two', 'quoteleft'), -30), (('quoteleft', 'two'), -60), (('two', 'quoteright'), -30), (('quoteright', 'two'), -60), (('two', 'quotesinglbase'), -20), (('quotesinglbase', 'two'), -40), (('two', 'quotesingle'), -30), (('quotesingle', 'two'), -50), (('two', 'ring'), -30), (('ring', 'two'), -60), (('two', 'ringacute'), -30), (('ringacute', 'two'), -60), (('two', 'ringhalfleftmod'), -30), (('ringhalfleftmod', 'two'), -60), (('two', 'ringhalfrightmod'), -30), (('ringhalfrightmod', 'two'), -60), (('two', 'second'), -30), (('second', 'two'), -60), (('two', 'slash'), -20), (('slash', 'two'), -60), (('two', 'slash.case'), -20), (('slash.case', 'two'), -60), (('two', 'tilde'), -30), (('tilde', 'two'), -60), (('two', 'trademark'), -30), (('trademark', 'two'), -60), (('two', 'underscore'), -20), (('underscore', 'two'), -40), (('two', 'verticallinelowmod'), -20), (('verticallinelowmod', 'two'), -40), (('two', 'verticallinemod'), -30), (('verticallinemod', 'two'), -60)], 'zero': [ (('apostrophemod', 'zero'), -60), (('zero', 'backslash'), -10), (('backslash', 'zero'), -50), (('zero', 'backslash.case'), -10), (('backslash.case', 'zero'), -50), (('braceleft', 'zero'), -40), (('braceleft.case', 'zero'), -40), (('zero', 'braceright'), -50), (('zero', 'braceright.case'), -50), (('bracketleft', 'zero'), -30), (('bracketleft.case', 'zero'), -30), (('zero', 'bracketright'), -20), (('zero', 'bracketright.case'), -20), (('zero', 'breve'), -10), (('breve', 'zero'), -60), (('zero', 'caron'), -10), (('caron', 'zero'), -60), (('zero', 'circumflex'), -10), (('circumflex', 'zero'), -60), (('zero', 'comma'), -70), (('comma', 'zero'), -50), (('zero', 'commaturnedmod'), -10), (('commaturnedmod', 'zero'), -60), (('zero', 'degree'), -10), (('degree', 'zero'), -60), (('zero', 'dieresis'), -10), (('dieresis', 'zero'), -60), (('zero', 'dotaccent'), -10), (('dotaccent', 'zero'), -60), (('zero', 'ellipsis'), -70), (('ellipsis', 'zero'), -50), (('zero', 'fraction'), -70), (('fraction', 'zero'), -60), (('grave', 'zero'), -60), (('hungarumlaut', 'zero'), -60), (('zero', 'macron'), -10), (('macron', 'zero'), -60), (('zero', 'macronmod'), -10), (('macronmod', 'zero'), -60), (('zero', 'minus'), -10), (('zero', 'minute'), -10), (('minute', 'zero'), -60), (('zero', 'overline'), -10), (('overline', 'zero'), -60), (('parenleft', 'zero'), -40), (('parenleft.case', 'zero'), -40), (('zero', 'parenright'), -30), (('zero', 'parenright.case'), -30), (('zero', 'period'), -70), (('period', 'zero'), -50), (('zero', 'plus'), -10), (('zero', 'primedblmod'), -10), (('primedblmod', 'zero'), -60), (('zero', 'primemod'), -10), (('primemod', 'zero'), -60), (('zero', 'question'), -30), (('questiondown', 'zero'), -50), (('zero', 'quotedbl'), -30), (('quotedbl', 'zero'), -40), (('zero', 'quotedblbase'), -70), (('quotedblbase', 'zero'), -50), (('zero', 'quotedblleft'), -10), (('quotedblleft', 'zero'), -60), (('zero', 'quotedblright'), -10), (('quotedblright', 'zero'), -60), (('zero', 'quoteleft'), -10), (('quoteleft', 'zero'), -60), (('zero', 'quoteright'), -10), (('quoteright', 'zero'), -60), (('zero', 'quotesinglbase'), -70), (('quotesinglbase', 'zero'), -50), (('zero', 'quotesingle'), -30), (('quotesingle', 'zero'), -40), (('zero', 'ring'), -10), (('ring', 'zero'), -60), (('zero', 'ringacute'), -10), (('ringacute', 'zero'), -60), (('zero', 'ringhalfleftmod'), -10), (('ringhalfleftmod', 'zero'), -60), (('zero', 'ringhalfrightmod'), -10), (('ringhalfrightmod', 'zero'), -60), (('zero', 'second'), -10), (('second', 'zero'), -60), (('zero', 'slash'), -70), (('slash', 'zero'), -60), (('zero', 'slash.case'), -70), (('slash.case', 'zero'), -60), (('zero', 'tilde'), -10), (('tilde', 'zero'), -60), (('zero', 'trademark'), -10), (('trademark', 'zero'), -60), (('zero', 'underscore'), -70), (('underscore', 'zero'), -50), (('zero', 'verticallinelowmod'), -70), (('verticallinelowmod', 'zero'), -50), (('zero', 'verticallinemod'), -10), (('verticallinemod', 'zero'), -60)]} ```
arrowtype commented 3 years ago

I’ve realized the fairly obvious solution here: make .pnum figures, then map kerning to those. Then, remove kerning from default figures.

This is better than making new tnum figures without kerning, because the default characters already look tabular, and having tabular-by-default characters fits in with the spirit of this project.