* Fixed mapping for U+028C, U+034D.

* Fixed the thickness of thick arrows under full width.
 * Fixed missing `TM` and `SM` symbol.
 * Fixed weight of dotted numbers.
 * Fix APL symbols' metric under Aile.
This commit is contained in:
Belleve Invis 2020-04-01 19:18:14 -07:00
parent 39fd7db0c0
commit 0ce2397179
16 changed files with 551 additions and 152 deletions

View file

@ -2,3 +2,8 @@
* Add straight lambda (`λ`) shape, and corresponded variant selector `cv94`. Old shape is placed under `cv95` (#467). * Add straight lambda (`λ`) shape, and corresponded variant selector `cv94`. Old shape is placed under `cv95` (#467).
* Add U+2423 `OPEN BOX` (`␣`) (#469). * Add U+2423 `OPEN BOX` (`␣`) (#469).
* Add Bashkir Ka (U+04A0, U+04A1) (#441). * Add Bashkir Ka (U+04A0, U+04A1) (#441).
* Fixed mapping for U+028C, U+034D.
* Fixed the thickness of thick arrows under full width.
* Fixed missing `TM` and `SM` symbol.
* Fixed weight of dotted numbers.
* Fix APL symbols' metric under Aile.

View file

@ -95,7 +95,7 @@ glyph-block AutoBuild-Enclosure : begin
set-width width set-width width
if (w == ww && unicode) : assign-unicode unicode if (w == ww && unicode) : assign-unicode unicode
include : circleInner dscale miniatureFont unicode parts width bal baly include : circleInner dscale miniatureFont unicode parts width bal baly
include : OShape top bot left right sw (SMALLSMOOTHA * width / WIDTH) (SMALLSMOOTHB * width / WIDTH) include : OShape top bot left right sw (SMALLSMOOTHA * width / HALF-UPM) (SMALLSMOOTHB * width / HALF-UPM)
apply-transform : Upright apply-transform : Upright
apply-transform : Translate 0 (symbolMid - CAP * dscale / 2) apply-transform : Translate 0 (symbolMid - CAP * dscale / 2)
@ -129,7 +129,7 @@ glyph-block AutoBuild-Enclosure : begin
set-width width set-width width
if (w == ww && unicode) : assign-unicode unicode if (w == ww && unicode) : assign-unicode unicode
include : difference include : difference
OShapeOutline top bot left right sw (SMALLSMOOTHA * width / WIDTH) (SMALLSMOOTHB * width / WIDTH) OShapeOutline top bot left right sw (SMALLSMOOTHA * width / HALF-UPM) (SMALLSMOOTHB * width / HALF-UPM)
circleInner dscale miniatureFont unicode parts width bal baly circleInner dscale miniatureFont unicode parts width bal baly
apply-transform : Upright apply-transform : Upright
@ -190,15 +190,15 @@ glyph-block AutoBuild-Enclosure : begin
set-width width set-width width
if (w == ww && unicode) : assign-unicode unicode if (w == ww && unicode) : assign-unicode unicode
include : circleInner dscale miniatureFont unicode parts width bal baly include : circleInner dscale miniatureFont unicode parts width bal baly
include : OShape top bot left right sw1 (SMALLSMOOTHA * width / WIDTH) (SMALLSMOOTHB * width / WIDTH) include : OShape top bot left right sw1 (SMALLSMOOTHA * width / HALF-UPM) (SMALLSMOOTHB * width / HALF-UPM)
include : OShape include : OShape
top - sw + sw1 top - sw + sw1
bot + sw - sw1 bot + sw - sw1
left + sw * HVCONTRAST - sw1 * HVCONTRAST left + sw * HVCONTRAST - sw1 * HVCONTRAST
right - sw * HVCONTRAST + sw1 * HVCONTRAST right - sw * HVCONTRAST + sw1 * HVCONTRAST
begin sw1 begin sw1
SMALLSMOOTHA * width / WIDTH - sw + sw1 SMALLSMOOTHA * width / HALF-UPM - sw + sw1
SMALLSMOOTHB * width / WIDTH - sw + sw1 SMALLSMOOTHB * width / HALF-UPM - sw + sw1
apply-transform : Upright apply-transform : Upright
apply-transform : Translate 0 (symbolMid - CAP * dscale / 2) apply-transform : Translate 0 (symbolMid - CAP * dscale / 2)
@ -288,13 +288,14 @@ glyph-block AutoBuild-Enclosure : begin
if (w == ww) : save gn unicode if (w == ww) : save gn unicode
: else : save gn : else : save gn
define [createDottedGlyphs digits records] : begin define [DottedScale digits width] : 1 / [Math.pow [AdjustDigitCount digits width] 0.5]
define [createDottedGlyphs digits gidDot records] : begin
foreach {suffix ww} [items-of circleWidthClasses] : do foreach {suffix ww} [items-of circleWidthClasses] : do
local pendingGlyphs : records.map : [record] => record.1 local pendingGlyphs : records.map : [record] => record.1
local miniatureFont : Miniature local miniatureFont : Miniature
glyphs -- [[pendingGlyphs.reduce : [a b] => [a.concat b]].concat {'period'}] glyphs -- [[pendingGlyphs.reduce : [a b] => [a.concat b]].concat {gidDot}]
crowd -- [BraceCrowd digits ww] crowd -- [BraceCrowd digits ww]
scale -- [BraceScale digits ww] scale -- [DottedScale digits ww]
sbscale -- 1 sbscale -- 1
foreach {unicode parts w} [items-of records] : do foreach {unicode parts w} [items-of records] : do
@ -303,7 +304,7 @@ glyph-block AutoBuild-Enclosure : begin
sketch sketch
set-width width set-width width
local tw 0 local tw 0
foreach [glyphid : items-of : parts.concat {'period'}] : begin foreach [glyphid : items-of : parts.concat {gidDot}] : begin
local g miniatureFont.(glyphid) local g miniatureFont.(glyphid)
if tw : begin # Add a little kern if tw : begin # Add a little kern
set tw : tw - SB set tw : tw - SB
@ -442,7 +443,15 @@ glyph-block AutoBuild-Enclosure : begin
0x2488 + j - 1 0x2488 + j - 1
digitGlyphNames j digitGlyphNames j
begin WIDE-WIDTH-1 begin WIDE-WIDTH-1
createDottedGlyphs 1 compositions createDottedGlyphs 1 'period' compositions
if [not recursive] : do "Single-digit comma"
local compositions {}
foreach [j : range 0 till 9] : compositions.push : list
0x1F101 + j
digitGlyphNames j
begin WIDE-WIDTH-1
createDottedGlyphs 1 'comma' compositions
if [not recursive] : do "Double-digit dotted" if [not recursive] : do "Double-digit dotted"
local compositions : list local compositions : list
@ -450,4 +459,4 @@ glyph-block AutoBuild-Enclosure : begin
0x2488 + j - 1 0x2488 + j - 1
digitGlyphNames j digitGlyphNames j
begin WIDE-WIDTH-1 begin WIDE-WIDTH-1
createDottedGlyphs 2 compositions createDottedGlyphs 2 'period' compositions

View file

@ -359,6 +359,25 @@ glyph-block Autobuild-Transformed : begin
list 0x1DF3 'odieresis' list 0x1DF3 'odieresis'
list 0x1DF4 'udieresis' list 0x1DF4 'udieresis'
do "Composite superscripts and subscripts"
define [DoubleSuperscript a b] : glyph-construction
include a
apply-transform : Translate (-WIDTH * 0.6) 0
include b
apply-transform : Upright
apply-transform : Translate (-WIDTH * 0.2) (-CAP)
apply-transform : Scale 0.8
apply-transform : Translate MIDDLE CAP
apply-transform : Italify
sketch # tradeMark
include : DoubleSuperscript [refer-glyph 'supT'] [refer-glyph 'supM']
save 'tradeMark' 0x2122
sketch # serviceMark
include : DoubleSuperscript [refer-glyph 'supS'] [refer-glyph 'supM']
save 'serviceMark' 0x2120
define [createFracImpl suffix records fine scaleFactor closing] : begin define [createFracImpl suffix records fine scaleFactor closing] : begin
local pendingGlyphs : [records.map : [record] => record.1].concat : records.map : [record] => record.2 local pendingGlyphs : [records.map : [record] => record.1].concat : records.map : [record] => record.2
local miniatureFont : Miniature local miniatureFont : Miniature
@ -418,6 +437,8 @@ glyph-block Autobuild-Transformed : begin
list 0x2189 'zero.lnum' 'three.lnum' list 0x2189 'zero.lnum' 'three.lnum'
# care-of # care-of
list 0x2100 'largescripta' 'C' list 0x2100 'largescripta' 'C'
list 0x2101 'largescripta' 'S'
list 0x214D 'A' 'S'
list 0x2105 'C' 'O' list 0x2105 'C' 'O'
list 0x2106 'C' 'U' list 0x2106 'C' 'U'
# fraction bar # fraction bar
@ -428,47 +449,49 @@ glyph-block Autobuild-Transformed : begin
list 0xE0A1 'L' 'N' list 0xE0A1 'L' 'N'
list 0xE0A3 'C' 'N' list 0xE0A3 'C' 'N'
# Unicode Ligatures # Unicode Ligatures
define [createLigatures _shrink1 _shrink2 wadj1 wadj2 records] : begin define circleWidthClasses {
{'hwid' (WIDTH * para.diversityM) WIDTH}
{'fwid' WIDE-WIDTH-0 WIDE-WIDTH-0}
}
define [createLigatures _shrink1 _shrink2 wadj1 wadj2 records] : for-width-kinds WIDE-WIDTH-2
local ww : if FMosaicWide (MosaicWidth * para.diversityM) MosaicWidth
local pendingGlyphs1 : records.map : [record] => record.1 local pendingGlyphs1 : records.map : [record] => record.1
local pendingGlyphs2 : records.map : [record] => record.2 local pendingGlyphs2 : records.map : [record] => record.2
local wide : para.spaing > 1 || para.diversityM > 1 local shrink1 : if FMosaicWide 1 [clamp 0 1 (_shrink1 * ww / WIDTH)]
local shrink1 : if (wide) 1 [clamp 0 1 (_shrink1 * para.diversityM)] local shrink2 : if FMosaicWide 1 [clamp 0 1 (_shrink2 * ww / WIDTH)]
local shrink2 : if (wide) 1 [clamp 0 1 (_shrink2 * para.diversityM)]
local df1 : Thinner pendingGlyphs1 shrink1 local df1 : Thinner pendingGlyphs1 shrink1
local df2 : Thinner pendingGlyphs2 shrink2 local df2 : Thinner pendingGlyphs2 shrink2
foreach [{unicode c1 c2 mark} : items-of records] : begin foreach [{unicode c1 c2} : items-of records] : begin
local glyphName "\(c1)_\(c2)" local glyphName : MangleName "\(c1)_\(c2)"
if [query-glyph glyphName] : begin if [query-glyph glyphName] : begin
local j 2 local j 2
while [query-glyph (glyphName + j)] : inc j while [query-glyph (glyphName + j)] : inc j
set glyphName (glyphName + j) set glyphName (glyphName + j)
if wide : begin
sketch if FMosaicWide : sketch
set-width (df1.(c1).advanceWidth + df2.(c2).advanceWidth)
include df2.(c2) include df2.(c2)
include : Translate df1.(c1).advanceWidth 0 include : Translate df1.(c1).advanceWidth 0
include df1.(c1) include df1.(c1)
set-width (df1.(c1).advanceWidth + df2.(c2).advanceWidth) save glyphName [MangleUnicode unicode]
save glyphName unicode : else : sketch
: else set-width ww
local kern : SB * 7/8 * (shrink1 + shrink2) local sumChildrenWidth : df1.(c1).advanceWidth * wadj1 + df2.(c2).advanceWidth * wadj2
local refW : WIDTH * (shrink1 * wadj1 + shrink2 * wadj2) - kern local kern : if FMosaicWide 0 : Math.max 0 (SB * 7/8 * (shrink1 + shrink2) - [Math.max 0 (ww - sumChildrenWidth)])
local targetW : WIDTH * para.diversityM local refW : sumChildrenWidth - kern
sketch
include df2.(c2) include df2.(c2)
include : Translate (WIDTH * shrink1 * wadj1 - kern) 0 include : Translate (df1.(c1).advanceWidth * wadj1 - kern) 0
include df1.(c1) include df1.(c1)
include : Translate (-WIDTH * shrink1 * (1 - wadj1) / 2) 0 # include : Translate (-df1.(c1).advanceWidth * (1 - wadj1) / 2) 0
include : Upright include : Upright
include : Translate (-refW / 2) 0 include : Translate (-refW / 2) 0
include : Scale ((targetW - SB * 1.25) / (targetW - SB * 2) * targetW / refW) 1 include : Scale [clamp 0 1 ((ww - SB * 1.25) / (ww - SB * 2) * ww / refW)] 1
include : Translate (targetW / 2) 0 include : Translate (ww / 2) 0
include : Italify include : Italify
save glyphName [MangleUnicode unicode]
if mark : include [DivFrame para.diversityM].markSet.(mark)
save glyphName unicode
define stdShrink : clamp 0.75 0.9 : linreg 72 0.75 108 0.9 STROKE define stdShrink : clamp 0.75 0.9 : linreg 72 0.75 108 0.9 STROKE
if [not recursive] : createLigatures stdShrink stdShrink 1 1 : list if [not recursive] : createLigatures stdShrink stdShrink 1 1 : list
@ -497,6 +520,10 @@ glyph-block Autobuild-Transformed : begin
list 0x479 'o' 'y' 'p' list 0x479 'o' 'y' 'p'
list 0x20A7 'P' 's' list 0x20A7 'P' 's'
list 0x20A8 'R' 's' list 0x20A8 'R' 's'
list 0x203c 'exclam' 'exclam'
list 0x2047 'question' 'question'
list 0x2048 'question' 'exclam'
list 0x2049 'exclam' 'question'
if [not recursive] : createLigatures 0.7 0.8 0.75 0.9 : list if [not recursive] : createLigatures 0.7 0.8 0.75 0.9 : list
list 0x2103 'degree' 'C' list 0x2103 'degree' 'C'
list 0x2109 'degree' 'F' list 0x2109 'degree' 'F'

View file

@ -754,7 +754,7 @@ glyph-block LetterUnified-Basic : begin
turned 'turnv.straight' nothing 'v.straight' MIDDLE (XH / 2) turned 'turnv.straight' nothing 'v.straight' MIDDLE (XH / 2)
turned 'turnv.curly' nothing 'v.curly' MIDDLE (XH / 2) turned 'turnv.curly' nothing 'v.curly' MIDDLE (XH / 2)
select-variant 'turnv' 0x474 (follow -- 'Lambda') select-variant 'turnv' 0x28C (follow -- 'Lambda')
sketch # nu sketch # nu
include MarkSet.e include MarkSet.e
@ -2895,6 +2895,7 @@ glyph-block LetterUnified-Basic : begin
select-variant 'Ghooktop' 0x193 (follow -- 'G') select-variant 'Ghooktop' 0x193 (follow -- 'G')
select-variant 'smcpGhooktop' 0x29B (follow -- 'G') select-variant 'smcpGhooktop' 0x29B (follow -- 'G')
select-variant 'Gbar' 0x1E4 (follow -- 'G') select-variant 'Gbar' 0x1E4 (follow -- 'G')
turned 'turnG' 0x2141 'G' MIDDLE (CAP / 2)
### g ### g
do "g and related =============================================================================" do "g and related ============================================================================="

View file

@ -1059,7 +1059,7 @@ glyph-block Overmarks : begin
curl [mix left right 0.5] top [widths.heading (fine * exp) (fine * exp) LEFTWARD] curl [mix left right 0.5] top [widths.heading (fine * exp) (fine * exp) LEFTWARD]
include : VBar markMiddle belowMarkBot top (fine * 2) include : VBar markMiddle belowMarkBot top (fine * 2)
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
save 'lrArrowBelow' 0x34E save 'upArrowBelow' 0x34E
# horn and angle marks # horn and angle marks
define [HornDim attX attY overshootX overshootY yrP] : begin define [HornDim attX attY overshootX overshootY yrP] : begin

View file

@ -26,6 +26,12 @@ glyph-block Symbol-Mosaic-NotDef : begin
set currentGlyph.cmpPriority (-100) set currentGlyph.cmpPriority (-100)
save 'nbsp' 0xA0 save 'nbsp' 0xA0
sketch # markDemoBaseSpace
local df : DivFrame 1
set-width df.width
include df.markSet.plus
save 'markDemoBaseSpace' 0xE09E
sketch # markBaseSpace sketch # markBaseSpace
local df : DivFrame para.diversityI local df : DivFrame para.diversityI
set-width df.width set-width df.width

View file

@ -111,7 +111,7 @@ glyph-block Symbol-Arrow : begin
include : HookArrowBar x1 y1 x2 y2 halfstroke (arrowSize * mul) include : HookArrowBar x1 y1 x2 y2 halfstroke (arrowSize * mul)
define [ThickArrowShape color] : lambda [x1 y1 x2 y2] : glyph-construction define [ThickArrowShape color] : lambda [x1 y1 x2 y2] : glyph-construction
local headLen : WIDTH * 0.4 local headLen : MosaicUnitWidth * [Math.sqrt MosaicWidthScalar] * 0.4
local halfBarWidth : headLen / 3 local halfBarWidth : headLen / 3
local headWidth : halfBarWidth * 2 local headWidth : halfBarWidth * 2

View file

@ -400,7 +400,7 @@ glyph-block Symbol-Geometric : begin
foreach j [range 0 n] : begin foreach j [range 0 n] : begin
local angle : Math.PI * 2 * j / n local angle : Math.PI * 2 * j / n
local cx : MosaicMiddle + (rightFW - MosaicMiddle) * [Math.cos angle] local cx : MosaicMiddle + (rightFW - MosaicMiddle) * [Math.cos angle]
local cy : (XH / 2) + (rightFW - MosaicMiddle) * [Math.sin angle] local cy : symbolMid + (rightFW - MosaicMiddle) * [Math.sin angle]
include : spiro-outline include : spiro-outline
g4 cx (cy + fine) g4 cx (cy + fine)
g4 (cx + fine) cy g4 (cx + fine) cy
@ -408,10 +408,7 @@ glyph-block Symbol-Geometric : begin
g4 (cx - fine) cy g4 (cx - fine) cy
close close
include scaffold.markSet.e include scaffold.markSet.plus
apply-transform [Upright] true
apply-transform [Translate 0 (symbolMid - (XH / 2))] true
apply-transform [Italify] true
save [MangleName 'dottedcircle'] [MangleUnicode 0x25CC] save [MangleName 'dottedcircle'] [MangleUnicode 0x25CC]
hollow [MangleName 'whitesquare'] [MangleUnicode 0x25A1] [MangleName 'blacksquare'] hollow [MangleName 'whitesquare'] [MangleUnicode 0x25A1] [MangleName 'blacksquare']
@ -454,22 +451,6 @@ glyph-block Symbol-Geometric : begin
hollow [MangleName 'smallwhitetriangleright'] [MangleUnicode 0x25B9] [MangleName 'smallblacktriangleright'] ss nothing [mix MosaicMiddle leftFW (sts / 3)] symbolMid hollow [MangleName 'smallwhitetriangleright'] [MangleUnicode 0x25B9] [MangleName 'smallblacktriangleright'] ss nothing [mix MosaicMiddle leftFW (sts / 3)] symbolMid
hollow [MangleName 'whitestar'] [MangleUnicode 0x2606] [MangleName 'blackstar'] spt hollow [MangleName 'whitestar'] [MangleUnicode 0x2606] [MangleName 'blackstar'] spt
# Mark sampler
sketch
include MarkSet.e
include : spiro-outline
g4 MosaicMiddle XH
g4 (MosaicMiddle - XH / 2) (XH / 2)
g4 MosaicMiddle 0
close
include : spiro-outline
g4 MosaicMiddle (XH * 0.9)
g4 (MosaicMiddle + XH * 0.4) (XH * 0.5)
g4 MosaicMiddle (XH * 0.1)
close
save [MangleName 'marksampler'] [MangleUnicode 0xE09E]
# Rounded # Rounded
sketch # roundwhitesquare, U+25A2 sketch # roundwhitesquare, U+25A2
set-width MosaicWidth set-width MosaicWidth

View file

@ -1140,7 +1140,7 @@ glyph-block Symbol-Math-Relation : begin
glyph-block Symbol-Math-Complement : begin glyph-block Symbol-Math-Complement : begin
glyph-block-import LetterUnified-Basic : CShape glyph-block-import LetterUnified-Basic : CShape
sketch # complement sketch # complement
include : CShape operTop operBot OPERATORSTROKE include : CShape [mix symbolMid operTop 1.1] [mix symbolMid operBot 1.1] OPERATORSTROKE
save 'complement' 0x2201 save 'complement' 0x2201
glyph-block Symbol-Math-Negation : begin glyph-block Symbol-Math-Negation : begin
@ -1183,7 +1183,7 @@ glyph-block Symbol-Math-Large-Operators : for-width-kinds WIDE-WIDTH-1
glyph-block-import LetterUnified-Extended : SigmaShape PiShape glyph-block-import LetterUnified-Extended : SigmaShape PiShape
define diversityLargeOperators : Math.max para.diversityM (MosaicWidth / WIDTH) define diversityLargeOperators : Math.max para.diversityM (MosaicWidth / WIDTH)
define df : DivFrame diversityLargeOperators 0 [if FMosaifWide diversityLargeOperators 1] define df : DivFrame diversityLargeOperators 0 [if FMosaicWide diversityLargeOperators 1]
sketch # sum sketch # sum
set-width df.width set-width df.width
@ -1336,36 +1336,36 @@ glyph-block Symbol-Math-APL : begin
include : intersection [refer-glyph 'aplsquareShadow'] shape include : intersection [refer-glyph 'aplsquareShadow'] shape
include : ScaleAround MIDDLE symbolMid aplBoxInnerScale include : ScaleAround MIDDLE symbolMid aplBoxInnerScale
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'equal'] [into-unicode 0x2338] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'equal'] [into-unicode 0x2338]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'divide'] [into-unicode 0x2339] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'divide'] [into-unicode 0x2339]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'whitediamond.hwid'] [into-unicode 0x233A] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'whitediamond.hwid'] [into-unicode 0x233A]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'smallwhitecircle.hwid'] [into-unicode 0x233B] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'smallwhitecircle.hwid'] [into-unicode 0x233B]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'whitecircle.hwid'] [into-unicode 0x233C] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'whitecircle.hwid'] [into-unicode 0x233C]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'aplbar'] [refer-glyph 'whitecircle.hwid']] [into-unicode 0x233D] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'aplbar'] [refer-glyph 'whitecircle.hwid']] [into-unicode 0x233D]
composite [refer-glyph 'whitecircle.hwid'] [refer-glyph 'smallwhitecircle.hwid'] [into-unicode 0x233E] composite [refer-glyph 'whitecircle.hwid'] [refer-glyph 'smallwhitecircle.hwid'] [into-unicode 0x233E]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'aplminus'] [refer-glyph 'slash']] [into-unicode 0x233F] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'aplminus'] [refer-glyph 'slash']] [into-unicode 0x233F]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'aplminus'] [refer-glyph 'backslash']] [into-unicode 0x2340] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'aplminus'] [refer-glyph 'backslash']] [into-unicode 0x2340]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'slash'] [into-unicode 0x2341] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'slash'] [into-unicode 0x2341]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'backslash'] [into-unicode 0x2342] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'backslash'] [into-unicode 0x2342]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'less'] [into-unicode 0x2343] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'less'] [into-unicode 0x2343]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'greater'] [into-unicode 0x2344] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'greater'] [into-unicode 0x2344]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'arrowleft.hwid'] [refer-glyph 'aplbar']] [into-unicode 0x2345] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowleft.hwid'] [refer-glyph 'aplbar']] [into-unicode 0x2345]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'arrowright.hwid'] [refer-glyph 'aplbar']] [into-unicode 0x2346] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowright.hwid'] [refer-glyph 'aplbar']] [into-unicode 0x2346]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'arrowleft.hwid'] [into-unicode 0x2347] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'arrowleft.hwid'] [into-unicode 0x2347]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'arrowright.hwid'] [into-unicode 0x2348] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'arrowright.hwid'] [into-unicode 0x2348]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'aplbackslash'] [refer-glyph 'whitecircle.hwid']] [into-unicode 0x2349] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'aplbackslash'] [refer-glyph 'whitecircle.hwid']] [into-unicode 0x2349]
composite [refer-glyph 'bot'] [refer-glyph 'underlineBelow'] [into-unicode 0x234A] composite [refer-glyph 'bot'] [refer-glyph 'underlineBelow'] [into-unicode 0x234A]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'increment'] [refer-glyph 'aplLongBar']] [into-unicode 0x234B] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'increment'] [refer-glyph 'aplLongBar']] [into-unicode 0x234B]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'vee'] [into-unicode 0x234C] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'vee'] [into-unicode 0x234C]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'increment'] [into-unicode 0x234D] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'increment'] [into-unicode 0x234D]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'arrowup.hwid'] [refer-glyph 'minus']] [into-unicode 0x234F] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowup.hwid'] [refer-glyph 'minus']] [into-unicode 0x234F]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'arrowup.hwid'] [into-unicode 0x2350] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'arrowup.hwid'] [into-unicode 0x2350]
composite [refer-glyph 'top'] [refer-glyph 'overlineAbove'] [into-unicode 0x2351] composite [refer-glyph 'top'] [refer-glyph 'overlineAbove'] [into-unicode 0x2351]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'nabla'] [refer-glyph 'aplLongBar']] [into-unicode 0x2352] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'nabla'] [refer-glyph 'aplLongBar']] [into-unicode 0x2352]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'wedge'] [into-unicode 0x2353] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'wedge'] [into-unicode 0x2353]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'nabla'] [into-unicode 0x2354] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'nabla'] [into-unicode 0x2354]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'arrowdown.hwid'] [refer-glyph 'minus']] [into-unicode 0x2356] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowdown.hwid'] [refer-glyph 'minus']] [into-unicode 0x2356]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'arrowdown.hwid'] [into-unicode 0x2357] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'arrowdown.hwid'] [into-unicode 0x2357]
composite [refer-glyph 'singleQuote'] MarkSet.plus [refer-glyph 'underlineBelow'] [into-unicode 0x2358] composite [refer-glyph 'singleQuote'] MarkSet.plus [refer-glyph 'underlineBelow'] [into-unicode 0x2358]
composite [refer-glyph 'increment'] [refer-glyph 'underlineBelow'] [into-unicode 0x2359] composite [refer-glyph 'increment'] [refer-glyph 'underlineBelow'] [into-unicode 0x2359]
composite [refer-glyph 'whitediamond.hwid'] MarkSet.plus [refer-glyph 'underlineBelow'] [into-unicode 0x235A] composite [refer-glyph 'whitediamond.hwid'] MarkSet.plus [refer-glyph 'underlineBelow'] [into-unicode 0x235A]
@ -1378,27 +1378,27 @@ glyph-block Symbol-Math-APL : begin
UShape operTop operBot [adviceBlackness 5] true UShape operTop operBot [adviceBlackness 5] true
FlipAround MIDDLE symbolMid FlipAround MIDDLE symbolMid
into-unicode 0x235D into-unicode 0x235D
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'singleQuote'] [into-unicode 0x235E] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'singleQuote'] [into-unicode 0x235E]
composite [refer-glyph 'space'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'opAsterisk.low']] [refer-glyph 'mathO'] [into-unicode 0x235F] composite [refer-glyph 'enquad'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'opAsterisk.low']] [refer-glyph 'mathO'] [into-unicode 0x235F]
composite [refer-glyph 'space'] [aplBoxed : composite [refer-glyph 'colon'] [Realign MIDDLE (XH/2) MIDDLE symbolMid]] [into-unicode 0x2360] composite [refer-glyph 'enquad'] [aplBoxed : composite [refer-glyph 'colon'] [Realign MIDDLE (XH/2) MIDDLE symbolMid]] [into-unicode 0x2360]
composite [refer-glyph 'top'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2361] composite [refer-glyph 'top'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2361]
composite [refer-glyph 'nabla'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2362] composite [refer-glyph 'nabla'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2362]
composite [refer-glyph 'asterisk.low'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2363] composite [refer-glyph 'asterisk.low'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2363]
composite [refer-glyph 'smallwhitecircle.hwid'] MarkSet.plus [refer-glyph 'dieresisAbove'] [into-unicode 0x2364] composite [refer-glyph 'smallwhitecircle.hwid'] MarkSet.plus [refer-glyph 'dieresisAbove'] [into-unicode 0x2364]
composite [refer-glyph 'whitecircle.hwid'] MarkSet.plus [refer-glyph 'dieresisAbove'] [into-unicode 0x2365] composite [refer-glyph 'whitecircle.hwid'] MarkSet.plus [refer-glyph 'dieresisAbove'] [into-unicode 0x2365]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'cup'] [refer-glyph 'aplbar']] [into-unicode 0x2366] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'cup'] [refer-glyph 'aplbar']] [into-unicode 0x2366]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'subst'] [refer-glyph 'aplbar']] [into-unicode 0x2367] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'subst'] [refer-glyph 'aplbar']] [into-unicode 0x2367]
composite [refer-glyph 'asciitilde.low'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2368] composite [refer-glyph 'asciitilde.low'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2368]
composite [refer-glyph 'greater.narrow'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2369] composite [refer-glyph 'greater.narrow'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2369]
composite [refer-glyph 'minus'] [refer-glyph 'comma'] [into-unicode 0x236A] composite [refer-glyph 'minus'] [refer-glyph 'comma'] [into-unicode 0x236A]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'nabla']] [into-unicode 0x236B] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'nabla']] [into-unicode 0x236B]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'zero.lnum.unslashed']] [into-unicode 0x236C] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'zero.lnum.unslashed']] [into-unicode 0x236C]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'bar']] [into-unicode 0x236D] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'bar']] [into-unicode 0x236D]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'semicolon'] [refer-glyph 'underscore.belowBaseline']] [into-unicode 0x236E] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'semicolon'] [refer-glyph 'underscore.belowBaseline']] [into-unicode 0x236E]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'notequal'] [into-unicode 0x236F] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'notequal'] [into-unicode 0x236F]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'question'] [into-unicode 0x2370] composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'question'] [into-unicode 0x2370]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'vee']] [into-unicode 0x2371] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'vee']] [into-unicode 0x2371]
composite [refer-glyph 'space'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'wedge']] [into-unicode 0x2372] composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'wedge']] [into-unicode 0x2372]
alias 'apliota' 0x2373 'iota' alias 'apliota' 0x2373 'iota'
alias 'aplrho' 0x2374 'rho' alias 'aplrho' 0x2374 'rho'
alias 'aplomega' 0x2375 'omega' alias 'aplomega' 0x2375 'omega'

