Git Product home page Git Product logo

ligaturizer's People

Contributors

a-mr avatar delucks avatar farid-fari avatar gaplo917 avatar injust avatar mortenfyhn avatar rexebin avatar rojiani avatar sammcj avatar sunaku avatar tinnus avatar toxicfrog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ligaturizer's Issues

Roboto Mono Light

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.

[Question] Generalisation of this program

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.

  1. I'd be mapping a sequence of characters to a single character from another font
  2. I want to do this for ~1000 LaTeX commands, I have a list of commands and the corresponding Unicode character as a string
  3. (minor) I may want to specify multiple fallback fonts, but this is non-essential

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

M+ fonts do not rename, and collide with the originals.

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.

screenshot from 2019-01-08 05-21-58

screenshot from 2019-01-08 05-22-39

I also added the following to the prefixed_fonts array (but the problem retained).

  'fonts/codeface/fonts/mplus1m/*.ttf',
  'fonts/codeface/fonts/mplus1mn/*.ttf',

How to install different variants

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

Automatic "make" build doesn't work on Ubuntu 18.04

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

Problem naming individual fonts in font collections

Hi,

I was trying to ligaturize Microsoft's Consolas font, which comes as a collection of ttf files:

  • consola.ttf (regular)
  • consolai.ttf (italic)
  • consolab.ttf (bold)
  • consolaz.ttf (bold italic)

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.

patching Hack font with the updated new script throws the following error

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

Source Code Pro Light doesn't work in Intellij

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.

Python errors upon trying to ligaturize a custom font.

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.

Ligatures not rendering in iTerm

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

No COPYING/LICENSE?

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?

Owner needed

Would like to hand the repo over, as it's not currently very high on my priority list.

@ToxicFrog, any interest?

Output Font Incorrectly Configured

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

Audit fonts for license compliance

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.

Create a branch in the Repo

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

Could not find Liga font / EnvironmentError: Open failed

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

?

?

Screenshots colorscheme

I hate to be the one to ask, but which colorscheme does the screenshots in the README use?

Grave accent / backtick no width with Dank Mono

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:
screenshot from 2019-02-23 20-30-14

and with Liga Dank Mono:
screenshot from 2019-02-23 20-30-23

#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)

Problems with macOS 10.13.5

Hello,

  • I first ran brew install fontforge to try to avoid the dependency problem with fontforge.
  • I've downloaded the repo, copied the standard macOS font Monaco.ttf to the input-fonts folder and ran make.
  • I get the error:
  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?

Character lookup fails on Dank Mono

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

Liga SF Mono fonts clobber the original SF Mono fonts

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

  • "Ligaedlo Regular" (from "Edlo Regular")
  • the "IBM Plex Mono" fonts become "LigaIBM Plex Mono"

Also the Meslo LG fonts have different spacing in Liga form, eg "Meslo LG S DZ Regular" became "Liga MesloLGSD Z Regular".

This contextual rule applies no lookup

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?

Unable to use Ligaturizer

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.

New Pipe operator?

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.

Update to Latest Fira code 1.206

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

Not compatible with Python 3

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

Misleading README

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.

====

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.

Script says it Generated the file, but it's not there.

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

Full output:

/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:

Blurred outline on ligatures

first, thanks for this project.
installed the ligatures on consolas. but it looks somewhat blurry (win10 + vscode)

too blurry

is there a fix ? looking for consolas with good ligatures. thanks

The command run by make (and written in the docs) doesn't work with some versions of Fontforge

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).

Ligaturizer not working

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

Out put Font Type Differs from Input Font Type

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.