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