View file

@ -491,20 +491,13 @@ glyph-block Symbol-Punctuation : begin
include : FlipAround MIDDLE (XH / 2) include : FlipAround MIDDLE (XH / 2)
save 'exclamDown' 0xA1 save 'exclamDown' 0xA1
sketch # doubleexclam
local d : 0.25 * WIDTH
include : refer-glyph "exclam"
apply-transform : Translate (-d * 2) 0
include : refer-glyph "exclam"
apply-transform : Translate d 0
save 'doubleexclam' 0x203C
sketch # bar sketch # bar
set-width WIDTH set-width WIDTH
set currentGlyph.anchors.above {.type BASE .x MIDDLE .y parenTop} set currentGlyph.anchors.above {.type BASE .x MIDDLE .y parenTop}
set currentGlyph.anchors.below {.type BASE .x MIDDLE .y parenBot} set currentGlyph.anchors.below {.type BASE .x MIDDLE .y parenBot}
include : VBar MIDDLE parenBot parenTop include : VBar MIDDLE parenBot parenTop
save 'bar' '|' save 'bar' '|'
save 'dentalclick' 0x1C0
sketch # parallel sketch # parallel
set-width WIDTH set-width WIDTH
@ -515,7 +508,6 @@ glyph-block Symbol-Punctuation : begin
include : VBar (MIDDLE + WIDTH * 0.175) parenBot parenTop sw include : VBar (MIDDLE + WIDTH * 0.175) parenBot parenTop sw
save 'parallel' 0x2225 save 'parallel' 0x2225
save 'doubleBar' 0x2016 save 'doubleBar' 0x2016
save 'dentalclick' 0x1C0
save 'alveolarlateralclick' 0x1C1 save 'alveolarlateralclick' 0x1C1
sketch # brokenbar sketch # brokenbar
@ -822,6 +814,8 @@ glyph-block Symbol-Punctuation : begin
include : SlashShape slashDefautLeft slashDefaultRight include : SlashShape slashDefautLeft slashDefaultRight
save 'slash' '/' save 'slash' '/'
save 'solidus' 0x2044 save 'solidus' 0x2044
save 'mathDivSlash' 0x2215
sketch # doubleSlash sketch # doubleSlash
define w : adviceBlackness 3 define w : adviceBlackness 3
define b : Math.max w (WIDTH * 0.15) define b : Math.max w (WIDTH * 0.15)
@ -845,6 +839,7 @@ glyph-block Symbol-Punctuation : begin
sketch # backslash sketch # backslash
include : BackslashShape (MIDDLE - backslashWidth / 2) (MIDDLE + backslashWidth / 2) include : BackslashShape (MIDDLE - backslashWidth / 2) (MIDDLE + backslashWidth / 2)
save 'backslash' "\\" save 'backslash' "\\"
save 'mathBackslash' 0x2216
sketch # backslash.left sketch # backslash.left
include : BackslashShape (MIDDLE - backslashWidth / 2) WIDTH include : BackslashShape (MIDDLE - backslashWidth / 2) WIDTH
save 'backslash.left' save 'backslash.left'
@ -855,15 +850,19 @@ glyph-block Symbol-Punctuation : begin
do 'Dashes' do 'Dashes'
do 'underscore' do 'underscore'
define openBoxGap : STROKE + [Math.max STROKE (XH / 6)]
define [OpenBoxSide y] : begin define [OpenBoxSide y] : begin
local height : STROKE + [Math.max STROKE (XH / 6)]
return : union return : union
VBarLeft SB y (y + height) VBarLeft SB y (y + openBoxGap)
VBarRight RIGHTSB y (y + height) VBarRight RIGHTSB y (y + openBoxGap)
sketch # underscore.high sketch # underscore.high
set-width WIDTH set-width WIDTH
include : HBarBottom SB RIGHTSB 0 include : HBarBottom SB RIGHTSB 0
save 'underscore.high' save 'underscore.high'
branch
include : HBarBottom SB RIGHTSB (-openBoxGap)
save 'doubleUnderscore.high'
branch
include : OpenBoxSide 0 include : OpenBoxSide 0
save 'openBox.high' save 'openBox.high'
@ -871,6 +870,10 @@ glyph-block Symbol-Punctuation : begin
set-width WIDTH set-width WIDTH
include : HBarTop SB RIGHTSB 0 include : HBarTop SB RIGHTSB 0
save 'underscore.belowBaseline' save 'underscore.belowBaseline'
branch
include : HBarTop SB RIGHTSB (-openBoxGap)
save 'doubleUnderscore.belowBaseline'
branch
include : OpenBoxSide (-STROKE) include : OpenBoxSide (-STROKE)
save 'openBox.belowBaseline' save 'openBox.belowBaseline'
@ -878,11 +881,16 @@ glyph-block Symbol-Punctuation : begin
set-width WIDTH set-width WIDTH
include : HBarTop SB RIGHTSB (DESCENDER * 0.9) include : HBarTop SB RIGHTSB (DESCENDER * 0.9)
save 'underscore.low' save 'underscore.low'
branch
include : HBarTop SB RIGHTSB (DESCENDER * 0.9 - openBoxGap)
save 'doubleUnderscore.low'
branch
include : OpenBoxSide (DESCENDER * 0.9) include : OpenBoxSide (DESCENDER * 0.9)
save 'openBox.low' save 'openBox.low'
select-variant 'underscore' '_' select-variant 'underscore' '_'
select-variant 'openBox' 0x2423 (follow -- 'underscore') select-variant 'openBox' 0x2423 (follow -- 'underscore')
select-variant 'doubleUnderscore' 0x2017 (follow -- 'underscore')
sketch # overline sketch # overline
include : HBarTop SB RIGHTSB CAP include : HBarTop SB RIGHTSB CAP
@ -927,13 +935,24 @@ glyph-block Symbol-Punctuation : begin
save 'bullet' 0x2022 save 'bullet' 0x2022
save 'hyphenpoint' 0x2027 save 'hyphenpoint' 0x2027
sketch # whitebullet for-width-kinds WIDE-WIDTH-1
set-width WIDE-WIDTH-1 local radius : PERIODRADIUS * [Math.sqrt MosaicWidthScalar]
sketch # whiteBullet
set-width MosaicWidth
local s : [adviceBlackness 5] * 0.75 local s : [adviceBlackness 5] * 0.75
include : difference include : difference
DotAt FWMIDDLE symbolMid (PERIODRADIUS - O) DotAt MosaicMiddle symbolMid (radius - O)
DotAt FWMIDDLE symbolMid (PERIODRADIUS - O - s) DotAt MosaicMiddle symbolMid (radius - O - s)
save 'whitebullet' 0x25E6 save [MangleName 'whiteBullet'] [MangleUnicode 0x25E6]
sketch # triangularBullet
set-width MosaicWidth
include : spiro-outline
corner (MosaicMiddle + radius - O) symbolMid
corner (MosaicMiddle - radius / 2) (symbolMid - radius / 2 * [Math.sqrt 3])
corner (MosaicMiddle - radius / 2) (symbolMid + radius / 2 * [Math.sqrt 3])
save [MangleName 'triangularBullet'] [MangleUnicode 0x2023]
do 'Quotes and Primes' do 'Quotes and Primes'
local quoteTop (CAP * 1.05) local quoteTop (CAP * 1.05)

