From 3103278e233848cc47ec0abd6236a09070395526 Mon Sep 17 00:00:00 2001 From: Belleve Invis Date: Wed, 22 Jan 2020 00:40:24 -0800 Subject: [PATCH] Symbols: Further Agda high-frequency symbol support --- changes/3.0.0-beta.1.md | 2 +- gen/build-glyphs.ptl | 16 - glyphs/autobuild-enclosure.ptl | 59 +-- glyphs/symbol-geometric.ptl | 21 +- glyphs/symbol-letter.ptl | 17 +- glyphs/symbol-math.ptl | 405 +++++++++++++-------- glyphs/symbol-mosaic.ptl | 13 +- glyphs/symbol-other.ptl | 4 +- glyphs/symbol-punctuation.ptl | 206 +++++++---- meta/aesthetics.ptl | 2 +- sample-text/agda-stdlib-symbols-matrix.txt | 6 + sample-text/agda-stdlib-symbols.txt | 269 ++++++++++++++ verdafile.js | 1 + 13 files changed, 758 insertions(+), 263 deletions(-) create mode 100644 sample-text/agda-stdlib-symbols-matrix.txt create mode 100644 sample-text/agda-stdlib-symbols.txt diff --git a/changes/3.0.0-beta.1.md b/changes/3.0.0-beta.1.md index 5d7e24735..fe194e5e6 100644 --- a/changes/3.0.0-beta.1.md +++ b/changes/3.0.0-beta.1.md @@ -2,4 +2,4 @@ * Make curly `k` under Slab variants look more different than the straight ones. * Fixed minor stroke overflow on `A`. * Fix O-hook connection. -* Add symbols for `≺`, `≻`, `⊏`, `⊐`, etc. \ No newline at end of file +* Add more math symbols (`≺`, `≻`, `⊏`, `⊐`, etc.) for Agda. diff --git a/gen/build-glyphs.ptl b/gen/build-glyphs.ptl index 5f4459121..63a1663fb 100644 --- a/gen/build-glyphs.ptl +++ b/gen/build-glyphs.ptl @@ -179,21 +179,6 @@ export as build : define [buildFont para recursive recursiveCodes] : begin assignFontNames para metrics font setFontMetrics para metrics font - # Necessary notdef, .null and nonmarkingreturn glyph - sketch # .notdef - start-from SB 0 - line-to SB CAP - line-to RIGHTSB CAP - line-to RIGHTSB 0 - - start-from (SB + STROKE) STROKE - line-to (RIGHTSB - STROKE) STROKE - line-to (RIGHTSB - STROKE) (CAP - STROKE) - line-to (SB + STROKE) (CAP - STROKE) - - set currentGlyph.cmpPriority (9999) - save '.notdef' - sketch # .null set-width 0 set currentGlyph.cmpPriority (9998) @@ -204,7 +189,6 @@ export as build : define [buildFont para recursive recursiveCodes] : begin set currentGlyph.cmpPriority (-1) save 'nonmarkingreturn' 0x000D - # Space sketch # space local df : DivFrame para.diversityF set-width df.width diff --git a/glyphs/autobuild-enclosure.ptl b/glyphs/autobuild-enclosure.ptl index b503c9b74..d293361e1 100644 --- a/glyphs/autobuild-enclosure.ptl +++ b/glyphs/autobuild-enclosure.ptl @@ -48,7 +48,7 @@ export : define [apply] : begin set-width 0 return lg - define [CircCrowd digits width] : 5 + [AdjustDigitCount digits width] + define [CircCrowd digits width] : 2 + 2 * [AdjustDigitCount digits width] define [CircScale digits width] : 0.65 / [Math.pow [AdjustDigitCount digits width] 0.5] define [circleDimens digits dscale w m] : begin @@ -74,10 +74,11 @@ export : define [apply] : begin define [CircledMiniatureFont digits width records] : begin local pendingGlyphs : records.map : [record] => record.1 return : Miniature - glyphs -- [pendingGlyphs.reduce : [a b] => [a.concat b]] - crowd -- [CircCrowd digits width] - scale -- [CircScale digits width] - unfair -- true + glyphs -- [pendingGlyphs.reduce : [a b] => [a.concat b]] + crowd -- [CircCrowd digits width] + scale -- [CircScale digits width] + unfair -- true + sbscale -- 1 define [CircName prefix digits parts suffix] : suggestName : prefix + '-' + digits + '-' + [parts.join '_'] + '.' + suffix @@ -183,20 +184,41 @@ export : define [apply] : begin define pscale : linreg WIDTH 0.6 UPM 0.75 width define sw0 : [EnclosureStrokeScale dscale digits width] * [adviceBlackness [BraceCrowd digits width]] / [BraceScale digits width] define sw : Math.min STROKE sw0 - define l : [Math.max (SB + O * 3) (width / 2 - CAP / 2 * dscale - sw0 * 2.5)] + OX + define l : Math.max (SB + O * 3) (width / 2 - [Math.max (WIDTH * digits) CAP] / 2) define r : width - l return : object width sw dscale pscale l r define [createBracedGlyphs digits records] : begin foreach {suffix ww} [items-of circleWidthClasses] : do - local pendingGlyphs : records.map : [record] => record.1 - local miniatureFont : Miniature + define pendingGlyphs : records.map : [record] => record.1 + define miniatureFont : Miniature glyphs -- [pendingGlyphs.reduce : [a b] => [a.concat b]] crowd -- [BraceCrowd digits ww] scale -- [BraceScale digits ww] sbscale -- 1 unfair -- true + define gnb : CircName '.braced-brace' digits {} suffix + define braceGlyph : create-glyph gnb : glyph-construction + define [object width dscale pscale sw l r] : bracedDottdeDimens digits ww + local s : TANSLANT * symbolMid / 2 + set-width width + include : dispiro + widths.lhs sw + g4 ([mix l r 0.15] - s) (parenTop * pscale) + g4.down.mid (l - s + O) (symbolMid * pscale) + g4 ([mix l r 0.15] - s) (parenBot * pscale) + + include : dispiro + widths.rhs sw + g4 ([mix r l 0.15] + s) (parenTop * pscale) + g4.down.mid (r + s - O) (symbolMid * pscale) + g4 ([mix r l 0.15] + s) (parenBot * pscale) + + include : Upright + include : Translate 0 (symbolMid - symbolMid * pscale) + include : Italify + foreach {unicode parts w bal baly} [items-of records] : do define [object width dscale pscale sw l r] : bracedDottdeDimens digits ww local gn : CircName 'braced' digits parts suffix @@ -227,31 +249,16 @@ export : define [apply] : begin if bal : set shift : CAP / 2 - [mix baly gMiddleY bal] : else : set shift : CAP / 2 - gMiddleY - apply-transform : Translate (width / 2) (symbolMid * pscale - (CAP / 2 - shift) * dscale) + apply-transform : Translate (width / 2) (symbolMid - (CAP / 2 - shift) * dscale) apply-transform : Italify set currentGlyph.cmpPriority 11 refair currentGlyph set-width 0 sketch - local s : TANSLANT * symbolMid set-width width include lg - include : dispiro - widths.lhs sw - g4 ([mix l r 0.15] - s) (parenTop * pscale) - g4.down.mid (l - s + O) (symbolMid * pscale) - g4 ([mix l r 0.15] - s) (parenBot * pscale) - - include : dispiro - widths.rhs sw - g4 ([mix r l 0.15] + s) (parenTop * pscale) - g4.down.mid (r + s - O) (symbolMid * pscale) - g4 ([mix r l 0.15] + s) (parenBot * pscale) - - include : Upright - include : Translate 0 (symbolMid - symbolMid * pscale) - include : Italify + include braceGlyph if (w == ww) : save gn unicode : else : save gn @@ -381,7 +388,6 @@ export : define [apply] : begin if [not recursive] : do "Single-digit braced" local compositions {} - compositions.push { null {'space'} FULLWIDTH1 } foreach [j : range 1 till 9] : compositions.push : list 0x2474 + j - 1 digitGlyphNames j @@ -392,7 +398,6 @@ export : define [apply] : begin if [not recursive] : do "Double-digit braced" local compositions {} - compositions.push { null {'space'} FULLWIDTH1 } foreach [j : range 10 till 20] : compositions.push : list 0x2474 + j - 1 digitGlyphNames j diff --git a/glyphs/symbol-geometric.ptl b/glyphs/symbol-geometric.ptl index 3df3c39ec..f72199fd4 100644 --- a/glyphs/symbol-geometric.ptl +++ b/glyphs/symbol-geometric.ptl @@ -124,7 +124,7 @@ export : define [apply] : begin local halfBarWidth : headLen / 3 local headWidth : halfBarWidth * 2 - local fine : Math.min [adviceBlackness 5] (halfBarWidth * 0.4) + local fine : Math.min [adviceBlackness 5] (halfBarWidth * 0.6) local mag : Math.hypot (y2 - y1) (x2 - x1) local p : (mag - fine) / mag local p2 : (mag - fine * [Math.sqrt 13] / 2) / mag @@ -751,13 +751,13 @@ export : define [apply] : begin save [MangleName 'bigblackcircle'] [MangleUnicode 0x2B24] let - : configurations : list + : cfg : list * {.sides 5 .skip 2 .name 'blackstar' .unicode 0x2605 .overflow 1.1 .phase 0} * {.sides 5 .skip 1 .name 'blackpentagon' .unicode 0x2B1F .overflow 1.05 .phase 0} * {.sides 6 .skip 1 .name 'blackhexagon' .unicode 0x2B22 .overflow 1.05 .phase 0} * {.sides 5 .skip 1 .name 'rhblackpentagon' .unicode 0x2B53 .overflow 1.05 .phase (-Math.PI / 2)} * {.sides 6 .skip 1 .name 'hblackhexagon' .unicode 0x2B23 .overflow 1.05 .phase (Math.PI / 2)} - : foreach [{.sides sides .skip skip .name name .unicode unicode .overflow overflow .phase phase} : items-of configurations] : sketch + : foreach [[object sides skip name unicode overflow phase] : items-of cfg] : sketch include markset.plus foreach [j : range 0 sides] : begin local angle : 2 * Math.PI * j * skip / sides + phase @@ -768,6 +768,21 @@ export : define [apply] : begin include FullWidthify save [MangleName name] [MangleUnicode unicode] + let + : cfg : list + * {.sides 6 .skip 1 .name 'SixPointedBlackStar' .unicode 0x2736 .overflow 1.05 .phase 0} + : foreach [[object sides skip name unicode overflow phase] : items-of cfg] : sketch + include markset.plus + foreach [j : range 0 (2 * sides)] : begin + local angle : Math.PI * j * skip / sides + phase + local mag : [if (j % 2) 0.5 1.0] * overflow + currentGlyph.([if j 'line-to' 'start-from']) + mix left right (0.5 - 0.5 * mag * [Math.sin angle]) + symbolMid + squareRadius * mag * [Math.cos angle] + save [MangleName "hw\(name)"] + include FullWidthify + save [MangleName name] [MangleUnicode unicode] + sketch # dottedcircle local n 12 local fine : adviceBlackness 10 diff --git a/glyphs/symbol-letter.ptl b/glyphs/symbol-letter.ptl index 07327b896..38615e5e2 100644 --- a/glyphs/symbol-letter.ptl +++ b/glyphs/symbol-letter.ptl @@ -278,8 +278,8 @@ export : define [apply] : begin save 'mathBeth' 0x2136 do "Blackboard Bolds ========================================================================" - define bbs : adviceBlackness 8 - define bbd : WIDTH / 5.5 + define bbs : adviceBlackness 6 + define bbd : clamp (WIDTH / 5.5) (WIDTH / 4) (bbs * 2.5) sketch # bbN include : VBarLeft SB 0 CAP bbs @@ -311,6 +311,17 @@ export : define [apply] : begin widths.center bbs corner (SB + bbd) (bbs / 2) corner RIGHTSB (CAP - (bbs / 2)) + + include : intersection + union + VBarRight RIGHTSB (CAP - bbs * 2) CAP bbs + VBarLeft SB 0 (bbs * 2) bbs + spiro-outline + corner SB (bbs / 2) + corner (RIGHTSB - bbd) (CAP - bbs / 2) + corner RIGHTSB (CAP - (bbs / 2)) + corner (SB + bbd) (bbs / 2) + save 'bbZ' 0x2124 sketch # bbC @@ -372,7 +383,7 @@ export : define [apply] : begin VBar (RIGHTSB - bbd) 0 CAP bbs define terminalX : MIDDLE + HOOKX - define tailDeltaX : bbd / 2 + bbs / 4 * HVCONTRAST + define tailDeltaX : bbd / 2 - bbs / 8 * HVCONTRAST define qTerminalY : bbs - HOOK - bbd / 4 define [QTail x] : dispiro widths.center bbs diff --git a/glyphs/symbol-math.ptl b/glyphs/symbol-math.ptl index f2cd034c1..92d141f35 100644 --- a/glyphs/symbol-math.ptl +++ b/glyphs/symbol-math.ptl @@ -6,6 +6,9 @@ import [designParameters] from '../meta/aesthetics' export : define [apply] : begin glyph-module-entry commonShapes overmarks letterBasic letterExt + + # Equation parameters + do "Letter-like" sketch # micro include glyphs.mu AS_BASE @@ -95,54 +98,109 @@ export : define [apply] : begin do "Frames" local sw GEOMETRYSTROKE - local k : 2 / 3 - local top : symbolMid + (RIGHTSB - SB) * 0.5 + sw * k - local bottom : symbolMid - (RIGHTSB - SB) * 0.5 - sw * k - local left : SB - sw * k - local right : RIGHTSB + sw * k + local kBox : 2 / 3 + local leftBox : SB * kBox + local rightBox : WIDTH - SB * kBox + local radiusBox : (rightBox - leftBox) / 2 + local topBox : symbolMid + radiusBox + local bottomBox : symbolMid - radiusBox + + + local kCircle : 2 / 3 + local leftCircle : SB * kCircle + 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 glyphs.'whitecircle.hwid' + include : dispiro + widths.lhs GEOMETRYSTROKE + g4 MIDDLE (symbolMid + radiusCircle - O) + archv nothing 2 + g4 (leftCircle + O) symbolMid + arcvh nothing 2 + g4 MIDDLE (symbolMid - radiusCircle + O) + archv nothing 2 + g4 (rightCircle - O) symbolMid + arcvh nothing 2 + close save 'mathO' sketch # mathO-outline - include glyphs.'blackcircleO.hwid' + include : spiro-outline + g4 MIDDLE (symbolMid + radiusCircle) + archv nothing 2 + g4 (leftCircle) symbolMid + arcvh nothing 2 + g4 MIDDLE (symbolMid - radiusCircle) + archv nothing 2 + g4 (rightCircle) symbolMid + 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 left top - corner left bottom - corner right bottom - corner right top + corner leftBox topBox + corner leftBox bottomBox + corner rightBox bottomBox + corner rightBox topBox save 'mathBoxOutline' sketch # mathBox include : intersection glyphs.mathBoxOutline : union - dispiro [widths.lhs sw] [flat left top] [curl left bottom] - dispiro [widths.lhs sw] [flat left bottom] [curl right bottom] - dispiro [widths.lhs sw] [flat right bottom] [curl right top] - dispiro [widths.lhs sw] [flat right top] [curl left top] + dispiro [widths.lhs sw] [flat leftBox topBox] [curl leftBox bottomBox] + dispiro [widths.lhs sw] [flat leftBox bottomBox] [curl rightBox bottomBox] + dispiro [widths.lhs sw] [flat rightBox bottomBox] [curl rightBox topBox] + dispiro [widths.lhs sw] [flat rightBox topBox] [curl leftBox topBox] save 'mathBox' do "Geometry" sketch include : intersection spiro-outline - corner left bottom - corner right bottom - corner right top + corner leftBox bottomBox + corner rightBox bottomBox + corner rightBox topBox union - dispiro [widths.lhs sw] [flat left bottom] [curl right bottom] - dispiro [widths.lhs sw] [flat right bottom] [curl right top] - dispiro [widths.lhs sw] [flat right top] [curl left bottom] + dispiro [widths.lhs sw] [flat leftBox bottomBox] [curl rightBox bottomBox] + dispiro [widths.lhs sw] [flat rightBox bottomBox] [curl rightBox topBox] + dispiro [widths.lhs sw] [flat rightBox topBox] [curl leftBox bottomBox] save 'mathRightTriangle' 0x22BF sketch include : intersection spiro-outline - corner left bottom - corner right bottom - corner right top + corner leftBox bottomBox + corner rightBox bottomBox + corner rightBox topBox union - dispiro [widths.lhs sw] [flat left bottom] [curl right bottom] - dispiro [widths.lhs sw] [flat right top] [curl left bottom] + dispiro [widths.lhs sw] [flat leftBox bottomBox] [curl rightBox bottomBox] + dispiro [widths.lhs sw] [flat rightBox topBox] [curl leftBox bottomBox] save 'angle' 0x2220 do "Arith" @@ -194,6 +252,20 @@ export : define [apply] : begin include : DotAt MIDDLE plusTop DOTRADIUS save 'minusDot' 0x2238 + sketch # colon-equal + include glyphs.'baselineDot' + include glyphs.'xhDot' + + local sbSquash 0.5 + + local delta : Math.max 0 : WIDTH / 2 - DOTRADIUS - SB * sbSquash + apply-transform : Upright + apply-transform : Translate (+delta) (symbolMid - XH / 2) + apply-transform : Italify + + include : HBar (SB * sbSquash) (RIGHTSB - DOTSIZE) symbolMid OPERATORSTROKE + save 'minusColon' 0x2239 + sketch # innerMinus include markset.plus include : HBar SB RIGHTSB symbolMid GEOMETRYSTROKE @@ -259,105 +331,38 @@ export : define [apply] : begin save 'divide' 0xF7 - local equalHalfSpace : (operTop - operBot) * 2 * designParameters.equal_wideness - do "Equality" + do + define fine : adviceBlackness 5.5 + define radius : Math.max ((RIGHTSB - SB) / 12) (fine / 2) + define barOffset : fine * 1.5 + radius * 2 + define dotCenterOffset : OX + fine + radius + sketch + include markset.plus + include : union + HBar (SB + barOffset) (RIGHTSB - barOffset) symbolMid OPERATORSTROKE + DotAt (RIGHTSB - dotCenterOffset) symbolMid (radius + fine) + difference + DotAt (SB + dotCenterOffset) symbolMid (radius + fine) + DotAt (SB + dotCenterOffset) symbolMid radius + save 'originalOf' 0x22b6 + sketch + include markset.plus + include : union + HBar (SB + barOffset) (RIGHTSB - barOffset) symbolMid OPERATORSTROKE + DotAt (SB + dotCenterOffset) symbolMid (radius + fine) + difference + DotAt (RIGHTSB - dotCenterOffset) symbolMid (radius + fine) + DotAt (RIGHTSB - dotCenterOffset) symbolMid radius + save 'imageOf' 0x22b7 + sketch + include markset.plus + include : union + HBar SB (RIGHTSB - barOffset) symbolMid OPERATORSTROKE + difference + DotAt (RIGHTSB - dotCenterOffset) symbolMid (radius + fine) + DotAt (RIGHTSB - dotCenterOffset) symbolMid radius + save 'multimap' 0x22b8 - define [EqualShape left right] : union - HBar left right (symbolMid + equalHalfSpace) OPERATORSTROKE - HBar left right (symbolMid - equalHalfSpace) OPERATORSTROKE - - define [EqualHole x] : VBar x (symbolMid - equalHalfSpace) (symbolMid + equalHalfSpace) [adviceBlackness 6] - - define [IdentShape left right] : union - HBar left right (symbolMid + equalHalfSpace * 1.5) OPERATORSTROKE - HBar left right symbolMid OPERATORSTROKE - HBar left right (symbolMid - equalHalfSpace * 1.5) OPERATORSTROKE - define [IdentHole x] : VBar x (symbolMid - equalHalfSpace * 1.5) (symbolMid + equalHalfSpace * 1.5) [adviceBlackness 6] - - sketch # equal - include markset.plus - include : EqualShape SB RIGHTSB - save 'equal' '=' - - branch - include : DotAt [mix SB RIGHTSB (1/6)] (symbolMid + equalHalfSpace * 2.5) DOTRADIUS - include : DotAt [mix SB RIGHTSB (5/6)] (symbolMid - equalHalfSpace * 2.5) DOTRADIUS - save 'twodotapproxeq' 0x2252 - - sketch # colon-equal - include glyphs.'baselineDot' - include glyphs.'xhDot' - - local sbSquash 0.5 - - local delta : Math.max 0 : WIDTH / 2 - DOTRADIUS - SB * sbSquash - apply-transform : Upright - apply-transform : Translate (-delta) (symbolMid - XH / 2) - apply-transform : Italify - - include : EqualShape (SB + PERIODSIZE) (WIDTH - SB * sbSquash) - save 'colonEq' 0x2254 - - # Ligation glyphs - sketch # equal.fc - include markset.plus - include : difference - EqualShape SB (WIDTH - O) - EqualHole WIDTH - save 'equal.fc' - - sketch # equal.cf - include markset.plus - include : difference - EqualShape O RIGHTSB - EqualHole 0 - save 'equal.cf' - - sketch # equal.jf - include markset.plus - include : difference - EqualShape (RIGHTSB - WIDTH + O) RIGHTSB - EqualHole 0 - save 'equal.jf' - - sketch # equal.cc - include markset.plus - include : difference - EqualShape O (WIDTH - O) - union - EqualHole 0 - EqualHole WIDTH - save 'equal.cc' - - sketch # ident.fc - include markset.plus - include : difference - IdentShape SB (WIDTH - O) - IdentHole WIDTH - save 'ident.fc' - - sketch # ident.cf - include markset.plus - include : difference - IdentShape O RIGHTSB - IdentHole 0 - save 'ident.cf' - - sketch # ident.jf - include markset.plus - include : difference - IdentShape (RIGHTSB - WIDTH + O) RIGHTSB - IdentHole 0 - save 'ident.jf' - - sketch # ident.cc - include markset.plus - include : difference - IdentShape O (WIDTH - O) - union - IdentHole 0 - IdentHole WIDTH - save 'ident.cc' do "Dots and Colon-likes" local radius1 PERIODRADIUS @@ -402,6 +407,9 @@ export : define [apply] : begin composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.innerMultiply] [into-unicode 0x2297] composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.innerMultiplyStroke1] [into-unicode 0x2298] composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.mathcdot] [into-unicode 0x2299] + composite glyphs.mathOBig [intersection glyphs.mathOOutlineBig glyphs.mathcdot] [into-unicode 0x2A00] + composite glyphs.mathOBig [intersection glyphs.mathOOutlineBig glyphs.innerPlus] [into-unicode 0x2A01] + composite glyphs.mathOBig [intersection glyphs.mathOOutlineBig glyphs.innerMultiply] [into-unicode 0x2A02] composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.'smallwhitecircle.hwid'] [into-unicode 0x229A] composite glyphs.mathO [intersection glyphs.mathOOutline glyphs.mathAsterisk] [into-unicode 0x229B] composite @@ -439,6 +447,19 @@ export : define [apply] : begin save 'vee' 0x2228 turned 'wedge' 0x2227 'vee' MIDDLE symbolMid + sketch # curlyVee + local fine : CTHIN * OPERATORSTROKE + include : dispiro + g4 SB operTop [widths.center OPERATORSTROKE] + straight.down.end (MIDDLE - OPERATORSTROKE / 2 * HVCONTRAST) operBot [widths.heading fine 0 DOWNWARD] + + include : dispiro + widths.center OPERATORSTROKE + g4 RIGHTSB operTop [widths.center OPERATORSTROKE] + straight.down.end (MIDDLE + OPERATORSTROKE / 2 * HVCONTRAST) operBot [widths.heading 0 fine DOWNWARD] + save 'curlyVee' 0x22CE + turned 'curlyWedge' 0x22CF 'curlyVee' MIDDLE symbolMid + sketch # doubleVee define sw : adviceBlackness 6 include : dispiro @@ -489,7 +510,6 @@ export : define [apply] : begin save 'squareCap' 0x2293 turned 'squareCup' 0x2294 'squareCap' MIDDLE symbolMid - ### Logicals do "Logicals" sketch # negate include glyphs.minus @@ -558,12 +578,125 @@ export : define [apply] : begin include : Rect tackTop tackBot SB RIGHTSB save 'endOfProof' 0x220E - do "Comparison" - # Less and Greater + + + do "Relation" + define equalHalfSpace : (operTop - operBot) * 2 * designParameters.equal_wideness define lessSlantness : (4 / 13) * (operTop - operBot) / (RIGHTSB - SB) define dH : lessSlantness * (RIGHTSB - SB) define lessEqDist : Math.max [adviceBlackness 4] (XH * 0.16) + define [EqualShape left right] : union + HBar left right (symbolMid + equalHalfSpace) OPERATORSTROKE + HBar left right (symbolMid - equalHalfSpace) OPERATORSTROKE + + define [EqualHole x] : VBar x (symbolMid - equalHalfSpace) (symbolMid + equalHalfSpace) [adviceBlackness 6] + + define [IdentShape left right] : union + HBar left right (symbolMid + equalHalfSpace * 1.5) OPERATORSTROKE + HBar left right symbolMid OPERATORSTROKE + HBar left right (symbolMid - equalHalfSpace * 1.5) OPERATORSTROKE + define [IdentHole x] : VBar x (symbolMid - equalHalfSpace * 1.5) (symbolMid + equalHalfSpace * 1.5) [adviceBlackness 6] + + + sketch # equal + include markset.plus + include : EqualShape SB RIGHTSB + save 'equal' '=' + + branch + include : DotAt [mix SB RIGHTSB (1/6)] (symbolMid + equalHalfSpace * 2.5) DOTRADIUS + include : DotAt [mix SB RIGHTSB (5/6)] (symbolMid - equalHalfSpace * 2.5) DOTRADIUS + save 'twodotapproxeq' 0x2252 + + sketch # colon-equal + include glyphs.'baselineDot' + include glyphs.'xhDot' + + local sbSquash 0.5 + + local delta : Math.max 0 : WIDTH / 2 - DOTRADIUS - SB * sbSquash + apply-transform : Upright + apply-transform : Translate (-delta) (symbolMid - XH / 2) + apply-transform : Italify + + include : EqualShape (SB + DOTSIZE) (WIDTH - SB * sbSquash) + save 'colonEq' 0x2254 + + # Ligation glyphs + sketch # equal.fc + include markset.plus + include : difference + EqualShape SB (WIDTH - O) + EqualHole WIDTH + save 'equal.fc' + + sketch # equal.cf + include markset.plus + include : difference + EqualShape O RIGHTSB + EqualHole 0 + save 'equal.cf' + + sketch # equal.jf + include markset.plus + include : difference + EqualShape (RIGHTSB - WIDTH + O) RIGHTSB + EqualHole 0 + save 'equal.jf' + + sketch # equal.cc + include markset.plus + include : difference + EqualShape O (WIDTH - O) + union + EqualHole 0 + EqualHole WIDTH + save 'equal.cc' + + sketch # ident + include markset.plus + include : IdentShape SB RIGHTSB + save 'ident' 0x2261 + + sketch # iiiident + include markset.plus + include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 2.25) OPERATORSTROKE + include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 0.75) OPERATORSTROKE + include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 0.75) OPERATORSTROKE + include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 2.25) OPERATORSTROKE + save 'iiiident' 0x2263 + + sketch # ident.fc + include markset.plus + include : difference + IdentShape SB (WIDTH - O) + IdentHole WIDTH + save 'ident.fc' + + sketch # ident.cf + include markset.plus + include : difference + IdentShape O RIGHTSB + IdentHole 0 + save 'ident.cf' + + sketch # ident.jf + include markset.plus + include : difference + IdentShape (RIGHTSB - WIDTH + O) RIGHTSB + IdentHole 0 + save 'ident.jf' + + sketch # ident.cc + include markset.plus + include : difference + IdentShape O (WIDTH - O) + union + IdentHole 0 + IdentHole WIDTH + save 'ident.cc' + define [LessShapeA top bot l r s] : begin local exp : Math.sqrt : 1 + (top - bot) / (2 * (r - l)) * (top - bot) / (2 * (r - l)) return : dispiro @@ -856,22 +989,8 @@ export : define [apply] : begin include : symWave symbolMid (-1) save 'flipsym' 0x223D - sketch # ident - include markset.plus - include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 1.5) OPERATORSTROKE - include : HBar SB RIGHTSB symbolMid OPERATORSTROKE - include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 1.5) OPERATORSTROKE - save 'ident' 0x2261 - - sketch # iiiident - include markset.plus - include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 2.25) OPERATORSTROKE - include : HBar SB RIGHTSB (symbolMid + equalHalfSpace * 0.75) OPERATORSTROKE - include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 0.75) OPERATORSTROKE - include : HBar SB RIGHTSB (symbolMid - equalHalfSpace * 2.25) OPERATORSTROKE - save 'iiiident' 0x2263 - vdual 'approx' 0x2248 'sym' approxDist + sketch # aapprox include markset.plus include : symWave (symbolMid + approxDist) 1 @@ -882,6 +1001,7 @@ export : define [apply] : begin branch include : HBar SB RIGHTSB (symbolMid - approxDist) OPERATORSTROKE save 'approxBar' 0x224A + sketch # symbar include glyphs.sym AS_BASE include : Upright @@ -1251,7 +1371,6 @@ export : define [apply] : begin alias 'mathbullet' 0x2219 'bullet' alias 'mathbar' 0x2223 'bar' notGlyph 0x2224 'mathbar' [mix symbolMid bgopTop 0.5] [mix symbolMid bgopBot 0.5] 0.1 - dual 'parallel' 0x2225 'bar' (WIDTH * 0.35) notGlyph 0x2226 'parallel' [mix symbolMid bgopTop 0.5] [mix symbolMid bgopBot 0.5] 0 alias 'mathsmallcircle' 0x2218 'smallwhitecircle.hwid' alias 'whiteDiamondOperator' 0x22C4 'whitediamond.hwid' diff --git a/glyphs/symbol-mosaic.ptl b/glyphs/symbol-mosaic.ptl index 6dce68312..82d2cd3ab 100644 --- a/glyphs/symbol-mosaic.ptl +++ b/glyphs/symbol-mosaic.ptl @@ -295,7 +295,7 @@ export : define [apply] : begin include : Shade 8 FillMedium : PatternPolygon22 bits save [BEGlyphName unicode] [MangleUnicode unicode] - define [InverseMediumShade unicode bits coBits] : sketch + define [InverseMediumShade unicode bits] : sketch set-width MosaicWidth include : Shade (-8) (1 - FillMedium) : PatternPolygon22 bits include : difference @@ -744,3 +744,14 @@ export : define [apply] : begin include glyphs.[MangleName 'pwlSlashBottomLeft'] include : FlipAround (MosaicWidth / 2) pwlMid save [MangleName 'pwlSlashTopRight'] [MangleUnicode 0xE0BF] + + sketch # .notdef + include : union + intersection + glyph-construction : include glyphs.'be2592.hwid' + Rect CAP 0 SB RIGHTSB + difference + Rect CAP 0 SB RIGHTSB + Rect (CAP - STROKE) (0 + STROKE) (SB + STROKE) (RIGHTSB - STROKE) + set currentGlyph.cmpPriority (9999) + save '.notdef' diff --git a/glyphs/symbol-other.ptl b/glyphs/symbol-other.ptl index d9f78b225..fa8016cbb 100644 --- a/glyphs/symbol-other.ptl +++ b/glyphs/symbol-other.ptl @@ -216,8 +216,8 @@ export : define [apply] : begin local nsBot pictBot local fine : adviceBlackness 3.5 local fine2 : adviceBlackness 4 - local l : SB - fine / 2 - local r : RIGHTSB + fine / 2 + local l : SB - fine * 0 + local r : RIGHTSB + fine * 0 local hsp : ((r - l) - (fine * 2 * HVCONTRAST)) * 0.3 local skew 0.2 save-glyph 'sharpTone' 0x266F : sketch diff --git a/glyphs/symbol-punctuation.ptl b/glyphs/symbol-punctuation.ptl index 0c7383300..4a1bdc2db 100644 --- a/glyphs/symbol-punctuation.ptl +++ b/glyphs/symbol-punctuation.ptl @@ -113,13 +113,12 @@ export : define [apply] : begin sketch # bracketBarLeft local l : mix SB RIGHTSB designParameters.bracketOutside local r : mix SB RIGHTSB designParameters.bracketInside - local sw : Math.min ((r - l) / 5) [adviceBlackness 4] include : union HBarBottom l r parenBot HBarTop l r parenTop HBar l r [mix parenBot parenTop 0.5] - VBarLeft l parenBot parenTop sw + VBarLeft l parenBot parenTop save 'bracketBarLeft' 0x2045 sketch # bracketBarRight @@ -150,34 +149,38 @@ export : define [apply] : begin straight.left.end [mix SB RIGHTSB designParameters.braceOutside] symbolMid [heading LEFTWARD] save 'braceLeft.straight' - sketch # braceLeft.curly - local xIns : mix SB RIGHTSB [mix designParameters.braceOutside designParameters.braceInside 1] - local xOus : mix SB RIGHTSB [mix designParameters.braceInside designParameters.braceOutside 1] + define [CurlyBraceShape sw] : glyph-construction + local hs : sw / 2 + local xIns : mix SB RIGHTSB designParameters.braceInside + local xOus : mix SB RIGHTSB designParameters.braceOutside local m1 : mix SB RIGHTSB [mix designParameters.braceInside designParameters.braceOutside designParameters.braceCurlyM1] local m2 : mix SB RIGHTSB [mix designParameters.braceInside designParameters.braceOutside designParameters.braceCurlyM2] - local braceRadiusLowLimit : (parenTop - symbolMid - STROKE) * (1 / 3) + HALFSTROKE + local braceRadiusLowLimit : (parenTop - symbolMid - sw) * (1 / 3) + hs local radius1 : Math.min (xIns - m1) braceRadiusLowLimit - local radius2 : [Math.min (m2 - xOus) braceRadiusLowLimit] - HALFSTROKE - local ess : mix STROKE ESS 0.25 + local radius2 : [Math.min (m2 - xOus) braceRadiusLowLimit] - hs + local ess : mix sw (ESS * sw / STROKE) 0.25 local top : mix symbolMid parenTop (1 + designParameters.braceOvershoot) local bot : mix symbolMid parenBot (1 + designParameters.braceOvershoot) include : dispiro - straight.left.start xIns (top - HALFSTROKE) [widths.heading HALFSTROKE HALFSTROKE LEFTWARD] + straight.left.start xIns (top - hs) [widths.heading hs hs LEFTWARD] archv g4.down.mid m1 (top - radius1) [heading DOWNWARD] alsothru 0.5 0.5 [widths (ess / 2) (ess / 2)] - g4.down.mid m2 (symbolMid + radius2) [widths.heading HALFSTROKE HALFSTROKE DOWNWARD] + g4.down.mid m2 (symbolMid + radius2) [widths.heading hs hs DOWNWARD] arcvh straight.left.end xOus symbolMid [heading LEFTWARD] include : dispiro - straight.left.start xIns (bot + HALFSTROKE) [widths.heading HALFSTROKE HALFSTROKE LEFTWARD] + straight.left.start xIns (bot + hs) [widths.heading hs hs LEFTWARD] archv g4.up.mid m1 (bot + radius1) [heading UPWARD] alsothru 0.5 0.5 [widths (ess / 2) (ess / 2)] - g4.up.mid m2 (symbolMid - radius2) [widths.heading HALFSTROKE HALFSTROKE UPWARD] + g4.up.mid m2 (symbolMid - radius2) [widths.heading hs hs UPWARD] arcvh straight.left.end xOus symbolMid [heading LEFTWARD] + + sketch # braceLeft.curly + include : CurlyBraceShape STROKE save 'braceLeft.curly' composite 'braceRight.straight' glyphs.'braceLeft.straight' [FlipAround MIDDLE symbolMid] @@ -186,24 +189,51 @@ export : define [apply] : begin select-variant 'braceLeft' '{' select-variant 'braceRight' '}' + sketch # whiteBraceLeft + local fine : adviceBlackness 4 + local xIns : mix SB RIGHTSB designParameters.braceInside + local top : mix symbolMid parenTop (1 + designParameters.braceOvershoot) + local bot : mix symbolMid parenBot (1 + designParameters.braceOvershoot) + include : CurlyBraceShape fine + include : VBarRight xIns (bot + fine / 2) (top - fine / 2) fine + save 'whiteBraceLeft' 0x2983 + + sketch # whiteBraceRight + include glyphs.whiteBraceLeft + include : FlipAround MIDDLE symbolMid + save 'whiteBraceRight' 0x2984 + + define [AngleLeftShape outside inside sw] : begin + local fatten : Math.hypot 1 ((inside - outside - O) / (parenTop - symbolMid)) + return : union + dispiro + widths.lhs sw + flat inside parenTop + curl (outside + O) symbolMid [widths.heading (sw * fatten) 0 DOWNWARD] + dispiro + widths.rhs sw + flat inside parenBot + curl (outside + O) symbolMid [widths.heading 0 (sw * fatten) UPWARD] + sketch # angleLeft - local fatten : Math.hypot 1 (([mix SB RIGHTSB : designParameters.parenInside - designParameters.parenOutside] - O) / (parenTop - symbolMid)) - include : dispiro - widths.lhs OPERATORSTROKE - flat [mix SB RIGHTSB designParameters.parenInside] parenTop - curl ([mix SB RIGHTSB designParameters.parenOutside] + O) symbolMid [widths.heading (OPERATORSTROKE * fatten) 0 DOWNWARD] - include : dispiro - widths.rhs OPERATORSTROKE - flat [mix SB RIGHTSB designParameters.parenInside] parenBot - curl ([mix SB RIGHTSB designParameters.parenOutside] + O) symbolMid [widths.heading 0 (OPERATORSTROKE * fatten) UPWARD] + define dim : ParenDim 0 + include : AngleLeftShape dim.outside dim.inside OPERATORSTROKE save 'angleLeft' 0x2329 - alias 'mangleLeft' 0x27E8 'angleLeft' + save 'mathAngleLeft' 0x27E8 + + sketch # dblAngleLeft + define dim : ParenDim 0 + define fine : Math.min OPERATORSTROKE [adviceBlackness 3] + define farOutside : dim.outside / 2 + define middle : mix farOutside dim.inside 0.5 + include : AngleLeftShape farOutside middle fine + include : AngleLeftShape middle dim.inside fine + save 'dblAngleLeft' 0x27EA turned 'angleRight' 0x232A 'angleLeft' MIDDLE symbolMid - alias 'mangleRight' 0x27E9 'angleRight' + alias 'mathAngleRight' 0x27E9 'angleRight' - dual 'dblangleLeft' 0x27EA 'angleLeft' (WIDTH * 0.35) - dual 'dblangleRight' 0x27EB 'angleRight' (WIDTH * 0.35) + turned 'dblAngleRight' 0x27EB 'dblAngleLeft' MIDDLE symbolMid sketch # ceilingLeft include : HBarTop [mix SB RIGHTSB designParameters.bracketOutside] [mix SB RIGHTSB designParameters.bracketInside] parenTop @@ -220,22 +250,22 @@ export : define [apply] : begin do 'Small Punctuations' sketch # period set-width WIDTH - include : Ring (PERIODSIZE - O) O (MIDDLE - PERIODRADIUS + O) (MIDDLE + PERIODRADIUS - O) true + include : DotAt MIDDLE PERIODRADIUS (PERIODRADIUS - O) save 'period' '.' sketch # baselineDot set-width WIDTH - include : Ring (DOTSIZE - O) O (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true + include : DotAt MIDDLE DOTRADIUS (DOTRADIUS - O) save 'baselineDot' sketch # xhPeriod set-width WIDTH - include : Ring (XH - O) (XH - PERIODSIZE + O) (MIDDLE - PERIODRADIUS + O) (MIDDLE + PERIODRADIUS - O) true + include : DotAt MIDDLE (XH - PERIODRADIUS) (PERIODRADIUS - O) save 'xhPeriod' sketch # xhPeriod set-width WIDTH - include : Ring (XH - O) (XH - DOTSIZE + O) (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true + include : DotAt MIDDLE (XH - DOTRADIUS) (DOTRADIUS - O) save 'xhDot' sketch # comma @@ -292,18 +322,19 @@ export : define [apply] : begin local questionBottom : Math.max (CAP * 0.3) (DOTSIZE * 1.5) define [QuestionShape top questionBottom left right] : glyph-construction + define strokeEndCor : Math.hypot 1 TANSLANT include : dispiro widths.rhs g4 left (top - HOOK) hookstart (top - O) g4 right (top - SMOOTHB * 0.9) alsothru 0.5 0.45 [widths.center ESSQUESTION] - straight.down.end ([mix left right 0.5] - HALFSTROKE * HVCONTRAST) questionBottom [widths STROKE 0] + straight.down.end ([mix left right 0.5] - HALFSTROKE * HVCONTRAST * strokeEndCor) questionBottom [widths.heading (STROKE * strokeEndCor) 0 DOWNWARD] sketch # question set-width WIDTH include : QuestionShape CAP questionBottom SB RIGHTSB - include : Ring (DOTSIZE - O) O (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true + include : DotAt MIDDLE DOTRADIUS (DOTRADIUS - O) save 'question' '?' sketch # interrobang @@ -317,7 +348,7 @@ export : define [apply] : begin include : Translate (-MIDDLE) (-DOTRADIUS) include : Rotate (1.2 * angle) include : Translate MIDDLE DOTRADIUS - include : Ring (DOTSIZE - O) O (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true + include : DotAt MIDDLE DOTRADIUS (DOTRADIUS - O) save 'interrobang' 0x203D sketch # gnaborretni @@ -336,8 +367,9 @@ export : define [apply] : begin set-width WIDTH include markset.capital include : VBar MIDDLE [clamp 0 (CAP * 0.4) (questionBottom * 1.18)] CAP - include : Ring (DOTSIZE - O) O (MIDDLE - DOTRADIUS + O) (MIDDLE + DOTRADIUS - O) true + include : DotAt MIDDLE DOTRADIUS (DOTRADIUS - O) save 'exclam' '!' + save 'alveolarclick' 0x1C3 sketch # exclamDown set-width WIDTH @@ -360,17 +392,23 @@ export : define [apply] : begin include : VBar MIDDLE parenBot parenTop save 'bar' '|' + sketch # parallel + set-width WIDTH + set currentGlyph.anchors.above {.type BASE .x MIDDLE .y parenTop} + set currentGlyph.anchors.below {.type BASE .x MIDDLE .y parenBot} + local sw : adviceBlackness 3.5 + include : VBar (MIDDLE - WIDTH * 0.175) parenBot parenTop sw + include : VBar (MIDDLE + WIDTH * 0.175) parenBot parenTop sw + save 'parallel' 0x2225 + save 'dentalclick' 0x1C0 + save 'alveolarlateralclick' 0x1C1 + sketch # brokenbar local breakDist : Math.max STROKE (CAP / 8) include : VBar MIDDLE (symbolMid + breakDist / 2) parenTop include : VBar MIDDLE parenBot (symbolMid - breakDist / 2) save 'brokenbar' 0xA6 - # Click symbols - alias 'dentalclick' 0x1C0 'bar' - dual 'alveolarlateralclick' 0x1C1 'bar' (WIDTH * 0.35) - alias 'alveolarclick' 0x1C3 'exclam' - sketch # palatoalveolarclick include glyphs.bar AS_BASE include : HBarBottom SB RIGHTSB (symbolMid + XH * 0.1) OPERATORSTROKE @@ -750,7 +788,7 @@ export : define [apply] : begin do 'Interpuncts' sketch # interpunct set-width FULLWIDTH3 - include : Ring (symbolMid + PERIODRADIUS - O) (symbolMid - PERIODRADIUS + O) (FULLWIDTH3 / 2 - PERIODRADIUS + O) (FULLWIDTH3 / 2 + PERIODRADIUS - O) true + include : DotAt (FULLWIDTH3 / 2) symbolMid (PERIODRADIUS - O) save 'period.center' save 'interpunct' 0xB7 save 'greekbullet' 0x387 @@ -760,12 +798,11 @@ export : define [apply] : begin sketch # whitebullet set-width FULLWIDTH local s : [adviceBlackness 5] * 0.75 - include : Ring (symbolMid + PERIODRADIUS - O) (symbolMid - PERIODRADIUS + O) (FWMIDDLE - PERIODRADIUS + O) (FWMIDDLE + PERIODRADIUS - O) true - include : Ring (symbolMid + PERIODRADIUS - O - s) (symbolMid - PERIODRADIUS + O + s) (FWMIDDLE - PERIODRADIUS + O + s) (FWMIDDLE + PERIODRADIUS - O - s) true - reverse-last + include : difference + DotAt FWMIDDLE symbolMid (PERIODRADIUS - O) + DotAt FWMIDDLE symbolMid (PERIODRADIUS - O - s) save 'whitebullet' 0x25E6 - do 'Quotes and Primes' local quoteTop (CAP * 1.05) local quoteBottom (XH * 0.85) @@ -972,34 +1009,60 @@ export : define [apply] : begin include : HBar SB RIGHTSB [mix parenTop parenBot 0.67] save 'doubledagger' 0x2021 - do 'Ellipsis' + define WidthKinds {{'.hwid' WIDTH WIDTH} {'.fwid' FULLWIDTH0 (FULLWIDTH0 / 2)}} + + foreach {suffix MosaicWidth MosaicUnitWidth} [items-of WidthKinds] : do 'Ellipsis' + define [MangleUnicode unicode] : if (MosaicWidth == FULLWIDTH) unicode nothing + define [MangleName name] : name + suffix + define [DotRadius darkness space] : begin + return : 0.5 * [adviceBlackness darkness (space / WIDTH)] * PERIODSIZE / STROKE + sketch # onedotLeader - set-width FULLWIDTH - local radius : Math.min PERIODRADIUS - linreg WIDTH (0.5 * [adviceBlackness 3.5] * PERIODSIZE / STROKE) UPM PERIODRADIUS FULLWIDTH - include : Ring (radius * 2 - O) O (FULLWIDTH / 2 - radius + O) (FULLWIDTH / 2 + radius - O) true - save 'onedotLeader' 0x2024 + set-width MosaicWidth + local radius : DotRadius 3.5 MosaicWidth + include : DotAt (MosaicWidth / 2) radius (radius - O) + save [MangleName 'onedotLeader'] [MangleUnicode 0x2024] sketch # twodotsLEader - set-width FULLWIDTH - local radius : Math.min PERIODRADIUS - linreg WIDTH (0.5 * [adviceBlackness 3.5] * PERIODSIZE / STROKE) UPM PERIODRADIUS FULLWIDTH - local left : mix 0 FULLWIDTH (1 / 4) - local right : mix 0 FULLWIDTH (3 / 4) - include : Ring (radius * 2 - O) O (left - radius + O) (left + radius - O) true - include : Ring (radius * 2 - O) O (right - radius + O) (right + radius - O) true - save 'twodotsLEader' 0x2025 + set-width MosaicWidth + local radius : DotRadius 3.5 MosaicWidth + local left : mix 0 MosaicWidth (1 / 4) + local right : mix 0 MosaicWidth (3 / 4) + include : DotAt left radius (radius - O) + include : DotAt right radius (radius - O) + save [MangleName 'twodotsLEader'] [MangleUnicode 0x2025] sketch # ellipsis - set-width FULLWIDTH - local radius : Math.min PERIODRADIUS - linreg WIDTH (0.5 * [adviceBlackness 5] * PERIODSIZE / STROKE) UPM PERIODRADIUS FULLWIDTH - local left : mix 0 FULLWIDTH (1 / 6) - local right : mix 0 FULLWIDTH (5 / 6) - include : Ring (radius * 2 - O) O (left - radius + O) (left + radius - O) true - include : Ring (radius * 2 - O) O (FULLWIDTH / 2 - radius + O) (FULLWIDTH / 2 + radius - O) true - include : Ring (radius * 2 - O) O (right - radius + O) (right + radius - O) true - save 'ellipsis' 0x2026 + set-width MosaicWidth + local radius : DotRadius 5 MosaicWidth + local left : mix 0 MosaicWidth (1 / 6) + local right : mix 0 MosaicWidth (5 / 6) + include : DotAt left radius (radius - O) + include : DotAt (MosaicWidth / 2) radius (radius - O) + include : DotAt right radius (radius - O) + save [MangleName 'ellipsis'] [MangleUnicode 0x2026] + + apply-transform : Upright + apply-transform : Translate 0 (symbolMid - radius) + apply-transform : Italify + save [MangleName 'mathCDots'] [MangleUnicode 0x22EF] + + define [TriColonShape x bottom top] : glyph-construction + local radius : DotRadius 5 (top - bottom) + local mid : mix bottom top 0.5 + include : DotAt x (bottom + radius) (radius - O) + include : DotAt x mid (radius - O) + include : DotAt x (top - radius) (radius - O) + + sketch # tricolon + set-width MosaicWidth + include : TriColonShape (MosaicWidth / 2) 0 XH + save [MangleName 'tricolon'] [MangleUnicode 0x205D] + + sketch # mathCVDots + set-width MosaicWidth + include : TriColonShape (MosaicWidth / 2) operBot operTop + save [MangleName 'mathCVDots'] [MangleUnicode 0x22EE] do 'Percentages' sketch # percent.dots @@ -1156,3 +1219,14 @@ export : define [apply] : begin alias 'mdfRevComma' 0x2BD 'revertSingleQuote' alias 'mdfStress' 0x2C8 'singleQuote' turned 'mdfSecondaryStress' 0x2CC 'singleQuote' MIDDLE (XH / 2) + + do "Ties" + sketch + include : dispiro + widths.lhs OPERATORSTROKE + g4 (SB + OX) 0 + quadcontrols 0.5 1 + g4.right.mid MIDDLE (DESCENDER / 3) [heading RIGHTWARD] + quadcontrols 0.5 0 + g4 (RIGHTSB - OX) 0 + save "undertie" 0x203F diff --git a/meta/aesthetics.ptl b/meta/aesthetics.ptl index 46d8a94a3..acf51f8b7 100644 --- a/meta/aesthetics.ptl +++ b/meta/aesthetics.ptl @@ -207,7 +207,7 @@ export : define designParameters : object equal_wideness 0.075 logic_narrow_shrink 0.75 geometric_large_x (1 + 2 / 3) - geometric_small_x (3 / 5) + geometric_small_x (4 / 7) arrow_size (3 / 8) # () parenOutside 0.2 diff --git a/sample-text/agda-stdlib-symbols-matrix.txt b/sample-text/agda-stdlib-symbols-matrix.txt new file mode 100644 index 000000000..10b2ff5d6 --- /dev/null +++ b/sample-text/agda-stdlib-symbols-matrix.txt @@ -0,0 +1,6 @@ +→₂₁≤≡≈∀∷ℓℕ⟩⟨′ʳ⁺⇒∼∣∘λˡ∈∧⊔∨⊆∙ρ≟⁻⟧⟦≢⊎⊥↔ℤ∎⊓⊤∸₃↭τ≋⟶ₚ≅ +∃ₙ₋↧ℚ⊕↑∩ε↥ₕ≥⇔ᵘᵇ∪″⊖≗⊛β≮◃≃⋆ᵢ≉◅≳δ⇓σ♭Σ✶ₗ•⇨∞˘≰ᵣ↠⊢⊙∅⌋⌊ +∉◦ₛπ⊂≺♯◇↣₄ⁿ≯‿Γ⋎□ₜ∁↞≲⊑─₀⊸γ⟫⟪≔Πᴸ∋Δ∹∑▻⊗⋯ᵤ⇉←≼—⨀⌉⌈∶₅‴ +◌̇≱↦⁆⁅▷│ᵒᵐʸ⇑⤖⨆↓₆ᵈʰ║ⱼ⊈⋐⊇◂ƛ⦈⦇ϕ⟆⟅⋃↪↩↢⋂↾↝𝕊≠ₖ₇₊∄⇐ι⊜⊉⊄∤ +φη⊴⊃ₑᵀᴿˢ…◈═⊒⊅μ⨅└≻≬₉₈}{╲╱┘‼ᵥν𝔽⋢⋊⋉⊘≇⇛ₘᶜᴹψ⟵▸▴├┐┌⍮≵ᵖ +ᴾ⦄⦃┼┴┬┤⑵⑴⋮ᵗωΘ̀ \ No newline at end of file diff --git a/sample-text/agda-stdlib-symbols.txt b/sample-text/agda-stdlib-symbols.txt new file mode 100644 index 000000000..edfb65514 --- /dev/null +++ b/sample-text/agda-stdlib-symbols.txt @@ -0,0 +1,269 @@ +→ (U+2192): 16357 +₂ (U+2082): 7828 +₁ (U+2081): 7658 +≤ (U+2264): 6568 +≡ (U+2261): 6281 +≈ (U+2248): 5785 +∀ (U+2200): 5297 +∷ (U+2237): 4534 +ℓ (U+2113): 3817 +ℕ (U+2115): 3190 +⟩ (U+27E9): 3037 +⟨ (U+27E8): 3037 +′ (U+2032): 2974 +ʳ (U+02B3): 2578 +⁺ (U+207A): 2408 +⇒ (U+21D2): 2319 +∼ (U+223C): 2279 +∣ (U+2223): 2265 +∘ (U+2218): 2105 +λ (U+03BB): 2044 +ˡ (U+02E1): 2018 +∈ (U+2208): 1668 +∧ (U+2227): 1569 +⊔ (U+2294): 1520 +× (U+00D7): 1433 +∨ (U+2228): 1422 +¬ (U+00AC): 1414 +⊆ (U+2286): 1389 +∙ (U+2219): 1233 +ρ (U+03C1): 1106 +≟ (U+225F): 1013 +⁻ (U+207B): 1006 +⟧ (U+27E7): 904 +⟦ (U+27E6): 904 +≢ (U+2262): 898 +⊎ (U+228E): 872 +⊥ (U+22A5): 836 +↔ (U+2194): 770 +ℤ (U+2124): 735 +∎ (U+220E): 718 +⊓ (U+2293): 708 +⊤ (U+22A4): 620 +∸ (U+2238): 604 +₃ (U+2083): 595 +↭ (U+21AD): 594 +τ (U+03C4): 554 +≋ (U+224B): 507 +⟶ (U+27F6): 504 +ₚ (U+209A): 475 +≅ (U+2245): 452 +∃ (U+2203): 418 +ₙ (U+2099): 393 +₋ (U+208B): 381 +↧ (U+21A7): 365 +ℚ (U+211A): 343 +⊕ (U+2295): 339 +↑ (U+2191): 327 +∩ (U+2229): 323 +ε (U+03B5): 311 +↥ (U+21A5): 303 +ₕ (U+2095): 302 +¹ (U+00B9): 302 +≥ (U+2265): 288 +⇔ (U+21D4): 283 +ᵘ (U+1D58): 282 +ᵇ (U+1D47): 282 +∪ (U+222A): 272 +″ (U+2033): 268 +⊖ (U+2296): 263 +± (U+00B1): 243 +≗ (U+2257): 236 +⊛ (U+229B): 232 +β (U+03B2): 230 +≮ (U+226E): 225 +◃ (U+25C3): 223 +≃ (U+2243): 220 +⋆ (U+22C6): 216 +ᵢ (U+1D62): 214 +≉ (U+2249): 207 +◅ (U+25C5): 206 +≳ (U+2273): 202 +δ (U+03B4): 199 +⇓ (U+21D3): 198 +σ (U+03C3): 194 +♭ (U+266D): 186 +Σ (U+03A3): 184 +✶ (U+2736): 182 +ₗ (U+2097): 179 +• (U+2022): 177 +⇨ (U+21E8): 176 +∞ (U+221E): 172 +˘ (U+02D8): 172 +≰ (U+2270): 162 +ᵣ (U+1D63): 160 +↠ (U+21A0): 156 +⊢ (U+22A2): 152 +⊙ (U+2299): 149 +∅ (U+2205): 148 +⌋ (U+230B): 147 +⌊ (U+230A): 147 +∉ (U+2209): 144 +◦ (U+25E6): 140 +ₛ (U+209B): 137 +π (U+03C0): 135 +⊂ (U+2282): 126 +≺ (U+227A): 124 +♯ (U+266F): 123 +◇ (U+25C7): 123 +↣ (U+21A3): 123 +₄ (U+2084): 121 +ⁿ (U+207F): 112 +≯ (U+226F): 110 +‿ (U+203F): 104 +Γ (U+0393): 104 +⋎ (U+22CE): 97 +□ (U+25A1): 95 +ₜ (U+209C): 93 +∁ (U+2201): 91 +↞ (U+219E): 91 +  (U+00A0): 88 +≲ (U+2272): 86 +² (U+00B2): 79 +⊑ (U+2291): 73 +─ (U+2500): 68 +₀ (U+2080): 68 +⊸ (U+22B8): 67 +γ (U+03B3): 67 +⟫ (U+27EB): 66 +⟪ (U+27EA): 66 +≔ (U+2254): 64 +Π (U+03A0): 63 +ᴸ (U+1D38): 58 +∋ (U+220B): 54 +³ (U+00B3): 54 +Δ (U+0394): 52 +∹ (U+2239): 51 +∑ (U+2211): 51 +▻ (U+25BB): 50 +⊗ (U+2297): 49 +⋯ (U+22EF): 47 +ᵤ (U+1D64): 47 +⇉ (U+21C9): 46 +← (U+2190): 46 +≼ (U+227C): 45 +— (U+2014): 44 +⨀ (U+2A00): 43 +⌉ (U+2309): 43 +⌈ (U+2308): 43 +∶ (U+2236): 41 +₅ (U+2085): 39 +‴ (U+2034): 39 +̇ (U+0307): 38 +≱ (U+2271): 37 +↦ (U+21A6): 37 +⁆ (U+2046): 37 +⁅ (U+2045): 37 +· (U+00B7): 34 +▷ (U+25B7): 33 +│ (U+2502): 30 +ᵒ (U+1D52): 30 +ᵐ (U+1D50): 29 +é (U+00E9): 29 +ʸ (U+02B8): 28 +⇑ (U+21D1): 27 +⤖ (U+2916): 25 +⨆ (U+2A06): 23 +↓ (U+2193): 22 +₆ (U+2086): 22 +ᵈ (U+1D48): 22 +ʰ (U+02B0): 21 +║ (U+2551): 20 +ⱼ (U+2C7C): 19 +⊈ (U+2288): 19 +⋐ (U+22D0): 18 +⊇ (U+2287): 18 +◂ (U+25C2): 17 +ƛ (U+019B): 17 +⦈ (U+2988): 16 +⦇ (U+2987): 16 +ϕ (U+03D5): 16 +⟆ (U+27C6): 15 +⟅ (U+27C5): 15 +⋃ (U+22C3): 15 +↪ (U+21AA): 15 +↩ (U+21A9): 15 +↢ (U+21A2): 15 +⋂ (U+22C2): 14 +↾ (U+21BE): 14 +↝ (U+219D): 14 +𝕊 (U+1d54a): 13 +≠ (U+2260): 12 +ₖ (U+2096): 12 +₇ (U+2087): 12 +₊ (U+208A): 11 +∄ (U+2204): 10 +⇐ (U+21D0): 10 +ι (U+03B9): 10 +½ (U+00BD): 10 +⊜ (U+229C): 9 +⊉ (U+2289): 9 +⊄ (U+2284): 9 +∤ (U+2224): 9 +φ (U+03C6): 9 +η (U+03B7): 9 +⊴ (U+22B4): 8 +⊃ (U+2283): 8 +ₑ (U+2091): 8 +ᵀ (U+1D40): 8 +ᴿ (U+1D3F): 8 +ˢ (U+02E2): 8 +… (U+2026): 7 +÷ (U+00F7): 7 +◈ (U+25C8): 6 +═ (U+2550): 6 +⊒ (U+2292): 6 +⊅ (U+2285): 6 +μ (U+03BC): 6 +⨅ (U+2A05): 5 +└ (U+2514): 5 +≻ (U+227B): 5 +≬ (U+226C): 5 +₉ (U+2089): 5 +₈ (U+2088): 5 +} (U+FF5D): 4 +{ (U+FF5B): 4 +╲ (U+2572): 4 +╱ (U+2571): 4 +┘ (U+2518): 4 +‼ (U+203C): 4 +ᵥ (U+1D65): 4 +ν (U+03BD): 4 +𝔽 (U+1d53d): 3 +⋢ (U+22E2): 3 +⋊ (U+22CA): 3 +⋉ (U+22C9): 3 +⊘ (U+2298): 3 +≇ (U+2247): 3 +⇛ (U+21DB): 3 +ₘ (U+2098): 3 +ᶜ (U+1D9C): 3 +ᴹ (U+1D39): 3 +ψ (U+03C8): 3 +⟵ (U+27F5): 2 +▸ (U+25B8): 2 +▴ (U+25B4): 2 +├ (U+251C): 2 +┐ (U+2510): 2 +┌ (U+250C): 2 +⍮ (U+236E): 2 +≵ (U+2275): 2 +ᵖ (U+1D56): 2 +ᴾ (U+1D3E): 2 +⦄ (U+2984): 1 +⦃ (U+2983): 1 +┼ (U+253C): 1 +┴ (U+2534): 1 +┬ (U+252C): 1 +┤ (U+2524): 1 +⑵ (U+2475): 1 +⑴ (U+2474): 1 +⋮ (U+22EE): 1 +ᵗ (U+1D57): 1 +ω (U+03C9): 1 +Θ (U+0398): 1 +̀ (U+0300): 1 +ö (U+00F6): 1 +ó (U+00F3): 1 +ï (U+00EF): 1 +à (U+00E0): 1 diff --git a/verdafile.js b/verdafile.js index 2f1d6ccf2..fecb02e22 100644 --- a/verdafile.js +++ b/verdafile.js @@ -479,6 +479,7 @@ const TTCArchiveFile = file.make( // Note: this target does NOT depend on the font files. await target.need(de`${dir}`); await target.need(CollectionFontsOf(cid)); + await rm(full); await cd(`${DIST}/collections/${cid}`).run( ["7z", "a"], ["-tzip", "-r", "-mx=9"],