* 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

@ -1,4 +1,9 @@
* Add IEC power symbol.
* Add straight lambda (`λ`) shape, and corresponded variant selector `cv94`. Old shape is placed under `cv95` (#467).
* 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
if (w == ww && unicode) : assign-unicode unicode
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 : Translate 0 (symbolMid - CAP * dscale / 2)
@ -129,7 +129,7 @@ glyph-block AutoBuild-Enclosure : begin
set-width width
if (w == ww && unicode) : assign-unicode unicode
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
apply-transform : Upright
@ -190,15 +190,15 @@ glyph-block AutoBuild-Enclosure : begin
set-width width
if (w == ww && unicode) : assign-unicode unicode
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
top - sw + sw1
bot + sw - sw1
left + sw * HVCONTRAST - sw1 * HVCONTRAST
right - sw * HVCONTRAST + sw1 * HVCONTRAST
begin sw1
SMALLSMOOTHA * width / WIDTH - sw + sw1
SMALLSMOOTHB * width / WIDTH - sw + sw1
SMALLSMOOTHA * width / HALF-UPM - sw + sw1
SMALLSMOOTHB * width / HALF-UPM - sw + sw1
apply-transform : Upright
apply-transform : Translate 0 (symbolMid - CAP * dscale / 2)
@ -288,13 +288,14 @@ glyph-block AutoBuild-Enclosure : begin
if (w == ww) : save gn unicode
: 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
local pendingGlyphs : records.map : [record] => record.1
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]
scale -- [BraceScale digits ww]
scale -- [DottedScale digits ww]
sbscale -- 1
foreach {unicode parts w} [items-of records] : do
@ -303,7 +304,7 @@ glyph-block AutoBuild-Enclosure : begin
sketch
set-width width
local tw 0
foreach [glyphid : items-of : parts.concat {'period'}] : begin
foreach [glyphid : items-of : parts.concat {gidDot}] : begin
local g miniatureFont.(glyphid)
if tw : begin # Add a little kern
set tw : tw - SB
@ -442,7 +443,15 @@ glyph-block AutoBuild-Enclosure : begin
0x2488 + j - 1
digitGlyphNames j
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"
local compositions : list
@ -450,4 +459,4 @@ glyph-block AutoBuild-Enclosure : begin
0x2488 + j - 1
digitGlyphNames j
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 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
local pendingGlyphs : [records.map : [record] => record.1].concat : records.map : [record] => record.2
local miniatureFont : Miniature
@ -418,6 +437,8 @@ glyph-block Autobuild-Transformed : begin
list 0x2189 'zero.lnum' 'three.lnum'
# care-of
list 0x2100 'largescripta' 'C'
list 0x2101 'largescripta' 'S'
list 0x214D 'A' 'S'
list 0x2105 'C' 'O'
list 0x2106 'C' 'U'
# fraction bar
@ -428,47 +449,49 @@ glyph-block Autobuild-Transformed : begin
list 0xE0A1 'L' 'N'
list 0xE0A3 'C' 'N'
# 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 pendingGlyphs2 : records.map : [record] => record.2
local wide : para.spaing > 1 || para.diversityM > 1
local shrink1 : if (wide) 1 [clamp 0 1 (_shrink1 * para.diversityM)]
local shrink2 : if (wide) 1 [clamp 0 1 (_shrink2 * para.diversityM)]
local shrink1 : if FMosaicWide 1 [clamp 0 1 (_shrink1 * ww / WIDTH)]
local shrink2 : if FMosaicWide 1 [clamp 0 1 (_shrink2 * ww / WIDTH)]
local df1 : Thinner pendingGlyphs1 shrink1
local df2 : Thinner pendingGlyphs2 shrink2
foreach [{unicode c1 c2 mark} : items-of records] : begin
local glyphName "\(c1)_\(c2)"
foreach [{unicode c1 c2} : items-of records] : begin
local glyphName : MangleName "\(c1)_\(c2)"
if [query-glyph glyphName] : begin
local j 2
while [query-glyph (glyphName + j)] : inc j
set glyphName (glyphName + j)
if wide : begin
sketch
include df2.(c2)
include : Translate df1.(c1).advanceWidth 0
include df1.(c1)
set-width (df1.(c1).advanceWidth + df2.(c2).advanceWidth)
save glyphName unicode
: else
local kern : SB * 7/8 * (shrink1 + shrink2)
local refW : WIDTH * (shrink1 * wadj1 + shrink2 * wadj2) - kern
local targetW : WIDTH * para.diversityM
sketch
include df2.(c2)
include : Translate (WIDTH * shrink1 * wadj1 - kern) 0
include df1.(c1)
include : Translate (-WIDTH * shrink1 * (1 - wadj1) / 2) 0
include : Upright
include : Translate (-refW / 2) 0
include : Scale ((targetW - SB * 1.25) / (targetW - SB * 2) * targetW / refW) 1
include : Translate (targetW / 2) 0
include : Italify
if mark : include [DivFrame para.diversityM].markSet.(mark)
save glyphName unicode
if FMosaicWide : sketch
set-width (df1.(c1).advanceWidth + df2.(c2).advanceWidth)
include df2.(c2)
include : Translate df1.(c1).advanceWidth 0
include df1.(c1)
save glyphName [MangleUnicode unicode]
: else : sketch
set-width ww
local sumChildrenWidth : df1.(c1).advanceWidth * wadj1 + df2.(c2).advanceWidth * wadj2
local kern : if FMosaicWide 0 : Math.max 0 (SB * 7/8 * (shrink1 + shrink2) - [Math.max 0 (ww - sumChildrenWidth)])
local refW : sumChildrenWidth - kern
include df2.(c2)
include : Translate (df1.(c1).advanceWidth * wadj1 - kern) 0
include df1.(c1)
# include : Translate (-df1.(c1).advanceWidth * (1 - wadj1) / 2) 0
include : Upright
include : Translate (-refW / 2) 0
include : Scale [clamp 0 1 ((ww - SB * 1.25) / (ww - SB * 2) * ww / refW)] 1
include : Translate (ww / 2) 0
include : Italify
save glyphName [MangleUnicode unicode]
define stdShrink : clamp 0.75 0.9 : linreg 72 0.75 108 0.9 STROKE
if [not recursive] : createLigatures stdShrink stdShrink 1 1 : list
@ -497,6 +520,10 @@ glyph-block Autobuild-Transformed : begin
list 0x479 'o' 'y' 'p'
list 0x20A7 'P' '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
list 0x2103 'degree' 'C'
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.curly' nothing 'v.curly' MIDDLE (XH / 2)
select-variant 'turnv' 0x474 (follow -- 'Lambda')
select-variant 'turnv' 0x28C (follow -- 'Lambda')
sketch # nu
include MarkSet.e
@ -2895,6 +2895,7 @@ glyph-block LetterUnified-Basic : begin
select-variant 'Ghooktop' 0x193 (follow -- 'G')
select-variant 'smcpGhooktop' 0x29B (follow -- 'G')
select-variant 'Gbar' 0x1E4 (follow -- 'G')
turned 'turnG' 0x2141 'G' MIDDLE (CAP / 2)
### g
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]
include : VBar markMiddle belowMarkBot top (fine * 2)
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
save 'lrArrowBelow' 0x34E
save 'upArrowBelow' 0x34E
# horn and angle marks
define [HornDim attX attY overshootX overshootY yrP] : begin

