Noto fonts go universal! Download Noto fonts combined to suit your region (South Asia, SE Asia, Africa-MiddleEast, Europe-Americas).

Overview

Go Noto Universal

Noto fonts go universal! Download Noto fonts combined to suit your region (South Asia, SE Asia, East Asia, Africa-MiddleEast, Europe-Americas).

This software combines/merges multiple Noto Fonts to a single, region-specific font.

Download

If you simply want to use the fonts, go to Releases page and download what you need.

Development builds are available from GitHub Actions page. Click on any workflow with green checkmark (pipeline passed) and under "Artifacts", download "GoNotoUniversal.zip" (login required).

Build

If you want to build the fonts yourself, create a virtual environment (venv) and call ./run.sh.

python3 -m venv venv_fonty
source venv_fonty/bin/activate
./run.sh
deactivate

Font generation can take 10 to 20 min, depending on your computer's capabilities.

run.sh is designed to be reentrant, so you can run it multiple times without altering the working state of the repository or downloading stuff again and again.

Latest CI status:

CI

Dependencies

There is no dependency other than nototools and fonttools. Both are automatically fetched and used.

Coverage

Fonts are merged/combined as per the regions defined in the Unicode Standard (pdf). Chapter numbers below refer to that spec.

Regional font Coverage
GoNotoEuropeAmericas.ttf "Europe" - ch. 7, 8, "Americas" - ch 20, "Notational Systems" - ch 21
GoNotoAfricaMiddleEast.ttf "Middle East" - ch. 9, 10, 11 and "Africa" - ch. 19
GoNotoSouthAsia.ttf "South and Central Asia" - ch. 12 and 13
GoNotoAsiaHistorical.ttf "South and Central Asia" - ch. 14 and 15
GoNotoSouthEastAsia.ttf "Southeast Asia" - ch. 16 and "Indonesia and Ocenia" - ch 17
GoNotoCJKCore2005.ttf Unihan IICore subset of CJK (~10K ideographs). Use Noto CJK for full coverage
GoNotoEastAsia.ttf "East Asia" - ch 18. everything other than Han (CJK)

Each of the above fonts includes LGC (Latin-Greek-Cyrillic) as default, same coverage as Noto Sans Regular. Each one also includes Noto Sans Math, Noto Music, Noto Sans Symbols and Noto Sans Symbols 2 to give you bonus coverage of beautiful notations, symbols and emoji :)

Go Noto South Asia

Following are included: Devanagari (Hindi, Marathi, Nepali, etc), Bengali, Punjabi (Gurmukhi), Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, Thaana, Sinhala, Newa, Tibetan, Limbu, Meetei Mayek, Mro, Warang Citi, Ol Chiki, Chakma, Lepcha, Saurashtra, Masaram Gondi, Gunjala Gondi, Wancho.

Urdu (NotoNastaliq), though not written in an Indic script and not part of "South Asia" chapters in the Unicode spec, is included for practical reasons. Mongolian is currently not included because of issue with vmtx (vertical metrics). Noto fonts do not exist for Toto and Tangsa.

Go Noto Asia Historical

Following are included: Brahmi, Kharoshthi, Bhaiksuki, Phags-Pa, Marchen, Zanabazar Square, Soyombo, Old Turkic, Old Sogdian, Sogdian, Old Uyghur, Indic Siyaq Numbers, Syloti Nagri, Kaithi, Sharada, Takri, Siddham, Mahajani, Khojki, Khudawadi, Multani, Tirhuta, Modi, Grantha, Ahom, Sora Sompeng, Dogra.

Noto fonts do not exist for Dives Akuru and Ottoman Siyaq Numbers.

Go Noto South East Asia

Following are included: Thai, Lao, Myanmar, Khmer, Tai Le, New Tai Lue, Tai Tham, Tai Viet, Kayah Li, Cham, Pahawh Hmong, Nyiakeng Puache Hmong, Pau Cin Hau, Hanifi Rohingya, Tagalog, Hanunoo, Buhid, Tagbanwa, Buginese, Balinese, Javanese, Sundanese, Rejang, Batak.

Noto fonts do not exist for Makasar.

Go Noto Europe Americas

