toxicfrog / ligaturizer Goto Github PK
View Code? Open in Web Editor NEWProgramming Fonts with Ligatures added (& a script to add them to other fonts)
License: GNU General Public License v3.0
Programming Fonts with Ligatures added (& a script to add them to other fonts)
License: GNU General Public License v3.0
Hi,
I'm Windows user (shame on me), can I use your script so I can add ligatures to my fav. font?
I hate to be the one to ask, but which colorscheme does the screenshots in the README use?
M+ 1m and M+ 1mn fonts don't rename. When I opened the fonts in FontForge and looked at the Font info, the name have the 'Liga' prefix, but when I open the same font in font viewer it doesn't have the prefix, and while using inside VSCode it activates with the original name (overriding the original) instead of activating with the prefixed name.
I also added the following to the prefixed_fonts array (but the problem retained).
'fonts/codeface/fonts/mplus1m/*.ttf',
'fonts/codeface/fonts/mplus1mn/*.ttf',
There are new ligatures, could you update the built fonts.
Currently the script prompts for an input file.
It would be great if I could pass it a filename directly so the process can be scripted.
I'm using Fontforge 20120731.b-7.1, which is the version in the repos on Linux Mint 18.1 Serena.
Running make
or the command fontforge -lang=py ligaturize.py <INPUT> <OUTPUT>
launched the GUI with an error message saying "File -lang=py does not exist."
I had to fix the command like this: fontforge -lang=py -script ligaturize.py <INPUT> <OUTPUT>
(prefix ligaturize.py
with -script
).
It was pointed out in #25 that Source Code Pro is licensed under the SIL OFL with reserved name "Source", which means we can't call the modified version "Liga Source Code Pro". This is not a problem for people who are downloading Ligaturizer and generating their own fonts, but is a problem if we want to keep checking in the ligaturized fonts.
It is likely that we have other input fonts using SIL OFL that are violated by output-fonts.
Probably the best way to deal with this is to check the license for each included font, then write a proper release script that renames fonts as appropriate. This can be part of some build process improvements I've been wanting to do for a while.
Hi @ToxicFrog ,
I'm trying to extend a font in such a similar way to that which you have done here that I was hoping you might be willing to give me one or two pointers, ideally on modifications that could be made to your code to make it do what I want π.
What I want to do is add ligatures, not for coding but for LaTeX. There seem to be two main differences between what I want to do and what you've done.
Would you be willing to give me an idea of what I'd need to modify from your script to make this possible?
thanks,
tecosaur
Addendum: Regarding using the unicode string β character name I imagine unicodedata.name could be useful
Hi,
I have a problem with the script. The executable makefile script was hanging on this part:
Based on source from git with hash:
(full output of script below)
After this I tried a solution which was mentioned in another issue by trying this:
fontforge -lang=py -script ligaturize.py input-fonts/RobotoMonoThin.ttf output-fonts/LigaRobotoMonoThin.ttf
And it returned 50~100 lines with this message:
This contextual rule applies no lookups.
Saying at the end:
Generated ligaturized font Liga Roboto Mono Thin for Powerline in output-fonts/LigaRobotoMonoThin.ttf
But the file is not there and does not seem to be generated. Any ideas?
MacOS version: 10.12.6
Python version: 2.7.15
Fontforge: libfontforge 20180321 (installed with brew)
Executed in iTerm2: Build 3.1.6
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 8: wildcard: command not found
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 9: wildcard: command not found
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 11: patsubst: command not found
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 12: patsubst: command not found
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 14: all:: command not found
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 16: output-fonts/Liga%.ttf:: No such file or directory
/Users/frankgraave/Desktop/Ligaturizer-master/Makefile: line 17: LIGATURIZE_OPTS: command not found
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
with many parts BSD http://fontforge.org/license.html. Please read LICENSE.
Based on sources from 09:29 UTC 21-Mar-2018-D.
Based on source from git with hash:
HI
I added more ligatures to the script and if i want to create a Pull Request would u be interested ? And I dont see an option to create branches ? Is there a permission
I just went to install all the input and output fonts, and when installing the output fonts, I found that I already had "SF Mono Regular" and "SF Mono Semibold" - it looks like these two are the only output fonts which have exactly the same name as their input fonts. Most of the fonts have "Liga " prepended.
However, a couple of the other fonts are named a little inconsistently, because they don't have a space after "Liga", ie
Also the Meslo LG fonts have different spacing in Liga form, eg "Meslo LG S DZ Regular" became "Liga MesloLGSD Z Regular".
Looks like the issue is that FiraBold is not included in the repo as a submodule? Do I just need to clone it in?
ββ ο ξΌ οΌ ~/Ligaturizer ξΌ ξΊ ο ξΊ ο¦ master ο« v4 οͺ ο ο
βββ€ make
fontforge -lang=py -script build.py 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.' \
| fgrep -v 'Bad device table'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 11:21 UTC 24-Sep-2017-ML-D.
Based on source from git with hash:
The glyph named Tcommaaccent is mapped to U+021A.
But its name indicates it should be mapped to U+0162.
The glyph named Delta is mapped to U+0394.
But its name indicates it should be mapped to U+2206.
The glyph named Omega is mapped to U+03A9.
But its name indicates it should be mapped to U+2126.
The glyph named tcommaaccent is mapped to U+021B.
But its name indicates it should be mapped to U+0163.
The glyph named mu is mapped to U+03BC.
But its name indicates it should be mapped to U+00B5.
The requested file, FiraCode-Bold.otf, does not exist
Ligaturizing font Input-BoldItalic_(InputSans-BoldItalic).ttf (Input) as 'liga-input-sans'
...using ligatures from fonts/fira/distr/otf/FiraCode-Bold.otf
Traceback (most recent call last):
File "build.py", line 83, in <module>
scale_character_glyphs_threshold=SCALE_CHARACTER_GLYPHS_THRESHOLD)
File "/home/david/Ligaturizer/ligaturize.py", line 276, in ligaturize_font
firacode = fontforge.open(ligature_font_file)
EnvironmentError: Open failed
It would be nice to have a handy download for a ligaturized version of https://github.com/belluzj/fantasque-sans!
Hi
This is a great utility and really loved it ? But while creating the bold and italic fonts they are being created as totally different fonts . Hence the IDE's wont detect them as a single font. But when i tried installing SFMono and SFMono semi bold in the out put fonts that u have , they seem to be installing as a same font.
Is there any trick that i have to do to generate all the different variants on the font into same font
fontforge -lang=py ligaturize.py input-fonts/Hack-Regular.ttf output-fonts/Hack-Regular.ttf
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
with many parts BSD http://fontforge.org/license.html. Please read LICENSE.
Based on sources from 11:11 UTC 25-Sep-2017-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Ignoring 'TTFA'
Reading ligatures from fira/FiraCode-Regular.otf
Warning: Mac and Windows entries in the 'name' table differ for the
Fullname string in the language English (US)
Mac String: Fira Code
Windows String: FiraCode-Regular
Traceback (most recent call last):
File "ligaturize.py", line 289, in
creator = LigatureCreator(font, firacode, args)
File "ligaturize.py", line 78, in init
self.emwidth = self.font['m'].width
TypeError: No such glyph
Which font is used in the banner?
Could not find entries in ligatures.py for these two.
It would be nice to have a handy download for a ligaturized version Source Code Pro https://github.com/adobe-fonts/source-code-pro.
Hasklig is too much Haskell centric.
For example lets take Source Code pro font when trying to path the ligatures if the input type is
Source Code Pro- Regular.otf or ttf and after running the script the output ends up being type
"Book" ..I am not sure if its intended or a bug , but because of that some IDE's like Intelli J has issues picking up that font (especially Source Code pro)
Self-explanatory, and this also makes it easy to (e.g.) release multiple packages with and without copied characters, for example.
Would like to hand the repo over, as it's not currently very high on my priority list.
@ToxicFrog, any interest?
I have some contributions I want to make (bold support, greatly expanded list of ligatures), but not having an explicit license on the repo means a lot more hoop-jumping on this end -- any chance you could add one?
I tried using the command given with changes for my font
fontforge -lang py -script ligaturize.py fonts/Metropolis-Regular.ttf
--output-dir='fonts/output/' \
--output-name='Ligaturized Metropolis'
but i get an error
$ fontforge -lang py -script ligaturize.py fonts/Metropolis-Regular.ttf
--output-name='Ligaturized Metropolis'
Copyright (c) 2000-2018 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 09:58 UTC 13-Apr-2019-ML-TtfDb-D.
Based on source from git with hash: fa92842d5992818d12a04337cb685ee7d59cb2a9
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no looLigaturizing font Metropolis-Regular.ttf (Metropolis) as 'Liga Metropolis'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
kups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
Traceback (most recent call last):
File "ligaturize.py", line 345, in <module>
main()
File "ligaturize.py", line 342, in main
ligaturize_font(**vars(parse_args()))
File "ligaturize.py", line 299, in ligaturize_font
output_font_file = path.join(output_dir, font.fontname + output_font_type)
File "C:/Program Files (x86)/FontForgeBuilds/lib/python2.7/ntpath.py", line 78, in join
result_drive, result_path = splitdrive(path)
File "C:/Program Files (x86)/FontForgeBuilds/lib/python2.7/ntpath.py", line 128, in splitdrive
if len(p) > 1:
TypeError: object of type 'NoneType' has no len()
I don't program with python so I'm not sure what the issue is
I tried to use your tool to add ligatures to these font's
$ Ligaturizer ll input-fonts (master) β±
total 7,6M
-rwxr-xr-x 1 daniel daniel 155K Jul 8 12:30 Anonymous_Pro.ttf
-rw-r--r-- 1 daniel daniel 92K Jul 8 12:30 CamingoCode-Regular.ttf
-rw-r--r-- 1 daniel daniel 290K Jul 8 12:30 Cousine-Bold.ttf
-rwxr-xr-x 1 daniel daniel 302K Jul 8 12:30 Cousine-Regular.ttf
-rw-r--r-- 1 daniel daniel 333K Jul 8 12:30 DejaVuSansMono.ttf
-rwxr-xr-x 1 daniel daniel 115K Jul 8 12:30 DroidSansMono.ttf
-rw-r--r-- 1 daniel daniel 27K Jul 8 12:30 edlo.ttf
drwxr-xr-x 2 daniel daniel 4,0K Jul 8 12:30 FantasqueSansMono-NoLoopK
drwxr-xr-x 2 daniel daniel 4,0K Jul 8 12:30 FantasqueSansMono-Normal
-rw-r--r-- 1 daniel daniel 311K Jul 8 12:30 Hack-Bold.ttf
-rw-r--r-- 1 daniel daniel 303K Jul 8 12:30 Hack-Regular.ttf
-rw-r--r-- 1 daniel daniel 50K Jul 8 12:30 IBMPlexMono-Regular.otf
-rw-r--r-- 1 daniel daniel 51K Jul 8 12:30 IBMPlexMono-SemiBold.otf
-rw-r--r-- 1 daniel daniel 53K Jul 8 12:30 Inconsolata-g.otf
-rwxr-xr-x 1 daniel daniel 58K Jul 8 12:30 Inconsolata.otf
-rwxr-xr-x 1 daniel daniel 95K Jul 8 12:30 Inconsolata-Regular.ttf
-rwxr-xr-x 1 daniel daniel 622K Jul 8 12:30 MesloLGLDZ-Regular.ttf
-rwxr-xr-x 1 daniel daniel 622K Jul 8 12:30 MesloLGL-Regular.ttf
-rwxr-xr-x 1 daniel daniel 622K Jul 8 12:30 MesloLGMDZ-Regular.ttf
-rwxr-xr-x 1 daniel daniel 622K Jul 8 12:30 MesloLGM-Regular.ttf
-rwxr-xr-x 1 daniel daniel 622K Jul 8 12:30 MesloLGSDZ-Regular.ttf
-rwxr-xr-x 1 daniel daniel 622K Jul 8 12:30 MesloLGS-Regular.ttf
-rwxr-xr-x 1 daniel daniel 68K Jul 8 12:30 OxygenMono-Regular.ttf
-rwxr-xr-x 1 daniel daniel 112K Jul 8 12:30 RobotoMono-Regular.ttf
-rw-r--r-- 1 daniel daniel 92K Jul 8 12:30 SFMono-Regular.otf
-rw-r--r-- 1 daniel daniel 92K Jul 8 12:30 SFMono-Semibold.otf
-rw-r--r-- 1 daniel daniel 118K Jul 8 12:30 SourceCodePro-Black.ttf
-rw-r--r-- 1 daniel daniel 118K Jul 8 12:30 SourceCodePro-Bold.ttf
-rw-r--r-- 1 daniel daniel 119K Jul 8 12:30 SourceCodePro-ExtraLight.ttf
-rw-r--r-- 1 daniel daniel 119K Jul 8 12:30 SourceCodePro-Light.ttf
-rw-r--r-- 1 daniel daniel 118K Jul 8 12:30 SourceCodePro-Medium.ttf
-rw-r--r-- 1 daniel daniel 118K Jul 8 12:30 SourceCodePro-Regular.ttf
-rw-r--r-- 1 daniel daniel 118K Jul 8 12:30 SourceCodePro-Semibold.ttf
-rw-r--r-- 1 daniel daniel 279K Jul 8 12:30 SourceCodeVariable-Roman.ttf
-rwxr-xr-x 1 daniel daniel 201K Jul 8 12:30 UbuntuMono-Regular.ttf
But I do get this output(I tired with python 2.x and 3.x):
make (master) β±
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-Black.ttf" "output-fonts/LigaSourceCodePro-Black.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE. Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Reading ligatures from fira/FiraCode-Regular.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-Light.ttf" "output-fonts/LigaSourceCodePro-Light.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE. Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Warning: Mac string is a subset of the Windows string in the 'name' table
for the Family string in the English (US) language.
Warning: Mac and Windows entries in the 'name' table differ for the
Styles (SubFamily) string in the language English (US)
Mac String: Light
Windows String: Regular
Reading ligatures from fira/FiraCode-Light.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-ExtraLight.ttf" "output-fonts/LigaSourceCodePro-ExtraLight.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE. Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Reading ligatures from fira/FiraCode-Regular.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-Bold.ttf" "output-fonts/LigaSourceCodePro-Bold.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Reading ligatures from fira/FiraCode-Bold.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-Regular.ttf" "output-fonts/LigaSourceCodePro-Regular.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Reading ligatures from fira/FiraCode-Regular.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-Medium.ttf" "output-fonts/LigaSourceCodePro-Medium.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Warning: Mac string is a subset of the Windows string in the 'name' table
for the Family string in the English (US) language.
Warning: Mac and Windows entries in the 'name' table differ for the
Styles (SubFamily) string in the language English (US)
Mac String: Medium
Windows String: Regular
Reading ligatures from fira/FiraCode-Medium.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
fontforge -lang=py ligaturize.py --prefix=Liga "input-fonts/SourceCodePro-Semibold.ttf" "output-fonts/LigaSourceCodePro-Semibold.ttf" 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Warning: Mac string is a subset of the Windows string in the 'name' table
for the License string in the English (US) language.
Reading ligatures from fira/FiraCode-Regular.otf
Exception while adding ligature: {'chars': ['ampersand', 'ampersand'], 'firacode_ligature_name': 'ampersand_ampersand.liga'}
Traceback (most recent call last):
File "ligaturize.py", line 275, in <module>
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
File "ligaturize.py", line 170, in add_ligature
self.font[char].addPosSub(lookup_sub_name(i), cr_name(i))
TypeError: expected bytes, str found
With commit 8533408 patching Meslo no longer works (the ligatures are missing):
I use this script to patch the font and install it on macOS.
It looks like the script isn't Python 3-compatible:
$ fontforge -script /build/sources/ligaturize.py
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 23:10 UTC 5-Aug-2017-ML-D.
Based on source from git with hash:
File "/build/sources/ligaturize.py", line 316
print "Generated ligaturized font %s in %s" % (output_font['fullname'], output_full_path)
^
SyntaxError: invalid syntax
It doesn't look like there are many changes needed, though:
$ 2to3 /build/sources/ligaturize.py
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored /build/sources/ligaturize.py
--- /build/sources/ligaturize.py (original)
+++ /build/sources/ligaturize.py (refactored)
@@ -9,7 +9,7 @@
COPYRIGHT = '\nProgramming ligatures added by Ilya Skriblovsky from FiraCode\nFiraCode Copyright (c) 2015 by Nikita Prokopov'
def get_input_fontname():
- return raw_input('Enter the source font filename (including extension): ')
+ return input('Enter the source font filename (including extension): ')
def get_input_path(input_fontname):
return SOURCE_FONT_DIR + "/" + input_fontname
@@ -28,7 +28,7 @@
return no_variant[:-1] if (no_variant.endswith(" ") or no_variant.endswith("-")) else no_variant
def get_output_fontname(input_name):
- new_fontname = raw_input('Enter a name for your ligaturized font -- or press ENTER to use the same name: ')
+ new_fontname = input('Enter a name for your ligaturized font -- or press ENTER to use the same name: ')
if new_fontname == "":
new_fontname = input_name
return name_without_width_variant(name_without_file_extension(new_fontname))
@@ -298,7 +298,7 @@
try:
creator.add_ligature(lig_spec['chars'], lig_spec['firacode_ligature_name'])
except Exception as e:
- print('Exception while adding ligature: {}'.format(lig_spec))
+ print(('Exception while adding ligature: {}'.format(lig_spec)))
raise
change_font_names(font, output_font['fontname'],
@@ -313,4 +313,4 @@
output_full_path = OUTPUT_FONT_DIR + "/" + output_name
font.generate(output_name)
os.rename(output_name, output_full_path)
-print "Generated ligaturized font %s in %s" % (output_font['fullname'], output_full_path)
+print("Generated ligaturized font %s in %s" % (output_font['fullname'], output_full_path))
RefactoringTool: Files that need to be modified:
RefactoringTool: /build/sources/ligaturize.py
Hello,
brew install fontforge
to try to avoid the dependency problem with fontforge
.make
. File "ligaturize.py", line 259, in <module>
font = fontforge.open(args.input_font_path)
EnvironmentError: Open failed
This seems to indicate a dependency at the python
source level. What do I have to do to get this to run?
It would be nice to have a handy download for a ligaturized version Space Mono at Google
https://github.com/pcaro90/hermit
https://pcaro.es/p/hermit/
Hi,
I was trying to ligaturize Microsoft's Consolas font, which comes as a collection of ttf files:
All the original ttf files have the same font name, "Consolas", however the liga versions have their names wrong: consola, consolai, consolab, consolaz instead of "Consolas", therefore the font no longer works as a collection.
In my fonts/iosevka
folder, I have 24 fonts:
iosevka-bold.ttf iosevka-bolditalic.ttf iosevka-boldoblique.ttf iosevka-extrabold.ttf iosevka-extrabolditalic.ttf
iosevka-extraboldoblique.ttf iosevka-extralight.ttf iosevka-extralightitalic.ttf iosevka-extralightoblique.ttf iosevka-italic.ttf
iosevka-light.ttf iosevka-lightitalic.ttf iosevka-lightoblique.ttf iosevka-medium.ttf iosevka-mediumitalic.ttf
iosevka-mediumoblique.ttf iosevka-oblique.ttf iosevka-regular.ttf iosevka-semibold.ttf iosevka-semibolditalic.ttf
iosevka-semiboldoblique.ttf iosevka-thin.ttf iosevka-thinitalic.ttf iosevka-thinoblique.ttf
But when I run make
, I get 17 fonts:
LigaIosevka-Bold.ttf LigaIosevkaExtraboldOblique-Extrabold.ttf LigaIosevkaMedium-Medium.ttf LigaIosevkaThin-Thin.ttf
LigaIosevka-Italic.ttf LigaIosevkaExtralight-Extralight.ttf LigaIosevkaMediumOblique-Medium.ttf LigaIosevkaThinOblique-Thin.ttf
LigaIosevka.ttf LigaIosevkaExtralightOblique-Extralight.ttf LigaIosevkaOblique-Oblique.ttf
LigaIosevkaBoldOblique-Bold.ttf LigaIosevkaLight-Light.ttf LigaIosevkaSemibold-Semibold.ttf
LigaIosevkaExtrabold-Extrabold.ttf LigaIosevkaLightOblique-Light.ttf LigaIosevkaSemiboldOblique-Semibold.ttf
This is the output:
~> make
fontforge -lang=py -script build.py 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.' \
| fgrep -v 'Bad device table'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 17:38 UTC 13-Oct-2018-ML-D.
Based on source from git with hash:
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Warning: Mac string is a subset of the Windows string in the 'name' table
for the Family string in the English (US) language.
Warning: Mac and Windows entries in the 'name' table differ for the
Styles (SubFamily) string in the language English (US)
Mac String: Medium
Windows String: Regular
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Warning: Mac string is a subset of the Windows string in the 'name' table
for the Family string in the English (US) language.
Warning: Mac and Windows entries in the 'name' table differ for the
Styles (SubFamily) string in the language English (US)
Mac String: Light
Windows String: Regular
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Ligaturizing font iosevka-bold.ttf (Iosevka) as 'Liga Iosevka'
...using ligatures from fonts/fira/distr/otf/FiraCode-Bold.otf
...saving to 'fonts/output/LigaIosevka-Bold.ttf' (Liga Iosevka Bold)
Ligaturizing font iosevka-regular.ttf (Iosevka) as 'Liga Iosevka'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevka.ttf' (Liga Iosevka)
Ligaturizing font iosevka-medium.ttf (Iosevka Medium) as 'Liga Iosevka Medium'
...using ligatures from fonts/fira/distr/otf/FiraCode-Medium.otf
...saving to 'fonts/output/LigaIosevkaMedium-Medium.ttf' (Liga Iosevka Medium Medium)
Ligaturizing font iosevka-thin.ttf (Iosevka Thin) as 'Liga Iosevka Thin'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaThin-Thin.ttf' (Liga Iosevka Thin Thin)
Ligaturizing font iosevka-semibolditalic.ttf (Iosevka Semibold) as 'Liga Iosevka Semibold'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaSemibold-Semibold.ttf' (Liga Iosevka Semibold Semibold)
Ligaturizing font iosevka-extrabold.ttf (Iosevka Extrabold) as 'Liga Iosevka Extrabold'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaExtrabold-Extrabold.ttf' (Liga Iosevka Extrabold Extrabold)
Ligaturizing font iosevka-boldoblique.ttf (Iosevka Bold Oblique) as 'Liga Iosevka Bold Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Bold.otf
...saving to 'fonts/output/LigaIosevkaBoldOblique-Bold.ttf' (Liga Iosevka Bold Oblique Bold)
Ligaturizing font iosevka-bolditalic.ttf (Iosevka) as 'Liga Iosevka'
...using ligatures from fonts/fira/distr/otf/FiraCode-Bold.otf
...saving to 'fonts/output/LigaIosevka-Bold.ttf' (Liga Iosevka Bold)
Ligaturizing font iosevka-lightoblique.ttf (Iosevka Light Oblique) as 'Liga Iosevka Light Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaLightOblique-Light.ttf' (Liga Iosevka Light Oblique Light)
Ligaturizing font iosevka-light.ttf (Iosevka Light) as 'Liga Iosevka Light'
...using ligatures from fonts/fira/distr/otf/FiraCode-Light.otf
...saving to 'fonts/output/LigaIosevkaLight-Light.ttf' (Liga Iosevka Light Light)
Ligaturizing font iosevka-mediumitalic.ttf (Iosevka Medium) as 'Liga Iosevka Medium'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaMedium-Medium.ttf' (Liga Iosevka Medium Medium)
Ligaturizing font iosevka-extralight.ttf (Iosevka Extralight) as 'Liga Iosevka Extralight'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaExtralight-Extralight.ttf' (Liga Iosevka Extralight Extralight)
Ligaturizing font iosevka-extralightoblique.ttf (Iosevka Extralight Oblique) as 'Liga Iosevka Extralight Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaExtralightOblique-Extralight.ttf' (Liga Iosevka Extralight Oblique Extralight)
Ligaturizing font iosevka-extralightitalic.ttf (Iosevka Extralight) as 'Liga Iosevka Extralight'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaExtralight-Extralight.ttf' (Liga Iosevka Extralight Extralight)
Ligaturizing font iosevka-semibold.ttf (Iosevka Semibold) as 'Liga Iosevka Semibold'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaSemibold-Semibold.ttf' (Liga Iosevka Semibold Semibold)
Ligaturizing font iosevka-lightitalic.ttf (Iosevka Light) as 'Liga Iosevka Light'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaLight-Light.ttf' (Liga Iosevka Light Light)
Ligaturizing font iosevka-thinitalic.ttf (Iosevka Thin) as 'Liga Iosevka Thin'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...savingLookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
Lookup 'mark' Mark Positioning lookup 0 has an
offset bigger than 65535 bytes. This means
FontForge must use an extension lookup to output it.
Not all applications support extension lookups.
to 'fonts/output/LigaIosevkaThin-Thin.ttf' (Liga Iosevka Thin Thin)
Ligaturizing font iosevka-extraboldoblique.ttf (Iosevka Extrabold Oblique) as 'Liga Iosevka Extrabold Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaExtraboldOblique-Extrabold.ttf' (Liga Iosevka Extrabold Oblique Extrabold)
Ligaturizing font iosevka-mediumoblique.ttf (Iosevka Medium Oblique) as 'Liga Iosevka Medium Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaMediumOblique-Medium.ttf' (Liga Iosevka Medium Oblique Medium)
Ligaturizing font iosevka-semiboldoblique.ttf (Iosevka Semibold Oblique) as 'Liga Iosevka Semibold Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaSemiboldOblique-Semibold.ttf' (Liga Iosevka Semibold Oblique Semibold)
Ligaturizing font iosevka-italic.ttf (Iosevka) as 'Liga Iosevka'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevka-Italic.ttf' (Liga Iosevka Italic)
Ligaturizing font iosevka-oblique.ttf (Iosevka Oblique) as 'Liga Iosevka Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaOblique-Oblique.ttf' (Liga Iosevka Oblique Oblique)
Ligaturizing font iosevka-thinoblique.ttf (Iosevka Thin Oblique) as 'Liga Iosevka Thin Oblique'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaThinOblique-Thin.ttf' (Liga Iosevka Thin Oblique Thin)
Ligaturizing font iosevka-extrabolditalic.ttf (Iosevka Extrabold) as 'Liga Iosevka Extrabold'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaIosevkaExtrabold-Extrabold.ttf' (Liga Iosevka Extrabold Extrabold)
Also I when I use the Medium
weight, it's now only in Italic
(The name also show as Liga Iosevka Medium Medium
)
The only font that works correctly is the regular
one. The rest act as Italic
Hello,
I am trying to ligaturize the Oxygen mono font. I have installed fontforge and python-fontforge but when I run the script i get the error This contextual rule applies no lookups.
Below is a post of my terminal display:
fontforge -lang py -script ligaturize.py fonts/OxygenMono-Regular.ttf --output-dir fonts/ --output-name='Oxygen Mono Code' --ligature-font-file fonts/fira/distr/otf/FiraCode-Regular.otf
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
with many parts BSD http://fontforge.org/license.html. Please read LICENSE.
Based on sources from 11:21 UTC 24-Sep-2017-ML-D.
Based on source from git with hash:
Ligaturizing font OxygenMono-Regular.ttf (Oxygen Mono) as 'Liga Oxygen Mono Code'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
This contextual rule applies no lookups.
What does this error mean and how do I fix it?
Every time - both with the manual and auto approach. I've copied the Liga font files as the code expects them to be named into every directory but still no dice. Nothing ever appears in output:
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 09:31 UTC 21-Mar-2018-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'LTSH' linear threshold table
Ignoring 'VDMX' vertical device metrics table
Ignoring 'hdmx' horizontal device metrics table
The glyph named Omega is mapped to U+03A9.
But its name indicates it should be mapped to U+2126.
Ligaturizing font MesloLGMDZ-Regular.ttf (Meslo LG M DZ) as 'Liga Ligaturized Meslo'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
The requested file, FiraCode-Regular.otf, does not exist
Traceback (most recent call last):
File "ligaturize.py", line 332, in <module>
main()
File "ligaturize.py", line 329, in main
ligaturize_font(**vars(parse_args()))
File "ligaturize.py", line 270, in ligaturize_font
firacode = fontforge.open(ligature_font_file)
EnvironmentError: Open failed
When I try to add ligatures with make
, I get:
fontforge -lang=py -script build.py 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.' \
| fgrep -v 'Bad device table'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 19:16 UTC 7-Sep-2018-ML-TtfDb-D.
Based on source from git with hash: e688b8c4dc634dcc128709f84b98f2407294f3fb
Fatal Python error: _Py_InitializeCore: main interpreter already initialized
Current thread 0x00007ff8acaae480 (most recent call first):
I tried building fontforge
with python2 but still get the same error.
I used Ligaturizer to generate Source Code Pro fonts for Regular Bold and Light (including the It versions). However, only the Bold and Regular shows up in Intellij, so there must be something wrong with the Light version.
Note, that the Light version still works in Gedit, so the actual font seems ok but there is something minor making intellij not liking it.
Nice! Any chance you could add Roboto Mono Light as well? I feel Roboto Mono Regular can be a bit too thick when using bright text on dark background.
I have some block comments (this is R) that look like
#=================================
#
#=================================
and so on. Fira Code renders these as above. When I try your fonts, they transform these into a set of ===
ligatures. Not the end of the world, but I would prefer they did not do that.
It would be nice to have a handy download for a ligaturized version Space Mono at Google
https://github.com/googlefonts/spacemono
In R (statistical programming language) pipes are written as %>% which look horrid. Is there any way to add support for this in the font, or explain to me how I might be able to do it myself? Btw, this font creator is amazing. I always recommend it my friends.
Please specify in README that the script literally adds ligatures from Fira Code, not creates the same ligatures by combining symbols of the target font.
Not sure if this is really an issue with this repo, but I tried using this font in iTerm and the ligatures aren't working in iTerm. Is there some other setup necessary? I tried using it in my editor and it seemed to be fine strangely enough
Fira code has a new release https://github.com/tonsky/FiraCode/releases/tag/1.206
1.Would the Ligaturizer repository automatically fetch the new changes when i locally build?
2. When i did git clone https://github.com/ToxicFrog/Ligaturizer --recurse-submodules
today I was getting the following error
error: Server does not allow request for unadvertised object ade27f514af43920eb4c40d354c8e0a36e9ebb12
Fetched in submodule path 'fonts/fira', but it did not contain ade27f514af43920eb4c40d354c8e0a36e9ebb12. Direct fetching of that commit failed
I can fix it if u can give me a hint .And 1.206 also has new ligatures ..I can also create a PR and update them
I've tried to add a few ligatures to Dank Mono which I felt, are missing.
Everything seems to work, the extra ligatures are displayed correctly, except now the grave accent character is written over other text.
This is the original Dank Mono:
#40 might be related.
Output of make
:
fontforge -lang=py -script build.py 2>&1 \
| fgrep -v 'This contextual rule applies no lookups.' \
| fgrep -v 'Bad device table'
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 11:21 UTC 24-Sep-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Ligaturizing font DankMono-Italic.ttf (Dank Mono) as 'Liga Dank Mono'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaDankMono-Italic.ttf' (Liga Dank Mono Italic)
Ligaturizing font DankMono-Regular.ttf (Dank Mono) as 'Liga Dank Mono'
...using ligatures from fonts/fira/distr/otf/FiraCode-Regular.otf
...saving to 'fonts/output/LigaDankMono-Regular.ttf' (Liga Dank Mono Regular)
?
So, I'm following all of the instruction in the readme. I'm using debian therefore I installed the packages fontforge and python-fontforge. I put in my .ttf fonts into input-fonts dir as specified and run make, and this is the output I get:
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
Based on sources from 11:21 UTC 24-Sep-2017-ML-D.
Based on source from git with hash:
The following table(s) in the font have been ignored by FontForge
Ignoring 'DSIG' digital signature table
Ignoring 'TTFA'
Reading ligatures from fira/FiraCode-Bold.otf
Traceback (most recent call last):
File "ligaturize.py", line 289, in <module>
creator = LigatureCreator(font, firacode, args)
File "ligaturize.py", line 78, in __init__
self.emwidth = self.font['m'].width
TypeError: No such glyph
Not sure what to make of it. I didn't modify the ligaturize.py in any way.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.