diff --git a/README.md b/README.md index 1cd7c9c7..239450a6 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ We recommend using these fonts at 7 points and larger in print, 9 pixels and lar ### Available OpenType Features Outside of the default characters, there are a few extra features that are accessible in some applications, as well as via CSS: -- **Raised Colon:** there is an option for a raised colon, either applied contextually between numbers or activated generally. The contextual option is available via ss11 (Stylistic Set #11), or use ss12 (Stylistic Set #12) or salt (Stylistic Alternates) for the global switch. +- **Raised Colon:** there is an option for a raised colon, either applied contextually between numbers or activated generally. The contextual option is available via ss11 (Stylistic Set #11), or use ss12 (Stylistic Set #12) or salt (Stylistic Alternates) for the global switch. Also, the colon will automatically be raised in operators, to align with math symbols. - **Language Support:** ccmp and locl features ensure correct display across a wide range of languages. These are usually activated by default. We recommend setting the language tag/setting in your software to the desired language for best results. - **Superior/superscript and inferior/subscript figures** are included via their Unicode codepoints, or you can produce them from the default figures via the sups (Superscript), subs (Subscript), and si (Scientific Inferior) features. - **Fraction numerals** are similarly available via the numr (Numerator) and dnom (Denominator) features. A set of premade fractions is also available in the fonts. diff --git a/fonts/Intel One Mono - Release Notes.txt b/fonts/Intel One Mono - Release Notes.txt index 61d1984d..eb7b388e 100644 --- a/fonts/Intel One Mono - Release Notes.txt +++ b/fonts/Intel One Mono - Release Notes.txt @@ -1,12 +1,18 @@ -Release Notes / IntelOne Mono -2023-05-01 +Release Notes / Intel One Mono +2023-08-18 Family name - IntelOne Mono + Intel One Mono Version number - 1.2 (2023-05-01) - edits to OpenType features + 1.3 Updated font naming (“Intel One Mono”) - will require relinking + Improved linking of Regular and Bold weights + Improved alignment between hyphen, colon, and operators + Updated art for backtick/grave + Edited mark/ccmp features for language support + Edits to meta info and licensing text + Supported scripts Latin (full glyph complement supporting over 200 languages) @@ -47,6 +53,7 @@ Available OpenType features salt Stylistic Alternates locl Localizations ccmp Glyph Composition/Decomposition Rules + mark Mark Attachment numr Numerator dnom Denominator sups Superscript diff --git a/fonts/otf.zip b/fonts/otf.zip index c1b10968..f5619785 100644 Binary files a/fonts/otf.zip and b/fonts/otf.zip differ diff --git a/fonts/otf/intelone-mono-font-family-bold.otf b/fonts/otf/IntelOneMono-Bold.otf similarity index 79% rename from fonts/otf/intelone-mono-font-family-bold.otf rename to fonts/otf/IntelOneMono-Bold.otf index dc199fa5..28255b24 100644 Binary files a/fonts/otf/intelone-mono-font-family-bold.otf and b/fonts/otf/IntelOneMono-Bold.otf differ diff --git a/fonts/otf/intelone-mono-font-family-bolditalic.otf b/fonts/otf/IntelOneMono-BoldItalic.otf similarity index 72% rename from fonts/otf/intelone-mono-font-family-bolditalic.otf rename to fonts/otf/IntelOneMono-BoldItalic.otf index 21b2dbbf..2a6b3faf 100644 Binary files a/fonts/otf/intelone-mono-font-family-bolditalic.otf and b/fonts/otf/IntelOneMono-BoldItalic.otf differ diff --git a/fonts/otf/intelone-mono-font-family-italic.otf b/fonts/otf/IntelOneMono-Italic.otf similarity index 75% rename from fonts/otf/intelone-mono-font-family-italic.otf rename to fonts/otf/IntelOneMono-Italic.otf index 2f4d4147..3cfd0a78 100644 Binary files a/fonts/otf/intelone-mono-font-family-italic.otf and b/fonts/otf/IntelOneMono-Italic.otf differ diff --git a/fonts/otf/intelone-mono-font-family-light.otf b/fonts/otf/IntelOneMono-Light.otf similarity index 75% rename from fonts/otf/intelone-mono-font-family-light.otf rename to fonts/otf/IntelOneMono-Light.otf index 9b8e39ae..1082f5c6 100644 Binary files a/fonts/otf/intelone-mono-font-family-light.otf and b/fonts/otf/IntelOneMono-Light.otf differ diff --git a/fonts/otf/intelone-mono-font-family-lightitalic.otf b/fonts/otf/IntelOneMono-LightItalic.otf similarity index 71% rename from fonts/otf/intelone-mono-font-family-lightitalic.otf rename to fonts/otf/IntelOneMono-LightItalic.otf index 26e95f2f..3e90d11a 100644 Binary files a/fonts/otf/intelone-mono-font-family-lightitalic.otf and b/fonts/otf/IntelOneMono-LightItalic.otf differ diff --git a/fonts/otf/intelone-mono-font-family-medium.otf b/fonts/otf/IntelOneMono-Medium.otf similarity index 77% rename from fonts/otf/intelone-mono-font-family-medium.otf rename to fonts/otf/IntelOneMono-Medium.otf index 1568a82b..3d2acc99 100644 Binary files a/fonts/otf/intelone-mono-font-family-medium.otf and b/fonts/otf/IntelOneMono-Medium.otf differ diff --git a/fonts/otf/intelone-mono-font-family-mediumitalic.otf b/fonts/otf/IntelOneMono-MediumItalic.otf similarity index 71% rename from fonts/otf/intelone-mono-font-family-mediumitalic.otf rename to fonts/otf/IntelOneMono-MediumItalic.otf index 0f9441b4..860b98f6 100644 Binary files a/fonts/otf/intelone-mono-font-family-mediumitalic.otf and b/fonts/otf/IntelOneMono-MediumItalic.otf differ diff --git a/fonts/otf/intelone-mono-font-family-regular.otf b/fonts/otf/IntelOneMono-Regular.otf similarity index 77% rename from fonts/otf/intelone-mono-font-family-regular.otf rename to fonts/otf/IntelOneMono-Regular.otf index ab8d6e6f..9bac3f7a 100644 Binary files a/fonts/otf/intelone-mono-font-family-regular.otf and b/fonts/otf/IntelOneMono-Regular.otf differ diff --git a/fonts/otf/license b/fonts/otf/OFL.txt similarity index 97% rename from fonts/otf/license rename to fonts/otf/OFL.txt index 2159440b..81951a00 100644 --- a/fonts/otf/license +++ b/fonts/otf/OFL.txt @@ -1,8 +1,8 @@ -Copyright (c) 2023 Intel Corp. with Reserved Font Name "Intel One Mono", "IntelOne Mono" +Copyright 2023 Intel Corp. with Reserved Font Name 'Intel One Mono' This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL ----------------------------------------------------------- diff --git a/fonts/ttf.zip b/fonts/ttf.zip index 897f5d99..89e586b3 100644 Binary files a/fonts/ttf.zip and b/fonts/ttf.zip differ diff --git a/fonts/ttf/intelone-mono-font-family-bold.ttf b/fonts/ttf/IntelOneMono-Bold.ttf similarity index 82% rename from fonts/ttf/intelone-mono-font-family-bold.ttf rename to fonts/ttf/IntelOneMono-Bold.ttf index 3a212c2d..b0b38b4c 100644 Binary files a/fonts/ttf/intelone-mono-font-family-bold.ttf and b/fonts/ttf/IntelOneMono-Bold.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-bolditalic.ttf b/fonts/ttf/IntelOneMono-BoldItalic.ttf similarity index 83% rename from fonts/ttf/intelone-mono-font-family-bolditalic.ttf rename to fonts/ttf/IntelOneMono-BoldItalic.ttf index 896502fc..b7e230c9 100644 Binary files a/fonts/ttf/intelone-mono-font-family-bolditalic.ttf and b/fonts/ttf/IntelOneMono-BoldItalic.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-italic.ttf b/fonts/ttf/IntelOneMono-Italic.ttf similarity index 81% rename from fonts/ttf/intelone-mono-font-family-italic.ttf rename to fonts/ttf/IntelOneMono-Italic.ttf index 311285ad..5bf56f47 100644 Binary files a/fonts/ttf/intelone-mono-font-family-italic.ttf and b/fonts/ttf/IntelOneMono-Italic.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-light.ttf b/fonts/ttf/IntelOneMono-Light.ttf similarity index 82% rename from fonts/ttf/intelone-mono-font-family-light.ttf rename to fonts/ttf/IntelOneMono-Light.ttf index b054bc0a..7c8319fa 100644 Binary files a/fonts/ttf/intelone-mono-font-family-light.ttf and b/fonts/ttf/IntelOneMono-Light.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-lightitalic.ttf b/fonts/ttf/IntelOneMono-LightItalic.ttf similarity index 84% rename from fonts/ttf/intelone-mono-font-family-lightitalic.ttf rename to fonts/ttf/IntelOneMono-LightItalic.ttf index 68f988c7..8b93c29d 100644 Binary files a/fonts/ttf/intelone-mono-font-family-lightitalic.ttf and b/fonts/ttf/IntelOneMono-LightItalic.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-medium.ttf b/fonts/ttf/IntelOneMono-Medium.ttf similarity index 82% rename from fonts/ttf/intelone-mono-font-family-medium.ttf rename to fonts/ttf/IntelOneMono-Medium.ttf index a2c09283..4edc9f76 100644 Binary files a/fonts/ttf/intelone-mono-font-family-medium.ttf and b/fonts/ttf/IntelOneMono-Medium.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-mediumitalic.ttf b/fonts/ttf/IntelOneMono-MediumItalic.ttf similarity index 80% rename from fonts/ttf/intelone-mono-font-family-mediumitalic.ttf rename to fonts/ttf/IntelOneMono-MediumItalic.ttf index 603feca6..f1a7d189 100644 Binary files a/fonts/ttf/intelone-mono-font-family-mediumitalic.ttf and b/fonts/ttf/IntelOneMono-MediumItalic.ttf differ diff --git a/fonts/ttf/intelone-mono-font-family-regular.ttf b/fonts/ttf/IntelOneMono-Regular.ttf similarity index 81% rename from fonts/ttf/intelone-mono-font-family-regular.ttf rename to fonts/ttf/IntelOneMono-Regular.ttf index 27111796..386b9acc 100644 Binary files a/fonts/ttf/intelone-mono-font-family-regular.ttf and b/fonts/ttf/IntelOneMono-Regular.ttf differ diff --git a/fonts/ttf/license b/fonts/ttf/OFL.txt similarity index 97% rename from fonts/ttf/license rename to fonts/ttf/OFL.txt index 2159440b..81951a00 100644 --- a/fonts/ttf/license +++ b/fonts/ttf/OFL.txt @@ -1,8 +1,8 @@ -Copyright (c) 2023 Intel Corp. with Reserved Font Name "Intel One Mono", "IntelOne Mono" +Copyright 2023 Intel Corp. with Reserved Font Name 'Intel One Mono' This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL ----------------------------------------------------------- diff --git a/fonts/woff.zip b/fonts/woff.zip index 2682068d..3a394770 100644 Binary files a/fonts/woff.zip and b/fonts/woff.zip differ diff --git a/fonts/woff/IntelOneMono-Bold.woff b/fonts/woff/IntelOneMono-Bold.woff new file mode 100644 index 00000000..0af54b8a Binary files /dev/null and b/fonts/woff/IntelOneMono-Bold.woff differ diff --git a/fonts/woff/IntelOneMono-BoldItalic.woff b/fonts/woff/IntelOneMono-BoldItalic.woff new file mode 100644 index 00000000..43938662 Binary files /dev/null and b/fonts/woff/IntelOneMono-BoldItalic.woff differ diff --git a/fonts/woff/IntelOneMono-Italic.woff b/fonts/woff/IntelOneMono-Italic.woff new file mode 100644 index 00000000..a6d7da8b Binary files /dev/null and b/fonts/woff/IntelOneMono-Italic.woff differ diff --git a/fonts/woff/IntelOneMono-Light.woff b/fonts/woff/IntelOneMono-Light.woff new file mode 100644 index 00000000..14d96228 Binary files /dev/null and b/fonts/woff/IntelOneMono-Light.woff differ diff --git a/fonts/woff/IntelOneMono-LightItalic.woff b/fonts/woff/IntelOneMono-LightItalic.woff new file mode 100644 index 00000000..b4897f2a Binary files /dev/null and b/fonts/woff/IntelOneMono-LightItalic.woff differ diff --git a/fonts/woff/IntelOneMono-Medium.woff b/fonts/woff/IntelOneMono-Medium.woff new file mode 100644 index 00000000..8a1cd922 Binary files /dev/null and b/fonts/woff/IntelOneMono-Medium.woff differ diff --git a/fonts/woff/IntelOneMono-MediumItalic.woff b/fonts/woff/IntelOneMono-MediumItalic.woff new file mode 100644 index 00000000..05e30607 Binary files /dev/null and b/fonts/woff/IntelOneMono-MediumItalic.woff differ diff --git a/fonts/woff/IntelOneMono-Regular.woff b/fonts/woff/IntelOneMono-Regular.woff new file mode 100644 index 00000000..6f25edbe Binary files /dev/null and b/fonts/woff/IntelOneMono-Regular.woff differ diff --git a/fonts/woff/license b/fonts/woff/OFL.txt similarity index 97% rename from fonts/woff/license rename to fonts/woff/OFL.txt index 2159440b..81951a00 100644 --- a/fonts/woff/license +++ b/fonts/woff/OFL.txt @@ -1,8 +1,8 @@ -Copyright (c) 2023 Intel Corp. with Reserved Font Name "Intel One Mono", "IntelOne Mono" +Copyright 2023 Intel Corp. with Reserved Font Name 'Intel One Mono' This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL ----------------------------------------------------------- diff --git a/fonts/woff/intelone-mono-font-family-bold.woff b/fonts/woff/intelone-mono-font-family-bold.woff deleted file mode 100644 index 63d7d3dd..00000000 Binary files a/fonts/woff/intelone-mono-font-family-bold.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-bolditalic.woff b/fonts/woff/intelone-mono-font-family-bolditalic.woff deleted file mode 100644 index 8d5cd656..00000000 Binary files a/fonts/woff/intelone-mono-font-family-bolditalic.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-italic.woff b/fonts/woff/intelone-mono-font-family-italic.woff deleted file mode 100644 index 6acbdd33..00000000 Binary files a/fonts/woff/intelone-mono-font-family-italic.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-light.woff b/fonts/woff/intelone-mono-font-family-light.woff deleted file mode 100644 index a858f486..00000000 Binary files a/fonts/woff/intelone-mono-font-family-light.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-lightitalic.woff b/fonts/woff/intelone-mono-font-family-lightitalic.woff deleted file mode 100644 index f48d71b9..00000000 Binary files a/fonts/woff/intelone-mono-font-family-lightitalic.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-medium.woff b/fonts/woff/intelone-mono-font-family-medium.woff deleted file mode 100644 index 7b7c82e6..00000000 Binary files a/fonts/woff/intelone-mono-font-family-medium.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-mediumitalic.woff b/fonts/woff/intelone-mono-font-family-mediumitalic.woff deleted file mode 100644 index 8975f391..00000000 Binary files a/fonts/woff/intelone-mono-font-family-mediumitalic.woff and /dev/null differ diff --git a/fonts/woff/intelone-mono-font-family-regular.woff b/fonts/woff/intelone-mono-font-family-regular.woff deleted file mode 100644 index 61e4a9d6..00000000 Binary files a/fonts/woff/intelone-mono-font-family-regular.woff and /dev/null differ diff --git a/fonts/woff2.zip b/fonts/woff2.zip index 0d35a8b7..48934125 100644 Binary files a/fonts/woff2.zip and b/fonts/woff2.zip differ diff --git a/fonts/woff2/IntelOneMono-Bold.woff2 b/fonts/woff2/IntelOneMono-Bold.woff2 new file mode 100644 index 00000000..ad52b0cb Binary files /dev/null and b/fonts/woff2/IntelOneMono-Bold.woff2 differ diff --git a/fonts/woff2/IntelOneMono-BoldItalic.woff2 b/fonts/woff2/IntelOneMono-BoldItalic.woff2 new file mode 100644 index 00000000..2615c524 Binary files /dev/null and b/fonts/woff2/IntelOneMono-BoldItalic.woff2 differ diff --git a/fonts/woff2/IntelOneMono-Italic.woff2 b/fonts/woff2/IntelOneMono-Italic.woff2 new file mode 100644 index 00000000..13ae19c1 Binary files /dev/null and b/fonts/woff2/IntelOneMono-Italic.woff2 differ diff --git a/fonts/woff2/IntelOneMono-Light.woff2 b/fonts/woff2/IntelOneMono-Light.woff2 new file mode 100644 index 00000000..bc5053c4 Binary files /dev/null and b/fonts/woff2/IntelOneMono-Light.woff2 differ diff --git a/fonts/woff2/IntelOneMono-LightItalic.woff2 b/fonts/woff2/IntelOneMono-LightItalic.woff2 new file mode 100644 index 00000000..eb568228 Binary files /dev/null and b/fonts/woff2/IntelOneMono-LightItalic.woff2 differ diff --git a/fonts/woff2/IntelOneMono-Medium.woff2 b/fonts/woff2/IntelOneMono-Medium.woff2 new file mode 100644 index 00000000..745887a2 Binary files /dev/null and b/fonts/woff2/IntelOneMono-Medium.woff2 differ diff --git a/fonts/woff2/IntelOneMono-MediumItalic.woff2 b/fonts/woff2/IntelOneMono-MediumItalic.woff2 new file mode 100644 index 00000000..ad65b31b Binary files /dev/null and b/fonts/woff2/IntelOneMono-MediumItalic.woff2 differ diff --git a/fonts/woff2/IntelOneMono-Regular.woff2 b/fonts/woff2/IntelOneMono-Regular.woff2 new file mode 100644 index 00000000..dd0187ec Binary files /dev/null and b/fonts/woff2/IntelOneMono-Regular.woff2 differ diff --git a/fonts/woff2/license b/fonts/woff2/OFL.txt similarity index 97% rename from fonts/woff2/license rename to fonts/woff2/OFL.txt index 2159440b..81951a00 100644 --- a/fonts/woff2/license +++ b/fonts/woff2/OFL.txt @@ -1,8 +1,8 @@ -Copyright (c) 2023 Intel Corp. with Reserved Font Name "Intel One Mono", "IntelOne Mono" +Copyright 2023 Intel Corp. with Reserved Font Name 'Intel One Mono' This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL ----------------------------------------------------------- diff --git a/fonts/woff2/intelone-mono-font-family-bold.woff2 b/fonts/woff2/intelone-mono-font-family-bold.woff2 deleted file mode 100644 index d0c8de71..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-bold.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-bolditalic.woff2 b/fonts/woff2/intelone-mono-font-family-bolditalic.woff2 deleted file mode 100644 index 746ca1fb..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-bolditalic.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-italic.woff2 b/fonts/woff2/intelone-mono-font-family-italic.woff2 deleted file mode 100644 index 0488c45b..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-italic.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-light.woff2 b/fonts/woff2/intelone-mono-font-family-light.woff2 deleted file mode 100644 index 383aa489..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-light.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-lightitalic.woff2 b/fonts/woff2/intelone-mono-font-family-lightitalic.woff2 deleted file mode 100644 index 32b3b987..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-lightitalic.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-medium.woff2 b/fonts/woff2/intelone-mono-font-family-medium.woff2 deleted file mode 100644 index b4df5ae9..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-medium.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-mediumitalic.woff2 b/fonts/woff2/intelone-mono-font-family-mediumitalic.woff2 deleted file mode 100644 index a8696255..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-mediumitalic.woff2 and /dev/null differ diff --git a/fonts/woff2/intelone-mono-font-family-regular.woff2 b/fonts/woff2/intelone-mono-font-family-regular.woff2 deleted file mode 100644 index 111aa601..00000000 Binary files a/fonts/woff2/intelone-mono-font-family-regular.woff2 and /dev/null differ diff --git a/sources/instances/postscript/IntelOneMono-Bold.ufo/features.fea b/sources/instances/postscript/IntelOneMono-Bold.ufo/features.fea index 9fd05f6b..6197aed6 100644 --- a/sources/instances/postscript/IntelOneMono-Bold.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-Bold.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/postscript/IntelOneMono-BoldItalic.ufo/features.fea b/sources/instances/postscript/IntelOneMono-BoldItalic.ufo/features.fea index c0181dc9..442214bb 100644 --- a/sources/instances/postscript/IntelOneMono-BoldItalic.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-BoldItalic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- @@ -176,103 +209,6 @@ feature salt { } salt; -# --------------------------------------------------------------------- -# MARK | Generated: November 23, 2022 - 02:37:46 PM by 'markFeature.py' -# --------------------------------------------------------------------- - -markClass [acutecmb caroncmb circumflexcmb dieresiscmb dotaccentcmb gravecmb macroncmb tildecmb] @mark_aboveLC; -markClass [acutecmb.cap caroncmb.cap circumflexcmb.cap dieresiscmb.cap dotaccentcmb.cap gravecmb.cap macroncmb.cap tildecmb.cap] @mark_aboveUC; -markClass [dieresisbelowcmb dotbelowcmb macronbelowcmb] @mark_below; -markClass [cedillacmb] @mark_belowcedilla; -markClass [ogonekcmb] @mark_belowogonek; - -feature mark { - - lookup aboveLC{ - pos base [a] mark @mark_aboveLC; - pos base [c] mark @mark_aboveLC; - pos base [dotlessi] mark @mark_aboveLC; - pos base [dotlessj] mark @mark_aboveLC; - pos base [e] mark @mark_aboveLC; - pos base [eogonek] mark @mark_aboveLC; - pos base [g] mark @mark_aboveLC; - pos base [m] mark @mark_aboveLC; - pos base [n] mark @mark_aboveLC; - pos base [o] mark @mark_aboveLC; - pos base [p] mark @mark_aboveLC; - pos base [s] mark @mark_aboveLC; - pos base [u] mark @mark_aboveLC; - pos base [z] mark @mark_aboveLC; - } aboveLC; - - lookup aboveUC{ - pos base [A] mark @mark_aboveUC; - pos base [C] mark @mark_aboveUC; - pos base [E] mark @mark_aboveUC; - pos base [Eogonek] mark @mark_aboveUC; - pos base [G] mark @mark_aboveUC; - pos base [I] mark @mark_aboveUC; - pos base [J] mark @mark_aboveUC; - pos base [M] mark @mark_aboveUC; - pos base [N] mark @mark_aboveUC; - pos base [O] mark @mark_aboveUC; - pos base [P] mark @mark_aboveUC; - pos base [S] mark @mark_aboveUC; - pos base [U] mark @mark_aboveUC; - pos base [Z] mark @mark_aboveUC; - } aboveUC; - - lookup below{ - pos base [C] mark @mark_below; - pos base [Dcroat] mark @mark_below; - pos base [E] mark @mark_below; - pos base [H] mark @mark_below; - pos base [I] mark @mark_below; - pos base [O] mark @mark_below; - pos base [S] mark @mark_below; - pos base [U] mark @mark_below; - pos base [X] mark @mark_below; - pos base [Z] mark @mark_below; - pos base [c] mark @mark_below; - pos base [dcroat] mark @mark_below; - pos base [dotlessi] mark @mark_below; - pos base [e] mark @mark_below; - pos base [h] mark @mark_below; - pos base [o] mark @mark_below; - pos base [s] mark @mark_below; - pos base [u] mark @mark_below; - pos base [x] mark @mark_below; - pos base [z] mark @mark_below; - } below; - - lookup belowcedilla{ - pos base [Z] mark @mark_belowcedilla; - pos base [z] mark @mark_belowcedilla; - } belowcedilla; - - lookup belowogonek{ - pos base [A] mark @mark_belowogonek; - pos base [E] mark @mark_belowogonek; - pos base [I] mark @mark_belowogonek; - pos base [O] mark @mark_belowogonek; - pos base [U] mark @mark_belowogonek; - pos base [a] mark @mark_belowogonek; - pos base [dotlessi] mark @mark_belowogonek; - pos base [e] mark @mark_belowogonek; - pos base [o] mark @mark_belowogonek; - pos base [u] mark @mark_belowogonek; - } belowogonek; - -} mark; - -@BASES = [A C Dcroat E Eogonek G H I J M N O P S U X Z a c dcroat dotlessi dotlessj e eogonek g h m n o p s u x z]; -@MARKS = [@mark_aboveLC @mark_aboveUC @mark_below @mark_belowcedilla @mark_belowogonek]; - -table GDEF { - GlyphClassDef @BASES,,@MARKS,; -} GDEF; - - # -------------- # All Alternates # -------------- diff --git a/sources/instances/postscript/IntelOneMono-Italic.ufo/features.fea b/sources/instances/postscript/IntelOneMono-Italic.ufo/features.fea index ff6022be..25e2754f 100644 --- a/sources/instances/postscript/IntelOneMono-Italic.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-Italic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/postscript/IntelOneMono-Light.ufo/features.fea b/sources/instances/postscript/IntelOneMono-Light.ufo/features.fea index 74b6f720..a1caa755 100644 --- a/sources/instances/postscript/IntelOneMono-Light.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-Light.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/postscript/IntelOneMono-LightItalic.ufo/features.fea b/sources/instances/postscript/IntelOneMono-LightItalic.ufo/features.fea index 0960fa76..237879b6 100644 --- a/sources/instances/postscript/IntelOneMono-LightItalic.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-LightItalic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/postscript/IntelOneMono-Medium.ufo/features.fea b/sources/instances/postscript/IntelOneMono-Medium.ufo/features.fea index c05e9999..275785b9 100644 --- a/sources/instances/postscript/IntelOneMono-Medium.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-Medium.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/postscript/IntelOneMono-MediumItalic.ufo/features.fea b/sources/instances/postscript/IntelOneMono-MediumItalic.ufo/features.fea index 350d47aa..a1e98359 100644 --- a/sources/instances/postscript/IntelOneMono-MediumItalic.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-MediumItalic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/postscript/IntelOneMono-Regular.ufo/features.fea b/sources/instances/postscript/IntelOneMono-Regular.ufo/features.fea index b62d199a..a32f0139 100644 --- a/sources/instances/postscript/IntelOneMono-Regular.ufo/features.fea +++ b/sources/instances/postscript/IntelOneMono-Regular.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { - sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks gravecmb] by [dotlessi dotlessj]; - sub [i j]' [@lcMarks gravecmb] by [dotlessi dotlessj]; + sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; + sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-Bold-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-Bold-quadratic.ufo/features.fea index 8d2923f4..6197aed6 100644 --- a/sources/instances/truetype/IntelOneMono-Bold-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-Bold-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-BoldItalic-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-BoldItalic-quadratic.ufo/features.fea index 06707c9c..442214bb 100644 --- a/sources/instances/truetype/IntelOneMono-BoldItalic-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-BoldItalic-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- @@ -176,103 +209,6 @@ feature salt { } salt; -# --------------------------------------------------------------------- -# MARK | Generated: November 23, 2022 - 02:37:46 PM by 'markFeature.py' -# --------------------------------------------------------------------- - -markClass [acutecmb caroncmb circumflexcmb dieresiscmb dotaccentcmb gravecmb macroncmb tildecmb] @mark_aboveLC; -markClass [acutecmb.cap caroncmb.cap circumflexcmb.cap dieresiscmb.cap dotaccentcmb.cap gravecmb.cap macroncmb.cap tildecmb.cap] @mark_aboveUC; -markClass [dieresisbelowcmb dotbelowcmb macronbelowcmb] @mark_below; -markClass [cedillacmb] @mark_belowcedilla; -markClass [ogonekcmb] @mark_belowogonek; - -feature mark { - - lookup aboveLC{ - pos base [a] mark @mark_aboveLC; - pos base [c] mark @mark_aboveLC; - pos base [dotlessi] mark @mark_aboveLC; - pos base [dotlessj] mark @mark_aboveLC; - pos base [e] mark @mark_aboveLC; - pos base [eogonek] mark @mark_aboveLC; - pos base [g] mark @mark_aboveLC; - pos base [m] mark @mark_aboveLC; - pos base [n] mark @mark_aboveLC; - pos base [o] mark @mark_aboveLC; - pos base [p] mark @mark_aboveLC; - pos base [s] mark @mark_aboveLC; - pos base [u] mark @mark_aboveLC; - pos base [z] mark @mark_aboveLC; - } aboveLC; - - lookup aboveUC{ - pos base [A] mark @mark_aboveUC; - pos base [C] mark @mark_aboveUC; - pos base [E] mark @mark_aboveUC; - pos base [Eogonek] mark @mark_aboveUC; - pos base [G] mark @mark_aboveUC; - pos base [I] mark @mark_aboveUC; - pos base [J] mark @mark_aboveUC; - pos base [M] mark @mark_aboveUC; - pos base [N] mark @mark_aboveUC; - pos base [O] mark @mark_aboveUC; - pos base [P] mark @mark_aboveUC; - pos base [S] mark @mark_aboveUC; - pos base [U] mark @mark_aboveUC; - pos base [Z] mark @mark_aboveUC; - } aboveUC; - - lookup below{ - pos base [C] mark @mark_below; - pos base [Dcroat] mark @mark_below; - pos base [E] mark @mark_below; - pos base [H] mark @mark_below; - pos base [I] mark @mark_below; - pos base [O] mark @mark_below; - pos base [S] mark @mark_below; - pos base [U] mark @mark_below; - pos base [X] mark @mark_below; - pos base [Z] mark @mark_below; - pos base [c] mark @mark_below; - pos base [dcroat] mark @mark_below; - pos base [dotlessi] mark @mark_below; - pos base [e] mark @mark_below; - pos base [h] mark @mark_below; - pos base [o] mark @mark_below; - pos base [s] mark @mark_below; - pos base [u] mark @mark_below; - pos base [x] mark @mark_below; - pos base [z] mark @mark_below; - } below; - - lookup belowcedilla{ - pos base [Z] mark @mark_belowcedilla; - pos base [z] mark @mark_belowcedilla; - } belowcedilla; - - lookup belowogonek{ - pos base [A] mark @mark_belowogonek; - pos base [E] mark @mark_belowogonek; - pos base [I] mark @mark_belowogonek; - pos base [O] mark @mark_belowogonek; - pos base [U] mark @mark_belowogonek; - pos base [a] mark @mark_belowogonek; - pos base [dotlessi] mark @mark_belowogonek; - pos base [e] mark @mark_belowogonek; - pos base [o] mark @mark_belowogonek; - pos base [u] mark @mark_belowogonek; - } belowogonek; - -} mark; - -@BASES = [A C Dcroat E Eogonek G H I J M N O P S U X Z a c dcroat dotlessi dotlessj e eogonek g h m n o p s u x z]; -@MARKS = [@mark_aboveLC @mark_aboveUC @mark_below @mark_belowcedilla @mark_belowogonek]; - -table GDEF { - GlyphClassDef @BASES,,@MARKS,; -} GDEF; - - # -------------- # All Alternates # -------------- diff --git a/sources/instances/truetype/IntelOneMono-Italic-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-Italic-quadratic.ufo/features.fea index 921124aa..25e2754f 100644 --- a/sources/instances/truetype/IntelOneMono-Italic-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-Italic-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-Light-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-Light-quadratic.ufo/features.fea index 0c087351..a1caa755 100644 --- a/sources/instances/truetype/IntelOneMono-Light-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-Light-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-LightItalic-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-LightItalic-quadratic.ufo/features.fea index b9c34f80..237879b6 100644 --- a/sources/instances/truetype/IntelOneMono-LightItalic-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-LightItalic-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-Medium-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-Medium-quadratic.ufo/features.fea index de2c6fb2..275785b9 100644 --- a/sources/instances/truetype/IntelOneMono-Medium-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-Medium-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-MediumItalic-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-MediumItalic-quadratic.ufo/features.fea index 358039fa..a1e98359 100644 --- a/sources/instances/truetype/IntelOneMono-MediumItalic-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-MediumItalic-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/instances/truetype/IntelOneMono-Regular-quadratic.ufo/features.fea b/sources/instances/truetype/IntelOneMono-Regular-quadratic.ufo/features.fea index 0d0434a5..a32f0139 100644 --- a/sources/instances/truetype/IntelOneMono-Regular-quadratic.ufo/features.fea +++ b/sources/instances/truetype/IntelOneMono-Regular-quadratic.ufo/features.fea @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/masters/IntelOneMono-Bold-mstr.ufo/features.fea b/sources/masters/IntelOneMono-Bold-mstr.ufo/features.fea index c5781b21..442214bb 100644 --- a/sources/masters/IntelOneMono-Bold-mstr.ufo/features.fea +++ b/sources/masters/IntelOneMono-Bold-mstr.ufo/features.fea @@ -1,5 +1,5 @@ # ---------------------------- -# INTEL MONO OPENTYPE CODE +# INTEL ONE MONO OPENTYPE CODE # ---------------------------- # ---------------- @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/masters/IntelOneMono-BoldItalic-mstr.ufo/features.fea b/sources/masters/IntelOneMono-BoldItalic-mstr.ufo/features.fea index c5781b21..442214bb 100644 --- a/sources/masters/IntelOneMono-BoldItalic-mstr.ufo/features.fea +++ b/sources/masters/IntelOneMono-BoldItalic-mstr.ufo/features.fea @@ -1,5 +1,5 @@ # ---------------------------- -# INTEL MONO OPENTYPE CODE +# INTEL ONE MONO OPENTYPE CODE # ---------------------------- # ---------------- @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/masters/IntelOneMono-Italic.designspace b/sources/masters/IntelOneMono-Italic.designspace index 71bc4bd0..d63f70a5 100644 --- a/sources/masters/IntelOneMono-Italic.designspace +++ b/sources/masters/IntelOneMono-Italic.designspace @@ -30,7 +30,7 @@ - + @@ -39,35 +39,35 @@ - + - + - + - + - + diff --git a/sources/masters/IntelOneMono-Light-mstr.ufo/features.fea b/sources/masters/IntelOneMono-Light-mstr.ufo/features.fea index c5781b21..442214bb 100644 --- a/sources/masters/IntelOneMono-Light-mstr.ufo/features.fea +++ b/sources/masters/IntelOneMono-Light-mstr.ufo/features.fea @@ -1,5 +1,5 @@ # ---------------------------- -# INTEL MONO OPENTYPE CODE +# INTEL ONE MONO OPENTYPE CODE # ---------------------------- # ---------------- @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/masters/IntelOneMono-LightItalic-mstr.ufo/features.fea b/sources/masters/IntelOneMono-LightItalic-mstr.ufo/features.fea index c5781b21..442214bb 100644 --- a/sources/masters/IntelOneMono-LightItalic-mstr.ufo/features.fea +++ b/sources/masters/IntelOneMono-LightItalic-mstr.ufo/features.fea @@ -1,5 +1,5 @@ # ---------------------------- -# INTEL MONO OPENTYPE CODE +# INTEL ONE MONO OPENTYPE CODE # ---------------------------- # ---------------- @@ -29,13 +29,11 @@ languagesystem latn CAT; @figNum = [zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num]; @figDen = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den]; -# Marks Above - no grave -@deadMarks = [acute hungarumlaut circumflex caron breve tilde macron dieresis dotaccent ring ]; -@lcMarks = [acutecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; -@ucMarks = [acutecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; +# Marks Above +@lcMarks = [acutecmb gravecmb hungarumlautcmb circumflexcmb caroncmb brevecmb tildecmb macroncmb dieresiscmb dotaccentcmb ringcmb ]; +@ucMarks = [acutecmb.cap gravecmb.cap hungarumlautcmb.cap circumflexcmb.cap caroncmb.cap brevecmb.cap tildecmb.cap macroncmb.cap dieresiscmb.cap dotaccentcmb.cap ringcmb.cap]; # Marks Below -@deadbelowMarks = [uniA788 macronlowmod cedilla ogonek]; @belowMarks = [circumflexbelowcmb macronbelowcmb cedillacmb ogonekcmb]; @@ -69,35 +67,54 @@ feature locl { feature ccmp { - # Decompose unicode lowercase characters whose capital counterparts have no unicode. + # Decompose unicode lowercase characters whose uppercase counterparts have no unicode. lookup Decomp { sub hlinebelow by h macronlowmod; sub jcaron by j caron; } Decomp; - # Replace marks that follow a letter and another mark with their combining forms. - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. + # Replace double above accents by combined drawings. lookup DblMarks { - sub [@ltrLC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks dotbelowcmb] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; - sub [@ltrUC] [@lcMarks @deadbelowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; + sub dieresiscmb acutecmb by dieresisacute; + sub dieresiscmb gravecmb by dieresisgrave; + sub dieresiscmb caroncmb by dieresiscaron; + sub dieresiscmb macroncmb by dieresismacron; + sub brevecmb acutecmb by breveacute; + sub brevecmb gravecmb by brevegrave; + sub brevecmb hookcmb by brevehook; + sub brevecmb tildecmb by brevetilde; + sub circumflexcmb acutecmb by circumflexacute; + sub circumflexcmb gravecmb by circumflexgrave; + sub circumflexcmb hookcmb by circumflexhook; + sub circumflexcmb tildecmb by circumflextilde; + # capital forms + sub dieresiscmb.cap acutecmb.cap by dieresisacute.cap; + sub dieresiscmb.cap gravecmb.cap by dieresisgrave.cap; + sub dieresiscmb.cap caroncmb.cap by dieresiscaron.cap; + sub dieresiscmb.cap macroncmb.cap by dieresismacron.cap; + sub brevecmb.cap acutecmb.cap by breveacute.cap; + sub brevecmb.cap gravecmb.cap by brevegrave.cap; + sub brevecmb.cap hookcmb.cap by brevehook.cap; + sub brevecmb.cap tildecmb.cap by brevetilde.cap; + sub circumflexcmb.cap acutecmb.cap by circumflexacute.cap; + sub circumflexcmb.cap gravecmb.cap by circumflexgrave.cap; + sub circumflexcmb.cap hookcmb.cap by circumflexhook.cap; + sub circumflexcmb.cap tildecmb.cap by circumflextilde.cap; } DblMarks; - - # Replace marks that follow a letter with their combining forms. - lookup CmbMarks { - # grave is not included; we prioritize its use as a symbol for programming, which should not fuse with letters. - sub [@ltrLC] [@deadMarks @deadbelowMarks]' by [@lcMarks @belowMarks]; - sub [@ltrUC] [@deadMarks @deadbelowMarks]' by [@ucMarks @belowMarks]; + + # Replace combining marks that follow a uppercase letter by their uppercase form + lookup CapitalMarks { + sub [@ltrUC] [@lcMarks @belowMarks dotbelowcmb] [@lcMarks]' by [@ucMarks]; sub [@ltrUC] [@lcMarks]' by [@ucMarks]; - } CmbMarks; + } CapitalMarks; - # Replace letters with dotless counterparts when followed by a combining mark. + # Replace letters with dotless counterparts when followed by a combining mark lookup Dotless { sub [i j]' [@belowMarks dotbelowcmb] [@lcMarks] by [dotlessi dotlessj]; sub [i j]' [@lcMarks] by [dotlessi dotlessj]; } Dotless; - # Replace e ogonek with eogonek. + # Replace e ogonek with pre-drawn eogonek lookup eogonek { sub e ogonekcmb by eogonek; } eogonek; @@ -142,6 +159,22 @@ feature sinf { } sinf; +# --------------------- +# Contextual Alternates +# --------------------- + +feature calt { + # shifts colon to align with math symbols when used together + + sub colon' [plus equal greater less hyphen] by colon.fig; + sub [plus equal less greater hyphen] colon' by colon.fig; + + sub colon' [colon colon.fig] by colon.fig; + sub colon.fig colon' by colon.fig; + +} calt; + + # -------------- # Stylistic Sets # -------------- diff --git a/sources/masters/IntelOneMono-Roman.designspace b/sources/masters/IntelOneMono-Roman.designspace index dccb8c12..e23eeb16 100644 --- a/sources/masters/IntelOneMono-Roman.designspace +++ b/sources/masters/IntelOneMono-Roman.designspace @@ -30,7 +30,7 @@ - + @@ -39,35 +39,35 @@ - + - + - + - + - + diff --git a/sources/other files/truetype hinting source/IntelOneMono-Bold-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-Bold-vtt.ttf new file mode 100644 index 00000000..66a49b69 Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-Bold-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-BoldItalic-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-BoldItalic-vtt.ttf new file mode 100644 index 00000000..815a4f13 Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-BoldItalic-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-Italic-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-Italic-vtt.ttf new file mode 100644 index 00000000..831f98e0 Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-Italic-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-Light-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-Light-vtt.ttf new file mode 100644 index 00000000..b9c06521 Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-Light-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-LightItalic-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-LightItalic-vtt.ttf new file mode 100644 index 00000000..15159dff Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-LightItalic-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-Medium-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-Medium-vtt.ttf new file mode 100644 index 00000000..600e7147 Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-Medium-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-MediumItalic-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-MediumItalic-vtt.ttf new file mode 100644 index 00000000..3f5bec9d Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-MediumItalic-vtt.ttf differ diff --git a/sources/other files/truetype hinting source/IntelOneMono-Regular-vtt.ttf b/sources/other files/truetype hinting source/IntelOneMono-Regular-vtt.ttf new file mode 100644 index 00000000..bbcca3f2 Binary files /dev/null and b/sources/other files/truetype hinting source/IntelOneMono-Regular-vtt.ttf differ