diff --git a/glyphs/autobuild-enclosure.ptl b/glyphs/autobuild-enclosure.ptl index 0f4f5532b..2c5ca0974 100644 --- a/glyphs/autobuild-enclosure.ptl +++ b/glyphs/autobuild-enclosure.ptl @@ -395,9 +395,9 @@ glyph-block AutoBuild-Enclosure : begin if [not recursive] : do "inset mosaic" local compositions {} - compositions.push { 0x1FBB1 { unicodeGlyphs.(0x2714).name } WIDE-WIDTH-2 } - compositions.push { 0x1FBB4 { unicodeGlyphs.(0x21B2).name } WIDE-WIDTH-2 } - compositions.push { 0x1FBC4 { unicodeGlyphs.(0x003F).name } WIDE-WIDTH-2 } + compositions.push { 0x1FBB1 { [unicodeGlyphs.(0x2714).name.replace [regex '.fwid$'] ".hwid"] } WIDE-WIDTH-2 } + compositions.push { 0x1FBB4 { [unicodeGlyphs.(0x21B2).name.replace [regex '.fwid$'] ".hwid"] } WIDE-WIDTH-2 } + compositions.push { 0x1FBC4 { [unicodeGlyphs.(0x003F).name.replace [regex '.fwid$'] ".hwid"] } WIDE-WIDTH-2 } createInsetMosaicGlyphs 1 compositions if [not recursive] : do "Single-digit double circled" diff --git a/glyphs/common-shapes.ptl b/glyphs/common-shapes.ptl index ece59983b..665ca1d0f 100644 --- a/glyphs/common-shapes.ptl +++ b/glyphs/common-shapes.ptl @@ -59,7 +59,9 @@ glyph-block CommonShapes : begin include part first first set first false - define [refer-glyph id] : lambda [copyAnchors copyWidth] : this.includeGlyph glyphMap.(id) copyAnchors copyWidth + define [refer-glyph id] : lambda [copyAnchors copyWidth] : begin + if [not glyphMap.(id)] : throw : new Error "Cannot find glyph '\(id)'" + this.includeGlyph glyphMap.(id) copyAnchors copyWidth define [query-glyph id] : return glyphMap.(id) define [into-unicode code] : glyph-construction : if code : assign-unicode code diff --git a/glyphs/symbol-geometric.ptl b/glyphs/symbol-geometric.ptl index e4d99b5e4..cdd444f06 100644 --- a/glyphs/symbol-geometric.ptl +++ b/glyphs/symbol-geometric.ptl @@ -86,6 +86,31 @@ glyph-block Symbol-Geometric : begin include : FlipAround x y s [fallback sy s] include : into-unicode unicode + define [UpperHalfMask] : Rect (symbolMid + squareRadiusFW * 2) symbolMid 0 MosaicWidth + define [LowerHalfMask] : Rect symbolMid (symbolMid - squareRadiusFW * 2) 0 MosaicWidth + define [LeftHalfMask] : Rect (symbolMid + squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) 0 MosaicMiddle + define [RightHalfMask] : Rect (symbolMid + squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) MosaicMiddle MosaicWidth + define [UpperLeftQuarterMark] : intersection [UpperHalfMask] [LeftHalfMask] + define [UpperRightQuarterMark] : intersection [UpperHalfMask] [RightHalfMask] + define [LowerLeftQuarterMark] : intersection [LowerHalfMask] [LeftHalfMask] + define [LowerRightQuarterMark] : intersection [LowerHalfMask] [RightHalfMask] + define [UpperLeftHalfMark] : spiro-outline + corner (MosaicMiddle + squareRadiusFW * 2) (symbolMid + squareRadiusFW * 2) + corner (MosaicMiddle - squareRadiusFW * 2) (symbolMid + squareRadiusFW * 2) + corner (MosaicMiddle - squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) + define [LowerRightHalfMark] : spiro-outline + corner (MosaicMiddle + squareRadiusFW * 2) (symbolMid + squareRadiusFW * 2) + corner (MosaicMiddle - squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) + corner (MosaicMiddle + squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) + define [UpperRightHalfMark] : spiro-outline + corner (MosaicMiddle + squareRadiusFW * 2) (symbolMid + squareRadiusFW * 2) + corner (MosaicMiddle - squareRadiusFW * 2) (symbolMid + squareRadiusFW * 2) + corner (MosaicMiddle + squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) + define [LowerLeftHalfMark] : spiro-outline + corner (MosaicMiddle - squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) + corner (MosaicMiddle - squareRadiusFW * 2) (symbolMid + squareRadiusFW * 2) + corner (MosaicMiddle + squareRadiusFW * 2) (symbolMid - squareRadiusFW * 2) + sketch # blacksquare set-width MosaicWidth start-from leftFW (symbolMid + squareRadiusFW) @@ -502,57 +527,82 @@ glyph-block Symbol-Geometric : begin union ThickRoundedArrowBar left top right bot inner 0 ThickRoundedArrowBar right top left bot inner 0 - save [MangleName "whiteHeavySaltireWithRoundedCorners"] [MangleUnicode 0x1FBC0] + save [MangleName "whiteHeavySaltireWithRoundedCorners"] [MangleUnicode 0x1FBC0 WIDE-WIDTH-2] # Shaded hollow squares - sketch # hshadesquare, U+25A4 + define [HShadeShape] : begin define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11) define top : symbolMid + squareRadiusFW - GEOMETRYSTROKE + lineWidth / 2 define bot : symbolMid - (top - symbolMid) + return : union + dispiro + widths.center lineWidth + flat leftFW [mix top bot 0.25] [heading RIGHTWARD] + curl rightFW [mix top bot 0.25] [heading RIGHTWARD] + dispiro + widths.center lineWidth + flat leftFW [mix top bot 0.5] [heading RIGHTWARD] + curl rightFW [mix top bot 0.5] [heading RIGHTWARD] + dispiro + widths.center lineWidth + flat leftFW [mix top bot 0.75] [heading RIGHTWARD] + curl rightFW [mix top bot 0.75] [heading RIGHTWARD] + + sketch # hshadesquare, U+25A4 set-width MosaicWidth include : union refer-glyph : MangleName 'whitesquare' intersection refer-glyph : MangleName 'blacksquare' - create-glyph : glyph-construction - include : dispiro - widths.center lineWidth - flat leftFW [mix top bot 0.25] [heading RIGHTWARD] - curl rightFW [mix top bot 0.25] [heading RIGHTWARD] - include : dispiro - widths.center lineWidth - flat leftFW [mix top bot 0.5] [heading RIGHTWARD] - curl rightFW [mix top bot 0.5] [heading RIGHTWARD] - include : dispiro - widths.center lineWidth - flat leftFW [mix top bot 0.75] [heading RIGHTWARD] - curl rightFW [mix top bot 0.75] [heading RIGHTWARD] + HShadeShape save [MangleName 'hshadesquare'] [MangleUnicode 0x25A4] - sketch # vshadesquare, U+25A5 + define [VShadeShape] : begin define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11) define r : MosaicWidth / 2 + squareRadiusFW - GEOMETRYSTROKE + lineWidth / 2 define l : MosaicWidth / 2 - (r - MosaicWidth / 2) + return : union + dispiro + widths.center lineWidth + flat [mix l r 0.25] topFW [heading DOWNWARD] + curl [mix l r 0.25] bottomFW [heading DOWNWARD] + dispiro + widths.center lineWidth + flat [mix l r 0.5] topFW [heading DOWNWARD] + curl [mix l r 0.5] bottomFW [heading DOWNWARD] + dispiro + widths.center lineWidth + flat [mix l r 0.75] topFW [heading DOWNWARD] + curl [mix l r 0.75] bottomFW [heading DOWNWARD] + + define [VBarShadeShape] : begin + define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11) + define r : MosaicWidth / 2 + squareRadiusFW - GEOMETRYSTROKE + lineWidth / 2 + define l : MosaicWidth / 2 - (r - MosaicWidth / 2) + return : union + dispiro + widths.center lineWidth + flat [mix l r 0.5] topFW [heading DOWNWARD] + curl [mix l r 0.5] bottomFW [heading DOWNWARD] + + sketch # vshadesquare, U+25A5 set-width MosaicWidth include : union refer-glyph : MangleName 'whitesquare' intersection refer-glyph : MangleName 'blacksquare' - create-glyph : glyph-construction - include : dispiro - widths.center lineWidth - flat [mix l r 0.25] topFW [heading DOWNWARD] - curl [mix l r 0.25] bottomFW [heading DOWNWARD] - include : dispiro - widths.center lineWidth - flat [mix l r 0.5] topFW [heading DOWNWARD] - curl [mix l r 0.5] bottomFW [heading DOWNWARD] - include : dispiro - widths.center lineWidth - flat [mix l r 0.75] topFW [heading DOWNWARD] - curl [mix l r 0.75] bottomFW [heading DOWNWARD] + VShadeShape save [MangleName 'vshadesquare'] [MangleUnicode 0x25A5] + sketch # vBarSquare, U+25EB + set-width MosaicWidth + include : union + refer-glyph : MangleName 'whitesquare' + intersection + refer-glyph : MangleName 'blacksquare' + VBarShadeShape + save [MangleName 'vBarSquare'] [MangleUnicode 0x25EB] + sketch # hvshadesquare, U+25A6 set-width MosaicWidth include : union @@ -560,36 +610,42 @@ glyph-block Symbol-Geometric : begin refer-glyph : MangleName 'vshadesquare' save [MangleName 'hvshadesquare'] [MangleUnicode 0x25A6] - sketch # ddiagshadesquare, U+25A7 + define [DDiagShadeShape] : begin define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11) define top : symbolMid + squareRadiusFW define bot : symbolMid - (top - symbolMid) + return : glyph-construction + foreach [j : range (-10) till 10] : include : dispiro + widths.center lineWidth + flat leftFW [mix top bot (j / 4)] [heading RIGHTWARD] + curl rightFW [mix top bot (j / 4 + 1)] [heading RIGHTWARD] + + define [UDiagShadeShape] : begin + define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11) + define top : symbolMid + squareRadiusFW + define bot : symbolMid - (top - symbolMid) + return : glyph-construction + foreach [j : range (-10) till 10] : include : dispiro + widths.center lineWidth + flat leftFW [mix top bot (j / 4)] [heading RIGHTWARD] + curl rightFW [mix top bot (j / 4 - 1)] [heading RIGHTWARD] + + sketch # ddiagshadesquare, U+25A7 set-width MosaicWidth include : union refer-glyph : MangleName 'whitesquare' intersection refer-glyph : MangleName 'blacksquare' - create-glyph : glyph-construction - foreach [j : range (-10) till 10] : include : dispiro - widths.center lineWidth - flat leftFW [mix top bot (j / 4)] [heading RIGHTWARD] - curl rightFW [mix top bot (j / 4 + 1)] [heading RIGHTWARD] + DDiagShadeShape save [MangleName 'ddiagshadesquare'] [MangleUnicode 0x25A7] sketch # udiagshadesquare, U+25A8 - define lineWidth : Math.min GEOMETRYSTROKE ((squareRadiusFW * 2 - GEOMETRYSTROKE * 2) * 1 / 11) - define top : symbolMid + squareRadiusFW - define bot : symbolMid - (top - symbolMid) set-width MosaicWidth include : union refer-glyph : MangleName 'whitesquare' intersection refer-glyph : MangleName 'blacksquare' - create-glyph : glyph-construction - foreach [j : range (-10) till 10] : include : dispiro - widths.center lineWidth - flat leftFW [mix top bot (j / 4)] [heading RIGHTWARD] - curl rightFW [mix top bot (j / 4 - 1)] [heading RIGHTWARD] + UDiagShadeShape save [MangleName 'udiagshadesquare'] [MangleUnicode 0x25A8] sketch # uddiagshadesquare, U+25A9 @@ -597,49 +653,129 @@ glyph-block Symbol-Geometric : begin include : union [refer-glyph : MangleName 'ddiagshadesquare'] [refer-glyph : MangleName 'udiagshadesquare'] save [MangleName 'uddiagshadesquare'] [MangleUnicode 0x25A9] + define [CircleMarkShape] : begin + define r : squareRadiusFW - GEOMETRYSTROKE / 2 + return : spiro-outline + g4 MosaicMiddle (symbolMid + r) + g4 (MosaicMiddle - r) symbolMid + g4 MosaicMiddle (symbolMid - r) + g4 (MosaicMiddle + r) symbolMid + close + sketch # vshadeCircle, U+25A5 + set-width MosaicWidth + include : union + refer-glyph : MangleName 'whitecircle' + intersection [CircleMarkShape] [VShadeShape] + save [MangleName 'vshadeCircle'] [MangleUnicode 0x25CD] + # partial circles - define quarters : list + define partialCircleQuarters : list list 0x25D0 1 1 0 0 list 0x25D1 0 0 1 1 list 0x25D2 0 1 0 1 list 0x25D3 1 0 1 0 list 0x25D4 0 0 1 0 list 0x25D5 0 1 1 1 - foreach [{u LT LB RT RB} : items-of quarters] : sketch - define r : squareRadiusFW - GEOMETRYSTROKE / 2 + foreach [{u LT LB RT RB} : items-of partialCircleQuarters] : sketch set-width MosaicWidth include : union refer-glyph : MangleName 'whitecircle' intersection - spiro-outline - g4 MosaicMiddle (symbolMid + r) - g4 (MosaicMiddle - r) symbolMid - g4 MosaicMiddle (symbolMid - r) - g4 (MosaicMiddle + r) symbolMid - close + CircleMarkShape create-glyph : glyph-construction - if LT : include : spiro-outline - corner MosaicMiddle symbolMid - corner MosaicMiddle (symbolMid + squareRadiusFW) - corner (MosaicMiddle - squareRadiusFW) (symbolMid + squareRadiusFW) - corner (MosaicMiddle - squareRadiusFW) symbolMid - if LB : include : spiro-outline - corner MosaicMiddle symbolMid - corner MosaicMiddle (symbolMid - squareRadiusFW) - corner (MosaicMiddle - squareRadiusFW) (symbolMid - squareRadiusFW) - corner (MosaicMiddle - squareRadiusFW) symbolMid - if RT : include : spiro-outline - corner MosaicMiddle symbolMid - corner MosaicMiddle (symbolMid + squareRadiusFW) - corner (MosaicMiddle + squareRadiusFW) (symbolMid + squareRadiusFW) - corner (MosaicMiddle + squareRadiusFW) symbolMid - if RB : include : spiro-outline - corner MosaicMiddle symbolMid - corner MosaicMiddle (symbolMid - squareRadiusFW) - corner (MosaicMiddle + squareRadiusFW) (symbolMid - squareRadiusFW) - corner (MosaicMiddle + squareRadiusFW) symbolMid + if LT : include : UpperLeftQuarterMark + if LB : include : LowerLeftQuarterMark + if RT : include : UpperRightQuarterMark + if RB : include : LowerRightQuarterMark save [MangleName ('uni' + u)] [MangleUnicode u] + define arcQuarters : list + list 0x25DC 1 0 0 0 + list 0x25DD 0 0 1 0 + list 0x25DE 0 0 0 1 + list 0x25DF 0 1 0 0 + list 0x25E0 1 0 1 0 + list 0x25E1 0 1 0 1 + foreach [{u LT LB RT RB} : items-of arcQuarters] : sketch + set-width MosaicWidth + include : intersection + refer-glyph : MangleName 'whitecircle' + create-glyph : glyph-construction + if LT : include : UpperLeftQuarterMark + if LB : include : LowerLeftQuarterMark + if RT : include : UpperRightQuarterMark + if RB : include : LowerRightQuarterMark + save [MangleName ('uni' + u)] [MangleUnicode u] + + # Partial square + define squareParts : list + list 0x25E7 1 1 0 0 0 0 0 0 + list 0x25E8 0 0 1 1 0 0 0 0 + list 0x25E9 0 0 0 0 1 0 0 0 + list 0x2B14 0 0 0 0 0 0 1 0 + list 0x2B15 0 0 0 0 0 1 0 0 + list 0x25EA 0 0 0 0 0 0 0 1 + foreach [{u LT LB RT RB LTh LBh RTh RBh} : items-of squareParts] : sketch + set-width MosaicWidth + include : union + refer-glyph : MangleName 'whitesquare' + intersection + refer-glyph : MangleName 'blacksquare' + create-glyph : glyph-construction + if LT : include : UpperLeftQuarterMark + if LB : include : LowerLeftQuarterMark + if RT : include : UpperRightQuarterMark + if RB : include : LowerRightQuarterMark + if LTh : include : UpperLeftHalfMark + if LBh : include : LowerLeftHalfMark + if RTh : include : UpperRightHalfMark + if RBh : include : LowerRightHalfMark + save [MangleName ('uni' + u)] [MangleUnicode u] + + # Partial diamond + define diamondParts : list + list 0x2B16 1 1 0 0 + list 0x2B17 0 0 1 1 + list 0x2B18 1 0 1 0 + list 0x2B19 0 1 0 1 + foreach [{u LT LB RT RB LTh LBh RTh RBh} : items-of diamondParts] : sketch + set-width MosaicWidth + include : union + refer-glyph : MangleName 'whitediamond' + intersection + refer-glyph : MangleName 'blackdiamond' + create-glyph : glyph-construction + if LT : include : UpperLeftQuarterMark + if LB : include : LowerLeftQuarterMark + if RT : include : UpperRightQuarterMark + if RB : include : LowerRightQuarterMark + save [MangleName ('uni' + u)] [MangleUnicode u] + + # Partial triangle + define triangleParts : list + list 0x25ED 1 1 0 0 + list 0x25EE 0 0 1 1 + foreach [{u LT LB RT RB LTh RBh} : items-of triangleParts] : sketch + set-width MosaicWidth + include : union + refer-glyph : MangleName 'whitetriangleup' + intersection + refer-glyph : MangleName 'blacktriangleup' + create-glyph : glyph-construction + if LT : include : UpperLeftQuarterMark + if LB : include : LowerLeftQuarterMark + if RT : include : UpperRightQuarterMark + if RB : include : LowerRightQuarterMark + if LTh : include : UpperLeftHalfMark + if RBh : include : LowerRightHalfMark + save [MangleName ('uni' + u)] [MangleUnicode u] + + sketch + set-width MosaicWidth + include : refer-glyph : MangleName 'whitetriangleup' + include : CircleDotAt MosaicMiddle (symbolMid - squareRadiusFW / 3) [Math.max (WIDTH / 6) GEOMETRYSTROKE] + save [MangleName 'dottedWhiteTriangle'] [MangleUnicode 0x25EC] + sketch set-width MosaicWidth include : difference @@ -653,3 +789,17 @@ glyph-block Symbol-Geometric : begin refer-glyph : MangleName 'blacklongrectangle' refer-glyph : MangleName 'whitecircle' save [MangleName 'uni25D9'] [MangleUnicode 0x25D9] + + sketch + set-width MosaicWidth + include : intersection + refer-glyph : MangleName 'uni25D9' + UpperHalfMask + save [MangleName 'uni25DA'] [MangleUnicode 0x25DA] + + sketch + set-width MosaicWidth + include : intersection + refer-glyph : MangleName 'uni25D9' + LowerHalfMask + save [MangleName 'uni25DB'] [MangleUnicode 0x25DB] diff --git a/glyphs/symbol-math.ptl b/glyphs/symbol-math.ptl index 1da25398e..a20beff43 100644 --- a/glyphs/symbol-math.ptl +++ b/glyphs/symbol-math.ptl @@ -126,10 +126,6 @@ glyph-block Symbol-Math-Frame-And-Geometry : begin local rightCircle : WIDTH - SB * kCircle local radiusCircle : (rightCircle - leftCircle) / 2 - local radiusBig : (tackTop - tackBot) / 2 - local leftBig : MIDDLE - radiusBig - local rightBig : MIDDLE + radiusBig - sketch # mathO include : dispiro widths.lhs GEOMETRYSTROKE @@ -155,31 +151,6 @@ glyph-block Symbol-Math-Frame-And-Geometry : begin arcvh nothing 2 close save 'mathOOutline' - sketch # mathOBig - include : dispiro - widths.lhs GEOMETRYSTROKE - g4 MIDDLE (symbolMid + radiusBig - O) - archv nothing 2 - g4 (leftBig + O) symbolMid - arcvh nothing 2 - g4 MIDDLE (symbolMid - radiusBig + O) - archv nothing 2 - g4 (rightBig - O) symbolMid - arcvh nothing 2 - close - save 'mathOBig' - sketch # mathO-outline - include : spiro-outline - g4 MIDDLE (symbolMid + radiusBig) - archv nothing 2 - g4 (leftBig) symbolMid - arcvh nothing 2 - g4 MIDDLE (symbolMid - radiusBig) - archv nothing 2 - g4 (rightBig) symbolMid - arcvh nothing 2 - close - save 'mathOOutlineBig' sketch # mathBoxOutline include : spiro-outline corner leftBox topBox @@ -195,6 +166,38 @@ glyph-block Symbol-Math-Frame-And-Geometry : begin dispiro [widths.lhs sw] [flat rightBox topBox] [curl leftBox topBox] save 'mathBox' + for-width-kinds WIDE-WIDTH-1 + local radiusBig : (tackTop - tackBot) / 2 * [Math.sqrt MosaicWidthScalar] + local leftBig : MosaicMiddle - radiusBig + local rightBig : MosaicMiddle + radiusBig + sketch # mathOBig + set-width MosaicWidth + include : dispiro + widths.lhs GEOMETRYSTROKE + g4 MosaicMiddle (symbolMid + radiusBig - O) + archv nothing 2 + g4 (leftBig + O) symbolMid + arcvh nothing 2 + g4 MosaicMiddle (symbolMid - radiusBig + O) + archv nothing 2 + g4 (rightBig - O) symbolMid + arcvh nothing 2 + close + save [MangleName 'mathOBig'] + sketch # mathOOutlineBig + set-width MosaicWidth + include : spiro-outline + g4 MosaicMiddle (symbolMid + radiusBig) + archv nothing 2 + g4 (leftBig) symbolMid + arcvh nothing 2 + g4 MosaicMiddle (symbolMid - radiusBig) + archv nothing 2 + g4 (rightBig) symbolMid + arcvh nothing 2 + close + save [MangleName 'mathOOutlineBig'] + do "Geometry" sketch include : intersection @@ -396,6 +399,44 @@ glyph-block Symbol-Math-Dots-And-Colons : begin include : Ring (symbolMid + PERIODRADIUS - O) (symbolMid - PERIODRADIUS + O) (MIDDLE - PERIODRADIUS + O) (MIDDLE + PERIODRADIUS - O) true save 'mathcdot' + for-width-kinds WIDE-WIDTH-1 + sketch # mathcdot + set-width MosaicWidth + include : Ring (symbolMid + PERIODRADIUS - O) (symbolMid - PERIODRADIUS + O) (MosaicMiddle - PERIODRADIUS + O) (MosaicMiddle + PERIODRADIUS - O) true + save [MangleName 'mathcdotBig'] + + sketch # plus + set-width MosaicWidth + include : union + HBar SB (MosaicWidth - SB) symbolMid GEOMETRYSTROKE + VBar MosaicMiddle [mix symbolMid plusTop MosaicWidthScalar] [mix symbolMid plusBot MosaicWidthScalar] GEOMETRYSTROKE + save : MangleName 'innerPlusBig' + + sketch # innerMultiplyStroke1Big + set-width MosaicWidth + local radius : (RIGHTSB - SB) / 2 * [Math.sqrt MosaicWidthScalar] + include : dispiro + widths.center GEOMETRYSTROKE + flat (MosaicMiddle - radius) (symbolMid - radius) + curl (MosaicMiddle + radius) (symbolMid + radius) + save : MangleName 'innerMultiplyStroke1Big' + + sketch # innerMultiplyStroke2Big + set-width MosaicWidth + local radius : (RIGHTSB - SB) / 2 * [Math.sqrt MosaicWidthScalar] + include : dispiro + widths.center GEOMETRYSTROKE + flat (MosaicMiddle + radius) (symbolMid - radius) + curl (MosaicMiddle - radius) (symbolMid + radius) + save : MangleName 'innerMultiplyStroke2Big' + + sketch # innerMultiplyBig + set-width MosaicWidth + include : refer-glyph : MangleName "innerMultiplyStroke1Big" + include : refer-glyph : MangleName "innerMultiplyStroke2Big" + save : MangleName 'innerMultiplyBig' + + composite 'mathAsterisk' [refer-glyph 'opAsterisk.low'] [into-unicode 0x2217] glyph-block Symbol-Math-Circled : begin @@ -405,12 +446,14 @@ glyph-block Symbol-Math-Circled : begin composite [refer-glyph 'mathO'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'innerMultiply']] [into-unicode 0x2297] composite [refer-glyph 'mathO'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'innerMultiplyStroke1']] [into-unicode 0x2298] composite [refer-glyph 'mathO'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'mathcdot']] [into-unicode 0x2299] - composite [refer-glyph 'mathOBig'] [intersection [refer-glyph 'mathOOutlineBig'] [refer-glyph 'mathcdot']] [into-unicode 0x2A00] - composite [refer-glyph 'mathOBig'] [intersection [refer-glyph 'mathOOutlineBig'] [refer-glyph 'innerPlus']] [into-unicode 0x2A01] - composite [refer-glyph 'mathOBig'] [intersection [refer-glyph 'mathOOutlineBig'] [refer-glyph 'innerMultiply']] [into-unicode 0x2A02] composite [refer-glyph 'mathO'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'smallwhitecircle.hwid']] [into-unicode 0x229A] composite [refer-glyph 'mathO'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'mathAsterisk']] [into-unicode 0x229B] + for-width-kinds WIDE-WIDTH-1 + composite [MangleName 'uni2A00'] [refer-glyph : MangleName 'mathOBig'] [intersection [refer-glyph : MangleName 'mathOOutlineBig'] [refer-glyph : MangleName 'mathcdotBig']] [into-unicode : MangleUnicode 0x2A00] + composite [MangleName 'uni2A01'] [refer-glyph : MangleName 'mathOBig'] [intersection [refer-glyph : MangleName 'mathOOutlineBig'] [refer-glyph : MangleName 'innerPlusBig']] [into-unicode : MangleUnicode 0x2A01] + composite [MangleName 'uni2A02'] [refer-glyph : MangleName 'mathOBig'] [intersection [refer-glyph : MangleName 'mathOOutlineBig'] [refer-glyph : MangleName 'innerMultiplyBig']] [into-unicode : MangleUnicode 0x2A02] + composite refer-glyph 'mathO' intersection diff --git a/glyphs/symbol-other.ptl b/glyphs/symbol-other.ptl index 56d64183b..ce39fda23 100644 --- a/glyphs/symbol-other.ptl +++ b/glyphs/symbol-other.ptl @@ -346,6 +346,80 @@ glyph-block Symbol-Other-Metric-Marks : begin include : HBar 0 MIDDLE parenBot SHOULDERFINE save 'metmark' 0xE09F + define MosaicTop fontMetrics.OS_2.sTypoAscender + define MosaicBottom fontMetrics.OS_2.sTypoDescender + define MarkerSize (UPM / 12) + define MarkerBarWidth (UPM / 50) + + sketch # boxMarkLeft + set-width 0 + include : spiro-outline + corner 0 parenTop + corner 0 (parenTop + MarkerSize * 1.5) + corner (-MarkerSize * 1.5) parenTop + include : spiro-outline + corner 0 parenBot + corner 0 (parenBot - MarkerSize * 1.5) + corner (-MarkerSize * 1.5) parenBot + save 'boxMarkLeft' 0xE096 + + sketch # boxMarkRight + set-width 0 + include : spiro-outline + corner 0 parenTop + corner 0 (parenTop + MarkerSize * 1.5) + corner (+MarkerSize * 1.5) parenTop + include : spiro-outline + corner 0 parenBot + corner 0 (parenBot - MarkerSize * 1.5) + corner (+MarkerSize * 1.5) parenBot + save 'boxMarkRight' 0xE097 + + sketch # mosaicMarkLeft + set-width 0 + include : spiro-outline + corner 0 MosaicTop + corner 0 (MosaicTop + MarkerSize * 1.5) + corner (-MarkerSize * 1.5) MosaicTop + include : spiro-outline + corner 0 MosaicBottom + corner 0 (MosaicBottom - MarkerSize * 1.5) + corner (-MarkerSize * 1.5) MosaicBottom + save 'mosaicMarkLeft' 0xE098 + + sketch # mosaicMarkRight + set-width 0 + include : spiro-outline + corner 0 MosaicTop + corner 0 (MosaicTop + MarkerSize * 1.5) + corner (+MarkerSize * 1.5) MosaicTop + include : spiro-outline + corner 0 MosaicBottom + corner 0 (MosaicBottom - MarkerSize * 1.5) + corner (+MarkerSize * 1.5) MosaicBottom + save 'mosaicMarkRight' 0xE099 + + sketch # baselineMarkUnder + set-width 0 + include : HBar (-WIDTH * 2) (WIDTH * 2) 0 MarkerBarWidth + save 'baselineMarkUnder' 0xE09A + + sketch # baselineMarkLeft + set-width 0 + include : spiro-outline + corner 0 0 + corner (-MarkerSize * 1.5) (+MarkerSize * 1.5) + corner (-MarkerSize * 1.5) (-MarkerSize * 1.5) + save 'baselineMarkLeft' 0xE09B + + sketch # baselineMarkRight + set-width 0 + include : spiro-outline + corner 0 0 + corner (+MarkerSize * 1.5) (+MarkerSize * 1.5) + corner (+MarkerSize * 1.5) (-MarkerSize * 1.5) + save 'baselineMarkRight' 0xE09C + glyph-block Symbol-Other-Fags : begin glyph-block-import CommonShapes diff --git a/meta/macros.ptl b/meta/macros.ptl index 26821139c..2bf98eb94 100644 --- a/meta/macros.ptl +++ b/meta/macros.ptl @@ -179,9 +179,11 @@ define-macro for-width-kinds : syntax-rules {1 '.fwid' $Capture$.metrics.WIDE-WIDTH-0 ($Capture$.metrics.WIDE-WIDTH-0 / 2)} } foreach {FMosaicWide MosaicNameSuffix MosaicWidth MosaicUnitWidth} [items-of WidthKinds] : do + define MosaicDesiredWidth @[formOf _desired] define MosaicMiddle : MosaicWidth / 2 define MosaicWidthScalar : MosaicWidth / MosaicUnitWidth - define [MangleUnicode unicode] : if (MosaicWidth == @[formOf _desired]) unicode nothing + define [MangleUnicode unicode _desiredOverride] + if (MosaicWidth == (_desiredOverride || MosaicDesiredWidth)) unicode nothing define [MangleName name] : name + MosaicNameSuffix begin @::[_body.map formOf] ] diff --git a/verdafile.js b/verdafile.js index 6a6bb1256..1abc65daf 100644 --- a/verdafile.js +++ b/verdafile.js @@ -560,9 +560,21 @@ const PagesFontExport = task(`pages:font-export`, async target => { } }); +const PagesFastFontExport = task(`pages:fast-font-export`, async target => { + const [pagesDir] = await target.need(PagesDir); + if (!pagesDir) return; + const dirs = await target.need(GroupContents`iosevka`); + for (const dir of dirs) { + await cp(`${DIST}/${dir}`, path.resolve(pagesDir, "shared/font-import", dir)); + } +}); + const Pages = task(`pages`, async target => { await target.need(PagesDataExport, PagesFontExport); }); +const PagesFast = task(`pages-fast`, async target => { + await target.need(PagesDataExport, PagesFastFontExport); +}); const SampleImagesPre = task(`sample-images:pre`, async target => { const [sans, slab] = await target.need(