• Stars
    star
    144
  • Rank 254,059 (Top 6 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created over 2 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Distribution site for Noto fonts

To report an issue in a Noto font, go here.

High level overview and instructions for font developers

Here's what you need to know for general font-level work on the Noto project:

  • Each script in Noto gets its own repository. The script repository is based on the noto-project-template repo. If you are in the position of needing to add a new script to Noto, do so by visiting https://github.com/notofonts/noto-project-template and clicking the green "Use this template" button. Make sure you click the "Include all branches" option on the page which follows.

  • Each family within a script gets its own configuration file, sources/config-<something>.yaml. In many cases, you will want to automatically add a subset of glyphs from Noto Sans, Noto Serif or Noto Devanagari into the source UFOs. You can do this by adding the following to the configuration file:

includeSubsets:
  - name: "GF Glyph Sets/GF-latin-core"
    from: "Noto Sans"

or

includeSubsets:
  - from: "Noto Sans Devanagari"
    ranges:
        - from: 0x1CD0
          to: 0x1CE7
        - from: ...

These subsets will be added to the font by Notobuilder, explained below.

  • Try to work on font problems in branches and make pull requests. When you work in a branch, GitHub actions will build the font, perform QA tests, and create QA reports and proof sheets. You can download these reports as a build artefact by going to the "Actions" page.

  • As well as the GitHub actions, you can trigger builds and tests manually using the Makefile:

    • make build builds the font
    • make test runs the fontbakery checks
  • The following QA tests are run:

    • Fontbakery is run using the notofonts profile for the non-"full" builds and using the googlefonts profile for any outputs that are destined for Google Fonts onboarding. Fontbakery is also configured so that any shaping tests found in qa/shaping_tests are automatically run.
    • The previous released version of the font is fetched and gftools.diffenator is run to produce a report showing the differences. As well as the glyph-level differences, any strings found in files matching qa/*.txt are rendered and their differences are displayed.
    • Proof sheets are generated with gftools-gen-html proof.
  • In addition, the artefacts (latest font builds and QA reports) from the current main branch are published on the repository's GitHub Pages site. (see e.g. https://notofonts.github.io/vithkuqi/)

  • Repositories are organised by script but releases are organised by family. When it's time to create a new release, push a new tag of the form <Family>-v<Version> (e.g. NotoSansBengali-v2.002). If everything goes well, the release GitHub Action will then:

    • Build and test the font.
    • Create a GitHub Release including a Zip file of font binaries.
    • Create a PR to Google Fonts to onboard the new release.

Note that the action to produce the Google Fonts PR requires the organisational secrets SSH_KEY and USER_GITHUB_TOKEN to be set, and the category key to be set correctly in each config.yaml file.

Build, QA and onboarding automation

All of the above is wonderful if everything works. Here's what you need to know if there are problems with the build process itself.

The main design goal for the build process has been forward compatibility. In other words, providing a consistent build experience across all Noto script project repositories while ensuring that any changes which need to be made to the build or its environment do not need to be repeated across all 150+ repos.

The main way this is achieved is through the notobuilder repository. All script repositories use notobuilder, which provides:

  • The GitHub workflows which control building (build.yaml) and releasing (release.yaml).
  • A declaration (through its setup.py) of the Python dependencies and their versions used to build all Noto fonts.
  • The build process itself. (We will discuss below why Noto needs its own bulid process!)
  • The QA process.

The aim is that Noto project repositories would pull the latest version of this repository and use to get the latest actions as well as to use it to build the fonts; this means that both the way that font building happens, and the required versions of fonttools, fontmake, etc., can all be defined and updated in one single place, and also that any updates to the build methodology or the required versions will be automatically carried over to new builds.

notobuilder

The Notobuilder class is a subclass of GFBuilder, but with certain modifications to suit the Noto workflow.

  • We expect a certain directory structure for the output files:
    • fonts/<family>/unhinted/variable-ttf
    • fonts/<family>/unhinted/otf
    • fonts/<family>/unhinted/ttf
    • fonts/<family>/hinted/ttf
  • In Noto, we produce unhinted and hinted versions of the font; hinted versions are produced by trying to run ttfautohint with an appropriate script (-D) flag. (If autohinting fails, the unhinted font is copied to the hinted font path without erroring out.)
  • We try to produce a variable font by default but also don't error out if that fails.
  • We also (based on a configuration file) use UFO merging to add subsets of Noto Sans, Noto Serif or Noto Sans Devanagari into the sources to produce a "full" build of the font.

As these are Noto-specific process requirements they have not been merged into the upstream GFBuilder.

notoqa

This Python module defines the process used to test Noto fonts. In a similar vein to notobuilder, the point is that we define the test procedures in one location, and all project repositories automatically receive updated versions of the test protocols when this repository changes.

It defines two kind of tests:

  • python -m notoqa runs fontbakery checks on each family, and is used to implement the make test target in the project repository Makefile.

  • python -m notoqa.regression downloads the latest release of the family and runs regression tests between the current build and the previous, using gftools.qa.

Note

This repository does not contain the following fonts:

More Repositories

1

noto-cjk

Noto CJK fonts
Shell
2,463
star
2

noto-fonts

Noto fonts, except for CJK and emoji
Python
2,448
star
3

noto-source

HTML
579
star
4

nototools

Noto fonts support tools and scripts plus web site generation
Python
254
star
5

noto-docs

Official Noto documentation
HTML
22
star
6

noto-fonts-alpha

Alpha versions of Noto fonts
21
star
7

latin-greek-cyrillic

Noto Latin, Greek, Cyrillic
Python
18
star
8

symbols

Noto Symbols
HTML
12
star
9

khitan-small-script

Noto Khitan Small Script
Python
11
star
10

arabic

Noto Arabic
HTML
8
star
11

noto-cjk-varco

Python
7
star
12

mongolian

Noto Mongolian
HTML
6
star
13

math

Noto Math
Python
6
star
14

notobuilder

Python module for building Noto fonts
Python
6
star
15

javanese

Noto Javanese
Python
5
star
16

noto-build

Scripts, data and libraries to work with Noto fonts and sources
Python
5
star
17

get-noto

5
star
18

thai

Noto Thai
HTML
5
star
19

syriac

Noto Syriac
HTML
4
star
20

old-turkic

Noto Old Turkic
Python
4
star
21

noto-sans-hebrew

Noto Sans Hebrew sources, tests and development fonts
HTML
4
star
22

balinese

Noto Balinese
Python
4
star
23

runic

Noto Runic
Python
4
star
24

brahmi

Noto Brahmi
Python
4
star
25

gurmukhi

Noto Gurmukhi
HTML
3
star
26

music

Noto Music
Python
3
star
27

tibetan

Noto Tibetan
HTML
3
star
28

egyptian-hieroglyphs

Noto Egyptian Hieroglyphs
Python
3
star
29

sundanese

Noto Sundanese
Python
3
star
30

malayalam

Noto Malayalam
HTML
3
star
31

newa

Noto Newa
HTML
3
star
32

gujarati

Noto Gujarati
HTML
3
star
33

nag-mundari

Noto Sans Nag Mundari
Python
3
star
34

nastaliq

Noto Nastaliq
Python
3
star
35

NotoTraditionalNushu

Source of the NotoTraditionalNushu typeface
3
star
36

NotoSerifTangut

NotoSerifTangut sources, tests and development fonts
HTML
3
star
37

sample-texts

A collection of sample texts, aspiring to cover all languages supported by Noto fonts
3
star
38

ethiopic

Noto Ethiopic
HTML
3
star
39

tamil

Noto Tamil
HTML
3
star
40

Noto-LatinGreekCyrillic

Latin, Greek and Cyrillic Noto fonts
HTML
3
star
41

znammeny

Noto Znammeny Musical Notation
Python
3
star
42

inscriptional-pahlavi

Noto Inscriptional Pahlavi
Python
3
star
43

old-persian

Noto Old Persian
Python
3
star
44

overview

An overview of the Noto project
JavaScript
3
star
45

avestan

Noto Avestan
Python
2
star
46

lycian

Noto Lycian
HTML
2
star
47

duployan

Noto Duployan
Python
2
star
48

NotoSans

Sources of the NotoSans typeface.
HTML
2
star
49

rejang

Noto Rejang
Python
2
star
50

psalter-pahlavi

Noto Psalter Pahlavi
Python
2
star
51

tagalog

Noto Tagalog
Python
2
star
52

kharoshthi

Noto Kharoshthi
Python
2
star
53

old-italic

Noto Old Italic
Python
2
star
54

new-tai-lue

Noto New Tai Lue
Python
2
star
55

buhid

Noto Buhid
Python
2
star
56

noto-sans-bengali

Noto Sans Bengali sources, tests and development fonts
HTML
2
star
57

inscriptional-parthian

Noto Inscriptional Parthian
Python
2
star
58

cuneiform

Noto Cuneiform
Python
2
star
59

nko

Noto N' Ko
Python
2
star
60

old-permic

Noto Old Permic
Python
2
star
61

makasar

Noto Makasar
Python
2
star
62

caucasian-albanian

Noto Caucasian Albanian
Python
2
star
63

zanabazar-square

Noto Zanabazar Square
Python
2
star
64

old-uyghur

Noto Old Uyghur
Python
2
star
65

takri

Noto Takri
HTML
2
star
66

deseret

Noto Deseret
HTML
2
star
67

shavian

Noto Shavian
HTML
2
star
68

batak

Noto Batak
Python
2
star
69

kawi

Noto Sans Kawi
Python
2
star
70

armenian

Noto Armenian
HTML
2
star
71

imperial-aramaic

Noto Imperial Aramaic
Python
2
star
72

lydian

Noto Lydian
HTML
2
star
73

thaana

Noto Thaana
HTML
2
star
74

elbasan

Noto Elbasan
HTML
2
star
75

myanmar

Noto Myanmar
HTML
2
star
76

nabataean

Noto Nabataean
Python
2
star
77

lao

Noto Lao
HTML
2
star
78

bhaiksuki

Noto Bhaiksuki
Python
2
star
79

dives-akuru

Noto Dives Akuru
Python
2
star
80

hebrew

Noto Hebrew
HTML
2
star
81

oriya

Noto Oriya
HTML
2
star
82

canadian-aboriginal

Noto Canadian Aboriginal
Python
2
star
83

cherokee

Noto Cherokee
HTML
2
star
84

tagbanwa

Noto Tagbanwa
Python
2
star
85

lisu

Noto Lisu
Python
2
star
86

phoenician

Noto Phoenician
HTML
2
star
87

ogham

Noto Ogham
HTML
2
star
88

tangut

Noto Tangut
HTML
2
star
89

old-south-arabian

Noto Old South Arabian
Python
2
star
90

tifinagh

Noto Tifinagh
HTML
2
star
91

sogdian

Noto Sogdian
Python
2
star
92

adlam

Noto Adlam
HTML
2
star
93

grantha

Noto Grantha
Python
2
star
94

vithkuqi

Noto Vithkuqi
Python
2
star
95

khmer

Noto Khmer
HTML
2
star
96

buginese

Noto Buginese
Python
2
star
97

hentaigana

Noto Serif Hentaigana
Python
2
star
98

hanunoo

Noto Hanunoo
Python
2
star
99

georgian

Noto Georgian
HTML
1
star
100

tirhuta

Noto Tirhuta
HTML
1
star