We now have partial generation and automatic super/subscript generation.

This commit is contained in:
Belleve Invis 2015-07-26 08:49:13 +08:00
parent daae14cdf0
commit 45b0b0bb92
11 changed files with 4560 additions and 3641 deletions

View file

@ -10,5 +10,6 @@ foreach glyph [items-of glyphList] : begin {
} }
set font.glyf : font.glyf.filter : function [glyph] : glyph && [not glyph.dontExport] set font.glyf : font.glyf.filter : function [glyph] : glyph && [not glyph.dontExport]
set font.glyfMap glyphs
return font return font
} }

View file

@ -12,7 +12,7 @@ define [exports.build para] : begin {
define variantSelector para.variantSelector define variantSelector para.variantSelector
define font [require './empty.json'] define font : JSON.parse : JSON.stringify [require './empty.json']
define glyphList font.glyf define glyphList font.glyf
define glyphs (.'.notdef' glyphList.0) define glyphs (.'.notdef' glyphList.0)
@ -108,6 +108,10 @@ define MARK 'mark'
define MARKBASE 'markbase' define MARKBASE 'markbase'
define AS_BASE 'AS-BASE' define AS_BASE 'AS-BASE'
define [Upright angle] (.xx 1 .yx [-[Math.tan [[fallback angle para.italicangle] / 180 * Math.PI]]] .xy 0 .yy 1 .x 0 .y 0)
define [Italify angle] (.xx 1 .yx [Math.tan [[fallback angle para.italicangle] / 180 * Math.PI]] .xy 0 .yy 1 .x 0 .y 0)
define [Scale s] (.xx s .yx 0 .xy 0 .yy s .x 0 .y 0)
define [Translate x y] (.xx 1 .yx 0 .xy 0 .yy 1 .x x .y y)
define [tm anchor] : return ( define [tm anchor] : return (
.x [anchor.x * globalTransform.xx + anchor.y * globalTransform.yx + globalTransform.x] .x [anchor.x * globalTransform.xx + anchor.y * globalTransform.yx + globalTransform.x]
@ -179,6 +183,7 @@ define-macro glyph-construction : syntax-rules {
local include : this.include.bind this local include : this.include.bind this
local create-stroke : this.create-stroke.bind this local create-stroke : this.create-stroke.bind this
local set-anchor : this.set-anchor.bind this local set-anchor : this.set-anchor.bind this
local apply-transform : this.apply-transform.bind this
local [dont-export] : set currentGlyph.dontExport true local [dont-export] : set currentGlyph.dontExport true
this.gizmo = globalTransform this.gizmo = globalTransform
this.set-width WIDTH this.set-width WIDTH
@ -186,16 +191,29 @@ define-macro glyph-construction : syntax-rules {
return nothing return nothing
}]] env) }]] env)
} }
define [create-glyph name actions] : begin {
console.log : "Building /" + name local nTemp 0
define [create-glyph name groupid actions] : piecewise {
[name && groupid && actions] : begin {
if [para.buildFor && para.buildFor !== groupid && groupid !== '*'] : return nothing
define glyphObject [new Glyph name] define glyphObject [new Glyph name]
glyphList.push glyphObject glyphList.push glyphObject
glyphs`name = glyphObject glyphs`name = glyphObject
actions.call glyphObject actions.call glyphObject
return glyphObject return glyphObject
}
[name && groupid] : create-glyph name name arguments.1
true : begin {
local actions arguments.0
local glyphObject [new Glyph ['.temp-' + [set nTemp [inc nTemp]]]]
actions.call glyphObject
return glyphObject
}
} }
define [select-variant glyphid unicode default] : begin { define [select-variant glyphid groupid unicode default] : piecewise {
[glyphid && groupid && unicode && default] : begin {
if [para.buildFor && para.buildFor !== groupid && groupid !== '*'] : return nothing
local variant : variantSelector`glyphid || default local variant : variantSelector`glyphid || default
local chosenGlyph glyphs`[glyphid + '.' + variant] local chosenGlyph glyphs`[glyphid + '.' + variant]
set glyphs`glyphid chosenGlyph set glyphs`glyphid chosenGlyph
@ -204,6 +222,8 @@ define [select-variant glyphid unicode default] : begin {
set chosenGlyph.dontExport false set chosenGlyph.dontExport false
set unicodeGlyphs.(chosenGlyph.unicode`[chosenGlyph.unicode.length - 1]) chosenGlyph set unicodeGlyphs.(chosenGlyph.unicode`[chosenGlyph.unicode.length - 1]) chosenGlyph
} }
}
[glyphid && groupid && unicode] : select-variant glyphid glyphid arguments.1 arguments.2
} }
###### HERE WE GO! ###### HERE WE GO!

File diff suppressed because it is too large Load diff

View file

