45 Commits

Author SHA1 Message Date
kiliman 3813319b42 🚀 Deploy v2.4.0 2020-12-13 10:16:02 -05:00
kiliman f2a61c74ad 🔀 Merge branch 'feature/use-fea-files' 2020-12-13 10:13:23 -05:00
kiliman 1fce61fe50 🔨 Update build to call fonttools feaLib 2020-12-13 10:11:28 -05:00
kiliman 1028c96291 🔥 Delete gsub.js and replace with calt feature 2020-12-13 10:07:52 -05:00
kiliman 043c160546 Add default feature file since feaLib replaces existing features 2020-12-13 10:06:11 -05:00
kiliman 445828c8bf Add function to generate calt feature file 2020-12-13 10:05:41 -05:00
kiliman 66fd3f94a1 🙈 Ignore all files in .vscode 2020-12-13 10:04:27 -05:00
kiliman 9bf5f6197c Add new spacer glyphs to replace LIG placeholder 2020-12-12 17:50:16 -05:00
Mark Skelton bd48389313 Update deps (#159)
* Fix eslint error

* Add repository to package.json

* Remove unused dependencies

* Update dev eslint deps
2020-12-09 14:21:23 -06:00
kiliman 30a6c098e7 🚀 Deploy v2.3.0 2020-05-13 08:41:16 -04:00
kiliman 42e64f84b8 🔀 Merge branch 'feature/italics-hack'
Fix #104
2020-05-13 08:40:43 -04:00
kiliman 124d893fe5 Add plus_equal.liga and update colon_equal.liga 2020-05-13 08:25:53 -04:00
kiliman e692fcfbf8 🔨 Make italics-hack the default option with ability to turn it off 2020-05-13 08:23:09 -04:00
kiliman 321486d19e 🐛 Add init function to only apply the hack once instead of per ligature 2020-05-12 12:05:21 -04:00
kiliman 6f3d00ae6d 🪓 Add hack for italics by removing existing GSUB tables 2020-05-12 09:36:58 -04:00
Mark Skelton 420eeefe59 Merge pull request #131 from kiliman/dependabot/npm_and_yarn/acorn-6.4.1
Bump acorn from 6.2.1 to 6.4.1
2020-04-14 13:30:53 -05:00
dependabot[bot] a5c360bf30 Bump acorn from 6.2.1 to 6.4.1
Bumps [acorn](https://github.com/acornjs/acorn) from 6.2.1 to 6.4.1.
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/6.2.1...6.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-04-04 21:23:15 +00:00
kiliman 93d4d03ef5 🚀 Deploy 2.2.8 with profiles fix 2020-03-09 17:13:26 -04:00
kiliman 59435e4ee8 😍 Add @Jakob6174 as a contributor 2020-03-09 17:12:36 -04:00
kiliman cad9759288 📝 Add comment for family name value 2020-03-09 17:10:52 -04:00
kiliman d3940070ed 🐛 Fix multiple font generation using profiles 2020-03-09 17:08:59 -04:00
Kiliman 320fb069f7 Merge pull request #130 from Jakob6174/master
Minor inconsistency in newly generated font names
2020-03-09 17:07:53 -04:00
Jakob6174 d6c1df83ed Minor inconsistency in newly generated fontnames, original font doesn't specify 'font weight' for this particular 'namerecord' 2020-03-09 16:23:33 +00:00
Amit Parekh 0b29866a3e Merge pull request #127 from leshow/master
output -> build
2020-01-10 02:26:43 +00:00
Evan Cameron 9a70d50924 Fix typo 2020-01-09 17:11:05 -05:00
kiliman 68741971f1 ⬆️ Update serialize-javascript to 2.1.2 2020-01-09 11:07:35 -05:00
Kiliman bfae141c75 Merge pull request #126 from kiliman/dependabot/npm_and_yarn/npm-6.13.4
⬆️ Bump npm from 5.7.1 to 6.13.4
2020-01-07 10:23:43 -05:00
Amit Parekh 844b55f7b2 GitBook: [master] 4 pages modified 2019-12-21 23:55:36 +00:00
Amit Parekh 0c226a60bc GitBook: [master] 5 pages modified 2019-12-21 23:54:58 +00:00
Amit Parekh 2dd2079309 GitBook: [master] 2 pages modified 2019-12-20 14:44:28 +00:00
Amit Parekh 6f14cd709a GitBook: [master] 4 pages and 11 assets modified 2019-12-20 14:40:43 +00:00
dependabot[bot] 06b5464fd6 Bump npm from 5.7.1 to 6.13.4
Bumps [npm](https://github.com/npm/cli) from 5.7.1 to 6.13.4.
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v5.7.1...v6.13.4)

Signed-off-by: dependabot[bot] <support@github.com>
2019-12-13 19:32:26 +00:00
Mark Skelton dc2d35f1c5 Comment out single ligature request line 2019-11-09 11:48:50 -06:00
Mark Skelton 0823ed98af Create new ligature template 2019-11-09 11:46:35 -06:00
Amit Parekh 7b6eb72e66 GitBook: [master] 4 pages and 6 assets modified 2019-11-02 22:00:53 +00:00
Mark Skelton 53e9951957 Remove assets from docs 2019-11-01 18:05:20 -05:00
Mark Skelton 44fc9b5ead GitBook: [master] 2 pages and 6 assets modified 2019-11-01 23:04:39 +00:00
Mark Skelton a86034b38d Update gitbook config 2019-11-01 18:04:06 -05:00
Mark Skelton c1bb4a9197 Revert "GitBook: [master] 2 pages and 3 assets modified"
This reverts commit 77244583f0.
2019-11-01 18:02:42 -05:00
Mark Skelton 77244583f0 GitBook: [master] 2 pages and 3 assets modified 2019-11-01 23:01:38 +00:00
Kiliman f26cecc4bf Merge pull request #119 from kiliman/gitbook
Create gitbook.yml
2019-11-01 18:56:21 -04:00
Mark Skelton 732a29a79f Create gitbook.yml 2019-11-01 17:43:20 -05:00
kiliman 258531d577 😍 Add @CandySunPlus as a contributor 2019-10-31 14:15:45 -04:00
kiliman 4cf344a435 🚀 Deploy v2.2.7 with less_hyphen_greater ligature 2019-10-31 14:13:31 -04:00
kiliman 63002e7901 Add less_hyphen_greater ligature for all weights by @CandySunPlus 2019-10-31 14:12:45 -04:00
543 changed files with 9562 additions and 52040 deletions
+18
View File
@@ -48,6 +48,24 @@
"doc",
"design"
]
},
{
"login": "CandySunPlus",
"name": "NikSun",
"avatar_url": "https://avatars0.githubusercontent.com/u/502700?v=4",
"profile": "https://github.com/CandySunPlus",
"contributions": [
"design"
]
},
{
"login": "Jakob6174",
"name": "Jakob Pearson",
"avatar_url": "https://avatars3.githubusercontent.com/u/40262817?v=4",
"profile": "https://github.com/Jakob6174",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7
+1
View File
@@ -0,0 +1 @@
root: ./docs
+47
View File
@@ -0,0 +1,47 @@
---
name: New ligature
about: Use this template for requesting new ligatures.
title: "Create `[LIGATURE NAME]` ligature"
labels: enhancement
---
<!-- Please only request a single ligature per issue, unless you would like something which has both symmetrical pairs (e.g. {{ and }}) -->
## Request preferences
* Weight requested: _State which weight you would like, and whether it is for SSm or not._
## Ligature description
_Please descirbe the ligature here as best you can. Feel free to use images/screenshots to help us get ideas of how to implement it._
---
### Ligature variations
Due to how development is handled, not all ligatures are created at the same time. However, we will get to them all eventually. If you would like to help us develop ligatures, please reach out to us via email at kiliman@gmail.com
#### Operator Mono
- [ ] XLight
- [ ] XLight Italic
- [ ] Light
- [ ] Light Italic
- [ ] Book
- [ ] Book Italic
- [ ] Medium
- [ ] Medium Italic
- [ ] Bold
- [ ] Bold Italic
#### Operator Mono SSm
- [ ] SSm Light
- [ ] SSm Light Italic
- [ ] SSm Book
- [ ] SSm Book Italic
- [ ] SSm Medium
- [ ] SSm Medium Italic
- [ ] SSm Bold
- [ ] SSm Bold Italic
+2 -1
View File
@@ -1,4 +1,5 @@
build
node_modules
.vscode/launch.json
.idea
.vscode
.DS_Store
+4 -2
View File
@@ -1,6 +1,6 @@
# Operator Mono Ligatures
[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-)
[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)
<img src="./images/operator-mono-lig.png" />
@@ -94,7 +94,7 @@ If you use Docker, you can also use the executable Docker image [here](https://g
docker-compose run --rm operator-mono-lig
```
The image will build and execute the conversion. The new font files will be generated into the `output` folder.
The image will build and execute the conversion. The new font files will be generated into the `build` folder.
## Configure Your Code Editor
@@ -156,6 +156,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center"><a href="https://github.com/mskelton"><img src="https://avatars3.githubusercontent.com/u/25914066?v=4" width="100px;" alt="Mark Skelton"/><br /><sub><b>Mark Skelton</b></sub></a><br /><a href="#design-mskelton" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/drod3763"><img src="https://avatars2.githubusercontent.com/u/7785716?v=4" width="100px;" alt="Derick Rodriguez"/><br /><sub><b>Derick Rodriguez</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=drod3763" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/amitkparekh"><img src="https://avatars3.githubusercontent.com/u/7276308?v=4" width="100px;" alt="Amit Parekh"/><br /><sub><b>Amit Parekh</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=amitkparekh" title="Documentation">📖</a> <a href="#design-amitkparekh" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/CandySunPlus"><img src="https://avatars0.githubusercontent.com/u/502700?v=4" width="100px;" alt="NikSun"/><br /><sub><b>NikSun</b></sub></a><br /><a href="#design-CandySunPlus" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/Jakob6174"><img src="https://avatars3.githubusercontent.com/u/40262817?v=4" width="100px;" alt="Jakob Pearson"/><br /><sub><b>Jakob Pearson</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=Jakob6174" title="Code">💻</a></td>
</tr>
</table>
+12 -4
View File
@@ -3,19 +3,25 @@ setlocal
if not exist .\build\* mkdir build
set flags=
if "%1"=="--italics-hack-off" (
set flags=%1
shift
)
rem only build passed in font
if not "%1%"=="" (
call :build_font %1
if not "%1"=="" (
call :build_font %1 %flags%
exit /b
)
rem build all fonts
for /d %%d in (.\ligature\*) do call :build_font %%~nd
for /d %%d in (.\ligature\*) do call :build_font %%~nd %flags%
exit /b
:build_font
set lig=%1
set flags=%2
set otf=%lig:Lig-=-%
if not exist .\original\%otf%.otf exit /b
@@ -23,6 +29,8 @@ if not exist .\ligature\%lig%\glyphs\* exit /b
@echo Building %lig%
ttx -f .\original\%otf%.otf
node index.js %otf%
node index.js %otf% %flags%
ttx -f .\build\%lig%.ttx
fonttools feaLib -v -o ".\build\%lig%.otf" .\features\default.fea ".\build\%lig%.otf"
exit /b
+15 -5
View File
@@ -4,6 +4,7 @@ mkdir -p build
build_font() {
lig="$1"
flags="$2"
otf=${lig/Lig-/-}
if [ ! -e "./original/$otf.otf" ]
@@ -15,19 +16,28 @@ build_font() {
return
fi
echo Building $1
echo Building "$1"
ttx -f "./original/$otf.otf"
node index.js $otf
ttx -f ./build/$1.ttx
node index.js "$otf" "$flags"
ttx -f "./build/$1.ttx"
fonttools feaLib -v -o "./build/$1.otf" ./features/default.fea "./build/$1.otf"
}
flags=
if [ "$1" = "--italics-hack-off" ]
then
flags=$1
shift
fi
if [ -n "$1" ]
then
# build specified font
build_font $1
build_font "$1" "$flags"
else
# build all available fonts
for d in ./ligature/*/ ; do
build_font $(basename $d)
build_font "$(basename "$d")" "$flags"
done
fi
+66
View File
@@ -0,0 +1,66 @@
const fs = require('fs');
const rules = [
,
`
lookup 1 {
sub 1 by glyph;
} 1;`,
`
lookup 1_2 {
ignore sub 1 1' 2;
ignore sub 1' 2 2;
sub 1.spacer 2' by glyph;
sub 1' 2 by 1.spacer;
} 1_2;`,
`
lookup 1_2_3 {
ignore sub 1 1' 2 3;
ignore sub 1' 2 3 3;
sub 1.spacer 2.spacer 3' by glyph;
sub 1.spacer 2' 3 by 2.spacer;
sub 1' 2 3 by 1.spacer;
} 1_2_3;`,
`
lookup 1_2_3_4 {
ignore sub 1 1' 2 3 4;
ignore sub 1' 2 3 4 4;
sub 1.spacer 2.spacer 3.spacer 4' by glyph;
sub 1.spacer 2.spacer 3' 4 by 3.spacer;
sub 1.spacer 2' 3 4 by 2.spacer;
sub 1' 2 3 4 by 1.spacer;
} 1_2_3_4;`,
];
const gencalt = (ligatures) => {
let calt = 'feature calt {\n';
const ligs = {};
console.log(ligatures);
ligatures
.filter((l) => !!l.name.match(/\.liga$/) || l.name !== l.glyph)
.map((l) => l.glyph)
.sort((a, b) => {
const length = b.split('_').length - a.split('_').length;
if (length !== 0) return length;
return a < b ? -1 : 1;
})
.forEach((g) => {
g.split('.')
.slice(0, 1)
.forEach((l) => {
if (ligs[l]) return;
ligs[l] = true;
const c = l.split('_');
let rule = rules[c.length];
rule = rule
.replace(/\d/g, (m) => c[parseInt(m) - 1])
.replace(/glyph/g, g);
calt += rule + '\n';
});
});
return calt + '\n} calt;\n';
};
exports.gencalt = gencalt;
Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+4
View File
@@ -0,0 +1,4 @@
# Introduction
Testing
+19
View File
@@ -0,0 +1,19 @@
# Table of contents
* [Introduction](README.md)
* [Installation instructions](installation-instructions.md)
* [Changelog](changelog.md)
## Developing ligatures
* [Setting up your development environment](developing-ligatures/setting-up-your-development-environment.md)
* [Designing your first ligature](developing-ligatures/designing-your-first-ligature.md)
* [Committing your Glyphs file](developing-ligatures/committing-your-glyphs-file.md)
* [Ensuring ligatures work at small sizes](developing-ligatures/ensuring-ligatures-work-at-small-sizes.md)
## Ligature Recipes
* [www](ligature-recipes/www.md)
* [Double-braces](ligature-recipes/double-braces/README.md)
* [Roman variant](ligature-recipes/double-braces/roman-variant.md)
+26
View File
@@ -0,0 +1,26 @@
---
description: See what has changed each release.
---
# Changelog
###
## 15.0.0 - 2042-12-0
### Fixed
* Removed humans, they weren't doing fine with animals.
### Changed
* Animals are now super cute, all of them.
## 14.0.0 - 2042-10-06
### Added
* Introduced animals into the world, we believe they're going to be a neat addition.
@@ -0,0 +1,21 @@
# Committing your Glyphs file
The Glyphs file is very difficult to merge, so standard tools like `git rebase` don't work well. I have created some tools that will allow you to update your existing Glyphs file on top of the current.
{% hint style="warning" %}
Make sure you have created a separate branch for your changes and you've committed all your changes to the branch.
{% endhint %}
1. When you're ready to issue a PR for your changes, you need to run the `./tools/glyphysrebase.sh` tool.
2. You can now create your PR, or continue making changes and running the rebase tool periodically to keep up-to-date with master.
## How the tool works
1. Checks out a clean copy of `master` in a temporary folder.
2. Copies your current working copy to a backup folder.
3. Copies the master copy into your working copy \(basically resetting everything back before your changes\).
4. Runs the `./tools/copyallglyphs.sh` script to copy ligatures from your backup folder to the current master in your working copy.
5. At this point, you now have a glyphs file that includes your custom ligatures on top of the current master.
6. The "rebased" files are then committed.
7. You can now issue a PR. This should easily merge into master.
@@ -0,0 +1,23 @@
# Designing your first ligature
## Getting Super Powers
Becoming a super hero is a fairly straight forward process:
```
$ give me super-powers
```
{% hint style="info" %}
Super-powers are granted randomly so please submit an issue if you're not happy with yours.
{% endhint %}
Once you're strong enough, save the world:
```
// Ain't no code for that yet, sorry
echo 'You got to trust me on this, I saved the world'
```
@@ -0,0 +1,6 @@
# Ensuring ligatures work at small sizes
After creating each ligature, you going to need to make sure it works at very small sizes. Ensure the brace works at very small sizes by looking at it when its very small, by dragging up from the bottom of the editor. This need to be done because as [ScreenSmart fonts are guaranteed to work at a minimum of 9px](https://www.typography.com/fonts/operator/how-to-use#setting_text_and_headlines):
![](../.gitbook/assets/image%20%288%29.png)
@@ -0,0 +1,27 @@
---
description: Things you will need to create additional ligatures.
---
# Setting up your development environment
## Getting Super Powers
Becoming a super hero is a fairly straight forward process:
```
$ give me super-powers
```
{% hint style="info" %}
Super-powers are granted randomly so please submit an issue if you're not happy with yours.
{% endhint %}
Once you're strong enough, save the world:
```
// Ain't no code for that yet, sorry
echo 'You got to trust me on this, I saved the world'
```
+6
View File
@@ -0,0 +1,6 @@
---
description: How to install the ligatures
---
# Installation instructions
@@ -0,0 +1,43 @@
---
description: Recipe for the double-brace ligature
---
# Double-braces
## Creating the ligature \(Roman\)
1.
![Settings for the middle guide for the Roman ligature](../../.gitbook/assets/image%20%281%29.png)
For whichever brace is the "inner-brace", change the dimensions as so, changing only the size \(the `%` in the middle column\) and the rotation \(the right most setting\):
![Settings for the dimensions of the inner-brace](../../.gitbook/assets/image%20%283%29.png)
Move the left-most brace to the left and the right-most brace to the left so the top/bottom parts cross the middle guide and the numbers are like so:
![](../../.gitbook/assets/image%20%287%29.png)
Create a new guide and move the guide so it intersects the pointy inner-corner of the larger brace
![](../../.gitbook/assets/image%20%286%29.png)
Move the smaller brace vertically \(up/down\) so the two pointy inner-corner bits cross like so:
![](../../.gitbook/assets/image.png)
## Creating the italic ligature
Repeat all the steps as above ligature above **BUT set the middle guide** **to**:
![Middle-guide settings for the italic ligature](../../.gitbook/assets/image%20%289%29.png)
## Final ligatures
![\`{{\` roman ligature](../../.gitbook/assets/image%20%284%29.png)
![\`}}\` roman ligature](../../.gitbook/assets/image%20%282%29.png)
![\`{{\` italic ligature](../../.gitbook/assets/image%20%2810%29.png)
![\`}}\` italic ligature](../../.gitbook/assets/image%20%285%29.png)
@@ -0,0 +1,14 @@
---
description: How to create the Roman variant of the double-brace ligature
---
# Roman variant
{% hint style="info" %}
{% endhint %}
1. Add the `braceleft` component twice, or `braceright` component twice.
2. Create a guide \(Right-click -&gt; Add Guide\)
3. Set the settings on the guide as so:
+2
View File
@@ -0,0 +1,2 @@
# www
+1
View File
@@ -0,0 +1 @@
calt.fea
+212
View File
@@ -0,0 +1,212 @@
languagesystem DFLT dflt;
languagesystem latn dflt;
lookup lookup_0 {
sub zero by zero.num;
sub one by one.num;
sub two by two.num;
sub three by three.num;
sub four by four.num;
sub five by five.num;
sub six by six.num;
sub seven by seven.num;
sub eight by eight.num;
sub nine by nine.num;
sub slash by fraction;
sub fraction by fraction.afrc;
} lookup_0;
lookup lookup_1 {
sub zero by zero.den;
sub one by one.den;
sub two by two.den;
sub three by three.den;
sub four by four.den;
sub five by five.den;
sub six by six.den;
sub seven by seven.den;
sub eight by eight.den;
sub nine by nine.den;
sub slash by fraction;
} lookup_1;
lookup lookup_2 {
sub L periodcentered by Ldot;
sub l periodcentered by ldot;
} lookup_2;
feature case {
sub guillemotleft by guillemotleft.cap;
sub guillemotright by guillemotright.cap;
sub guilsinglleft by guilsinglleft.cap;
sub guilsinglright by guilsinglright.cap;
sub parenleft by parenleft.cap;
sub parenright by parenright.cap;
sub bracketleft by bracketleft.cap;
sub bracketright by bracketright.cap;
sub braceleft by braceleft.cap;
sub braceright by braceright.cap;
} case;
feature dnom {
sub zero by zero.den;
sub one by one.den;
sub two by two.den;
sub three by three.den;
sub four by four.den;
sub five by five.den;
sub six by six.den;
sub seven by seven.den;
sub eight by eight.den;
sub nine by nine.den;
} dnom;
feature frac {
lookup frac0 {
sub [zero one two three four five six seven eight nine] slash' lookup lookup_0 [zero one two three four five six seven eight nine] ;
} frac0;
lookup frac1 {
ignore sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] fraction' ;
ignore sub fraction' [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] fraction' lookup lookup_0 [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
} frac1;
lookup frac2 {
sub [zero one two three four five six seven eight nine]' lookup lookup_0 fraction.afrc ;
sub fraction.afrc [zero one two three four five six seven eight nine]' lookup lookup_1 ;
} frac2;
lookup frac3 {
sub one.num fraction.afrc two.den by onehalf;
sub one.num fraction.afrc three.den by onethird;
sub one.num fraction.afrc four.den by onequarter;
sub one.num fraction.afrc five.den by onefifth;
sub one.num fraction.afrc six.den by onesixth;
sub one.num fraction.afrc eight.den by oneeighth;
sub two.num fraction.afrc three.den by twothirds;
sub two.num fraction.afrc five.den by twofifths;
sub three.num fraction.afrc four.den by threequarters;
sub three.num fraction.afrc five.den by threefifths;
sub three.num fraction.afrc eight.den by threeeighths;
sub four.num fraction.afrc five.den by fourfifths;
sub five.num fraction.afrc six.den by fivesixths;
sub five.num fraction.afrc eight.den by fiveeighths;
sub seven.num fraction.afrc eight.den by seveneighths;
} frac3;
} frac;
feature locl {
script latn;
language CAT ;
sub l' lookup lookup_2 periodcentered' lookup lookup_2 l ;
sub L' lookup lookup_2 periodcentered' lookup lookup_2 L ;
} locl;
feature numr {
sub zero by zero.num;
sub one by one.num;
sub two by two.num;
sub three by three.num;
sub four by four.num;
sub five by five.num;
sub six by six.num;
sub seven by seven.num;
sub eight by eight.num;
sub nine by nine.num;
} numr;
feature rupa {
sub R p by R_p;
} rupa;
feature ss01 {
sub registered by registered.alt;
} ss01;
feature salt {
lookup salt0 {
sub registered by registered.alt;
} salt0;
lookup salt1 {
sub colon by colon.alt;
} salt1;
lookup salt2 {
sub bullet by bullet.alt;
} salt2;
lookup salt3 {
sub asterisk by asterisk.alt;
} salt3;
lookup salt4 {
sub zero by zero.alt;
} salt4;
lookup salt5 {
sub underscore by underscore.alt;
} salt5;
lookup salt6 {
sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] slash' lookup lookup_1 [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
} salt6;
} salt;
feature sinf {
sub zero by zero.inf;
sub one by one.inf;
sub two by two.inf;
sub three by three.inf;
sub four by four.inf;
sub five by five.inf;
sub six by six.inf;
sub seven by seven.inf;
sub eight by eight.inf;
sub nine by nine.inf;
} sinf;
feature ss03 {
sub colon by colon.alt;
} ss03;
feature ss04 {
sub bullet by bullet.alt;
} ss04;
feature ss05 {
sub asterisk by asterisk.alt;
} ss05;
feature ss07 {
sub zero by zero.alt;
} ss07;
feature ss08 {
sub underscore by underscore.alt;
} ss08;
feature ss09 {
sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] slash' lookup lookup_1 [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
} ss09;
feature subs {
sub zero by zero.inf;
sub one by one.inf;
sub two by two.inf;
sub three by three.inf;
sub four by four.inf;
sub five by five.inf;
sub six by six.inf;
sub seven by seven.inf;
sub eight by eight.inf;
sub nine by nine.inf;
} subs;
feature subs {
sub zero by zero.sup;
sub one by one.sup;
sub two by two.sup;
sub three by three.sup;
sub four by four.sup;
sub five by five.sup;
sub six by six.sup;
sub seven by seven.sup;
sub eight by eight.sup;
sub nine by nine.sup;
} subs;
include(calt.fea);
+36
View File
@@ -0,0 +1,36 @@
const fs = require('fs');
const lig = `<Glyph name="LIG" lsb="0" width="625">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>`;
fs.readdirSync('./ligature')
.filter((f) => !!f.match(/^OperatorMono/))
.forEach((f) => {
console.log(f);
fs.readdirSync(`./ligature/${f}/glyphs`)
.filter((g) => !!g.match(/\.liga\.xml$/))
.forEach((g) => {
console.log(g);
g.split('.')
.slice(0, 1)
.forEach((l) => {
l.split('_').forEach((c) => {
const path = `./ligature/${f}/glyphs/${c}.spacer.xml`;
const exists = fs.existsSync(path);
console.log(path, exists);
if (exists) return;
const width = !!f.match(/SSm/) ? 625 : 600;
const spacer = lig
.replace('LIG', `${c}.spacer`)
.replace('625', width);
console.log(f, c, width);
fs.writeFileSync(path, spacer);
});
});
});
});
-288
View File
@@ -1,288 +0,0 @@
const xpath = require('xpath');
const NodeType = {};
NodeType.TEXT_NODE = 3;
let dom;
let gsubDom;
let scriptListDom;
let featureListDom;
let lookupListDom;
let featureDom;
let lookupIndex = 0;
let chainIndex = 0;
const substLookupMap = {};
const buildGsubTables = (_dom, ligature) => {
dom = _dom;
if (/_/.test(ligature.glyph) === false) {
// not a ligature, so see if glyph exists in font (as substitute)
const glyphNode = xpath.select(
`ttFont/GlyphOrder/GlyphID[@name="${ligature.name}"]`,
dom,
true
);
if (!glyphNode) {
return;
}
}
const glyphs = ligature.name.replace(/\.liga$/, '').split('_');
const isSingleGlyph = glyphs.length == 1;
gsubDom = xpath.select('ttFont/GSUB', dom, true);
// look for 'calt' feature
featureListDom = xpath.select('FeatureList', gsubDom, true);
let featureRecord;
const featureTag = xpath.select(
'FeatureRecord/FeatureTag[@value="calt"]',
featureListDom,
true
);
if (!featureTag) {
const featureListCount = xpath.select(
'count(FeatureRecord)',
featureListDom,
true
);
featureRecord = createElementWithAttributes('FeatureRecord', {
index: featureListCount
});
featureRecord.appendChild(
createElementWithAttributes('FeatureTag', { value: 'calt' })
);
featureRecord.appendChild(dom.createElement('Feature'));
featureListDom.appendChild(featureRecord);
} else {
featureRecord = featureTag.parentNode;
}
featureDom = xpath.select('Feature', featureRecord, true);
const featureIndex = featureRecord.getAttribute('index');
// add feature to scriptlist for DFLT and latn if not present
addFeatureToScriptList('DFLT', featureIndex);
addFeatureToScriptList('latn', featureIndex);
lookupListDom = xpath.select('LookupList', gsubDom, true);
lookupIndex = xpath.select('count(Lookup)', lookupListDom, true);
const lookupDom = createElementWithAttributes('Lookup', {
index: lookupIndex++
});
appendChildren(
lookupDom,
createElementWithAttributes('LookupType', { value: isSingleGlyph ? 1 : 6 }),
createElementWithAttributes('LookupFlag', { value: 0 })
);
// add contextual lookup to feature
const featureLookupCount = xpath.select(
'count(LookupListIndex)',
featureDom,
true
);
featureDom.appendChild(
createElementWithAttributes('LookupListIndex', {
index: featureLookupCount,
value: lookupDom.getAttribute('index')
})
);
if (isSingleGlyph) {
lookupDom.appendChild(
getSubstLookup(ligature.name, ligature.glyph, lookupDom)
);
} else {
lookupDom.appendChild(buildBacktrackFirst(glyphs));
lookupDom.appendChild(buildLookAheadLast(glyphs));
lookupDom.appendChild(buildLigatureSubst(glyphs, ligature.glyph));
// remaining context
for (let n = glyphs.length - 2; n >= 0; n--) {
lookupDom.appendChild(
buildChainContext(getLIGs(n), [glyphs[n]], glyphs.slice(n + 1), 'LIG')
);
}
}
lookupListDom.appendChild(lookupDom);
};
const finalizeGsubTables = () => {
// get current LookupList count
let newIndex = xpath.select('count(Lookup)', lookupListDom, true);
// append added lookups
Object.entries(substLookupMap).forEach(([, lookup]) => {
// fixup existing lookups with new index
const oldIndex = lookup.getAttribute('index');
const substLookups = xpath.select(
`//ChainContextSubst/SubstLookupRecord/LookupListIndex[@value="${oldIndex}"]`,
lookupListDom,
false
);
substLookups.forEach(substLookup => {
substLookup.setAttribute('value', newIndex);
});
lookup.setAttribute('index', newIndex++);
lookupListDom.appendChild(lookup);
lookupListDom.appendChild(lookup);
});
};
//const dump = dom => console.log(format(serialize(dom)));
const addFeatureToScriptList = (tag, featureIndex) => {
scriptListDom = xpath.select('ScriptList', gsubDom, true);
const defaultLangSys = xpath.select(
`ScriptRecord/ScriptTag[@value="${tag}"]/../Script/DefaultLangSys`,
scriptListDom,
true
);
const featureIndexNode = xpath.select(
`FeatureIndex[@value=${featureIndex}]`,
defaultLangSys,
true
);
if (!featureIndexNode) {
const count = xpath.select('count(FeatureIndex)', defaultLangSys, true);
defaultLangSys.appendChild(
createElementWithAttributes('FeatureIndex', {
index: count,
value: featureIndex
})
);
}
};
const buildBacktrackFirst = glyphs => {
// backtrack = first glyph
// input = first glphy
// lookAhead = [1..n]
return buildChainContext([glyphs[0]], [glyphs[0]], glyphs.slice(1));
};
const buildLookAheadLast = glyphs => {
// backtrack = none
// input = first glyph
// lookAhead = [1..n] + [n]
return buildChainContext(
[],
[glyphs[0]],
[...glyphs.slice(1), glyphs.slice(-1)]
);
};
const buildLigatureSubst = (glyphs, lookup) => {
// backtrack = LIG * n-1
// input = last glyph
// lookAhead = none
return buildChainContext(
getLIGs(glyphs.length - 1),
glyphs.slice(-1),
[],
lookup
);
};
const getLIGs = length => new Array(length).fill('LIG', 0, length);
const buildChainContext = (backtrack, input, lookAhead, substitute) => {
const chainDom = createElementWithAttributes('ChainContextSubst', {
index: chainIndex++,
Format: 3
});
buildCoverage(chainDom, 'BacktrackCoverage', backtrack);
buildCoverage(chainDom, 'InputCoverage', input);
buildCoverage(chainDom, 'LookAheadCoverage', lookAhead);
if (substitute) {
const lookup = getSubstLookup(input[0], substitute);
const listIndex = lookup.getAttribute('index');
const substLookupRecordDom = chainDom.appendChild(
createElementWithAttributes('SubstLookupRecord', { index: 0 })
);
appendChildren(
substLookupRecordDom,
createElementWithAttributes('SequenceIndex', { value: 0 }),
createElementWithAttributes('LookupListIndex', { value: listIndex })
);
}
return chainDom;
};
const buildCoverage = (chainDom, tagName, coverage) => {
if (coverage) {
coverage.forEach((glyph, i) => {
const coverageDom = createElementWithAttributes(tagName, {
index: i++,
Format: 1
});
coverageDom.appendChild(
createElementWithAttributes('Glyph', { value: glyph })
);
chainDom.appendChild(coverageDom);
});
}
};
const getSubstLookup = (input, output, lookupDom) => {
if (!lookupDom) {
lookupDom = substLookupMap[output];
}
if (!lookupDom) {
lookupDom = createElementWithAttributes('Lookup', {
index: Object.keys(substLookupMap).length + 1
});
lookupDom.appendChild(
createElementWithAttributes('LookupType', { value: 1 })
);
lookupDom.appendChild(
createElementWithAttributes('LookupFlag', { value: 0 })
);
substLookupMap[output] = lookupDom;
}
let singleSubstDom = xpath.select('SingleSubst', lookupDom, true);
if (!singleSubstDom) {
singleSubstDom = createElementWithAttributes('SingleSubst', {
index: 0,
Format: 2
});
lookupDom.appendChild(singleSubstDom);
}
// look for input subst
const substitionDom = xpath.select(
`Substitution[@in="${input}"]`,
singleSubstDom,
true
);
if (!substitionDom) {
singleSubstDom.appendChild(
createElementWithAttributes('Substitution', { in: input, out: output })
);
}
return lookupDom;
};
const createElementWithAttributes = (tagName, attributes) => {
const element = dom.createElement(tagName);
Object.entries(attributes).forEach(attribute => {
element.setAttribute(attribute[0], attribute[1]);
});
return element;
};
const appendChildren = (node, ...children) => {
children.forEach(child => node.appendChild(child));
};
//const serialize = dom => new XMLSerializer().serializeToString(dom);
exports.buildGsubTables = buildGsubTables;
exports.finalizeGsubTables = finalizeGsubTables;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 175 KiB

