From b20e1cf632cf754ce1950e014c8afa69e5384c85 Mon Sep 17 00:00:00 2001 From: John McWilliams Date: Fri, 25 Apr 2025 05:53:00 -0400 Subject: [PATCH] Add Musical Symbol Fermata. --- changes/33.2.2.md | 3 + packages/font-glyphs/src/marks/above.ptl | 57 ++++++++++++------- packages/font-glyphs/src/marks/below.ptl | 1 + packages/font-glyphs/src/symbol/math/apl.ptl | 3 +- .../src/symbol/punctuation/ascii-marks.ptl | 7 ++- 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/changes/33.2.2.md b/changes/33.2.2.md index aaa326914..6405bba0a 100644 --- a/changes/33.2.2.md +++ b/changes/33.2.2.md @@ -11,3 +11,6 @@ - LATIN SMALL LETTER VOLAPUK UE (`U+A79F`). - MODIFIER LETTER SMALL CAPITAL G WITH HOOK (`U+10794`). - MUSICAL SYMBOL DOUBLE SHARP (`U+1D12A`). +* Add Characters: + - MUSICAL SYMBOL FERMATA (`U+1D110`). + - MUSICAL SYMBOL FERMATA BELOW (`U+1D111`). diff --git a/packages/font-glyphs/src/marks/above.ptl b/packages/font-glyphs/src/marks/above.ptl index 5eeea6afd..ea8f9e8de 100644 --- a/packages/font-glyphs/src/marks/above.ptl +++ b/packages/font-glyphs/src/marks/above.ptl @@ -357,47 +357,47 @@ glyph-block Mark-Above : begin set-width 0 include : StdAnchors.wide include : TildeShape - ttop -- aboveMarkTop - tbot -- aboveMarkBot + markFine / 2 + ttop -- aboveMarkTop + tbot -- aboveMarkBot + markFine / 2 leftEnd -- (markMiddle - markExtend * 1.5) rightEnd -- (markMiddle + markExtend * 1.5) - hs -- markHalfStroke + hs -- markHalfStroke create-glyph 'asciiTilde.high' : glyph-proc include : TildeShape - ttop -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] - tbot -- [mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY] + ttop -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] + tbot -- [mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY] leftEnd -- SB rightEnd -- RightSB - hs -- (OperatorStroke / 2) + hs -- (OperatorStroke / 2) for-width-kinds WideWidth1 define emDashWidth : if (para.isQuasiProportional && MosaicWidthScalar > 1) UPM MosaicWidth create-glyph [MangleName 'swungDash.high'] : glyph-proc set-width emDashWidth include : TildeShape - ttop -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] - tbot -- [mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY] + ttop -- [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] + tbot -- [mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY] leftEnd -- SB rightEnd -- (emDashWidth - SB) - hs -- (OperatorStroke / 2) + hs -- (OperatorStroke / 2) define [OverlayTildeT sink] : begin local t : mix aboveMarkMid aboveMarkTop asciiMarkZoomY local b : mix aboveMarkMid (aboveMarkBot + markFine / 2) asciiMarkZoomY local offset : SymbolMid - [mix t b (1 / 2)] return : sink - ttop -- (t + offset) - tbot -- (b + offset) + ttop -- (t + offset) + tbot -- (b + offset) leftEnd -- [mix 0 SB (1/3)] rightEnd -- [mix Width RightSB (1/3)] - hs -- ([AdviceStroke 4] / 2) + hs -- ([AdviceStroke 4] / 2) create-glyph 'overlayTildeOperator' : glyph-proc include : OverlayTildeT TildeShape create-glyph 'overlayTildeOperatorAboveMask' : glyph-proc - define FarRight : Width * 4 + define FarRight : (+Width) * 4 define FarLeft : (-Width) * 3 define FarAbove : CAP * 4 @@ -424,11 +424,11 @@ glyph-block Mark-Above : begin local fine : [AdviceStroke 4.5] / 2 include : TildeShape - ttop -- ttop - tbot -- tbot + ttop -- ttop + tbot -- tbot leftEnd -- (markMiddle - markExtend * 1.5) rightEnd -- (markMiddle + markExtend * 1.5) - hs -- fine + hs -- fine create-forked-glyph 'tildeSlashAbove' 0x34A : glyph-proc include : dispiro @@ -453,11 +453,11 @@ glyph-block Mark-Above : begin local tbot : mix m (aboveMarkBot + markFine / 2) 0.7 define [addTilde] : TildeShape - ttop -- ttop - tbot -- tbot + ttop -- ttop + tbot -- tbot leftEnd -- (markMiddle - markExtend * 1.5) rightEnd -- (markMiddle + markExtend * 1.5) - hs -- ([AdviceStroke 4.5] / 2) + hs -- ([AdviceStroke 4.5] / 2) local shift : (ttop - tbot) * 1.2 include : addTilde @@ -482,7 +482,7 @@ glyph-block Mark-Above : begin include : StdAnchors.impl 'above' 0 2 include : dispiro flat (0 - Width) aboveMarkMid [widths.center : 2 * markHalfStroke] - curl 0 aboveMarkMid + curl 0 aboveMarkMid create-glyph 'sbRsbOverlineAbove' : glyph-proc set-width 0 @@ -810,6 +810,22 @@ glyph-block Mark-Above : begin include : DrawAt markMiddle yDot (fine * kdr) include : ApparentTranslate 0 (fine * 0.5) include : StdAnchors.mediumWide + create-glyph "largeFermataAbove.\(suffix)" : glyph-proc + set-width 0 + local fine : AdviceStroke 6.5 asciiMarkZoomX + local arcSw : Math.min markStroke (fine * 1.25) + local radius : Math.max (asciiMarkZoomX * markExtend - DotRadius) (fine * 1.35) + local yDot : mix [mix aboveMarkMid aboveMarkBot asciiMarkZoomY] [mix aboveMarkMid aboveMarkTop asciiMarkZoomY] 0.375 + include : dispiro + widths.lhs arcSw + g4.up.start (markMiddle - radius) yDot [heading Upward] + arcvh + g4.right.mid markMiddle (yDot + radius) + archv + g4.down.end (markMiddle + radius) yDot [heading Downward] + include : DrawAt markMiddle yDot (fine * kdr) + include : ApparentTranslate 0 (fine * (-0.5)) + include : StdAnchors.extraWide create-glyph "cyrlKavykaWithDotAbove.\(suffix)" : glyph-proc set-width 0 local radius : markExtend * 1.5 @@ -829,6 +845,7 @@ glyph-block Mark-Above : begin select-variant 'candrabinduAbove' 0x310 (follow -- 'diacriticDot') turned 'fermataAbove' 0x352 'candrabinduAbove' markMiddle aboveMarkMid + select-variant 'largeFermataAbove' (follow -- 'diacriticDot') select-variant 'cyrlKavykaWithDotAbove' null (follow -- 'diacriticDot') alias 'graveToneAbove' 0x340 'graveAbove' diff --git a/packages/font-glyphs/src/marks/below.ptl b/packages/font-glyphs/src/marks/below.ptl index 4a3fcbe8f..75cf1fe96 100644 --- a/packages/font-glyphs/src/marks/below.ptl +++ b/packages/font-glyphs/src/marks/below.ptl @@ -217,6 +217,7 @@ glyph-block Mark-Below : begin TurnAboveMarkToBelow 'downArrowHeadBelow' null 'upArrowHeadAbove' TurnAboveMarkToBelow 'descenderBarBelow' null 'ascenderBarAbove' TurnAboveMarkToBelow 'sbRsbUnderlineBelow' null 'sbRsbOverlineAbove' + TurnAboveMarkToBelow 'largeCandrabinduBelow' null 'largeFermataAbove' create-glyph 'greaterAndUpArrowheadBelow' 0x0356 : glyph-proc set-width 0 diff --git a/packages/font-glyphs/src/symbol/math/apl.ptl b/packages/font-glyphs/src/symbol/math/apl.ptl index ef82200c5..4b3a57e1d 100644 --- a/packages/font-glyphs/src/symbol/math/apl.ptl +++ b/packages/font-glyphs/src/symbol/math/apl.ptl @@ -280,6 +280,7 @@ glyph-block Symbol-Math-APL : begin LinkAplFormForNwidWwid 'barArrowDown' LinkAplFormForNwidWwid 'counterArrowLeft' LinkAplFormForNwidWwid 'counterArrowRight' + LinkAplFormForNwidWwid 'countersink' LinkAplFormForNwidWwid 'cwOpenCircleArrow' LinkAplFormForNwidWwid 'dashArrowUp' LinkAplFormForNwidWwid 'dottedCircle' @@ -292,7 +293,7 @@ glyph-block Symbol-Math-APL : begin LinkAplFormForNwidWwid 'vBarSquare' LinkAplFormForNwidWwid 'zigZagArrow' LinkAplFormForNwidWwid 'uni21CC' - LinkAplFormForNwidWwid 'uni2335' + LinkAplFormForNwidWwid 'uni231D' LinkAplFormForNwidWwid 'uni238B' LinkAplFormForNwidWwid 'uni25E0' LinkAplFormForNwidWwid 'uni25E1' diff --git a/packages/font-glyphs/src/symbol/punctuation/ascii-marks.ptl b/packages/font-glyphs/src/symbol/punctuation/ascii-marks.ptl index 9ece5e7c9..c8544c70d 100644 --- a/packages/font-glyphs/src/symbol/punctuation/ascii-marks.ptl +++ b/packages/font-glyphs/src/symbol/punctuation/ascii-marks.ptl @@ -14,9 +14,9 @@ glyph-block Symbol-Punctuation-Ascii-Marks : begin define [MarkZoom w] : glyph-proc include : Ungizmo - include : Translate (-w / 2) (-XH - AccentStackOffset) + include : Translate (w * (-0.5)) ((-XH) - AccentStackOffset) include : Scale ((RightSB - SB) / (markExtend * 3)) - include : Translate (w / 2) (XH + AccentStackOffset) + include : Translate (w * (+0.5)) ((+XH) + AccentStackOffset) include : Regizmo create-glyph 'asciiTilde.low' : composite-proc @@ -67,3 +67,6 @@ glyph-block Symbol-Punctuation-Ascii-Marks : begin derive-composites 'mdfShelf' 0x2FD 'markBaseSpace' 'shelfBelow' derive-composites 'mdfOpenShelf' 0x2FE 'markBaseSpace' 'openShelfBelow' + + derive-composites 'fermata' 0x1D110 'markDemoBaseSpace' 'largeFermataAbove' + derive-composites 'lowFermata' 0x1D111 'markDemoBaseSpace' 'largeCandrabinduBelow'