Fix cv99
application on ASCII single quotes and graves (#1404).
This commit is contained in:
parent
85966f835c
commit
f623632f81
27 changed files with 125 additions and 145 deletions
1
changes/16.0.1.md
Normal file
1
changes/16.0.1.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
* Fix `cv99` application on ASCII single quotes and graves (#1404).
|
|
@ -1,14 +1,14 @@
|
||||||
$$include '../../../meta/macros.ptl'
|
$$include '../../../meta/macros.ptl'
|
||||||
|
|
||||||
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
|
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
|
||||||
import [RightDependentLink RightDependentTrigger CvDecompose] from"../../../support/gr.mjs"
|
import [DependentSelector CvDecompose] from"../../../support/gr.mjs"
|
||||||
|
|
||||||
glyph-module
|
glyph-module
|
||||||
|
|
||||||
glyph-block Letter-Cyrillic-Nje : begin
|
glyph-block Letter-Cyrillic-Nje : begin
|
||||||
glyph-block-import CommonShapes
|
glyph-block-import CommonShapes
|
||||||
glyph-block-import Common-Derivatives
|
glyph-block-import Common-Derivatives
|
||||||
glyph-block-import Letter-Shared : CreateRightDependentComposite
|
glyph-block-import Letter-Shared : CreateDependentComposite
|
||||||
glyph-block-import Letter-Shared-Shapes : SerifFrame
|
glyph-block-import Letter-Shared-Shapes : SerifFrame
|
||||||
glyph-block-import Letter-Cyrillic-Yeri : CyrlYeriUprightShape CyrlYeriRoundShape CyrlYeriCursiveShape
|
glyph-block-import Letter-Cyrillic-Yeri : CyrlYeriUprightShape CyrlYeriRoundShape CyrlYeriCursiveShape
|
||||||
|
|
||||||
|
@ -49,26 +49,15 @@ glyph-block Letter-Cyrillic-Nje : begin
|
||||||
serifedExceptBottomRight { SLAB-TAILED-CYRILLIC }
|
serifedExceptBottomRight { SLAB-TAILED-CYRILLIC }
|
||||||
|
|
||||||
foreach { suffix { slabType } } [Object.entries LeftHalfConfig] : do
|
foreach { suffix { slabType } } [Object.entries LeftHalfConfig] : do
|
||||||
local kReducedLink NjeReduction.(suffix)
|
|
||||||
create-glyph "cyrl/Nje/leftHalf.\(suffix)" : glyph-proc
|
create-glyph "cyrl/Nje/leftHalf.\(suffix)" : glyph-proc
|
||||||
local df : DivFrame para.diversityM 3
|
local df : DivFrame para.diversityM 3
|
||||||
set-width df.width
|
|
||||||
set-base-anchor 'cvDecompose' 0 0
|
|
||||||
include : df.markSet.capital
|
include : df.markSet.capital
|
||||||
include : LeftHalf slabType df CAP
|
include : LeftHalf slabType df CAP
|
||||||
set-base-anchor 'cvDecompose' 0 0
|
|
||||||
if kReducedLink : begin
|
|
||||||
RightDependentLink.set currentGlyph 'reduced' "cyrl/Nje/leftHalf.\(kReducedLink)"
|
|
||||||
|
|
||||||
create-glyph "cyrl/nje/leftHalf.\(suffix)" : glyph-proc
|
create-glyph "cyrl/nje/leftHalf.\(suffix)" : glyph-proc
|
||||||
local df : DivFrame para.diversityM 3
|
local df : DivFrame para.diversityM 3
|
||||||
set-width df.width
|
|
||||||
set-base-anchor 'cvDecompose' 0 0
|
|
||||||
include : df.markSet.e
|
include : df.markSet.e
|
||||||
include : LeftHalf slabType df XH
|
include : LeftHalf slabType df XH
|
||||||
set-base-anchor 'cvDecompose' 0 0
|
|
||||||
if kReducedLink : begin
|
|
||||||
RightDependentLink.set currentGlyph 'reduced' "cyrl/nje/leftHalf.\(kReducedLink)"
|
|
||||||
|
|
||||||
define YerConfig : object
|
define YerConfig : object
|
||||||
corner { CyrlYeriUprightShape }
|
corner { CyrlYeriUprightShape }
|
||||||
|
@ -78,31 +67,35 @@ glyph-block Letter-Cyrillic-Nje : begin
|
||||||
foreach { suffix { Yeri } } [Object.entries YerConfig] : do
|
foreach { suffix { Yeri } } [Object.entries YerConfig] : do
|
||||||
create-glyph "cyrl/Nje/rightHalf.\(suffix)" : glyph-proc
|
create-glyph "cyrl/Nje/rightHalf.\(suffix)" : glyph-proc
|
||||||
local df : DivFrame para.diversityM 3
|
local df : DivFrame para.diversityM 3
|
||||||
set-width 0
|
|
||||||
set-mark-anchor 'cvDecompose' 0 0
|
|
||||||
include : df.markSet.capital
|
include : df.markSet.capital
|
||||||
include : RightHalf Yeri df CAP
|
include : RightHalf Yeri df CAP
|
||||||
set-mark-anchor 'cvDecompose' 0 0
|
DependentSelector.set currentGlyph : if (Yeri === CyrlYeriUprightShape) 'full' 'reduced'
|
||||||
if (Yeri !== CyrlYeriUprightShape) : RightDependentTrigger.set currentGlyph 'reduced'
|
|
||||||
|
|
||||||
create-glyph "cyrl/nje/rightHalf.\(suffix)" : glyph-proc
|
create-glyph "cyrl/nje/rightHalf.\(suffix)" : glyph-proc
|
||||||
local df : DivFrame para.diversityM 3
|
local df : DivFrame para.diversityM 3
|
||||||
set-width 0
|
|
||||||
set-mark-anchor 'cvDecompose' 0 0
|
|
||||||
include : df.markSet.e
|
include : df.markSet.e
|
||||||
include : RightHalf Yeri df XH
|
include : RightHalf Yeri df XH
|
||||||
set-mark-anchor 'cvDecompose' 0 0
|
DependentSelector.set currentGlyph : if (Yeri === CyrlYeriUprightShape) 'full' 'reduced'
|
||||||
if (Yeri !== CyrlYeriUprightShape) : RightDependentTrigger.set currentGlyph 'reduced'
|
|
||||||
|
select-variant 'cyrl/Nje/leftHalf/full'
|
||||||
|
follow -- 'cyrl/Nje/leftHalf'
|
||||||
|
shapeFrom -- 'cyrl/Nje/leftHalf'
|
||||||
|
select-variant 'cyrl/nje/leftHalf/full'
|
||||||
|
follow -- 'cyrl/nje/leftHalf'
|
||||||
|
shapeFrom -- 'cyrl/nje/leftHalf'
|
||||||
|
select-variant 'cyrl/Nje/leftHalf/reduced'
|
||||||
|
follow -- 'cyrl/Nje/leftHalf/reduced'
|
||||||
|
shapeFrom -- 'cyrl/Nje/leftHalf'
|
||||||
|
select-variant 'cyrl/nje/leftHalf/reduced'
|
||||||
|
follow -- 'cyrl/nje/leftHalf/reduced'
|
||||||
|
shapeFrom -- 'cyrl/nje/leftHalf'
|
||||||
|
|
||||||
select-variant 'cyrl/Nje/rightHalf'
|
select-variant 'cyrl/Nje/rightHalf'
|
||||||
select-variant 'cyrl/nje/rightHalf'
|
select-variant 'cyrl/nje/rightHalf'
|
||||||
select-variant 'cyrl/Nje/leftHalf/full' (follow -- 'cyrl/Nje/leftHalf') (shapeFrom -- 'cyrl/Nje/leftHalf')
|
|
||||||
select-variant 'cyrl/nje/leftHalf/full' (follow -- 'cyrl/nje/leftHalf') (shapeFrom -- 'cyrl/nje/leftHalf')
|
|
||||||
select-variant 'cyrl/Nje/leftHalf/reduced' (follow -- 'cyrl/Nje/leftHalf') (shapeFrom -- 'cyrl/Nje/leftHalf') (reduction -- NjeReduction)
|
|
||||||
select-variant 'cyrl/nje/leftHalf/reduced' (follow -- 'cyrl/nje/leftHalf') (shapeFrom -- 'cyrl/nje/leftHalf') (reduction -- NjeReduction)
|
|
||||||
|
|
||||||
if [query-glyph 'cyrl/Nje/leftHalf/full'] : RightDependentLink.set [query-glyph 'cyrl/Nje/leftHalf/full'] 'reduced' 'cyrl/Nje/leftHalf/reduced'
|
CreateDependentComposite 'cyrl/Nje' 0x40A 'cyrl/Nje/rightHalf' : object
|
||||||
if [query-glyph 'cyrl/nje/leftHalf/full'] : RightDependentLink.set [query-glyph 'cyrl/nje/leftHalf/full'] 'reduced' 'cyrl/nje/leftHalf/reduced'
|
full 'cyrl/Nje/leftHalf/full'
|
||||||
|
reduced 'cyrl/Nje/leftHalf/reduced'
|
||||||
CreateRightDependentComposite 'cyrl/Nje' 0x40A 'cyrl/Nje/leftHalf/full' 'cyrl/Nje/rightHalf'
|
CreateDependentComposite 'cyrl/nje' 0x45A 'cyrl/nje/rightHalf' : object
|
||||||
CreateRightDependentComposite 'cyrl/nje' 0x45A 'cyrl/nje/leftHalf/full' 'cyrl/nje/rightHalf'
|
full 'cyrl/nje/leftHalf/full'
|
||||||
|
reduced 'cyrl/nje/leftHalf/reduced'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
$$include '../../../meta/macros.ptl'
|
$$include '../../../meta/macros.ptl'
|
||||||
|
|
||||||
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
|
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
|
||||||
import [RightDependentLink RightDependentTrigger CvDecompose MathSansSerif] from"../../../support/gr.mjs"
|
import [DependentSelector CvDecompose MathSansSerif] from"../../../support/gr.mjs"
|
||||||
|
|
||||||
glyph-module
|
glyph-module
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ glyph-block Letter-Latin-S : begin
|
||||||
glyph-block-import CommonShapes
|
glyph-block-import CommonShapes
|
||||||
glyph-block-import Common-Derivatives
|
glyph-block-import Common-Derivatives
|
||||||
glyph-block-import Letter-Blackboard : BBS BBD
|
glyph-block-import Letter-Blackboard : BBS BBD
|
||||||
glyph-block-import Letter-Shared : CreateAccentedComposition CreateRightDependentComposite
|
glyph-block-import Letter-Shared : CreateAccentedComposition CreateDependentComposite
|
||||||
glyph-block-import Letter-Shared-Shapes : DToothlessRise FlatHookDepth ArcStartSerifWidth
|
glyph-block-import Letter-Shared-Shapes : DToothlessRise FlatHookDepth ArcStartSerifWidth
|
||||||
glyph-block-import Letter-Shared-Shapes : SerifedArcStart_RtlLhs SerifedArcEnd_RtlRhs
|
glyph-block-import Letter-Shared-Shapes : SerifedArcStart_RtlLhs SerifedArcEnd_RtlRhs
|
||||||
glyph-block-import Letter-Shared-Shapes : SerifedArcStart_LtrRhs SerifedArcEnd_LtrLhs
|
glyph-block-import Letter-Shared-Shapes : SerifedArcStart_LtrRhs SerifedArcEnd_LtrLhs
|
||||||
|
@ -240,7 +240,6 @@ glyph-block Letter-Latin-S : begin
|
||||||
include : SStrokeImpl top bot doTS doBS [AdviceStroke2 2 3 (top - bot)] EssUpper
|
include : SStrokeImpl top bot doTS doBS [AdviceStroke2 2 3 (top - bot)] EssUpper
|
||||||
include : SAutoSlabStart doTS top Stroke Hook
|
include : SAutoSlabStart doTS top Stroke Hook
|
||||||
include : SAutoSlabEnd doBS bot Stroke Hook
|
include : SAutoSlabEnd doBS bot Stroke Hook
|
||||||
RightDependentLink.set currentGlyph "cap" "DollarKernelCap.\(suffix)"
|
|
||||||
|
|
||||||
create-glyph "DollarKernelCap.\(suffix)" : glyph-proc
|
create-glyph "DollarKernelCap.\(suffix)" : glyph-proc
|
||||||
define top : CAP * 0.88
|
define top : CAP * 0.88
|
||||||
|
@ -355,8 +354,6 @@ glyph-block Letter-Latin-S : begin
|
||||||
|
|
||||||
select-variant 'DollarKernelStd' (follow -- 'S')
|
select-variant 'DollarKernelStd' (follow -- 'S')
|
||||||
select-variant 'DollarKernelCap' (follow -- 'S')
|
select-variant 'DollarKernelCap' (follow -- 'S')
|
||||||
if [query-glyph 'DollarKernelStd'] : begin
|
|
||||||
RightDependentLink.set [query-glyph 'DollarKernelStd'] "cap" 'DollarKernelCap'
|
|
||||||
|
|
||||||
select-variant 'SSwash' 0x2C7E
|
select-variant 'SSwash' 0x2C7E
|
||||||
select-variant 'sSwash' 0x23F
|
select-variant 'sSwash' 0x23F
|
||||||
|
@ -429,17 +426,15 @@ glyph-block Letter-Latin-S : begin
|
||||||
FlatSlashShape Middle (XH / 2) (OverlayStroke / 2) (-0.2) 0.75
|
FlatSlashShape Middle (XH / 2) (OverlayStroke / 2) (-0.2) 0.75
|
||||||
|
|
||||||
define DollarConfig : object
|
define DollarConfig : object
|
||||||
open { 0.95 0.05 (Descender / 2) 0 0 }
|
open { 0.95 0.05 (Descender / 2) 0 "std" }
|
||||||
through { 0.95 0.05 (Descender / 2) 1 0 }
|
through { 0.95 0.05 (Descender / 2) 1 "std" }
|
||||||
interrupted { 0.95 0.05 (Descender / 2) 2 0 }
|
interrupted { 0.95 0.05 (Descender / 2) 2 "std" }
|
||||||
openCap { 0.88 0.12 0 0 1 }
|
openCap { 0.88 0.12 0 0 "cap" }
|
||||||
throughCap { 0.88 0.12 0 1 1 }
|
throughCap { 0.88 0.12 0 1 "cap" }
|
||||||
interruptedCap { 0.88 0.12 0 2 1 }
|
interruptedCap { 0.88 0.12 0 2 "cap" }
|
||||||
|
|
||||||
foreach { suffix { kTop kBot overflow fillType fShort } } [Object.entries DollarConfig] : do
|
foreach { suffix { kTop kBot overflow fillType selector } } [Object.entries DollarConfig] : do
|
||||||
create-glyph "dollar/bar.\(suffix)" : glyph-proc
|
create-glyph "dollar/bar.\(suffix)" : glyph-proc
|
||||||
set-width 0
|
|
||||||
set-mark-anchor 'cvDecompose' 0 0
|
|
||||||
define top : CAP * kTop
|
define top : CAP * kTop
|
||||||
define bot : CAP * kBot
|
define bot : CAP * kBot
|
||||||
define w : AdviceStroke 3
|
define w : AdviceStroke 3
|
||||||
|
@ -471,8 +466,10 @@ glyph-block Letter-Latin-S : begin
|
||||||
|
|
||||||
dispiro [corner 0 yTermLeft : widths.center gap] [corner Width yTermRight]
|
dispiro [corner 0 yTermLeft : widths.center gap] [corner Width yTermRight]
|
||||||
|
|
||||||
if fShort : RightDependentTrigger.set currentGlyph 'cap'
|
DependentSelector.set currentGlyph selector
|
||||||
|
|
||||||
select-variant 'dollar/bar' (follow -- 'dollar')
|
select-variant 'dollar/bar' (follow -- 'dollar')
|
||||||
|
|
||||||
CreateRightDependentComposite 'dollar' '$' 'DollarKernelStd' 'dollar/bar'
|
CreateDependentComposite 'dollar' '$' "dollar/bar" : object
|
||||||
|
'std' 'DollarKernelStd'
|
||||||
|
'cap' 'DollarKernelCap'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
$$include '../../meta/macros.ptl'
|
$$include '../../meta/macros.ptl'
|
||||||
|
|
||||||
import [mix clamp fallback] from"../../support/utils.mjs"
|
import [mix clamp fallback] from"../../support/utils.mjs"
|
||||||
import [Dotless CvDecompose RightDependentTrigger RightDependentLink] from"../../support/gr.mjs"
|
import [Dotless CvDecompose RightDependentTrigger RightDependentLink DependentSelector] from"../../support/gr.mjs"
|
||||||
import [DesignParameters] from"../../meta/aesthetics.mjs"
|
import [DesignParameters] from"../../meta/aesthetics.mjs"
|
||||||
|
|
||||||
glyph-module
|
glyph-module
|
||||||
|
@ -35,13 +35,20 @@ glyph-block Letter-Shared : begin
|
||||||
foreach accentGid [items-of accentGids] : include [refer-glyph accentGid]
|
foreach accentGid [items-of accentGids] : include [refer-glyph accentGid]
|
||||||
if (!fDontDecompose && !gr) : CvDecompose.set currentGlyph { src :: accentGids }
|
if (!fDontDecompose && !gr) : CvDecompose.set currentGlyph { src :: accentGids }
|
||||||
|
|
||||||
glyph-block-export CreateRightDependentComposite
|
glyph-block-export CreateDependentComposite
|
||||||
define [CreateRightDependentComposite gidDst unicode gidPart1 gidPart2] : begin
|
define [CreateDependentComposite gidDst unicode gidPart1 gidPart2Map] : begin
|
||||||
derive-multi-part-glyphs gidDst unicode { gidPart1 gidPart2 } : function [src] : glyph-proc
|
local sourceGidList { gidPart1 }
|
||||||
local { a b } src
|
local keyToIndexMap {.}
|
||||||
local trigger : RightDependentTrigger.get : query-glyph b
|
foreach { key g } [pairs-of gidPart2Map] : begin
|
||||||
local kernel : [RightDependentLink.get [query-glyph a] trigger] || a
|
set keyToIndexMap.(key) sourceGidList.length
|
||||||
include [refer-glyph kernel] AS_BASE ALSO_METRICS
|
sourceGidList.push g
|
||||||
|
|
||||||
|
derive-multi-part-glyphs gidDst unicode sourceGidList : function [src] : glyph-proc
|
||||||
|
local a src.0
|
||||||
|
local selector : DependentSelector.get : query-glyph a
|
||||||
|
local b src.(keyToIndexMap.(selector))
|
||||||
|
|
||||||
|
include [refer-glyph a] AS_BASE ALSO_METRICS
|
||||||
include [refer-glyph b]
|
include [refer-glyph b]
|
||||||
|
|
||||||
glyph-block-export SetGrekUpperTonos
|
glyph-block-export SetGrekUpperTonos
|
||||||
|
|
|
@ -89,7 +89,7 @@ glyph-block Mark-Above : begin
|
||||||
flat (markMiddle + markStress) aboveMarkBot [widths markFine markFine]
|
flat (markMiddle + markStress) aboveMarkBot [widths markFine markFine]
|
||||||
curl (markMiddle - markExtend) aboveMarkTop [widths markStress markStress]
|
curl (markMiddle - markExtend) aboveMarkTop [widths markStress markStress]
|
||||||
|
|
||||||
create-glyph 'asciiGrave.straight' : glyph-proc
|
create-glyph 'asciiGrave/body/straight' : glyph-proc
|
||||||
local df : DivFrame para.diversityF
|
local df : DivFrame para.diversityF
|
||||||
set-width df.width
|
set-width df.width
|
||||||
include : dispiro
|
include : dispiro
|
||||||
|
|
|
@ -152,7 +152,7 @@ glyph-block Symbol-Math-APL : begin
|
||||||
create-glyph 0x2353 : aplBoxed : refer-glyph 'wedge'
|
create-glyph 0x2353 : aplBoxed : refer-glyph 'wedge'
|
||||||
create-glyph 0x2354 : aplBoxed : refer-glyph 'nabla.aplForm'
|
create-glyph 0x2354 : aplBoxed : refer-glyph 'nabla.aplForm'
|
||||||
create-glyph 0x2357 : aplBoxed : refer-glyph 'arrowDown.NWID'
|
create-glyph 0x2357 : aplBoxed : refer-glyph 'arrowDown.NWID'
|
||||||
create-glyph 0x235E : aplBoxed : refer-glyph 'asciiSingleQuote.straight'
|
create-glyph 0x235E : aplBoxed : refer-glyph 'asciiSingleQuote/body/straight'
|
||||||
create-glyph 0x236F : aplBoxed : refer-glyph 'notequal'
|
create-glyph 0x236F : aplBoxed : refer-glyph 'notequal'
|
||||||
|
|
||||||
define [DeriveBoxed src] : aplBoxed : refer-glyph src
|
define [DeriveBoxed src] : aplBoxed : refer-glyph src
|
||||||
|
@ -184,19 +184,19 @@ glyph-block Symbol-Math-APL : begin
|
||||||
begin marks
|
begin marks
|
||||||
refer-glyph srcs.1
|
refer-glyph srcs.1
|
||||||
clear-anchors
|
clear-anchors
|
||||||
AplAccented 0x2362 'nabla.aplForm' 'dieresisAbove' [MarkSet.tack]
|
AplAccented 0x2362 'nabla.aplForm' 'dieresisAbove' [MarkSet.tack]
|
||||||
AplAccented 0x2361 'top' 'dieresisAbove' [MarkSet.tack]
|
AplAccented 0x2361 'top' 'dieresisAbove' [MarkSet.tack]
|
||||||
AplAccented 0x2363 'asterisk.pentaSMid' 'dieresisAbove' [MarkSet.plus]
|
AplAccented 0x2363 'asterisk.pentaSMid' 'dieresisAbove' [MarkSet.plus]
|
||||||
AplAccented 0x2364 'whiteSmallCircle.NWID' 'dieresisAbove' [MarkSet.plus]
|
AplAccented 0x2364 'whiteSmallCircle.NWID' 'dieresisAbove' [MarkSet.plus]
|
||||||
AplAccented 0x2365 'whiteCircle.NWID' 'dieresisAbove' [MarkSet.plus]
|
AplAccented 0x2365 'whiteCircle.NWID' 'dieresisAbove' [MarkSet.plus]
|
||||||
AplAccented 0x2368 'asciiTilde.low' 'dieresisAbove' [MarkSet.plus]
|
AplAccented 0x2368 'asciiTilde.low' 'dieresisAbove' [MarkSet.plus]
|
||||||
AplAccented 0x2369 'greater.narrow' 'dieresisAbove' [MarkSet.plus]
|
AplAccented 0x2369 'greater.narrow' 'dieresisAbove' [MarkSet.plus]
|
||||||
AplAccented 0x234A 'bot' 'underlineBelow' [MarkSet.tack]
|
AplAccented 0x234A 'bot' 'underlineBelow' [MarkSet.tack]
|
||||||
AplAccented 0x2358 'asciiSingleQuote.straight' 'underlineBelow' [MarkSet.plus]
|
AplAccented 0x2358 'asciiSingleQuote/body/straight' 'underlineBelow' [MarkSet.plus]
|
||||||
AplAccented 0x235A 'whiteDiamond.NWID' 'underlineBelow' [MarkSet.plus]
|
AplAccented 0x235A 'whiteDiamond.NWID' 'underlineBelow' [MarkSet.plus]
|
||||||
AplAccented 0x235B 'whiteSmallCircle.NWID' 'underlineBelow' [MarkSet.plus]
|
AplAccented 0x235B 'whiteSmallCircle.NWID' 'underlineBelow' [MarkSet.plus]
|
||||||
AplAccented 0x235C 'whiteCircle.NWID' 'underlineBelow' [MarkSet.plus]
|
AplAccented 0x235C 'whiteCircle.NWID' 'underlineBelow' [MarkSet.plus]
|
||||||
AplAccented 0x2377 'smallElement' 'underlineBelow' [MarkSet.plus]
|
AplAccented 0x2377 'smallElement' 'underlineBelow' [MarkSet.plus]
|
||||||
|
|
||||||
derive-composites 'apl/alphaBar' 0x2376 'grek/alpha' [refer-glyph 'underlineBelow'] [clear-anchors]
|
derive-composites 'apl/alphaBar' 0x2376 'grek/alpha' [refer-glyph 'underlineBelow'] [clear-anchors]
|
||||||
derive-composites 'apl/iotaBar' 0x2378 'grek/iota' [refer-glyph 'underlineBelow'] [clear-anchors]
|
derive-composites 'apl/iotaBar' 0x2378 'grek/iota' [refer-glyph 'underlineBelow'] [clear-anchors]
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
$$include '../../../meta/macros.ptl'
|
$$include '../../../meta/macros.ptl'
|
||||||
|
|
||||||
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
|
import [mix linreg clamp fallback] from"../../../support/utils.mjs"
|
||||||
|
import [DependentSelector] from"../../../support/gr.mjs"
|
||||||
|
|
||||||
glyph-module
|
glyph-module
|
||||||
|
|
||||||
|
@ -9,6 +10,7 @@ glyph-block Symbol-Punctuation-Quotes-And-Primes : begin
|
||||||
glyph-block-import CommonShapes
|
glyph-block-import CommonShapes
|
||||||
glyph-block-import Common-Derivatives
|
glyph-block-import Common-Derivatives
|
||||||
glyph-block-import Symbol-Punctuation-Small
|
glyph-block-import Symbol-Punctuation-Small
|
||||||
|
glyph-block-import Letter-Shared : CreateDependentComposite
|
||||||
|
|
||||||
local quoteTop (CAP * 1.05)
|
local quoteTop (CAP * 1.05)
|
||||||
local quoteBottom (XH * 0.85)
|
local quoteBottom (XH * 0.85)
|
||||||
|
@ -172,7 +174,7 @@ glyph-block Symbol-Punctuation-Quotes-And-Primes : begin
|
||||||
ApparentTranslate 0 ([mix [mix [mix PeriodSize commaLow 0.5] yCurlyQuotes 0.5] quoteBottom (-1)] - quoteTop)
|
ApparentTranslate 0 ([mix [mix [mix PeriodSize commaLow 0.5] yCurlyQuotes 0.5] quoteBottom (-1)] - quoteTop)
|
||||||
|
|
||||||
# ASCII quotes
|
# ASCII quotes
|
||||||
create-glyph 'asciiSingleQuote.straight' : glyph-proc
|
create-glyph 'asciiSingleQuote/body/straight' : glyph-proc
|
||||||
local df : DivFrame para.diversityF
|
local df : DivFrame para.diversityF
|
||||||
set-width df.width
|
set-width df.width
|
||||||
include : dispiro
|
include : dispiro
|
||||||
|
@ -180,22 +182,36 @@ glyph-block Symbol-Punctuation-Quotes-And-Primes : begin
|
||||||
g4.down.start df.middle quoteTop [heading Downward]
|
g4.down.start df.middle quoteTop [heading Downward]
|
||||||
g4 df.middle quoteBottom [widths.heading (HalfStroke * 0.95) (HalfStroke * 0.95) Downward]
|
g4 df.middle quoteBottom [widths.heading (HalfStroke * 0.95) (HalfStroke * 0.95) Downward]
|
||||||
|
|
||||||
alias 'asciiSingleQuote.raisedComma' null 'closeSingleQuote'
|
create-glyph 'asciiGrave/selector.straight' : glyph-proc
|
||||||
alias 'asciiGrave.raisedInverseComma' null 'revSingleQuote'
|
DependentSelector.set currentGlyph 'straight'
|
||||||
alias 'asciiGrave.raisedTurnComma' null 'openSingleQuote'
|
create-glyph 'asciiGrave/selector.raisedInverseComma' : glyph-proc
|
||||||
|
DependentSelector.set currentGlyph 'raisedInverseComma'
|
||||||
|
create-glyph 'asciiGrave/selector.raisedTurnComma' : glyph-proc
|
||||||
|
DependentSelector.set currentGlyph 'raisedTurnComma'
|
||||||
|
|
||||||
select-variant 'asciiSingleQuote' 0x27
|
create-glyph 'asciiSingleQuote/selector.straight' : glyph-proc
|
||||||
select-variant 'asciiGrave' 0x60
|
DependentSelector.set currentGlyph 'straight'
|
||||||
|
create-glyph 'asciiSingleQuote/selector.raisedComma' : glyph-proc
|
||||||
|
DependentSelector.set currentGlyph 'raisedComma'
|
||||||
|
|
||||||
alias 'mdfStress' 0x2C8 'asciiSingleQuote.straight'
|
select-variant 'asciiSingleQuote/selector' (follow -- 'asciiSingleQuote')
|
||||||
turned 'mdfSecondaryStress' 0x2CC 'asciiSingleQuote.straight' Middle (XH / 2)
|
select-variant 'asciiGrave/selector' (follow -- 'asciiGrave')
|
||||||
|
|
||||||
|
CreateDependentComposite 'asciiGrave' 0x60 'asciiGrave/selector' : object
|
||||||
|
'straight' 'asciiGrave/body/straight'
|
||||||
|
'raisedInverseComma' 'revSingleQuote'
|
||||||
|
'raisedTurnComma' 'openSingleQuote'
|
||||||
|
|
||||||
|
CreateDependentComposite 'asciiSingleQuote' 0x27 'asciiSingleQuote/selector' : object
|
||||||
|
'straight' 'asciiSingleQuote/body/straight'
|
||||||
|
'raisedComma' 'closeSingleQuote'
|
||||||
|
|
||||||
create-glyph 'asciiDoubleQuote' 0x22 : glyph-proc
|
create-glyph 'asciiDoubleQuote' 0x22 : glyph-proc
|
||||||
local dfSingle : DivFrame para.diversityF
|
local dfSingle : DivFrame para.diversityF
|
||||||
local dist : 0.2 * Width
|
local dist : 0.2 * Width
|
||||||
include : refer-glyph "asciiSingleQuote.straight"
|
include : refer-glyph "asciiSingleQuote/body/straight"
|
||||||
include : Translate (-dist * 2) 0
|
include : Translate (-dist * 2) 0
|
||||||
include : refer-glyph "asciiSingleQuote.straight"
|
include : refer-glyph "asciiSingleQuote/body/straight"
|
||||||
include : Translate (dist + Middle - dfSingle.middle) 0
|
include : Translate (dist + Middle - dfSingle.middle) 0
|
||||||
|
|
||||||
# Half-circle modifiers, use quote dimensions
|
# Half-circle modifiers, use quote dimensions
|
||||||
|
|
|
@ -16,10 +16,10 @@ export const Dotless = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const LowerYDotAtBelow = SimpleProp("LowerYDotAtBelow");
|
export const LowerYDotAtBelow = LinkedGlyphProp("LowerYDotAtBelow");
|
||||||
export const RightDependentTrigger = SimpleProp("RightDependentTrigger");
|
export const DependentSelector = LinkedGlyphProp("DependentSelector");
|
||||||
export const MathSansSerif = SimpleProp("MathSansSerif");
|
export const MathSansSerif = LinkedGlyphProp("MathSansSerif");
|
||||||
function SimpleProp(key) {
|
function LinkedGlyphProp(key) {
|
||||||
return {
|
return {
|
||||||
get(glyph) {
|
get(glyph) {
|
||||||
if (glyph && glyph.related) return glyph.related[key];
|
if (glyph && glyph.related) return glyph.related[key];
|
||||||
|
@ -33,29 +33,6 @@ function SimpleProp(key) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RightDependentLink = DependentLinkProp("RightDependentLink");
|
|
||||||
function DependentLinkProp(key) {
|
|
||||||
return {
|
|
||||||
get(glyph, subKey) {
|
|
||||||
if (glyph && glyph.related && glyph.related[key]) {
|
|
||||||
return glyph.related[key][subKey];
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getAll(glyph) {
|
|
||||||
if (glyph && glyph.related) return glyph.related[key];
|
|
||||||
else return null;
|
|
||||||
},
|
|
||||||
set(glyph, subKey, toGid) {
|
|
||||||
if (typeof toGid !== "string") throw new Error("Must supply a GID instead of a glyph");
|
|
||||||
if (!glyph.related) glyph.related = {};
|
|
||||||
if (!glyph.related[key]) glyph.related[key] = {};
|
|
||||||
glyph.related[key][subKey] = toGid;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export const Nwid = OtlTaggedProp("Nwid", "NWID");
|
export const Nwid = OtlTaggedProp("Nwid", "NWID");
|
||||||
export const Wwid = OtlTaggedProp("Wwid", "WWID");
|
export const Wwid = OtlTaggedProp("Wwid", "WWID");
|
||||||
export const Lnum = OtlTaggedProp("Lnum", "lnum");
|
export const Lnum = OtlTaggedProp("Lnum", "lnum");
|
||||||
|
@ -64,7 +41,7 @@ export const AplForm = OtlTaggedProp("AplForm", "APLF");
|
||||||
export const NumeratorForm = OtlTaggedProp("Numerator", "numr");
|
export const NumeratorForm = OtlTaggedProp("Numerator", "numr");
|
||||||
export const DenominatorForm = OtlTaggedProp("Denominator", "dnom");
|
export const DenominatorForm = OtlTaggedProp("Denominator", "dnom");
|
||||||
function OtlTaggedProp(key, otlTag) {
|
function OtlTaggedProp(key, otlTag) {
|
||||||
return { ...SimpleProp(key), otlTag };
|
return { ...LinkedGlyphProp(key), otlTag };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const CvDecompose = DecompositionProp("CvDecompose");
|
export const CvDecompose = DecompositionProp("CvDecompose");
|
||||||
|
@ -115,27 +92,21 @@ export const TieGlyph = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const Radical = {
|
function BoolProp(id) {
|
||||||
get(glyph) {
|
return {
|
||||||
if (glyph && glyph.related) return !!glyph.related.radical;
|
get(glyph) {
|
||||||
else return false;
|
if (glyph && glyph.related) return !!glyph.related[id];
|
||||||
},
|
else return false;
|
||||||
set(glyph) {
|
},
|
||||||
if (!glyph.related) glyph.related = {};
|
set(glyph) {
|
||||||
glyph.related.radical = true;
|
if (!glyph.related) glyph.related = {};
|
||||||
}
|
glyph.related[id] = true;
|
||||||
};
|
}
|
||||||
|
};
|
||||||
export const RequireCcmpDecompose = {
|
}
|
||||||
get(glyph) {
|
export const Radical = BoolProp("Radical");
|
||||||
if (glyph && glyph.related) return !!glyph.related.RequireCcmpDecompose;
|
export const RequireCcmpDecompose = BoolProp("RequireCcmpDecompose");
|
||||||
else return false;
|
export const NeqLigationSlashDotted = BoolProp("NeqLigationSlashDotted");
|
||||||
},
|
|
||||||
set(glyph) {
|
|
||||||
if (!glyph.related) glyph.related = {};
|
|
||||||
glyph.related.RequireCcmpDecompose = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const Joining = {
|
export const Joining = {
|
||||||
get(glyph) {
|
get(glyph) {
|
||||||
|
@ -168,17 +139,6 @@ export const Joining = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const NeqLigationSlashDotted = {
|
|
||||||
get(glyph) {
|
|
||||||
if (glyph && glyph.related) return !!glyph.related.neqLigationSlashDotted;
|
|
||||||
else return false;
|
|
||||||
},
|
|
||||||
set(glyph) {
|
|
||||||
if (!glyph.related) glyph.related = {};
|
|
||||||
glyph.related.neqLigationSlashDotted = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
const CvTagCache = new Map();
|
const CvTagCache = new Map();
|
||||||
|
@ -463,9 +423,4 @@ export function hashCv(g) {
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
export const SvInheritableRelations = [
|
export const SvInheritableRelations = [DependentSelector, Joining, NeqLigationSlashDotted];
|
||||||
RightDependentLink,
|
|
||||||
RightDependentTrigger,
|
|
||||||
Joining,
|
|
||||||
NeqLigationSlashDotted
|
|
||||||
];
|
|
||||||
|
|
|
@ -501,6 +501,7 @@ selector.halfH = "serifless"
|
||||||
selector."H/sansSerif" = "serifless"
|
selector."H/sansSerif" = "serifless"
|
||||||
selector.Hwair = "serifless"
|
selector.Hwair = "serifless"
|
||||||
selector."cyrl/Nje/leftHalf" = "serifless"
|
selector."cyrl/Nje/leftHalf" = "serifless"
|
||||||
|
selector."cyrl/Nje/leftHalf/reduced" = "serifless"
|
||||||
|
|
||||||
[prime.capital-h.variants.top-left-serifed]
|
[prime.capital-h.variants.top-left-serifed]
|
||||||
rank = 2
|
rank = 2
|
||||||
|
@ -510,6 +511,7 @@ selector.halfH = "topLeftSerifed"
|
||||||
selector."H/sansSerif" = "serifless"
|
selector."H/sansSerif" = "serifless"
|
||||||
selector.Hwair = "topLeftSerifed"
|
selector.Hwair = "topLeftSerifed"
|
||||||
selector."cyrl/Nje/leftHalf" = "topLeftSerifed"
|
selector."cyrl/Nje/leftHalf" = "topLeftSerifed"
|
||||||
|
selector."cyrl/Nje/leftHalf/reduced" = "topLeftSerifed"
|
||||||
|
|
||||||
[prime.capital-h.variants.top-left-bottom-right-serifed]
|
[prime.capital-h.variants.top-left-bottom-right-serifed]
|
||||||
rank = 3
|
rank = 3
|
||||||
|
@ -519,6 +521,7 @@ selector.halfH = "topLeftSerifed"
|
||||||
selector."H/sansSerif" = "serifless"
|
selector."H/sansSerif" = "serifless"
|
||||||
selector.Hwair = "topLeftSerifed"
|
selector.Hwair = "topLeftSerifed"
|
||||||
selector."cyrl/Nje/leftHalf" = "topLeftSerifed"
|
selector."cyrl/Nje/leftHalf" = "topLeftSerifed"
|
||||||
|
selector."cyrl/Nje/leftHalf/reduced" = "topLeftSerifed"
|
||||||
|
|
||||||
[prime.capital-h.variants.serifed]
|
[prime.capital-h.variants.serifed]
|
||||||
rank = 4
|
rank = 4
|
||||||
|
@ -528,6 +531,7 @@ selector.halfH = "serifed"
|
||||||
selector."H/sansSerif" = "serifless"
|
selector."H/sansSerif" = "serifless"
|
||||||
selector.Hwair = "serifedExceptBottomRight"
|
selector.Hwair = "serifedExceptBottomRight"
|
||||||
selector."cyrl/Nje/leftHalf" = "serifed"
|
selector."cyrl/Nje/leftHalf" = "serifed"
|
||||||
|
selector."cyrl/Nje/leftHalf/reduced" = "serifedExceptBottomRight"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -5364,6 +5368,7 @@ selector."cyrl/en" = "serifless"
|
||||||
selector."cyrl/en.BGR" = "serifless"
|
selector."cyrl/en.BGR" = "serifless"
|
||||||
selector."cyrl/en/descenderBase" = "serifless"
|
selector."cyrl/en/descenderBase" = "serifless"
|
||||||
selector."cyrl/nje/leftHalf" = "serifless"
|
selector."cyrl/nje/leftHalf" = "serifless"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "serifless"
|
||||||
|
|
||||||
[prime.cyrl-en.variants.tailed-serifless]
|
[prime.cyrl-en.variants.tailed-serifless]
|
||||||
rank = 2
|
rank = 2
|
||||||
|
@ -5372,6 +5377,7 @@ selector."cyrl/en" = "tailed"
|
||||||
selector."cyrl/en.BGR" = "tailed"
|
selector."cyrl/en.BGR" = "tailed"
|
||||||
selector."cyrl/en/descenderBase" = "serifless"
|
selector."cyrl/en/descenderBase" = "serifless"
|
||||||
selector."cyrl/nje/leftHalf" = "serifless"
|
selector."cyrl/nje/leftHalf" = "serifless"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "serifless"
|
||||||
|
|
||||||
[prime.cyrl-en.variants.top-left-serifed]
|
[prime.cyrl-en.variants.top-left-serifed]
|
||||||
rank = 3
|
rank = 3
|
||||||
|
@ -5380,6 +5386,7 @@ selector."cyrl/en" = "topLeftSerifed"
|
||||||
selector."cyrl/en.BGR" = "topLeftSerifed"
|
selector."cyrl/en.BGR" = "topLeftSerifed"
|
||||||
selector."cyrl/en/descenderBase" = "topLeftSerifed"
|
selector."cyrl/en/descenderBase" = "topLeftSerifed"
|
||||||
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
|
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "topLeftSerifed"
|
||||||
|
|
||||||
[prime.cyrl-en.variants.tailed-top-left-serifed]
|
[prime.cyrl-en.variants.tailed-top-left-serifed]
|
||||||
rank = 4
|
rank = 4
|
||||||
|
@ -5388,6 +5395,7 @@ selector."cyrl/en" = "tailedTopLeftSerifed"
|
||||||
selector."cyrl/en.BGR" = "tailedTopLeftSerifed"
|
selector."cyrl/en.BGR" = "tailedTopLeftSerifed"
|
||||||
selector."cyrl/en/descenderBase" = "topLeftSerifed"
|
selector."cyrl/en/descenderBase" = "topLeftSerifed"
|
||||||
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
|
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "topLeftSerifed"
|
||||||
|
|
||||||
[prime.cyrl-en.variants.top-left-bottom-right-serifed]
|
[prime.cyrl-en.variants.top-left-bottom-right-serifed]
|
||||||
rank = 5
|
rank = 5
|
||||||
|
@ -5396,6 +5404,7 @@ selector."cyrl/en" = "topLeftBottomRightSerifed"
|
||||||
selector."cyrl/en.BGR" = "topLeftBottomRightSerifed"
|
selector."cyrl/en.BGR" = "topLeftBottomRightSerifed"
|
||||||
selector."cyrl/en/descenderBase" = "topLeftSerifed"
|
selector."cyrl/en/descenderBase" = "topLeftSerifed"
|
||||||
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
|
selector."cyrl/nje/leftHalf" = "topLeftSerifed"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "topLeftSerifed"
|
||||||
|
|
||||||
[prime.cyrl-en.variants.serifed]
|
[prime.cyrl-en.variants.serifed]
|
||||||
rank = 6
|
rank = 6
|
||||||
|
@ -5404,6 +5413,7 @@ selector."cyrl/en" = "serifed"
|
||||||
selector."cyrl/en.BGR" = "serifedBGR"
|
selector."cyrl/en.BGR" = "serifedBGR"
|
||||||
selector."cyrl/en/descenderBase" = "serifed"
|
selector."cyrl/en/descenderBase" = "serifed"
|
||||||
selector."cyrl/nje/leftHalf" = "serifed"
|
selector."cyrl/nje/leftHalf" = "serifed"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "serifedExceptBottomRight"
|
||||||
|
|
||||||
[prime.cyrl-en.variants.tailed-serifed]
|
[prime.cyrl-en.variants.tailed-serifed]
|
||||||
rank = 7
|
rank = 7
|
||||||
|
@ -5412,6 +5422,7 @@ selector."cyrl/en" = "tailedSerifed"
|
||||||
selector."cyrl/en.BGR" = "tailedSerifedBGR"
|
selector."cyrl/en.BGR" = "tailedSerifedBGR"
|
||||||
selector."cyrl/en/descenderBase" = "serifed"
|
selector."cyrl/en/descenderBase" = "serifed"
|
||||||
selector."cyrl/nje/leftHalf" = "serifed"
|
selector."cyrl/nje/leftHalf" = "serifed"
|
||||||
|
selector."cyrl/nje/leftHalf/reduced" = "serifedExceptBottomRight"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue