28 Commits

Author SHA1 Message Date
kiliman 77b3f4e7f3 🚀 Deploy v2.5.2 2024-03-20 10:40:51 -04:00
kiliman 141924ba82 😍 Add @tweks as a contributor 2024-03-20 10:40:17 -04:00
Tomek Weksej 7554d7ab76 🐛 Fix font weight/style metadata (#186)
This fixes a bug that Bold is interpreted as a standard font style (instead of Book) by some applications and operating systems.

This sets correct values to following metadata:
* head: macStyle: https://learn.microsoft.com/en-us/typography/opentype/spec/head
* OS/2: fsSelection: https://learn.microsoft.com/en-us/typography/opentype/spec/os2#fsselection
* OS/2: usWeightClass: https://learn.microsoft.com/en-us/typography/opentype/spec/os2#usweightclass
2024-03-20 10:36:17 -04:00
kiliman 1babf4977d 🚀 Deploy v2.5.1 2023-12-23 17:28:04 -06:00
kiliman 0d4a55ed1f 🔥 Remove canvas dependency 2023-12-23 17:25:11 -06:00
kiliman 10dd25fd26 🚀 Deploy v2.5.0 2023-12-21 10:40:52 -06:00
kiliman 135f6eb156 🖼️ Update ligature preview images 2023-12-21 10:40:39 -06:00
kiliman 4499ba4809 📦 Add canvas dependency 2023-12-21 10:25:47 -06:00
Jakob Pearson fff435748f Merge remote-tracking branch 'kiliman/master' (#185)
* OperatorMonoSSm (Light, Book, Medium, Bold)
New Ligatures:
    - colon_colon
    - exclam_exclam
    - semicolon_semicolon
    - less_less
    - greater_greater
    - hyphen_equal (minus_equal)
    - asterisk_equal
    - slash_equal
    - less_slash_greater
    - less_less_equal
    - quotedbl_quotedbl_quotedbl
    - quotesingle_quotesingle_quotesingle
New Powerline Glyhps:
    - E0A1 (Powerline LN)
    - E0A2 (Powerline lock)
    - E0B1 (Powerline left soft divider)
    - E0B3 (Powerline right soft divider)

Features:
    - ss10 can be used to substitute 'x' for '×'. Eg 0×FF or 800×600
    - 'Equality Spaces' and 'Less-than/Greater-than Horizontal Bar' alternatives are included
    by default, and can be activated via ss11 and ss12 respectively.
    - Corrected and simplified features code to include the missing 'kern' feature for
    fraction numerator and denominator positioning.
    - 'calt.js' will also generate the 'liga' feature.

Edited and repositioned some existing glyphs to be more consistent across font weights.
Created missing glyphs for other weights. Eg 'w_w_w.liga' and 'plus_equal.liga'

* 'calt.js' no longer generates the 'liga' feature.

* Adjusted hinting, no contours changed.
2023-12-21 11:21:24 -05:00
Michael Carter eec76d8792 📝 Update instructions for Mac installs 2022-09-14 12:11:11 -05:00
Kiliman 7a86cd065f 🚀 Deploy v2.4.2
Bumped version due to package.lock.json issue
2022-02-18 09:49:32 -05:00
kiliman 834a086e09 📦 Update xml-formatter package and refresh package lock
Fixes #178
2022-02-13 16:38:04 -05:00
kiliman 298723b87e 🐛 Fix typo in all-contributors for @killua 2021-10-18 10:19:10 -04:00
kiliman 0956c0e569 😍 Add @killua99 as a contributor 2021-10-18 10:19:10 -04:00
kiliman 30ef51ace3 😍 Add @GlorifiedBicycle as a contributor 2021-10-18 10:13:26 -04:00
kiliman 8aa2677ffc 😍 Add @kilua99 as a contributor 2021-10-18 10:12:34 -04:00
Reland Boyle 5c25311fdf Added note regardign installing FontTools under WSL/WSL2 (#174) 2021-10-18 10:12:07 -04:00
Luigi a55ef07837 📝 Improve readme installation for Windows (#167) 2021-05-25 14:56:08 -04:00
dependabot[bot] 09bbb2bb76 Bump xmldom from 0.1.27 to 0.5.0 (#163)
Bumps [xmldom](https://github.com/xmldom/xmldom) from 0.1.27 to 0.5.0.
- [Release notes](https://github.com/xmldom/xmldom/releases)
- [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/xmldom/xmldom/compare/v0.1.27...0.5.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-13 17:23:50 -06:00
kiliman 4ff7dbde28 🚀 Deploy v2.4.1 2020-12-18 09:35:06 -05:00
kiliman 0d7089f840 💄 Reformat with prettier 2020-12-18 09:33:55 -05:00
kiliman 8a32259fdc 🐛 Fix italic ligatures slanting wrong direction #160 2020-12-18 09:33:34 -05:00
kiliman ee481cc744 🐛 Fix links in generated preview file 2020-12-13 14:42:12 -05:00
kiliman 196e13856c 🔨 Add link to preview HTML using htmlpreview.github.io 2020-12-13 14:39:14 -05:00
kiliman 2029e07965 🔥 Remove link to preview in README due to broken display on GitHub 2020-12-13 13:08:41 -05:00
kiliman 4955c58098 Add preview images and update README 2020-12-13 13:05:08 -05:00
kiliman c63a5b0abb Add script to generate preview images of ligatures (normal and italic) 2020-12-13 13:04:42 -05:00
kiliman 8f7db7bc4c 📦 Add prettier and update eslint config 2020-12-13 13:03:12 -05:00
816 changed files with 9302 additions and 14190 deletions
+36 -24
View File
@@ -3,9 +3,7 @@
"projectOwner": "kiliman", "projectOwner": "kiliman",
"repoType": "github", "repoType": "github",
"repoHost": "https://github.com", "repoHost": "https://github.com",
"files": [ "files": ["README.md"],
"README.md"
],
"imageSize": 100, "imageSize": 100,
"commit": true, "commit": true,
"commitConvention": "none", "commitConvention": "none",
@@ -15,58 +13,72 @@
"name": "Kiliman", "name": "Kiliman",
"avatar_url": "https://avatars3.githubusercontent.com/u/47168?v=4", "avatar_url": "https://avatars3.githubusercontent.com/u/47168?v=4",
"profile": "https://github.com/kiliman", "profile": "https://github.com/kiliman",
"contributions": [ "contributions": ["code", "doc", "design"]
"code",
"doc",
"design"
]
}, },
{ {
"login": "mskelton", "login": "mskelton",
"name": "Mark Skelton", "name": "Mark Skelton",
"avatar_url": "https://avatars3.githubusercontent.com/u/25914066?v=4", "avatar_url": "https://avatars3.githubusercontent.com/u/25914066?v=4",
"profile": "https://github.com/mskelton", "profile": "https://github.com/mskelton",
"contributions": [ "contributions": ["design"]
"design"
]
}, },
{ {
"login": "drod3763", "login": "drod3763",
"name": "Derick Rodriguez", "name": "Derick Rodriguez",
"avatar_url": "https://avatars2.githubusercontent.com/u/7785716?v=4", "avatar_url": "https://avatars2.githubusercontent.com/u/7785716?v=4",
"profile": "https://github.com/drod3763", "profile": "https://github.com/drod3763",
"contributions": [ "contributions": ["doc"]
"doc"
]
}, },
{ {
"login": "amitkparekh", "login": "amitkparekh",
"name": "Amit Parekh", "name": "Amit Parekh",
"avatar_url": "https://avatars3.githubusercontent.com/u/7276308?v=4", "avatar_url": "https://avatars3.githubusercontent.com/u/7276308?v=4",
"profile": "https://github.com/amitkparekh", "profile": "https://github.com/amitkparekh",
"contributions": [ "contributions": ["doc", "design"]
"doc",
"design"
]
}, },
{ {
"login": "CandySunPlus", "login": "CandySunPlus",
"name": "NikSun", "name": "NikSun",
"avatar_url": "https://avatars0.githubusercontent.com/u/502700?v=4", "avatar_url": "https://avatars0.githubusercontent.com/u/502700?v=4",
"profile": "https://github.com/CandySunPlus", "profile": "https://github.com/CandySunPlus",
"contributions": [ "contributions": ["design"]
"design"
]
}, },
{ {
"login": "Jakob6174", "login": "Jakob6174",
"name": "Jakob Pearson", "name": "Jakob Pearson",
"avatar_url": "https://avatars3.githubusercontent.com/u/40262817?v=4", "avatar_url": "https://avatars3.githubusercontent.com/u/40262817?v=4",
"profile": "https://github.com/Jakob6174", "profile": "https://github.com/Jakob6174",
"contributions": [ "contributions": ["code"]
"code" },
] {
"login": "Kilua99",
"name": "kilua99",
"avatar_url": "https://avatars.githubusercontent.com/u/44760686?v=4",
"profile": "https://github.com/Kilua99",
"contributions": ["doc"]
},
{
"login": "GlorifiedBicycle",
"name": "Reland Boyle",
"avatar_url": "https://avatars.githubusercontent.com/u/71753585?v=4",
"profile": "https://github.com/GlorifiedBicycle",
"contributions": ["doc"]
},
{
"login": "killua99",
"name": "Luigi",
"avatar_url": "https://avatars.githubusercontent.com/u/457822?v=4",
"profile": "http://killua.me/",
"contributions": ["doc"]
},
{
"login": "tweks",
"name": "Tomek Weksej",
"avatar_url": "https://avatars.githubusercontent.com/u/564556?v=4",
"profile": "https://github.com/tweks",
"contributions": ["code"]
} }
], ],
"contributorsPerLine": 7 "contributorsPerLine": 7
} }
+6 -9
View File
@@ -1,17 +1,14 @@
module.exports = { module.exports = {
env: { env: {
es6: true, es6: true,
node: true node: true,
}, },
extends: 'eslint:recommended', extends: ['eslint:recommended', 'prettier'],
parserOptions: { parserOptions: {
sourceType: 'module' sourceType: 'module',
}, },
rules: { rules: {
indent: ['error', 2],
'linebreak-style': ['error', 'unix'], 'linebreak-style': ['error', 'unix'],
quotes: ['error', 'single'], 'no-console': 'off',
semi: ['error', 'always'], },
'no-console': 'off' }
}
};
+1
View File
@@ -3,3 +3,4 @@ node_modules
.idea .idea
.vscode .vscode
.DS_Store .DS_Store
pnpm-lock.yaml
+4 -2
View File
@@ -1,4 +1,6 @@
{ {
"semi": true, "semi": false,
"singleQuote": true "singleQuote": true,
"trailingComma": "all",
"arrowParens": "avoid"
} }
+28 -10
View File
@@ -10,6 +10,10 @@ those found in the popular [Fira Code](https://github.com/tonsky/FiraCode) font.
These ligatures were custom created using [Glyphs](https://glyphsapp.com/). These ligatures were custom created using [Glyphs](https://glyphsapp.com/).
There are even italic versions of the ligatures. There are even italic versions of the ligatures.
## 🎉 What's New in Version 2.5
<img src="./images/new-ligatures-2.5.png"/>
## 🎉 What's New in Version 2 ## 🎉 What's New in Version 2
<img src="./images/new-ligatures.png"/> <img src="./images/new-ligatures.png"/>
@@ -20,6 +24,8 @@ characters properly.
<img src="./images/caret-position.gif" /> <img src="./images/caret-position.gif" />
## 👀 <a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/normal/index.html">Click here to see preview images of all ligatures</a>
With the awesome help from [Mark Skelton](https://github.com/mskelton), we now have the full set of ligatures for 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. the following fonts. Thanks Mark, and thanks to all of you who have been patiently waiting for these ligatures to be completed.
@@ -54,10 +60,13 @@ Which font weight of Operator Mono do you use? Also note difference between Scre
- The original _Operator Mono_ font... of course. - The original _Operator Mono_ font... of course.
- Python (v2.7+) - Python (v2.7+)
- **NOTE**: For Mac, the default system Python v2.7 doesn't work. Make sure you install Python 3.
- Node.js - Node.js
- Install _fonttools_ from https://github.com/fonttools/fonttools - Install _fonttools_ from https://github.com/fonttools/fonttools
- Windows/Linux: `pip install fonttools` - Windows/Linux: `pip install fonttools`
- Mac: `pip3 install fonttools` - **NOTE**: For Windows you should use a console with administrative permissions if your Python sit under `C:\PythonX`
- **NOTE**: For Linux in WSL/WSL2, ensure that _fonttools_ is added to PATH after install. Alternatively, consider installing via `sudo apt install fonttools`.
- Mac: `pip3 install fonttools` (from Python 3)
## Installation ## Installation
@@ -151,18 +160,27 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<!-- prettier-ignore-start --> <!-- prettier-ignore-start -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<table> <table>
<tr> <tbody>
<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> <tr>
<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" valign="top" width="14.28%"><a href="https://github.com/kiliman"><img src="https://avatars3.githubusercontent.com/u/47168?v=4?s=100" 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/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" valign="top" width="14.28%"><a href="https://github.com/mskelton"><img src="https://avatars3.githubusercontent.com/u/25914066?v=4?s=100" 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/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" valign="top" width="14.28%"><a href="https://github.com/drod3763"><img src="https://avatars2.githubusercontent.com/u/7785716?v=4?s=100" 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/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" valign="top" width="14.28%"><a href="https://github.com/amitkparekh"><img src="https://avatars3.githubusercontent.com/u/7276308?v=4?s=100" 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/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> <td align="center" valign="top" width="14.28%"><a href="https://github.com/CandySunPlus"><img src="https://avatars0.githubusercontent.com/u/502700?v=4?s=100" width="100px;" alt="NikSun"/><br /><sub><b>NikSun</b></sub></a><br /><a href="#design-CandySunPlus" title="Design">🎨</a></td>
</tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Jakob6174"><img src="https://avatars3.githubusercontent.com/u/40262817?v=4?s=100" 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>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kilua99"><img src="https://avatars.githubusercontent.com/u/44760686?v=4?s=100" width="100px;" alt="kilua99"/><br /><sub><b>kilua99</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=Kilua99" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/GlorifiedBicycle"><img src="https://avatars.githubusercontent.com/u/71753585?v=4?s=100" width="100px;" alt="Reland Boyle"/><br /><sub><b>Reland Boyle</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=GlorifiedBicycle" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://killua.me/"><img src="https://avatars.githubusercontent.com/u/457822?v=4?s=100" width="100px;" alt="Luigi"/><br /><sub><b>Luigi</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=killua99" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tweks"><img src="https://avatars.githubusercontent.com/u/564556?v=4?s=100" width="100px;" alt="Tomek Weksej"/><br /><sub><b>Tomek Weksej</b></sub></a><br /><a href="https://github.com/kiliman/operator-mono-lig/commits?author=tweks" title="Code">💻</a></td>
</tr>
</tbody>
</table> </table>
<!-- markdownlint-enable --> <!-- markdownlint-restore -->
<!-- prettier-ignore-end --> <!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
+8 -1
View File
@@ -31,6 +31,13 @@ if not exist .\ligature\%lig%\glyphs\* exit /b
ttx -f .\original\%otf%.otf ttx -f .\original\%otf%.otf
node index.js %otf% %flags% node index.js %otf% %flags%
ttx -f .\build\%lig%.ttx ttx -f .\build\%lig%.ttx
fonttools feaLib -v -o ".\build\%lig%.otf" .\features\default.fea ".\build\%lig%.otf" rem check if "SSm" is in name since the features are slightly different
@echo.%lig% | findstr /C:"SSm" 1>nul
if errorlevel 1 (
set fea=".\features\default.fea"
) else (
set fea=".\features\defaultSSm.fea"
)
fonttools feaLib -v -o ".\build\%lig%.otf" %fea% ".\build\%lig%.otf"
exit /b exit /b
+6 -2
View File
@@ -21,8 +21,12 @@ build_font() {
node index.js "$otf" "$flags" node index.js "$otf" "$flags"
ttx -f "./build/$1.ttx" ttx -f "./build/$1.ttx"
if [[ $lig == *"SSm"* ]]; then
fonttools feaLib -v -o "./build/$1.otf" ./features/default.fea "./build/$1.otf" fea="./features/defaultSSm.fea"
else
fea="./features/default.fea"
fi
fonttools feaLib -v -o "./build/$1.otf" $fea "./build/$1.otf"
} }
flags= flags=
+25 -26
View File
@@ -1,7 +1,7 @@
const fs = require('fs'); const fs = require('fs')
const rules = [ const rules = [
, '',
` `
lookup 1 { lookup 1 {
sub 1 by glyph; sub 1 by glyph;
@@ -30,37 +30,36 @@ lookup 1_2_3_4 {
sub 1.spacer 2' 3 4 by 2.spacer; sub 1.spacer 2' 3 4 by 2.spacer;
sub 1' 2 3 4 by 1.spacer; sub 1' 2 3 4 by 1.spacer;
} 1_2_3_4;`, } 1_2_3_4;`,
]; ]
const gencalt = (ligatures) => { const gencalt = ligatures => {
let calt = 'feature calt {\n'; let calt = 'feature calt {\n'
const ligs = {}; const ligs = {}
console.log(ligatures);
ligatures ligatures
.filter((l) => !!l.name.match(/\.liga$/) || l.name !== l.glyph) .filter(l => !!l.name.match(/\.liga$/) || l.name !== l.glyph)
.map((l) => l.glyph) .map(l => l.glyph)
.sort((a, b) => { .sort((a, b) => {
const length = b.split('_').length - a.split('_').length; const length = b.split('_').length - a.split('_').length
if (length !== 0) return length; if (length !== 0) return length
return a < b ? -1 : 1; return a < b ? -1 : 1
}) })
.forEach((g) => { .forEach(g => {
g.split('.') g.split('.')
.slice(0, 1) .slice(0, 1)
.forEach((l) => { .forEach(l => {
if (ligs[l]) return; if (ligs[l]) return
ligs[l] = true; ligs[l] = true
const c = l.split('_'); const c = l.split('_')
let rule = rules[c.length]; let rule = rules[c.length]
rule = rule rule = rule
.replace(/\d/g, (m) => c[parseInt(m) - 1]) .replace(/\d/g, m => c[parseInt(m) - 1])
.replace(/glyph/g, g); .replace(/glyph/g, g)
calt += rule + '\n'; calt += rule + '\n'
}); })
}); })
return calt + '\n} calt;\n'; return calt + '\n} calt;\n'
}; }
exports.gencalt = gencalt; exports.gencalt = gencalt
+202 -180
View File
@@ -1,212 +1,234 @@
languagesystem DFLT dflt; ##############################
languagesystem latn dflt; # Languagesystem definitions #
##############################
lookup lookup_0 { languagesystem DFLT dflt; # Default default
sub zero by zero.num; languagesystem latn dflt; # Latin default
sub one by one.num; languagesystem latn CAT ; # Latin Catalan
sub two by two.num; ##########
sub three by three.num; # Prefix #
sub four by four.num; ##########
sub five by five.num; @HexDigit = [a b c d e f A B C D E F];
sub six by six.num; @Digit = [zero one two three four five six seven eight nine];
sub seven by seven.num; @DigitAll = [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den];
sub eight by eight.num; @DigitSmall = [zero.small one.small two.small three.small four.small five.small six.small seven.small eight.small nine.small];
sub nine by nine.num; @DigitNumerator = [zero.num one.num two.num three four.num five.num six.num seven.num eight.num nine.num];
sub slash by fraction; @DigitDenominator = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den];
sub fraction by fraction.afrc; @DigitSuperior = [zero.sup one.sup two.sup three.sup four.sup five.sup six.sup seven.sup eight.sup nine.sup];
} lookup_0; @DigitInferior = [zero.inf one.inf two.inf three.inf four.inf five.inf six.inf seven.inf eight.inf nine.inf];
#######################
lookup lookup_1 { # Feature definitions #
sub zero by zero.den; #######################
sub one by one.den;
sub two by two.den;
sub three by three.den;
sub four by four.den;
sub five by five.den;
sub six by six.den;
sub seven by seven.den;
sub eight by eight.den;
sub nine by nine.den;
sub slash by fraction;
} lookup_1;
lookup lookup_2 {
sub L periodcentered by Ldot;
sub l periodcentered by ldot;
} lookup_2;
feature case {
sub guillemotleft by guillemotleft.cap;
sub guillemotright by guillemotright.cap;
sub guilsinglleft by guilsinglleft.cap;
sub guilsinglright by guilsinglright.cap;
sub parenleft by parenleft.cap;
sub parenright by parenright.cap;
sub bracketleft by bracketleft.cap;
sub bracketright by bracketright.cap;
sub braceleft by braceleft.cap;
sub braceright by braceright.cap;
} case;
feature dnom {
sub zero by zero.den;
sub one by one.den;
sub two by two.den;
sub three by three.den;
sub four by four.den;
sub five by five.den;
sub six by six.den;
sub seven by seven.den;
sub eight by eight.den;
sub nine by nine.den;
} dnom;
feature frac {
lookup frac0 {
sub [zero one two three four five six seven eight nine] slash' lookup lookup_0 [zero one two three four five six seven eight nine] ;
} frac0;
lookup frac1 {
ignore sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] fraction' ;
ignore sub fraction' [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] fraction' lookup lookup_0 [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
} frac1;
lookup frac2 {
sub [zero one two three four five six seven eight nine]' lookup lookup_0 fraction.afrc ;
sub fraction.afrc [zero one two three four five six seven eight nine]' lookup lookup_1 ;
} frac2;
lookup frac3 {
sub one.num fraction.afrc two.den by onehalf;
sub one.num fraction.afrc three.den by onethird;
sub one.num fraction.afrc four.den by onequarter;
sub one.num fraction.afrc five.den by onefifth;
sub one.num fraction.afrc six.den by onesixth;
sub one.num fraction.afrc eight.den by oneeighth;
sub two.num fraction.afrc three.den by twothirds;
sub two.num fraction.afrc five.den by twofifths;
sub three.num fraction.afrc four.den by threequarters;
sub three.num fraction.afrc five.den by threefifths;
sub three.num fraction.afrc eight.den by threeeighths;
sub four.num fraction.afrc five.den by fourfifths;
sub five.num fraction.afrc six.den by fivesixths;
sub five.num fraction.afrc eight.den by fiveeighths;
sub seven.num fraction.afrc eight.den by seveneighths;
} frac3;
} frac;
feature locl { feature locl {
script latn; # GSUB feature: Localized Forms
language CAT ; script latn; # Latin
sub l' lookup lookup_2 periodcentered' lookup lookup_2 l ; language CAT; # Catalan
sub L' lookup lookup_2 periodcentered' lookup lookup_2 L ; sub l' periodcentered' by ldot;
sub L' periodcentered' by Ldot;
} locl; } locl;
feature aalt useExtension {
# GSUB feature: Access All Alternates
feature case;
feature dnom;
feature numr;
feature salt;
feature sinf;
feature ss01;
feature ss03;
feature ss04;
feature ss05;
feature ss07;
feature ss08;
feature ss09;
feature ss10;
feature subs;
feature sups;
feature smcp;
feature c2sc;
} aalt;
feature frac {
# GSUB feature: Fractions
lookup frac0 {
sub @Digit slash' @Digit by fraction;
} frac0;
lookup frac1 {
ignore sub @DigitAll @DigitAll fraction';
ignore sub fraction' @DigitAll @DigitAll;
sub @DigitAll fraction' @DigitAll by fraction.afrc;
} frac1;
lookup frac2 {
sub @Digit' fraction.afrc by @DigitNumerator;
sub fraction.afrc @Digit' by @DigitDenominator;
} frac2;
lookup frac3 {
sub one.num fraction.afrc two.den by onehalf;
sub one.num fraction.afrc three.den by onethird;
sub one.num fraction.afrc four.den by onequarter;
sub one.num fraction.afrc five.den by onefifth;
sub one.num fraction.afrc six.den by onesixth;
sub one.num fraction.afrc eight.den by oneeighth;
sub two.num fraction.afrc three.den by twothirds;
sub two.num fraction.afrc five.den by twofifths;
sub three.num fraction.afrc four.den by threequarters;
sub three.num fraction.afrc five.den by threefifths;
sub three.num fraction.afrc eight.den by threeeighths;
sub four.num fraction.afrc five.den by fourfifths;
sub five.num fraction.afrc six.den by fivesixths;
sub five.num fraction.afrc eight.den by fiveeighths;
sub seven.num fraction.afrc eight.den by seveneighths;
} frac3;
} frac;
feature numr { feature numr {
sub zero by zero.num; # GSUB feature: Numerators
sub one by one.num; sub @Digit by @DigitNumerator;
sub two by two.num;
sub three by three.num;
sub four by four.num;
sub five by five.num;
sub six by six.num;
sub seven by seven.num;
sub eight by eight.num;
sub nine by nine.num;
} numr; } numr;
feature rupa { feature dnom {
sub R p by R_p; # GSUB feature: Denominators
} rupa; sub @Digit by @DigitDenominator;
} dnom;
feature ss01 { feature sups {
sub registered by registered.alt; # GSUB feature: Superscript
} ss01; sub @Digit by @DigitSuperior;
} sups;
feature salt { feature subs {
lookup salt0 { # GSUB feature: Subscript
sub registered by registered.alt; sub @Digit by @DigitInferior;
} salt0; } subs;
lookup salt1 {
sub colon by colon.alt;
} salt1;
lookup salt2 {
sub bullet by bullet.alt;
} salt2;
lookup salt3 {
sub asterisk by asterisk.alt;
} salt3;
lookup salt4 {
sub zero by zero.alt;
} salt4;
lookup salt5 {
sub underscore by underscore.alt;
} salt5;
lookup salt6 {
sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] slash' lookup lookup_1 [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ;
} salt6;
} salt;
feature sinf { feature sinf {
sub zero by zero.inf; # GSUB feature: Scientific Inferiors
sub one by one.inf; sub @Digit by @DigitInferior;
sub two by two.inf;
sub three by three.inf;
sub four by four.inf;
sub five by five.inf;
sub six by six.inf;
sub seven by seven.inf;
sub eight by eight.inf;
sub nine by nine.inf;
} sinf; } sinf;
feature ordn {
# Ordinals
sub @Digit [A a]' by ordfeminine;
sub @Digit [O o]' by ordmasculine;
sub N o period by numero;
} ordn;
feature smcp {
# Small Caps
sub @Digit by @DigitSmall;
} smcp;
feature c2sc {
# Capitals to Small Caps
sub @Digit by @DigitSmall;
} c2sc;
feature case {
# GSUB feature: Case-Sensitive Forms
sub guillemotleft by guillemotleft.cap;
sub guillemotright by guillemotright.cap;
sub guilsinglleft by guilsinglleft.cap;
sub guilsinglright by guilsinglright.cap;
sub parenleft by parenleft.cap;
sub parenright by parenright.cap;
sub bracketleft by bracketleft.cap;
sub bracketright by bracketright.cap;
sub braceleft by braceleft.cap;
sub braceright by braceright.cap;
} case;
include(calt.fea);
feature salt {
# GSUB feature: Stylistic Alternates
sub registered by registered.alt;
sub colon by colon.alt;
sub bullet by bullet.alt;
sub asterisk by asterisk.alt;
sub zero by zero.alt;
sub underscore by underscore.alt;
lookup salt {
# GSUB lookup 20, type 16 (Chaining Context)
sub @DigitAll slash' @DigitAll by fraction;
} salt;
} salt;
feature ss01 {
featureNames {
name "Large Registered Symbol";
};
sub registered by registered.alt;
} ss01;
feature ss03 { feature ss03 {
sub colon by colon.alt; featureNames {
name "Raised Colon";
};
sub colon by colon.alt;
} ss03; } ss03;
feature ss04 { feature ss04 {
sub bullet by bullet.alt; featureNames {
name "Square Bullet";
};
sub bullet by bullet.alt;
} ss04; } ss04;
feature ss05 { feature ss05 {
sub asterisk by asterisk.alt; featureNames {
name "Six-Pointed Asterisk";
};
sub asterisk by asterisk.alt;
} ss05; } ss05;
feature ss07 { feature ss07 {
sub zero by zero.alt; featureNames {
name "Unslashed Zero";
};
sub zero by zero.alt;
} ss07; } ss07;
feature ss08 { feature ss08 {
sub underscore by underscore.alt; featureNames {
name "Connected Underscore";
};
sub underscore by underscore.alt;
} ss08; } ss08;
feature ss09 { feature ss09 {
sub [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] slash' lookup lookup_1 [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den] ; featureNames {
name "Fraction Bar";
};
sub @DigitAll slash' @DigitAll by fraction;
} ss09; } ss09;
feature subs { feature ss10 {
sub zero by zero.inf; featureNames {
sub one by one.inf; name "Hexidecimal Multiply Sign";
sub two by two.inf; };
sub three by three.inf; ### 0xFF
sub four by four.inf; sub [zero zero.alt] x' [@Digit @HexDigit] by multiply;
sub five by five.inf; ### 800x600
sub six by six.inf; sub [@Digit zero.alt] x' [@Digit zero.alt] by multiply;
sub seven by seven.inf; } ss10;
sub eight by eight.inf;
sub nine by nine.inf; feature rupa {
} subs; sub R p by R_p;
} rupa;
feature kern {
# GPOS feature: Kerning
lookup kern {
# GPOS lookup 1, type 2 (Pair adjustment)
pos fraction.afrc @DigitDenominator -550;
pos @DigitNumerator fraction.afrc -550;
} kern;
} kern;
feature subs {
sub zero by zero.sup;
sub one by one.sup;
sub two by two.sup;
sub three by three.sup;
sub four by four.sup;
sub five by five.sup;
sub six by six.sup;
sub seven by seven.sup;
sub eight by eight.sup;
sub nine by nine.sup;
} subs;
include(calt.fea);
+252
View File
@@ -0,0 +1,252 @@
##############################
# Languagesystem definitions #
##############################
languagesystem DFLT dflt; # Default default
languagesystem latn dflt; # Latin default
languagesystem latn CAT ; # Latin Catalan
##########
# Prefix #
##########
@HexDigit = [a b c d e f A B C D E F];
@Digit = [zero one two three four five six seven eight nine];
@DigitAll = [zero one two three four five six seven eight nine zero.num one.num two.num three.num four.num five.num six.num seven.num eight.num nine.num zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den];
@DigitSmall = [zero.small one.small two.small three.small four.small five.small six.small seven.small eight.small nine.small];
@DigitNumerator = [zero.num one.num two.num three four.num five.num six.num seven.num eight.num nine.num];
@DigitDenominator = [zero.den one.den two.den three.den four.den five.den six.den seven.den eight.den nine.den];
@DigitSuperior = [zero.sup one.sup two.sup three.sup four.sup five.sup six.sup seven.sup eight.sup nine.sup];
@DigitInferior = [zero.inf one.inf two.inf three.inf four.inf five.inf six.inf seven.inf eight.inf nine.inf];
#######################
# Feature definitions #
#######################
feature locl {
# GSUB feature: Localized Forms
script latn; # Latin
language CAT; # Catalan
sub l' periodcentered' by ldot;
sub L' periodcentered' by Ldot;
} locl;
feature aalt useExtension {
# GSUB feature: Access All Alternates
feature case;
feature dnom;
feature numr;
feature salt;
feature sinf;
feature ss01;
feature ss03;
feature ss04;
feature ss05;
feature ss07;
feature ss08;
feature ss09;
feature ss10;
feature ss11;
feature ss12;
feature subs;
feature sups;
feature smcp;
feature c2sc;
} aalt;
feature frac {
# GSUB feature: Fractions
lookup frac0 {
sub @Digit slash' @Digit by fraction;
} frac0;
lookup frac1 {
ignore sub @DigitAll @DigitAll fraction';
ignore sub fraction' @DigitAll @DigitAll;
sub @DigitAll fraction' @DigitAll by fraction.afrc;
} frac1;
lookup frac2 {
sub @Digit' fraction.afrc by @DigitNumerator;
sub fraction.afrc @Digit' by @DigitDenominator;
} frac2;
lookup frac3 {
sub one.num fraction.afrc two.den by onehalf;
sub one.num fraction.afrc three.den by onethird;
sub one.num fraction.afrc four.den by onequarter;
sub one.num fraction.afrc five.den by onefifth;
sub one.num fraction.afrc six.den by onesixth;
sub one.num fraction.afrc eight.den by oneeighth;
sub two.num fraction.afrc three.den by twothirds;
sub two.num fraction.afrc five.den by twofifths;
sub three.num fraction.afrc four.den by threequarters;
sub three.num fraction.afrc five.den by threefifths;
sub three.num fraction.afrc eight.den by threeeighths;
sub four.num fraction.afrc five.den by fourfifths;
sub five.num fraction.afrc six.den by fivesixths;
sub five.num fraction.afrc eight.den by fiveeighths;
sub seven.num fraction.afrc eight.den by seveneighths;
} frac3;
} frac;
feature numr {
# GSUB feature: Numerators
sub @Digit by @DigitNumerator;
} numr;
feature dnom {
# GSUB feature: Denominators
sub @Digit by @DigitDenominator;
} dnom;
feature sups {
# GSUB feature: Superscript
sub @Digit by @DigitSuperior;
} sups;
feature subs {
# GSUB feature: Subscript
sub @Digit by @DigitInferior;
} subs;
feature sinf {
# GSUB feature: Scientific Inferiors
sub @Digit by @DigitInferior;
} sinf;
feature ordn {
# Ordinals
sub @Digit [A a]' by ordfeminine;
sub @Digit [O o]' by ordmasculine;
sub N o period by numero;
} ordn;
feature smcp {
# Small Caps
sub @Digit by @DigitSmall;
} smcp;
feature c2sc {
# Capitals to Small Caps
sub @Digit by @DigitSmall;
} c2sc;
feature case {
# GSUB feature: Case-Sensitive Forms
sub guillemotleft by guillemotleft.cap;
sub guillemotright by guillemotright.cap;
sub guilsinglleft by guilsinglleft.cap;
sub guilsinglright by guilsinglright.cap;
sub parenleft by parenleft.cap;
sub parenright by parenright.cap;
sub bracketleft by bracketleft.cap;
sub bracketright by bracketright.cap;
sub braceleft by braceleft.cap;
sub braceright by braceright.cap;
} case;
include(calt.fea);
feature salt {
# GSUB feature: Stylistic Alternates
sub registered by registered.alt;
sub colon by colon.alt;
sub bullet by bullet.alt;
sub asterisk by asterisk.alt;
sub zero by zero.alt;
sub underscore by underscore.alt;
lookup salt {
# GSUB lookup 20, type 16 (Chaining Context)
sub @DigitAll slash' @DigitAll by fraction;
} salt;
} salt;
feature ss01 {
featureNames {
name "Large Registered Symbol";
};
sub registered by registered.alt;
} ss01;
feature ss03 {
featureNames {
name "Raised Colon";
};
sub colon by colon.alt;
} ss03;
feature ss04 {
featureNames {
name "Square Bullet";
};
sub bullet by bullet.alt;
} ss04;
feature ss05 {
featureNames {
name "Six-Pointed Asterisk";
};
sub asterisk by asterisk.alt;
} ss05;
feature ss07 {
featureNames {
name "Unslashed Zero";
};
sub zero by zero.alt;
} ss07;
feature ss08 {
featureNames {
name "Connected Underscore";
};
sub underscore by underscore.alt;
} ss08;
feature ss09 {
featureNames {
name "Fraction Bar";
};
sub @DigitAll slash' @DigitAll by fraction;
} ss09;
feature ss10 {
featureNames {
name "Hexidecimal Multiply Sign";
};
### 0xFF
sub [zero zero.alt] x' [@Digit @HexDigit] by multiply;
### 800x600
sub [@Digit zero.alt] x' [@Digit zero.alt] by multiply;
} ss10;
feature ss11 {
featureNames {
name "Equality Spaces";
};
sub equal_equal.liga by equal_equal.liga.ss11;
sub equal_equal_equal.liga by equal_equal_equal.liga.ss11;
} ss11;
feature ss12 {
featureNames {
name "Less-than/Greater-than Horizontal Bar";
};
sub less_equal.liga by less_equal.liga.ss12;
sub greater_equal.liga by greater_equal.liga.ss12;
} ss12;
feature rupa {
sub R p by R_p;
} rupa;
feature kern {
# GPOS feature: Kerning
lookup kern {
# GPOS lookup 1, type 2 (Pair adjustment)
pos fraction.afrc @DigitDenominator -625;
pos @DigitNumerator fraction.afrc -625;
} kern;
} kern;
+85
View File
@@ -0,0 +1,85 @@
const fs = require('fs')
const { createCanvas } = require('canvas')
const width = 64
const height = 48
const weight = 300
const map = {
ampersand: '&',
bar: '|',
colon: ':',
equal: '=',
exclam: '!',
greater: '>',
hyphen: '-',
less: '<',
plus: '+',
question: '?',
slash: '/',
underscore: '_',
w: 'w',
}
function generateLigaturePreview(style, filename) {
const ligature = filename.split('.').slice(0, 1)[0]
const chars = ligature.split('_')
const text = chars.reduce((t, c) => t + map[c], '')
const canvas = createCanvas(width, height)
const context = canvas.getContext('2d')
context.fillStyle = '#000'
context.fillRect(0, 0, width, height)
context.font = `${weight} ${style} 18pt "Operator Mono SSm Lig"`
context.textAlign = 'center'
context.fillStyle = '#fff'
context.text = text
context.fillText(text, 32, 32)
const buffer = canvas.toBuffer('image/png')
console.log(ligature)
fs.writeFileSync(`./images/preview/${style}/${ligature}.png`, buffer)
return { text, ligature, filename: `${ligature}.png` }
}
function generate(style, filenames) {
let html = `<html><head>
<style>
body { background-color: #000; color: #fff; font-family: sans-serif; margin: 16px;}
a { color: #fff; text-decoration: none; padding: 4px;}
a.active {color: #000; background-color: #fff;}
.container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.ligature { display: flex; flex-direction: column; align-items: center; margin: 8px; }
</style>
</head>
<body>
<h1>Operator Mono Ligatures</h1>
<a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/normal/index.html" class="${
style === 'normal' ? 'active' : ''
}">Normal</a> |
<a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/italic/index.html" class="${
style === 'italic' ? 'active' : ''
}">Italic</a>
<div class="container">
`
filenames.forEach(f => {
const { ligature, filename } = generateLigaturePreview(style, f)
html += `<div class="ligature"><img src="${filename}"/><div>${ligature}</div></div>`
})
html += `</div></body></html>`
fs.writeFileSync(`./images/preview/${style}/index.html`, html)
}
const filenames = fs
.readdirSync('./ligature/OperatorMonoSSmLig-Book/glyphs')
.filter(f => !!f.match(/[^\d]\.liga\.xml$/))
generate('normal', filenames)
generate('italic', filenames)
Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 849 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

+15
View File
@@ -0,0 +1,15 @@
<html><head>
<style>
body { background-color: #000; color: #fff; font-family: sans-serif; margin: 16px;}
a { color: #fff; text-decoration: none; padding: 4px;}
a.active {color: #000; background-color: #fff;}
.container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.ligature { display: flex; flex-direction: column; align-items: center; margin: 8px; }
</style>
</head>
<body>
<h1>Operator Mono Ligatures</h1>
<a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/normal/index.html" class="">Normal</a> |
<a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/italic/index.html" class="active">Italic</a>
<div class="container">
<div class="ligature"><img src="ampersand_ampersand.png"/><div>ampersand_ampersand</div></div><div class="ligature"><img src="asterisk_equal.png"/><div>asterisk_equal</div></div><div class="ligature"><img src="bar_bar.png"/><div>bar_bar</div></div><div class="ligature"><img src="bar_greater.png"/><div>bar_greater</div></div><div class="ligature"><img src="colon_colon.png"/><div>colon_colon</div></div><div class="ligature"><img src="colon_equal.png"/><div>colon_equal</div></div><div class="ligature"><img src="equal_equal.png"/><div>equal_equal</div></div><div class="ligature"><img src="equal_equal_equal.png"/><div>equal_equal_equal</div></div><div class="ligature"><img src="equal_equal_greater.png"/><div>equal_equal_greater</div></div><div class="ligature"><img src="equal_greater.png"/><div>equal_greater</div></div><div class="ligature"><img src="equal_less_less.png"/><div>equal_less_less</div></div><div class="ligature"><img src="exclam_equal.png"/><div>exclam_equal</div></div><div class="ligature"><img src="exclam_equal_equal.png"/><div>exclam_equal_equal</div></div><div class="ligature"><img src="exclam_exclam.png"/><div>exclam_exclam</div></div><div class="ligature"><img src="greater_equal.png"/><div>greater_equal</div></div><div class="ligature"><img src="greater_equal_greater.png"/><div>greater_equal_greater</div></div><div class="ligature"><img src="greater_greater.png"/><div>greater_greater</div></div><div class="ligature"><img src="greater_greater_equal.png"/><div>greater_greater_equal</div></div><div class="ligature"><img src="hyphen_equal.png"/><div>hyphen_equal</div></div><div class="ligature"><img src="hyphen_greater.png"/><div>hyphen_greater</div></div><div class="ligature"><img src="hyphen_hyphen.png"/><div>hyphen_hyphen</div></div><div class="ligature"><img src="hyphen_hyphen_greater.png"/><div>hyphen_hyphen_greater</div></div><div class="ligature"><img src="less_bar.png"/><div>less_bar</div></div><div class="ligature"><img src="less_equal.png"/><div>less_equal</div></div><div class="ligature"><img src="less_equal_equal.png"/><div>less_equal_equal</div></div><div class="ligature"><img src="less_equal_greater.png"/><div>less_equal_greater</div></div><div class="ligature"><img src="less_equal_less.png"/><div>less_equal_less</div></div><div class="ligature"><img src="less_exclam_hyphen_hyphen.png"/><div>less_exclam_hyphen_hyphen</div></div><div class="ligature"><img src="less_hyphen.png"/><div>less_hyphen</div></div><div class="ligature"><img src="less_hyphen_greater.png"/><div>less_hyphen_greater</div></div><div class="ligature"><img src="less_hyphen_hyphen.png"/><div>less_hyphen_hyphen</div></div><div class="ligature"><img src="less_less.png"/><div>less_less</div></div><div class="ligature"><img src="less_less_equal.png"/><div>less_less_equal</div></div><div class="ligature"><img src="less_slash.png"/><div>less_slash</div></div><div class="ligature"><img src="less_slash_greater.png"/><div>less_slash_greater</div></div><div class="ligature"><img src="plus_equal.png"/><div>plus_equal</div></div><div class="ligature"><img src="plus_plus.png"/><div>plus_plus</div></div><div class="ligature"><img src="question_question.png"/><div>question_question</div></div><div class="ligature"><img src="quotedbl_quotedbl_quotedbl.png"/><div>quotedbl_quotedbl_quotedbl</div></div><div class="ligature"><img src="quotesingle_quotesingle_quotesingle.png"/><div>quotesingle_quotesingle_quotesingle</div></div><div class="ligature"><img src="semicolon_semicolon.png"/><div>semicolon_semicolon</div></div><div class="ligature"><img src="slash_equal.png"/><div>slash_equal</div></div><div class="ligature"><img src="slash_greater.png"/><div>slash_greater</div></div><div class="ligature"><img src="underscore_underscore.png"/><div>underscore_underscore</div></div><div class="ligature"><img src="w_w_w.png"/><div>w_w_w</div></div></div></body></html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 998 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 B

+15
View File
@@ -0,0 +1,15 @@
<html><head>
<style>
body { background-color: #000; color: #fff; font-family: sans-serif; margin: 16px;}
a { color: #fff; text-decoration: none; padding: 4px;}
a.active {color: #000; background-color: #fff;}
.container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.ligature { display: flex; flex-direction: column; align-items: center; margin: 8px; }
</style>
</head>
<body>
<h1>Operator Mono Ligatures</h1>
<a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/normal/index.html" class="active">Normal</a> |
<a href="https://htmlpreview.github.io/?https://github.com/kiliman/operator-mono-lig/blob/master/images/preview/italic/index.html" class="">Italic</a>
<div class="container">
<div class="ligature"><img src="ampersand_ampersand.png"/><div>ampersand_ampersand</div></div><div class="ligature"><img src="asterisk_equal.png"/><div>asterisk_equal</div></div><div class="ligature"><img src="bar_bar.png"/><div>bar_bar</div></div><div class="ligature"><img src="bar_greater.png"/><div>bar_greater</div></div><div class="ligature"><img src="colon_colon.png"/><div>colon_colon</div></div><div class="ligature"><img src="colon_equal.png"/><div>colon_equal</div></div><div class="ligature"><img src="equal_equal.png"/><div>equal_equal</div></div><div class="ligature"><img src="equal_equal_equal.png"/><div>equal_equal_equal</div></div><div class="ligature"><img src="equal_equal_greater.png"/><div>equal_equal_greater</div></div><div class="ligature"><img src="equal_greater.png"/><div>equal_greater</div></div><div class="ligature"><img src="equal_less_less.png"/><div>equal_less_less</div></div><div class="ligature"><img src="exclam_equal.png"/><div>exclam_equal</div></div><div class="ligature"><img src="exclam_equal_equal.png"/><div>exclam_equal_equal</div></div><div class="ligature"><img src="exclam_exclam.png"/><div>exclam_exclam</div></div><div class="ligature"><img src="greater_equal.png"/><div>greater_equal</div></div><div class="ligature"><img src="greater_equal_greater.png"/><div>greater_equal_greater</div></div><div class="ligature"><img src="greater_greater.png"/><div>greater_greater</div></div><div class="ligature"><img src="greater_greater_equal.png"/><div>greater_greater_equal</div></div><div class="ligature"><img src="hyphen_equal.png"/><div>hyphen_equal</div></div><div class="ligature"><img src="hyphen_greater.png"/><div>hyphen_greater</div></div><div class="ligature"><img src="hyphen_hyphen.png"/><div>hyphen_hyphen</div></div><div class="ligature"><img src="hyphen_hyphen_greater.png"/><div>hyphen_hyphen_greater</div></div><div class="ligature"><img src="less_bar.png"/><div>less_bar</div></div><div class="ligature"><img src="less_equal.png"/><div>less_equal</div></div><div class="ligature"><img src="less_equal_equal.png"/><div>less_equal_equal</div></div><div class="ligature"><img src="less_equal_greater.png"/><div>less_equal_greater</div></div><div class="ligature"><img src="less_equal_less.png"/><div>less_equal_less</div></div><div class="ligature"><img src="less_exclam_hyphen_hyphen.png"/><div>less_exclam_hyphen_hyphen</div></div><div class="ligature"><img src="less_hyphen.png"/><div>less_hyphen</div></div><div class="ligature"><img src="less_hyphen_greater.png"/><div>less_hyphen_greater</div></div><div class="ligature"><img src="less_hyphen_hyphen.png"/><div>less_hyphen_hyphen</div></div><div class="ligature"><img src="less_less.png"/><div>less_less</div></div><div class="ligature"><img src="less_less_equal.png"/><div>less_less_equal</div></div><div class="ligature"><img src="less_slash.png"/><div>less_slash</div></div><div class="ligature"><img src="less_slash_greater.png"/><div>less_slash_greater</div></div><div class="ligature"><img src="plus_equal.png"/><div>plus_equal</div></div><div class="ligature"><img src="plus_plus.png"/><div>plus_plus</div></div><div class="ligature"><img src="question_question.png"/><div>question_question</div></div><div class="ligature"><img src="quotedbl_quotedbl_quotedbl.png"/><div>quotedbl_quotedbl_quotedbl</div></div><div class="ligature"><img src="quotesingle_quotesingle_quotesingle.png"/><div>quotesingle_quotesingle_quotesingle</div></div><div class="ligature"><img src="semicolon_semicolon.png"/><div>semicolon_semicolon</div></div><div class="ligature"><img src="slash_equal.png"/><div>slash_equal</div></div><div class="ligature"><img src="slash_greater.png"/><div>slash_greater</div></div><div class="ligature"><img src="underscore_underscore.png"/><div>underscore_underscore</div></div><div class="ligature"><img src="w_w_w.png"/><div>w_w_w</div></div></div></body></html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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