Everything covered by NotoSans (Latin-Greek-Cyrillic etc.) plus Armenian, Coptic, Cypriot, Georgian, Deseret, Glagolitic, Osage, Old Italic, Runic, Duployan, Anatolian Hieroglyphics, Carian, Canadian Aboriginal, Cherokee, Lycian, Lydian, Mayan Numerals, Nyiakeng Puachue Hmong, Old Hungarian, Gothic, Elbasan, Caucasian Albanian, Vithkuqi, Ogham, Old Permic, Shavian, Sutton Sign Writing, Linear A and Linear B.

Go Noto Africa Middle East

The following are included: Arabic (Naskh-style), Adlam, Avestan, Bamum, Bassa Vah, Cuneiform, Hebrew, Syriac, Samaritan, Mandaic, Yezidi, Old North Arabian, Old South Arabian, Phoenician, Imperial Aramaic, Manichaean, Inscriptional Parthian, Inscriptional Pahlavi, Psalter Pahlavi, Elymaic, Nabataean, Palmyrene, Hatran, Ugaritic, Old Persian, Egyptian, Meroitic, Anatolian Hieroglyphics.

Noto fonts do not exist for Chorasmian.

Go Noto East Asia

Tibetan, Lisu, Marchen, Miao, Yi, etc. excluding Han/CJK (Chinese-Japanese-Korean).

Mongolian, Nüshu and Tangut could not be included.

Go Noto CJK Core 2005

Unihan IICore is a minimal, region-agnostic subset of Han/CJK specified in 2005 for memory-constrained systems. It standardizes about 9800 codepoints, covering basic use cases of Chinese (Traditional, Simplified), Japanese and Korean. Recently Unihan Core 2020 superseded and expanded the minimal subset to about 20000 codepoints.

The GoNotoCJKCore2005 includes "locl" features, so it can display Japanese or Korean glyphs just by switching the language in your editor/word processor/web browser etc.

The generated font does not contain Noto Sans Math, Noto Music, Noto Sans Symbols, Noto Sans Symbols 2 because fonttools does not support merging fonts with CFF outlines (which is the case for .otf). Converting .otf to .ttf still doesn't solve the problem because CJK fonts have "vmtx" table, which is absent in other fonts, thus preventing pyftmerge.

Font Statistics

Statistics below correspond to release v3.0.

Regional font Code blocks Codepoints Glyphs
GoNotoEuropeAmericas.ttf 120 13389 53570
GoNotoAfricaMiddleEast.ttf 128 16053 20329
GoNotoSouthAsia.ttf 117 11502 21553
GoNotoAsiaHistorical.ttf 122 11001 18248
GoNotoSouthEastAsia.ttf 111 10786 15013
GoNotoEastAsia.ttf 109 18708 25043
GoNotoCJKCore2005.ttf 20 10338 20099

NotoSansSignWriting alone contributes about 37900 glyphs to GoNotoEuropeAmericas.ttf.

Note that each of the above (except CJKCore2005) include statistics of:

Upstream font Code blocks Codepoints Glyphs
Noto Sans 37 2840 3317
Noto Sans Math 22 2472 2655
Noto Music 7 559 579
Noto Sans Symbols 15 840 1218
Noto Sans Symbols 2 37 2655 2674
Total 111 8807 9864

Caveats

  1. You might have to increase line spacing or line margins in your application to avoid some characters appearing "clipped". This is because many Asian scripts stack letters vertically (e.g. Indic scripts, Thai, Balinese etc.) but the line metrics of the merged font are optimized for LGC.
  2. Tibetan has limited glyphs, otherwise GSUB table gets "overflow"ed. Only the most frequently occuring "subjoined consonants" are included. Those characters are displayed ok, but just that the glyphs appear to be "pushed up" compared to their neighbours.
  3. Vertical text layout is not supported for Dogra, Mongolian, Nandinagari, Nüshu and Tangut, even though the upstream Noto fonts has the support because fonttools does not support merging with vmtx/vhea.
  4. GoNotoCJKCore2005 does not contain Noto Sans Math and Noto Sans Symbols because fonttools does not support merging CFF with others.

License

In the spirit of loka-saṃgraha, the scripts distributed in this git repository (the "Software") are dedicated to the public domain as per "The Unlicense". See UNLICENSE.txt.

However, the fonts generated by using the Software are licensed under the SIL Open Font License, Version 1.1, as required by the upstream Noto Fonts Project.

Others

