website
This commit is contained in:
parent
f582d72059
commit
4f790d0ae8
12 changed files with 38821 additions and 323 deletions
235
docs/glyphs/glyphs.css
Normal file
235
docs/glyphs/glyphs.css
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
h1 span.glyph-name {}
|
||||
h1 span.glyph-name:before {
|
||||
content: " / ";
|
||||
color: rgba(0,0,0,0.2);
|
||||
font-weight:400;
|
||||
}
|
||||
|
||||
body.iframe {
|
||||
background-color:#fff;
|
||||
padding:20px 10px;
|
||||
}
|
||||
|
||||
#glyphs {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-left: 6px;
|
||||
overflow: hidden;
|
||||
width:200%;
|
||||
box-sizing: border-box;
|
||||
transform-origin: 0 0;
|
||||
transform: scale(0.5);
|
||||
justify-content: center;
|
||||
transition: transform 50ms ease-out;
|
||||
}
|
||||
body.single #glyphs {
|
||||
justify-content: flex-start;
|
||||
max-width:888px;
|
||||
margin:0 auto;
|
||||
padding-left: 0;
|
||||
}
|
||||
.glyph {
|
||||
height: 346px;
|
||||
width: 346px;
|
||||
background-image: none !important; /* since .glyph is an `a` */
|
||||
background-color: white;
|
||||
border-radius: 9px;
|
||||
margin-right: 6px;
|
||||
margin-bottom: 6px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
text-shadow: none;
|
||||
}
|
||||
.glyph .baseline {
|
||||
background: rgba(0,90,230,.6);
|
||||
position: absolute;
|
||||
left:0; right:0; bottom:64px;
|
||||
height: 1px;
|
||||
z-index:0;
|
||||
visibility: hidden;
|
||||
}
|
||||
.glyph .names {
|
||||
position: absolute;
|
||||
left:20px; right:20px; bottom:6px;
|
||||
color:white;
|
||||
text-align: center;
|
||||
font-size:1em;
|
||||
}
|
||||
.glyph:hover .name {
|
||||
color: rgba(0,0,0,0.8);
|
||||
}
|
||||
.glyph .advance {
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
width: 1px;
|
||||
}
|
||||
.glyph.zero-width .advance {
|
||||
background: transparent;
|
||||
border-left: 1px dashed transparent;
|
||||
}
|
||||
.glyph:hover .baseline {
|
||||
visibility: visible;
|
||||
}
|
||||
.glyph:hover .advance {
|
||||
background: rgba(0,90,200,0.1);
|
||||
}
|
||||
.glyph.zero-width:hover .advance {
|
||||
border-color: #aaa;
|
||||
}
|
||||
/*#glyphs .glyph .img*/
|
||||
.glyph svg {
|
||||
/*min-width: 346px;*/
|
||||
/*height: 346px;*/
|
||||
background-repeat: no-repeat;
|
||||
/*background-size: contain;*/
|
||||
/*background-color: #f5f5f5;*/
|
||||
position: absolute;
|
||||
top:0; bottom:0;
|
||||
z-index:1;
|
||||
opacity:0.95;
|
||||
}
|
||||
.glyph .advancez {
|
||||
display: block;
|
||||
background: salmon;
|
||||
z-index:0;
|
||||
}
|
||||
|
||||
|
||||
body.single .intro {
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
body.single .intro p {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#single-info {
|
||||
max-width: 500px;
|
||||
}
|
||||
#single-info ul {
|
||||
list-style: none;
|
||||
}
|
||||
#single-info ul li {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
#single-info .num {
|
||||
font-feature-settings: 'ss01' 1, 'zero' 1;
|
||||
}
|
||||
#single-info .unicodeName {
|
||||
font-feature-settings: 'case' 1;
|
||||
padding-left:0.3em;
|
||||
}
|
||||
#single-info .colorMark {
|
||||
display:inline-block;
|
||||
vertical-align:baseline;
|
||||
width:20px;
|
||||
height:20px;
|
||||
border-radius:50%;
|
||||
border: 1px solid rgba(0,0,0,0.2);
|
||||
}
|
||||
#single-info .colorMark.none {
|
||||
border: 1px dashed rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
#svgs {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.row.kerning {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.single .row.kerning {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.row.kerning .empty {
|
||||
opacity:0.3;
|
||||
}
|
||||
|
||||
#kerning-list {
|
||||
display: flex;
|
||||
/*flex-direction: column;*/
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
#kerning-list .divider {
|
||||
clear:both;
|
||||
width:100%;
|
||||
flex: 1 0 100%;
|
||||
height: 1px;
|
||||
background:rgba(0,0,0,0.1);
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.kernpair {
|
||||
/*background: white;*/
|
||||
border-radius:3px;
|
||||
background-image: none !important;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
position: relative;
|
||||
margin:0 2em 2em 0;
|
||||
text-shadow: none;
|
||||
}
|
||||
.kernpair:hover {
|
||||
background: white;
|
||||
}
|
||||
.kernpair:target, .kernpair.selected {
|
||||
background: rgba(250, 240, 0, 0.9);
|
||||
}
|
||||
.kernpair:focus {
|
||||
outline: none;
|
||||
box-shadow: 0 0 0 2px rgba(0,0,0,0.4);
|
||||
}
|
||||
.kernpair .left, .kernpair .right {
|
||||
width:100px;
|
||||
height:100px;
|
||||
/*background:rgba(40,240,90,0.3);*/
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
opacity:0.8;
|
||||
}
|
||||
.kernpair:hover .left, .kernpair:hover .right {
|
||||
opacity:0.9;
|
||||
}
|
||||
.kernpair.selected .left, .kernpair.selected .right {
|
||||
opacity:1;
|
||||
}
|
||||
/*.kernpair .left { background-color:rgba(120,90,140,0.3); }*/
|
||||
.kernpair .kern {
|
||||
position: absolute;
|
||||
/*background-color: blue;*/
|
||||
background-color: rgba(255,0,0,0.1);
|
||||
right:0; top:0; bottom:0;
|
||||
z-index:9;
|
||||
}
|
||||
.kernpair .kern.pos {
|
||||
background-color: rgba(36,207,128,0.3);
|
||||
}
|
||||
.kernpair:hover .kern, .kernpair.selected .kern {
|
||||
background-color: rgba(255,0,0,0.5);
|
||||
}
|
||||
.kernpair:hover .kern.pos, .kernpair.selected .kern.pos {
|
||||
background-color: rgba(36,207,128,0.5);
|
||||
}
|
||||
.kernpair .kern .label {
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
opacity:0.9;
|
||||
height: 20px;
|
||||
right:-8px; bottom:-20px;
|
||||
z-index:1;
|
||||
text-align: center;
|
||||
color: rgba(255,0,0,0.8);
|
||||
visibility:hidden;
|
||||
}
|
||||
.kernpair .kern.pos .label {
|
||||
color: rgba(36,207,128,0.8);
|
||||
}
|
||||
.kernpair:hover .kern .label,
|
||||
.kernpair.selected .kern .label {
|
||||
visibility:visible;
|
||||
}
|
||||
|
||||
757
docs/glyphs/glyphs.js
Normal file
757
docs/glyphs/glyphs.js
Normal file
|
|
@ -0,0 +1,757 @@
|
|||
// constants
|
||||
var kSVGScale = 0.1 // how bmuch metrics are scaled in the SVGs
|
||||
var kGlyphSize = 346 // at kSVGScale. In sync with CSS and SVGs
|
||||
var kUPM = 2816
|
||||
|
||||
if (!isMac) {
|
||||
Array.prototype.forEach.call(document.querySelectorAll('kbd'), function(e) {
|
||||
if (e.innerText == '\u2318') {
|
||||
e.innerText = 'Ctrl'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function httpget(url, cb) {
|
||||
var req = new XMLHttpRequest();
|
||||
req.addEventListener("load", function() {
|
||||
cb(this.responseText, this)
|
||||
})
|
||||
req.open("GET", url)
|
||||
req.send()
|
||||
}
|
||||
|
||||
function fetchGlyphInfo(cb) {
|
||||
httpget("../lab/glyphinfo.json", function(res) {
|
||||
cb(JSON.parse(res).glyphs)
|
||||
})
|
||||
}
|
||||
|
||||
function fetchMetrics(cb) {
|
||||
httpget("metrics.json", function(res) {
|
||||
cb(JSON.parse(res))
|
||||
})
|
||||
}
|
||||
|
||||
var glyphInfo = null
|
||||
var glyphMetrics = null
|
||||
|
||||
function initMetrics(data) {
|
||||
// metrics.json uses a compact format with numerical glyph indentifiers
|
||||
// in order to minimize file size.
|
||||
// We expand the glyph IDs to glyph names here.
|
||||
var nameIds = data.nameids
|
||||
// console.log(data)
|
||||
|
||||
var metrics = {}
|
||||
var metrics0 = data.metrics
|
||||
Object.keys(metrics0).forEach(function (id) {
|
||||
var name = nameIds[id]
|
||||
var v = metrics0[id]
|
||||
// v : [width, advance, left, right]
|
||||
metrics[name] = {
|
||||
width: v[0],
|
||||
advance: v[1],
|
||||
left: v[2],
|
||||
right: v[3]
|
||||
}
|
||||
})
|
||||
|
||||
var kerningLeft = {} // { glyphName: {rightGlyphName: kerningValue, ...}, ... }
|
||||
var kerningRight = {}
|
||||
data.kerning.forEach(function (t) {
|
||||
// each entry looks like this:
|
||||
// [leftGlyphId, rightGlyphId, kerningValue]
|
||||
var leftName = nameIds[t[0]]
|
||||
if (!leftName) {
|
||||
console.error('nameIds missing', t[0])
|
||||
}
|
||||
var rightName = nameIds[t[1]]
|
||||
if (!rightName) {
|
||||
console.error('nameIds missing', t[1])
|
||||
}
|
||||
var kerningValue = t[2]
|
||||
|
||||
var lm = kerningLeft[leftName]
|
||||
if (!lm) {
|
||||
kerningLeft[leftName] = lm = {}
|
||||
}
|
||||
lm[rightName] = kerningValue
|
||||
|
||||
var rm = kerningRight[rightName]
|
||||
if (!rm) {
|
||||
kerningRight[rightName] = rm = {}
|
||||
}
|
||||
rm[leftName] = kerningValue
|
||||
})
|
||||
|
||||
glyphMetrics = {
|
||||
metrics: metrics,
|
||||
kerningLeft: kerningLeft,
|
||||
kerningRight: kerningRight,
|
||||
}
|
||||
// console.log('glyphMetrics', glyphMetrics)
|
||||
}
|
||||
|
||||
function fetchAll(cb) {
|
||||
var i = 0
|
||||
var res = {}
|
||||
var decr = function(){
|
||||
if (--i == 0) {
|
||||
cb(res)
|
||||
}
|
||||
}
|
||||
i++
|
||||
fetchGlyphInfo(function(r){ glyphInfo = r; decr() })
|
||||
i++
|
||||
fetchMetrics(function(r){
|
||||
initMetrics(r)
|
||||
decr()
|
||||
})
|
||||
}
|
||||
|
||||
fetchAll(render)
|
||||
|
||||
|
||||
var styleSheet = document.styleSheets[document.styleSheets.length-1]
|
||||
var glyphRule, baselineRule, zeroWidthAdvRule
|
||||
var currentScale = 0
|
||||
var defaultSingleScale = 1
|
||||
var currentSingleScale = 1
|
||||
var defaultGridScale = 0.4
|
||||
var currentGridScale = defaultGridScale
|
||||
var glyphs = document.getElementById('glyphs')
|
||||
|
||||
function updateLayoutAfterChanges() {
|
||||
var height = parseInt(window.getComputedStyle(glyphs).height)
|
||||
var margin = height - (height * currentScale)
|
||||
// console.log('scale:', currentScale, 'height:', height, 'margin:', margin)
|
||||
if (currentScale > 1) {
|
||||
glyphs.style.marginBottom = null
|
||||
} else {
|
||||
glyphs.style.marginBottom = -margin + 'px'
|
||||
}
|
||||
}
|
||||
|
||||
function setScale(scale) {
|
||||
if (queryString.iframe !== undefined) {
|
||||
scale = 0.11
|
||||
} else if (queryString.g) {
|
||||
scale = Math.min(Math.max(1, scale), 3)
|
||||
} else {
|
||||
scale = Math.min(Math.max(0.05, scale), 3)
|
||||
}
|
||||
|
||||
if (currentScale == scale) {
|
||||
return
|
||||
}
|
||||
|
||||
currentScale = scale
|
||||
if (queryString.g) {
|
||||
currentSingleScale = scale
|
||||
} else {
|
||||
currentGridScale = scale
|
||||
}
|
||||
|
||||
var hairline = Math.ceil(1 / window.devicePixelRatio / scale)
|
||||
var spacing = Math.ceil(6 / scale)
|
||||
|
||||
var s = glyphs.style
|
||||
if (queryString.g || queryString.iframe !== undefined) {
|
||||
s.paddingLeft = null
|
||||
} else {
|
||||
s.paddingLeft = spacing + 'px'
|
||||
}
|
||||
s.width = (100 / scale) + '%'
|
||||
s.transform = 'scale(' + scale + ')'
|
||||
|
||||
if (!glyphRule) {
|
||||
glyphRule = styleSheet.cssRules[styleSheet.insertRule('#glyphs .glyph {}', styleSheet.cssRules.length)]
|
||||
baselineRule = styleSheet.cssRules[styleSheet.insertRule('#glyphs .glyph .baseline {}', styleSheet.cssRules.length)]
|
||||
zeroWidthAdvRule = styleSheet.cssRules[styleSheet.insertRule('#glyphs .glyph.zero-width .advance {}', styleSheet.cssRules.length)]
|
||||
}
|
||||
|
||||
if (queryString.g) {
|
||||
glyphRule.style.marginRight = null
|
||||
glyphRule.style.marginBottom = null
|
||||
} else {
|
||||
glyphRule.style.marginRight = Math.ceil(6 / scale) + 'px';
|
||||
glyphRule.style.marginBottom = Math.ceil(6 / scale) + 'px';
|
||||
if (queryString.iframe !== undefined) {
|
||||
glyphRule.style.marginBottom = Math.ceil(16 / scale) + 'px';
|
||||
}
|
||||
}
|
||||
baselineRule.style.height = hairline + 'px'
|
||||
zeroWidthAdvRule.style.borderWidth = (hairline) + 'px'
|
||||
|
||||
updateLayoutAfterChanges()
|
||||
requestAnimationFrame(updateLayoutAfterChanges)
|
||||
}
|
||||
|
||||
|
||||
function encodeQueryString(q) {
|
||||
return Object.keys(q).map(function(k) {
|
||||
if (k) {
|
||||
var v = q[k]
|
||||
return encodeURIComponent(k) + (v ? '=' + encodeURIComponent(v) : '')
|
||||
}
|
||||
}).filter(function(s) { return !!s }).join('&')
|
||||
}
|
||||
|
||||
function parseQueryString(qs) {
|
||||
var q = {}
|
||||
qs.replace(/^\?/,'').split('&').forEach(function(c) {
|
||||
var kv = c.split('=')
|
||||
var k = decodeURIComponent(kv[0])
|
||||
if (k) {
|
||||
q[k] = kv[1] ? decodeURIComponent(kv[1]) : null
|
||||
}
|
||||
})
|
||||
return q
|
||||
}
|
||||
|
||||
|
||||
var queryString = parseQueryString(location.search)
|
||||
var glyphNameEl = null
|
||||
var baseTitle = document.title
|
||||
var flippedLocationHash = false
|
||||
|
||||
var singleInfo = document.querySelector('#single-info')
|
||||
singleInfo.parentElement.removeChild(singleInfo)
|
||||
singleInfo.style.display = 'block'
|
||||
|
||||
function updateLocation() {
|
||||
queryString = parseQueryString(location.search)
|
||||
|
||||
// var glyphs = document.getElementById('glyphs')
|
||||
var h1 = document.querySelector('h1')
|
||||
if (queryString.g) {
|
||||
if (!glyphNameEl) {
|
||||
glyphNameEl = document.createElement('span')
|
||||
glyphNameEl.className = 'glyph-name'
|
||||
}
|
||||
document.title = queryString.g + ' – ' + baseTitle
|
||||
glyphNameEl.innerText = queryString.g
|
||||
h1.appendChild(glyphNameEl)
|
||||
document.body.classList.add('single')
|
||||
setScale(currentSingleScale)
|
||||
} else {
|
||||
document.title = baseTitle
|
||||
if (glyphNameEl) {
|
||||
h1.removeChild(glyphNameEl)
|
||||
}
|
||||
document.body.classList.remove('single')
|
||||
setScale(currentGridScale)
|
||||
}
|
||||
|
||||
document.querySelector('.row.intro').style.display = (
|
||||
queryString.iframe !== undefined ? 'none' : null
|
||||
)
|
||||
if (queryString.iframe !== undefined) {
|
||||
document.body.classList.add('iframe')
|
||||
} else {
|
||||
document.body.classList.remove('iframe')
|
||||
}
|
||||
|
||||
render()
|
||||
}
|
||||
|
||||
window.onpopstate = function(ev) {
|
||||
updateLocation()
|
||||
}
|
||||
|
||||
function navto(url) {
|
||||
history.pushState({}, "Glyphs", url)
|
||||
updateLocation()
|
||||
window.scrollTo(0,0)
|
||||
}
|
||||
|
||||
function wrapIntLink(a) {
|
||||
a.addEventListener('click', function(ev) {
|
||||
if (!ev.metaKey && !ev.ctrlKey && !ev.shiftKey) {
|
||||
ev.preventDefault()
|
||||
navto(a.href)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
wrapIntLink(document.querySelector('h1 > a'))
|
||||
|
||||
|
||||
// keep refs to svgs so we don't have to refcount while using
|
||||
var svgRepository = {}
|
||||
;(function(){
|
||||
var svgs = document.getElementById('svgs'), svg, name
|
||||
for (var i = 0; i < svgs.children.length; ++i) {
|
||||
svg = svgs.children[i]
|
||||
name = svg.id.substr(4) // strip "svg-" prefix
|
||||
svgRepository[name] = svg
|
||||
}
|
||||
})()
|
||||
|
||||
|
||||
// Maps glyphname to glyphInfo. Only links to first found entry for a flyph.
|
||||
var glyphInfoMap = {}
|
||||
var needsUpdateGlyphInfoMap = true
|
||||
|
||||
|
||||
function render() {
|
||||
if (!glyphInfo) {
|
||||
return
|
||||
}
|
||||
|
||||
var rootEl = document.getElementById('glyphs')
|
||||
rootEl.style.display = 'none'
|
||||
rootEl.innerText = ''
|
||||
|
||||
// glyphInfo: {
|
||||
// "glyphs": [
|
||||
// [name :string, unicode? :int|null, unicodeName? :string, color? :string|null],
|
||||
// ["A", 65, "LATIN CAPITAL LETTER A", "#dbeaf7"],
|
||||
// ...
|
||||
// ],
|
||||
// }
|
||||
//
|
||||
// Note: Glyph names might appear multiple times (always adjacent) when a glyph is
|
||||
// represented by multiple Unicode code points. For example:
|
||||
//
|
||||
// ["Delta", 916, "GREEK CAPITAL LETTER DELTA"],
|
||||
// ["Delta", 8710, "INCREMENT"],
|
||||
//
|
||||
|
||||
var glyphs = glyphInfo
|
||||
var singleGlyph = null
|
||||
var lastGlyphEl = null
|
||||
var lastGlyphName = ''
|
||||
|
||||
glyphInfo.forEach(function(g, i) {
|
||||
var name = g[0]
|
||||
|
||||
if (needsUpdateGlyphInfoMap && !glyphInfoMap[name]) {
|
||||
glyphInfoMap[name] = g
|
||||
}
|
||||
|
||||
if (queryString.g && name != queryString.g) {
|
||||
// ignore
|
||||
return
|
||||
}
|
||||
|
||||
var glyph = renderGlyphGraphicG(g, lastGlyphName, lastGlyphEl, singleGlyph)
|
||||
|
||||
if (glyph) {
|
||||
rootEl.appendChild(glyph.element)
|
||||
lastGlyphEl = glyph.element
|
||||
lastGlyphName = name
|
||||
if (queryString.g) {
|
||||
singleGlyph = glyph
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
needsUpdateGlyphInfoMap = false
|
||||
|
||||
if (singleGlyph) {
|
||||
renderSingleInfo(singleGlyph)
|
||||
rootEl.appendChild(singleInfo)
|
||||
}
|
||||
|
||||
rootEl.style.display = null
|
||||
updateLayoutAfterChanges()
|
||||
}
|
||||
|
||||
|
||||
function renderGlyphGraphic(glyphName) {
|
||||
var g = glyphInfoMap[glyphName]
|
||||
return g ? renderGlyphGraphicG(g) : null
|
||||
}
|
||||
|
||||
|
||||
function renderGlyphGraphicG(g, lastGlyphName, lastGlyphEl, singleGlyph) {
|
||||
var name = g[0]
|
||||
var names, glyph
|
||||
var svg = svgRepository[name]
|
||||
|
||||
if (!svg) {
|
||||
// ignore
|
||||
return null
|
||||
}
|
||||
|
||||
var metrics = glyphMetrics.metrics[name]
|
||||
if (!metrics) {
|
||||
console.error('missing metrics for', name)
|
||||
}
|
||||
|
||||
var info = {
|
||||
name: name,
|
||||
unicode: g[1],
|
||||
unicodeName: g[2],
|
||||
color: g[3],
|
||||
|
||||
// These are all in 1:1 UPM (not scaled)
|
||||
advance: metrics.advance,
|
||||
left: metrics.left,
|
||||
right: metrics.right,
|
||||
width: metrics.width,
|
||||
|
||||
element: null,
|
||||
}
|
||||
|
||||
if (name == lastGlyphName) {
|
||||
// additional Unicode code point for same glyph
|
||||
glyph = lastGlyphEl
|
||||
names = glyph.querySelector('.names')
|
||||
names.innerText += ','
|
||||
if (info.unicode) {
|
||||
var ucid = ' U+' + fmthex(info.unicode)
|
||||
names.innerText += ' U+' + fmthex(info.unicode)
|
||||
if (!queryString.g) {
|
||||
glyph.title += ucid
|
||||
}
|
||||
}
|
||||
if (info.unicodeName) {
|
||||
names.innerText += ' ' + info.unicodeName
|
||||
if (!queryString.g) {
|
||||
glyph.title += ' (' + info.unicodeName + ')'
|
||||
}
|
||||
}
|
||||
|
||||
if (queryString.g) {
|
||||
if (singleGlyph) {
|
||||
if (!singleGlyph.alternates) {
|
||||
singleGlyph.alternates = []
|
||||
}
|
||||
singleGlyph.alternates.push(info)
|
||||
} else {
|
||||
throw new Error('alternate glyph UC, but appears first in glyphinfo data')
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// console.log('svg for', name, svg.width.baseVal.value, '->', svg, '\n', info)
|
||||
|
||||
glyph = document.createElement('a')
|
||||
glyph.className = 'glyph'
|
||||
glyph.href = '?g=' + encodeURIComponent(name)
|
||||
wrapIntLink(glyph)
|
||||
|
||||
info.element = glyph
|
||||
|
||||
if (!queryString.g) {
|
||||
glyph.title = name
|
||||
}
|
||||
|
||||
var baseline = document.createElement('div')
|
||||
baseline.className = 'baseline'
|
||||
glyph.appendChild(baseline)
|
||||
|
||||
names = document.createElement('div')
|
||||
names.className = 'names'
|
||||
names.innerText = name
|
||||
if (info.unicode) {
|
||||
var ucid = ' U+' + fmthex(info.unicode)
|
||||
names.innerText += ' U+' + fmthex(info.unicode, 4)
|
||||
if (!queryString.g) {
|
||||
glyph.title += ucid
|
||||
}
|
||||
}
|
||||
if (info.unicodeName) {
|
||||
names.innerText += ' ' + info.unicodeName
|
||||
if (!queryString.g) {
|
||||
glyph.title += ' (' + info.unicodeName + ')'
|
||||
}
|
||||
}
|
||||
glyph.appendChild(names)
|
||||
|
||||
var scaledAdvance = info.advance * kSVGScale
|
||||
|
||||
if (scaledAdvance > kGlyphSize) {
|
||||
glyph.style.width = scaledAdvance.toFixed(2) + 'px'
|
||||
}
|
||||
|
||||
var adv = document.createElement('div')
|
||||
adv.className = 'advance'
|
||||
glyph.appendChild(adv)
|
||||
|
||||
adv.appendChild(svg)
|
||||
svg.style.left = (info.left * kSVGScale).toFixed(2) + 'px'
|
||||
|
||||
if (info.advance <= 0) {
|
||||
glyph.className += ' zero-width'
|
||||
} else {
|
||||
adv.style.width = scaledAdvance.toFixed(2) + 'px'
|
||||
}
|
||||
|
||||
return info
|
||||
}
|
||||
|
||||
|
||||
function renderSingleInfo(g) {
|
||||
var e = singleInfo
|
||||
e.querySelector('.name').innerText = g.name
|
||||
|
||||
function setv(el, name, textValue) {
|
||||
el.querySelector('.' + name).innerText = textValue
|
||||
}
|
||||
|
||||
var unicode = e.querySelector('.unicode')
|
||||
|
||||
function configureUnicodeView(el, g) {
|
||||
setv(el, 'unicodeCodePoint', g.unicode ? 'U+' + fmthex(g.unicode, 4) : '–')
|
||||
setv(el, 'unicodeName', g.unicodeName || '')
|
||||
}
|
||||
|
||||
// remove any previous alternate unicode list items
|
||||
var rmli = unicode
|
||||
while ((rmli = rmli.nextSibling)) {
|
||||
if (rmli.nodeType == Node.ELEMENT_NODE) {
|
||||
if (!rmli.parentElement || !rmli.classList.contains('unicode')) {
|
||||
break
|
||||
}
|
||||
rmli.parentElement.removeChild(rmli)
|
||||
}
|
||||
}
|
||||
|
||||
configureUnicodeView(unicode, g)
|
||||
|
||||
if (g.alternates) {
|
||||
var refnode = unicode.nextSibling
|
||||
g.alternates.forEach(function(g) {
|
||||
var li = unicode.cloneNode(true)
|
||||
configureUnicodeView(li, g)
|
||||
if (refnode) {
|
||||
unicode.parentElement.insertBefore(li, unicode.nextSibling)
|
||||
} else {
|
||||
unicode.parentElement.appendChild(li)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
e.querySelector('.advanceWidth').innerText = g.advance
|
||||
e.querySelector('.marginLeft').innerText = g.left
|
||||
e.querySelector('.marginRight').innerText = g.right
|
||||
|
||||
var colorMark = e.querySelector('.colorMark')
|
||||
if (g.color) {
|
||||
colorMark.title = g.color.toUpperCase()
|
||||
colorMark.style.background = g.color
|
||||
colorMark.classList.remove('none')
|
||||
} else {
|
||||
colorMark.title = '(None)'
|
||||
colorMark.style.background = null
|
||||
colorMark.classList.add('none')
|
||||
}
|
||||
|
||||
var svg = svgRepository[g.name]
|
||||
var svgFile = e.querySelector('.svgFile')
|
||||
svgFile.download = g.name + '.svg'
|
||||
svgFile.href = getSvgDataURI(svg)
|
||||
|
||||
renderSingleKerning(g)
|
||||
}
|
||||
|
||||
|
||||
var cachedSVGDataURIs = {}
|
||||
|
||||
function getSvgDataURI(svg) {
|
||||
var cached = cachedSVGDataURIs[svg.id]
|
||||
if (!cached) {
|
||||
cached = 'data:image/svg+xml,' + svg.outerHTML.replace(/[\r\n]+/g, '')
|
||||
cachedSVGDataURIs[svg.id] = cached
|
||||
}
|
||||
return cached
|
||||
}
|
||||
|
||||
|
||||
function pxround(n) {
|
||||
return Math.round(n * 2) / 2
|
||||
}
|
||||
|
||||
|
||||
function selectKerningPair(id, directly) {
|
||||
Array.prototype.forEach.call(
|
||||
document.querySelectorAll('.kernpair.selected'),
|
||||
function(e) {
|
||||
e.classList.remove('selected')
|
||||
}
|
||||
)
|
||||
var el = document.getElementById(id)
|
||||
if (el) {
|
||||
el.classList.add('selected')
|
||||
if (!directly) {
|
||||
el.scrollIntoViewIfNeeded()
|
||||
}
|
||||
}
|
||||
history.replaceState({}, '', location.search + '#' + id)
|
||||
}
|
||||
|
||||
|
||||
// return true if some kerning was rendered
|
||||
function renderSingleKerning(g) {
|
||||
var kerningList = document.getElementById('kerning-list')
|
||||
kerningList.style.display = 'none'
|
||||
kerningList.innerText = ''
|
||||
var thisSvg = svgRepository[g.name]
|
||||
var thisSvgURI = getSvgDataURI(thisSvg)
|
||||
|
||||
if (!thisSvg) {
|
||||
kerningList.style.display = null
|
||||
return false
|
||||
}
|
||||
|
||||
var kerningAsLeft = glyphMetrics.kerningLeft[g.name] || {}
|
||||
var kerningAsRight = glyphMetrics.kerningRight[g.name] || {}
|
||||
|
||||
var kerningAsLeftKeys = Object.keys(kerningAsLeft)
|
||||
var kerningAsRightKeys = Object.keys(kerningAsRight)
|
||||
|
||||
if (kerningAsLeftKeys.length == 0 && kerningAsRightKeys.length == 0) {
|
||||
var p = document.createElement('p')
|
||||
p.className = 'empty'
|
||||
p.innerText = 'No kerning'
|
||||
kerningList.appendChild(p)
|
||||
kerningList.style.display = null
|
||||
return false
|
||||
}
|
||||
|
||||
var lilGlyphSize = 128
|
||||
var lilScale = lilGlyphSize / kGlyphSize
|
||||
|
||||
function mkpairGlyph(glyphName, side, kerningValue, svgURI) {
|
||||
var metrics = glyphMetrics.metrics[glyphName]
|
||||
var svgWidth = pxround(metrics.width * kSVGScale * lilScale)
|
||||
var el = document.createElement('div')
|
||||
|
||||
var leftMargin = metrics.left
|
||||
var rightMargin = metrics.right
|
||||
if (side == 'left') {
|
||||
rightMargin += kerningValue
|
||||
} else {
|
||||
leftMargin += kerningValue
|
||||
}
|
||||
leftMargin = leftMargin * kSVGScale * lilScale
|
||||
rightMargin = rightMargin * kSVGScale * lilScale
|
||||
|
||||
el.className = side
|
||||
el.style.backgroundImage = "url('" + svgURI + "')"
|
||||
el.style.backgroundSize = svgWidth + 'px ' + lilGlyphSize + 'px'
|
||||
el.style.width = svgWidth + 'px'
|
||||
el.style.height = lilGlyphSize + 'px'
|
||||
el.style.marginLeft = pxround(leftMargin) + 'px'
|
||||
el.style.marginRight = pxround(rightMargin) + 'px'
|
||||
return el
|
||||
}
|
||||
|
||||
function mkpairs(kerningInfo, selfName, self, side) {
|
||||
var asLeftSide = side == 'left'
|
||||
var idPrefix = asLeftSide ? 'kernl-' : 'kernr-'
|
||||
var keys = Object.keys(kerningInfo)
|
||||
var otherSide = asLeftSide ? 'right' : 'left'
|
||||
|
||||
keys.forEach(function(glyphName) {
|
||||
var kerningValue = kerningInfo[glyphName]
|
||||
var otherSvg = svgRepository[glyphName]
|
||||
|
||||
var pair = document.createElement('a')
|
||||
pair.className = 'kernpair'
|
||||
pair.title = (
|
||||
asLeftSide ? selfName + '/' + glyphName + ' ' + kerningValue :
|
||||
glyphName + '/' + selfName + ' ' + kerningValue
|
||||
)
|
||||
pair.id = idPrefix + glyphName
|
||||
pair.href = '#' + pair.id
|
||||
pair.onclick = function(ev) {
|
||||
selectKerningPair(pair.id)
|
||||
ev.preventDefault()
|
||||
ev.stopPropagation()
|
||||
}
|
||||
|
||||
var otherEl = mkpairGlyph(glyphName, otherSide, kerningValue, getSvgDataURI(otherSvg))
|
||||
|
||||
if (asLeftSide) {
|
||||
if (self.parentNode) {
|
||||
pair.appendChild(self.cloneNode(true))
|
||||
} else {
|
||||
pair.appendChild(self)
|
||||
}
|
||||
pair.appendChild(otherEl)
|
||||
} else {
|
||||
pair.appendChild(otherEl)
|
||||
if (self.parentNode) {
|
||||
pair.appendChild(self.cloneNode(true))
|
||||
} else {
|
||||
pair.appendChild(self)
|
||||
}
|
||||
}
|
||||
|
||||
var kern = document.createElement('div')
|
||||
kern.className = 'kern ' + (kerningValue < 0 ? 'neg' : 'pos')
|
||||
|
||||
var absKernVal = Math.abs(kerningValue)
|
||||
var kernWidth = Math.max(1, pxround(absKernVal * kSVGScale * lilScale))
|
||||
kern.style.width = kernWidth + 'px'
|
||||
|
||||
var leftMetrics = glyphMetrics.metrics[asLeftSide ? selfName : glyphName]
|
||||
var leftAdvance = leftMetrics.advance
|
||||
kern.style.left = pxround((leftAdvance - absKernVal) * kSVGScale * lilScale) + 'px'
|
||||
pair.appendChild(kern)
|
||||
|
||||
var label = document.createElement('div')
|
||||
label.className = 'label'
|
||||
label.innerText = kerningValue
|
||||
kern.appendChild(label)
|
||||
|
||||
kerningList.appendChild(pair)
|
||||
})
|
||||
|
||||
return keys.length != 0
|
||||
}
|
||||
|
||||
var selfLeft = mkpairGlyph(g.name, 'left', 0, thisSvgURI)
|
||||
var selfRight = mkpairGlyph(g.name, 'right', 0, thisSvgURI)
|
||||
|
||||
if (mkpairs(kerningAsLeft, g.name, selfLeft, 'left')) {
|
||||
var div = document.createElement('div')
|
||||
div.className = 'divider'
|
||||
kerningList.appendChild(div)
|
||||
}
|
||||
|
||||
mkpairs(kerningAsRight, g.name, selfRight, 'right')
|
||||
|
||||
if (location.hash && location.hash.indexOf('#kern') == 0) {
|
||||
var id = location.hash.substr(1)
|
||||
setTimeout(function(){
|
||||
selectKerningPair(id)
|
||||
},1)
|
||||
}
|
||||
|
||||
kerningList.style.display = null
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
function fmthex(cp, minWidth) {
|
||||
let s = cp.toString(16).toUpperCase()
|
||||
while (s.length < minWidth) {
|
||||
s = '0' + s
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
|
||||
document.addEventListener('keydown', function(ev) {
|
||||
if (!queryString.g && (ev.metaKey || ev.ctrlKey)) {
|
||||
if (ev.keyCode == 187 || ev.key == '+') {
|
||||
setScale(parseFloat((currentScale + 0.1).toFixed(2)))
|
||||
ev.preventDefault()
|
||||
} else if (ev.keyCode == 189 || ev.key == '-') {
|
||||
setScale(parseFloat((currentScale - 0.1).toFixed(2)))
|
||||
ev.preventDefault()
|
||||
} else if (ev.keyCode == 48 || ev.key == '0') {
|
||||
setScale(queryString.g ? defaultSingleScale : defaultGridScale)
|
||||
ev.preventDefault()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
updateLocation()
|
||||
3202
docs/glyphs/index.html
Normal file
3202
docs/glyphs/index.html
Normal file
File diff suppressed because it is too large
Load diff
33977
docs/glyphs/metrics.json
Normal file
33977
docs/glyphs/metrics.json
Normal file
File diff suppressed because it is too large
Load diff
393
docs/index.css
Normal file
393
docs/index.css
Normal file
|
|
@ -0,0 +1,393 @@
|
|||
* { margin:0; padding:0; }
|
||||
html { }
|
||||
body {
|
||||
background-color: #f4f4f4;
|
||||
color: #414141;
|
||||
font: 16px/22px Interface, sans-serif;
|
||||
letter-spacing: -0.1px;
|
||||
font-weight: 400;
|
||||
padding-bottom: 30px;
|
||||
|
||||
font-kerning: normal;
|
||||
-moz-font-feature-settings: "kern" 1;
|
||||
-webkit-font-feature-settings: "kern" 1;
|
||||
font-feature-settings: "kern" 1;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
word-break: break-word;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a:hover {
|
||||
color: rgb(48, 112, 232);
|
||||
}
|
||||
a.plain, a.fat {
|
||||
/* !important needed for qualification over @media further down */
|
||||
background: none !important;
|
||||
text-shadow: none !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
a.fat {
|
||||
font-weight:500;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 20px 0;
|
||||
}
|
||||
code, pre, q {
|
||||
font-family: "SFMono-Regular", Menlo, Consolas, Inconsolata, monospace;
|
||||
font-size:0.96em;
|
||||
}
|
||||
code {
|
||||
display: block;
|
||||
border-radius:1px;
|
||||
padding: 0.5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
pre, q {
|
||||
display: inline;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
q {
|
||||
display: inline;
|
||||
}
|
||||
q:before {
|
||||
content: "";
|
||||
}
|
||||
q:after {
|
||||
content: "";
|
||||
}
|
||||
kbd {
|
||||
font-feature-settings: 'kern' 1, 'case' 1;
|
||||
border: 1px solid rgba(0,0,0,0.18);
|
||||
border-radius: 3px;
|
||||
padding:0.1em 0.2em;
|
||||
margin:0 0.1em;
|
||||
}
|
||||
dem { /* de-emphasize */
|
||||
font-weight: 400;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
font-weight: 500;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
font-size: 38px;
|
||||
letter-spacing: -1.3px;
|
||||
line-height: 40px;
|
||||
text-indent: -2px;
|
||||
margin-bottom: 30px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
letter-spacing: -0.4px;
|
||||
line-height: 30px;
|
||||
margin-bottom: 25px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
h2.back {
|
||||
color:rgba(0,0,0,0.2);
|
||||
font-size: inherit;
|
||||
font-weight:400;
|
||||
margin:0;
|
||||
margin-top:-1.9em;
|
||||
}
|
||||
h2.back a:hover {
|
||||
color: black;
|
||||
margin-left:-1.6em;
|
||||
}
|
||||
h2.back a:hover::before {
|
||||
content: "<- ";
|
||||
}
|
||||
h3 {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
h1 > a, h2 > a, h3 > a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
.row {
|
||||
padding: 50px;
|
||||
/*background: salmon;*/
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
/*background: white;*/
|
||||
}
|
||||
.row > * {
|
||||
width:100%;
|
||||
max-width: 888px;
|
||||
flex: 1 0 100%;
|
||||
/*background: white;*/
|
||||
}
|
||||
|
||||
.row-divider {
|
||||
margin:0 auto;
|
||||
max-width: 888px;
|
||||
height: 1px;
|
||||
border-bottom: 1px dashed rgba(0,0,0,0.09);
|
||||
}
|
||||
|
||||
/* small screens */
|
||||
@media only screen and (max-device-width: 736px) {
|
||||
.row {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.row.white {
|
||||
background: white;
|
||||
}
|
||||
|
||||
.row.dark {
|
||||
background: #2b2b2b;
|
||||
color: #99999b;
|
||||
}
|
||||
.row.dark a:hover {
|
||||
color: rgb(164, 188, 255);
|
||||
}
|
||||
.row.dark h2, .row.dark h2 > a {
|
||||
color: #ccc;
|
||||
background: none;
|
||||
}
|
||||
|
||||
.row.color1 {
|
||||
background: #C0CDE2;
|
||||
color: #3B414A;
|
||||
}
|
||||
|
||||
/*
|
||||
Medium.com-style link underline for high-density displays.
|
||||
Currently only enabled on Mac as the lines don't render correctly on
|
||||
Windows (even in Chrome) for some reason.
|
||||
*/
|
||||
@media (-webkit-min-device-pixel-ratio: 1.5) {
|
||||
a {
|
||||
text-decoration: none;
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(0,0,0,.6) 50%,
|
||||
rgba(0,0,0,0) 50%);
|
||||
background-repeat: repeat-x;
|
||||
background-size: 2px .1em;
|
||||
background-position: 0 1.15em;
|
||||
text-shadow:
|
||||
/* creates "openings" for descenders in the underline */
|
||||
-1px -1px 0 #f4f4f4,
|
||||
1px -1px 0 #f4f4f4,
|
||||
-1px 1px 0 #f4f4f4,
|
||||
1px 1px 0 #f4f4f4;
|
||||
}
|
||||
body.mac_or_ios a {
|
||||
/* line height calculated differently on mac c/t windows */
|
||||
background-position: 0 1.045em;
|
||||
}
|
||||
a:hover {
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(48, 112, 232, 1) 50%,
|
||||
rgba(48, 112, 232, 0) 50%);
|
||||
}
|
||||
.row.white a {
|
||||
text-shadow:
|
||||
-1px -1px 0 white,
|
||||
1px -1px 0 white,
|
||||
-1px 1px 0 white,
|
||||
1px 1px 0 white;
|
||||
}
|
||||
.row.dark a {
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(255,255,255,.3) 50%,
|
||||
rgba(255,255,255,0) 50%);
|
||||
text-shadow:
|
||||
-1px -1px 0 #2b2b2b,
|
||||
1px -1px 0 #2b2b2b,
|
||||
-1px 1px 0 #2b2b2b,
|
||||
1px 1px 0 #2b2b2b;
|
||||
}
|
||||
.row.dark a:hover {
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(164, 188, 255, 1) 50%,
|
||||
rgba(164, 188, 255, 0) 50%);
|
||||
}
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: rgb(48, 112, 232);
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
}
|
||||
::-moz-selection {
|
||||
background: rgb(48, 112, 232);
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.row.dark ::selection {
|
||||
background: rgb(218, 228, 255);
|
||||
color: black;
|
||||
}
|
||||
.row.dark ::-moz-selection {
|
||||
background: rgb(164, 188, 255);
|
||||
color: black;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-left:1.1em;
|
||||
}
|
||||
|
||||
a > img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#repertoire-image {
|
||||
display:block;
|
||||
width:100%;
|
||||
height:40vw;
|
||||
background-image: url(res/repertoire.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-blend-mode: multiply;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
|
||||
/* FAQ */
|
||||
ul.faq {
|
||||
list-style:none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-left:0;
|
||||
}
|
||||
ul.faq > li {
|
||||
padding-right: 6px;
|
||||
margin-bottom: 6px;
|
||||
padding-left: 1.5em;
|
||||
text-indent: -1.5em;
|
||||
}
|
||||
ul.faq > li > a {
|
||||
display: inline;
|
||||
}
|
||||
ul.faq > li:target {
|
||||
background: #fafa88;
|
||||
}
|
||||
li.q {
|
||||
font-weight: 500;
|
||||
margin-top:1.5em;
|
||||
}
|
||||
ul > li.q:first-child, ul > li.q:not([id]) {
|
||||
margin-top:0;
|
||||
}
|
||||
li.q:before {
|
||||
content: "Q "; /* contains NO-BREAK SPACE */
|
||||
opacity: 0.6;
|
||||
}
|
||||
li.q:after {
|
||||
content: "";
|
||||
}
|
||||
li.a:before {
|
||||
content: "A "; /* contains NO-BREAK SPACE */
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
tablex {
|
||||
display: flex;
|
||||
}
|
||||
tablex > t {
|
||||
display: table;
|
||||
}
|
||||
tablex > t > h {
|
||||
display: table-row;
|
||||
opacity:0.4;
|
||||
}
|
||||
tablex > t > h > * {
|
||||
padding-bottom:1em;
|
||||
}
|
||||
tablex > t > h to {
|
||||
visibility: hidden;
|
||||
}
|
||||
tablex > t > r {
|
||||
text-decoration: none;
|
||||
display: table-row;
|
||||
}
|
||||
tablex in, tablex to, tablex out {
|
||||
display: table-cell;
|
||||
width: 5%;
|
||||
white-space: pre;
|
||||
padding-bottom:0.5em;
|
||||
}
|
||||
/*tablex to {
|
||||
width:0;
|
||||
}*/
|
||||
tablex to::after {
|
||||
font-feature-settings: 'calt' 1, 'case' 1;
|
||||
content: " → ";
|
||||
color: rgba(0,0,0,0.2);
|
||||
}
|
||||
tablex in, tablex out {
|
||||
/*background: #E3E6F1;*/
|
||||
color: rgba(0,0,0,0.8);
|
||||
border-radius: 1px;
|
||||
}
|
||||
tablex in {
|
||||
font-feature-settings: 'calt' 0;
|
||||
}
|
||||
tablex out {
|
||||
font-feature-settings: 'calt' 1;
|
||||
}
|
||||
tablex out.zero { font-feature-settings: 'calt' 1, 'zero' 1; }
|
||||
tablex out.tnum { font-feature-settings: 'calt' 1, 'tnum' 1; }
|
||||
tablex out.case { font-feature-settings: 'calt' 1, 'case' 1; }
|
||||
tablex out.frac { font-feature-settings: 'calt' 1, 'frac' 1; }
|
||||
tablex out.ss01 { font-feature-settings: 'calt' 1, 'ss01' 1; }
|
||||
tablex em {
|
||||
font-style: inherit;
|
||||
background: #FBE9A3;
|
||||
color: rgba(0,0,0,1);
|
||||
}
|
||||
|
||||
|
||||
boxes {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: stretch;
|
||||
margin-right:-1em;
|
||||
}
|
||||
box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: white;
|
||||
padding:2em;
|
||||
border-radius: 1px;
|
||||
margin-right:1em;
|
||||
margin-bottom:1em;
|
||||
flex: 1 1 10%;
|
||||
/*width:220px;*/
|
||||
}
|
||||
box:first-child {
|
||||
margin-left:0;
|
||||
}
|
||||
box h3 {
|
||||
margin-bottom:0.8em;
|
||||
}
|
||||
|
||||
#glyph-repertoire-iframe {
|
||||
pointer-events: none;
|
||||
}
|
||||
/*#glyph-repertoire-p {
|
||||
cursor: pointer;
|
||||
}*/
|
||||
a.glyph-repertoire {
|
||||
display:block;
|
||||
}
|
||||
372
docs/index.html
372
docs/index.html
|
|
@ -27,267 +27,10 @@
|
|||
<link rel="icon" type="image/png" href="favicon.ico" />
|
||||
|
||||
<link href="interface.css" rel="stylesheet">
|
||||
<style type="text/css">
|
||||
|
||||
* { margin:0; padding:0; }
|
||||
html { }
|
||||
body {
|
||||
background-color: #f4f4f4;
|
||||
color: #414141;
|
||||
font: 16px/22px Interface, sans-serif;
|
||||
letter-spacing: -0.1px;
|
||||
font-weight: 400;
|
||||
padding-bottom: 30px;
|
||||
|
||||
font-kerning: normal;
|
||||
-moz-font-feature-settings: "kern";
|
||||
-webkit-font-feature-settings: "kern";
|
||||
font-feature-settings: "kern";
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
word-break: break-word;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a:hover {
|
||||
color: rgb(48, 112, 232);
|
||||
}
|
||||
a.plain, a.fat {
|
||||
/* !important needed for qualification over @media further down */
|
||||
background: none !important;
|
||||
text-shadow: none !important;
|
||||
text-decoration: none;
|
||||
}
|
||||
a.fat {
|
||||
font-weight:500;
|
||||
}
|
||||
p {
|
||||
margin: 20px 0;
|
||||
}
|
||||
code, pre {
|
||||
font-family: "SFMono-Regular", Menlo, Consolas, Inconsolata, monospace;
|
||||
font-size:0.96em;
|
||||
}
|
||||
code {
|
||||
display: block;
|
||||
border-radius:1px;
|
||||
padding: 0.5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
pre {
|
||||
display: inline;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
dem { /* de-emphasize */
|
||||
font-weight: 400;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
font-weight: 500;
|
||||
}
|
||||
h1 {
|
||||
color: #333;
|
||||
font-size: 38px;
|
||||
letter-spacing: -1.3px;
|
||||
line-height: 40px;
|
||||
text-indent: -2px;
|
||||
margin-bottom: 30px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 24px;
|
||||
letter-spacing: -0.4px;
|
||||
line-height: 30px;
|
||||
margin-bottom: 25px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
h1 > a, h2 > a, h3 > a {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
.row {
|
||||
padding: 50px;
|
||||
/*background: salmon;*/
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
/*background: white;*/
|
||||
}
|
||||
.row > * {
|
||||
width:100%;
|
||||
max-width: 888px;
|
||||
flex: 1 0 100%;
|
||||
/*background: white;*/
|
||||
}
|
||||
|
||||
/* small screens */
|
||||
@media only screen and (max-device-width: 736px) {
|
||||
.row {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.row.white {
|
||||
background: white;
|
||||
}
|
||||
|
||||
.row.dark {
|
||||
background: #2b2b2b;
|
||||
color: #99999b;
|
||||
}
|
||||
.row.dark a:hover {
|
||||
color: rgb(164, 188, 255);
|
||||
}
|
||||
.row.dark h2, .row.dark h2 > a {
|
||||
color: #ccc;
|
||||
background: none;
|
||||
}
|
||||
|
||||
/*
|
||||
Medium.com-style link underline for high-density displays.
|
||||
Currently only enabled on Mac as the lines don't render correctly on
|
||||
Windows (even in Chrome) for some reason.
|
||||
*/
|
||||
@media (-webkit-min-device-pixel-ratio: 1.5) {
|
||||
a {
|
||||
text-decoration: none;
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(0,0,0,.6) 50%,
|
||||
rgba(0,0,0,0) 50%);
|
||||
background-repeat: repeat-x;
|
||||
background-size: 2px .1em;
|
||||
background-position: 0 1.15em;
|
||||
text-shadow:
|
||||
/* creates "openings" for descenders in the underline */
|
||||
-1px -1px 0 #f4f4f4,
|
||||
1px -1px 0 #f4f4f4,
|
||||
-1px 1px 0 #f4f4f4,
|
||||
1px 1px 0 #f4f4f4;
|
||||
}
|
||||
body.mac_or_ios a {
|
||||
/* line height calculated differently on mac c/t windows */
|
||||
background-position: 0 1.045em;
|
||||
}
|
||||
a:hover {
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(48, 112, 232, 1) 50%,
|
||||
rgba(48, 112, 232, 0) 50%);
|
||||
}
|
||||
.row.white a {
|
||||
text-shadow:
|
||||
-1px -1px 0 white,
|
||||
1px -1px 0 white,
|
||||
-1px 1px 0 white,
|
||||
1px 1px 0 white;
|
||||
}
|
||||
.row.dark a {
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(255,255,255,.3) 50%,
|
||||
rgba(255,255,255,0) 50%);
|
||||
text-shadow:
|
||||
-1px -1px 0 #2b2b2b,
|
||||
1px -1px 0 #2b2b2b,
|
||||
-1px 1px 0 #2b2b2b,
|
||||
1px 1px 0 #2b2b2b;
|
||||
}
|
||||
.row.dark a:hover {
|
||||
background-image:
|
||||
linear-gradient(to bottom,
|
||||
rgba(164, 188, 255, 1) 50%,
|
||||
rgba(164, 188, 255, 0) 50%);
|
||||
}
|
||||
}
|
||||
|
||||
.row ::selection {
|
||||
background: rgb(48, 112, 232);
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
}
|
||||
.row ::-moz-selection {
|
||||
background: rgb(48, 112, 232);
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.row.dark ::selection {
|
||||
background: rgb(218, 228, 255);
|
||||
color: black;
|
||||
}
|
||||
.row.dark ::-moz-selection {
|
||||
background: rgb(164, 188, 255);
|
||||
color: black;
|
||||
}
|
||||
|
||||
a > img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#repertoire-image {
|
||||
display:block;
|
||||
width:100%;
|
||||
height:40vw;
|
||||
background-image: url(res/repertoire.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-blend-mode: multiply;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
|
||||
/* FAQ */
|
||||
ul.faq {
|
||||
list-style:none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
ul.faq > li {
|
||||
padding-right: 6px;
|
||||
margin-bottom: 6px;
|
||||
padding-left: 1.5em;
|
||||
text-indent: -1.5em;
|
||||
}
|
||||
ul.faq > li > a {
|
||||
display: inline;
|
||||
}
|
||||
ul.faq > li:target {
|
||||
background: #fafa88;
|
||||
}
|
||||
li.q {
|
||||
font-weight: 500;
|
||||
margin-top:1.5em;
|
||||
}
|
||||
ul > li.q:first-child, ul > li.q:not([id]) {
|
||||
margin-top:0;
|
||||
}
|
||||
li.q:before {
|
||||
content: "Q "; /* contains NO-BREAK SPACE */
|
||||
opacity: 0.6;
|
||||
}
|
||||
li.a:before {
|
||||
content: "A "; /* contains NO-BREAK SPACE */
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
</style>
|
||||
<link href="index.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
if (!window.MSStream &&
|
||||
/mac|ipad|iphone|ipod/i.test(navigator.userAgent))
|
||||
{
|
||||
document.body.classList = 'mac_or_ios'
|
||||
}
|
||||
</script>
|
||||
<script src="index.js"></script>
|
||||
|
||||
<div class="row"><div>
|
||||
<h1>The Interface font family</h1>
|
||||
|
|
@ -329,6 +72,101 @@ li.a:before {
|
|||
<code>font-family: Interface, sans-serif;</code>
|
||||
</div></div>
|
||||
|
||||
<div class="row"><div>
|
||||
<p>
|
||||
There are currently three <a id="weights" href="#weights">weights</a>
|
||||
</p>
|
||||
<img src="res/weights-and-styles.svg" style="opacity:0.76;width:100%;display:block;margin:2em 0 3em 0">
|
||||
<h2><a id="features" href="#features">Features</a></h2>
|
||||
<boxes>
|
||||
<box>
|
||||
<h3>Contextual alternates (<q title='OpenType feature ID'>calt</q>)</h3>
|
||||
<tablex><t>
|
||||
<h><in>Disabled</in><to></to><out>Enabled</out></h>
|
||||
<r><in>12<em>:</em>34, FE<em>—</em>X</in><to></to><out>12:34, FE—X</out></r>
|
||||
<r><in>4<em>.</em>2</in><to></to><out>4.2</out></r>
|
||||
<r><in>SFO -> STO</in><to></to><out>SFO -> STO</out></r>
|
||||
<r><in>M<em>@</em>N m@n</in><to></to><out>M@N m@n</out></r>
|
||||
</t></tablex>
|
||||
</box>
|
||||
|
||||
<box>
|
||||
<h3>Tabular numbers (<q title='OpenType feature ID'>tnum</q>)</h3>
|
||||
<tablex><t>
|
||||
<h><in>Disabled</in><to></to><out>Enabled</out></h>
|
||||
<r><in><em>1</em>23456<em>7</em>890</in><to></to><out class="tnum">1234567890</out></r>
|
||||
<r><in>1131711<em> </em></in><to></to><out class="tnum">1131711<em> </em></out></r>
|
||||
<r><in>0040900<em> </em></in><to></to><out class="tnum">0040900<em> </em></out></r>
|
||||
</t></tablex>
|
||||
</box>
|
||||
|
||||
<box>
|
||||
<h3>Slashed zero (<q title='OpenType feature ID'>zero</q>)</h3>
|
||||
<tablex><t>
|
||||
<h><in>Disabled</in><to></to><out>Enabled</out></h>
|
||||
<r><in><em>0</em>123</in><to></to><out class="zero">0123</out></r>
|
||||
</t></tablex>
|
||||
</box>
|
||||
|
||||
<box>
|
||||
<h3>Fractions (<q title='OpenType feature ID'>frac</q>)</h3>
|
||||
<tablex><t>
|
||||
<h><in>Disabled</in><to></to><out>Enabled</out></h>
|
||||
<r>
|
||||
<in><em>1/3</em> <em>22/9</em> <em>3/4/5</em></in>
|
||||
<to></to><out class="frac">1/3 22/9 3/4/5</out>
|
||||
</r>
|
||||
</t></tablex>
|
||||
</box>
|
||||
|
||||
<box>
|
||||
<h3>Stylistic set #1: Open digits (<q title='OpenType feature ID'>ss01</q>)</h3>
|
||||
<tablex><t>
|
||||
<h><in>Disabled</in><to></to><out>Enabled</out></h>
|
||||
<r>
|
||||
<in>123<em>4</em>5<em>6</em>78<em>9</em>0</in>
|
||||
<to></to><out class="ss01">1234567890</out>
|
||||
</r>
|
||||
</t></tablex>
|
||||
</box>
|
||||
|
||||
<box>
|
||||
<h3>Case alternates (<q title='OpenType feature ID'>case</q>)</h3>
|
||||
<tablex><t>
|
||||
<h><in>Disabled</in><to></to><out>Enabled</out></h>
|
||||
<r>
|
||||
<in><em>(</em>Hello<em>)</em> <em>[</em>World<em>]</em> <em>{</em>9000<em>}</em></in>
|
||||
<to></to><out class="case">(Hello) [World] {9000}</out>
|
||||
</r>
|
||||
<r><in>SCHOOL <em>@</em> RUN</in><to></to><out class="case">SCHOOL @ RUN</out></r>
|
||||
<r><in>3 <em>+</em> 9 <em>=</em> 12*</in><to></to><out class="case">3 + 9 = 12*</out></r>
|
||||
<r><in><em>*</em> <em>+</em> <em>÷</em> <em>±</em> <em>×</em> <em>=</em> <em>≠</em> <em>•</em></in><to></to><out class="case">* + ÷ ± × = ≠ •</out></r>
|
||||
<r><in><em>→</em> <em>←</em> <em>⟶</em> <em>⟵</em> <em>−</em> <em>-</em> <em>–</em> <em>—</em> <em>:</em></in><to></to><out class="case">→ ← ⟶ ⟵ − - – — :</out></r>
|
||||
</t></tablex>
|
||||
</box>
|
||||
|
||||
</boxes>
|
||||
|
||||
<p>
|
||||
Also includes some
|
||||
Localized Forms (<q title='OpenType feature ID'>locl</q>),
|
||||
Numerators (<q title='OpenType feature ID'>numr</q>) and
|
||||
Denominators (<q title='OpenType feature ID'>dnom</q>).
|
||||
</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<h2><a href="glyphs/">Glyph repertoire</a></h2>
|
||||
<p>
|
||||
<a class="plain glyph-repertoire" href="glyphs/">
|
||||
<iframe id="glyph-repertoire-iframe" src="glyphs/?iframe"
|
||||
style="width:100%;height:510px" frameborder="0"></iframe>
|
||||
</a>
|
||||
</p>
|
||||
</div></div>
|
||||
|
||||
<div class="row-divider"></div>
|
||||
|
||||
<div class="row"><div>
|
||||
<h2><a id="story" href="#story">The story behind Interface</a></h2>
|
||||
<p>
|
||||
|
|
@ -365,10 +203,7 @@ li.a:before {
|
|||
</p>
|
||||
|
||||
<p>
|
||||
<a href="lab/?sample=Repertoire&size=42" id="repertoire-image"></a>
|
||||
</p>
|
||||
<p>
|
||||
Please refer to the <a href="lab/?sample=Repertoire&size=42">glyph repertoire</a>
|
||||
Please refer to the <a href="glyphs/">glyph repertoire</a>
|
||||
for an overview of currently–available glyphs and their quality.
|
||||
</p>
|
||||
|
||||
|
|
@ -396,7 +231,7 @@ li.a:before {
|
|||
<a href="https://en.wikipedia.org/wiki/Eric_Erickson">Eric Ericksons</a>,
|
||||
name alone somtimes does not suffice for unambiguous identity.
|
||||
The best way to be clear about what font you are talking about is to
|
||||
use the URL of this page (<pre>rsms.me/interface</pre>) when telling
|
||||
use the URL of this page (<q>rsms.me/interface</q>) when telling
|
||||
people about it.
|
||||
<a href="https://figma.com/">Design tools</a> and other software uses
|
||||
<a href="https://www.microsoft.com/typography/otspec/name.htm#nameIDs">a set of information embedded into every font</a> for identity, so names are only
|
||||
|
|
@ -471,14 +306,5 @@ li.a:before {
|
|||
<div class="row"><div>
|
||||
— <a href="https://twitter.com/rsms" class="plain">@rsms</a>
|
||||
</div></div>
|
||||
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-105091131-2', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
15
docs/index.js
Normal file
15
docs/index.js
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
var isMac = false
|
||||
|
||||
if (!window.MSStream &&
|
||||
/mac|ipad|iphone|ipod/i.test(navigator.userAgent))
|
||||
{
|
||||
isMac = true
|
||||
document.body.classList = 'mac_or_ios'
|
||||
}
|
||||
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-105091131-2', 'auto');
|
||||
ga('send', 'pageview');
|
||||
|
|
@ -2,43 +2,43 @@
|
|||
font-family: 'Interface';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url("https://rsms.me/interface/font-files/Interface-Regular.woff2?v=1.3") format("woff2"),
|
||||
url("https://rsms.me/interface/font-files/Interface-Regular.woff?v=1.3") format("woff");
|
||||
src: url("font-files/Interface-Regular.woff2?v=1.3") format("woff2"),
|
||||
url("font-files/Interface-Regular.woff?v=1.3") format("woff");
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Interface';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: url("https://rsms.me/interface/font-files/Interface-RegularItalic.woff2?v=1.3") format("woff2"),
|
||||
url("https://rsms.me/interface/font-files/Interface-RegularItalic.woff?v=1.3") format("woff");
|
||||
src: url("font-files/Interface-RegularItalic.woff2?v=1.3") format("woff2"),
|
||||
url("font-files/Interface-RegularItalic.woff?v=1.3") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Interface';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: url("https://rsms.me/interface/font-files/Interface-Medium.woff2?v=1.3") format("woff2"),
|
||||
url("https://rsms.me/interface/font-files/Interface-Medium.woff?v=1.3") format("woff");
|
||||
src: url("font-files/Interface-Medium.woff2?v=1.3") format("woff2"),
|
||||
url("font-files/Interface-Medium.woff?v=1.3") format("woff");
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Interface';
|
||||
font-style: italic;
|
||||
font-weight: 500;
|
||||
src: url("https://rsms.me/interface/font-files/Interface-MediumItalic.woff2?v=1.3") format("woff2"),
|
||||
url("https://rsms.me/interface/font-files/Interface-MediumItalic.woff?v=1.3") format("woff");
|
||||
src: url("font-files/Interface-MediumItalic.woff2?v=1.3") format("woff2"),
|
||||
url("font-files/Interface-MediumItalic.woff?v=1.3") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Interface';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url("https://rsms.me/interface/font-files/Interface-Bold.woff2?v=1.3") format("woff2"),
|
||||
url("https://rsms.me/interface/font-files/Interface-Bold.woff?v=1.3") format("woff");
|
||||
src: url("font-files/Interface-Bold.woff2?v=1.3") format("woff2"),
|
||||
url("font-files/Interface-Bold.woff?v=1.3") format("woff");
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Interface';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: url("https://rsms.me/interface/font-files/Interface-BoldItalic.woff2?v=1.3") format("woff2"),
|
||||
url("https://rsms.me/interface/font-files/Interface-BoldItalic.woff?v=1.3") format("woff");
|
||||
src: url("font-files/Interface-BoldItalic.woff2?v=1.3") format("woff2"),
|
||||
url("font-files/Interface-BoldItalic.woff?v=1.3") format("woff");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,38 +5,40 @@
|
|||
, ["Lambda", 923, "GREEK CAPITAL LETTER LAMDA"]
|
||||
, ["B", 66, "LATIN CAPITAL LETTER B", "#dbeaf7"]
|
||||
, ["C", 67, "LATIN CAPITAL LETTER C", "#dbeaf7"]
|
||||
, ["Chook", 391, "LATIN CAPITAL LETTER C WITH HOOK"]
|
||||
, ["D", 68, "LATIN CAPITAL LETTER D", "#dbeaf7"]
|
||||
, ["E", 69, "LATIN CAPITAL LETTER E", "#dbeaf7"]
|
||||
, ["Dzcaron_", 453, "LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON"]
|
||||
, ["F", 70, "LATIN CAPITAL LETTER F", "#dbeaf7"]
|
||||
, ["G", 71, "LATIN CAPITAL LETTER G", "#dbeaf7"]
|
||||
, ["H", 72, "LATIN CAPITAL LETTER H", "#dbeaf7"]
|
||||
, ["Hcedilla", 7720, "LATIN CAPITAL LETTER H WITH CEDILLA"]
|
||||
, ["Gbar", 484, "LATIN CAPITAL LETTER G WITH STROKE"]
|
||||
, ["Hbar", 294, "LATIN CAPITAL LETTER H WITH STROKE"]
|
||||
, ["Enhookcyrillic", 1223, "CYRILLIC CAPITAL LETTER EN WITH HOOK"]
|
||||
, ["Endescendercyrillic", 1186, "CYRILLIC CAPITAL LETTER EN WITH DESCENDER"]
|
||||
, ["uni04C9", 1225, "CYRILLIC CAPITAL LETTER EN WITH TAIL"]
|
||||
, ["Enghecyrillic", 1188, "CYRILLIC CAPITAL LIGATURE EN GHE"]
|
||||
, ["I", 73, "LATIN CAPITAL LETTER I", "#dbeaf7"]
|
||||
, ["Idieresisacute", 7726, "LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE", "<derived>"]
|
||||
, ["Itildebelow", 7724, "LATIN CAPITAL LETTER I WITH TILDE BELOW", "<derived>"]
|
||||
, ["Enhookcyrillic", 1223, "CYRILLIC CAPITAL LETTER EN WITH HOOK"]
|
||||
, ["J", 74, "LATIN CAPITAL LETTER J", "#dbeaf7"]
|
||||
, ["Endescendercyrillic", 1186, "CYRILLIC CAPITAL LETTER EN WITH DESCENDER"]
|
||||
, ["K", 75, "LATIN CAPITAL LETTER K", "#dbeaf7"]
|
||||
, ["Kabashkircyrillic", 1184, "CYRILLIC CAPITAL LETTER BASHKIR KA"]
|
||||
, ["Kadescendercyrillic", 1178, "CYRILLIC CAPITAL LETTER KA WITH DESCENDER"]
|
||||
, ["uni04C9", 1225, "CYRILLIC CAPITAL LETTER EN WITH TAIL"]
|
||||
, ["L", 76, "LATIN CAPITAL LETTER L", "#dbeaf7"]
|
||||
, ["Enghecyrillic", 1188, "CYRILLIC CAPITAL LIGATURE EN GHE"]
|
||||
, ["Lslash", 321, "LATIN CAPITAL LETTER L WITH STROKE"]
|
||||
, ["M", 77, "LATIN CAPITAL LETTER M", "#dbeaf7"]
|
||||
, ["uni04CD", 1229, "CYRILLIC CAPITAL LETTER EM WITH TAIL"]
|
||||
, ["N", 78, "LATIN CAPITAL LETTER N", "#dbeaf7"]
|
||||
, ["afii10026", 1048, "CYRILLIC CAPITAL LETTER I"]
|
||||
, ["uni048A", 1162, "CYRILLIC CAPITAL LETTER SHORT I WITH TAIL"]
|
||||
, ["O", 79, "LATIN CAPITAL LETTER O", "#dbeaf7"]
|
||||
, ["Kabashkircyrillic", 1184, "CYRILLIC CAPITAL LETTER BASHKIR KA"]
|
||||
, ["Oslash", 216, "LATIN CAPITAL LETTER O WITH STROKE"]
|
||||
, ["Kadescendercyrillic", 1178, "CYRILLIC CAPITAL LETTER KA WITH DESCENDER"]
|
||||
, ["Ohorn", 416, "LATIN CAPITAL LETTER O WITH HORN"]
|
||||
, ["P", 80, "LATIN CAPITAL LETTER P", "#dbeaf7"]
|
||||
, ["Q", 81, "LATIN CAPITAL LETTER Q", "#dbeaf7"]
|
||||
, ["R", 82, "LATIN CAPITAL LETTER R", "#dbeaf7"]
|
||||
, ["response", 8479, "RESPONSE", "#cceff2"]
|
||||
, ["uni04CD", 1229, "CYRILLIC CAPITAL LETTER EM WITH TAIL"]
|
||||
, ["S", 83, "LATIN CAPITAL LETTER S", "#dbeaf7"]
|
||||
, ["Germandbls", 7838, "LATIN CAPITAL LETTER SHARP S"]
|
||||
, ["T", 84, "LATIN CAPITAL LETTER T", "#dbeaf7"]
|
||||
|
|
@ -45,11 +47,11 @@
|
|||
, ["V", 86, "LATIN CAPITAL LETTER V", "#dbeaf7"]
|
||||
, ["W", 87, "LATIN CAPITAL LETTER W", "#dbeaf7"]
|
||||
, ["X", 88, "LATIN CAPITAL LETTER X", "#dbeaf7"]
|
||||
, ["Hadescendercyrillic", 1202, "CYRILLIC CAPITAL LETTER HA WITH DESCENDER"]
|
||||
, ["uni04FC", 1276, "CYRILLIC CAPITAL LETTER HA WITH HOOK"]
|
||||
, ["uni048E", 1166, "CYRILLIC CAPITAL LETTER ER WITH TICK"]
|
||||
, ["Y", 89, "LATIN CAPITAL LETTER Y", "#dbeaf7"]
|
||||
, ["Z", 90, "LATIN CAPITAL LETTER Z", "#dbeaf7"]
|
||||
, ["AE", 198, "LATIN CAPITAL LETTER AE"]
|
||||
, ["response", 8479, "RESPONSE", "#cceff2"]
|
||||
, ["OE", 338, "LATIN CAPITAL LIGATURE OE"]
|
||||
, ["Thorn", 222, "LATIN CAPITAL LETTER THORN"]
|
||||
, ["Gamma", 915, "GREEK CAPITAL LETTER GAMMA"]
|
||||
|
|
@ -60,7 +62,9 @@
|
|||
, ["Pi", 928, "GREEK CAPITAL LETTER PI"]
|
||||
, ["Sigma", 931, "GREEK CAPITAL LETTER SIGMA"]
|
||||
, ["Phi", 934, "GREEK CAPITAL LETTER PHI"]
|
||||
, ["Hadescendercyrillic", 1202, "CYRILLIC CAPITAL LETTER HA WITH DESCENDER"]
|
||||
, ["Psi", 936, "GREEK CAPITAL LETTER PSI"]
|
||||
, ["uni04FC", 1276, "CYRILLIC CAPITAL LETTER HA WITH HOOK"]
|
||||
, ["Omega", 937, "GREEK CAPITAL LETTER OMEGA"]
|
||||
, ["Omega", 8486, "OHM SIGN"]
|
||||
, ["afii10018", 1041, "CYRILLIC CAPITAL LETTER BE"]
|
||||
|
|
@ -79,7 +83,6 @@
|
|||
, ["afii10147", 1138, "CYRILLIC CAPITAL LETTER FITA"]
|
||||
, ["uni0524", 1316, "CYRILLIC CAPITAL LETTER PE WITH DESCENDER"]
|
||||
, ["afii10145", 1039, "CYRILLIC CAPITAL LETTER DZHE"]
|
||||
, ["uni048E", 1166, "CYRILLIC CAPITAL LETTER ER WITH TICK"]
|
||||
, ["afii10037", 1059, "CYRILLIC CAPITAL LETTER U"]
|
||||
, ["afii10038", 1060, "CYRILLIC CAPITAL LETTER EF", "<derived>"]
|
||||
, ["afii10040", 1062, "CYRILLIC CAPITAL LETTER TSE"]
|
||||
|
|
@ -211,11 +214,11 @@
|
|||
, ["cheverticalstrokecyrillic", 1209, "CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE"]
|
||||
, ["shacyrillic", 1096, "CYRILLIC SMALL LETTER SHA"]
|
||||
, ["shchacyrillic", 1097, "CYRILLIC SMALL LETTER SHCHA"]
|
||||
, ["softsigncyrillic", 1100, "CYRILLIC SMALL LETTER SOFT SIGN"]
|
||||
, ["hardsigncyrillic", 1098, "CYRILLIC SMALL LETTER HARD SIGN"]
|
||||
, ["yericyrillic", 1099, "CYRILLIC SMALL LETTER YERU"]
|
||||
, ["uni048D", 1165, "CYRILLIC SMALL LETTER SEMISOFT SIGN", "<derived>"]
|
||||
, ["yatcyrillic", 1123, "CYRILLIC SMALL LETTER YAT", "<derived>"]
|
||||
, ["softsigncyrillic", 1100, "CYRILLIC SMALL LETTER SOFT SIGN"]
|
||||
, ["ljecyrillic", 1113, "CYRILLIC SMALL LETTER LJE"]
|
||||
, ["njecyrillic", 1114, "CYRILLIC SMALL LETTER NJE"]
|
||||
, ["ereversedcyrillic", 1101, "CYRILLIC SMALL LETTER E"]
|
||||
|
|
@ -252,6 +255,7 @@
|
|||
, ["kip", 8365, "KIP SIGN", "#cceff2"]
|
||||
, ["won", 8361, "WON SIGN", "#cceff2"]
|
||||
, ["lira", 8356, "LIRA SIGN", "#cceff2"]
|
||||
, ["austral", 8371, "AUSTRAL SIGN", "#cceff2"]
|
||||
, ["hryvnia", 8372, "HRYVNIA SIGN", "#cceff2"]
|
||||
, ["naira", 8358, "NAIRA SIGN", "#cceff2"]
|
||||
, ["guarani", 8370, "GUARANI SIGN", "#cceff2"]
|
||||
|
|
@ -265,34 +269,49 @@
|
|||
, ["rupee", 8360, "RUPEE SIGN", "#cceff2"]
|
||||
, ["lari", 8382, "LARI SIGN", "#cceff2"]
|
||||
, ["zero", 48, "DIGIT ZERO", "#e2f4ea"]
|
||||
, ["zero.tnum", null, null, "#ebf6c8"]
|
||||
, ["zero.slash", null, null, "#e2f4ea"]
|
||||
, ["zero.tnum.slash", null, null, "#ebf6c8"]
|
||||
, ["one", 49, "DIGIT ONE", "#e2f4ea"]
|
||||
, ["one.tnum", null, null, "#ebf6c8"]
|
||||
, ["two", 50, "DIGIT TWO", "#e2f4ea"]
|
||||
, ["two.tnum", null, null, "#ebf6c8"]
|
||||
, ["three", 51, "DIGIT THREE", "#e2f4ea"]
|
||||
, ["four", 52, "DIGIT FOUR", "#e2f4ea"]
|
||||
, ["three.tnum", null, null, "#ebf6c8"]
|
||||
, ["four.1", null, null, "#ccf6ca"]
|
||||
, ["four.tnum.1", null, null, "#ebf6c8"]
|
||||
, ["five", 53, "DIGIT FIVE", "#e2f4ea"]
|
||||
, ["six", 54, "DIGIT SIX", "#e2f4ea"]
|
||||
, ["six.1", null, null, "#ccf6ca"]
|
||||
, ["five.tnum", null, null, "#ebf6c8"]
|
||||
, ["six.tnum.1", null, null, "#ebf6c8"]
|
||||
, ["seven", 55, "DIGIT SEVEN", "#e2f4ea"]
|
||||
, ["seven.tnum", null, null, "#ebf6c8"]
|
||||
, ["six.tnum", null, null, "#ebf6c8"]
|
||||
, ["eight", 56, "DIGIT EIGHT", "#e2f4ea"]
|
||||
, ["nine", 57, "DIGIT NINE", "#e2f4ea"]
|
||||
, ["zero.tnum", null, null, "#ebf6c8"]
|
||||
, ["one.tnum", null, null, "#ebf6c8"]
|
||||
, ["two.tnum", null, null, "#ebf6c8"]
|
||||
, ["three.tnum", null, null, "#ebf6c8"]
|
||||
, ["five.tnum", null, null, "#ebf6c8"]
|
||||
, ["six.tnum", null, null, "#ebf6c8"]
|
||||
, ["seven.tnum", null, null, "#ebf6c8"]
|
||||
, ["nine.1", null, null, "#ccf6ca"]
|
||||
, ["nine.tnum.1", null, null, "#ebf6c8"]
|
||||
, ["ampersand", 38, "AMPERSAND", "#efefef"]
|
||||
, ["exclam", 33, "EXCLAMATION MARK", "#efefef"]
|
||||
, ["exclamdown", 161, "INVERTED EXCLAMATION MARK", "#efefef"]
|
||||
, ["question", 63, "QUESTION MARK", "#efefef"]
|
||||
, ["questiondown", 191, "INVERTED QUESTION MARK", "#efefef"]
|
||||
, ["parenleft", 40, "LEFT PARENTHESIS", "#efefef"]
|
||||
, ["parenleft.case", null, null, "#efefef"]
|
||||
, ["parenright", 41, "RIGHT PARENTHESIS", "#efefef"]
|
||||
, ["parenright.case", null, null, "#efefef"]
|
||||
, ["bracketleft", 91, "LEFT SQUARE BRACKET", "#efefef"]
|
||||
, ["bracketleft.case", null, null, "#efefef"]
|
||||
, ["bracketright", 93, "RIGHT SQUARE BRACKET", "#efefef"]
|
||||
, ["bracketright.case", null, null, "#efefef"]
|
||||
, ["braceleft", 123, "LEFT CURLY BRACKET", "#efefef"]
|
||||
, ["braceleft.case", null, null, "#efefef"]
|
||||
, ["braceright", 125, "RIGHT CURLY BRACKET", "#efefef"]
|
||||
, ["braceright.case", null, null, "#efefef"]
|
||||
, ["at", 64, "COMMERCIAL AT", "#efefef"]
|
||||
, ["at.case", null, null, "#efefef"]
|
||||
, ["numbersign", 35, "NUMBER SIGN", "#efefef"]
|
||||
, ["currency", 164, "CURRENCY SIGN", "#cceff2"]
|
||||
, ["slash", 47, "SOLIDUS", "#efefef"]
|
||||
|
|
@ -301,10 +320,15 @@
|
|||
, ["backslash", 92, "REVERSE SOLIDUS", "#efefef"]
|
||||
, ["hyphenbullet", 8259, "HYPHEN BULLET", "#efefef"]
|
||||
, ["hyphen", 45, "HYPHEN-MINUS", "#efefef"]
|
||||
, ["hyphen.case", null, null, "#efefef"]
|
||||
, ["endash", 8211, "EN DASH", "#efefef"]
|
||||
, ["endash.case", null, null, "#efefef"]
|
||||
, ["figuredash", 8210, "FIGURE DASH", "#efefef"]
|
||||
, ["figuredash.case", null, null, "#efefef"]
|
||||
, ["emdash", 8212, "EM DASH", "#efefef"]
|
||||
, ["emdash.case", null, null, "#efefef"]
|
||||
, ["bullet", 8226, "BULLET", "#efefef"]
|
||||
, ["bullet.case", null, null, "#efefef"]
|
||||
, ["quoteleft", 8216, "LEFT SINGLE QUOTATION MARK", "#efefef"]
|
||||
, ["quoteright", 8217, "RIGHT SINGLE QUOTATION MARK", "#efefef"]
|
||||
, ["primetripl1", 8244, "TRIPLE PRIME", "#efefef"]
|
||||
|
|
@ -316,8 +340,10 @@
|
|||
, ["quotesinglbase", 8218, "SINGLE LOW-9 QUOTATION MARK", "#efefef"]
|
||||
, ["comma", 44, "COMMA", "#efefef"]
|
||||
, ["period", 46, "FULL STOP", "#efefef"]
|
||||
, ["period.num", null, null, "#efefef"]
|
||||
, ["ellipsis", 8230, "HORIZONTAL ELLIPSIS", "#efefef"]
|
||||
, ["colon", 58, "COLON", "#efefef"]
|
||||
, ["colon.case", null, null, "#efefef"]
|
||||
, ["semicolon", 59, "SEMICOLON", "#efefef"]
|
||||
, ["guilsinglleft", 8249, "SINGLE LEFT-POINTING ANGLE QUOTATION MARK", "#efefef"]
|
||||
, ["guilsinglright", 8250, "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK", "#efefef"]
|
||||
|
|
@ -328,12 +354,19 @@
|
|||
, ["lessequal", 8804, "LESS-THAN OR EQUAL TO", "#cceff2"]
|
||||
, ["greaterequal", 8805, "GREATER-THAN OR EQUAL TO", "#cceff2"]
|
||||
, ["equal", 61, "EQUALS SIGN", "#cceff2"]
|
||||
, ["equal.case", null, null, "#cceff2"]
|
||||
, ["notequal", 8800, "NOT EQUAL TO", "#cceff2"]
|
||||
, ["notequal.case", null, null, "#cceff2"]
|
||||
, ["plus", 43, "PLUS SIGN", "#cceff2"]
|
||||
, ["plus.case", null, null, "#cceff2"]
|
||||
, ["minus", 8722, "MINUS SIGN", "#cceff2"]
|
||||
, ["minus.case", null, null, "#cceff2"]
|
||||
, ["multiply", 215, "MULTIPLICATION SIGN", "#cceff2"]
|
||||
, ["multiply.case", null, null, "#cceff2"]
|
||||
, ["divide", 247, "DIVISION SIGN", "#cceff2"]
|
||||
, ["divide.case", null, null, "#cceff2"]
|
||||
, ["plusminus", 177, "PLUS-MINUS SIGN", "#cceff2"]
|
||||
, ["plusminus.case", null, null, "#cceff2"]
|
||||
, ["approxequal", 8776, "ALMOST EQUAL TO", "#cceff2"]
|
||||
, ["asciitilde", 126, "TILDE", "#cceff2"]
|
||||
, ["logicalnot", 172, "NOT SIGN", "#cceff2"]
|
||||
|
|
@ -345,6 +378,7 @@
|
|||
, ["daggerdbl", 8225, "DOUBLE DAGGER", "#efefef"]
|
||||
, ["asciicircum", 94, "CIRCUMFLEX ACCENT", "#cceff2"]
|
||||
, ["asterisk", 42, "ASTERISK", "#efefef"]
|
||||
, ["asterisk.case", null, null, "#efefef"]
|
||||
, ["registered", 174, "REGISTERED SIGN", "#cceff2"]
|
||||
, ["trademark", 8482, "TRADE MARK SIGN", "#cceff2"]
|
||||
, ["servicemark", 8480, "SERVICE MARK", "#cceff2"]
|
||||
|
|
@ -453,9 +487,19 @@
|
|||
, ["hairspace", 8202, "HAIR SPACE", "#ede5f9"]
|
||||
, ["zerowidthspace", 8203, "ZERO WIDTH SPACE", "#efefef"]
|
||||
, ["arrowleft", 8592, "LEFTWARDS ARROW", "#cceff2"]
|
||||
, ["arrowleft.case", null, null, "#cceff2"]
|
||||
, ["arrowleftlong", null, null, "#cceff2"]
|
||||
, ["arrowleftlong.case", null, null, "#cceff2"]
|
||||
, ["arrowup", 8593, "UPWARDS ARROW", "#cceff2"]
|
||||
, ["arrowright", 8594, "RIGHTWARDS ARROW", "#cceff2"]
|
||||
, ["arrowright.case", null, null, "#cceff2"]
|
||||
, ["arrowrightlong", null, null, "#cceff2"]
|
||||
, ["arrowrightlong.case", null, null, "#cceff2"]
|
||||
, ["arrowdown", 8595, "DOWNWARDS ARROW", "#cceff2"]
|
||||
, ["arrowNW", 8598, "NORTH WEST ARROW", "#cceff2"]
|
||||
, ["arrowNE", 8599, "NORTH EAST ARROW", "#cceff2"]
|
||||
, ["arrowSE", 8600, "SOUTH EAST ARROW", "#cceff2"]
|
||||
, ["arrowSW", 8601, "SOUTH WEST ARROW", "#cceff2"]
|
||||
, ["triagrt", 9658, "BLACK RIGHT-POINTING POINTER", "#cceff2"]
|
||||
, ["triagdn", 9660, "BLACK DOWN-POINTING TRIANGLE", "#cceff2"]
|
||||
, ["triagup", 9650, "BLACK UP-POINTING TRIANGLE", "#cceff2"]
|
||||
|
|
@ -489,7 +533,6 @@
|
|||
, ["crossbar", null, null, "#dddddd"]
|
||||
, ["uniA653", 42579, "CYRILLIC SMALL LETTER IOTIFIED YAT"]
|
||||
, ["uniA652", 42578, "CYRILLIC CAPITAL LETTER IOTIFIED YAT"]
|
||||
, ["austral", 8371, "AUSTRAL SIGN", "#cceff2"]
|
||||
, ["uniA651", 42577, "CYRILLIC SMALL LETTER YERU WITH BACK YER"]
|
||||
, ["uniA650", 42576, "CYRILLIC CAPITAL LETTER YERU WITH BACK YER"]
|
||||
, ["uniA657", 42583, "CYRILLIC SMALL LETTER IOTIFIED A"]
|
||||
|
|
@ -538,7 +581,6 @@
|
|||
, ["uniAB58", 43864, "LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING"]
|
||||
, ["uniAB57", 43863, "LATIN SMALL LETTER X WITH LONG LEFT LEG"]
|
||||
, ["uniAB56", 43862, "LATIN SMALL LETTER X WITH LOW RIGHT RING"]
|
||||
, ["Gbar", 484, "LATIN CAPITAL LETTER G WITH STROKE"]
|
||||
, ["uniAB54", 43860, "LATIN SMALL LETTER CHI WITH LOW RIGHT RING"]
|
||||
, ["uniAB53", 43859, "LATIN SMALL LETTER CHI"]
|
||||
, ["uniAB52", 43858, "LATIN SMALL LETTER U WITH LEFT HOOK"]
|
||||
|
|
@ -574,6 +616,7 @@
|
|||
, ["uni02E7_uni02E6", null, null, "#dddddd"]
|
||||
, ["tildesubnosp_uni1ABD", null, null, "#dddddd"]
|
||||
, ["uniA794.cn", null, null, "#c4f2c1"]
|
||||
, ["romantwelve", 8555, "ROMAN NUMERAL TWELVE", "#e2f4ea"]
|
||||
, ["ringacute", null, null, "#dddddd"]
|
||||
, ["ubar", 649, "LATIN SMALL LETTER U BAR"]
|
||||
, ["uni2C7A.cn", null, null, "#c4f2c1"]
|
||||
|
|
@ -762,6 +805,7 @@
|
|||
, ["uni037D", 893, "GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL"]
|
||||
, ["uni03FD.cn", null, null, "#c4f2c1"]
|
||||
, ["srthook.cn", null, null, "#c4f2c1"]
|
||||
, ["uniA684", 42628, "CYRILLIC CAPITAL LETTER ZHWE"]
|
||||
, ["interrobang", 8253, "INTERROBANG", "#efefef"]
|
||||
, ["primemod", 697, "MODIFIER LETTER PRIME"]
|
||||
, ["uni213B", 8507, "FACSIMILE SIGN", "#cceff2"]
|
||||
|
|
@ -770,6 +814,7 @@
|
|||
, ["uniA677", 42615, "COMBINING CYRILLIC LETTER U", "#f9e2e2"]
|
||||
, ["uniA676", 42614, "COMBINING CYRILLIC LETTER YI", "#f9e2e2"]
|
||||
, ["erev", 600, "LATIN SMALL LETTER REVERSED E"]
|
||||
, ["uni27EA", 10218, "MATHEMATICAL LEFT DOUBLE ANGLE BRACKET", "#efefef"]
|
||||
, ["uniA670", 42608, "COMBINING CYRILLIC TEN MILLIONS SIGN", "#f9e2e2"]
|
||||
, ["uniA673", 42611, "SLAVONIC ASTERISK", "#efefef"]
|
||||
, ["uniA672", 42610, "COMBINING CYRILLIC THOUSAND MILLIONS SIGN", "#f9e2e2"]
|
||||
|
|
@ -893,7 +938,6 @@
|
|||
, ["verticallinelowmod", 716, "MODIFIER LETTER LOW VERTICAL LINE"]
|
||||
, ["secondtonechinese", 714, "MODIFIER LETTER ACUTE ACCENT"]
|
||||
, ["Tonefive", 444, "LATIN CAPITAL LETTER TONE FIVE"]
|
||||
, ["romantwelve", 8555, "ROMAN NUMERAL TWELVE", "#e2f4ea"]
|
||||
, ["arrowheadupmod", 708, "MODIFIER LETTER UP ARROWHEAD", "#cceff2"]
|
||||
, ["arrowheaddownmod", 709, "MODIFIER LETTER DOWN ARROWHEAD", "#cceff2"]
|
||||
, ["arrowheadleftmod", 706, "MODIFIER LETTER LEFT ARROWHEAD", "#cceff2"]
|
||||
|
|
@ -980,6 +1024,7 @@
|
|||
, ["uni0504", 1284, "CYRILLIC CAPITAL LETTER KOMI ZJE"]
|
||||
, ["uni27EF", 10223, "MATHEMATICAL RIGHT FLATTENED PARENTHESIS", "#efefef"]
|
||||
, ["finaltsadi", 693, "MODIFIER LETTER SMALL TURNED R WITH HOOK"]
|
||||
, ["rdescend", 636, "LATIN SMALL LETTER R WITH LONG LEG"]
|
||||
, ["uni27EE", 10222, "MATHEMATICAL LEFT FLATTENED PARENTHESIS", "#efefef"]
|
||||
, ["uni27ED", 10221, "MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET", "#efefef"]
|
||||
, ["uniA769", 42857, "LATIN SMALL LETTER VEND"]
|
||||
|
|
@ -993,6 +1038,7 @@
|
|||
, ["lbelt", 620, "LATIN SMALL LETTER L WITH BELT"]
|
||||
, ["uni0359", 857, "COMBINING ASTERISK BELOW", "#f9e2e2"]
|
||||
, ["uni0358", 856, "COMBINING DOT ABOVE RIGHT", "#f9e2e2"]
|
||||
, ["uni02E9_uni02E7_uni02E7", null, null, "#dddddd"]
|
||||
, ["epsilon1revclosed", 606, "LATIN SMALL LETTER CLOSED REVERSED OPEN E"]
|
||||
, ["uni0355", 853, "COMBINING RIGHT ARROWHEAD BELOW", "#f9e2e2"]
|
||||
, ["uni0354", 852, "COMBINING LEFT ARROWHEAD BELOW", "#f9e2e2"]
|
||||
|
|
@ -1059,6 +1105,7 @@
|
|||
, ["uniA669", 42601, "CYRILLIC SMALL LETTER MONOCULAR O"]
|
||||
, ["uni1DD6", 7638, "COMBINING LATIN SMALL LETTER AV", "#f9e2e2"]
|
||||
, ["uni1DD7", 7639, "COMBINING LATIN SMALL LETTER C CEDILLA", "#f9e2e2"]
|
||||
, ["uni1DCE", 7630, "COMBINING OGONEK ABOVE", "#f9e2e2"]
|
||||
, ["uniAB36.cn", null, null, "#c4f2c1"]
|
||||
, ["uni051F", 1311, "CYRILLIC SMALL LETTER ALEUT KA"]
|
||||
, ["oneeighth", 8539, "VULGAR FRACTION ONE EIGHTH", "#e2f4ea"]
|
||||
|
|
@ -1095,6 +1142,7 @@
|
|||
, ["uni02E6_uni02E5_uni02E6", null, null, "#dddddd"]
|
||||
, ["uniA73F.cn", null, null, "#c4f2c1"]
|
||||
, ["spaceopenbox", 9251, "OPEN BOX", "#cceff2"]
|
||||
, ["uni02E6_uni02E5_uni02E7", null, null, "#dddddd"]
|
||||
, ["uni02E8_uni02E7_uni02E7", null, null, "#dddddd"]
|
||||
, ["uni02E9_uni02E9_uni02E8", null, null, "#dddddd"]
|
||||
, ["uni02E8_uni02E7_uni02E5", null, null, "#dddddd"]
|
||||
|
|
@ -1142,6 +1190,7 @@
|
|||
, ["six.sup", null, null, "#dddddd"]
|
||||
, ["tonebarhighmod", 742, "MODIFIER LETTER HIGH TONE BAR", "#cceff2"]
|
||||
, ["tonebarmidmod", 743, "MODIFIER LETTER MID TONE BAR", "#cceff2"]
|
||||
, ["schwa", 601, "LATIN SMALL LETTER SCHWA"]
|
||||
, ["tonebarlowmod", 744, "MODIFIER LETTER LOW TONE BAR", "#cceff2"]
|
||||
, ["tonebarextralowmod", 745, "MODIFIER LETTER EXTRA-LOW TONE BAR", "#cceff2"]
|
||||
, ["Fturn", 8498, "TURNED CAPITAL F"]
|
||||
|
|
@ -1151,7 +1200,6 @@
|
|||
, ["uni023B", 571, "LATIN CAPITAL LETTER C WITH STROKE"]
|
||||
, ["uni023C", 572, "LATIN SMALL LETTER C WITH STROKE"]
|
||||
, ["uni023A", 570, "LATIN CAPITAL LETTER A WITH STROKE"]
|
||||
, ["uniA684", 42628, "CYRILLIC CAPITAL LETTER ZHWE"]
|
||||
, ["uniA685", 42629, "CYRILLIC SMALL LETTER ZHWE"]
|
||||
, ["uniA686", 42630, "CYRILLIC CAPITAL LETTER CCHE"]
|
||||
, ["uniA687", 42631, "CYRILLIC SMALL LETTER CCHE"]
|
||||
|
|
@ -1166,6 +1214,7 @@
|
|||
, ["babygamma", 612, "LATIN SMALL LETTER RAMS HORN"]
|
||||
, ["Vcursive", 434, "LATIN CAPITAL LETTER V WITH HOOK"]
|
||||
, ["careof", 8453, "CARE OF", "#cceff2"]
|
||||
, ["uni02E6_uni02E7", null, null, "#dddddd"]
|
||||
, ["phi1", 981, "GREEK PHI SYMBOL"]
|
||||
, ["uni02E5_uni02E5_uni02E8", null, null, "#dddddd"]
|
||||
, ["uni02E5_uni02E5_uni02E9", null, null, "#dddddd"]
|
||||
|
|
@ -1179,11 +1228,11 @@
|
|||
, ["uni2C67", 11367, "LATIN CAPITAL LETTER H WITH DESCENDER"]
|
||||
, ["uni0500", 1280, "CYRILLIC CAPITAL LETTER KOMI DE"]
|
||||
, ["uni27EB", 10219, "MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET", "#efefef"]
|
||||
, ["uni27EA", 10218, "MATHEMATICAL LEFT DOUBLE ANGLE BRACKET", "#efefef"]
|
||||
, ["uni0503", 1283, "CYRILLIC SMALL LETTER KOMI DJE"]
|
||||
, ["wynn", 447, "LATIN LETTER WYNN"]
|
||||
, ["uni0505", 1285, "CYRILLIC SMALL LETTER KOMI ZJE"]
|
||||
, ["uni0506", 1286, "CYRILLIC CAPITAL LETTER KOMI DZJE"]
|
||||
, ["uni0502", 1282, "CYRILLIC CAPITAL LETTER KOMI DJE"]
|
||||
, ["uni0507", 1287, "CYRILLIC SMALL LETTER KOMI DZJE"]
|
||||
, ["uni0508", 1288, "CYRILLIC CAPITAL LETTER KOMI LJE"]
|
||||
, ["uni0509", 1289, "CYRILLIC SMALL LETTER KOMI LJE"]
|
||||
|
|
@ -1330,6 +1379,7 @@
|
|||
, ["Esh", 425, "LATIN CAPITAL LETTER ESH"]
|
||||
, ["uni1D2D", 7469, "MODIFIER LETTER CAPITAL AE"]
|
||||
, ["uni1D2E", 7470, "MODIFIER LETTER CAPITAL B"]
|
||||
, ["uni1ABC", 6844, "COMBINING DOUBLE PARENTHESES ABOVE", "#f9e2e2"]
|
||||
, ["uni1D2F", 7471, "MODIFIER LETTER CAPITAL BARRED B"]
|
||||
, ["uni1D2A", 7466, "GREEK LETTER SMALL CAPITAL PSI"]
|
||||
, ["uni1D2B", 7467, "CYRILLIC LETTER SMALL CAPITAL EL"]
|
||||
|
|
@ -1435,23 +1485,22 @@
|
|||
, ["romanthree", 8546, "ROMAN NUMERAL THREE", "#e2f4ea"]
|
||||
, ["uni1D36", 7478, "MODIFIER LETTER CAPITAL J"]
|
||||
, ["uni1DCF", 7631, "COMBINING ZIGZAG BELOW", "#f9e2e2"]
|
||||
, ["uni1DCE", 7630, "COMBINING OGONEK ABOVE", "#f9e2e2"]
|
||||
, ["uni1DCD", 7629, "COMBINING DOUBLE CIRCUMFLEX ABOVE", "#f9e2e2"]
|
||||
, ["uni1DCC", 7628, "COMBINING MACRON-BREVE", "#f9e2e2"]
|
||||
, ["uni1DCB", 7627, "COMBINING BREVE-MACRON", "#f9e2e2"]
|
||||
, ["uniE004", 57348, "[private use E004]"]
|
||||
, ["uni1DCA", 7626, "COMBINING LATIN SMALL LETTER R BELOW", "#f9e2e2"]
|
||||
, ["uniE001", 57345, "[private use E001]"]
|
||||
, ["Nhook", 413, "LATIN CAPITAL LETTER N WITH LEFT HOOK"]
|
||||
, ["tildemacroncomb.lc", null, null, "#dddddd"]
|
||||
, ["iota1", 617, "LATIN SMALL LETTER IOTA"]
|
||||
, ["uni02E6_uni02E8", null, null, "#dddddd"]
|
||||
, ["uniE001", 57345, "[private use E001]"]
|
||||
, ["uni02E6_uni02E9", null, null, "#dddddd"]
|
||||
, ["uni1DC9", 7625, "COMBINING ACUTE-GRAVE-ACUTE", "#f9e2e2"]
|
||||
, ["uni1DC8", 7624, "COMBINING GRAVE-ACUTE-GRAVE", "#f9e2e2"]
|
||||
, ["uni1DC7", 7623, "COMBINING ACUTE-MACRON", "#f9e2e2"]
|
||||
, ["uni02E6_uni02E5", null, null, "#dddddd"]
|
||||
, ["uni1DC5", 7621, "COMBINING GRAVE-MACRON", "#f9e2e2"]
|
||||
, ["uni02E6_uni02E7", null, null, "#dddddd"]
|
||||
, ["uni1DC3", 7619, "COMBINING SUSPENSION MARK", "#f9e2e2"]
|
||||
, ["uni1DC2", 7618, "COMBINING SNAKE BELOW", "#f9e2e2"]
|
||||
, ["uni1DC1", 7617, "COMBINING DOTTED ACUTE ACCENT", "#f9e2e2"]
|
||||
|
|
@ -1566,7 +1615,6 @@
|
|||
, ["uni1ABD", 6845, "COMBINING PARENTHESES BELOW", "#f9e2e2"]
|
||||
, ["uniA79A", 42906, "LATIN CAPITAL LETTER VOLAPUK AE"]
|
||||
, ["uni1ABA", 6842, "COMBINING STRONG CENTRALIZATION STROKE BELOW", "#f9e2e2"]
|
||||
, ["uni1ABC", 6844, "COMBINING DOUBLE PARENTHESES ABOVE", "#f9e2e2"]
|
||||
, ["uni1ABB", 6843, "COMBINING PARENTHESES ABOVE", "#f9e2e2"]
|
||||
, ["ascriptturn", 594, "LATIN SMALL LETTER TURNED ALPHA"]
|
||||
, ["uni1DB8", 7608, "MODIFIER LETTER SMALL CAPITAL U"]
|
||||
|
|
@ -1635,7 +1683,6 @@
|
|||
, ["uni2E1E", 11806, "TILDE WITH DOT ABOVE", "#efefef"]
|
||||
, ["uni2E1D", 11805, "RIGHT LOW PARAPHRASE BRACKET", "#efefef"]
|
||||
, ["uni2E1F", 11807, "TILDE WITH DOT BELOW", "#efefef"]
|
||||
, ["Chook", 391, "LATIN CAPITAL LETTER C WITH HOOK"]
|
||||
, ["uni1DE9", 7657, "COMBINING LATIN SMALL LETTER BETA", "#f9e2e2"]
|
||||
, ["uniAB39", 43833, "LATIN SMALL LETTER L WITH MIDDLE RING"]
|
||||
, ["uniAB38", 43832, "LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE"]
|
||||
|
|
@ -1663,6 +1710,7 @@
|
|||
, ["uni02E5_uni02E8_uni02E7", null, null, "#dddddd"]
|
||||
, ["uni02E5_uni02E8_uni02E6", null, null, "#dddddd"]
|
||||
, ["d.cn", null, null, "#c4f2c1"]
|
||||
, ["uni1DE4", 7652, "COMBINING LATIN SMALL LETTER S", "#f9e2e2"]
|
||||
, ["uni035A", 858, "COMBINING DOUBLE RING BELOW", "#f9e2e2"]
|
||||
, ["uni02E5_uni02E8_uni02E9", null, null, "#dddddd"]
|
||||
, ["uni02E5_uni02E8_uni02E8", null, null, "#dddddd"]
|
||||
|
|
@ -1727,7 +1775,6 @@
|
|||
, ["uniA767", 42855, "LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER"]
|
||||
, ["uniA765", 42853, "LATIN SMALL LETTER THORN WITH STROKE"]
|
||||
, ["uniA764", 42852, "LATIN CAPITAL LETTER THORN WITH STROKE"]
|
||||
, ["uni02E9_uni02E7_uni02E7", null, null, "#dddddd"]
|
||||
, ["uniA762", 42850, "LATIN CAPITAL LETTER VISIGOTHIC Z"]
|
||||
, ["uniA761", 42849, "LATIN SMALL LETTER VY"]
|
||||
, ["uniA760", 42848, "LATIN CAPITAL LETTER VY"]
|
||||
|
|
@ -1882,6 +1929,7 @@
|
|||
, ["uni2C70", 11376, "LATIN CAPITAL LETTER TURNED ALPHA"]
|
||||
, ["uni2C73", 11379, "LATIN SMALL LETTER W WITH HOOK"]
|
||||
, ["uni2189", 8585, "VULGAR FRACTION ZERO THIRDS", "#e2f4ea"]
|
||||
, ["uni1FEF", 8175, "GREEK VARIA", "#cceff2"]
|
||||
, ["uni2C74", 11380, "LATIN SMALL LETTER V WITH CURL"]
|
||||
, ["uni2C77", 11383, "LATIN SMALL LETTER TAILLESS PHI"]
|
||||
, ["uni2C76", 11382, "LATIN SMALL LETTER HALF H"]
|
||||
|
|
@ -1980,7 +2028,6 @@
|
|||
, ["Sampi", 992, "GREEK LETTER SAMPI"]
|
||||
, ["uni2C7E", 11390, "LATIN CAPITAL LETTER S WITH SWASH TAIL"]
|
||||
, ["uni2E1A", 11802, "HYPHEN WITH DIAERESIS", "#efefef"]
|
||||
, ["schwa", 601, "LATIN SMALL LETTER SCHWA"]
|
||||
, ["gbar_uni1ABE", null, null, "#dddddd"]
|
||||
, ["uni1DDA", 7642, "COMBINING LATIN SMALL LETTER G", "#f9e2e2"]
|
||||
, ["koppacyrillic", 1153, "CYRILLIC SMALL LETTER KOPPA"]
|
||||
|
|
@ -2011,7 +2058,6 @@
|
|||
, ["quotereversed", 8219, "SINGLE HIGH-REVERSED-9 QUOTATION MARK", "#efefef"]
|
||||
, ["romanfive", 8548, "ROMAN NUMERAL FIVE", "#e2f4ea"]
|
||||
, ["tonetwo", 424, "LATIN SMALL LETTER TONE TWO"]
|
||||
, ["rdescend", 636, "LATIN SMALL LETTER R WITH LONG LEG"]
|
||||
, ["uni1FDD", 8157, "GREEK DASIA AND VARIA", "#cceff2"]
|
||||
, ["uni1FDE", 8158, "GREEK DASIA AND OXIA", "#cceff2"]
|
||||
, ["uni1FDF", 8159, "GREEK DASIA AND PERISPOMENI", "#cceff2"]
|
||||
|
|
@ -2055,7 +2101,6 @@
|
|||
, ["uni1DFF", 7679, "COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW", "#f9e2e2"]
|
||||
, ["uniA751", 42833, "LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER"]
|
||||
, ["uniA758", 42840, "LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE"]
|
||||
, ["uni1FEF", 8175, "GREEK VARIA", "#cceff2"]
|
||||
, ["dblprimemod", 698, "MODIFIER LETTER DOUBLE PRIME"]
|
||||
, ["Ezhreversed", 440, "LATIN CAPITAL LETTER EZH REVERSED"]
|
||||
, ["ezhreversed", 441, "LATIN SMALL LETTER EZH REVERSED"]
|
||||
|
|
@ -2112,7 +2157,6 @@
|
|||
, ["uni209C", 8348, "LATIN SUBSCRIPT SMALL LETTER T"]
|
||||
, ["uni02E6_uni02E6_uni02E7", null, null, "#dddddd"]
|
||||
, ["uni02E6_uni02E6_uni02E8", null, null, "#dddddd"]
|
||||
, ["uni02E6_uni02E5_uni02E7", null, null, "#dddddd"]
|
||||
, ["commaaccentrotate", null, null, "#dddddd"]
|
||||
, ["esh", 643, "LATIN SMALL LETTER ESH"]
|
||||
, ["cyrillictic", null, null, "#dddddd"]
|
||||
|
|
@ -2134,7 +2178,6 @@
|
|||
, ["controlHT", 9, "[Control]", "#ff4c4c"]
|
||||
, ["uni1DE8", 7656, "COMBINING LATIN SMALL LETTER B", "#f9e2e2"]
|
||||
, ["uni1DE5", 7653, "COMBINING LATIN SMALL LETTER LONG S", "#f9e2e2"]
|
||||
, ["uni1DE4", 7652, "COMBINING LATIN SMALL LETTER S", "#f9e2e2"]
|
||||
, ["uni1DE7", 7655, "COMBINING LATIN SMALL LETTER ALPHA", "#f9e2e2"]
|
||||
, ["uni1DE6", 7654, "COMBINING LATIN SMALL LETTER Z", "#f9e2e2"]
|
||||
, ["uni1DE1", 7649, "COMBINING LATIN LETTER SMALL CAPITAL N", "#f9e2e2"]
|
||||
|
|
@ -2155,7 +2198,6 @@
|
|||
, ["commaabovecmb", 787, "COMBINING COMMA ABOVE", "#f9e2e2"]
|
||||
, ["uniA728", 42792, "LATIN CAPITAL LETTER TZ"]
|
||||
, ["commaaboverightcmb", 789, "COMBINING COMMA ABOVE RIGHT", "#f9e2e2"]
|
||||
, ["uni0502", 1282, "CYRILLIC CAPITAL LETTER KOMI DJE"]
|
||||
, ["hooksubpalatnosp", 801, "COMBINING PALATALIZED HOOK BELOW", "#f9e2e2"]
|
||||
, ["uni1AB8_uni1ABD", null, null, "#dddddd"]
|
||||
, ["uniA758.cn", null, null, "#c4f2c1"]
|
||||
|
|
@ -2174,10 +2216,11 @@
|
|||
, ["leftloop.cn", null, null, "#c4f2c1"]
|
||||
, ["rightloop.cn", null, null, "#c4f2c1"]
|
||||
, ["uniE000", 57344, "[Private_Use]", "#f7f2d3"]
|
||||
, ["uniE004", 57348, "[private use E004]"]
|
||||
, ["uniE002", 57346, "[private use E002]"]
|
||||
, ["uniE003", 57347, "[private use E003]"]
|
||||
, [".notdef", null, null, "#dddddd"]
|
||||
, ["circleblack", 9679, "BLACK CIRCLE"]
|
||||
, ["circlewhite", 9675, "WHITE CIRCLE"]
|
||||
, ["Eth", 208, "LATIN CAPITAL LETTER ETH", "<derived>"]
|
||||
, ["hbar", 295, "LATIN SMALL LETTER H WITH STROKE", "<derived>"]
|
||||
, ["Tbar", 358, "LATIN CAPITAL LETTER T WITH STROKE", "<derived>"]
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ m@n M@N
|
|||
3÷5 ÷5 8÷ 3±5 ±5 8±
|
||||
3=5 =5 8= 3≠5 ≠5 8≠
|
||||
8*5 8 * 7 WALLPAPER*
|
||||
B-O B–O B‒O B—O M•N
|
||||
B-O B–O B‒O B—O M•N ⌘-
|
||||
-Selvece
|
||||
darest-Selvece
|
||||
b-o b–o b‒o b—o m•n
|
||||
|
|
@ -1124,6 +1124,7 @@ document.head.appendChild(fontCSS)
|
|||
<label><input type="checkbox" class="featopt" name="feat:case"> Enable case *</label>
|
||||
<label><input type="checkbox" class="featopt" name="feat:calt=0"> <em>Disable</em> calt *</label>
|
||||
<label><input type="checkbox" class="featopt" name="feat:zero"> Enable (slashed) zero *</label>
|
||||
<label><input type="checkbox" class="featopt" name="feat:frac"> Enable frac(tions) *</label>
|
||||
<!-- <label><input type="checkbox" class="featopt" name="feat:c2sc"> Enable c2sc</label> -->
|
||||
<label><input type="checkbox" class="featopt" name="feat:ss01"> Enable Stylistic set 1 *</label>
|
||||
<label><input type="checkbox" class="featopt" name="feat:ss02"> Enable Stylistic set 2</label>
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 526 KiB |
49
docs/res/weights-and-styles.svg
Normal file
49
docs/res/weights-and-styles.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 44 KiB |
Reference in a new issue