Giter VIP home page Giter VIP logo

noto-source-reorganization's Introduction

noto-source-reorganization

This repository offers different functions to generate and manipulates Noto fonts. The best way to use it is to run NotoMaker.py (located in the script folder) in a terminal followed by an argument and the path of the family folder you want to work on. python3 ~/NotoMaker.py [generation option] <folder path if needed> [output option] <list of format(s) in lowercase>

So far NotoMaker has the following options:

-sub : For subsetting. It display the available subsets if the fnt is subsettable (like latin-greek-cyrillic or arabic typefaces). It displays the list and let the user input the needed one(s), then make the fonts. If you add the option -name you can rename the final fonts on the fly.

--script : same as previous, but you have to give yourself the subsets you want to apply.

--fastgen : make all instances from the variable font (faster than interpolating UFOs and then generating fonts. But limited to ttf, woff, woff2 formats, and contours are not merged)

-var : generate the variable font.

-gen : interpolate and then generate the family. If the writing system is not a latin one, it add a "secure set" of glyphs from NotoSans, NotoSerif, NotoSans-Italic or NotoSerif-Italic (depending if the style of the font).

--static : extract one or more instances from a variable font.

-r : rename the fonts.

--salt : Set I.alt and J.alt stylistic alternate shapes as default in the generated font(s).

--allVF, --allOTF and --allTTF : These 3 commands don't need folder path since they work on all families.

--merge : give 2 folder paths for 2 families you want to merge. The script will find common style and create new fonts only for theses matching styles. To ensure a fast generation, it will use instances extracted from a variable font (unless the family has only one style).

NotoMaker needs Python 3.6. Regarding the librairies, it requires: +fontTools (4.6.0) +ufo2ft (2.9.1) [] +defcon (0.6.0) +fontmake (2.0.3) +ufoLib2 (0.6.2)

If you don't have them already installed in your OS, you can download them from github and install them with pip3, using the pip3 install -e . command once in the folder.

Convert sources as UFO3s + designspace

The /script folder contains a script called "maintainSources.py" thant convert any source put in the /sandbox folder into UFO3s+designspace in a folder named accordingly to the font family name inside the /src folder.

noto-source-reorganization's People

Contributors

jbmorizot avatar jeremiehornus avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

noto-source-reorganization's Issues

Problems when generating Variable

So far the following families have issues when built as Variable fonts. It's sometimes linked to incompatible GPOS or GSUB, or incompatible contours.

NotoSansOriya
NotoSansSyriac
NotoSansJavanese
NotoSansGujarati
NotoSansKhmerUI
NotoSansOriyaUI
NotoSerifTelugu
NotoSerifMyanmar
NotoSansMyanmar
NotoSansSinhala
NotoSansArabicUI
NotoSansMyanmarUI
NotoSerifMalayalam
NotoSansKhmer
NotoSansDevanagari
NotoNastaliqUrdu
NotoSerifKhmer
NotoSansCham

No mkmk in NotoSansNko

The string given in the test html in NotoSource (ߋ߫߮ߋ߬߮ߋ߭߮) is not working properly in NotoSansNko. It's either a lack of mrk2mark rules or a lack of ccmp rul in GSUB. Mti features are tranlated in OT features, so it can be addressed now.
Capture d’écran 2020-04-14 à 16 58 50

Families with untranslated MTI

NotoNastaliqUrdu (very complex one)
NotoSansBengali
NotoSansBrahmi
NotoSansChakma
NotoSansCham
NotoSansCoptic
NotoSansDevanagari
NotoSansElbasan
NotoSansGlagolitic
NotoSansGrantha
NotoSansGujarati
NotoSansGurmukhi
NotoSansHanunoo
NotoSansIndicSiyaqNumbers
NotoSansInscriptionalPahlavi
NotoSansInscriptionalParthian
NotoSansJavanese
NotoSansKaithi
NotoSansKannada
NotoSansKharoshthi
NotoSansKhmer
NotoSansKhmerUI
NotoSansKhojki
NotoSansKhudawadi
NotoSansLepcha
NotoSansLimbu
NotoSansMahajani
NotoSansMalayalam
NotoSansManichaean
NotoSansMendeKikakui
NotoSansMeroitic
NotoSansMiao
NotoSansModi
NotoSansMyanmar
NotoSansMyanmarUI
NotoSansNewa
NotoSansNewTaiLue
NotoSansOldHungarian
NotoSansOldItalic
NotoSansOldPermic
NotoSansOldSogdian
NotoSansOsage
NotoSansPahawhHmong
NotoSansPalmyrene
NotoSansPauCinHau
NotoSansPhagsPa
NotoSansPsalterPahlavi
NotoSansRejang
NotoSansSamaritan
NotoSansSaurashtra
NotoSansSharada
NotoSansSinhala
NotoSansSogdian
NotoSansSylotiNagri
NotoSansSyriac
NotoSansTagalog
NotoSansTagbanwa
NotoSansTaiLe
NotoSansTaiViet
NotoSansTamil
NotoSansTelugu
NotoSansTirhuta
NotoSansWarangCiti
NotoSerifAhom
NotoSerifGrantha
NotoSerifKhmer
NotoSerifMalayalam
NotoSerifMyanmar
NotoSerifTelugu (lookups named and not numbered, wich cause problem with mti2fea.py script)

mti2fea parsing issue

There are 2 main issues for translating MTI files with mti2fea.py:
1. The lookups are not listed in the correct order.
When the rules are not applied in the right order, a substitution supposed to be applied on a glyph, (or a chain of glyphs) that is given by a previous rules won't be done. So one need to reorder it by hand (and it prevents full automatization of the parsing).
2. But most important, mti files use a "syntax" that is not supported in Adobe OT features : a succession of multiple lookups applied on an input in "chained lookup".
In Adobe features you're only allowed to have one lookup applied on a context. So after parsing the mti file, you need to read the rules, understand what the successive lookups are doing (because the lookups called can work on different parts of the context), and create a new lookup that achieve this in one row, and then call only this context in the rule of the "chained lookup".
Ex:
pos @backtrackgrp1 @backtrackgrp2 @inputgrp1' @inputgrp2' lookup Reph_subst @lookaheadgrp1;
is correct,
but:
pos @backtrackgrp1 @backtrackgrp2 @inputgrp1' @inputgrp2' lookup Reph_subst lookup Reva lookup other_subst @lookaheadgrp1;
will not work. MTI files use it because it's very powerful to deal with complex shaping.
The trick is that sometimes these complex rules call other chained lookups, that call chained lookup, and it can become quite complex to track what's going on.

Issues when generatic static fonts

These families can't be generated, because of bugs in the ufo files.
NotoSansSamaritan-Regular
NotoSansBuginese-Regular
NotoSansTirhuta-Regular
NotoSansGlagolitic-Regular
NotoSansHanunoo-Regular
NotoSansTakri-Regular

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.