109 Commits

Author SHA1 Message Date
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
kiliman 38eb637717 🚀 Deploy to v2.2.6 with www ligature for SSm Book/Italic 2019-10-31 13:42:59 -04:00
Kiliman 2dbdb2543c Merge pull request #118 from kiliman/feature/ligature_www
🔀 Add www ligature from @amitkparekh
2019-10-31 13:34:32 -04:00
Amit Parekh 4b908ad07b Add @amitkparekh as a contributor 2019-10-31 17:20:49 +00:00
Amit Parekh a6dc28a403 Add glyph: w_w_w [SSm Book Italic] 2019-10-31 17:20:26 +00:00
Amit Parekh 84a4863e1f Add glyph: w_w_w [SSm Book] 2019-10-31 17:20:14 +00:00
Mark Skelton 6fe2acd518 Update readme 2019-10-31 09:53:34 -04:00
Mark Skelton 25051cfb52 Merge pull request #114 from kiliman/mskelton-rename
Mskelton rename
2019-10-18 21:53:25 -05:00
Mark Skelton f91b91b7df Update README.md 2019-10-18 21:53:01 -05:00
Mark Skelton 1ed5f8afe4 Update README.md 2019-10-18 21:51:48 -05:00
Mark Skelton e87797d070 Update .all-contributorsrc 2019-10-18 21:51:15 -05:00
kiliman 4e50610989 🚀 Deploy v2.2.5 with Operator Mono Book/Italic ligatures 2019-09-30 20:09:35 -04:00
kiliman 009dac1619 Add Operator Mono Book Light ligatures 2019-09-30 20:07:11 -04:00
kiliman 43d7f44527 Add Operator Mono Book ligatures 2019-09-30 20:07:11 -04:00
kiliman 9abc800918 ⬆️ Update package-lock.json version 2019-09-19 10:55:12 -04:00
kiliman 10027973d8 😍 Add @drod3763 as a contributor 2019-09-19 10:52:57 -04:00
Derick Rodriguez a9b6b1305d Update README.md to document Docker install method 2019-09-19 10:47:33 -04:00
Kiliman 85cdb5c0a4 📝 Update to v2.2.4 add missing ligatures 2019-08-07 09:08:04 -04:00
Kiliman 22d1a4d16d 🔀 Merge branch 'add-missing-ligatures' into develop 2019-08-07 09:00:12 -04:00
Mark Skelton 59466b8dfa Add missing light and light italic ligatures 2019-08-07 06:23:13 -05:00
Kiliman 2ed7ab50b3 📝 Update to v2.2.3 Operator Mono SSm Book Italic ligatures 2019-08-06 09:06:23 -04:00
Kiliman 37caa3ddea 🔀 Merge branch 'book-italic' into develop 2019-08-06 09:05:20 -04:00
Mark Skelton b70accff53 Update book italic ligatures 2019-08-05 22:07:54 -05:00
Kiliman da7425fbe9 📝 Update to v2.2.2 fixes some ligatures not in correct weight 2019-08-05 12:07:18 -04:00
Kiliman 2282dd3d5d 📝 Update to v2.2.1 with fix for Operator Mono Light (non-SSm) widths 2019-08-04 21:15:16 -04:00
Kiliman d7e18a4962 🐛 Fix Light/Light Italic to use width 550 vs 625 of ScreenSmart
Fixes #97
2019-08-04 21:12:31 -04:00
Kiliman d71b04356a 📝 Update README for v2.2 includes new SSm Light, Medium, and Bold 2019-08-04 18:29:14 -04:00
Kiliman 651edc2b62 Add complete set of SSm Light/Italic ligatures 2019-08-04 18:20:38 -04:00
Kiliman 02818d15a9 Add complete set of SSm Medium/Italic ligatures 2019-08-04 18:06:55 -04:00
Kiliman 5c9a5d51a8 🔨 Complete SSm Bold/Italic ligatures 2019-08-04 17:42:25 -04:00
Kiliman fc180099b8 📝 Update README for v2.1 includes new OM Light and contributor shoutout 2019-08-02 12:16:50 -04:00
Kiliman 1f5712ecae 😍 Add contributors @kiliman and @markypython 2019-08-02 12:15:40 -04:00
Kiliman 2cbf9d84cb 🔧 Add all-contributors package 2019-08-02 12:14:54 -04:00
Kiliman d1c8620f6d 🔨 Update Operator Mono Light and Light Italic ligatures 2019-08-02 11:40:51 -04:00
Kiliman 0f10f62920 🔀 Merge branch 'bold-italic-ligatures' into develop 2019-08-02 11:22:51 -04:00
Mark Skelton fd4b980b7c Update bold ligatures 2019-07-31 19:48:59 -05:00
Mark Skelton 286e5f0820 Add colon equal for bold 2019-07-31 19:48:51 -05:00
Mark Skelton 6e66c37704 Update bold ligatures 2019-07-31 19:33:01 -05:00
Mark Skelton ad3050a731 Add ampersand ampersand and colon equal 2019-07-31 19:32:41 -05:00
Mark Skelton da1abf02c6 Add more bold italic ligatures 2019-07-31 19:30:09 -05:00
Kiliman 3a03d21c90 🔀 Merge branch 'bold-italic-ligatures' into develop 2019-07-31 08:47:07 -04:00
Mark Skelton 05bc5eaa4e Update bold glyphs 2019-07-30 19:02:13 -05:00
Mark Skelton 03114bf88d Add bold italic powerline and LIG glyphs 2019-07-30 19:02:07 -05:00
Mark Skelton 83f9a6d170 Add powerline ligatures 2019-07-30 19:00:07 -05:00
Kiliman f0a883ee62 ⬆️ Upgrade package dependencies (npm audit) 2019-07-30 12:41:26 -04:00
Kiliman 6e3415763c 🔀 Merge branch 'bold-ligatures' into develop 2019-07-30 12:30:12 -04:00
Mark Skelton 2bdf134f70 Update ligatures 2019-07-30 07:24:17 -05:00
Mark Skelton edbbc78b82 Update config files 2019-07-30 07:23:03 -05:00
Mark Skelton 4edf9bc945 Add more ligatures 2019-07-30 07:22:01 -05:00
Mark Skelton 538de4ad67 Add lig and equal greater ligatures 2019-07-28 16:01:57 -05:00
Mark Skelton 3550ee0bb1 Add config files 2019-07-28 16:01:48 -05:00
Mark Skelton 65b938fdc1 Add names.json for bold font 2019-07-28 15:59:49 -05:00
Kiliman c5112089cb 🔀 Merge branch 'develop' 2019-07-26 16:37:28 -04:00
Kiliman 22ebd8aab7 📝 Update README for v2.0 2019-07-26 16:33:47 -04:00
Kiliman fe530d1ea9 Update glyphs 2019-07-26 16:33:17 -04:00
Kiliman 19727aecc5 Merge branch 'features/contextsubst' into develop 2019-07-24 09:58:47 -04:00
Kiliman 7a3be9b579 💄 Update Go sample file 2019-07-24 09:58:01 -04:00
Kiliman 371be6a082 🎨 Prettier formatting 2019-07-24 09:58:01 -04:00
Kiliman 86b1d66f15 🚨 Remove linter warning unused variable 2019-07-24 09:58:01 -04:00
Kiliman 5538ffe2b5 💄 Update sample HTML file 2019-07-24 09:58:01 -04:00
Kiliman 360402a197 ️ Add support for mapping non-ligature glyphs 2019-07-24 09:58:01 -04:00
Kiliman f7cafe55b3 Add Go sample 2019-07-24 09:58:01 -04:00
Kiliman 9cef42b1fb 🐛 Fix errors if glyphs don't exist for other font weights 2019-07-24 09:58:01 -04:00
Kiliman 8360f4ad81 🐛 Fix profile parsing 2019-07-24 09:58:01 -04:00
Kiliman 73f188856f Add glyphs for SSm Book Italic 2019-07-24 09:58:01 -04:00
Kiliman d2c63ad1ca Add glyph: underscore_underscore 2019-07-24 09:58:01 -04:00
Kiliman 0a7eca61d4 Add glyphs: colon_equal, greater_equal.2, less_equal.2, percent.alt 2019-07-24 09:58:01 -04:00
Kiliman fc8827e17c Remove elements from head that change but we don't care about 2019-07-24 09:58:01 -04:00
Kiliman 150ed13829 Add file (list of patterns) for matching exported glyphs 2019-07-24 09:58:01 -04:00
Kiliman 502f445758 Add Powerline glyps 2019-07-24 09:58:01 -04:00
Kiliman d3c5604090 Add </ and /> ligatures 2019-07-24 09:58:01 -04:00
Kiliman 61cfbf075d Regenerate ligature glyphs 2019-07-24 09:58:01 -04:00
Kiliman 28eb8b58e5 Add support for non-ligature glyphs 2019-07-24 09:58:01 -04:00
Emanuele Ballarin 91c4421765 Make drop-in compatible with previous implementation
Fixed variable types, now everything gathered from original fonts or property JSONs, and everything passed as font properties is 'const'.
2019-07-24 09:57:20 -04:00
Emanuele Ballarin 3ed59809de Revert useless whitespace-only modifications
Fix for an autoformatter side-effect.
2019-07-24 09:57:20 -04:00
Emanuele Ballarin 660c719779 Fix font family names in PS and TTF metadata
Fix font family names in PS and TTF metadata, as already defined in original font and master branch
2019-07-24 09:57:20 -04:00
kiliman 610140f1de Start work in progress for Operator Mono Light 2019-07-24 09:57:20 -04:00
kiliman b6f785bfc7 Add new generated glyphs for SSm Book and Book Italic 2019-07-24 09:57:20 -04:00
kiliman bc46df5f1c Update sample.js with new ligatures 2019-07-24 09:57:20 -04:00
kiliman 5f13b9c918 Update packages and add eslint config 2019-07-24 09:57:20 -04:00
kiliman 9398884dc6 Update extract and build process with support for context substitutions 2019-07-24 09:57:20 -04:00
kiliman 036e837e0c Remove old generated files 2019-07-24 09:57:20 -04:00
627 changed files with 26638 additions and 27340 deletions
+72
View File
@@ -0,0 +1,72 @@
{
"projectName": "operator-mono-lig",
"projectOwner": "kiliman",
"repoType": "github",
"repoHost": "https://github.com",
"files": [
"README.md"
],
"imageSize": 100,
"commit": true,
"commitConvention": "none",
"contributors": [
{
"login": "kiliman",
"name": "Kiliman",
"avatar_url": "https://avatars3.githubusercontent.com/u/47168?v=4",
"profile": "https://github.com/kiliman",
"contributions": [
"code",
"doc",
"design"
]
},
{
"login": "mskelton",
"name": "Mark Skelton",
"avatar_url": "https://avatars3.githubusercontent.com/u/25914066?v=4",
"profile": "https://github.com/mskelton",
"contributions": [
"design"
]
},
{
"login": "drod3763",
"name": "Derick Rodriguez",
"avatar_url": "https://avatars2.githubusercontent.com/u/7785716?v=4",
"profile": "https://github.com/drod3763",
"contributions": [
"doc"
]
},
{
"login": "amitkparekh",
"name": "Amit Parekh",
"avatar_url": "https://avatars3.githubusercontent.com/u/7276308?v=4",
"profile": "https://github.com/amitkparekh",
"contributions": [
"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
}
+17
View File
@@ -0,0 +1,17 @@
module.exports = {
env: {
es6: true,
node: true
},
extends: 'eslint:recommended',
parserOptions: {
sourceType: 'module'
},
rules: {
indent: ['error', 2],
'linebreak-style': ['error', 'unix'],
quotes: ['error', 'single'],
semi: ['error', 'always'],
'no-console': 'off'
}
};
+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
+1
View File
@@ -1,4 +1,5 @@
build
node_modules
.idea
.vscode/launch.json
.DS_Store
+127 -76
View File
@@ -1,12 +1,42 @@
# Operator Mono Ligatures
[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)
<img src="./images/operator-mono-lig.png" />
This project will generate new OpenType fonts for [Operator Mono](https://www.typography.com/fonts/operator/styles/) that includes ligatures similar to
those found in the popular [Fira Code](https://github.com/tonsky/FiraCode) font.
These ligatures were custom created using [Glyphs](https://glyphsapp.com/).
There are even italic versions of the ligatures.
These ligatures were custom created using [Glyphs](https://glyphsapp.com/).
There are even italic versions of the ligatures.
## Take the poll
## 🎉 What's New in Version 2
<img src="./images/new-ligatures.png"/>
All new redesigned ligatures with better hinting. Updated font generation to support advanced OpenType features
like those found in Fira Code. For example, the cursor now moves inside the ligature. It also handles repeating
characters properly.
<img src="./images/caret-position.gif" />
With the awesome help from [Mark Skelton](https://github.com/mskelton), we now have the full set of ligatures for
the following fonts. Thanks Mark, and thanks to all of you who have been patiently waiting for these ligatures to be completed.
- Operator Mono SSm Light/Light Italic
- Operator Mono SSm Book/Book Italic
- Operator Mono SSm Medium/Medium Italic
- Operator Mono SSm Bold/Bold Italic
- Operator Mono Light/Light Italic
- Operator Mono Book/Book Italic
## 🙏 Help Wanted
As noted above, v2 does not include all weights for Operator Mono. In order to update the other fonts, all the ligatures need to be redone. Unfortunately I just don't have the time to do that at the moment. If you have a Mac and are interested in helping, please let me know. I will even purchase a license to Gylphs Mini for you.
You can reach me at kiliman@gmail.com.
## ☑️ Take the poll
Which font weight of Operator Mono do you use? Also note difference between Screen Smart (SSm) and regular version. This will help prioritize the order of development.
@@ -17,101 +47,122 @@ Which font weight of Operator Mono do you use? Also note difference between Scre
[![](https://api.gh-polls.com/poll/01C6T4C3FBG21KVS7FAW7Z09B2/Operator%20Mono%20Medium)](https://api.gh-polls.com/poll/01C6T4C3FBG21KVS7FAW7Z09B2/Operator%20Mono%20Medium/vote)
[![](https://api.gh-polls.com/poll/01C6T4C3FBG21KVS7FAW7Z09B2/Operator%20Mono%20Light)](https://api.gh-polls.com/poll/01C6T4C3FBG21KVS7FAW7Z09B2/Operator%20Mono%20Light/vote)
I have updated the following fonts:
## ScreenSmart versions
* Operator Mono SSm Book
* Operator Mono SSm Book Italic
* Operator Mono SSm Medium
* Operator Mono SSm Medium Italic
* Operator Mono SSm Light
* Operator Mono SSm Light Italic (**coming soon**)
## Regular versions
* Operator Mono Book
* Operator Mono Book Italic
* Operator Mono Medium
* Operator Mono Medium Italic
**Operator Mono SSm Book**
<img src="./images/operator-mono-ssm-book.png" />
**Operator Mono SSm Medium**
<img src="./images/operator-mono-ssm-medium.png" />
**Creating ligatures using Glyphs**
<img src="./images/glyphs-screenshot.png" />
**YouTube video (click to view)**
[![Using Glyphs app to create ligatures for Operator Mono font](https://img.youtube.com/vi/ttI3W5Dh54E/0.jpg)](https://youtu.be/ttI3W5Dh54E)
>NOTE: Because *Operator Mono* is not a free font, you must have the original font files. This utility
will merge the ligature definitions into a copy of the original font. The new font family is named *Operator Mono Lig* so you can install it side-by-side with the original font.
> NOTE: Because _Operator Mono_ is not a free font, you must have the original font files. This utility
> will merge the ligature definitions into a copy of the original font. The new font family is named _Operator Mono Lig_ so you can install it side-by-side with the original font.
## Prerequisites
* The original *Operator Mono* font... of course.
* Install *fonttools* from https://github.com/fonttools/fonttools
* Install Python
* Run: `pip install fonttools` (for Mac users it's better run `pip3 install fonttools` - [info](https://stackoverflow.com/a/33416270/3191011))
* Node.js (**version 7.6+ for async/await support**)
## How to Install
- The original _Operator Mono_ font... of course.
- Python (v2.7+)
- Node.js
- Install _fonttools_ from https://github.com/fonttools/fonttools
- Windows/Linux: `pip install fonttools`
- Mac: `pip3 install fonttools`
1. Once all the prerequisites have been installed, clone this repo.
## Installation
2. From the command line, run:
Once all the prerequisites have been installed, clone this repo or download latest release from [Releases](https://github.com/kiliman/operator-mono-lig/releases) and unzip.
```
Next, copy your _Operator Mono_ OpenType files into the `original` folder. **NOTE**: Filenames must not include spaces. It should look like:
- OperatorMonoSSm-Book.otf
- OperatorMonoSSm-BookItalic.otf
- OperatorMono-Light.otf
- OperatorMono-LightItalic.otf
- etc.
Finally, run the following commands to install npm dependencies and build the font files. The new font files will be placed in the `build` folder. You can now install these fonts on your system.
```sh
npm install
```
3. Copy your *Operator Mono* OpenType files into the `original` folder.
- **NOTE**: File names must strictly be of the form `OperatorMono-[Book/BookItalic/Medium/MediumItalic].otf`.
4. From the command line, run:
### Windows
```
# Windows
build
```
### Linux/Mac
```
# Linux/Mac
./build.sh
```
This will generate the new font files in the `build` folder. You can now install these fonts on your system.
### Docker
---
If you use Docker, you can also use the executable Docker image [here](https://github.com/drod3763/kiliman-operator-mono-lig-docker). It handles all the prerequisite installation for you, you just need to:
<img src="./images/OperatorMonoAllTheThings.png" />
1. Clone the repo [located here](https://github.com/drod3763/kiliman-operator-mono-lig-docker).
1. Copy your _Operator Mono_ OpenType files into the `input` folder.
1. From the command line run:
```sh
docker-compose run --rm operator-mono-lig
```
## GitHub
Add *Operator Mono* to GitHub code blocks using the [Stylus Extension](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne).
The image will build and execute the conversion. The new font files will be generated into the `build` folder.
Create a style and enter the following:
## Configure Your Code Editor
```css
.blob-code-inner, .blob-num, .highlight pre { font-family: "Operator Mono Lig" !important; font-size: 16px !important; }
.pl-c, .pl-e { font-style: italic; }
.pl-c { color: #4CAF50; }
You can now select the newly generated font in your code editor. Make sure you enable font ligatures and set the desired font weight if using Windows. The code block below shows what this might look like if using VS Code.
```json
"editor.fontFamily": "OperatorMonoSSmLig-Book",
"editor.fontLigatures": true,
// for Windows
"editor.fontFamily": "Operator Mono SSm Lig",
"editor.fontLigatures": true,
"editor.fontWeight": "500", // adjust for desired weight
```
<img src="./images/github-operatormono.png" />
## Visual Studio
## 🔧 Customize the generated font
You can have Visual Studio display the nice *Operator Mono* italic font for comments, using the [CommentsPlus Extension](https://marketplace.visualstudio.com/items?itemName=mhoumann.CommentsPlus).
By default, all available ligatures will be added to the generated font. However, if you don't like a particular
ligature, or would prefer to use an alternate glyph, you can create a `profiles.ini` file in the `./original` folder
to configure how the font should be built.
<img src="./images/vsoperatormono.png" />
You can create one or more profiles. Each profile will have a set of directives. You can specify alternate glyphs for
a given ligature. You can also prevent a ligature from being added.
## Hyper shell
Each profile will be listed with `[profile name]` (the first profile should be named default). The generated font will
include the profile name. For example `[Go]` would generate the font: _Operator Mono Lig Go_. This way you can configure
a different set of ligatures for each language in your favorite code editor.
Add *Operator Mono* to [Hyper](https://hyper.is/) a JS/CSS/HTML Terminal.
```ini
# name of profile (one or more sections, first should be name default)
[default]
# glyph=altglyph
greater_equal.liga=greater_equal.2.liga
<img src="./images/hyper terminal.png" />
# do not include glyph (add ! prefix)
!equal_equal.liga
# another optional section (will create a font named Operator Mono Lig Go)
[Go]
... add custom directives for this font ...
```
## 😍 Thank You
Thanks to Hoefler&Co for making such an amazing font. It makes writing code truly pleasurable.
Thanks also to all of you for your kinds words of encouragement and feedback. I really
appreciate it.
## ✨ Contributors
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://github.com/kiliman"><img src="https://avatars3.githubusercontent.com/u/47168?v=4" width="100px;" alt="Kiliman"/><br /><sub><b>Kiliman</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=kiliman" title="Code">💻</a> <a href="https://github.com/kiliman/operator-mono-lig/commits?author=kiliman" title="Documentation">📖</a> <a href="#design-kiliman" title="Design">🎨</a></td>
<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>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
+2 -2
View File
@@ -19,10 +19,10 @@ set lig=%1
set otf=%lig:Lig-=-%
if not exist .\original\%otf%.otf exit /b
if not exist .\ligature\%lig%\charstrings.xml exit /b
if not exist .\ligature\%lig%\glyphs\* exit /b
@echo Building %lig%
ttx -f .\original\%otf%.otf
node index.js %otf%
ttx -f .\build\%lig%.ttx
for %%f in (.\build\%lig%*.ttx) do ttx -f %%f
exit /b
+5 -2
View File
@@ -10,7 +10,7 @@ build_font() {
then
return
fi
if [ ! -e "./ligature/$lig/charstrings.xml" ]
if [ ! -e "./ligature/$lig/glyphs" ]
then
return
fi
@@ -18,7 +18,10 @@ build_font() {
echo Building $1
ttx -f "./original/$otf.otf"
node index.js $otf
ttx -f ./build/$1.ttx
for f in ./build/$1*.ttx ; do
ttx -f $f
done
}
if [ -n "$1" ]
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
+174 -58
View File
@@ -1,38 +1,64 @@
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
const fs = require('fs');
const os = require('os');
if (!os.EOL) {
os.EOL = process.platform === 'win32' ? '\r\n' : '\n';
}
const xpath = require('xpath');
const { DOMParser, XMLSerializer } = require('xmldom');
const format = require('xml-formatter');
const hash = require('hash.js');
let fontName;
const regEx = /\.liga$/;
const regExBlankLines = /^(?=\n)$|^\s*/gm;
const regExWhitespace = /^\s+$/;
const NodeType = {};
NodeType.TEXT_NODE = 3;
async function main() {
function main() {
fontName = process.argv[2];
const glyphsRegEx = getGlyphsRegEx('./ligature_source/glyphs');
const srcFileName = `./ligature_source/${fontName}.ttx`;
const folder = `./ligature/${fontName}`;
const fileName = `./${folder}/names.json`;
if (!fs.existsSync(fileName)) {
return 0;
}
console.log(`Reading file ${srcFileName}`);
const xml = await fs.readFileAsync(srcFileName, 'utf-8');
const xml = fs.readFileSync(srcFileName, 'utf-8');
const dom = new DOMParser().parseFromString(xml);
await extractAndWrite('charstrings', extractCharStrings, dom);
await extractAndWrite('config', extractConfig, dom);
await extractAndWrite('gpos', extractGpos, dom);
await extractAndWrite('gsub', extractGsub, dom);
await extractAndWrite('hmtx', extractHmtx, dom);
await extractAndWrite('subrs', extractSubrs, dom);
await extractAndWrite('gsubrs', extractGlobalSubrs, dom);
extractAndWrite('config', extractConfig, dom);
extractCharStrings(dom, glyphsRegEx);
extractAndWrite('subrs', extractSubrs, dom);
extractAndWrite('gsubrs', extractGlobalSubrs, dom);
console.log('Done');
}
async function extractAndWrite(name, func, dom) {
function getGlyphsRegEx(path) {
const glyphs = fs.readFileSync(path, 'utf-8');
const patterns = ['LIG'];
glyphs
.split(os.EOL)
.filter(line => line.length > 0)
.forEach(line => {
const pattern = line
.replace(/\s*#.*/, '')
.replace(/[.]/g, '\\.')
.replace(/[*]/g, '.*');
if (pattern.length) {
patterns.push(pattern);
}
});
return new RegExp(`^(${patterns.join('|')})$`);
}
function extractAndWrite(name, func, dom) {
const newDom = func(dom);
console.log('Finished extracting ' + name);
@@ -41,30 +67,23 @@ async function extractAndWrite(name, func, dom) {
if (!fs.existsSync(folder)) {
fs.mkdirSync(folder);
}
await fs.writeFileAsync(fileName, format(serialize(newDom)));
fs.writeFileSync(fileName, format(serialize(newDom)));
console.log('Finished writing ' + name);
}
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\n')
.filter(s => /\S+/.test(s))
.map(s => s.replace(/^\s+/g, ''))
.join('\n');
return node.ownerDocument.createTextNode(data);
}
return node;
});
//const dump = dom => console.log(serialize(dom));
const serialize = dom => new XMLSerializer().serializeToString(dom);
const extractConfig = dom => {
const newDom = new DOMParser().parseFromString('<ttFont/>');
const head = xpath.select('/ttFont/head', dom, true);
const hhea = xpath.select('/ttFont/hhea', dom, true);
// remove elements that change after each save
// but we don't care about
head.removeChild(xpath.select('checkSumAdjustment', head, true));
head.removeChild(xpath.select('created', head, true));
head.removeChild(xpath.select('modified', head, true));
const bbox = extractFromPath('/ttFont/CFF/CFFFont/FontBBox', dom);
const widthX = extractFromPath(
'/ttFont/CFF/CFFFont/Private/nominalWidthX',
@@ -92,39 +111,136 @@ const extractFromPath = (path, dom) => {
return newDom.documentElement;
};
const extractGpos = dom => {
const gpos = xpath.select('/ttFont/GPOS', dom, true);
return gpos;
};
const extractGsub = dom => {
const gsub = xpath.select('/ttFont/GSUB', dom, true);
return gsub;
};
const extractHmtx = dom => {
const newDom = new DOMParser().parseFromString('<hmtx/>');
const mtx = xpath.select('/ttFont/hmtx/mtx', dom);
mtx
.filter(node => regEx.test(node.getAttribute('name')))
.forEach(node => newDom.documentElement.appendChild(node));
return newDom;
};
const extractCharStrings = dom => {
const newDom = new DOMParser().parseFromString('<CharStrings/>');
const extractCharStrings = (dom, glyphsRegEx) => {
const charStrings = xpath.select(
'/ttFont/CFF/CFFFont/CharStrings/CharString',
dom
);
charStrings
.filter(node => regEx.test(node.getAttribute('name')))
.forEach(node => newDom.documentElement.appendChild(node));
.filter(node => glyphsRegEx.test(node.getAttribute('name')))
.forEach(node => writeGlyphData(dom, node));
console.log('Finished writing charstrings');
};
return newDom;
const writeGlyphData = (dom, node) => {
const newDom = new DOMParser().parseFromString('<Glyph/>').documentElement;
const name = node.getAttribute('name');
newDom.setAttribute('name', name);
// get map and set code
const map = xpath.select(
`/ttFont/cmap/cmap_format_4/map[@name="${name}"]`,
dom,
true
);
if (map) {
newDom.setAttribute('code', map.getAttribute('code'));
}
// get mtx
const mtx = xpath.select(`/ttFont/hmtx/mtx[@name="${name}"]`, dom, true);
newDom.setAttribute('lsb', mtx.getAttribute('lsb'));
newDom.setAttribute('width', mtx.getAttribute('width'));
const charStringDom = dom.createElement('CharString');
const subrsDom = dom.createElement('Subrs');
const gsubrsDom = dom.createElement('GlobalSubrs');
newDom.appendChild(charStringDom);
newDom.appendChild(subrsDom);
newDom.appendChild(gsubrsDom);
const subrs = {
map: [],
fingerprints: [],
sourcePath: '/ttFont/CFF/CFFFont/Private/Subrs',
target: subrsDom
};
const gsubrs = {
map: [],
fingerprints: [],
sourcePath: '/ttFont/CFF/GlobalSubrs',
target: gsubrsDom
};
extractCharStringSubrs(dom, node, subrs, gsubrs, 8);
const outline = indentTextContent(node.childNodes[0].textContent, 8);
charStringDom.appendChild(dom.createTextNode(outline));
const folder = `./ligature/${fontName}/glyphs`;
const fileName = `./${folder}/${name}.xml`;
if (!fs.existsSync(folder)) {
fs.mkdirSync(folder);
}
fs.writeFileSync(fileName, format(serialize(newDom)));
console.log('* ' + name);
};
const extractCharStringSubrs = (dom, node, subrs, gsubrs, indent) => {
// check for callsubr/callgsubr
const lines = node.childNodes[0].textContent.split(os.EOL);
const newLines = [];
let fingerprint = '';
lines.forEach(line => {
if (line.trim().length === 0) return;
const matches = line.match(/(.*?)(-?\d+) (callsubr|callgsubr)$/);
if (matches != null) {
const { map, fingerprints, sourcePath, target } =
matches[3] === 'callsubr' ? subrs : gsubrs;
const index = matches[2];
const srcIndex = parseInt(index) + 107;
let newIndex = map[srcIndex];
if (!newIndex) {
// find subr in source dom and copy to target dom
const srcSubr = xpath.select(
`/${sourcePath}/CharString[@index="${srcIndex}"]`,
dom,
true
);
// append subr to target dom and get new index
newIndex = xpath.select('count(CharString)', target, true);
map[srcIndex] = newIndex;
const clone = srcSubr.cloneNode(true);
clone.setAttribute('index', newIndex);
target.appendChild(clone);
// patch up source in case it also has any callsubrs
fingerprint = extractCharStringSubrs(dom, clone, subrs, gsubrs, 12);
fingerprints[newIndex] = fingerprint;
} else {
fingerprint = fingerprints[newIndex];
}
// rewrite line with fingerprint
line = `${matches[1]}{${fingerprint}} ${matches[3]}`;
}
newLines.push(line.trim());
});
const content = newLines.join('\n');
fingerprint = hash
.sha256()
.update(content)
.digest('hex')
.substr(0, 8);
node.setAttribute('fingerprint', fingerprint);
node.childNodes[0].textContent = indentTextContent(content, indent);
return fingerprint;
};
const indentTextContent = (text, indent) => {
return text
.split('\n')
.map(line => ' '.repeat(indent) + line.trim())
.join('\n')
.trim();
};
const extractSubrs = dom => {
+1 -1
View File
@@ -15,6 +15,6 @@ then
else
# build all available fonts
for f in ./ligature_source/*.otf ; do
extract_font $(basename $f)
extract_font `basename "${f%.*}"`
done
fi
+288
View File
@@ -0,0 +1,288 @@
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.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+295 -236
View File
@@ -1,171 +1,283 @@
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
const fs = require('fs');
const os = require('os');
if (!os.EOL) {
os.EOL = process.platform === 'win32' ? '\r\n' : '\n';
}
const gsub = require('./gsub');
const xpath = require('xpath');
const { DOMParser, XMLSerializer } = require('xmldom');
const format = require('xml-formatter');
let fontName;
let ligFontName;
const regEx = /\.liga$/;
const regExBlankLines = /^(?=\n)$|^\s*/gm;
const regExWhitespace = /^\s+$/;
const NodeType = {};
NodeType.TEXT_NODE = 3;
async function main() {
let dom;
function main() {
fontName = process.argv[2];
ligFontName = fontName.split('-').join('Lig-');
const srcFileName = `./original/${fontName}.ttx`;
const dstFileName = `./build/${ligFontName}.ttx`;
console.log(`Reading original font file ${srcFileName}`);
const xml = await fs.readFileAsync(srcFileName, 'utf-8');
const dom = new DOMParser().parseFromString(xml);
const xml = fs.readFileSync(srcFileName, 'utf-8');
dom = new DOMParser().parseFromString(xml);
try {
await processPatch('names', patchNames, dom);
await processPatch('glyphs', patchGlyphs, dom);
await processPatch('gpos', patchGpos, dom);
await processPatch('gsub', patchGsub, dom);
await processPatch('hmtx', patchHmtx, dom);
//await processPatch('lookup', patchLookup, dom);
await processPatch('charstrings', patchCharStrings, dom);
} catch (err) {
console.log(err);
}
const profiles = getProfiles();
// process settings (there may be more than one font to build)
profiles.forEach(profile => buildFont(profile));
console.log(`Writing ligature font file ${dstFileName}`);
await fs.writeFileAsync(dstFileName, format(serialize(dom)));
console.log('Done');
}
async function loadConfigAsync(name) {
const buildFont = profile => {
// add suffix to dstFileName if present
const dstFileName = `./build/${ligFontName}${profile.suffixWithLeadingHyphen}.ttx`;
console.log(
`Building ligature font file ${dstFileName} name = ${profile.name}`
);
const ligatures = sortLigatures(
fs
.readdirSync(`./ligature/${ligFontName}/glyphs`)
.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));
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);
console.log(`Writing ligature font file ${dstFileName}`);
fs.writeFileSync(dstFileName, format(serialize(dom)));
};
const getProfiles = () => {
const profilePath = './original/profiles.ini';
// return default profiles if profile doesn't exist
if (!fs.existsSync(profilePath)) {
return [
{
name: 'default',
suffix: '',
suffixWithLeadingSpace: '',
suffixWithLeadingHyphen: '',
ligatures: []
}
];
}
const profiles = [];
let profile = null;
const content = fs.readFileSync(profilePath, 'utf-8');
content
.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);
profile = {
name,
suffix: name === 'default' ? '' : name,
suffixWithLeadingSpace: name === 'default' ? '' : ' ' + name,
suffixWithLeadingHyphen: name === 'default' ? '' : '-' + name,
ligatures: []
};
profiles.push(profile);
} else {
if (!profile) {
throw new Error('You must provide a profile name in []');
}
profile.ligatures.push(line);
}
});
return profiles;
};
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;
};
const mapLigatures = (name, mappings) => {
let mapping = { name, glyph: name };
mappings.forEach(entry => {
const [val1, val2] = entry.split('=');
// handle lig=altliga
if (val1 === name) {
mapping.glyph = val2;
} else if (val2 === name) {
mapping.name = val1;
}
});
return mapping;
};
const filterGlyphsExists = ({ glyph }) => {
const exists = fs.existsSync(`./ligature/${ligFontName}/glyphs/${glyph}.xml`);
return exists;
};
const sortLigatures = ligatures => {
// sort by most glyphs then alphabetically
const sorted = ligatures
.map(ligature => {
return { count: ligature.split('_').length + 1, ligature: ligature };
})
.sort(
(a, b) =>
-compareProperty(a.count, b.count) || // sort by count descending
compareProperty(a.ligature, b.ligature) // then by ligature alphabetically
)
.map(entry => entry.ligature);
return sorted;
};
const compareProperty = (a, b) => {
if (typeof a === 'number') {
return a || b ? (!a ? -1 : !b ? 1 : a === b ? 0 : a < b ? -1 : 1) : 0;
} else {
return a || b ? (!a ? -1 : !b ? 1 : a.localeCompare(b)) : 0;
}
};
const loadXml = name => {
const fileName = `./ligature/${ligFontName}/${name}.xml`;
const xml = await fs.readFileAsync(fileName, 'utf-8');
const xml = fs.readFileSync(fileName, 'utf-8');
return new DOMParser().parseFromString(xml);
}
};
async function processPatch(name, patchFunc, dom) {
const processPatch = (name, patchFunc, dom, ligatures, profile) => {
console.log(`Patching ${name}`);
await patchFunc(dom);
}
patchFunc(dom, ligatures, profile);
};
async function patchNames(dom) {
const configDom = await loadConfigAsync('names');
const PlatformId = {
mac: 1,
win: 3
};
const names = xpath.select('/name/namerecord', configDom);
const targetName = xpath.select('/ttFont/name', dom, true);
const NameId = {
familyName: 1,
fontStyle: 2,
uniqueId: 3,
fullName: 4,
version: 5,
postscriptName: 6,
windowsFamilyName: 16,
fontStyleName: 17
};
// get font and family name
const familyName = getTextNode(
configDom,
'/name/namerecord[@nameID="1" and @platformID="1"]'
);
const fullName = getTextNode(
configDom,
'/name/namerecord[@nameID="4" and @platformID="1"]'
const patchNames = (dom, ligatures, profile) => {
const names = JSON.parse(
fs.readFileSync(`./ligature/${ligFontName}/names.json`)
);
const [name, style] = names.fontName.split('-');
const [familyStyle, fullNameStyleTry] = names.fontStyle.split(' ');
let fullNameStyleTemp;
if (fullNameStyleTry) {
fullNameStyleTemp = fullNameStyleTry;
} else {
fullNameStyleTemp = '';
}
const fullNameStyle = fullNameStyleTemp;
const fontName = `${name}${profile.suffixWithLeadingHyphen}-${style}`;
const familyNamePlat = `${names.familyName}${profile.suffixWithLeadingSpace}`;
const familyName = `${familyNamePlat} ${familyStyle}`;
const fullName = `${familyName} ${fullNameStyle}`;
const uniqueId = `${names.foundry}: ${fullName}: ${names.version}`;
// patch CFFFont
const cffFont = xpath.select('/ttFont/CFF/CFFFont', dom, true);
cffFont.setAttribute('name', ligFontName);
setAttribute(cffFont, 'FullName', 'value', fullName);
setAttribute(cffFont, 'FamilyName', 'value', familyName);
setAttribute(cffFont, 'FamilyName', 'value', familyNamePlat);
// update existing names with new names
names.forEach(node => {
const nameId = node.getAttribute('nameID');
const platformId = node.getAttribute('platformID');
// 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);
updateName(PlatformId.mac, NameId.postscriptName, fontName);
updateName(PlatformId.mac, NameId.windowsFamilyName, familyNamePlat);
updateName(PlatformId.mac, NameId.fontStyleName, names.fontStyle);
// search for namerecord in target dom and replace with this one or append node
const target = xpath.select(
`/ttFont/name/namerecord[@nameID="${nameId}" and @platformID="${platformId}"]`,
dom,
true
);
if (target) {
target.parentNode.replaceChild(node, target);
} else {
targetName.appendChild(node);
}
});
}
// windows family name includes style
updateName(PlatformId.win, NameId.familyName, familyName);
updateName(PlatformId.win, NameId.fontStyle, names.windowsFontStyle);
updateName(PlatformId.win, NameId.uniqueId, uniqueId);
updateName(PlatformId.win, NameId.fullName, fullName);
updateName(PlatformId.win, NameId.postscriptName, fontName);
updateName(PlatformId.win, NameId.windowsFamilyName, familyNamePlat);
updateName(PlatformId.win, NameId.fontStyleName, names.fontStyle);
};
async function patchGlyphs(dom) {
const configDom = await loadConfigAsync('../glyphs');
const updateName = (platformId, nameId, value) => {
// search for namerecord in target dom and replace with this one or append node
const target = xpath.select(
`/ttFont/name/namerecord[@nameID="${nameId}" and @platformID="${platformId}"]`,
dom,
true
);
if (target) {
target.childNodes[0].textContent = value;
}
};
const patchGlyphs = (dom, ligatures) => {
// get number of glyphs in target dom
const targetGlyphs = xpath.select('/ttFont/GlyphOrder', dom, true);
const glyphsCount = xpath.select('count(GlyphID)', targetGlyphs, true);
// only import glyphs specified
let n = glyphsCount;
// get ligature glyphs
const glyphs = xpath.select('/GlyphOrder/GlyphID', configDom);
glyphs.forEach(node => {
node.setAttribute('id', n++);
targetGlyphs.appendChild(node);
ligatures.forEach(ligature => {
targetGlyphs.appendChild(
createElementWithAttributes('GlyphID', { id: n++, name: ligature.glyph })
);
});
// update glyph count
setAttribute(dom, '/ttFont/maxp/numGlyphs', 'value', n);
}
async function patchGpos(dom) {
const newGpos = await loadConfigAsync('gpos');
const oldGpos = xpath.select('/ttFont/GPOS', dom, true);
dom.documentElement.replaceChild(newGpos, oldGpos);
}
async function patchGsub(dom) {
const newGsub = await loadConfigAsync('gsub');
// loop through Substituion/Ligature nodes and remap chars
remap(newGsub, dom, '//Substitution', 'out');
remap(newGsub, dom, '//Ligature', 'glyph');
const oldGsub = xpath.select('/ttFont/GSUB', dom, true);
dom.documentElement.replaceChild(newGsub, oldGsub);
}
const remap = (patchDom, cmapDom, path, attr) => {
const cmap = [];
let nodes = xpath.select(path, patchDom);
nodes.forEach(n => {
const out = n.getAttribute(attr);
if (out.startsWith('uni')) {
// get cmap entry
const code = '0x' + out.replace(/uni0*/g, '').toLowerCase();
let name = cmap[code];
if (!name) {
const map = xpath.select(
`/ttFont/cmap/cmap_format_4/map[@code="${code}"]`,
cmapDom,
true
);
name = map == null ? out : map.getAttribute('name');
cmap[code] = name;
}
n.setAttribute(attr, name);
}
});
};
async function patchHmtx(dom) {
const hmtxDom = await loadConfigAsync('hmtx');
const targetHmtx = xpath.select('/ttFont/hmtx', dom, true);
const patchGsub = (dom, ligatures) => {
// don't patch if no ligatures other than LIG
if (ligatures.length <= 1) return;
const mtx = xpath.select('/hmtx/mtx', hmtxDom);
mtx.forEach(node => targetHmtx.appendChild(node));
ligatures.forEach(ligature => {
// build gsub tables
gsub.buildGsubTables(dom, ligature);
});
gsub.finalizeGsubTables();
};
const patchHmtx = dom => {
const mtxCount = xpath.select('count(/ttFont/hmtx/mtx)', dom, true);
setAttribute(dom, '/ttFont/hhea/numberOfHMetrics', 'value', mtxCount);
const configDom = await loadConfigAsync('config');
const configDom = loadXml('config');
copyConfigAttribute(dom, configDom, '/ttFont/head/xMin', 'value');
copyConfigAttribute(dom, configDom, '/ttFont/head/yMin', 'value');
copyConfigAttribute(dom, configDom, '/ttFont/head/xMax', 'value');
@@ -179,159 +291,104 @@ async function patchHmtx(dom) {
'/ttFont/CFF/CFFFont/Private/nominalWidthX',
'value'
);
}
async function patchLookup(dom) {
const configDom = await loadConfigAsync('../lookup');
const featureList = xpath.select('/ttFont/GSUB/FeatureList', dom, true);
const featuresCount = xpath.select(
'count(/ttFont/GSUB/FeatureList/FeatureRecord)',
dom,
true
);
const featureRecord = dom.createElement('FeatureRecord');
featureRecord.setAttribute('index', featuresCount);
const featureTag = dom.createElement('FeatureTag');
featureTag.setAttribute('value', 'liga');
const feature = dom.createElement('Feature');
featureRecord.appendChild(featureTag);
featureRecord.appendChild(feature);
featureList.appendChild(featureRecord);
const lookupCount = xpath.select(
'count(/ttFont/GSUB/LookupList/Lookup)',
dom,
true
);
const lookupListIndex = dom.createElement('LookupListIndex');
lookupListIndex.setAttribute('index', '0');
lookupListIndex.setAttribute('value', lookupCount);
feature.appendChild(lookupListIndex);
// helper function for adding feature to ScriptRecord
const addFeature = (scriptRecord, featureRecord, lang) => {
if (!lang) return;
const index = featureRecord.getAttribute('index');
if (xpath.select(`FeatureIndex[@value="${index}"]`, lang, true)) return;
const count = xpath.select('count(FeatureIndex)', lang, true);
const featureIndex = dom.createElement('FeatureIndex');
featureIndex.setAttribute('index', count);
featureIndex.setAttribute('value', index);
lang.appendChild(featureIndex);
};
// nead to add feature to ScriptList
const scriptList = xpath.select('/ttFont/GSUB/ScriptList', dom, true);
const scriptRecords = xpath.select('ScriptRecord', scriptList);
scriptRecords.forEach(node => {
// check for feature in DefaultLangSys
addFeature(
node,
featureRecord,
xpath.select('Script/DefaultLangSys', node, true)
);
// add features to any other languages
xpath
.select('Script/LangSysRecord/LangSys', node)
.forEach(lang => addFeature(node, featureRecord, lang));
});
// finally add LigatureSubst to Lookup
const lookupList = xpath.select('/ttFont/GSUB/LookupList', dom, true);
const newLookup = xpath.select('/LookupList/Lookup', configDom, true);
newLookup.setAttribute('index', lookupCount);
lookupList.appendChild(newLookup);
}
async function patchCharStrings(dom) {
const configDom = await loadConfigAsync('charstrings');
const nameDom = await loadConfigAsync('names');
// get font and family name
const familyName = getTextNode(
nameDom,
'/name/namerecord[@nameID="1" and @platformID="1"]'
);
const fullName = getTextNode(
nameDom,
'/name/namerecord[@nameID="4" and @platformID="1"]'
);
};
const patchCharStrings = (dom, ligatures) => {
// patch CFFFont
const cffFont = xpath.select('/ttFont/CFF/CFFFont', dom, true);
cffFont.setAttribute('name', ligFontName);
setAttribute(cffFont, 'FullName', 'value', fullName);
setAttribute(cffFont, 'FamilyName', 'value', familyName);
const charStrings = xpath.select('/CharStrings/CharString', configDom);
const targetHmtx = xpath.select('/ttFont/hmtx', dom, true);
const targetCmaps = xpath.select('/ttFont/cmap/cmap_format_4', dom);
const targetCharStrings = xpath.select('CharStrings', cffFont, true);
const targetSubrs = xpath.select(
'/ttFont/CFF/CFFFont/Private/Subrs',
dom,
true
);
const targetGsubrs = xpath.select('/ttFont/CFF/GlobalSubrs', dom, true);
const fingerprints = {};
ligatures.forEach(ligature => {
console.log(
`* ${ligature.name}${
ligature.name === ligature.glyph ? '' : ' => ' + ligature.glyph
}`
);
const glyphDom = loadXml(`glyphs/${ligature.glyph}`).documentElement;
const node = xpath.select('/Glyph/CharString', glyphDom, true);
node.setAttribute('name', ligature.glyph);
const subrs = {
map: [],
source: await loadConfigAsync('subrs'),
target: xpath.select('/ttFont/CFF/CFFFont/Private/Subrs', dom, true)
};
const gsubrs = {
map: [],
source: await loadConfigAsync('gsubrs'),
target: xpath.select('/ttFont/CFF/GlobalSubrs', dom, true)
};
const subrs = {
sourcePath: '/Glyph/Subrs',
target: targetSubrs
};
const gsubrs = {
sourcePath: '/Glyph/GlobalSubrs',
target: targetGsubrs
};
patchCharStringSubrs(glyphDom, node, fingerprints, subrs, gsubrs);
charStrings.forEach(node => {
patchCharStringSubrs(node, subrs, gsubrs);
targetCharStrings.appendChild(node);
targetHmtx.appendChild(
createElementWithAttributes('mtx', {
name: ligature.glyph,
width: glyphDom.getAttribute('width'),
lsb: glyphDom.getAttribute('lsb')
})
);
const code = glyphDom.getAttribute('code');
if (code) {
Array.from(targetCmaps).forEach(node => {
node.appendChild(
createElementWithAttributes('map', {
code,
name: ligature.glyph
})
);
});
}
});
}
};
const patchCharStringSubrs = (node, subrs, gsubrs) => {
const patchCharStringSubrs = (glyphDom, node, fingerprints, subrs, gsubrs) => {
// check for callsubr/callgsubr
const lines = node.childNodes[0].textContent.split(/\r|\r\n|\n/g);
const newLines = [];
let patched = false;
lines.forEach(line => {
const matches = line.match(/(.*?)(-?\d+) (callsubr|callgsubr)$/);
if (line.trim().length === 0) return;
const matches = line.match(/(.*?)\{([0-9a-z]+)\} (callsubr|callgsubr)$/);
if (matches != null) {
const { map, source, target } =
matches[3] === 'callsubr' ? subrs : gsubrs;
const index = matches[2];
let newIndex = 0;
if (!map[index]) {
// find subr in source dom and copy to target dom
const srcIndex = parseInt(index) + 107;
const { sourcePath, target } = matches[3] === 'callsubr' ? subrs : gsubrs;
const fingerprint = matches[2];
let newIndex = fingerprints[fingerprint];
if (!newIndex) {
const srcSubr = xpath.select(
`//CharString[@index="${srcIndex}"]`,
source,
`/${sourcePath}/CharString[@fingerprint="${fingerprint}"]`,
glyphDom,
true
);
// patch up source in case it also has any callsubrs
patchCharStringSubrs(srcSubr, subrs, gsubrs);
// append subr to target dom and get new index
newIndex = xpath.select('count(CharString)', target, true);
srcSubr.setAttribute('index', newIndex);
target.appendChild(srcSubr);
const clone = srcSubr.cloneNode(true);
clone.setAttribute('index', newIndex);
target.appendChild(clone);
// add new index to map and rewrite call
newIndex = newIndex - 107;
map[index] = newIndex;
} else {
newIndex = map[index];
fingerprints[fingerprint] = newIndex;
// patch up source in case it also has any callsubrs
patchCharStringSubrs(glyphDom, clone, fingerprints, subrs, gsubrs);
}
// rewrite line with new subr index
line = `${matches[1]}${newIndex} ${matches[3]}`;
patched = true;
}
newLines.push(line);
});
if (patched) {
node.childNodes[0].textContent = newLines.join(os.EOL);
}
node.childNodes[0].textContent = newLines.join(os.EOL);
};
const setAttribute = (parent, path, name, value) => {
@@ -344,13 +401,15 @@ const copyConfigAttribute = (dom, configDom, path, name) => {
setAttribute(dom, path, name, value);
};
const getTextNode = (dom, path) => {
var node = xpath.select(path, dom, true);
return node && node.childNodes.length
? node.childNodes[0].nodeValue.trim()
: '';
const createElementWithAttributes = (tagName, attributes) => {
const element = dom.createElement(tagName);
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 => {
if (node.nodeType === NodeType.TEXT_NODE) {
@@ -1,281 +0,0 @@
<CharStrings>
<CharString name="ampersand_ampersand.liga">
-107 -12 67 501 76 hstemhm
108 77 -4 80 251 77 -4 80 hintmask 11100100
880 169 rmoveto
-33 callgsubr
-66 callsubr
hintmask 11011000
-88 -56 -45 -63 -75 vvcurveto
-3 vlineto
-12 15 -12 14 -12 13 -33 callgsubr
-66 callsubr
hintmask 11100100
-7 callgsubr
-33 57 -74 133 -4 rrcurveto
7 hlineto
64 64 34 77 51 hvcurveto
28 -34 31 -37 32 -41 65 51 rcurveline
-41 50 -37 43 -33 38 rrcurveto
-611 -114 rmoveto
-51 callgsubr
hintmask 11101000
404 hmoveto
-51 callgsubr
endchar
</CharString>
<CharString name="bar_bar.liga">
-107 704 -20 hstem
312 75 325 75 vstem
387 710 -14 callgsubr
400 892 -14 callgsubr
endchar
</CharString>
<CharString name="bar_greater.liga">
-107 704 -20 hstem
287 75 449 74 vstem
362 710 -14 callgsubr
523 440 rlineto
69 vlineto
-74 -40 rmoveto
-449 -374 rlineto
705 vlineto
449 -321 rlineto
endchar
</CharString>
<CharString name="equal_equal.liga">
-107 151 -25 callgsubr
944 vstem
1021 373 rmoveto
-9 callsubr
-944 -69 hlineto
943 -222 rmoveto
-9 callsubr
-944 -69 hlineto
endchar
</CharString>
<CharString name="equal_equal_equal.liga">
-11 callgsubr
495 -4 callsubr
1493 -222 -4 callsubr
1493 -222 -4 callsubr
endchar
</CharString>
<CharString name="equal_equal_greater.liga">
443 -1 -21 173 -9 callgsubr
hstem
1498 74 vstem
1245 16 callgsubr
124 -102 rlineto
-1244 -69 1328 hlineto
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
-1339 -69 1256 hlineto
-140 -116 -32 callgsubr
endchar
</CharString>
<CharString name="equal_greater.liga">
-107 -1 -21 173 -9 callgsubr
hstem
948 74 vstem
695 16 callgsubr
124 -102 rlineto
-694 -69 778 hlineto
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
-789 -69 706 hlineto
-140 -116 -32 callgsubr
endchar
</CharString>
<CharString name="exclam_equal.liga">
-107 151 -25 callgsubr
944 vstem
646 373 rmoveto
375 hlineto
-9 callsubr
-340 hlineto
132 252 -69 32 -149 -284 rlineto
-518 -69 482 hlineto
-81 -153 rlineto
-401 -69 365 hlineto
-163 -311 71 -29 178 340 rlineto
492 hlineto
-9 callsubr
-457 hlineto
endchar
</CharString>
<CharString name="exclam_equal_equal.liga">
-11 callgsubr
273 rmoveto
-9 callsubr
-683 hlineto
81 153 rlineto
601 hlineto
-9 callsubr
-566 hlineto
68 130 -69 32 -85 -162 rlineto
-842 -69 806 hlineto
-81 -153 rlineto
-725 -69 689 hlineto
-80 -153 rlineto
-609 -69 573 hlineto
-111 -211 71 -29 126 240 rlineto
834 hlineto
-9 callsubr
-799 hlineto
80 153 rlineto
endchar
</CharString>
<CharString name="greater_equal.liga">
-107 634 -20 88 -20 hstem
741 114 vstem
187 145 rmoveto
35 -67 633 280 rlineto
69 vlineto
-627 275 -37 -68 550 -237 rlineto
-10 vlineto
114 -191 rmoveto
-668 -291 35 -67 633 280 rlineto
endchar
</CharString>
<CharString name="hyphen_greater.liga">
-107 -7 callsubr
944 vstem
695 16 callgsubr
264 -217 rlineto
-834 -69 835 hlineto
-269 -223 -32 callgsubr
endchar
</CharString>
<CharString name="hyphen_hyphen.liga">
-107 258 69 hstem
181 737 vstem
492 258 rmoveto
12 callgsubr
731 hmoveto
12 callgsubr
endchar
</CharString>
<CharString name="hyphen_hyphen_greater.liga">
443 -7 callsubr
1494 vstem
1245 16 callgsubr
264 -217 rlineto
-1384 -69 1385 hlineto
-269 -223 -32 callgsubr
endchar
</CharString>
<CharString name="less_bar.liga">
-107 704 -20 hstem
216 75 448 75 vstem
739 704 rmoveto
-523 -378 rlineto
-69 vlineto
523 -439 rlineto
75 892 hlineto
-523 -423 rmoveto
10 vlineto
448 317 rlineto
-701 vlineto
endchar
</CharString>
<CharString name="less_equal.liga">
-107 702 -20 hstem
245 114 vstem
913 145 rmoveto
-554 242 rlineto
10 vlineto
550 237 -37 68 -627 -275 rlineto
-69 vlineto
633 -280 rlineto
-633 118 rmoveto
-78 vlineto
633 -280 35 67 rlineto
endchar
</CharString>
<CharString name="less_equal_equal.liga">
443 -1 -21 173 -25 callgsubr
75 vstem
153 287 rmoveto
10 vlineto
92 76 rlineto
1326 hlineto
-9 callsubr
-1244 hlineto
124 103 -45 callgsubr
-139 116 rlineto
1254 hlineto
-9 callsubr
-1338 hlineto
endchar
</CharString>
<CharString name="less_exclam_hyphen_hyphen.liga">
993 -1 -21 22 110 148 69 hstemhm
816 113.5 hintmask 01110000
852 -18 callsubr
-400 311 rmoveto
-45 58 -329 -277 rlineto
-69 vlineto
hintmask 10110000
332 -279 46 57 -268 223 rlineto
521 hlineto
6 69 rlineto
-526 hlineto
860 hmoveto
-69 1067 vlineto
6 69 rlineto
hintmask 01110000
-1307 -327 10 callgsubr
</CharString>
<CharString name="less_hyphen.liga">
-107 -7 callsubr
944 vstem
1022 327 rmoveto
-833 hlineto
263 218 -45 callgsubr
-268 223 rlineto
828 hlineto
endchar
</CharString>
<CharString name="less_hyphen_hyphen.liga">
443 -7 callsubr
1494 vstem
1572 327 rmoveto
-1383 hlineto
263 218 -45 callgsubr
-268 223 rlineto
1378 hlineto
endchar
</CharString>
<CharString name="plus_plus.liga">
-107 259 68 hstem
301 73 353 73 vstem
800 327 rmoveto
187 -73 -187 -353 9 callgsubr
187 353 -187 73 187 176 vlineto
1 68 rlineto
endchar
</CharString>
</CharStrings>
+79 -11
View File
@@ -1,52 +1,120 @@
<ttFont>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.002"/>
<checkSumAdjustment value="0x1cc640f7"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Mon Oct 16 12:43:41 2017"/>
<modified value="Mon Oct 16 12:43:41 2017"/>
<xMin value="-339"/>
<xMin value="-1564"/>
<yMin value="-288"/>
<xMax value="2122"/>
<xMax value="630"/>
<yMax value="1144"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="3"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="960"/>
<descent value="-240"/>
<lineGap value="0"/>
<advanceWidthMax value="2200"/>
<minLeftSideBearing value="-339"/>
<advanceWidthMax value="600"/>
<minLeftSideBearing value="-1564"/>
<minRightSideBearing value="-80"/>
<xMaxExtent value="2122"/>
<xMaxExtent value="630"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="454"/>
<numberOfHMetrics value="466"/>
</hhea>
<CFF>
<CFFFont>
<FontBBox value="-339 -288 2122 1144"/>
<FontBBox value="-1564 -288 630 1144"/>
</CFFFont>
</CFF>
<CFF>
<CFFFont>
<Private>
<nominalWidthX value="1207"/>
<nominalWidthX value="107"/>
</Private>
</CFFFont>
</CFF>
@@ -0,0 +1,7 @@
<Glyph name="LIG" lsb="0" width="550">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,41 @@
<Glyph name="ampersand_ampersand.liga" lsb="-432" width="550">
<CharString>
-12 67 501 76 hstemhm
-269 80 227 77 -4 80 hintmask 11110000
316 169 rmoveto
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
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 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
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="bar_bar.liga" lsb="-211" width="550">
<CharString>
-211 75 275 75 vstem
-136 710 rmoveto
-75 -6 rlineto
-886 75 vlineto
350 892 rmoveto
-75 -6 rlineto
-886 75 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="bar_greater.liga" lsb="-261" width="550">
<CharString>
-261 75 468 74 vstem
-186 710 rmoveto
-75 -6 rlineto
-886 75 vlineto
541 440 rlineto
69 vlineto
-74 -40 rmoveto
-467 -376 rlineto
709 vlineto
467 -323 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,23 @@
<Glyph name="colon_equal.liga" lsb="-297" width="550">
<CharString>
151 69 153 69 hstem
-297 658 vstem
-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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,21 @@
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
<CharString>
151 69 153 69 hstem
-472 944 vstem
-49 373 rmoveto
1 69 rlineto
-424 -69 hlineto
943 hmoveto
1 69 rlineto
-414 -69 hlineto
-107 -222 rmoveto
1 69 rlineto
-424 -69 hlineto
943 hmoveto
1 69 rlineto
-414 -69 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,15 @@
<Glyph name="equal_equal.liga" lsb="-472" width="550">
<CharString>
151 69 153 69 hstem
-472 944 vstem
471 373 rmoveto
1 69 rlineto
-944 -69 hlineto
943 -222 rmoveto
1 69 rlineto
-944 -69 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,27 @@
<Glyph name="equal_equal_equal.2.liga" lsb="-1022" width="550">
<CharString>
151 69 153 69 hstem
-1022 1494 vstem
-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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="equal_equal_equal.liga" lsb="-1022" width="550">
<CharString>
40 69 153 69 153 69 hstem
-1022 1494 cntrmask 11100000
471 484 rmoveto
1 69 rlineto
-1494 -69 hlineto
1493 -222 rmoveto
1 69 rlineto
-1494 -69 hlineto
1493 -222 rmoveto
1 69 rlineto
-1494 -69 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="equal_equal_greater.liga" lsb="-1022" width="550">
<CharString>
151 69 153 69 hstem
-1022 394 1019 74 vstem
138 602 rmoveto
-47 -58 124 -102 rlineto
-1237 -69 1321 hlineto
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
-1332 -69 1249 hlineto
-140 -116 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,20 @@
<Glyph name="equal_greater.liga" lsb="-472" width="550">
<CharString>
151 69 153 69 hstemhm
-472 937 -74 74 hintmask 11100000
138 602 rmoveto
-47 -58 124 -102 rlineto
-687 -69 771 hlineto
hintmask 11010000
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
hintmask 11100000
-782 -69 699 hlineto
-140 -116 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="equal_less_less.liga" lsb="-1022" width="550">
<CharString>
151 69 153 69 hstemhm
-1022 1486 -688 75 235 75 hintmask 11011000
-149 297 rmoveto
299 248 -45 58 -191 -161 rlineto
hintmask 11100000
-936 -69 854 hlineto
hintmask 11011000
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
hintmask 11100000
-842 -69 924 hlineto
206 -173 46 57 rlineto
hintmask 11011000
-303 252 rlineto
310 hmoveto
10 vlineto
299 248 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 rlineto
hintmask 11100000
46 57 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,31 @@
<Glyph name="exclam_equal.liga" lsb="-472" width="550">
<CharString>
-189 915 -575 69 153 69 hstemhm
-472 944 -762 534 hintmask 00110000
76 373 rmoveto
395 hlineto
1 69 rlineto
-360 hlineto
hintmask 00101000
132 252 rlineto
hintmask 10001000
-69 32 rlineto
hintmask 00101000
-149 -284 rlineto
-498 -69 462 hlineto
hintmask 01101000
-81 -153 rlineto
-381 -69 345 hlineto
-163 -311 rlineto
hintmask 10001000
71 -29 rlineto
hintmask 01101000
178 340 rlineto
512 hlineto
1 69 rlineto
-477 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,37 @@
<Glyph name="exclam_equal_equal.liga" lsb="-1022" width="550">
<CharString>
-189 915 -686 69 153 69 153 69 hstemhm
-1022 1494 -1012 534 cntrmask 01110000
hintmask 01111000
471 262 rmoveto
1 69 rlineto
-668 hlineto
80 153 rlineto
587 hlineto
1 69 rlineto
-552 hlineto
hintmask 01110100
74 141 rlineto
hintmask 10000100
-69 32 rlineto
hintmask 01110100
-91 -173 rlineto
-856 -69 820 hlineto
-80 -153 rlineto
-740 -69 703 hlineto
-80 -153 rlineto
-623 -69 587 hlineto
-105 -200 rlineto
hintmask 10000100
71 -29 rlineto
hintmask 01110100
120 229 rlineto
820 hlineto
1 69 rlineto
-785 hlineto
80 153 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="greater_equal.2.liga" lsb="-308" width="600">
<CharString>
493 -141 69 390 69 hstem
-308 615 vstem
-308 95 rmoveto
-79 vlineto
615 302 rlineto
69 vlineto
-574 280 -37 -63 512 -247 rlineto
-10 vlineto
99 -488 rmoveto
69 -615 -69 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="greater_equal.liga" lsb="-308" width="550">
<CharString>
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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,32 @@
<Glyph name="greater_equal_greater.liga" lsb="-1013" width="550">
<CharString>
151 69 153 69 hstemhm
-1013 1478 -1174 74 1026 74 hintmask 11100000
138 602 rmoveto
-47 -58 124 -102 rlineto
-987 hlineto
-190 160 -47 -58 rlineto
hintmask 11010000
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 hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,32 @@
<Glyph name="greater_greater_equal.liga" lsb="-1013" width="550">
<CharString>
151 69 153 69 hstemhm
-1013 1485 -1181 74 236 74 hintmask 11011000
-635 327 rmoveto
-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 hlineto
1 69 rlineto
-934 hlineto
-190 160 -47 -58 rlineto
hintmask 11001000
300 -247 rlineto
-10 vlineto
-304 -252 45 -57 206 173 rlineto
hintmask 11100000
923 hlineto
1 69 rlineto
-842 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="hyphen_greater.liga" lsb="-431" width="550">
<CharString>
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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,15 @@
<Glyph name="hyphen_hyphen.liga" lsb="-341" width="550">
<CharString>
258 69 hstem
-341 317 63 317 vstem
-30 258 rmoveto
6 69 rlineto
-317 -69 hlineto
691 hmoveto
6 69 rlineto
-317 -69 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="hyphen_hyphen_greater.liga" lsb="-981" width="550">
<CharString>
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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="less_bar.liga" lsb="-354" width="550">
<CharString>
-354 75 450 75 vstem
169 704 rmoveto
-523 -378 rlineto
-69 vlineto
523 -439 rlineto
75 892 hlineto
-523 -423 rmoveto
10 vlineto
448 317 rlineto
-700 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="less_equal.2.liga" lsb="-283" width="600">
<CharString>
493 -141 69 hstem
-283 99 vstem
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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="less_equal.liga" lsb="-303" width="550">
<CharString>
138 77 103 69 hstem
-303 615 vstem
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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,22 @@
<Glyph name="less_equal_equal.liga" lsb="-1014" width="550">
<CharString>
151 69 153 69 hstemhm
-1014 75 -75 1486 hintmask 11100000
-939 287 rmoveto
10 vlineto
92 76 rlineto
hintmask 11010000
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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="less_equal_greater.liga" lsb="-1014" width="550">
<CharString>
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
-81 67 rlineto
10 vlineto
92 76 rlineto
1146 hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="less_equal_less.liga" lsb="-1014" width="550">
<CharString>
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
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
-81 67 rlineto
10 vlineto
92 76 rlineto
989 hlineto
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="less_exclam_hyphen_hyphen.liga" lsb="-1564" width="550">
<CharString>
0 110 148 69 hstemhm
-884 114 -78 84 hintmask 11010000
-848 234 rmoveto
53 hlineto
2 87 25 264 4 91 rrcurveto
-103 hlineto
2 -91 17 -264 -87 vvcurveto
-342 311 rmoveto
-45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
384 hlineto
6 69 rlineto
-389 hlineto
872 hmoveto
-69 1011 vlineto
6 69 rlineto
hintmask 11100000
-1321 -327 rmoveto
113 hlineto
3 110 rlineto
-114 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,15 @@
<Glyph name="less_hyphen.liga" lsb="-464" width="550">
<CharString>
258 69 hstem
-464 900 vstem
436 327 rmoveto
-789 hlineto
263 218 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
784 hlineto
endchar
</CharString>
<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>
@@ -0,0 +1,15 @@
<Glyph name="less_hyphen_hyphen.liga" lsb="-1014" width="550">
<CharString>
258 69 hstem
-1014 1450 vstem
436 327 rmoveto
-1339 hlineto
263 218 -45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 -268 223 rlineto
1334 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,15 @@
<Glyph name="less_slash.liga" lsb="-464" width="550">
<CharString>
-189 915 hstem
-464 75 182 534 vstem
258 726 rmoveto
-357 -680 -290 241 rlineto
10 vlineto
299 248 -45 58 -329 -277 rlineto
-69 vlineto
330 -277 -73 -140 71 -29 463 883 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,12 @@
<Glyph name="plus_plus.liga" lsb="-428" width="550">
<CharString>
259 68 hstem
-250 73 352 73 vstem
248 327 rmoveto
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/>
</Glyph>
@@ -0,0 +1,31 @@
<Glyph name="question_question.liga" lsb="-395" width="550">
<CharString>
0 109 493 76 hstem
-304 111 110 86 73 111 110 86 vstem
-387 678 rmoveto
-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
-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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="slash_greater.liga" lsb="-347" width="550">
<CharString>
-189 915 hstem
-347 534 204 74 vstem
139 602 rmoveto
48 92 -69 32 -465 -886 71 -29 379 723 288 -237 rlineto
-10 vlineto
-304 -252 45 -57 333 280 rlineto
69 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,11 @@
<Glyph name="underscore_underscore.liga" lsb="-560" width="550">
<CharString>
-116 66 hstem
-560 1120 vstem
560 -50 rmoveto
-1120 -66 1120 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,38 @@
<Glyph name="uniE0A0" code="0xe0a0" lsb="6" width="550">
<CharString>
-59 53 160 104 264 54 53 53 hstemhm
6 53 0 105 0 53 106 53 0 105 0 53 hintmask 1111010101000000
428 576 rmoveto
-58 -47 -47 -60 hvcurveto
hintmask 1111010010000000
-38 22 -34 31 -18 vhcurveto
-15 vlineto
-53 -53 -53 -53 -44 -34 -9 -15 -28 vhcurveto
251 vlineto
hintmask 1111101101000000
31 17 22 34 40 vvcurveto
58 -47 48 -58 -60 -46 -48 -58 vhcurveto
hintmask 1111010101000000
-40 21 -34 32 -17 vhcurveto
-347 vlineto
hintmask 1111101010000000
-32 -17 -21 -34 -40 vvcurveto
-58 46 -48 60 58 47 48 58 29 -11 25 -17 19 vhcurveto
18 16 24 16 41 hhcurveto
106 105 105 106 hvcurveto
14 vlineto
hintmask 1111010101000000
32 19 21 34 38 vvcurveto
59 -46 47 -60 vhcurveto
hintmask 1111101101000000
-316 53 rmoveto
28 24 -24 -29 -30 -24 -24 -28 -30 -23 24 30 29 23 24 30 hvcurveto
316 -212 rmoveto
-28 -24 24 28 30 24 23 28 30 23 -23 -30 -28 -23 -24 -30 hvcurveto
-316 -423 rmoveto
-30 -23 23 30 29 23 24 30 28 24 -24 -29 -30 -24 -23 -28 hvcurveto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,11 @@
<Glyph name="uniE0B0" code="0xe0b0" lsb="-20" width="550">
<CharString>
-205 1099 hstem
-20 629 vstem
609 313 rmoveto
-627 581 -2 -1099 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,11 @@
<Glyph name="uniE0B2" code="0xe0b2" lsb="-20" width="550">
<CharString>
-205 1099 hstem
-20 629 vstem
-20 313 rmoveto
629 -518 -2 1099 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
-164
View File
@@ -1,164 +0,0 @@
<GPOS>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=2 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="0"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
<ScriptRecord index="1">
<ScriptTag value="latn"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="1"/>
</DefaultLangSys>
<!-- LangSysCount=3 -->
<LangSysRecord index="0">
<LangSysTag value="CAT "/>
<LangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="2"/>
</LangSys>
</LangSysRecord>
<LangSysRecord index="1">
<LangSysTag value="MOL "/>
<LangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="3"/>
</LangSys>
</LangSysRecord>
<LangSysRecord index="2">
<LangSysTag value="ROM "/>
<LangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=1 -->
<FeatureIndex index="0" value="4"/>
</LangSys>
</LangSysRecord>
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=5 -->
<FeatureRecord index="0">
<FeatureTag value="kern"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="1">
<FeatureTag value="kern"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="2">
<FeatureTag value="kern"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="3">
<FeatureTag value="kern"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="4">
<FeatureTag value="kern"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=1 -->
<Lookup index="0">
<LookupType value="2"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<PairPos index="0" Format="2">
<Coverage Format="2">
<Glyph value="zero.num"/>
<Glyph value="one.num"/>
<Glyph value="two.num"/>
<Glyph value="three.num"/>
<Glyph value="four.num"/>
<Glyph value="five.num"/>
<Glyph value="six.num"/>
<Glyph value="seven.num"/>
<Glyph value="eight.num"/>
<Glyph value="nine.num"/>
<Glyph value="fraction.afrc"/>
</Coverage>
<ValueFormat1 value="4"/>
<ValueFormat2 value="0"/>
<ClassDef1 Format="2">
<ClassDef glyph="eight.num" class="1"/>
<ClassDef glyph="five.num" class="1"/>
<ClassDef glyph="four.num" class="1"/>
<ClassDef glyph="nine.num" class="1"/>
<ClassDef glyph="one.num" class="1"/>
<ClassDef glyph="seven.num" class="1"/>
<ClassDef glyph="six.num" class="1"/>
<ClassDef glyph="three.num" class="1"/>
<ClassDef glyph="two.num" class="1"/>
<ClassDef glyph="zero.num" class="1"/>
</ClassDef1>
<ClassDef2 Format="2">
<ClassDef glyph="eight.den" class="1"/>
<ClassDef glyph="five.den" class="1"/>
<ClassDef glyph="four.den" class="1"/>
<ClassDef glyph="fraction.afrc" class="2"/>
<ClassDef glyph="nine.den" class="1"/>
<ClassDef glyph="one.den" class="1"/>
<ClassDef glyph="seven.den" class="1"/>
<ClassDef glyph="six.den" class="1"/>
<ClassDef glyph="three.den" class="1"/>
<ClassDef glyph="two.den" class="1"/>
<ClassDef glyph="zero.den" class="1"/>
</ClassDef2>
<!-- Class1Count=2 -->
<!-- Class2Count=3 -->
<Class1Record index="0">
<Class2Record index="0">
<Value1 XAdvance="0"/>
</Class2Record>
<Class2Record index="1">
<Value1 XAdvance="-550"/>
</Class2Record>
<Class2Record index="2">
<Value1 XAdvance="0"/>
</Class2Record>
</Class1Record>
<Class1Record index="1">
<Class2Record index="0">
<Value1 XAdvance="0"/>
</Class2Record>
<Class2Record index="1">
<Value1 XAdvance="0"/>
</Class2Record>
<Class2Record index="2">
<Value1 XAdvance="-550"/>
</Class2Record>
</Class1Record>
</PairPos>
</Lookup>
</LookupList>
</GPOS>
-407
View File
@@ -1,407 +0,0 @@
<GSUB>
<Version value="0x00010000"/>
<ScriptList>
<!-- ScriptCount=2 -->
<ScriptRecord index="0">
<ScriptTag value="DFLT"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=4 -->
<FeatureIndex index="0" value="0"/>
<FeatureIndex index="1" value="5"/>
<FeatureIndex index="2" value="10"/>
<FeatureIndex index="3" value="15"/>
</DefaultLangSys>
<!-- LangSysCount=0 -->
</Script>
</ScriptRecord>
<ScriptRecord index="1">
<ScriptTag value="latn"/>
<Script>
<DefaultLangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=4 -->
<FeatureIndex index="0" value="1"/>
<FeatureIndex index="1" value="6"/>
<FeatureIndex index="2" value="11"/>
<FeatureIndex index="3" value="16"/>
</DefaultLangSys>
<!-- LangSysCount=3 -->
<LangSysRecord index="0">
<LangSysTag value="CAT "/>
<LangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=5 -->
<FeatureIndex index="0" value="2"/>
<FeatureIndex index="1" value="7"/>
<FeatureIndex index="2" value="12"/>
<FeatureIndex index="3" value="17"/>
<FeatureIndex index="4" value="20"/>
</LangSys>
</LangSysRecord>
<LangSysRecord index="1">
<LangSysTag value="MOL "/>
<LangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=5 -->
<FeatureIndex index="0" value="3"/>
<FeatureIndex index="1" value="8"/>
<FeatureIndex index="2" value="13"/>
<FeatureIndex index="3" value="18"/>
<FeatureIndex index="4" value="21"/>
</LangSys>
</LangSysRecord>
<LangSysRecord index="2">
<LangSysTag value="ROM "/>
<LangSys>
<ReqFeatureIndex value="65535"/>
<!-- FeatureCount=5 -->
<FeatureIndex index="0" value="4"/>
<FeatureIndex index="1" value="9"/>
<FeatureIndex index="2" value="14"/>
<FeatureIndex index="3" value="19"/>
<FeatureIndex index="4" value="22"/>
</LangSys>
</LangSysRecord>
</Script>
</ScriptRecord>
</ScriptList>
<FeatureList>
<!-- FeatureCount=23 -->
<FeatureRecord index="0">
<FeatureTag value="aalt"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="1">
<FeatureTag value="aalt"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="2">
<FeatureTag value="aalt"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="3">
<FeatureTag value="aalt"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="4">
<FeatureTag value="aalt"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="0"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="5">
<FeatureTag value="dlig"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="5"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="6">
<FeatureTag value="dlig"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="5"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="7">
<FeatureTag value="dlig"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="5"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="8">
<FeatureTag value="dlig"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="5"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="9">
<FeatureTag value="dlig"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="5"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="10">
<FeatureTag value="frac"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="4"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="11">
<FeatureTag value="frac"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="4"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="12">
<FeatureTag value="frac"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="4"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="13">
<FeatureTag value="frac"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="4"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="14">
<FeatureTag value="frac"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="4"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="15">
<FeatureTag value="liga"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="6"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="16">
<FeatureTag value="liga"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="6"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="17">
<FeatureTag value="liga"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="6"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="18">
<FeatureTag value="liga"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="6"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="19">
<FeatureTag value="liga"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="6"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="20">
<FeatureTag value="locl"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="1"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="21">
<FeatureTag value="locl"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="3"/>
</Feature>
</FeatureRecord>
<FeatureRecord index="22">
<FeatureTag value="locl"/>
<Feature>
<!-- LookupCount=1 -->
<LookupListIndex index="0" value="2"/>
</Feature>
</FeatureRecord>
</FeatureList>
<LookupList>
<!-- LookupCount=8 -->
<Lookup index="0">
<LookupType value="1"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<SingleSubst index="0" Format="1">
<Substitution in="Scedilla" out="uni0218"/>
<Substitution in="scedilla" out="uni0219"/>
</SingleSubst>
</Lookup>
<Lookup index="1">
<LookupType value="6"/>
<LookupFlag value="0"/>
<!-- SubTableCount=2 -->
<ChainContextSubst index="0" Format="3">
<!-- BacktrackGlyphCount=0 -->
<!-- InputGlyphCount=2 -->
<InputCoverage index="0" Format="1">
<Glyph value="l"/>
</InputCoverage>
<InputCoverage index="1" Format="1">
<Glyph value="periodcentered"/>
</InputCoverage>
<!-- LookAheadGlyphCount=1 -->
<LookAheadCoverage index="0" Format="1">
<Glyph value="l"/>
</LookAheadCoverage>
<!-- SubstCount=1 -->
<SubstLookupRecord index="0">
<SequenceIndex value="0"/>
<LookupListIndex value="7"/>
</SubstLookupRecord>
</ChainContextSubst>
<ChainContextSubst index="1" Format="3">
<!-- BacktrackGlyphCount=0 -->
<!-- InputGlyphCount=2 -->
<InputCoverage index="0" Format="1">
<Glyph value="L"/>
</InputCoverage>
<InputCoverage index="1" Format="1">
<Glyph value="periodcentered"/>
</InputCoverage>
<!-- LookAheadGlyphCount=1 -->
<LookAheadCoverage index="0" Format="1">
<Glyph value="L"/>
</LookAheadCoverage>
<!-- SubstCount=1 -->
<SubstLookupRecord index="0">
<SequenceIndex value="0"/>
<LookupListIndex value="7"/>
</SubstLookupRecord>
</ChainContextSubst>
</Lookup>
<Lookup index="2">
<LookupType value="1"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<SingleSubst index="0" Format="1">
<Substitution in="Scedilla" out="uni0218"/>
<Substitution in="scedilla" out="uni0219"/>
</SingleSubst>
</Lookup>
<Lookup index="3">
<LookupType value="1"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<SingleSubst index="0" Format="1">
<Substitution in="Scedilla" out="uni0218"/>
<Substitution in="scedilla" out="uni0219"/>
</SingleSubst>
</Lookup>
<Lookup index="4">
<LookupType value="4"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<LigatureSubst index="0" Format="1">
<LigatureSet glyph="five">
<Ligature components="slash,six" glyph="uni215A"/>
<Ligature components="slash,eight" glyph="fiveeighths"/>
</LigatureSet>
<LigatureSet glyph="four">
<Ligature components="slash,five" glyph="uni2158"/>
</LigatureSet>
<LigatureSet glyph="one">
<Ligature components="slash,two" glyph="onehalf"/>
<Ligature components="slash,three" glyph="uni2153"/>
<Ligature components="slash,four" glyph="onequarter"/>
<Ligature components="slash,five" glyph="uni2155"/>
<Ligature components="slash,six" glyph="uni2159"/>
<Ligature components="slash,eight" glyph="oneeighth"/>
</LigatureSet>
<LigatureSet glyph="seven">
<Ligature components="slash,eight" glyph="seveneighths"/>
</LigatureSet>
<LigatureSet glyph="three">
<Ligature components="slash,four" glyph="threequarters"/>
<Ligature components="slash,five" glyph="uni2157"/>
<Ligature components="slash,eight" glyph="threeeighths"/>
</LigatureSet>
<LigatureSet glyph="two">
<Ligature components="slash,three" glyph="uni2154"/>
<Ligature components="slash,five" glyph="uni2156"/>
</LigatureSet>
</LigatureSubst>
</Lookup>
<Lookup index="5">
<LookupType value="4"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<LigatureSubst index="0" Format="1">
<LigatureSet glyph="R">
<Ligature components="p" glyph="R_p"/>
</LigatureSet>
</LigatureSubst>
</Lookup>
<Lookup index="6">
<LookupType value="4"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<LigatureSubst index="0" Format="1">
<LigatureSet glyph="ampersand">
<Ligature components="ampersand" glyph="ampersand_ampersand.liga"/>
</LigatureSet>
<LigatureSet glyph="bar">
<Ligature components="greater" glyph="bar_greater.liga"/>
<Ligature components="bar" glyph="bar_bar.liga"/>
</LigatureSet>
<LigatureSet glyph="equal">
<Ligature components="equal,equal" glyph="equal_equal_equal.liga"/>
<Ligature components="equal,greater" glyph="equal_equal_greater.liga"/>
<Ligature components="equal" glyph="equal_equal.liga"/>
<Ligature components="greater" glyph="equal_greater.liga"/>
</LigatureSet>
<LigatureSet glyph="exclam">
<Ligature components="equal,equal" glyph="exclam_equal_equal.liga"/>
<Ligature components="equal" glyph="exclam_equal.liga"/>
</LigatureSet>
<LigatureSet glyph="greater">
<Ligature components="equal" glyph="greater_equal.liga"/>
</LigatureSet>
<LigatureSet glyph="hyphen">
<Ligature components="hyphen,greater" glyph="hyphen_hyphen_greater.liga"/>
<Ligature components="hyphen" glyph="hyphen_hyphen.liga"/>
<Ligature components="greater" glyph="hyphen_greater.liga"/>
</LigatureSet>
<LigatureSet glyph="less">
<Ligature components="exclam,hyphen,hyphen" glyph="less_exclam_hyphen_hyphen.liga"/>
<Ligature components="hyphen,hyphen" glyph="less_hyphen_hyphen.liga"/>
<Ligature components="equal,equal" glyph="less_equal_equal.liga"/>
<Ligature components="hyphen" glyph="less_hyphen.liga"/>
<Ligature components="equal" glyph="less_equal.liga"/>
<Ligature components="bar" glyph="less_bar.liga"/>
</LigatureSet>
<LigatureSet glyph="plus">
<Ligature components="plus" glyph="plus_plus.liga"/>
</LigatureSet>
</LigatureSubst>
</Lookup>
<Lookup index="7">
<LookupType value="4"/>
<LookupFlag value="0"/>
<!-- SubTableCount=1 -->
<LigatureSubst index="0" Format="1">
<LigatureSet glyph="L">
<Ligature components="periodcentered" glyph="Ldot"/>
</LigatureSet>
<LigatureSet glyph="l">
<Ligature components="periodcentered" glyph="ldot"/>
</LigatureSet>
</LigatureSubst>
</Lookup>
</LookupList>
</GSUB>
+4 -973
View File
@@ -1,976 +1,7 @@
<GlobalSubrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
<CharString index="0">
rmoveto
23 -36 68 33 108 65 59 53 rlinecurve
-65 63 -48 -57 -87 -81 -58 -40 rlinecurve
return
</CharString>
<CharString index="1">
rmoveto
54 -51 45 -163 15 vhcurveto
8 95 rlineto
188 hlineto
6 57 rlineto
-248 hlineto
-15 -198 rlineto
159 -11 54 -25 -33 vvcurveto
-42 -59 -25 -164 -11 vhcurveto
4 -61 rlineto
194 13 87 55 72 vvcurveto
return
</CharString>
<CharString index="2">
rmoveto
126 105 106 162 157 -86 92 -122 -126 -106 -108 -159 -158 88 -92 121 hvcurveto
13 67 rmoveto
-83 -57 70 128 120 56 66 80 84 57 -71 -127 -121 -56 -65 -81 hvcurveto
endchar
</CharString>
<CharString index="3">
rmoveto
71 66 56 92 56 hvcurveto
-48 25 rlineto
-70 -47 -39 -37 -52 hhcurveto
-49 -37 31 80 -49 hvcurveto
-57 -33 rlineto
-97 54 61 -47 70 hhcurveto
return
</CharString>
<CharString index="4">
87 hlineto
15 117 21 236 13 267 rrcurveto
-78 hlineto
-5 -124 -16 -329 -7 -61 rrcurveto
-3 hlineto
-30 110 -30 111 -29 109 rrcurveto
-50 hlineto
-28 -108 -25 -100 -33 -122 rrcurveto
-4 hlineto
-6 61 -18 329 -5 124 rrcurveto
-82 hlineto
13 -267 20 -236 15 -117 rrcurveto
88 hlineto
endchar
</CharString>
<CharString index="5">
rmoveto
127 77 80 139 hvcurveto
416 -83 -429 vlineto
-94 -37 -40 -76 -74 -45 47 102 vhcurveto
414 -84 -420 vlineto
-139 73 -76 122 vhcurveto
endchar
</CharString>
<CharString index="6">
rmoveto
82 hlineto
2 136 rlineto
-83 hlineto
219 -136 rmoveto
82 hlineto
2 136 rlineto
-83 hlineto
return
</CharString>
<CharString index="7">
rmoveto
8 -74 rlineto
270 14 67 104 169 vvcurveto
57 0 268 -1 39 vhcurveto
15 -49 -46 8 -48 hhcurveto
-140 -121 -98 -158 -129 79 -78 106 58 47 21 27 35 hvcurveto
-2 -139 -31 -28 -232 -18 rrcurveto
155 202 rmoveto
-77 -58 53 108 109 66 59 86 31 30 -6 -9 32 hvcurveto
-1 -76 1 -137 -67 vvcurveto
-20 -32 -39 -14 -39 hhcurveto
endchar
</CharString>
<CharString index="8">
18 callgsubr
rmoveto
-61 -40 30 52 67 59 39 179 -19 hvcurveto
-48 1 -36 1 -32 vhcurveto
-30 -38 -52 -23 -49 hhcurveto
endchar
</CharString>
<CharString index="9">
rmoveto
hintmask 00111110
84 6 -57 207 -59 204 -65 208 17 callsubr
hlineto
hintmask 01011110
-65 -209 -59 -206 -57 -207 rrcurveto
83 hlineto
17 63 16 64 17 63 rrcurveto
209 hlineto
hintmask 10011110
18 -64 17 -65 17 -64 rrcurveto
hintmask 00111110
-160 554 rmoveto
8 hlineto
29 -99 27 -100 27 -99 rrcurveto
-175 hlineto
28 99 27 99 29 100 rrcurveto
endchar
</CharString>
<CharString index="10">
-7 -140 -7 -118 -8 -132 rrcurveto
-4 hlineto
-10 32 -70 199 -8 25 rrcurveto
-50 hlineto
-7 -24 -69 -199 -10 -31 rrcurveto
-4 hlineto
-10 132 -7 117 -7 139 rrcurveto
-80 hlineto
11 -184 21 -190 18 -116 rrcurveto
73 hlineto
endchar
</CharString>
<CharString index="11">
295 57 -213 hlineto
129 89 71 65 75 vvcurveto
66 -61 53 -208 -1 vhcurveto
-5 -58 rlineto
162 -3 46 -27 -47 vvcurveto
-60 -78 -59 -145 -97 vhcurveto
return
</CharString>
<CharString index="12">
165 122 -4 53 rlineto
-269 -57 hlineto
195 2 rlineto
-3 vlineto
-162 -121 rlineto
-33 vlineto
return
</CharString>
<CharString index="13">
78 -263 rmoveto
-56 -31 26 35 31 27 26 47 19 hvcurveto
52 -25 48 -23 -34 vvcurveto
-31 -33 -24 -54 vhcurveto
endchar
</CharString>
<CharString index="14">
rmoveto
4 hlineto
176 151 -41 40 -131 -112 -133 113 -51 -49 rlineto
return
</CharString>
<CharString index="15">
-1 callgsubr
-148 1 2 31 46 180 15 51 rlinecurve
-70 5 -33 -119 -17 -126 1 -77 rlinecurve
203 1 -1 -81 rlineto
62 hlineto
endchar
</CharString>
<CharString index="16">
rmoveto
24 -55 rlineto
157 57 75 90 113 vvcurveto
104 -64 56 -90 -84 -71 -56 -82 -118 145 -31 98 81 vhcurveto
-13 -69 -52 -46 -125 -44 rrcurveto
8 232 rmoveto
49 40 31 48 56 41 -37 -77 vhcurveto
-4 vlineto
-88 -60 -97 20 78 vvcurveto
endchar
</CharString>
<CharString index="17">
-90 callsubr
-74 -148 -66 callgsubr
return
</CharString>
<CharString index="18">
rmoveto
-2 80 1 96 128 vvcurveto
-78 hlineto
-92 2 -93 1 -67 vhcurveto
-198 -13 -64 98 165 vvcurveto
138 49 102 267 -1 vhcurveto
-5 80 rlineto
-304 -11 -92 -146 -177 vvcurveto
-217 128 -133 295 63 vhcurveto
return
</CharString>
<CharString index="19">
-12 64 -34 -21 26 -21 223.48 53.52 150 70 return
</CharString>
<CharString index="20">
rmoveto
488 154 66 -390 -66 153 -488 -153 -66 388 vlineto
6 66 rlineto
endchar
</CharString>
<CharString index="21">
82.5 137.5 82.5 return
</CharString>
<CharString index="22">
rmoveto
-1 -77 rlineto
287 -16 107 101 95 148 -309 43 107 vvcurveto
51 57 40 217 -15 vhcurveto
-5 77 rlineto
-255 14 -99 -92 -88 -145 309 -38 -114 vvcurveto
-59 -82 -51 -226 19 vhcurveto
return
</CharString>
<CharString index="23">
rmoveto
68 -8 rlineto
hintmask 10100000
45 118 63 116 76 112 rrcurveto
56 -296 vlineto
-5 -58 rlineto
232 hlineto
2 -3 rlineto
hintmask 11000000
-78 -110 -62 -110 -45 -113 rrcurveto
endchar
</CharString>
<CharString index="24">
-184 428 -258 hlineto
-6 -57 183 -8 rlineto
-363 -184 vlineto
endchar
</CharString>
<CharString index="25">
rmoveto
126 105 106 162 hvcurveto
hintmask 10011100
74 -19 60 -33 42 vhcurveto
42 61 rlineto
hintmask 01101100
-48 32 -37 -53 rlineto
22 -32 -38 11 -43 hhcurveto
-126 -106 -108 -159 -76 20 -60 35 -43 hvcurveto
-42 -59 rlineto
hintmask 10101100
48 -32 36 52 rlineto
-21 32 38 -11 42 hhcurveto
-128 265 rmoveto
121 57 65 80 33 29 -11 -21 23 vhcurveto
-195 -282 rlineto
-17 32 -10 43 53 vvcurveto
141 -199 rmoveto
-32 -29 10 20 -22 hvcurveto
195 282 rlineto
17 -32 9 -42 -51 vvcurveto
-122 -56 -65 -82 vhcurveto
endchar
</CharString>
<CharString index="26">
rmoveto
hintmask 10011011
126 -240 rlineto
hintmask 00110111
89 13 -148 268 rlineto
60 43 44 56 82 vvcurveto
127 -96 82 -285 -42 vhcurveto
hintmask 01011011
-619 83 226 vlineto
61 vmoveto
268 vlineto
151 22 65 -53 -90 vvcurveto
-63 -33 -48 -48 -32 vhcurveto
endchar
</CharString>
<CharString index="27">
136 -13 50 -27 -31 vvcurveto
-35 -57 -23 -168 -5 vhcurveto
return
</CharString>
<CharString index="28">
rmoveto
28 66 rlineto
-175 53 -76 39 53 58 88 42 63 vvcurveto
hintmask 10110000
39 -31 40 -84 21 vhcurveto
hintmask 10101000
85 23 32 41 37 vvcurveto
hintmask 11000000
56 -96 49 52 vvcurveto
45 78 40 181 51 vhcurveto
-26 67 rlineto
-230 -73 -81 -69 -69 vvcurveto
hintmask 10101000
1 -75 100 -43 -45 vvcurveto
-30 -36 -23 -125 -11 vhcurveto
-2 -59 rlineto
hintmask 10110000
109 -7 48 -31 -38 vvcurveto
hintmask 10100000
-47 -92 -43 -79 vvcurveto
-74 78 -46 226 -73 vhcurveto
endchar
</CharString>
<CharString index="29">
60 26 34 32 47 vvcurveto
58 -60 38 -79 -98 -53 -55 -51 return
</CharString>
<CharString index="30">
18 -21 24 -14 callsubr
187 63 298 71 return
</CharString>
<CharString index="31">
9 68 rlineto
-240 -11 -69 66 129 vvcurveto
104 49 69 253 -1 vhcurveto
-6 77 rlineto
-285 -6 -91 -119 -135 vvcurveto
return
</CharString>
<CharString index="32">
414 hlineto
7 73 -330 -1 323 477 rlineto
71 -404 vlineto
-6 -73 321 1 -325 -477 rlineto
endchar
</CharString>
<CharString index="33">
rmoveto
hintmask 00111111
84 6 -57 207 -59 204 -65 208 17 callsubr
hlineto
hintmask 01011111
-65 -209 -59 -206 -57 -207 rrcurveto
83 hlineto
17 63 16 64 17 63 rrcurveto
209 hlineto
hintmask 10011111
18 -64 17 -65 17 -64 rrcurveto
hintmask 00111111
-160 554 rmoveto
8 hlineto
29 -99 27 -100 27 -99 rrcurveto
-175 hlineto
28 99 27 99 29 100 rrcurveto
endchar
</CharString>
<CharString index="34">
rmoveto
62 37 -33 -94 hvcurveto
-305 81 332 vlineto
120 -58 49 -88 return
</CharString>
<CharString index="35">
5 55 -57 -1 1 137 -62 -5 2 -132 return
</CharString>
<CharString index="36">
rmoveto
37 -13 60 89 16 79 -11 83 rlinecurve
-91 -1 19 -75 7 -73 -37 -89 rlinecurve
return
</CharString>
<CharString index="37">
0 62 574.5 61.5 -58 -20 hstemhm
237 82 return
</CharString>
<CharString index="38">
-73 callgsubr
-70 -53 -31 -34 -41 vhcurveto
return
</CharString>
<CharString index="39">
-54 callgsubr
hintmask 10110000
-51 callsubr
hintmask 11010000
-74 callsubr
return
</CharString>
<CharString index="40">
-60 callsubr
-361 -222 -66 callgsubr
return
</CharString>
<CharString index="41">
rmoveto
-55 428 55 vlineto
return
</CharString>
<CharString index="42">
2 -14 -15 1 -15 hhcurveto
-149 -128 -102 -179 -145 78 -87 106 60 49 28 33 35 hvcurveto
-113 6 rmoveto
-79 -56 61 125 124 70 67 90 26 27 -5 -9 28 hvcurveto
-137 1 -99 2 -85 vhcurveto
-24 -30 -38 -18 -41 hhcurveto
endchar
</CharString>
<CharString index="43">
45.28 152.9 53 hstem
120 61 185 63 vstem
173 return
</CharString>
<CharString index="44">
-78 callgsubr
-37 callgsubr
return
</CharString>
<CharString index="45">
hstem
66 80 259 78.75 vstem
return
</CharString>
<CharString index="46">
rmoveto
94 -274 rlineto
75 hlineto
17 116 21 190 11 184 rrcurveto
-76 hlineto
return
</CharString>
<CharString index="47">
hintmask 11011000
460 -8 rmoveto
9 68 rlineto
-164 3 -47 22 85 vvcurveto
257 200 63 -200 143 vlineto
hintmask 11101000
18 callsubr
-136 -93 vlineto
-8 -63 rlineto
101 -270 hlineto
hintmask 11011000
-121 71 -47 212 3 vhcurveto
return
</CharString>
<CharString index="48">
71 211 63 204 71 return
</CharString>
<CharString index="49">
-49 callgsubr
-63 -146 -66 callgsubr
return
</CharString>
<CharString index="50">
55 304 55 hstem
109 66 200 66 vstem
269 return
</CharString>
<CharString index="51">
rmoveto
55 -51 rlineto
217 178 86 147 145 vvcurveto
141 -85 144 -214 177 vhcurveto
-55 -53 rlineto
200 -158 74 -128 -126 vvcurveto
-128 -73 -127 -205 -161 vhcurveto
endchar
</CharString>
<CharString index="52">
rmoveto
-55 51 rlineto
-216 -177 -87 -147 -145 vvcurveto
-142 85 -144 214 -176 vhcurveto
56 51 rlineto
-201 159 -74 128 127 vvcurveto
127 73 128 205 160 vhcurveto
endchar
</CharString>
<CharString index="53">
368 hlineto
7 62 rlineto
-166 hlineto
-1 114 -2 96 -1 85 rrcurveto
return
</CharString>
<CharString index="54">
394 hlineto
7 62 rlineto
-160 636 -226 hlineto
return
</CharString>
<CharString index="55">
-12 67 510 67 hstem
56 78 282 79 vstem
268 -12 rmoveto
139 88 132 199 196 -74 117 -139 -139 -87 -131 -200 -195 74 -118 138 hvcurveto
return
</CharString>
<CharString index="56">
-55 -29 39 53 47 28 49 59 42 hvcurveto
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
return
</CharString>
<CharString index="57">
-9.14 70.62 -41.48 -21 return
</CharString>
<CharString index="58">
131 425 rmoveto
-96 callgsubr
return
</CharString>
<CharString index="59">
-15 69 512 69 hstem
46 85 288 85 vstem
return
</CharString>
<CharString index="60">
377 hlineto
8 71 rlineto
-301 549 -84 hlineto
return
</CharString>
<CharString index="61">
130 56 147 60.5 return
</CharString>
<CharString index="62">
-45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 return
</CharString>
<CharString index="63">
hstem
-64 callsubr
return
</CharString>
<CharString index="64">
61 288 -58 callsubr
return
</CharString>
<CharString index="65">
0 62 366.5 61.5 18 -20 return
</CharString>
<CharString index="66">
hstem
55 82 277 81 vstem
return
</CharString>
<CharString index="67">
21 -21 620 -20 22 -20 hstemhm
234 84 hintmask 10110000
return
</CharString>
<CharString index="68">
-5.25 73.25 480 80 return
</CharString>
<CharString index="69">
-7 65 -64 68 161 52 -48.5 5 callsubr
149 69 -65 67 hstemhm
34 76 124 70 135 74 hintmask 0101011110000000
return
</CharString>
<CharString index="70">
-46 43 -30 48 -26 vhcurveto
return
</CharString>
<CharString index="71">
hintmask 11010000
78 hmoveto
-31 callsubr
return
</CharString>
<CharString index="72">
50 -54 callsubr
return
</CharString>
<CharString index="73">
0 106 514 -20 hstem
51 82 289 78 vstem
return
</CharString>
<CharString index="74">
33 59 32 79 22 89 -70 9 rcurveline
-14 -68 -21 -66 -23 -54 rrcurveto
return
</CharString>
<CharString index="75">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
<CharString index="76">
443 hlineto
6 62 rlineto
return
</CharString>
<CharString index="77">
-20 callsubr
92 55 return
</CharString>
<CharString index="78">
130 112 116 191 191 -105 108 -131 -132 -98 -124 -185 vhcurveto
48 2 rmoveto
161 return
</CharString>
<CharString index="79">
21 -21 432 69 -9 -20 hstemhm
88 81 221 81 hintmask 11011000
return
</CharString>
<CharString index="80">
-8 68 367 63 136 -20 27 -20 hstemhm
177 81 return
</CharString>
<CharString index="81">
0 -59 callgsubr
return
</CharString>
<CharString index="82">
-9 callgsubr
hstem
78 return
</CharString>
<CharString index="83">
-101 callgsubr
hintmask 11110010
return
</CharString>
<CharString index="84">
rmoveto
243 -222 54 56 -232 207 238 205 -54 56 -244 -221 rlineto
endchar
</CharString>
<CharString index="85">
-61 callsubr
224 85 vstem
return
</CharString>
<CharString index="86">
-152 -21 211 65 329 69 return
</CharString>
<CharString index="87">
0 71 549 -20 hstem
113 84 return
</CharString>
<CharString index="88">
0 62 367 61 return
</CharString>
<CharString index="89">
15 -21 27 -21 27 -21 213 60 207 -20 26 -20 227 -20 27 -20 hstemhm
101 81 return
</CharString>
<CharString index="90">
rmoveto
54 -57 244 221 5 82 -243 221 -54 -56 232 -207 rlineto
endchar
</CharString>
<CharString index="91">
40 54 34 201 -18 vhcurveto
return
</CharString>
<CharString index="92">
-70 callgsubr
hintmask 11010000
return
</CharString>
<CharString index="93">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
<CharString index="94">
0 hflex1
return
</CharString>
<CharString index="95">
8 callsubr
245.36 55 return
</CharString>
<CharString index="96">
443 51 69 153 -25 callgsubr
1494 vstem
1571 return
</CharString>
<CharString index="97">
rmoveto
-248 hlineto
-3 -66 rlineto
328 873 -326 -66 249 hlineto
endchar
</CharString>
<CharString index="98">
69 153 69 return
</CharString>
<CharString index="99">
-14 66 -33 -21 439 66 -12 -20 hstemhm
55 81 279 80 hintmask 10101100
return
</CharString>
<CharString index="100">
-88 -56 -45 -63 -75 vvcurveto
-80 49 -62 95 64 64 34 77 51 vhcurveto
28 return
</CharString>
<CharString index="101">
hstemhm
80 75.5 return
</CharString>
<CharString index="102">
hstem
233 83 vstem
return
</CharString>
<CharString index="103">
-1 callgsubr
rlineto
return
</CharString>
<CharString index="104">
59 hstemhm
148 78 -75 81 11 77 -71 73 hintmask 10100000
455 return
</CharString>
<CharString index="105">
-83 6 -51 -75 -53 -69 -58 -68 rlinecurve
-76 -2 rlineto
428 vlineto
return
</CharString>
<CharString index="106">
rmoveto
52 -1 -72 callgsubr
return
</CharString>
<CharString index="107">
0 71 111 62 38 63 204 71 hstem
262 73 vstem
return
</CharString>
<CharString index="108">
rmoveto
3 callgsubr
</CharString>
<CharString index="109">
-19 hlineto
-6 2 -3 5 4 2 2 4 1 vhcurveto
5 hlineto
return
</CharString>
<CharString index="110">
-47 callgsubr
endchar
</CharString>
<CharString index="111">
98 hlineto
5 120 rlineto
-98 hlineto
return
</CharString>
<CharString index="112">
78.41 return
</CharString>
<CharString index="113">
76.5 return
</CharString>
<CharString index="114">
84.5 -81.5 81 hintmask 00000000
return
</CharString>
<CharString index="115">
86 12 -188 249 62 73 59 79 56 79 rlinecurve
return
</CharString>
<CharString index="116">
187 -73 -187 -178 -68 178 -187 73 return
</CharString>
<CharString index="117">
rmoveto
113 hlineto
3 110 rlineto
-114 hlineto
endchar
</CharString>
<CharString index="118">
82.5 hintmask 00000000
return
</CharString>
<CharString index="119">
6 69 rlineto
-317 -69 hlineto
return
</CharString>
<CharString index="120">
hlineto
17 172 rlineto
-59 hlineto
-17 -172 rlineto
return
</CharString>
<CharString index="121">
66 741 66 hstem
337 77 vstem
337 return
</CharString>
<CharString index="122">
0 71 348 71 return
</CharString>
<CharString index="123">
602 rmoveto
-47 -58 return
</CharString>
<CharString index="124">
hstemhm
67 80 return
</CharString>
<CharString index="125">
-150 55 return
</CharString>
<CharString index="126">
21 -21 549 71 hstem
234 84 vstem
return
</CharString>
<CharString index="127">
29 37 24 124 11 vhcurveto
3 58 rlineto
return
</CharString>
<CharString index="128">
55 93 -67 callsubr
return
</CharString>
<CharString index="129">
-20 callgsubr
vstem
return
</CharString>
<CharString index="130">
rmoveto
119 hlineto
return
</CharString>
<CharString index="131">
118.5 hintmask 11010000
220 return
</CharString>
</GlobalSubrs>
-22
View File
@@ -1,22 +0,0 @@
<hmtx>
<mtx name="ampersand_ampersand.liga" width="1100" lsb="108"/>
<mtx name="bar_bar.liga" width="1100" lsb="312"/>
<mtx name="bar_greater.liga" width="1100" lsb="287"/>
<mtx name="equal_equal.liga" width="1100" lsb="78"/>
<mtx name="equal_equal_equal.liga" width="1650" lsb="78"/>
<mtx name="equal_equal_greater.liga" width="1650" lsb="78"/>
<mtx name="equal_greater.liga" width="1100" lsb="78"/>
<mtx name="exclam_equal.liga" width="1100" lsb="78"/>
<mtx name="exclam_equal_equal.liga" width="1650" lsb="78"/>
<mtx name="greater_equal.liga" width="1100" lsb="187"/>
<mtx name="hyphen_greater.liga" width="1100" lsb="78"/>
<mtx name="hyphen_hyphen.liga" width="1100" lsb="181"/>
<mtx name="hyphen_hyphen_greater.liga" width="1650" lsb="78"/>
<mtx name="less_bar.liga" width="1100" lsb="216"/>
<mtx name="less_equal.liga" width="1100" lsb="245"/>
<mtx name="less_equal_equal.liga" width="1650" lsb="78"/>
<mtx name="less_exclam_hyphen_hyphen.liga" width="2200" lsb="78"/>
<mtx name="less_hyphen.liga" width="1100" lsb="78"/>
<mtx name="less_hyphen_hyphen.liga" width="1650" lsb="78"/>
<mtx name="plus_plus.liga" width="1100" lsb="123"/>
</hmtx>
+8
View File
@@ -0,0 +1,8 @@
{
"fontName": "OperatorMonoLig-Book",
"familyName": "Operator Mono Lig",
"foundry": "H&Co",
"version": "1.200",
"fontStyle": "Book",
"windowsFontStyle": "Regular"
}
-45
View File
@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Book
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
H&amp;Co: Operator Mono Lig Book: 1.200
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
OperatorMonoLig-Book
</namerecord>
<namerecord nameID="16" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig
</namerecord>
<namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True">
Book
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
H&amp;Co: Operator Mono Lig Book: 1.200
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
OperatorMonoLig-Book
</namerecord>
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig
</namerecord>
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
Book
</namerecord>
</name>
-980
View File
@@ -1,980 +0,0 @@
<Subrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
<CharString index="0">
rmoveto
8 69 -237 6 -73 44 -8 116 rlinecurve
335 8 rlineto
162 18 -68 108 -134 hhcurveto
-127 -104 -115 -149 -159 83 -89 307 -1 hvcurveto
-173 446 rmoveto
82 39 -59 -94 1 hvcurveto
-259 -8 rlineto
105 6 50 56 81 hhcurveto
endchar
</CharString>
<CharString index="1">
rmoveto
147 94 121 218 -1 hvcurveto
200 -79 111 -139 -147 -93 -120 -219 -199 80 -112 138 vhcurveto
8 581 rmoveto
95 52 -90 -170 -166 -49 -86 -92 -96 -51 90 170 166 48 86 93 hvcurveto
endchar
</CharString>
<CharString index="2">
rmoveto
hintmask 00111111
16 callsubr
-104 callsubr
hintmask 10011111
-79 61 -48 89 77 57 35 37 40 vhcurveto
hintmask 01011111
2 -22 4 -31 1 -10 rrcurveto
hintmask 10011111
-99 callgsubr
</CharString>
<CharString index="3">
-4 70 -4 69 102 vvcurveto
189 -76 59 -283 8 vhcurveto
-9 -70 219 -8 62 -29 7 -113 rlinecurve
-217 13 -100 -76 -101 vvcurveto
return
</CharString>
<CharString index="4">
rmoveto
84 71 55 82 118 -145 32 -99 -82 hvcurveto
13 68 52 47 125 45 -23 55 rcurveline
-157 -57 -75 -91 -113 vvcurveto
-104 63 -55 91 vhcurveto
6 53 rmoveto
-56 -42 37 77 hvcurveto
4 vlineto
89 59 96 -20 -78 vvcurveto
-49 -38 -30 -49 vhcurveto
endchar
</CharString>
<CharString index="5">
298 hlineto
5 55 rlineto
-114 356 hlineto
-64 -5 rlineto
-60 vlineto
-120 -16 2 -48 118 7 rlineto
-234 -125 vlineto
return
</CharString>
<CharString index="6">
rmoveto
133 -114 51 49 -176 144 rlineto
-4 hlineto
-176 -153 40 -39 rlineto
return
</CharString>
<CharString index="7">
rmoveto
24 36 -55 42 -92 84 -50 54 rlinecurve
-60 -67 62 -49 103 -65 68 -35 rlinecurve
return
</CharString>
<CharString index="8">
rmoveto
41 -13 55 64 19 79 -9 67 rlinecurve
-100 -5 22 -58 5 -64 -33 -70 rlinecurve
endchar
</CharString>
<CharString index="9">
rmoveto
hintmask 00111100
84 6 -57 207 -59 204 -65 208 17 callsubr
hlineto
hintmask 01011100
-65 -209 -59 -206 -57 -207 rrcurveto
83 hlineto
17 63 16 64 17 63 rrcurveto
209 hlineto
hintmask 10011100
18 -64 17 -65 17 -64 rrcurveto
hintmask 00111100
-160 554 rmoveto
8 hlineto
29 -99 27 -100 27 -99 rrcurveto
-175 hlineto
28 99 27 99 29 100 rrcurveto
endchar
</CharString>
<CharString index="10">
rmoveto
hintmask 0100011110000000
5 -56 rlineto
hintmask 0010101110000000
75 5 rlineto
-5 113 -2 160 214 vvcurveto
-81 hlineto
hintmask 1000011110000000
-172 2 -128 2 -88 vhcurveto
-27 -37 -41 -18 -47 hhcurveto
-61 -36 32 96 hvcurveto
308 vlineto
hintmask 1001001110000000
-81 -6 rlineto
-329 vlineto
-121 57 -49 87 vhcurveto
hintmask 1000011110000000
70 52 32 34 41 hvcurveto
endchar
</CharString>
<CharString index="11">
rmoveto
hintmask 01000111
5 -56 rlineto
hintmask 00101011
75 5 rlineto
-5 113 -2 160 214 vvcurveto
-81 hlineto
hintmask 10000111
-172 2 -128 2 -88 vhcurveto
-27 -37 -41 -18 -47 hhcurveto
-61 -36 32 96 hvcurveto
308 vlineto
hintmask 10010011
-81 -6 rlineto
-329 vlineto
-121 57 -49 87 vhcurveto
hintmask 10000111
70 52 32 34 41 hvcurveto
endchar
</CharString>
<CharString index="12">
rmoveto
-70 callsubr
hintmask 11011000
-63 callgsubr
hintmask 11100100
-63 callsubr
hintmask 11011000
-92 callsubr
hintmask 11100100
-94 callgsubr
</CharString>
<CharString index="13">
rmoveto
50 46 54 85 36 hvcurveto
-46 20 rlineto
-59 -27 -25 -34 -25 -42 -41 101 -64 hhcurveto
-51 -46 -54 -85 -35 hvcurveto
45 -20 rlineto
58 27 25 34 26 42 41 -100 64 hhcurveto
return
</CharString>
<CharString index="14">
-87 callsubr
hintmask 11100000
-95 callgsubr
hintmask 11010000
-80 callgsubr
endchar
</CharString>
<CharString index="15">
-71 313 rmoveto
27 28 24 52 52 30 -24 -33 -31 -28 -25 -44 -18 vhcurveto
-48 23 -42 23 34 vvcurveto
return
</CharString>
<CharString index="16">
rmoveto
104 68 87 126 124 -58 77 -103 -104 -67 -87 -126 -125 58 -76 102 hvcurveto
5 359 rmoveto
66 35 -58 -98 -93 -33 -55 -66 -66 -35 58 98 93 32 55 67 hvcurveto
endchar
</CharString>
<CharString index="17">
135 425 rmoveto
-102 callsubr
return
</CharString>
<CharString index="18">
rmoveto
39 -26 52 52 62 78 34 56 rlinecurve
-81 39 -23 -58 -45 -86 -38 -55 rlinecurve
208 -2 rmoveto
39 -24 53 52 61 77 35 56 rlinecurve
-84 35 -23 -59 -43 -81 -38 -56 rlinecurve
return
</CharString>
<CharString index="19">
8 71 rlineto
-298 211 253 63 -253 204 293 71 -376 -620 return
</CharString>
<CharString index="20">
rmoveto
5 -60 rlineto
207 6 77 53 66 vvcurveto
47 -46 39 -129 20 vhcurveto
return
</CharString>
<CharString index="21">
rmoveto
7 -75 166 20 47 46 66 173 rlinecurve
hintmask 11010000
64 162 52 146 41 121 rrcurveto
-78 hlineto
-26 -69 -70 -221 -37 -100 rrcurveto
-10 hlineto
hintmask 10110000
-55 125 -56 142 -49 125 -83 -5 rcurveline
49 -120 94 -227 57 -125 9 -2 rcurveline
-34 -80 -29 -17 -125 -19 rrcurveto
endchar
</CharString>
<CharString index="22">
rmoveto
7 68 -166 4 -33 44 -1 114 rlinecurve
209 5 rlineto
167 11 -44 100 -93 hhcurveto
-54 -41 -31 -55 -25 hvcurveto
hintmask 1010101110000000
-28 58 -60 19 -118 7 -6 -69 rcurveline
144 -9 32 -25 3 -116 rrcurveto
-135 -3 -65 -57 -99 vvcurveto
-78 44 -45 62 59 44 36 40 26 vhcurveto
hintmask 0101011110000000
35 -48 68 -26 125 -1 rrcurveto
-122 435 rmoveto
47 18 -52 -100 -1 hvcurveto
-135 -2 rlineto
107 3 23 47 45 hhcurveto
hintmask 1010011110000000
-206 -371 rmoveto
-35 -24 25 52 60 40 28 84 hvcurveto
-43 4 -38 11 -32 vhcurveto
-31 -20 -27 -21 -33 hhcurveto
endchar
</CharString>
<CharString index="23">
rmoveto
7 71 rlineto
-259 -11 -68 87 167 vvcurveto
142 50 92 271 3 vhcurveto
-5 80 rlineto
-304 -10 -98 -148 -170 vvcurveto
-186 89 -139 317 22 vhcurveto
endchar
</CharString>
<CharString index="24">
rmoveto
147 94 121 218 -1 hvcurveto
hintmask 10011100
101 -20 79 -38 53 vhcurveto
39 71 rlineto
hintmask 01101100
-53 28 -29 -56 rlineto
23 -32 -39 12 -46 hhcurveto
-147 -93 -120 -219 -102 21 -79 39 -53 hvcurveto
-39 -70 rlineto
hintmask 10101100
52 -28 30 55 rlineto
-22 32 38 -12 45 hhcurveto
-134 329 rmoveto
167 49 85 93 38 31 -14 -28 24 vhcurveto
-209 -380 rlineto
-17 43 -9 56 71 vvcurveto
148 -260 rmoveto
-38 -32 14 28 -23 hvcurveto
209 380 rlineto
17 -42 9 -57 -71 vvcurveto
-167 -50 -85 -92 vhcurveto
endchar
</CharString>
<CharString index="25">
-50 callgsubr
286 59 214.43 -55 callsubr
hintmask 10110110
501 322 rmoveto
hintmask 01101110
240 -114 101 -302 -42 vhcurveto
-277 -70 -59 70 -286 vlineto
hintmask 10110110
278 -42 138 122 243 vvcurveto
-334 -256 rmoveto
219 128 vlineto
3 59 rlineto
-131 211 hlineto
180 22 70 -81 -187 vvcurveto
-183 -76 -86 -174 26 vhcurveto
endchar
</CharString>
<CharString index="26">
-69 callgsubr
hintmask 10111000
-5 56 -75 -5 rlineto
5 -113 2 -160 -214 vvcurveto
81 hlineto
hintmask 11011000
171 -2 129 -2 89 vhcurveto
26 38 41 17 47 hhcurveto
endchar
</CharString>
<CharString index="27">
-250 19 -84 -80 -78 -123 274 -14 -87 vvcurveto
-44 -61 -36 -214 17 vhcurveto
-3 -72 rlineto
275 -15 87 77 80 125 -276 22 81 vvcurveto
return
</CharString>
<CharString index="28">
rmoveto
-80 -51 -47 -61 -58 54 -46 77 80 52 46 62 56 -54 48 -78 hvcurveto
return
</CharString>
<CharString index="29">
84 206 hlineto
hintmask 11010000
199 414 rlineto
-86 hlineto
-153 -334 rlineto
hintmask 10110000
-156 336 -89 -4 201 -412 rlineto
endchar
</CharString>
<CharString index="30">
69 -38 -21 26 -21 484 -20 23 1 callsubr
return
</CharString>
<CharString index="31">
407 hlineto
6 72 -320 -2 311 352 rlineto
68 -395 vlineto
-6 -72 308 2 -311 -351 rlineto
endchar
</CharString>
<CharString index="32">
11 -21 31 -14 callsubr
225 61 270.82 70.26 -11.08 -20 hstemhm
92 83 return
</CharString>
<CharString index="33">
-1 23 -4 51 -1 10 rrcurveto
-190 hlineto
-6 -58 124 -7 3 -98 1 -115 2 -150 rlinecurve
-130 hlineto
return
</CharString>
<CharString index="34">
-4 68.04 362.43001 67.53 -67.53 70.22 return
</CharString>
<CharString index="35">
rmoveto
233 -481 rlineto
79 620 -78 hlineto
hintmask 10011100
3 -472 rlineto
-4 hlineto
-225 472 rlineto
-87 -620 77 hlineto
hintmask 01101100
-3 481 rlineto
endchar
</CharString>
<CharString index="36">
hintmask 11010000
67 hmoveto
-68 callgsubr
return
</CharString>
<CharString index="37">
99 62 51 58 48 -49 30 -53 26 hvcurveto
return
</CharString>
<CharString index="38">
rmoveto
83 hlineto
5 136 rlineto
-85 hlineto
return
</CharString>
<CharString index="39">
rmoveto
-182 244 vlineto
6 71 rlineto
-177 211 146 63 -146 204 173 71 -301 hlineto
-69 -206 -70 -208 -64 -206 rrcurveto
81 hlineto
18 60 19 61 19 61 rrcurveto
115 367 rmoveto
6 -305 -102 hlineto
32 102 33 103 31 100 rrcurveto
endchar
</CharString>
<CharString index="40">
55 230.5 123 return
</CharString>
<CharString index="41">
-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="42">
53 152.17 45.47 hstem
121 62 185 62 vstem
275 return
</CharString>
<CharString index="43">
154.5 57.5 return
</CharString>
<CharString index="44">
-61 -25 -37 -35 -47 vvcurveto
-59 56 -40 88 vhcurveto
return
</CharString>
<CharString index="45">
0 148 -127 -21 481 139 0 -20 -6 callgsubr
return
</CharString>
<CharString index="46">
-6 73.05 484.09 73.86 hstem
85 85 return
</CharString>
<CharString index="47">
422 554 -106 callgsubr
return
</CharString>
<CharString index="48">
rmoveto
hintmask 01011100
240 -114 101 -302 -42 vhcurveto
-622 vlineto
hintmask 10101100
278 -42 138 122 243 vvcurveto
-84 -13 rmoveto
-183 -76 -86 -174 26 vhcurveto
489 vlineto
180 22 70 -81 -187 vvcurveto
endchar
</CharString>
<CharString index="49">
57 -44 callgsubr
148 62 vstem
422 return
</CharString>
<CharString index="50">
-11 69 170 50 157 67 return
</CharString>
<CharString index="51">
rmoveto
170 -222 60 47 -168 218 170 209 -59 49 -169 -220 rlineto
235 -81 rmoveto
170 -222 60 47 -170 217 172 210 -59 49 -169 -220 rlineto
endchar
</CharString>
<CharString index="52">
71.64 -9.06999 -20 hstemhm
85 82 250 84 return
</CharString>
<CharString index="53">
hstemhm
123 64 -57 66 162 62 -59 67 return
</CharString>
<CharString index="54">
rlineto
66 -39 28 -29 -22 vvcurveto
-21 -34 -15 -83 -12 vhcurveto
return
</CharString>
<CharString index="55">
rmoveto
59 -49 169 220 4 81 -170 222 -60 -47 170 -216 rlineto
66 -211 rmoveto
59 -49 169 220 5 81 -171 222 -60 -47 170 -217 rlineto
endchar
</CharString>
<CharString index="56">
54 35 71 22 100 8 -4 86 rcurveline
-101 -12 -75 -40 -48 -50 rrcurveto
return
</CharString>
<CharString index="57">
rmoveto
55 -199 rlineto
29 hlineto
53 199 rlineto
3 hlineto
-1 -253 rlineto
52 329 -64 hlineto
-55 -200 rlineto
-2 hlineto
-59 200 rlineto
-63 -329 50 hlineto
-1 253 rlineto
endchar
</CharString>
<CharString index="58">
0 8 -2 3 -4 -4 -2 -3 -13 callgsubr
0 -9 2 -3 4 4 2 3 -13 callgsubr
return
</CharString>
<CharString index="59">
-15 72 563 -20 hstem
75 84 232 83 vstem
return
</CharString>
<CharString index="60">
-59 callgsubr
hstem
105 83 return
</CharString>
<CharString index="61">
rmoveto
70 -334 -70 vlineto
return
</CharString>
<CharString index="62">
-6.23 70.23 -47 -21 424 77 return
</CharString>
<CharString index="63">
84.42 return
</CharString>
<CharString index="64">
60 290 56 hstemhm
337 76 -52 64 hintmask 11010000
136 return
</CharString>
<CharString index="65">
-220 50 177 -21 28 -21 151 50 return
</CharString>
<CharString index="66">
50 314 -35 callgsubr
hintmask 11100100
267 return
</CharString>
<CharString index="67">
0 72.5 475 72.5 return
</CharString>
<CharString index="68">
-8.49 67.49 489 80 return
</CharString>
<CharString index="69">
17 callgsubr
238 79 return
</CharString>
<CharString index="70">
hstemhm
82 81 218 81 return
</CharString>
<CharString index="71">
58 hstemhm
131 301 -68 68 hintmask 11000000
180 return
</CharString>
<CharString index="72">
-25 callsubr
-41 callgsubr
return
</CharString>
<CharString index="73">
549 191 71 -463 vlineto
-7 -71 rlineto
195 -549 hlineto
return
</CharString>
<CharString index="74">
555 rmoveto
4 hlineto
176 151 -41 40 -131 -112 rlineto
return
</CharString>
<CharString index="75">
151 -7 rlineto
-571 -159 vlineto
return
</CharString>
<CharString index="76">
-53 callgsubr
hintmask 10110000
-7 -58 rlineto
hintmask 11010000
-32 callsubr
return
</CharString>
<CharString index="77">
57 289 58 hstem
347 66 vstem
131 return
</CharString>
<CharString index="78">
0 100 -79 -21 490 -20 hstemhm
58 80 278 76 hintmask 01111000
return
</CharString>
<CharString index="79">
47 93 44 78 vvcurveto
74 -78 46 -226 73 vhcurveto
-28 -66 rlineto
175 -53 76 -38 -54 -58 -89 -42 -63 vvcurveto
return
</CharString>
<CharString index="80">
0 66 488 66 -5 callgsubr
return
</CharString>
<CharString index="81">
-157 -21 668 -20 22 -20 return
</CharString>
<CharString index="82">
-14 67 384 66 return
</CharString>
<CharString index="83">
81 hintmask 11011100
291 432 -73 callgsubr
return
</CharString>
<CharString index="84">
91 11 -212 312 197 303 rlineto
-89 hlineto
-173 -273 rlineto
-68 273 -83 hlineto
return
</CharString>
<CharString index="85">
rmoveto
0 9 7 6 9 9 7 -6 -13 callgsubr
0 -9 -7 -7 -9 -9 -7 6 -13 callgsubr
return
</CharString>
<CharString index="86">
-150 83 -111 297 20 vhcurveto
return
</CharString>
<CharString index="87">
-221 61 168 -21 141 57 return
</CharString>
<CharString index="88">
-12 67 -36 -21 25 -21 430 69 -3 -20 221 -20 27 -20 hstemhm
56 80 241 81 return
</CharString>
<CharString index="89">
234 rmoveto
53 hlineto
2 87 25 264 4 91 rrcurveto
-103 hlineto
2 -91 17 -264 -87 vvcurveto
return
</CharString>
<CharString index="90">
76 4 rlineto
-5 111 -2 155 220 vvcurveto
return
</CharString>
<CharString index="91">
122 15 61 39 50 vvcurveto
return
</CharString>
<CharString index="92">
21 callgsubr
hstemhm
return
</CharString>
<CharString index="93">
-21 24 -21 return
</CharString>
<CharString index="94">
136 hstemhm
return
</CharString>
<CharString index="95">
rmoveto
-41 13 -55 -64 -19 -79 9 -67 rlinecurve
100 5 -22 58 -5 64 33 70 rlinecurve
return
</CharString>
<CharString index="96">
rmoveto
-874 324 vlineto
7 66 rlineto
-253 742 249 66 hlineto
endchar
</CharString>
<CharString index="97">
hstemhm
36 478 return
</CharString>
<CharString index="98">
1 69 rlineto
return
</CharString>
<CharString index="99">
-15 69 -41 -21 574 69 -7 -20 hstemhm
46 84 290 84 hintmask 10101100
return
</CharString>
<CharString index="100">
-1 -21 280 69 hstem
78 return
</CharString>
<CharString index="101">
hstem
255 81 vstem
return
</CharString>
<CharString index="102">
64.5 return
</CharString>
<CharString index="103">
rmoveto
-9 callsubr
-1494 -69 hlineto
return
</CharString>
<CharString index="104">
-23 -44 -29 -48 -47 108 -78 hhcurveto
-58 -41 -53 -102 -38 hvcurveto
return
</CharString>
<CharString index="105">
7 66 rlineto
-85 8 -32 16 24 vvcurveto
24 29 30 102 48 vhcurveto
return
</CharString>
<CharString index="106">
15 -21 27 -21 26 -21 274 68 273 -20 hstemhm
91 83 return
</CharString>
<CharString index="107">
rmoveto
26 -68 rlineto
230 73 80 70 68 76 -101 43 45 vvcurveto
return
</CharString>
<CharString index="108">
-20 23 -20 return
</CharString>
<CharString index="109">
-57 95 -49 -51 vvcurveto
-45 -78 -41 -180 -50 vhcurveto
endchar
</CharString>
<CharString index="110">
vvcurveto
-49 49 -34 136 -11 vhcurveto
return
</CharString>
<CharString index="111">
-20 84 -20 28 -20 hstemhm
return
</CharString>
<CharString index="112">
49.5 return
</CharString>
<CharString index="113">
rlineto
-119 hlineto
return
</CharString>
<CharString index="114">
10 hlineto
0 6 -1 3 -4 -3 -2 -2 -13 callgsubr
return
</CharString>
<CharString index="115">
-219 53 152.17 45.47 return
</CharString>
<CharString index="116">
249 569 rmoveto
83 hlineto
9 136 rlineto
-86 hlineto
return
</CharString>
<CharString index="117">
30.5 11 callgsubr
return
</CharString>
<CharString index="118">
-151 -21 29 -21 152 return
</CharString>
<CharString index="119">
57.5 148 return
</CharString>
<CharString index="120">
rmoveto
22 callsubr
return
</CharString>
<CharString index="121">
66 742 66 hstem
137 78 vstem
137 return
</CharString>
<CharString index="122">
rmoveto
8 65 rlineto
-85 return
</CharString>
<CharString index="123">
74 5 rlineto
return
</CharString>
<CharString index="124">
rlinecurve
-116 return
</CharString>
<CharString index="125">
-81 -7 rlineto
return
</CharString>
<CharString index="126">
hstemhm
230 72 -71 77 12 81 -76 78 return
</CharString>
<CharString index="127">
102 88 -93 -164 -166 -87 -93 -106 return
</CharString>
<CharString index="128">
-17 -174 rlineto
59 hlineto
17 174 rlineto
return
</CharString>
<CharString index="129">
6 -64 rlineto
-16 callsubr
return
</CharString>
<CharString index="130">
136 hstem
return
</CharString>
</Subrs>
@@ -1,263 +0,0 @@
<CharStrings>
<CharString name="ampersand_ampersand.liga">
-107 -10 71 -59 -21 659 -20 hstemhm
52 76 132 73 149 76 132 73 hintmask 10111110
986 350 rmoveto
-66 24 -30 -59 -30 -50 -30 -42 rlinecurve
-59 callgsubr
-17 19 -15 20 -14 20 40 50 40 60 40 70 -66 24 rcurveline
-30 -59 -30 -50 -30 -42 -59 callgsubr
24 callgsubr
-43 31 41 -76 142 hhcurveto
64 75 41 78 77 hvcurveto
hintmask 01111110
31 -43 37 -43 41 -42 63 51 rcurveline
-47 47 -40 45 -32 46 rrcurveto
hintmask 10111110
40 50 40 60 40 70 rrcurveto
-796 -289 rmoveto
-50 callsubr
430 hmoveto
-50 callsubr
endchar
</CharString>
<CharString name="bar_bar.liga">
-107 705 -20 hstem
230 647 vstem
477 707 -28 callsubr
573 888 -28 callsubr
endchar
</CharString>
<CharString name="bar_greater.liga">
-107 622 83 0 -20 hstemhm
229 698 hintmask 01100000
476 707 -28 callsubr
612 425 12 68 rlineto
-80 -32 rmoveto
-525 -363 rlineto
hintmask 10100000
137 705 390 -333 rlineto
endchar
</CharString>
<CharString name="equal_equal.liga">
-16 callgsubr
-948 -58 callsubr
904 -222 -8 callgsubr
-948 -58 callsubr
endchar
</CharString>
<CharString name="equal_equal_equal.liga">
-26 callgsubr
-1496 hlineto
-13 -66 rlineto
1450 -220 18 callgsubr
1452 -222 18 callgsubr
endchar
</CharString>
<CharString name="equal_equal_greater.liga">
19 callgsubr
58 1528 vstem
1307 599 rmoveto
-54 -53 105 -106 rlineto
-1244 -58 callsubr
1323 hlineto
84 -85 -2 -9 -90 -62 rlineto
-1345 -58 callsubr
1263 hlineto
-159 -110 -31 callgsubr
</CharString>
<CharString name="equal_greater.liga">
-107 2 -21 171 -10 callsubr
978 vstem
757 599 rmoveto
-54 -53 105 -106 rlineto
-694 -58 callsubr
773 hlineto
84 -85 -2 -9 -90 -62 rlineto
-795 -58 callsubr
713 hlineto
-159 -110 -31 callgsubr
</CharString>
<CharString name="exclam_equal.liga">
-16 callgsubr
-332 hlineto
173 249 -63 29 -194 -278 rlineto
-532 -58 callsubr
499 hlineto
-108 -156 rlineto
-421 -58 callsubr
388 hlineto
-219 -314 70 -20 232 334 rlineto
476 4 callsubr
-444 hlineto
109 156 rlineto
endchar
</CharString>
<CharString name="exclam_equal_equal.liga">
-26 callgsubr
-551 hlineto
88 127 -63 29 -109 -156 rlineto
-861 -58 callsubr
828 hlineto
-107 -154 rlineto
-753 -58 callsubr
720 hlineto
-109 -156 rlineto
-641 -58 callsubr
608 hlineto
-150 -216 70 -20 164 236 rlineto
803 4 callsubr
-771 hlineto
109 156 rlineto
691 4 callsubr
-659 hlineto
107 154 rlineto
endchar
</CharString>
<CharString name="greater_equal.liga">
-107 644 -20 80 -20 hstem
107 820 vstem
107 159 rmoveto
30 -73 778 263 12 68 -679 287 -42 -60 589 -250 -2 -9 rlineto
91 -212 rmoveto
-777 -269 30 -73 731 258 rlineto
endchar
</CharString>
<CharString name="hyphen_greater.liga">
-107 1 callgsubr
79 957 vstem
757 599 rmoveto
-54 -53 217 -219 rlineto
-828 hlineto
-13 -68 rlineto
847 hlineto
-314 -217 -31 callgsubr
</CharString>
<CharString name="hyphen_hyphen.liga">
-107 259 68 hstem
204 710 vstem
502 259 rmoveto
-3 callgsubr
698 hmoveto
-3 callgsubr
endchar
</CharString>
<CharString name="hyphen_hyphen_greater.liga">
443 1 callgsubr
79 1507 vstem
1307 599 rmoveto
-54 -53 217 -219 rlineto
-1378 hlineto
-13 -68 rlineto
1397 hlineto
-314 -217 -31 callgsubr
</CharString>
<CharString name="less_bar.liga">
-107 705 -20 hstem
258 683 vstem
867 705 rmoveto
-597 -369 -12 -67 436 -450 rlineto
74 hlineto
173 888 rlineto
-229 -798 rmoveto
-376 382 2 10 511 311 rlineto
endchar
</CharString>
<CharString name="less_equal.liga">
-107 -150 -21 876 -20 hstem
146 857 vstem
1003 635 rmoveto
-24 70 -778 -263 -12 -67 679 -288 34 66 -575 244 2 10 rlineto
-168 -190 rmoveto
-15 -75 722 -313 34 63 rlineto
endchar
</CharString>
<CharString name="less_equal_equal.liga">
19 callgsubr
82 1530 vstem
268 374 rmoveto
1330 4 callsubr
-1248 hlineto
142 98 -42 callsubr
-117 118 rlineto
1257 4 callsubr
-1337 hlineto
-72 73 2 10 rlineto
endchar
</CharString>
<CharString name="less_exclam_hyphen_hyphen.liga">
993 0 110 -108 -21 278 68 hstemhm
82 2057 hintmask 10110000
812 -22 callgsubr
-306 305 rmoveto
-34 61 -378 -263 -12 -67 rlineto
hintmask 01110000
279 -288 54 53 -223 225 rlineto
429 hlineto
12 68 rlineto
-433 hlineto
883 hmoveto
-13 -68 rlineto
1057 hlineto
12 68 rlineto
hintmask 10110000
-1406 -327 12 callsubr
</CharString>
<CharString name="less_hyphen.liga">
-107 1 callgsubr
82 957 vstem
1039 327 rmoveto
-839 hlineto
306 211 -42 callsubr
-223 225 rlineto
835 hlineto
endchar
</CharString>
<CharString name="less_hyphen_hyphen.liga">
443 1 callgsubr
82 1507 vstem
1589 327 rmoveto
-1389 hlineto
306 211 -42 callsubr
-223 225 rlineto
1385 hlineto
endchar
</CharString>
<CharString name="plus_plus.liga">
-107 259 67 hstem
120 878 vstem
816 326 rmoveto
36 187 rlineto
-71 hlineto
-36 -187 rlineto
-359 -30 callgsubr
37 188 rlineto
359 hlineto
-37 -188 rlineto
71 hlineto
37 188 rlineto
181 hlineto
14 67 rlineto
endchar
</CharString>
</CharStrings>
+79 -11
View File
@@ -1,52 +1,120 @@
<ttFont>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.002"/>
<checkSumAdjustment value="0xd578326d"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Mon Oct 16 14:13:21 2017"/>
<modified value="Mon Oct 16 14:13:21 2017"/>
<xMin value="-367"/>
<xMin value="-1562"/>
<yMin value="-371"/>
<xMax value="2139"/>
<xMax value="717"/>
<yMax value="1130"/>
<macStyle value="00000000 00000010"/>
<lowestRecPPEM value="3"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="960"/>
<descent value="-240"/>
<lineGap value="0"/>
<advanceWidthMax value="2200"/>
<minLeftSideBearing value="-367"/>
<advanceWidthMax value="600"/>
<minLeftSideBearing value="-1562"/>
<minRightSideBearing value="-167"/>
<xMaxExtent value="2139"/>
<xMaxExtent value="717"/>
<caretSlopeRise value="1000"/>
<caretSlopeRun value="194"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="456"/>
<numberOfHMetrics value="468"/>
</hhea>
<CFF>
<CFFFont>
<FontBBox value="-367 -371 2139 1130"/>
<FontBBox value="-1562 -371 717 1130"/>
</CFFFont>
</CFF>
<CFF>
<CFFFont>
<Private>
<nominalWidthX value="1207"/>
<nominalWidthX value="107"/>
</Private>
</CFFFont>
</CFF>
@@ -0,0 +1,7 @@
<Glyph name="LIG" lsb="0" width="550">
<CharString>
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,36 @@
<Glyph name="ampersand_ampersand.liga" lsb="-411" width="550">
<CharString>
-10 71 hstem
-411 76 132 73 149 76 132 73 vstem
523 350 rmoveto
-66 24 -30 -59 -30 -50 -30 -42 rlinecurve
-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
-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
-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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="bar_bar.liga" lsb="-298" width="550">
<CharString>
-298 247 103 247 vstem
-51 707 rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
523 888 rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="bar_greater.liga" lsb="-261" width="550">
<CharString>
-261 75 468 74 vstem
-13 710 rmoveto
-76 -6 -172 -886 rlineto
75 hlineto
627 440 13 69 rlineto
-82 -40 rmoveto
-540 -376 137 709 405 -323 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,25 @@
<Glyph name="colon_equal.liga" lsb="-297" width="550">
<CharString>
151 69 153 69 hstem
-253 618 vstem
-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/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,25 @@
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
<CharString>
151 69 153 69 hstem
-472 944 vstem
-6 373 rmoveto
15 69 rlineto
-424 hlineto
-14 -69 rlineto
943 hmoveto
15 69 rlineto
-414 hlineto
-14 -69 rlineto
-150 -222 rmoveto
14 69 rlineto
-424 hlineto
-13 -69 rlineto
943 hmoveto
14 69 rlineto
-414 hlineto
-13 -69 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="equal_equal.liga" lsb="-472" width="550">
<CharString>
151 69 153 69 hstem
-472 944 vstem
514 373 rmoveto
15 69 rlineto
-944 hlineto
-14 -69 rlineto
900 -222 rmoveto
14 69 rlineto
-944 hlineto
-13 -69 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>

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