View file

@ -7,6 +7,7 @@ import [compsiteMarkSet] from '../support/utils'
# Parameter generation # Parameter generation
export : define [calculateMetrics para] : begin export : define [calculateMetrics para] : begin
define UPM 1000 define UPM 1000
define HALF-UPM : UPM / 2
# Key metrics # Key metrics
define WIDTH para.width define WIDTH para.width
@ -176,7 +177,7 @@ export : define [calculateMetrics para] : begin
return : 0.5 * HVCONTRAST * (stroke - fine) / stroke + dir * TANSLANT return : 0.5 * HVCONTRAST * (stroke - fine) / stroke + dir * TANSLANT
return [object return [object
UPM WIDTH SB CAP XH DESCENDER CONTRAST UPM HALF-UPM WIDTH SB CAP XH DESCENDER CONTRAST
symbolMid parenTop parenBot operTop operBot tackTop tackBot plusTop plusBot pictTop pictBot bgopTop bgopBot Italify Upright Scale Translate Rotate globalTransform symbolMid parenTop parenBot operTop operBot tackTop tackBot plusTop plusBot pictTop pictBot bgopTop bgopBot Italify Upright Scale Translate Rotate globalTransform
TANSLANT SINSLANT COSSLANT HVCONTRAST UPWARD DOWNWARD RIGHTWARD LEFTWARD TANSLANT SINSLANT COSSLANT HVCONTRAST UPWARD DOWNWARD RIGHTWARD LEFTWARD
Upward Downward Leftward Rightward Upward Downward Leftward Rightward

View file

@ -178,7 +178,7 @@ define-macro for-width-kinds : syntax-rules
{0 '.hwid' $Capture$.metrics.WIDTH $Capture$.metrics.WIDTH} {0 '.hwid' $Capture$.metrics.WIDTH $Capture$.metrics.WIDTH}
{1 '.fwid' $Capture$.metrics.WIDE-WIDTH-0 ($Capture$.metrics.WIDE-WIDTH-0 / 2)} {1 '.fwid' $Capture$.metrics.WIDE-WIDTH-0 ($Capture$.metrics.WIDE-WIDTH-0 / 2)}
} }
foreach {FMosaifWide MosaicNameSuffix MosaicWidth MosaicUnitWidth} [items-of WidthKinds] : do foreach {FMosaicWide MosaicNameSuffix MosaicWidth MosaicUnitWidth} [items-of WidthKinds] : do
define MosaicMiddle : MosaicWidth / 2 define MosaicMiddle : MosaicWidth / 2
define MosaicWidthScalar : MosaicWidth / MosaicUnitWidth define MosaicWidthScalar : MosaicWidth / MosaicUnitWidth
define [MangleUnicode unicode] : if (MosaicWidth == @[formOf _desired]) unicode nothing define [MangleUnicode unicode] : if (MosaicWidth == @[formOf _desired]) unicode nothing
@ -220,15 +220,15 @@ define-macro glyph-block : syntax-rules
save-glyph spirofns MarkSet MARK BASE AS_BASE ALSO_METRICS pickHash dependencyProfile save-glyph spirofns MarkSet MARK BASE AS_BASE ALSO_METRICS pickHash dependencyProfile
getDependencyProfile buildGlyphs newtemp tagged includeGlyphPart compsiteMarkSet getDependencyProfile buildGlyphs newtemp tagged includeGlyphPart compsiteMarkSet
DivFrame fontMetrics] DivFrame fontMetrics]
define metricImports `[UPM WIDTH SB CAP XH DESCENDER CONTRAST symbolMid parenTop parenBot define metricImports `[UPM HALF-UPM WIDTH SB CAP XH DESCENDER CONTRAST symbolMid parenTop
operTop operBot tackTop tackBot plusTop plusBot pictTop pictBot bgopTop bgopBot Italify parenBot operTop operBot tackTop tackBot plusTop plusBot pictTop pictBot bgopTop bgopBot
Upright Scale Translate Rotate globalTransform TANSLANT SINSLANT COSSLANT HVCONTRAST Italify Upright Scale Translate Rotate globalTransform TANSLANT SINSLANT COSSLANT
UPWARD DOWNWARD RIGHTWARD LEFTWARD Upward Downward Leftward Rightward O OX OXHOOK HOOK HVCONTRAST UPWARD DOWNWARD RIGHTWARD LEFTWARD Upward Downward Leftward Rightward O OX
AHOOK SHOOK RHOOK JHOOK FHOOK HOOKX SMOOTH SMALLSMOOTH STROKE DOTSIZE PERIODSIZE BARPOS OXHOOK HOOK AHOOK SHOOK RHOOK JHOOK FHOOK HOOKX SMOOTH SMALLSMOOTH STROKE DOTSIZE
GBARPOS EBARPOS OVERLAYPOS FIVEBARPOS LONGJUT JUT VJUT ACCENT ACCENTX CTHIN CTHINB SLAB PERIODSIZE BARPOS GBARPOS EBARPOS OVERLAYPOS FIVEBARPOS LONGJUT JUT VJUT ACCENT ACCENTX
TAILADJX TAILADJY LBALANCE IBALANCE LBALANCE2 IBALANCE2 JBALANCE JBALANCE2 TBALANCE CTHIN CTHINB SLAB TAILADJX TAILADJY LBALANCE IBALANCE LBALANCE2 IBALANCE2 JBALANCE
TBALANCE2 RBALANCE RBALANCE2 FBALANCE ONEBALANCE WIDE-WIDTH-0 WIDE-WIDTH-1 JBALANCE2 TBALANCE TBALANCE2 RBALANCE RBALANCE2 FBALANCE ONEBALANCE WIDE-WIDTH-0
WIDE-WIDTH-2 OXE ESS ESSQUESTION XO CAPO HALFSTROKE RIGHTSB FWRSB MIDDLE WIDE-WIDTH-1 WIDE-WIDTH-2 OXE ESS ESSQUESTION XO CAPO HALFSTROKE RIGHTSB FWRSB MIDDLE
FWMIDDLE CAPMIDDLE CAP_SMOOTH DOTRADIUS PERIODRADIUS SIDEJUT SMOOTHA SMOOTHB FWMIDDLE CAPMIDDLE CAP_SMOOTH DOTRADIUS PERIODRADIUS SIDEJUT SMOOTHA SMOOTHB
SMALLSMOOTHA SMALLSMOOTHB CORRECTION_OMIDX CORRECTION_OMIDS adviceBlackness SMALLSMOOTHA SMALLSMOOTHB CORRECTION_OMIDX CORRECTION_OMIDS adviceBlackness
adviceBlackness2 MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE adviceBlackness2 MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE

View file

@ -33,6 +33,7 @@
"eslint-config-prettier": "^6.10.0", "eslint-config-prettier": "^6.10.0",
"patel": "^0.33.1", "patel": "^0.33.1",
"semver": "^7.1.3", "semver": "^7.1.3",
"stylus": "^0.54.7" "stylus": "^0.54.7",
"unicode-13.0.0": "0.8.0"
} }
} }

