Provides a standard formatting so that there are meaningful diffs in version control rather than formatting noise.
Examples of formatting applied by ufoNormalizer include:
- Changing floating-point numbers to integers where it doesn't alter the value (e.g.
- Rounding floating-point numbers to 10 digits
- Formatting XML with tabs rather than spaces
Usage in RoboFont
RoboFont comes with ufoNormalizer pre-installed, and you can set a preference to normalize UFOs on save.
Simply open the Scripting Window and run the following code:
from mojo.UI import setDefault, getDefault setDefault("shouldNormalizeOnSave", True) print("shouldNormalizeOnSave is set to " + str(getDefault("shouldNormalizeOnSave")))
pip install --upgrade ufonormalizer
Use on the command line:
To view all arguments, run:
Note: if you are working on a UFO within RoboFont and run ufoNormalizer on that UFO, RoboFont will notify you that the UFO has been updated externally. Simply accept this by selecting "Update."
Automating via Git hooks
Beyond basic command-line usage, ufoNormalizer can be used in an automated manner.
Of course, you can automate it to run from a shell script or a Python script. One useful possibility is using it within a Git hook.
Git hooks are scripts that Git executes before or after events such as: commit, push, and receive. Git hooks are a built-in feature - no need to download anything. Git hooks are run locally. – from Git Hooks
It's easy to set up a git hook that will normalize ufos in a project immediately before each commit, ensuring that you only ever commit clean UFO data.
In a Git project, navigate to
/.git/hooks and replace
pre-commit.sample with the following code, then remove the file extension:
#!/bin/sh # A hook script to verify what is about to be committed. # Called by "git commit" with no arguments. # # Uses bash syntax to call arguments as needed. # # To enable this hook, save this to <your_project>/.git/hooks/pre-commit (with no file extension) set -e for ufo in ./*.ufo; do ufonormalizer "$ufo" done
Now, each time you commit, all
.ufos in your Git project will be normalized before being recorded by Git.
Because this hook is setup within the immediate project, this configuration will only apply to the immediate project. You will need to update each project to use this Git hook if you wish to normalize UFOs elsewhere. If you want this hook to be added to all future git projects, you can configure a global git template. However, this approach probably doesn't make sense if you also work on projects that don't involve UFO files.