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

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

Comments
  • 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
  • Appearance (X resource) unification

    Appearance (X resource) unification

    Including:

    • Relative font specification
    • A bunch of appearance fixes and tweaks
    • Fixes for #4454 #4391 #4238 #3844 #3835 #3443 (partial) #3051 #1031 #863 #4274

    For historical reasons the UI knobs in FontForge are supplied in X Resource format. There may still be some minimal compatibility with that system but given that its mostly supplied via GDK now that's not very important.

    At some point a handy resource editing dialog was added so that less technical users could customize the UI. There was some effort put into unifying the initialization and the editing at that time but mostly in the form of new APIs (mainly GResEditFind()). For the most part variables were still initialized via individual calls to GResourceFindColor(), GResourceFindString() and so on.

    The bulk of this PR finishes the unification, so that initialization and editing are two uses of the same data structure. It is now easier to add new directives -- usually just a matter of declaring the static variable with an appropriate default value, adding one line to a struct resed initializer, and a corresponding line to the tango/resources.in file (if needed).

    In addition to that it does the following:

    1. Default font families for sans, serif, and mono are now defined in one place in BuildUtils.cmake and can be overridden by CMake flags. They are broken down by OS type (APPLE, WIN32 OR CYGWIN, and "other"). The current values are not final -- part of the reason I'm starting this PR as a draft is that we should discuss the best options.
    2. Font directives can now be specified relative to other font directives as described in the included documentation changes. The supplied resource files now do this. Because most of the UI is sized in relation to fonts you can now adjust the whole UI scale by changing the (new) View.DefaultFont point size. Another result is that families are specified once in each resource file (as long as they are kept consistent with the supplied file) and therefore the UI is much more uniform in presentation.
    3. I went through pretty much the whole UI to eliminate hard-coded colors, either by giving them new appearance directives or mapping them to either the GGadget FG or BG or the GDraw FG or BG. (GDrawGetDefaultForeground() and ...Background() now return a static value and ignore the display argument, as that generality wasn't used and mostly caused updating problems.) This allows a number of issues to be closed and means that true "dark" themes (and the like) are now possible.
    4. Since the GDK backend already switched away from ScreenWidth directives in favor of ScreenResolution I did that on the X side for consistency.
    5. The image cache has been restructured to minimize image path names relative to the ImagePath immediately, rather than having this happen "at the edges". The modified GResImage definition now stores the bucket instead of the file for additional flexibility.
    6. I've changed (or occasionally de-emphasized) the "X Resource" terminology in favor of "Appearance".
    7. The docs have been updated.

    In addition to reviewing the changes this has a todo list:

    1. Decide on font families for each OS appropriate for contemporary use
    2. Decide what to do with the "Keyboard" resource (I think it should become a preference)

    Ideally this work would be paired with a later PR that

    1. Figures out how to pick among images (menu icons, pointers, palette icons) scaled at different sizes.
    2. Come up with a full set of sources (probably in SVG) that can be attractively scaled that way
    3. Modify the editing system so that tracks both a "theme" file and a user file, and only stores what is different in the latter.

    Then FontForge would support proper themes, which I imagine being added through a python API hook and distributed as python packages, given that the plugin interface is already integrated.

    Closes #4454 Closes #4391 Closes #4238 Closes #3844 Closes #3835 Closes #3051 Closes #1031 Closes #863 Closes #4274

    opened by skef 97
  • 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
  • Remove outlines and more padding on Tools Pallet

    Remove outlines and more padding on Tools Pallet

    Graphics

    • [x] Create new icons
    • [x] Paletteselectedbg.png
    • [x] Mouse icon instead of Mse-stuff

    Code

    • [ ] Support for theme-adjustable palette margins + spacing
    • [ ] Support for Paletteselectedbg.png (https://github.com/fontforge/fontforge/issues/1827#issuecomment-97260391)
    • [ ] Support for the proposed restyling of Mse and make it "un-clickable"(https://github.com/fontforge/fontforge/issues/1827#issuecomment-98128014) + (https://github.com/fontforge/fontforge/issues/1456)
    • [ ] Change the order of the palette icons a bit (https://github.com/fontforge/fontforge/issues/1827#issuecomment-98878311)
    • [ ] Use visiblility_off/on.png as default instead of them ugly eyes.

    Previously

    • [x] Removing the outlines on the toolbar pallet button would make a pleasant difference. And add 2px padding would be needed. (see below)
    • [x] ~~The eye icon is clipped on layers panel, maybe increase of the width would fix that.~~
    UI High Priority 
    opened by pathumego 67
  • Update charinfo.c

    Update charinfo.c

    GitHub code changes

    • Used multi-line wrapping for consistency and readability.
    • Added comment explaining "Lig." as an abbreviation for "Ligature", so as to maintain code consistency.

    Changes

    • Changed "Italic Cor." to "Italic Correction" as it was used in an equivalent position, so as to maintain consistency.
    • Corrected some capitalisation, spelling, grammar, and punctuation errors in various popup messages.

    Possible errors

    • The wrapping length for most popup messages was shortened for consistency and may cause positioning/sizing issues (maybe?).
    • Line 4972 - Changing "Italic Cor." to "Italic Correction" may cause positioning/sizing issues (maybe?).

    Considered changes

    • Line 5175 - Changing "ΤεΧ & Math" to "ΤeΧ & Math" to maintain consistency with popups (or vice-versa, and changing the popups to match instead).
    • Un-abbreviating the "tab" labels, including "Pos".

    Notes

    • This is my first pull request, so please keep in mind things might not be perfect! I may have missed some spelling/grammar/punctuation errors or made some of my own.
    • I am slightly confused about the "GT:" in some comments. Do these show the comments were made by a specific user? I was unsure what to do about the additional comment for "Lig."/"Ligature".
    • I was not entirely sure what to do about tabulation or bullet points within the popup text. Apologies if these are incorrect or not fitting with the app as a whole.
    • I am not yet familiar with C, so I hope everything is syntactically accurate.

    Type of change

    • Non-breaking change

    If there is anything that needs changing or any other issues/questions, I would be more than happy to try and help so we can make FontForge as good as it deserves to be! :D

    opened by Pigeon43 0
  • Add CodeQL workflow for GitHub code scanning

    Add CodeQL workflow for GitHub code scanning

    Hi fontforge/fontforge!

    This is a one-off automatically generated pull request from LGTM.com :robot:. You might have heard that we’ve integrated LGTM’s underlying CodeQL analysis engine natively into GitHub. The result is GitHub code scanning!

    With LGTM fully integrated into code scanning, we are focused on improving CodeQL within the native GitHub code scanning experience. In order to take advantage of current and future improvements to our analysis capabilities, we suggest you enable code scanning on your repository. Please take a look at our blog post for more information.

    This pull request enables code scanning by adding an auto-generated codeql.yml workflow file for GitHub Actions to your repository — take a look! Whilst we've attempted to make use of the existing configuration that you had on LGTM.com, there may be some differences in environment used to build the project. We hope that in most cases it will not require significant changes to achieve a successful analysis. Check this page for detailed documentation on how to configure a CodeQL workflow.

    Questions? Check out the FAQ below!

    FAQ

    Click here to expand the FAQ section

    How often will the code scanning analysis run?

    By default, code scanning will trigger a scan with the CodeQL engine on the following events:

    • On every pull request — to flag up potential security problems for you to investigate before merging a PR.
    • On every push to your default branch and other protected branches — this keeps the analysis results on your repository’s Security tab up to date.
    • Once a week at a fixed time — to make sure you benefit from the latest updated security analysis even when no code was committed or PRs were opened.

    What will this cost?

    Nothing! The CodeQL engine will run inside GitHub Actions, making use of your unlimited free compute minutes for public repositories.

    What types of problems does CodeQL find?

    The CodeQL engine that powers GitHub code scanning is the exact same engine that powers LGTM.com. The exact set of rules has been tweaked slightly, but you should see almost exactly the same types of alerts as you were used to on LGTM.com: we’ve enabled the security-and-quality query suite for you.

    How do I upgrade my CodeQL engine?

    No need! New versions of the CodeQL analysis are constantly deployed on GitHub.com; your repository will automatically benefit from the most recently released version.

    The analysis doesn’t seem to be working

    If you get an error in GitHub Actions that indicates that CodeQL wasn’t able to analyze your code, please follow the instructions here to debug the analysis.

    How do I disable LGTM.com?

    If you have LGTM’s automatic pull request analysis enabled, then you can follow these steps to disable the LGTM pull request analysis. You don’t actually need to remove your repository from LGTM.com; it will automatically be removed in the next few months as part of the deprecation of LGTM.com (more info here).

    Which source code hosting platforms does code scanning support?

    GitHub code scanning is deeply integrated within GitHub itself. If you’d like to scan source code that is hosted elsewhere, we suggest that you create a mirror of that code on GitHub.

    How do I know this PR is legitimate?

    This PR is filed by the official LGTM.com GitHub App, in line with the deprecation timeline that was announced on the official GitHub Blog. The proposed GitHub Action workflow uses the official open source GitHub CodeQL Action. If you have any other questions or concerns, please join the discussion here in the official GitHub community!

    I have another question / how do I get in touch?

    Please join the discussion here to ask further questions and send us suggestions!

    opened by lgtm-com[bot] 0
  • When I use font.generate to generate ttf fonts for use in office 2007 or 2010, the character spacing is abnormally large.

    When I use font.generate to generate ttf fonts for use in office 2007 or 2010, the character spacing is abnormally large.

    The kaiti.ttf file generated by using font.generate(output_ttf_path) under Linux platform (yum install fontforge) using the kaiti.ttf that comes with windows 11, has abnormally large character spacing when used in office 2007 or 2010 versions. Office 2013 and office 2016 do not have this problem, how can I solve it, please? And there is no such problem when using fontcreator to generate. When I use font.generate to generate ttf fonts for use in office 2007 or 2010 versions, the character spacing is abnormally large. screenshot-1

    opened by winderlu 0
  • No Hotkeys/Shortcuts in BitmapView

    No Hotkeys/Shortcuts in BitmapView

    When you open an issue for a change/improvement/feature request:

    • [x] A description of the problem you're trying to solve, including why you think this is a problem
    • [x] (optional) Possible solution/fix/workaround

    In contrast to Charview, FontView and MetricsView there are not hotkeys available in BitmapView (for no obvious reason). After tracking down some of the past PRs, I found that #3637 implemented hotkeys for BitmapView. @skef tried to revive the PR in #3638. Charview, FontView and MetricsView seem to have gotten a menu overhaul, but BitmapView was left out for some reason (still old inline hotkey definition and no definitions in share/default).

    I would love to see hotkeys in BitmapView. Let me know if there are any workarounds or any help that is needed to make this happen. (I have not fully understood how the current hotkey system works)

    opened by eggix 0
  • unable to select Anchor type in Mac OSX 13.0.1

    unable to select Anchor type in Mac OSX 13.0.1

    • Provide a general summary of the issue in the Title above.
    • Before you open an issue, please check if a similar issue already exists or has been closed before.

    Important

    Mark with [x] to select. Leave as [ ] to unselect.

    When reporting a bug/issue:

    • [x] Screenshot
    • [x] The FontForge version 20220308 and the operating system you're using is Mac OSX 13.0.1
    • [x] Unable to select Anchor type either Mark or Base Glyph
    • [ ] Steps to reproduce the behavior
    • [ ] (optional) Possible solution/fix/workaround

    When you open an issue for a change/improvement/feature request:

    • [ ] A description of the problem you're trying to solve, including why you think this is a problem
    • [ ] If the feature changes current behavior, reasons why your solution is better
    • [ ] (optional) Possible solution/fix/workaround Screenshot 2022-11-24 at 2 31 13 AM
    Mac OS X 
    opened by appajid 1
  • Opening `NotoSansCJKsc-Regular.otf` with fontforge results in unexpected behaviors

    Opening `NotoSansCJKsc-Regular.otf` with fontforge results in unexpected behaviors

    • Provide a general summary of the issue in the Title above.
    • Before you open an issue, please check if a similar issue already exists or has been closed before.

    Important

    Mark with [x] to select. Leave as [ ] to unselect.

    When reporting a bug/issue:

    • [X] Screenshot
    • [X] The FontForge version and the operating system you're using
    • [X] The behavior you expect to see, and the actual behavior
    • [X] Steps to reproduce the behavior
    • [ ] (optional) Possible solution/fix/workaround

    When you open an issue for a change/improvement/feature request:

    • [X] A description of the problem you're trying to solve, including why you think this is a problem
    • [ ] If the feature changes current behavior, reasons why your solution is better
    • [ ] (optional) Possible solution/fix/workaround

    Before trying to reproduce the problem, I deleted the configuration files so that they couldn't interfere.

    rm -rf ~/.config/fontforge
    

    I downloaded the font NotoSansCJKsc-Regular.otf (permalink) from the repository googlefonts/noto-cjk.

    When I opened the file in fontforge, a window was shown (see screenshot below). I didn't press another key or toggled an option, this is the window that was shown by default.

    2022_11_18_22_18_02_445713552_-05

    Additionally, another window was opened and showed the following information (see screenshot below). The following code block contains the text shown in the screenshot.

    The following table(s) in the font have been ignored by FontForge
      Ignoring 'DSIG' digital signature table
      Ignoring 'VORG' vertical origin table
    No glyph with unicode U+05140 in font
    No glyph with unicode U+055c0 in font
    No glyph with unicode U+088cf in font
    No glyph with unicode U+096a3 in font
    

    2022_11_18_22_18_21_701192327_-05

    The first unexpected behavior that I noticed is that fontforge reports no glyph for the characters a (U+0061) and A (U+0041) even though this font does define glyphs for those characters. In the second screenshot below, I toggled the optionn View > Label Glyph By > Unicode. Here, I would expect to see the glyphs for those characters.

    send1 send2

    $ otfinfo -u "$HOME/Downloads/NotoSansCJKsc-Regular.otf" | grep '^uni0061 '
    
    uni0061 66
    
    $ otfinfo -u "$HOME/Downloads/NotoSansCJKsc-Regular.otf" | grep '^uni0041 '
    
    uni0041 34
    

    The second unexpected behavior that I noticed is that fontforge shows very few characters when using Encoding > Compact (hide unused glyphs) (see screenshot below) even though this font defines glyphs for other characters. Here, I would expect to see the others characters that exist in that font.

    2022_11_18_22_53_26_619940696_-05 2022_11_18_22_24_01_387905569_-05

    The third unexpected behavior that I noticed is that if I press View > Goto > Arabic, the characters that are shown changes. I needed to scroll to the top of the grid since Goto moves the cursor position to the selected section. As you can see in the screenshot below, the characters that are shown as the first of the elements are not the one that were there before.

    2022_11_18_23_00_28_044425305_-05

    If I press View > Goto > NKo, other characters are shown as the first elements of the grid.

    2022_11_18_23_02_17_079056758_-05

    If I press View > Goto > Optical Character Recognition, other characters are shown as the first elements of the grid.

    2022_11_18_23_09_36_497443836_-05

    Note that in the three screenshots, the scrollbar is at the top. This means that we are looking to the first characters in the grid and we can see that they are different. In my opinion, this is unexpected behavior because I tried using fontforge with other fonts (e.g. Ubuntu Mono) and I noticed that the only result that using the Goto option has is that it moves the cursor position to the beginning of the selected section, but here besides moving the cursor to the selected section, it hides and shows others characters.

    System information

    The following code block shows the version of fontforge I used for reproducing this issue.

    fontforge --version
    
    Copyright (c) 2000-2022. 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.
     Version: 20220308
     Based on sources from 2022-03-11 17:46 UTC-ML-D-GDK3.
    fontforge 20220308
    build date: 2022-03-11 17:46 UTC
    

    The following code block shows the output of providing fc-query with the filename NotoSansCJKsc-Regular.otf. An error is reported. I'm including this information in this issue because it might help to find the root cause of the unexpected behavior.

    otfinfo -g "$HOME/Downloads/NotoSansCJKsc-Regular.otf"
    echo $?
    
    otfinfo: /home/myusername/Downloads/NotoSansCJKsc-Regular.otf: CID-keyed fonts not supported
    1
    

    The following code block shows the output of providing fc-query with the filename NotoSansCJKsc-Regular.otf.

    fc-query "$HOME/Downloads/NotoSansCJKsc-Regular.otf"
    
    Pattern has 26 elts (size 32)
    	family: "Noto Sans CJK SC"(s)
    	familylang: "en"(s)
    	style: "Regular"(s)
    	stylelang: "en"(s)
    	fullname: "Noto Sans CJK SC"(s)
    	fullnamelang: "en"(s)
    	slant: 0(i)(s)
    	weight: 80(f)(s)
    	width: 100(f)(s)
    	foundry: "GOOG"(s)
    	file: "/home/myusername/Downloads/NotoSansCJKsc-Regular.otf"(s)
    	index: 0(i)(s)
    	outline: True(s)
    	scalable: True(s)
    	charset: 
    	0000: 00000000 ffffffff ffffffff 7fffffff 00000000 ffffffff ffffffff ffffffff
    	0001: 0c0f000f 00000f00 000cf198 00003f00 00040000 00018003 1fffe000 03000000
    	0002: 00000000 00000000 00020000 00000002 00000000 08000000 02000e80 00000c00
    	0003: 00001093 00000000 00000000 00000000 fffe0000 fffe03fb 000003ff 00000000
    	0004: ffff0002 ffffffff 0002ffff 00000000 00000000 00000000 00000000 00000000
    	0011: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	001e: 00000000 c0000000 00000000 00000000 00000000 ffffffff ffffffff 03ffffff
    	0020: 777f000c 1e2d00e7 00020384 00100000 00000000 00001a00 60000000 00000000
    	0021: 00488629 082048c6 00000000 0fff0fff 03ff0000 03000000 00151870 002003c0
    	0022: e42e8fed 20f07fe9 00001128 00ccccf7 03e00cfc 80000021 0c000000 00008000
    	0023: 010400e0 00000600 00000000 00000000 00000000 c0030000 0c005fff 00000000
    	0024: 00000000 00000008 00000000 ffffffff ffffffff ffffffff ffffffff ffffffff
    	0025: ffffffff ffffffff ffffffff ffffffff ffffffff 30ce0fff 000fdec3 0000807c
    	0026: f0c0c26f 00008000 00000007 3ffcffff 00000000 60000001 00000000 00000000
    	0027: 04080004 a0000000 00400001 ffc00000 000fffff 00000002 00000000 00000000
    	0029: 00000000 00300000 00000000 00000000 00000000 80000000 00000000 0c000000
    	002b: 040000e0 00000000 00000000 00000000 00200000 00000000 00000000 00000000
    	002e: 00000000 0c000000 00000000 00000000 fbffffff ffffffff ffffffff 000fffff
    	002f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 003fffff 0fff0000
    	0030: ffffffff ffffffff fffffffe ffffffff fe7fffff ffffffff ffffffff ffffffff
    	0031: ffffffe0 fffeffff ffffffff ffffffff ffff7fff 0fffffff ffffffff ffff000f
    	0032: 7fffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0033: ffffffff ffffefff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0034: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0035: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0036: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0037: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0038: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0039: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	003a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	003b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	003c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	003d: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	003e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	003f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0040: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0041: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0042: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0043: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0044: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0045: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0046: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0047: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0048: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0049: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	004a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	004b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	004c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	004d: ffffffff ffffffff ffffffff ffffffff ffffffff 003fffff 00000000 00000000
    	004e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	004f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0050: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0051: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0052: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0053: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0054: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0055: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0056: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0057: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0058: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0059: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	005a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	005b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	005c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	005d: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	005e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	005f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0060: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0061: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0062: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0063: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0064: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0065: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0066: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0067: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0068: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0069: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	006a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	006b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	006c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	006d: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	006e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	006f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0070: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0071: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0072: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0073: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0074: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0075: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0076: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0077: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0078: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0079: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	007a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	007b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	007c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	007d: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	007e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	007f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0080: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0081: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0082: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0083: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0084: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0085: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0086: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0087: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0088: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0089: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	008a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	008b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	008c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	008d: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	008e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	008f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0090: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0091: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0092: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0093: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0094: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0095: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0096: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0097: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0098: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	0099: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	009a: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	009b: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	009c: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	009d: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	009e: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	009f: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 0000ffff
    	00a9: 00000000 00000000 00000000 1fffffff 00000000 00000000 00000000 00000000
    	00ac: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00ad: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00ae: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00af: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b0: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b1: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b2: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b3: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b4: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b5: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b6: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b7: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b8: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00b9: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00ba: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00bb: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00bc: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00bd: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00be: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00bf: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c0: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c1: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c2: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c3: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c4: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c5: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c6: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c7: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c8: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00c9: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00ca: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00cb: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00cc: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00cd: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00ce: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00cf: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d0: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d1: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d2: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d3: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d4: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d5: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d6: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00d7: ffffffff ffffffff ffffffff ffffffff ffffffff ffff000f fffff87f 0fffffff
    	00f9: ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff
    	00fa: ffffffff ffffffff ffffffff 00003fff 00000000 00000000 00000000 00000000
    	00fb: 0000001f 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    	00fe: 03ff0000 ffff0000 fff7ffff 00000f7f 00000000 00000000 00000000 00000000
    	00ff: fffffffe ffffffff ffffffff ffffffff ffffffff 7fffffff 1cfcfcfc 00007f7f
    	01f1: ffff1fff ffffffff ffffffff ffff1fff ffffffff 00001fff 00000000 00000000
    	01f2: ffff0007 0fffffff 000301ff 00000000 00000000 00000000 00000000 00000000
    	0200: 00000800 40000012 00004040 00000100 001006c0 00010014 00823c00 00204000
    	0201: 01005000 00001000 01000000 00000010 00000000 00000a14 00100002 00040000
    	0202: 00181010 02000000 08000000 00300000 42004000 80800001 00000001 00000020
    	0203: 00000400 00000820 000000e2 c0020000 00000003 00200081 00000a00 12200000
    	0204: 80180000 00002000 00000400 00000020 00064080 00000008 00800000 50000000
    	0205: 00000200 80000000 00000080 00000000 00004000 000a0020 80610408 00000801
    	0206: 06220000 00010100 00400000 00400000 00000000 00000000 00000000 00001000
    	0207: 00004000 00020000 00008000 02000000 00000000 00000000 00000100 00000000
    	0208: 00000080 04001000 00000000 00080000 00000000 02000000 00200000 00000000
    	0209: 00404000 00000008 00100000 12000000 20000010 00000000 00000000 00000080
    	020a: 00020000 00000000 00010000 00008010 00000400 00100000 00082004 00000000
    	020b: 20002000 00000000 00000000 00000000 80008000 80800300 00000840 88000804
    	020c: 00002800 0c100001 0008000e 11800020 10402000 01200000 20798000 80002000
    	020d: 00200000 00060100 010073e0 d0128000 10400000 00040080 00000100 00000002
    	020e: 2043e610 00000000 00001000 0fe82010 21601000 00401c04 21800000 0f000000
    	020f: 20000000 08036040 80001000 00000010 00012000 10702000 80000000 00003c00
    	0210: 60100000 00000000 10008000 09e08000 20400100 80100000 00088383 00700010
    	0211: 00000000 28008000 00208120 00000000 00000081 00000000 02000000 00000000
    	0212: 00000002 30000000 00208000 18100000 00002000 00010300 00800000 60000018
    	0213: 0800003c 04400000 00000010 00600000 15004000 00000000 00000070 40002000
    	0214: 00480000 80000010 00340000 00006000 00800400 00400000 00000000 20000100
    	0215: 00000000 00000000 00000000 00800000 00500004 00000000 00800000 00000000
    	0216: 02080400 40000000 00000080 00000002 00040000 05100000 80280007 5c0001c0
    	0217: 00012040 1c0000c0 00800004 001bf000 00000000 003f0800 9e000088 1f608000
    	0218: 00000000 0e002701 40040021 0880001e c0000038 e0000007 03c20000 04000000
    	0219: 10270038 08000084 01000010 10000400 00400109 00000000 08000008 00080000
    	021a: 04000000 00102000 00000820 00000008 00000000 00000000 00000000 00000000
    	021b: 00000000 00000000 00000010 00000000 00000000 00000000 00000006 00000000
    	021c: 00000000 00000400 00400000 00010000 00000000 00001024 00000000 00000000
    	021d: 00000000 00002000 40080060 01000004 10050000 04c00002 00020400 02000801
    	021e: 10000000 20980008 00000000 00000000 00000200 00000110 00200100 00000000
    	021f: 40208000 00000000 10000000 00400400 40000000 00000002 00000000 04000100
    	0220: 00000000 00000000 00000220 40000000 04000000 00000000 00000080 10000000
    	0221: 00000000 00000400 08000000 0c080000 00000000 00000002 0000000a 00000000
    	0222: 01000100 00000000 00000000 10000000 00000000 00000000 00000000 00000000
    	0223: 40000000 00000022 00000000 00000000 00000000 20002000 00810000 04000000
    	0224: 00000000 00000000 00000000 00020020 00020800 10010000 00001202 00002002
    	0225: 08080000 00010000 00100000 00000000 00002000 40008000 00000000 00000000
    	0226: 18000200 00000800 00000000 04000100 01400000 00000000 00000000 00780000
    	0227: 88140000 00000400 00000000 00200000 00400002 00300000 00002000 00000000
    	0228: 00000008 00000000 88000000 00020001 00000000 00002800 00000002 00800000
    	0229: 00000000 02000040 00008000 00000880 00088001 00000000 00000000 00000000
    	022a: 00000000 00000000 00000000 00000040 00000000 01000000 00208000 00000140
    	022b: 00004000 80000004 00018048 00000400 00000000 00000040 00004400 00000000
    	022c: 20000000 010000d0 00221000 00008004 08000100 00840202 00000244 00000000
    	022d: 00040180 00000000 00001010 00000080 00202000 00800019 00000000 00004002
    	022e: 00002000 00400000 00000004 01000000 00000800 00080000 00000000 00008001
    	022f: 00000000 00000000 00000000 00100000 00000000 00000000 00001000 00000808
    	0230: 00000000 00080000 00000810 60000040 00004000 10800000 04000000 20000000
    	0231: 00000008 20000000 00000000 20000000 00000004 00480030 00000318 03a00400
    	0232: 00008000 001e8020 40400000 00000004 00000602 00003800 00040000 00000003
    	0233: 80000401 00000000 00000008 00040000 00000000 00100000 c42d1000 46300050
    	0234: 00000001 80000000 00030c00 00048020 00000000 00000000 00000000 00000030
    	0235: 02000000 00010000 04020000 00000080 12300010 08000000 0000e810 00080000
    	0236: 04800001 1f000000 82000081 00800000 40004000 04002040 80000000 00004000
    	0237: 10401008 8000a001 00000000 00000058 00000002 10000004 00e00004 80020080
    	0238: 00000000 24000010 00000000 00000000 00000000 00000000 00000000 00000000
    	0239: 00000000 00000000 00000000 00000000 00000000 00000000 00000004 00000000
    	023a: 00000000 00000000 00000000 00000000 01000000 00000080 0a000000 04004000
    	023b: 04000000 00000000 04000000 00000000 00000000 00000000 00000000 00000000
    	023c: 00000000 00000000 00000000 80000008 0f800000 40a00000 00000380 f0000000
    	023d: 01004001 00000000 08000001 40000000 00008000 3fc00000 00080000 07000008
    	023e: 00020040 0203f008 00000000 00000000 00000f00 82000000 00800000 1f800000
    	023f: 00000000 00200000 00000402 c0000002 00008007 00900000 00000021 0001f800
    	0240: 00020000 3e000000 00800800 00000000 00423820 00000000 00000200 00001002
    	0241: 02008018 80000000 90e04011 04800002 00000000 00201038 00002040 50000004
    	0242: 08004000 00000000 02400800 01c00000 00280010 80000020 00000602 04024000
    	0243: 04002000 00100000 00000100 0000003c 30401000 30000000 00010002 01040600
    	0244: 00000010 00600000 0c000000 00080000 00000180 12000000 00484000 00000000
    	0245: 00000020 00000002 00000000 01000000 00000000 00000000 00000100 00000000
    	0246: 01000000 00000600 00000000 00100020 00800000 00000020 00100000 00000000
    	0247: 00000040 00008020 00000000 00000000 00008000 00000000 00000000 00020001
    	0248: 00040000 00000008 00000000 00000000 00400004 00000000 00000000 880f0200
    	0249: 02c01003 c0188000 0000000f 8870000c 0010ff04 0f803a90 cc010020 0bc03028
    	024a: 002c4002 400007fe 2003e424 278200e0 00781000 1c0e00f0 80020681 00000204
    	024b: 00008000 00000000 00400000 0000c000 00000000 00000000 00000000 00200000
    	024c: 00400200 00000000 00000000 00000000 c0000000 00000000 02000200 00000000
    	024d: 00180040 00000000 00000000 00000000 00000000 01000000 00000000 00000c00
    	024e: 00004010 08800000 00010000 00000400 00000800 000000a0 00000000 00000000
    	024f: 00004000 00000000 10000000 00000000 04800044 01000200 00000004 00040000
    	0250: 00000000 00001000 00240400 00000000 20000000 00000000 00000000 00000000
    	0251: 00000000 00000804 00000100 60000000 00000000 00000200 00002000 000000e8
    	0252: 40000000 00000003 00011000 00000000 02000000 00000000 01000080 00000000
    	0253: 000a4000 40000000 00000000 00000000 00000000 00200000 00000000 40000000
    	0254: 02000000 0001c020 00000040 00005000 04004000 00000000 02000000 00000000
    	0255: 00004000 80260000 78000000 00000064 00008012 02000180 08200000 00000001
    	0256: 00000020 00200000 00020000 80000000 00200008 00000000 00000000 00400008
    	0257: 20000040 20000020 00000000 00060000 00000000 00100200 80000080 00000003
    	0258: 00000000 04040000 20800000 00140000 00000000 00000000 40000100 00000002
    	0259: 00000008 00000000 00400040 01000000 00000000 00001000 00101010 00000000
    	025a: 00000000 00000000 00100000 00000000 10200000 0000c000 00800000 00020218
    	025b: 00000000 00000000 00000000 00100000 00800200 001c0000 00000040 00000110
    	025c: 00000042 00000002 00000c00 00000030 00020000 00000010 00000003 40000000
    	025d: 00000000 00010001 00000008 00000000 02000000 02000002 00000000 00000000
    	025e: 00004000 00004000 00400210 00000024 0000000e 10000040 01800004 00000100
    	025f: 04000000 00000008 10000800 00000000 00000000 00000000 00100000 08000007
    	0260: 00801000 00000202 00800100 00000011 00800008 00000030 00000000 00002000
    	0261: 00000004 00000002 1e000000 00000000 00000000 00046000 20000000 00000000
    	0262: 00000000 00000006 01000000 00010c02 00000040 00000000 00010000 00000000
    	0263: 00000000 00200000 00021800 00000000 00000000 40000000 00000000 01200000
    	0264: 00070004 00000000 00000400 00000200 01002310 00000000 00000000 00000000
    	0265: 00040000 00000000 00000000 00040000 00000000 80002011 00000000 00000000
    	0266: 00040000 00000040 00000000 40400000 00000000 00238000 04000000 10000100
    	0267: 20400000 00000000 00000002 10000000 02000000 00180000 01001000 00000000
    	0268: 10000000 00000000 40000040 00004000 00080500 00000000 20000080 00000400
    	0269: 00024000 02000040 00020000 00008000 02000000 00200100 20000000 04040000
    	026a: 40000000 00106000 01060004 00000000 00001000 00800000 00000000 80000000
    	026b: 00280420 00000108 180f0000 00200000 20c00004 00080000 00000001 00800000
    	026c: 00000000 00000202 00000043 c0080000 40000007 21800010 20020009 00000000
    	026d: 00000000 000007fc 00020000 00100000 00000000 000040ff 10000000 00010c00
    	026e: 000400a1 00000000 0000003d 00844020 02000910 00000000 00ff0000 00000000
    	026f: 00000000 00000040 00000000 00180000 80100000 40000002 c0000000 01c00000
    	0270: 00004000 00000000 000c0800 00000000 00000100 0000e000 00042000 01110000
    	0271: 00003200 020000c0 00000010 00200030 00000000 00000000 00002000 00000000
    	0272: 08000000 00000000 00000000 00000080 00000821 00440000 00000000 00000040
    	0273: 00000000 00000000 00040000 00000000 04000000 00000000 0c000000 c0000000
    	0274: 00010000 00000004 00010200 00000000 00000050 20000000 00000000 00000000
    	0275: 00000000 00000000 00000000 00100000 00000000 00000008 00000000 e0000011
    	0276: 00301080 02060020 00e00000 00000000 00180010 00000000 00000000 00000000
    	0277: 0000c000 00600008 40040002 00000000 00000030 00000000 00001000 00000000
    	0278: 00000000 00000000 01000000 00010000 20000000 00040000 00000100 00000000
    	0279: 00000000 00000010 00000000 04000080 00000020 00100001 20000000 20000000
    	027a: 00004400 40000000 020a0000 02000000 00000010 60000000 00000000 00100000
    	027b: 01000844 07000000 00000100 00000020 00000000 40080000 00000080 00108000
    	027c: 00040000 10000000 00000000 00001000 00000000 01020000 00000020 00008000
    	027d: 00000000 00008000 00180000 00080040 01008010 20000001 10000000 00000000
    	027e: 00010000 00000000 0000a000 20000000 00000000 00008000 00000000 00000000
    	027f: 08000000 00004000 00000000 00000000 00000000 00800000 00000000 02000000
    	0280: 40000204 00000018 00000100 00000000 00010408 68000000 00000000 00100300
    	0281: 00000000 00004000 20008000 00008000 00000200 10008000 00000000 00000000
    	0282: 05000080 00000000 00400000 10800000 08000004 00000000 00002000 00080004
    	0283: 01000040 04008000 00000000 20002020 00000400 00000000 00002000 00400000
    	0284: 00041100 00000000 00200000 00081100 00000004 00000000 10000000 00000000
    	0285: 00000002 30000000 00000000 00001800 00000000 00000000 00000300 00100100
    	0286: 00000801 08000020 00000000 01000000 00200000 10040c00 01800000 04000040
    	0287: 00088000 00000000 00000000 00000000 00000000 00000000 00000000 00000001
    	0288: 00000010 00000800 00000000 00000000 00000000 00000000 00000000 00000000
    	0289: 00002000 00080000 00400340 40003910 00000380 1d000d00 50000001 1e00019a
    	028a: 40408000 00440220 06000ff8 00020000 1e00000e 00000000 e0007841 1000043f
    	028b: 00081000 0000b806 00015240 00001078 32008000 02000000 06900026 80209f80
    	028c: 30000208 0a010848 00128080 00000000 00000000 00000000 20042400 00000000
    	028d: 00010000 00100000 00000000 00020000 02000400 02000002 00000000 08000000
    	028e: 80808000 02400000 00000000 00000060 02800200 000c1000 02000000 00400880
    	028f: 00000000 00040000 00000000 00000000 00000000 00000000 00000020 01000000
    	0290: 00000000 00000000 00000000 02000000 00080900 00038000 00000001 00003030
    	0291: 00012000 10000000 48002000 00010000 10000000 00000100 00200000 00000808
    	0292: 00000000 00000000 00000000 00000000 00000000 00020001 00000000 00000000
    	0294: 20000000 80080001 00000100 00000000 00010000 00000000 46010000 000000a0
    	0295: 00000200 00000000 00000000 00000000 40000000 01010000 00808000 00100200
    	0296: 00000000 00000000 00000000 80000000 00000000 00000000 00000000 00010000
    	0297: 02000000 00040001 00010000 00000000 00000000 00000000 00100000 00000000
    	0298: 00010000 08000000 00800000 00000000 00000000 00000010 00020040 04020400
    	0299: 00000028 00008000 200003a0 00000400 20000000 00000000 00000208 00000000
    	029a: 00000000 00000100 00002000 00040000 00000000 00000000 00000000 00000000
    	029b: 00004020 00000000 00000000 00000000 00000000 00000000 00200000 00000000
    	029c: 00000000 00000000 00000000 00080000 00000000 00002000 00000000 00000000
    	029d: 00000000 40000000 04000800 10000000 09000000 00000000 08000000 00400000
    	029e: 00200040 20002000 00000200 00000100 00000400 00011000 08000018 01000200
    	029f: 00000000 00010008 00000000 40000000 00001008 00800000 40804000 00000000
    	02a0: 04100000 00008000 00000000 00000000 00000084 02000000 00000000 43082002
    	02a1: 00000080 00180008 00010000 00000000 000d0000 00300800 80000000 00200000
    	02a2: 00000000 00080001 00000000 00000000 80080000 24542000 80000000 80000000
    	02a3: 00000000 00000000 00020000 00000000 00001000 00000200 00000000 00002000
    	02a4: 00000000 00900000 08000000 00000000 00000000 00000000 80010000 00000000
    	02a5: 00000000 00000000 00000000 00000000 00000000 00000000 00000840 00020000
    	02a6: 04000006 00040000 08000400 00000010 00000000 00040200 00000000 00000000
    	02a7: 00000000 00000000 00000000 00000000 00000000 00000000 20000000 00000000
    	02a8: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 08000000
    	02a9: 00800000 00000000 00000000 00000000 00000000 00000000 00000000 00000040
    	02aa: 00000000 00410000 01000000 00000000 00000000 00000000 00000000 00000000
    	02ad: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 80000000
    	02af: 00000000 00000000 00000000 00000000 00000000 00000004 00000000 00000000
    	02b1: 00000000 01800180 00000000 00000000 00000000 00000000 00000000 00002000
    	02b3: 00000001 00000000 00000000 20048008 00000000 00000000 00000000 00000000
    	02b4: 00090010 00000000 00000000 00000002 00000000 00000000 00000000 02408080
    	02b5: 00006000 00400000 00000000 00000000 00000000 0008c000 00000000 00100080
    	02b6: 30000000 000015c0 00000000 00000000 00600200 00002000 00000000 00002000
    	02b7: 00000000 00000000 140a0040 10c00020 00104a04 20009200 01048220 12810040
    	02b8: 14802440 00000000 00000000 00000000 00000000 01000000 00000000 00000000
    	02ba: 00000000 00000000 00000000 00000000 00000000 00000000 00000080 00000000
    	02bb: 00000000 00000000 80000000 10000004 00000008 00000000 00000000 00000000
    	02bc: 08000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    	02bd: 00000000 00000000 00000000 00800000 00000080 00000000 00000000 00800000
    	02be: 00000000 00000200 00000000 00000000 00000000 00000000 00000000 00000000
    	02c0: 00000000 00000600 00000000 00000000 00000002 00000200 00000400 00000000
    	02c1: 00200000 00000000 00000000 00000000 00000000 00000000 02200000 02000000
    	02c2: 00000000 00000000 00000000 10000000 00000100 00000010 00000000 00000000
    	02c3: 00800000 00000000 08000000 00000012 00000040 00000000 00000000 00000000
    	02c4: 00000000 00000000 00000000 00000000 00900100 00000000 00000000 00000000
    	02c5: 00000000 00000000 00000004 00000000 00000000 00000000 00000000 00000000
    	02c6: 01080000 0000ba02 00000c04 00000000 00000000 00000000 00000000 00000000
    	02c7: 00000000 00009000 00000000 00000000 80000000 00000000 00080002 20000000
    	02c8: 00000000 00000000 00000000 00000000 00000000 00000000 42000000 00080002
    	02c9: 20000480 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    	02ca: 00004004 00000000 00000000 20000000 00000000 00000200 00000000 00000000
    	02cb: 00000000 8b026200 0c004402 11489210 00000000 80020000 00004001 00000000
    	02cc: 00000000 00000000 80400000 00000000 00000000 00000000 00000000 a0600000
    	02cd: 0000040c 00000000 00000000 00000000 8001a800 00006101 00200000 00000000
    	02ce: 05000000 00000448 00000000 10000000 00080100 00000000 00000000 00000000
    	02d5: 00000000 00000000 00000010 00000000 00000000 00000000 00000000 00000000
    	02e0: 00100000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    	02e2: 00000000 00000000 00000000 01000000 00000000 00000000 00000000 00000000
    	02e5: 00000000 00000000 00000000 00000200 00000000 00000000 00000000 00000000
    	02e6: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000400
    	02f8: 05208010 88081124 00040041 01882004 06100010 00441040 18082000 10002422
    	02f9: 04008808 00000003 000000a0 00001000 00300000 10040000 c0110000 00100000
    	0307: 00000000 00000200 00000000 00000000 00000000 00000000 00000000 00000000
    	030e: 00000000 00000000 00000000 00000000 00000000 00000000 60000000 00000000
    	0310: 00000000 00000000 00000000 00001000 00000000 00000000 00000000 00000000
    (s)
    	lang: aa|ay|bg|bi|bin|br|ch|da|de|en|es|eu|fj|fo|fur|fy|gd|gl|gn|gv|haw|ho|ia|ig|id|ie|io|is|it|ja|ki|ko|kum|lb|mg|nb|nds|nl|nn|no|nr|oc|om|os|pt|rm|ru|sel|sm|sma|smj|so|sq|ss|st|sv|sw|tl|to|ts|uz|vo|wa|xh|yap|zh-cn|zh-hk|zh-mo|zh-sg|zh-tw|zu|an|fil|ht|jv|kj|kwm|li|ms|na|ng|pap-an|pap-aw|rn|rw|sc|sg|sn|su|za(s)
    	fontversion: 131334(i)(s)
    	capability: "otlayout:DFLT otlayout:cyrl otlayout:grek otlayout:hang otlayout:hani otlayout:kana otlayout:latn"(s)
    	fontformat: "CFF"(s)
    	decorative: False(s)
    	postscriptname: "NotoSansCJKsc-Regular"(s)
    	color: False(s)
    	symbol: False(s)
    	variable: False(s)
    	fonthashint: False(s)
    	order: 0(i)(s)
    
    

    The question

    Is it possible to make fontforge not to have the three unexpected behaviors described in this issue when opening =NotoSansCJKsc-Regular.otf=?

    opened by rdrg109 2
Releases(20230101)
  • 20230101(Jan 1, 2023)

    What's Changed

    • Display the block name for reserved code points by @dscorbett in https://github.com/fontforge/fontforge/pull/4934
    • Don't respond to wheel scrolls for buttons/tabsets by @jtanx in https://github.com/fontforge/fontforge/pull/4940
    • gfilechooser.c: fix behaviour when changing file type by @jtanx in https://github.com/fontforge/fontforge/pull/4939
    • Better control-drag handling for line-adjacent points by @skef in https://github.com/fontforge/fontforge/pull/4945
    • Fix resolution of program root by @jtanx in https://github.com/fontforge/fontforge/pull/4956
    • Fix missed nonextcp edit by @skef in https://github.com/fontforge/fontforge/pull/4958
    • Support ToUnicode extraction from PDFs for Type3 fonts by @aidos in https://github.com/fontforge/fontforge/pull/4961
    • Add resource file and Windows application manifest by @jtanx in https://github.com/fontforge/fontforge/pull/4950
    • Fix name extraction for Type3 fonts from pdfs by @aidos in https://github.com/fontforge/fontforge/pull/4960
    • cmake: Install fonttools and pycontrib by @jtojnar in https://github.com/fontforge/fontforge/pull/4941
    • Fix InfoPlist.strings file name. by @MaddTheSane in https://github.com/fontforge/fontforge/pull/4962
    • Fix normalisation of absolute paths by @jtanx in https://github.com/fontforge/fontforge/pull/4963
    • Handle non-array cm transforms while reading graphics stream from PDFs by @aidos in https://github.com/fontforge/fontforge/pull/4965
    • Fix rect extraction from graphics stream for type3 fonts by @aidos in https://github.com/fontforge/fontforge/pull/4967
    • Change which lookup types are suggested for jamo features by @dscorbett in https://github.com/fontforge/fontforge/pull/4994
    • Better line handling in simplify by @skef in https://github.com/fontforge/fontforge/pull/4981
    • Use 'cmap' for Adobe-Identity-0 CID fonts by @dscorbett in https://github.com/fontforge/fontforge/pull/4993
    • Fix ChangeGlyph calcluations relative to new nonext/prevcp conventions by @skef in https://github.com/fontforge/fontforge/pull/4979
    • Docs composite glyph by @skinkie in https://github.com/fontforge/fontforge/pull/4971
    • FVSplineFontPieceMeal: Check that the clut is present before applying conversion by @jtanx in https://github.com/fontforge/fontforge/pull/4999
    • Expand the lists of languages and scripts by @dscorbett in https://github.com/fontforge/fontforge/pull/4982
    • Add flags to Python font.transform() by @skef in https://github.com/fontforge/fontforge/pull/4980
    • Support setting SplineChar width from importOutlines. by @frank-trampe in https://github.com/fontforge/fontforge/pull/5005
    • Undefine "extended" macro temporarily on GNU Hurd by @anthonyfok in https://github.com/fontforge/fontforge/pull/5047
    • Define PATH_MAX and MAXPATHLEN for GNU/Hurd compatibility by @anthonyfok in https://github.com/fontforge/fontforge/pull/5046
    • Fix Ascent & Descent Importing from SVG Font by @GroveDG in https://github.com/fontforge/fontforge/pull/5035
    • Prevent floating point shenanigans in loop termination (fixes #5012) by @skef in https://github.com/fontforge/fontforge/pull/5013
    • GroupFindLPos() in fontforgeexe/groupsdlg.c null pointer fix by @Omnikron13 in https://github.com/fontforge/fontforge/pull/5025
    • Fix drawing outside of expose calls by @jtanx in https://github.com/fontforge/fontforge/pull/4949
    • Fixed one more typo by @MahdiAljazairi in https://github.com/fontforge/fontforge/pull/5055
    • Upgrade GitHub Actions by @cclauss in https://github.com/fontforge/fontforge/pull/5014
    • Prevents memory underflow in GFileMimeType() in gutils/fsys.c by @Omnikron13 in https://github.com/fontforge/fontforge/pull/5018
    • Add a preference for saving editor state by @khaledhosny in https://github.com/fontforge/fontforge/pull/5044
    • splineutil.c: prevent hang on nan input by @jtanx in https://github.com/fontforge/fontforge/pull/5058
    • Shell-quote command sent to compressor in BDF by @ctrlcctrlv in https://github.com/fontforge/fontforge/pull/5060
    • Fix pfadecrypt bugs by @zjw in https://github.com/fontforge/fontforge/pull/5074
    • Include SFDUTF7 functions in libfontforge.so by @ctrlcctrlv in https://github.com/fontforge/fontforge/pull/5078
    • splinefit.c: Improvements to merge/simplify by @Alatius in https://github.com/fontforge/fontforge/pull/5095
    • RFE: [FEAT] When reference to non-existent glyphs are present in an OpenTy… by @rajeeshknambiar in https://github.com/fontforge/fontforge/pull/4097
    • docs: Python scripting - update font.mergeFeature with details of boo… by @rajeeshknambiar in https://github.com/fontforge/fontforge/pull/5107
    • Fix logic for CharString double-movetos after PR 4685 by @skef in https://github.com/fontforge/fontforge/pull/5120
    • Upgrade to Unicode 15.0.0 and fix and expand the script lists by @dscorbett in https://github.com/fontforge/fontforge/pull/5110
    • Fix broken link on scripting page by @bkmgit in https://github.com/fontforge/fontforge/pull/5135
    • Fix typo in man page by @h3xx in https://github.com/fontforge/fontforge/pull/5106
    • Fix painting behaviour of the ruler linger window and layer change dialog by @jtanx in https://github.com/fontforge/fontforge/pull/5163
    • fontinfo.c: fix crash from uninitialised other_pos by @jtanx in https://github.com/fontforge/fontforge/pull/5165
    • tottfgpos: Fix needless warning about 16-bit field by @Finii in https://github.com/fontforge/fontforge/pull/5136
    • ufo.c: emit guidelines key by @jtanx in https://github.com/fontforge/fontforge/pull/5166
    • fvmetrics.c: partial revert of 1033bc6 by @jtanx in https://github.com/fontforge/fontforge/pull/5167
    • Update tranlsations from Crowdin by @jtanx in https://github.com/fontforge/fontforge/pull/5168
    • Fix woff2 decoding by @jtanx in https://github.com/fontforge/fontforge/pull/5160
    • Record unicode cmap encodings when one glyph is in multiple slots by @skef in https://github.com/fontforge/fontforge/pull/4586

    New Contributors

    • @jtojnar made their first contribution in https://github.com/fontforge/fontforge/pull/4941
    • @skinkie made their first contribution in https://github.com/fontforge/fontforge/pull/4971
    • @anthonyfok made their first contribution in https://github.com/fontforge/fontforge/pull/5047
    • @GroveDG made their first contribution in https://github.com/fontforge/fontforge/pull/5035
    • @Omnikron13 made their first contribution in https://github.com/fontforge/fontforge/pull/5025
    • @MahdiAljazairi made their first contribution in https://github.com/fontforge/fontforge/pull/5055
    • @cclauss made their first contribution in https://github.com/fontforge/fontforge/pull/5014
    • @zjw made their first contribution in https://github.com/fontforge/fontforge/pull/5074
    • @rajeeshknambiar made their first contribution in https://github.com/fontforge/fontforge/pull/4097
    • @bkmgit made their first contribution in https://github.com/fontforge/fontforge/pull/5135
    • @h3xx made their first contribution in https://github.com/fontforge/fontforge/pull/5106

    Full Changelog: https://github.com/fontforge/fontforge/compare/20220308...20230101

    Source code(tar.gz)
    Source code(zip)
    FontForge-2023-01-01-a1dad3e-x86_64.AppImage(40.07 MB)
    FontForge-2023-01-01-a1dad3e.app.dmg(66.44 MB)
    FontForge-2023-01-01-Windows.exe(22.54 MB)
    fontforge-20230101.tar.xz(13.12 MB)
  • 20220308(Mar 8, 2022)

    This release contains numerous fixes and feature updates since the last release.

    Major updates:

    • Python plugin support (#4642, #4682, #4671) @skef
    • Overhauled resource/appearance management (#4704) @skef
    • Merge/Simplify improvements (#4567, #4697) @linusromer
    • Updated Unicode support to Unicode 14.0.0, with nameslist functionality now directly integrated. (#4810) @jtanx
    • Add Points Of Inflection / Balance / Harmonize (#4900) @linusromer
    • Mac bundle/startup fixes (#4827) @jtanx
    • Language system tag list/script range/feature list updates (#4561, #4852, #4854, #4855) @dscorbett
    • You can now substitute glyph(s) by NULL (#4619) @ctrlcctrlv

    Changes to default behavior:

    • Reserved Font Names no longer written by default when adding SIL OFL to a font (#4531) @ctrlcctrlv
    • UFO include path is altered, please update your fonts if needed (#4631) @ctrlcctrlv

    Build changes:

    • The minimum supported Python version is now Python 3.6
    • Libuninameslist is no longer used or required
    • FontForge is now compiled with -Wall by default
    • Cidmaps are now bundled
    Source code(tar.gz)
    Source code(zip)
    FontForge-2022-03-08-582bd41-x86_64.AppImage(38.04 MB)
    FontForge-2022-03-08-74e2eca.app.dmg(60.71 MB)
    FontForge-2022-03-08-Windows.exe(21.03 MB)
    fontforge-20220308.tar.xz(13.08 MB)
  • 20201107(Nov 7, 2020)

  • 20200314(Mar 14, 2020)

    Significant changes include the following.

    • FontForge now has much improved stroke expansion functionality. The main change is that it actually works most of the time. New features include support for arbitrary convex nibs and the miter-clip and arc join styles from SVG 2. All functionality is accessible from the Python and native APIs. (By @skef.)
    • Remove overlap handles certain important edge cases better. (By @skef and @frank-trampe.)
    • The Python API now has a function called genericGlyphChange that matches the "Change Glyph" command in the GUI. See #4133 for more details. (By @skef.)
    • The Python API now has functions for getting Unicode script and for interrogating glyph boundaries. (By @ctrlcctrlv.)
    • One can now use text flags (rather than just numerical flags) when opening a font file via the Python API. (By @skef.)
    • UFO import now outputs the note field properly. (By @skef.)
    • SVG import is much more robust. (By @skef.)
    • We have dropped most gnulib and autotools logic in favor of CMake, which dramatically simplifies the build system and just as dramatically improves build time. (By @jtanx.)
    • As part of the switch to CMake, per the deprecation of Python 2, and per the lack of objections to the proposal on the mailing list, we have dropped support for building FontForge with Python 2 support. The non-build-system Python 2 code remains, but it is neither tested nor maintained nor supported and is likely to follow a trajectory of decay and then removal.
    • Documentation is now rendered in Sphinx, which makes maintenance and improvement easier. (By @jtanx.)
    • Translations now happen on crowdin, which makes contributions easier. (By @jtanx.)
    • We got such a contribution for Croatian. (By @milotype.)
    • Character view point coloring is more consistent, and preview fills support transparency. (By @skef.)
    • The user can now move and close tabs in the character view. (By @ctrlcctrlv.)
    • The metrics view now allows for entry of negative kerning values and runs a bit more smoothly. (By @ctrlcctrlv.)
    • There is now a warning when a user is about to discard an unsaved script. (By @ctrlcctrlv.)
    • We fixed bugs all over, as always, with particular attention given to the metrics view, Python, Spiro, and high-resolution displays.

    Notes on build system changes:

    • libgutils and libgunicode have been combined into libfontforge
    • libgdraw and libfontforgeexe have been combined into the fontforge executable itself
    • No development files are installed (headers, or pkg-config). This is because we do not provide a stable API or ABI to work against, nor are the headers actually well configured to be used externally. We are also not aware of any maintained product that compiles against FontForge itself.
    Source code(tar.gz)
    Source code(zip)
    FontForge-2020-03-14-67687b0-x86_64.AppImage(35.43 MB)
    FontForge-2020-03-14-67687b0.app.dmg(30.00 MB)
    FontForge-2020-03-14-Windows.exe(21.74 MB)
    fontforge-20200314.tar.xz(13.20 MB)
  • 20190801(Aug 1, 2019)

    Along with the usual bugfixes, there have been a couple of new features worth calling out:

    • Added Croatian translation
    • Added user decompositions
    • New graphic for the splash/about screen
    • Images embedded in SFDs are now serialised as PNGs
      • This is enabled by default, but may be turned off with the 'WritePNGInSFD' option.
      • A new tag is used to identify this mode; 'Image2', instead of 'Image'
      • This requires FontForge to be compiled with libpng support. If not compiled with libpng, FontForge will revert to the old method of serialising RLE encoded raw images.

    As part of an ongoing effort to clean up the code base, there have additionally been multiple build system changes:

    • Python 2 support is deprecated. It is strongly recommended to build with Python 3 support. Python 2 support will be removed in a future release.
    • Both the Windows and Mac builds are now built with Python 3 instead of Python 2.
    • The minimum supported version for the Mac build is now MacOS Sierra (10.12)
    • FontForge no longer uses gnulib
    • collab support has been removed
    • The build system now expects libuninameslist to be present, and will fail if it is not found. Building without libuninameslist must be explcititly specified using --without-libuninameslist
    Source code(tar.gz)
    Source code(zip)
    FontForge-2019-08-01-ac635b8-x86_64.AppImage(37.74 MB)
    FontForge-2019-08-01-ac635b8.app.dmg(33.50 MB)
    FontForge-2019-08-01-Windows.exe(16.63 MB)
    fontforge-20190801.tar.gz(19.80 MB)
  • 20190413(Apr 13, 2019)

  • 20190317(Mar 17, 2019)

    This release, the first since 2017, includes countless small bug fixes and a few significant features.

    • Complete GDK support, enabled by default on Windows and Macintosh, from @jtanx.
    • Enhanced UFO 3 support, with separate import/export paths for UFO 2 and UFO 3, from @frank-trampe. See the technical bulletin here for more information.
    • Improved feature file support, from @skef and @khaledhosny.
    • WOFF2 support, from @jtanx.
    • Unicode 12.1.0 support, from @JoesCat.
    • Extended Python interfaces, from @skef.
    Source code(tar.gz)
    Source code(zip)
    FontForge-2019-03-17-1d421d1-x86_64.AppImage(37.42 MB)
    FontForge-2019-03-17-1d421d1.app.dmg(32.71 MB)
    FontForge-2019-03-17-Windows.exe(15.10 MB)
    fontforge-20190317.tar.gz(21.70 MB)
  • 20170731(Jul 31, 2017)

  • 20161005(Oct 4, 2016)

    This release introduces a new icon set, new functionality for custom icon selection graphics, support for GlyphOrderAndAliasDB files, and support for Unicode 9.0.

    It also fixes a number of small bugs relating to certain bitmap typefaces, stroke expansion, handling of CID ranges, and the user interface.

    There are two tags and package sets. 20161004 is the original release, and 20161005 adds support for Ubuntu 16.04 and 16.10.

    The Debian/Ubuntu packages are on Launchpad.

    Source code(tar.gz)
    Source code(zip)
    FontForge-2016-10-04-Windows.exe(17.72 MB)
    FontForge-20161004-Mac.zip(81.10 MB)
    fontforge-20161004.spec(5.29 KB)
    fontforge-20161004.tar.gz(123.34 MB)
    fontforge-20161005.spec(5.29 KB)
    fontforge-20161005.tar.gz(123.50 MB)
    fontforge-dist-20161004.tar.gz(20.01 MB)
  • 20160404(Apr 5, 2016)

    This fixes a number of bugs and crashes and adds a few small features. Most importantly, this release comes with a working Macintosh package.

    Mac users must be running Mac OS X version 10.10 or later.

    Please consider supporting ongoing development with a donation.

    Source code(tar.gz)
    Source code(zip)
    FontForge-2016-04-04-Mac.app.dmg.zip(93.33 MB)
    FontForge-2016-04-04-Windows-r2.exe(15.82 MB)
    FontForge-2016-04-04-Windows.exe(15.82 MB)
    fontforge-20160404.spec(5.29 KB)
    fontforge-20160404.tar.gz(120.70 MB)
    fontforge-dist-20160404.tar.gz(19.93 MB)
  • 20160403(Apr 3, 2016)

  • 20150824(Aug 25, 2015)

    This fixes a few bugs, including some in U. F. O. kerning classes and FreeType rasterization, and adds a Korean translation.

    Packages for Debian and Ubuntu are available on Launchpad.

    Note that, for currently unknown reasons, the Macintosh build published here quits immediately after launching from the Finder. Launch it from the Terminal (/Applications/FontForge.app/Contents/MacOS/FontForge) instead.

    Source code(tar.gz)
    Source code(zip)
    Fontforge-2015-08-24-Terminal_only.dmg(66.25 MB)
    FontForge-2015-08-24-Windows.exe(15.73 MB)
    fontforge-20150824.tar.gz(19.83 MB)
  • 20150430(Apr 30, 2015)

  • 20150330(Mar 30, 2015)

  • 20150228(Feb 28, 2015)

    This release fixes a few small problems and crashes and adds support for fine point adjustment.

    • Windows package
    • Mac package
    • Mac Homebrew can also install this release
    • Ubuntu and Debian packages are available from https://launchpad.net/~fontforge/+archive/ubuntu/fontforge
    • Source package fontforge-20150228.tar.gz and fontforge-20150228.spec file below are designed to include all dependencies not available from the standard repositories of the target system since some build platforms block Internet access (but allow local access to package repositories). If the GitHub tarball (or sources from git) compile properly in your target build system, there is no compelling reason to use this release tarball. gnulib is enormous and is available in standard repositories, but included here because the versions available from most package repositories omit certain features that FontForge uses.
    Source code(tar.gz)
    Source code(zip)
    fontforge-20150228.spec(5.29 KB)
    fontforge-20150228.tar.gz(117.26 MB)
    FontForge.20150304.app.dmg(126.05 MB)
    FontForgeSetup-2015-02-28.exe(15.65 MB)
  • 20141230(Dec 31, 2014)

    This fixes a few bugs and quirks and adds a few user interface enhancements.

    The binary package for Windows is attached. A 2nd release version was made to ensure it runs on Windows XP.

    The binary package for Mac is attached, fixing a major slowness problem in the previous release. Due to odd (but nonetheless very bad) problems using Carbon (which Apple has decided not to make available in a 64-bit version) in 64-bit mode on later versions of Mac OS X, FontForge no longer uses the Carbon event loop and is thus unable to accept file-drop events on Macintosh. See #1956 and #2004 for more information.

    Binaries (and source packages) for Ubuntu and Debian are available from the official FontForge Launchpad archive here.

    The source package for Red Hat is attached. Despite the generic name, it is only for Red Hat. Binaries for Macintosh ought to arrive in the next few days.

    Source code(tar.gz)
    Source code(zip)
    FontForge-2014-12-31-Windows-r2.exe(14.71 MB)
    fontforge-20141230.spec(5.29 KB)
    fontforge-20141230.tar.gz(252.39 MB)
    FontForge-2015-01-07-Mac.app.dmg(126.08 MB)
  • 20141126(Nov 27, 2014)

    • Mac: Download App
    • Windows: Download Installer
    • Ubuntu: Official Project PPA
    • Source Code: A green-colored button below links to a tarball that is prepared for building RPMs in build systems that don't support ./bootstrap; the grey-colored buttons link to a ZIP and a tarball that are simply the state of the git repo at the time of the release.

    As always, this release fixes a large number of bugs and user interface quirks.

    This release includes enhanced support for using native U. F. O. data structures (in groups.plist and kerning.plist) for exporting class kerning. This functionality was previously only easily addressable for data imported from a U. F. O. that used those data structures. There is now a check box on the generate fonts options box for this.

    It is worth noting that native U. F. O. kerning assumes one unified look-up and has no way to deal with multiple scripts or subtables, so storing information in this way might cause an undesirable loss of information. As a result, we have left exporting this information to the feature file as the default behavior.

    This release also adds theming support for many user interface parameters.

    Source code(tar.gz)
    Source code(zip)
    FontForge-2014-11-26-0425-Mac.zip(92.27 MB)
    fontforge-2014-11-26-Unix-Source.tar.gz(119.22 MB)
    FontForge-2014-11-26-Windows.exe(14.70 MB)
    fontforge-2014-11-26.spec(5.29 KB)
  • 20141014(Oct 14, 2014)

    • Mac: Download App
    • Windows: Download Installer
    • Ubuntu: Official Project PPA
    • Fedora: RPM Packages below, repo coming soon.
    • Source Code: A green-colored button below links to a tarball that is prepared for building RPMs in build systems that don't support ./bootstrap; the grey-colored buttons link to a ZIP and a tarball that are simply the state of the git repo at the time of the release.

    This 'stable' release was discussed on Github Issues (pre-release, post-release) and on the FontForge users mailing list.

    Source code(tar.gz)
    Source code(zip)
    fontforge-20141014-1.x86_64.rpm(19.75 KB)
    fontforge-20141014.spec(5.29 KB)
    fontforge-20141014.tar.gz(117.88 MB)
    fontforge-common-20141014-1.x86_64.rpm(3.45 MB)
    fontforge-debuginfo-20141014-1.x86_64.rpm(11.56 KB)
    fontforge-devel-20141014-1.x86_64.rpm(136.40 KB)
    FontForge-Mac-2014-10-14.zip(89.99 MB)
    FontForgeSetup-18-10-2014_prerelease2.exe(14.68 MB)
    libfontforge1-20141014-1.x86_64.rpm(7.02 MB)
    libgdraw4-20141014-1.x86_64.rpm(821.54 KB)
    python-fontforge-20141014-1.x86_64.rpm(7.88 KB)
  • 20140813(Aug 29, 2014)

    This was a pre-release for what became the 20141014 release. It included many crash fixes and improved UFO support, but the UFO support needed another 8 weeks of work.

    Source code(tar.gz)
    Source code(zip)
  • 2.0.20140101(Jan 2, 2014)

    FontForge, version 2.0.20140101

    A font editor.

    Developed primarily by George Williams as PfaEdit until 2004, and now known as FontForge. FontForge is free software available for several operating systems and localized into several languages.

    This point release introduces well over 1000 updates, bug fixes, patches and improvements to FontForge since the last stable release of 20120731-b. For a detailed list, please check the Git/SVN history for all improvements since 20120731 until now. For a quick summary of major points of interest are:

    1. Large overhaul of the Compile Make build system was moved over into Autoconf with much code updated to use this method of building FontForge - this is still a work in progress.
    2. Large number of hard-to-find bugs and errors found and resolved.
    3. Large review of bit mapping - with a more graceful/tolerant fail mode from errors.
    4. Many improvements added for Python - Enabled for Python 2.x or Python 3.x
    5. Many improvements added to Native Scripting.
    6. File recovery added.
    7. New features added, such as ReadLine, File Collaboration, and GUI options.
    8. Several Languages updated.
    9. New Tango Theme added, or you can continue to use the original 2012 GUI Theme.
    10. Command-line options updated to be more familiar for open source such as making use of '--' or '-'
    11. Many fixes to accommodate the new Macs.
    12. Separation of libfontforgeexe and FontForge into it's own directory.
    13. Make use of web-based code-checkers, such as travis ci during development.

    TODO: Lots! ...but for a brief summary...

    1. FontForge is a program developed by George Williams, who developed a majority of code, however, it is still good to seek and bring-in past Authors and Developers who also helped make FontForge what it is now (but got missed in file AUTHORS). Currently, this list contains new Authors from 20120731-b up to 20140101, and also past Authors/Developers that helped improve FontForge from beginning up to 20030731. This still leaves a large gap of 10 years of GIT/SVN comments to search through for missed Authors and Developers.
    2. The new Make build system is nice, but still needs work to make it work smoothly with functions such as make dist, make distcheck, make check, and more, plus has lost some functionality which was in within 20120731-b
    3. Bring in features that were in 20120731-b which are not working at the moment, such as hotplugin of libraries.
    4. Go through a lot of code to make it fault tolerant. Not so much an issue seen from the command-line, but quickly recognized on the GUI as crashes, seg faults, and other undesirable behavior.
    5. Update FontForge to recognize and work with new/recent and/or updated font types, plus enable features not available at this time.
    Source code(tar.gz)
    Source code(zip)
Owner
Free (libre) font editor for Windows, Mac OS X and GNU+Linux
null
A terminal-based, mouse-driven BDF (bitmap) font editor.

bdfedit A terminal-based, mouse-driven BDF font editor. Capable of reading, writing, and editing bitmap font files fully within the terminal, and enti

Andrew 7 Dec 24, 2022
Simple text editor in C++ - Simple editor built upon kilo editor.

GUMBO editor Simple editor built upon kilo editor. Still big work in progress although this is just fun side project to learn more C/C++. From 0.0.2->

Filip Ivanušec 3 Sep 15, 2021
Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on OpenGL 1.x-4.x supporting Windows, Linux and Mac OS X.

Visualization Library 2.2 Gallery About Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the in

Michele 313 Nov 8, 2022
Oxygine is C++ engine and framework for 2D games on iOS, Android, Windows, Linux and Mac

BUILD AND RUN See oxygine-framework/readme/ folder. It has instructions on how to build and run oxygine on different platforms. Wiki available at http

Oxygine 735 Dec 23, 2022
Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactively receive/edit/monitor data and send commands to an embedded system via the serial bus

See wiki for full documentation Serial Data Monitor Description Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactivel

monnoliv 4 Oct 29, 2021
Windscribe 2.0 desktop client for Windows, Mac and Linux

Windscribe 2.0 Desktop Application This repo contains the complete source code for the Windscribe 2.0 app. This includes installer, service/helper, ba

Windscribe 362 Jan 3, 2023
Drmemory - Memory Debugger for Windows, Linux, Mac, and Android

Dr. Memory: the memory debugger About Dr. Memory Dr. Memory is a memory monitoring tool capable of identifying memory-related programming errors such

DynamoRIO 2.1k Dec 28, 2022
Qt5 "Hello, world!" app for Linux, BSD, Windows, Mac.

hello world in qt5 Contributions in all forms (code, bug reports, community engagement, localization, etc) are warmly welcomed. Development activity I

Jakob Flierl 2 Jan 26, 2022
Allows to swap the Fn key and left Control key and other tweaks on Macbook Pro and Apple keyboards in GNU/Linux

A patched hid-apple kernel module UPDATE August 2020: swap_fn_leftctrl is now built-in in Linux 5.8 ?? UPDATE Jun 2020: New feature added (swap_fn_f13

Zakhar Semenov 305 Dec 29, 2022
A FREE Windows C development course where we will learn the Win32API and reverse engineer each step utilizing IDA Free in both an x86 and x64 environment.

FREE Reverse Engineering Self-Study Course HERE Hacking Windows The book and code repo for the FREE Hacking Windows book by Kevin Thomas. FREE Book Do

Kevin Thomas 1.1k Dec 27, 2022
Make your Pop!_OS (Ubuntu Linux) shortcut key experience more like Mac OS

Meta Mac Enables a Mac OS-like shortcut key experience on Pop!_OS (and most Ubuntu-based Linux distros). Installation Download or git clone this repos

Duane Johnson 14 Dec 31, 2022
emily - GNU/Linux applications and scripts launcher.

emily emily - GNU/Linux applications and scripts launcher. For What? Firstly emily has been maden as a replacement for i3-dmenu, because i don't like

null 1 May 13, 2022
A Mac like Control Center for Windows

A Mac like Control Center for Windows.

LoadingName 1 Mar 8, 2022
A FLOSS implementation of the ground breaking MacBook camera system for GNU/Linux

GNU/Notch Tired of your friends making fun of your dinosaur laptop? Can't afford anything but Free Software? Fret not for this simple X11 based progra

null 3 Jun 1, 2022
Simple Fetch Software for GNU/Linux

ponyfetch Simple Fetch Software for GNU/Linux Current Version: 1.2 Whats new in 1.2? You can now change the ASCII art and the labels used in ponyfetch

FlutterHeart the Alicorn 3 Nov 22, 2021
Volatile ELF payloads generator with Metasploit integrations for testing GNU/Linux ecosystems against low-level threats

Revenant Intro This tool combines SCC runtime, rofi, Msfvenom, Ngrok and a dynamic template processor, offering an easy to use interface for compiling

Red Code Labs 53 Aug 23, 2022
Tiny implementation of the GNU/Linux CGroupFS (sans resource controllers) as a PUFFS or FUSE filesystem for BSD platforms

CGrpFS CGrpFS is a tiny implementation of the GNU/Linux CGroup filesystem for BSD platforms. It takes the form of a either a PUFFS or FUSE filesystem,

null 13 Nov 8, 2022
Implements a complete GNU/Linux program

Linux-app Implements a complete GNU/Linux program The example program is part of a system for monitoring a running GNU/Linux system. It includes these

Spoorthi Naik 1 Jun 19, 2022
Portable, Noto-powered font-rendering abstraction based on FreeType and Raqm

Mechascribe Mechascribe is still under construction and nothing is functional yet. Mechascribe is a text rendering abstraction trying to support as mu

null 4 Jan 27, 2022