View file

@ -0,0 +1,310 @@
module.exports = [
[[0x0000, 0x007f], "Basic Latin"],
[[0x0080, 0x00ff], "Latin-1 Supplement"],
[[0x0100, 0x017f], "Latin Extended-A"],
[[0x0180, 0x024f], "Latin Extended-B"],
[[0x0250, 0x02af], "IPA Extensions"],
[[0x02b0, 0x02ff], "Spacing Modifier Letters"],
[[0x0300, 0x036f], "Combining Diacritical Marks"],
[[0x0370, 0x03ff], "Greek and Coptic"],
[[0x0400, 0x04ff], "Cyrillic"],
[[0x0500, 0x052f], "Cyrillic Supplement"],
[[0x0530, 0x058f], "Armenian"],
[[0x0590, 0x05ff], "Hebrew"],
[[0x0600, 0x06ff], "Arabic"],
[[0x0700, 0x074f], "Syriac"],
[[0x0750, 0x077f], "Arabic Supplement"],
[[0x0780, 0x07bf], "Thaana"],
[[0x07c0, 0x07ff], "NKo"],
[[0x0800, 0x083f], "Samaritan"],
[[0x0840, 0x085f], "Mandaic"],
[[0x0860, 0x086f], "Syriac Supplement"],
[[0x08a0, 0x08ff], "Arabic Extended-A"],
[[0x0900, 0x097f], "Devanagari"],
[[0x0980, 0x09ff], "Bengali"],
[[0x0a00, 0x0a7f], "Gurmukhi"],
[[0x0a80, 0x0aff], "Gujarati"],
[[0x0b00, 0x0b7f], "Oriya"],
[[0x0b80, 0x0bff], "Tamil"],
[[0x0c00, 0x0c7f], "Telugu"],
[[0x0c80, 0x0cff], "Kannada"],
[[0x0d00, 0x0d7f], "Malayalam"],
[[0x0d80, 0x0dff], "Sinhala"],
[[0x0e00, 0x0e7f], "Thai"],
[[0x0e80, 0x0eff], "Lao"],
[[0x0f00, 0x0fff], "Tibetan"],
[[0x1000, 0x109f], "Myanmar"],
[[0x10a0, 0x10ff], "Georgian"],
[[0x1100, 0x11ff], "Hangul Jamo"],
[[0x1200, 0x137f], "Ethiopic"],
[[0x1380, 0x139f], "Ethiopic Supplement"],
[[0x13a0, 0x13ff], "Cherokee"],
[[0x1400, 0x167f], "Unified Canadian Aboriginal Syllabics"],
[[0x1680, 0x169f], "Ogham"],
[[0x16a0, 0x16ff], "Runic"],
[[0x1700, 0x171f], "Tagalog"],
[[0x1720, 0x173f], "Hanunoo"],
[[0x1740, 0x175f], "Buhid"],
[[0x1760, 0x177f], "Tagbanwa"],
[[0x1780, 0x17ff], "Khmer"],
[[0x1800, 0x18af], "Mongolian"],
[[0x18b0, 0x18ff], "Unified Canadian Aboriginal Syllabics Extended"],
[[0x1900, 0x194f], "Limbu"],
[[0x1950, 0x197f], "Tai Le"],
[[0x1980, 0x19df], "New Tai Lue"],
[[0x19e0, 0x19ff], "Khmer Symbols"],
[[0x1a00, 0x1a1f], "Buginese"],
[[0x1a20, 0x1aaf], "Tai Tham"],
[[0x1ab0, 0x1aff], "Combining Diacritical Marks Extended"],
[[0x1b00, 0x1b7f], "Balinese"],
[[0x1b80, 0x1bbf], "Sundanese"],
[[0x1bc0, 0x1bff], "Batak"],
[[0x1c00, 0x1c4f], "Lepcha"],
[[0x1c50, 0x1c7f], "Ol Chiki"],
[[0x1c80, 0x1c8f], "Cyrillic Extended-C"],
[[0x1c90, 0x1cbf], "Georgian Extended"],
[[0x1cc0, 0x1ccf], "Sundanese Supplement"],
[[0x1cd0, 0x1cff], "Vedic Extensions"],
[[0x1d00, 0x1d7f], "Phonetic Extensions"],
[[0x1d80, 0x1dbf], "Phonetic Extensions Supplement"],
[[0x1dc0, 0x1dff], "Combining Diacritical Marks Supplement"],
[[0x1e00, 0x1eff], "Latin Extended Additional"],
[[0x1f00, 0x1fff], "Greek Extended"],
[[0x2000, 0x206f], "General Punctuation"],
[[0x2070, 0x209f], "Superscripts and Subscripts"],
[[0x20a0, 0x20cf], "Currency Symbols"],
[[0x20d0, 0x20ff], "Combining Diacritical Marks for Symbols"],
[[0x2100, 0x214f], "Letterlike Symbols"],
[[0x2150, 0x218f], "Number Forms"],
[[0x2190, 0x21ff], "Arrows"],
[[0x2200, 0x22ff], "Mathematical Operators"],
[[0x2300, 0x23ff], "Miscellaneous Technical"],
[[0x2400, 0x243f], "Control Pictures"],
[[0x2440, 0x245f], "Optical Character Recognition"],
[[0x2460, 0x24ff], "Enclosed Alphanumerics"],
[[0x2500, 0x257f], "Box Drawing"],
[[0x2580, 0x259f], "Block Elements"],
[[0x25a0, 0x25ff], "Geometric Shapes"],
[[0x2600, 0x26ff], "Miscellaneous Symbols"],
[[0x2700, 0x27bf], "Dingbats"],
[[0x27c0, 0x27ef], "Miscellaneous Mathematical Symbols-A"],
[[0x27f0, 0x27ff], "Supplemental Arrows-A"],
[[0x2800, 0x28ff], "Braille Patterns"],
[[0x2900, 0x297f], "Supplemental Arrows-B"],
[[0x2980, 0x29ff], "Miscellaneous Mathematical Symbols-B"],
[[0x2a00, 0x2aff], "Supplemental Mathematical Operators"],
[[0x2b00, 0x2bff], "Miscellaneous Symbols and Arrows"],
[[0x2c00, 0x2c5f], "Glagolitic"],
[[0x2c60, 0x2c7f], "Latin Extended-C"],
[[0x2c80, 0x2cff], "Coptic"],
[[0x2d00, 0x2d2f], "Georgian Supplement"],
[[0x2d30, 0x2d7f], "Tifinagh"],
[[0x2d80, 0x2ddf], "Ethiopic Extended"],
[[0x2de0, 0x2dff], "Cyrillic Extended-A"],
[[0x2e00, 0x2e7f], "Supplemental Punctuation"],
[[0x2e80, 0x2eff], "CJK Radicals Supplement"],
[[0x2f00, 0x2fdf], "Kangxi Radicals"],
[[0x2ff0, 0x2fff], "Ideographic Description Characters"],
[[0x3000, 0x303f], "CJK Symbols and Punctuation"],
[[0x3040, 0x309f], "Hiragana"],
[[0x30a0, 0x30ff], "Katakana"],
[[0x3100, 0x312f], "Bopomofo"],
[[0x3130, 0x318f], "Hangul Compatibility Jamo"],
[[0x3190, 0x319f], "Kanbun"],
[[0x31a0, 0x31bf], "Bopomofo Extended"],
[[0x31c0, 0x31ef], "CJK Strokes"],
[[0x31f0, 0x31ff], "Katakana Phonetic Extensions"],
[[0x3200, 0x32ff], "Enclosed CJK Letters and Months"],
[[0x3300, 0x33ff], "CJK Compatibility"],
[[0x3400, 0x4dbf], "CJK Unified Ideographs Extension A"],
[[0x4dc0, 0x4dff], "Yijing Hexagram Symbols"],
[[0x4e00, 0x9fff], "CJK Unified Ideographs"],
[[0xa000, 0xa48f], "Yi Syllables"],
[[0xa490, 0xa4cf], "Yi Radicals"],
[[0xa4d0, 0xa4ff], "Lisu"],
[[0xa500, 0xa63f], "Vai"],
[[0xa640, 0xa69f], "Cyrillic Extended-B"],
[[0xa6a0, 0xa6ff], "Bamum"],
[[0xa700, 0xa71f], "Modifier Tone Letters"],
[[0xa720, 0xa7ff], "Latin Extended-D"],
[[0xa800, 0xa82f], "Syloti Nagri"],
[[0xa830, 0xa83f], "Common Indic Number Forms"],
[[0xa840, 0xa87f], "Phags-pa"],
[[0xa880, 0xa8df], "Saurashtra"],
[[0xa8e0, 0xa8ff], "Devanagari Extended"],
[[0xa900, 0xa92f], "Kayah Li"],
[[0xa930, 0xa95f], "Rejang"],
[[0xa960, 0xa97f], "Hangul Jamo Extended-A"],
[[0xa980, 0xa9df], "Javanese"],
[[0xa9e0, 0xa9ff], "Myanmar Extended-B"],
[[0xaa00, 0xaa5f], "Cham"],
[[0xaa60, 0xaa7f], "Myanmar Extended-A"],
[[0xaa80, 0xaadf], "Tai Viet"],
[[0xaae0, 0xaaff], "Meetei Mayek Extensions"],
[[0xab00, 0xab2f], "Ethiopic Extended-A"],
[[0xab30, 0xab6f], "Latin Extended-E"],
[[0xab70, 0xabbf], "Cherokee Supplement"],
[[0xabc0, 0xabff], "Meetei Mayek"],
[[0xac00, 0xd7af], "Hangul Syllables"],
[[0xd7b0, 0xd7ff], "Hangul Jamo Extended-B"],
[[0xd800, 0xdb7f], "High Surrogates"],
[[0xdb80, 0xdbff], "High Private Use Surrogates"],
[[0xdc00, 0xdfff], "Low Surrogates"],
[[0xe000, 0xf8ff], "Private Use Area"],
[[0xf900, 0xfaff], "CJK Compatibility Ideographs"],
[[0xfb00, 0xfb4f], "Alphabetic Presentation Forms"],
[[0xfb50, 0xfdff], "Arabic Presentation Forms-A"],
[[0xfe00, 0xfe0f], "Variation Selectors"],
[[0xfe10, 0xfe1f], "Vertical Forms"],
[[0xfe20, 0xfe2f], "Combining Half Marks"],
[[0xfe30, 0xfe4f], "CJK Compatibility Forms"],
[[0xfe50, 0xfe6f], "Small Form Variants"],
[[0xfe70, 0xfeff], "Arabic Presentation Forms-B"],
[[0xff00, 0xffef], "Halfwidth and Fullwidth Forms"],
[[0xfff0, 0xffff], "Specials"],
[[0x10000, 0x1007f], "Linear B Syllabary"],
[[0x10080, 0x100ff], "Linear B Ideograms"],
[[0x10100, 0x1013f], "Aegean Numbers"],
[[0x10140, 0x1018f], "Ancient Greek Numbers"],
[[0x10190, 0x101cf], "Ancient Symbols"],
[[0x101d0, 0x101ff], "Phaistos Disc"],
[[0x10280, 0x1029f], "Lycian"],
[[0x102a0, 0x102df], "Carian"],
[[0x102e0, 0x102ff], "Coptic Epact Numbers"],
[[0x10300, 0x1032f], "Old Italic"],
[[0x10330, 0x1034f], "Gothic"],
[[0x10350, 0x1037f], "Old Permic"],
[[0x10380, 0x1039f], "Ugaritic"],
[[0x103a0, 0x103df], "Old Persian"],
[[0x10400, 0x1044f], "Deseret"],
[[0x10450, 0x1047f], "Shavian"],
[[0x10480, 0x104af], "Osmanya"],
[[0x104b0, 0x104ff], "Osage"],
[[0x10500, 0x1052f], "Elbasan"],
[[0x10530, 0x1056f], "Caucasian Albanian"],
[[0x10600, 0x1077f], "Linear A"],
[[0x10800, 0x1083f], "Cypriot Syllabary"],
[[0x10840, 0x1085f], "Imperial Aramaic"],
[[0x10860, 0x1087f], "Palmyrene"],
[[0x10880, 0x108af], "Nabataean"],
[[0x108e0, 0x108ff], "Hatran"],
[[0x10900, 0x1091f], "Phoenician"],
[[0x10920, 0x1093f], "Lydian"],
[[0x10980, 0x1099f], "Meroitic Hieroglyphs"],
[[0x109a0, 0x109ff], "Meroitic Cursive"],
[[0x10a00, 0x10a5f], "Kharoshthi"],
[[0x10a60, 0x10a7f], "Old South Arabian"],
[[0x10a80, 0x10a9f], "Old North Arabian"],
[[0x10ac0, 0x10aff], "Manichaean"],
[[0x10b00, 0x10b3f], "Avestan"],
[[0x10b40, 0x10b5f], "Inscriptional Parthian"],
[[0x10b60, 0x10b7f], "Inscriptional Pahlavi"],
[[0x10b80, 0x10baf], "Psalter Pahlavi"],
[[0x10c00, 0x10c4f], "Old Turkic"],
[[0x10c80, 0x10cff], "Old Hungarian"],
[[0x10d00, 0x10d3f], "Hanifi Rohingya"],
[[0x10e60, 0x10e7f], "Rumi Numeral Symbols"],
[[0x10e80, 0x10ebf], "Yezidi"],
[[0x10f00, 0x10f2f], "Old Sogdian"],
[[0x10f30, 0x10f6f], "Sogdian"],
[[0x10fb0, 0x10fdf], "Chorasmian"],
[[0x10fe0, 0x10fff], "Elymaic"],
[[0x11000, 0x1107f], "Brahmi"],
[[0x11080, 0x110cf], "Kaithi"],
[[0x110d0, 0x110ff], "Sora Sompeng"],
[[0x11100, 0x1114f], "Chakma"],
[[0x11150, 0x1117f], "Mahajani"],
[[0x11180, 0x111df], "Sharada"],
[[0x111e0, 0x111ff], "Sinhala Archaic Numbers"],
[[0x11200, 0x1124f], "Khojki"],
[[0x11280, 0x112af], "Multani"],
[[0x112b0, 0x112ff], "Khudawadi"],
[[0x11300, 0x1137f], "Grantha"],
[[0x11400, 0x1147f], "Newa"],
[[0x11480, 0x114df], "Tirhuta"],
[[0x11580, 0x115ff], "Siddham"],
[[0x11600, 0x1165f], "Modi"],
[[0x11660, 0x1167f], "Mongolian Supplement"],
[[0x11680, 0x116cf], "Takri"],
[[0x11700, 0x1173f], "Ahom"],
[[0x11800, 0x1184f], "Dogra"],
[[0x118a0, 0x118ff], "Warang Citi"],
[[0x11900, 0x1195f], "Dives Akuru"],
[[0x119a0, 0x119ff], "Nandinagari"],
[[0x11a00, 0x11a4f], "Zanabazar Square"],
[[0x11a50, 0x11aaf], "Soyombo"],
[[0x11ac0, 0x11aff], "Pau Cin Hau"],
[[0x11c00, 0x11c6f], "Bhaiksuki"],
[[0x11c70, 0x11cbf], "Marchen"],
[[0x11d00, 0x11d5f], "Masaram Gondi"],
[[0x11d60, 0x11daf], "Gunjala Gondi"],
[[0x11ee0, 0x11eff], "Makasar"],
[[0x11fb0, 0x11fbf], "Lisu Supplement"],
[[0x11fc0, 0x11fff], "Tamil Supplement"],
[[0x12000, 0x123ff], "Cuneiform"],
[[0x12400, 0x1247f], "Cuneiform Numbers and Punctuation"],
[[0x12480, 0x1254f], "Early Dynastic Cuneiform"],
[[0x13000, 0x1342f], "Egyptian Hieroglyphs"],
[[0x13430, 0x1343f], "Egyptian Hieroglyph Format Controls"],
[[0x14400, 0x1467f], "Anatolian Hieroglyphs"],
[[0x16800, 0x16a3f], "Bamum Supplement"],
[[0x16a40, 0x16a6f], "Mro"],
[[0x16ad0, 0x16aff], "Bassa Vah"],
[[0x16b00, 0x16b8f], "Pahawh Hmong"],
[[0x16e40, 0x16e9f], "Medefaidrin"],
[[0x16f00, 0x16f9f], "Miao"],
[[0x16fe0, 0x16fff], "Ideographic Symbols and Punctuation"],
[[0x17000, 0x187ff], "Tangut"],
[[0x18800, 0x18aff], "Tangut Components"],
[[0x18b00, 0x18cff], "Khitan Small Script"],
[[0x18d00, 0x18d8f], "Tangut Supplement"],
[[0x1b000, 0x1b0ff], "Kana Supplement"],
[[0x1b100, 0x1b12f], "Kana Extended-A"],
[[0x1b130, 0x1b16f], "Small Kana Extension"],
[[0x1b170, 0x1b2ff], "Nushu"],
[[0x1bc00, 0x1bc9f], "Duployan"],
[[0x1bca0, 0x1bcaf], "Shorthand Format Controls"],
[[0x1d000, 0x1d0ff], "Byzantine Musical Symbols"],
[[0x1d100, 0x1d1ff], "Musical Symbols"],
[[0x1d200, 0x1d24f], "Ancient Greek Musical Notation"],
[[0x1d2e0, 0x1d2ff], "Mayan Numerals"],
[[0x1d300, 0x1d35f], "Tai Xuan Jing Symbols"],
[[0x1d360, 0x1d37f], "Counting Rod Numerals"],
[[0x1d400, 0x1d7ff], "Mathematical Alphanumeric Symbols"],
[[0x1d800, 0x1daaf], "Sutton SignWriting"],
[[0x1e000, 0x1e02f], "Glagolitic Supplement"],
[[0x1e100, 0x1e14f], "Nyiakeng Puachue Hmong"],
[[0x1e2c0, 0x1e2ff], "Wancho"],
[[0x1e800, 0x1e8df], "Mende Kikakui"],
[[0x1e900, 0x1e95f], "Adlam"],
[[0x1ec70, 0x1ecbf], "Indic Siyaq Numbers"],
[[0x1ed00, 0x1ed4f], "Ottoman Siyaq Numbers"],
[[0x1ee00, 0x1eeff], "Arabic Mathematical Alphabetic Symbols"],
[[0x1f000, 0x1f02f], "Mahjong Tiles"],
[[0x1f030, 0x1f09f], "Domino Tiles"],
[[0x1f0a0, 0x1f0ff], "Playing Cards"],
[[0x1f100, 0x1f1ff], "Enclosed Alphanumeric Supplement"],
[[0x1f200, 0x1f2ff], "Enclosed Ideographic Supplement"],
[[0x1f300, 0x1f5ff], "Miscellaneous Symbols and Pictographs"],
[[0x1f600, 0x1f64f], "Emoticons"],
[[0x1f650, 0x1f67f], "Ornamental Dingbats"],
[[0x1f680, 0x1f6ff], "Transport and Map Symbols"],
[[0x1f700, 0x1f77f], "Alchemical Symbols"],
[[0x1f780, 0x1f7ff], "Geometric Shapes Extended"],
[[0x1f800, 0x1f8ff], "Supplemental Arrows-C"],
[[0x1f900, 0x1f9ff], "Supplemental Symbols and Pictographs"],
[[0x1fa00, 0x1fa6f], "Chess Symbols"],
[[0x1fa70, 0x1faff], "Symbols and Pictographs Extended-A"],
[[0x1fb00, 0x1fbff], "Symbols for Legacy Computing"],
[[0x20000, 0x2a6df], "CJK Unified Ideographs Extension B"],
[[0x2a700, 0x2b73f], "CJK Unified Ideographs Extension C"],
[[0x2b740, 0x2b81f], "CJK Unified Ideographs Extension D"],
[[0x2b820, 0x2ceaf], "CJK Unified Ideographs Extension E"],
[[0x2ceb0, 0x2ebef], "CJK Unified Ideographs Extension F"],
[[0x2f800, 0x2fa1f], "CJK Compatibility Ideographs Supplement"],
[[0x30000, 0x3134f], "CJK Unified Ideographs Extension G"],
[[0xe0000, 0xe007f], "Tags"],
[[0xe0100, 0xe01ef], "Variation Selectors Supplement"],
[[0xf0000, 0xfffff], "Supplementary Private Use Area-A"],
[[0x100000, 0x10ffff], "Supplementary Private Use Area-B"]
];

