Fix cv44 application on certain t-derived letters (U+01AB, U+0236, U+0288, U+1DB5, and U+20A7) (#1405).

This commit is contained in:
be5invis 2022-08-23 02:30:16 -07:00
parent 178c951902
commit 78094dd541
10 changed files with 298 additions and 211 deletions

View file

@ -1 +1,2 @@
* Fix `cv99` application on ASCII single quotes and graves (#1404). * Fix `cv99` application on ASCII single quotes and graves (#1404).
* Fix `cv44` application on certain t-derived letters (`U+01AB`, `U+0236`, `U+0288`, `U+1DB5`, and `U+20A7`) (#1405).

View file

@ -3,7 +3,7 @@ import zlib from "zlib";
import { encode, decode } from "@msgpack/msgpack"; import { encode, decode } from "@msgpack/msgpack";
const Edition = 20; const Edition = 21;
const MAX_AGE = 16; const MAX_AGE = 16;
class GfEntry { class GfEntry {
constructor(age, value) { constructor(age, value) {

View file

@ -1186,7 +1186,7 @@ glyph-block Autobuild-Ligatures : begin
list 0x1F3 { 'd' 'z' } list 0x1F3 { 'd' 'z' }
list 0x478 { 'O' 'y' } list 0x478 { 'O' 'y' }
list 0x479 { 'o' 'y' } list 0x479 { 'o' 'y' }
list 0x20A7 { 'P' 't.flatHook' } list 0x20A7 { 'P' 't' }
list 0x20A8 { 'R' 's' } list 0x20A8 { 'R' 's' }
list 0x20AF { 'D' 'grek/rho' } list 0x20AF { 'D' 'grek/rho' }
list 0x2116 { 'N' 'numeroRightHalf' } list 0x2116 { 'N' 'numeroRightHalf' }

View file

@ -18,149 +18,209 @@ glyph-block Letter-Latin-Lower-T : begin
define dfNarrowT : DivFrame para.diversityF define dfNarrowT : DivFrame para.diversityF
define [xSmallTBarLeftT df] : df.middle - TBalance * df.div * df.div - HalfStroke * HVContrast define [xSmallTBarLeftT df] : df.middle - TBalance * df.div * df.div - HalfStroke * HVContrast
define [xSmallTCrossRefT df] : [xSmallTBarLeftT df] + df.div * TBalance2 + HalfStroke * HVContrast define [xSmallTCrossRefT df] : [xSmallTBarLeftT df] + df.div * TBalance2 + HalfStroke * HVContrast
define xSmallTBarLeft : xSmallTBarLeftT : DivFrame 1
define yCrossBar XH define yCrossBar XH
define yShortNeck1 : Math.max [mix XH Ascender 0.5] ([mix XH Ascender 0.875] - Stroke * 0.125) define yShortNeck1 : Math.max [mix XH Ascender 0.5] ([mix XH Ascender 0.875] - Stroke * 0.125)
define yShortNeck2 : Math.max [mix XH Ascender 0.5] ([mix XH Ascender 0.75] - Stroke * 0.125) define yShortNeck2 : Math.max [mix XH Ascender 0.5] ([mix XH Ascender 0.75] - Stroke * 0.125)
define [SmallTHookShapeT sink offset top bot sw] : begin define Standard : namespace
local hookx : xSmallTBarLeft + [Math.max ((Width - SB * 2) * 0.75 + Stroke * 0.25 * HVContrast) (Stroke * HVContrast * 2.25)] export : define [BarLeftPos df] : xSmallTBarLeftT df
local turn : [mix xSmallTBarLeft hookx 0.5] + CorrectionOMidS
local adb : Math.max Hook ((turn - xSmallTBarLeft) * 1.2)
return : sink export : define [HookShapeT sink df offset top bot sw] : begin
widths.lhs sw local xLeft : xSmallTBarLeftT df
[if (sink == spiro-outline) corner flat] (offset + xSmallTBarLeft) top [heading Downward] local hookx : xLeft + [Math.max ((df.width - df.leftSB * 2) * 0.75 + Stroke * 0.25 * HVContrast) (Stroke * HVContrast * 2.25)]
curl (offset + xSmallTBarLeft) (bot + adb) local turn : [mix xLeft hookx 0.5] + CorrectionOMidS
hookend (bot + O + offset) (tight -- !para.isItalic) local adb : Math.max Hook ((turn - xLeft) * 1.2)
g4 (hookx - offset) (bot + Hook)
if (sink == spiro-outline) {[corner (hookx - offset) top]} {}
define [SmallTCrossBar] : HCrossBar.top return : sink
xSmallTBarLeft + HalfStroke * HVContrast - 1.0625 * LongJut + TBalance2 widths.lhs sw
xSmallTBarLeft + HalfStroke * HVContrast + 1.0625 * LongJut + TBalance2 [if (sink == spiro-outline) corner flat] (offset + xLeft) top [heading Downward]
begin yCrossBar curl (offset + xLeft) (bot + adb)
hookend (bot + O + offset) (tight -- !para.isItalic)
g4 (hookx - offset) (bot + Hook)
if (sink == spiro-outline) {[corner (hookx - offset) top]} {}
define [StandardBody __ top bot] : glyph-proc export : define [CrossBar df] : HCrossBar.top
local g : include : SmallTHookShapeT dispiro 0 top bot Stroke
set-base-anchor 'bottomright' g.knots.(g.knots.length - 1).x g.knots.(g.knots.length - 1).y
set-base-anchor 'above' (xSmallTBarLeft + 0.5 * Stroke * HVContrast) top
set-base-anchor 'below' [mix xSmallTBarLeft g.knots.(g.knots.length - 1).x : StrokeWidthBlend 0.375 0.5] bot
set-base-anchor 'overlay' (g.knots.0.x + 0.625 * Stroke * HVContrast) (XH * 0.58)
include : SmallTCrossBar
define [DiagTailedSmallTHookShape df top bot sw] : begin
local xMid : [xSmallTBarLeftT df] + HalfStroke * HVContrast
return : dispiro
flat xMid top [widths.center.heading sw Downward]
DiagonalTailR df xMid bot [DiagonalTailStdDepth [DivFrame : Math.sqrt df.div] sw] sw
define [DiagTailBody df top] : glyph-proc
local g : include : DiagTailedSmallTHookShape df top 0 Stroke
set-base-anchor 'above' ([xSmallTBarLeftT df] + 0.5 * Stroke * HVContrast) top
set-base-anchor 'overlay' (g.knots.0.x + 0.125 * Stroke * HVContrast) (XH * 0.58)
include : HCrossBar.top
[xSmallTCrossRefT df] - LongJut * [Math.sqrt df.div] [xSmallTCrossRefT df] - LongJut * [Math.sqrt df.div]
[xSmallTCrossRefT df] + LongJut * [Math.sqrt df.div] [xSmallTCrossRefT df] + LongJut * [Math.sqrt df.div]
begin yCrossBar begin yCrossBar
define [FlatBody df top bot] : TFlatShapeImpl false df top bot [mix 1 df.div 2] 0 ###########################################################################################
define [RetroflexHookBody df top bot] : TFlatShapeImpl true df top bot [mix 1 df.div 2] 0
define [TFlatShapeImpl fRetroflex df top bot m ext] : glyph-proc export : define [Body df top bot] : glyph-proc
local xCrossLeft : mix 0 SB m include : CrossBar df
local xCrossRight : mix df.width df.rightSB m
local xBarLeft : [mix xCrossLeft xCrossRight 0.42] - Stroke * 0.375 * HVContrast local g : include : HookShapeT dispiro df 0 top bot Stroke
local hd : FlatHookDepth df local gEnd g.knots.(g.knots.length - 1)
include : union set-base-anchor 'bottomright' gEnd.x gEnd.y
HCrossBar.top xCrossLeft (xCrossRight + ext) yCrossBar
dispiro local xLeft : xSmallTBarLeftT df
set-base-anchor 'above' (xLeft + 0.5 * Stroke * HVContrast) top
set-base-anchor 'below' [mix xLeft gEnd.x : StrokeWidthBlend 0.375 0.5] bot
set-base-anchor 'overlay' (g.knots.0.x + 0.625 * Stroke * HVContrast) (XH * 0.58)
export : define [Retroflex df top bot] : Flat.Retroflex df top bot
define DiagTail : namespace
define [HookShape df top bot sw] : begin
local xMid : [xSmallTBarLeftT df] + HalfStroke * HVContrast
return : dispiro
flat xMid top [widths.center.heading sw Downward]
DiagonalTailR df xMid bot [DiagonalTailStdDepth [DivFrame : Math.sqrt df.div] sw] sw
###########################################################################################
export : define [BarLeftPos df] : xSmallTBarLeftT df
export : define [Body df top] : glyph-proc
include : Standard.CrossBar df
local g : include : HookShape df top 0 Stroke
local gEnd g.rhsKnots.(g.rhsKnots.length - 1)
set-base-anchor 'bottomright' gEnd.x gEnd.y
set-base-anchor 'above' ([xSmallTBarLeftT df] + 0.5 * Stroke * HVContrast) top
set-base-anchor 'overlay' (g.knots.0.x + 0.125 * Stroke * HVContrast) (XH * 0.58)
export : define [Retroflex df top bot] : Flat.Retroflex df top bot
define Flat : namespace
export : define [BarLeftPos df] : xSmallTBarLeftT df
export : define [Body df top bot] : Impl false false df top bot [mix 1 df.div 2] 0
export : define [Retroflex df top bot] : Impl false true df top bot [mix 1 df.div 2] 0
export : define [CrossRTBody df top bot] : Impl true true df top bot [mix 1 df.div 2] 0
define [Impl fCross fRetroflex df top bot m ext] : glyph-proc
local xCrossLeft : mix 0 SB m
local xCrossRight : mix df.width df.rightSB m
local xBarLeft : if fCross
df.middle - 0.5 * HVContrast * Stroke
[mix xCrossLeft xCrossRight 0.42] - 0.375 * HVContrast * Stroke
local hd : FlatHookDepth df
define xTailEnd : piecewise
fRetroflex : xBarLeft + HookX + HalfStroke * HVContrast
fCross : xBarLeft + hd.x
true xCrossRight
include : union
HCrossBar.top xCrossLeft (xCrossRight + ext) yCrossBar
dispiro
widths.rhs
if (fRetroflex || fCross)
straight.left.start xTailEnd bot
list
flat xCrossRight bot
curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] bot
archv.superness DesignParameters.tightHookSuperness
flat xBarLeft [if fRetroflex (bot + Hook + HalfStroke) hd.y]
curl xBarLeft top [heading Upward]
set-base-anchor 'above' (xBarLeft + 0.5 * Stroke * HVContrast) top
set-base-anchor 'topright' xCrossRight Ascender
set-base-anchor 'overlay' (xBarLeft + 0.625 * Stroke * HVContrast) (XH * 0.58)
set-base-anchor 'below' (HalfStroke * HVContrast + [Math.min (xBarLeft + hd.x / 2) (xCrossRight - 1)]) bot
set-base-anchor 'bottomright' xTailEnd bot
set-base-anchor 'lTailHookAttach' xTailEnd (bot + Stroke)
define Cross : namespace
export : define [BarLeftPos df] : df.middle - 0.5 * HVContrast * Stroke
export : define [Body df top bot] : glyph-proc
include : VBar df.middle 0 top
include : HCrossBar.top (df.middle - LongJut * [Math.sqrt df.div]) (df.middle + LongJut * [Math.sqrt df.div]) yCrossBar
set-base-anchor 'overlay' df.middle (XH * 0.58)
export : define [Retroflex df top bot] : Flat.CrossRTBody df top bot
export : define [LTBody df top bot] : glyph-proc
include : Body df top bot
define xEnd : df.middle + 1.25 * HVContrast * Stroke
include : HBarBottom df.middle xEnd 0
set-base-anchor 'bottomright' xEnd bot
set-base-anchor 'lTailHookAttach' xEnd (bot + Stroke)
export : define [PLBody df top bot] : glyph-proc
include : Body df top bot
include : HBarBottom df.middle RightSB 0
define HooklessAsymmetric : namespace
export : define [BarLeftPos df] : xSmallTBarLeftT df
export : define [Body df top bot] : glyph-proc
define xBarLeft : xSmallTBarLeftT df
include : VBarLeft xBarLeft 0 top
include : difference
HCrossBar.top xBarLeft (df.middle + df.div * LongJut) yCrossBar
MaskLeft (xBarLeft - O)
set-base-anchor 'above' (xBarLeft + 0.5 * Stroke * HVContrast) top
set-base-anchor 'overlay' (xBarLeft + 0.625 * Stroke * HVContrast) (XH * 0.58)
set-base-anchor 'below' (xBarLeft + HalfStroke * HVContrast) bot
export : define [LTBody df top bot] : glyph-proc
include : Body df top bot
define xBarLeft : xSmallTBarLeftT df
define xEnd : xBarLeft + 1.75 * HVContrast * Stroke
include : HBarBottom xBarLeft xEnd 0
set-base-anchor 'bottomright' xEnd bot
set-base-anchor 'lTailHookAttach' xEnd (bot + Stroke)
export : define [Retroflex df top bot] : glyph-proc
define xBarLeft : xSmallTBarLeftT df
include : dispiro
widths.rhs widths.rhs
if fRetroflex straight.left.start (xBarLeft + HookX + HalfStroke * HVContrast) bot
straight.left.start (xBarLeft + HookX + HalfStroke * HVContrast) bot flat xBarLeft (bot + Hook + HalfStroke)
list
flat xCrossRight bot
curl [Math.min (xBarLeft + hd.x) (xCrossRight - 1)] bot
archv.superness DesignParameters.tightHookSuperness
flat xBarLeft [if fRetroflex (bot + Hook + HalfStroke) hd.y]
curl xBarLeft top [heading Upward] curl xBarLeft top [heading Upward]
set-base-anchor 'above' (xBarLeft + 0.5 * Stroke * HVContrast) top include : difference
set-base-anchor 'topright' xCrossRight Ascender HCrossBar.top xBarLeft (df.middle + df.div * LongJut) yCrossBar
set-base-anchor 'overlay' (xBarLeft + 0.625 * Stroke * HVContrast) (XH * 0.58) MaskLeft (xBarLeft - O)
set-base-anchor 'below' (HalfStroke * HVContrast + [Math.min (xBarLeft + hd.x / 2) (xCrossRight - 1)]) bot
define [CrossBody df top bot] : glyph-proc export : define [PLBody df top bot] : glyph-proc
include : VBar df.middle 0 top include : Body df top bot
include : HCrossBar.top (df.middle - LongJut * [Math.sqrt df.div]) (df.middle + LongJut * [Math.sqrt df.div]) yCrossBar define xBarLeft : xSmallTBarLeftT df
set-base-anchor 'overlay' df.middle (XH * 0.58) include : HBarBottom xBarLeft RightSB 0
define [CrossPLBody df top bot] : glyph-proc
include : CrossBody df top bot
include : HBarBottom df.middle RightSB 0
define [HooklessAsymmetricBody df top bot] : glyph-proc
define xBarLeft : xSmallTBarLeftT df
include : VBarLeft xBarLeft 0 top
include : difference
HCrossBar.top xBarLeft (df.middle + df.div * LongJut) yCrossBar
MaskLeft (xBarLeft - O)
set-base-anchor 'above' (xBarLeft + 0.5 * Stroke * HVContrast) top
set-base-anchor 'overlay' (xBarLeft + 0.625 * Stroke * HVContrast) (XH * 0.58)
set-base-anchor 'below' (xBarLeft + HalfStroke * HVContrast) bot
define [HooklessAsymmetricPLBody df top bot] : glyph-proc
include : HooklessAsymmetricBody df top bot
define xBarLeft : xSmallTBarLeftT df
include : HBarBottom xBarLeft RightSB 0
define [PhoneticLeftBody df top bot] : glyph-proc
include : TFlatShapeImpl false df top bot 1 0
define SmallTConfig : object define SmallTConfig : object
standard { [DivFrame 1] StandardBody Ascender } standard { [DivFrame 1] Standard Ascender }
diagonalTailed { dfNarrowT DiagTailBody Ascender } diagonalTailed { dfNarrowT DiagTail Ascender }
flatHook { dfNarrowT FlatBody Ascender } flatHook { dfNarrowT Flat Ascender }
phoneticLeft { dfNarrowT FlatBody Ascender } cross { dfNarrowT Cross Ascender }
retroflexHookBase { dfNarrowT RetroflexHookBody Ascender } hooklessAsymmetric { dfNarrowT HooklessAsymmetric Ascender }
cross { dfNarrowT CrossBody Ascender }
hooklessAsymmetric { dfNarrowT HooklessAsymmetricBody Ascender }
crossPL { dfNarrowT CrossPLBody Ascender }
hooklessAsymmetricPL { dfNarrowT HooklessAsymmetricPLBody Ascender }
standardShortNeck { [DivFrame 1] StandardBody yShortNeck1 } standardShortNeck { [DivFrame 1] Standard yShortNeck1 }
diagonalTailedShortNeck { dfNarrowT DiagTailBody yShortNeck1 } diagonalTailedShortNeck { dfNarrowT DiagTail yShortNeck1 }
flatHookShortNeck { dfNarrowT FlatBody yShortNeck1 } flatHookShortNeck { dfNarrowT Flat yShortNeck1 }
phoneticLeftShortNeck { dfNarrowT FlatBody yShortNeck1 } crossShortNeck { dfNarrowT Cross yShortNeck1 }
retroflexHookBaseShortNeck { dfNarrowT RetroflexHookBody yShortNeck1 } hooklessAsymmetricShortNeck { dfNarrowT HooklessAsymmetric yShortNeck1 }
crossShortNeck { dfNarrowT CrossBody yShortNeck1 }
hooklessAsymmetricShortNeck { dfNarrowT HooklessAsymmetricBody yShortNeck1 }
crossPLShortNeck { dfNarrowT CrossPLBody yShortNeck1 }
hooklessAsymmetricPLShortNeck { dfNarrowT HooklessAsymmetricPLBody yShortNeck1 }
standardShortNeck2 { [DivFrame 1] StandardBody yShortNeck2 } standardShortNeck2 { [DivFrame 1] Standard yShortNeck2 }
diagonalTailedShortNeck2 { dfNarrowT DiagTailBody yShortNeck2 } diagonalTailedShortNeck2 { dfNarrowT DiagTail yShortNeck2 }
flatHookShortNeck2 { dfNarrowT FlatBody yShortNeck2 } flatHookShortNeck2 { dfNarrowT Flat yShortNeck2 }
phoneticLeftShortNeck2 { dfNarrowT FlatBody yShortNeck2 } crossShortNeck2 { dfNarrowT Cross yShortNeck2 }
retroflexHookBaseShortNeck2 { dfNarrowT RetroflexHookBody yShortNeck2 } hooklessAsymmetricShortNeck2 { dfNarrowT HooklessAsymmetric yShortNeck2 }
crossShortNeck2 { dfNarrowT CrossBody yShortNeck2 }
hooklessAsymmetricShortNeck2 { dfNarrowT HooklessAsymmetricBody yShortNeck2 }
crossPLShortNeck2 { dfNarrowT CrossPLBody yShortNeck2 }
hooklessAsymmetricPLShortNeck2 { dfNarrowT HooklessAsymmetricPLBody yShortNeck2 }
foreach { suffix { df body top } } [Object.entries SmallTConfig] : do foreach { suffix { df Style top } } [Object.entries SmallTConfig] : do
create-glyph "t.\(suffix)" : glyph-proc create-glyph "t.\(suffix)" : glyph-proc
set-width df.width set-width df.width
include : df.markSet.b include : df.markSet.b
include : body df top 0 include : Style.Body df top 0
create-glyph "t/phoneticLeft2.\(suffix)" : glyph-proc
set-width df.width
include : df.markSet.b
include : (Style.PLBody || Style.Body) df top 0
create-glyph "t/teshLeft.\(suffix)" : glyph-proc create-glyph "t/teshLeft.\(suffix)" : glyph-proc
define df1 : DivFrame 1 define df1 : DivFrame 1
set-width df1.width set-width df1.width
include : df1.markSet.b include : df1.markSet.b
include : body df1 top 0 include : Style.Body df1 top 0
include : HCrossBar.top df1.middle (df1.width + df1.middle) yCrossBar include : HCrossBar.top df1.middle (df1.width + df1.middle) yCrossBar
create-glyph "tHookTop.\(suffix)" : glyph-proc create-glyph "tHookTop.\(suffix)" : glyph-proc
@ -168,40 +228,51 @@ glyph-block Letter-Latin-Lower-T : begin
currentGlyph.clearGeometry currentGlyph.clearGeometry
local attach : currentGlyph.gizmo.unapply currentGlyph.baseAnchors.above local attach : currentGlyph.gizmo.unapply currentGlyph.baseAnchors.above
include : union include : union
difference [body df top 0] [MaskAbove XH] difference [Style.Body df top 0] [MaskAbove XH]
VerticalHook attach.x XH HookX (-Hook) VerticalHook attach.x XH HookX (-Hook)
if (body === StandardBody) : create-glyph "tLTail.\(suffix)" : glyph-proc create-glyph "tLTail.\(suffix)" : glyph-proc
include : MarkSet.if set-width df.width
include [refer-glyph "t.\(suffix)"] AS_BASE ALSO_METRICS include : df.markSet.if
local attach : currentGlyph.gizmo.unapply currentGlyph.baseAnchors.bottomright include : (Style.LTBody || Style.Body) df top 0
include : VBarRight attach.x 0 attach.y
local attach : currentGlyph.gizmo.unapply (currentGlyph.baseAnchors.lTailHookAttach || currentGlyph.baseAnchors.bottomright)
if (attach.y > 0) : include : VBarRight attach.x 0 attach.y
include : VerticalHook (attach.x - HalfStroke * HVContrast) 0 (-HookX) Hook include : VerticalHook (attach.x - HalfStroke * HVContrast) 0 (-HookX) Hook
create-glyph "tRTail.\(suffix)" : glyph-proc create-glyph "tRTail.\(suffix)" : glyph-proc
set-width df.width set-width df.width
include : df.markSet.if include : df.markSet.if
include : body df top Descender include : Style.Retroflex df top Descender
turned "turnt.\(suffix)" nothing "t.\(suffix)" df.middle (XH / 2) [df.markSet.p] turned "turnt.\(suffix)" nothing "t.\(suffix)" df.middle (XH / 2) [df.markSet.p]
create-glyph "tCurlyTal.\(suffix)" : glyph-proc create-glyph "tCurlyTail.\(suffix)" : glyph-proc
include : MarkSet.b include : MarkSet.b
local df : DivFrame 1
local fine : AdviceStroke 3.5 local fine : AdviceStroke 3.5
local rinner : LongJut / 2 - fine / 2 local rinner : LongJut / 2 - fine / 2
local x2 : mix SB xSmallTBarLeft 0.4
local xLeft : Style.BarLeftPos df
local x2 : mix SB xLeft 0.4
local y2 : -fine local y2 : -fine
include : HBarTop (xSmallTBarLeft + HalfStroke - LongJut + TBalance2) (xSmallTBarLeft + HalfStroke + LongJut + TBalance2) XH
include : difference
Style.Body df top 0
MaskBelow (yCrossBar - Stroke - 0.1)
include : dispiro include : dispiro
widths.lhs widths.lhs
flat xSmallTBarLeft top [heading Downward] flat xLeft (yCrossBar - Stroke) [heading Downward]
curl xSmallTBarLeft (fine + rinner * 2) curl xLeft (fine + rinner * 2)
CurlyTail fine rinner (xSmallTBarLeft+ Stroke * HVContrast) 0 (xSmallTBarLeft + Stroke * HVContrast + LongJut) x2 y2 CurlyTail fine rinner (xLeft + Stroke * HVContrast) 0 (xLeft + Stroke * HVContrast + LongJut) x2 y2
select-variant 't' 't' select-variant 't' 't'
select-variant 't/teshLeft' (follow -- 't') select-variant 't/teshLeft' (follow -- 't')
select-variant 't/phoneticLeft1' (shapeFrom -- 't') select-variant 't/phoneticLeft1' (shapeFrom -- 't')
select-variant 't/phoneticLeft2' (shapeFrom -- 't') select-variant 't/phoneticLeft2'
select-variant 'turnt' 0x287 (follow -- 't') select-variant 'turnt' 0x287 (follow -- 't')
CreateCommaCaronComposition 'tcaron' 0x165 't' CreateCommaCaronComposition 'tcaron' 0x165 't'
derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla derive-glyphs 'tCedilla' 0x163 't' ConnectedCedilla
@ -209,7 +280,7 @@ glyph-block Letter-Latin-Lower-T : begin
select-variant "tHookTop" 0x1AD select-variant "tHookTop" 0x1AD
select-variant 'tLTail' 0x1AB select-variant 'tLTail' 0x1AB
select-variant 'tRTail' 0x288 select-variant 'tRTail' 0x288
select-variant 'tCurlyTal' 0x236 (follow -- 'tLTail') select-variant 'tCurlyTail' 0x236 (follow -- 'tRTail')
CreateAccentedComposition 'tTildeOver' 0x1D75 't' 'tildeOver' CreateAccentedComposition 'tTildeOver' 0x1D75 't' 'tildeOver'
@ -217,23 +288,23 @@ glyph-block Letter-Latin-Lower-T : begin
define SLAB-NONE 0 define SLAB-NONE 0
define SLAB-CLASSICAL 1 define SLAB-CLASSICAL 1
define SLAB-INWARD 2 define SLAB-INWARD 2
define [TsLigStrokeShape stroke top sb] : begin define [TsLigStrokeShape df stroke top sb] : begin
define archDepth : adviceSSmooth (XH + 0.5 * ArchDepth) (-1) stroke define archDepth : adviceSSmooth (XH + 0.5 * ArchDepth) (-1) stroke
return : dispiro return : dispiro
widths.lhs stroke widths.lhs stroke
flat xSmallTBarLeft top [heading Downward] flat [xSmallTBarLeftT df] top [heading Downward]
curl xSmallTBarLeft XH [heading Downward] curl [xSmallTBarLeftT df] XH [heading Downward]
alsoThru.g2 0.5 0.5 [widths.center stroke] alsoThru.g2 0.5 0.5 [widths.center stroke]
g4 RightSB (archDepth) [widths.rhs stroke] g4 df.rightSB (archDepth) [widths.rhs stroke]
match sb match sb
[Just SLAB-CLASSICAL] : SerifedArcEnd_RtlRhs SB Middle 0 stroke SHook [Just SLAB-CLASSICAL] : SerifedArcEnd_RtlRhs df.leftSB Middle 0 stroke SHook
[Just SLAB-INWARD] : list [Just SLAB-INWARD] : list
arcvh arcvh
g4 (Middle + CorrectionOMidX * stroke) O g4 (df.middle + CorrectionOMidX * stroke) O
g4 SB DToothlessRise g4 df.leftSB DToothlessRise
__ : list __ : list
hookend O (sw -- stroke) (swItalicAdj -- Stroke) hookend O (sw -- stroke) (swItalicAdj -- Stroke)
g4 SB SHook g4 df.leftSB SHook
define TSUpperConfig : object define TSUpperConfig : object
standard { Ascender } standard { Ascender }
@ -242,11 +313,12 @@ glyph-block Letter-Latin-Lower-T : begin
foreach { suffix { yTop } } [Object.entries TSUpperConfig] : do foreach { suffix { yTop } } [Object.entries TSUpperConfig] : do
create-glyph "tsLig/upperHalf.\(suffix)" : glyph-proc create-glyph "tsLig/upperHalf.\(suffix)" : glyph-proc
define df : DivFrame 1
set-base-anchor 'cvDecompose' 0 0 set-base-anchor 'cvDecompose' 0 0
include : difference include : difference
TsLigStrokeShape Stroke top false TsLigStrokeShape df Stroke top false
MaskBelow XH MaskBelow XH
include : SmallTCrossBar include : Standard.CrossBar df
define TSLowerConfig : object define TSLowerConfig : object
serifless { SLAB-NONE } serifless { SLAB-NONE }
@ -255,10 +327,11 @@ glyph-block Letter-Latin-Lower-T : begin
foreach { suffix { doBS } } [Object.entries TSLowerConfig] : do foreach { suffix { doBS } } [Object.entries TSLowerConfig] : do
create-glyph "tsLig/lowerHalf.\(suffix)" : glyph-proc create-glyph "tsLig/lowerHalf.\(suffix)" : glyph-proc
include : MarkSet.b define df : DivFrame 1
include : df.markSet.b
set-mark-anchor 'cvDecompose' 0 0 set-mark-anchor 'cvDecompose' 0 0
include : intersection include : intersection
TsLigStrokeShape Stroke Ascender doBS TsLigStrokeShape df Stroke Ascender doBS
MaskBelow XH MaskBelow XH
include : SAutoSlabEnd doBS 0 Stroke Hook include : SAutoSlabEnd doBS 0 Stroke Hook
@ -271,15 +344,17 @@ glyph-block Letter-Latin-Lower-T : begin
CvDecompose.set currentGlyph { 'tsLig/upperHalf' 'tsLig/lowerHalf' } CvDecompose.set currentGlyph { 'tsLig/upperHalf' 'tsLig/lowerHalf' }
create-glyph 'mathbb/t' 0x1D565 : glyph-proc create-glyph 'mathbb/t' 0x1D565 : glyph-proc
include : HBarTop xSmallTBarLeft (xSmallTBarLeft + BBD) Ascender BBS define df : DivFrame 1
include : SmallTHookShapeT dispiro 0 Ascender 0 BBS define xLeft : xSmallTBarLeftT df
include : HBarTop xLeft (xLeft + BBD) Ascender BBS
include : Standard.HookShapeT dispiro df 0 Ascender 0 BBS
include : intersection include : intersection
VBarLeft (xSmallTBarLeft + BBD) 0 Ascender BBS VBarLeft (xLeft + BBD) 0 Ascender BBS
SmallTHookShapeT spiro-outline 1 Ascender 0 BBS Standard.HookShapeT spiro-outline df 1 Ascender 0 BBS
include : difference include : difference
HCrossBar.top HCrossBar.top
xSmallTBarLeft + (BBD / 2) - LongJut + TBalance2 xLeft + (BBD / 2) - LongJut + TBalance2
xSmallTBarLeft + (BBD / 2) + LongJut + TBalance2 xLeft + (BBD / 2) + LongJut + TBalance2
begin yCrossBar begin yCrossBar
begin BBS begin BBS
Rect Ascender 0 xSmallTBarLeft (xSmallTBarLeft + BBD) Rect Ascender 0 xLeft (xLeft + BBD)

View file

@ -304,7 +304,7 @@ glyph-block Letter-Latin-S : begin
include : SAutoSlabStart doTS CAP Stroke Hook include : SAutoSlabStart doTS CAP Stroke Hook
local stroke : include : SStrokeImpl CAP 0 doTS doBS [AdviceStroke2 2 3 CAP] EssUpper local stroke : include : SStrokeImpl CAP 0 doTS doBS [AdviceStroke2 2 3 CAP] EssUpper
local start : currentGlyph.gizmo.unapply stroke.lhsKnots.(stroke.lhsKnots.length - 1) local start stroke.lhsKnots.(stroke.lhsKnots.length - 1)
local sw : AdviceStroke2 2 3 CAP local sw : AdviceStroke2 2 3 CAP
include : dispiro include : dispiro
@ -319,7 +319,7 @@ glyph-block Letter-Latin-S : begin
include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook
local stroke : include : SmallSStrokeImpl doTS doBS [AdviceStroke2 2 3 XH] EssLower local stroke : include : SmallSStrokeImpl doTS doBS [AdviceStroke2 2 3 XH] EssLower
local start : currentGlyph.gizmo.unapply stroke.lhsKnots.(stroke.lhsKnots.length - 1) local start stroke.lhsKnots.(stroke.lhsKnots.length - 1)
local sw : AdviceStroke2 2 3 XH local sw : AdviceStroke2 2 3 XH
include : dispiro include : dispiro
@ -335,7 +335,7 @@ glyph-block Letter-Latin-S : begin
include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook include : SAutoSlabStart doTS XH [AdviceStroke2 2 3 XH] Hook
local stroke : include : SmallSStrokeImpl doTS doBS [AdviceStroke2 2 3 XH] EssLower local stroke : include : SmallSStrokeImpl doTS doBS [AdviceStroke2 2 3 XH] EssLower
local start : currentGlyph.gizmo.unapply stroke.lhsKnots.(stroke.lhsKnots.length - 1) local start stroke.lhsKnots.(stroke.lhsKnots.length - 1)
include : new-glyph : glyph-proc include : new-glyph : glyph-proc
local sw : AdviceStroke2 2 3 XH local sw : AdviceStroke2 2 3 XH

View file

@ -106,7 +106,7 @@ glyph-block Letter-Latin-Upper-P : begin
set PShape.OpenGap : function [] : params [top [mul PShape.defaultMul] [bp PShape.BarPos] [sw Stroke]] : VBarLeft set PShape.OpenGap : function [] : params [top [mul PShape.defaultMul] [bp PShape.BarPos] [sw Stroke]] : VBarLeft
SB * mul + sw * HVContrast SB * mul + sw * HVContrast
[PBarPosY top sw bp] - sw [PBarPosY top sw bp] - sw
[PBarPosY top sw bp] + sw + 1 Math.max ([PBarPosY top sw bp] + sw) [mix top [PBarPosY top sw bp] 0.5]
0.2 * (RightSB - SB) * ([AdviceStroke 5] / Stroke) 0.2 * (RightSB - SB) * ([AdviceStroke 5] / Stroke)
set RevPShape.SlabMotion : function [top sw mul] : glyph-proc set RevPShape.SlabMotion : function [top sw mul] : glyph-proc
@ -119,7 +119,7 @@ glyph-block Letter-Latin-Upper-P : begin
set RevPShape.OpenGap : function [] : params [top [mul PShape.defaultMul] [bp PShape.BarPos] [sw Stroke]] : VBarRight set RevPShape.OpenGap : function [] : params [top [mul PShape.defaultMul] [bp PShape.BarPos] [sw Stroke]] : VBarRight
Width - SB * mul - sw * HVContrast Width - SB * mul - sw * HVContrast
[PBarPosY top sw bp] - sw [PBarPosY top sw bp] - sw
[PBarPosY top sw bp] + sw + 1 Math.max ([PBarPosY top sw bp] + sw) [mix top [PBarPosY top sw bp] 0.5]
0.2 * (RightSB - SB) * ([AdviceStroke 5] / Stroke) 0.2 * (RightSB - SB) * ([AdviceStroke 5] / Stroke)
define PConfig : object define PConfig : object

View file

@ -37,7 +37,7 @@ glyph-block Digits-Five : begin
include : difference include : difference
glyph-proc glyph-proc
local fiveStroke : include FiveStroke local fiveStroke : include FiveStroke
local firstKnot : currentGlyph.gizmo.unapply fiveStroke.rhsKnots.0 local firstKnot fiveStroke.rhsKnots.0
local oblCor : Math.hypot 1 obl local oblCor : Math.hypot 1 obl
local xVBar : firstKnot.x - oblCor * sw * HVContrast local xVBar : firstKnot.x - oblCor * sw * HVContrast

View file

@ -48,10 +48,10 @@ class DiSpiroProxy {
return this.m_origKnots; return this.m_origKnots;
} }
get lhsKnots() { get lhsKnots() {
return this.geometry.expand().lhs; return this.geometry.expand().lhsUntransformed;
} }
get rhsKnots() { get rhsKnots() {
return this.geometry.expand().rhs; return this.geometry.expand().rhsUntransformed;
} }
} }
function prepareSpiroKnots(_knots, s) { function prepareSpiroKnots(_knots, s) {

View file

@ -146,7 +146,18 @@ export class SpiroExpander {
rhs[j].y = knot.y - knot.d2 * dy; rhs[j].y = knot.y - knot.d2 * dy;
} }
this.interpolateUnimportantKnots(lhs, rhs); this.interpolateUnimportantKnots(lhs, rhs);
return { lhs, rhs };
const lhsUntransformed = [],
rhsUntransformed = [];
for (const z of lhs) {
const u = this.gizmo.unapply(z);
lhsUntransformed.push({ type: z.type, x: u.x, y: u.y });
}
for (const z of rhs) {
const u = this.gizmo.unapply(z);
rhsUntransformed.push({ type: z.type, x: u.x, y: u.y });
}
return { lhs, rhs, lhsUntransformed, rhsUntransformed };
} }
interpolateUnimportantKnots(lhs, rhs) { interpolateUnimportantKnots(lhs, rhs) {
for (let j = 0; j < this.controlKnots.length; j++) { for (let j = 0; j < this.controlKnots.length; j++) {

View file

@ -3746,10 +3746,10 @@ tag = "cv44"
rank = 1 rank = 1
description = "Standard `t` shape" description = "Standard `t` shape"
selector.t = "standard" selector.t = "standard"
selector."t/phoneticLeft1" = "phoneticLeft" selector."t/phoneticLeft1" = "flatHook"
selector."t/phoneticLeft2" = "phoneticLeft" selector."t/phoneticLeft2" = "flatHook"
selector.tHookTop = "standard" selector.tHookTop = "standard"
selector.tRTail = "retroflexHookBase" selector.tRTail = "flatHook"
selector.tLTail = "standard" selector.tLTail = "standard"
selector."tsLig/upperHalf" = "standard" selector."tsLig/upperHalf" = "standard"
@ -3757,22 +3757,22 @@ selector."tsLig/upperHalf" = "standard"
rank = 2 rank = 2
description = "`t` with flat hook" description = "`t` with flat hook"
selector.t = "flatHook" selector.t = "flatHook"
selector."t/phoneticLeft1" = "phoneticLeft" selector."t/phoneticLeft1" = "flatHook"
selector."t/phoneticLeft2" = "phoneticLeft" selector."t/phoneticLeft2" = "flatHook"
selector.tHookTop = "flatHook" selector.tHookTop = "flatHook"
selector.tRTail = "retroflexHookBase" selector.tRTail = "flatHook"
selector.tLTail = "standard" selector.tLTail = "flatHook"
selector."tsLig/upperHalf" = "standard" selector."tsLig/upperHalf" = "standard"
[prime.t.variants.diagonal-tailed] [prime.t.variants.diagonal-tailed]
rank = 3 rank = 3
description = "`t` with diagonal tail" description = "`t` with diagonal tail"
selector.t = "diagonalTailed" selector.t = "diagonalTailed"
selector."t/phoneticLeft1" = "phoneticLeft" selector."t/phoneticLeft1" = "flatHook"
selector."t/phoneticLeft2" = "phoneticLeft" selector."t/phoneticLeft2" = "flatHook"
selector.tHookTop = "diagonalTailed" selector.tHookTop = "diagonalTailed"
selector.tRTail = "retroflexHookBase" selector.tRTail = "flatHook"
selector.tLTail = "standard" selector.tLTail = "diagonalTailed"
selector."tsLig/upperHalf" = "standard" selector."tsLig/upperHalf" = "standard"
[prime.t.variants.cross] [prime.t.variants.cross]
@ -3780,10 +3780,10 @@ rank = 4
description = "Futura-like `t` shape" description = "Futura-like `t` shape"
selector.t = "cross" selector.t = "cross"
selector."t/phoneticLeft1" = "cross" selector."t/phoneticLeft1" = "cross"
selector."t/phoneticLeft2" = "crossPL" selector."t/phoneticLeft2" = "cross"
selector.tHookTop = "cross" selector.tHookTop = "cross"
selector.tRTail = "retroflexHookBase" selector.tRTail = "cross"
selector.tLTail = "standard" selector.tLTail = "cross"
selector."tsLig/upperHalf" = "standard" selector."tsLig/upperHalf" = "standard"
[prime.t.variants.hookless-asymmetric] [prime.t.variants.hookless-asymmetric]
@ -3791,20 +3791,20 @@ rank = 5
description = "`t` without hook and with ony half the cross bar" description = "`t` without hook and with ony half the cross bar"
selector.t = "hooklessAsymmetric" selector.t = "hooklessAsymmetric"
selector."t/phoneticLeft1" = "hooklessAsymmetric" selector."t/phoneticLeft1" = "hooklessAsymmetric"
selector."t/phoneticLeft2" = "hooklessAsymmetricPL" selector."t/phoneticLeft2" = "hooklessAsymmetric"
selector.tHookTop = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric"
selector.tRTail = "retroflexHookBase" selector.tRTail = "hooklessAsymmetric"
selector.tLTail = "standard" selector.tLTail = "hooklessAsymmetric"
selector."tsLig/upperHalf" = "standard" selector."tsLig/upperHalf" = "standard"
[prime.t.variants.standard-short-neck] [prime.t.variants.standard-short-neck]
rank = 6 rank = 6
description = "Standard `t` shape with a shorter neck" description = "Standard `t` shape with a shorter neck"
selector.t = "standardShortNeck" selector.t = "standardShortNeck"
selector."t/phoneticLeft1" = "phoneticLeftShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck"
selector."t/phoneticLeft2" = "phoneticLeftShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck"
selector.tHookTop = "standard" selector.tHookTop = "standard"
selector.tRTail = "retroflexHookBaseShortNeck" selector.tRTail = "flatHookShortNeck"
selector.tLTail = "standardShortNeck" selector.tLTail = "standardShortNeck"
selector."tsLig/upperHalf" = "standardShortNeck" selector."tsLig/upperHalf" = "standardShortNeck"
@ -3812,22 +3812,22 @@ selector."tsLig/upperHalf" = "standardShortNeck"
rank = 7 rank = 7
description = "`t` with flat hook and a slightly shorter neck" description = "`t` with flat hook and a slightly shorter neck"
selector.t = "flatHookShortNeck" selector.t = "flatHookShortNeck"
selector."t/phoneticLeft1" = "phoneticLeftShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck"
selector."t/phoneticLeft2" = "phoneticLeftShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck"
selector.tHookTop = "flatHook" selector.tHookTop = "flatHook"
selector.tRTail = "retroflexHookBaseShortNeck" selector.tRTail = "flatHookShortNeck"
selector.tLTail = "standardShortNeck" selector.tLTail = "flatHookShortNeck"
selector."tsLig/upperHalf" = "standardShortNeck" selector."tsLig/upperHalf" = "standardShortNeck"
[prime.t.variants.diagonal-tailed-short-neck] [prime.t.variants.diagonal-tailed-short-neck]
rank = 8 rank = 8
description = "`t` with diagonal tail and a shorter neck" description = "`t` with diagonal tail and a shorter neck"
selector.t = "diagonalTailedShortNeck" selector.t = "diagonalTailedShortNeck"
selector."t/phoneticLeft1" = "phoneticLeftShortNeck" selector."t/phoneticLeft1" = "flatHookShortNeck"
selector."t/phoneticLeft2" = "phoneticLeftShortNeck" selector."t/phoneticLeft2" = "flatHookShortNeck"
selector.tHookTop = "diagonalTailed" selector.tHookTop = "diagonalTailed"
selector.tRTail = "retroflexHookBaseShortNeck" selector.tRTail = "flatHookShortNeck"
selector.tLTail = "standardShortNeck" selector.tLTail = "diagonalTailedShortNeck"
selector."tsLig/upperHalf" = "standardShortNeck" selector."tsLig/upperHalf" = "standardShortNeck"
[prime.t.variants.cross-short-neck] [prime.t.variants.cross-short-neck]
@ -3835,10 +3835,10 @@ rank = 9
description = "Futura-like `t` shape with a shorter neck" description = "Futura-like `t` shape with a shorter neck"
selector.t = "crossShortNeck" selector.t = "crossShortNeck"
selector."t/phoneticLeft1" = "crossShortNeck" selector."t/phoneticLeft1" = "crossShortNeck"
selector."t/phoneticLeft2" = "crossPLShortNeck" selector."t/phoneticLeft2" = "crossShortNeck"
selector.tHookTop = "cross" selector.tHookTop = "cross"
selector.tRTail = "retroflexHookBaseShortNeck" selector.tRTail = "crossShortNeck"
selector.tLTail = "standardShortNeck" selector.tLTail = "crossShortNeck"
selector."tsLig/upperHalf" = "standardShortNeck" selector."tsLig/upperHalf" = "standardShortNeck"
[prime.t.variants.hookless-asymmetric-short-neck] [prime.t.variants.hookless-asymmetric-short-neck]
@ -3846,20 +3846,20 @@ rank = 10
description = "`t` without hook, with ony half the cross bar and a shorter neck" description = "`t` without hook, with ony half the cross bar and a shorter neck"
selector.t = "hooklessAsymmetricShortNeck" selector.t = "hooklessAsymmetricShortNeck"
selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck" selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck"
selector."t/phoneticLeft2" = "hooklessAsymmetricPLShortNeck" selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck"
selector.tHookTop = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric"
selector.tRTail = "retroflexHookBaseShortNeck" selector.tRTail = "hooklessAsymmetricShortNeck"
selector.tLTail = "standardShortNeck" selector.tLTail = "hooklessAsymmetricShortNeck"
selector."tsLig/upperHalf" = "standardShortNeck" selector."tsLig/upperHalf" = "standardShortNeck"
[prime.t.variants.standard-short-neck2] [prime.t.variants.standard-short-neck2]
rank = 11 rank = 11
description = "Standard `t` shape with a more shorter neck" description = "Standard `t` shape with a more shorter neck"
selector.t = "standardShortNeck2" selector.t = "standardShortNeck2"
selector."t/phoneticLeft1" = "phoneticLeftShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2"
selector."t/phoneticLeft2" = "phoneticLeftShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2"
selector.tHookTop = "standard" selector.tHookTop = "standard"
selector.tRTail = "retroflexHookBaseShortNeck2" selector.tRTail = "flatHookShortNeck2"
selector.tLTail = "standardShortNeck2" selector.tLTail = "standardShortNeck2"
selector."tsLig/upperHalf" = "standardShortNeck2" selector."tsLig/upperHalf" = "standardShortNeck2"
@ -3867,22 +3867,22 @@ selector."tsLig/upperHalf" = "standardShortNeck2"
rank = 12 rank = 12
description = "`t` with flat hook and a more shorter neck" description = "`t` with flat hook and a more shorter neck"
selector.t = "flatHookShortNeck2" selector.t = "flatHookShortNeck2"
selector."t/phoneticLeft1" = "phoneticLeftShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2"
selector."t/phoneticLeft2" = "phoneticLeftShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2"
selector.tHookTop = "flatHook" selector.tHookTop = "flatHook"
selector.tRTail = "retroflexHookBaseShortNeck2" selector.tRTail = "flatHookShortNeck2"
selector.tLTail = "standardShortNeck2" selector.tLTail = "flatHookShortNeck2"
selector."tsLig/upperHalf" = "standardShortNeck2" selector."tsLig/upperHalf" = "standardShortNeck2"
[prime.t.variants.diagonal-tailed-short-neck2] [prime.t.variants.diagonal-tailed-short-neck2]
rank = 13 rank = 13
description = "`t` with diagonal tail and a more shorter neck" description = "`t` with diagonal tail and a more shorter neck"
selector.t = "diagonalTailedShortNeck2" selector.t = "diagonalTailedShortNeck2"
selector."t/phoneticLeft1" = "phoneticLeftShortNeck2" selector."t/phoneticLeft1" = "flatHookShortNeck2"
selector."t/phoneticLeft2" = "phoneticLeftShortNeck2" selector."t/phoneticLeft2" = "flatHookShortNeck2"
selector.tHookTop = "diagonalTailed" selector.tHookTop = "diagonalTailed"
selector.tRTail = "retroflexHookBaseShortNeck2" selector.tRTail = "flatHookShortNeck2"
selector.tLTail = "standardShortNeck2" selector.tLTail = "diagonalTailedShortNeck2"
selector."tsLig/upperHalf" = "standardShortNeck2" selector."tsLig/upperHalf" = "standardShortNeck2"
[prime.t.variants.cross-short-neck2] [prime.t.variants.cross-short-neck2]
@ -3890,10 +3890,10 @@ rank = 14
description = "Futura-like `t` shape with a more shorter neck" description = "Futura-like `t` shape with a more shorter neck"
selector.t = "crossShortNeck2" selector.t = "crossShortNeck2"
selector."t/phoneticLeft1" = "crossShortNeck2" selector."t/phoneticLeft1" = "crossShortNeck2"
selector."t/phoneticLeft2" = "crossPLShortNeck2" selector."t/phoneticLeft2" = "crossShortNeck2"
selector.tHookTop = "cross" selector.tHookTop = "cross"
selector.tRTail = "retroflexHookBaseShortNeck2" selector.tRTail = "crossShortNeck2"
selector.tLTail = "standardShortNeck2" selector.tLTail = "crossShortNeck2"
selector."tsLig/upperHalf" = "standardShortNeck2" selector."tsLig/upperHalf" = "standardShortNeck2"
[prime.t.variants.hookless-asymmetric-short-neck2] [prime.t.variants.hookless-asymmetric-short-neck2]
@ -3901,10 +3901,10 @@ rank = 15
description = "`t` without hook, with ony half the cross bar and a more shorter neck" description = "`t` without hook, with ony half the cross bar and a more shorter neck"
selector.t = "hooklessAsymmetricShortNeck2" selector.t = "hooklessAsymmetricShortNeck2"
selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck2" selector."t/phoneticLeft1" = "hooklessAsymmetricShortNeck2"
selector."t/phoneticLeft2" = "hooklessAsymmetricPLShortNeck2" selector."t/phoneticLeft2" = "hooklessAsymmetricShortNeck2"
selector.tHookTop = "hooklessAsymmetric" selector.tHookTop = "hooklessAsymmetric"
selector.tRTail = "retroflexHookBaseShortNeck2" selector.tRTail = "hooklessAsymmetricShortNeck2"
selector.tLTail = "standardShortNeck2" selector.tLTail = "hooklessAsymmetricShortNeck2"
selector."tsLig/upperHalf" = "standardShortNeck2" selector."tsLig/upperHalf" = "standardShortNeck2"