View file

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

View file

@ -111,7 +111,7 @@ glyph-block Symbol-Arrow : begin
include : HookArrowBar x1 y1 x2 y2 halfstroke (arrowSize * mul)
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 headWidth : halfBarWidth * 2

View file

@ -400,7 +400,7 @@ glyph-block Symbol-Geometric : begin
foreach j [range 0 n] : begin
local angle : Math.PI * 2 * j / n
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
g4 cx (cy + fine)
g4 (cx + fine) cy
@ -408,10 +408,7 @@ glyph-block Symbol-Geometric : begin
g4 (cx - fine) cy
close
include scaffold.markSet.e
apply-transform [Upright] true
apply-transform [Translate 0 (symbolMid - (XH / 2))] true
apply-transform [Italify] true
include scaffold.markSet.plus
save [MangleName 'dottedcircle'] [MangleUnicode 0x25CC]
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 '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
sketch # roundwhitesquare, U+25A2
set-width MosaicWidth

View file

@ -1140,7 +1140,7 @@ glyph-block Symbol-Math-Relation : begin
glyph-block Symbol-Math-Complement : begin
glyph-block-import LetterUnified-Basic : CShape
sketch # complement
include : CShape operTop operBot OPERATORSTROKE
include : CShape [mix symbolMid operTop 1.1] [mix symbolMid operBot 1.1] OPERATORSTROKE
save 'complement' 0x2201
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
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
set-width df.width
@ -1336,36 +1336,36 @@ glyph-block Symbol-Math-APL : begin
include : intersection [refer-glyph 'aplsquareShadow'] shape
include : ScaleAround MIDDLE symbolMid aplBoxInnerScale
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'equal'] [into-unicode 0x2338]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'divide'] [into-unicode 0x2339]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'whitediamond.hwid'] [into-unicode 0x233A]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'smallwhitecircle.hwid'] [into-unicode 0x233B]
composite [refer-glyph 'space'] [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'] [aplBoxed : refer-glyph 'equal'] [into-unicode 0x2338]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'divide'] [into-unicode 0x2339]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'whitediamond.hwid'] [into-unicode 0x233A]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'smallwhitecircle.hwid'] [into-unicode 0x233B]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'whitecircle.hwid'] [into-unicode 0x233C]
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 'space'] [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 'space'] [aplBoxed : refer-glyph 'slash'] [into-unicode 0x2341]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'backslash'] [into-unicode 0x2342]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'less'] [into-unicode 0x2343]
composite [refer-glyph 'space'] [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 'space'] [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 'space'] [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 'aplminus'] [refer-glyph 'slash']] [into-unicode 0x233F]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'aplminus'] [refer-glyph 'backslash']] [into-unicode 0x2340]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'slash'] [into-unicode 0x2341]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'backslash'] [into-unicode 0x2342]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'less'] [into-unicode 0x2343]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'greater'] [into-unicode 0x2344]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowleft.hwid'] [refer-glyph 'aplbar']] [into-unicode 0x2345]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowright.hwid'] [refer-glyph 'aplbar']] [into-unicode 0x2346]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'arrowleft.hwid'] [into-unicode 0x2347]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'arrowright.hwid'] [into-unicode 0x2348]
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 'space'] [Overlay [refer-glyph 'increment'] [refer-glyph 'aplLongBar']] [into-unicode 0x234B]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'vee'] [into-unicode 0x234C]
composite [refer-glyph 'space'] [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 'space'] [aplBoxed : refer-glyph 'arrowup.hwid'] [into-unicode 0x2350]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'increment'] [refer-glyph 'aplLongBar']] [into-unicode 0x234B]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'vee'] [into-unicode 0x234C]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'increment'] [into-unicode 0x234D]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowup.hwid'] [refer-glyph 'minus']] [into-unicode 0x234F]
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 'space'] [Overlay [refer-glyph 'nabla'] [refer-glyph 'aplLongBar']] [into-unicode 0x2352]
composite [refer-glyph 'space'] [aplBoxed : refer-glyph 'wedge'] [into-unicode 0x2353]
composite [refer-glyph 'space'] [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 'space'] [aplBoxed : refer-glyph 'arrowdown.hwid'] [into-unicode 0x2357]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'nabla'] [refer-glyph 'aplLongBar']] [into-unicode 0x2352]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'wedge'] [into-unicode 0x2353]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'nabla'] [into-unicode 0x2354]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'arrowdown.hwid'] [refer-glyph 'minus']] [into-unicode 0x2356]
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 'increment'] [refer-glyph 'underlineBelow'] [into-unicode 0x2359]
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
FlipAround MIDDLE symbolMid
into-unicode 0x235D
composite [refer-glyph 'space'] [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 'space'] [aplBoxed : composite [refer-glyph 'colon'] [Realign MIDDLE (XH/2) MIDDLE symbolMid]] [into-unicode 0x2360]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'singleQuote'] [into-unicode 0x235E]
composite [refer-glyph 'enquad'] [intersection [refer-glyph 'mathOOutline'] [refer-glyph 'opAsterisk.low']] [refer-glyph 'mathO'] [into-unicode 0x235F]
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 'nabla'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2362]
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 '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 'space'] [Overlay [refer-glyph 'subst'] [refer-glyph 'aplbar']] [into-unicode 0x2367]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'cup'] [refer-glyph 'aplbar']] [into-unicode 0x2366]
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 'greater.narrow'] [refer-glyph 'dieresisAbove'] [into-unicode 0x2369]
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 'space'] [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 'space'] [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 'space'] [aplBoxed : refer-glyph 'question'] [into-unicode 0x2370]
composite [refer-glyph 'space'] [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 'nabla']] [into-unicode 0x236B]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'zero.lnum.unslashed']] [into-unicode 0x236C]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'bar']] [into-unicode 0x236D]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'semicolon'] [refer-glyph 'underscore.belowBaseline']] [into-unicode 0x236E]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'notequal'] [into-unicode 0x236F]
composite [refer-glyph 'enquad'] [aplBoxed : refer-glyph 'question'] [into-unicode 0x2370]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'vee']] [into-unicode 0x2371]
composite [refer-glyph 'enquad'] [Overlay [refer-glyph 'overlaytilde'] [refer-glyph 'wedge']] [into-unicode 0x2372]
alias 'apliota' 0x2373 'iota'
alias 'aplrho' 0x2374 'rho'
alias 'aplomega' 0x2375 'omega'

