Compare commits
109 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 93d4d03ef5 | |||
| 59435e4ee8 | |||
| cad9759288 | |||
| d3940070ed | |||
| 320fb069f7 | |||
| d6c1df83ed | |||
| 0b29866a3e | |||
| 9a70d50924 | |||
| 68741971f1 | |||
| bfae141c75 | |||
| 844b55f7b2 | |||
| 0c226a60bc | |||
| 2dd2079309 | |||
| 6f14cd709a | |||
| 06b5464fd6 | |||
| dc2d35f1c5 | |||
| 0823ed98af | |||
| 7b6eb72e66 | |||
| 53e9951957 | |||
| 44fc9b5ead | |||
| a86034b38d | |||
| c1bb4a9197 | |||
| 77244583f0 | |||
| f26cecc4bf | |||
| 732a29a79f | |||
| 258531d577 | |||
| 4cf344a435 | |||
| 63002e7901 | |||
| 38eb637717 | |||
| 2dbdb2543c | |||
| 4b908ad07b | |||
| a6dc28a403 | |||
| 84a4863e1f | |||
| 6fe2acd518 | |||
| 25051cfb52 | |||
| f91b91b7df | |||
| 1ed5f8afe4 | |||
| e87797d070 | |||
| 4e50610989 | |||
| 009dac1619 | |||
| 43d7f44527 | |||
| 9abc800918 | |||
| 10027973d8 | |||
| a9b6b1305d | |||
| 85cdb5c0a4 | |||
| 22d1a4d16d | |||
| 59466b8dfa | |||
| 2ed7ab50b3 | |||
| 37caa3ddea | |||
| b70accff53 | |||
| da7425fbe9 | |||
| 2282dd3d5d | |||
| d7e18a4962 | |||
| d71b04356a | |||
| 651edc2b62 | |||
| 02818d15a9 | |||
| 5c9a5d51a8 | |||
| fc180099b8 | |||
| 1f5712ecae | |||
| 2cbf9d84cb | |||
| d1c8620f6d | |||
| 0f10f62920 | |||
| fd4b980b7c | |||
| 286e5f0820 | |||
| 6e66c37704 | |||
| ad3050a731 | |||
| da1abf02c6 | |||
| 3a03d21c90 | |||
| 05bc5eaa4e | |||
| 03114bf88d | |||
| 83f9a6d170 | |||
| f0a883ee62 | |||
| 6e3415763c | |||
| 2bdf134f70 | |||
| edbbc78b82 | |||
| 4edf9bc945 | |||
| 538de4ad67 | |||
| 3550ee0bb1 | |||
| 65b938fdc1 | |||
| c5112089cb | |||
| 22ebd8aab7 | |||
| fe530d1ea9 | |||
| 19727aecc5 | |||
| 7a3be9b579 | |||
| 371be6a082 | |||
| 86b1d66f15 | |||
| 5538ffe2b5 | |||
| 360402a197 | |||
| f7cafe55b3 | |||
| 9cef42b1fb | |||
| 8360f4ad81 | |||
| 73f188856f | |||
| d2c63ad1ca | |||
| 0a7eca61d4 | |||
| fc8827e17c | |||
| 150ed13829 | |||
| 502f445758 | |||
| d3c5604090 | |||
| 61cfbf075d | |||
| 28eb8b58e5 | |||
| 91c4421765 | |||
| 3ed59809de | |||
| 660c719779 | |||
| 610140f1de | |||
| b6f785bfc7 | |||
| bc46df5f1c | |||
| 5f13b9c918 | |||
| 9398884dc6 | |||
| 036e837e0c |
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"projectName": "operator-mono-lig",
|
||||
"projectOwner": "kiliman",
|
||||
"repoType": "github",
|
||||
"repoHost": "https://github.com",
|
||||
"files": [
|
||||
"README.md"
|
||||
],
|
||||
"imageSize": 100,
|
||||
"commit": true,
|
||||
"commitConvention": "none",
|
||||
"contributors": [
|
||||
{
|
||||
"login": "kiliman",
|
||||
"name": "Kiliman",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/47168?v=4",
|
||||
"profile": "https://github.com/kiliman",
|
||||
"contributions": [
|
||||
"code",
|
||||
"doc",
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "mskelton",
|
||||
"name": "Mark Skelton",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/25914066?v=4",
|
||||
"profile": "https://github.com/mskelton",
|
||||
"contributions": [
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "drod3763",
|
||||
"name": "Derick Rodriguez",
|
||||
"avatar_url": "https://avatars2.githubusercontent.com/u/7785716?v=4",
|
||||
"profile": "https://github.com/drod3763",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "amitkparekh",
|
||||
"name": "Amit Parekh",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/7276308?v=4",
|
||||
"profile": "https://github.com/amitkparekh",
|
||||
"contributions": [
|
||||
"doc",
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "CandySunPlus",
|
||||
"name": "NikSun",
|
||||
"avatar_url": "https://avatars0.githubusercontent.com/u/502700?v=4",
|
||||
"profile": "https://github.com/CandySunPlus",
|
||||
"contributions": [
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Jakob6174",
|
||||
"name": "Jakob Pearson",
|
||||
"avatar_url": "https://avatars3.githubusercontent.com/u/40262817?v=4",
|
||||
"profile": "https://github.com/Jakob6174",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7
|
||||
}
|
||||
@@ -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'
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
root: ./docs
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: New ligature
|
||||
about: Use this template for requesting new ligatures.
|
||||
title: "Create `[LIGATURE NAME]` ligature"
|
||||
labels: enhancement
|
||||
---
|
||||
|
||||
<!-- Please only request a single ligature per issue, unless you would like something which has both symmetrical pairs (e.g. {{ and }}) -->
|
||||
|
||||
## Request preferences
|
||||
|
||||
* Weight requested: _State which weight you would like, and whether it is for SSm or not._
|
||||
|
||||
|
||||
## Ligature description
|
||||
|
||||
_Please descirbe the ligature here as best you can. Feel free to use images/screenshots to help us get ideas of how to implement it._
|
||||
|
||||
---
|
||||
|
||||
### Ligature variations
|
||||
|
||||
Due to how development is handled, not all ligatures are created at the same time. However, we will get to them all eventually. If you would like to help us develop ligatures, please reach out to us via email at kiliman@gmail.com
|
||||
|
||||
#### Operator Mono
|
||||
|
||||
- [ ] XLight
|
||||
- [ ] XLight Italic
|
||||
- [ ] Light
|
||||
- [ ] Light Italic
|
||||
- [ ] Book
|
||||
- [ ] Book Italic
|
||||
- [ ] Medium
|
||||
- [ ] Medium Italic
|
||||
- [ ] Bold
|
||||
- [ ] Bold Italic
|
||||
|
||||
#### Operator Mono SSm
|
||||
|
||||
- [ ] SSm Light
|
||||
- [ ] SSm Light Italic
|
||||
- [ ] SSm Book
|
||||
- [ ] SSm Book Italic
|
||||
- [ ] SSm Medium
|
||||
- [ ] SSm Medium Italic
|
||||
- [ ] SSm Bold
|
||||
- [ ] SSm Bold Italic
|
||||
@@ -1,4 +1,5 @@
|
||||
build
|
||||
node_modules
|
||||
.idea
|
||||
.vscode/launch.json
|
||||
.DS_Store
|
||||
|
||||
@@ -1,12 +1,42 @@
|
||||
# Operator Mono Ligatures
|
||||
|
||||
[](#contributors-)
|
||||
|
||||
<img src="./images/operator-mono-lig.png" />
|
||||
|
||||
This project will generate new OpenType fonts for [Operator Mono](https://www.typography.com/fonts/operator/styles/) that includes ligatures similar to
|
||||
those found in the popular [Fira Code](https://github.com/tonsky/FiraCode) font.
|
||||
|
||||
These ligatures were custom created using [Glyphs](https://glyphsapp.com/).
|
||||
There are even italic versions of the ligatures.
|
||||
These ligatures were custom created using [Glyphs](https://glyphsapp.com/).
|
||||
There are even italic versions of the ligatures.
|
||||
|
||||
## Take the poll
|
||||
## 🎉 What's New in Version 2
|
||||
|
||||
<img src="./images/new-ligatures.png"/>
|
||||
|
||||
All new redesigned ligatures with better hinting. Updated font generation to support advanced OpenType features
|
||||
like those found in Fira Code. For example, the cursor now moves inside the ligature. It also handles repeating
|
||||
characters properly.
|
||||
|
||||
<img src="./images/caret-position.gif" />
|
||||
|
||||
With the awesome help from [Mark Skelton](https://github.com/mskelton), we now have the full set of ligatures for
|
||||
the following fonts. Thanks Mark, and thanks to all of you who have been patiently waiting for these ligatures to be completed.
|
||||
|
||||
- Operator Mono SSm Light/Light Italic
|
||||
- Operator Mono SSm Book/Book Italic
|
||||
- Operator Mono SSm Medium/Medium Italic
|
||||
- Operator Mono SSm Bold/Bold Italic
|
||||
- Operator Mono Light/Light Italic
|
||||
- Operator Mono Book/Book Italic
|
||||
|
||||
## 🙏 Help Wanted
|
||||
|
||||
As noted above, v2 does not include all weights for Operator Mono. In order to update the other fonts, all the ligatures need to be redone. Unfortunately I just don't have the time to do that at the moment. If you have a Mac and are interested in helping, please let me know. I will even purchase a license to Gylphs Mini for you.
|
||||
|
||||
You can reach me at kiliman@gmail.com.
|
||||
|
||||
## ☑️ Take the poll
|
||||
|
||||
Which font weight of Operator Mono do you use? Also note difference between Screen Smart (SSm) and regular version. This will help prioritize the order of development.
|
||||
|
||||
@@ -17,101 +47,122 @@ Which font weight of Operator Mono do you use? Also note difference between Scre
|
||||
[](https://api.gh-polls.com/poll/01C6T4C3FBG21KVS7FAW7Z09B2/Operator%20Mono%20Medium/vote)
|
||||
[](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)**
|
||||
|
||||
[](https://youtu.be/ttI3W5Dh54E)
|
||||
|
||||
>NOTE: Because *Operator Mono* is not a free font, you must have the original font files. This utility
|
||||
will merge the ligature definitions into a copy of the original font. The new font family is named *Operator Mono Lig* so you can install it side-by-side with the original font.
|
||||
> NOTE: Because _Operator Mono_ is not a free font, you must have the original font files. This utility
|
||||
> will merge the ligature definitions into a copy of the original font. The new font family is named _Operator Mono Lig_ so you can install it side-by-side with the original font.
|
||||
|
||||
## Prerequisites
|
||||
* The original *Operator Mono* font... of course.
|
||||
* Install *fonttools* from https://github.com/fonttools/fonttools
|
||||
* Install Python
|
||||
* Run: `pip install fonttools` (for Mac users it's better run `pip3 install fonttools` - [info](https://stackoverflow.com/a/33416270/3191011))
|
||||
* Node.js (**version 7.6+ for async/await support**)
|
||||
|
||||
## How to Install
|
||||
- The original _Operator Mono_ font... of course.
|
||||
- Python (v2.7+)
|
||||
- Node.js
|
||||
- Install _fonttools_ from https://github.com/fonttools/fonttools
|
||||
- Windows/Linux: `pip install fonttools`
|
||||
- Mac: `pip3 install fonttools`
|
||||
|
||||
1. Once all the prerequisites have been installed, clone this repo.
|
||||
## Installation
|
||||
|
||||
2. From the command line, run:
|
||||
Once all the prerequisites have been installed, clone this repo or download latest release from [Releases](https://github.com/kiliman/operator-mono-lig/releases) and unzip.
|
||||
|
||||
```
|
||||
Next, copy your _Operator Mono_ OpenType files into the `original` folder. **NOTE**: Filenames must not include spaces. It should look like:
|
||||
|
||||
- OperatorMonoSSm-Book.otf
|
||||
- OperatorMonoSSm-BookItalic.otf
|
||||
- OperatorMono-Light.otf
|
||||
- OperatorMono-LightItalic.otf
|
||||
- etc.
|
||||
|
||||
Finally, run the following commands to install npm dependencies and build the font files. The new font files will be placed in the `build` folder. You can now install these fonts on your system.
|
||||
|
||||
```sh
|
||||
npm install
|
||||
```
|
||||
|
||||
3. Copy your *Operator Mono* OpenType files into the `original` folder.
|
||||
- **NOTE**: File names must strictly be of the form `OperatorMono-[Book/BookItalic/Medium/MediumItalic].otf`.
|
||||
|
||||
4. From the command line, run:
|
||||
|
||||
### Windows
|
||||
|
||||
```
|
||||
# Windows
|
||||
build
|
||||
```
|
||||
|
||||
### Linux/Mac
|
||||
|
||||
```
|
||||
# Linux/Mac
|
||||
./build.sh
|
||||
```
|
||||
|
||||
This will generate the new font files in the `build` folder. You can now install these fonts on your system.
|
||||
### Docker
|
||||
|
||||
---
|
||||
If you use Docker, you can also use the executable Docker image [here](https://github.com/drod3763/kiliman-operator-mono-lig-docker). It handles all the prerequisite installation for you, you just need to:
|
||||
|
||||
<img src="./images/OperatorMonoAllTheThings.png" />
|
||||
1. Clone the repo [located here](https://github.com/drod3763/kiliman-operator-mono-lig-docker).
|
||||
1. Copy your _Operator Mono_ OpenType files into the `input` folder.
|
||||
1. From the command line run:
|
||||
```sh
|
||||
docker-compose run --rm operator-mono-lig
|
||||
```
|
||||
|
||||
## GitHub
|
||||
Add *Operator Mono* to GitHub code blocks using the [Stylus Extension](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne).
|
||||
The image will build and execute the conversion. The new font files will be generated into the `build` folder.
|
||||
|
||||
Create a style and enter the following:
|
||||
## Configure Your Code Editor
|
||||
|
||||
```css
|
||||
.blob-code-inner, .blob-num, .highlight pre { font-family: "Operator Mono Lig" !important; font-size: 16px !important; }
|
||||
.pl-c, .pl-e { font-style: italic; }
|
||||
.pl-c { color: #4CAF50; }
|
||||
You can now select the newly generated font in your code editor. Make sure you enable font ligatures and set the desired font weight if using Windows. The code block below shows what this might look like if using VS Code.
|
||||
|
||||
```json
|
||||
"editor.fontFamily": "OperatorMonoSSmLig-Book",
|
||||
"editor.fontLigatures": true,
|
||||
// for Windows
|
||||
"editor.fontFamily": "Operator Mono SSm Lig",
|
||||
"editor.fontLigatures": true,
|
||||
"editor.fontWeight": "500", // adjust for desired weight
|
||||
```
|
||||
<img src="./images/github-operatormono.png" />
|
||||
|
||||
## Visual Studio
|
||||
## 🔧 Customize the generated font
|
||||
|
||||
You can have Visual Studio display the nice *Operator Mono* italic font for comments, using the [CommentsPlus Extension](https://marketplace.visualstudio.com/items?itemName=mhoumann.CommentsPlus).
|
||||
By default, all available ligatures will be added to the generated font. However, if you don't like a particular
|
||||
ligature, or would prefer to use an alternate glyph, you can create a `profiles.ini` file in the `./original` folder
|
||||
to configure how the font should be built.
|
||||
|
||||
<img src="./images/vsoperatormono.png" />
|
||||
You can create one or more profiles. Each profile will have a set of directives. You can specify alternate glyphs for
|
||||
a given ligature. You can also prevent a ligature from being added.
|
||||
|
||||
## Hyper shell
|
||||
Each profile will be listed with `[profile name]` (the first profile should be named default). The generated font will
|
||||
include the profile name. For example `[Go]` would generate the font: _Operator Mono Lig Go_. This way you can configure
|
||||
a different set of ligatures for each language in your favorite code editor.
|
||||
|
||||
Add *Operator Mono* to [Hyper](https://hyper.is/) a JS/CSS/HTML Terminal.
|
||||
```ini
|
||||
# name of profile (one or more sections, first should be name default)
|
||||
[default]
|
||||
# glyph=altglyph
|
||||
greater_equal.liga=greater_equal.2.liga
|
||||
|
||||
<img src="./images/hyper terminal.png" />
|
||||
# do not include glyph (add ! prefix)
|
||||
!equal_equal.liga
|
||||
|
||||
# another optional section (will create a font named Operator Mono Lig Go)
|
||||
[Go]
|
||||
... add custom directives for this font ...
|
||||
```
|
||||
|
||||
## 😍 Thank You
|
||||
|
||||
Thanks to Hoefler&Co for making such an amazing font. It makes writing code truly pleasurable.
|
||||
|
||||
Thanks also to all of you for your kinds words of encouragement and feedback. I really
|
||||
appreciate it.
|
||||
|
||||
## ✨ Contributors
|
||||
|
||||
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/kiliman"><img src="https://avatars3.githubusercontent.com/u/47168?v=4" width="100px;" alt="Kiliman"/><br /><sub><b>Kiliman</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=kiliman" title="Code">💻</a> <a href="https://github.com/kiliman/operator-mono-lig/commits?author=kiliman" title="Documentation">📖</a> <a href="#design-kiliman" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/mskelton"><img src="https://avatars3.githubusercontent.com/u/25914066?v=4" width="100px;" alt="Mark Skelton"/><br /><sub><b>Mark Skelton</b></sub></a><br /><a href="#design-mskelton" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/drod3763"><img src="https://avatars2.githubusercontent.com/u/7785716?v=4" width="100px;" alt="Derick Rodriguez"/><br /><sub><b>Derick Rodriguez</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=drod3763" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://github.com/amitkparekh"><img src="https://avatars3.githubusercontent.com/u/7276308?v=4" width="100px;" alt="Amit Parekh"/><br /><sub><b>Amit Parekh</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=amitkparekh" title="Documentation">📖</a> <a href="#design-amitkparekh" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/CandySunPlus"><img src="https://avatars0.githubusercontent.com/u/502700?v=4" width="100px;" alt="NikSun"/><br /><sub><b>NikSun</b></sub></a><br /><a href="#design-CandySunPlus" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/Jakob6174"><img src="https://avatars3.githubusercontent.com/u/40262817?v=4" width="100px;" alt="Jakob Pearson"/><br /><sub><b>Jakob Pearson</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=Jakob6174" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-enable -->
|
||||
<!-- prettier-ignore-end -->
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
|
||||
|
||||
@@ -19,10 +19,10 @@ set lig=%1
|
||||
set otf=%lig:Lig-=-%
|
||||
|
||||
if not exist .\original\%otf%.otf exit /b
|
||||
if not exist .\ligature\%lig%\charstrings.xml exit /b
|
||||
if not exist .\ligature\%lig%\glyphs\* exit /b
|
||||
|
||||
@echo Building %lig%
|
||||
ttx -f .\original\%otf%.otf
|
||||
node index.js %otf%
|
||||
ttx -f .\build\%lig%.ttx
|
||||
for %%f in (.\build\%lig%*.ttx) do ttx -f %%f
|
||||
exit /b
|
||||
|
||||
@@ -10,7 +10,7 @@ build_font() {
|
||||
then
|
||||
return
|
||||
fi
|
||||
if [ ! -e "./ligature/$lig/charstrings.xml" ]
|
||||
if [ ! -e "./ligature/$lig/glyphs" ]
|
||||
then
|
||||
return
|
||||
fi
|
||||
@@ -18,7 +18,10 @@ build_font() {
|
||||
echo Building $1
|
||||
ttx -f "./original/$otf.otf"
|
||||
node index.js $otf
|
||||
ttx -f ./build/$1.ttx
|
||||
|
||||
for f in ./build/$1*.ttx ; do
|
||||
ttx -f $f
|
||||
done
|
||||
}
|
||||
|
||||
if [ -n "$1" ]
|
||||
|
||||
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 273 KiB |
|
After Width: | Height: | Size: 321 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 329 KiB |
|
After Width: | Height: | Size: 378 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 203 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 218 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,4 @@
|
||||
# Introduction
|
||||
|
||||
Testing
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Table of contents
|
||||
|
||||
* [Introduction](README.md)
|
||||
* [Installation instructions](installation-instructions.md)
|
||||
* [Changelog](changelog.md)
|
||||
|
||||
## Developing ligatures
|
||||
|
||||
* [Setting up your development environment](developing-ligatures/setting-up-your-development-environment.md)
|
||||
* [Designing your first ligature](developing-ligatures/designing-your-first-ligature.md)
|
||||
* [Committing your Glyphs file](developing-ligatures/committing-your-glyphs-file.md)
|
||||
* [Ensuring ligatures work at small sizes](developing-ligatures/ensuring-ligatures-work-at-small-sizes.md)
|
||||
|
||||
## Ligature Recipes
|
||||
|
||||
* [www](ligature-recipes/www.md)
|
||||
* [Double-braces](ligature-recipes/double-braces/README.md)
|
||||
* [Roman variant](ligature-recipes/double-braces/roman-variant.md)
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
description: See what has changed each release.
|
||||
---
|
||||
|
||||
# Changelog
|
||||
|
||||
###
|
||||
|
||||
## 15.0.0 - 2042-12-0
|
||||
|
||||
### Fixed
|
||||
|
||||
* Removed humans, they weren't doing fine with animals.
|
||||
|
||||
### Changed
|
||||
|
||||
* Animals are now super cute, all of them.
|
||||
|
||||
## 14.0.0 - 2042-10-06
|
||||
|
||||
### Added
|
||||
|
||||
* Introduced animals into the world, we believe they're going to be a neat addition.
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# Committing your Glyphs file
|
||||
|
||||
The Glyphs file is very difficult to merge, so standard tools like `git rebase` don't work well. I have created some tools that will allow you to update your existing Glyphs file on top of the current.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Make sure you have created a separate branch for your changes and you've committed all your changes to the branch.
|
||||
{% endhint %}
|
||||
|
||||
1. When you're ready to issue a PR for your changes, you need to run the `./tools/glyphysrebase.sh` tool.
|
||||
2. You can now create your PR, or continue making changes and running the rebase tool periodically to keep up-to-date with master.
|
||||
|
||||
## How the tool works
|
||||
|
||||
1. Checks out a clean copy of `master` in a temporary folder.
|
||||
2. Copies your current working copy to a backup folder.
|
||||
3. Copies the master copy into your working copy \(basically resetting everything back before your changes\).
|
||||
4. Runs the `./tools/copyallglyphs.sh` script to copy ligatures from your backup folder to the current master in your working copy.
|
||||
5. At this point, you now have a glyphs file that includes your custom ligatures on top of the current master.
|
||||
6. The "rebased" files are then committed.
|
||||
7. You can now issue a PR. This should easily merge into master.
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Designing your first ligature
|
||||
|
||||
## Getting Super Powers
|
||||
|
||||
Becoming a super hero is a fairly straight forward process:
|
||||
|
||||
```
|
||||
$ give me super-powers
|
||||
```
|
||||
|
||||
{% hint style="info" %}
|
||||
Super-powers are granted randomly so please submit an issue if you're not happy with yours.
|
||||
{% endhint %}
|
||||
|
||||
Once you're strong enough, save the world:
|
||||
|
||||
```
|
||||
// Ain't no code for that yet, sorry
|
||||
echo 'You got to trust me on this, I saved the world'
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# Ensuring ligatures work at small sizes
|
||||
|
||||
After creating each ligature, you going to need to make sure it works at very small sizes. Ensure the brace works at very small sizes by looking at it when its very small, by dragging up from the bottom of the editor. This need to be done because as [ScreenSmart fonts are guaranteed to work at a minimum of 9px](https://www.typography.com/fonts/operator/how-to-use#setting_text_and_headlines):
|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
description: Things you will need to create additional ligatures.
|
||||
---
|
||||
|
||||
# Setting up your development environment
|
||||
|
||||
## Getting Super Powers
|
||||
|
||||
Becoming a super hero is a fairly straight forward process:
|
||||
|
||||
```
|
||||
$ give me super-powers
|
||||
```
|
||||
|
||||
{% hint style="info" %}
|
||||
Super-powers are granted randomly so please submit an issue if you're not happy with yours.
|
||||
{% endhint %}
|
||||
|
||||
Once you're strong enough, save the world:
|
||||
|
||||
```
|
||||
// Ain't no code for that yet, sorry
|
||||
echo 'You got to trust me on this, I saved the world'
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
description: How to install the ligatures
|
||||
---
|
||||
|
||||
# Installation instructions
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
---
|
||||
description: Recipe for the double-brace ligature
|
||||
---
|
||||
|
||||
# Double-braces
|
||||
|
||||
## Creating the ligature \(Roman\)
|
||||
|
||||
1.
|
||||

|
||||
|
||||
For whichever brace is the "inner-brace", change the dimensions as so, changing only the size \(the `%` in the middle column\) and the rotation \(the right most setting\):
|
||||
|
||||

|
||||
|
||||
Move the left-most brace to the left and the right-most brace to the left so the top/bottom parts cross the middle guide and the numbers are like so:
|
||||
|
||||

|
||||
|
||||
Create a new guide and move the guide so it intersects the pointy inner-corner of the larger brace
|
||||
|
||||

|
||||
|
||||
Move the smaller brace vertically \(up/down\) so the two pointy inner-corner bits cross like so:
|
||||
|
||||

|
||||
|
||||
## Creating the italic ligature
|
||||
|
||||
Repeat all the steps as above ligature above **BUT set the middle guide** **to**:
|
||||
|
||||

|
||||
|
||||
## Final ligatures
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
description: How to create the Roman variant of the double-brace ligature
|
||||
---
|
||||
|
||||
# Roman variant
|
||||
|
||||
{% hint style="info" %}
|
||||
|
||||
{% endhint %}
|
||||
|
||||
1. Add the `braceleft` component twice, or `braceright` component twice.
|
||||
2. Create a guide \(Right-click -> Add Guide\)
|
||||
3. Set the settings on the guide as so:
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
# www
|
||||
|
||||
@@ -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 => {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -1,171 +1,283 @@
|
||||
const Promise = require('bluebird');
|
||||
const fs = Promise.promisifyAll(require('fs'));
|
||||
const fs = require('fs');
|
||||
const os = require('os');
|
||||
if (!os.EOL) {
|
||||
os.EOL = process.platform === 'win32' ? '\r\n' : '\n';
|
||||
}
|
||||
|
||||
const gsub = require('./gsub');
|
||||
|
||||
const xpath = require('xpath');
|
||||
const { DOMParser, XMLSerializer } = require('xmldom');
|
||||
const format = require('xml-formatter');
|
||||
let fontName;
|
||||
let ligFontName;
|
||||
|
||||
const regEx = /\.liga$/;
|
||||
const regExBlankLines = /^(?=\n)$|^\s*/gm;
|
||||
const regExWhitespace = /^\s+$/;
|
||||
const NodeType = {};
|
||||
NodeType.TEXT_NODE = 3;
|
||||
|
||||
async function main() {
|
||||
let dom;
|
||||
function main() {
|
||||
fontName = process.argv[2];
|
||||
ligFontName = fontName.split('-').join('Lig-');
|
||||
|
||||
const srcFileName = `./original/${fontName}.ttx`;
|
||||
const dstFileName = `./build/${ligFontName}.ttx`;
|
||||
console.log(`Reading original font file ${srcFileName}`);
|
||||
const xml = await fs.readFileAsync(srcFileName, 'utf-8');
|
||||
const dom = new DOMParser().parseFromString(xml);
|
||||
const xml = fs.readFileSync(srcFileName, 'utf-8');
|
||||
dom = new DOMParser().parseFromString(xml);
|
||||
|
||||
try {
|
||||
await processPatch('names', patchNames, dom);
|
||||
await processPatch('glyphs', patchGlyphs, dom);
|
||||
await processPatch('gpos', patchGpos, dom);
|
||||
await processPatch('gsub', patchGsub, dom);
|
||||
await processPatch('hmtx', patchHmtx, dom);
|
||||
//await processPatch('lookup', patchLookup, dom);
|
||||
await processPatch('charstrings', patchCharStrings, dom);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
const profiles = getProfiles();
|
||||
|
||||
// process settings (there may be more than one font to build)
|
||||
profiles.forEach(profile => buildFont(profile));
|
||||
|
||||
console.log(`Writing ligature font file ${dstFileName}`);
|
||||
await fs.writeFileAsync(dstFileName, format(serialize(dom)));
|
||||
console.log('Done');
|
||||
}
|
||||
|
||||
async function loadConfigAsync(name) {
|
||||
const buildFont = profile => {
|
||||
// add suffix to dstFileName if present
|
||||
const dstFileName = `./build/${ligFontName}${profile.suffixWithLeadingHyphen}.ttx`;
|
||||
console.log(
|
||||
`Building ligature font file ${dstFileName} name = ${profile.name}`
|
||||
);
|
||||
|
||||
const ligatures = sortLigatures(
|
||||
fs
|
||||
.readdirSync(`./ligature/${ligFontName}/glyphs`)
|
||||
.filter(file => /\.xml$/.test(file))
|
||||
.map(file => file.replace('.xml', ''))
|
||||
)
|
||||
.filter(name => !/\d+\.liga$/.test(name)) // skip alternates (ends with .#)
|
||||
.filter(name => filterLigatures(name, profile.ligatures))
|
||||
.map(name => mapLigatures(name, profile.ligatures))
|
||||
.filter(entry => filterGlyphsExists(entry));
|
||||
|
||||
const ligaturesWithLIG = ligatures;
|
||||
//[...ligatures, { name: 'LIG', glyph: 'LIG' }];
|
||||
|
||||
processPatch('names', patchNames, dom, ligatures, profile);
|
||||
processPatch('gsub', patchGsub, dom, ligatures);
|
||||
processPatch('charstrings', patchCharStrings, dom, ligaturesWithLIG);
|
||||
processPatch('glyphs', patchGlyphs, dom, ligaturesWithLIG);
|
||||
processPatch('hmtx', patchHmtx, dom);
|
||||
|
||||
console.log(`Writing ligature font file ${dstFileName}`);
|
||||
fs.writeFileSync(dstFileName, format(serialize(dom)));
|
||||
};
|
||||
|
||||
const getProfiles = () => {
|
||||
const profilePath = './original/profiles.ini';
|
||||
// return default profiles if profile doesn't exist
|
||||
if (!fs.existsSync(profilePath)) {
|
||||
return [
|
||||
{
|
||||
name: 'default',
|
||||
suffix: '',
|
||||
suffixWithLeadingSpace: '',
|
||||
suffixWithLeadingHyphen: '',
|
||||
ligatures: []
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
const profiles = [];
|
||||
let profile = null;
|
||||
|
||||
const content = fs.readFileSync(profilePath, 'utf-8');
|
||||
content
|
||||
.split(/\r|\r\n|\n/g)
|
||||
.filter(line => /^[#]/.test(line) === false && line.length > 0)
|
||||
.forEach(line => {
|
||||
const ch = line.trim()[0];
|
||||
if (ch === '[') {
|
||||
let name = line.substr(1, line.indexOf(']') - 1);
|
||||
profile = {
|
||||
name,
|
||||
suffix: name === 'default' ? '' : name,
|
||||
suffixWithLeadingSpace: name === 'default' ? '' : ' ' + name,
|
||||
suffixWithLeadingHyphen: name === 'default' ? '' : '-' + name,
|
||||
ligatures: []
|
||||
};
|
||||
profiles.push(profile);
|
||||
} else {
|
||||
if (!profile) {
|
||||
throw new Error('You must provide a profile name in []');
|
||||
}
|
||||
profile.ligatures.push(line);
|
||||
}
|
||||
});
|
||||
|
||||
return profiles;
|
||||
};
|
||||
|
||||
const filterLigatures = (name, mappings) => {
|
||||
// loop through mappings and return if name applies or not
|
||||
// skip if setting is !name
|
||||
return mappings.filter(entry => entry === '!' + name).length === 0;
|
||||
};
|
||||
|
||||
const mapLigatures = (name, mappings) => {
|
||||
let mapping = { name, glyph: name };
|
||||
mappings.forEach(entry => {
|
||||
const [val1, val2] = entry.split('=');
|
||||
// handle lig=altliga
|
||||
if (val1 === name) {
|
||||
mapping.glyph = val2;
|
||||
} else if (val2 === name) {
|
||||
mapping.name = val1;
|
||||
}
|
||||
});
|
||||
return mapping;
|
||||
};
|
||||
|
||||
const filterGlyphsExists = ({ glyph }) => {
|
||||
const exists = fs.existsSync(`./ligature/${ligFontName}/glyphs/${glyph}.xml`);
|
||||
return exists;
|
||||
};
|
||||
|
||||
const sortLigatures = ligatures => {
|
||||
// sort by most glyphs then alphabetically
|
||||
const sorted = ligatures
|
||||
.map(ligature => {
|
||||
return { count: ligature.split('_').length + 1, ligature: ligature };
|
||||
})
|
||||
.sort(
|
||||
(a, b) =>
|
||||
-compareProperty(a.count, b.count) || // sort by count descending
|
||||
compareProperty(a.ligature, b.ligature) // then by ligature alphabetically
|
||||
)
|
||||
.map(entry => entry.ligature);
|
||||
return sorted;
|
||||
};
|
||||
|
||||
const compareProperty = (a, b) => {
|
||||
if (typeof a === 'number') {
|
||||
return a || b ? (!a ? -1 : !b ? 1 : a === b ? 0 : a < b ? -1 : 1) : 0;
|
||||
} else {
|
||||
return a || b ? (!a ? -1 : !b ? 1 : a.localeCompare(b)) : 0;
|
||||
}
|
||||
};
|
||||
|
||||
const loadXml = name => {
|
||||
const fileName = `./ligature/${ligFontName}/${name}.xml`;
|
||||
const xml = await fs.readFileAsync(fileName, 'utf-8');
|
||||
const xml = fs.readFileSync(fileName, 'utf-8');
|
||||
return new DOMParser().parseFromString(xml);
|
||||
}
|
||||
};
|
||||
|
||||
async function processPatch(name, patchFunc, dom) {
|
||||
const processPatch = (name, patchFunc, dom, ligatures, profile) => {
|
||||
console.log(`Patching ${name}`);
|
||||
await patchFunc(dom);
|
||||
}
|
||||
patchFunc(dom, ligatures, profile);
|
||||
};
|
||||
|
||||
async function patchNames(dom) {
|
||||
const configDom = await loadConfigAsync('names');
|
||||
const PlatformId = {
|
||||
mac: 1,
|
||||
win: 3
|
||||
};
|
||||
|
||||
const names = xpath.select('/name/namerecord', configDom);
|
||||
const targetName = xpath.select('/ttFont/name', dom, true);
|
||||
const NameId = {
|
||||
familyName: 1,
|
||||
fontStyle: 2,
|
||||
uniqueId: 3,
|
||||
fullName: 4,
|
||||
version: 5,
|
||||
postscriptName: 6,
|
||||
windowsFamilyName: 16,
|
||||
fontStyleName: 17
|
||||
};
|
||||
|
||||
// get font and family name
|
||||
const familyName = getTextNode(
|
||||
configDom,
|
||||
'/name/namerecord[@nameID="1" and @platformID="1"]'
|
||||
);
|
||||
const fullName = getTextNode(
|
||||
configDom,
|
||||
'/name/namerecord[@nameID="4" and @platformID="1"]'
|
||||
const patchNames = (dom, ligatures, profile) => {
|
||||
const names = JSON.parse(
|
||||
fs.readFileSync(`./ligature/${ligFontName}/names.json`)
|
||||
);
|
||||
|
||||
const [name, style] = names.fontName.split('-');
|
||||
const [familyStyle, fullNameStyleTry] = names.fontStyle.split(' ');
|
||||
|
||||
let fullNameStyleTemp;
|
||||
if (fullNameStyleTry) {
|
||||
fullNameStyleTemp = fullNameStyleTry;
|
||||
} else {
|
||||
fullNameStyleTemp = '';
|
||||
}
|
||||
|
||||
const fullNameStyle = fullNameStyleTemp;
|
||||
const fontName = `${name}${profile.suffixWithLeadingHyphen}-${style}`;
|
||||
const familyNamePlat = `${names.familyName}${profile.suffixWithLeadingSpace}`;
|
||||
const familyName = `${familyNamePlat} ${familyStyle}`;
|
||||
const fullName = `${familyName} ${fullNameStyle}`;
|
||||
const uniqueId = `${names.foundry}: ${fullName}: ${names.version}`;
|
||||
// patch CFFFont
|
||||
const cffFont = xpath.select('/ttFont/CFF/CFFFont', dom, true);
|
||||
|
||||
cffFont.setAttribute('name', ligFontName);
|
||||
setAttribute(cffFont, 'FullName', 'value', fullName);
|
||||
setAttribute(cffFont, 'FamilyName', 'value', familyName);
|
||||
setAttribute(cffFont, 'FamilyName', 'value', familyNamePlat);
|
||||
|
||||
// update existing names with new names
|
||||
names.forEach(node => {
|
||||
const nameId = node.getAttribute('nameID');
|
||||
const platformId = node.getAttribute('platformID');
|
||||
// mac family name does not include style
|
||||
updateName(PlatformId.mac, NameId.familyName, familyNamePlat);
|
||||
updateName(PlatformId.mac, NameId.fontStyle, names.fontStyle);
|
||||
updateName(PlatformId.mac, NameId.uniqueId, uniqueId);
|
||||
updateName(PlatformId.mac, NameId.fullName, fullName);
|
||||
updateName(PlatformId.mac, NameId.postscriptName, fontName);
|
||||
updateName(PlatformId.mac, NameId.windowsFamilyName, familyNamePlat);
|
||||
updateName(PlatformId.mac, NameId.fontStyleName, names.fontStyle);
|
||||
|
||||
// search for namerecord in target dom and replace with this one or append node
|
||||
const target = xpath.select(
|
||||
`/ttFont/name/namerecord[@nameID="${nameId}" and @platformID="${platformId}"]`,
|
||||
dom,
|
||||
true
|
||||
);
|
||||
if (target) {
|
||||
target.parentNode.replaceChild(node, target);
|
||||
} else {
|
||||
targetName.appendChild(node);
|
||||
}
|
||||
});
|
||||
}
|
||||
// windows family name includes style
|
||||
updateName(PlatformId.win, NameId.familyName, familyName);
|
||||
updateName(PlatformId.win, NameId.fontStyle, names.windowsFontStyle);
|
||||
updateName(PlatformId.win, NameId.uniqueId, uniqueId);
|
||||
updateName(PlatformId.win, NameId.fullName, fullName);
|
||||
updateName(PlatformId.win, NameId.postscriptName, fontName);
|
||||
updateName(PlatformId.win, NameId.windowsFamilyName, familyNamePlat);
|
||||
updateName(PlatformId.win, NameId.fontStyleName, names.fontStyle);
|
||||
};
|
||||
|
||||
async function patchGlyphs(dom) {
|
||||
const configDom = await loadConfigAsync('../glyphs');
|
||||
const updateName = (platformId, nameId, value) => {
|
||||
// search for namerecord in target dom and replace with this one or append node
|
||||
const target = xpath.select(
|
||||
`/ttFont/name/namerecord[@nameID="${nameId}" and @platformID="${platformId}"]`,
|
||||
dom,
|
||||
true
|
||||
);
|
||||
if (target) {
|
||||
target.childNodes[0].textContent = value;
|
||||
}
|
||||
};
|
||||
|
||||
const patchGlyphs = (dom, ligatures) => {
|
||||
// get number of glyphs in target dom
|
||||
const targetGlyphs = xpath.select('/ttFont/GlyphOrder', dom, true);
|
||||
const glyphsCount = xpath.select('count(GlyphID)', targetGlyphs, true);
|
||||
|
||||
// only import glyphs specified
|
||||
let n = glyphsCount;
|
||||
// get ligature glyphs
|
||||
const glyphs = xpath.select('/GlyphOrder/GlyphID', configDom);
|
||||
glyphs.forEach(node => {
|
||||
node.setAttribute('id', n++);
|
||||
targetGlyphs.appendChild(node);
|
||||
ligatures.forEach(ligature => {
|
||||
targetGlyphs.appendChild(
|
||||
createElementWithAttributes('GlyphID', { id: n++, name: ligature.glyph })
|
||||
);
|
||||
});
|
||||
|
||||
// update glyph count
|
||||
setAttribute(dom, '/ttFont/maxp/numGlyphs', 'value', n);
|
||||
}
|
||||
|
||||
async function patchGpos(dom) {
|
||||
const newGpos = await loadConfigAsync('gpos');
|
||||
const oldGpos = xpath.select('/ttFont/GPOS', dom, true);
|
||||
dom.documentElement.replaceChild(newGpos, oldGpos);
|
||||
}
|
||||
|
||||
async function patchGsub(dom) {
|
||||
const newGsub = await loadConfigAsync('gsub');
|
||||
|
||||
// loop through Substituion/Ligature nodes and remap chars
|
||||
remap(newGsub, dom, '//Substitution', 'out');
|
||||
remap(newGsub, dom, '//Ligature', 'glyph');
|
||||
|
||||
const oldGsub = xpath.select('/ttFont/GSUB', dom, true);
|
||||
dom.documentElement.replaceChild(newGsub, oldGsub);
|
||||
}
|
||||
|
||||
const remap = (patchDom, cmapDom, path, attr) => {
|
||||
const cmap = [];
|
||||
let nodes = xpath.select(path, patchDom);
|
||||
nodes.forEach(n => {
|
||||
const out = n.getAttribute(attr);
|
||||
if (out.startsWith('uni')) {
|
||||
// get cmap entry
|
||||
const code = '0x' + out.replace(/uni0*/g, '').toLowerCase();
|
||||
let name = cmap[code];
|
||||
if (!name) {
|
||||
const map = xpath.select(
|
||||
`/ttFont/cmap/cmap_format_4/map[@code="${code}"]`,
|
||||
cmapDom,
|
||||
true
|
||||
);
|
||||
name = map == null ? out : map.getAttribute('name');
|
||||
cmap[code] = name;
|
||||
}
|
||||
n.setAttribute(attr, name);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
async function patchHmtx(dom) {
|
||||
const hmtxDom = await loadConfigAsync('hmtx');
|
||||
const targetHmtx = xpath.select('/ttFont/hmtx', dom, true);
|
||||
const patchGsub = (dom, ligatures) => {
|
||||
// don't patch if no ligatures other than LIG
|
||||
if (ligatures.length <= 1) return;
|
||||
|
||||
const mtx = xpath.select('/hmtx/mtx', hmtxDom);
|
||||
mtx.forEach(node => targetHmtx.appendChild(node));
|
||||
ligatures.forEach(ligature => {
|
||||
// build gsub tables
|
||||
gsub.buildGsubTables(dom, ligature);
|
||||
});
|
||||
gsub.finalizeGsubTables();
|
||||
};
|
||||
|
||||
const patchHmtx = dom => {
|
||||
const mtxCount = xpath.select('count(/ttFont/hmtx/mtx)', dom, true);
|
||||
setAttribute(dom, '/ttFont/hhea/numberOfHMetrics', 'value', mtxCount);
|
||||
|
||||
const configDom = await loadConfigAsync('config');
|
||||
const configDom = loadXml('config');
|
||||
copyConfigAttribute(dom, configDom, '/ttFont/head/xMin', 'value');
|
||||
copyConfigAttribute(dom, configDom, '/ttFont/head/yMin', 'value');
|
||||
copyConfigAttribute(dom, configDom, '/ttFont/head/xMax', 'value');
|
||||
@@ -179,159 +291,104 @@ async function patchHmtx(dom) {
|
||||
'/ttFont/CFF/CFFFont/Private/nominalWidthX',
|
||||
'value'
|
||||
);
|
||||
}
|
||||
|
||||
async function patchLookup(dom) {
|
||||
const configDom = await loadConfigAsync('../lookup');
|
||||
const featureList = xpath.select('/ttFont/GSUB/FeatureList', dom, true);
|
||||
|
||||
const featuresCount = xpath.select(
|
||||
'count(/ttFont/GSUB/FeatureList/FeatureRecord)',
|
||||
dom,
|
||||
true
|
||||
);
|
||||
const featureRecord = dom.createElement('FeatureRecord');
|
||||
featureRecord.setAttribute('index', featuresCount);
|
||||
const featureTag = dom.createElement('FeatureTag');
|
||||
featureTag.setAttribute('value', 'liga');
|
||||
const feature = dom.createElement('Feature');
|
||||
featureRecord.appendChild(featureTag);
|
||||
featureRecord.appendChild(feature);
|
||||
featureList.appendChild(featureRecord);
|
||||
|
||||
const lookupCount = xpath.select(
|
||||
'count(/ttFont/GSUB/LookupList/Lookup)',
|
||||
dom,
|
||||
true
|
||||
);
|
||||
const lookupListIndex = dom.createElement('LookupListIndex');
|
||||
lookupListIndex.setAttribute('index', '0');
|
||||
lookupListIndex.setAttribute('value', lookupCount);
|
||||
feature.appendChild(lookupListIndex);
|
||||
|
||||
// helper function for adding feature to ScriptRecord
|
||||
const addFeature = (scriptRecord, featureRecord, lang) => {
|
||||
if (!lang) return;
|
||||
const index = featureRecord.getAttribute('index');
|
||||
if (xpath.select(`FeatureIndex[@value="${index}"]`, lang, true)) return;
|
||||
|
||||
const count = xpath.select('count(FeatureIndex)', lang, true);
|
||||
const featureIndex = dom.createElement('FeatureIndex');
|
||||
featureIndex.setAttribute('index', count);
|
||||
featureIndex.setAttribute('value', index);
|
||||
lang.appendChild(featureIndex);
|
||||
};
|
||||
|
||||
// nead to add feature to ScriptList
|
||||
const scriptList = xpath.select('/ttFont/GSUB/ScriptList', dom, true);
|
||||
const scriptRecords = xpath.select('ScriptRecord', scriptList);
|
||||
scriptRecords.forEach(node => {
|
||||
// check for feature in DefaultLangSys
|
||||
addFeature(
|
||||
node,
|
||||
featureRecord,
|
||||
xpath.select('Script/DefaultLangSys', node, true)
|
||||
);
|
||||
// add features to any other languages
|
||||
xpath
|
||||
.select('Script/LangSysRecord/LangSys', node)
|
||||
.forEach(lang => addFeature(node, featureRecord, lang));
|
||||
});
|
||||
|
||||
// finally add LigatureSubst to Lookup
|
||||
const lookupList = xpath.select('/ttFont/GSUB/LookupList', dom, true);
|
||||
const newLookup = xpath.select('/LookupList/Lookup', configDom, true);
|
||||
newLookup.setAttribute('index', lookupCount);
|
||||
lookupList.appendChild(newLookup);
|
||||
}
|
||||
|
||||
async function patchCharStrings(dom) {
|
||||
const configDom = await loadConfigAsync('charstrings');
|
||||
const nameDom = await loadConfigAsync('names');
|
||||
|
||||
// get font and family name
|
||||
const familyName = getTextNode(
|
||||
nameDom,
|
||||
'/name/namerecord[@nameID="1" and @platformID="1"]'
|
||||
);
|
||||
const fullName = getTextNode(
|
||||
nameDom,
|
||||
'/name/namerecord[@nameID="4" and @platformID="1"]'
|
||||
);
|
||||
};
|
||||
|
||||
const patchCharStrings = (dom, ligatures) => {
|
||||
// patch CFFFont
|
||||
const cffFont = xpath.select('/ttFont/CFF/CFFFont', dom, true);
|
||||
|
||||
cffFont.setAttribute('name', ligFontName);
|
||||
setAttribute(cffFont, 'FullName', 'value', fullName);
|
||||
setAttribute(cffFont, 'FamilyName', 'value', familyName);
|
||||
|
||||
const charStrings = xpath.select('/CharStrings/CharString', configDom);
|
||||
const targetHmtx = xpath.select('/ttFont/hmtx', dom, true);
|
||||
const targetCmaps = xpath.select('/ttFont/cmap/cmap_format_4', dom);
|
||||
const targetCharStrings = xpath.select('CharStrings', cffFont, true);
|
||||
const targetSubrs = xpath.select(
|
||||
'/ttFont/CFF/CFFFont/Private/Subrs',
|
||||
dom,
|
||||
true
|
||||
);
|
||||
const targetGsubrs = xpath.select('/ttFont/CFF/GlobalSubrs', dom, true);
|
||||
const fingerprints = {};
|
||||
ligatures.forEach(ligature => {
|
||||
console.log(
|
||||
`* ${ligature.name}${
|
||||
ligature.name === ligature.glyph ? '' : ' => ' + ligature.glyph
|
||||
}`
|
||||
);
|
||||
const glyphDom = loadXml(`glyphs/${ligature.glyph}`).documentElement;
|
||||
const node = xpath.select('/Glyph/CharString', glyphDom, true);
|
||||
node.setAttribute('name', ligature.glyph);
|
||||
|
||||
const subrs = {
|
||||
map: [],
|
||||
source: await loadConfigAsync('subrs'),
|
||||
target: xpath.select('/ttFont/CFF/CFFFont/Private/Subrs', dom, true)
|
||||
};
|
||||
const gsubrs = {
|
||||
map: [],
|
||||
source: await loadConfigAsync('gsubrs'),
|
||||
target: xpath.select('/ttFont/CFF/GlobalSubrs', dom, true)
|
||||
};
|
||||
const subrs = {
|
||||
sourcePath: '/Glyph/Subrs',
|
||||
target: targetSubrs
|
||||
};
|
||||
const gsubrs = {
|
||||
sourcePath: '/Glyph/GlobalSubrs',
|
||||
target: targetGsubrs
|
||||
};
|
||||
|
||||
patchCharStringSubrs(glyphDom, node, fingerprints, subrs, gsubrs);
|
||||
|
||||
charStrings.forEach(node => {
|
||||
patchCharStringSubrs(node, subrs, gsubrs);
|
||||
targetCharStrings.appendChild(node);
|
||||
targetHmtx.appendChild(
|
||||
createElementWithAttributes('mtx', {
|
||||
name: ligature.glyph,
|
||||
width: glyphDom.getAttribute('width'),
|
||||
lsb: glyphDom.getAttribute('lsb')
|
||||
})
|
||||
);
|
||||
const code = glyphDom.getAttribute('code');
|
||||
if (code) {
|
||||
Array.from(targetCmaps).forEach(node => {
|
||||
node.appendChild(
|
||||
createElementWithAttributes('map', {
|
||||
code,
|
||||
name: ligature.glyph
|
||||
})
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const patchCharStringSubrs = (node, subrs, gsubrs) => {
|
||||
const patchCharStringSubrs = (glyphDom, node, fingerprints, subrs, gsubrs) => {
|
||||
// check for callsubr/callgsubr
|
||||
|
||||
const lines = node.childNodes[0].textContent.split(/\r|\r\n|\n/g);
|
||||
const newLines = [];
|
||||
let patched = false;
|
||||
lines.forEach(line => {
|
||||
const matches = line.match(/(.*?)(-?\d+) (callsubr|callgsubr)$/);
|
||||
if (line.trim().length === 0) return;
|
||||
const matches = line.match(/(.*?)\{([0-9a-z]+)\} (callsubr|callgsubr)$/);
|
||||
if (matches != null) {
|
||||
const { map, source, target } =
|
||||
matches[3] === 'callsubr' ? subrs : gsubrs;
|
||||
const index = matches[2];
|
||||
let newIndex = 0;
|
||||
if (!map[index]) {
|
||||
// find subr in source dom and copy to target dom
|
||||
const srcIndex = parseInt(index) + 107;
|
||||
const { sourcePath, target } = matches[3] === 'callsubr' ? subrs : gsubrs;
|
||||
const fingerprint = matches[2];
|
||||
let newIndex = fingerprints[fingerprint];
|
||||
if (!newIndex) {
|
||||
const srcSubr = xpath.select(
|
||||
`//CharString[@index="${srcIndex}"]`,
|
||||
source,
|
||||
`/${sourcePath}/CharString[@fingerprint="${fingerprint}"]`,
|
||||
glyphDom,
|
||||
true
|
||||
);
|
||||
|
||||
// patch up source in case it also has any callsubrs
|
||||
patchCharStringSubrs(srcSubr, subrs, gsubrs);
|
||||
|
||||
// append subr to target dom and get new index
|
||||
newIndex = xpath.select('count(CharString)', target, true);
|
||||
srcSubr.setAttribute('index', newIndex);
|
||||
target.appendChild(srcSubr);
|
||||
|
||||
const clone = srcSubr.cloneNode(true);
|
||||
clone.setAttribute('index', newIndex);
|
||||
target.appendChild(clone);
|
||||
|
||||
// add new index to map and rewrite call
|
||||
newIndex = newIndex - 107;
|
||||
map[index] = newIndex;
|
||||
} else {
|
||||
newIndex = map[index];
|
||||
fingerprints[fingerprint] = newIndex;
|
||||
|
||||
// patch up source in case it also has any callsubrs
|
||||
patchCharStringSubrs(glyphDom, clone, fingerprints, subrs, gsubrs);
|
||||
}
|
||||
|
||||
// rewrite line with new subr index
|
||||
line = `${matches[1]}${newIndex} ${matches[3]}`;
|
||||
patched = true;
|
||||
}
|
||||
newLines.push(line);
|
||||
});
|
||||
if (patched) {
|
||||
node.childNodes[0].textContent = newLines.join(os.EOL);
|
||||
}
|
||||
node.childNodes[0].textContent = newLines.join(os.EOL);
|
||||
};
|
||||
|
||||
const setAttribute = (parent, path, name, value) => {
|
||||
@@ -344,13 +401,15 @@ const copyConfigAttribute = (dom, configDom, path, name) => {
|
||||
setAttribute(dom, path, name, value);
|
||||
};
|
||||
|
||||
const getTextNode = (dom, path) => {
|
||||
var node = xpath.select(path, dom, true);
|
||||
return node && node.childNodes.length
|
||||
? node.childNodes[0].nodeValue.trim()
|
||||
: '';
|
||||
const createElementWithAttributes = (tagName, attributes) => {
|
||||
const element = dom.createElement(tagName);
|
||||
Object.entries(attributes).forEach(attribute => {
|
||||
element.setAttribute(attribute[0], attribute[1]);
|
||||
});
|
||||
return element;
|
||||
};
|
||||
|
||||
//const dump = dom => console.log(serialize(dom));
|
||||
const serialize = dom =>
|
||||
new XMLSerializer().serializeToString(dom, false, node => {
|
||||
if (node.nodeType === NodeType.TEXT_NODE) {
|
||||
|
||||
@@ -1,281 +0,0 @@
|
||||
<CharStrings>
|
||||
<CharString name="ampersand_ampersand.liga">
|
||||
-107 -12 67 501 76 hstemhm
|
||||
108 77 -4 80 251 77 -4 80 hintmask 11100100
|
||||
880 169 rmoveto
|
||||
-33 callgsubr
|
||||
-66 callsubr
|
||||
hintmask 11011000
|
||||
-88 -56 -45 -63 -75 vvcurveto
|
||||
-3 vlineto
|
||||
-12 15 -12 14 -12 13 -33 callgsubr
|
||||
-66 callsubr
|
||||
hintmask 11100100
|
||||
-7 callgsubr
|
||||
-33 57 -74 133 -4 rrcurveto
|
||||
7 hlineto
|
||||
64 64 34 77 51 hvcurveto
|
||||
28 -34 31 -37 32 -41 65 51 rcurveline
|
||||
-41 50 -37 43 -33 38 rrcurveto
|
||||
-611 -114 rmoveto
|
||||
-51 callgsubr
|
||||
hintmask 11101000
|
||||
404 hmoveto
|
||||
-51 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="bar_bar.liga">
|
||||
-107 704 -20 hstem
|
||||
312 75 325 75 vstem
|
||||
387 710 -14 callgsubr
|
||||
400 892 -14 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="bar_greater.liga">
|
||||
-107 704 -20 hstem
|
||||
287 75 449 74 vstem
|
||||
362 710 -14 callgsubr
|
||||
523 440 rlineto
|
||||
69 vlineto
|
||||
-74 -40 rmoveto
|
||||
-449 -374 rlineto
|
||||
705 vlineto
|
||||
449 -321 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="equal_equal.liga">
|
||||
-107 151 -25 callgsubr
|
||||
944 vstem
|
||||
1021 373 rmoveto
|
||||
-9 callsubr
|
||||
-944 -69 hlineto
|
||||
943 -222 rmoveto
|
||||
-9 callsubr
|
||||
-944 -69 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="equal_equal_equal.liga">
|
||||
-11 callgsubr
|
||||
495 -4 callsubr
|
||||
1493 -222 -4 callsubr
|
||||
1493 -222 -4 callsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="equal_equal_greater.liga">
|
||||
443 -1 -21 173 -9 callgsubr
|
||||
hstem
|
||||
1498 74 vstem
|
||||
1245 16 callgsubr
|
||||
124 -102 rlineto
|
||||
-1244 -69 1328 hlineto
|
||||
92 -76 rlineto
|
||||
-10 vlineto
|
||||
-81 -67 rlineto
|
||||
-1339 -69 1256 hlineto
|
||||
-140 -116 -32 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="equal_greater.liga">
|
||||
-107 -1 -21 173 -9 callgsubr
|
||||
hstem
|
||||
948 74 vstem
|
||||
695 16 callgsubr
|
||||
124 -102 rlineto
|
||||
-694 -69 778 hlineto
|
||||
92 -76 rlineto
|
||||
-10 vlineto
|
||||
-81 -67 rlineto
|
||||
-789 -69 706 hlineto
|
||||
-140 -116 -32 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="exclam_equal.liga">
|
||||
-107 151 -25 callgsubr
|
||||
944 vstem
|
||||
646 373 rmoveto
|
||||
375 hlineto
|
||||
-9 callsubr
|
||||
-340 hlineto
|
||||
132 252 -69 32 -149 -284 rlineto
|
||||
-518 -69 482 hlineto
|
||||
-81 -153 rlineto
|
||||
-401 -69 365 hlineto
|
||||
-163 -311 71 -29 178 340 rlineto
|
||||
492 hlineto
|
||||
-9 callsubr
|
||||
-457 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="exclam_equal_equal.liga">
|
||||
-11 callgsubr
|
||||
273 rmoveto
|
||||
-9 callsubr
|
||||
-683 hlineto
|
||||
81 153 rlineto
|
||||
601 hlineto
|
||||
-9 callsubr
|
||||
-566 hlineto
|
||||
68 130 -69 32 -85 -162 rlineto
|
||||
-842 -69 806 hlineto
|
||||
-81 -153 rlineto
|
||||
-725 -69 689 hlineto
|
||||
-80 -153 rlineto
|
||||
-609 -69 573 hlineto
|
||||
-111 -211 71 -29 126 240 rlineto
|
||||
834 hlineto
|
||||
-9 callsubr
|
||||
-799 hlineto
|
||||
80 153 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="greater_equal.liga">
|
||||
-107 634 -20 88 -20 hstem
|
||||
741 114 vstem
|
||||
187 145 rmoveto
|
||||
35 -67 633 280 rlineto
|
||||
69 vlineto
|
||||
-627 275 -37 -68 550 -237 rlineto
|
||||
-10 vlineto
|
||||
114 -191 rmoveto
|
||||
-668 -291 35 -67 633 280 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="hyphen_greater.liga">
|
||||
-107 -7 callsubr
|
||||
944 vstem
|
||||
695 16 callgsubr
|
||||
264 -217 rlineto
|
||||
-834 -69 835 hlineto
|
||||
-269 -223 -32 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="hyphen_hyphen.liga">
|
||||
-107 258 69 hstem
|
||||
181 737 vstem
|
||||
492 258 rmoveto
|
||||
12 callgsubr
|
||||
731 hmoveto
|
||||
12 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="hyphen_hyphen_greater.liga">
|
||||
443 -7 callsubr
|
||||
1494 vstem
|
||||
1245 16 callgsubr
|
||||
264 -217 rlineto
|
||||
-1384 -69 1385 hlineto
|
||||
-269 -223 -32 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="less_bar.liga">
|
||||
-107 704 -20 hstem
|
||||
216 75 448 75 vstem
|
||||
739 704 rmoveto
|
||||
-523 -378 rlineto
|
||||
-69 vlineto
|
||||
523 -439 rlineto
|
||||
75 892 hlineto
|
||||
-523 -423 rmoveto
|
||||
10 vlineto
|
||||
448 317 rlineto
|
||||
-701 vlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="less_equal.liga">
|
||||
-107 702 -20 hstem
|
||||
245 114 vstem
|
||||
913 145 rmoveto
|
||||
-554 242 rlineto
|
||||
10 vlineto
|
||||
550 237 -37 68 -627 -275 rlineto
|
||||
-69 vlineto
|
||||
633 -280 rlineto
|
||||
-633 118 rmoveto
|
||||
-78 vlineto
|
||||
633 -280 35 67 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="less_equal_equal.liga">
|
||||
443 -1 -21 173 -25 callgsubr
|
||||
75 vstem
|
||||
153 287 rmoveto
|
||||
10 vlineto
|
||||
92 76 rlineto
|
||||
1326 hlineto
|
||||
-9 callsubr
|
||||
-1244 hlineto
|
||||
124 103 -45 callgsubr
|
||||
-139 116 rlineto
|
||||
1254 hlineto
|
||||
-9 callsubr
|
||||
-1338 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="less_exclam_hyphen_hyphen.liga">
|
||||
993 -1 -21 22 110 148 69 hstemhm
|
||||
816 113.5 hintmask 01110000
|
||||
852 -18 callsubr
|
||||
-400 311 rmoveto
|
||||
-45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
hintmask 10110000
|
||||
332 -279 46 57 -268 223 rlineto
|
||||
521 hlineto
|
||||
6 69 rlineto
|
||||
-526 hlineto
|
||||
860 hmoveto
|
||||
-69 1067 vlineto
|
||||
6 69 rlineto
|
||||
hintmask 01110000
|
||||
-1307 -327 10 callgsubr
|
||||
|
||||
</CharString>
|
||||
<CharString name="less_hyphen.liga">
|
||||
-107 -7 callsubr
|
||||
944 vstem
|
||||
1022 327 rmoveto
|
||||
-833 hlineto
|
||||
263 218 -45 callgsubr
|
||||
-268 223 rlineto
|
||||
828 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="less_hyphen_hyphen.liga">
|
||||
443 -7 callsubr
|
||||
1494 vstem
|
||||
1572 327 rmoveto
|
||||
-1383 hlineto
|
||||
263 218 -45 callgsubr
|
||||
-268 223 rlineto
|
||||
1378 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString name="plus_plus.liga">
|
||||
-107 259 68 hstem
|
||||
301 73 353 73 vstem
|
||||
800 327 rmoveto
|
||||
187 -73 -187 -353 9 callgsubr
|
||||
187 353 -187 73 187 176 vlineto
|
||||
1 68 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
</CharStrings>
|
||||
@@ -1,52 +1,120 @@
|
||||
<ttFont>
|
||||
<head>
|
||||
|
||||
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
|
||||
|
||||
<tableVersion value="1.0"/>
|
||||
|
||||
|
||||
<fontRevision value="1.002"/>
|
||||
<checkSumAdjustment value="0x1cc640f7"/>
|
||||
|
||||
|
||||
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
|
||||
|
||||
<flags value="00000000 00000011"/>
|
||||
|
||||
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Mon Oct 16 12:43:41 2017"/>
|
||||
<modified value="Mon Oct 16 12:43:41 2017"/>
|
||||
<xMin value="-339"/>
|
||||
|
||||
|
||||
|
||||
|
||||
<xMin value="-1564"/>
|
||||
|
||||
|
||||
<yMin value="-288"/>
|
||||
<xMax value="2122"/>
|
||||
|
||||
|
||||
<xMax value="630"/>
|
||||
|
||||
|
||||
<yMax value="1144"/>
|
||||
|
||||
|
||||
<macStyle value="00000000 00000000"/>
|
||||
|
||||
|
||||
<lowestRecPPEM value="3"/>
|
||||
|
||||
|
||||
<fontDirectionHint value="2"/>
|
||||
|
||||
|
||||
<indexToLocFormat value="0"/>
|
||||
|
||||
|
||||
<glyphDataFormat value="0"/>
|
||||
|
||||
|
||||
</head>
|
||||
<hhea>
|
||||
|
||||
|
||||
<tableVersion value="0x00010000"/>
|
||||
|
||||
|
||||
<ascent value="960"/>
|
||||
|
||||
|
||||
<descent value="-240"/>
|
||||
|
||||
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="2200"/>
|
||||
<minLeftSideBearing value="-339"/>
|
||||
|
||||
|
||||
<advanceWidthMax value="600"/>
|
||||
|
||||
|
||||
<minLeftSideBearing value="-1564"/>
|
||||
|
||||
|
||||
<minRightSideBearing value="-80"/>
|
||||
<xMaxExtent value="2122"/>
|
||||
|
||||
|
||||
<xMaxExtent value="630"/>
|
||||
|
||||
|
||||
<caretSlopeRise value="1"/>
|
||||
|
||||
|
||||
<caretSlopeRun value="0"/>
|
||||
|
||||
|
||||
<caretOffset value="0"/>
|
||||
|
||||
|
||||
<reserved0 value="0"/>
|
||||
|
||||
|
||||
<reserved1 value="0"/>
|
||||
|
||||
|
||||
<reserved2 value="0"/>
|
||||
|
||||
|
||||
<reserved3 value="0"/>
|
||||
|
||||
|
||||
<metricDataFormat value="0"/>
|
||||
<numberOfHMetrics value="454"/>
|
||||
|
||||
|
||||
<numberOfHMetrics value="466"/>
|
||||
|
||||
|
||||
</hhea>
|
||||
<CFF>
|
||||
<CFFFont>
|
||||
<FontBBox value="-339 -288 2122 1144"/>
|
||||
<FontBBox value="-1564 -288 630 1144"/>
|
||||
</CFFFont>
|
||||
</CFF>
|
||||
<CFF>
|
||||
<CFFFont>
|
||||
<Private>
|
||||
<nominalWidthX value="1207"/>
|
||||
<nominalWidthX value="107"/>
|
||||
</Private>
|
||||
</CFFFont>
|
||||
</CFF>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<Glyph name="LIG" lsb="0" width="550">
|
||||
<CharString>
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,41 @@
|
||||
<Glyph name="ampersand_ampersand.liga" lsb="-432" width="550">
|
||||
<CharString>
|
||||
-12 67 501 76 hstemhm
|
||||
-269 80 227 77 -4 80 hintmask 11110000
|
||||
316 169 rmoveto
|
||||
33 59 32 79 22 89 -70 9 rcurveline
|
||||
-14 -68 -21 -66 -23 -54 rrcurveto
|
||||
-119 136 -55 59 52 vvcurveto
|
||||
54 42 46 163 -8 vhcurveto
|
||||
-6 76 rlineto
|
||||
-213 4 -66 -91 -86 vvcurveto
|
||||
-43 20 -40 40 -52 vhcurveto
|
||||
-79 -50 -44 -56 -8 -65 -14 16 rcurveline
|
||||
33 59 32 79 22 89 -70 9 rcurveline
|
||||
-14 -68 -21 -66 -23 -54 rrcurveto
|
||||
-119 136 -55 59 52 vvcurveto
|
||||
54 42 46 163 -8 vhcurveto
|
||||
-6 76 rlineto
|
||||
-213 4 -66 -91 -86 vvcurveto
|
||||
-43 20 -40 40 -52 vhcurveto
|
||||
-88 -56 -45 -63 -75 vvcurveto
|
||||
-80 49 -62 95 64 64 34 77 51 vhcurveto
|
||||
22 -27 47 -52 67 -22 rrcurveto
|
||||
-6 17 20 -4 23 hhcurveto
|
||||
64 -1 69 35 51 77 28 -34 31 -37 32 -41 65 51 rcurveline
|
||||
-41 50 -37 43 -33 38 rrcurveto
|
||||
-587 -114 rmoveto
|
||||
-55 -29 39 53 47 28 49 59 42 hvcurveto
|
||||
32 -38 41 -46 48 -57 rrcurveto
|
||||
-61 -39 -43 -28 -42 hhcurveto
|
||||
380 hmoveto
|
||||
-55 -29 39 53 hvcurveto
|
||||
hintmask 11101000
|
||||
47 28 49 59 42 vhcurveto
|
||||
32 -38 41 -46 48 -57 rrcurveto
|
||||
-61 -39 -43 -28 -42 hhcurveto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Glyph name="bar_bar.liga" lsb="-211" width="550">
|
||||
<CharString>
|
||||
-211 75 275 75 vstem
|
||||
-136 710 rmoveto
|
||||
-75 -6 rlineto
|
||||
-886 75 vlineto
|
||||
350 892 rmoveto
|
||||
-75 -6 rlineto
|
||||
-886 75 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="bar_greater.liga" lsb="-261" width="550">
|
||||
<CharString>
|
||||
-261 75 468 74 vstem
|
||||
-186 710 rmoveto
|
||||
-75 -6 rlineto
|
||||
-886 75 vlineto
|
||||
541 440 rlineto
|
||||
69 vlineto
|
||||
-74 -40 rmoveto
|
||||
-467 -376 rlineto
|
||||
709 vlineto
|
||||
467 -323 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,23 @@
|
||||
<Glyph name="colon_equal.liga" lsb="-297" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-297 658 vstem
|
||||
-297 354 rmoveto
|
||||
118 hlineto
|
||||
2 117 rlineto
|
||||
-119 hlineto
|
||||
657 -98 rmoveto
|
||||
1 69 rlineto
|
||||
-424 -69 hlineto
|
||||
-235 -245 rmoveto
|
||||
118 hlineto
|
||||
2 117 rlineto
|
||||
-119 hlineto
|
||||
657 -94 rmoveto
|
||||
1 69 rlineto
|
||||
-424 -69 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,21 @@
|
||||
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-472 944 vstem
|
||||
-49 373 rmoveto
|
||||
1 69 rlineto
|
||||
-424 -69 hlineto
|
||||
943 hmoveto
|
||||
1 69 rlineto
|
||||
-414 -69 hlineto
|
||||
-107 -222 rmoveto
|
||||
1 69 rlineto
|
||||
-424 -69 hlineto
|
||||
943 hmoveto
|
||||
1 69 rlineto
|
||||
-414 -69 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,15 @@
|
||||
<Glyph name="equal_equal.liga" lsb="-472" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-472 944 vstem
|
||||
471 373 rmoveto
|
||||
1 69 rlineto
|
||||
-944 -69 hlineto
|
||||
943 -222 rmoveto
|
||||
1 69 rlineto
|
||||
-944 -69 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,27 @@
|
||||
<Glyph name="equal_equal_equal.2.liga" lsb="-1022" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-1022 1494 vstem
|
||||
-579 373 rmoveto
|
||||
1 69 rlineto
|
||||
-444 -69 hlineto
|
||||
968 hmoveto
|
||||
1 69 rlineto
|
||||
-444 -69 hlineto
|
||||
968 hmoveto
|
||||
1 69 rlineto
|
||||
-444 -69 hlineto
|
||||
-607 -222 rmoveto
|
||||
1 69 rlineto
|
||||
-444 -69 hlineto
|
||||
968 hmoveto
|
||||
1 69 rlineto
|
||||
-444 -69 hlineto
|
||||
968 hmoveto
|
||||
1 69 rlineto
|
||||
-444 -69 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,18 @@
|
||||
<Glyph name="equal_equal_equal.liga" lsb="-1022" width="550">
|
||||
<CharString>
|
||||
40 69 153 69 153 69 hstem
|
||||
-1022 1494 cntrmask 11100000
|
||||
471 484 rmoveto
|
||||
1 69 rlineto
|
||||
-1494 -69 hlineto
|
||||
1493 -222 rmoveto
|
||||
1 69 rlineto
|
||||
-1494 -69 hlineto
|
||||
1493 -222 rmoveto
|
||||
1 69 rlineto
|
||||
-1494 -69 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,18 @@
|
||||
<Glyph name="equal_equal_greater.liga" lsb="-1022" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-1022 394 1019 74 vstem
|
||||
138 602 rmoveto
|
||||
-47 -58 124 -102 rlineto
|
||||
-1237 -69 1321 hlineto
|
||||
92 -76 rlineto
|
||||
-10 vlineto
|
||||
-81 -67 rlineto
|
||||
-1332 -69 1249 hlineto
|
||||
-140 -116 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,20 @@
|
||||
<Glyph name="equal_greater.liga" lsb="-472" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-472 937 -74 74 hintmask 11100000
|
||||
138 602 rmoveto
|
||||
-47 -58 124 -102 rlineto
|
||||
-687 -69 771 hlineto
|
||||
hintmask 11010000
|
||||
92 -76 rlineto
|
||||
-10 vlineto
|
||||
-81 -67 rlineto
|
||||
hintmask 11100000
|
||||
-782 -69 699 hlineto
|
||||
-140 -116 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,29 @@
|
||||
<Glyph name="equal_less_less.liga" lsb="-1022" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-1022 1486 -688 75 235 75 hintmask 11011000
|
||||
-149 297 rmoveto
|
||||
299 248 -45 58 -191 -161 rlineto
|
||||
hintmask 11100000
|
||||
-936 -69 854 hlineto
|
||||
hintmask 11011000
|
||||
-56 -47 rlineto
|
||||
-69 vlineto
|
||||
44 -37 rlineto
|
||||
hintmask 11100000
|
||||
-842 -69 924 hlineto
|
||||
206 -173 46 57 rlineto
|
||||
hintmask 11011000
|
||||
-303 252 rlineto
|
||||
310 hmoveto
|
||||
10 vlineto
|
||||
299 248 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 rlineto
|
||||
hintmask 11100000
|
||||
46 57 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,31 @@
|
||||
<Glyph name="exclam_equal.liga" lsb="-472" width="550">
|
||||
<CharString>
|
||||
-189 915 -575 69 153 69 hstemhm
|
||||
-472 944 -762 534 hintmask 00110000
|
||||
76 373 rmoveto
|
||||
395 hlineto
|
||||
1 69 rlineto
|
||||
-360 hlineto
|
||||
hintmask 00101000
|
||||
132 252 rlineto
|
||||
hintmask 10001000
|
||||
-69 32 rlineto
|
||||
hintmask 00101000
|
||||
-149 -284 rlineto
|
||||
-498 -69 462 hlineto
|
||||
hintmask 01101000
|
||||
-81 -153 rlineto
|
||||
-381 -69 345 hlineto
|
||||
-163 -311 rlineto
|
||||
hintmask 10001000
|
||||
71 -29 rlineto
|
||||
hintmask 01101000
|
||||
178 340 rlineto
|
||||
512 hlineto
|
||||
1 69 rlineto
|
||||
-477 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,37 @@
|
||||
<Glyph name="exclam_equal_equal.liga" lsb="-1022" width="550">
|
||||
<CharString>
|
||||
-189 915 -686 69 153 69 153 69 hstemhm
|
||||
-1022 1494 -1012 534 cntrmask 01110000
|
||||
hintmask 01111000
|
||||
471 262 rmoveto
|
||||
1 69 rlineto
|
||||
-668 hlineto
|
||||
80 153 rlineto
|
||||
587 hlineto
|
||||
1 69 rlineto
|
||||
-552 hlineto
|
||||
hintmask 01110100
|
||||
74 141 rlineto
|
||||
hintmask 10000100
|
||||
-69 32 rlineto
|
||||
hintmask 01110100
|
||||
-91 -173 rlineto
|
||||
-856 -69 820 hlineto
|
||||
-80 -153 rlineto
|
||||
-740 -69 703 hlineto
|
||||
-80 -153 rlineto
|
||||
-623 -69 587 hlineto
|
||||
-105 -200 rlineto
|
||||
hintmask 10000100
|
||||
71 -29 rlineto
|
||||
hintmask 01110100
|
||||
120 229 rlineto
|
||||
820 hlineto
|
||||
1 69 rlineto
|
||||
-785 hlineto
|
||||
80 153 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="greater_equal.2.liga" lsb="-308" width="600">
|
||||
<CharString>
|
||||
493 -141 69 390 69 hstem
|
||||
-308 615 vstem
|
||||
-308 95 rmoveto
|
||||
-79 vlineto
|
||||
615 302 rlineto
|
||||
69 vlineto
|
||||
-574 280 -37 -63 512 -247 rlineto
|
||||
-10 vlineto
|
||||
99 -488 rmoveto
|
||||
69 -615 -69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="greater_equal.liga" lsb="-308" width="550">
|
||||
<CharString>
|
||||
138 77 103 69 hstem
|
||||
-308 615 vstem
|
||||
-308 95 rmoveto
|
||||
31 -64 584 287 rlineto
|
||||
69 vlineto
|
||||
-574 280 -37 -63 512 -247 rlineto
|
||||
-10 vlineto
|
||||
99 -209 rmoveto
|
||||
77 vlineto
|
||||
-615 -300 31 -64 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,32 @@
|
||||
<Glyph name="greater_equal_greater.liga" lsb="-1013" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-1013 1478 -1174 74 1026 74 hintmask 11100000
|
||||
138 602 rmoveto
|
||||
-47 -58 124 -102 rlineto
|
||||
-987 hlineto
|
||||
-190 160 -47 -58 rlineto
|
||||
hintmask 11010000
|
||||
300 -247 rlineto
|
||||
-10 vlineto
|
||||
hintmask 11100000
|
||||
-304 -252 45 -57 206 173 rlineto
|
||||
989 hlineto
|
||||
-140 -116 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
hintmask 11001000
|
||||
-74 -40 rmoveto
|
||||
-81 -67 rlineto
|
||||
-990 hlineto
|
||||
hintmask 11010000
|
||||
45 38 rlineto
|
||||
69 vlineto
|
||||
-55 46 rlineto
|
||||
989 hlineto
|
||||
hintmask 11001000
|
||||
92 -76 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,32 @@
|
||||
<Glyph name="greater_greater_equal.liga" lsb="-1013" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-1013 1485 -1181 74 236 74 hintmask 11011000
|
||||
-635 327 rmoveto
|
||||
-327 275 -47 -58 300 -247 rlineto
|
||||
-10 vlineto
|
||||
hintmask 11100000
|
||||
-304 -252 45 -57 rlineto
|
||||
hintmask 11011000
|
||||
333 280 rlineto
|
||||
310 hmoveto
|
||||
69 vlineto
|
||||
-55 46 rlineto
|
||||
hintmask 11100000
|
||||
851 hlineto
|
||||
1 69 rlineto
|
||||
-934 hlineto
|
||||
-190 160 -47 -58 rlineto
|
||||
hintmask 11001000
|
||||
300 -247 rlineto
|
||||
-10 vlineto
|
||||
-304 -252 45 -57 206 173 rlineto
|
||||
hintmask 11100000
|
||||
923 hlineto
|
||||
1 69 rlineto
|
||||
-842 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Glyph name="hyphen_greater.liga" lsb="-431" width="550">
|
||||
<CharString>
|
||||
258 69 hstem
|
||||
-431 896 vstem
|
||||
138 602 rmoveto
|
||||
-47 -58 264 -217 rlineto
|
||||
-786 -69 787 hlineto
|
||||
-269 -223 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,15 @@
|
||||
<Glyph name="hyphen_hyphen.liga" lsb="-341" width="550">
|
||||
<CharString>
|
||||
258 69 hstem
|
||||
-341 317 63 317 vstem
|
||||
-30 258 rmoveto
|
||||
6 69 rlineto
|
||||
-317 -69 hlineto
|
||||
691 hmoveto
|
||||
6 69 rlineto
|
||||
-317 -69 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Glyph name="hyphen_hyphen_greater.liga" lsb="-981" width="550">
|
||||
<CharString>
|
||||
258 69 hstem
|
||||
-981 1446 vstem
|
||||
138 602 rmoveto
|
||||
-47 -58 264 -217 rlineto
|
||||
-1336 -69 1337 hlineto
|
||||
-269 -223 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="less_bar.liga" lsb="-354" width="550">
|
||||
<CharString>
|
||||
-354 75 450 75 vstem
|
||||
169 704 rmoveto
|
||||
-523 -378 rlineto
|
||||
-69 vlineto
|
||||
523 -439 rlineto
|
||||
75 892 hlineto
|
||||
-523 -423 rmoveto
|
||||
10 vlineto
|
||||
448 317 rlineto
|
||||
-700 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="less_equal.2.liga" lsb="-283" width="600">
|
||||
<CharString>
|
||||
493 -141 69 hstem
|
||||
-283 99 vstem
|
||||
332 95 rmoveto
|
||||
-516 252 rlineto
|
||||
10 vlineto
|
||||
512 247 -37 63 -574 -280 rlineto
|
||||
-69 vlineto
|
||||
615 -302 rlineto
|
||||
-615 -157 rmoveto
|
||||
615 69 -615 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="less_equal.liga" lsb="-303" width="550">
|
||||
<CharString>
|
||||
138 77 103 69 hstem
|
||||
-303 615 vstem
|
||||
312 95 rmoveto
|
||||
-516 252 rlineto
|
||||
10 vlineto
|
||||
512 247 -37 63 -574 -280 rlineto
|
||||
-69 vlineto
|
||||
584 -287 rlineto
|
||||
-584 107 rmoveto
|
||||
584 -287 31 64 -615 300 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,22 @@
|
||||
<Glyph name="less_equal_equal.liga" lsb="-1014" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-1014 75 -75 1486 hintmask 11100000
|
||||
-939 287 rmoveto
|
||||
10 vlineto
|
||||
92 76 rlineto
|
||||
hintmask 11010000
|
||||
1318 hlineto
|
||||
1 69 rlineto
|
||||
-1236 hlineto
|
||||
124 103 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -139 116 rlineto
|
||||
1246 hlineto
|
||||
1 69 rlineto
|
||||
-1330 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,29 @@
|
||||
<Glyph name="less_equal_greater.liga" lsb="-1014" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-1014 75 -75 1479 -74 74 hintmask 11010000
|
||||
138 602 rmoveto
|
||||
-47 -58 124 -102 rlineto
|
||||
-979 hlineto
|
||||
124 103 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -139 116 rlineto
|
||||
1002 hlineto
|
||||
-140 -116 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
hintmask 11001000
|
||||
-74 -40 rmoveto
|
||||
-81 -67 rlineto
|
||||
-1168 hlineto
|
||||
hintmask 11100000
|
||||
-81 67 rlineto
|
||||
10 vlineto
|
||||
92 76 rlineto
|
||||
1146 hlineto
|
||||
hintmask 11001000
|
||||
92 -76 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,29 @@
|
||||
<Glyph name="less_equal_less.liga" lsb="-1014" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstemhm
|
||||
-1014 75 -75 1478 -378 75 hintmask 11101000
|
||||
418 -22 rmoveto
|
||||
hintmask 11010000
|
||||
46 57 -222 185 rlineto
|
||||
hintmask 11101000
|
||||
-81 67 rlineto
|
||||
10 vlineto
|
||||
299 248 -45 58 -191 -161 rlineto
|
||||
-988 hlineto
|
||||
124 103 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -139 116 rlineto
|
||||
987 hlineto
|
||||
-1070 69 rmoveto
|
||||
-81 67 rlineto
|
||||
10 vlineto
|
||||
92 76 rlineto
|
||||
989 hlineto
|
||||
-56 -47 rlineto
|
||||
-69 vlineto
|
||||
44 -37 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,29 @@
|
||||
<Glyph name="less_exclam_hyphen_hyphen.liga" lsb="-1564" width="550">
|
||||
<CharString>
|
||||
0 110 148 69 hstemhm
|
||||
-884 114 -78 84 hintmask 11010000
|
||||
-848 234 rmoveto
|
||||
53 hlineto
|
||||
2 87 25 264 4 91 rrcurveto
|
||||
-103 hlineto
|
||||
2 -91 17 -264 -87 vvcurveto
|
||||
-342 311 rmoveto
|
||||
-45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -268 223 rlineto
|
||||
384 hlineto
|
||||
6 69 rlineto
|
||||
-389 hlineto
|
||||
872 hmoveto
|
||||
-69 1011 vlineto
|
||||
6 69 rlineto
|
||||
hintmask 11100000
|
||||
-1321 -327 rmoveto
|
||||
113 hlineto
|
||||
3 110 rlineto
|
||||
-114 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,15 @@
|
||||
<Glyph name="less_hyphen.liga" lsb="-464" width="550">
|
||||
<CharString>
|
||||
258 69 hstem
|
||||
-464 900 vstem
|
||||
436 327 rmoveto
|
||||
-789 hlineto
|
||||
263 218 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -268 223 rlineto
|
||||
784 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,18 @@
|
||||
<Glyph name="less_hyphen_greater.liga" lsb="-1014" width="550">
|
||||
<CharString>
|
||||
258 69 hstem
|
||||
-1014 1479 vstem
|
||||
138 602 rmoveto
|
||||
-47 -58 264 -217 rlineto
|
||||
-1258 hlineto
|
||||
263 218 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -268 223 rlineto
|
||||
1260 hlineto
|
||||
-269 -223 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,15 @@
|
||||
<Glyph name="less_hyphen_hyphen.liga" lsb="-1014" width="550">
|
||||
<CharString>
|
||||
258 69 hstem
|
||||
-1014 1450 vstem
|
||||
436 327 rmoveto
|
||||
-1339 hlineto
|
||||
263 218 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 -268 223 rlineto
|
||||
1334 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,15 @@
|
||||
<Glyph name="less_slash.liga" lsb="-464" width="550">
|
||||
<CharString>
|
||||
-189 915 hstem
|
||||
-464 75 182 534 vstem
|
||||
258 726 rmoveto
|
||||
-357 -680 -290 241 rlineto
|
||||
10 vlineto
|
||||
299 248 -45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
330 -277 -73 -140 71 -29 463 883 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,12 @@
|
||||
<Glyph name="plus_plus.liga" lsb="-428" width="550">
|
||||
<CharString>
|
||||
259 68 hstem
|
||||
-250 73 352 73 vstem
|
||||
248 327 rmoveto
|
||||
187 -73 -187 -352 187 -73 -187 -178 -68 178 -187 73 187 352 -187 73 187 176 vlineto
|
||||
1 68 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,31 @@
|
||||
<Glyph name="question_question.liga" lsb="-395" width="550">
|
||||
<CharString>
|
||||
0 109 493 76 hstem
|
||||
-304 111 110 86 73 111 110 86 vstem
|
||||
-387 678 rmoveto
|
||||
-8 -76 rlineto
|
||||
252 -16 60 -40 -47 vvcurveto
|
||||
-72 -180 -55 -8 -143 vhcurveto
|
||||
57 -1 rlineto
|
||||
14 129 203 51 110 vvcurveto
|
||||
79 -88 65 -302 16 vhcurveto
|
||||
380 hmoveto
|
||||
-8 -76 rlineto
|
||||
252 -16 60 -40 -47 vvcurveto
|
||||
-72 -180 -55 -8 -143 vhcurveto
|
||||
57 -1 rlineto
|
||||
14 129 203 51 110 vvcurveto
|
||||
79 -88 65 -302 16 vhcurveto
|
||||
-298 -678 rmoveto
|
||||
110 hlineto
|
||||
3 109 rlineto
|
||||
-111 hlineto
|
||||
378 -109 rmoveto
|
||||
110 hlineto
|
||||
3 109 rlineto
|
||||
-111 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Glyph name="slash_greater.liga" lsb="-347" width="550">
|
||||
<CharString>
|
||||
-189 915 hstem
|
||||
-347 534 204 74 vstem
|
||||
139 602 rmoveto
|
||||
48 92 -69 32 -465 -886 71 -29 379 723 288 -237 rlineto
|
||||
-10 vlineto
|
||||
-304 -252 45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Glyph name="underscore_underscore.liga" lsb="-560" width="550">
|
||||
<CharString>
|
||||
-116 66 hstem
|
||||
-560 1120 vstem
|
||||
560 -50 rmoveto
|
||||
-1120 -66 1120 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,38 @@
|
||||
<Glyph name="uniE0A0" code="0xe0a0" lsb="6" width="550">
|
||||
<CharString>
|
||||
-59 53 160 104 264 54 53 53 hstemhm
|
||||
6 53 0 105 0 53 106 53 0 105 0 53 hintmask 1111010101000000
|
||||
428 576 rmoveto
|
||||
-58 -47 -47 -60 hvcurveto
|
||||
hintmask 1111010010000000
|
||||
-38 22 -34 31 -18 vhcurveto
|
||||
-15 vlineto
|
||||
-53 -53 -53 -53 -44 -34 -9 -15 -28 vhcurveto
|
||||
251 vlineto
|
||||
hintmask 1111101101000000
|
||||
31 17 22 34 40 vvcurveto
|
||||
58 -47 48 -58 -60 -46 -48 -58 vhcurveto
|
||||
hintmask 1111010101000000
|
||||
-40 21 -34 32 -17 vhcurveto
|
||||
-347 vlineto
|
||||
hintmask 1111101010000000
|
||||
-32 -17 -21 -34 -40 vvcurveto
|
||||
-58 46 -48 60 58 47 48 58 29 -11 25 -17 19 vhcurveto
|
||||
18 16 24 16 41 hhcurveto
|
||||
106 105 105 106 hvcurveto
|
||||
14 vlineto
|
||||
hintmask 1111010101000000
|
||||
32 19 21 34 38 vvcurveto
|
||||
59 -46 47 -60 vhcurveto
|
||||
hintmask 1111101101000000
|
||||
-316 53 rmoveto
|
||||
28 24 -24 -29 -30 -24 -24 -28 -30 -23 24 30 29 23 24 30 hvcurveto
|
||||
316 -212 rmoveto
|
||||
-28 -24 24 28 30 24 23 28 30 23 -23 -30 -28 -23 -24 -30 hvcurveto
|
||||
-316 -423 rmoveto
|
||||
-30 -23 23 30 29 23 24 30 28 24 -24 -29 -30 -24 -23 -28 hvcurveto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Glyph name="uniE0B0" code="0xe0b0" lsb="-20" width="550">
|
||||
<CharString>
|
||||
-205 1099 hstem
|
||||
-20 629 vstem
|
||||
609 313 rmoveto
|
||||
-627 581 -2 -1099 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,11 @@
|
||||
<Glyph name="uniE0B2" code="0xe0b2" lsb="-20" width="550">
|
||||
<CharString>
|
||||
-205 1099 hstem
|
||||
-20 629 vstem
|
||||
-20 313 rmoveto
|
||||
629 -518 -2 1099 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -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>
|
||||
@@ -1,976 +1,7 @@
|
||||
<GlobalSubrs>
|
||||
|
||||
|
||||
<!-- The 'index' attribute is only for humans; it is ignored when parsed. -->
|
||||
<CharString index="0">
|
||||
rmoveto
|
||||
23 -36 68 33 108 65 59 53 rlinecurve
|
||||
-65 63 -48 -57 -87 -81 -58 -40 rlinecurve
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="1">
|
||||
rmoveto
|
||||
54 -51 45 -163 15 vhcurveto
|
||||
8 95 rlineto
|
||||
188 hlineto
|
||||
6 57 rlineto
|
||||
-248 hlineto
|
||||
-15 -198 rlineto
|
||||
159 -11 54 -25 -33 vvcurveto
|
||||
-42 -59 -25 -164 -11 vhcurveto
|
||||
4 -61 rlineto
|
||||
194 13 87 55 72 vvcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="2">
|
||||
rmoveto
|
||||
126 105 106 162 157 -86 92 -122 -126 -106 -108 -159 -158 88 -92 121 hvcurveto
|
||||
13 67 rmoveto
|
||||
-83 -57 70 128 120 56 66 80 84 57 -71 -127 -121 -56 -65 -81 hvcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="3">
|
||||
rmoveto
|
||||
71 66 56 92 56 hvcurveto
|
||||
-48 25 rlineto
|
||||
-70 -47 -39 -37 -52 hhcurveto
|
||||
-49 -37 31 80 -49 hvcurveto
|
||||
-57 -33 rlineto
|
||||
-97 54 61 -47 70 hhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="4">
|
||||
87 hlineto
|
||||
15 117 21 236 13 267 rrcurveto
|
||||
-78 hlineto
|
||||
-5 -124 -16 -329 -7 -61 rrcurveto
|
||||
-3 hlineto
|
||||
-30 110 -30 111 -29 109 rrcurveto
|
||||
-50 hlineto
|
||||
-28 -108 -25 -100 -33 -122 rrcurveto
|
||||
-4 hlineto
|
||||
-6 61 -18 329 -5 124 rrcurveto
|
||||
-82 hlineto
|
||||
13 -267 20 -236 15 -117 rrcurveto
|
||||
88 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="5">
|
||||
rmoveto
|
||||
127 77 80 139 hvcurveto
|
||||
416 -83 -429 vlineto
|
||||
-94 -37 -40 -76 -74 -45 47 102 vhcurveto
|
||||
414 -84 -420 vlineto
|
||||
-139 73 -76 122 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="6">
|
||||
rmoveto
|
||||
82 hlineto
|
||||
2 136 rlineto
|
||||
-83 hlineto
|
||||
219 -136 rmoveto
|
||||
82 hlineto
|
||||
2 136 rlineto
|
||||
-83 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="7">
|
||||
rmoveto
|
||||
8 -74 rlineto
|
||||
270 14 67 104 169 vvcurveto
|
||||
57 0 268 -1 39 vhcurveto
|
||||
15 -49 -46 8 -48 hhcurveto
|
||||
-140 -121 -98 -158 -129 79 -78 106 58 47 21 27 35 hvcurveto
|
||||
-2 -139 -31 -28 -232 -18 rrcurveto
|
||||
155 202 rmoveto
|
||||
-77 -58 53 108 109 66 59 86 31 30 -6 -9 32 hvcurveto
|
||||
-1 -76 1 -137 -67 vvcurveto
|
||||
-20 -32 -39 -14 -39 hhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="8">
|
||||
18 callgsubr
|
||||
rmoveto
|
||||
-61 -40 30 52 67 59 39 179 -19 hvcurveto
|
||||
-48 1 -36 1 -32 vhcurveto
|
||||
-30 -38 -52 -23 -49 hhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="9">
|
||||
rmoveto
|
||||
hintmask 00111110
|
||||
84 6 -57 207 -59 204 -65 208 17 callsubr
|
||||
hlineto
|
||||
hintmask 01011110
|
||||
-65 -209 -59 -206 -57 -207 rrcurveto
|
||||
83 hlineto
|
||||
17 63 16 64 17 63 rrcurveto
|
||||
209 hlineto
|
||||
hintmask 10011110
|
||||
18 -64 17 -65 17 -64 rrcurveto
|
||||
hintmask 00111110
|
||||
-160 554 rmoveto
|
||||
8 hlineto
|
||||
29 -99 27 -100 27 -99 rrcurveto
|
||||
-175 hlineto
|
||||
28 99 27 99 29 100 rrcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="10">
|
||||
-7 -140 -7 -118 -8 -132 rrcurveto
|
||||
-4 hlineto
|
||||
-10 32 -70 199 -8 25 rrcurveto
|
||||
-50 hlineto
|
||||
-7 -24 -69 -199 -10 -31 rrcurveto
|
||||
-4 hlineto
|
||||
-10 132 -7 117 -7 139 rrcurveto
|
||||
-80 hlineto
|
||||
11 -184 21 -190 18 -116 rrcurveto
|
||||
73 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="11">
|
||||
295 57 -213 hlineto
|
||||
129 89 71 65 75 vvcurveto
|
||||
66 -61 53 -208 -1 vhcurveto
|
||||
-5 -58 rlineto
|
||||
162 -3 46 -27 -47 vvcurveto
|
||||
-60 -78 -59 -145 -97 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="12">
|
||||
165 122 -4 53 rlineto
|
||||
-269 -57 hlineto
|
||||
195 2 rlineto
|
||||
-3 vlineto
|
||||
-162 -121 rlineto
|
||||
-33 vlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="13">
|
||||
78 -263 rmoveto
|
||||
-56 -31 26 35 31 27 26 47 19 hvcurveto
|
||||
52 -25 48 -23 -34 vvcurveto
|
||||
-31 -33 -24 -54 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="14">
|
||||
rmoveto
|
||||
4 hlineto
|
||||
176 151 -41 40 -131 -112 -133 113 -51 -49 rlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="15">
|
||||
-1 callgsubr
|
||||
-148 1 2 31 46 180 15 51 rlinecurve
|
||||
-70 5 -33 -119 -17 -126 1 -77 rlinecurve
|
||||
203 1 -1 -81 rlineto
|
||||
62 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="16">
|
||||
rmoveto
|
||||
24 -55 rlineto
|
||||
157 57 75 90 113 vvcurveto
|
||||
104 -64 56 -90 -84 -71 -56 -82 -118 145 -31 98 81 vhcurveto
|
||||
-13 -69 -52 -46 -125 -44 rrcurveto
|
||||
8 232 rmoveto
|
||||
49 40 31 48 56 41 -37 -77 vhcurveto
|
||||
-4 vlineto
|
||||
-88 -60 -97 20 78 vvcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="17">
|
||||
-90 callsubr
|
||||
-74 -148 -66 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="18">
|
||||
rmoveto
|
||||
-2 80 1 96 128 vvcurveto
|
||||
-78 hlineto
|
||||
-92 2 -93 1 -67 vhcurveto
|
||||
-198 -13 -64 98 165 vvcurveto
|
||||
138 49 102 267 -1 vhcurveto
|
||||
-5 80 rlineto
|
||||
-304 -11 -92 -146 -177 vvcurveto
|
||||
-217 128 -133 295 63 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="19">
|
||||
-12 64 -34 -21 26 -21 223.48 53.52 150 70 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="20">
|
||||
rmoveto
|
||||
488 154 66 -390 -66 153 -488 -153 -66 388 vlineto
|
||||
6 66 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="21">
|
||||
82.5 137.5 82.5 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="22">
|
||||
rmoveto
|
||||
-1 -77 rlineto
|
||||
287 -16 107 101 95 148 -309 43 107 vvcurveto
|
||||
51 57 40 217 -15 vhcurveto
|
||||
-5 77 rlineto
|
||||
-255 14 -99 -92 -88 -145 309 -38 -114 vvcurveto
|
||||
-59 -82 -51 -226 19 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="23">
|
||||
rmoveto
|
||||
68 -8 rlineto
|
||||
hintmask 10100000
|
||||
45 118 63 116 76 112 rrcurveto
|
||||
56 -296 vlineto
|
||||
-5 -58 rlineto
|
||||
232 hlineto
|
||||
2 -3 rlineto
|
||||
hintmask 11000000
|
||||
-78 -110 -62 -110 -45 -113 rrcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="24">
|
||||
-184 428 -258 hlineto
|
||||
-6 -57 183 -8 rlineto
|
||||
-363 -184 vlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="25">
|
||||
rmoveto
|
||||
126 105 106 162 hvcurveto
|
||||
hintmask 10011100
|
||||
74 -19 60 -33 42 vhcurveto
|
||||
42 61 rlineto
|
||||
hintmask 01101100
|
||||
-48 32 -37 -53 rlineto
|
||||
22 -32 -38 11 -43 hhcurveto
|
||||
-126 -106 -108 -159 -76 20 -60 35 -43 hvcurveto
|
||||
-42 -59 rlineto
|
||||
hintmask 10101100
|
||||
48 -32 36 52 rlineto
|
||||
-21 32 38 -11 42 hhcurveto
|
||||
-128 265 rmoveto
|
||||
121 57 65 80 33 29 -11 -21 23 vhcurveto
|
||||
-195 -282 rlineto
|
||||
-17 32 -10 43 53 vvcurveto
|
||||
141 -199 rmoveto
|
||||
-32 -29 10 20 -22 hvcurveto
|
||||
195 282 rlineto
|
||||
17 -32 9 -42 -51 vvcurveto
|
||||
-122 -56 -65 -82 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="26">
|
||||
rmoveto
|
||||
hintmask 10011011
|
||||
126 -240 rlineto
|
||||
hintmask 00110111
|
||||
89 13 -148 268 rlineto
|
||||
60 43 44 56 82 vvcurveto
|
||||
127 -96 82 -285 -42 vhcurveto
|
||||
hintmask 01011011
|
||||
-619 83 226 vlineto
|
||||
61 vmoveto
|
||||
268 vlineto
|
||||
151 22 65 -53 -90 vvcurveto
|
||||
-63 -33 -48 -48 -32 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="27">
|
||||
136 -13 50 -27 -31 vvcurveto
|
||||
-35 -57 -23 -168 -5 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="28">
|
||||
rmoveto
|
||||
28 66 rlineto
|
||||
-175 53 -76 39 53 58 88 42 63 vvcurveto
|
||||
hintmask 10110000
|
||||
39 -31 40 -84 21 vhcurveto
|
||||
hintmask 10101000
|
||||
85 23 32 41 37 vvcurveto
|
||||
hintmask 11000000
|
||||
56 -96 49 52 vvcurveto
|
||||
45 78 40 181 51 vhcurveto
|
||||
-26 67 rlineto
|
||||
-230 -73 -81 -69 -69 vvcurveto
|
||||
hintmask 10101000
|
||||
1 -75 100 -43 -45 vvcurveto
|
||||
-30 -36 -23 -125 -11 vhcurveto
|
||||
-2 -59 rlineto
|
||||
hintmask 10110000
|
||||
109 -7 48 -31 -38 vvcurveto
|
||||
hintmask 10100000
|
||||
-47 -92 -43 -79 vvcurveto
|
||||
-74 78 -46 226 -73 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="29">
|
||||
60 26 34 32 47 vvcurveto
|
||||
58 -60 38 -79 -98 -53 -55 -51 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="30">
|
||||
18 -21 24 -14 callsubr
|
||||
187 63 298 71 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="31">
|
||||
9 68 rlineto
|
||||
-240 -11 -69 66 129 vvcurveto
|
||||
104 49 69 253 -1 vhcurveto
|
||||
-6 77 rlineto
|
||||
-285 -6 -91 -119 -135 vvcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="32">
|
||||
414 hlineto
|
||||
7 73 -330 -1 323 477 rlineto
|
||||
71 -404 vlineto
|
||||
-6 -73 321 1 -325 -477 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="33">
|
||||
rmoveto
|
||||
hintmask 00111111
|
||||
84 6 -57 207 -59 204 -65 208 17 callsubr
|
||||
hlineto
|
||||
hintmask 01011111
|
||||
-65 -209 -59 -206 -57 -207 rrcurveto
|
||||
83 hlineto
|
||||
17 63 16 64 17 63 rrcurveto
|
||||
209 hlineto
|
||||
hintmask 10011111
|
||||
18 -64 17 -65 17 -64 rrcurveto
|
||||
hintmask 00111111
|
||||
-160 554 rmoveto
|
||||
8 hlineto
|
||||
29 -99 27 -100 27 -99 rrcurveto
|
||||
-175 hlineto
|
||||
28 99 27 99 29 100 rrcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="34">
|
||||
rmoveto
|
||||
62 37 -33 -94 hvcurveto
|
||||
-305 81 332 vlineto
|
||||
120 -58 49 -88 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="35">
|
||||
5 55 -57 -1 1 137 -62 -5 2 -132 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="36">
|
||||
rmoveto
|
||||
37 -13 60 89 16 79 -11 83 rlinecurve
|
||||
-91 -1 19 -75 7 -73 -37 -89 rlinecurve
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="37">
|
||||
0 62 574.5 61.5 -58 -20 hstemhm
|
||||
237 82 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="38">
|
||||
-73 callgsubr
|
||||
-70 -53 -31 -34 -41 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="39">
|
||||
-54 callgsubr
|
||||
hintmask 10110000
|
||||
-51 callsubr
|
||||
hintmask 11010000
|
||||
-74 callsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="40">
|
||||
-60 callsubr
|
||||
-361 -222 -66 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="41">
|
||||
rmoveto
|
||||
-55 428 55 vlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="42">
|
||||
2 -14 -15 1 -15 hhcurveto
|
||||
-149 -128 -102 -179 -145 78 -87 106 60 49 28 33 35 hvcurveto
|
||||
-113 6 rmoveto
|
||||
-79 -56 61 125 124 70 67 90 26 27 -5 -9 28 hvcurveto
|
||||
-137 1 -99 2 -85 vhcurveto
|
||||
-24 -30 -38 -18 -41 hhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="43">
|
||||
45.28 152.9 53 hstem
|
||||
120 61 185 63 vstem
|
||||
173 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="44">
|
||||
-78 callgsubr
|
||||
-37 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="45">
|
||||
hstem
|
||||
66 80 259 78.75 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="46">
|
||||
rmoveto
|
||||
94 -274 rlineto
|
||||
75 hlineto
|
||||
17 116 21 190 11 184 rrcurveto
|
||||
-76 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="47">
|
||||
hintmask 11011000
|
||||
460 -8 rmoveto
|
||||
9 68 rlineto
|
||||
-164 3 -47 22 85 vvcurveto
|
||||
257 200 63 -200 143 vlineto
|
||||
hintmask 11101000
|
||||
18 callsubr
|
||||
-136 -93 vlineto
|
||||
-8 -63 rlineto
|
||||
101 -270 hlineto
|
||||
hintmask 11011000
|
||||
-121 71 -47 212 3 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="48">
|
||||
71 211 63 204 71 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="49">
|
||||
-49 callgsubr
|
||||
-63 -146 -66 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="50">
|
||||
55 304 55 hstem
|
||||
109 66 200 66 vstem
|
||||
269 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="51">
|
||||
rmoveto
|
||||
55 -51 rlineto
|
||||
217 178 86 147 145 vvcurveto
|
||||
141 -85 144 -214 177 vhcurveto
|
||||
-55 -53 rlineto
|
||||
200 -158 74 -128 -126 vvcurveto
|
||||
-128 -73 -127 -205 -161 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="52">
|
||||
rmoveto
|
||||
-55 51 rlineto
|
||||
-216 -177 -87 -147 -145 vvcurveto
|
||||
-142 85 -144 214 -176 vhcurveto
|
||||
56 51 rlineto
|
||||
-201 159 -74 128 127 vvcurveto
|
||||
127 73 128 205 160 vhcurveto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="53">
|
||||
368 hlineto
|
||||
7 62 rlineto
|
||||
-166 hlineto
|
||||
-1 114 -2 96 -1 85 rrcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="54">
|
||||
394 hlineto
|
||||
7 62 rlineto
|
||||
-160 636 -226 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="55">
|
||||
-12 67 510 67 hstem
|
||||
56 78 282 79 vstem
|
||||
268 -12 rmoveto
|
||||
139 88 132 199 196 -74 117 -139 -139 -87 -131 -200 -195 74 -118 138 hvcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="56">
|
||||
-55 -29 39 53 47 28 49 59 42 hvcurveto
|
||||
32 -38 41 -46 48 -57 rrcurveto
|
||||
-61 -39 -43 -28 -42 hhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="57">
|
||||
-9.14 70.62 -41.48 -21 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="58">
|
||||
131 425 rmoveto
|
||||
-96 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="59">
|
||||
-15 69 512 69 hstem
|
||||
46 85 288 85 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="60">
|
||||
377 hlineto
|
||||
8 71 rlineto
|
||||
-301 549 -84 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="61">
|
||||
130 56 147 60.5 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="62">
|
||||
-45 58 -329 -277 rlineto
|
||||
-69 vlineto
|
||||
332 -279 46 57 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="63">
|
||||
hstem
|
||||
-64 callsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="64">
|
||||
61 288 -58 callsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="65">
|
||||
0 62 366.5 61.5 18 -20 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="66">
|
||||
hstem
|
||||
55 82 277 81 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="67">
|
||||
21 -21 620 -20 22 -20 hstemhm
|
||||
234 84 hintmask 10110000
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="68">
|
||||
-5.25 73.25 480 80 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="69">
|
||||
-7 65 -64 68 161 52 -48.5 5 callsubr
|
||||
149 69 -65 67 hstemhm
|
||||
34 76 124 70 135 74 hintmask 0101011110000000
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="70">
|
||||
-46 43 -30 48 -26 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="71">
|
||||
hintmask 11010000
|
||||
78 hmoveto
|
||||
-31 callsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="72">
|
||||
50 -54 callsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="73">
|
||||
0 106 514 -20 hstem
|
||||
51 82 289 78 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="74">
|
||||
33 59 32 79 22 89 -70 9 rcurveline
|
||||
-14 -68 -21 -66 -23 -54 rrcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="75">
|
||||
45 -57 333 280 rlineto
|
||||
69 vlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="76">
|
||||
443 hlineto
|
||||
6 62 rlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="77">
|
||||
-20 callsubr
|
||||
92 55 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="78">
|
||||
130 112 116 191 191 -105 108 -131 -132 -98 -124 -185 vhcurveto
|
||||
48 2 rmoveto
|
||||
161 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="79">
|
||||
21 -21 432 69 -9 -20 hstemhm
|
||||
88 81 221 81 hintmask 11011000
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="80">
|
||||
-8 68 367 63 136 -20 27 -20 hstemhm
|
||||
177 81 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="81">
|
||||
0 -59 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="82">
|
||||
-9 callgsubr
|
||||
hstem
|
||||
78 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="83">
|
||||
-101 callgsubr
|
||||
hintmask 11110010
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="84">
|
||||
rmoveto
|
||||
243 -222 54 56 -232 207 238 205 -54 56 -244 -221 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="85">
|
||||
-61 callsubr
|
||||
224 85 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="86">
|
||||
-152 -21 211 65 329 69 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="87">
|
||||
0 71 549 -20 hstem
|
||||
113 84 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="88">
|
||||
0 62 367 61 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="89">
|
||||
15 -21 27 -21 27 -21 213 60 207 -20 26 -20 227 -20 27 -20 hstemhm
|
||||
101 81 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="90">
|
||||
rmoveto
|
||||
54 -57 244 221 5 82 -243 221 -54 -56 232 -207 rlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="91">
|
||||
40 54 34 201 -18 vhcurveto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="92">
|
||||
-70 callgsubr
|
||||
hintmask 11010000
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="93">
|
||||
rmoveto
|
||||
-75 -6 rlineto
|
||||
-886 75 vlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="94">
|
||||
0 hflex1
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="95">
|
||||
8 callsubr
|
||||
245.36 55 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="96">
|
||||
443 51 69 153 -25 callgsubr
|
||||
1494 vstem
|
||||
1571 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="97">
|
||||
rmoveto
|
||||
-248 hlineto
|
||||
-3 -66 rlineto
|
||||
328 873 -326 -66 249 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="98">
|
||||
69 153 69 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="99">
|
||||
-14 66 -33 -21 439 66 -12 -20 hstemhm
|
||||
55 81 279 80 hintmask 10101100
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="100">
|
||||
-88 -56 -45 -63 -75 vvcurveto
|
||||
-80 49 -62 95 64 64 34 77 51 vhcurveto
|
||||
28 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="101">
|
||||
hstemhm
|
||||
80 75.5 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="102">
|
||||
hstem
|
||||
233 83 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="103">
|
||||
-1 callgsubr
|
||||
rlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="104">
|
||||
59 hstemhm
|
||||
148 78 -75 81 11 77 -71 73 hintmask 10100000
|
||||
455 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="105">
|
||||
-83 6 -51 -75 -53 -69 -58 -68 rlinecurve
|
||||
-76 -2 rlineto
|
||||
428 vlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="106">
|
||||
rmoveto
|
||||
52 -1 -72 callgsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="107">
|
||||
0 71 111 62 38 63 204 71 hstem
|
||||
262 73 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="108">
|
||||
rmoveto
|
||||
3 callgsubr
|
||||
|
||||
</CharString>
|
||||
<CharString index="109">
|
||||
-19 hlineto
|
||||
-6 2 -3 5 4 2 2 4 1 vhcurveto
|
||||
5 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="110">
|
||||
-47 callgsubr
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="111">
|
||||
98 hlineto
|
||||
5 120 rlineto
|
||||
-98 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="112">
|
||||
78.41 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="113">
|
||||
76.5 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="114">
|
||||
84.5 -81.5 81 hintmask 00000000
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="115">
|
||||
86 12 -188 249 62 73 59 79 56 79 rlinecurve
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="116">
|
||||
187 -73 -187 -178 -68 178 -187 73 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="117">
|
||||
rmoveto
|
||||
113 hlineto
|
||||
3 110 rlineto
|
||||
-114 hlineto
|
||||
endchar
|
||||
|
||||
</CharString>
|
||||
<CharString index="118">
|
||||
82.5 hintmask 00000000
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="119">
|
||||
6 69 rlineto
|
||||
-317 -69 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="120">
|
||||
hlineto
|
||||
17 172 rlineto
|
||||
-59 hlineto
|
||||
-17 -172 rlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="121">
|
||||
66 741 66 hstem
|
||||
337 77 vstem
|
||||
337 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="122">
|
||||
0 71 348 71 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="123">
|
||||
602 rmoveto
|
||||
-47 -58 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="124">
|
||||
hstemhm
|
||||
67 80 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="125">
|
||||
-150 55 return
|
||||
|
||||
</CharString>
|
||||
<CharString index="126">
|
||||
21 -21 549 71 hstem
|
||||
234 84 vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="127">
|
||||
29 37 24 124 11 vhcurveto
|
||||
3 58 rlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="128">
|
||||
55 93 -67 callsubr
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="129">
|
||||
-20 callgsubr
|
||||
vstem
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="130">
|
||||
rmoveto
|
||||
119 hlineto
|
||||
return
|
||||
|
||||
</CharString>
|
||||
<CharString index="131">
|
||||
118.5 hintmask 11010000
|
||||
220 return
|
||||
|
||||
</CharString>
|
||||
|
||||
|
||||
</GlobalSubrs>
|
||||
@@ -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>
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"fontName": "OperatorMonoLig-Book",
|
||||
"familyName": "Operator Mono Lig",
|
||||
"foundry": "H&Co",
|
||||
"version": "1.200",
|
||||
"fontStyle": "Book",
|
||||
"windowsFontStyle": "Regular"
|
||||
}
|
||||
@@ -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&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&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>
|
||||
@@ -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,52 +1,120 @@
|
||||
<ttFont>
|
||||
<head>
|
||||
|
||||
|
||||
<!-- Most of this table will be recalculated by the compiler -->
|
||||
|
||||
|
||||
<tableVersion value="1.0"/>
|
||||
|
||||
|
||||
<fontRevision value="1.002"/>
|
||||
<checkSumAdjustment value="0xd578326d"/>
|
||||
|
||||
|
||||
|
||||
<magicNumber value="0x5f0f3cf5"/>
|
||||
|
||||
|
||||
<flags value="00000000 00000011"/>
|
||||
|
||||
|
||||
<unitsPerEm value="1000"/>
|
||||
<created value="Mon Oct 16 14:13:21 2017"/>
|
||||
<modified value="Mon Oct 16 14:13:21 2017"/>
|
||||
<xMin value="-367"/>
|
||||
|
||||
|
||||
|
||||
|
||||
<xMin value="-1562"/>
|
||||
|
||||
|
||||
<yMin value="-371"/>
|
||||
<xMax value="2139"/>
|
||||
|
||||
|
||||
<xMax value="717"/>
|
||||
|
||||
|
||||
<yMax value="1130"/>
|
||||
|
||||
|
||||
<macStyle value="00000000 00000010"/>
|
||||
|
||||
|
||||
<lowestRecPPEM value="3"/>
|
||||
|
||||
|
||||
<fontDirectionHint value="2"/>
|
||||
|
||||
|
||||
<indexToLocFormat value="0"/>
|
||||
|
||||
|
||||
<glyphDataFormat value="0"/>
|
||||
|
||||
|
||||
</head>
|
||||
<hhea>
|
||||
|
||||
|
||||
<tableVersion value="0x00010000"/>
|
||||
|
||||
|
||||
<ascent value="960"/>
|
||||
|
||||
|
||||
<descent value="-240"/>
|
||||
|
||||
|
||||
<lineGap value="0"/>
|
||||
<advanceWidthMax value="2200"/>
|
||||
<minLeftSideBearing value="-367"/>
|
||||
|
||||
|
||||
<advanceWidthMax value="600"/>
|
||||
|
||||
|
||||
<minLeftSideBearing value="-1562"/>
|
||||
|
||||
|
||||
<minRightSideBearing value="-167"/>
|
||||
<xMaxExtent value="2139"/>
|
||||
|
||||
|
||||
<xMaxExtent value="717"/>
|
||||
|
||||
|
||||
<caretSlopeRise value="1000"/>
|
||||
|
||||
|
||||
<caretSlopeRun value="194"/>
|
||||
|
||||
|
||||
<caretOffset value="0"/>
|
||||
|
||||
|
||||
<reserved0 value="0"/>
|
||||
|
||||
|
||||
<reserved1 value="0"/>
|
||||
|
||||
|
||||
<reserved2 value="0"/>
|
||||
|
||||
|
||||
<reserved3 value="0"/>
|
||||
|
||||
|
||||
<metricDataFormat value="0"/>
|
||||
<numberOfHMetrics value="456"/>
|
||||
|
||||
|
||||
<numberOfHMetrics value="468"/>
|
||||
|
||||
|
||||
</hhea>
|
||||
<CFF>
|
||||
<CFFFont>
|
||||
<FontBBox value="-367 -371 2139 1130"/>
|
||||
<FontBBox value="-1562 -371 717 1130"/>
|
||||
</CFFFont>
|
||||
</CFF>
|
||||
<CFF>
|
||||
<CFFFont>
|
||||
<Private>
|
||||
<nominalWidthX value="1207"/>
|
||||
<nominalWidthX value="107"/>
|
||||
</Private>
|
||||
</CFFFont>
|
||||
</CFF>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<Glyph name="LIG" lsb="0" width="550">
|
||||
<CharString>
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,36 @@
|
||||
<Glyph name="ampersand_ampersand.liga" lsb="-411" width="550">
|
||||
<CharString>
|
||||
-10 71 hstem
|
||||
-411 76 132 73 149 76 132 73 vstem
|
||||
523 350 rmoveto
|
||||
-66 24 -30 -59 -30 -50 -30 -42 rlinecurve
|
||||
-37 63 -22 63 -8 65 rrcurveto
|
||||
60 60 35 65 49 vvcurveto
|
||||
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
|
||||
-7 vlineto
|
||||
-128 -109 -80 -109 -100 vvcurveto
|
||||
-17 19 -15 20 -14 20 40 50 40 60 40 70 -66 24 rcurveline
|
||||
-30 -59 -30 -50 -30 -42 -37 63 -22 63 -8 65 rrcurveto
|
||||
60 60 35 65 49 vvcurveto
|
||||
33 -22 19 -32 -51 -63 -97 -107 vhcurveto
|
||||
-7 vlineto
|
||||
-128 -109 -80 -109 -100 vvcurveto
|
||||
-75 41 -46 74 64 75 41 78 77 vhcurveto
|
||||
26 -37 75 -60 77 -17 rrcurveto
|
||||
-3 11 14 -2 14 hhcurveto
|
||||
64 72 41 78 77 hvcurveto
|
||||
31 -43 37 -43 41 -42 63 51 rcurveline
|
||||
-47 47 -40 45 -32 46 40 50 40 60 40 70 rrcurveto
|
||||
-796 -289 rmoveto
|
||||
-38 -24 24 43 69 58 80 82 80 hvcurveto
|
||||
12 -66 28 -66 41 -66 rrcurveto
|
||||
-67 -61 -56 -31 -42 hhcurveto
|
||||
430 hmoveto
|
||||
-38 -24 24 43 69 58 80 82 80 hvcurveto
|
||||
12 -66 28 -66 41 -66 rrcurveto
|
||||
-67 -61 -56 -31 -42 hhcurveto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Glyph name="bar_bar.liga" lsb="-298" width="550">
|
||||
<CharString>
|
||||
-298 247 103 247 vstem
|
||||
-51 707 rmoveto
|
||||
-74 -2 -173 -886 rlineto
|
||||
74 hlineto
|
||||
523 888 rmoveto
|
||||
-74 -2 -173 -886 rlineto
|
||||
74 hlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,14 @@
|
||||
<Glyph name="bar_greater.liga" lsb="-261" width="550">
|
||||
<CharString>
|
||||
-261 75 468 74 vstem
|
||||
-13 710 rmoveto
|
||||
-76 -6 -172 -886 rlineto
|
||||
75 hlineto
|
||||
627 440 13 69 rlineto
|
||||
-82 -40 rmoveto
|
||||
-540 -376 137 709 405 -323 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,25 @@
|
||||
<Glyph name="colon_equal.liga" lsb="-297" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-253 618 vstem
|
||||
-253 354 rmoveto
|
||||
118 hlineto
|
||||
25 117 rlineto
|
||||
-119 hlineto
|
||||
638 -98 rmoveto
|
||||
14 69 rlineto
|
||||
-424 hlineto
|
||||
-13 -69 rlineto
|
||||
-283 -245 rmoveto
|
||||
118 hlineto
|
||||
25 117 rlineto
|
||||
-119 hlineto
|
||||
638 -94 rmoveto
|
||||
15 69 rlineto
|
||||
-424 hlineto
|
||||
-14 -69 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,25 @@
|
||||
<Glyph name="equal_equal.2.liga" lsb="-472" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-472 944 vstem
|
||||
-6 373 rmoveto
|
||||
15 69 rlineto
|
||||
-424 hlineto
|
||||
-14 -69 rlineto
|
||||
943 hmoveto
|
||||
15 69 rlineto
|
||||
-414 hlineto
|
||||
-14 -69 rlineto
|
||||
-150 -222 rmoveto
|
||||
14 69 rlineto
|
||||
-424 hlineto
|
||||
-13 -69 rlineto
|
||||
943 hmoveto
|
||||
14 69 rlineto
|
||||
-414 hlineto
|
||||
-13 -69 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||
@@ -0,0 +1,17 @@
|
||||
<Glyph name="equal_equal.liga" lsb="-472" width="550">
|
||||
<CharString>
|
||||
151 69 153 69 hstem
|
||||
-472 944 vstem
|
||||
514 373 rmoveto
|
||||
15 69 rlineto
|
||||
-944 hlineto
|
||||
-14 -69 rlineto
|
||||
900 -222 rmoveto
|
||||
14 69 rlineto
|
||||
-944 hlineto
|
||||
-13 -69 rlineto
|
||||
endchar
|
||||
</CharString>
|
||||
<Subrs/>
|
||||
<GlobalSubrs/>
|
||||
</Glyph>
|
||||