super- and subscript brackets (note that there are no Unicode codepoints assigned to these glyphs; they are purely for substitution with sups and subs features)
This commit is contained in:
parent
c383db7c32
commit
8fd3df4c9f
2 changed files with 640 additions and 236 deletions
|
|
@ -216,92 +216,64 @@ left side cascades up to 5 characters:
|
|||
`)
|
||||
|
||||
|
||||
samples.set('Feature: sups', `
|
||||
Dedicated glyphs, corresponding ASCII, codepoint
|
||||
\u2070 \t 0 \t U+2070
|
||||
\u00b9 \t 1 \t U+00B9
|
||||
\u00b2 \t 2 \t U+00B2
|
||||
\u00b3 \t 3 \t U+00B3
|
||||
\u2074 \t 4 \t U+2074
|
||||
\u2075 \t 5 \t U+2075
|
||||
\u2076 \t 6 \t U+2076
|
||||
\u2077 \t 7 \t U+2077
|
||||
\u2078 \t 8 \t U+2078
|
||||
\u2079 \t 9 \t U+2079
|
||||
\u207a \t + \t U+207A
|
||||
\u207b \t - \t U+207B
|
||||
\u207c \t = \t U+207C
|
||||
\u207d \t ( \t U+207D
|
||||
\u207e \t ) \t U+207E
|
||||
\u1d43 \t a \t U+1D43
|
||||
\u1d47 \t b \t U+1D47
|
||||
\u1d9c \t c \t U+1D9C
|
||||
\u1d48 \t d \t U+1D48
|
||||
\u1d49 \t e \t U+1D49
|
||||
\u1da0 \t f \t U+1DA0
|
||||
\u1d4d \t g \t U+1D4D
|
||||
\u02b0 \t h \t U+02B0
|
||||
\u1da6 \t i \t U+1DA6
|
||||
\u02b2 \t j \t U+02B2
|
||||
\u1d4f \t k \t U+1D4F
|
||||
\u02e1 \t l \t U+02E1
|
||||
\u1d50 \t m \t U+1D50
|
||||
\u207f \t n \t U+207F
|
||||
\u1d52 \t o \t U+1D52
|
||||
\u1d56 \t p \t U+1D56
|
||||
\u146b \t q \t U+146B
|
||||
\u02b3 \t r \t U+02B3
|
||||
\u02e2 \t s \t U+02E2
|
||||
\u1d57 \t t \t U+1D57
|
||||
\u1d58 \t u \t U+1D58
|
||||
\u1d5b \t v \t U+1D5B
|
||||
\u02b7 \t w \t U+02B7
|
||||
\u02e3 \t x \t U+02E3
|
||||
\u02b8 \t y \t U+02B8
|
||||
\u1dbb \t z \t U+1DBB
|
||||
samples.set('Feature: sups & subs', `
|
||||
#!enableFeatures:tnum,sups
|
||||
Superscript and subscript tests
|
||||
|
||||
(enable sups feature to turn column 2 == column 1)
|
||||
m⁽ˣ⁾[ˣ][³]ᵗ⁺⁴x
|
||||
m(x)[x][3]t+4x
|
||||
|
||||
Table of super- and subscript characters.
|
||||
Enable/disable sups and subs feature to explore substitutions.
|
||||
|
||||
sups \t \t \t \t | subs
|
||||
———————————————————————
|
||||
0 \t \u2070 \t U+2070 \t | 0 \t \u2080 \t U+2080
|
||||
1 \t \u00b9 \t U+00B9 \t | 1 \t \u2081 \t U+2081
|
||||
2 \t \u00b2 \t U+00B2 \t | 2 \t \u2082 \t U+2082
|
||||
3 \t \u00b3 \t U+00B3 \t | 3 \t \u2083 \t U+2083
|
||||
4 \t \u2074 \t U+2074 \t | 4 \t \u2084 \t U+2084
|
||||
5 \t \u2075 \t U+2075 \t | 5 \t \u2085 \t U+2085
|
||||
6 \t \u2076 \t U+2076 \t | 6 \t \u2086 \t U+2086
|
||||
7 \t \u2077 \t U+2077 \t | 7 \t \u2087 \t U+2087
|
||||
8 \t \u2078 \t U+2078 \t | 8 \t \u2088 \t U+2088
|
||||
9 \t \u2079 \t U+2079 \t | 9 \t \u2089 \t U+2089
|
||||
+ \t \u207a \t U+207A \t | + \t \u208A \t U+208A
|
||||
- \t \u207b \t U+207B \t | - \t \u208B \t U+208B
|
||||
= \t \u207c \t U+207C \t | = \t \u208C \t U+208C
|
||||
( \t \u207d \t U+207D \t | ( \t \u208D \t U+208D
|
||||
) \t \u207e \t U+207E \t | ) \t \u208E \t U+208E
|
||||
[ \t \u0020 \t \t | [ \t
|
||||
] \t \u0020 \t \t | ] \t
|
||||
a \t \u1d43 \t U+1D43 \t | a \t \u2090 \t U+2090
|
||||
b \t \u1d47 \t U+1D47 \t | b \t
|
||||
c \t \u1d9c \t U+1D9C \t | c \t
|
||||
d \t \u1d48 \t U+1D48 \t | d \t
|
||||
e \t \u1d49 \t U+1D49 \t | e \t \u2091 \t U+2091
|
||||
f \t \u1da0 \t U+1DA0 \t | f \t
|
||||
g \t \u1d4d \t U+1D4D \t | g \t
|
||||
h \t \u02b0 \t U+02B0 \t | h \t \u2095 \t U+2095
|
||||
i \t \u1da6 \t U+1DA6 \t | i \t \u1D62 \t U+1D62
|
||||
j \t \u02b2 \t U+02B2 \t | j \t \u2C7C \t U+2C7C
|
||||
k \t \u1d4f \t U+1D4F \t | k \t \u2096 \t U+2096
|
||||
l \t \u02e1 \t U+02E1 \t | l \t \u2097 \t U+2097
|
||||
m \t \u1d50 \t U+1D50 \t | m \t \u2098 \t U+2098
|
||||
n \t \u207f \t U+207F \t | n \t \u2099 \t U+2099
|
||||
o \t \u1d52 \t U+1D52 \t | o \t \u2092 \t U+2092
|
||||
p \t \u1d56 \t U+1D56 \t | p \t \u209A \t U+209A
|
||||
q \t \u146b \t U+146B \t | q \t
|
||||
r \t \u02b3 \t U+02B3 \t | r \t \u1D63 \t U+1D63
|
||||
s \t \u02e2 \t U+02E2 \t | s \t \u209B \t U+209B
|
||||
t \t \u1d57 \t U+1D57 \t | t \t \u209C \t U+209C
|
||||
u \t \u1d58 \t U+1D58 \t | u \t \u1D64 \t U+1D64
|
||||
v \t \u1d5b \t U+1D5B \t | v \t \u1D65 \t U+1D65
|
||||
w \t \u02b7 \t U+02B7 \t | w \t
|
||||
x \t \u02e3 \t U+02E3 \t | x \t \u2093 \t x \t U+2093
|
||||
y \t \u02b8 \t U+02B8 \t | y \t
|
||||
z \t \u1dbb \t U+1DBB \t | z \t
|
||||
`)
|
||||
|
||||
|
||||
samples.set('Feature: subs', `
|
||||
Dedicated glyphs, corresponding ASCII, codepoint
|
||||
\u2080 \t 0 \t U+2080
|
||||
\u2081 \t 1 \t U+2081
|
||||
\u2082 \t 2 \t U+2082
|
||||
\u2083 \t 3 \t U+2083
|
||||
\u2084 \t 4 \t U+2084
|
||||
\u2085 \t 5 \t U+2085
|
||||
\u2086 \t 6 \t U+2086
|
||||
\u2087 \t 7 \t U+2087
|
||||
\u2088 \t 8 \t U+2088
|
||||
\u2089 \t 9 \t U+2089
|
||||
\u208A \t + \t U+208A
|
||||
\u208B \t - \t U+208B
|
||||
\u208C \t = \t U+208C
|
||||
\u208D \t ( \t U+208D
|
||||
\u208E \t ) \t U+208E
|
||||
\u2090 \t a \t U+2090
|
||||
\u2091 \t e \t U+2091
|
||||
\u2095 \t h \t U+2095
|
||||
\u1D62 \t i \t U+1D62
|
||||
\u2C7C \t j \t U+2C7C
|
||||
\u2096 \t k \t U+2096
|
||||
\u2097 \t l \t U+2097
|
||||
\u2098 \t m \t U+2098
|
||||
\u2099 \t n \t U+2099
|
||||
\u2092 \t o \t U+2092
|
||||
\u209A \t p \t U+209A
|
||||
\u1D63 \t r \t U+1D63
|
||||
\u209B \t s \t U+209B
|
||||
\u209C \t t \t U+209C
|
||||
\u1D64 \t u \t U+1D64
|
||||
\u1D65 \t v \t U+1D65
|
||||
\u2093 \t x \t U+2093
|
||||
|
||||
(enable subs feature to turn column 2 == column 1)
|
||||
`)
|
||||
|
||||
|
||||
// From http://justanotherfoundry.com/generator
|
||||
samples.set('Kerning body en',
|
||||
|
|
@ -1886,59 +1858,6 @@ function main() {
|
|||
})
|
||||
}
|
||||
|
||||
// sample text
|
||||
const samplesSelect = document.querySelector('select[name="sample"]')
|
||||
for (let [k,v] of samples) {
|
||||
const opt = document.createElement('option')
|
||||
opt.innerText = k
|
||||
if (v) {
|
||||
opt.value = k
|
||||
} else {
|
||||
opt.disabled = true
|
||||
}
|
||||
samplesSelect.appendChild(opt)
|
||||
}
|
||||
sampleVar = vars.bind('sample', samplesSelect, (e, v) => {
|
||||
let sampleText = samples.get(v) || ''+v
|
||||
|
||||
if (v == 'Repertoire') {
|
||||
repertoireControl.style.display = null
|
||||
} else {
|
||||
repertoireControl.style.display = 'none'
|
||||
}
|
||||
|
||||
if (typeof sampleText == 'object' && sampleText.toHTML) {
|
||||
const html = sampleText.toHTML()
|
||||
interUISample.innerHTML = html
|
||||
secondarySample.innerHTML = html
|
||||
} else {
|
||||
sampleText = String(sampleText).replace(/^[\s\r\n\r]+|[\s\r\n\r]+$/g, '')
|
||||
if (sampleText) {
|
||||
interUISample.innerText = sampleText
|
||||
secondarySample.innerText = sampleText
|
||||
}
|
||||
}
|
||||
|
||||
if (v == 'Repertoire') {
|
||||
requestAnimationFrame(() => {
|
||||
if (sizeVar) {
|
||||
sizeVar.refreshValue(null)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
vars.bind('repertoireOrder', (e, v) => {
|
||||
let currOrder = repertoireOrder
|
||||
if (v == 'u') {
|
||||
repertoireOrder = RepertoireOrderUnicode
|
||||
} else {
|
||||
repertoireOrder = RepertoireOrderGlyphList
|
||||
}
|
||||
if (sampleVar && currOrder != repertoireOrder) {
|
||||
sampleVar.refreshValue(null)
|
||||
}
|
||||
})
|
||||
|
||||
const lineHeightInput = document.querySelector('[name="lineHeight"]')
|
||||
let measurePending = false
|
||||
|
|
@ -1982,6 +1901,67 @@ function main() {
|
|||
setCSSProp('-ms-' + name, value)
|
||||
}
|
||||
|
||||
|
||||
let feats = new Map()
|
||||
let featVars = new Map()
|
||||
let updateFeaturesStyleTimer = null
|
||||
|
||||
function updateFeaturesStyle() {
|
||||
let css = Array.from(feats).map(f => `"${f[0]}" ${f[1]}`).join(', ')
|
||||
setCSSProp('font-feature-settings', css)
|
||||
}
|
||||
|
||||
function scheduleUpdateFeaturesStyle() {
|
||||
if (updateFeaturesStyleTimer === null) {
|
||||
updateFeaturesStyleTimer = setTimeout(() => {
|
||||
updateFeaturesStyleTimer = null
|
||||
updateFeaturesStyle()
|
||||
}, 1)
|
||||
}
|
||||
}
|
||||
|
||||
function setFeature(feat, val, dontUpdateVar/*=false*/) {
|
||||
if (typeof val == 'boolean') {
|
||||
val = val ? 1 : 0
|
||||
}
|
||||
let prevVal = feats.get(feat)
|
||||
if (prevVal !== val) {
|
||||
feats.set(feat, val)
|
||||
scheduleUpdateFeaturesStyle()
|
||||
if (!dontUpdateVar) {
|
||||
let vr = featVars.get(feat)
|
||||
if (vr) {
|
||||
vr.setValue(val)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// sample text
|
||||
const samplesSelect = document.querySelector('select[name="sample"]')
|
||||
for (let [k,v] of samples) {
|
||||
const opt = document.createElement('option')
|
||||
opt.innerText = k
|
||||
if (v) {
|
||||
opt.value = k
|
||||
} else {
|
||||
opt.disabled = true
|
||||
}
|
||||
samplesSelect.appendChild(opt)
|
||||
}
|
||||
|
||||
vars.bind('repertoireOrder', (e, v) => {
|
||||
let currOrder = repertoireOrder
|
||||
if (v == 'u') {
|
||||
repertoireOrder = RepertoireOrderUnicode
|
||||
} else {
|
||||
repertoireOrder = RepertoireOrderGlyphList
|
||||
}
|
||||
if (sampleVar && currOrder != repertoireOrder) {
|
||||
sampleVar.refreshValue(null)
|
||||
}
|
||||
})
|
||||
|
||||
const boxes = document.querySelector('boxes')
|
||||
sizeVar = vars.bind('size', (e, v) => {
|
||||
boxes.style.display = (v > 20) ? 'none' : null
|
||||
|
|
@ -2213,73 +2193,70 @@ function main() {
|
|||
// setCSSProp('font-variant-numeric', e.value = v)
|
||||
// })
|
||||
|
||||
let features = new Set()
|
||||
for (let e of Array.prototype.slice.call(document.querySelectorAll('input.featopt'))) {
|
||||
|
||||
for (let e of Array.from(document.querySelectorAll('input.featopt'))) {
|
||||
let p = e.name.replace(/^feat\:/, '').split('=')
|
||||
let name = p[0], value = p[1] || '1'
|
||||
vars.bind('feat-' + name, e, (e, on) => {
|
||||
let val = '"' + name + '" ' + value
|
||||
if (on) {
|
||||
features.add(val)
|
||||
} else {
|
||||
features.delete(val)
|
||||
}
|
||||
setCSSProp('font-feature-settings', Array.from(features).join(', '))
|
||||
let name = p[0]
|
||||
let valueOn = parseInt(p[1] || '1')
|
||||
let valueOff = valueOn == 0 ? 1 : 0
|
||||
let vr = vars.bind('feat-' + name, e, (e, on) => {
|
||||
setFeature(name, on ? valueOn : valueOff, /*dontUpdateVar=*/true)
|
||||
})
|
||||
featVars.set(name, vr)
|
||||
}
|
||||
|
||||
function initCanvas(canvas) {
|
||||
const w = parseInt(canvas.width)
|
||||
const h = parseInt(canvas.height)
|
||||
const scale = window.devicePixelRatio || 1
|
||||
if (scale != 1) {
|
||||
canvas.width = w * scale
|
||||
canvas.height = h * scale
|
||||
canvas.style.width = w + 'px'
|
||||
canvas.style.height = h + 'px'
|
||||
updateFeaturesStyle()
|
||||
|
||||
sampleVar = vars.bind('sample', samplesSelect, (e, v) => {
|
||||
let sampleText = samples.get(v) || ''+v
|
||||
|
||||
if (v == 'Repertoire') {
|
||||
repertoireControl.style.display = null
|
||||
} else {
|
||||
repertoireControl.style.display = 'none'
|
||||
}
|
||||
}
|
||||
|
||||
initCanvas(renderCanvas)
|
||||
initCanvas(displayCanvas)
|
||||
if (typeof sampleText == 'object' && sampleText.toHTML) {
|
||||
const html = sampleText.toHTML()
|
||||
interUISample.innerHTML = html
|
||||
secondarySample.innerHTML = html
|
||||
} else {
|
||||
// look for directive
|
||||
// #!directive:value
|
||||
sampleText = String(sampleText).replace(/^[\s\r\n\r]+|[\s\r\n\r]+$/g, '')
|
||||
let m = /(?:^|\n)#\!([\w_\-]+):(.+)(?:\n|$)/.exec(sampleText)
|
||||
if (m) {
|
||||
// parse directive
|
||||
sampleText = (
|
||||
sampleText.substring(0, m.index) +
|
||||
sampleText.substr(m.index + m[0].length)
|
||||
)
|
||||
let directive = m[1].toLowerCase()
|
||||
console.log('dir', m[1], '=>', m[2])
|
||||
if (directive == 'enablefeatures') {
|
||||
// #!enableFeatures:tnum,dlig
|
||||
for (let feat of m[2].toLowerCase().split(/\s*,\s*/)) {
|
||||
setFeature(feat, 1)
|
||||
}
|
||||
} else {
|
||||
console.warn(`ignoring unknown directive ${m[0]} in sample text`)
|
||||
}
|
||||
}
|
||||
if (sampleText) {
|
||||
interUISample.innerText = sampleText
|
||||
secondarySample.innerText = sampleText
|
||||
}
|
||||
}
|
||||
|
||||
function rasterize(text) {
|
||||
const ctx = renderCanvas.getContext('2d')
|
||||
const width = parseInt(renderCanvas.width)
|
||||
const height = parseInt(renderCanvas.height)
|
||||
|
||||
ctx.clearRect(0, 0, width, height)
|
||||
|
||||
ctx.font = '22px/36px ' + fontFamilyName
|
||||
ctx.fillText(text, 4, 24)
|
||||
|
||||
ctx.font = '11px/18px ' + fontFamilyName
|
||||
ctx.fillText(text, 4, 44)
|
||||
|
||||
const zctx = displayCanvas.getContext('2d')
|
||||
zctx.webkitImageSmoothingEnabled = false;
|
||||
zctx.mozImageSmoothingEnabled = false;
|
||||
zctx.imageSmoothingEnabled = false;
|
||||
const zwidth = parseInt(displayCanvas.width)
|
||||
const zheight = parseInt(displayCanvas.height)
|
||||
zctx.clearRect(0, 0, zwidth, zheight)
|
||||
zctx.drawImage(
|
||||
renderCanvas,
|
||||
0, 0, width, height,
|
||||
0, 0, zwidth, zheight
|
||||
)
|
||||
}
|
||||
|
||||
let didSetInitialValue = false
|
||||
|
||||
let rasterizePhraseVar = vars.bind('rasterizePhrase', (e, v) => {
|
||||
if (document.readyState == 'complete') {
|
||||
rasterize(v)
|
||||
if (v == 'Repertoire') {
|
||||
requestAnimationFrame(() => {
|
||||
if (sizeVar) {
|
||||
sizeVar.refreshValue(null)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
document.onreadystatechange = () => vars.refreshValue('rasterizePhrase')
|
||||
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
515
src/Inter.glyphs
515
src/Inter.glyphs
|
|
@ -1,8 +1,10 @@
|
|||
{
|
||||
.appVersion = "1208";
|
||||
DisplayStrings = (
|
||||
"/crossbar bdH/dcroat",
|
||||
"/dong/dcroat"
|
||||
"m/parenleft.sups/x.sups/parenright.sups/bracketleft.sups/x.sups/bracketright.sups/bracketleft.sups ³/bracketright.sups/t.sups/plus.sups/four.sups x/parenleft.subs/x.subs/parenright.subs/bracketleft.subs/x.subs/bracketright.subs",
|
||||
"/parenleft.subs/x.subs/parenright.subs/bracketleft.subs/x.subs/bracketright.subs",
|
||||
"/bracketleft.subs/bracketright.subs",
|
||||
"/t.sups/four.sups/plus.sups"
|
||||
);
|
||||
classes = (
|
||||
{
|
||||
|
|
@ -1483,6 +1485,8 @@ eight.sups,
|
|||
nine.sups,
|
||||
parenleft.sups,
|
||||
parenright.sups,
|
||||
bracketleft.sups,
|
||||
bracketright.sups,
|
||||
plus.sups,
|
||||
minus.sups,
|
||||
equal.sups,
|
||||
|
|
@ -1524,6 +1528,8 @@ eight.subs,
|
|||
nine.subs,
|
||||
parenleft.subs,
|
||||
parenright.subs,
|
||||
bracketleft.subs,
|
||||
bracketright.subs,
|
||||
plus.subs,
|
||||
minus.subs,
|
||||
equal.subs,
|
||||
|
|
@ -2583,11 +2589,11 @@ code = "sub exclam question by interrobang;\012sub question exclam by interroban
|
|||
name = dlig;
|
||||
},
|
||||
{
|
||||
code = "sub a by a.sups;\012sub b by b.sups;\012sub c by c.sups;\012sub d by d.sups;\012sub e by e.sups;\012sub f by f.sups;\012sub g by g.sups;\012sub h by h.sups;\012sub i by i.sups;\012sub j by j.sups;\012sub k by k.sups;\012sub l by l.sups;\012sub m by m.sups;\012sub n by n.sups;\012sub o by o.sups;\012sub p by p.sups;\012sub q by q.sups;\012sub r by r.sups;\012sub s by s.sups;\012sub t by t.sups;\012sub u by u.sups;\012sub v by v.sups;\012sub w by w.sups;\012sub x by x.sups;\012sub y by y.sups;\012sub z by z.sups;\012sub [zero zero.slash] by zero.sups;\012sub [one one.ss01] by one.sups;\012sub two by two.sups;\012sub three by three.sups;\012sub [four four.ss01] by four.sups;\012sub five by five.sups;\012sub [six six.ss01] by six.sups;\012sub seven by seven.sups;\012sub eight by eight.sups;\012sub [nine nine.ss01] by nine.sups;\012sub [parenleft parenleft.case] by parenleft.sups;\012sub [parenright parenright.case] by parenright.sups;\012sub [plus plus.case] by plus.sups;\012sub [minus minus.case hyphen hyphen.case] by minus.sups;\012sub [equal equal.case] by equal.sups;";
|
||||
code = "sub a by a.sups;\012sub b by b.sups;\012sub c by c.sups;\012sub d by d.sups;\012sub e by e.sups;\012sub f by f.sups;\012sub g by g.sups;\012sub h by h.sups;\012sub i by i.sups;\012sub j by j.sups;\012sub k by k.sups;\012sub [l l.ss02] by l.sups;\012sub m by m.sups;\012sub n by n.sups;\012sub o by o.sups;\012sub p by p.sups;\012sub q by q.sups;\012sub [r r.1] by r.sups;\012sub s by s.sups;\012sub t by t.sups;\012sub u by u.sups;\012sub v by v.sups;\012sub w by w.sups;\012sub x by x.sups;\012sub y by y.sups;\012sub z by z.sups;\012sub [zero zero.slash zero.tf zero.tf.slash] by zero.sups;\012sub [one one.ss01 one.tf one.tf.ss01] by one.sups;\012sub [two two.tf] by two.sups;\012sub [three three.1 three.tf three.1.tf] by three.sups;\012sub [four four.ss01 four.tf four.tf.ss01] by four.sups;\012sub [five five.tf] by five.sups;\012sub [six six.ss01 six.tf six.tf.ss01] by six.sups;\012sub [seven seven.tf] by seven.sups;\012sub [eight eight.tf] by eight.sups;\012sub [nine nine.ss01 nine.tf nine.tf.ss01] by nine.sups;\012sub [parenleft parenleft.case] by parenleft.sups;\012sub [parenright parenright.case] by parenright.sups;\012sub [bracketleft bracketleft.case] by bracketleft.sups;\012sub [bracketright bracketright.case] by bracketright.sups;\012sub [plus plus.case] by plus.sups;\012sub [minus minus.case hyphen hyphen.case] by minus.sups;\012sub [equal equal.case] by equal.sups;\012";
|
||||
name = sups;
|
||||
},
|
||||
{
|
||||
code = "sub a by a.subs;\012sub b by b.subs;\012sub c by c.subs;\012sub d by d.subs;\012sub e by e.subs;\012sub f by f.subs;\012sub g by g.subs;\012sub h by h.subs;\012sub i by i.subs;\012sub j by j.subs;\012sub k by k.subs;\012sub l by l.subs;\012sub m by m.subs;\012sub n by n.subs;\012sub o by o.subs;\012sub p by p.subs;\012sub q by q.subs;\012sub r by r.subs;\012sub s by s.subs;\012sub t by t.subs;\012sub u by u.subs;\012sub v by v.subs;\012sub w by w.subs;\012sub x by x.subs;\012sub y by y.subs;\012sub z by z.subs;\012sub [zero zero.slash] by zero.subs;\012sub [one one.ss01] by one.subs;\012sub two by two.subs;\012sub three by three.subs;\012sub [four four.ss01] by four.subs;\012sub five by five.subs;\012sub [six six.ss01] by six.subs;\012sub seven by seven.subs;\012sub eight by eight.subs;\012sub [nine nine.ss01] by nine.subs;\012sub [parenleft parenleft.case] by parenleft.subs;\012sub [parenright parenright.case] by parenright.subs;\012sub [plus plus.case] by plus.subs;\012sub [minus minus.case hyphen hyphen.case] by minus.subs;\012sub [equal equal.case] by equal.subs;";
|
||||
code = "sub a by a.subs;\012sub b by b.subs;\012sub c by c.subs;\012sub d by d.subs;\012sub e by e.subs;\012sub f by f.subs;\012sub g by g.subs;\012sub h by h.subs;\012sub i by i.subs;\012sub j by j.subs;\012sub k by k.subs;\012sub [l l.ss02] by l.subs;\012sub m by m.subs;\012sub n by n.subs;\012sub o by o.subs;\012sub p by p.subs;\012sub q by q.subs;\012sub [r r.1] by r.subs;\012sub s by s.subs;\012sub t by t.subs;\012sub u by u.subs;\012sub v by v.subs;\012sub w by w.subs;\012sub x by x.subs;\012sub y by y.subs;\012sub z by z.subs;\012sub [zero zero.slash zero.tf zero.tf.slash] by zero.subs;\012sub [one one.ss01 one.tf one.tf.ss01] by one.subs;\012sub [two two.tf] by two.subs;\012sub [three three.1 three.tf three.1.tf] by three.subs;\012sub [four four.ss01 four.tf four.tf.ss01] by four.subs;\012sub [five five.tf] by five.subs;\012sub [six six.ss01 six.tf six.tf.ss01] by six.subs;\012sub [seven seven.tf] by seven.subs;\012sub [eight eight.tf] by eight.subs;\012sub [nine nine.ss01 nine.tf nine.tf.ss01] by nine.subs;\012sub [parenleft parenleft.case] by parenleft.subs;\012sub [parenright parenright.case] by parenright.subs;\012sub [bracketleft bracketleft.case] by bracketleft.subs;\012sub [bracketright bracketright.case] by bracketright.subs;\012sub [plus plus.case] by plus.subs;\012sub [minus minus.case hyphen hyphen.case] by minus.subs;\012sub [equal equal.case] by equal.subs;\012";
|
||||
name = subs;
|
||||
},
|
||||
{
|
||||
|
|
@ -227390,7 +227396,7 @@ source = nine;
|
|||
{
|
||||
color = 1;
|
||||
glyphname = parenleft.sups;
|
||||
lastChange = "2019-01-20 01:56:59 +0000";
|
||||
lastChange = "2019-02-03 20:53:30 +0000";
|
||||
layers = (
|
||||
{
|
||||
layerId = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
|
||||
|
|
@ -227431,20 +227437,20 @@ paths = (
|
|||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"272 1252 OFFCURVE",
|
||||
"308 980 OFFCURVE",
|
||||
"432 736 CURVE",
|
||||
"636 736 LINE",
|
||||
"532 936 OFFCURVE",
|
||||
"496 1288 OFFCURVE",
|
||||
"544 1576 CURVE SMOOTH",
|
||||
"596 1888 OFFCURVE",
|
||||
"752 2232 OFFCURVE",
|
||||
"916 2428 CURVE",
|
||||
"712 2428 LINE",
|
||||
"500 2172 OFFCURVE",
|
||||
"376 1896 OFFCURVE",
|
||||
"324 1580 CURVE SMOOTH"
|
||||
"268 1252 OFFCURVE",
|
||||
"306 980 OFFCURVE",
|
||||
"430 736 CURVE",
|
||||
"634 736 LINE",
|
||||
"530 936 OFFCURVE",
|
||||
"494 1288 OFFCURVE",
|
||||
"542 1576 CURVE SMOOTH",
|
||||
"594 1888 OFFCURVE",
|
||||
"750 2232 OFFCURVE",
|
||||
"914 2428 CURVE",
|
||||
"710 2428 LINE",
|
||||
"498 2172 OFFCURVE",
|
||||
"374 1896 OFFCURVE",
|
||||
"322 1580 CURVE SMOOTH"
|
||||
);
|
||||
}
|
||||
);
|
||||
|
|
@ -227456,7 +227462,7 @@ weight = -50;
|
|||
width = 66.6;
|
||||
};
|
||||
};
|
||||
width = 716;
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
layerId = "5C20EF92-B63D-42A8-8878-93C2863E0093";
|
||||
|
|
@ -227586,7 +227592,7 @@ verticalShift = 1024;
|
|||
width = 66.6;
|
||||
};
|
||||
};
|
||||
width = 604;
|
||||
width = 608;
|
||||
}
|
||||
);
|
||||
leftKerningGroup = parenleft.sups;
|
||||
|
|
@ -227601,7 +227607,7 @@ source = parenleft;
|
|||
{
|
||||
color = 1;
|
||||
glyphname = parenright.sups;
|
||||
lastChange = "2019-01-20 01:56:59 +0000";
|
||||
lastChange = "2019-02-03 20:54:12 +0000";
|
||||
layers = (
|
||||
{
|
||||
layerId = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
|
||||
|
|
@ -227642,20 +227648,20 @@ paths = (
|
|||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"716 1916 OFFCURVE",
|
||||
"676 2180 OFFCURVE",
|
||||
"552 2428 CURVE",
|
||||
"348 2428 LINE",
|
||||
"452 2224 OFFCURVE",
|
||||
"492 1888 OFFCURVE",
|
||||
"440 1576 CURVE SMOOTH",
|
||||
"388 1272 OFFCURVE",
|
||||
"236 932 OFFCURVE",
|
||||
"68 736 CURVE",
|
||||
"272 736 LINE",
|
||||
"480 980 OFFCURVE",
|
||||
"608 1260 OFFCURVE",
|
||||
"660 1572 CURVE SMOOTH"
|
||||
"715 1916 OFFCURVE",
|
||||
"674 2180 OFFCURVE",
|
||||
"550 2428 CURVE",
|
||||
"346 2428 LINE",
|
||||
"450 2224 OFFCURVE",
|
||||
"490 1888 OFFCURVE",
|
||||
"438 1576 CURVE SMOOTH",
|
||||
"387 1272 OFFCURVE",
|
||||
"234 932 OFFCURVE",
|
||||
"66 736 CURVE",
|
||||
"270 736 LINE",
|
||||
"478 980 OFFCURVE",
|
||||
"606 1260 OFFCURVE",
|
||||
"658 1572 CURVE SMOOTH"
|
||||
);
|
||||
}
|
||||
);
|
||||
|
|
@ -227733,7 +227739,7 @@ weight = -300;
|
|||
width = 66.6;
|
||||
};
|
||||
};
|
||||
width = 824;
|
||||
width = 828;
|
||||
},
|
||||
{
|
||||
layerId = "B1F27B51-9973-4381-9301-4FE46FE1CA59";
|
||||
|
|
@ -227797,10 +227803,11 @@ verticalShift = 1024;
|
|||
width = 66.6;
|
||||
};
|
||||
};
|
||||
width = 604;
|
||||
width = 608;
|
||||
}
|
||||
);
|
||||
leftKerningGroup = parenright.sups;
|
||||
widthMetricsKey = parenleft.sups;
|
||||
rightKerningGroup = parenright.sups;
|
||||
unicode = 207E;
|
||||
userData = {
|
||||
|
|
@ -227811,6 +227818,292 @@ source = parenright;
|
|||
},
|
||||
{
|
||||
color = 1;
|
||||
glyphname = bracketleft.sups;
|
||||
lastChange = "2019-02-03 21:03:03 +0000";
|
||||
layers = (
|
||||
{
|
||||
background = {
|
||||
components = (
|
||||
{
|
||||
name = parenleft.sups;
|
||||
}
|
||||
);
|
||||
};
|
||||
layerId = "B1F27B51-9973-4381-9301-4FE46FE1CA59";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"544 748 LINE",
|
||||
"544 812 LINE",
|
||||
"300 812 LINE",
|
||||
"300 2388 LINE",
|
||||
"544 2388 LINE",
|
||||
"544 2452 LINE",
|
||||
"236 2452 LINE",
|
||||
"236 748 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
layerId = "200BE2C5-40F6-4CF4-AF4F-A33C0CC0964F";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"540 748 LINE",
|
||||
"550 812 LINE",
|
||||
"306 812 LINE",
|
||||
"568 2388 LINE",
|
||||
"812 2388 LINE",
|
||||
"822 2452 LINE",
|
||||
"514 2452 LINE",
|
||||
"232 748 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
background = {
|
||||
components = (
|
||||
{
|
||||
name = parenleft.sups;
|
||||
}
|
||||
);
|
||||
};
|
||||
layerId = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"672 736 LINE",
|
||||
"672 932 LINE",
|
||||
"430 932 LINE",
|
||||
"430 2232 LINE",
|
||||
"672 2232 LINE",
|
||||
"672 2428 LINE",
|
||||
"206 2428 LINE",
|
||||
"206 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
layerId = "11F4534A-B963-4AB5-820F-DAF9A20CD933";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"666 736 LINE",
|
||||
"698 932 LINE",
|
||||
"456 932 LINE",
|
||||
"672 2232 LINE",
|
||||
"914 2232 LINE",
|
||||
"946 2428 LINE",
|
||||
"480 2428 LINE",
|
||||
"200 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
background = {
|
||||
components = (
|
||||
{
|
||||
name = parenleft.sups;
|
||||
}
|
||||
);
|
||||
};
|
||||
layerId = "5C20EF92-B63D-42A8-8878-93C2863E0093";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"800 736 LINE",
|
||||
"800 1008 LINE",
|
||||
"558 1008 LINE",
|
||||
"558 2156 LINE",
|
||||
"800 2156 LINE",
|
||||
"800 2428 LINE",
|
||||
"206 2428 LINE",
|
||||
"206 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 828;
|
||||
},
|
||||
{
|
||||
layerId = "D0EC06BF-13F9-4C88-A6F5-B8203AF6C77E";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"794 736 LINE",
|
||||
"840 1008 LINE",
|
||||
"598 1008 LINE",
|
||||
"788 2156 LINE",
|
||||
"1030 2156 LINE",
|
||||
"1074 2428 LINE",
|
||||
"480 2428 LINE",
|
||||
"200 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 828;
|
||||
}
|
||||
);
|
||||
widthMetricsKey = parenleft.sups;
|
||||
},
|
||||
{
|
||||
color = 1;
|
||||
glyphname = bracketright.sups;
|
||||
lastChange = "2019-02-03 21:03:03 +0000";
|
||||
layers = (
|
||||
{
|
||||
background = {
|
||||
components = (
|
||||
{
|
||||
name = parenright.sups;
|
||||
}
|
||||
);
|
||||
};
|
||||
layerId = "B1F27B51-9973-4381-9301-4FE46FE1CA59";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"372 748 LINE",
|
||||
"372 2452 LINE",
|
||||
"64 2452 LINE",
|
||||
"64 2388 LINE",
|
||||
"308 2388 LINE",
|
||||
"308 812 LINE",
|
||||
"64 812 LINE",
|
||||
"64 748 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
layerId = "200BE2C5-40F6-4CF4-AF4F-A33C0CC0964F";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"368 748 LINE",
|
||||
"650 2452 LINE",
|
||||
"342 2452 LINE",
|
||||
"332 2388 LINE",
|
||||
"576 2388 LINE",
|
||||
"314 812 LINE",
|
||||
"70 812 LINE",
|
||||
"60 748 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
background = {
|
||||
components = (
|
||||
{
|
||||
name = parenright.sups;
|
||||
}
|
||||
);
|
||||
};
|
||||
layerId = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"506 736 LINE",
|
||||
"506 2428 LINE",
|
||||
"40 2428 LINE",
|
||||
"40 2232 LINE",
|
||||
"282 2232 LINE",
|
||||
"282 932 LINE",
|
||||
"40 932 LINE",
|
||||
"40 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
layerId = "11F4534A-B963-4AB5-820F-DAF9A20CD933";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"502 736 LINE",
|
||||
"782 2428 LINE",
|
||||
"316 2428 LINE",
|
||||
"284 2232 LINE",
|
||||
"526 2232 LINE",
|
||||
"310 932 LINE",
|
||||
"68 932 LINE",
|
||||
"36 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
background = {
|
||||
components = (
|
||||
{
|
||||
name = parenright.sups;
|
||||
}
|
||||
);
|
||||
};
|
||||
layerId = "5C20EF92-B63D-42A8-8878-93C2863E0093";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"622 736 LINE",
|
||||
"622 2428 LINE",
|
||||
"28 2428 LINE",
|
||||
"28 2156 LINE",
|
||||
"270 2156 LINE",
|
||||
"270 1008 LINE",
|
||||
"28 1008 LINE",
|
||||
"28 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 828;
|
||||
},
|
||||
{
|
||||
layerId = "D0EC06BF-13F9-4C88-A6F5-B8203AF6C77E";
|
||||
paths = (
|
||||
{
|
||||
closed = 1;
|
||||
nodes = (
|
||||
"616 736 LINE",
|
||||
"896 2428 LINE",
|
||||
"302 2428 LINE",
|
||||
"258 2156 LINE",
|
||||
"500 2156 LINE",
|
||||
"310 1008 LINE",
|
||||
"68 1008 LINE",
|
||||
"22 736 LINE"
|
||||
);
|
||||
}
|
||||
);
|
||||
width = 828;
|
||||
}
|
||||
);
|
||||
widthMetricsKey = parenleft.sups;
|
||||
},
|
||||
{
|
||||
color = 1;
|
||||
glyphname = plus.sups;
|
||||
lastChange = "2019-01-20 01:56:59 +0000";
|
||||
layers = (
|
||||
|
|
@ -230904,7 +231197,7 @@ unicode = 2089;
|
|||
{
|
||||
color = 2;
|
||||
glyphname = parenleft.subs;
|
||||
lastChange = "2018-12-31 21:21:38 +0000";
|
||||
lastChange = "2019-02-03 20:57:54 +0000";
|
||||
layers = (
|
||||
{
|
||||
components = (
|
||||
|
|
@ -230924,7 +231217,7 @@ transform = "{1, 0, 0, 1, -228, -1376}";
|
|||
}
|
||||
);
|
||||
layerId = "11F4534A-B963-4AB5-820F-DAF9A20CD933";
|
||||
width = 716;
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
|
|
@ -230964,7 +231257,7 @@ transform = "{1, 0, 0, 1, -228, -1376}";
|
|||
}
|
||||
);
|
||||
layerId = "200BE2C5-40F6-4CF4-AF4F-A33C0CC0964F";
|
||||
width = 604;
|
||||
width = 608;
|
||||
}
|
||||
);
|
||||
leftKerningGroup = zero.subs;
|
||||
|
|
@ -230974,7 +231267,7 @@ unicode = 208D;
|
|||
{
|
||||
color = 2;
|
||||
glyphname = parenright.subs;
|
||||
lastChange = "2018-12-31 21:21:38 +0000";
|
||||
lastChange = "2019-02-03 20:57:54 +0000";
|
||||
layers = (
|
||||
{
|
||||
components = (
|
||||
|
|
@ -231014,7 +231307,7 @@ transform = "{1, 0, 0, 1, -228, -1376}";
|
|||
}
|
||||
);
|
||||
layerId = "D0EC06BF-13F9-4C88-A6F5-B8203AF6C77E";
|
||||
width = 824;
|
||||
width = 828;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
|
|
@ -231034,7 +231327,7 @@ transform = "{1, 0, 0, 1, -228, -1376}";
|
|||
}
|
||||
);
|
||||
layerId = "200BE2C5-40F6-4CF4-AF4F-A33C0CC0964F";
|
||||
width = 604;
|
||||
width = 608;
|
||||
}
|
||||
);
|
||||
leftKerningGroup = zero.subs;
|
||||
|
|
@ -231043,6 +231336,140 @@ unicode = 208E;
|
|||
},
|
||||
{
|
||||
color = 2;
|
||||
glyphname = bracketleft.subs;
|
||||
lastChange = "2019-02-03 21:03:08 +0000";
|
||||
layers = (
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketleft.sups;
|
||||
transform = "{1, 0, 0, 1, 0, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "B1F27B51-9973-4381-9301-4FE46FE1CA59";
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketleft.sups;
|
||||
transform = "{1, 0, 0, 1, -228, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "200BE2C5-40F6-4CF4-AF4F-A33C0CC0964F";
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketleft.sups;
|
||||
transform = "{1, 0, 0, 1, 0, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketleft.sups;
|
||||
transform = "{1, 0, 0, 1, -228, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "11F4534A-B963-4AB5-820F-DAF9A20CD933";
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketleft.sups;
|
||||
transform = "{1, 0, 0, 1, 0, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "5C20EF92-B63D-42A8-8878-93C2863E0093";
|
||||
width = 828;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketleft.sups;
|
||||
transform = "{1, 0, 0, 1, -228, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "D0EC06BF-13F9-4C88-A6F5-B8203AF6C77E";
|
||||
width = 828;
|
||||
}
|
||||
);
|
||||
},
|
||||
{
|
||||
color = 2;
|
||||
glyphname = bracketright.subs;
|
||||
lastChange = "2019-02-03 21:03:08 +0000";
|
||||
layers = (
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketright.sups;
|
||||
transform = "{1, 0, 0, 1, 0, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "B1F27B51-9973-4381-9301-4FE46FE1CA59";
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketright.sups;
|
||||
transform = "{1, 0, 0, 1, -228, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "200BE2C5-40F6-4CF4-AF4F-A33C0CC0964F";
|
||||
width = 608;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketright.sups;
|
||||
transform = "{1, 0, 0, 1, 0, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "C698F293-3EC0-4A5A-A3A0-0FDB1F5CF265";
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketright.sups;
|
||||
transform = "{1, 0, 0, 1, -228, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "11F4534A-B963-4AB5-820F-DAF9A20CD933";
|
||||
width = 712;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketright.sups;
|
||||
transform = "{1, 0, 0, 1, 0, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "5C20EF92-B63D-42A8-8878-93C2863E0093";
|
||||
width = 828;
|
||||
},
|
||||
{
|
||||
components = (
|
||||
{
|
||||
name = bracketright.sups;
|
||||
transform = "{1, 0, 0, 1, -228, -1376}";
|
||||
}
|
||||
);
|
||||
layerId = "D0EC06BF-13F9-4C88-A6F5-B8203AF6C77E";
|
||||
width = 828;
|
||||
}
|
||||
);
|
||||
},
|
||||
{
|
||||
color = 2;
|
||||
glyphname = plus.subs;
|
||||
lastChange = "2018-12-31 21:21:38 +0000";
|
||||
layers = (
|
||||
|
|
|
|||
Reference in a new issue