81 Commits

Author SHA1 Message Date
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
585 changed files with 63229 additions and 24179 deletions
+54
View File
@@ -0,0 +1,54 @@
{
"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"
]
}
],
"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'
}
};
+125 -76
View File
@@ -1,12 +1,42 @@
# Operator Mono Ligatures
[![All Contributors](https://img.shields.io/badge/all_contributors-4-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,120 @@ 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 `output` 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>
</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!
+1 -1
View File
@@ -19,7 +19,7 @@ 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
+1 -1
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
+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: 168 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(os.EOL)
.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 profile 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');
updateName(PlatformId.mac, NameId.familyName, familyName);
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);
}
});
}
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 638 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,65 @@
<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
{78109b05} callsubr
-79 -50 -44 -56 -8 -65 -14 16 rcurveline
{78109b05} callsubr
{63e41646} callsubr
22 -27 47 -52 67 -22 rrcurveto
-6 17 20 -4 23 hhcurveto
64 -1 69 35 51 77 28 -34 31 -37 32 -41 65 51 rcurveline
-41 50 -37 43 -33 38 rrcurveto
-587 -114 {d2b30628} callgsubr
380 hmoveto
-55 -29 39 53 hvcurveto
hintmask 11101000
47 28 49 59 42 vhcurveto
{71578616} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="78109b05">
{1ffac2b6} callsubr
{6ff78137} callsubr
return
</CharString>
<CharString index="1" fingerprint="1ffac2b6">
33 59 32 79 22 89 -70 9 rcurveline
-14 -68 -21 -66 -23 -54 rrcurveto
return
</CharString>
<CharString index="2" fingerprint="6ff78137">
-119 136 -55 59 52 vvcurveto
54 42 46 163 -8 vhcurveto
-6 76 rlineto
-213 4 -66 -91 -86 vvcurveto
-43 20 -40 40 -52 vhcurveto
return
</CharString>
<CharString index="3" fingerprint="78109b05">
{1ffac2b6} callsubr
{6ff78137} callsubr
return
</CharString>
<CharString index="4" fingerprint="63e41646">
-88 -56 -45 -63 -75 vvcurveto
-80 49 -62 95 64 64 34 77 51 vhcurveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d2b30628">
rmoveto
-55 -29 39 53 47 28 49 59 42 hvcurveto
{71578616} callgsubr
return
</CharString>
<CharString index="1" fingerprint="71578616">
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,23 @@
<Glyph name="bar_bar.liga" lsb="-211" width="550">
<CharString>
-211 75 275 75 vstem
-136 710 {92c1542b} callsubr
350 892 {92c1542b} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="92c1542b">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
<CharString index="1" fingerprint="92c1542b">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,22 @@
<Glyph name="bar_greater.liga" lsb="-261" width="550">
<CharString>
-261 75 468 74 vstem
-186 710 {92c1542b} callsubr
541 440 rlineto
69 vlineto
-74 -40 rmoveto
-467 -376 rlineto
709 vlineto
467 -323 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="92c1542b">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,52 @@
<Glyph name="colon_equal.liga" lsb="-297" width="550">
<CharString>
{806e0ede} callsubr
-297 658 vstem
-297 354 {d5651823} callsubr
657 -98 {039fe050} callgsubr
-235 -245 {d5651823} callsubr
657 -94 {039fe050} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="d5651823">
rmoveto
118 hlineto
2 117 {219083fd} callgsubr
return
</CharString>
<CharString index="3" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="4" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="219083fd">
rlineto
-119 hlineto
return
</CharString>
<CharString index="2" fingerprint="039fe050">
{b0478dca} callsubr
-424 -69 hlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,48 @@
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
<CharString>
{806e0ede} callsubr
-472 944 vstem
-49 373 {039fe050} callgsubr
943 {95b16fa7} callgsubr
-414 -69 hlineto
-107 -222 {039fe050} callgsubr
943 {95b16fa7} callgsubr
-414 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="3" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="039fe050">
{b0478dca} callsubr
-424 -69 hlineto
return
</CharString>
<CharString index="2" fingerprint="95b16fa7">
hmoveto
{16905bc3} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,40 @@
<Glyph name="equal_equal.liga" lsb="-472" width="550">
<CharString>
{806e0ede} callsubr
-472 944 vstem
471 373 {b0478dca} callsubr
-944 -69 hlineto
943 {dbbb91b3} callgsubr
-944 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="3" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="dbbb91b3">
-222 {b0478dca} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,48 @@
<Glyph name="equal_equal_equal.2.liga" lsb="-1022" width="550">
<CharString>
{806e0ede} callsubr
-1022 1494 vstem
-579 373 {b3fa3b3b} callgsubr
-607 -222 {b3fa3b3b} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="b3fa3b3b">
rmoveto
1 69 rlineto
-444 -69 hlineto
968 hmoveto
{85a4851d} callgsubr
return
</CharString>
<CharString index="2" fingerprint="85a4851d">
{4124c3a1} callgsubr
968 hmoveto
{4124c3a1} callgsubr
return
</CharString>
<CharString index="3" fingerprint="4124c3a1">
{16905bc3} callsubr
-444 -69 hlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,38 @@
<Glyph name="equal_equal_equal.liga" lsb="-1022" width="550">
<CharString>
40 69 153 {2a39309a} callsubr
hstem
-1022 1494 cntrmask 11100000
471 484 {b0478dca} callsubr
-1494 -69 hlineto
1493 {dbbb91b3} callgsubr
-1494 -69 hlineto
1493 {dbbb91b3} callgsubr
-1494 -69 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="2" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="dbbb91b3">
-222 {b0478dca} callsubr
return
</CharString>
<CharString index="1" fingerprint="dbbb91b3">
-222 {b0478dca} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,56 @@
<Glyph name="equal_equal_greater.liga" lsb="-1022" width="550">
<CharString>
{806e0ede} callsubr
-1022 394 1019 74 vstem
{d4d5756e} callgsubr
-1237 -69 1321 hlineto
{53342509} callsubr
-1332 -69 1249 {6c481ea1} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="806e0ede">
{03f44ce8} callgsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="3" fingerprint="53342509">
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
return
</CharString>
<CharString index="4" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="2" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="3" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,58 @@
<Glyph name="equal_greater.liga" lsb="-472" width="550">
<CharString>
{f3caf16b} callgsubr
-472 937 -74 74 hintmask 11100000
{d4d5756e} callgsubr
-687 -69 771 hlineto
hintmask 11010000
{53342509} callsubr
hintmask 11100000
-782 -69 699 {6c481ea1} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="2" fingerprint="53342509">
92 -76 rlineto
-10 vlineto
-81 -67 rlineto
return
</CharString>
<CharString index="3" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="3" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="4" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,59 @@
<Glyph name="equal_less_less.liga" lsb="-1022" width="550">
<CharString>
{f3caf16b} callgsubr
-1022 1486 -688 75 235 75 hintmask 11011000
-149 297 rmoveto
{8a45f119} callsubr
hintmask 11100000
-936 -69 854 hlineto
hintmask 11011000
{80e97e3f} callsubr
hintmask 11100000
-842 -69 924 hlineto
206 -173 46 57 rlineto
hintmask 11011000
-303 252 rlineto
310 hmoveto
10 vlineto
299 248 {b5c7d737} callsubr
rlineto
hintmask 11100000
46 57 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="8a45f119">
299 248 -45 58 -191 -161 rlineto
return
</CharString>
<CharString index="2" fingerprint="80e97e3f">
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
return
</CharString>
<CharString index="3" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="4" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,53 @@
<Glyph name="exclam_equal.liga" lsb="-472" width="550">
<CharString>
{749ae412} callsubr
-575 {2a39309a} callsubr
hstemhm
-472 944 -762 534 hintmask 00110000
76 373 rmoveto
395 {9988f976} callgsubr
-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 {9988f976} callgsubr
-477 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="1" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,63 @@
<Glyph name="exclam_equal_equal.liga" lsb="-1022" width="550">
<CharString>
{749ae412} callsubr
-686 69 153 {2a39309a} callsubr
hstemhm
-1022 1494 -1012 534 cntrmask 01110000
hintmask 01111000
471 262 {b0478dca} callsubr
-668 hlineto
80 153 rlineto
587 {9988f976} callgsubr
-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 {9988f976} callgsubr
-785 hlineto
80 153 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b0478dca">
rmoveto
{16905bc3} callsubr
return
</CharString>
<CharString index="3" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="1" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,31 @@
<Glyph name="greater_equal.2.liga" lsb="-308" width="600">
<CharString>
493 -141 69 390 {045cf5af} callgsubr
-79 vlineto
615 302 {f7a1359d} callgsubr
-488 rmoveto
69 -615 -69 vlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="045cf5af">
69 hstem
-308 615 vstem
-308 95 rmoveto
return
</CharString>
<CharString index="1" fingerprint="f7a1359d">
rlineto
69 vlineto
-574 280 -37 -63 512 {fec1189a} callsubr
99 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,31 @@
<Glyph name="greater_equal.liga" lsb="-308" width="550">
<CharString>
138 77 103 {045cf5af} callgsubr
31 -64 584 287 {f7a1359d} callgsubr
-209 rmoveto
77 vlineto
-615 -300 31 -64 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="045cf5af">
69 hstem
-308 615 vstem
-308 95 rmoveto
return
</CharString>
<CharString index="1" fingerprint="f7a1359d">
rlineto
69 vlineto
-574 280 -37 -63 512 {fec1189a} callsubr
99 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,93 @@
<Glyph name="greater_equal_greater.liga" lsb="-1013" width="550">
<CharString>
{f3caf16b} callgsubr
-1013 1478 -1174 74 1026 74 hintmask 11100000
{d4d5756e} callgsubr
-987 {f6058c5b} callgsubr
hintmask 11010000
{23088cc1} callsubr
206 173 rlineto
989 {e779a49c} callsubr
-990 hlineto
hintmask 11010000
45 38 rlineto
69 vlineto
-55 46 rlineto
989 {9b0fa5a4} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="2" fingerprint="23088cc1">
{4f167383} callsubr
hintmask 11100000
{f20bf050} callgsubr
return
</CharString>
<CharString index="3" fingerprint="4f167383">
300 {fec1189a} callsubr
return
</CharString>
<CharString index="4" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
<CharString index="5" fingerprint="e779a49c">
{6c481ea1} callsubr
hintmask 11001000
-74 -40 rmoveto
-81 -67 rlineto
return
</CharString>
<CharString index="6" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
<CharString index="7" fingerprint="9b0fa5a4">
hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="3" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="4" fingerprint="f6058c5b">
hlineto
-190 160 -47 -58 rlineto
return
</CharString>
<CharString index="5" fingerprint="f20bf050">
-304 -252 45 -57 return
</CharString>
<CharString index="6" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,73 @@
<Glyph name="greater_greater_equal.liga" lsb="-1013" width="550">
<CharString>
{f3caf16b} callgsubr
-1013 1485 -1181 74 236 74 hintmask 11011000
-635 327 rmoveto
-327 275 -47 -58 {23088cc1} callsubr
rlineto
hintmask 11011000
333 280 rlineto
310 hmoveto
69 vlineto
-55 46 rlineto
hintmask 11100000
851 {9988f976} callgsubr
-934 {f6058c5b} callgsubr
hintmask 11001000
{4f167383} callsubr
{f20bf050} callgsubr
206 173 rlineto
hintmask 11100000
923 {9988f976} callgsubr
-842 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="23088cc1">
{4f167383} callsubr
hintmask 11100000
{f20bf050} callgsubr
return
</CharString>
<CharString index="2" fingerprint="4f167383">
300 {fec1189a} callsubr
return
</CharString>
<CharString index="3" fingerprint="fec1189a">
-247 rlineto
-10 vlineto
return
</CharString>
<CharString index="4" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="f20bf050">
-304 -252 45 -57 return
</CharString>
<CharString index="3" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="4" fingerprint="f6058c5b">
hlineto
-190 160 -47 -58 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,46 @@
<Glyph name="hyphen_greater.liga" lsb="-431" width="550">
<CharString>
{05172461} callsubr
-431 896 {523bf78f} callsubr
-786 -69 787 {946ed192} callgsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="523bf78f">
{1bf9d7d7} callsubr
264 -217 rlineto
return
</CharString>
<CharString index="2" fingerprint="1bf9d7d7">
vstem
{d95d51dd} callgsubr
return
</CharString>
<CharString index="3" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="1" fingerprint="946ed192">
hlineto
-269 -223 {f8ffdd53} callgsubr
</CharString>
<CharString index="2" fingerprint="f8ffdd53">
{f9e588f2} callgsubr
endchar
</CharString>
<CharString index="3" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,23 @@
<Glyph name="hyphen_hyphen.liga" lsb="-341" width="550">
<CharString>
{05172461} callsubr
-341 317 63 317 vstem
-30 258 rmoveto
{33ce0eb6} callsubr
691 hmoveto
{33ce0eb6} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="33ce0eb6">
6 69 rlineto
-317 -69 hlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,46 @@
<Glyph name="hyphen_hyphen_greater.liga" lsb="-981" width="550">
<CharString>
{05172461} callsubr
-981 1446 {523bf78f} callsubr
-1336 -69 1337 {946ed192} callgsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="523bf78f">
{1bf9d7d7} callsubr
264 -217 rlineto
return
</CharString>
<CharString index="2" fingerprint="1bf9d7d7">
vstem
{d95d51dd} callgsubr
return
</CharString>
<CharString index="3" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="1" fingerprint="946ed192">
hlineto
-269 -223 {f8ffdd53} callgsubr
</CharString>
<CharString index="2" fingerprint="f8ffdd53">
{f9e588f2} callgsubr
endchar
</CharString>
<CharString index="3" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</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,22 @@
<Glyph name="less_equal.2.liga" lsb="-283" width="600">
<CharString>
493 -141 69 hstem
-283 99 vstem
332 {fc11b4c5} callsubr
615 -302 rlineto
-615 -157 rmoveto
615 69 -615 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fc11b4c5">
95 rmoveto
-516 252 rlineto
10 vlineto
512 247 -37 63 -574 -280 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,22 @@
<Glyph name="less_equal.liga" lsb="-303" width="550">
<CharString>
138 77 103 69 hstem
-303 615 vstem
312 {fc11b4c5} callsubr
584 -287 rlineto
-584 107 rmoveto
584 -287 31 64 -615 300 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="fc11b4c5">
95 rmoveto
-516 252 rlineto
10 vlineto
512 247 -37 63 -574 -280 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,63 @@
<Glyph name="less_equal_equal.liga" lsb="-1014" width="550">
<CharString>
{e5de916d} callgsubr
1486 hintmask 11100000
-939 287 rmoveto
10 vlineto
92 76 rlineto
hintmask 11010000
1318 {9988f976} callgsubr
-1236 {4e43c992} callgsubr
1246 {9988f976} callgsubr
-1330 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="16905bc3">
1 69 rlineto
return
</CharString>
<CharString index="2" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="3" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e5de916d">
{f3caf16b} callgsubr
-1014 75 -75 return
</CharString>
<CharString index="1" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="3" fingerprint="9988f976">
hlineto
{16905bc3} callsubr
return
</CharString>
<CharString index="4" fingerprint="4e43c992">
hlineto
124 103 {5a448ea3} callgsubr
-139 116 rlineto
return
</CharString>
<CharString index="5" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,94 @@
<Glyph name="less_equal_greater.liga" lsb="-1014" width="550">
<CharString>
{e5de916d} callgsubr
1479 -74 74 hintmask 11010000
{d4d5756e} callgsubr
-979 {4e43c992} callgsubr
1002 {e779a49c} callsubr
-1168 hlineto
hintmask 11100000
{0541aa7a} callsubr
1146 {9b0fa5a4} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
<CharString index="2" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="3" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
<CharString index="4" fingerprint="e779a49c">
{6c481ea1} callsubr
hintmask 11001000
-74 -40 rmoveto
-81 -67 rlineto
return
</CharString>
<CharString index="5" fingerprint="6c481ea1">
hlineto
-140 -116 {f9e588f2} callgsubr
return
</CharString>
<CharString index="6" fingerprint="0541aa7a">
-81 67 rlineto
10 vlineto
92 76 rlineto
return
</CharString>
<CharString index="7" fingerprint="9b0fa5a4">
hlineto
hintmask 11001000
92 -76 rlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e5de916d">
{f3caf16b} callgsubr
-1014 75 -75 return
</CharString>
<CharString index="1" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="3" fingerprint="d4d5756e">
{d95d51dd} callgsubr
124 -102 rlineto
return
</CharString>
<CharString index="4" fingerprint="d95d51dd">
138 {2e66eddf} callsubr
-47 -58 return
</CharString>
<CharString index="5" fingerprint="4e43c992">
hlineto
124 103 {5a448ea3} callgsubr
-139 116 rlineto
return
</CharString>
<CharString index="6" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
<CharString index="7" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,75 @@
<Glyph name="less_equal_less.liga" lsb="-1014" width="550">
<CharString>
{e5de916d} callgsubr
1478 -378 75 hintmask 11101000
418 -22 rmoveto
hintmask 11010000
46 57 -222 185 rlineto
hintmask 11101000
-81 67 rlineto
10 vlineto
{8a45f119} callsubr
-988 {4e43c992} callgsubr
987 hlineto
-1070 69 rmoveto
{0541aa7a} callsubr
989 hlineto
{80e97e3f} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="8a45f119">
299 248 -45 58 -191 -161 rlineto
return
</CharString>
<CharString index="2" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="3" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
<CharString index="4" fingerprint="0541aa7a">
-81 67 rlineto
10 vlineto
92 76 rlineto
return
</CharString>
<CharString index="5" fingerprint="80e97e3f">
-56 -47 rlineto
-69 vlineto
44 -37 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e5de916d">
{f3caf16b} callgsubr
-1014 75 -75 return
</CharString>
<CharString index="1" fingerprint="f3caf16b">
{03f44ce8} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="3" fingerprint="4e43c992">
hlineto
124 103 {5a448ea3} callgsubr
-139 116 rlineto
return
</CharString>
<CharString index="4" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,54 @@
<Glyph name="less_exclam_hyphen_hyphen.liga" lsb="-1564" width="550">
<CharString>
0 110 148 69 hstemhm
-884 114 -78 84 hintmask 11010000
-848 {67998929} callgsubr
-342 311 rmoveto
{a2b8be51} callgsubr
384 hlineto
6 69 rlineto
-389 hlineto
872 hmoveto
-69 1011 vlineto
6 69 rlineto
hintmask 11100000
-1321 -327 {e88c39b2} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="1" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
<CharString index="2" fingerprint="e88c39b2">
rmoveto
113 hlineto
3 110 rlineto
-114 hlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="67998929">
234 rmoveto
53 hlineto
2 87 25 264 4 91 rrcurveto
-103 hlineto
2 -91 17 -264 -87 vvcurveto
return
</CharString>
<CharString index="1" fingerprint="a2b8be51">
{5a448ea3} callgsubr
-268 223 rlineto
return
</CharString>
<CharString index="2" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,37 @@
<Glyph name="less_hyphen.liga" lsb="-464" width="550">
<CharString>
{05172461} callsubr
-464 900 vstem
436 327 rmoveto
-789 hlineto
263 218 {a2b8be51} callgsubr
784 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="2" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a2b8be51">
{5a448ea3} callgsubr
-268 223 rlineto
return
</CharString>
<CharString index="1" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,37 @@
<Glyph name="less_hyphen_hyphen.liga" lsb="-1014" width="550">
<CharString>
{05172461} callsubr
-1014 1450 vstem
436 327 rmoveto
-1339 hlineto
263 218 {a2b8be51} callgsubr
1334 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="05172461">
258 69 hstem
return
</CharString>
<CharString index="1" fingerprint="b5c7d737">
{f3a774e8} callsubr
332 -279 return
</CharString>
<CharString index="2" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a2b8be51">
{5a448ea3} callgsubr
-268 223 rlineto
return
</CharString>
<CharString index="1" fingerprint="5a448ea3">
{b5c7d737} callsubr
46 57 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,24 @@
<Glyph name="less_slash.liga" lsb="-464" width="550">
<CharString>
{749ae412} callsubr
hstem
-464 75 182 534 vstem
258 726 rmoveto
-357 -680 -290 241 rlineto
10 vlineto
299 248 {f3a774e8} callsubr
330 -277 -73 -140 71 -29 463 883 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="f3a774e8">
-45 58 -329 -277 rlineto
-69 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,17 @@
<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 {3259c3e8} callgsubr
187 352 -187 73 187 176 vlineto
1 68 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="3259c3e8">
187 -73 -187 -178 -68 178 -187 73 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,50 @@
<Glyph name="question_question.liga" lsb="-395" width="550">
<CharString>
0 109 493 76 hstem
-304 {8aa986d8} callsubr
86 73 {8aa986d8} callsubr
86 vstem
-387 678 rmoveto
{9ecc4586} callgsubr
380 hmoveto
{9ecc4586} callgsubr
-298 -678 {d2717239} callgsubr
378 -109 {d2717239} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="8aa986d8">
111 110 return
</CharString>
<CharString index="1" fingerprint="8aa986d8">
111 110 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9ecc4586">
-8 -76 rlineto
252 -16 60 -40 -47 vvcurveto
-72 -180 -55 -8 -143 vhcurveto
57 -1 rlineto
14 129 203 51 110 vvcurveto
79 -88 65 -302 16 vhcurveto
return
</CharString>
<CharString index="1" fingerprint="9ecc4586">
-8 -76 rlineto
252 -16 60 -40 -47 vvcurveto
-72 -180 -55 -8 -143 vhcurveto
57 -1 rlineto
14 129 203 51 110 vvcurveto
79 -88 65 -302 16 vhcurveto
return
</CharString>
<CharString index="2" fingerprint="d2717239">
rmoveto
110 hlineto
3 109 rlineto
-111 hlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,35 @@
<Glyph name="slash_greater.liga" lsb="-347" width="550">
<CharString>
{749ae412} callsubr
hstem
-347 534 204 74 vstem
139 {2e66eddf} callsubr
48 92 {88f7ced4} callgsubr
379 723 288 -237 rlineto
-10 vlineto
-304 -252 {f8ffdd53} callgsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="749ae412">
-189 915 return
</CharString>
<CharString index="1" fingerprint="2e66eddf">
602 rmoveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="88f7ced4">
-69 32 -465 -886 71 -29 return
</CharString>
<CharString index="1" fingerprint="f8ffdd53">
{f9e588f2} callgsubr
endchar
</CharString>
<CharString index="2" fingerprint="f9e588f2">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
</GlobalSubrs>
</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,16 @@
<Glyph name="uniE0B0" code="0xe0b0" lsb="-20" width="550">
<CharString>
{99cad421} callsubr
609 313 rmoveto
-627 581 -2 -1099 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="99cad421">
-205 1099 hstem
-20 629 vstem
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,16 @@
<Glyph name="uniE0B2" code="0xe0b2" lsb="-20" width="550">
<CharString>
{99cad421} callsubr
-20 313 rmoveto
629 -518 -2 1099 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="99cad421">
-205 1099 hstem
-20 629 vstem
return
</CharString>
</Subrs>
<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>
File diff suppressed because it is too large Load Diff
-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>
File diff suppressed because it is too large Load Diff
@@ -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,51 @@
<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
{db2882dd} callsubr
-17 19 -15 20 -14 20 {c03968d2} callsubr
26 -37 75 -60 77 -17 rrcurveto
-3 11 14 -2 14 hhcurveto
64 72 41 78 77 hvcurveto
31 -43 37 -43 41 -42 63 51 rcurveline
-47 47 -40 45 -32 46 40 50 40 60 40 70 rrcurveto
-796 -289 rmoveto
{e80dab6b} callsubr
430 hmoveto
{e80dab6b} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="db2882dd">
-37 63 -22 63 -8 65 rrcurveto
60 60 35 65 49 vvcurveto
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
-7 vlineto
-128 -109 -80 -109 -100 vvcurveto
return
</CharString>
<CharString index="1" fingerprint="c03968d2">
40 50 40 60 40 70 -66 24 rcurveline
-30 -59 -30 -50 -30 -42 {db2882dd} callsubr
-75 41 -46 74 64 75 41 78 77 vhcurveto
return
</CharString>
<CharString index="2" fingerprint="db2882dd">
-37 63 -22 63 -8 65 rrcurveto
60 60 35 65 49 vvcurveto
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
-7 vlineto
-128 -109 -80 -109 -100 vvcurveto
return
</CharString>
<CharString index="3" fingerprint="e80dab6b">
-38 -24 24 43 69 58 80 82 80 hvcurveto
12 -66 28 -66 41 -66 rrcurveto
-67 -61 -56 -31 -42 hhcurveto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,23 @@
<Glyph name="bar_bar.liga" lsb="-298" width="550">
<CharString>
-298 247 103 247 vstem
-51 707 {b0cb0c2d} callgsubr
523 888 {b0cb0c2d} callgsubr
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="b0cb0c2d">
rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
return
</CharString>
<CharString index="1" fingerprint="b0cb0c2d">
rmoveto
-74 -2 -173 -886 rlineto
74 hlineto
return
</CharString>
</GlobalSubrs>
</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,60 @@
<Glyph name="colon_equal.liga" lsb="-297" width="550">
<CharString>
{53fa50ea} callsubr
-253 618 vstem
-253 354 {d8368263} callsubr
-98 rmoveto
{14bcb405} callgsubr
-424 {83c7393b} callsubr
-283 -245 {d8368263} callsubr
-94 {331d84c3} callgsubr
-424 {fff746ed} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="d8368263">
rmoveto
118 hlineto
25 117 rlineto
-119 hlineto
638 return
</CharString>
<CharString index="4" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
<CharString index="5" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
<CharString index="1" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="2" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,65 @@
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
<CharString>
{53fa50ea} callsubr
-472 944 vstem
-6 373 {331d84c3} callgsubr
-424 {fff746ed} callgsubr
943 hmoveto
{b42578a3} callsubr
-414 {fff746ed} callgsubr
-150 {b7988df5} callgsubr
-424 {83c7393b} callsubr
943 hmoveto
{14bcb405} callgsubr
-414 {83c7393b} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
<CharString index="4" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="1" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="2" fingerprint="b7988df5">
{4bc44ff7} callgsubr
69 rlineto
return
</CharString>
<CharString index="3" fingerprint="4bc44ff7">
-222 rmoveto
14 return
</CharString>
<CharString index="4" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,55 @@
<Glyph name="equal_equal.liga" lsb="-472" width="550">
<CharString>
{53fa50ea} callsubr
-472 944 vstem
514 373 {331d84c3} callgsubr
-944 {fff746ed} callgsubr
900 {b7988df5} callgsubr
-944 {83c7393b} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
<CharString index="4" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="1" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="2" fingerprint="b7988df5">
{4bc44ff7} callgsubr
69 rlineto
return
</CharString>
<CharString index="3" fingerprint="4bc44ff7">
-222 rmoveto
14 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,63 @@
<Glyph name="equal_equal_equal.2.liga" lsb="-1022" width="550">
<CharString>
{53fa50ea} callsubr
-1022 1494 vstem
-536 373 rmoveto
{bf9bf165} callsubr
968 hmoveto
{bf9bf165} callsubr
968 hmoveto
{bf9bf165} callsubr
-650 -222 rmoveto
{afc41edc} callgsubr
968 hmoveto
{afc41edc} callgsubr
968 hmoveto
{afc41edc} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="bf9bf165">
{b42578a3} callsubr
-444 {fff746ed} callgsubr
return
</CharString>
<CharString index="4" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
<CharString index="5" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="1" fingerprint="afc41edc">
{14bcb405} callgsubr
-444 {83c7393b} callsubr
return
</CharString>
<CharString index="2" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,54 @@
<Glyph name="equal_equal_equal.liga" lsb="-1022" width="550">
<CharString>
40 69 153 {2a39309a} callsubr
hstem
-1022 1494 cntrmask 11100000
557 484 {331d84c3} callgsubr
-1494 {fff746ed} callgsubr
1450 -222 {331d84c3} callgsubr
-1494 {fff746ed} callgsubr
1450 {b7988df5} callgsubr
-1494 {83c7393b} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="1" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
<CharString index="2" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="1" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="2" fingerprint="331d84c3">
rmoveto
{b42578a3} callsubr
return
</CharString>
<CharString index="3" fingerprint="b7988df5">
{4bc44ff7} callgsubr
69 rlineto
return
</CharString>
<CharString index="4" fingerprint="4bc44ff7">
-222 rmoveto
14 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,65 @@
<Glyph name="equal_equal_greater.liga" lsb="-1022" width="550">
<CharString>
{53fa50ea} callsubr
-1022 394 691 424 vstem
{d074a68d} callsubr
-1222 {fff746ed} callgsubr
1305 {c3e48ac9} callsubr
-1329 {83c7393b} callsubr
1243 hlineto
{3776599f} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="d074a68d">
{7097f26b} callgsubr
103 -104 rlineto
return
</CharString>
<CharString index="4" fingerprint="c3e48ac9">
hlineto
83 -84 -2 -9 -87 -60 rlineto
return
</CharString>
<CharString index="5" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
<CharString index="6" fingerprint="3776599f">
-158 -109 {33c8b3e3} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="7097f26b">
208 599 rmoveto
-54 -53 return
</CharString>
<CharString index="1" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="2" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="3" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,66 @@
<Glyph name="equal_greater.liga" lsb="-472" width="550">
<CharString>
{03f44ce8} callsubr
hstemhm
-472 937 -402 {fcf2278c} callgsubr
{d074a68d} callsubr
-672 {fff746ed} callgsubr
755 {c3e48ac9} callsubr
-779 {83c7393b} callsubr
693 hlineto
hintmask 11010000
{3776599f} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="d074a68d">
{7097f26b} callgsubr
103 -104 rlineto
return
</CharString>
<CharString index="3" fingerprint="c3e48ac9">
hlineto
83 -84 -2 -9 -87 -60 rlineto
return
</CharString>
<CharString index="4" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
<CharString index="5" fingerprint="3776599f">
-158 -109 {33c8b3e3} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="fcf2278c">
424 hintmask 11100000
return
</CharString>
<CharString index="1" fingerprint="7097f26b">
208 599 rmoveto
-54 -53 return
</CharString>
<CharString index="2" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="3" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="4" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,58 @@
<Glyph name="equal_less_less.liga" lsb="-1022" width="550">
<CharString>
{03f44ce8} callsubr
hstemhm
-1022 1486 -686 424 -114 424 hintmask 11001000
-142 301 rmoveto
hintmask 11010000
{83815ada} callsubr
-907 {fff746ed} callgsubr
822 {5abe2a2a} callgsubr
-834 hlineto
hintmask 11100000
-13 -69 rlineto
914 {e5b3db5a} callgsubr
312 10 rmoveto
hintmask 11001000
344 237 {83946452} callsubr
-255 257 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="83815ada">
344 237 -34 61 -226 -157 rlineto
return
</CharString>
<CharString index="3" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="fff746ed">
hlineto
-14 -69 rlineto
return
</CharString>
<CharString index="1" fingerprint="5abe2a2a">
hlineto
-53 -37 -12 -67 47 -49 rlineto
return
</CharString>
<CharString index="2" fingerprint="e5b3db5a">
hlineto
165 -170 54 53 -255 257 rlineto
return
</CharString>
<CharString index="3" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,51 @@
<Glyph name="exclam_equal.liga" lsb="-408" width="550">
<CharString>
{c41cabed} callsubr
-567 {2a39309a} callsubr
hstemhm
-437 944 hintmask 00110000
622 373 rmoveto
28 69 rlineto
-388 hlineto
220 247 rlineto
hintmask 10010000
-57 29 rlineto
hintmask 00110000
-246 -276 rlineto
-473 {364cb51f} callsubr
439 hlineto
hintmask 01010000
{89416abb} callsubr
-362 {364cb51f} callsubr
328 hlineto
-279 -313 rlineto
hintmask 10010000
66 -20 rlineto
hintmask 01010000
296 333 rlineto
532 hlineto
28 69 rlineto
-498 hlineto
hintmask 00110000
136 153 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="c41cabed">
-182 900 return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="364cb51f">
hlineto
-27 -69 rlineto
return
</CharString>
<CharString index="3" fingerprint="89416abb">
-137 -153 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,59 @@
<Glyph name="exclam_equal_equal.liga" lsb="-979" width="550">
<CharString>
{c41cabed} callsubr
-678 69 153 {2a39309a} callsubr
hstemhm
-987 1494 cntrmask 01110000
hintmask 00111000
686 484 rmoveto
28 69 rlineto
-603 hlineto
121 136 rlineto
hintmask 10001000
-57 29 rlineto
hintmask 00111000
-147 -165 rlineto
-808 {364cb51f} callsubr
774 hlineto
{89416abb} callsubr
-696 {364cb51f} callsubr
662 hlineto
hintmask 01111000
{89416abb} callsubr
-585 hlineto
-26 -69 rlineto
550 hlineto
-180 -202 rlineto
hintmask 10001000
66 -20 rlineto
hintmask 01111000
198 222 rlineto
859 hlineto
27 69 rlineto
-825 hlineto
136 153 rlineto
748 hlineto
28 69 rlineto
-715 hlineto
137 153 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="c41cabed">
-182 900 return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="364cb51f">
hlineto
-27 -69 rlineto
return
</CharString>
<CharString index="3" fingerprint="89416abb">
-137 -153 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,25 @@
<Glyph name="greater_equal.2.liga" lsb="-308" width="600">
<CharString>
493 -141 69 390 69 hstem
-295 615 vstem
-262 95 rmoveto
-15 -79 673 302 14 69 -520 280 -49 {90350ff9} callgsubr
4 -488 rmoveto
13 69 rlineto
-615 {83c7393b} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="90350ff9">
-63 464 -247 -2 -10 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="greater_equal.liga" lsb="-296" width="550">
<CharString>
138 77 103 69 hstem
-261 639 vstem
-261 95 rmoveto
19 -64 640 287 13 69 -519 280 -50 {90350ff9} callgsubr
59 -209 rmoveto
15 77 -674 -300 19 -64 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="90350ff9">
-63 464 -247 -2 -10 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,76 @@
<Glyph name="greater_equal_greater.liga" lsb="-1037" width="550">
<CharString>
{30a8b931} callgsubr
1478 -402 424 hintmask 11010000
{d074a68d} callsubr
-996 {bbfb8b2c} callgsubr
hintmask 11100000
{77242ba8} callsubr
980 {0377f142} callgsubr
-979 hlineto
34 24 rlineto
hintmask 11100000
12 68 -59 61 rlineto
998 hlineto
83 -84 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="d074a68d">
{7097f26b} callgsubr
103 -104 rlineto
return
</CharString>
<CharString index="3" fingerprint="77242ba8">
-344 -238 34 -61 244 170 rlineto
return
</CharString>
<CharString index="4" fingerprint="3776599f">
-158 -109 {33c8b3e3} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="30a8b931">
{03f44ce8} callsubr
hstemhm
-1037 424 -400 return
</CharString>
<CharString index="1" fingerprint="7097f26b">
208 599 rmoveto
-54 -53 return
</CharString>
<CharString index="2" fingerprint="bbfb8b2c">
hlineto
-153 157 {25bfa713} callgsubr
rlineto
return
</CharString>
<CharString index="3" fingerprint="25bfa713">
-54 -53 255 -257 -2 -9 return
</CharString>
<CharString index="4" fingerprint="0377f142">
hlineto
hintmask 11001000
{3776599f} callsubr
-80 -32 rmoveto
-87 -60 rlineto
return
</CharString>
<CharString index="5" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="6" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,63 @@
<Glyph name="greater_greater_equal.liga" lsb="-1037" width="550">
<CharString>
{30a8b931} callgsubr
1485 -1199 {fcf2278c} callgsubr
-613 312 rmoveto
-279 287 {25bfa713} callgsubr
-344 -238 34 -61 378 263 rlineto
1154 198 rmoveto
-958 {bbfb8b2c} callgsubr
hintmask 11001000
{77242ba8} callsubr
hintmask 11010000
920 {00ffbe03} callgsubr
-834 hlineto
34 24 rlineto
hintmask 11001000
12 68 -59 61 rlineto
876 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="77242ba8">
-344 -238 34 -61 244 170 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="30a8b931">
{03f44ce8} callsubr
hstemhm
-1037 424 -400 return
</CharString>
<CharString index="1" fingerprint="fcf2278c">
424 hintmask 11100000
return
</CharString>
<CharString index="2" fingerprint="25bfa713">
-54 -53 255 -257 -2 -9 return
</CharString>
<CharString index="3" fingerprint="bbfb8b2c">
hlineto
-153 157 {25bfa713} callgsubr
rlineto
return
</CharString>
<CharString index="4" fingerprint="00ffbe03">
hlineto
{14bcb405} callgsubr
return
</CharString>
<CharString index="5" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,52 @@
<Glyph name="hyphen_greater.liga" lsb="-431" width="550">
<CharString>
{2417f8b4} callsubr
-431 896 {0322b936} callgsubr
-789 {83c7393b} callsubr
806 {4701958a} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="2417f8b4">
258 69 hstemhm
return
</CharString>
<CharString index="1" fingerprint="eaf6837f">
424 hintmask 11000000
return
</CharString>
<CharString index="2" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
<CharString index="3" fingerprint="4701958a">
hlineto
hintmask 10100000
-312 -216 {867ee3c3} callsubr
</CharString>
<CharString index="4" fingerprint="867ee3c3">
{33c8b3e3} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="0322b936">
-402 {eaf6837f} callsubr
{7097f26b} callgsubr
217 -219 rlineto
return
</CharString>
<CharString index="1" fingerprint="7097f26b">
208 599 rmoveto
-54 -53 return
</CharString>
<CharString index="2" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="3" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,26 @@
<Glyph name="hyphen_hyphen.liga" lsb="-337" width="550">
<CharString>
259 68 hstem
-337 310 70 310 vstem
-39 259 rmoveto
{a122bbee} callgsubr
678 hmoveto
{a122bbee} callgsubr
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="a122bbee">
12 68 rlineto
-297 hlineto
-13 -68 rlineto
return
</CharString>
<CharString index="1" fingerprint="a122bbee">
12 68 rlineto
-297 hlineto
-13 -68 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,52 @@
<Glyph name="hyphen_hyphen_greater.liga" lsb="-981" width="550">
<CharString>
{2417f8b4} callsubr
-981 1446 {0322b936} callgsubr
-1339 {83c7393b} callsubr
1356 {4701958a} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="2417f8b4">
258 69 hstemhm
return
</CharString>
<CharString index="1" fingerprint="eaf6837f">
424 hintmask 11000000
return
</CharString>
<CharString index="2" fingerprint="83c7393b">
hlineto
-13 -69 rlineto
return
</CharString>
<CharString index="3" fingerprint="4701958a">
hlineto
hintmask 10100000
-312 -216 {867ee3c3} callsubr
</CharString>
<CharString index="4" fingerprint="867ee3c3">
{33c8b3e3} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="0322b936">
-402 {eaf6837f} callsubr
{7097f26b} callgsubr
217 -219 rlineto
return
</CharString>
<CharString index="1" fingerprint="7097f26b">
208 599 rmoveto
-54 -53 return
</CharString>
<CharString index="2" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="3" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,14 @@
<Glyph name="less_bar.liga" lsb="-269" width="550">
<CharString>
-354 75 450 75 vstem
341 704 rmoveto
-596 -378 -14 -69 438 -439 rlineto
75 hlineto
173 892 rlineto
-229 -797 rmoveto
-376 374 2 10 510 317 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,20 @@
<Glyph name="less_equal.2.liga" lsb="-283" width="600">
<CharString>
493 -141 69 hstem
-283 756 vstem
378 {90be0ec6} callgsubr
-25 63 -628 -280 -14 -69 557 -302 rlineto
-646 -157 rmoveto
615 hlineto
13 69 rlineto
-615 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="90be0ec6">
95 rmoveto
-467 252 2 10 560 247 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="less_equal.liga" lsb="-247" width="550">
<CharString>
138 77 103 69 hstem
-247 606 vstem
359 {90be0ec6} callgsubr
-24 63 -629 -280 -13 -69 528 -287 rlineto
-563 107 rmoveto
528 -287 43 64 -556 300 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="90be0ec6">
95 rmoveto
-467 252 2 10 560 247 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,58 @@
<Glyph name="less_equal_equal.liga" lsb="-1012" width="550">
<CharString>
{03f44ce8} callsubr
hstemhm
-1014 1486 -1484 {fcf2278c} callgsubr
-827 373 rmoveto
1341 hlineto
{b42578a3} callsubr
-1256 hlineto
hintmask 11010000
{0cd8acae} callgsubr
hintmask 11100000
1266 {00ffbe03} callgsubr
-1349 hlineto
-70 71 2 10 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="b42578a3">
15 69 rlineto
return
</CharString>
<CharString index="3" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="fcf2278c">
424 hintmask 11100000
return
</CharString>
<CharString index="1" fingerprint="0cd8acae">
139 96 {83946452} callsubr
-116 117 rlineto
return
</CharString>
<CharString index="2" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
<CharString index="3" fingerprint="00ffbe03">
hlineto
{14bcb405} callgsubr
return
</CharString>
<CharString index="4" fingerprint="14bcb405">
14 69 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,73 @@
<Glyph name="less_equal_greater.liga" lsb="-1012" width="550">
<CharString>
{03f44ce8} callsubr
hstemhm
-1014 1479 -1477 424 651 {fcf2278c} callgsubr
{d074a68d} callsubr
-984 hlineto
hintmask 11010000
{0cd8acae} callgsubr
1016 {0377f142} callgsubr
-1184 hlineto
-70 71 2 10 105 72 rlineto
1153 hlineto
83 -84 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="1" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="2" fingerprint="d074a68d">
{7097f26b} callgsubr
103 -104 rlineto
return
</CharString>
<CharString index="3" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
<CharString index="4" fingerprint="3776599f">
-158 -109 {33c8b3e3} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="fcf2278c">
424 hintmask 11100000
return
</CharString>
<CharString index="1" fingerprint="7097f26b">
208 599 rmoveto
-54 -53 return
</CharString>
<CharString index="2" fingerprint="0cd8acae">
139 96 {83946452} callsubr
-116 117 rlineto
return
</CharString>
<CharString index="3" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
<CharString index="4" fingerprint="0377f142">
hlineto
hintmask 11001000
{3776599f} callsubr
-80 -32 rmoveto
-87 -60 rlineto
return
</CharString>
<CharString index="5" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="6" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,57 @@
<Glyph name="less_equal_less.liga" lsb="-1012" width="550">
<CharString>
{53fa50ea} callsubr
-1012 424 676 424 vstem
168 301 rmoveto
{83815ada} callsubr
-979 hlineto
{0cd8acae} callgsubr
997 {e5b3db5a} callgsubr
-1030 -71 rmoveto
-70 71 2 10 105 72 rlineto
980 {5abe2a2a} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="53fa50ea">
{03f44ce8} callsubr
hstem
return
</CharString>
<CharString index="1" fingerprint="03f44ce8">
151 {2a39309a} callsubr
return
</CharString>
<CharString index="2" fingerprint="2a39309a">
69 153 69 return
</CharString>
<CharString index="3" fingerprint="83815ada">
344 237 -34 61 -226 -157 rlineto
return
</CharString>
<CharString index="4" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="0cd8acae">
139 96 {83946452} callsubr
-116 117 rlineto
return
</CharString>
<CharString index="1" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
<CharString index="2" fingerprint="e5b3db5a">
hlineto
165 -170 54 53 -255 257 rlineto
return
</CharString>
<CharString index="3" fingerprint="5abe2a2a">
hlineto
-53 -37 -12 -67 47 -49 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,49 @@
<Glyph name="less_exclam_hyphen_hyphen.liga" lsb="-1562" width="550">
<CharString>
0 110 148 69 hstemhm
-1562 424 202 245 hintmask 11100000
-857 233 rmoveto
52 hlineto
hintmask 11110000
{e1fb31a3} callgsubr
-281 305 rmoveto
{5509cf8e} callgsubr
381 hlineto
19 69 rlineto
-393 hlineto
876 hmoveto
-13 -69 rlineto
1011 hlineto
19 69 rlineto
-1385 -327 {78915a09} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
<CharString index="1" fingerprint="78915a09">
rmoveto
108 hlineto
22 110 rlineto
-107 hlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="e1fb31a3">
19 89 73 261 22 93 rrcurveto
-102 hlineto
-16 -93 -31 -261 -17 -89 rrcurveto
return
</CharString>
<CharString index="1" fingerprint="5509cf8e">
{83946452} callsubr
-222 224 rlineto
return
</CharString>
<CharString index="2" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,40 @@
<Glyph name="less_hyphen.liga" lsb="-462" width="550">
<CharString>
{2417f8b4} callsubr
-464 900 -898 {eaf6837f} callsubr
449 327 rmoveto
-793 {15f0e26a} callsubr
781 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2417f8b4">
258 69 hstemhm
return
</CharString>
<CharString index="1" fingerprint="eaf6837f">
424 hintmask 11000000
return
</CharString>
<CharString index="2" fingerprint="15f0e26a">
hlineto
hintmask 10100000
306 211 {5509cf8e} callgsubr
return
</CharString>
<CharString index="3" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="5509cf8e">
{83946452} callsubr
-222 224 rlineto
return
</CharString>
<CharString index="1" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,40 @@
<Glyph name="less_hyphen_hyphen.liga" lsb="-1012" width="550">
<CharString>
{2417f8b4} callsubr
-1014 1450 -1448 {eaf6837f} callsubr
449 327 rmoveto
-1343 {15f0e26a} callsubr
1331 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2417f8b4">
258 69 hstemhm
return
</CharString>
<CharString index="1" fingerprint="eaf6837f">
424 hintmask 11000000
return
</CharString>
<CharString index="2" fingerprint="15f0e26a">
hlineto
hintmask 10100000
306 211 {5509cf8e} callgsubr
return
</CharString>
<CharString index="3" fingerprint="83946452">
{64f993c2} callgsubr
279 -288 54 53 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="5509cf8e">
{83946452} callsubr
-222 224 rlineto
return
</CharString>
<CharString index="1" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,25 @@
<Glyph name="less_slash.liga" lsb="-462" width="550">
<CharString>
{c41cabed} callsubr
hstemhm
-462 424 -252 676 hintmask 10100000
323 718 rmoveto
-466 -670 -241 243 2 10 rlineto
hintmask 11000000
344 237 {64f993c2} callgsubr
275 -284 rlineto
hintmask 10100000
-103 -147 70 -20 606 871 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="c41cabed">
-182 900 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="64f993c2">
-34 61 -378 -263 -12 -67 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,51 @@
<Glyph name="plus_plus.liga" lsb="-428" width="550">
<CharString>
259 67 hstem
-3 448 vstem
263 326 rmoveto
{d7892153} callgsubr
-354 {f12d5fd2} callgsubr
37 188 rlineto
354 hlineto
-37 -188 rlineto
71 hlineto
37 188 rlineto
181 hlineto
14 67 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="95fad126">
rlineto
-71 hlineto
return
</CharString>
<CharString index="1" fingerprint="95fad126">
rlineto
-71 hlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d7892153">
36 187 {95fad126} callsubr
-36 -187 rlineto
return
</CharString>
<CharString index="1" fingerprint="f12d5fd2">
hlineto
{d7892153} callgsubr
-182 hlineto
-13 -67 rlineto
182 hlineto
-37 -188 rlineto
71 hlineto
return
</CharString>
<CharString index="2" fingerprint="d7892153">
36 187 {95fad126} callsubr
-36 -187 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,49 @@
<Glyph name="question_question.liga" lsb="-362" width="550">
<CharString>
0 109 hstem
-53 89 291 89 vstem
-324 679 rmoveto
{4143d396} callgsubr
380 hmoveto
{4143d396} callgsubr
-418 -679 {d2f9b0db} callsubr
358 -109 {d2f9b0db} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="d2f9b0db">
rmoveto
107 hlineto
22 109 rlineto
-107 hlineto
return
</CharString>
<CharString index="1" fingerprint="d2f9b0db">
rmoveto
107 hlineto
22 109 rlineto
-107 hlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="4143d396">
-16 -79 rlineto
190 -22 97 -30 -73 vvcurveto
-57 -58 -54 -176 -91 vhcurveto
25 -43 rlineto
215 108 83 81 84 vvcurveto
95 -116 55 -244 26 vhcurveto
return
</CharString>
<CharString index="1" fingerprint="4143d396">
-16 -79 rlineto
190 -22 97 -30 -73 vvcurveto
-57 -58 -54 -176 -91 vhcurveto
25 -43 rlineto
215 108 83 81 84 vvcurveto
95 -116 55 -244 26 vhcurveto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,38 @@
<Glyph name="slash_greater.liga" lsb="-406" width="550">
<CharString>
{c41cabed} callsubr
hstemhm
-406 676 -207 {eaf6837f} callsubr
208 599 rmoveto
-2 -2 64 92 {3eb247b4} callsubr
500 718 245 -247 -2 -9 rlineto
hintmask 10100000
-344 -238 {867ee3c3} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="c41cabed">
-182 900 return
</CharString>
<CharString index="1" fingerprint="eaf6837f">
424 hintmask 11000000
return
</CharString>
<CharString index="2" fingerprint="3eb247b4">
-63 29 -613 -880 70 -20 return
</CharString>
<CharString index="3" fingerprint="867ee3c3">
{33c8b3e3} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="33c8b3e3">
{3c7a34d4} callgsubr
rlineto
return
</CharString>
<CharString index="1" fingerprint="3c7a34d4">
34 -61 378 263 12 68 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,13 @@
<Glyph name="underscore_underscore.liga" lsb="-620" width="550">
<CharString>
-112 62 hstem
-620 1131 vstem
511 -50 rmoveto
-1120 hlineto
-11 -62 rlineto
1119 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,16 @@
<Glyph name="uniE0B0" code="0xe0b0" lsb="-20" width="550">
<CharString>
{99cad421} callsubr
609 313 rmoveto
-627 581 -2 -1099 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="99cad421">
-205 1099 hstem
-20 629 vstem
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,16 @@
<Glyph name="uniE0B2" code="0xe0b2" lsb="-20" width="550">
<CharString>
{99cad421} callsubr
-20 313 rmoveto
629 -518 -2 1099 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="99cad421">
-205 1099 hstem
-20 629 vstem
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -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>

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