View file

@ -0,0 +1,39 @@
const blockData = require("./block-data");
const ucdNames = require("unicode-13.0.0/Names");
const ugc = require("unicode-13.0.0/General_Category");
module.exports = function(rawCov) {
const result = [];
const inFontCharSet = new Set(rawCov.keys());
for (const [[lchBlockStart, lchBlockEnd], block] of blockData) {
let blockResults = [];
let processed = new Set();
for (const [lchFont, [gn, ck]] of rawCov) {
if (lchFont < 0x20 || lchFont < lchBlockStart || lchFont > lchBlockEnd) continue;
const lchStart = (lchFont >>> 4) << 4;
const lchEnd = lchStart + 0x10;
for (let lch = lchStart; lch < lchEnd; lch++) {
if (processed.has(lch)) continue;
const chName = ucdNames.get(lch);
const gc = ugc.get(lch);
blockResults.push({
lch,
charName: chName,
glyphName: inFontCharSet.has(lch) ? gn : undefined,
gc,
ck,
inFont: inFontCharSet.has(lch)
});
processed.add(lch);
}
}
if (blockResults.length) {
result.push({
name: block,
characters: blockResults.sort((a, b) => a.lch - b.lch)
});
}
}
return result;
};

View file

@ -1,6 +1,6 @@
const cldr = require("cldr"); const cldr = require("cldr");
const fs = require("fs-extra"); const fs = require("fs-extra");
const path = require("path"); const gatherCov = require("./coverage-export/gather-coverage-data");
module.exports = async function(charMapPath) { module.exports = async function(charMapPath) {
const charMap = await fs.readJson(charMapPath); const charMap = await fs.readJson(charMapPath);
@ -57,15 +57,15 @@ module.exports = async function(charMapPath) {
if (displayName) supportLangSet.add(displayName); if (displayName) supportLangSet.add(displayName);
} }
const unicodeCoverage = new Map(); const rawCoverage = new Map();
for (const [gn, codes, cl] of charMap) for (const u of codes) unicodeCoverage.set(u, cl); for (const [gn, codes, cl] of charMap) for (const u of codes) rawCoverage.set(u, [gn, cl]);
return { return {
stats: { stats: {
glyphCount: charMap.length, glyphCount: charMap.length,
codePointCount: unicodeCoverage.size codePointCount: rawCoverage.size
}, },
unicodeCoverage: Array.from(unicodeCoverage).sort((a, b) => a[0] - b[0]), unicodeCoverage: gatherCov(rawCoverage),
languages: Array.from(supportLangSet).sort() languages: Array.from(supportLangSet).sort()
}; };
}; };