diff --git a/changes/5.0.5.md b/changes/5.0.5.md new file mode 100644 index 000000000..82e608e93 --- /dev/null +++ b/changes/5.0.5.md @@ -0,0 +1,5 @@ + * Add Heavy Black Curved Upwards And Rightwards Arrow (`U+27A6`) for Agnoster compatibility. + * Add characters: + - Commercial Minus Sign (`U+2052`). + - Precedes Under Relation (`U+22B0`) and Succeeds Under Relation (`U+22B1`) + - Heavy Black Curved Downwards And Rightwards Arrow (`U+27A5`) diff --git a/font-src/glyphs/symbol/arrow.ptl b/font-src/glyphs/symbol/arrow.ptl index 5cb799615..e3c8e5837 100644 --- a/font-src/glyphs/symbol/arrow.ptl +++ b/font-src/glyphs/symbol/arrow.ptl @@ -26,6 +26,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define halfArrowSw : arrowSw / 2 define fine : AdviceStroke 3.5 define terminal : AdviceStroke 5 + define halfTerminal : terminal / 2 define doubleArrowStemWidth : arrowHeadSize * 1.1 define waveArrowAmplitude : (Width - SB) * DesignParameters.arrow_size * 1.1 @@ -67,6 +68,15 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 flat (mag - [Math.abs s] / 2) 0 curl [mix mag 0 p] 0 + define [SemiHookArrowBar x1 y1 x2 y2 halfSw halfFine s w] : begin + return : PointingTo x1 y1 x2 y2 : lambda [mag] : begin + local p : (mag - o - halfSw * [fallback w 1.1]) / mag + dispiro + straight.[if (s > 0) 'down' 'up'].start (mag - O) s [widths.center (halfFine * 2)] + arcvh + flat (mag - [Math.abs s] / 2) 0 [widths.center (halfSw * 2)] + curl [mix mag 0 p] 0 + define [ArrowHead x1 y1 x2 y2 _size] : union LHSHalfArrowHead x1 y1 x2 y2 0 _size RHSHalfArrowHead x1 y1 x2 y2 0 _size @@ -164,25 +174,34 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 local x1CoA : mix x1 x2 (-0.05) local y1CoA : mix y1 y2 (-0.05) - if (color == "white") : return : difference - union - TriangleArrowHead x1 y1 x2 y2 headWidth headLen - ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 2 - union - TriangleArrowHead x1a y1a x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) - ArrowBar x1a y1a x2a y2a (halfBarWidth - fine / 2) 2 + return : match color + [Just 'white'] : difference + union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 2 + union + TriangleArrowHead x1a y1a x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + ArrowBar x1a y1a x2a y2a (halfBarWidth - fine / 2) 2 - if (color == "white-open") : return : difference - union - TriangleArrowHead x1 y1 x2 y2 headWidth headLen - ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 2 - union - TriangleArrowHead x1CoA y1CoA x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) - ArrowBar x1CoA y1CoA x2a y2a (halfBarWidth - fine / 2) 2 + [Just "white-open"] : difference + union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 2 + union + TriangleArrowHead x1CoA y1CoA x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + ArrowBar x1CoA y1CoA x2a y2a (halfBarWidth - fine / 2) 2 - if (color == "black") : return : union - TriangleArrowHead x1 y1 x2 y2 headWidth headLen - ArrowBar x1 y1 x2 y2 halfBarWidth 2 + [Just "black"] : union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + ArrowBar x1 y1 x2 y2 halfBarWidth 2 + + [Just "blackSemiHookR"] : union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + SemiHookArrowBar x1 y1 x2 y2 halfBarWidth halfTerminal headWidth 2 + + [Just "blackSemiHookL"] : union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + SemiHookArrowBar x1 y1 x2 y2 halfBarWidth halfTerminal (-headWidth) 2 define [BarbArrowHead x1 y1 x2 y2 width length thickness] : new-glyph : glyph-proc include : PointingTo x1 y1 x2 y2 : lambda [mag] : begin @@ -438,6 +457,9 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 DoubleArrow [ThickArrowShape 'black'] [MangleName 'uni2B0C'] [MangleUnicode 0x2B0C] arrowSB SymbolMid arrowRSB SymbolMid DoubleArrow [ThickArrowShape 'black'] [MangleName 'uni2B0D'] [MangleUnicode 0x2B0D] arrowMidX arrowBot arrowMidX arrowTop + MkArrow [ThickArrowShape 'blackSemiHookL'] [MangleName 'uni27A5'] [MangleUnicode 0x27A5] arrowSB SymbolMid arrowRSB SymbolMid + MkArrow [ThickArrowShape 'blackSemiHookR'] [MangleName 'uni27A6'] [MangleUnicode 0x27A6] arrowSB SymbolMid arrowRSB SymbolMid + do "Barb arrows" define BarbHeavyWideHeaded : BarbArrowShape 0.25 : UnicodeWeightGrade 9 MosaicWidthScalar MkArrow BarbHeavyWideHeaded [MangleName 'uni2794'] [MangleUnicode 0x2794] arrowSB SymbolMid arrowRSB SymbolMid diff --git a/font-src/glyphs/symbol/math/relation.ptl b/font-src/glyphs/symbol/math/relation.ptl index 6d482120c..5a52afd75 100644 --- a/font-src/glyphs/symbol/math/relation.ptl +++ b/font-src/glyphs/symbol/math/relation.ptl @@ -238,6 +238,8 @@ glyph-block Symbol-Math-Relation : begin define [NormalSupersetShape top bot l r s] : LigationGreaterShape top bot l r s s 0 + + # Sym parameters local approxDist : EqualHalfSpace * 1.75 local symMag : (OperTop - SymbolMid) * 0.17 @@ -450,6 +452,34 @@ glyph-block Symbol-Math-Relation : begin turned 'turnSucceedsEqSlant' 0x22DE 'succeedsEqSlant' Middle SymbolMid turned 'turnPrecedesEqSlant' 0x22DF 'precedesEqSlant' Middle SymbolMid + + define [PrecedesUnderRelationShape t b l r s] : glyph-proc + local yBias : s * 0.375 + local fine : s * CThin + local hookDepth : Math.max ((r - l) / 4) (s * 2) + local hookWidth : Math.max ((t - b) / 6) (s * 1.25) + include : dispiro + straight.right.start (r - hookDepth) (t - O + yBias) [widths.rhs.heading s Rightward] + archv + g4.down.mid r (t - hookWidth + yBias) [heading Downward] + arcvh + straight.left.end l ([mix t b 0.5] + s / 2 - fine) [widths.rhs.heading fine Leftward] + include : dispiro + straight.right.start (r - hookDepth) (b + O - yBias) [widths.lhs.heading s Rightward] + archv + g4.up.mid r (b + hookWidth - yBias) [heading Upward] + arcvh + straight.left.end l ([mix t b 0.5] - s / 2 + fine) [widths.lhs.heading fine Leftward] + + define [SucceedsUnderRelationShape t b l r s] : new-glyph : glyph-proc + include : PrecedesUnderRelationShape t b l r s + include : FlipAround [mix l r 0.5] [mix t b 0.5] + + create-glyph 'precedesUnderRelation' 0x22B0 : AsRadical : PrecedesUnderRelationShape (SymbolMid + dH) (SymbolMid - dH) SB RightSB OperatorStroke + create-glyph 'succeedsUnderRelation' 0x22B1 : AsRadical : SucceedsUnderRelationShape (SymbolMid + dH) (SymbolMid - dH) SB RightSB OperatorStroke + + + create-glyph 'sym' 0x223C : symWave SymbolMid 1 create-glyph 'flipSym' 0x223D : symWave SymbolMid (-1) diff --git a/font-src/glyphs/symbol/punctuation.ptl b/font-src/glyphs/symbol/punctuation.ptl index 1452aba9c..4be3cd18d 100644 --- a/font-src/glyphs/symbol/punctuation.ptl +++ b/font-src/glyphs/symbol/punctuation.ptl @@ -1472,6 +1472,11 @@ glyph-block Symbol-Punctuation-Percentages : begin include : VBarLeft SB [mix CAP 0 0.3] CAP dotwidth include : VBarRight RightSB 0 [mix 0 CAP 0.3] dotwidth + create-glyph 'commercialMinusSign' 0x2052 : glyph-proc + include : PercentBarShape [DivFrame 1] Stroke + include : DotAt (SB + PeriodRadius) (CAP - PeriodRadius) PeriodRadius + include : DotAt (RightSB - PeriodRadius) (0 + PeriodRadius) PeriodRadius + create-glyph 'permille.NWID.dots' : glyph-proc define df : DivFrame para.diversityM set-width df.width