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
Youtube Downloader is a Graphic User Interface(GUI) that lets users download a Youtube Video or Audio through a URL

Youtube Downloader This Python and Tkinter based GUI allows users to directly download the Best Resolution Videos and Audios from Youtube. Pa-fy Insta

Samarth Kumar 2 Jun 25, 2022
Desktop utility to download images/videos/music/text from various websites, and more

Desktop utility to download images/videos/music/text from various websites, and more

Kurt Bestor 11.2k Jan 08, 2023
This is a Text Data Analysis Project Involving (YouTube Case Study).

Text_Data_Analysis This is a Text Data Analysis Project Involving (YouTube Case Study). Problem Statement = Sentiment Analysis. Package1: There are m

1 Mar 05, 2022
A Python script to download PDB files associated with a Portable Executable (PE)

A Python script to download PDB files associated with a Portable Executable (PE)

Podalirius 33 Jan 03, 2023
利用python3,爬取并下载91porn网站上面的视频

91porn_python 利用python3,爬取并下载91porn网站上面的视频 增加爬取t66y论坛图片的脚本 该脚本支持一下功能: 支持多线程 下载视频有进度条显示 支持从特定页的特定视频开始下载 将m3u8和mp4格式的视频下载到不同文件夹,加以分类 自动过滤已经下载过的视频

253 Feb 23, 2021
A toolkit to automatically crawl the paper list and download paper pdfs of ACL Ahthology.

ACL-Anthology-Crawler A toolkit to automatically crawl the paper list and download paper pdfs of ACL Anthology

Ray GG 9 Oct 09, 2022
Downloads data from OSM API and uploads it to the mapping sandbox.

OpenStreetMap To Sandbox This is a script to download data from OSM API and upload it to the mapping sandbox. Note that it clears all data in the sand

Ilya Zverev 5 Nov 27, 2022
Download and save Bing wallpapers and set as background for GNOME desktop

Save Bing wallpapers and set as background for GNOME desktop This script downloads the Bing wallpaper and sets it in the background of your gnome desk

manikamran 2 Nov 06, 2021
Youtube videos and channels scraper python wrapper!

YouTubeCrawle Wrapper for python Why This wrapper? This is wrapper is not limited to videos only it can scrape both channel and videos seperately ;D

Kei 16 Aug 08, 2022
Pytube ve tkinter kütüphanesi ile yapmış olduğum basit ve temel bir youtube video indirme programı.

PyTube Pytube ve tkinter kütüphanesi ile yapmış olduğum basit ve temel bir youtube video indirme programı. Videolar 720p çözünürlükte indirilmektedir.

1 Nov 12, 2021
Itchio Downloader Tool with python

Itchio Downloader Tool Install pip install git+https://github.com/emersont1/itchio Download All Games in library from account python -m itchio.downloa

Peter Taylor 69 Dec 05, 2022
a simple ehentai downloader with jpg 2 pdf

Simple_Ehentai_DownLoader a simple ehentai downloader with jpg 2 pdf 中文介绍 Environment python3.8 How to use before you start,there are some tips. the q

Hibian 6 Dec 11, 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
Tkinter based YouTube video downloader works on pytube 11.0.2. Can download YouTube videos in 720p(HD), 144p and even only audio.

YouTube-Downloader Tkinter based YouTube video downloader works on pytube 11.0.2. Can download YouTube videos in 720p(HD), 144p and even only audio. G

Manav Grover 2 Dec 27, 2021
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 simple Python +3.x script to download videos from Facebook.

Facebook Video Downloader A simple Python +3.x script to download videos from Facebook posts

Kerolos Atef Saber 1 Dec 03, 2021
ComicDownloader - Downloads Comics from readcomiconline.li

ComicDownloader Downloads Comics from readcomiconline.li To use this script from

2 Nov 08, 2022
A simple python script and it's used for mp4 type video downloading from youtube.

This is a simple python script and it's used for mp4 type video downloading from youtube. also, it's used inbuilt python module pytube. Furthermore, I know we have so many apps and online websites to

Yousaf K Hamza 1 Jan 10, 2022
An Inline Telegram bot that can download YouTube videos with permanent thumbnail support

Tube (YouTube Downloader) An Inline Telegram bot that can download YouTube videos with permanent thumbnail support About Bot need to be in Inline Mode

Renjith Mangal 30 Dec 14, 2022
Fully Automated YouTube Channel ▶️with Added Extra Features.

Fully Automated Youtube Channel ▒█▀▀█ █▀▀█ ▀▀█▀▀ ▀▀█▀▀ █░░█ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀▄ █░░█ ░░█░░ ░▒█░░ █░░█ █▀▀▄ █▀▀ █▄▄▀ ▒█▄▄█ ▀▀▀▀ ░░▀░░ ░▒█░░ ░▀▀▀ ▀▀▀░

sam-sepiol 249 Jan 02, 2023