FontTools package comes with nice utilities ttx (ttf to xml and back), pyftsubset (create font with subset of given font) and pyftmerge (merging fonts, basically same as this repo).

otfinfo gives useful info about glyphs, codepoints, scripts and more.

Comments
  • Noto Sans Nandinagari Regular could not be merged

    Noto Sans Nandinagari Regular could not be merged

    Currently fonttools doesn't support merging when one of the inputs has different tables not present in the other. In the following example, NotoSans-Regular doesn't have vmtx.

    pyftmerge --verbose NotoSansNandinagari-Regular.ttf  NotoSans-Regular.ttf
    Merging 'cmap'.
    Merged 'cmap'.
    Merging 'GSUB'.
    Merged 'GSUB'.
    Merging 'GDEF'.
    Merged 'GDEF'.
    Merging 'head'.
    Merged 'head'.
    Merging 'cvt '.
    Merged 'cvt '.
    Merging 'gasp'.
    Merged 'gasp'.
    Merging 'DSIG'.
    Don't know how to merge 'DSIG'.
    Dropped 'DSIG'.
    Merging 'loca'.
    Merging 'vmtx'.
    Traceback (most recent call last):
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/bin/pyftmerge", line 8, in <module>
        sys.exit(main())
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/misc/loggingTools.py", line 372, in wrapper
        return func(*args, **kwds)
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/merge.py", line 1276, in main
        font = merger.merge(fontfiles)
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/merge.py", line 1097, in merge
        table = clazz(tag).merge(self, tables)
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/merge.py", line 156, in merge
        return m.mergeObjects(self, self.mergeMap, tables)
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/merge.py", line 1154, in mergeObjects
        value = mergeLogic(getattr(table, key, NotImplemented) for table in tables)
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/merge.py", line 88, in sumDicts
        d.update(item)
    TypeError: 'NotImplementedType' object is not iterable
    

    Above is with fonttools 4.28.3

    opened by satbyy 6
  • cmap overflow? cannot merge CJK with GoNotoContemporary.ttf

    cmap overflow? cannot merge CJK with GoNotoContemporary.ttf

    Latest CI builds create GoNotoContemporary.ttf which is a superset of all regional fonts (Asia + Africa + Europe + Americas), excluding historical scripts (and sign-writing). The only missing region is East Asia, aka CJK.

    It has plenty of room for expansion, as of now it encompasses 11706 codepoints and 34256 glyphs.

    otfinfo -u GoNotoContemporary.ttf | wc -l
    11706
    otfinfo -g GoNotoContemporary.ttf | wc -l
    34256
    

    So there is space for at least (65K - 34K) ~ 30K glyphs before we max out the 65535 glyph limit.

    We also generate GoNotoCJKCore.otf which has about 10K code points and 20K glyphs, so it should all nicely fit-in the same font.

    However, the idea fails because cmap table format 4 hits the 65535 limit.

    otf2ttf GoNotoCJKCore2005.otf
    pyftmerge --verbose --drop-tables+=vmtx,vhea GoNotoContemporary.ttf GoNotoCJKCore2005.ttf
    # ... 
    File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/ttLib/tables/_c_m_a_p.py", line 172, in compile
        chunk = table.compile(ttFont)
      File "/home/ubuntu/projects/go-noto-universal/venv_fonty/lib/python3.8/site-packages/fontTools/ttLib/tables/_c_m_a_p.py", line 904, in compile
        header = struct.pack(cmap_format_4_format, self.format, length, self.language,
    struct.error: 'H' format requires 0 <= number <= 65535
    

    The actual length is about 66600, so just a little over 65K. The aim of this issue/ticket is to figure out a way to overcome the cmap limit.

    What is strange is that the original, non-subsetted CJK font itself has cmap length about 40K but the subsetted CJK has 51K cmap length!

    A brute-force way I found is to use --no-layout-closure while subsetting, but it also removes locl feature, so JP or KR cannot use a CN font.

    opened by satbyy 4
  • Mark classes and mark sets are not merged correctly

    Mark classes and mark sets are not merged correctly

    Fonts with lookups that use mark classes or mark sets are not merged correctly. If, say, a lookup in a source font uses mark set 0, the corresponding lookup in the merged font will also use mark set 0, even though the merged font’s mark set 0 might come from a different source font.

    For example, here is <U+11C72, U+11C92, U+11C93> in Go Noto East Asia: 𑱲𑲒𑲓 And here it is in Noto Sans Marchen: 𑱲𑲒𑲓

    bug 
    opened by dscorbett 2
  • Add more CJK-related blocks

    Add more CJK-related blocks

    • Remove duplicated NotoSans-Regular which was mistakenly included twice. This frees up about 3300 glyphs
    • Add more CJK-related blocks: CJK Symbols and Punctuation, Bopomofo, Bopomofo Extended, Halfwidth & Fullwidth Forms, CJK Strokes, CJK compatibility, CJK compatibilty forms, Enclosed CJK letters and months, Enclosed ideographic supplement, Katakana phonetic extensions
    • Remove layout features related to vertical writing (vert, vkrn, vrt2, vhal, vpal, etc.)
    • Move Cypriot and Glagolitic to "Go Noto Ancient"
    opened by satbyy 1
  • Require `fonttools >= 4.28.4`

    Require `fonttools >= 4.28.4`

    Fixes #3. It doesn’t make any difference for continuous integration, because that always starts from scratch, but this is necessary if you already have a virtual environment with an older fontTools.

    opened by dscorbett 1
  • Include all Tibetan code points

    Include all Tibetan code points

    Noto Serif Tibetan includes a lot of unnecessary glyphs for conjuncts. Filtering them out makes a subset that covers all Tibetan code points while still fitting within the merged fonts.

    opened by dscorbett 1
  • Switch to migrated website/URLs of Noto fonts

    Switch to migrated website/URLs of Noto fonts

    Instead of delivering all fonts from single repo 1, upstream Google has decided to create separate git repo for each font. A web frontend with new development builds is available 2 but it is not all fonts are there yet.

    opened by satbyy 0
  • Go Noto Universal line spacing error

    Go Noto Universal line spacing error

    Hi, I think there is an error in line spacing in Go Noto Universal - it is unnaturally big. When I compare it to other fonts and even to NotoSansRegular.ttf (https://github.com/googlefonts/noto-fonts/tree/main/hinted/ttf/NotoSans/NotoSans-Regular.ttf) so the file that is taken to build latin fonts in go-noto-universal. In the picture attached I show the comparison of Line Spacing in MS Word of NotoSansRegular and GoNotoCurrent.ttf: Comparison It is not only the case of MS Word, I checked that in Linux in other programs, there is also unnaturally big line spacing. It makes very uncomfortable to use this font and espacially in programs where I am not able to change it manually.

    opened by skipperon 3
  • Why does GoNotoCurrent not render Korean glyphs whereas GoNotoCJKCore does?

    Why does GoNotoCurrent not render Korean glyphs whereas GoNotoCJKCore does?

    Thank you for providing this great library! I am currently trying to render text in various languages with the pygame library and it seems that when I am using GoNotoCurrent, I can render Japanese and Chinese glyphs just fine, but Korean glyphs are only rendered as empty boxes. When I am using GoNotoCJKCore, Korean is rendered properly as well, so I am wondering what the main difference between the two is. I can get around the issue by rendering my texts with the Pillow library and a libraqm layout engine which builds on harfbuzz, but this is horribly slow, so I'd prefer to keep using pygame and get it to work with GoNotoCurrent. Do you have an idea why rendering Korean might not work in my setup?

    bug workaround available 
    opened by xplip 7
  • Request for other weight

    Request for other weight

    I used "GoNotoSouthEastAsia" with in Thai. That work perfectly but I can't find other weight like Thin, Semi Bold, Bold, ect. can you add other weight or how to compile it. that would be great.

    thank you for build this project.

    enhancement 
    opened by podhikaru 1
Releases(v5.2)
Owner
Satish B
Satish B
SABnzbd - The automated Usenet download tool

SABnzbd is an Open Source Binary Newsreader written in Python.

SABnzbd 1.8k Dec 30, 2022
Download all posts and comments in a subreddit

subreddit downloader This subreddit downloader downloads all posts and comments in a subreddit For a tutorial to use this program please follow this m

Guneet 6 Dec 16, 2022
Used Insta Loader to download high quality images from instagram account

Insta Dp Downloader Project Description: In this project, I have used "Insta Loader" to download high quality images from instagram account. You only

Hassan Shahzad 3 Oct 31, 2022
Storing, versioning, and downloading files from S3 made as easy as using open() in Python. Caching included.

open(LARGE) Storing, versioning, and downloading files from S3 made as easy as using open() in Python. Caching included. Motivation Oftentimes, especi

András Schmelczer 2 Jan 30, 2022
Using Youtube downloader is the fast and easy way to download and save any YouTube video.

Youtube video downloader using Django Using Django as a backend along with pytube module to create Youtbue Video Downloader. https://yt-videos-downloa

Suman Raj Khanal 10 Jun 18, 2022
A Udemy downloader that can download DRM protected videos and non-DRM protected videos.

Udemy Downloader with DRM support NOTE This program is WIP, the code is provided as-is and i am not held resposible for any legal repercussions result

Puyodead1 468 Dec 29, 2022
This is a tool to allow downloading any links from r/Roms Magethread

ILYFPR This is a tool to allow downloading any links from r/Roms Magethread Limitations: It downloads ALL roms of the system you choose. This will be

Erase 4 Nov 04, 2021
抖音去水印视频批量下载,完全使用抖音官方接口

TikTokDownload 抖音去水印视频下载,使用抖音官方接口 使用教程(Win7) Win10环境暂时没测,bug情况应该比Win7少 运行软件前先打开目录下 conf.ini 文件按照要求进行配置 批量下载可直接修改配置文件,单一视频下载请直接打开粘贴视频链接即可

JohnserfSeed 2k Jan 04, 2023
Youtube list to mp3 - Youtube list to mp3 downloader

Youtube list to mp3 downloader Tiny script to convert a list of youtube videos t

Papi Diagne 3 Feb 11, 2022
Utility for downloading works from AO3 (Archive Of Our Own)

ao3d video preview A small graphical utility for batch downloading works from AO3 (Archive Of Our Own) Features Batch downloading works to supported f

flux 24 Dec 09, 2022
Download the resources of the Blue Archive easily!

blue-archive-bundle-downloader Download the resources of the Blue Archive easily! Known issue In Windows It works only if the console is "fullscreen"

Ryu juheon 7 Apr 08, 2022
Script for YouTube creators to share dislike count with their viewers.

Stahování disliků z YouTube - milafon Tento skript slouží jako možnost zobrazit divákům počet disliků u YouTube videí. Vyžaduje implementaci ze strany

4 Sep 28, 2022
A small distributed download manager to help bypass device-specific bandwidth limitations.

Distributed Download Manager A small distributed download manager to help bypass device-specific bandwidth limitations. Architecture The download mana

Anand Balaji 3 Sep 23, 2022
Download your Spotify playlists and songs along with album art and metadata

spotDL Download your Spotify playlists and songs along with album art and metadata The fastest, easiest, and most accurate command-line music download

10.6k Jan 03, 2023
Fetch McDonald invoices from mailbox and merge them to one PDF file.

concatenate Fetch McDonald invoices from mailbox and merge them to one PDF file. Description This script will fetch all McDonald invoice pdfs from a p

3 Oct 06, 2022
Fully automated download and parsing for Texas A&M University's Registrar's grade distribution PDFs for years 2014+.

Fully automated download and parsing for Texas A&M University's Registrar's grade distribution PDFs for years 2014+. Adds the parsing results to a mySQL database.

TAMU Grade Distribution 1 Sep 28, 2022
mescrappy - Python + Selenium Youtube scraper

mescrappy - Python + Selenium Youtube scraper Youtube Sraping With Python (Selenium) Table of Contents About The Project Built With Getting Started In

Merdan Chariyarov 12 Nov 28, 2021
A Telegram bot to download TikTok videos without any watermark.

TikTok Downloader Bot A Telegram bot to download TikTok videos without any watermark. Host on Heroku Youtube: Deployment Tutorial Demo: JayBee TikTok

Joy Biswas 184 Jan 04, 2023
AkShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库

Overview AkShare requires Python(64 bit) 3.7 or greater, aims to make fetch financial data as convenient as possible. Write less, get more! Documentat

Albert King 5.8k Jan 03, 2023
ImageScraper is a cross-platform tool for downloading a specified count from xkcd, Astronomy Picture of the Day and Existential Comics

ImageScraper The ImageScraper is a cross-platform tool for downloading a specified count from xkcd, Astronomy Picture of the Day and Existential Comic

1amnobody 1 Jan 25, 2022