# fontTools Documentation The fontTools project documentation updates continuously on Read the Docs as the project source changes. The documentation is hosted at https://fonttools.readthedocs.io/. ## Contents - [How to Build Local Documentation](#how-to-build-local-documentation) - [Contributing to the fontTools Documentation](#contributing-to-the-documentation) - [Documentation License](#documentation-license) ## How to Build Local Documentation ### Install Dependencies You must have a Python 3 interpreter and the `pip` Python package manager installed on your system to build the fontTools documentation. Pull the fontTools project source files, create a Python virtual environment, and then install fontTools and the documentation build dependencies by executing the following commands in the root of the fontTools source repository: ``` $ pip install -e . [all] $ pip install -r Doc/docs-requirements.txt ``` ### Build Documentation **With `make`**: execute the following command in the root of the repository: ``` $ make docs ``` **Without `make`**: execute the following command in the **`Doc` directory**: ``` $ sphinx-build -b html source build ``` Open the `Doc/build/html/index.html` file in your browser to view the documentation home page. ## Contributing to the Documentation We highly encourage contributions! Please follow the instructions below to improve the documentation. ### Python Docstring Style We recommend the use of Python docstrings that follow [the Google Style Guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md#381-docstrings). Our documentation build approach parses appropriately formatted docstrings into formatted documentation files. #### Function Documentation Example ```python def fetch_bigtable_rows(big_table, keys, other_silly_variable=None): """Fetches rows from a Bigtable. Retrieves rows pertaining to the given keys from the Table instance represented by big_table. Silly things may happen if other_silly_variable is not None. Args: big_table: An open Bigtable Table instance. keys: A sequence of strings representing the key of each table row to fetch. other_silly_variable: Another optional variable, that has a much longer name than the other args, and which does nothing. Returns: A dict mapping keys to the corresponding table row data fetched. Each row is represented as a tuple of strings. For example: {'Serak': ('Rigel VII', 'Preparer'), 'Zim': ('Irk', 'Invader'), 'Lrrr': ('Omicron Persei 8', 'Emperor')} If a key from the keys argument is missing from the dictionary, then that row was not found in the table. Raises: IOError: An error occurred accessing the bigtable.Table object. """ ``` *Source: [Google Style Guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md) (CC BY-SA 3.0)* #### Class Documentation Example ```python class SampleClass(object): """Summary of class here. Longer class information.... Longer class information.... Attributes: likes_spam: A boolean indicating if we like SPAM or not. eggs: An integer count of the eggs we have laid. """ def __init__(self, likes_spam=False): """Inits SampleClass with blah.""" self.likes_spam = likes_spam self.eggs = 0 def public_method(self): """Performs operation blah.""" ``` *Source: [Google Style Guide](https://github.com/google/styleguide/blob/gh-pages/pyguide.md) (CC BY-SA 3.0)* ### Build Local Documentation and Review Your Changes Build a local set of HTML documentation files with the instructions above and review your changes. ### Submit a Pull Request Submit a Github pull request with your proposed improvements to the documentation. Thanks for your contribution! ## Documentation License The fontTools documentation is released under a [CC BY-SA 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/).