xref: /aosp_15_r20/external/fonttools/README.rst (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1*e1fe3e4aSElliott Hughes|CI Build Status| |Coverage Status| |PyPI| |Gitter Chat|
2*e1fe3e4aSElliott Hughes
3*e1fe3e4aSElliott HughesWhat is this?
4*e1fe3e4aSElliott Hughes~~~~~~~~~~~~~
5*e1fe3e4aSElliott Hughes
6*e1fe3e4aSElliott Hughes| fontTools is a library for manipulating fonts, written in Python. The
7*e1fe3e4aSElliott Hughes  project includes the TTX tool, that can convert TrueType and OpenType
8*e1fe3e4aSElliott Hughes  fonts to and from an XML text format, which is also called TTX. It
9*e1fe3e4aSElliott Hughes  supports TrueType, OpenType, AFM and to an extent Type 1 and some
10*e1fe3e4aSElliott Hughes  Mac-specific formats. The project has an `MIT open-source
11*e1fe3e4aSElliott Hughes  licence <LICENSE>`__.
12*e1fe3e4aSElliott Hughes| Among other things this means you can use it free of charge.
13*e1fe3e4aSElliott Hughes
14*e1fe3e4aSElliott Hughes`User documentation <https://fonttools.readthedocs.io/en/latest/>`_ and
15*e1fe3e4aSElliott Hughes`developer documentation <https://fonttools.readthedocs.io/en/latest/developer.html>`_
16*e1fe3e4aSElliott Hughesare available at `Read the Docs <https://fonttools.readthedocs.io/>`_.
17*e1fe3e4aSElliott Hughes
18*e1fe3e4aSElliott HughesInstallation
19*e1fe3e4aSElliott Hughes~~~~~~~~~~~~
20*e1fe3e4aSElliott Hughes
21*e1fe3e4aSElliott HughesFontTools requires `Python <http://www.python.org/download/>`__ 3.8
22*e1fe3e4aSElliott Hughesor later. We try to follow the same schedule of minimum Python version support as
23*e1fe3e4aSElliott HughesNumPy (see `NEP 29 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__).
24*e1fe3e4aSElliott Hughes
25*e1fe3e4aSElliott HughesThe package is listed in the Python Package Index (PyPI), so you can
26*e1fe3e4aSElliott Hughesinstall it with `pip <https://pip.pypa.io>`__:
27*e1fe3e4aSElliott Hughes
28*e1fe3e4aSElliott Hughes.. code:: sh
29*e1fe3e4aSElliott Hughes
30*e1fe3e4aSElliott Hughes    pip install fonttools
31*e1fe3e4aSElliott Hughes
32*e1fe3e4aSElliott HughesIf you would like to contribute to its development, you can clone the
33*e1fe3e4aSElliott Hughesrepository from GitHub, install the package in 'editable' mode and
34*e1fe3e4aSElliott Hughesmodify the source code in place. We recommend creating a virtual
35*e1fe3e4aSElliott Hughesenvironment, using `virtualenv <https://virtualenv.pypa.io>`__ or
36*e1fe3e4aSElliott HughesPython 3 `venv <https://docs.python.org/3/library/venv.html>`__ module.
37*e1fe3e4aSElliott Hughes
38*e1fe3e4aSElliott Hughes.. code:: sh
39*e1fe3e4aSElliott Hughes
40*e1fe3e4aSElliott Hughes    # download the source code to 'fonttools' folder
41*e1fe3e4aSElliott Hughes    git clone https://github.com/fonttools/fonttools.git
42*e1fe3e4aSElliott Hughes    cd fonttools
43*e1fe3e4aSElliott Hughes
44*e1fe3e4aSElliott Hughes    # create new virtual environment called e.g. 'fonttools-venv', or anything you like
45*e1fe3e4aSElliott Hughes    python -m virtualenv fonttools-venv
46*e1fe3e4aSElliott Hughes
47*e1fe3e4aSElliott Hughes    # source the `activate` shell script to enter the environment (Unix-like); to exit, just type `deactivate`
48*e1fe3e4aSElliott Hughes    . fonttools-venv/bin/activate
49*e1fe3e4aSElliott Hughes
50*e1fe3e4aSElliott Hughes    # to activate the virtual environment in Windows `cmd.exe`, do
51*e1fe3e4aSElliott Hughes    fonttools-venv\Scripts\activate.bat
52*e1fe3e4aSElliott Hughes
53*e1fe3e4aSElliott Hughes    # install in 'editable' mode
54*e1fe3e4aSElliott Hughes    pip install -e .
55*e1fe3e4aSElliott Hughes
56*e1fe3e4aSElliott HughesOptional Requirements
57*e1fe3e4aSElliott Hughes---------------------
58*e1fe3e4aSElliott Hughes
59*e1fe3e4aSElliott HughesThe ``fontTools`` package currently has no (required) external dependencies
60*e1fe3e4aSElliott Hughesbesides the modules included in the Python Standard Library.
61*e1fe3e4aSElliott HughesHowever, a few extra dependencies are required by some of its modules, which
62*e1fe3e4aSElliott Hughesare needed to unlock optional features.
63*e1fe3e4aSElliott HughesThe ``fonttools`` PyPI distribution also supports so-called "extras", i.e. a
64*e1fe3e4aSElliott Hughesset of keywords that describe a group of additional dependencies, which can be
65*e1fe3e4aSElliott Hughesused when installing via pip, or when specifying a requirement.
66*e1fe3e4aSElliott HughesFor example:
67*e1fe3e4aSElliott Hughes
68*e1fe3e4aSElliott Hughes.. code:: sh
69*e1fe3e4aSElliott Hughes
70*e1fe3e4aSElliott Hughes    pip install fonttools[ufo,lxml,woff,unicode]
71*e1fe3e4aSElliott Hughes
72*e1fe3e4aSElliott HughesThis command will install fonttools, as well as the optional dependencies that
73*e1fe3e4aSElliott Hughesare required to unlock the extra features named "ufo", etc.
74*e1fe3e4aSElliott Hughes
75*e1fe3e4aSElliott Hughes- ``Lib/fontTools/misc/etree.py``
76*e1fe3e4aSElliott Hughes
77*e1fe3e4aSElliott Hughes  The module exports a ElementTree-like API for reading/writing XML files, and
78*e1fe3e4aSElliott Hughes  allows to use as the backend either the built-in ``xml.etree`` module or
79*e1fe3e4aSElliott Hughes  `lxml <https://lxml.de>`__. The latter is preferred whenever present,
80*e1fe3e4aSElliott Hughes  as it is generally faster and more secure.
81*e1fe3e4aSElliott Hughes
82*e1fe3e4aSElliott Hughes  *Extra:* ``lxml``
83*e1fe3e4aSElliott Hughes
84*e1fe3e4aSElliott Hughes- ``Lib/fontTools/ufoLib``
85*e1fe3e4aSElliott Hughes
86*e1fe3e4aSElliott Hughes  Package for reading and writing UFO source files; it requires:
87*e1fe3e4aSElliott Hughes
88*e1fe3e4aSElliott Hughes  * `fs <https://pypi.org/pypi/fs>`__: (aka ``pyfilesystem2``) filesystem
89*e1fe3e4aSElliott Hughes    abstraction layer.
90*e1fe3e4aSElliott Hughes
91*e1fe3e4aSElliott Hughes  * `enum34 <https://pypi.org/pypi/enum34>`__: backport for the built-in ``enum``
92*e1fe3e4aSElliott Hughes    module (only required on Python < 3.4).
93*e1fe3e4aSElliott Hughes
94*e1fe3e4aSElliott Hughes  *Extra:* ``ufo``
95*e1fe3e4aSElliott Hughes
96*e1fe3e4aSElliott Hughes- ``Lib/fontTools/ttLib/woff2.py``
97*e1fe3e4aSElliott Hughes
98*e1fe3e4aSElliott Hughes  Module to compress/decompress WOFF 2.0 web fonts; it requires:
99*e1fe3e4aSElliott Hughes
100*e1fe3e4aSElliott Hughes  * `brotli <https://pypi.python.org/pypi/Brotli>`__: Python bindings of
101*e1fe3e4aSElliott Hughes    the Brotli compression library.
102*e1fe3e4aSElliott Hughes
103*e1fe3e4aSElliott Hughes  *Extra:* ``woff``
104*e1fe3e4aSElliott Hughes
105*e1fe3e4aSElliott Hughes- ``Lib/fontTools/ttLib/sfnt.py``
106*e1fe3e4aSElliott Hughes
107*e1fe3e4aSElliott Hughes  To better compress WOFF 1.0 web fonts, the following module can be used
108*e1fe3e4aSElliott Hughes  instead of the built-in ``zlib`` library:
109*e1fe3e4aSElliott Hughes
110*e1fe3e4aSElliott Hughes  * `zopfli <https://pypi.python.org/pypi/zopfli>`__: Python bindings of
111*e1fe3e4aSElliott Hughes    the Zopfli compression library.
112*e1fe3e4aSElliott Hughes
113*e1fe3e4aSElliott Hughes  *Extra:* ``woff``
114*e1fe3e4aSElliott Hughes
115*e1fe3e4aSElliott Hughes- ``Lib/fontTools/unicode.py``
116*e1fe3e4aSElliott Hughes
117*e1fe3e4aSElliott Hughes  To display the Unicode character names when dumping the ``cmap`` table
118*e1fe3e4aSElliott Hughes  with ``ttx`` we use the ``unicodedata`` module in the Standard Library.
119*e1fe3e4aSElliott Hughes  The version included in there varies between different Python versions.
120*e1fe3e4aSElliott Hughes  To use the latest available data, you can install:
121*e1fe3e4aSElliott Hughes
122*e1fe3e4aSElliott Hughes  * `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__:
123*e1fe3e4aSElliott Hughes    ``unicodedata`` backport for Python 3.x updated to the latest Unicode
124*e1fe3e4aSElliott Hughes    version 15.0.
125*e1fe3e4aSElliott Hughes
126*e1fe3e4aSElliott Hughes  *Extra:* ``unicode``
127*e1fe3e4aSElliott Hughes
128*e1fe3e4aSElliott Hughes- ``Lib/fontTools/varLib/interpolatable.py``
129*e1fe3e4aSElliott Hughes
130*e1fe3e4aSElliott Hughes  Module for finding wrong contour/component order between different masters.
131*e1fe3e4aSElliott Hughes  It requires one of the following packages in order to solve the so-called
132*e1fe3e4aSElliott Hughes  "minimum weight perfect matching problem in bipartite graphs", or
133*e1fe3e4aSElliott Hughes  the Assignment problem:
134*e1fe3e4aSElliott Hughes
135*e1fe3e4aSElliott Hughes  * `scipy <https://pypi.python.org/pypi/scipy>`__: the Scientific Library
136*e1fe3e4aSElliott Hughes    for Python, which internally uses `NumPy <https://pypi.python.org/pypi/numpy>`__
137*e1fe3e4aSElliott Hughes    arrays and hence is very fast;
138*e1fe3e4aSElliott Hughes  * `munkres <https://pypi.python.org/pypi/munkres>`__: a pure-Python
139*e1fe3e4aSElliott Hughes    module that implements the Hungarian or Kuhn-Munkres algorithm.
140*e1fe3e4aSElliott Hughes
141*e1fe3e4aSElliott Hughes  To plot the results to a PDF or HTML format, you also need to install:
142*e1fe3e4aSElliott Hughes
143*e1fe3e4aSElliott Hughes  * `pycairo <https://pypi.org/project/pycairo/>`__: Python bindings for the
144*e1fe3e4aSElliott Hughes    Cairo graphics library. Note that wheels are currently only available for
145*e1fe3e4aSElliott Hughes    Windows, for other platforms see pycairo's `installation instructions
146*e1fe3e4aSElliott Hughes    <https://pycairo.readthedocs.io/en/latest/getting_started.html>`__.
147*e1fe3e4aSElliott Hughes
148*e1fe3e4aSElliott Hughes  *Extra:* ``interpolatable``
149*e1fe3e4aSElliott Hughes
150*e1fe3e4aSElliott Hughes- ``Lib/fontTools/varLib/plot.py``
151*e1fe3e4aSElliott Hughes
152*e1fe3e4aSElliott Hughes  Module for visualizing DesignSpaceDocument and resulting VariationModel.
153*e1fe3e4aSElliott Hughes
154*e1fe3e4aSElliott Hughes  * `matplotlib <https://pypi.org/pypi/matplotlib>`__: 2D plotting library.
155*e1fe3e4aSElliott Hughes
156*e1fe3e4aSElliott Hughes  *Extra:* ``plot``
157*e1fe3e4aSElliott Hughes
158*e1fe3e4aSElliott Hughes- ``Lib/fontTools/misc/symfont.py``
159*e1fe3e4aSElliott Hughes
160*e1fe3e4aSElliott Hughes  Advanced module for symbolic font statistics analysis; it requires:
161*e1fe3e4aSElliott Hughes
162*e1fe3e4aSElliott Hughes  * `sympy <https://pypi.python.org/pypi/sympy>`__: the Python library for
163*e1fe3e4aSElliott Hughes    symbolic mathematics.
164*e1fe3e4aSElliott Hughes
165*e1fe3e4aSElliott Hughes  *Extra:* ``symfont``
166*e1fe3e4aSElliott Hughes
167*e1fe3e4aSElliott Hughes- ``Lib/fontTools/t1Lib.py``
168*e1fe3e4aSElliott Hughes
169*e1fe3e4aSElliott Hughes  To get the file creator and type of Macintosh PostScript Type 1 fonts
170*e1fe3e4aSElliott Hughes  on Python 3 you need to install the following module, as the old ``MacOS``
171*e1fe3e4aSElliott Hughes  module is no longer included in Mac Python:
172*e1fe3e4aSElliott Hughes
173*e1fe3e4aSElliott Hughes  * `xattr <https://pypi.python.org/pypi/xattr>`__: Python wrapper for
174*e1fe3e4aSElliott Hughes    extended filesystem attributes (macOS platform only).
175*e1fe3e4aSElliott Hughes
176*e1fe3e4aSElliott Hughes  *Extra:* ``type1``
177*e1fe3e4aSElliott Hughes
178*e1fe3e4aSElliott Hughes- ``Lib/fontTools/ttLib/removeOverlaps.py``
179*e1fe3e4aSElliott Hughes
180*e1fe3e4aSElliott Hughes  Simplify TrueType glyphs by merging overlapping contours and components.
181*e1fe3e4aSElliott Hughes
182*e1fe3e4aSElliott Hughes  * `skia-pathops <https://pypi.python.org/pypy/skia-pathops>`__: Python
183*e1fe3e4aSElliott Hughes    bindings for the Skia library's PathOps module, performing boolean
184*e1fe3e4aSElliott Hughes    operations on paths (union, intersection, etc.).
185*e1fe3e4aSElliott Hughes
186*e1fe3e4aSElliott Hughes  *Extra:* ``pathops``
187*e1fe3e4aSElliott Hughes
188*e1fe3e4aSElliott Hughes- ``Lib/fontTools/pens/cocoaPen.py`` and ``Lib/fontTools/pens/quartzPen.py``
189*e1fe3e4aSElliott Hughes
190*e1fe3e4aSElliott Hughes  Pens for drawing glyphs with Cocoa ``NSBezierPath`` or ``CGPath`` require:
191*e1fe3e4aSElliott Hughes
192*e1fe3e4aSElliott Hughes  * `PyObjC <https://pypi.python.org/pypi/pyobjc>`__: the bridge between
193*e1fe3e4aSElliott Hughes    Python and the Objective-C runtime (macOS platform only).
194*e1fe3e4aSElliott Hughes
195*e1fe3e4aSElliott Hughes- ``Lib/fontTools/pens/qtPen.py``
196*e1fe3e4aSElliott Hughes
197*e1fe3e4aSElliott Hughes  Pen for drawing glyphs with Qt's ``QPainterPath``, requires:
198*e1fe3e4aSElliott Hughes
199*e1fe3e4aSElliott Hughes  * `PyQt5 <https://pypi.python.org/pypi/PyQt5>`__: Python bindings for
200*e1fe3e4aSElliott Hughes    the Qt cross platform UI and application toolkit.
201*e1fe3e4aSElliott Hughes
202*e1fe3e4aSElliott Hughes- ``Lib/fontTools/pens/reportLabPen.py``
203*e1fe3e4aSElliott Hughes
204*e1fe3e4aSElliott Hughes  Pen to drawing glyphs as PNG images, requires:
205*e1fe3e4aSElliott Hughes
206*e1fe3e4aSElliott Hughes  * `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit
207*e1fe3e4aSElliott Hughes    for generating PDFs and graphics.
208*e1fe3e4aSElliott Hughes
209*e1fe3e4aSElliott Hughes- ``Lib/fontTools/pens/freetypePen.py``
210*e1fe3e4aSElliott Hughes
211*e1fe3e4aSElliott Hughes  Pen to drawing glyphs with FreeType as raster images, requires:
212*e1fe3e4aSElliott Hughes
213*e1fe3e4aSElliott Hughes  * `freetype-py <https://pypi.python.org/pypi/freetype-py>`__: Python binding
214*e1fe3e4aSElliott Hughes    for the FreeType library.
215*e1fe3e4aSElliott Hughes
216*e1fe3e4aSElliott Hughes- ``Lib/fontTools/ttLib/tables/otBase.py``
217*e1fe3e4aSElliott Hughes
218*e1fe3e4aSElliott Hughes  Use the Harfbuzz library to serialize GPOS/GSUB using ``hb_repack`` method, requires:
219*e1fe3e4aSElliott Hughes
220*e1fe3e4aSElliott Hughes  * `uharfbuzz <https://pypi.python.org/pypi/uharfbuzz>`__: Streamlined Cython
221*e1fe3e4aSElliott Hughes    bindings for the harfbuzz shaping engine
222*e1fe3e4aSElliott Hughes
223*e1fe3e4aSElliott Hughes  *Extra:* ``repacker``
224*e1fe3e4aSElliott Hughes
225*e1fe3e4aSElliott HughesHow to make a new release
226*e1fe3e4aSElliott Hughes~~~~~~~~~~~~~~~~~~~~~~~~~
227*e1fe3e4aSElliott Hughes
228*e1fe3e4aSElliott Hughes1) Update ``NEWS.rst`` with all the changes since the last release. Write a
229*e1fe3e4aSElliott Hughes   changelog entry for each PR, with one or two short sentences summarizing it,
230*e1fe3e4aSElliott Hughes   as well as links to the PR and relevant issues addressed by the PR. Do not
231*e1fe3e4aSElliott Hughes   put a new title, the next command will do it for you.
232*e1fe3e4aSElliott Hughes2) Use semantic versioning to decide whether the new release will be a 'major',
233*e1fe3e4aSElliott Hughes   'minor' or 'patch' release. It's usually one of the latter two, depending on
234*e1fe3e4aSElliott Hughes   whether new backward compatible APIs were added, or simply some bugs were fixed.
235*e1fe3e4aSElliott Hughes3) Run ``python setup.py release`` command from the tip of the ``main`` branch.
236*e1fe3e4aSElliott Hughes   By default this bumps the third or 'patch' digit only, unless you pass ``--major``
237*e1fe3e4aSElliott Hughes   or ``--minor`` to bump respectively the first or second digit.
238*e1fe3e4aSElliott Hughes   This bumps the package version string, extracts the changes since the latest
239*e1fe3e4aSElliott Hughes   version from ``NEWS.rst``, and uses that text to create an annotated git tag
240*e1fe3e4aSElliott Hughes   (or a signed git tag if you pass the ``--sign`` option and your git and Github
241*e1fe3e4aSElliott Hughes   account are configured for `signing commits <https://docs.github.com/en/github/authenticating-to-github/managing-commit-signature-verification/signing-commits>`__
242*e1fe3e4aSElliott Hughes   using a GPG key).
243*e1fe3e4aSElliott Hughes   It also commits an additional version bump which opens the main branch for
244*e1fe3e4aSElliott Hughes   the subsequent developmental cycle
245*e1fe3e4aSElliott Hughes4) Push both the tag and commit to the upstream repository, by running the command
246*e1fe3e4aSElliott Hughes   ``git push --follow-tags``. Note: it may push other local tags as well, be
247*e1fe3e4aSElliott Hughes   careful.
248*e1fe3e4aSElliott Hughes5) Let the CI build the wheel and source distribution packages and verify both
249*e1fe3e4aSElliott Hughes   get uploaded to the Python Package Index (PyPI).
250*e1fe3e4aSElliott Hughes6) [Optional] Go to fonttools `Github Releases <https://github.com/fonttools/fonttools/releases>`__
251*e1fe3e4aSElliott Hughes   page and create a new release, copy-pasting the content of the git tag
252*e1fe3e4aSElliott Hughes   message. This way, the release notes are nicely formatted as markdown, and
253*e1fe3e4aSElliott Hughes   users watching the repo will get an email notification. One day we shall
254*e1fe3e4aSElliott Hughes   automate that too.
255*e1fe3e4aSElliott Hughes
256*e1fe3e4aSElliott Hughes
257*e1fe3e4aSElliott HughesAcknowledgements
258*e1fe3e4aSElliott Hughes~~~~~~~~~~~~~~~~
259*e1fe3e4aSElliott Hughes
260*e1fe3e4aSElliott HughesIn alphabetical order:
261*e1fe3e4aSElliott Hughes
262*e1fe3e4aSElliott Hughesaschmitz, Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland,
263*e1fe3e4aSElliott HughesJelle Bosma, Sascha Brawer, Tom Byrer, Antonio Cavedoni, Frédéric Coiffier,
264*e1fe3e4aSElliott HughesVincent Connare, David Corbett, Simon Cozens, Dave Crossland, Simon Daniels,
265*e1fe3e4aSElliott HughesPeter Dekkers, Behdad Esfahbod, Behnam Esfahbod, Hannes Famira, Sam Fishman,
266*e1fe3e4aSElliott HughesMatt Fontaine, Takaaki Fuji, Rob Hagemans, Yannis Haralambous, Greg Hitchcock,
267*e1fe3e4aSElliott HughesJeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo Jacquerye, Jack Jansen,
268*e1fe3e4aSElliott HughesTom Kacvinsky, Jens Kutilek, Antoine Leca, Werner Lemberg, Tal Leming, Peter
269*e1fe3e4aSElliott HughesLofting, Cosimo Lupo, Olli Meier, Masaya Nakamura, Dave Opstad, Laurence Penney,
270*e1fe3e4aSElliott HughesRoozbeh Pournader, Garret Rieger, Read Roberts, Colin Rofls, Guido van Rossum,
271*e1fe3e4aSElliott HughesJust van Rossum, Andreas Seidel, Georg Seifert, Chris Simpkins, Miguel Sousa,
272*e1fe3e4aSElliott HughesAdam Twardoch, Adrien Tétar, Vitaly Volkov, Paul Wise.
273*e1fe3e4aSElliott Hughes
274*e1fe3e4aSElliott HughesCopyrights
275*e1fe3e4aSElliott Hughes~~~~~~~~~~
276*e1fe3e4aSElliott Hughes
277*e1fe3e4aSElliott Hughes| Copyright (c) 1999-2004 Just van Rossum, LettError
278*e1fe3e4aSElliott Hughes  ([email protected])
279*e1fe3e4aSElliott Hughes| See `LICENSE <LICENSE>`__ for the full license.
280*e1fe3e4aSElliott Hughes
281*e1fe3e4aSElliott HughesCopyright (c) 2000 BeOpen.com. All Rights Reserved.
282*e1fe3e4aSElliott Hughes
283*e1fe3e4aSElliott HughesCopyright (c) 1995-2001 Corporation for National Research Initiatives.
284*e1fe3e4aSElliott HughesAll Rights Reserved.
285*e1fe3e4aSElliott Hughes
286*e1fe3e4aSElliott HughesCopyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All
287*e1fe3e4aSElliott HughesRights Reserved.
288*e1fe3e4aSElliott Hughes
289*e1fe3e4aSElliott HughesHave fun!
290*e1fe3e4aSElliott Hughes
291*e1fe3e4aSElliott Hughes.. |CI Build Status| image:: https://github.com/fonttools/fonttools/workflows/Test/badge.svg
292*e1fe3e4aSElliott Hughes   :target: https://github.com/fonttools/fonttools/actions?query=workflow%3ATest
293*e1fe3e4aSElliott Hughes.. |Coverage Status| image:: https://codecov.io/gh/fonttools/fonttools/branch/main/graph/badge.svg
294*e1fe3e4aSElliott Hughes   :target: https://codecov.io/gh/fonttools/fonttools
295*e1fe3e4aSElliott Hughes.. |PyPI| image:: https://img.shields.io/pypi/v/fonttools.svg
296*e1fe3e4aSElliott Hughes   :target: https://pypi.org/project/FontTools
297*e1fe3e4aSElliott Hughes.. |Gitter Chat| image:: https://badges.gitter.im/fonttools-dev/Lobby.svg
298*e1fe3e4aSElliott Hughes   :alt: Join the chat at https://gitter.im/fonttools-dev/Lobby
299*e1fe3e4aSElliott Hughes   :target: https://gitter.im/fonttools-dev/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
300