Add IJ-acute ligatures (#2483) (#2536)

* Add IJ-acute ligatures (#2483).

* Doc

* Now 0xEF## is no longer just dingbats
This commit is contained in:
Belleve 2024-10-06 15:26:15 -10:00 committed by GitHub
parent 4d19a20610
commit fe348a7135
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 44 additions and 7 deletions

View file

@ -1,6 +1,7 @@
* Add IJ-acute ligatures (#2483).
* Allowed customizing menu WWS value to name map (#2488).
* Optimize glyphs for `rounded-serifless` and `rounded-serifed` variants for Capital Eszett (`ẞ`).
* Optimize glyphs for closed epsilon shapes (`U+025E`, `U+029A`).
* Optimize glyphs for cursive variants for Greek Lower Beta (`β`) and Cyrillic Lower Ve (`в`).
* Optimize glyphs for Volapük Ae/Oe/Ue (`U+A79A`..`U+A79F`).
* Optimize glyph for Cyrillic Lower Dzze (`U+A689`) under italics.
* Allowed customizing menu WWS value to name map (#2488).

View file

@ -2,7 +2,7 @@
$$include '../meta/macros.ptl'
import [mix linreg clamp fallback] from "@iosevka/util"
import [getGrMesh AnyCvOrCherryPicking CvDecompose Joining hashCv IsCompositeOrLigature] from "@iosevka/glyph/relation"
import [getGrMesh AnyCvOrCherryPicking CvDecompose Joining hashCv IsCompositeOrLigature NLDAcuteVariant] from "@iosevka/glyph/relation"
import [hashGeometry] from "@iosevka/geometry"
import [Transform] from "@iosevka/geometry/transform"
extern Map
@ -1437,10 +1437,17 @@ glyph-block Autobuild-Ligatures : begin
applyRelations jobs.relApplications
# Dutch IJ
define ijShrink : clamp 0.6 0.75 : StrokeWidthBlend 0.6 0.75
createLigatures 'compatLigature1' ijShrink ijShrink 1 1 [if (para.diversityI < 1) 0 0.2] : list
list 0x132 { 'I' 'J' }
list 0x133 { 'i' 'j' }
list 0xEF11 { 'IAcute' 'JAcute' }
list 0xEF12 { 'iAcute' 'jAcute' }
# Link Gr for acuted variants
NLDAcuteVariant.set [glyphStore.queryByUnicodeEnsured 0x132] [glyphStore.queryNameByUnicodeEnsured 0xEF11]
NLDAcuteVariant.set [glyphStore.queryByUnicodeEnsured 0x133] [glyphStore.queryNameByUnicodeEnsured 0xEF12]
define stdShrink : clamp 0.75 0.9 : StrokeWidthBlend 0.75 0.9
createLigatures 'compatLigature2' stdShrink stdShrink 1 1 0 : list

View file

@ -327,6 +327,8 @@ glyph-block Letter-Latin-Lower-I : begin
CreateAccentedComposition 'iBarOver' 0x268 'dotlessiBarOver' 'tittleAbove'
CreateAccentedComposition 'iRetroflexHook' 0x1D96 'dotlessiRetroflexHook' 'tittleAbove'
CreateAccentedComposition 'iAcute' 0xED 'dotlessi' 'acuteAbove'
do "l glyphs"
select-variant 'l' 'l'
link-reduced-variant 'l/sansSerif' 'l' MathSansSerif

View file

@ -149,6 +149,8 @@ glyph-block Letter-Latin-Lower-J : begin
select-variant 'dotlessjCurlyTail'
CreateAccentedComposition 'jCurlyTail' 0x29D 'dotlessjCurlyTail' 'tittleAbove'
CreateAccentedComposition 'jAcute' null 'dotlessj' 'acuteAbove'
create-glyph 'mathbb/dotlessj' : glyph-proc
include : MarkSet.p
local center : Middle + JBalance + BBD / 2

View file

@ -62,6 +62,8 @@ glyph-block Letter-Latin-Upper-I : begin
select-variant 'ISideways' 0xA7F7 (follow -- 'I')
select-variant 'ILonga' 0xA7FE (follow -- 'I')
CreateAccentedComposition 'IAcute' 0xCD 'I' 'acuteAbove'
create-glyph 'smcpI' 0x26A : glyph-proc
local df : include : DivFrame para.diversityI
include : df.markSet.e

View file

@ -8,6 +8,7 @@ glyph-module
glyph-block Letter-Latin-Upper-J : begin
glyph-block-import CommonShapes
glyph-block-import Common-Derivatives
glyph-block-import Letter-Shared : CreateAccentedComposition
glyph-block-import Letter-Shared-Shapes : CurlyTail FlatHookDepth
glyph-block-import Letter-Blackboard : BBS BBD
glyph-block-import Letter-Latin-Lower-J : FlatHookDotlessJShape
@ -149,6 +150,8 @@ glyph-block Letter-Latin-Upper-J : begin
alias 'grek/Yot' 0x37F 'J'
select-variant 'JCurlyTail' 0xA7B2
CreateAccentedComposition 'JAcute' null 'J' 'acuteAbove'
create-glyph 'mathbb/J' 0x1D541 : glyph-proc
local hookx (0.75 * SB)

View file

@ -1,9 +1,10 @@
$$include './meta/macros.ptl'
import [UkMapToLookup UkLigatureToLookup] from "./table-util.mjs"
import [Dotless TieMark TieGlyph OgonekTrY IsSuperscript IsSubscript LeaningMark LeaningMarkSpacer] from "@iosevka/glyph/relation"
import [Dotless TieMark TieGlyph OgonekTrY IsSuperscript IsSubscript LeaningMark LeaningMarkSpacer NLDAcuteVariant] from "@iosevka/glyph/relation"
import as UnicodeKnowledge from "@iosevka/font-glyphs/unicode-knowledge"
extern Map
extern Set
define-macro Ccmp-Group : syntax-rules
@ -42,7 +43,6 @@ export : define [buildCCMP gsub glyphStore markGlyphs] : begin
export-lookup combineLookup
Ccmp-Group "Mark transforms" : begin
define groupGrekUpperTonos {}
define groupLF {}
define dotlessFrom {}
@ -121,6 +121,17 @@ export : define [buildCCMP gsub glyphStore markGlyphs] : begin
object [from : list "h" "dotAbove"] [to "hDot"]
object [from : list "k" "dotAbove"] [to "kDot"]
Ccmp-Group "IJ-Acute composites" : begin
local substitutions {}
foreach { gn g } [glyphStore.namedEntries] : begin
local nldVariant : NLDAcuteVariant.get g
if nldVariant : substitutions.push
object [from : list gn 'acuteAbove'] [to nldVariant]
export-lookup : gsub.createLookup : object
.type 'gsub_ligature'
.substitutions substitutions
Ccmp-Group "Leaning Mark Trasnform" : begin
define LeaningAnchorMap : list
list 'above' 'leaningAbove'
@ -155,8 +166,6 @@ export : define [buildCCMP gsub glyphStore markGlyphs] : begin
.inputEnds 2
.apply {{.at 1 .lookup lookupTurnMarkIntoLeaningAndSpacer}}
Ccmp-Group "Rhotic Hook Transform" : begin
define superscripts {}
define subscripts {}

View file

@ -23,6 +23,7 @@ export const VS01 = LinkedGlyphProp("VS01");
export const TieMark = LinkedGlyphProp("TieMark");
export const LeaningMark = LinkedGlyphProp("LeaningMark");
export const LeaningMarkSpacer = LinkedGlyphProp("LeaningMarkSpacer");
export const NLDAcuteVariant = LinkedGlyphProp("NLDAcuteVariant");
export const LocalizedForm = {
SRB: {

View file

@ -88,11 +88,21 @@ export class GlyphStore {
queryByUnicode(u) {
return this.encodingForward.get(u);
}
queryByUnicodeEnsured(u) {
const g = this.encodingForward.get(u);
if (!g) throw new Error(`Glyph for Unicode ${u} doesn't exist.`);
return g;
}
queryNameByUnicode(u) {
const g = this.queryByUnicode(u);
if (!g) return undefined;
return this.queryNameOf(g);
}
queryNameByUnicodeEnsured(u) {
const g = this.queryByUnicode(u);
if (!g) throw new Error(`Glyph for Unicode ${u} doesn't exist.`);
return this.queryNameOf(g);
}
queryUnicodeOf(g) {
const s = this.encodingBackward.get(g);
if (!s || !s.size) return null;

View file

@ -4,7 +4,7 @@ export async function collectBlockData() {
const BlockData = [
[[0xe0a0, 0xe0df], "Private Use Area — Powerline"],
[[0xee00, 0xee0f], "Private Use Area — Progress Bar"],
[[0xef10, 0xef1f], "Private Use Area — Iosevka Private Dingbats"],
[[0xef10, 0xef1f], "Private Use Area — Iosevka Privates"],
];
for (const id of UnicodeDataIndex.Block) {