56 Commits

Author SHA1 Message Date
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
482 changed files with 59879 additions and 24340 deletions
+35
View File
@@ -0,0 +1,35 @@
{
"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": "markypython",
"name": "Mark Skelton",
"avatar_url": "https://avatars3.githubusercontent.com/u/25914066?v=4",
"profile": "https://github.com/markypython",
"contributions": [
"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'
}
};
+117 -61
View File
@@ -1,10 +1,75 @@
# Operator Mono Ligatures
[![All Contributors](https://img.shields.io/badge/all_contributors-2-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.
## New Version 2.2
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" />
### 🎉 New in Version 2.2
With the awesome help from [Mark Skelton](https://github.com/markypython), 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
### Customize the generated font
In addition to the new ligatures, this version now allows you to customize what ligatures are added to a font.
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.
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.
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.
```ini
# name of profile (one or more sections, first should be name default)
[default]
# glyph=altglyph
greater_equal.liga=greater_equal.2.liga
# 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 ...
```
### New ligatures
In addition to the graphic above, the following new ligatures are available:
<img src="./images/new-ligatures.png"/>
### Help Wanted
As noted above, v2.0 only includes ligatures for **Operator Mono SSm Book**. 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
@@ -17,51 +82,21 @@ 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**)
- The original _Operator Mono_ font... of course.
- Install _fonttools_ from https://github.com/fonttools/fonttools
- Install Python (v2.7+)
- Run: `pip install fonttools`
- for Mac users it's better to run `pip3 install fonttools` - [info](https://stackoverflow.com/a/33416270/3191011)
- Node.js
## How to Install
1. Once all the prerequisites have been installed, clone this repo.
1. 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.
2. From the command line, run:
@@ -69,8 +104,14 @@ will merge the ligature definitions into a copy of the original font. The new fo
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`.
3. 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.
4. From the command line, run:
@@ -88,30 +129,45 @@ build
This will generate the new font files in the `build` folder. You can now install these fonts on your system.
---
## Configure Your Code Editor
<img src="./images/OperatorMonoAllTheThings.png" />
You can now select the newly generated font in your code editor. Make sure you enable font ligatures.
## GitHub
Add *Operator Mono* to GitHub code blocks using the [Stylus Extension](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne).
### VS Code
Create a style and enter the following:
```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; }
```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
## Thank You
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).
Thanks to Hoefler&Co for making such an amazing font. It makes writing code truly pleasurable.
<img src="./images/vsoperatormono.png" />
Thanks also to all of you for your kinds words of encouragement and feedback. I really
appreciate it.
## Hyper shell
## Contributors ✨
Add *Operator Mono* to [Hyper](https://hyper.is/) a JS/CSS/HTML Terminal.
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<img src="./images/hyper terminal.png" />
<!-- 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/markypython"><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-markypython" 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: 141 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>
-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>
-976
View File
@@ -1,976 +0,0 @@
<GlobalSubrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
<CharString index="0">
rmoveto
23 -36 68 33 108 65 59 53 rlinecurve
-65 63 -48 -57 -87 -81 -58 -40 rlinecurve
return
</CharString>
<CharString index="1">
rmoveto
54 -51 45 -163 15 vhcurveto
8 95 rlineto
188 hlineto
6 57 rlineto
-248 hlineto
-15 -198 rlineto
159 -11 54 -25 -33 vvcurveto
-42 -59 -25 -164 -11 vhcurveto
4 -61 rlineto
194 13 87 55 72 vvcurveto
return
</CharString>
<CharString index="2">
rmoveto
126 105 106 162 157 -86 92 -122 -126 -106 -108 -159 -158 88 -92 121 hvcurveto
13 67 rmoveto
-83 -57 70 128 120 56 66 80 84 57 -71 -127 -121 -56 -65 -81 hvcurveto
endchar
</CharString>
<CharString index="3">
rmoveto
71 66 56 92 56 hvcurveto
-48 25 rlineto
-70 -47 -39 -37 -52 hhcurveto
-49 -37 31 80 -49 hvcurveto
-57 -33 rlineto
-97 54 61 -47 70 hhcurveto
return
</CharString>
<CharString index="4">
87 hlineto
15 117 21 236 13 267 rrcurveto
-78 hlineto
-5 -124 -16 -329 -7 -61 rrcurveto
-3 hlineto
-30 110 -30 111 -29 109 rrcurveto
-50 hlineto
-28 -108 -25 -100 -33 -122 rrcurveto
-4 hlineto
-6 61 -18 329 -5 124 rrcurveto
-82 hlineto
13 -267 20 -236 15 -117 rrcurveto
88 hlineto
endchar
</CharString>
<CharString index="5">
rmoveto
127 77 80 139 hvcurveto
416 -83 -429 vlineto
-94 -37 -40 -76 -74 -45 47 102 vhcurveto
414 -84 -420 vlineto
-139 73 -76 122 vhcurveto
endchar
</CharString>
<CharString index="6">
rmoveto
82 hlineto
2 136 rlineto
-83 hlineto
219 -136 rmoveto
82 hlineto
2 136 rlineto
-83 hlineto
return
</CharString>
<CharString index="7">
rmoveto
8 -74 rlineto
270 14 67 104 169 vvcurveto
57 0 268 -1 39 vhcurveto
15 -49 -46 8 -48 hhcurveto
-140 -121 -98 -158 -129 79 -78 106 58 47 21 27 35 hvcurveto
-2 -139 -31 -28 -232 -18 rrcurveto
155 202 rmoveto
-77 -58 53 108 109 66 59 86 31 30 -6 -9 32 hvcurveto
-1 -76 1 -137 -67 vvcurveto
-20 -32 -39 -14 -39 hhcurveto
endchar
</CharString>
<CharString index="8">
18 callgsubr
rmoveto
-61 -40 30 52 67 59 39 179 -19 hvcurveto
-48 1 -36 1 -32 vhcurveto
-30 -38 -52 -23 -49 hhcurveto
endchar
</CharString>
<CharString index="9">
rmoveto
hintmask 00111110
84 6 -57 207 -59 204 -65 208 17 callsubr
hlineto
hintmask 01011110
-65 -209 -59 -206 -57 -207 rrcurveto
83 hlineto
17 63 16 64 17 63 rrcurveto
209 hlineto
hintmask 10011110
18 -64 17 -65 17 -64 rrcurveto
hintmask 00111110
-160 554 rmoveto
8 hlineto
29 -99 27 -100 27 -99 rrcurveto
-175 hlineto
28 99 27 99 29 100 rrcurveto
endchar
</CharString>
<CharString index="10">
-7 -140 -7 -118 -8 -132 rrcurveto
-4 hlineto
-10 32 -70 199 -8 25 rrcurveto
-50 hlineto
-7 -24 -69 -199 -10 -31 rrcurveto
-4 hlineto
-10 132 -7 117 -7 139 rrcurveto
-80 hlineto
11 -184 21 -190 18 -116 rrcurveto
73 hlineto
endchar
</CharString>
<CharString index="11">
295 57 -213 hlineto
129 89 71 65 75 vvcurveto
66 -61 53 -208 -1 vhcurveto
-5 -58 rlineto
162 -3 46 -27 -47 vvcurveto
-60 -78 -59 -145 -97 vhcurveto
return
</CharString>
<CharString index="12">
165 122 -4 53 rlineto
-269 -57 hlineto
195 2 rlineto
-3 vlineto
-162 -121 rlineto
-33 vlineto
return
</CharString>
<CharString index="13">
78 -263 rmoveto
-56 -31 26 35 31 27 26 47 19 hvcurveto
52 -25 48 -23 -34 vvcurveto
-31 -33 -24 -54 vhcurveto
endchar
</CharString>
<CharString index="14">
rmoveto
4 hlineto
176 151 -41 40 -131 -112 -133 113 -51 -49 rlineto
return
</CharString>
<CharString index="15">
-1 callgsubr
-148 1 2 31 46 180 15 51 rlinecurve
-70 5 -33 -119 -17 -126 1 -77 rlinecurve
203 1 -1 -81 rlineto
62 hlineto
endchar
</CharString>
<CharString index="16">
rmoveto
24 -55 rlineto
157 57 75 90 113 vvcurveto
104 -64 56 -90 -84 -71 -56 -82 -118 145 -31 98 81 vhcurveto
-13 -69 -52 -46 -125 -44 rrcurveto
8 232 rmoveto
49 40 31 48 56 41 -37 -77 vhcurveto
-4 vlineto
-88 -60 -97 20 78 vvcurveto
endchar
</CharString>
<CharString index="17">
-90 callsubr
-74 -148 -66 callgsubr
return
</CharString>
<CharString index="18">
rmoveto
-2 80 1 96 128 vvcurveto
-78 hlineto
-92 2 -93 1 -67 vhcurveto
-198 -13 -64 98 165 vvcurveto
138 49 102 267 -1 vhcurveto
-5 80 rlineto
-304 -11 -92 -146 -177 vvcurveto
-217 128 -133 295 63 vhcurveto
return
</CharString>
<CharString index="19">
-12 64 -34 -21 26 -21 223.48 53.52 150 70 return
</CharString>
<CharString index="20">
rmoveto
488 154 66 -390 -66 153 -488 -153 -66 388 vlineto
6 66 rlineto
endchar
</CharString>
<CharString index="21">
82.5 137.5 82.5 return
</CharString>
<CharString index="22">
rmoveto
-1 -77 rlineto
287 -16 107 101 95 148 -309 43 107 vvcurveto
51 57 40 217 -15 vhcurveto
-5 77 rlineto
-255 14 -99 -92 -88 -145 309 -38 -114 vvcurveto
-59 -82 -51 -226 19 vhcurveto
return
</CharString>
<CharString index="23">
rmoveto
68 -8 rlineto
hintmask 10100000
45 118 63 116 76 112 rrcurveto
56 -296 vlineto
-5 -58 rlineto
232 hlineto
2 -3 rlineto
hintmask 11000000
-78 -110 -62 -110 -45 -113 rrcurveto
endchar
</CharString>
<CharString index="24">
-184 428 -258 hlineto
-6 -57 183 -8 rlineto
-363 -184 vlineto
endchar
</CharString>
<CharString index="25">
rmoveto
126 105 106 162 hvcurveto
hintmask 10011100
74 -19 60 -33 42 vhcurveto
42 61 rlineto
hintmask 01101100
-48 32 -37 -53 rlineto
22 -32 -38 11 -43 hhcurveto
-126 -106 -108 -159 -76 20 -60 35 -43 hvcurveto
-42 -59 rlineto
hintmask 10101100
48 -32 36 52 rlineto
-21 32 38 -11 42 hhcurveto
-128 265 rmoveto
121 57 65 80 33 29 -11 -21 23 vhcurveto
-195 -282 rlineto
-17 32 -10 43 53 vvcurveto
141 -199 rmoveto
-32 -29 10 20 -22 hvcurveto
195 282 rlineto
17 -32 9 -42 -51 vvcurveto
-122 -56 -65 -82 vhcurveto
endchar
</CharString>
<CharString index="26">
rmoveto
hintmask 10011011
126 -240 rlineto
hintmask 00110111
89 13 -148 268 rlineto
60 43 44 56 82 vvcurveto
127 -96 82 -285 -42 vhcurveto
hintmask 01011011
-619 83 226 vlineto
61 vmoveto
268 vlineto
151 22 65 -53 -90 vvcurveto
-63 -33 -48 -48 -32 vhcurveto
endchar
</CharString>
<CharString index="27">
136 -13 50 -27 -31 vvcurveto
-35 -57 -23 -168 -5 vhcurveto
return
</CharString>
<CharString index="28">
rmoveto
28 66 rlineto
-175 53 -76 39 53 58 88 42 63 vvcurveto
hintmask 10110000
39 -31 40 -84 21 vhcurveto
hintmask 10101000
85 23 32 41 37 vvcurveto
hintmask 11000000
56 -96 49 52 vvcurveto
45 78 40 181 51 vhcurveto
-26 67 rlineto
-230 -73 -81 -69 -69 vvcurveto
hintmask 10101000
1 -75 100 -43 -45 vvcurveto
-30 -36 -23 -125 -11 vhcurveto
-2 -59 rlineto
hintmask 10110000
109 -7 48 -31 -38 vvcurveto
hintmask 10100000
-47 -92 -43 -79 vvcurveto
-74 78 -46 226 -73 vhcurveto
endchar
</CharString>
<CharString index="29">
60 26 34 32 47 vvcurveto
58 -60 38 -79 -98 -53 -55 -51 return
</CharString>
<CharString index="30">
18 -21 24 -14 callsubr
187 63 298 71 return
</CharString>
<CharString index="31">
9 68 rlineto
-240 -11 -69 66 129 vvcurveto
104 49 69 253 -1 vhcurveto
-6 77 rlineto
-285 -6 -91 -119 -135 vvcurveto
return
</CharString>
<CharString index="32">
414 hlineto
7 73 -330 -1 323 477 rlineto
71 -404 vlineto
-6 -73 321 1 -325 -477 rlineto
endchar
</CharString>
<CharString index="33">
rmoveto
hintmask 00111111
84 6 -57 207 -59 204 -65 208 17 callsubr
hlineto
hintmask 01011111
-65 -209 -59 -206 -57 -207 rrcurveto
83 hlineto
17 63 16 64 17 63 rrcurveto
209 hlineto
hintmask 10011111
18 -64 17 -65 17 -64 rrcurveto
hintmask 00111111
-160 554 rmoveto
8 hlineto
29 -99 27 -100 27 -99 rrcurveto
-175 hlineto
28 99 27 99 29 100 rrcurveto
endchar
</CharString>
<CharString index="34">
rmoveto
62 37 -33 -94 hvcurveto
-305 81 332 vlineto
120 -58 49 -88 return
</CharString>
<CharString index="35">
5 55 -57 -1 1 137 -62 -5 2 -132 return
</CharString>
<CharString index="36">
rmoveto
37 -13 60 89 16 79 -11 83 rlinecurve
-91 -1 19 -75 7 -73 -37 -89 rlinecurve
return
</CharString>
<CharString index="37">
0 62 574.5 61.5 -58 -20 hstemhm
237 82 return
</CharString>
<CharString index="38">
-73 callgsubr
-70 -53 -31 -34 -41 vhcurveto
return
</CharString>
<CharString index="39">
-54 callgsubr
hintmask 10110000
-51 callsubr
hintmask 11010000
-74 callsubr
return
</CharString>
<CharString index="40">
-60 callsubr
-361 -222 -66 callgsubr
return
</CharString>
<CharString index="41">
rmoveto
-55 428 55 vlineto
return
</CharString>
<CharString index="42">
2 -14 -15 1 -15 hhcurveto
-149 -128 -102 -179 -145 78 -87 106 60 49 28 33 35 hvcurveto
-113 6 rmoveto
-79 -56 61 125 124 70 67 90 26 27 -5 -9 28 hvcurveto
-137 1 -99 2 -85 vhcurveto
-24 -30 -38 -18 -41 hhcurveto
endchar
</CharString>
<CharString index="43">
45.28 152.9 53 hstem
120 61 185 63 vstem
173 return
</CharString>
<CharString index="44">
-78 callgsubr
-37 callgsubr
return
</CharString>
<CharString index="45">
hstem
66 80 259 78.75 vstem
return
</CharString>
<CharString index="46">
rmoveto
94 -274 rlineto
75 hlineto
17 116 21 190 11 184 rrcurveto
-76 hlineto
return
</CharString>
<CharString index="47">
hintmask 11011000
460 -8 rmoveto
9 68 rlineto
-164 3 -47 22 85 vvcurveto
257 200 63 -200 143 vlineto
hintmask 11101000
18 callsubr
-136 -93 vlineto
-8 -63 rlineto
101 -270 hlineto
hintmask 11011000
-121 71 -47 212 3 vhcurveto
return
</CharString>
<CharString index="48">
71 211 63 204 71 return
</CharString>
<CharString index="49">
-49 callgsubr
-63 -146 -66 callgsubr
return
</CharString>
<CharString index="50">
55 304 55 hstem
109 66 200 66 vstem
269 return
</CharString>
<CharString index="51">
rmoveto
55 -51 rlineto
217 178 86 147 145 vvcurveto
141 -85 144 -214 177 vhcurveto
-55 -53 rlineto
200 -158 74 -128 -126 vvcurveto
-128 -73 -127 -205 -161 vhcurveto
endchar
</CharString>
<CharString index="52">
rmoveto
-55 51 rlineto
-216 -177 -87 -147 -145 vvcurveto
-142 85 -144 214 -176 vhcurveto
56 51 rlineto
-201 159 -74 128 127 vvcurveto
127 73 128 205 160 vhcurveto
endchar
</CharString>
<CharString index="53">
368 hlineto
7 62 rlineto
-166 hlineto
-1 114 -2 96 -1 85 rrcurveto
return
</CharString>
<CharString index="54">
394 hlineto
7 62 rlineto
-160 636 -226 hlineto
return
</CharString>
<CharString index="55">
-12 67 510 67 hstem
56 78 282 79 vstem
268 -12 rmoveto
139 88 132 199 196 -74 117 -139 -139 -87 -131 -200 -195 74 -118 138 hvcurveto
return
</CharString>
<CharString index="56">
-55 -29 39 53 47 28 49 59 42 hvcurveto
32 -38 41 -46 48 -57 rrcurveto
-61 -39 -43 -28 -42 hhcurveto
return
</CharString>
<CharString index="57">
-9.14 70.62 -41.48 -21 return
</CharString>
<CharString index="58">
131 425 rmoveto
-96 callgsubr
return
</CharString>
<CharString index="59">
-15 69 512 69 hstem
46 85 288 85 vstem
return
</CharString>
<CharString index="60">
377 hlineto
8 71 rlineto
-301 549 -84 hlineto
return
</CharString>
<CharString index="61">
130 56 147 60.5 return
</CharString>
<CharString index="62">
-45 58 -329 -277 rlineto
-69 vlineto
332 -279 46 57 return
</CharString>
<CharString index="63">
hstem
-64 callsubr
return
</CharString>
<CharString index="64">
61 288 -58 callsubr
return
</CharString>
<CharString index="65">
0 62 366.5 61.5 18 -20 return
</CharString>
<CharString index="66">
hstem
55 82 277 81 vstem
return
</CharString>
<CharString index="67">
21 -21 620 -20 22 -20 hstemhm
234 84 hintmask 10110000
return
</CharString>
<CharString index="68">
-5.25 73.25 480 80 return
</CharString>
<CharString index="69">
-7 65 -64 68 161 52 -48.5 5 callsubr
149 69 -65 67 hstemhm
34 76 124 70 135 74 hintmask 0101011110000000
return
</CharString>
<CharString index="70">
-46 43 -30 48 -26 vhcurveto
return
</CharString>
<CharString index="71">
hintmask 11010000
78 hmoveto
-31 callsubr
return
</CharString>
<CharString index="72">
50 -54 callsubr
return
</CharString>
<CharString index="73">
0 106 514 -20 hstem
51 82 289 78 vstem
return
</CharString>
<CharString index="74">
33 59 32 79 22 89 -70 9 rcurveline
-14 -68 -21 -66 -23 -54 rrcurveto
return
</CharString>
<CharString index="75">
45 -57 333 280 rlineto
69 vlineto
return
</CharString>
<CharString index="76">
443 hlineto
6 62 rlineto
return
</CharString>
<CharString index="77">
-20 callsubr
92 55 return
</CharString>
<CharString index="78">
130 112 116 191 191 -105 108 -131 -132 -98 -124 -185 vhcurveto
48 2 rmoveto
161 return
</CharString>
<CharString index="79">
21 -21 432 69 -9 -20 hstemhm
88 81 221 81 hintmask 11011000
return
</CharString>
<CharString index="80">
-8 68 367 63 136 -20 27 -20 hstemhm
177 81 return
</CharString>
<CharString index="81">
0 -59 callgsubr
return
</CharString>
<CharString index="82">
-9 callgsubr
hstem
78 return
</CharString>
<CharString index="83">
-101 callgsubr
hintmask 11110010
return
</CharString>
<CharString index="84">
rmoveto
243 -222 54 56 -232 207 238 205 -54 56 -244 -221 rlineto
endchar
</CharString>
<CharString index="85">
-61 callsubr
224 85 vstem
return
</CharString>
<CharString index="86">
-152 -21 211 65 329 69 return
</CharString>
<CharString index="87">
0 71 549 -20 hstem
113 84 return
</CharString>
<CharString index="88">
0 62 367 61 return
</CharString>
<CharString index="89">
15 -21 27 -21 27 -21 213 60 207 -20 26 -20 227 -20 27 -20 hstemhm
101 81 return
</CharString>
<CharString index="90">
rmoveto
54 -57 244 221 5 82 -243 221 -54 -56 232 -207 rlineto
endchar
</CharString>
<CharString index="91">
40 54 34 201 -18 vhcurveto
return
</CharString>
<CharString index="92">
-70 callgsubr
hintmask 11010000
return
</CharString>
<CharString index="93">
rmoveto
-75 -6 rlineto
-886 75 vlineto
return
</CharString>
<CharString index="94">
0 hflex1
return
</CharString>
<CharString index="95">
8 callsubr
245.36 55 return
</CharString>
<CharString index="96">
443 51 69 153 -25 callgsubr
1494 vstem
1571 return
</CharString>
<CharString index="97">
rmoveto
-248 hlineto
-3 -66 rlineto
328 873 -326 -66 249 hlineto
endchar
</CharString>
<CharString index="98">
69 153 69 return
</CharString>
<CharString index="99">
-14 66 -33 -21 439 66 -12 -20 hstemhm
55 81 279 80 hintmask 10101100
return
</CharString>
<CharString index="100">
-88 -56 -45 -63 -75 vvcurveto
-80 49 -62 95 64 64 34 77 51 vhcurveto
28 return
</CharString>
<CharString index="101">
hstemhm
80 75.5 return
</CharString>
<CharString index="102">
hstem
233 83 vstem
return
</CharString>
<CharString index="103">
-1 callgsubr
rlineto
return
</CharString>
<CharString index="104">
59 hstemhm
148 78 -75 81 11 77 -71 73 hintmask 10100000
455 return
</CharString>
<CharString index="105">
-83 6 -51 -75 -53 -69 -58 -68 rlinecurve
-76 -2 rlineto
428 vlineto
return
</CharString>
<CharString index="106">
rmoveto
52 -1 -72 callgsubr
return
</CharString>
<CharString index="107">
0 71 111 62 38 63 204 71 hstem
262 73 vstem
return
</CharString>
<CharString index="108">
rmoveto
3 callgsubr
</CharString>
<CharString index="109">
-19 hlineto
-6 2 -3 5 4 2 2 4 1 vhcurveto
5 hlineto
return
</CharString>
<CharString index="110">
-47 callgsubr
endchar
</CharString>
<CharString index="111">
98 hlineto
5 120 rlineto
-98 hlineto
return
</CharString>
<CharString index="112">
78.41 return
</CharString>
<CharString index="113">
76.5 return
</CharString>
<CharString index="114">
84.5 -81.5 81 hintmask 00000000
return
</CharString>
<CharString index="115">
86 12 -188 249 62 73 59 79 56 79 rlinecurve
return
</CharString>
<CharString index="116">
187 -73 -187 -178 -68 178 -187 73 return
</CharString>
<CharString index="117">
rmoveto
113 hlineto
3 110 rlineto
-114 hlineto
endchar
</CharString>
<CharString index="118">
82.5 hintmask 00000000
return
</CharString>
<CharString index="119">
6 69 rlineto
-317 -69 hlineto
return
</CharString>
<CharString index="120">
hlineto
17 172 rlineto
-59 hlineto
-17 -172 rlineto
return
</CharString>
<CharString index="121">
66 741 66 hstem
337 77 vstem
337 return
</CharString>
<CharString index="122">
0 71 348 71 return
</CharString>
<CharString index="123">
602 rmoveto
-47 -58 return
</CharString>
<CharString index="124">
hstemhm
67 80 return
</CharString>
<CharString index="125">
-150 55 return
</CharString>
<CharString index="126">
21 -21 549 71 hstem
234 84 vstem
return
</CharString>
<CharString index="127">
29 37 24 124 11 vhcurveto
3 58 rlineto
return
</CharString>
<CharString index="128">
55 93 -67 callsubr
return
</CharString>
<CharString index="129">
-20 callgsubr
vstem
return
</CharString>
<CharString index="130">
rmoveto
119 hlineto
return
</CharString>
<CharString index="131">
118.5 hintmask 11010000
220 return
</CharString>
</GlobalSubrs>
-22
View File
@@ -1,22 +0,0 @@
<hmtx>
<mtx name="ampersand_ampersand.liga" width="1100" lsb="108"/>
<mtx name="bar_bar.liga" width="1100" lsb="312"/>
<mtx name="bar_greater.liga" width="1100" lsb="287"/>
<mtx name="equal_equal.liga" width="1100" lsb="78"/>
<mtx name="equal_equal_equal.liga" width="1650" lsb="78"/>
<mtx name="equal_equal_greater.liga" width="1650" lsb="78"/>
<mtx name="equal_greater.liga" width="1100" lsb="78"/>
<mtx name="exclam_equal.liga" width="1100" lsb="78"/>
<mtx name="exclam_equal_equal.liga" width="1650" lsb="78"/>
<mtx name="greater_equal.liga" width="1100" lsb="187"/>
<mtx name="hyphen_greater.liga" width="1100" lsb="78"/>
<mtx name="hyphen_hyphen.liga" width="1100" lsb="181"/>
<mtx name="hyphen_hyphen_greater.liga" width="1650" lsb="78"/>
<mtx name="less_bar.liga" width="1100" lsb="216"/>
<mtx name="less_equal.liga" width="1100" lsb="245"/>
<mtx name="less_equal_equal.liga" width="1650" lsb="78"/>
<mtx name="less_exclam_hyphen_hyphen.liga" width="2200" lsb="78"/>
<mtx name="less_hyphen.liga" width="1100" lsb="78"/>
<mtx name="less_hyphen_hyphen.liga" width="1650" lsb="78"/>
<mtx name="plus_plus.liga" width="1100" lsb="123"/>
</hmtx>
-45
View File
@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
Book
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
H&amp;Co: Operator Mono Lig Book: 1.200
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
OperatorMonoLig-Book
</namerecord>
<namerecord nameID="16" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig
</namerecord>
<namerecord nameID="17" platformID="1" platEncID="0" langID="0x0" unicode="True">
Book
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
H&amp;Co: Operator Mono Lig Book: 1.200
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
OperatorMonoLig-Book
</namerecord>
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig
</namerecord>
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
Book
</namerecord>
</name>
-980
View File
@@ -1,980 +0,0 @@
<Subrs>
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
<CharString index="0">
rmoveto
8 69 -237 6 -73 44 -8 116 rlinecurve
335 8 rlineto
162 18 -68 108 -134 hhcurveto
-127 -104 -115 -149 -159 83 -89 307 -1 hvcurveto
-173 446 rmoveto
82 39 -59 -94 1 hvcurveto
-259 -8 rlineto
105 6 50 56 81 hhcurveto
endchar
</CharString>
<CharString index="1">
rmoveto
147 94 121 218 -1 hvcurveto
200 -79 111 -139 -147 -93 -120 -219 -199 80 -112 138 vhcurveto
8 581 rmoveto
95 52 -90 -170 -166 -49 -86 -92 -96 -51 90 170 166 48 86 93 hvcurveto
endchar
</CharString>
<CharString index="2">
rmoveto
hintmask 00111111
16 callsubr
-104 callsubr
hintmask 10011111
-79 61 -48 89 77 57 35 37 40 vhcurveto
hintmask 01011111
2 -22 4 -31 1 -10 rrcurveto
hintmask 10011111
-99 callgsubr
</CharString>
<CharString index="3">
-4 70 -4 69 102 vvcurveto
189 -76 59 -283 8 vhcurveto
-9 -70 219 -8 62 -29 7 -113 rlinecurve
-217 13 -100 -76 -101 vvcurveto
return
</CharString>
<CharString index="4">
rmoveto
84 71 55 82 118 -145 32 -99 -82 hvcurveto
13 68 52 47 125 45 -23 55 rcurveline
-157 -57 -75 -91 -113 vvcurveto
-104 63 -55 91 vhcurveto
6 53 rmoveto
-56 -42 37 77 hvcurveto
4 vlineto
89 59 96 -20 -78 vvcurveto
-49 -38 -30 -49 vhcurveto
endchar
</CharString>
<CharString index="5">
298 hlineto
5 55 rlineto
-114 356 hlineto
-64 -5 rlineto
-60 vlineto
-120 -16 2 -48 118 7 rlineto
-234 -125 vlineto
return
</CharString>
<CharString index="6">
rmoveto
133 -114 51 49 -176 144 rlineto
-4 hlineto
-176 -153 40 -39 rlineto
return
</CharString>
<CharString index="7">
rmoveto
24 36 -55 42 -92 84 -50 54 rlinecurve
-60 -67 62 -49 103 -65 68 -35 rlinecurve
return
</CharString>
<CharString index="8">
rmoveto
41 -13 55 64 19 79 -9 67 rlinecurve
-100 -5 22 -58 5 -64 -33 -70 rlinecurve
endchar
</CharString>
<CharString index="9">
rmoveto
hintmask 00111100
84 6 -57 207 -59 204 -65 208 17 callsubr
hlineto
hintmask 01011100
-65 -209 -59 -206 -57 -207 rrcurveto
83 hlineto
17 63 16 64 17 63 rrcurveto
209 hlineto
hintmask 10011100
18 -64 17 -65 17 -64 rrcurveto
hintmask 00111100
-160 554 rmoveto
8 hlineto
29 -99 27 -100 27 -99 rrcurveto
-175 hlineto
28 99 27 99 29 100 rrcurveto
endchar
</CharString>
<CharString index="10">
rmoveto
hintmask 0100011110000000
5 -56 rlineto
hintmask 0010101110000000
75 5 rlineto
-5 113 -2 160 214 vvcurveto
-81 hlineto
hintmask 1000011110000000
-172 2 -128 2 -88 vhcurveto
-27 -37 -41 -18 -47 hhcurveto
-61 -36 32 96 hvcurveto
308 vlineto
hintmask 1001001110000000
-81 -6 rlineto
-329 vlineto
-121 57 -49 87 vhcurveto
hintmask 1000011110000000
70 52 32 34 41 hvcurveto
endchar
</CharString>
<CharString index="11">
rmoveto
hintmask 01000111
5 -56 rlineto
hintmask 00101011
75 5 rlineto
-5 113 -2 160 214 vvcurveto
-81 hlineto
hintmask 10000111
-172 2 -128 2 -88 vhcurveto
-27 -37 -41 -18 -47 hhcurveto
-61 -36 32 96 hvcurveto
308 vlineto
hintmask 10010011
-81 -6 rlineto
-329 vlineto
-121 57 -49 87 vhcurveto
hintmask 10000111
70 52 32 34 41 hvcurveto
endchar
</CharString>
<CharString index="12">
rmoveto
-70 callsubr
hintmask 11011000
-63 callgsubr
hintmask 11100100
-63 callsubr
hintmask 11011000
-92 callsubr
hintmask 11100100
-94 callgsubr
</CharString>
<CharString index="13">
rmoveto
50 46 54 85 36 hvcurveto
-46 20 rlineto
-59 -27 -25 -34 -25 -42 -41 101 -64 hhcurveto
-51 -46 -54 -85 -35 hvcurveto
45 -20 rlineto
58 27 25 34 26 42 41 -100 64 hhcurveto
return
</CharString>
<CharString index="14">
-87 callsubr
hintmask 11100000
-95 callgsubr
hintmask 11010000
-80 callgsubr
endchar
</CharString>
<CharString index="15">
-71 313 rmoveto
27 28 24 52 52 30 -24 -33 -31 -28 -25 -44 -18 vhcurveto
-48 23 -42 23 34 vvcurveto
return
</CharString>
<CharString index="16">
rmoveto
104 68 87 126 124 -58 77 -103 -104 -67 -87 -126 -125 58 -76 102 hvcurveto
5 359 rmoveto
66 35 -58 -98 -93 -33 -55 -66 -66 -35 58 98 93 32 55 67 hvcurveto
endchar
</CharString>
<CharString index="17">
135 425 rmoveto
-102 callsubr
return
</CharString>
<CharString index="18">
rmoveto
39 -26 52 52 62 78 34 56 rlinecurve
-81 39 -23 -58 -45 -86 -38 -55 rlinecurve
208 -2 rmoveto
39 -24 53 52 61 77 35 56 rlinecurve
-84 35 -23 -59 -43 -81 -38 -56 rlinecurve
return
</CharString>
<CharString index="19">
8 71 rlineto
-298 211 253 63 -253 204 293 71 -376 -620 return
</CharString>
<CharString index="20">
rmoveto
5 -60 rlineto
207 6 77 53 66 vvcurveto
47 -46 39 -129 20 vhcurveto
return
</CharString>
<CharString index="21">
rmoveto
7 -75 166 20 47 46 66 173 rlinecurve
hintmask 11010000
64 162 52 146 41 121 rrcurveto
-78 hlineto
-26 -69 -70 -221 -37 -100 rrcurveto
-10 hlineto
hintmask 10110000
-55 125 -56 142 -49 125 -83 -5 rcurveline
49 -120 94 -227 57 -125 9 -2 rcurveline
-34 -80 -29 -17 -125 -19 rrcurveto
endchar
</CharString>
<CharString index="22">
rmoveto
7 68 -166 4 -33 44 -1 114 rlinecurve
209 5 rlineto
167 11 -44 100 -93 hhcurveto
-54 -41 -31 -55 -25 hvcurveto
hintmask 1010101110000000
-28 58 -60 19 -118 7 -6 -69 rcurveline
144 -9 32 -25 3 -116 rrcurveto
-135 -3 -65 -57 -99 vvcurveto
-78 44 -45 62 59 44 36 40 26 vhcurveto
hintmask 0101011110000000
35 -48 68 -26 125 -1 rrcurveto
-122 435 rmoveto
47 18 -52 -100 -1 hvcurveto
-135 -2 rlineto
107 3 23 47 45 hhcurveto
hintmask 1010011110000000
-206 -371 rmoveto
-35 -24 25 52 60 40 28 84 hvcurveto
-43 4 -38 11 -32 vhcurveto
-31 -20 -27 -21 -33 hhcurveto
endchar
</CharString>
<CharString index="23">
rmoveto
7 71 rlineto
-259 -11 -68 87 167 vvcurveto
142 50 92 271 3 vhcurveto
-5 80 rlineto
-304 -10 -98 -148 -170 vvcurveto
-186 89 -139 317 22 vhcurveto
endchar
</CharString>
<CharString index="24">
rmoveto
147 94 121 218 -1 hvcurveto
hintmask 10011100
101 -20 79 -38 53 vhcurveto
39 71 rlineto
hintmask 01101100
-53 28 -29 -56 rlineto
23 -32 -39 12 -46 hhcurveto
-147 -93 -120 -219 -102 21 -79 39 -53 hvcurveto
-39 -70 rlineto
hintmask 10101100
52 -28 30 55 rlineto
-22 32 38 -12 45 hhcurveto
-134 329 rmoveto
167 49 85 93 38 31 -14 -28 24 vhcurveto
-209 -380 rlineto
-17 43 -9 56 71 vvcurveto
148 -260 rmoveto
-38 -32 14 28 -23 hvcurveto
209 380 rlineto
17 -42 9 -57 -71 vvcurveto
-167 -50 -85 -92 vhcurveto
endchar
</CharString>
<CharString index="25">
-50 callgsubr
286 59 214.43 -55 callsubr
hintmask 10110110
501 322 rmoveto
hintmask 01101110
240 -114 101 -302 -42 vhcurveto
-277 -70 -59 70 -286 vlineto
hintmask 10110110
278 -42 138 122 243 vvcurveto
-334 -256 rmoveto
219 128 vlineto
3 59 rlineto
-131 211 hlineto
180 22 70 -81 -187 vvcurveto
-183 -76 -86 -174 26 vhcurveto
endchar
</CharString>
<CharString index="26">
-69 callgsubr
hintmask 10111000
-5 56 -75 -5 rlineto
5 -113 2 -160 -214 vvcurveto
81 hlineto
hintmask 11011000
171 -2 129 -2 89 vhcurveto
26 38 41 17 47 hhcurveto
endchar
</CharString>
<CharString index="27">
-250 19 -84 -80 -78 -123 274 -14 -87 vvcurveto
-44 -61 -36 -214 17 vhcurveto
-3 -72 rlineto
275 -15 87 77 80 125 -276 22 81 vvcurveto
return
</CharString>
<CharString index="28">
rmoveto
-80 -51 -47 -61 -58 54 -46 77 80 52 46 62 56 -54 48 -78 hvcurveto
return
</CharString>
<CharString index="29">
84 206 hlineto
hintmask 11010000
199 414 rlineto
-86 hlineto
-153 -334 rlineto
hintmask 10110000
-156 336 -89 -4 201 -412 rlineto
endchar
</CharString>
<CharString index="30">
69 -38 -21 26 -21 484 -20 23 1 callsubr
return
</CharString>
<CharString index="31">
407 hlineto
6 72 -320 -2 311 352 rlineto
68 -395 vlineto
-6 -72 308 2 -311 -351 rlineto
endchar
</CharString>
<CharString index="32">
11 -21 31 -14 callsubr
225 61 270.82 70.26 -11.08 -20 hstemhm
92 83 return
</CharString>
<CharString index="33">
-1 23 -4 51 -1 10 rrcurveto
-190 hlineto
-6 -58 124 -7 3 -98 1 -115 2 -150 rlinecurve
-130 hlineto
return
</CharString>
<CharString index="34">
-4 68.04 362.43001 67.53 -67.53 70.22 return
</CharString>
<CharString index="35">
rmoveto
233 -481 rlineto
79 620 -78 hlineto
hintmask 10011100
3 -472 rlineto
-4 hlineto
-225 472 rlineto
-87 -620 77 hlineto
hintmask 01101100
-3 481 rlineto
endchar
</CharString>
<CharString index="36">
hintmask 11010000
67 hmoveto
-68 callgsubr
return
</CharString>
<CharString index="37">
99 62 51 58 48 -49 30 -53 26 hvcurveto
return
</CharString>
<CharString index="38">
rmoveto
83 hlineto
5 136 rlineto
-85 hlineto
return
</CharString>
<CharString index="39">
rmoveto
-182 244 vlineto
6 71 rlineto
-177 211 146 63 -146 204 173 71 -301 hlineto
-69 -206 -70 -208 -64 -206 rrcurveto
81 hlineto
18 60 19 61 19 61 rrcurveto
115 367 rmoveto
6 -305 -102 hlineto
32 102 33 103 31 100 rrcurveto
endchar
</CharString>
<CharString index="40">
55 230.5 123 return
</CharString>
<CharString index="41">
-119 136 -55 59 52 vvcurveto
54 42 46 163 -8 vhcurveto
-6 76 rlineto
-213 4 -66 -91 -86 vvcurveto
-43 20 -40 40 -52 vhcurveto
return
</CharString>
<CharString index="42">
53 152.17 45.47 hstem
121 62 185 62 vstem
275 return
</CharString>
<CharString index="43">
154.5 57.5 return
</CharString>
<CharString index="44">
-61 -25 -37 -35 -47 vvcurveto
-59 56 -40 88 vhcurveto
return
</CharString>
<CharString index="45">
0 148 -127 -21 481 139 0 -20 -6 callgsubr
return
</CharString>
<CharString index="46">
-6 73.05 484.09 73.86 hstem
85 85 return
</CharString>
<CharString index="47">
422 554 -106 callgsubr
return
</CharString>
<CharString index="48">
rmoveto
hintmask 01011100
240 -114 101 -302 -42 vhcurveto
-622 vlineto
hintmask 10101100
278 -42 138 122 243 vvcurveto
-84 -13 rmoveto
-183 -76 -86 -174 26 vhcurveto
489 vlineto
180 22 70 -81 -187 vvcurveto
endchar
</CharString>
<CharString index="49">
57 -44 callgsubr
148 62 vstem
422 return
</CharString>
<CharString index="50">
-11 69 170 50 157 67 return
</CharString>
<CharString index="51">
rmoveto
170 -222 60 47 -168 218 170 209 -59 49 -169 -220 rlineto
235 -81 rmoveto
170 -222 60 47 -170 217 172 210 -59 49 -169 -220 rlineto
endchar
</CharString>
<CharString index="52">
71.64 -9.06999 -20 hstemhm
85 82 250 84 return
</CharString>
<CharString index="53">
hstemhm
123 64 -57 66 162 62 -59 67 return
</CharString>
<CharString index="54">
rlineto
66 -39 28 -29 -22 vvcurveto
-21 -34 -15 -83 -12 vhcurveto
return
</CharString>
<CharString index="55">
rmoveto
59 -49 169 220 4 81 -170 222 -60 -47 170 -216 rlineto
66 -211 rmoveto
59 -49 169 220 5 81 -171 222 -60 -47 170 -217 rlineto
endchar
</CharString>
<CharString index="56">
54 35 71 22 100 8 -4 86 rcurveline
-101 -12 -75 -40 -48 -50 rrcurveto
return
</CharString>
<CharString index="57">
rmoveto
55 -199 rlineto
29 hlineto
53 199 rlineto
3 hlineto
-1 -253 rlineto
52 329 -64 hlineto
-55 -200 rlineto
-2 hlineto
-59 200 rlineto
-63 -329 50 hlineto
-1 253 rlineto
endchar
</CharString>
<CharString index="58">
0 8 -2 3 -4 -4 -2 -3 -13 callgsubr
0 -9 2 -3 4 4 2 3 -13 callgsubr
return
</CharString>
<CharString index="59">
-15 72 563 -20 hstem
75 84 232 83 vstem
return
</CharString>
<CharString index="60">
-59 callgsubr
hstem
105 83 return
</CharString>
<CharString index="61">
rmoveto
70 -334 -70 vlineto
return
</CharString>
<CharString index="62">
-6.23 70.23 -47 -21 424 77 return
</CharString>
<CharString index="63">
84.42 return
</CharString>
<CharString index="64">
60 290 56 hstemhm
337 76 -52 64 hintmask 11010000
136 return
</CharString>
<CharString index="65">
-220 50 177 -21 28 -21 151 50 return
</CharString>
<CharString index="66">
50 314 -35 callgsubr
hintmask 11100100
267 return
</CharString>
<CharString index="67">
0 72.5 475 72.5 return
</CharString>
<CharString index="68">
-8.49 67.49 489 80 return
</CharString>
<CharString index="69">
17 callgsubr
238 79 return
</CharString>
<CharString index="70">
hstemhm
82 81 218 81 return
</CharString>
<CharString index="71">
58 hstemhm
131 301 -68 68 hintmask 11000000
180 return
</CharString>
<CharString index="72">
-25 callsubr
-41 callgsubr
return
</CharString>
<CharString index="73">
549 191 71 -463 vlineto
-7 -71 rlineto
195 -549 hlineto
return
</CharString>
<CharString index="74">
555 rmoveto
4 hlineto
176 151 -41 40 -131 -112 rlineto
return
</CharString>
<CharString index="75">
151 -7 rlineto
-571 -159 vlineto
return
</CharString>
<CharString index="76">
-53 callgsubr
hintmask 10110000
-7 -58 rlineto
hintmask 11010000
-32 callsubr
return
</CharString>
<CharString index="77">
57 289 58 hstem
347 66 vstem
131 return
</CharString>
<CharString index="78">
0 100 -79 -21 490 -20 hstemhm
58 80 278 76 hintmask 01111000
return
</CharString>
<CharString index="79">
47 93 44 78 vvcurveto
74 -78 46 -226 73 vhcurveto
-28 -66 rlineto
175 -53 76 -38 -54 -58 -89 -42 -63 vvcurveto
return
</CharString>
<CharString index="80">
0 66 488 66 -5 callgsubr
return
</CharString>
<CharString index="81">
-157 -21 668 -20 22 -20 return
</CharString>
<CharString index="82">
-14 67 384 66 return
</CharString>
<CharString index="83">
81 hintmask 11011100
291 432 -73 callgsubr
return
</CharString>
<CharString index="84">
91 11 -212 312 197 303 rlineto
-89 hlineto
-173 -273 rlineto
-68 273 -83 hlineto
return
</CharString>
<CharString index="85">
rmoveto
0 9 7 6 9 9 7 -6 -13 callgsubr
0 -9 -7 -7 -9 -9 -7 6 -13 callgsubr
return
</CharString>
<CharString index="86">
-150 83 -111 297 20 vhcurveto
return
</CharString>
<CharString index="87">
-221 61 168 -21 141 57 return
</CharString>
<CharString index="88">
-12 67 -36 -21 25 -21 430 69 -3 -20 221 -20 27 -20 hstemhm
56 80 241 81 return
</CharString>
<CharString index="89">
234 rmoveto
53 hlineto
2 87 25 264 4 91 rrcurveto
-103 hlineto
2 -91 17 -264 -87 vvcurveto
return
</CharString>
<CharString index="90">
76 4 rlineto
-5 111 -2 155 220 vvcurveto
return
</CharString>
<CharString index="91">
122 15 61 39 50 vvcurveto
return
</CharString>
<CharString index="92">
21 callgsubr
hstemhm
return
</CharString>
<CharString index="93">
-21 24 -21 return
</CharString>
<CharString index="94">
136 hstemhm
return
</CharString>
<CharString index="95">
rmoveto
-41 13 -55 -64 -19 -79 9 -67 rlinecurve
100 5 -22 58 -5 64 33 70 rlinecurve
return
</CharString>
<CharString index="96">
rmoveto
-874 324 vlineto
7 66 rlineto
-253 742 249 66 hlineto
endchar
</CharString>
<CharString index="97">
hstemhm
36 478 return
</CharString>
<CharString index="98">
1 69 rlineto
return
</CharString>
<CharString index="99">
-15 69 -41 -21 574 69 -7 -20 hstemhm
46 84 290 84 hintmask 10101100
return
</CharString>
<CharString index="100">
-1 -21 280 69 hstem
78 return
</CharString>
<CharString index="101">
hstem
255 81 vstem
return
</CharString>
<CharString index="102">
64.5 return
</CharString>
<CharString index="103">
rmoveto
-9 callsubr
-1494 -69 hlineto
return
</CharString>
<CharString index="104">
-23 -44 -29 -48 -47 108 -78 hhcurveto
-58 -41 -53 -102 -38 hvcurveto
return
</CharString>
<CharString index="105">
7 66 rlineto
-85 8 -32 16 24 vvcurveto
24 29 30 102 48 vhcurveto
return
</CharString>
<CharString index="106">
15 -21 27 -21 26 -21 274 68 273 -20 hstemhm
91 83 return
</CharString>
<CharString index="107">
rmoveto
26 -68 rlineto
230 73 80 70 68 76 -101 43 45 vvcurveto
return
</CharString>
<CharString index="108">
-20 23 -20 return
</CharString>
<CharString index="109">
-57 95 -49 -51 vvcurveto
-45 -78 -41 -180 -50 vhcurveto
endchar
</CharString>
<CharString index="110">
vvcurveto
-49 49 -34 136 -11 vhcurveto
return
</CharString>
<CharString index="111">
-20 84 -20 28 -20 hstemhm
return
</CharString>
<CharString index="112">
49.5 return
</CharString>
<CharString index="113">
rlineto
-119 hlineto
return
</CharString>
<CharString index="114">
10 hlineto
0 6 -1 3 -4 -3 -2 -2 -13 callgsubr
return
</CharString>
<CharString index="115">
-219 53 152.17 45.47 return
</CharString>
<CharString index="116">
249 569 rmoveto
83 hlineto
9 136 rlineto
-86 hlineto
return
</CharString>
<CharString index="117">
30.5 11 callgsubr
return
</CharString>
<CharString index="118">
-151 -21 29 -21 152 return
</CharString>
<CharString index="119">
57.5 148 return
</CharString>
<CharString index="120">
rmoveto
22 callsubr
return
</CharString>
<CharString index="121">
66 742 66 hstem
137 78 vstem
137 return
</CharString>
<CharString index="122">
rmoveto
8 65 rlineto
-85 return
</CharString>
<CharString index="123">
74 5 rlineto
return
</CharString>
<CharString index="124">
rlinecurve
-116 return
</CharString>
<CharString index="125">
-81 -7 rlineto
return
</CharString>
<CharString index="126">
hstemhm
230 72 -71 77 12 81 -76 78 return
</CharString>
<CharString index="127">
102 88 -93 -164 -166 -87 -93 -106 return
</CharString>
<CharString index="128">
-17 -174 rlineto
59 hlineto
17 174 rlineto
return
</CharString>
<CharString index="129">
6 -64 rlineto
-16 callsubr
return
</CharString>
<CharString index="130">
136 hstem
return
</CharString>
</Subrs>
@@ -1,263 +0,0 @@
<CharStrings>
<CharString name="ampersand_ampersand.liga">
-107 -10 71 -59 -21 659 -20 hstemhm
52 76 132 73 149 76 132 73 hintmask 10111110
986 350 rmoveto
-66 24 -30 -59 -30 -50 -30 -42 rlinecurve
-59 callgsubr
-17 19 -15 20 -14 20 40 50 40 60 40 70 -66 24 rcurveline
-30 -59 -30 -50 -30 -42 -59 callgsubr
24 callgsubr
-43 31 41 -76 142 hhcurveto
64 75 41 78 77 hvcurveto
hintmask 01111110
31 -43 37 -43 41 -42 63 51 rcurveline
-47 47 -40 45 -32 46 rrcurveto
hintmask 10111110
40 50 40 60 40 70 rrcurveto
-796 -289 rmoveto
-50 callsubr
430 hmoveto
-50 callsubr
endchar
</CharString>
<CharString name="bar_bar.liga">
-107 705 -20 hstem
230 647 vstem
477 707 -28 callsubr
573 888 -28 callsubr
endchar
</CharString>
<CharString name="bar_greater.liga">
-107 622 83 0 -20 hstemhm
229 698 hintmask 01100000
476 707 -28 callsubr
612 425 12 68 rlineto
-80 -32 rmoveto
-525 -363 rlineto
hintmask 10100000
137 705 390 -333 rlineto
endchar
</CharString>
<CharString name="equal_equal.liga">
-16 callgsubr
-948 -58 callsubr
904 -222 -8 callgsubr
-948 -58 callsubr
endchar
</CharString>
<CharString name="equal_equal_equal.liga">
-26 callgsubr
-1496 hlineto
-13 -66 rlineto
1450 -220 18 callgsubr
1452 -222 18 callgsubr
endchar
</CharString>
<CharString name="equal_equal_greater.liga">
19 callgsubr
58 1528 vstem
1307 599 rmoveto
-54 -53 105 -106 rlineto
-1244 -58 callsubr
1323 hlineto
84 -85 -2 -9 -90 -62 rlineto
-1345 -58 callsubr
1263 hlineto
-159 -110 -31 callgsubr
</CharString>
<CharString name="equal_greater.liga">
-107 2 -21 171 -10 callsubr
978 vstem
757 599 rmoveto
-54 -53 105 -106 rlineto
-694 -58 callsubr
773 hlineto
84 -85 -2 -9 -90 -62 rlineto
-795 -58 callsubr
713 hlineto
-159 -110 -31 callgsubr
</CharString>
<CharString name="exclam_equal.liga">
-16 callgsubr
-332 hlineto
173 249 -63 29 -194 -278 rlineto
-532 -58 callsubr
499 hlineto
-108 -156 rlineto
-421 -58 callsubr
388 hlineto
-219 -314 70 -20 232 334 rlineto
476 4 callsubr
-444 hlineto
109 156 rlineto
endchar
</CharString>
<CharString name="exclam_equal_equal.liga">
-26 callgsubr
-551 hlineto
88 127 -63 29 -109 -156 rlineto
-861 -58 callsubr
828 hlineto
-107 -154 rlineto
-753 -58 callsubr
720 hlineto
-109 -156 rlineto
-641 -58 callsubr
608 hlineto
-150 -216 70 -20 164 236 rlineto
803 4 callsubr
-771 hlineto
109 156 rlineto
691 4 callsubr
-659 hlineto
107 154 rlineto
endchar
</CharString>
<CharString name="greater_equal.liga">
-107 644 -20 80 -20 hstem
107 820 vstem
107 159 rmoveto
30 -73 778 263 12 68 -679 287 -42 -60 589 -250 -2 -9 rlineto
91 -212 rmoveto
-777 -269 30 -73 731 258 rlineto
endchar
</CharString>
<CharString name="hyphen_greater.liga">
-107 1 callgsubr
79 957 vstem
757 599 rmoveto
-54 -53 217 -219 rlineto
-828 hlineto
-13 -68 rlineto
847 hlineto
-314 -217 -31 callgsubr
</CharString>
<CharString name="hyphen_hyphen.liga">
-107 259 68 hstem
204 710 vstem
502 259 rmoveto
-3 callgsubr
698 hmoveto
-3 callgsubr
endchar
</CharString>
<CharString name="hyphen_hyphen_greater.liga">
443 1 callgsubr
79 1507 vstem
1307 599 rmoveto
-54 -53 217 -219 rlineto
-1378 hlineto
-13 -68 rlineto
1397 hlineto
-314 -217 -31 callgsubr
</CharString>
<CharString name="less_bar.liga">
-107 705 -20 hstem
258 683 vstem
867 705 rmoveto
-597 -369 -12 -67 436 -450 rlineto
74 hlineto
173 888 rlineto
-229 -798 rmoveto
-376 382 2 10 511 311 rlineto
endchar
</CharString>
<CharString name="less_equal.liga">
-107 -150 -21 876 -20 hstem
146 857 vstem
1003 635 rmoveto
-24 70 -778 -263 -12 -67 679 -288 34 66 -575 244 2 10 rlineto
-168 -190 rmoveto
-15 -75 722 -313 34 63 rlineto
endchar
</CharString>
<CharString name="less_equal_equal.liga">
19 callgsubr
82 1530 vstem
268 374 rmoveto
1330 4 callsubr
-1248 hlineto
142 98 -42 callsubr
-117 118 rlineto
1257 4 callsubr
-1337 hlineto
-72 73 2 10 rlineto
endchar
</CharString>
<CharString name="less_exclam_hyphen_hyphen.liga">
993 0 110 -108 -21 278 68 hstemhm
82 2057 hintmask 10110000
812 -22 callgsubr
-306 305 rmoveto
-34 61 -378 -263 -12 -67 rlineto
hintmask 01110000
279 -288 54 53 -223 225 rlineto
429 hlineto
12 68 rlineto
-433 hlineto
883 hmoveto
-13 -68 rlineto
1057 hlineto
12 68 rlineto
hintmask 10110000
-1406 -327 12 callsubr
</CharString>
<CharString name="less_hyphen.liga">
-107 1 callgsubr
82 957 vstem
1039 327 rmoveto
-839 hlineto
306 211 -42 callsubr
-223 225 rlineto
835 hlineto
endchar
</CharString>
<CharString name="less_hyphen_hyphen.liga">
443 1 callgsubr
82 1507 vstem
1589 327 rmoveto
-1389 hlineto
306 211 -42 callsubr
-223 225 rlineto
1385 hlineto
endchar
</CharString>
<CharString name="plus_plus.liga">
-107 259 67 hstem
120 878 vstem
816 326 rmoveto
36 187 rlineto
-71 hlineto
-36 -187 rlineto
-359 -30 callgsubr
37 188 rlineto
359 hlineto
-37 -188 rlineto
71 hlineto
37 188 rlineto
181 hlineto
14 67 rlineto
endchar
</CharString>
</CharStrings>
@@ -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>
@@ -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
@@ -1,22 +0,0 @@
<hmtx>
<mtx name="ampersand_ampersand.liga" width="1100" lsb="52"/>
<mtx name="bar_bar.liga" width="1100" lsb="230"/>
<mtx name="bar_greater.liga" width="1100" lsb="229"/>
<mtx name="equal_equal.liga" width="1100" lsb="58"/>
<mtx name="equal_equal_equal.liga" width="1650" lsb="39"/>
<mtx name="equal_equal_greater.liga" width="1650" lsb="58"/>
<mtx name="equal_greater.liga" width="1100" lsb="58"/>
<mtx name="exclam_equal.liga" width="1100" lsb="58"/>
<mtx name="exclam_equal_equal.liga" width="1650" lsb="39"/>
<mtx name="greater_equal.liga" width="1100" lsb="107"/>
<mtx name="hyphen_greater.liga" width="1100" lsb="79"/>
<mtx name="hyphen_hyphen.liga" width="1100" lsb="204"/>
<mtx name="hyphen_hyphen_greater.liga" width="1650" lsb="79"/>
<mtx name="less_bar.liga" width="1100" lsb="258"/>
<mtx name="less_equal.liga" width="1100" lsb="146"/>
<mtx name="less_equal_equal.liga" width="1650" lsb="82"/>
<mtx name="less_exclam_hyphen_hyphen.liga" width="2200" lsb="82"/>
<mtx name="less_hyphen.liga" width="1100" lsb="82"/>
<mtx name="less_hyphen_hyphen.liga" width="1650" lsb="82"/>
<mtx name="plus_plus.liga" width="1100" lsb="120"/>
</hmtx>
@@ -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 Italic
</namerecord>
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x0" unicode="True">
H&amp;Co: Operator Mono Lig Book Italic: 1.200
</namerecord>
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
Operator Mono Lig Book Italic
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
OperatorMonoLig-BookItalic
</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 Italic
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig Book
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Italic
</namerecord>
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
H&amp;Co: Operator Mono Lig Book Italic: 1.200
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig Book Italic
</namerecord>
<namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
OperatorMonoLig-BookItalic
</namerecord>
<namerecord nameID="16" platformID="3" platEncID="1" langID="0x409">
Operator Mono Lig
</namerecord>
<namerecord nameID="17" platformID="3" platEncID="1" langID="0x409">
Book Italic
</namerecord>
</name>
File diff suppressed because it is too large Load Diff
@@ -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"/>
<yMin value="-288"/>
<xMax value="2122"/>
<yMax value="1144"/>
<xMin value="-1678"/>
<yMin value="-284"/>
<xMax value="672"/>
<yMax value="1140"/>
<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"/>
<minRightSideBearing value="-80"/>
<xMaxExtent value="2122"/>
<advanceWidthMax value="625"/>
<minLeftSideBearing value="-1678"/>
<minRightSideBearing value="-60"/>
<xMaxExtent value="672"/>
<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="471"/>
</hhea>
<CFF>
<CFFFont>
<FontBBox value="-339 -288 2122 1144"/>
<FontBBox value="-1678 -284 672 1140"/>
</CFFFont>
</CFF>
<CFF>
<CFFFont>
<Private>
<nominalWidthX value="1207"/>
<nominalWidthX value="657"/>
</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="-387" width="625">
<CharString>
-32 -13 60 586 67 hstem
-387 70 10 69 291 70 10 69 vstem
449 178 rmoveto
38 67 35 90 26 106 -63 7 rcurveline
-18 -86 -27 -79 -29 -62 rrcurveto
{75868691} callsubr
-5 0 -4 1 -5 vhcurveto
-45 51 38 67 35 90 26 106 rlinecurve
-63 7 -18 -86 -27 -79 -29 -62 rlinecurve
{75868691} callsubr
-85 55 -69 100 70 72 40 89 60 vhcurveto
-39 33 71 -90 134 hhcurveto
70 72 40 89 60 hvcurveto
33 -39 37 -43 39 -49 56 47 rcurveline
-47 55 -42 49 -37 42 rrcurveto
-667 -131 rmoveto
{a5af4707} callsubr
440 hmoveto
{a5af4707} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="75868691">
-144 163 -65 69 64 vvcurveto
65 51 60 194 -9 vhcurveto
-6 67 rlineto
-235 5 -73 -101 -93 vvcurveto
-49 23 -44 46 -60 vhcurveto
-100 -63 -49 -73 -81 vvcurveto
return
</CharString>
<CharString index="1" fingerprint="75868691">
-144 163 -65 69 64 vvcurveto
65 51 60 194 -9 vhcurveto
-6 67 rlineto
-235 5 -73 -101 -93 vvcurveto
-49 23 -44 46 -60 vhcurveto
-100 -63 -49 -73 -81 vvcurveto
return
</CharString>
<CharString index="2" fingerprint="a5af4707">
-66 -33 46 63 56 35 59 73 51 hvcurveto
37 -44 48 -53 58 -68 rrcurveto
-74 -47 -54 -36 -51 hhcurveto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,23 @@
<Glyph name="bar_bar.liga" lsb="-256" width="625">
<CharString>
-32 -256 56 329 56 vstem
-200 705 {a9d1a864} callsubr
385 886 {a9d1a864} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="a9d1a864">
rmoveto
-56 -5 rlineto
-881 56 vlineto
return
</CharString>
<CharString index="1" fingerprint="a9d1a864">
rmoveto
-56 -5 rlineto
-881 56 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="bar_greater.liga" lsb="-233" width="625">
<CharString>
-32 -201 985 hstem
-233 572 vstem
-167 784 rmoveto
-66 -6 rlineto
-979 66 vlineto
506 492 rlineto
62 vlineto
-67 -36 rmoveto
-439 -428 rlineto
809 vlineto
439 -371 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,32 @@
<Glyph name="colon_equal.liga" lsb="-370" width="625">
<CharString>
-32 145 113 135 114 hstem
-370 736 vstem
-370 393 {47439142} callgsubr
60 rlineto
-529 -60 hlineto
-207 -275 {47439142} callgsubr
61 rlineto
-529 -61 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="47439142">
rmoveto
111 hlineto
2 114 rlineto
-112 hlineto
734 -87 rmoveto
1 return
</CharString>
<CharString index="1" fingerprint="47439142">
rmoveto
111 hlineto
2 114 rlineto
-112 hlineto
734 -87 rmoveto
1 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,39 @@
<Glyph name="equal_equal.2.liga" lsb="-527" width="625">
<CharString>
{8cd17f0d} callgsubr
-527 1054 vstem
-39 420 {5a2ab71c} callsubr
-489 -60 hlineto
1053 hmoveto
{237a2e75} callgsubr
-489 -60 hlineto
-77 {288a3e9c} callgsubr
-489 -61 hlineto
1053 hmoveto
1 61 rlineto
-489 -61 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="5a2ab71c">
rmoveto
{237a2e75} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="8cd17f0d">
-32 172 61 187 60 hstem
return
</CharString>
<CharString index="1" fingerprint="237a2e75">
1 60 rlineto
return
</CharString>
<CharString index="2" fingerprint="288a3e9c">
-248 rmoveto
1 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="equal_equal.liga" lsb="-468" width="550">
<CharString>
{a926ac67} callgsubr
hstem
-468 936 vstem
467 379 rmoveto
{c7138596} callsubr
-936 -52 hlineto
935 -223 rmoveto
{c7138596} callsubr
-936 -52 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="c7138596">
1 52 rlineto
return
</CharString>
<CharString index="1" fingerprint="c7138596">
1 52 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,46 @@
<Glyph name="equal_equal_equal.2.liga" lsb="-1152" width="625">
<CharString>
{8cd17f0d} callgsubr
-1152 429 196 429 196 429 cntrmask 00111000
-648 420 {5a2ab71c} callsubr
-505 -60 {eab9323a} callgsubr
60 rlineto
-517 -60 {eab9323a} callgsubr
60 rlineto
-505 -60 hlineto
-670 {288a3e9c} callgsubr
-505 -61 {eab9323a} callgsubr
61 rlineto
-517 -61 {eab9323a} callgsubr
61 rlineto
-505 -61 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="5a2ab71c">
rmoveto
{237a2e75} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="8cd17f0d">
-32 172 61 187 60 hstem
return
</CharString>
<CharString index="1" fingerprint="237a2e75">
1 60 rlineto
return
</CharString>
<CharString index="2" fingerprint="eab9323a">
hlineto
1097 hmoveto
1 return
</CharString>
<CharString index="3" fingerprint="288a3e9c">
-248 rmoveto
1 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,39 @@
<Glyph name="equal_equal_equal.liga" lsb="-1152" width="625">
<CharString>
-32 49 61 187 60 187 60 hstem
-1152 1679 vstem
526 544 {bc97c7a7} callsubr
-247 {bc97c7a7} callsubr
{288a3e9c} callgsubr
-1679 -61 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="bc97c7a7">
{5a2ab71c} callsubr
-1679 -60 hlineto
1678 return
</CharString>
<CharString index="1" fingerprint="5a2ab71c">
rmoveto
{237a2e75} callgsubr
return
</CharString>
<CharString index="2" fingerprint="bc97c7a7">
{5a2ab71c} callsubr
-1679 -60 hlineto
1678 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="237a2e75">
1 60 rlineto
return
</CharString>
<CharString index="1" fingerprint="288a3e9c">
-248 rmoveto
1 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,57 @@
<Glyph name="equal_equal_greater.liga" lsb="-1018" width="550">
<CharString>
{17e5c391} callsubr
-1018 1478 -57 {076e1c46} callsubr
-1259 -52 1320 {ce96b479} callgsubr
-1329 -52 1267 {3bf8a3e7} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="076e1c46">
57 hintmask 11100000
{ea3a6f68} callsubr
144 -121 rlineto
return
</CharString>
<CharString index="2" fingerprint="ea3a6f68">
133 595 rmoveto
-36 -43 return
</CharString>
<CharString index="3" fingerprint="3bf8a3e7">
hlineto
-158 -134 {c7af96e2} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="ce96b479">
hlineto
hintmask 11010000
101 -85 rlineto
-8 vlineto
-92 -78 {bf847d0e} callgsubr
return
</CharString>
<CharString index="2" fingerprint="bf847d0e">
rlineto
hintmask 11100000
return
</CharString>
<CharString index="3" fingerprint="c7af96e2">
35 -42 {fe9ab107} callgsubr
54 vlineto
return
</CharString>
<CharString index="4" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,57 @@
<Glyph name="equal_greater.liga" lsb="-468" width="550">
<CharString>
{17e5c391} callsubr
-468 927 -56 {076e1c46} callsubr
-709 -52 770 {ce96b479} callgsubr
-779 -52 717 {3bf8a3e7} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="076e1c46">
57 hintmask 11100000
{ea3a6f68} callsubr
144 -121 rlineto
return
</CharString>
<CharString index="2" fingerprint="ea3a6f68">
133 595 rmoveto
-36 -43 return
</CharString>
<CharString index="3" fingerprint="3bf8a3e7">
hlineto
-158 -134 {c7af96e2} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="ce96b479">
hlineto
hintmask 11010000
101 -85 rlineto
-8 vlineto
-92 -78 {bf847d0e} callgsubr
return
</CharString>
<CharString index="2" fingerprint="bf847d0e">
rlineto
hintmask 11100000
return
</CharString>
<CharString index="3" fingerprint="c7af96e2">
35 -42 {fe9ab107} callgsubr
54 vlineto
return
</CharString>
<CharString index="4" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,59 @@
<Glyph name="equal_less_less.liga" lsb="-1018" width="550">
<CharString>
{17e5c391} callsubr
-1018 1477 -669 58 242 58 hintmask 11010000
-152 294 rmoveto
{653069d6} callsubr
-193 -164 {bf847d0e} callgsubr
-943 -52 882 hlineto
hintmask 11010000
-74 -63 rlineto
-53 vlineto
65 -55 {bf847d0e} callgsubr
-873 -52 934 hlineto
207 -176 36 42 rlineto
hintmask 11010000
-311 264 rlineto
hintmask 11001000
300 hmoveto
{2b89117a} callgsubr
{bf847d0e} callgsubr
36 42 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="653069d6">
306 258 -36 43 return
</CharString>
<CharString index="2" fingerprint="a8585996">
8 vlineto
{653069d6} callsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="bf847d0e">
rlineto
hintmask 11100000
return
</CharString>
<CharString index="2" fingerprint="2b89117a">
{a8585996} callsubr
{f9df3c06} callgsubr
return
</CharString>
<CharString index="3" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,43 @@
<Glyph name="exclam_equal.liga" lsb="-468" width="550">
<CharString>
{36aee12c} callsubr
-561 52 171 52 hstemhm
-468 936 -755 520 hintmask 00110000
66 379 rmoveto
401 {368d5b4d} callsubr
-375 hlineto
hintmask 00101000
140 262 rlineto
hintmask 10001000
-51 24 rlineto
hintmask 00101000
-153 -286 rlineto
-497 -52 470 hlineto
hintmask 01101000
-92 -171 rlineto
-378 -52 351 hlineto
-170 -318 rlineto
hintmask 10001000
54 -19 rlineto
hintmask 01101000
180 337 rlineto
520 {368d5b4d} callsubr
-494 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="36aee12c">
-181 898 return
</CharString>
<CharString index="1" fingerprint="368d5b4d">
hlineto
{c7138596} callsubr
return
</CharString>
<CharString index="2" fingerprint="c7138596">
1 52 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,55 @@
<Glyph name="exclam_equal_equal.liga" lsb="-1152" width="625">
<CharString>
-32 {36aee12c} callsubr
-668 61 187 60 187 60 hstemhm
-1152 1679 -1137 520 hintmask 00111000
526 297 {5a2ab71c} callsubr
-796 hlineto
100 187 rlineto
695 hlineto
{237a2e75} callgsubr
-664 hlineto
hintmask 00110100
47 89 rlineto
hintmask 10000100
-51 24 rlineto
hintmask 00110100
-60 -113 rlineto
-951 -60 919 hlineto
-100 -187 rlineto
-819 -60 787 hlineto
hintmask 01110100
-100 -187 rlineto
-687 -61 655 hlineto
-113 -211 rlineto
hintmask 10000100
54 -19 rlineto
hintmask 01110100
123 230 rlineto
959 hlineto
1 61 rlineto
-928 hlineto
100 187 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="36aee12c">
-181 898 return
</CharString>
<CharString index="1" fingerprint="5a2ab71c">
rmoveto
{237a2e75} callgsubr
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="237a2e75">
1 60 rlineto
return
</CharString>
<CharString index="1" fingerprint="237a2e75">
1 60 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="greater_equal.2.liga" lsb="-338" width="550">
<CharString>
-119 50 hstemhm
-338 481 -478 702 hintmask 10100000
{64fb1ad2} callgsubr
-700 -293 rlineto
701 -89 rmoveto
50 vlineto
hintmask 11000000
-705 -50 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="89cb26bd">
264 rlineto
8 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="64fb1ad2">
-334 22 rmoveto
612 {89cb26bd} callsubr
-605 258 25 43 668 -278 rlineto
-54 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,26 @@
<Glyph name="greater_equal.liga" lsb="-334" width="550">
<CharString>
-335 702 vstem
{64fb1ad2} callgsubr
-675 -283 rlineto
675 113 rmoveto
-675 -283 -25 42 700 297 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="89cb26bd">
264 rlineto
8 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="64fb1ad2">
-334 22 rmoveto
612 {89cb26bd} callsubr
-605 258 25 43 668 -278 rlineto
-54 vlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,82 @@
<Glyph name="greater_equal_greater.liga" lsb="-1009" width="550">
<CharString>
{cae23522} callsubr
1469 -1156 57 1043 {076e1c46} callsubr
-1015 {75fc0322} callsubr
hintmask 11010000
{a29e87ae} callgsubr
208 176 rlineto
1015 hlineto
-158 -134 {c7af96e2} callgsubr
hintmask 11001000
-57 -31 rmoveto
-92 -78 rlineto
-1016 hlineto
hintmask 11010000
65 55 rlineto
54 vlineto
-73 62 rlineto
1015 hlineto
hintmask 11001000
101 -85 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="cae23522">
{17e5c391} callsubr
-1010 return
</CharString>
<CharString index="1" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="076e1c46">
57 hintmask 11100000
{ea3a6f68} callsubr
144 -121 rlineto
return
</CharString>
<CharString index="3" fingerprint="ea3a6f68">
133 595 rmoveto
-36 -43 return
</CharString>
<CharString index="4" fingerprint="75fc0322">
hlineto
-193 164 -36 -43 rlineto
return
</CharString>
<CharString index="5" fingerprint="1341d64a">
-258 rlineto
-8 vlineto
return
</CharString>
<CharString index="6" fingerprint="4d0a4e5f">
-312 -264 35 -42 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="a29e87ae">
{791c1012} callgsubr
hintmask 11100000
{4d0a4e5f} callsubr
return
</CharString>
<CharString index="2" fingerprint="791c1012">
306 {1341d64a} callsubr
return
</CharString>
<CharString index="3" fingerprint="c7af96e2">
35 -42 {fe9ab107} callgsubr
54 vlineto
return
</CharString>
<CharString index="4" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,77 @@
<Glyph name="greater_greater_equal.liga" lsb="-1009" width="550">
<CharString>
{17e5c391} callsubr
-1009 1477 -1165 57 243 57 hintmask 11010000
-640 317 rmoveto
-327 278 -36 -43 {a29e87ae} callgsubr
rlineto
hintmask 11010000
{fe9ab107} callgsubr
hintmask 11001000
300 hmoveto
54 vlineto
-73 62 {bf847d0e} callgsubr
880 {368d5b4d} callsubr
-942 {75fc0322} callsubr
hintmask 11001000
{791c1012} callgsubr
{4d0a4e5f} callsubr
208 176 {bf847d0e} callgsubr
933 {368d5b4d} callsubr
-873 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="1341d64a">
-258 rlineto
-8 vlineto
return
</CharString>
<CharString index="2" fingerprint="4d0a4e5f">
-312 -264 35 -42 return
</CharString>
<CharString index="3" fingerprint="368d5b4d">
hlineto
{c7138596} callsubr
return
</CharString>
<CharString index="4" fingerprint="c7138596">
1 52 rlineto
return
</CharString>
<CharString index="5" fingerprint="75fc0322">
hlineto
-193 164 -36 -43 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="a29e87ae">
{791c1012} callgsubr
hintmask 11100000
{4d0a4e5f} callsubr
return
</CharString>
<CharString index="2" fingerprint="791c1012">
306 {1341d64a} callsubr
return
</CharString>
<CharString index="3" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
<CharString index="4" fingerprint="bf847d0e">
rlineto
hintmask 11100000
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,39 @@
<Glyph name="hyphen_greater.liga" lsb="-430" width="550">
<CharString>
{4ef4eda0} callsubr
-430 890 {98ef964f} callsubr
-807 -52 807 {ada6e010} callgsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="4ef4eda0">
264 52 hstem
return
</CharString>
<CharString index="1" fingerprint="98ef964f">
vstem
{ea3a6f68} callsubr
280 -236 rlineto
return
</CharString>
<CharString index="2" fingerprint="ea3a6f68">
133 595 rmoveto
-36 -43 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="ada6e010">
hlineto
-286 -242 {c7af96e2} callgsubr
endchar
</CharString>
<CharString index="1" fingerprint="c7af96e2">
35 -42 {fe9ab107} callgsubr
54 vlineto
return
</CharString>
<CharString index="2" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,29 @@
<Glyph name="hyphen_hyphen.liga" lsb="-443" width="625">
<CharString>
-32 {4ef4eda0} callsubr
-443 314 183 314 vstem
-132 264 rmoveto
{3b143fa3} callgsubr
808 hmoveto
{3b143fa3} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="4ef4eda0">
264 52 hstem
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="3b143fa3">
3 52 rlineto
-314 -52 hlineto
return
</CharString>
<CharString index="1" fingerprint="3b143fa3">
3 52 rlineto
-314 -52 hlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,39 @@
<Glyph name="hyphen_hyphen_greater.liga" lsb="-980" width="550">
<CharString>
{4ef4eda0} callsubr
-980 1440 {98ef964f} callsubr
-1357 -52 1357 {ada6e010} callgsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="4ef4eda0">
264 52 hstem
return
</CharString>
<CharString index="1" fingerprint="98ef964f">
vstem
{ea3a6f68} callsubr
280 -236 rlineto
return
</CharString>
<CharString index="2" fingerprint="ea3a6f68">
133 595 rmoveto
-36 -43 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="ada6e010">
hlineto
-286 -242 {c7af96e2} callgsubr
endchar
</CharString>
<CharString index="1" fingerprint="c7af96e2">
35 -42 {fe9ab107} callgsubr
54 vlineto
return
</CharString>
<CharString index="2" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,18 @@
<Glyph name="less_bar.liga" lsb="-344" width="625">
<CharString>
-32 -201 985 hstem
-344 566 vstem
156 778 rmoveto
-500 -425 rlineto
-62 vlineto
500 -492 rlineto
66 985 hlineto
-500 -467 rmoveto
10 vlineto
434 366 rlineto
-803 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,27 @@
<Glyph name="less_equal.2.liga" lsb="-364" width="550">
<CharString>
148 -21 hstem
-365 706 vstem
337 18 rmoveto
-52 vlineto
-700 293 {baa613f1} callgsubr
-89 -405 rmoveto
705 50 -705 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1341d64a">
-258 rlineto
-8 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="baa613f1">
rlineto
54 vlineto
668 278 25 -43 -605 {1341d64a} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,26 @@
<Glyph name="less_equal.liga" lsb="-364" width="550">
<CharString>
-363 699 vstem
336 22 rmoveto
-25 -42 -675 283 {baa613f1} callgsubr
-88 -193 rmoveto
56 vlineto
700 -297 -25 -42 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1341d64a">
-258 rlineto
-8 vlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="baa613f1">
rlineto
54 vlineto
668 278 25 -43 -605 {1341d64a} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,59 @@
<Glyph name="less_equal_equal.liga" lsb="-1010" width="550">
<CharString>
{cae23522} callsubr
58 -58 1478 hintmask 11100000
-952 286 rmoveto
8 vlineto
101 85 rlineto
hintmask 11010000
1318 {368d5b4d} callsubr
-1258 {0c8ee262} callgsubr
1266 {368d5b4d} callsubr
-1328 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="cae23522">
{17e5c391} callsubr
-1010 return
</CharString>
<CharString index="1" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="368d5b4d">
hlineto
{c7138596} callsubr
return
</CharString>
<CharString index="3" fingerprint="c7138596">
1 52 rlineto
return
</CharString>
<CharString index="4" fingerprint="4ea00b91">
-36 43 {377aa5a8} callsubr
return
</CharString>
<CharString index="5" fingerprint="377aa5a8">
{f9df3c06} callgsubr
36 42 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="0c8ee262">
hlineto
144 121 {4ea00b91} callsubr
-158 134 rlineto
return
</CharString>
<CharString index="2" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,75 @@
<Glyph name="less_equal_greater.liga" lsb="-1010" width="550">
<CharString>
{cae23522} callsubr
58 -58 1470 -57 {076e1c46} callsubr
-1031 {0c8ee262} callgsubr
1048 hlineto
-158 -134 35 -42 rlineto
hintmask 11010000
{fe9ab107} callgsubr
54 vlineto
hintmask 11101000
-57 -31 rmoveto
-92 -78 rlineto
-1171 hlineto
{a1ea141e} callsubr
1153 hlineto
101 -85 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="cae23522">
{17e5c391} callsubr
-1010 return
</CharString>
<CharString index="1" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="076e1c46">
57 hintmask 11100000
{ea3a6f68} callsubr
144 -121 rlineto
return
</CharString>
<CharString index="3" fingerprint="ea3a6f68">
133 595 rmoveto
-36 -43 return
</CharString>
<CharString index="4" fingerprint="4ea00b91">
-36 43 {377aa5a8} callsubr
return
</CharString>
<CharString index="5" fingerprint="377aa5a8">
{f9df3c06} callgsubr
36 42 return
</CharString>
<CharString index="6" fingerprint="a1ea141e">
-92 78 rlineto
8 vlineto
101 85 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="0c8ee262">
hlineto
144 121 {4ea00b91} callsubr
-158 134 rlineto
return
</CharString>
<CharString index="2" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
<CharString index="3" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,66 @@
<Glyph name="less_equal_less.liga" lsb="-1010" width="550">
<CharString>
{cae23522} callsubr
58 -58 1469 -369 58 hintmask 11010000
423 -20 rmoveto
36 42 rlineto
hintmask 11001000
-311 264 rlineto
{a8585996} callsubr
-193 -164 rlineto
-1015 hlineto
144 121 -36 43 rlineto
hintmask 11010000
{377aa5a8} callsubr
-158 134 rlineto
1015 hlineto
-1076 52 rmoveto
hintmask 11100000
{a1ea141e} callsubr
1015 hlineto
hintmask 11001000
-74 -63 rlineto
-53 vlineto
65 -55 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="cae23522">
{17e5c391} callsubr
-1010 return
</CharString>
<CharString index="1" fingerprint="17e5c391">
{a926ac67} callgsubr
hstemhm
return
</CharString>
<CharString index="2" fingerprint="a8585996">
8 vlineto
{653069d6} callsubr
return
</CharString>
<CharString index="3" fingerprint="653069d6">
306 258 -36 43 return
</CharString>
<CharString index="4" fingerprint="377aa5a8">
{f9df3c06} callgsubr
36 42 return
</CharString>
<CharString index="5" fingerprint="a1ea141e">
-92 78 rlineto
8 vlineto
101 85 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a926ac67">
156 52 171 52 return
</CharString>
<CharString index="1" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,60 @@
<Glyph name="less_exclam_hyphen_hyphen.liga" lsb="-1678" width="625">
<CharString>
-32 0 96 196 61 hstemhm
-1678 58 10 349 234 94 -62 40 1095 349 hintmask 11110110
-995 {9500e647} callsubr
-319 326 {a1f454f7} callgsubr
10 8 rlineto
-10 535 vlineto
4 61 rlineto
-479 hlineto
750 hmoveto
-61 1285 vlineto
4 61 rlineto
hintmask 11111010
-1517 -353 {8ff4d132} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="9500e647">
226 rmoveto
40 hlineto
3 116 16 212 6 122 rrcurveto
-77 hlineto
2 -122 10 -212 -116 vvcurveto
return
</CharString>
<CharString index="1" fingerprint="4ea00b91">
-36 43 {377aa5a8} callsubr
return
</CharString>
<CharString index="2" fingerprint="377aa5a8">
{f9df3c06} callgsubr
36 42 return
</CharString>
<CharString index="3" fingerprint="89cb26bd">
264 rlineto
8 vlineto
return
</CharString>
<CharString index="4" fingerprint="8ff4d132">
rmoveto
93 hlineto
3 96 rlineto
-94 hlineto
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a1f454f7">
rmoveto
{4ea00b91} callsubr
-311 {89cb26bd} callsubr
return
</CharString>
<CharString index="1" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,35 @@
<Glyph name="less_hyphen.liga" lsb="-460" width="550">
<CharString>
264 52 hstemhm
-460 58 -58 894 hintmask 10100000
434 {9b6142ec} callgsubr
-810 {c56f9f9a} callgsubr
807 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="377aa5a8">
{f9df3c06} callgsubr
36 42 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9b6142ec">
316 rmoveto
return
</CharString>
<CharString index="1" fingerprint="c56f9f9a">
hlineto
280 236 -36 43 rlineto
hintmask 11000000
{377aa5a8} callsubr
-285 242 rlineto
return
</CharString>
<CharString index="2" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,35 @@
<Glyph name="less_hyphen_hyphen.liga" lsb="-1010" width="550">
<CharString>
264 52 hstemhm
-1010 58 -58 1444 hintmask 10100000
434 {9b6142ec} callgsubr
-1360 {c56f9f9a} callgsubr
1357 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="377aa5a8">
{f9df3c06} callgsubr
36 42 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="9b6142ec">
316 rmoveto
return
</CharString>
<CharString index="1" fingerprint="c56f9f9a">
hlineto
280 236 -36 43 rlineto
hintmask 11000000
{377aa5a8} callsubr
-285 242 rlineto
return
</CharString>
<CharString index="2" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,37 @@
<Glyph name="less_slash.liga" lsb="-535" width="625">
<CharString>
-32 {36aee12c} callsubr
hstem
-535 58 199 520 vstem
191 717 rmoveto
-367 -687 -301 256 rlineto
{2b89117a} callgsubr
-76 -142 54 -19 466 874 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="36aee12c">
-181 898 return
</CharString>
<CharString index="1" fingerprint="a8585996">
8 vlineto
{653069d6} callsubr
return
</CharString>
<CharString index="2" fingerprint="653069d6">
306 258 -36 43 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="2b89117a">
{a8585996} callsubr
{f9df3c06} callgsubr
return
</CharString>
<CharString index="1" fingerprint="f9df3c06">
-328 -279 rlineto
-53 vlineto
333 -283 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,38 @@
<Glyph name="plus_plus.liga" lsb="-483" width="625">
<CharString>
-32 {4ef4eda0} callsubr
-299 55 414 55 vstem
-244 264 {a35b2d5b} callgsubr
469 193 {a35b2d5b} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="4ef4eda0">
264 52 hstem
return
</CharString>
<CharString index="1" fingerprint="368d5b4d">
hlineto
{c7138596} callsubr
return
</CharString>
<CharString index="2" fingerprint="c7138596">
1 52 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="a35b2d5b">
rmoveto
182 {368d5b4d} callsubr
-183 192 -55 -192 -184 -52 184 -193 55 hlineto
return
</CharString>
<CharString index="1" fingerprint="a35b2d5b">
rmoveto
182 {368d5b4d} callsubr
-183 192 -55 -192 -184 -52 184 -193 55 hlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,49 @@
<Glyph name="question_question.liga" lsb="-434" width="625">
<CharString>
-32 0 96 525 57 hstem
-337 91 142 63 125 91 141 63 vstem
-428 678 rmoveto
{400ad052} callgsubr
420 hmoveto
{400ad052} callgsubr
-329 -678 {b01158f3} callsubr
419 -96 {b01158f3} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="b01158f3">
rmoveto
90 hlineto
2 96 rlineto
-91 hlineto
return
</CharString>
<CharString index="1" fingerprint="b01158f3">
rmoveto
90 hlineto
2 96 rlineto
-91 hlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="400ad052">
-6 -57 rlineto
261 -16 69 -46 -54 vvcurveto
-79 -193 -61 -9 -141 vhcurveto
42 -1 rlineto
14 129 209 57 109 vvcurveto
78 -88 64 -299 18 vhcurveto
return
</CharString>
<CharString index="1" fingerprint="400ad052">
-6 -57 rlineto
261 -16 69 -46 -54 vvcurveto
-79 -193 -61 -9 -141 vhcurveto
42 -1 rlineto
14 129 209 57 109 vvcurveto
78 -88 64 -299 18 vhcurveto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,32 @@
<Glyph name="slash_greater.liga" lsb="-335" width="625">
<CharString>
-32 {36aee12c} callsubr
hstem
-335 520 218 57 vstem
133 595 rmoveto
-1 -1 53 99 {c030e715} callsubr
387 726 297 -251 rlineto
-8 vlineto
-312 -264 {c7af96e2} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="36aee12c">
-181 898 return
</CharString>
<CharString index="1" fingerprint="c030e715">
-51 24 -469 -879 54 -19 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="c7af96e2">
35 -42 {fe9ab107} callgsubr
54 vlineto
return
</CharString>
<CharString index="1" fingerprint="fe9ab107">
334 283 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,11 @@
<Glyph name="underscore_underscore.liga" lsb="-635" width="625">
<CharString>
-32 -100 50 hstem
-635 1267 vstem
632 -100 rmoveto
50 -1267 -50 vlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,64 @@
<Glyph name="uniE0A0" code="0xe0a0" lsb="0" width="625">
<CharString>
-32 -136 63 193 127 320 64 64 64 hstemhm
0 64 0 128 0 64 128 64 0 128 0 64 hintmask 1111010101000000
512 631 rmoveto
-71 -57 -57 -71 hvcurveto
hintmask 1111010010000000
-47 26 -41 38 -22 vhcurveto
-18 vlineto
-64 -64 -64 -64 -53 -42 -11 -18 -33 vhcurveto
303 vlineto
hintmask 1111101101000000
{6b0561fb} callgsubr
-71 -57 -57 -71 vhcurveto
hintmask 1111010101000000
-47 26 -41 38 -22 vhcurveto
-419 vlineto
hintmask 1111101010000000
-38 -22 -26 -41 -47 vvcurveto
-71 57 -57 71 71 57 57 71 34 -13 30 -21 23 vhcurveto
23 19 30 18 49 hhcurveto
128 128 128 128 hvcurveto
18 vlineto
hintmask 1111010101000000
{6b0561fb} callgsubr
vhcurveto
hintmask 1111101101000000
-384 63 rmoveto
{30fa4c08} callsubr
{0f5e6060} callsubr
hvcurveto
384 -256 {95d29817} callsubr
-384 -512 {95d29817} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="30fa4c08">
35 29 -29 -35 -35 -29 -29 -35 return
</CharString>
<CharString index="1" fingerprint="0f5e6060">
-35 -29 29 35 35 29 29 35 return
</CharString>
<CharString index="2" fingerprint="95d29817">
rmoveto
{0f5e6060} callsubr
{30fa4c08} callsubr
hvcurveto
return
</CharString>
<CharString index="3" fingerprint="30fa4c08">
35 29 -29 -35 -35 -29 -29 -35 return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="6b0561fb">
38 22 26 41 47 vvcurveto
71 -57 57 -71 return
</CharString>
<CharString index="1" fingerprint="6b0561fb">
38 22 26 41 47 vvcurveto
71 -57 57 -71 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,16 @@
<Glyph name="uniE0B0" code="0xe0b0" lsb="-20" width="625">
<CharString>
{7570ed54} callgsubr
672 365 rmoveto
-690 639 -2 -1209 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="7570ed54">
-32 -205 1209 hstem
-20 692 vstem
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,16 @@
<Glyph name="uniE0B2" code="0xe0b2" lsb="-20" width="625">
<CharString>
{7570ed54} callgsubr
-20 365 rmoveto
692 -570 -2 1209 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="7570ed54">
-32 -205 1209 hstem
-20 692 vstem
return
</CharString>
</GlobalSubrs>
</Glyph>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,8 @@
{
"fontName": "OperatorMonoLig-Light",
"familyName": "Operator Mono Lig",
"foundry": "H&Co",
"version": "1.200",
"fontStyle": "Light",
"windowsFontStyle": "Regular"
}
File diff suppressed because it is too large Load Diff
@@ -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"/>
<yMin value="-371"/>
<xMax value="2139"/>
<yMax value="1130"/>
<xMin value="-1782"/>
<yMin value="-375"/>
<xMax value="703"/>
<yMax value="1125"/>
<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"/>
<minRightSideBearing value="-167"/>
<xMaxExtent value="2139"/>
<advanceWidthMax value="625"/>
<minLeftSideBearing value="-1782"/>
<minRightSideBearing value="-153"/>
<xMaxExtent value="703"/>
<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="473"/>
</hhea>
<CFF>
<CFFFont>
<FontBBox value="-367 -371 2139 1130"/>
<FontBBox value="-1782 -375 703 1125"/>
</CFFFont>
</CFF>
<CFF>
<CFFFont>
<Private>
<nominalWidthX value="1207"/>
<nominalWidthX value="657"/>
</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="-429" width="625">
<CharString>
-32 -11 64 hstem
-429 69 174 60 157 69 174 60 vstem
-429 118 rmoveto
-80 44 -49 79 70 86 49 92 87 vhcurveto
-51 37 61 -90 119 hhcurveto
70 86 49 92 87 hvcurveto
37 -51 45 -50 51 -50 54 49 rcurveline
-56 53 -46 51 -38 52 {254e5086} callsubr
-136 -120 -99 -122 -4 -115 -17 19 -15 20 -15 20 {254e5086} callsubr
-139 -122 -100 -125 -117 vvcurveto
69 14 rmoveto
{635b527e} callgsubr
460 hmoveto
{635b527e} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="254e5086">
46 57 46 68 44 79 -61 22 rcurveline
-35 -69 -36 -59 -36 -49 -46 75 -26 77 -6 82 rrcurveto
63 66 38 72 54 vvcurveto
34 -19 17 -29 -50 -65 -114 -114 -2 vhcurveto
return
</CharString>
<CharString index="1" fingerprint="254e5086">
46 57 46 68 44 79 -61 22 rcurveline
-35 -69 -36 -59 -36 -49 -46 75 -26 77 -6 82 rrcurveto
63 66 38 72 54 vvcurveto
34 -19 17 -29 -50 -65 -114 -114 -2 vhcurveto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="635b527e">
87 77 99 97 97 vhcurveto
11 -82 32 -79 49 -78 rrcurveto
-82 -73 -68 -41 -51 hhcurveto
-46 -28 29 50 hvcurveto
return
</CharString>
<CharString index="1" fingerprint="635b527e">
87 77 99 97 97 vhcurveto
11 -82 32 -79 49 -78 rrcurveto
-82 -73 -68 -41 -51 hhcurveto
-46 -28 29 50 hvcurveto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,23 @@
<Glyph name="bar_bar.liga" lsb="-337" width="625">
<CharString>
-32 -337 227 158 227 vstem
-110 703 {b95482c8} callsubr
557 883 {b95482c8} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="b95482c8">
rmoveto
-56 -2 -171 -881 rlineto
55 hlineto
return
</CharString>
<CharString index="1" fingerprint="b95482c8">
rmoveto
-56 -2 -171 -881 rlineto
55 hlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,15 @@
<Glyph name="bar_greater.liga" lsb="-310" width="625">
<CharString>
-32 -200 981 hstem
-310 685 vstem
-54 781 rmoveto
-65 -2 -191 -979 rlineto
66 hlineto
608 480 11 61 rlineto
-73 -30 rmoveto
-528 -417 156 807 374 -380 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,47 @@
<Glyph name="colon_equal.liga" lsb="-394" width="625">
<CharString>
-32 144 115 133 115 hstem
-394 801 vstem
-347 392 {c12c2549} callsubr
719 -87 rmoveto
{3e1270ac} callsubr
-529 {6a7250c2} callsubr
-261 -276 {c12c2549} callsubr
718 -87 rmoveto
12 60 rlineto
-528 {1a0862e5} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="c12c2549">
rmoveto
105 hlineto
26 115 rlineto
-108 hlineto
return
</CharString>
<CharString index="1" fingerprint="3e1270ac">
12 59 rlineto
return
</CharString>
<CharString index="2" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
<CharString index="3" fingerprint="c12c2549">
rmoveto
105 hlineto
26 115 rlineto
-108 hlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="1a0862e5">
hlineto
-12 -60 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,45 @@
<Glyph name="equal_equal.2.liga" lsb="-549" width="625">
<CharString>
-32 172 {1a4ca569} callsubr
hstem
-549 1121 vstem
-13 420 rmoveto
{3e1270ac} callsubr
-489 {6a7250c2} callsubr
1061 hmoveto
{3e1270ac} callsubr
-489 {6a7250c2} callsubr
-133 {681a73ac} callgsubr
-488 {1a0862e5} callgsubr
1061 hmoveto
12 60 rlineto
-488 {1a0862e5} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="3e1270ac">
12 59 rlineto
return
</CharString>
<CharString index="2" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="681a73ac">
-248 rmoveto
12 60 rlineto
return
</CharString>
<CharString index="1" fingerprint="1a0862e5">
hlineto
-12 -60 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,34 @@
<Glyph name="equal_equal.liga" lsb="-487" width="550">
<CharString>
156 52 171 51 hstem
-471 980 {d9dcffa2} callgsubr
-942 {82aca778} callsubr
898 -223 rmoveto
{2e86003e} callsubr
-942 {82aca778} callsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2e86003e">
11 51 rlineto
return
</CharString>
<CharString index="1" fingerprint="82aca778">
hlineto
-10 -51 rlineto
return
</CharString>
<CharString index="2" fingerprint="2e86003e">
11 51 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d9dcffa2">
vstem
497 379 rmoveto
{2e86003e} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,53 @@
<Glyph name="equal_equal_equal.2.liga" lsb="-1174" width="625">
<CharString>
-32 172 {1a4ca569} callsubr
hstem
-1174 1746 vstem
-621 420 rmoveto
{3e1270ac} callsubr
-506 {6a7250c2} callsubr
1096 hmoveto
{3e1270ac} callsubr
-507 {6a7250c2} callsubr
1096 hmoveto
{3e1270ac} callsubr
-506 {6a7250c2} callsubr
-724 {681a73ac} callgsubr
-505 {acabb242} callgsubr
-506 {acabb242} callgsubr
-505 {1a0862e5} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="3e1270ac">
12 59 rlineto
return
</CharString>
<CharString index="2" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="681a73ac">
-248 rmoveto
12 60 rlineto
return
</CharString>
<CharString index="1" fingerprint="acabb242">
{1a0862e5} callgsubr
1096 hmoveto
12 60 rlineto
return
</CharString>
<CharString index="2" fingerprint="1a0862e5">
hlineto
-12 -60 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,44 @@
<Glyph name="equal_equal_equal.liga" lsb="-1197" width="625">
<CharString>
-32 49 60 188 {1a4ca569} callsubr
hstem
-1197 1793 cntrmask 11100000
584 545 {35830b95} callsubr
1639 -248 {35830b95} callsubr
1638 {681a73ac} callgsubr
-1686 {1a0862e5} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="35830b95">
rmoveto
{3e1270ac} callsubr
-1687 {6a7250c2} callsubr
return
</CharString>
<CharString index="2" fingerprint="3e1270ac">
12 59 rlineto
return
</CharString>
<CharString index="3" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="681a73ac">
-248 rmoveto
12 60 rlineto
return
</CharString>
<CharString index="1" fingerprint="1a0862e5">
hlineto
-12 -60 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,71 @@
<Glyph name="equal_equal_greater.liga" lsb="-1174" width="625">
<CharString>
{42d64d00} callgsubr
-1174 1719 {66aa6cfa} callsubr
-1433 {6a7250c2} callsubr
1502 hlineto
98 -99 -2 -10 rlineto
hintmask 01010000
{59e2783f} callsubr
-1522 {1a0862e5} callgsubr
1449 {1f7399a1} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="66aa6cfa">
{f85c4f0d} callgsubr
hintmask 00110000
130 -132 rlineto
return
</CharString>
<CharString index="2" fingerprint="44ebcab6">
236 658 rmoveto
-48 -47 rlineto
return
</CharString>
<CharString index="3" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
<CharString index="4" fingerprint="59e2783f">
-112 -79 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="42d64d00">
{dc85467b} callgsubr
-486 {1a4ca569} callsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="f85c4f0d">
hintmask 10010000
{44ebcab6} callsubr
return
</CharString>
<CharString index="3" fingerprint="1a0862e5">
hlineto
-12 -60 rlineto
return
</CharString>
<CharString index="4" fingerprint="1f7399a1">
hlineto
-195 -137 rlineto
hintmask 10010000
{29885e03} callgsubr
return
</CharString>
<CharString index="5" fingerprint="29885e03">
32 -54 422 299 11 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,69 @@
<Glyph name="equal_greater.liga" lsb="-549" width="625">
<CharString>
{42d64d00} callgsubr
-549 1094 {6a70e420} callsubr
-808 {6a7250c2} callsubr
877 hlineto
98 -99 -2 -10 {59e2783f} callsubr
-897 {1a0862e5} callgsubr
824 {1f7399a1} callgsubr
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="6a70e420">
{f85c4f0d} callgsubr
hintmask 01110000
130 -132 rlineto
return
</CharString>
<CharString index="2" fingerprint="44ebcab6">
236 658 rmoveto
-48 -47 rlineto
return
</CharString>
<CharString index="3" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
<CharString index="4" fingerprint="59e2783f">
-112 -79 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="42d64d00">
{dc85467b} callgsubr
-486 {1a4ca569} callsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="f85c4f0d">
hintmask 10010000
{44ebcab6} callsubr
return
</CharString>
<CharString index="3" fingerprint="1a0862e5">
hlineto
-12 -60 rlineto
return
</CharString>
<CharString index="4" fingerprint="1f7399a1">
hlineto
-195 -137 rlineto
hintmask 10010000
{29885e03} callgsubr
return
</CharString>
<CharString index="5" fingerprint="29885e03">
32 -54 422 299 11 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,38 @@
<Glyph name="equal_less_less.liga" lsb="-1187" width="550">
<CharString>
{28a20589} callsubr
-1187 1697 vstem
-145 294 rmoveto
355 252 -27 45 -227 -161 rlineto
-1090 {82aca778} callsubr
1028 hlineto
-82 -58 -9 -52 60 -62 rlineto
-1030 {82aca778} callsubr
1090 hlineto
168 -173 41 41 -259 262 rlineto
302 8 rmoveto
355 252 {dfda4220} callgsubr
rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="28a20589">
156 51 172 51 hstem
return
</CharString>
<CharString index="1" fingerprint="82aca778">
hlineto
-10 -51 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="dfda4220">
{46d990e9} callgsubr
278 -286 41 41 -259 262 return
</CharString>
<CharString index="1" fingerprint="46d990e9">
-27 45 -381 -270 -9 -52 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,42 @@
<Glyph name="exclam_equal.liga" lsb="-487" width="625">
<CharString>
-32 156 52 171 51 hstem
-388 665 {d9dcffa2} callgsubr
-414 hlineto
183 259 -47 23 -199 -282 rlineto
-465 {82aca778} callsubr
439 hlineto
-121 -172 rlineto
-351 {82aca778} callsubr
325 hlineto
-226 -320 53 -14 236 334 rlineto
553 hlineto
{2e86003e} callsubr
-528 hlineto
121 172 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="2e86003e">
11 51 rlineto
return
</CharString>
<CharString index="1" fingerprint="82aca778">
hlineto
-10 -51 rlineto
return
</CharString>
<CharString index="2" fingerprint="2e86003e">
11 51 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="d9dcffa2">
vstem
497 379 rmoveto
{2e86003e} callsubr
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,50 @@
<Glyph name="exclam_equal_equal.liga" lsb="-1197" width="625">
<CharString>
-32 49 60 188 {1a4ca569} callsubr
hstemhm
-1197 1793 -1296 665 cntrmask 11100000
hintmask 11101000
584 545 rmoveto
hintmask 11110000
{3e1270ac} callsubr
-691 hlineto
hintmask 11101000
60 85 -47 23 -76 -108 rlineto
-933 {6a7250c2} callsubr
902 hlineto
-133 -189 rlineto
-805 {6a7250c2} callsubr
774 hlineto
-132 -188 rlineto
-678 hlineto
hintmask 11110000
-12 -60 rlineto
647 hlineto
hintmask 11101000
-150 -213 53 -14 160 227 rlineto
976 hlineto
12 60 rlineto
-945 hlineto
132 188 rlineto
849 hlineto
{3e1270ac} callsubr
-819 hlineto
133 189 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="3e1270ac">
12 59 rlineto
return
</CharString>
<CharString index="2" fingerprint="6a7250c2">
hlineto
-11 -59 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,20 @@
<Glyph name="greater_equal.2.liga" lsb="-407" width="550">
<CharString>
-165 4 hstem
-384 435 vstem
-376 {e303e366} callgsubr
-757 -293 rlineto
684 -89 rmoveto
9 50 rlineto
-705 hlineto
-9 -50 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="e303e366">
22 rmoveto
663 264 2 8 -555 258 33 43 614 -278 -10 -54 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="greater_equal.liga" lsb="-402" width="550">
<CharString>
-374 663 vstem
-369 {e303e366} callgsubr
-730 -283 rlineto
697 113 rmoveto
-730 -283 -17 42 758 297 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="e303e366">
22 rmoveto
663 264 2 8 -555 258 33 43 614 -278 -10 -54 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,69 @@
<Glyph name="greater_equal_greater.liga" lsb="-1170" width="625">
<CharString>
{42d64d00} callgsubr
-1170 1715 {66aa6cfa} callsubr
-1158 hlineto
hintmask 10010000
-174 179 -48 -47 286 -290 -2 -10 -392 -276 32 -54 rlineto
hintmask 01010000
270 191 rlineto
1143 {1f7399a1} callgsubr
-73 -30 rmoveto
hintmask 01010000
{59e2783f} callsubr
-1144 hlineto
68 48 11 61 rlineto
hintmask 00110000
-77 79 rlineto
1158 hlineto
98 -99 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="1" fingerprint="66aa6cfa">
{f85c4f0d} callgsubr
hintmask 00110000
130 -132 rlineto
return
</CharString>
<CharString index="2" fingerprint="44ebcab6">
236 658 rmoveto
-48 -47 rlineto
return
</CharString>
<CharString index="3" fingerprint="59e2783f">
-112 -79 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="42d64d00">
{dc85467b} callgsubr
-486 {1a4ca569} callsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="f85c4f0d">
hintmask 10010000
{44ebcab6} callsubr
return
</CharString>
<CharString index="3" fingerprint="1f7399a1">
hlineto
-195 -137 rlineto
hintmask 10010000
{29885e03} callgsubr
return
</CharString>
<CharString index="4" fingerprint="29885e03">
32 -54 422 299 11 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,38 @@
<Glyph name="greater_greater_equal.liga" lsb="-1183" width="550">
<CharString>
{28a20589} callsubr
-1183 1691 vstem
-766 306 rmoveto
-278 285 {1c579380} callsubr
380 271 rlineto
1284 176 rmoveto
-1095 hlineto
-157 161 {1c579380} callsubr
243 173 rlineto
1067 hlineto
{2e86003e} callsubr
-1007 hlineto
66 47 10 52 -71 73 rlineto
1034 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="28a20589">
156 51 172 51 hstem
return
</CharString>
<CharString index="1" fingerprint="1c579380">
{5a2c4896} callgsubr
-355 -252 27 -46 return
</CharString>
<CharString index="2" fingerprint="2e86003e">
11 51 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="5a2c4896">
-41 -40 259 -262 -2 -8 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,47 @@
<Glyph name="hyphen_greater.liga" lsb="-481" width="625">
<CharString>
{bd761604} callgsubr
-481 1026 {cd8d7d7a} callgsubr
-911 hlineto
-12 -61 rlineto
926 {7b498c3d} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="44ebcab6">
236 658 rmoveto
-48 -47 rlineto
return
</CharString>
<CharString index="1" fingerprint="7b498c3d">
hlineto
-365 -257 rlineto
hintmask 10100000
{688353bf} callsubr
</CharString>
<CharString index="2" fingerprint="688353bf">
{29885e03} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="bd761604">
{dc85467b} callgsubr
-366 61 hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="cd8d7d7a">
hintmask 10100000
{44ebcab6} callsubr
hintmask 01100000
254 -258 rlineto
return
</CharString>
<CharString index="3" fingerprint="29885e03">
32 -54 422 299 11 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,22 @@
<Glyph name="hyphen_hyphen.liga" lsb="-418" width="625">
<CharString>
-32 264 51 hstem
-418 304 172 304 vstem
-123 {3e00176a} callsubr
771 hmoveto
9 51 rlineto
-295 hlineto
-9 -51 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="3e00176a">
264 rmoveto
9 51 rlineto
-295 hlineto
-9 -51 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,47 @@
<Glyph name="hyphen_hyphen_greater.liga" lsb="-1106" width="625">
<CharString>
{bd761604} callgsubr
-1106 1651 {cd8d7d7a} callgsubr
-1536 hlineto
-12 -61 rlineto
1551 {7b498c3d} callsubr
</CharString>
<Subrs>
<CharString index="0" fingerprint="44ebcab6">
236 658 rmoveto
-48 -47 rlineto
return
</CharString>
<CharString index="1" fingerprint="7b498c3d">
hlineto
-365 -257 rlineto
hintmask 10100000
{688353bf} callsubr
</CharString>
<CharString index="2" fingerprint="688353bf">
{29885e03} callgsubr
endchar
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="bd761604">
{dc85467b} callgsubr
-366 61 hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="cd8d7d7a">
hintmask 10100000
{44ebcab6} callsubr
hintmask 01100000
254 -258 rlineto
return
</CharString>
<CharString index="3" fingerprint="29885e03">
32 -54 422 299 11 61 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,15 @@
<Glyph name="less_bar.liga" lsb="-339" width="625">
<CharString>
-32 -200 981 hstem
-339 669 vstem
265 779 rmoveto
-593 -419 -11 -61 413 -499 rlineto
66 hlineto
190 981 rlineto
-239 -895 rmoveto
-359 432 2 10 514 362 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs/>
</Glyph>
@@ -0,0 +1,20 @@
<Glyph name="less_equal.2.liga" lsb="-433" width="550">
<CharString>
37 66 hstem
-455 751 vstem
295 18 rmoveto
-10 -52 -643 293 {5070edda} callgsubr
-167 -405 rmoveto
705 hlineto
9 50 rlineto
-705 hlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="5070edda">
10 54 722 278 17 -43 -655 -258 -2 -8 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="less_equal.liga" lsb="-385" width="550">
<CharString>
-402 660 vstem
301 22 rmoveto
-33 -42 -620 283 {5070edda} callgsubr
-125 -193 rmoveto
11 56 642 -297 -33 -42 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="5070edda">
10 54 722 278 17 -43 -655 -258 -2 -8 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,52 @@
<Glyph name="less_equal_equal.liga" lsb="-1141" width="625">
<CharString>
{413e7510} callsubr
1713 hintmask 01110000
-937 420 rmoveto
1497 hlineto
{3e1270ac} callsubr
-1426 {b8940576} callsubr
1438 hlineto
12 60 rlineto
-1509 hlineto
-85 86 2 10 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="413e7510">
{42d64d00} callgsubr
-1141 return
</CharString>
<CharString index="1" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="2" fingerprint="3e1270ac">
12 59 rlineto
return
</CharString>
<CharString index="3" fingerprint="b8940576">
hlineto
178 125 rlineto
hintmask 10010000
{00532bd1} callsubr
hintmask 01110000
-142 143 rlineto
return
</CharString>
<CharString index="4" fingerprint="00532bd1">
-32 54 -422 -298 -11 -61 309 -318 48 48 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="42d64d00">
{dc85467b} callgsubr
-486 {1a4ca569} callsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,84 @@
<Glyph name="less_equal_greater.liga" lsb="-1141" width="625">
<CharString>
{413e7510} callsubr
1686 {6a70e420} callsubr
-1172 {b8940576} callsubr
1201 {1f7399a1} callgsubr
-73 -30 rmoveto
hintmask 01110000
{59e2783f} callsubr
-1345 hlineto
{ea48c49a} callgsubr
1313 hlineto
98 -99 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="413e7510">
{42d64d00} callgsubr
-1141 return
</CharString>
<CharString index="1" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="2" fingerprint="6a70e420">
{f85c4f0d} callgsubr
hintmask 01110000
130 -132 rlineto
return
</CharString>
<CharString index="3" fingerprint="44ebcab6">
236 658 rmoveto
-48 -47 rlineto
return
</CharString>
<CharString index="4" fingerprint="b8940576">
hlineto
178 125 rlineto
hintmask 10010000
{00532bd1} callsubr
hintmask 01110000
-142 143 rlineto
return
</CharString>
<CharString index="5" fingerprint="00532bd1">
-32 54 -422 -298 -11 -61 309 -318 48 48 rlineto
return
</CharString>
<CharString index="6" fingerprint="59e2783f">
-112 -79 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="42d64d00">
{dc85467b} callgsubr
-486 {1a4ca569} callsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="f85c4f0d">
hintmask 10010000
{44ebcab6} callsubr
return
</CharString>
<CharString index="3" fingerprint="1f7399a1">
hlineto
-195 -137 rlineto
hintmask 10010000
{29885e03} callgsubr
return
</CharString>
<CharString index="4" fingerprint="29885e03">
32 -54 422 299 11 61 rlineto
return
</CharString>
<CharString index="5" fingerprint="ea48c49a">
-85 86 2 10 131 92 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,59 @@
<Glyph name="less_equal_less.liga" lsb="-1141" width="625">
<CharString>
{413e7510} callsubr
1715 hintmask 01110000
182 328 rmoveto
392 276 rlineto
hintmask 10010000
-32 54 rlineto
hintmask 01110000
-253 -179 rlineto
-1143 {b8940576} callsubr
1158 hlineto
hintmask 10010000
186 -191 48 48 -286 289 rlineto
hintmask 01110000
-1165 -86 rmoveto
{ea48c49a} callgsubr
1142 hlineto
-85 -60 -11 -61 65 -67 rlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="413e7510">
{42d64d00} callgsubr
-1141 return
</CharString>
<CharString index="1" fingerprint="1a4ca569">
60 188 59 return
</CharString>
<CharString index="2" fingerprint="b8940576">
hlineto
178 125 rlineto
hintmask 10010000
{00532bd1} callsubr
hintmask 01110000
-142 143 rlineto
return
</CharString>
<CharString index="3" fingerprint="00532bd1">
-32 54 -422 -298 -11 -61 309 -318 48 48 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="42d64d00">
{dc85467b} callgsubr
-486 {1a4ca569} callsubr
hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="ea48c49a">
-85 86 2 10 131 92 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,48 @@
<Glyph name="less_exclam_hyphen_hyphen.liga" lsb="-1782" width="625">
<CharString>
-32 0 96 196 61 hstemhm
-1782 417 -352 651 -16 225 50 1291 hintmask 11010100
-1007 226 rmoveto
39 hlineto
hintmask 11001100
{695a0e17} callgsubr
-713 68 rmoveto
hintmask 11010100
4 3 -1 -5 rlineto
639 hlineto
12 61 rlineto
-571 hlineto
hintmask 11100100
272 193 {dfda4220} callgsubr
rlineto
927 67 rmoveto
-12 -61 rlineto
1279 hlineto
12 61 rlineto
hintmask 11001100
-1566 -353 {2f3e5c58} callgsubr
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="695a0e17">
25 116 56 211 30 122 rrcurveto
-78 hlineto
-21 -122 -29 -211 -22 -116 rrcurveto
return
</CharString>
<CharString index="1" fingerprint="dfda4220">
{46d990e9} callgsubr
278 -286 41 41 -259 262 return
</CharString>
<CharString index="2" fingerprint="46d990e9">
-27 45 -381 -270 -9 -52 return
</CharString>
<CharString index="3" fingerprint="2f3e5c58">
rmoveto
90 hlineto
20 96 rlineto
-90 hlineto
endchar
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,35 @@
<Glyph name="less_hyphen.liga" lsb="-516" width="625">
<CharString>
{bd761604} callgsubr
-516 1000 hintmask 01100000
484 353 rmoveto
-891 {e767cc75} callgsubr
891 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="00532bd1">
-32 54 -422 -298 -11 -61 309 -318 48 48 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="bd761604">
{dc85467b} callgsubr
-366 61 hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="e767cc75">
hlineto
356 251 rlineto
hintmask 10100000
{00532bd1} callsubr
hintmask 01100000
-260 263 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,35 @@
<Glyph name="less_hyphen_hyphen.liga" lsb="-1141" width="625">
<CharString>
{bd761604} callgsubr
-1141 1625 hintmask 01100000
484 353 rmoveto
-1516 {e767cc75} callgsubr
1516 hlineto
endchar
</CharString>
<Subrs>
<CharString index="0" fingerprint="00532bd1">
-32 54 -422 -298 -11 -61 309 -318 48 48 rlineto
return
</CharString>
</Subrs>
<GlobalSubrs>
<CharString index="0" fingerprint="bd761604">
{dc85467b} callgsubr
-366 61 hstemhm
return
</CharString>
<CharString index="1" fingerprint="dc85467b">
-32 -19 677 return
</CharString>
<CharString index="2" fingerprint="e767cc75">
hlineto
356 251 rlineto
hintmask 10100000
{00532bd1} callsubr
hintmask 01100000
-260 263 rlineto
return
</CharString>
</GlobalSubrs>
</Glyph>
@@ -0,0 +1,17 @@
<Glyph name="less_slash.liga" lsb="-532" width="625">
<CharString>
-32 -532 417 -246 665 hintmask 10000000
257 712 rmoveto
-479 -679 -250 253 2 8 355 252 {46d990e9} callgsubr
276 -284 rlineto
hintmask 01000000
-105 -149 53 -14 612 867 rlineto
endchar
</CharString>
<Subrs/>
<GlobalSubrs>
<CharString index="0" fingerprint="46d990e9">
-27 45 -381 -270 -9 -52 return
</CharString>
</GlobalSubrs>
</Glyph>

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