@ -202,14 +202,15 @@ define [XSHookLower bottom left middle right smooth hook] : glyph-construction {
:.curve-to [mix middle left KAPPA_HOOK] [bottom + O] [left + OXHOOK] [bottom + hook] :.curve-to [mix middle left KAPPA_HOOK] [bottom + O] [left + OXHOOK] [bottom + hook]
} }
define [smallo u d l r] : glyph-construction { define [smallo u d l r _width] : glyph-construction {
local middle : [l + r] / 2 local middle : [l + r] / 2
local width : fallback _width STROKE
if [u - d > SMALLSMOOTHA + SMALLSMOOTHB] { if [u - d > SMALLSMOOTHA + SMALLSMOOTHB] {
then : begin { then : begin {
include : create-stroke include : create-stroke
:.set-transform globalTransform :.set-transform globalTransform
:.start-from middle [u - O] :.start-from middle [u - O]
:.set-width STROKE 0 :.set-width width 0
:.heads-to LEFTWARD :.heads-to LEFTWARD
:.arc-hv-to [l + O] [u - SMALLSMOOTHA] :.arc-hv-to [l + O] [u - SMALLSMOOTHA]
:.line-to [l + O] [d + SMALLSMOOTHB] :.line-to [l + O] [d + SMALLSMOOTHB]
@ -226,7 +227,7 @@ define [smallo u d l r] : glyph-construction {
include : create-stroke include : create-stroke
:.set-transform globalTransform :.set-transform globalTransform
:.start-from middle [u - O] :.start-from middle [u - O]
:.set-width STROKE 0 :.set-width width 0
:.heads-to LEFTWARD :.heads-to LEFTWARD
:.arc-hv-to [l + O] ymiddlea :.arc-hv-to [l + O] ymiddlea
:.arc-vh-to middle [d + O] :.arc-vh-to middle [d + O]

View file

@ -252,7 +252,7 @@ create-glyph 'D' : glyph-construction {
:.line-to SB CAP :.line-to SB CAP
:.heads-to LEFTWARD :.heads-to LEFTWARD
} }
create-glyph 'P' : glyph-construction { create-glyph 'P' '*' : glyph-construction {
set-width WIDTH set-width WIDTH
assign-unicode 'P' assign-unicode 'P'
include capitalMarks include capitalMarks
@ -391,11 +391,7 @@ create-glyph 'U' : glyph-construction {
### F E H L I T Z ### F E H L I T Z
create-glyph 'F' : glyph-construction { define [FShape] : glyph-construction {
set-width WIDTH
assign-unicode 'F'
include capitalMarks
include : create-stroke :.start-from [SB * 1.5] 0 :.heads-to UPWARD :.set-width 0 STROKE include : create-stroke :.start-from [SB * 1.5] 0 :.heads-to UPWARD :.set-width 0 STROKE
:.line-to [SB * 1.5] CAP :.heads-to UPWARD :.line-to [SB * 1.5] CAP :.heads-to UPWARD
include : create-stroke :.start-from [SB * 1.5] CAP :.set-width 0 STROKE :.heads-to RIGHTWARD include : create-stroke :.start-from [SB * 1.5] CAP :.set-width 0 STROKE :.heads-to RIGHTWARD
@ -403,10 +399,17 @@ create-glyph 'F' : glyph-construction {
include : create-stroke :.start-from [SB * 1.5] [CAP * 0.54] :.set-width HALFSTROKE HALFSTROKE :.heads-to RIGHTWARD include : create-stroke :.start-from [SB * 1.5] [CAP * 0.54] :.set-width HALFSTROKE HALFSTROKE :.heads-to RIGHTWARD
:.line-to [RIGHTSB - HALFSTROKE] [CAP * 0.54] :.heads-to RIGHTWARD :.line-to [RIGHTSB - HALFSTROKE] [CAP * 0.54] :.heads-to RIGHTWARD
} }
create-glyph 'F' : glyph-construction {
set-width WIDTH
assign-unicode 'F'
include capitalMarks
include : FShape
}
create-glyph 'E' : glyph-construction { create-glyph 'E' : glyph-construction {
set-width WIDTH set-width WIDTH
assign-unicode 'E' assign-unicode 'E'
include glyphs.F AS_BASE include capitalMarks
include : FShape
include : create-stroke :.start-from [SB * 1.5] 0 :.set-width STROKE 0 :.heads-to RIGHTWARD include : create-stroke :.start-from [SB * 1.5] 0 :.set-width STROKE 0 :.heads-to RIGHTWARD
:.line-to RIGHTSB 0 :.heads-to RIGHTWARD :.line-to RIGHTSB 0 :.heads-to RIGHTWARD
@ -443,7 +446,7 @@ create-glyph 'L' : glyph-construction {
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
} }
create-glyph 'I.straight' : glyph-construction { create-glyph 'I.straight' 'I' : glyph-construction {
dont-export dont-export
include capitalMarks include capitalMarks
include : create-stroke include : create-stroke
@ -453,7 +456,7 @@ create-glyph 'I.straight' : glyph-construction {
:.line-to MIDDLE CAP :.line-to MIDDLE CAP
:.heads-to UPWARD :.heads-to UPWARD
} }
create-glyph 'I.serifed' : glyph-construction { create-glyph 'I.serifed' 'I' : glyph-construction {
dont-export dont-export
include glyphs.'I.straight' AS_BASE include glyphs.'I.straight' AS_BASE
# Top serif # Top serif
@ -502,7 +505,7 @@ create-glyph 'Z' : glyph-construction {
### J ### J
create-glyph 'J.straight' : glyph-construction { create-glyph 'J.straight' 'J' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include capitalMarks include capitalMarks
@ -521,7 +524,7 @@ create-glyph 'J.straight' : glyph-construction {
:.arc-vh-to [mix hookx [RIGHTSB - JBALANCE] 0.5] O :.heads-to LEFTWARD :.arc-vh-to [mix hookx [RIGHTSB - JBALANCE] 0.5] O :.heads-to LEFTWARD
:.curve-to [MIDDLE - kappa * [MIDDLE - SB] - SB * 0.5] O hookx HOOK :.curve-to [MIDDLE - kappa * [MIDDLE - SB] - SB * 0.5] O hookx HOOK
} }
create-glyph 'J.serifed' : glyph-construction { create-glyph 'J.serifed' 'J' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include glyphs.'J.straight' AS_BASE include glyphs.'J.straight' AS_BASE

View file

@ -19,9 +19,7 @@ create-glyph 'o' : glyph-construction {
:.arc-vh-to MIDDLE XO :.arc-vh-to MIDDLE XO
:.heads-to LEFTWARD :.heads-to LEFTWARD
} }
create-glyph 'o.left' : glyph-construction { define [oLeft] : glyph-construction {
dont-export
set-width WIDTH
# right half # right half
include : create-stroke include : create-stroke
:.start-from MIDDLE XO :.start-from MIDDLE XO
@ -44,9 +42,7 @@ create-glyph 'o.left' : glyph-construction {
:.set-width STROKE 0 :.set-width STROKE 0
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
} }
create-glyph 'o.right' : glyph-construction { define [oRight] : glyph-construction {
dont-export
set-width WIDTH
# left half # left half
include : create-stroke include : create-stroke
:.start-from MIDDLE XO :.start-from MIDDLE XO
@ -74,7 +70,7 @@ create-glyph 'p' : glyph-construction {
assign-unicode 'p' assign-unicode 'p'
include eMarks include eMarks
include glyphs.'o.left' include : oLeft
include : create-stroke include : create-stroke
:.start-from SB XH :.start-from SB XH
:.heads-to DOWNWARD :.heads-to DOWNWARD
@ -87,7 +83,7 @@ create-glyph 'b' : glyph-construction {
assign-unicode 'b' assign-unicode 'b'
include bMarks include bMarks
put-shapes glyphs.'o.left'.contours include : oLeft
include : create-stroke include : create-stroke
:.start-from SB 0 :.start-from SB 0
:.heads-to UPWARD :.heads-to UPWARD
@ -100,7 +96,7 @@ create-glyph 'q' : glyph-construction {
assign-unicode 'q' assign-unicode 'q'
include eMarks include eMarks
put-shapes glyphs.'o.right'.contours include : oRight
include : create-stroke include : create-stroke
:.start-from RIGHTSB XH :.start-from RIGHTSB XH
:.heads-to DOWNWARD :.heads-to DOWNWARD
@ -113,7 +109,7 @@ create-glyph 'd' : glyph-construction {
assign-unicode 'd' assign-unicode 'd'
include bMarks include bMarks
put-shapes glyphs.'o.right'.contours include : oRight
include : create-stroke include : create-stroke
:.start-from RIGHTSB 0 :.start-from RIGHTSB 0
:.heads-to UPWARD :.heads-to UPWARD
@ -172,7 +168,7 @@ create-glyph 'c' : glyph-construction {
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
:.curve-to [MIDDLE + [KAPPA_HOOK + TAILADJKAPPA * globalTransform.yx] * [MIDDLE - SB]] O [RIGHTSB - OXHOOK + TAILADJX * globalTransform.yx] [HOOK - TAILADJY * globalTransform.yx] :.curve-to [MIDDLE + [KAPPA_HOOK + TAILADJKAPPA * globalTransform.yx] * [MIDDLE - SB]] O [RIGHTSB - OXHOOK + TAILADJX * globalTransform.yx] [HOOK - TAILADJY * globalTransform.yx]
} }
create-glyph 'e.upright' : glyph-construction { create-glyph 'e.upright' 'e' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
@ -199,7 +195,7 @@ create-glyph 'e.upright' : glyph-construction {
:.line-to [RIGHTSB - HALFSTROKE] barbottom :.line-to [RIGHTSB - HALFSTROKE] barbottom
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
} }
create-glyph 'e.italic' : glyph-construction { create-glyph 'e.italic' 'e' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
@ -255,7 +251,7 @@ create-glyph 't' : glyph-construction {
} }
### a u ### a u
create-glyph 'a.upright' : glyph-construction { create-glyph 'a.upright' 'a' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
local bartop [XH * BARPOS + STROKE] local bartop [XH * BARPOS + STROKE]
@ -285,10 +281,10 @@ create-glyph 'a.upright' : glyph-construction {
:.heads-to UPWARD :.heads-to UPWARD
:.set-width 0 [STROKE * 0.4] :.set-width 0 [STROKE * 0.4]
} }
create-glyph 'a.italic' : glyph-construction { create-glyph 'a.italic' 'a' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include glyphs.'o.right' include : oRight
include : create-stroke include : create-stroke
:.start-from RIGHTSB 0 :.start-from RIGHTSB 0
:.heads-to UPWARD :.heads-to UPWARD
@ -398,7 +394,7 @@ create-glyph 'm' : glyph-construction {
} }
### i j l ### i j l
create-glyph 'dotlessi.straight' : glyph-construction { create-glyph 'dotlessi.straight' 'i' : glyph-construction {
dont-export dont-export
include eMarks include eMarks
include : create-stroke include : create-stroke
@ -408,17 +404,17 @@ create-glyph 'dotlessi.straight' : glyph-construction {
:.line-to MIDDLE XH :.line-to MIDDLE XH
:.heads-to UPWARD :.heads-to UPWARD
} }
create-glyph 'dotlessi.hooky' : glyph-construction { create-glyph 'dotlessi.hooky' 'i' : glyph-construction {
dont-export dont-export
include glyphs.'dotlessi.straight' AS_BASE include glyphs.'dotlessi.straight' AS_BASE
put-shapes : leftwardTopSerif MIDDLE XH LONGJUT put-shapes : leftwardTopSerif MIDDLE XH LONGJUT
} }
create-glyph 'dotlessi.zshaped' : glyph-construction { create-glyph 'dotlessi.zshaped' 'i' : glyph-construction {
dont-export dont-export
include glyphs.'dotlessi.hooky' AS_BASE include glyphs.'dotlessi.hooky' AS_BASE
put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT
} }
create-glyph 'dotlessi.serifed' : glyph-construction { create-glyph 'dotlessi.serifed' 'i' : glyph-construction {
dont-export dont-export
include eMarks include eMarks
@ -433,7 +429,7 @@ create-glyph 'dotlessi.serifed' : glyph-construction {
include : rightwardBottomSerif MIDDLE 0 LONGJUT include : rightwardBottomSerif MIDDLE 0 LONGJUT
include : leftwardBottomSerif MIDDLE 0 LONGJUT include : leftwardBottomSerif MIDDLE 0 LONGJUT
} }
select-variant 'dotlessi' 0x131 'serifed' select-variant 'dotlessi' 'i' 0x131 'serifed'
create-glyph 'i' : glyph-construction { create-glyph 'i' : glyph-construction {
set-width WIDTH set-width WIDTH
@ -442,7 +438,7 @@ create-glyph 'i' : glyph-construction {
include glyphs.dotAbove include glyphs.dotAbove
} }
create-glyph 'dotlessj.straight' : glyph-construction { create-glyph 'dotlessj.straight' 'j' : glyph-construction {
dont-export dont-export
set-anchor 'above' BASE [MIDDLE + JBALANCE] XH set-anchor 'above' BASE [MIDDLE + JBALANCE] XH
include : create-stroke include : create-stroke
@ -452,13 +448,13 @@ create-glyph 'dotlessj.straight' : glyph-construction {
:.line-to [MIDDLE + JBALANCE] 0 :.line-to [MIDDLE + JBALANCE] 0
:.arc-vh-to [MIDDLE + DESCENDER * 0.85] [DESCENDER + HALFSTROKE] :.arc-vh-to [MIDDLE + DESCENDER * 0.85] [DESCENDER + HALFSTROKE]
} }
create-glyph 'dotlessj.serifed' : glyph-construction { create-glyph 'dotlessj.serifed' 'j' : glyph-construction {
dont-export dont-export
include glyphs.'dotlessj.straight' AS_BASE include glyphs.'dotlessj.straight' AS_BASE
put-shapes : leftwardTopSerif [MIDDLE + JBALANCE] XH LONGJUT put-shapes : leftwardTopSerif [MIDDLE + JBALANCE] XH LONGJUT
} }
select-variant 'dotlessj' 0x237 'serifed' select-variant 'dotlessj' 'j' 0x237 'serifed'
create-glyph 'j' : glyph-construction { create-glyph 'j' : glyph-construction {
set-width WIDTH set-width WIDTH
assign-unicode 'j' assign-unicode 'j'
@ -467,7 +463,7 @@ create-glyph 'j' : glyph-construction {
include glyphs.dotAbove include glyphs.dotAbove
} }
create-glyph 'l.straight' : glyph-construction { create-glyph 'l.straight' 'l' : glyph-construction {
include bMarks include bMarks
dont-export dont-export
include : create-stroke include : create-stroke
@ -477,19 +473,19 @@ create-glyph 'l.straight' : glyph-construction {
:.line-to MIDDLE CAP :.line-to MIDDLE CAP
:.heads-to UPWARD :.heads-to UPWARD
} }
create-glyph 'l.hooky' : glyph-construction { create-glyph 'l.hooky' 'l' : glyph-construction {
include bMarks include bMarks
dont-export dont-export
include glyphs.'l.straight' include glyphs.'l.straight'
put-shapes : leftwardTopSerif MIDDLE CAP LONGJUT put-shapes : leftwardTopSerif MIDDLE CAP LONGJUT
} }
create-glyph 'l.zshaped' : glyph-construction { create-glyph 'l.zshaped' 'l' : glyph-construction {
include bMarks include bMarks
dont-export dont-export
include glyphs.'l.hooky' include glyphs.'l.hooky'
put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT put-shapes : rightwardBottomSerif MIDDLE 0 LONGJUT
} }
create-glyph 'l.serifed' : glyph-construction { create-glyph 'l.serifed' 'l' : glyph-construction {
include bMarks include bMarks
dont-export dont-export
local balance ILBALANCE local balance ILBALANCE
@ -715,8 +711,7 @@ create-glyph 'r' : glyph-construction {
} }
### f ### f
create-glyph 'fbar' : glyph-construction { define [fBar] : glyph-construction {
dont-export
include : create-stroke include : create-stroke
:.start-from [MIDDLE - LONGJUT] XH :.start-from [MIDDLE - LONGJUT] XH
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
@ -724,7 +719,7 @@ create-glyph 'fbar' : glyph-construction {
:.line-to [MIDDLE + LONGJUT] XH :.line-to [MIDDLE + LONGJUT] XH
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
} }
create-glyph 'longs.upright' : glyph-construction { create-glyph 'longs.upright' 'f' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include bMarks include bMarks
@ -744,7 +739,7 @@ define [eshHook attach] : glyph-construction {
:.arc-hv-to attach.x attach.y :.arc-hv-to attach.x attach.y
:.line-to attach.x [attach.y + STROKE] :.line-to attach.x [attach.y + STROKE]
} }
create-glyph 'longs.italic' : glyph-construction { create-glyph 'longs.italic' 'f' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include ifMarks include ifMarks
@ -757,7 +752,7 @@ create-glyph 'longs.italic' : glyph-construction {
:.arc-vh-to [MIDDLE + SHOOK * 2] [CAP - HALFSTROKE - O * 6] :.arc-vh-to [MIDDLE + SHOOK * 2] [CAP - HALFSTROKE - O * 6]
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
} }
create-glyph 'longs' : glyph-construction { create-glyph 'longs' 'f' : glyph-construction {
set-width WIDTH set-width WIDTH
assign-unicode 0x17f assign-unicode 0x17f
@ -771,5 +766,5 @@ create-glyph 'f' : glyph-construction {
set-width WIDTH set-width WIDTH
assign-unicode 'f' assign-unicode 'f'
include glyphs.longs AS_BASE include glyphs.longs AS_BASE
include glyphs.fbar include : fBar
} }

View file

@ -1,25 +1,25 @@
###### NUMBERS ###### NUMBERS
create-glyph 'zero.slashed' : glyph-construction { create-glyph 'zero.unslashed' 'zero' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include glyphs.O include : smallo CAP 0 SB RIGHTSB
}
create-glyph 'zero.slashed' 'zero' : glyph-construction {
set-width WIDTH
dont-export
include glyphs.'zero.unslashed'
local fine : adviceBlackness 9 local fine : adviceBlackness 9
include : create-stroke include : create-stroke
:.start-from [SB + STROKE / 2] [CAP * [1 - 0.77]] :.start-from [SB + STROKE / 2] [CAP * [1 - 0.77]]
:.set-width fine fine :.set-width fine fine
:.line-to [RIGHTSB - STROKE / 2] [CAP * 0.77] :.line-to [RIGHTSB - STROKE / 2] [CAP * 0.77]
} }
create-glyph 'zero.unslashed' : glyph-construction { create-glyph 'zero.dotted' 'zero' : glyph-construction {
set-width WIDTH set-width WIDTH
dont-export dont-export
include glyphs.O include glyphs.'zero.unslashed'
}
create-glyph 'zero.dotted' : glyph-construction {
set-width WIDTH
dont-export
include glyphs.O
local radius : Math.min DOTRADIUS [[RIGHTSB - SB - STROKE * 2] / 4] local radius : Math.min DOTRADIUS [[RIGHTSB - SB - STROKE * 2] / 4]
include : list { include : list {
Ring [CAPMIDDLE + radius] [CAPMIDDLE - radius] [MIDDLE + radius] [MIDDLE - radius] Ring [CAPMIDDLE + radius] [CAPMIDDLE - radius] [MIDDLE + radius] [MIDDLE - radius]

View file

@ -17,7 +17,7 @@ local belowMarkTop [0 - ACCENT * 0.35]
### Above marks ### Above marks
create-glyph 'dotAbove' : glyph-construction { create-glyph 'dotAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x307 assign-unicode 0x307
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -25,7 +25,7 @@ create-glyph 'dotAbove' : glyph-construction {
Ring [XH + ACCENT + DOTRADIUS] [XH + ACCENT - DOTRADIUS] [markMiddle - DOTRADIUS] [markMiddle + DOTRADIUS] Ring [XH + ACCENT + DOTRADIUS] [XH + ACCENT - DOTRADIUS] [markMiddle - DOTRADIUS] [markMiddle + DOTRADIUS]
} }
} }
create-glyph 'dieresisAbove' : glyph-construction { create-glyph 'dieresisAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x308 assign-unicode 0x308
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -34,7 +34,7 @@ create-glyph 'dieresisAbove' : glyph-construction {
Ring [XH + ACCENT + markDotsRadius] [XH + ACCENT - markDotsRadius] [markMiddle - markDotsRadius + markExtend] [markMiddle + markDotsRadius + markExtend] Ring [XH + ACCENT + markDotsRadius] [XH + ACCENT - markDotsRadius] [markMiddle - markDotsRadius + markExtend] [markMiddle + markDotsRadius + markExtend]
} }
} }
create-glyph 'ringAbove' : glyph-construction { create-glyph 'ringAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x30A assign-unicode 0x30A
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -47,7 +47,7 @@ create-glyph 'ringAbove' : glyph-construction {
} }
reverse-last reverse-last
} }
create-glyph 'graveAbove' : glyph-construction { create-glyph 'graveAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x300 assign-unicode 0x300
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -59,7 +59,7 @@ create-glyph 'graveAbove' : glyph-construction {
:.set-width markStress markStress :.set-width markStress markStress
:.set-samples 1 :.set-samples 1
} }
create-glyph 'acuteAbove' : glyph-construction { create-glyph 'acuteAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x301 assign-unicode 0x301
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -71,7 +71,7 @@ create-glyph 'acuteAbove' : glyph-construction {
:.set-width markStress markStress :.set-width markStress markStress
:.set-samples 1 :.set-samples 1
} }
create-glyph 'circumflexAbove' : glyph-construction { create-glyph 'circumflexAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x302 assign-unicode 0x302
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -90,7 +90,7 @@ create-glyph 'circumflexAbove' : glyph-construction {
:.heads-to UPWARD :.heads-to UPWARD
:.set-samples 1 :.set-samples 1
} }
create-glyph 'caronAbove' : glyph-construction { create-glyph 'caronAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x30c assign-unicode 0x30c
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -109,7 +109,7 @@ create-glyph 'caronAbove' : glyph-construction {
:.heads-to DOWNWARD :.heads-to DOWNWARD
:.set-samples 1 :.set-samples 1
} }
create-glyph 'tildeAbove' : glyph-construction { create-glyph 'tildeAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x303 assign-unicode 0x303
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -132,7 +132,7 @@ create-glyph 'tildeAbove' : glyph-construction {
:.cubic-to [mix leftEnd rightEnd tildeWaveX] [mix bot top tildeWave] [mix leftEnd rightEnd [1 - tildeWaveX]] [mix bot top [1 - tildeWave]] rightEnd [mix tbot ttop [1 - tildeWaveEnd]] :.cubic-to [mix leftEnd rightEnd tildeWaveX] [mix bot top tildeWave] [mix leftEnd rightEnd [1 - tildeWaveX]] [mix bot top [1 - tildeWave]] rightEnd [mix tbot ttop [1 - tildeWaveEnd]]
:.set-samples 11 :.set-samples 11
} }
create-glyph 'macronAbove' : glyph-construction { create-glyph 'macronAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x304 assign-unicode 0x304
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -147,7 +147,7 @@ create-glyph 'macronAbove' : glyph-construction {
:.line-to rightEnd [aboveMarkTop - DOTRADIUS] :.line-to rightEnd [aboveMarkTop - DOTRADIUS]
:.heads-to RIGHTWARD :.heads-to RIGHTWARD
} }
create-glyph 'breveAbove' : glyph-construction { create-glyph 'breveAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x306 assign-unicode 0x306
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -163,7 +163,7 @@ create-glyph 'breveAbove' : glyph-construction {
:.arc-hv-to rightEnd aboveMarkTop :.arc-hv-to rightEnd aboveMarkTop
:.heads-to UPWARD :.heads-to UPWARD
} }
create-glyph 'archAbove' : glyph-construction { create-glyph 'archAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x311 assign-unicode 0x311
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -179,7 +179,7 @@ create-glyph 'archAbove' : glyph-construction {
:.arc-hv-to rightEnd aboveMarkBot :.arc-hv-to rightEnd aboveMarkBot
:.heads-to DOWNWARD :.heads-to DOWNWARD
} }
create-glyph 'hookabove' : glyph-construction { create-glyph 'hookabove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x309 assign-unicode 0x309
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -198,7 +198,7 @@ create-glyph 'hookabove' : glyph-construction {
:.line-to [markMiddle - markExtend + fine] hookTop :.line-to [markMiddle - markExtend + fine] hookTop
:.heads-to LEFTWARD :.heads-to LEFTWARD
} }
create-glyph 'doubleGraveAbove' : glyph-construction { create-glyph 'doubleGraveAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x30F assign-unicode 0x30F
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -218,7 +218,7 @@ create-glyph 'doubleGraveAbove' : glyph-construction {
:.set-width markStress markStress :.set-width markStress markStress
:.set-samples 1 :.set-samples 1
} }
create-glyph 'doubleAcuteAbove' : glyph-construction { create-glyph 'doubleAcuteAbove' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x30B assign-unicode 0x30B
set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop set-anchor 'above' MARK markMiddle XH markMiddle aboveMarkTop
@ -240,7 +240,7 @@ create-glyph 'doubleAcuteAbove' : glyph-construction {
} }
### Below marks ### Below marks
create-glyph 'dotBelow' : glyph-construction { create-glyph 'dotBelow' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x323 assign-unicode 0x323
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot
@ -248,7 +248,7 @@ create-glyph 'dotBelow' : glyph-construction {
Ring [0 - ACCENT + DOTRADIUS] [0 - ACCENT - DOTRADIUS] [markMiddle - DOTRADIUS] [markMiddle + DOTRADIUS] Ring [0 - ACCENT + DOTRADIUS] [0 - ACCENT - DOTRADIUS] [markMiddle - DOTRADIUS] [markMiddle + DOTRADIUS]
} }
} }
create-glyph 'cedillaBelow' : glyph-construction { create-glyph 'cedillaBelow' '*' : glyph-construction {
set-width 0 set-width 0
assign-unicode 0x327 assign-unicode 0x327
set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot set-anchor 'below' MARK markMiddle 0 markMiddle belowMarkBot

View file

@ -52,3 +52,178 @@ create-glyph 'plusminus' : glyph-construction {
include glyphs.underscore include glyphs.underscore
include glyphs.plus include glyphs.plus
} }
define [Miniature glyphid fold scale] : begin {
local forkedPara : Object.create para
forkedPara.upmscale = 1
forkedPara.buildFor = glyphid
forkedPara.stroke = [adviceBlackness fold] / scale
forkedPara.sb = SB / 2
local forkFont : exports.build forkedPara
return forkFont.glyfMap`glyphid
}
define [CircledGlyph glyphid] : glyph-construction {
local sw [adviceBlackness 6]
include : create-glyph : glyph-construction {
include : Miniature glyphid 4.2 0.6
apply-transform : Upright
apply-transform : Scale 0.45
apply-transform : Translate [[WIDTH - WIDTH * 0.45] / 2] [sw * 2]
apply-transform : Italify
}
include : smallo [CAP * 0.45 + sw * 4] 0 SB RIGHTSB sw
apply-transform : Upright
apply-transform : Translate 0 [parenMid - [CAP * 0.45 + sw * 4] / 2]
apply-transform : Italify
}
define [createSuperscript unicode glyphid] : if glyphs`glyphid : begin {
create-glyph ['superscript_' + glyphid] : glyph-construction {
assign-unicode unicode
include : create-glyph : glyph-construction {
include : Miniature glyphid 4.2 0.6
apply-transform : Upright
apply-transform : Translate [-MIDDLE] [-CAP]
apply-transform : Scale 0.6
apply-transform : Translate MIDDLE CAP
apply-transform : Italify
}
}
}
define [createSubscript unicode glyphid] : if glyphs`glyphid : begin {
create-glyph ['subscript_' + glyphid] : glyph-construction {
assign-unicode unicode
include : create-glyph : glyph-construction {
include : Miniature glyphid 4.2 0.6
apply-transform : Upright
apply-transform : Translate [-MIDDLE] 0
apply-transform : Scale 0.6
apply-transform : Translate MIDDLE [-DESCENDER / 2]
apply-transform : Italify
}
}
}
create-glyph 'copyright' : glyph-construction {
assign-unicode 0xA9
include : CircledGlyph 'C'
}
create-glyph 'registered' : glyph-construction {
assign-unicode 0xAE
include : CircledGlyph 'R'
}
create-glyph 'ordfeminine' : glyph-construction {
assign-unicode 0xAA
include : Miniature 'a' 4.2 0.6
include : create-stroke
:.start-from SB DESCENDER
:.set-width STROKE 0
:.heads-to RIGHTWARD
:.line-to RIGHTSB DESCENDER
:.heads-to RIGHTWARD
apply-transform : Upright
apply-transform : Translate [-MIDDLE] [-XH]
apply-transform : Scale 0.6
apply-transform : Translate MIDDLE CAP
apply-transform : Italify
}
create-glyph 'ordmasculine' : glyph-construction {
assign-unicode 0xBA
include : Miniature 'o' 4.2 0.6
include : create-stroke
:.start-from SB DESCENDER
:.set-width STROKE 0
:.heads-to RIGHTWARD
:.line-to RIGHTSB DESCENDER
:.heads-to RIGHTWARD
apply-transform : Upright
apply-transform : Translate [-MIDDLE] [-XH]
apply-transform : Scale 0.6
apply-transform : Translate MIDDLE CAP
apply-transform : Italify
}
createSuperscript 0x2070 'zero'
createSuperscript 0x00B9 'one'
createSuperscript 0x00B2 'two'
createSuperscript 0x00B3 'three'
createSuperscript 0x2074 'four'
createSuperscript 0x2075 'five'
createSuperscript 0x2076 'six'
createSuperscript 0x2077 'seven'
createSuperscript 0x2078 'eight'
createSuperscript 0x2079 'nine'
createSuperscript 0x02B0 'h'
createSuperscript 0x02B2 'j'
createSuperscript 0x02B3 'r'
createSuperscript 0x02B7 'w'
createSuperscript 0x02B8 'y'
createSuperscript 0x02E1 'l'
createSuperscript 0x02E2 's'
createSuperscript 0x02E3 'x'
createSuperscript 0x2071 'i'
createSuperscript 0x207F 'n'
createSuperscript 0x1D43 'a'
createSuperscript 0x1D47 'b'
createSuperscript 0x1D48 'd'
createSuperscript 0x1D49 'e'
createSuperscript 0x1D4D 'g'
createSuperscript 0x1D4F 'k'
createSuperscript 0x1D50 'm'
createSuperscript 0x1D52 'o'
createSuperscript 0x1D56 'p'
createSuperscript 0x1D57 't'
createSuperscript 0x1D58 'u'
createSuperscript 0x1D5B 'v'
createSuperscript 0x1D9C 'c'
createSuperscript 0x1DA0 'f'
createSuperscript 0x1DBB 'z'
createSuperscript 0x1D2C 'A'
createSuperscript 0x1D2E 'B'
createSuperscript 0x1D30 'D'
createSuperscript 0x1D31 'E'
createSuperscript 0x1D33 'G'
createSuperscript 0x1D34 'H'
createSuperscript 0x1D35 'I'
createSuperscript 0x1D36 'J'
createSuperscript 0x1D37 'K'
createSuperscript 0x1D38 'L'
createSuperscript 0x1D39 'M'
createSuperscript 0x1D3A 'N'
createSuperscript 0x1D3C 'O'
createSuperscript 0x1D3E 'P'
createSuperscript 0x1D3F 'R'
createSuperscript 0x1D40 'T'
createSuperscript 0x1D41 'U'
createSuperscript 0x1D42 'W'
createSubscript 0x2080 'zero'
createSubscript 0x2081 'one'
createSubscript 0x2082 'two'
createSubscript 0x2083 'three'
createSubscript 0x2084 'four'
createSubscript 0x2085 'five'
createSubscript 0x2086 'six'
createSubscript 0x2087 'seven'
createSubscript 0x2088 'eight'
createSubscript 0x2089 'nine'
createSubscript 0x2090 'a'
createSubscript 0x2091 'e'
createSubscript 0x2092 'o'
createSubscript 0x2093 'x'
# createSubscript 0x2094 'reve'
createSubscript 0x2095 'h'
createSubscript 0x2096 'k'
createSubscript 0x2097 'l'
createSubscript 0x2098 'm'
createSubscript 0x2099 'n'
createSubscript 0x209A 'p'
createSubscript 0x209B 's'
createSubscript 0x209C 't'
createSubscript 0x1D62 'i'
createSubscript 0x1D63 'r'
createSubscript 0x1D64 'u'
createSubscript 0x1D65 'v'

View file

@ -1,5 +1,5 @@
{ {
var r0_bezierCubic2Q2, r0_tp, r0_Stroke, r0_id, r0_fallback, r0_aFunction, r0_Glyph, _r0_t0, _r0_t1, _r0_t2, _r0_t3, _r0_t4, _r0_t5, _r0_t6, _r0_t7, _r0_t8, _r0_t9, _r0_t10, _r0_t11, _r0_t12, _r0_t13, _r0_t14, _r0_t15; var r0_bezierCubic2Q2, r0_tp, r0_Stroke, r0_id, r0_fallback, r0_aFunction, r0_Glyph, _r0_t0, _r0_t1, _r0_t2, _r0_t3, _r0_t4, _r0_t5, _r0_t6, _r0_t7, _r0_t8, _r0_t9, _r0_t10, _r0_t11, _r0_t12, _r0_t13, _r0_t14, _r0_t15, _r0_t16;
r0_bezierCubic2Q2 = require('node-sfnt/lib/math/bezierCubic2Q2'); r0_bezierCubic2Q2 = require('node-sfnt/lib/math/bezierCubic2Q2');
r0_tp = require('./transform')['transformPoint']; r0_tp = require('./transform')['transformPoint'];
r0_Stroke = require('./stroke')['Stroke']; r0_Stroke = require('./stroke')['Stroke'];
@ -290,37 +290,48 @@
} else } else
return void 0; return void 0;
}; };
r0_Glyph['prototype']['create-stroke'] = function _r0_t14() { r0_Glyph['prototype']['apply-transform'] = function _r0_t14(r22_transform) {
var r22_s, _r22_t0, _r22_t1; var r22_transform, _r22_t0, _r22_t1, _r22_t2;
_r22_t0 = this; _r22_t0 = this;
r22_s = new r0_Stroke(); return _r22_t0['contours'] = _r22_t0['contours']['map'](function _r22_t2(r23_contour) {
r22_s['gizmo'] = Object['create'](_r22_t0['gizmo']); var r23_contour, _r23_t0, _r23_t1, _r23_t2;
return r22_s; return r23_contour['map'](function _r23_t2(r24_point) {
}; var r24_point, _r24_t0, _r24_t1;
r0_Glyph['prototype']['set-anchor'] = function _r0_t15(r23_id, r23_type, r23_x, r23_y, r23_mbx, r23_mby) { return r0_tp(r22_transform, r24_point);
var r23_id, r23_type, r23_x, r23_y, r23_mbx, r23_mby, r23_anchorpoint, r23_markbasepoint, _r23_t0, _r23_t1, _r23_t2;
_r23_t0 = this;
r23_anchorpoint = r0_tp(_r23_t0['gizmo'], {
'x': r23_x,
'y': r23_y
}); });
if (r23_mbx !== void 0 && r23_mby !== void 0) });
_r23_t2 = r0_tp(_r23_t0['gizmo'], { };
'x': r23_mbx, r0_Glyph['prototype']['create-stroke'] = function _r0_t15() {
'y': r23_mby var r25_s, _r25_t0, _r25_t1;
_r25_t0 = this;
r25_s = new r0_Stroke();
r25_s['gizmo'] = Object['create'](_r25_t0['gizmo']);
return r25_s;
};
r0_Glyph['prototype']['set-anchor'] = function _r0_t16(r26_id, r26_type, r26_x, r26_y, r26_mbx, r26_mby) {
var r26_id, r26_type, r26_x, r26_y, r26_mbx, r26_mby, r26_anchorpoint, r26_markbasepoint, _r26_t0, _r26_t1, _r26_t2;
_r26_t0 = this;
r26_anchorpoint = r0_tp(_r26_t0['gizmo'], {
'x': r26_x,
'y': r26_y
});
if (r26_mbx !== void 0 && r26_mby !== void 0)
_r26_t2 = r0_tp(_r26_t0['gizmo'], {
'x': r26_mbx,
'y': r26_mby
}); });
else else
_r23_t2 = { _r26_t2 = {
'x': void 0, 'x': void 0,
'y': void 0 'y': void 0
}; };
r23_markbasepoint = _r23_t2; r26_markbasepoint = _r26_t2;
return _r23_t0['anchors'][r23_id] = { return _r26_t0['anchors'][r26_id] = {
'x': r23_anchorpoint['x'], 'x': r26_anchorpoint['x'],
'y': r23_anchorpoint['y'], 'y': r26_anchorpoint['y'],
'type': r23_type, 'type': r26_type,
'mbx': r23_markbasepoint['x'], 'mbx': r26_markbasepoint['x'],
'mby': r23_markbasepoint['y'] 'mby': r26_markbasepoint['y']
}; };
}; };
exports['Glyph'] = r0_Glyph; exports['Glyph'] = r0_Glyph;

View file

@ -129,6 +129,9 @@ define [Glyph.prototype.include component copyAnchors] : begin {
* a * a
} }
} }
define [Glyph.prototype.apply-transform transform] : set this.contours : this.contours.map : function [contour] : begin {
return : contour.map : function [point] [tp transform point]
}
define [Glyph.prototype.create-stroke] : begin { define [Glyph.prototype.create-stroke] : begin {
local s : new Stroke local s : new Stroke
s.gizmo = [Object.create this.gizmo] s.gizmo = [Object.create this.gizmo]