+56 -48
View File
@@ -1,10 +1,11 @@
// @ts-nocheck
const fs = require('fs');
const os = require('os');
if (!os.EOL) {
os.EOL = process.platform === 'win32' ? '\r\n' : '\n';
}
const gsub = require('./gsub');
const calt = require('./calt');
const xpath = require('xpath');
const { DOMParser, XMLSerializer } = require('xmldom');
@@ -17,8 +18,12 @@ const NodeType = {};
NodeType.TEXT_NODE = 3;
let dom;
let italicsHack = false;
function main() {
fontName = process.argv[2];
italicsHack =
fontName.includes('Italic') && process.argv[3] !== '--italics-hack-off';
ligFontName = fontName.split('-').join('Lig-');
const srcFileName = `./original/${fontName}.ttx`;
@@ -29,16 +34,14 @@ function main() {
const profiles = getProfiles();
// process settings (there may be more than one font to build)
profiles.forEach(profile => buildFont(profile));
profiles.forEach((profile) => buildFont(profile, { italicsHack }));
console.log('Done');
}
const buildFont = profile => {
const buildFont = (profile, options) => {
// add suffix to dstFileName if present
const dstFileName = `./build/${ligFontName}${
profile.suffixWithLeadingHyphen
}.ttx`;
const dstFileName = `./build/${ligFontName}${profile.suffixWithLeadingHyphen}.ttx`;
console.log(
`Building ligature font file ${dstFileName} name = ${profile.name}`
);
@@ -46,23 +49,25 @@ const buildFont = profile => {
const ligatures = sortLigatures(
fs
.readdirSync(`./ligature/${ligFontName}/glyphs`)
.filter(file => /\.xml$/.test(file))
.map(file => file.replace('.xml', ''))
.filter((file) => /\.xml$/.test(file))
.map((file) => file.replace('.xml', ''))
)
.filter(name => !/\d+\.liga$/.test(name)) // skip alternates (ends with .#)
.filter(name => filterLigatures(name, profile.ligatures))
.map(name => mapLigatures(name, profile.ligatures))
.filter(entry => filterGlyphsExists(entry));
.filter((name) => !/\d+\.liga$/.test(name)) // skip alternates (ends with .#)
.filter((name) => filterLigatures(name, profile.ligatures))
.map((name) => mapLigatures(name, profile.ligatures))
.filter((entry) => filterGlyphsExists(entry));
const ligaturesWithLIG = ligatures;
//[...ligatures, { name: 'LIG', glyph: 'LIG' }];
processPatch('names', patchNames, dom, ligatures, profile);
processPatch('gsub', patchGsub, dom, ligatures);
processPatch('charstrings', patchCharStrings, dom, ligaturesWithLIG);
processPatch('glyphs', patchGlyphs, dom, ligaturesWithLIG);
processPatch('hmtx', patchHmtx, dom);
const feature = calt.gencalt(ligatures);
fs.writeFileSync('./features/calt.fea', feature);
console.log(`Writing ligature font file ${dstFileName}`);
fs.writeFileSync(dstFileName, format(serialize(dom)));
};
@@ -77,8 +82,8 @@ const getProfiles = () => {
suffix: '',
suffixWithLeadingSpace: '',
suffixWithLeadingHyphen: '',
ligatures: []
}
ligatures: [],
},
];
}
@@ -87,9 +92,9 @@ const getProfiles = () => {
const content = fs.readFileSync(profilePath, 'utf-8');
content
.split(os.EOL)
.filter(line => /^[#]/.test(line) === false && line.length > 0)
.forEach(line => {
.split(/\r|\r\n|\n/g)
.filter((line) => /^[#]/.test(line) === false && line.length > 0)
.forEach((line) => {
const ch = line.trim()[0];
if (ch === '[') {
let name = line.substr(1, line.indexOf(']') - 1);
@@ -98,12 +103,12 @@ const getProfiles = () => {
suffix: name === 'default' ? '' : name,
suffixWithLeadingSpace: name === 'default' ? '' : ' ' + name,
suffixWithLeadingHyphen: name === 'default' ? '' : '-' + name,
ligatures: []
ligatures: [],
};
profiles.push(profile);
} else {
if (!profile) {
throw new Error('You must profile a profile name in []');
throw new Error('You must provide a profile name in []');
}
profile.ligatures.push(line);
}
@@ -115,12 +120,12 @@ const getProfiles = () => {
const filterLigatures = (name, mappings) => {
// loop through mappings and return if name applies or not
// skip if setting is !name
return mappings.filter(entry => entry === '!' + name).length === 0;
return mappings.filter((entry) => entry === '!' + name).length === 0;
};
const mapLigatures = (name, mappings) => {
let mapping = { name, glyph: name };
mappings.forEach(entry => {
mappings.forEach((entry) => {
const [val1, val2] = entry.split('=');
// handle lig=altliga
if (val1 === name) {
@@ -137,10 +142,10 @@ const filterGlyphsExists = ({ glyph }) => {
return exists;
};
const sortLigatures = ligatures => {
const sortLigatures = (ligatures) => {
// sort by most glyphs then alphabetically
const sorted = ligatures
.map(ligature => {
.map((ligature) => {
return { count: ligature.split('_').length + 1, ligature: ligature };
})
.sort(
@@ -148,7 +153,7 @@ const sortLigatures = ligatures => {
-compareProperty(a.count, b.count) || // sort by count descending
compareProperty(a.ligature, b.ligature) // then by ligature alphabetically
)
.map(entry => entry.ligature);
.map((entry) => entry.ligature);
return sorted;
};
@@ -160,20 +165,20 @@ const compareProperty = (a, b) => {
}
};
const loadXml = name => {
const loadXml = (name) => {
const fileName = `./ligature/${ligFontName}/${name}.xml`;
const xml = fs.readFileSync(fileName, 'utf-8');
return new DOMParser().parseFromString(xml);
};
const processPatch = (name, patchFunc, dom, ligatures, profile) => {
const processPatch = (name, patchFunc, dom, ligatures, profile, options) => {
console.log(`Patching ${name}`);
patchFunc(dom, ligatures, profile);
patchFunc(dom, ligatures, profile, options);
};
const PlatformId = {
mac: 1,
win: 3
win: 3,
};
const NameId = {
@@ -184,7 +189,7 @@ const NameId = {
version: 5,
postscriptName: 6,
windowsFamilyName: 16,
fontStyleName: 17
fontStyleName: 17,
};
const patchNames = (dom, ligatures, profile) => {
@@ -216,7 +221,8 @@ const patchNames = (dom, ligatures, profile) => {
setAttribute(cffFont, 'FamilyName', 'value', familyNamePlat);
// update existing names with new names
updateName(PlatformId.mac, NameId.familyName, familyName);
// mac family name does not include style
updateName(PlatformId.mac, NameId.familyName, familyNamePlat);
updateName(PlatformId.mac, NameId.fontStyle, names.fontStyle);
updateName(PlatformId.mac, NameId.uniqueId, uniqueId);
updateName(PlatformId.mac, NameId.fullName, fullName);
@@ -224,6 +230,7 @@ const patchNames = (dom, ligatures, profile) => {
updateName(PlatformId.mac, NameId.windowsFamilyName, familyNamePlat);
updateName(PlatformId.mac, NameId.fontStyleName, names.fontStyle);
// windows family name includes style
updateName(PlatformId.win, NameId.familyName, familyName);
updateName(PlatformId.win, NameId.fontStyle, names.windowsFontStyle);
updateName(PlatformId.win, NameId.uniqueId, uniqueId);
@@ -253,7 +260,7 @@ const patchGlyphs = (dom, ligatures) => {
// only import glyphs specified
let n = glyphsCount;
// get ligature glyphs
ligatures.forEach(ligature => {
ligatures.forEach((ligature) => {
targetGlyphs.appendChild(
createElementWithAttributes('GlyphID', { id: n++, name: ligature.glyph })
);
@@ -262,18 +269,19 @@ const patchGlyphs = (dom, ligatures) => {
setAttribute(dom, '/ttFont/maxp/numGlyphs', 'value', n);
};
const patchGsub = (dom, ligatures) => {
const patchGsub = (dom, ligatures, options) => {
// don't patch if no ligatures other than LIG
if (ligatures.length <= 1) return;
gsub.initGsubTables(dom, options);
ligatures.forEach(ligature => {
ligatures.forEach((ligature) => {
// build gsub tables
gsub.buildGsubTables(dom, ligature);
gsub.buildGsubTables(dom, ligature, options);
});
gsub.finalizeGsubTables();
};
const patchHmtx = dom => {
const patchHmtx = (dom) => {
const mtxCount = xpath.select('count(/ttFont/hmtx/mtx)', dom, true);
setAttribute(dom, '/ttFont/hhea/numberOfHMetrics', 'value', mtxCount);
@@ -306,7 +314,7 @@ const patchCharStrings = (dom, ligatures) => {
);
const targetGsubrs = xpath.select('/ttFont/CFF/GlobalSubrs', dom, true);
const fingerprints = {};
ligatures.forEach(ligature => {
ligatures.forEach((ligature) => {
console.log(
`* ${ligature.name}${
ligature.name === ligature.glyph ? '' : ' => ' + ligature.glyph
@@ -318,11 +326,11 @@ const patchCharStrings = (dom, ligatures) => {
const subrs = {
sourcePath: '/Glyph/Subrs',
target: targetSubrs
target: targetSubrs,
};
const gsubrs = {
sourcePath: '/Glyph/GlobalSubrs',
target: targetGsubrs
target: targetGsubrs,
};
patchCharStringSubrs(glyphDom, node, fingerprints, subrs, gsubrs);
@@ -332,16 +340,16 @@ const patchCharStrings = (dom, ligatures) => {
createElementWithAttributes('mtx', {
name: ligature.glyph,
width: glyphDom.getAttribute('width'),
lsb: glyphDom.getAttribute('lsb')
lsb: glyphDom.getAttribute('lsb'),
})
);
const code = glyphDom.getAttribute('code');
if (code) {
Array.from(targetCmaps).forEach(node => {
Array.from(targetCmaps).forEach((node) => {
node.appendChild(
createElementWithAttributes('map', {
code,
name: ligature.glyph
name: ligature.glyph,
})
);
});
@@ -354,7 +362,7 @@ const patchCharStringSubrs = (glyphDom, node, fingerprints, subrs, gsubrs) => {
const lines = node.childNodes[0].textContent.split(/\r|\r\n|\n/g);
const newLines = [];
lines.forEach(line => {
lines.forEach((line) => {
if (line.trim().length === 0) return;
const matches = line.match(/(.*?)\{([0-9a-z]+)\} (callsubr|callgsubr)$/);
if (matches != null) {
@@ -403,21 +411,21 @@ const copyConfigAttribute = (dom, configDom, path, name) => {
const createElementWithAttributes = (tagName, attributes) => {
const element = dom.createElement(tagName);
Object.entries(attributes).forEach(attribute => {
Object.entries(attributes).forEach((attribute) => {
element.setAttribute(attribute[0], attribute[1]);
});
return element;
};
//const dump = dom => console.log(serialize(dom));
const serialize = dom =>
new XMLSerializer().serializeToString(dom, false, node => {
const serialize = (dom) =>
new XMLSerializer().serializeToString(dom, false, (node) => {
if (node.nodeType === NodeType.TEXT_NODE) {
if (regExWhitespace.test(node.data)) return null;
const data = node.data
.split(/\r|\r\n|\n/g)
.filter(s => /\S+/.test(s))
.map(s => s.replace(/^\s+/g, ''))
.filter((s) => /\S+/.test(s))
.map((s) => s.replace(/^\s+/g, ''))
.join(os.EOL);
return node.ownerDocument.createTextNode(data);
+1 -1
View File
@@ -108,7 +108,7 @@
</hhea>
<CFF>
<CFFFont>
<FontBBox value="-1564 -288 638 1144"/>
<FontBBox value="-1564 -288 630 1144"/>
</CFFFont>
</CFF>
<CFF>
@@ -0,0 +1,7 @@
<Glyph name="ampersand.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -3,63 +3,39 @@
-12 67 501 76 hstemhm
-269 80 227 77 -4 80 hintmask 11110000
316 169 rmoveto
{78109b05} callsubr
33 59 32 79 22 89 -70 9 rcurveline
-14 -68 -21 -66 -23 -54 rrcurveto
-119 136 -55 59 52 vvcurveto
54 42 46 163 -8 vhcurveto
-6 76 rlineto
-213 4 -66 -91 -86 vvcurveto
-43 20 -40 40 -52 vhcurveto
-79 -50 -44 -56 -8 -65 -14 16 rcurveline
{78109b05} callsubr
{63e41646} callsubr
33 59 32 79 22 89 -70 9 rcurveline
-14 -68 -21 -66 -23 -54 rrcurveto
-119 136 -55 59 52 vvcurveto
54 42 46 163 -8 vhcurveto
-6 76 rlineto
-213 4 -66 -91 -86 vvcurveto
-43 20 -40 40 -52 vhcurveto
-88 -56 -45 -63 -75 vvcurveto
-80 49 -62 95 64 64 34 77 51 vhcurveto
22 -27 47 -52 67 -22 rrcurveto
-6 17 20 -4 23 hhcurveto
64 -1 69 35 51 77 28 -34 31 -37 32 -41 65 51 rcurveline
-41 50 -37 43 -33 38 rrcurveto
-587 -114 {d2b30628} callgsubr
-587 -114 rmoveto
-55 -29 39 53 47 28 49 59 42 hvcurveto
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
380 hmoveto
-55 -29 39 53 hvcurveto
hintmask 11101000
47 28 49 59 42 vhcurveto
{71578616} callgsubr
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="78109b05">
{1ffac2b6} callsubr
{6ff78137} callsubr
return
</CharString>
<CharString index="1" fingerprint="1ffac2b6">
33 59 32 79 22 89 -70 9 rcurveline
-14 -68 -21 -66 -23 -54 rrcurveto
return
</CharString>
<CharString index="2" fingerprint="6ff78137">
-119 136 -55 59 52 vvcurveto
54 42 46 163 -8 vhcurveto
-6 76 rlineto
-213 4 -66 -91 -86 vvcurveto
-43 20 -40 40 -52 vhcurveto
return
</CharString>
<CharString index="3" fingerprint="78109b05">
{1ffac2b6} callsubr
{6ff78137} callsubr
return
</CharString>
<CharString index="4" fingerprint="63e41646">
-88 -56 -45 -63 -75 vvcurveto
-80 49 -62 95 64 64 34 77 51 vhcurveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d2b30628">
rmoveto
-55 -29 39 53 47 28 49 59 42 hvcurveto
{71578616} callgsubr
return
</CharString>
<CharString index="1" fingerprint="71578616">
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="bar.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,23 +1,14 @@
<Glyph name="bar_bar.liga" lsb="-211" width="550">
<CharString>
-211 75 275 75 vstem
-136 710 {92c1542b} callsubr
350 892 {92c1542b} callsubr
-136 710 rmoveto
-75 -6 rlineto
-886 75 vlineto
350 892 rmoveto
-75 -6 rlineto
-886 75 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="92c1542b">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
<CharString index="1" fingerprint="92c1542b">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,7 +1,9 @@
<Glyph name="bar_greater.liga" lsb="-261" width="550">
<CharString>
-261 75 468 74 vstem
-186 710 {92c1542b} callsubr
-186 710 rmoveto
-75 -6 rlineto
-886 75 vlineto
541 440 rlineto
69 vlineto
-74 -40 rmoveto
@@ -10,13 +12,6 @@
467 -323 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="92c1542b">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="colon.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,52 +1,23 @@
<Glyph name="colon_equal.liga" lsb="-297" width="550">
<CharString>
{806e0ede} callsubr
151 69 153 69 hstem
-297 658 vstem
-297 354 {d5651823} callsubr
657 -98 {039fe050} callgsubr
-235 -245 {d5651823} callsubr
657 -94 {039fe050} callgsubr
-297 354 rmoveto
118 hlineto
2 117 rlineto
-119 hlineto
657 -98 rmoveto
1 69 rlineto
-424 -69 hlineto
-235 -245 rmoveto
118 hlineto
2 117 rlineto
-119 hlineto
657 -94 rmoveto
1 69 rlineto
-424 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="d5651823">
rmoveto
118 hlineto
2 117 {219083fd} callgsubr
return
</CharString>
<CharString index="3" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="4" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="219083fd">
rlineto
-119 hlineto
return
</CharString>
<CharString index="2" fingerprint="039fe050">
{b0478dca} callsubr
-424 -69 hlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="equal.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,48 +1,21 @@
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
<CharString>
{806e0ede} callsubr
151 69 153 69 hstem
-472 944 vstem
-49 373 {039fe050} callgsubr
943 {95b16fa7} callgsubr
-49 373 rmoveto
1 69 rlineto
-424 -69 hlineto
943 hmoveto
1 69 rlineto
-414 -69 hlineto
-107 -222 {039fe050} callgsubr
943 {95b16fa7} callgsubr
-107 -222 rmoveto
1 69 rlineto
-424 -69 hlineto
943 hmoveto
1 69 rlineto
-414 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="3" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="039fe050">
{b0478dca} callsubr
-424 -69 hlineto
return
</CharString>
<CharString index="2" fingerprint="95b16fa7">
hmoveto
{16905bc3} callsubr
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,40 +1,15 @@
<Glyph name="equal_equal.liga" lsb="-472" width="550">
<CharString>
{806e0ede} callsubr
151 69 153 69 hstem
-472 944 vstem
471 373 {b0478dca} callsubr
471 373 rmoveto
1 69 rlineto
-944 -69 hlineto
943 {dbbb91b3} callgsubr
943 -222 rmoveto
1 69 rlineto
-944 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="3" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="dbbb91b3">
-222 {b0478dca} callsubr
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,48 +1,27 @@
<Glyph name="equal_equal_equal.2.liga" lsb="-1022" width="550">
<CharString>
{806e0ede} callsubr
151 69 153 69 hstem
-1022 1494 vstem
-579 373 {b3fa3b3b} callgsubr
-607 -222 {b3fa3b3b} callgsubr
-579 373 rmoveto
1 69 rlineto
-444 -69 hlineto
968 hmoveto
1 69 rlineto
-444 -69 hlineto
968 hmoveto
1 69 rlineto
-444 -69 hlineto
-607 -222 rmoveto
1 69 rlineto
-444 -69 hlineto
968 hmoveto
1 69 rlineto
-444 -69 hlineto
968 hmoveto
1 69 rlineto
-444 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="b3fa3b3b">
rmoveto
1 69 rlineto
-444 -69 hlineto
968 hmoveto
{85a4851d} callgsubr
return
</CharString>
<CharString index="2" fingerprint="85a4851d">
{4124c3a1} callgsubr
968 hmoveto
{4124c3a1} callgsubr
return
</CharString>
<CharString index="3" fingerprint="4124c3a1">
{16905bc3} callsubr
-444 -69 hlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,38 +1,18 @@
<Glyph name="equal_equal_equal.liga" lsb="-1022" width="550">
<CharString>
40 69 153 {2a39309a} callsubr
hstem
40 69 153 69 153 69 hstem
-1022 1494 cntrmask 11100000
471 484 {b0478dca} callsubr
471 484 rmoveto
1 69 rlineto
-1494 -69 hlineto
1493 {dbbb91b3} callgsubr
1493 -222 rmoveto
1 69 rlineto
-1494 -69 hlineto
1493 {dbbb91b3} callgsubr
1493 -222 rmoveto
1 69 rlineto
-1494 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="2" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="dbbb91b3">
-222 {b0478dca} callsubr
return
</CharString>
<CharString index="1" fingerprint="dbbb91b3">
-222 {b0478dca} callsubr
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,56 +1,18 @@
<Glyph name="equal_equal_greater.liga" lsb="-1022" width="550">
<CharString>
{806e0ede} callsubr
151 69 153 69 hstem
-1022 394 1019 74 vstem
{d4d5756e} callgsubr
138 602 rmoveto
-47 -58 124 -102 rlineto
-1237 -69 1321 hlineto
{53342509} callsubr
-1332 -69 1249 {6c481ea1} callsubr
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
-1332 -69 1249 hlineto
-140 -116 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="3" fingerprint="53342509">
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
return
</CharString>
<CharString index="4" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="2" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="3" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,58 +1,20 @@
<Glyph name="equal_greater.liga" lsb="-472" width="550">
<CharString>
{f3caf16b} callgsubr
151 69 153 69 hstemhm
-472 937 -74 74 hintmask 11100000
{d4d5756e} callgsubr
138 602 rmoveto
-47 -58 124 -102 rlineto
-687 -69 771 hlineto
hintmask 11010000
{53342509} callsubr
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
hintmask 11100000
-782 -69 699 {6c481ea1} callsubr
-782 -69 699 hlineto
-140 -116 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="2" fingerprint="53342509">
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
return
</CharString>
<CharString index="3" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="3" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="4" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,13 +1,15 @@
<Glyph name="equal_less_less.liga" lsb="-1022" width="550">
<CharString>
{f3caf16b} callgsubr
151 69 153 69 hstemhm
-1022 1486 -688 75 235 75 hintmask 11011000
-149 297 rmoveto
{8a45f119} callsubr
299 248 -45 58 -191 -161 rlineto
hintmask 11100000
-936 -69 854 hlineto
hintmask 11011000
{80e97e3f} callsubr
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
hintmask 11100000
-842 -69 924 hlineto
206 -173 46 57 rlineto
@@ -15,45 +17,13 @@
-303 252 rlineto
310 hmoveto
10 vlineto
299 248 {b5c7d737} callsubr
rlineto
299 248 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 rlineto
hintmask 11100000
46 57 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="8a45f119">
299 248 -45 58 -191 -161 rlineto
return
</CharString>
<CharString index="2" fingerprint="80e97e3f">
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
return
</CharString>
<CharString index="3" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="4" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="exclam.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,11 +1,10 @@
<Glyph name="exclam_equal.liga" lsb="-472" width="550">
<CharString>
{749ae412} callsubr
-575 {2a39309a} callsubr
hstemhm
-189 915 -575 69 153 69 hstemhm
-472 944 -762 534 hintmask 00110000
76 373 rmoveto
395 {9988f976} callgsubr
395 hlineto
1 69 rlineto
-360 hlineto
hintmask 00101000
132 252 rlineto
@@ -22,32 +21,11 @@
71 -29 rlineto
hintmask 01101000
178 340 rlineto
512 {9988f976} callgsubr
512 hlineto
1 69 rlineto
-477 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="1" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,14 +1,14 @@
<Glyph name="exclam_equal_equal.liga" lsb="-1022" width="550">
<CharString>
{749ae412} callsubr
-686 69 153 {2a39309a} callsubr
hstemhm
-189 915 -686 69 153 69 153 69 hstemhm
-1022 1494 -1012 534 cntrmask 01110000
hintmask 01111000
471 262 {b0478dca} callsubr
471 262 rmoveto
1 69 rlineto
-668 hlineto
80 153 rlineto
587 {9988f976} callgsubr
587 hlineto
1 69 rlineto
-552 hlineto
hintmask 01110100
74 141 rlineto
@@ -26,38 +26,12 @@
71 -29 rlineto
hintmask 01110100
120 229 rlineto
820 {9988f976} callgsubr
820 hlineto
1 69 rlineto
-785 hlineto
80 153 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="3" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="1" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="greater.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,31 +1,17 @@
<Glyph name="greater_equal.2.liga" lsb="-308" width="600">
<CharString>
493 -141 69 390 {045cf5af} callgsubr
493 -141 69 390 69 hstem
-308 615 vstem
-308 95 rmoveto
-79 vlineto
615 302 {f7a1359d} callgsubr
-488 rmoveto
615 302 rlineto
69 vlineto
-574 280 -37 -63 512 -247 rlineto
-10 vlineto
99 -488 rmoveto
69 -615 -69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="045cf5af">
69 hstem
-308 615 vstem
-308 95 rmoveto
return
</CharString>
<CharString index="1" fingerprint="f7a1359d">
rlineto
69 vlineto
-574 280 -37 -63 512 {fec1189a} callsubr
99 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,31 +1,17 @@
<Glyph name="greater_equal.liga" lsb="-308" width="550">
<CharString>
138 77 103 {045cf5af} callgsubr
31 -64 584 287 {f7a1359d} callgsubr
-209 rmoveto
138 77 103 69 hstem
-308 615 vstem
-308 95 rmoveto
31 -64 584 287 rlineto
69 vlineto
-574 280 -37 -63 512 -247 rlineto
-10 vlineto
99 -209 rmoveto
77 vlineto
-615 -300 31 -64 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="045cf5af">
69 hstem
-308 615 vstem
-308 95 rmoveto
return
</CharString>
<CharString index="1" fingerprint="f7a1359d">
rlineto
69 vlineto
-574 280 -37 -63 512 {fec1189a} callsubr
99 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,93 +1,32 @@
<Glyph name="greater_equal_greater.liga" lsb="-1013" width="550">
<CharString>
{f3caf16b} callgsubr
151 69 153 69 hstemhm
-1013 1478 -1174 74 1026 74 hintmask 11100000
{d4d5756e} callgsubr
-987 {f6058c5b} callgsubr
138 602 rmoveto
-47 -58 124 -102 rlineto
-987 hlineto
-190 160 -47 -58 rlineto
hintmask 11010000
{23088cc1} callsubr
206 173 rlineto
989 {e779a49c} callsubr
300 -247 rlineto
-10 vlineto
hintmask 11100000
-304 -252 45 -57 206 173 rlineto
989 hlineto
-140 -116 45 -57 333 280 rlineto
69 vlineto
hintmask 11001000
-74 -40 rmoveto
-81 -67 rlineto
-990 hlineto
hintmask 11010000
45 38 rlineto
69 vlineto
-55 46 rlineto
989 {9b0fa5a4} callsubr
989 hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="2" fingerprint="23088cc1">
{4f167383} callsubr
hintmask 11100000
{f20bf050} callgsubr
return
</CharString>
<CharString index="3" fingerprint="4f167383">
300 {fec1189a} callsubr
return
</CharString>
<CharString index="4" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
<CharString index="5" fingerprint="e779a49c">
{6c481ea1} callsubr
hintmask 11001000
-74 -40 rmoveto
-81 -67 rlineto
return
</CharString>
<CharString index="6" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
<CharString index="7" fingerprint="9b0fa5a4">
hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="3" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="4" fingerprint="f6058c5b">
hlineto
-190 160 -47 -58 rlineto
return
</CharString>
<CharString index="5" fingerprint="f20bf050">
-304 -252 45 -57 return
</CharString>
<CharString index="6" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,73 +1,32 @@
<Glyph name="greater_greater_equal.liga" lsb="-1013" width="550">
<CharString>
{f3caf16b} callgsubr
151 69 153 69 hstemhm
-1013 1485 -1181 74 236 74 hintmask 11011000
-635 327 rmoveto
-327 275 -47 -58 {23088cc1} callsubr
rlineto
-327 275 -47 -58 300 -247 rlineto
-10 vlineto
hintmask 11100000
-304 -252 45 -57 rlineto
hintmask 11011000
333 280 rlineto
310 hmoveto
69 vlineto
-55 46 rlineto
hintmask 11100000
851 {9988f976} callgsubr
-934 {f6058c5b} callgsubr
851 hlineto
1 69 rlineto
-934 hlineto
-190 160 -47 -58 rlineto
hintmask 11001000
{4f167383} callsubr
{f20bf050} callgsubr
206 173 rlineto
300 -247 rlineto
-10 vlineto
-304 -252 45 -57 206 173 rlineto
hintmask 11100000
923 {9988f976} callgsubr
923 hlineto
1 69 rlineto
-842 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="23088cc1">
{4f167383} callsubr
hintmask 11100000
{f20bf050} callgsubr
return
</CharString>
<CharString index="2" fingerprint="4f167383">
300 {fec1189a} callsubr
return
</CharString>
<CharString index="3" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
<CharString index="4" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="f20bf050">
-304 -252 45 -57 return
</CharString>
<CharString index="3" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="4" fingerprint="f6058c5b">
hlineto
-190 160 -47 -58 rlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="hyphen.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,46 +1,14 @@
<Glyph name="hyphen_greater.liga" lsb="-431" width="550">
<CharString>
{05172461} callsubr
-431 896 {523bf78f} callsubr
-786 -69 787 {946ed192} callgsubr
258 69 hstem
-431 896 vstem
138 602 rmoveto
-47 -58 264 -217 rlineto
-786 -69 787 hlineto
-269 -223 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="523bf78f">
{1bf9d7d7} callsubr
264 -217 rlineto
return
</CharString>
<CharString index="2" fingerprint="1bf9d7d7">
vstem
{d95d51dd} callgsubr
return
</CharString>
<CharString index="3" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="1" fingerprint="946ed192">
hlineto
-269 -223 {f8ffdd53} callgsubr
</CharString>
<CharString index="2" fingerprint="f8ffdd53">
{f9e588f2} callgsubr
endchar
</CharString>
<CharString index="3" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,23 +1,15 @@
<Glyph name="hyphen_hyphen.liga" lsb="-341" width="550">
<CharString>
{05172461} callsubr
258 69 hstem
-341 317 63 317 vstem
-30 258 rmoveto
{33ce0eb6} callsubr
6 69 rlineto
-317 -69 hlineto
691 hmoveto
{33ce0eb6} callsubr
6 69 rlineto
-317 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="33ce0eb6">
6 69 rlineto
-317 -69 hlineto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,46 +1,14 @@
<Glyph name="hyphen_hyphen_greater.liga" lsb="-981" width="550">
<CharString>
{05172461} callsubr
-981 1446 {523bf78f} callsubr
-1336 -69 1337 {946ed192} callgsubr
258 69 hstem
-981 1446 vstem
138 602 rmoveto
-47 -58 264 -217 rlineto
-1336 -69 1337 hlineto
-269 -223 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="523bf78f">
{1bf9d7d7} callsubr
264 -217 rlineto
return
</CharString>
<CharString index="2" fingerprint="1bf9d7d7">
vstem
{d95d51dd} callgsubr
return
</CharString>
<CharString index="3" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="1" fingerprint="946ed192">
hlineto
-269 -223 {f8ffdd53} callgsubr
</CharString>
<CharString index="2" fingerprint="f8ffdd53">
{f9e588f2} callgsubr
endchar
</CharString>
<CharString index="3" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="less.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -2,21 +2,16 @@
<CharString>
493 -141 69 hstem
-283 99 vstem
332 {fc11b4c5} callsubr
332 95 rmoveto
-516 252 rlineto
10 vlineto
512 247 -37 63 -574 -280 rlineto
-69 vlineto
615 -302 rlineto
-615 -157 rmoveto
615 69 -615 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fc11b4c5">
95 rmoveto
-516 252 rlineto
10 vlineto
512 247 -37 63 -574 -280 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -2,21 +2,16 @@
<CharString>
138 77 103 69 hstem
-303 615 vstem
312 {fc11b4c5} callsubr
312 95 rmoveto
-516 252 rlineto
10 vlineto
512 247 -37 63 -574 -280 rlineto
-69 vlineto
584 -287 rlineto
-584 107 rmoveto
584 -287 31 64 -615 300 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fc11b4c5">
95 rmoveto
-516 252 rlineto
10 vlineto
512 247 -37 63 -574 -280 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,63 +1,22 @@
<Glyph name="less_equal_equal.liga" lsb="-1014" width="550">
<CharString>
{e5de916d} callgsubr
1486 hintmask 11100000
151 69 153 69 hstemhm
-1014 75 -75 1486 hintmask 11100000
-939 287 rmoveto
10 vlineto
92 76 rlineto
hintmask 11010000
1318 {9988f976} callgsubr
-1236 {4e43c992} callgsubr
1246 {9988f976} callgsubr
1318 hlineto
1 69 rlineto
-1236 hlineto
124 103 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -139 116 rlineto
1246 hlineto
1 69 rlineto
-1330 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
<CharString index="2" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="3" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e5de916d">
{f3caf16b} callgsubr
-1014 75 -75 return
</CharString>
<CharString index="1" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="3" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="4" fingerprint="4e43c992">
hlineto
124 103 {5a448ea3} callgsubr
-139 116 rlineto
return
</CharString>
<CharString index="5" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,94 +1,29 @@
<Glyph name="less_equal_greater.liga" lsb="-1014" width="550">
<CharString>
{e5de916d} callgsubr
1479 -74 74 hintmask 11010000
{d4d5756e} callgsubr
-979 {4e43c992} callgsubr
1002 {e779a49c} callsubr
151 69 153 69 hstemhm
-1014 75 -75 1479 -74 74 hintmask 11010000
138 602 rmoveto
-47 -58 124 -102 rlineto
-979 hlineto
124 103 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -139 116 rlineto
1002 hlineto
-140 -116 45 -57 333 280 rlineto
69 vlineto
hintmask 11001000
-74 -40 rmoveto
-81 -67 rlineto
-1168 hlineto
hintmask 11100000
{0541aa7a} callsubr
1146 {9b0fa5a4} callsubr
-81 67 rlineto
10 vlineto
92 76 rlineto
1146 hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="2" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="3" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
<CharString index="4" fingerprint="e779a49c">
{6c481ea1} callsubr
hintmask 11001000
-74 -40 rmoveto
-81 -67 rlineto
return
</CharString>
<CharString index="5" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
<CharString index="6" fingerprint="0541aa7a">
-81 67 rlineto
10 vlineto
92 76 rlineto
return
</CharString>
<CharString index="7" fingerprint="9b0fa5a4">
hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e5de916d">
{f3caf16b} callgsubr
-1014 75 -75 return
</CharString>
<CharString index="1" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="3" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="4" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="5" fingerprint="4e43c992">
hlineto
124 103 {5a448ea3} callgsubr
-139 116 rlineto
return
</CharString>
<CharString index="6" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
<CharString index="7" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,75 +1,29 @@
<Glyph name="less_equal_less.liga" lsb="-1014" width="550">
<CharString>
{e5de916d} callgsubr
1478 -378 75 hintmask 11101000
151 69 153 69 hstemhm
-1014 75 -75 1478 -378 75 hintmask 11101000
418 -22 rmoveto
hintmask 11010000
46 57 -222 185 rlineto
hintmask 11101000
-81 67 rlineto
10 vlineto
{8a45f119} callsubr
-988 {4e43c992} callgsubr
299 248 -45 58 -191 -161 rlineto
-988 hlineto
124 103 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -139 116 rlineto
987 hlineto
-1070 69 rmoveto
{0541aa7a} callsubr
-81 67 rlineto
10 vlineto
92 76 rlineto
989 hlineto
{80e97e3f} callsubr
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="8a45f119">
299 248 -45 58 -191 -161 rlineto
return
</CharString>
<CharString index="2" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="3" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
<CharString index="4" fingerprint="0541aa7a">
-81 67 rlineto
10 vlineto
92 76 rlineto
return
</CharString>
<CharString index="5" fingerprint="80e97e3f">
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e5de916d">
{f3caf16b} callgsubr
-1014 75 -75 return
</CharString>
<CharString index="1" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="3" fingerprint="4e43c992">
hlineto
124 103 {5a448ea3} callgsubr
-139 116 rlineto
return
</CharString>
<CharString index="4" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -2,9 +2,15 @@
<CharString>
0 110 148 69 hstemhm
-884 114 -78 84 hintmask 11010000
-848 {67998929} callgsubr
-848 234 rmoveto
53 hlineto
2 87 25 264 4 91 rrcurveto
-103 hlineto
2 -91 17 -264 -87 vvcurveto
-342 311 rmoveto
{a2b8be51} callgsubr
-45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
384 hlineto
6 69 rlineto
-389 hlineto
@@ -12,43 +18,12 @@
-69 1011 vlineto
6 69 rlineto
hintmask 11100000
-1321 -327 {e88c39b2} callsubr
-1321 -327 rmoveto
113 hlineto
3 110 rlineto
-114 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="1" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
<CharString index="2" fingerprint="e88c39b2">
rmoveto
113 hlineto
3 110 rlineto
-114 hlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="67998929">
234 rmoveto
53 hlineto
2 87 25 264 4 91 rrcurveto
-103 hlineto
2 -91 17 -264 -87 vvcurveto
return
</CharString>
<CharString index="1" fingerprint="a2b8be51">
{5a448ea3} callgsubr
-268 223 rlineto
return
</CharString>
<CharString index="2" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,37 +1,15 @@
<Glyph name="less_hyphen.liga" lsb="-464" width="550">
<CharString>
{05172461} callsubr
258 69 hstem
-464 900 vstem
436 327 rmoveto
-789 hlineto
263 218 {a2b8be51} callgsubr
263 218 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
784 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="2" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a2b8be51">
{5a448ea3} callgsubr
-268 223 rlineto
return
</CharString>
<CharString index="1" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="less_hyphen_greater.liga" lsb="-1014" width="550">
<CharString>
258 69 hstem
-1014 1479 vstem
138 602 rmoveto
-47 -58 264 -217 rlineto
-1258 hlineto
263 218 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
1260 hlineto
-269 -223 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,37 +1,15 @@
<Glyph name="less_hyphen_hyphen.liga" lsb="-1014" width="550">
<CharString>
{05172461} callsubr
258 69 hstem
-1014 1450 vstem
436 327 rmoveto
-1339 hlineto
263 218 {a2b8be51} callgsubr
263 218 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
1334 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="2" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a2b8be51">
{5a448ea3} callgsubr
-268 223 rlineto
return
</CharString>
<CharString index="1" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,24 +1,15 @@
<Glyph name="less_slash.liga" lsb="-464" width="550">
<CharString>
{749ae412} callsubr
hstem
-189 915 hstem
-464 75 182 534 vstem
258 726 rmoveto
-357 -680 -290 241 rlineto
10 vlineto
299 248 {f3a774e8} callsubr
299 248 -45 58 -329 -277 rlineto
-69 vlineto
330 -277 -73 -140 71 -29 463 883 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="plus.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -3,15 +3,10 @@
259 68 hstem
-250 73 352 73 vstem
248 327 rmoveto
187 -73 -187 -352 {3259c3e8} callgsubr
187 352 -187 73 187 176 vlineto
187 -73 -187 -352 187 -73 -187 -178 -68 178 -187 73 187 352 -187 73 187 176 vlineto
1 68 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="3259c3e8">
187 -73 -187 -178 -68 178 -187 73 return
</CharString>
</GlobalSubrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="question.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,50 +1,31 @@
<Glyph name="question_question.liga" lsb="-395" width="550">
<CharString>
0 109 493 76 hstem
-304 {8aa986d8} callsubr
86 73 {8aa986d8} callsubr
86 vstem
-304 111 110 86 73 111 110 86 vstem
-387 678 rmoveto
{9ecc4586} callgsubr
-8 -76 rlineto
252 -16 60 -40 -47 vvcurveto
-72 -180 -55 -8 -143 vhcurveto
57 -1 rlineto
14 129 203 51 110 vvcurveto
79 -88 65 -302 16 vhcurveto
380 hmoveto
{9ecc4586} callgsubr
-298 -678 {d2717239} callgsubr
378 -109 {d2717239} callgsubr
-8 -76 rlineto
252 -16 60 -40 -47 vvcurveto
-72 -180 -55 -8 -143 vhcurveto
57 -1 rlineto
14 129 203 51 110 vvcurveto
79 -88 65 -302 16 vhcurveto
-298 -678 rmoveto
110 hlineto
3 109 rlineto
-111 hlineto
378 -109 rmoveto
110 hlineto
3 109 rlineto
-111 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="8aa986d8">
111 110 return
</CharString>
<CharString index="1" fingerprint="8aa986d8">
111 110 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9ecc4586">
-8 -76 rlineto
252 -16 60 -40 -47 vvcurveto
-72 -180 -55 -8 -143 vhcurveto
57 -1 rlineto
14 129 203 51 110 vvcurveto
79 -88 65 -302 16 vhcurveto
return
</CharString>
<CharString index="1" fingerprint="9ecc4586">
-8 -76 rlineto
252 -16 60 -40 -47 vvcurveto
-72 -180 -55 -8 -143 vhcurveto
57 -1 rlineto
14 129 203 51 110 vvcurveto
79 -88 65 -302 16 vhcurveto
return
</CharString>
<CharString index="2" fingerprint="d2717239">
rmoveto
110 hlineto
3 109 rlineto
-111 hlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="slash.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,35 +1,14 @@
<Glyph name="slash_greater.liga" lsb="-347" width="550">
<CharString>
{749ae412} callsubr
hstem
-189 915 hstem
-347 534 204 74 vstem
139 {2e66eddf} callsubr
48 92 {88f7ced4} callgsubr
379 723 288 -237 rlineto
139 602 rmoveto
48 92 -69 32 -465 -886 71 -29 379 723 288 -237 rlineto
-10 vlineto
-304 -252 {f8ffdd53} callgsubr
-304 -252 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="88f7ced4">
-69 32 -465 -886 71 -29 return
</CharString>
<CharString index="1" fingerprint="f8ffdd53">
{f9e588f2} callgsubr
endchar
</CharString>
<CharString index="2" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="underscore.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,16 +1,11 @@
<Glyph name="uniE0B0" code="0xe0b0" lsb="-20" width="550">
<CharString>
{99cad421} callsubr
-205 1099 hstem
-20 629 vstem
609 313 rmoveto
-627 581 -2 -1099 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="99cad421">
-205 1099 hstem
-20 629 vstem
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,16 +1,11 @@
<Glyph name="uniE0B2" code="0xe0b2" lsb="-20" width="550">
<CharString>
{99cad421} callsubr
-205 1099 hstem
-20 629 vstem
-20 313 rmoveto
629 -518 -2 1099 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="99cad421">
-205 1099 hstem
-20 629 vstem
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
<Glyph name="ampersand.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -4,48 +4,33 @@
-411 76 132 73 149 76 132 73 vstem
523 350 rmoveto
-66 24 -30 -59 -30 -50 -30 -42 rlinecurve
{db2882dd} callsubr
-17 19 -15 20 -14 20 {c03968d2} callsubr
-37 63 -22 63 -8 65 rrcurveto
60 60 35 65 49 vvcurveto
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
-7 vlineto
-128 -109 -80 -109 -100 vvcurveto
-17 19 -15 20 -14 20 40 50 40 60 40 70 -66 24 rcurveline
-30 -59 -30 -50 -30 -42 -37 63 -22 63 -8 65 rrcurveto
60 60 35 65 49 vvcurveto
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
-7 vlineto
-128 -109 -80 -109 -100 vvcurveto
-75 41 -46 74 64 75 41 78 77 vhcurveto
26 -37 75 -60 77 -17 rrcurveto
-3 11 14 -2 14 hhcurveto
64 72 41 78 77 hvcurveto
31 -43 37 -43 41 -42 63 51 rcurveline
-47 47 -40 45 -32 46 40 50 40 60 40 70 rrcurveto
-796 -289 rmoveto
{e80dab6b} callsubr
-38 -24 24 43 69 58 80 82 80 hvcurveto
12 -66 28 -66 41 -66 rrcurveto
-67 -61 -56 -31 -42 hhcurveto
430 hmoveto
{e80dab6b} callsubr
-38 -24 24 43 69 58 80 82 80 hvcurveto
12 -66 28 -66 41 -66 rrcurveto
-67 -61 -56 -31 -42 hhcurveto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="db2882dd">
-37 63 -22 63 -8 65 rrcurveto
60 60 35 65 49 vvcurveto
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
-7 vlineto
-128 -109 -80 -109 -100 vvcurveto
return
</CharString>
<CharString index="1" fingerprint="c03968d2">
40 50 40 60 40 70 -66 24 rcurveline
-30 -59 -30 -50 -30 -42 {db2882dd} callsubr
-75 41 -46 74 64 75 41 78 77 vhcurveto
return
</CharString>
<CharString index="2" fingerprint="db2882dd">
-37 63 -22 63 -8 65 rrcurveto
60 60 35 65 49 vvcurveto
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
-7 vlineto
-128 -109 -80 -109 -100 vvcurveto
return
</CharString>
<CharString index="3" fingerprint="e80dab6b">
-38 -24 24 43 69 58 80 82 80 hvcurveto
12 -66 28 -66 41 -66 rrcurveto
-67 -61 -56 -31 -42 hhcurveto
return
</CharString>
</Subrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="bar.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,23 +1,14 @@
<Glyph name="bar_bar.liga" lsb="-298" width="550">
<CharString>
-298 247 103 247 vstem
-51 707 {b0cb0c2d} callgsubr
523 888 {b0cb0c2d} callgsubr
-51 707 rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
523 888 rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="b0cb0c2d">
rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
return
</CharString>
<CharString index="1" fingerprint="b0cb0c2d">
rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
return
</CharString>
</GlobalSubrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="colon.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,60 +1,25 @@
<Glyph name="colon_equal.liga" lsb="-297" width="550">
<CharString>
{53fa50ea} callsubr
151 69 153 69 hstem
-253 618 vstem
-253 354 {d8368263} callsubr
-98 rmoveto
{14bcb405} callgsubr
-424 {83c7393b} callsubr
-283 -245 {d8368263} callsubr
-94 {331d84c3} callgsubr
-424 {fff746ed} callgsubr
-253 354 rmoveto
118 hlineto
25 117 rlineto
-119 hlineto
638 -98 rmoveto
14 69 rlineto
-424 hlineto
-13 -69 rlineto
-283 -245 rmoveto
118 hlineto
25 117 rlineto
-119 hlineto
638 -94 rmoveto
15 69 rlineto
-424 hlineto
-14 -69 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="d8368263">
rmoveto
118 hlineto
25 117 rlineto
-119 hlineto
638 return
</CharString>
<CharString index="4" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
<CharString index="5" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
<CharString index="1" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="2" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,7 @@
<Glyph name="equal.spacer" lsb="0" width="600">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -1,65 +1,25 @@
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
<CharString>
{53fa50ea} callsubr
151 69 153 69 hstem
-472 944 vstem
-6 373 {331d84c3} callgsubr
-424 {fff746ed} callgsubr
-6 373 rmoveto
15 69 rlineto
-424 hlineto
-14 -69 rlineto
943 hmoveto
{b42578a3} callsubr
-414 {fff746ed} callgsubr
-150 {b7988df5} callgsubr
-424 {83c7393b} callsubr
15 69 rlineto
-414 hlineto
-14 -69 rlineto
-150 -222 rmoveto
14 69 rlineto
-424 hlineto
-13 -69 rlineto
943 hmoveto
{14bcb405} callgsubr
-414 {83c7393b} callsubr
14 69 rlineto
-414 hlineto
-13 -69 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
<CharString index="4" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="1" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="2" fingerprint="b7988df5">
{4bc44ff7} callgsubr
69 rlineto
return
</CharString>
<CharString index="3" fingerprint="4bc44ff7">
-222 rmoveto
14 return
</CharString>
<CharString index="4" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
</GlobalSubrs>
<Subrs/>
<GlobalSubrs/>
</Glyph>

Some files were not shown because too many files have changed in this diff Show More