View file

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

View file

@ -7,6 +7,7 @@ import [compsiteMarkSet] from '../support/utils'
# Parameter generation
export : define [calculateMetrics para] : begin
define UPM 1000
define HALF-UPM : UPM / 2
# Key metrics
define WIDTH para.width
@ -176,7 +177,7 @@ export : define [calculateMetrics para] : begin
return : 0.5 * HVCONTRAST * (stroke - fine) / stroke + dir * TANSLANT
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
TANSLANT SINSLANT COSSLANT HVCONTRAST UPWARD DOWNWARD RIGHTWARD LEFTWARD
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}
{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 MosaicWidthScalar : MosaicWidth / MosaicUnitWidth
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
getDependencyProfile buildGlyphs newtemp tagged includeGlyphPart compsiteMarkSet
DivFrame fontMetrics]
define metricImports `[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 TANSLANT SINSLANT COSSLANT HVCONTRAST
UPWARD DOWNWARD RIGHTWARD LEFTWARD Upward Downward Leftward Rightward O OX OXHOOK HOOK
AHOOK SHOOK RHOOK JHOOK FHOOK HOOKX SMOOTH SMALLSMOOTH STROKE DOTSIZE PERIODSIZE BARPOS
GBARPOS EBARPOS OVERLAYPOS FIVEBARPOS LONGJUT JUT VJUT ACCENT ACCENTX CTHIN CTHINB SLAB
TAILADJX TAILADJY LBALANCE IBALANCE LBALANCE2 IBALANCE2 JBALANCE JBALANCE2 TBALANCE
TBALANCE2 RBALANCE RBALANCE2 FBALANCE ONEBALANCE WIDE-WIDTH-0 WIDE-WIDTH-1
WIDE-WIDTH-2 OXE ESS ESSQUESTION XO CAPO HALFSTROKE RIGHTSB FWRSB MIDDLE
define metricImports `[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 TANSLANT SINSLANT COSSLANT
HVCONTRAST UPWARD DOWNWARD RIGHTWARD LEFTWARD Upward Downward Leftward Rightward O OX
OXHOOK HOOK AHOOK SHOOK RHOOK JHOOK FHOOK HOOKX SMOOTH SMALLSMOOTH STROKE DOTSIZE
PERIODSIZE BARPOS GBARPOS EBARPOS OVERLAYPOS FIVEBARPOS LONGJUT JUT VJUT ACCENT ACCENTX
CTHIN CTHINB SLAB TAILADJX TAILADJY LBALANCE IBALANCE LBALANCE2 IBALANCE2 JBALANCE
JBALANCE2 TBALANCE TBALANCE2 RBALANCE RBALANCE2 FBALANCE ONEBALANCE WIDE-WIDTH-0
WIDE-WIDTH-1 WIDE-WIDTH-2 OXE ESS ESSQUESTION XO CAPO HALFSTROKE RIGHTSB FWRSB MIDDLE
FWMIDDLE CAPMIDDLE CAP_SMOOTH DOTRADIUS PERIODRADIUS SIDEJUT SMOOTHA SMOOTHB
SMALLSMOOTHA SMALLSMOOTHB CORRECTION_OMIDX CORRECTION_OMIDS adviceBlackness
adviceBlackness2 MVERTSTROKE MVERTSTROKE_D OVERLAYSTROKE OPERATORSTROKE GEOMETRYSTROKE

View file

@ -33,6 +33,7 @@
"eslint-config-prettier": "^6.10.0",
"patel": "^0.33.1",
"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 fs = require("fs-extra");
const path = require("path");
const gatherCov = require("./coverage-export/gather-coverage-data");
module.exports = async function(charMapPath) {
const charMap = await fs.readJson(charMapPath);
@ -57,15 +57,15 @@ module.exports = async function(charMapPath) {
if (displayName) supportLangSet.add(displayName);
}
const unicodeCoverage = new Map();
for (const [gn, codes, cl] of charMap) for (const u of codes) unicodeCoverage.set(u, cl);
const rawCoverage = new Map();
for (const [gn, codes, cl] of charMap) for (const u of codes) rawCoverage.set(u, [gn, cl]);
return {
stats: {
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()
};
};