LettError / glyphNameFormatter

Generate list of glyphnames from unicode names.
BSD 3-Clause "New" or "Revised" License
75 stars 9 forks source link

GlyphNameFormatter

GlyphNameFormatter Banner

A system for generating glyph name lists from official Unicode data.

Glyph Name Formatted Unicode List Release 0.6 (ɣNUFL)

download

Contributions

This release is not meant to be final. Many ranges have basic coverage but could be improved. Some Unicode names are wrong and then get translated wrong. The list does not claim authority or completeness.

If you find things wrong and would like to share this insight, we're accepting comments, open an issue. If you see how the system works we will also gladly consider pull requests. If you would like to see certain ranges supported, let us know.

This version acknowledges the help by Frederik, Just, Adam, Daniel, Bahman and Ilya.

Using conversion functions

After all the processing is done, the lists can be used with a couple of convenient functions.

Naming guidelines

Generating lists

Run data/buildFlatUnicodeList.py to download the current (or previous) data from Unicode.org. This is a large file. This script downloads and processes the data to a more practical size, stored in data/flatUnicode.txt.

Run data/buildJoiningTypesList.py to download the current data from Unicode.org. This stored in a separate file, data/joiningTypes.txt

Run exporters/exportFlatLists.py to generate a text file with pairs, exclusively with the available range processors. The results are in names/glyphNamesToUnicode.txt

Run test/buildRanges.py to make all the name lists. They will be deposited in names/ranges. There will be other methods and other lists, but for now this is the place to make things. You can also run each of the range scripts in rangeProcessors/ and they will print a nice readable table with the processed name, unicode value, original name. There is also a column for names from the Adobe AGL if it has a different name for that entry.

Run exporters/analyseConflicts.py to get an overview of all name clashes and how they are addressed. The results are in a text file in data/conflict.txt

Range Processors

Given the rather large task of handling thousands of exceptions and tweaks, the package has a modules that each take care of a single unicode range. This makes it easier to work in different places at once. Also testing is easier.

The GlyphName class is initialised with a single unicode number. It then finds the unicode name. Based on the range name it tries to find a module with a corresponding name in rangeProcessors/. If it finds such a module it will run the process() function and apply it. The process() function will try to transform the unicode name by editing or replacing parts of the name.

Each range processor has a handy debugginh print function that will show an overview of the unicode value, the generated name, a comparison with the AGD name and the unicode names.

On the internals