diff --git a/Makefile b/Makefile
index 30f63be79..741408111 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,8 @@ VERSION := $(shell misc/version.py)
# all styles and alias targets
include build/etc/generated.make
-res_files := src/fontbuild.cfg src/diacritics.txt src/glyphlist.txt src/glyphorder.txt
+res_files := src/fontbuild.cfg src/diacritics.txt src/glyphlist.txt \
+ src/glyphorder.txt src/features.fea
# UFO -> TTF & OTF (note that UFO deps are defined by generated.make)
build/tmp/InterfaceTTF/Interface-%.ttf: $(res_files)
diff --git a/docs/lab/index.html b/docs/lab/index.html
index 0bd963634..9bf69b46e 100644
--- a/docs/lab/index.html
+++ b/docs/lab/index.html
@@ -108,23 +108,10 @@ e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 eA eB eC eD eE eF ea eb ec ed ee ef
f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fA fB fC fD fE fF fa fb fc fd fe ff
`)
-samples.set('Kerning wip', `
-Var Vcr Vdlav Verify Vgi Vox Vqms
-var vcr vdlav verify vgi vox vqms
-Yar Ycr Ydlav Year Ygi Yox Yqms
-yar ycr ydlav year ygi yox yqms
-// \\\\ A\\ VA VJ V/ WA WJ W/ \\W \\w \\V \\v
-AV AW Av Aw WAV WAW wav waw Wav Waw
-FF3345 FA3345 FA8 7F6544 7A6544
-far fcr fdlav fear fgi fox fqms
-Far Fcr Fdlav Fear Fgi Fox Fqms
-Ear Ecr Edlav Eear Egi Eox Eqms
-AO AU AT AY BT BY CT ET Ec
-".x." '.x.' ‘.x.’ “.x.” x.‛ x.‟
-",x," ',x,' ‘,x,’ “,x,” x,‛ x,‟
-L" L' L’ L” L‛ L‟
-version (s -><- i)
-Viewed (e -><- w)
+samples.set('Contextual alternates', `
+(m) (M) (6)
+[m] [M] [6]
+{m} {M} {6}
`)
// From http://justanotherfoundry.com/generator
@@ -155,7 +142,21 @@ ji ug um ob ns dz qe sn hr ap uh ea rc nt yu ae oj zj ud js fu pu cl vs gg
`)
-samples.set('Kerning German sample', `
+samples.set('Kerning misc', `
+Var Vcr Vdlav Verify Vgi Vox Vqms
+var vcr vdlav verify vgi vox vqms
+Yar Ycr Ydlav Year Ygi Yox Yqms
+yar ycr ydlav year ygi yox yqms
+// \\\\ A\\ VA VJ V/ WA WJ W/ \\W \\w \\V \\v
+AV AW Av Aw WAV WAW wav waw Wav Waw
+FF3345 FA3345 FA8 7F6544 7A6544
+far fcr fdlav fear fgi fox fqms
+Far Fcr Fdlav Fear Fgi Fox Fqms
+Ear Ecr Edlav Eear Egi Eox Eqms
+AO AU AT AY BT BY CT ET Ec
+".x." '.x.' ‘.x.’ “.x.” x.‛ x.‟
+",x," ',x,' ‘,x,’ “,x,” x,‛ x,‟
+L" L' L’ L” L‛ L‟
aufkauf aufhalt aufbleib
ver/fl ixt auflassen
ho/f_f e auffassen
@@ -715,14 +716,15 @@ h2 {
width: 275px;
box-sizing:border-box;
position:fixed;
- top:0; right:0; bottom:-1000px;
+ top:0; right:0; bottom:0;
background:#f4f4f4;
border-left:1px solid #ddd;
- border-bottom:1px solid rgba(0,0,0,0.15);
- margin-bottom:24px;
+ /*border-bottom:1px solid rgba(0,0,0,0.15);*/
+ /*margin-bottom:24px;*/
padding: 24px;
user-select:none;
font-family: sans-serif !important;
+ overflow: auto;
}
.options > * {
display: block;
@@ -1082,21 +1084,23 @@ document.head.appendChild(fontCSS)
Features:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
* currently implemented
@@ -1580,9 +1584,10 @@ function main() {
let features = new Set()
for (let e of Array.prototype.slice.call(document.querySelectorAll('input.featopt'))) {
- let feat = e.name.replace(/^feat\:/, '')
- vars.bind('feat-' + feat, e, (e, on) => {
- let val = '"'+feat+'" 1'
+ let p = e.name.replace(/^feat\:/, '').split('=')
+ let name = p[0], value = p[1] || '1'
+ vars.bind('feat-' + name, e, (e, on) => {
+ let val = '"' + name + '" ' + value
if (on) {
features.add(val)
} else {
diff --git a/src/Interface-Bold.ufo/glyphs/braceleft.cap.glif b/src/Interface-Bold.ufo/glyphs/braceleft.cap.glif
new file mode 100644
index 000000000..2ca6681ec
--- /dev/null
+++ b/src/Interface-Bold.ufo/glyphs/braceleft.cap.glif
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.gridadjust.original
+ {'width': 920, 'leftMargin': 59, 'rightMargin': 52}
+
+
+
diff --git a/src/Interface-Bold.ufo/glyphs/braceright.cap.glif b/src/Interface-Bold.ufo/glyphs/braceright.cap.glif
new file mode 100644
index 000000000..ce4fcee57
--- /dev/null
+++ b/src/Interface-Bold.ufo/glyphs/braceright.cap.glif
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.gridadjust.original
+ {'width': 920, 'leftMargin': 54, 'rightMargin': 58}
+
+
+
diff --git a/src/Interface-Bold.ufo/glyphs/braceright.glif b/src/Interface-Bold.ufo/glyphs/braceright.glif
index 952a4dda6..e8ef88c26 100644
--- a/src/Interface-Bold.ufo/glyphs/braceright.glif
+++ b/src/Interface-Bold.ufo/glyphs/braceright.glif
@@ -3,42 +3,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/Interface-Bold.ufo/glyphs/bracketleft.cap.glif b/src/Interface-Bold.ufo/glyphs/bracketleft.cap.glif
new file mode 100644
index 000000000..63d4d79be
--- /dev/null
+++ b/src/Interface-Bold.ufo/glyphs/bracketleft.cap.glif
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.gridadjust.original
+ {'width': 791, 'leftMargin': 154, 'rightMargin': 20}
+
+
+
diff --git a/src/Interface-Bold.ufo/glyphs/bracketleft.glif b/src/Interface-Bold.ufo/glyphs/bracketleft.glif
index f516afe09..608bc00fe 100644
--- a/src/Interface-Bold.ufo/glyphs/bracketleft.glif
+++ b/src/Interface-Bold.ufo/glyphs/bracketleft.glif
@@ -5,8 +5,8 @@
-
-
+
+
diff --git a/src/Interface-Bold.ufo/glyphs/bracketright.cap.glif b/src/Interface-Bold.ufo/glyphs/bracketright.cap.glif
new file mode 100644
index 000000000..4188085f5
--- /dev/null
+++ b/src/Interface-Bold.ufo/glyphs/bracketright.cap.glif
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.gridadjust.original
+ {'width': 791, 'leftMargin': 19, 'rightMargin': 154}
+
+
+
diff --git a/src/Interface-Bold.ufo/glyphs/bracketright.glif b/src/Interface-Bold.ufo/glyphs/bracketright.glif
index eebd60f1d..da6815542 100644
--- a/src/Interface-Bold.ufo/glyphs/bracketright.glif
+++ b/src/Interface-Bold.ufo/glyphs/bracketright.glif
@@ -1,18 +1,9 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/Interface-Bold.ufo/glyphs/contents.plist b/src/Interface-Bold.ufo/glyphs/contents.plist
index 1c4787244..383e06bcb 100644
--- a/src/Interface-Bold.ufo/glyphs/contents.plist
+++ b/src/Interface-Bold.ufo/glyphs/contents.plist
@@ -468,12 +468,20 @@
blackleftpointingtriangle.glif
braceleft
braceleft.glif
+ braceleft.cap
+ braceleft.cap.glif
braceright
braceright.glif
+ braceright.cap
+ braceright.cap.glif
bracketleft
bracketleft.glif
+ bracketleft.cap
+ bracketleft.cap.glif
bracketright
bracketright.glif
+ bracketright.cap
+ bracketright.cap.glif
breve
breve.glif
breveacutecomb
@@ -1316,12 +1324,16 @@
paragraph.glif
parenleft
parenleft.glif
+ parenleft.cap
+ parenleft.cap.glif
parenleftinferior
parenleftinferior.glif
parenleftsuperior
parenleftsuperior.glif
parenright
parenright.glif
+ parenright.cap
+ parenright.cap.glif
parenrightsub
parenrightsub.glif
parenrightsuperior
diff --git a/src/Interface-Bold.ufo/glyphs/parenleft.cap.glif b/src/Interface-Bold.ufo/glyphs/parenleft.cap.glif
new file mode 100644
index 000000000..29f4a0247
--- /dev/null
+++ b/src/Interface-Bold.ufo/glyphs/parenleft.cap.glif
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.guides
+
+
+ angle
+ 0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 1096
+ y
+ 1640
+
+
+ angle
+ 0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 804
+ y
+ 1752
+
+
+ angle
+ 90.0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 364
+ y
+ 1692
+
+
+ angle
+ 90.0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 656
+ y
+ 1584
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.gridadjust.original
+ {'width': 993, 'leftMargin': 168, 'rightMargin': 55}
+
+
+
diff --git a/src/Interface-Bold.ufo/glyphs/parenright.cap.glif b/src/Interface-Bold.ufo/glyphs/parenright.cap.glif
new file mode 100644
index 000000000..3119a85d4
--- /dev/null
+++ b/src/Interface-Bold.ufo/glyphs/parenright.cap.glif
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.guides
+
+
+ angle
+ 0.0
+ isGlobal
+
+ magnetic
+ 5
+ x
+ 0.0
+ y
+ 1238.875
+
+
+ angle
+ 0.0
+ isGlobal
+
+ magnetic
+ 5
+ x
+ 0.0
+ y
+ 763.125
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.gridadjust.original
+ {'width': 993, 'leftMargin': 55, 'rightMargin': 139}
+
+
+
diff --git a/src/Interface-Bold.ufo/lib.plist b/src/Interface-Bold.ufo/lib.plist
index c8ce58c4a..fd11f94ae 100644
--- a/src/Interface-Bold.ufo/lib.plist
+++ b/src/Interface-Bold.ufo/lib.plist
@@ -508,11 +508,17 @@
question
questiondown
parenleft
+ parenleft.cap
parenright
+ parenright.cap
bracketleft
+ bracketleft.cap
bracketright
+ bracketright.cap
braceleft
+ braceleft.cap
braceright
+ braceright.cap
at
numbersign
currency
@@ -2705,11 +2711,17 @@
question
questiondown
parenleft
+ parenleft.cap
parenright
+ parenright.cap
bracketleft
+ bracketleft.cap
bracketright
+ bracketright.cap
braceleft
+ braceleft.cap
braceright
+ braceright.cap
at
numbersign
currency
diff --git a/src/Interface-Regular.ufo/glyphs/braceleft.cap.glif b/src/Interface-Regular.ufo/glyphs/braceleft.cap.glif
new file mode 100644
index 000000000..bf5f8c93c
--- /dev/null
+++ b/src/Interface-Regular.ufo/glyphs/braceleft.cap.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+
+
+
diff --git a/src/Interface-Regular.ufo/glyphs/braceright.cap.glif b/src/Interface-Regular.ufo/glyphs/braceright.cap.glif
new file mode 100644
index 000000000..2d0f0ab51
--- /dev/null
+++ b/src/Interface-Regular.ufo/glyphs/braceright.cap.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+
+
+
diff --git a/src/Interface-Regular.ufo/glyphs/braceright.glif b/src/Interface-Regular.ufo/glyphs/braceright.glif
index 84aa0521e..df81bd622 100644
--- a/src/Interface-Regular.ufo/glyphs/braceright.glif
+++ b/src/Interface-Regular.ufo/glyphs/braceright.glif
@@ -3,42 +3,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/Interface-Regular.ufo/glyphs/bracketleft.cap.glif b/src/Interface-Regular.ufo/glyphs/bracketleft.cap.glif
new file mode 100644
index 000000000..e80b0f206
--- /dev/null
+++ b/src/Interface-Regular.ufo/glyphs/bracketleft.cap.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+
+
+
diff --git a/src/Interface-Regular.ufo/glyphs/bracketleft.glif b/src/Interface-Regular.ufo/glyphs/bracketleft.glif
index ad412f0b0..f7676ceb4 100644
--- a/src/Interface-Regular.ufo/glyphs/bracketleft.glif
+++ b/src/Interface-Regular.ufo/glyphs/bracketleft.glif
@@ -4,14 +4,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/src/Interface-Regular.ufo/glyphs/bracketright.cap.glif b/src/Interface-Regular.ufo/glyphs/bracketright.cap.glif
new file mode 100644
index 000000000..6de1774f3
--- /dev/null
+++ b/src/Interface-Regular.ufo/glyphs/bracketright.cap.glif
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+
+
+
diff --git a/src/Interface-Regular.ufo/glyphs/bracketright.glif b/src/Interface-Regular.ufo/glyphs/bracketright.glif
index 9b5de38ae..273bbd4a3 100644
--- a/src/Interface-Regular.ufo/glyphs/bracketright.glif
+++ b/src/Interface-Regular.ufo/glyphs/bracketright.glif
@@ -3,16 +3,7 @@
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/Interface-Regular.ufo/glyphs/contents.plist b/src/Interface-Regular.ufo/glyphs/contents.plist
index 075f9e5ce..af81fdc79 100644
--- a/src/Interface-Regular.ufo/glyphs/contents.plist
+++ b/src/Interface-Regular.ufo/glyphs/contents.plist
@@ -468,12 +468,20 @@
blackleftpointingtriangle.glif
braceleft
braceleft.glif
+ braceleft.cap
+ braceleft.cap.glif
braceright
braceright.glif
+ braceright.cap
+ braceright.cap.glif
bracketleft
bracketleft.glif
+ bracketleft.cap
+ bracketleft.cap.glif
bracketright
bracketright.glif
+ bracketright.cap
+ bracketright.cap.glif
breve
breve.glif
breveacutecomb
@@ -1314,12 +1322,16 @@
paragraph.glif
parenleft
parenleft.glif
+ parenleft.cap
+ parenleft.cap.glif
parenleftinferior
parenleftinferior.glif
parenleftsuperior
parenleftsuperior.glif
parenright
parenright.glif
+ parenright.cap
+ parenright.cap.glif
parenrightsub
parenrightsub.glif
parenrightsuperior
diff --git a/src/Interface-Regular.ufo/glyphs/parenleft.cap.glif b/src/Interface-Regular.ufo/glyphs/parenleft.cap.glif
new file mode 100644
index 000000000..cf436bdfa
--- /dev/null
+++ b/src/Interface-Regular.ufo/glyphs/parenleft.cap.glif
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.guides
+
+
+ angle
+ 90.0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 384
+ y
+ -128
+
+
+ angle
+ 90.0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 584
+ y
+ 4
+
+
+ angle
+ 0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 388
+ y
+ 1752
+
+
+ angle
+ 0
+ isGlobal
+
+ magnetic
+ 5
+ name
+
+ x
+ 556
+ y
+ 1640
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.width-adjustments
+
+ -16
+
+
+
+
diff --git a/src/Interface-Regular.ufo/glyphs/parenright.cap.glif b/src/Interface-Regular.ufo/glyphs/parenright.cap.glif
new file mode 100644
index 000000000..f20aee477
--- /dev/null
+++ b/src/Interface-Regular.ufo/glyphs/parenright.cap.glif
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+ com.typemytype.robofont.mark
+
+ 0.94
+ 0.94
+ 0.94
+ 1.0
+
+ interface.width-adjustments
+
+ -16
+
+
+
+
diff --git a/src/Interface-Regular.ufo/lib.plist b/src/Interface-Regular.ufo/lib.plist
index beaccb563..d8547ba71 100644
--- a/src/Interface-Regular.ufo/lib.plist
+++ b/src/Interface-Regular.ufo/lib.plist
@@ -591,11 +591,17 @@
question
questiondown
parenleft
+ parenleft.cap
parenright
+ parenright.cap
bracketleft
+ bracketleft.cap
bracketright
+ bracketright.cap
braceleft
+ braceleft.cap
braceright
+ braceright.cap
at
numbersign
currency
@@ -2783,11 +2789,17 @@
question
questiondown
parenleft
+ parenleft.cap
parenright
+ parenright.cap
bracketleft
+ bracketleft.cap
bracketright
+ bracketright.cap
braceleft
+ braceleft.cap
braceright
+ braceright.cap
at
numbersign
currency
diff --git a/src/features.fea b/src/features.fea
index 0272e80e1..338691e27 100644
--- a/src/features.fea
+++ b/src/features.fea
@@ -21,6 +21,8 @@ languagesystem grek dflt;
@UC_SET1 = [ zero one two three four five six seven eight nine Euro Idotaccent Mu dollar lira sterling afii10023 afii10051 afii10052 afii10053 afii10054 afii10055 afii10056 afii10057 afii10058 afii10059 afii10060 afii10061 afii10062 afii10145 afii10017 afii10018 afii10019 afii10020 afii10021 afii10022 afii10024 afii10025 afii10026 afii10027 afii10029 afii10030 afii10031 afii10032 afii10033 afii10034 afii10035 afii10036 afii10037 afii10038 afii10039 afii10040 afii10041 afii10042 afii10043 afii10044 afii10045 afii10046 afii10047 afii10048 afii10049 afii10050 Ghestrokecyrillic Zhedescendercyrillic Zedescendercyrillic Kadescendercyrillic Kaverticalstrokecyrillic Kabashkircyrillic Endescendercyrillic Haabkhasiancyrillic Esdescendercyrillic Ustraightcyrillic Ustraightstrokecyrillic Hadescendercyrillic Tetsecyrillic Cheverticalstrokecyrillic Shhacyrillic Cheabkhasiancyrillic Chedescenderabkhasiancyrillic Schwacyrillic Dzeabkhasiancyrillic Imacroncyrillic Obarredcyrillic Umacroncyrillic hryvnia tenge uni20BD numero yen ];
+@UC = [ @UC_ROMAN @UC_SET1 ];
+
@LC_SET2 = [ dotlessi sigma1 mugreek afii10065 becyrillic vecyrillic gecyrillic decyrillic iecyrillic zhecyrillic zecyrillic iicyrillic iishortcyrillic kacyrillic elcyrillic emcyrillic encyrillic ocyrillic pecyrillic ercyrillic escyrillic tecyrillic ucyrillic efcyrillic khacyrillic tsecyrillic checyrillic shacyrillic shchacyrillic hardsigncyrillic yericyrillic softsigncyrillic ereversedcyrillic iucyrillic iacyrillic iocyrillic djecyrillic gjecyrillic ecyrillic dzecyrillic icyrillic yicyrillic jecyrillic ljecyrillic njecyrillic tshecyrillic kjecyrillic ushortcyrillic dzhecyrillic gheupturncyrillic ghestrokecyrillic zhedescendercyrillic zedescendercyrillic kadescendercyrillic kaverticalstrokecyrillic kabashkircyrillic endescendercyrillic haabkhasiancyrillic esdescendercyrillic ustraightcyrillic ustraightstrokecyrillic hadescendercyrillic tetsecyrillic cheverticalstrokecyrillic shhacyrillic cheabkhasiancyrillic chedescenderabkhasiancyrillic schwacyrillic dzeabkhasiancyrillic imacroncyrillic obarredcyrillic umacroncyrillic ];
@@ -831,6 +833,17 @@ feature numr {
sub @frac1 by @frac2;
} numr;
+feature calt {
+ sub braceleft' @UC by braceleft.cap;
+ sub @UC braceright' by braceright.cap;
+
+ sub bracketleft' @UC by bracketleft.cap;
+ sub @UC bracketright' by bracketright.cap;
+
+ sub parenleft' @UC by parenleft.cap;
+ sub @UC parenright' by parenright.cap;
+} calt;
+
# Stylistic set 1: open digits
feature ss01 {
sub four by four.1;