Free (libre) font editor for Windows, Mac OS X and GNU+Linux

Related tags

fontforge
Overview

FontForge CI Build status Coverity Scan Build Status

FontForge Logo

FontForge is a free (libre) font editor for Windows, Mac OS X and GNU+Linux. Use it to create, edit and convert fonts in OpenType, TrueType, UFO, CID-keyed, Multiple Master, and many other formats.

fontforge.org — homepage

designwithfontforge.com — font creation manual

Getting help

The bug tracker is for reporting bugs, not for asking questions. Please direct questions to one of the following:

Installation & contributing

INSTALL.md — developer instructions to build from source

setup_linux_deps.sh — a list of installation dependencies

CONTRIBUTING.md — contributing guidelines

Issues
  • Handle foreign data in U. F. O..

    Handle foreign data in U. F. O..

    This uses the PyTuple, which has no matching entity in X. M. L., as a special container for unrecognized data in python_persistent, allowing FontForge to round-trip that data in the top-level lib.plist and in the lib data for individual glifs.

    opened by frank-trampe 148
  • Improved mac dmg

    Improved mac dmg

    I've made some improvements to make the dmg look more like other apps with a custom background + link to applications folder + online install instructions. If @monkeyiq could test the pretty-dmg branch https://github.com/fontforge/fontforge/compare/pretty-dmg

    packaging 
    opened by larsenwork 120
  • Unicode tooltips empty

    Unicode tooltips empty

    Built from today’s git head, fontforge doesn’t show any content in the unicode tooltips. Please revert to LibUnicodeNames, the latest changes seem rather destructive to things that weren’t broken before.

    I-bug 
    opened by georgd 118
  • Make comb. chars always superior to spacing chars

    Make comb. chars always superior to spacing chars

    Combining characters are superior in some cases to spacing characters but not others. For example, combining macron (U+304) is superior to macron (U+AF), yet combining dieresis (U+308) is inferior to dieresis (U+A8).

    This situation is untenable. It makes it impossible, while designing a font, to know which character will be used when FontForge builds an accented glyph without digging through the source code. Furthermore, the logical case, to use the combining character first, is rarely done.

    Apparently this is due to some restriction of Type1 fonts according to George in 2001. I fixed his reported restriction in this same commit by just dissolving the reference if the character referred to is between 0x300 and 0x345.

    Some, such as @frank-trampe, might say that dissolving the reference “breaks” something. But nothing is broken. No function of a Type 1 font changes if a reference is used or not. Type 1 fonts never were a first class format for storing font data—and certainly haven't become one— that's what SFD is for. The only discernible difference therefore is a small increase in filesize.

    I confirmed:

    • generated PFA (PostScript type 1) fonts still work; FontForge shows the dissolved references as expected when a problem character is referred to.
    • if you want to use dieresis you can tell FontForge to in “Glyph Info → Components” and it will work.
    • that this closes #3708, the issue is solved.

    I encourage my fellow members to support this change. As an author of five and counting open source fonts made only using FontForge and FontTools, I can unequivocally say that sacrificing the file size of a subset of Type 1 fonts is worth the benefit this change provides.

    • [x] Bug fix (non-breaking change which fixes an issue)
    • [x] Breaking change (fix or feature that would cause existing functionality to change)
    • [x] I have read the CONTRIBUTING guidelines.
    opened by ctrlcctrlv 101
  • 2015-06 Release

    2015-06 Release

    We skipped a May release, so I suggest we cut a new release for June ASAP :)

    opened by davelab6 90
  • New problem in fontforge-cygwin_2014_01_04: Generate('a.ttf') takes 2x as much memory as the version of 2012

    New problem in fontforge-cygwin_2014_01_04: Generate('a.ttf') takes 2x as much memory as the version of 2012

    For my files, this does not matter: my workflow separates Generate() into a separate call fontforge -lang ff -c "Load($1); Generate($2)" and for me, the question is about using 500MB of memory vs 1100MB of memory; not a problem with this machine. However, people with larger runs may get into problems on 32bit machines, more complicated fonts, and/or more complicated scripts.

    maybe-done 
    opened by ilyaza 90
  • MAC: Crash on scrolling on Fontview

    MAC: Crash on scrolling on Fontview

    FF crashes while scrolling on Font View with this(https://drive.google.com/file/d/0B-5mpXa8HrFVUU1DYnRSNWpLUnM/view?usp=sharing) file opened

    18-Oct -14 Version on OSX 10.9.5

    I-crash Homebrew 
    opened by pathumego 76
  • New splash screen and about dialog

    New splash screen and about dialog

    This closes #3055.

    This commit does the following:

    Console mode changes

    The first line when you run FontForge, which was:

    Copyright (c) 2000-2018 by George Williams. See AUTHORS for Contributors.
    

    Is now:

    Copyright (c) 2000-2019. See AUTHORS for Contributors.
    

    This will no longer need to be updated randomly whenever we remember to do it. I baked the current year in at compile time by editing configure.ac and adding a new variable for it. Why did I remove George's name? He is the main contributor but hasn't been around for seven years. It's time for him to become just another contributor in AUTHORS.

    Splash screen changes

    I only made the changes for which there was consensus in #3055. I:

    • Changed the image to a newer one which I (previously @probonopd, but I changed it in made.
    • Made the Git hash use a monospace font so it's small enough to fit in one line.
    • Changed references which made it seem like this is George's software alone. I love the story of this project, you all know that, I love FontForge history, I run pfaedit.org, I've been trying to get @davelab6 to talk with me on video to flesh out more of the history for my website, so I was very respectful of George while editing the text, making very conservative edits to the history in the about dialog.

    Old dialog

    Dialog in this commit

    Previously, with the word FontForge more towards the right and different text

    Previously, though cancelled due to consensus

    How I changed it

    In case this needs to be done again, I used gdb to change the image. First, I loaded a BMP image in fontforge_main (startui.c) and set a breakpoint right after loading it. I just made a GImage containing the output of GImageReadBmp("/tmp/ff.bmp") called splashimage.

    The following gdb settings make things a lot easier:

    • set pagination off
    • set max-value-size unlimited
    • set print elements 0
    • set print repeats 0

    Then I issued command:

    p/x *((*splashimage).u.image.data)@568500
    

    You have to either catch the output by telling gdb it needs to log...or you can just set your console to unlimited scrollback and copy it.

    I got the number 568500 by multiplying two numbers together found in the struct:

    (gdb) p (*(*splashimage).u.image)
    $46 = {image_type = it_true, delay = 0, width = 379, height = 375, bytes_per_line = 1516, 
      data = 0x15554f5b6010 "\336\236O", clut = 0x0, trans = 4294967295}
    

    568500 = 1516 × 379

    I then pasted all the values into splashimage.c as needed. Done and dusted.

    opened by ctrlcctrlv 75
  • FF compiled with Python 3 extension loads

    FF compiled with Python 3 extension loads "empty" fontforge module.

    I am trying to compile fontforge from source with Python 3. I recently manged to compile it on Ubuntu workstation and now have to install it on a Debian or Ubuntu Server and run into a strange error.

    I am using the Version https://github.com/fontforge/fontforge/archive/20161012.tar.gz as imho this one has the import psMat problem solved.

    My compile steps:

    ./bootstrap
    PYTHON="python3" ./configure
    make -j3
    make install
    

    The relevant configure output:

    Configuration:
    
      Source code location	.
      Build code location	
      Destination prefix	/usr/local
      Compiler		gcc -std=gnu99 -std=gnu99
    
    Summary of optional features:
    
      real (floating pt)	double
      programs		yes
      native scripting	yes
      python scripting	yes
      python extension	yes
      freetype debugger	no
      raw points mode	no
      tile path		no
      gb12345 encoding	no
      potrace or autotrace	yes
    ...
    

    But when I do python3 -c "import fontforge; f = fontforge.font()" it results in:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'font'
    

    A python3 -c "import fontforge; print(dir(fontforge))" gives a: ['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__'] Somehow the fontforge module is empty?

    More details make install outputs an

    Libraries have been installed in:
       /usr/local/lib/python3.4/site-packages
    

    And indeed:

    ls -la /usr/local/lib/python3.4/site-packages
    total 48
    drwxr-sr-x 2 root staff  4096 Nov 30 21:53 .
    drwxrwsr-x 4 root staff  4096 Nov 30 21:53 ..
    -rwxr-xr-x 1 root staff  1429 Nov 30 21:53 fontforge.la
    -rwxr-xr-x 1 root staff 13992 Nov 30 21:53 fontforge.so
    -rwxr-xr-x 1 root staff  1405 Nov 30 21:53 psMat.la
    -rwxr-xr-x 1 root staff 13968 Nov 30 21:53 psMat.so
    

    I tried it on Debian 8 and Ubuntu 16.04. I also tried it with the additional --enable-python-scripting --enable-pyextension --enable-python-extension options for ./configure. Also a ldconfig after make install didn't help. When I did install it on my Workstation I did use a Virtual Enviroment and a custom--prefix. However, I also also tried this on the Debian server but without success. The servers have been fresh installs before testing. I also tried with the latest version from git.

    Does anybody has an idea what is wrong with my installation process?

    Update I did another test, this time with an virtual env again. When I did a

    python -c "import fontforge;print(fontforge)" 
    <module 'fontforge' (namespace)>
    

    it seems that an import fontforge doesn't load the .so file but the fontforge directory in /root/venv/lib/python3.4/site-packages which contains the .so file.

    Moving those .so files to the parent dir and remove the fontforge dir:

    mv /root/venv/lib/python3.4/site-packages/fontforge/* /root/venv/lib/python3.4/site-packages
    rm /root/venv/lib/python3.4/site-packages/fontforge
    

    But now:

    python -c "import fontforge" 
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: libuninameslist.so.1: cannot open shared object file: No such file or directory
    

    But the libuninameslist.so.1 file is in /usr/local/lib.

    Update 2 If I add /usr/local/lib/python3.4/site-packages to the sys.path everything looks fine.

    python3 -c "import sys; sys.path.append('/usr/local/lib/python3.4/site-packages'); import fontforge; f=fontforge.font(); print(f)";
    <Font: Untitled1>
    
    opened by tobltobs 69
  • Redesign the menu structures of the 3 main windows

    Redesign the menu structures of the 3 main windows

    EDIT: @pathumego, @davelab6 and @larsenwork are currently trying to figure things out in this google doc. Feel free to comment and make suggestions there.

    EDIT: The latest updates #2734

    What we're trying to do (WIP)

    • [x] Making the 3 menus identical (except for what's grey'd out)
    • [x] Rearranging items so things are easier to find
    • [x] Renaming items to more understandable names
    • [x] No level below top-level -> submenu -> item
    • [ ] Updating tooltip text #2259
    • [x] Re-arrange/name right click menus incl. #2261

    Removing some items

    • [x] Browse web (broken)
    • [x] X-resource editor (https://github.com/fontforge/fontforge/issues/2260)

    What we later need a software developer for

    • [ ] Implement the changes (or tell us how) - #2734
    UI 
    opened by davelab6 68
  • Upgrade to Unicode 14.0.0

    Upgrade to Unicode 14.0.0

    Looks like we never managed to release before it came out after all.

    Type of change

    • New feature
    opened by jtanx 0
  • Remove pre-gettext resource management functions

    Remove pre-gettext resource management functions

    This removes old (and extremely obsolete) functionality to get string resources outside of gettext

    Type of change

    • Non-breaking change
    opened by jtanx 0
  • Questions on Edit Chaining Substitution dialog and need expert help

    Questions on Edit Chaining Substitution dialog and need expert help

    image

    Hope someone have lot of experience in this area would answer my questions here. This is working Ccalt. But I still have a lot of questions. The questions are:

    1. What is New Section mean to current situation? Adding | in the Matching Rules and what else can you add there? Since I used all match, back and ahead classes in there already
    2. What is adding "New" under Matching Rules, is this the same as New Section button?
    3. Can I add any lookup to any section? Like --> back @lookup1 | match @looup2 | ahead @looup3?
    4. Why I got error message saying that "back" is not valid class name, when I put @lookup right after back
    5. Does "New " mean, a new Chained Substitution and will work on the result of previous Chained Substitution?
    6. Is there any writeup about this dialog and explain in detail, please point me to that document?
    7. When back or ahead is not included, the dialog is a bit different. It is called "Coverage Tables" or something and the format is quite different. So, adding "New" will be new Chained Substitute, which will work on the result of previous one? See the dialog below:
    8. I can't adjust the column in this dialog box, why? image
    opened by waykyi 0
  • Fontforge windows version display UI font doesn't have all unicode characters.

    Fontforge windows version display UI font doesn't have all unicode characters.

    This means that it's extremely hard to make a font that offers full unicode coverage as you simply don't know how each glyph looks like, instead being greeted with this mess: https://i.imgur.com/miN3T2X.png Yes, you can google how each glyph is supposed to look like, but it makes making a full unicode font more of a hassle than it has to be.

    Solution: Change the UI font to one with full unicode coverage or allow us to change the UI font to any otf/ttf font we like.

    opened by darkhog 1
  • New release

    New release

    It would be great to have a new release of Fontforge since the anniversary version contains path related issues already solved. at least homebrew formula insists to use binary even with parameters --HEAD or --build-from-source Cheers!

    opened by dimitre 0
  • tottfgpos.c: ensure qsort determinism

    tottfgpos.c: ensure qsort determinism

    When qsort's comparator function returns 0, the qsort's result gets implementation-depended.

    That makes the fonts not reproducible.

    Within a single Linux distro there could be different binaries of, for example, DejavuSans.ttf for i686, x86_64 and aarch64. Not to mention the case when there is musl instead of glibc

    In particular, feat_alphabetize often returns 0, even on building such a widely used font as http://github.com/dejavu-fonts/dejavu-fonts The rest assert(0) are just in case, they do not fix any real bug

    opened by kvtb 7
  • Improved Point Type Change From Corner To Curve and From Anything To Tangent

    Improved Point Type Change From Corner To Curve and From Anything To Tangent

    This pull request results as an attempt to solve the issue https://github.com/fontforge/fontforge/issues/4763. At the moment, details are explained there. But from now on, I think that changes are better described here. I have tested my code before and after https://github.com/fontforge/fontforge/pull/4685 and while the overall behavior is the same, some things are different (one described at https://github.com/fontforge/fontforge/issues/4787). Therefore, my code may need some revision, when https://github.com/fontforge/fontforge/issues/4787 is solved.

    opened by linusromer 0
  • SplineCharDefaultNextCP and SplineCharDefaultPrevCP do not produce handles anymore

    SplineCharDefaultNextCP and SplineCharDefaultPrevCP do not produce handles anymore

    When drawing a spline with smooth points the current github version of FontForge produces a spline that is not smooth at all (upper part of the following picture). However, it used to produce something like the lower part of the following picture: fferror This must have happened in the past month, because my version on https://github.com/linusromer/fontforge from 1. july still works as it used to be. This issue may be related to https://github.com/fontforge/fontforge/pull/4685.

    opened by linusromer 5
  • Crash with malformed SFD

    Crash with malformed SFD

    Fontforge 20201107 and 20200314 on openSUSE Leap 15.2 x86_64 crash when a specially crafted glyph from a SFD file is about to be displayed in the main window's cell grid.

    Trigger file: 1.sfd.txt

    gdb crash log:

    Core was generated by `fontforge 1.sfd'.
    Program terminated with signal SIGSEGV, Segmentation fault.
    (gdb) bt
    #0  __memmove_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:391
    #1  0x00007f8b0953a998 in memcpy (__len=4261412864, __src=<optimized out>, __dest=<optimized out>) at /usr/include/bits/string_fortified.h:29
    #2  BdfCFromBitmap ([email protected]=0x7ffca4ae35c0, bitmap_left=<optimized out>, bitmap_top=<optimized out>, pixelsize=<optimized out>, [email protected]=4, [email protected]=0x5593523cf280, metrics=0x0) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforge/freetype.c:412
    #3  0x00007f8b0953c549 in SplineCharFreeTypeRasterizeNoHints (sc=0x5593523cf280, layer=<optimized out>, ptsize=<optimized out>, dpi=<optimized out>, depth=4) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforge/freetype.c:1106
    #4  0x00007f8b096727e8 in BDFPieceMeal (bdf=0x559352469df0, [email protected]=0) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforge/splinefill.c:1700
    #5  0x00005593514fcf12 in FVDrawGlyph (pixmap=0x559352451920, fv=0x5593523cf660, index=<optimized out>, forcebg=<optimized out>) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforgeexe/fontview.c:262
    #6  0x000055935150b6d0 in FVExpose ([email protected]=0x5593523cf660, [email protected]=0x559352451920, [email protected]=0x7ffca4ae45a0) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforgeexe/fontview.c:6014
    #7  0x00005593515110f8 in v_e_h (gw=0x559352451920, event=0x7ffca4ae45a0) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforgeexe/fontview.c:6733
    #8  0x00005593515bcee7 in _GWidget_Container_eh (gw=0x559352451920, [email protected]=<error reading variable: value has been optimized out>, event=0x7ffca4ae45a0, [email protected]=<error reading variable: value has been optimized out>) at /usr/src/debug/fontforge-20201107-1.5.x86_64/gdraw/gcontainer.c:281
    
    #2  BdfCFromBitmap ([email protected]=0x7ffca4ae35c0, bitmap_left=<optimized out>, bitmap_top=<optimized out>, pixelsize=<optimized out>, [email protected]=4, [email protected]=0x5593523cf280, metrics=0x0) at /usr/src/debug/fontforge-20201107-1.5.x86_64/fontforge/freetype.c:412
    412             memcpy(bdfc->bitmap,bitmap->buffer,bitmap->rows*bdfc->bytes_per_line);
    (gdb) p bitmap->rows
    $1 = 4261412864  ## this looks wrong
    (gdb) l
    407         if ( bdfc->bytes_per_line==0 ) bdfc->bytes_per_line = 1;
    408         bdfc->bitmap = malloc((bdfc->ymax-bdfc->ymin+1)*bdfc->bytes_per_line);
    409         if ( bitmap->rows==0 || bitmap->width==0 )
    410             memset(bdfc->bitmap,0,(bdfc->ymax-bdfc->ymin+1)*bdfc->bytes_per_line);
    411         else
    412             memcpy(bdfc->bitmap,bitmap->buffer,bitmap->rows*bdfc->bytes_per_line);
    413         BCCompressBitmap(bdfc);
    414         if ( depth!=1 && depth!=8 )
    415             BCTruncateToDepth(bdfc,depth);
    416     return( bdfc );
    
    opened by jengelh 2
Releases(20201107)
Owner
Free (libre) font editor for Windows, Mac OS X and GNU+Linux
null
OpenProject is the leading open source project management software.

OpenProject OpenProject is a web-based project management software. Its key features are: Project planning and scheduling Product roadmap and release

OpenProject 5.2k Sep 25, 2021
Helping to catalog, preserve and free the artifacts you need to produce music.

Musical Artifacts Helping to catalog, preserve and free the artifacts you need to produce music. Donate via Paypal Donate via Bitcoin Read the wiki Is

Lucas 60 Sep 3, 2021
A Hassle-Free Way to Self-Host Google Fonts. Get eot, ttf, svg, woff and woff2 files + CSS snippets

google-webfonts-helper A Hassle-Free Way to Self-Host Google Fonts This service might be handy if you want to directly download all .eot, .woff, .woff

Mario Ranftl 8.5k Sep 23, 2021
Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support

antimicro ?? Important update ?? This repo is currently unmaintained. The code hasn't been updated for a while. But not all is lost, antimicro has a f

null 1.5k Sep 24, 2021
Calibre OPDS (and HTML) PHP Server : web-based light alternative to Calibre content server / Calibre2OPDS to serve ebooks (epub, mobi, pdf, ...)

COPS COPS stands for Calibre OPDS (and HTML) Php Server. See : COPS's home for more details. Don't forget to check the Wiki. Why ? In my opinion Calib

Sébastien Lucas 1.2k Sep 22, 2021
Popcorn Time is a multi-platform, free software BitTorrent client that includes an integrated media player ( Windows / Mac / Linux ) A Butter-Project Fork

Popcorn Time A multi-platform, free software BitTorrent client that includes an integrated media player. Visit the project's website at popcorntime.ap

Popcorn Software 6.3k Sep 15, 2021
Multi-platform app that allows your devices to communicate

KDE Connect - desktop app KDE Connect is a multi-platform app that allows your devices to communicate (eg: your phone and your computer). (Some) Featu

KDE GitHub Mirror 1.2k Sep 15, 2021
Read-only mirror of https://gitlab.gnome.org/GNOME/gparted

GPARTED ======= Gparted is the GNOME Partition Editor for creating, reorganizing, and deleting disk partitions. A hard disk is usually subdivided int

GNOME Github Mirror 179 Sep 24, 2021
🎧 Kaku is a highly integrated music player supports different online platform like YouTube, SoundCloud, Vimeo and more. Available on Mac, Windows and Linux.

Kaku Kaku is a highly integrated music player that supports different online platforms like YouTube, SoundCloud, Vimeo and more. Available on Windows,

Chia-Lung Chen 1k Sep 20, 2021
Online genealogy

webtrees - online collaborative genealogy Contents License Coding styles and standards Introduction System requirements Internet browser compatibility

Greg Roach 582 Sep 15, 2021
Sharetribe Go is a source available marketplace software, also available as a hosted, no-code SaaS product. For a headless, API-first marketplace solution, check out Sharetribe Flex: https://www.sharetribe.com/flex.

Sharetribe Sharetribe develops advanced marketplace software for every business life cycle stage. Sharetribe Go gives you the complete feature set to

Sharetribe 2.2k Sep 24, 2021
Mirror of https://gitlab.com/Remmina/Remmina The GTK+ Remmina Remote Desktop Client

Remmina remote desktop client Use other desktops remotely, from a tiny screen or large monitors. RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network prot

null 1.7k Sep 13, 2021
Display and control your Android device

scrcpy (v1.17) Read in another language This application provides display and control of Android devices connected on USB (or over TCP/IP). It does no

Genymobile 54.9k Sep 23, 2021
Flash OS images to SD cards & USB drives, safely and easily.

Etcher Flash OS images to SD cards & USB drives, safely and easily. Etcher is a powerful OS image flasher built with web technologies to ensure flashi

balena 21.2k Sep 10, 2021
Source code for Gramps Genealogical program

The Gramps Project ( https://gramps-project.org ) We strive to produce a genealogy program that is both intuitive for hobbyists and feature-complete f

Gramps Project 1.3k Sep 13, 2021
The Linux PowerTOP tool -- please post patches to the mailing list instead of using github pull requests

PowerTOP PowerTOP is a Linux* tool used to diagnose issues with power consumption and power management. In addition to being a diagnostic tool, PowerT

Arjan van de Ven 543 Sep 24, 2021
The HTML Presentation Framework

reveal.js is an open source HTML presentation framework. It enables anyone with a web browser to create fully featured and beautiful presentations for

Hakim El Hattab 57.3k Sep 15, 2021
Squash’s front-end and API host.

Squash: A squarish bug spray An open-source project from Square Squash is a collection of tools that help engineers find and kill bugs in their code b

null 968 Sep 9, 2021