Merge branch 'master' into releases
16
ISSUE_TEMPLATE.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
* Your font version: (Release or git, version)
|
||||||
|
* Your font variant:
|
||||||
|
* Your operating system (name and version):
|
||||||
|
* Your application using Iosevka: (some Java applications may have problem in showing Iosevka properly. It is a bug in Java's GUI components.)
|
||||||
|
|
||||||
|
If you have problem when building Iosevka, please provide these informations:
|
||||||
|
|
||||||
|
* Your Node.js version:
|
||||||
|
* Your results of `npm list`
|
||||||
|
* Your _otfcc_ version:
|
||||||
|
* Your FontForge version:
|
||||||
|
* Your `parameters.toml`:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Describe your problem here. Provide pictures and files if necessary.
|
12
README.md
|
@ -38,10 +38,13 @@ Iosevka’s default ligation set is assigned to `calt` feature, though not all o
|
||||||
|
|
||||||
To build Iosevka you should:
|
To build Iosevka you should:
|
||||||
|
|
||||||
1. Ensure that [`node`](http://nodejs.org) (≥ 5.0), [`FontForge`](http://fontforge.org) (with Python scripting support, ≥ Aug. 2015 release), [`ttfautohint`](http://www.freetype.org/ttfautohint/), [`otfcc`](https://github.com/caryll/otfcc) (≥ 0.1.6) and `make` are runnable in your terminal.
|
1. Ensure that [`node`](http://nodejs.org) (≥ 6.0), [`FontForge`](http://fontforge.org) (with Python scripting support, ≥ Aug. 2015 release), [`ttfautohint`](http://www.freetype.org/ttfautohint/), [`otfcc`](https://github.com/caryll/otfcc) (≥ 0.2.3) and `make` are runnable in your terminal.
|
||||||
- Windows users may need to install MinGW and make \*nix utilities accessible (`mkdir.exe`, `cp.exe`, `cat.exe` and `rm.exe`, in particular) from Command Prompt. Utilities provided by [Git for Windows](https://git-for-windows.github.io/) works fine.
|
- Windows users may need to install MinGW and make \*nix utilities accessible (`mkdir.exe`, `cp.exe`, `cat.exe` and `rm.exe`, in particular) from Command Prompt. Utilities provided by [Git for Windows](https://git-for-windows.github.io/) works fine.
|
||||||
2. Install necessary libs by `npm install`.
|
2. Install necessary libs by `npm install`. If you’ve installed them, upgrade to the latest.
|
||||||
3. `make`.
|
3. `make`.
|
||||||
|
- Use `make DONTHINT=1` to disable hinting.
|
||||||
|
- Use `make DONTREF=1` to turn off reference-ify (will increase file size but provide better compatibility).
|
||||||
|
|
||||||
|
|
||||||
You will find TTFs in the `dist/` directory.
|
You will find TTFs in the `dist/` directory.
|
||||||
|
|
||||||
|
@ -86,6 +89,9 @@ The current avaliable styles are:
|
||||||
* `v-g-doublestorey` : Double-storey `g` (default).
|
* `v-g-doublestorey` : Double-storey `g` (default).
|
||||||
* `v-g-singlestorey` : Single-storey `g`.
|
* `v-g-singlestorey` : Single-storey `g`.
|
||||||
* `v-g-opendoublestorey` : Open Single-storey `g`.
|
* `v-g-opendoublestorey` : Open Single-storey `g`.
|
||||||
|
* Styles for letter `m`:
|
||||||
|
* `v-m-longleg` : `m` with long middle leg (default).
|
||||||
|
* `v-m-shortleg` : `m` with shorter middle leg.
|
||||||
* Styles for letter `0`:
|
* Styles for letter `0`:
|
||||||
* `v-zero-slashed` : Slashed Zero `0` (default).
|
* `v-zero-slashed` : Slashed Zero `0` (default).
|
||||||
* `v-zero-dotted` : Dotted Zero `0`.
|
* `v-zero-dotted` : Dotted Zero `0`.
|
||||||
|
@ -103,6 +109,8 @@ The current avaliable styles are:
|
||||||
|
|
||||||
## Release Notes
|
## Release Notes
|
||||||
|
|
||||||
|
* **1.9.2**
|
||||||
|
- Added short-legged `m` (assigned to `cv26`).
|
||||||
* **1.9.1**
|
* **1.9.1**
|
||||||
- Added /latinayin.
|
- Added /latinayin.
|
||||||
- Added more symbols.
|
- Added more symbols.
|
||||||
|
|
|
@ -101,9 +101,6 @@ export as build : define [buildFont para recursive recursiveCodes] : begin
|
||||||
return dp
|
return dp
|
||||||
define [create-glyph] : match [Array.prototype.slice.call arguments 0]
|
define [create-glyph] : match [Array.prototype.slice.call arguments 0]
|
||||||
`[@name @actions] : begin
|
`[@name @actions] : begin
|
||||||
if (pickHash && nPending <= 0) : begin
|
|
||||||
if para.verbose : console.log " *** Done recursive build for \[if (recursive.length > 3) [recursive.slice 0 3 :.concat {'...'} :.join ','] [recursive.join ',']] in \(font.name.uniqueSubFamily)"
|
|
||||||
throw {.glyfMap glyphs}
|
|
||||||
if (pickHash && [not pickHash.(name)]) : return nothing
|
if (pickHash && [not pickHash.(name)]) : return nothing
|
||||||
|
|
||||||
if para.verbose : console.log name
|
if para.verbose : console.log name
|
||||||
|
@ -179,7 +176,8 @@ export as build : define [buildFont para recursive recursiveCodes] : begin
|
||||||
include markset.e
|
include markset.e
|
||||||
save 'space' ' '
|
save 'space' ' '
|
||||||
|
|
||||||
define capture : object metrics $NamedParameterPair$ $donothing$ para recursive recursiveCodes variantSelector font glyphs glyphList unicodeGlyphs create-glyph $save$ spirofns markset MARK BASE AS_BASE ALSO_METRICS pickHash dependencyProfile getDependencyProfile buildFont newtemp tagged TempFont includeGlyphPart compsiteMarkSet
|
# IDKY, but wrapping "metrics" prevents Node.js on Arch modifying it.
|
||||||
|
define capture : object [metrics : Object.create metrics] $NamedParameterPair$ $donothing$ para recursive recursiveCodes variantSelector font glyphs glyphList unicodeGlyphs create-glyph $save$ spirofns markset MARK BASE AS_BASE ALSO_METRICS pickHash dependencyProfile getDependencyProfile buildFont newtemp tagged TempFont includeGlyphPart compsiteMarkSet
|
||||||
|
|
||||||
### HERE WE GO
|
### HERE WE GO
|
||||||
set capture.commonShapes : [import './glyphs/common-shapes.js'].apply.call capture
|
set capture.commonShapes : [import './glyphs/common-shapes.js'].apply.call capture
|
||||||
|
|
|
@ -61,7 +61,7 @@ if (argv.svg) (function () {
|
||||||
}
|
}
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
var svg = '<?xml version="1.0" standalone="no"?>'
|
var svg = '<?xml version="1.0" encoding="utf-8"?>'
|
||||||
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >'
|
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >'
|
||||||
+ '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">'
|
+ '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">'
|
||||||
+ '<defs><font id="' + font.name.postScriptName + '">';
|
+ '<defs><font id="' + font.name.postScriptName + '">';
|
||||||
|
@ -92,7 +92,7 @@ if (argv.svg) (function () {
|
||||||
+ ' glyph-name="' + g.name
|
+ ' glyph-name="' + g.name
|
||||||
+ '" horiz-adv-x="' + g.advanceWidth + '" '
|
+ '" horiz-adv-x="' + g.advanceWidth + '" '
|
||||||
+ (g.unicode && g.unicode.length ? 'unicode="&#x' + g.unicode[0].toString(16) + ';"' : '')
|
+ (g.unicode && g.unicode.length ? 'unicode="&#x' + g.unicode[0].toString(16) + ';"' : '')
|
||||||
+ ' d="' + toSVGPath(g) + '" />';
|
+ ' d="' + toSVGPath(g) + '" />\n';
|
||||||
svg += gd;
|
svg += gd;
|
||||||
}
|
}
|
||||||
svg += '</font></defs></svg>';
|
svg += '</font></defs></svg>';
|
||||||
|
|
|
@ -16,6 +16,7 @@ export : define [apply] : begin
|
||||||
include chosenGlyph AS_BASE ALSO_METRICS
|
include chosenGlyph AS_BASE ALSO_METRICS
|
||||||
if unicode : assign-unicode unicode
|
if unicode : assign-unicode unicode
|
||||||
if featureSelector : set currentGlyph.featureSelector featureSelector
|
if featureSelector : set currentGlyph.featureSelector featureSelector
|
||||||
|
set this.cmpPriority chosenGlyph.cmpPriority
|
||||||
|
|
||||||
define [italic-variant name unicode] : create-glyph name : glyph-construction
|
define [italic-variant name unicode] : create-glyph name : glyph-construction
|
||||||
if para.isItalic
|
if para.isItalic
|
||||||
|
@ -29,6 +30,7 @@ export : define [apply] : begin
|
||||||
include glyphs.(oldid) AS_BASE
|
include glyphs.(oldid) AS_BASE
|
||||||
set-width glyphs.(oldid).advanceWidth
|
set-width glyphs.(oldid).advanceWidth
|
||||||
set this.featureSelector glyphs.(oldid).featureSelector
|
set this.featureSelector glyphs.(oldid).featureSelector
|
||||||
|
set this.cmpPriority glyphs.(oldid).cmpPriority
|
||||||
|
|
||||||
define [composite newid] : let [parts : {}.slice.call arguments 1] : begin
|
define [composite newid] : let [parts : {}.slice.call arguments 1] : begin
|
||||||
create-glyph [fallback newid ('glyph' + [newtemp])] : glyph-construction
|
create-glyph [fallback newid ('glyph' + [newtemp])] : glyph-construction
|
||||||
|
@ -574,7 +576,8 @@ export : define [apply] : begin
|
||||||
local shouldBuildUnicodes : shouldBuildList.map ([x] => [if (glyphs.(x) && glyphs.(x).unicode) glyphs.(x).unicode.0 nothing])
|
local shouldBuildUnicodes : shouldBuildList.map ([x] => [if (glyphs.(x) && glyphs.(x).unicode) glyphs.(x).unicode.0 nothing])
|
||||||
:.filter ([x] => [not [not x]])
|
:.filter ([x] => [not [not x]])
|
||||||
|
|
||||||
local p : Object.create ps
|
local p {.}
|
||||||
|
foreach [{k v} : pairs-of all ps] : set p.(k) v
|
||||||
try : begin
|
try : begin
|
||||||
local forkFont : buildFont.call [TempFont] p shouldBuildList shouldBuildUnicodes
|
local forkFont : buildFont.call [TempFont] p shouldBuildList shouldBuildUnicodes
|
||||||
: ex
|
: ex
|
||||||
|
|
|
@ -2324,14 +2324,14 @@ export : define [apply] : begin
|
||||||
save 'cyrem' 0x43C
|
save 'cyrem' 0x43C
|
||||||
|
|
||||||
### m
|
### m
|
||||||
define [SmallMShape top bot] : glyph-construction
|
define [SmallMShape top bot mbot] : glyph-construction
|
||||||
local m1 : mix (SB + O) (MIDDLE + MVERTSTROKE / 2 * HVCONTRAST) 0.5
|
local m1 : mix (SB + O) (MIDDLE + MVERTSTROKE / 2 * HVCONTRAST) 0.5
|
||||||
local m2 : mix (RIGHTSB - O) (MIDDLE - MVERTSTROKE / 2 * HVCONTRAST) 0.5
|
local m2 : mix (RIGHTSB - O) (MIDDLE - MVERTSTROKE / 2 * HVCONTRAST) 0.5
|
||||||
include : mShoulderSpiro
|
include : mShoulderSpiro
|
||||||
left -- (SB + O + MVERTSTROKE * HVCONTRAST)
|
left -- (SB + O + MVERTSTROKE * HVCONTRAST)
|
||||||
right -- (MIDDLE + MVERTSTROKE / 2 * HVCONTRAST)
|
right -- (MIDDLE + MVERTSTROKE / 2 * HVCONTRAST)
|
||||||
top -- top
|
top -- top
|
||||||
bottom -- bot
|
bottom -- mbot
|
||||||
width -- MVERTSTROKE
|
width -- MVERTSTROKE
|
||||||
fine -- (MVERTSTROKE * SHOULDERFINE / STROKE)
|
fine -- (MVERTSTROKE * SHOULDERFINE / STROKE)
|
||||||
include : mShoulderSpiro
|
include : mShoulderSpiro
|
||||||
|
@ -2352,9 +2352,18 @@ export : define [apply] : begin
|
||||||
sketch # m
|
sketch # m
|
||||||
set-width WIDTH
|
set-width WIDTH
|
||||||
include markset.e
|
include markset.e
|
||||||
include : SmallMShape XH 0
|
include : SmallMShape XH 0 0
|
||||||
save 'm' 'm'
|
save 'm.longleg'
|
||||||
save 'cyrte.italic'
|
save 'cyrte.italic'
|
||||||
|
sketch # m
|
||||||
|
set-width WIDTH
|
||||||
|
include markset.e
|
||||||
|
include : SmallMShape XH 0 [XH * 0.2]
|
||||||
|
save 'm.shortleg'
|
||||||
|
select-variant 'm' 'm' 'longleg' {
|
||||||
|
.'cv25' 'm.longleg'
|
||||||
|
.'cv26' 'm.shortleg'
|
||||||
|
}
|
||||||
composite 'cyrtedescender.italic' glyphs.'cyrte.italic' [CyrDescender RIGHTSB] markset.e
|
composite 'cyrtedescender.italic' glyphs.'cyrte.italic' [CyrDescender RIGHTSB] markset.e
|
||||||
|
|
||||||
sketch # mltail
|
sketch # mltail
|
||||||
|
|
|
@ -168,11 +168,19 @@ export : define [apply] : begin
|
||||||
include glyphs.period
|
include glyphs.period
|
||||||
include glyphs.xhdot
|
include glyphs.xhdot
|
||||||
save 'colon' ':'
|
save 'colon' ':'
|
||||||
|
save 'colon.dmid'
|
||||||
|
|
||||||
apply-transform : Upright
|
branch
|
||||||
apply-transform : Translate 0 (parenMid - XH / 2)
|
apply-transform : Upright
|
||||||
apply-transform : Italify
|
apply-transform : Translate 0 (parenMid - XH / 2)
|
||||||
save 'colon.mid'
|
apply-transform : Italify
|
||||||
|
save 'colon.mid'
|
||||||
|
branch
|
||||||
|
local delta : Math.max 0 : WIDTH / 2 - (XH - PERIODSIZE) / 2
|
||||||
|
apply-transform : Translate delta 0
|
||||||
|
save 'colon.dright'
|
||||||
|
apply-transform : Translate (-2 * delta) 0
|
||||||
|
save 'colon.dleft'
|
||||||
|
|
||||||
sketch # semicolon
|
sketch # semicolon
|
||||||
include glyphs.comma
|
include glyphs.comma
|
||||||
|
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 409 KiB After Width: | Height: | Size: 408 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 153 KiB |
Before Width: | Height: | Size: 668 KiB After Width: | Height: | Size: 686 KiB |
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 354 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 260 KiB |
2
makefile
|
@ -72,7 +72,6 @@ PARAM = SUFFIX='$(SUFFIX)' VERSION='$(VERSION)'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export VERSION
|
export VERSION
|
||||||
export FAST
|
|
||||||
export VARNAME
|
export VARNAME
|
||||||
export STYLE_COMMON
|
export STYLE_COMMON
|
||||||
export STYLE_UPRIGHT
|
export STYLE_UPRIGHT
|
||||||
|
@ -81,6 +80,7 @@ export VERSION
|
||||||
export ARCPREFIX
|
export ARCPREFIX
|
||||||
export NOCHARMAP
|
export NOCHARMAP
|
||||||
export NOLIG
|
export NOLIG
|
||||||
|
export DONTREF
|
||||||
export DONTHINT
|
export DONTHINT
|
||||||
|
|
||||||
### Sometimes make will freak out and report ACCESS VIOLATION for me... so i have to add some repeation
|
### Sometimes make will freak out and report ACCESS VIOLATION for me... so i have to add some repeation
|
||||||
|
|
|
@ -220,6 +220,11 @@ export : define [apply para glyphList] : begin
|
||||||
chain-rule ({'colon'} ~> {'colon.mid'}) ({'colon'} ~> {'colon.mid'}) ({'colon'} ~> {'colon.mid'}) {'greater' 'less' 'hyphen' 'equal' 'plus' 'colon.mid'} # :::> :::- :::= :::< :::+
|
chain-rule ({'colon'} ~> {'colon.mid'}) ({'colon'} ~> {'colon.mid'}) ({'colon'} ~> {'colon.mid'}) {'greater' 'less' 'hyphen' 'equal' 'plus' 'colon.mid'} # :::> :::- :::= :::< :::+
|
||||||
chain-rule {'greater' 'less' 'hyphen' 'equal' 'plus' 'colon.mid'} ({'colon'} ~> {'colon.mid'}) # <: >: -: =: +:
|
chain-rule {'greater' 'less' 'hyphen' 'equal' 'plus' 'colon.mid'} ({'colon'} ~> {'colon.mid'}) # <: >: -: =: +:
|
||||||
|
|
||||||
|
# Colon chains
|
||||||
|
chain-rule {'colon.dright' 'colon.dmid'} ({'colon'} ~> {'colon.dmid'}) {'colon'}
|
||||||
|
chain-rule {'colon.dright' 'colon.dmid'} ({'colon'} ~> {'colon.dleft'})
|
||||||
|
chain-rule ({'colon'} ~> {'colon.dright'}) {'colon'}
|
||||||
|
|
||||||
#opbd
|
#opbd
|
||||||
local fwclose {'fwlcloseDoubleQuote' 'fwlcloseSingleQuote' 'dwlcjkSingleQuoteRight' 'dwlcjkDoubleQuoteRight' 'dwlparenRight'}
|
local fwclose {'fwlcloseDoubleQuote' 'fwlcloseSingleQuote' 'dwlcjkSingleQuoteRight' 'dwlcjkDoubleQuoteRight' 'dwlparenRight'}
|
||||||
local hwclose {'closeDoubleQuote' 'closeSingleQuote' 'cjkSingleQuoteRight' 'cjkDoubleQuoteRight' 'parenRight'}
|
local hwclose {'closeDoubleQuote' 'closeSingleQuote' 'cjkSingleQuoteRight' 'cjkDoubleQuoteRight' 'parenRight'}
|
||||||
|
|
11
onegroup.mk
|
@ -12,6 +12,12 @@ else
|
||||||
HINT = ttfautohint --increase-x-height=0
|
HINT = ttfautohint --increase-x-height=0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef DONTREF
|
||||||
|
_DONTREF = true
|
||||||
|
else
|
||||||
|
_DONTREF =
|
||||||
|
endif
|
||||||
|
|
||||||
# Change this when an error reports
|
# Change this when an error reports
|
||||||
# On windows, maybe `2> NUL`.
|
# On windows, maybe `2> NUL`.
|
||||||
|
|
||||||
|
@ -106,13 +112,12 @@ $(MAPS) : $(OBJDIR)/%.charmap : $(OBJDIR)/.pass0-%.fdt
|
||||||
|
|
||||||
# Pass 1 : Outline cleanup and merge features
|
# Pass 1 : Outline cleanup and merge features
|
||||||
$(PASS1) : $(OBJDIR)/.pass1-%.ttf : pass1-cleanup.py $(OBJDIR)/.pass0-%.svg
|
$(PASS1) : $(OBJDIR)/.pass1-%.ttf : pass1-cleanup.py $(OBJDIR)/.pass0-%.svg
|
||||||
@fontforge -quiet -script $^ $@.a.ttf $(if $(findstring italic,$@),10,$(if $(findstring oblique,$@),10,0)) $(FAST) $(SUPPRESS_ERRORS)
|
@fontforge -quiet -script $^ $@.a.ttf $(if $(findstring italic,$@),10,$(if $(findstring oblique,$@),10,0)) $(_DONTREF) $(SUPPRESS_ERRORS)
|
||||||
@$(HINT) $@.a.ttf $@
|
@$(HINT) $@.a.ttf $@
|
||||||
@-rm $@.a.ttf
|
@-rm $@.a.ttf
|
||||||
# Pass 2 : add metadata
|
# Pass 2 : add metadata
|
||||||
# IDKY, but converting into TTX and convert back dramatically reduces the file size
|
|
||||||
$(TARGETS) : $(OBJDIR)/%.ttf : pass2-finalize.js $(OBJDIR)/.pass1-%.ttf $(OBJDIR)/.pass0-%.fdt
|
$(TARGETS) : $(OBJDIR)/%.ttf : pass2-finalize.js $(OBJDIR)/.pass1-%.ttf $(OBJDIR)/.pass0-%.fdt
|
||||||
@otfccdump $(word 2,$^) | $(NODE) $< $(word 3,$^) | otfccbuild -o $@ --ignore-glyph-order --keep-average-char-width --dummy-dsig --short-post $(HINT_SUFFIX)
|
@otfccdump $(word 2,$^) | $(NODE) $< $(word 3,$^) | otfccbuild -s -O3 -o $@ --keep-average-char-width $(HINT_SUFFIX)
|
||||||
|
|
||||||
$(DISTTARGETS) : $(DISTDIR)/%.ttf : $(OBJDIR)/%.ttf
|
$(DISTTARGETS) : $(DISTDIR)/%.ttf : $(OBJDIR)/%.ttf
|
||||||
@cp $< $@
|
@cp $< $@
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "iosevka",
|
"name": "iosevka",
|
||||||
"version": "1.9.0",
|
"version": "1.9.2",
|
||||||
"main": "./generate.js",
|
"main": "./generate.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bezier-js": "^2.0.0",
|
"bezier-js": "^2.0.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[iosevka]
|
[iosevka]
|
||||||
family = 'Iosevka'
|
family = 'Iosevka'
|
||||||
version = '1.9.1'
|
version = '1.9.2'
|
||||||
codename = 'Ingrid'
|
codename = 'Ingrid'
|
||||||
copyright = 'Copyright (c) 2015-2016 Belleve Invis.'
|
copyright = 'Copyright (c) 2015-2016 Belleve Invis.'
|
||||||
licence = '''This font software is licenced under the SIL Open Font Licence, Version 1.1. This is licence is avaliable with a FAQ at: http://scripts.sil.org/OFL. This font software is distributes on an 'AS IS' basis, without warranties or conditions of any kind, either express or implied. See the SIL Open Font licence fot the specific language, premissions and limitations governing your use of this font software.'''
|
licence = '''This font software is licenced under the SIL Open Font Licence, Version 1.1. This is licence is avaliable with a FAQ at: http://scripts.sil.org/OFL. This font software is distributes on an 'AS IS' basis, without warranties or conditions of any kind, either express or implied. See the SIL Open Font licence fot the specific language, premissions and limitations governing your use of this font software.'''
|
||||||
|
@ -592,3 +592,7 @@ underscore = 'low'
|
||||||
paragraph = 'high'
|
paragraph = 'high'
|
||||||
[v-paragraph-low.variantSelector]
|
[v-paragraph-low.variantSelector]
|
||||||
paragraph = 'low'
|
paragraph = 'low'
|
||||||
|
[v-m-longleg]
|
||||||
|
m = 'longleg'
|
||||||
|
[v-m-shortleg]
|
||||||
|
m = 'shortleg'
|
||||||
|
|
|
@ -5,14 +5,16 @@ import sys
|
||||||
|
|
||||||
source = sys.argv[1]
|
source = sys.argv[1]
|
||||||
font = fontforge.open(source)
|
font = fontforge.open(source)
|
||||||
# Replace accented characters into references
|
|
||||||
font.selection.select(("ranges", None), ".notdef", "nonmarkingreturn")
|
|
||||||
font.replaceWithReference()
|
|
||||||
|
|
||||||
font.selection.select("braille1", "braille13", "braille12", "braille17", "braille123", "braille127", "braille137", "braille1237")
|
if len(sys.argv) < 5 or sys.argv[4] != "true":
|
||||||
for i in font.selection:
|
# Replace accented characters into references
|
||||||
glyph = font[i]
|
font.selection.select(("ranges", None), ".notdef", "nonmarkingreturn")
|
||||||
glyph.unlinkRef()
|
font.replaceWithReference()
|
||||||
|
|
||||||
|
font.selection.select("braille1", "braille13", "braille12", "braille17", "braille123", "braille127", "braille137", "braille1237")
|
||||||
|
for i in font.selection:
|
||||||
|
glyph = font[i]
|
||||||
|
glyph.unlinkRef()
|
||||||
|
|
||||||
# Remove overlapped area
|
# Remove overlapped area
|
||||||
font.selection.all()
|
font.selection.all()
|
||||||
|
|
|
@ -18,5 +18,5 @@ process.stdin.on('end', function () {
|
||||||
ttf.cvt_ = glyfs.cvt_;
|
ttf.cvt_ = glyfs.cvt_;
|
||||||
ttf.maxp = glyfs.maxp;
|
ttf.maxp = glyfs.maxp;
|
||||||
ttf.gasp = glyfs.gasp;
|
ttf.gasp = glyfs.gasp;
|
||||||
process.stdout.write(JSON.stringify(ttf));
|
process.stdout.write(JSON.stringify(ttf) + '\n');
|
||||||
});
|
});
|
|
@ -147,10 +147,6 @@
|
||||||
<span class="tag">cv12</span><span class="description"></span>
|
<span class="tag">cv12</span><span class="description"></span>
|
||||||
<span class="sample" style="font-feature-settings:'cv12'">g</span><span class="sample italic" style="font-feature-settings:'cv12'">g</span>
|
<span class="sample" style="font-feature-settings:'cv12'">g</span><span class="sample italic" style="font-feature-settings:'cv12'">g</span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<span class="tag">cv24</span><span class="description"></span>
|
|
||||||
<span class="sample" style="font-feature-settings:'cv24'">g</span><span class="sample italic" style="font-feature-settings:'cv24'">g</span>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<span class="tag">cv13</span><span class="description"></span>
|
<span class="tag">cv13</span><span class="description"></span>
|
||||||
<span class="sample" style="font-feature-settings:'cv13'">0</span><span class="sample italic" style="font-feature-settings:'cv13'">0</span>
|
<span class="sample" style="font-feature-settings:'cv13'">0</span><span class="sample italic" style="font-feature-settings:'cv13'">0</span>
|
||||||
|
@ -195,6 +191,18 @@
|
||||||
<span class="tag">cv23</span><span class="description"></span>
|
<span class="tag">cv23</span><span class="description"></span>
|
||||||
<span class="sample" style="font-feature-settings:'cv23'">¶</span><span class="sample italic" style="font-feature-settings:'cv23'">¶</span>
|
<span class="sample" style="font-feature-settings:'cv23'">¶</span><span class="sample italic" style="font-feature-settings:'cv23'">¶</span>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="tag">cv24</span><span class="description"></span>
|
||||||
|
<span class="sample" style="font-feature-settings:'cv24'">g</span><span class="sample italic" style="font-feature-settings:'cv24'">g</span>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="tag">cv25</span><span class="description"></span>
|
||||||
|
<span class="sample" style="font-feature-settings:'cv25'">m</span><span class="sample italic" style="font-feature-settings:'cv25'">m</span>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="tag">cv26</span><span class="description"></span>
|
||||||
|
<span class="sample" style="font-feature-settings:'cv26'">m</span><span class="sample italic" style="font-feature-settings:'cv26'">m</span>
|
||||||
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
</section>
|
</section>
|
||||||
<section id="matrix">
|
<section id="matrix">
|
||||||
|
@ -314,13 +322,13 @@
|
||||||
<tr class="first"><th>Feature Tags</th><th>Designed For</th><th>Sample</th></tr>
|
<tr class="first"><th>Feature Tags</th><th>Designed For</th><th>Sample</th></tr>
|
||||||
<tr><td><i>No Ligation</i></td><td> </td><td class="nolig"><pre>-<< -< <-- <<- <- -> ->> --> >- >>- <-> <--> <!--
|
<tr><td><i>No Ligation</i></td><td> </td><td class="nolig"><pre>-<< -< <-- <<- <- -> ->> --> >- >>- <-> <--> <!--
|
||||||
=<< =< <== <<= <= => =>> ==> >= >>= <=> <==>
|
=<< =< <== <<= <= => =>> ==> >= >>= <=> <==>
|
||||||
:= :- :+ :< :> <: >: +: -: =:</pre></td></tr>
|
:= :- :+ :< :> <: >: +: -: =: a:b a::b a:::b</pre></td></tr>
|
||||||
<tr><td>calt</td><td><i>Default setting in editors</i></td><td><pre><s>-<<</s> <s>-<</s> <-- <s><<-</s> <- -> <s>->></s> --> <s>>-</s> <s>>>-</s> <-> <--> <!--
|
<tr><td>calt</td><td><i>Default setting in editors</i></td><td><pre><s>-<<</s> <s>-<</s> <-- <s><<-</s> <- -> <s>->></s> --> <s>>-</s> <s>>>-</s> <-> <--> <!--
|
||||||
<s>=<<</s> <s>=<</s> <== <s><<=</s> <s><=</s> => <s>=>></s> ==> <s>>=</s> <s>>>=</s> <=> <==>
|
<s>=<<</s> <s>=<</s> <== <s><<=</s> <s><=</s> => <s>=>></s> ==> <s>>=</s> <s>>>=</s> <=> <==>
|
||||||
:= :- :+ :< :> <: >: +: -: =:</pre></td></tr>
|
:= :- :+ :< :> <: >: +: -: =: a:b a::b a:::b</pre></td></tr>
|
||||||
<tr><td>XHS_, XPTL</td><td>Haskell, PatEL</td><td style="font-feature-settings: "XHS_" 1"><pre>-<< -< <-- <<- <- -> ->> --> >- >>- <-> <--> <!--
|
<tr><td>XHS_, XPTL</td><td>Haskell, PatEL</td><td style="font-feature-settings: "XHS_" 1"><pre>-<< -< <-- <<- <- -> ->> --> >- >>- <-> <--> <!--
|
||||||
=<< =< <== <<= <s><=</s> => =>> ==> <s>>=</s> >>= <=> <==>
|
=<< =< <== <<= <s><=</s> => =>> ==> <s>>=</s> >>= <=> <==>
|
||||||
:= :- :+ :< :> <: >: +: -: =:</pre></td></tr>
|
:= :- :+ :< :> <: >: +: -: =: a:b a::b a:::b</pre></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ section#matrix > div > row > span {
|
||||||
}
|
}
|
||||||
|
|
||||||
section#opentype
|
section#opentype
|
||||||
width: 34.5em
|
width: 35.5em
|
||||||
padding: 0 8em
|
padding: 0 8em
|
||||||
> h2 { display: none }
|
> h2 { display: none }
|
||||||
> div.hr
|
> div.hr
|
||||||
|
@ -176,10 +176,12 @@ section#opentype
|
||||||
&.italic { margin-top: 0.25em }
|
&.italic { margin-top: 0.25em }
|
||||||
&.narrow
|
&.narrow
|
||||||
display flex
|
display flex
|
||||||
justify-content space-between
|
justify-content center
|
||||||
flex-wrap wrap
|
flex-wrap wrap
|
||||||
|
width: 35em;
|
||||||
|
margin-left: ((35.5em - 35em) / 2);
|
||||||
> li
|
> li
|
||||||
margin 0 0 0.5em
|
margin 0 0.5em 0.5em
|
||||||
border none
|
border none
|
||||||
width 4em
|
width 4em
|
||||||
flex none
|
flex none
|
||||||
|
|
|
@ -74,27 +74,28 @@ function fineAllExtrema(z1, z2, z3, z4, angles) {
|
||||||
return exs.sort(ASCEND);
|
return exs.sort(ASCEND);
|
||||||
}
|
}
|
||||||
function mix(z1, z2, t) {
|
function mix(z1, z2, t) {
|
||||||
return {
|
if (t <= 0) return z1;
|
||||||
x: (1 - t) * z1.x + t * z2.x,
|
if (t >= 1) return z2;
|
||||||
y: (1 - t) * z1.y + t * z2.y
|
var x = (1 - t) * z1.x + t * z2.x, y = (1 - t) * z1.y + t * z2.y
|
||||||
};
|
return { x: x, y: y };
|
||||||
}
|
}
|
||||||
function bez2(z1, z2, z3, t) {
|
function bez2(z1, z2, z3, t) {
|
||||||
|
if (t <= 0) return z1;
|
||||||
|
if (t >= 1) return z3;
|
||||||
|
var c1 = (1 - t) * (1 - t), c2 = 2 * (1 - t) * t, c3 = t * t;
|
||||||
return {
|
return {
|
||||||
x: (1 - t) * (1 - t) * z1.x + 2 * (1 - t) * t * z2.x + t * t * z3.x,
|
x: c1 * z1.x + c2 * z2.x + c3 * z3.x,
|
||||||
y: (1 - t) * (1 - t) * z1.y + 2 * (1 - t) * t * z2.y + t * t * z3.y
|
y: c1 * z1.y + c2 * z2.y + c3 * z3.y
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
function bez3(z1, z2, z3, z4, t) {
|
function bez3(z1, z2, z3, z4, t) {
|
||||||
|
if (t <= 0) return z1;
|
||||||
|
if (t >= 1) return z4;
|
||||||
|
var c1 = (1 - t) * (1 - t) * (1 - t), c2 = 3 * t * (1 - t) * (1 - t),
|
||||||
|
c3 = 3 * t * t * (1 - t), c4 = t * t * t;
|
||||||
return {
|
return {
|
||||||
x: (1 - t) * (1 - t) * (1 - t) * z1.x
|
x: c1 * z1.x + c2 * z2.x + c3 * z3.x + c4 * z4.x,
|
||||||
+ 3 * t * (1 - t) * (1 - t) * z2.x
|
y: c1 * z1.y + c2 * z2.y + c3 * z3.y + c4 * z4.y
|
||||||
+ 3 * t * t * (1 - t) * z3.x
|
|
||||||
+ t * t * t * z4.x,
|
|
||||||
y: (1 - t) * (1 - t) * (1 - t) * z1.y
|
|
||||||
+ 3 * t * (1 - t) * (1 - t) * z2.y
|
|
||||||
+ 3 * t * t * (1 - t) * z3.y
|
|
||||||
+ t * t * t * z4.y
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
function splitBefore(z1, z2, z3, z4, t) {
|
function splitBefore(z1, z2, z3, z4, t) {
|
||||||
|
|
|
@ -241,17 +241,9 @@ export all : class Glyph
|
||||||
foreach [k : range 0 (ts.length - 1)] : begin
|
foreach [k : range 0 (ts.length - 1)] : begin
|
||||||
local s : strand.split ts.(k) ts.(k + 1)
|
local s : strand.split ts.(k) ts.(k + 1)
|
||||||
if s.points : begin
|
if s.points : begin
|
||||||
local quads : cubic2quad
|
contour.push : new Point s.points.1.x s.points.1.y false true
|
||||||
* s.points.0.x ; * s.points.0.y
|
contour.push : new Point s.points.2.x s.points.2.y false true
|
||||||
* s.points.1.x ; * s.points.1.y
|
contour.push : new Point s.points.3.x s.points.3.y true
|
||||||
* s.points.2.x ; * s.points.2.y
|
|
||||||
* s.points.3.x ; * s.points.3.y
|
|
||||||
* 0.05
|
|
||||||
local m 2
|
|
||||||
while (m < quads.length) : begin
|
|
||||||
contour.push : new Point quads.(m) quads.(m + 1) false
|
|
||||||
contour.push : new Point quads.(m + 2) quads.(m + 3) true
|
|
||||||
inc m 4
|
|
||||||
set flag 2
|
set flag 2
|
||||||
true : begin
|
true : begin
|
||||||
local p0 contour.(contour.length - 1)
|
local p0 contour.(contour.length - 1)
|
||||||
|
|