diff --git a/.gitignore b/.gitignore
index 3c10540..b54992c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,9 +7,9 @@ node_modules
package-lock.json
package.json
master_ufo
-instance_ufo
-private_notes
-*.backup
+instance_ufos
+.ninja_log
+build.ninja
# OS generated files #
######################
@@ -21,7 +21,23 @@ private_notes
ehthumbs.db
Thumbs.db
-sources/*.ttf
-sources/*.otf
+# Autosaved by application when editing
+######################
+*(تم الحفظ تلقائيًا).*
+*(automaticky uloženo).*
+*(Automatisch gesichert).*
+*(Autosaved).*
+*(guardado automáticamente).*
+*(enregistré automatiquement).*
+*(salvato automaticamente).*
+*(自動保存).*
+*(자동 저장됨).*
+*(Salvo Automaticamente).*
+*(Автосохранение).*
+*(Otomatik Kaydedildi).*
+*(自动存储).*
+*(已自動儲存).*
-* (Autosaved).glyphs
+# Custom
+sources/KodeMono.backup
+private_notes
diff --git a/.templaterc.json b/.templaterc.json
new file mode 100644
index 0000000..176d7b2
--- /dev/null
+++ b/.templaterc.json
@@ -0,0 +1,8 @@
+{
+ "files": [
+ ".github/**/*",
+ "Makefile",
+ "scripts/**/*",
+ "requirements.txt"
+ ]
+}
\ No newline at end of file
diff --git a/DESCRIPTION.en_us.html b/DESCRIPTION.en_us.html
deleted file mode 100644
index 00248b2..0000000
--- a/DESCRIPTION.en_us.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
- A custom-designed typeface explicitly created for the developer community.
-
-
- This typeface is designed to enhance the user experience and reflect our principles of functionality and
- timelessness.
-
-
- To contribute, see github.com/isaozler/kode-mono.
-
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 24665ef..91972fe 100644
--- a/Makefile
+++ b/Makefile
@@ -67,4 +67,4 @@ update: venv venv-test
venv-test/bin/pip-sync requirements-test.txt
git commit -m "Update requirements" requirements.txt requirements-test.txt
- git push
\ No newline at end of file
+ git push
diff --git a/documentation/ARTICLE.en_us.html b/documentation/ARTICLE.en_us.html
new file mode 100644
index 0000000..495dc61
--- /dev/null
+++ b/documentation/ARTICLE.en_us.html
@@ -0,0 +1,12 @@
+
+
+ Kode Mono is a variable monospaced typeface designed specifically for the developer
+ community. Its key feature is clarity and functionality, making it ideal for coding environments where legibility
+ is crucial. The font includes ligatures, which are combinations of multiple characters into a single glyph—helpful
+ in improving the readability of common programming symbols in languages like JavaScript, Python, Haskell, and Rust.
+
+
+ To contribute, see github.com/isaozler/kode-mono.
+
+
+
\ No newline at end of file
diff --git a/documentation/DESCRIPTION.en_us.html b/documentation/DESCRIPTION.en_us.html
new file mode 100644
index 0000000..fb63e14
--- /dev/null
+++ b/documentation/DESCRIPTION.en_us.html
@@ -0,0 +1,10 @@
+
+ Kode Mono is a variable monospaced typeface designed specifically for the
+ developer
+ community. Its key feature is clarity and functionality, making it ideal for coding environments where legibility
+ is crucial. The font includes ligatures, which are combinations of multiple characters into a single glyph—helpful
+ in improving the readability of common programming symbols in languages like JavaScript, Python, Haskell, and Rust.
+
+
+ To contribute, see github.com/isaozler/kode-mono.
+
\ No newline at end of file
diff --git a/documentation/image1.png b/documentation/image1.png
index 5884bf7..c0551b5 100644
Binary files a/documentation/image1.png and b/documentation/image1.png differ
diff --git a/documentation/image1.py b/documentation/image1.py
index 8fc9f98..1dfe8d5 100644
--- a/documentation/image1.py
+++ b/documentation/image1.py
@@ -15,16 +15,18 @@
import argparse
# Constants, these are the main "settings" for the image
-WIDTH, HEIGHT, MARGIN, FRAMES = 2048, 2048, 128, 1
+WIDTH, HEIGHT, MARGIN, FRAMES = 2048, 1024, 128, 1
FONT_PATH = "fonts/ttf/KodeMono-Regular.ttf"
FONT_LICENSE = "OFL v1.1"
AUXILIARY_FONT = "Helvetica"
AUXILIARY_FONT_SIZE = 48
-BIG_TEXT = "Aa"
-BIG_TEXT_FONT_SIZE = 1024
-BIG_TEXT_SIDE_MARGIN = MARGIN * 3.1
-BIG_TEXT_BOTTOM_MARGIN = MARGIN * 5.5
-GRID_VIEW = False # Change this to "True" for a grid overlay
+
+BIG_TEXT = "AaBb"
+BIG_TEXT_FONT_SIZE = 730
+BIG_TEXT_SIDE_MARGIN = MARGIN * 1
+BIG_TEXT_BOTTOM_MARGIN = MARGIN * 2
+
+GRID_VIEW = False # Toggle this for a grid overlay
# Handel the "--output" flag
# For example: $ python3 documentation/image1.py --output documentation/image1.png
@@ -98,9 +100,9 @@ def draw_main_text():
# Divider lines
def draw_divider_lines():
stroke(1)
- strokeWidth(4)
+ strokeWidth(5)
lineCap("round")
- line((MARGIN, HEIGHT - MARGIN), (WIDTH - MARGIN, HEIGHT - MARGIN))
+ line((MARGIN, HEIGHT - (MARGIN * 1.5)), (WIDTH - MARGIN, HEIGHT - (MARGIN * 1.5)))
line((MARGIN, MARGIN + (MARGIN / 2)), (WIDTH - MARGIN, MARGIN + (MARGIN / 2)))
stroke(None)
@@ -110,8 +112,8 @@ def draw_auxiliary_text():
# Setup
font(AUXILIARY_FONT)
fontSize(AUXILIARY_FONT_SIZE)
- POS_TOP_LEFT = (MARGIN, HEIGHT - MARGIN * 1.5)
- POS_TOP_RIGHT = (WIDTH - MARGIN, HEIGHT - MARGIN * 1.5)
+ POS_TOP_LEFT = (MARGIN, HEIGHT - MARGIN * 1.25)
+ POS_TOP_RIGHT = (WIDTH - MARGIN, HEIGHT - MARGIN * 1.25)
POS_BOTTOM_LEFT = (MARGIN, MARGIN)
POS_BOTTOM_RIGHT = (WIDTH - MARGIN * 0.95, MARGIN)
URL_AND_HASH = MY_URL + "at commit " + MY_HASH
diff --git a/documentation/image2.png b/documentation/image2.png
new file mode 100644
index 0000000..103860c
Binary files /dev/null and b/documentation/image2.png differ
diff --git a/documentation/image2.py b/documentation/image2.py
new file mode 100644
index 0000000..b5c142c
--- /dev/null
+++ b/documentation/image2.py
@@ -0,0 +1,145 @@
+# This script is meant to be run from the root level
+# of your font's git repository. For example, from a Unix terminal:
+# $ git clone my-font
+# $ cd my-font
+# $ python3 documentation/image1.py --output documentation/image1.png
+
+# Import moduels from external python packages: https://pypi.org/
+from drawbot_skia.drawbot import *
+from fontTools.ttLib import TTFont
+from fontTools.misc.fixedTools import floatToFixedToStr
+
+# Import moduels from the Python Standard Library: https://docs.python.org/3/library/
+import subprocess
+import sys
+import argparse
+
+# Constants, these are the main "settings" for the image
+WIDTH, HEIGHT, MARGIN, FRAMES = 2048, 1024, 128, 1
+FONT_PATH = "fonts/ttf/KodeMono-Regular.ttf"
+FONT_LICENSE = "OFL v1.1"
+AUXILIARY_FONT = "Helvetica"
+AUXILIARY_FONT_SIZE = 48
+
+LINE_ONE = "ABCDEFGHIJKLMNOPQ"
+LINE_TWO = "RSTUVWXYZ123456789"
+LINE_THREE = "abcdefghijklmnopqrstu"
+LINE_FOUR = "vwxyz,.;:!@#$%^&*(){}[]"
+BIG_TEXT_FONT_SIZE = 160
+BIG_TEXT_SIDE_MARGIN = MARGIN * 1
+BIG_TEXT_BOTTOM_MARGIN = MARGIN * 5.45
+
+GRID_VIEW = False # Toggle this for a grid overlay
+
+# Handel the "--output" flag
+# For example: $ python3 documentation/image1.py --output documentation/image1.png
+parser = argparse.ArgumentParser()
+parser.add_argument("--output", metavar="PNG", help="where to write the PNG file")
+args = parser.parse_args()
+
+# Load the font with the parts of fonttools that are imported with the line:
+# from fontTools.ttLib import TTFont
+# Docs Link: https://fonttools.readthedocs.io/en/latest/ttLib/ttFont.html
+ttFont = TTFont(FONT_PATH)
+
+# Constants that are worked out dynamically
+MY_URL = subprocess.check_output("git remote get-url origin", shell=True).decode()
+MY_HASH = subprocess.check_output("git rev-parse --short HEAD", shell=True).decode()
+FONT_NAME = ttFont["name"].getDebugName(4)
+FONT_VERSION = "v%s" % floatToFixedToStr(ttFont["head"].fontRevision, 16)
+
+
+# Draws a grid
+def grid():
+ stroke(1, 0, 0, 0.75)
+ strokeWidth(2)
+ STEP_X, STEP_Y = 0, 0
+ INCREMENT_X, INCREMENT_Y = MARGIN / 2, MARGIN / 2
+ rect(MARGIN, MARGIN, WIDTH - (MARGIN * 2), HEIGHT - (MARGIN * 2))
+ for x in range(29):
+ polygon((MARGIN + STEP_X, MARGIN), (MARGIN + STEP_X, HEIGHT - MARGIN))
+ STEP_X += INCREMENT_X
+ for y in range(29):
+ polygon((MARGIN, MARGIN + STEP_Y), (WIDTH - MARGIN, MARGIN + STEP_Y))
+ STEP_Y += INCREMENT_Y
+ polygon((WIDTH / 2, 0), (WIDTH / 2, HEIGHT))
+ polygon((0, HEIGHT / 2), (WIDTH, HEIGHT / 2))
+
+
+# Remap input range to VF axis range
+# This is useful for animation
+# (E.g. sinewave(-1,1) to wght(100,900))
+def remap(value, inputMin, inputMax, outputMin, outputMax):
+ inputSpan = inputMax - inputMin # FIND INPUT RANGE SPAN
+ outputSpan = outputMax - outputMin # FIND OUTPUT RANGE SPAN
+ valueScaled = float(value - inputMin) / float(inputSpan)
+ return outputMin + (valueScaled * outputSpan)
+
+
+# Draw the page/frame and a grid if "GRID_VIEW" is set to "True"
+def draw_background():
+ newPage(WIDTH, HEIGHT)
+ fill(0)
+ rect(-2, -2, WIDTH + 2, HEIGHT + 2)
+ if GRID_VIEW:
+ grid()
+ else:
+ pass
+
+
+# Draw main text
+def draw_main_text():
+ fill(1)
+ stroke(None)
+ font(FONT_PATH)
+ fontSize(BIG_TEXT_FONT_SIZE)
+ # Adjust this line to center main text manually.
+ # TODO: This should be done automatically when drawbot-skia
+ # has support for textBox() and FormattedString
+ LEADING = 1.2
+ text(LINE_ONE, (BIG_TEXT_SIDE_MARGIN, BIG_TEXT_BOTTOM_MARGIN))
+ text(LINE_TWO, (BIG_TEXT_SIDE_MARGIN, BIG_TEXT_BOTTOM_MARGIN - (MARGIN * LEADING)))
+ text(LINE_THREE, (BIG_TEXT_SIDE_MARGIN, BIG_TEXT_BOTTOM_MARGIN - (MARGIN * (LEADING * 2))))
+ text(LINE_FOUR, (BIG_TEXT_SIDE_MARGIN, BIG_TEXT_BOTTOM_MARGIN - (MARGIN * (LEADING * 3))))
+
+
+# Divider lines
+def draw_divider_lines():
+ stroke(1)
+ strokeWidth(5)
+ lineCap("round")
+ line((MARGIN, HEIGHT - (MARGIN * 1.5)), (WIDTH - MARGIN, HEIGHT - (MARGIN * 1.5)))
+ line((MARGIN, MARGIN + (MARGIN / 2)), (WIDTH - MARGIN, MARGIN + (MARGIN / 2)))
+ stroke(None)
+
+
+# Draw text describing the font and it's git status & repo URL
+def draw_auxiliary_text():
+ # Setup
+ font(AUXILIARY_FONT)
+ fontSize(AUXILIARY_FONT_SIZE)
+ POS_TOP_LEFT = (MARGIN, HEIGHT - MARGIN * 1.25)
+ POS_TOP_RIGHT = (WIDTH - MARGIN, HEIGHT - MARGIN * 1.25)
+ POS_BOTTOM_LEFT = (MARGIN, MARGIN)
+ POS_BOTTOM_RIGHT = (WIDTH - MARGIN * 0.95, MARGIN)
+ #URL_AND_HASH = "github.com/googlefonts/googlefonts-project-template " + "at commit " + MY_HASH
+ URL_AND_HASH = MY_URL + "at commit " + MY_HASH
+ URL_AND_HASH = URL_AND_HASH.replace("\n", " ")
+ # Draw Text
+ #text("Your Font Regular", POS_TOP_LEFT, align="left")
+ text(FONT_NAME, POS_TOP_LEFT, align="left")
+ text(FONT_VERSION, POS_TOP_RIGHT, align="right")
+ text(URL_AND_HASH, POS_BOTTOM_LEFT, align="left")
+ text(FONT_LICENSE, POS_BOTTOM_RIGHT, align="right")
+
+
+# Build and save the image
+if __name__ == "__main__":
+ draw_background()
+ draw_main_text()
+ draw_divider_lines()
+ draw_auxiliary_text()
+ # Save output, using the "--output" flag location
+ saveImage(args.output)
+ # Print done in the terminal
+ print("DrawBot: Done")
diff --git a/documentation/images-license.txt b/documentation/images-license.txt
new file mode 100644
index 0000000..db75db6
--- /dev/null
+++ b/documentation/images-license.txt
@@ -0,0 +1 @@
+The images in this repository are licensed under the CC https://creativecommons.org/licenses/by-sa/4.0/
diff --git a/documentation/images/cover.jpg b/documentation/images/cover.jpg
new file mode 100644
index 0000000..e35f257
Binary files /dev/null and b/documentation/images/cover.jpg differ
diff --git a/documentation/images/grid.jpg b/documentation/images/grid.jpg
new file mode 100644
index 0000000..99543f1
Binary files /dev/null and b/documentation/images/grid.jpg differ
diff --git a/documentation/images/outlines.jpg b/documentation/images/outlines.jpg
new file mode 100644
index 0000000..4ede638
Binary files /dev/null and b/documentation/images/outlines.jpg differ
diff --git a/fonts/ttf/KodeMono-Bold.ttf b/fonts/ttf/KodeMono-Bold.ttf
index 74d7569..14e3cbe 100644
Binary files a/fonts/ttf/KodeMono-Bold.ttf and b/fonts/ttf/KodeMono-Bold.ttf differ
diff --git a/fonts/ttf/KodeMono-Medium.ttf b/fonts/ttf/KodeMono-Medium.ttf
index cfc63f4..5371d9a 100644
Binary files a/fonts/ttf/KodeMono-Medium.ttf and b/fonts/ttf/KodeMono-Medium.ttf differ
diff --git a/fonts/ttf/KodeMono-Regular.ttf b/fonts/ttf/KodeMono-Regular.ttf
index 79d74dd..6676d71 100644
Binary files a/fonts/ttf/KodeMono-Regular.ttf and b/fonts/ttf/KodeMono-Regular.ttf differ
diff --git a/fonts/ttf/KodeMono-SemiBold.ttf b/fonts/ttf/KodeMono-SemiBold.ttf
index 7133c1f..05a2c42 100644
Binary files a/fonts/ttf/KodeMono-SemiBold.ttf and b/fonts/ttf/KodeMono-SemiBold.ttf differ
diff --git a/fonts/variable/KodeMono[wght].ttf b/fonts/variable/KodeMono[wght].ttf
index dd9c42e..ee930ff 100644
Binary files a/fonts/variable/KodeMono[wght].ttf and b/fonts/variable/KodeMono[wght].ttf differ
diff --git a/fonts/webfonts/KodeMono-Bold.woff2 b/fonts/webfonts/KodeMono-Bold.woff2
index 0b18e9f..6168988 100644
Binary files a/fonts/webfonts/KodeMono-Bold.woff2 and b/fonts/webfonts/KodeMono-Bold.woff2 differ
diff --git a/fonts/webfonts/KodeMono-Medium.woff2 b/fonts/webfonts/KodeMono-Medium.woff2
index 6cf086f..71bea6b 100644
Binary files a/fonts/webfonts/KodeMono-Medium.woff2 and b/fonts/webfonts/KodeMono-Medium.woff2 differ
diff --git a/fonts/webfonts/KodeMono-Regular.woff2 b/fonts/webfonts/KodeMono-Regular.woff2
index acb4dee..cf94ffb 100644
Binary files a/fonts/webfonts/KodeMono-Regular.woff2 and b/fonts/webfonts/KodeMono-Regular.woff2 differ
diff --git a/fonts/webfonts/KodeMono-SemiBold.woff2 b/fonts/webfonts/KodeMono-SemiBold.woff2
index 8c98f55..e50255e 100644
Binary files a/fonts/webfonts/KodeMono-SemiBold.woff2 and b/fonts/webfonts/KodeMono-SemiBold.woff2 differ
diff --git a/fonts/webfonts/KodeMono[wght].woff2 b/fonts/webfonts/KodeMono[wght].woff2
index 602fd2a..4984c27 100644
Binary files a/fonts/webfonts/KodeMono[wght].woff2 and b/fonts/webfonts/KodeMono[wght].woff2 differ
diff --git a/out/fontbakery/fontbakery-report.html b/out/fontbakery/fontbakery-report.html
index 093f2fd..e726d1f 100644
--- a/out/fontbakery/fontbakery-report.html
+++ b/out/fontbakery/fontbakery-report.html
@@ -3126,36 +3126,36 @@
U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
-U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
-U+0305 COMBINING OVERLINE: try adding one of: math, elbasan, glagolitic, coptic, gothic
-U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
-U+0307 COMBINING DOT ABOVE: try adding one of: math, old-permic, canadian-aboriginal, duployan, malayalam, coptic, tifinagh, hebrew, todhri, tai-le, syriac
+U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: cherokee, tifinagh, coptic, math
+U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, elbasan, gothic, coptic
+U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
+U+0307 COMBINING DOT ABOVE: try adding one of: canadian-aboriginal, hebrew, math, tai-le, syriac, malayalam, todhri, old-permic, tifinagh, coptic, duployan
U+030A COMBINING RING ABOVE: try adding one of: syriac, duployan
-U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
+U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
U+030C COMBINING CARON: try adding one of: cherokee, tai-le
U+030D COMBINING VERTICAL LINE ABOVE: try adding sunuwar
U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: try adding ethiopic
-U+0310 COMBINING CANDRABINDU: try adding one of: math, sunuwar
+U+0310 COMBINING CANDRABINDU: try adding one of: sunuwar, math
U+0312 COMBINING TURNED COMMA ABOVE: try adding math
U+0313 COMBINING COMMA ABOVE: try adding one of: todhri, old-permic
U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
-U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, duployan, cherokee
+U+0324 COMBINING DIAERESIS BELOW: try adding one of: cherokee, syriac, duployan
U+0325 COMBINING RING BELOW: try adding syriac
U+0326 COMBINING COMMA BELOW: try adding math
U+0327 COMBINING CEDILLA: try adding math
U+0328 COMBINING OGONEK: not included in any glyphset definition
-U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding one of: syriac, sunuwar
+U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding one of: sunuwar, syriac
U+032E COMBINING BREVE BELOW: try adding syriac
-U+0331 COMBINING MACRON BELOW: try adding one of: sunuwar, tifinagh, thai, caucasian-albanian, syriac, gothic, cherokee
+U+0331 COMBINING MACRON BELOW: try adding one of: cherokee, syriac, thai, sunuwar, gothic, tifinagh, caucasian-albanian
U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
U+0338 COMBINING LONG SOLIDUS OVERLAY: try adding math
-U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, math, elbasan
-U+03BC GREEK SMALL LETTER MU: try adding one of: math, greek
-U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, math, greek
+U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: elbasan, greek, math
+U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math
+U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math
U+2017 DOUBLE LOW LINE: try adding math
U+2021 DOUBLE DAGGER: try adding adlam
U+2030 PER MILLE SIGN: try adding adlam
@@ -3184,14 +3184,14 @@
U+215D VULGAR FRACTION FIVE EIGHTHS: try adding symbols
U+215E VULGAR FRACTION SEVEN EIGHTHS: try adding symbols
U+215F FRACTION NUMERATOR ONE: try adding symbols
-U+2190 LEFTWARDS ARROW: try adding one of: symbols, math
-U+2192 RIGHTWARDS ARROW: try adding one of: symbols, math
-U+2194 LEFT RIGHT ARROW: try adding one of: symbols, math
-U+2195 UP DOWN ARROW: try adding one of: symbols, math
-U+2196 NORTH WEST ARROW: try adding one of: symbols, math
-U+2197 NORTH EAST ARROW: try adding one of: symbols, math
-U+2198 SOUTH EAST ARROW: try adding one of: symbols, math
-U+2199 SOUTH WEST ARROW: try adding one of: symbols, math
+U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
+U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
+U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
+U+2195 UP DOWN ARROW: try adding one of: math, symbols
+U+2196 NORTH WEST ARROW: try adding one of: math, symbols
+U+2197 NORTH EAST ARROW: try adding one of: math, symbols
+U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
+U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
U+2200 FOR ALL: try adding math
U+2202 PARTIAL DIFFERENTIAL: try adding math
U+220F N-ARY PRODUCT: try adding math
@@ -3215,8 +3215,8 @@
U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL: try adding symbols2
U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL: try adding symbols2
U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL: try adding symbols2
-U+25CA LOZENGE: try adding one of: symbols, math
-U+25CC DOTTED CIRCLE: try adding one of: buginese, batak, phags-pa, marchen, canadian-aboriginal, lepcha, tai-le, bhaiksuki, bassa-vah, bengali, kaithi, oriya, tamil, sinhala, warang-citi, sundanese, thai, miao, kannada, psalter-pahlavi, mende-kikakui, tai-viet, buhid, meetei-mayek, duployan, rejang, ahom, tirhuta, saurashtra, grantha, wancho, armenian, math, kayah-li, gunjala-gondi, hanifi-rohingya, gurmukhi, mongolian, soyombo, mandaic, sharada, new-tai-lue, thaana, old-permic, nko, cham, tai-tham, modi, syloti-nagri, gujarati, caucasian-albanian, telugu, khudawadi, mahajani, balinese, khmer, khojki, masaram-gondi, elbasan, symbols, hebrew, tibetan, adlam, devanagari, limbu, malayalam, chakma, takri, javanese, myanmar, newa, syriac, sogdian, kharoshthi, brahmi, hanunoo, tagalog, manichaean, tifinagh, pahawh-hmong, siddham, tagbanwa, dogra, osage, zanabazar-square, lao, yi, coptic, music
+U+25CA LOZENGE: try adding one of: math, symbols
+U+25CC DOTTED CIRCLE: try adding one of: psalter-pahlavi, music, thaana, tamil, caucasian-albanian, oriya, tai-tham, tagalog, symbols, elbasan, bassa-vah, armenian, kharoshthi, hanifi-rohingya, nko, hebrew, balinese, marchen, grantha, soyombo, zanabazar-square, kayah-li, masaram-gondi, duployan, math, tai-viet, malayalam, telugu, tagbanwa, wancho, mongolian, rejang, mandaic, tibetan, sundanese, yi, mende-kikakui, adlam, meetei-mayek, lao, tai-le, mahajani, takri, bhaiksuki, myanmar, old-permic, tifinagh, gujarati, kaithi, syriac, new-tai-lue, buhid, cham, warang-citi, chakma, phags-pa, siddham, sogdian, devanagari, bengali, osage, miao, canadian-aboriginal, thai, limbu, lepcha, kannada, gurmukhi, brahmi, manichaean, hanunoo, ahom, khojki, tirhuta, gunjala-gondi, batak, buginese, dogra, pahawh-hmong, khmer, khudawadi, sharada, sinhala, javanese, coptic, newa, saurashtra, modi, syloti-nagri
U+EE00 : not included in any glyphset definition
U+EE01 : not included in any glyphset definition
U+EE02 : not included in any glyphset definition
diff --git a/out/fontbakery/fontbakery-report.md b/out/fontbakery/fontbakery-report.md
index 8fe823a..bab7ce6 100644
--- a/out/fontbakery/fontbakery-report.md
+++ b/out/fontbakery/fontbakery-report.md
@@ -90,36 +90,36 @@ definitions.
U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
-U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
-U+0305 COMBINING OVERLINE: try adding one of: math, elbasan, glagolitic, coptic, gothic
-U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
-U+0307 COMBINING DOT ABOVE: try adding one of: math, old-permic, canadian-aboriginal, duployan, malayalam, coptic, tifinagh, hebrew, todhri, tai-le, syriac
+U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: cherokee, tifinagh, coptic, math
+U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, elbasan, gothic, coptic
+U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
+U+0307 COMBINING DOT ABOVE: try adding one of: canadian-aboriginal, hebrew, math, tai-le, syriac, malayalam, todhri, old-permic, tifinagh, coptic, duployan
U+030A COMBINING RING ABOVE: try adding one of: syriac, duployan
-U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
+U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
U+030C COMBINING CARON: try adding one of: cherokee, tai-le
U+030D COMBINING VERTICAL LINE ABOVE: try adding sunuwar
U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: try adding ethiopic
-U+0310 COMBINING CANDRABINDU: try adding one of: math, sunuwar
+U+0310 COMBINING CANDRABINDU: try adding one of: sunuwar, math
U+0312 COMBINING TURNED COMMA ABOVE: try adding math
U+0313 COMBINING COMMA ABOVE: try adding one of: todhri, old-permic
U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
-U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, duployan, cherokee
+U+0324 COMBINING DIAERESIS BELOW: try adding one of: cherokee, syriac, duployan
U+0325 COMBINING RING BELOW: try adding syriac
U+0326 COMBINING COMMA BELOW: try adding math
U+0327 COMBINING CEDILLA: try adding math
U+0328 COMBINING OGONEK: not included in any glyphset definition
-U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding one of: syriac, sunuwar
+U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding one of: sunuwar, syriac
U+032E COMBINING BREVE BELOW: try adding syriac
-U+0331 COMBINING MACRON BELOW: try adding one of: sunuwar, tifinagh, thai, caucasian-albanian, syriac, gothic, cherokee
+U+0331 COMBINING MACRON BELOW: try adding one of: cherokee, syriac, thai, sunuwar, gothic, tifinagh, caucasian-albanian
U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
U+0338 COMBINING LONG SOLIDUS OVERLAY: try adding math
-U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, math, elbasan
-U+03BC GREEK SMALL LETTER MU: try adding one of: math, greek
-U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, math, greek
+U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: elbasan, greek, math
+U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math
+U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math
U+2017 DOUBLE LOW LINE: try adding math
U+2021 DOUBLE DAGGER: try adding adlam
U+2030 PER MILLE SIGN: try adding adlam
@@ -148,14 +148,14 @@ definitions.
U+215D VULGAR FRACTION FIVE EIGHTHS: try adding symbols
U+215E VULGAR FRACTION SEVEN EIGHTHS: try adding symbols
U+215F FRACTION NUMERATOR ONE: try adding symbols
-U+2190 LEFTWARDS ARROW: try adding one of: symbols, math
-U+2192 RIGHTWARDS ARROW: try adding one of: symbols, math
-U+2194 LEFT RIGHT ARROW: try adding one of: symbols, math
-U+2195 UP DOWN ARROW: try adding one of: symbols, math
-U+2196 NORTH WEST ARROW: try adding one of: symbols, math
-U+2197 NORTH EAST ARROW: try adding one of: symbols, math
-U+2198 SOUTH EAST ARROW: try adding one of: symbols, math
-U+2199 SOUTH WEST ARROW: try adding one of: symbols, math
+U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
+U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
+U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
+U+2195 UP DOWN ARROW: try adding one of: math, symbols
+U+2196 NORTH WEST ARROW: try adding one of: math, symbols
+U+2197 NORTH EAST ARROW: try adding one of: math, symbols
+U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
+U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
U+2200 FOR ALL: try adding math
U+2202 PARTIAL DIFFERENTIAL: try adding math
U+220F N-ARY PRODUCT: try adding math
@@ -179,8 +179,8 @@ definitions.
U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL: try adding symbols2
U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL: try adding symbols2
U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL: try adding symbols2
-U+25CA LOZENGE: try adding one of: symbols, math
-U+25CC DOTTED CIRCLE: try adding one of: buginese, batak, phags-pa, marchen, canadian-aboriginal, lepcha, tai-le, bhaiksuki, bassa-vah, bengali, kaithi, oriya, tamil, sinhala, warang-citi, sundanese, thai, miao, kannada, psalter-pahlavi, mende-kikakui, tai-viet, buhid, meetei-mayek, duployan, rejang, ahom, tirhuta, saurashtra, grantha, wancho, armenian, math, kayah-li, gunjala-gondi, hanifi-rohingya, gurmukhi, mongolian, soyombo, mandaic, sharada, new-tai-lue, thaana, old-permic, nko, cham, tai-tham, modi, syloti-nagri, gujarati, caucasian-albanian, telugu, khudawadi, mahajani, balinese, khmer, khojki, masaram-gondi, elbasan, symbols, hebrew, tibetan, adlam, devanagari, limbu, malayalam, chakma, takri, javanese, myanmar, newa, syriac, sogdian, kharoshthi, brahmi, hanunoo, tagalog, manichaean, tifinagh, pahawh-hmong, siddham, tagbanwa, dogra, osage, zanabazar-square, lao, yi, coptic, music
+U+25CA LOZENGE: try adding one of: math, symbols
+U+25CC DOTTED CIRCLE: try adding one of: psalter-pahlavi, music, thaana, tamil, caucasian-albanian, oriya, tai-tham, tagalog, symbols, elbasan, bassa-vah, armenian, kharoshthi, hanifi-rohingya, nko, hebrew, balinese, marchen, grantha, soyombo, zanabazar-square, kayah-li, masaram-gondi, duployan, math, tai-viet, malayalam, telugu, tagbanwa, wancho, mongolian, rejang, mandaic, tibetan, sundanese, yi, mende-kikakui, adlam, meetei-mayek, lao, tai-le, mahajani, takri, bhaiksuki, myanmar, old-permic, tifinagh, gujarati, kaithi, syriac, new-tai-lue, buhid, cham, warang-citi, chakma, phags-pa, siddham, sogdian, devanagari, bengali, osage, miao, canadian-aboriginal, thai, limbu, lepcha, kannada, gurmukhi, brahmi, manichaean, hanunoo, ahom, khojki, tirhuta, gunjala-gondi, batak, buginese, dogra, pahawh-hmong, khmer, khudawadi, sharada, sinhala, javanese, coptic, newa, saurashtra, modi, syloti-nagri
U+EE00 : not included in any glyphset definition
U+EE01 : not included in any glyphset definition
U+EE02 : not included in any glyphset definition
diff --git a/renovate.json b/renovate.json
new file mode 100644
index 0000000..8231f98
--- /dev/null
+++ b/renovate.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "config:recommended"
+ ],
+ "rangeStrategy": "bump"
+}
\ No newline at end of file
diff --git a/requirements-test.in b/requirements-test.in
new file mode 100644
index 0000000..a0347a8
--- /dev/null
+++ b/requirements-test.in
@@ -0,0 +1,2 @@
+fontbakery[googlefonts]>=0.9.2
+gftools[qa]>=0.9.23
\ No newline at end of file
diff --git a/requirements-test.txt b/requirements-test.txt
index a0347a8..edf50d5 100644
--- a/requirements-test.txt
+++ b/requirements-test.txt
@@ -1,2 +1,479 @@
-fontbakery[googlefonts]>=0.9.2
-gftools[qa]>=0.9.23
\ No newline at end of file
+#
+# This file is autogenerated by pip-compile with Python 3.10
+# by the following command:
+#
+# pip-compile requirements-test.in
+#
+absl-py==2.1.0
+ # via
+ # gftools
+ # nanoemoji
+ # picosvg
+afdko==4.0.1
+ # via gftools
+appdirs==1.4.4
+ # via fs
+attrs==24.2.0
+ # via
+ # cattrs
+ # outcome
+ # statmake
+ # trio
+ # ufolib2
+axisregistry==0.4.11
+ # via
+ # fontbakery
+ # gftools
+babelfont==3.0.5
+ # via
+ # collidoscope
+ # gftools
+beautifulsoup4==4.12.3
+ # via
+ # fontbakery
+ # gftools
+beziers==0.6.0
+ # via fontbakery
+blackrenderer[skia]==0.6.0
+ # via diffenator2
+booleanoperations==0.9.0
+ # via
+ # afdko
+ # fontparts
+ # ufo2ft
+brotli==1.1.0
+ # via
+ # fonttools
+ # gftools
+bump2version==1.0.1
+ # via bumpfontversion
+bumpfontversion==0.4.1
+ # via gftools
+cattrs==24.1.2
+ # via
+ # statmake
+ # ufolib2
+certifi==2024.8.30
+ # via
+ # requests
+ # selenium
+cffi==1.17.1
+ # via
+ # cmarkgfm
+ # cryptography
+ # pygit2
+ # pynacl
+cffsubr==0.3.0
+ # via ufo2ft
+charset-normalizer==3.4.0
+ # via requests
+cmarkgfm==2024.1.14
+ # via fontbakery
+collidoscope==0.6.5
+ # via fontbakery
+commandlines==0.4.1
+ # via ufolint
+compreffor==0.5.5
+ # via ufo2ft
+cryptography==43.0.1
+ # via pyjwt
+defcon[lxml,pens]==0.10.3
+ # via
+ # afdko
+ # fontbakery
+ # fontparts
+ # glyphsets
+ # mutatormath
+ # ufoprocessor
+dehinter==4.0.0
+ # via fontbakery
+deprecated==1.2.14
+ # via pygithub
+diffenator2==0.4.4
+ # via gftools
+docopt==0.6.2
+ # via num2words
+exceptiongroup==1.2.2
+ # via
+ # cattrs
+ # trio
+ # trio-websocket
+filelock==3.16.1
+ # via youseedee
+font-v==2.1.0
+ # via gftools
+fontbakery[beautifulsoup4,googlefonts,googlefontsalwayslatest,shaperglot]==0.12.10
+ # via
+ # -r requirements-test.in
+ # gftools
+fontfeatures==1.8.0
+ # via
+ # babelfont
+ # gftools
+fontmake[json]==3.9.0
+ # via gftools
+fontmath==0.9.4
+ # via
+ # afdko
+ # fontmake
+ # fontparts
+ # mutatormath
+ # ufo2ft
+ # ufoprocessor
+fontparts==0.12.2
+ # via ufoprocessor
+fontpens==0.2.4
+ # via defcon
+fonttools[lxml,ufo,unicode,woff]==4.54.1
+ # via
+ # afdko
+ # axisregistry
+ # babelfont
+ # blackrenderer
+ # booleanoperations
+ # bumpfontversion
+ # cffsubr
+ # collidoscope
+ # compreffor
+ # defcon
+ # dehinter
+ # diffenator2
+ # font-v
+ # fontbakery
+ # fontfeatures
+ # fontmake
+ # fontmath
+ # fontparts
+ # fontpens
+ # gftools
+ # glyphsets
+ # glyphslib
+ # kurbopy
+ # mutatormath
+ # nanoemoji
+ # statmake
+ # ufo2ft
+ # ufolib2
+ # ufolint
+ # ufomerge
+ # ufoprocessor
+ # vfblib
+ # vharfbuzz
+ # vttlib
+freetype-py==2.3.0
+ # via
+ # diffenator2
+ # fontbakery
+fs==2.4.16
+ # via
+ # fontfeatures
+ # fonttools
+gflanguages==0.6.4
+ # via
+ # diffenator2
+ # fontbakery
+ # gftools
+ # glyphsets
+ # shaperglot
+gfsubsets==2024.9.25
+ # via
+ # fontbakery
+ # gftools
+gftools[qa]==0.9.71
+ # via -r requirements-test.in
+gitdb==4.0.11
+ # via gitpython
+gitpython==3.1.43
+ # via font-v
+glyphsets==1.0.0
+ # via
+ # diffenator2
+ # fontbakery
+ # gftools
+glyphslib==6.9.2
+ # via
+ # babelfont
+ # bumpfontversion
+ # fontmake
+ # gftools
+ # glyphsets
+h11==0.14.0
+ # via wsproto
+idna==3.10
+ # via
+ # requests
+ # trio
+importlib-resources==6.4.5
+ # via gfsubsets
+jinja2==3.1.4
+ # via
+ # diffenator2
+ # fontbakery
+ # gftools
+kurbopy==0.11.0
+ # via collidoscope
+lxml==5.3.0
+ # via
+ # afdko
+ # fontfeatures
+ # fonttools
+ # nanoemoji
+ # picosvg
+markdown-it-py==3.0.0
+ # via rich
+markupsafe==3.0.1
+ # via jinja2
+mdurl==0.1.2
+ # via markdown-it-py
+munkres==1.1.4
+ # via fontbakery
+mutatormath==3.0.1
+ # via ufoprocessor
+nanoemoji==0.15.1
+ # via gftools
+networkx==3.4
+ # via gftools
+ninja==1.11.1.1
+ # via
+ # diffenator2
+ # gftools
+ # nanoemoji
+num2words==0.5.13
+ # via shaperglot
+numpy==2.1.2
+ # via
+ # blackrenderer
+ # skia-python
+openstep-plist==0.3.1
+ # via
+ # babelfont
+ # bumpfontversion
+ # glyphslib
+opentype-sanitizer==9.1.0
+ # via
+ # fontbakery
+ # gftools
+opentypespec==1.9.1
+ # via fontbakery
+orjson==3.10.7
+ # via
+ # babelfont
+ # ufolib2
+outcome==1.3.0.post0
+ # via trio
+packaging==24.1
+ # via
+ # fontbakery
+ # gftools
+picosvg==0.22.1
+ # via nanoemoji
+pillow==10.4.0
+ # via
+ # diffenator2
+ # gftools
+ # nanoemoji
+pip-api==0.0.34
+ # via fontbakery
+pngquant-cli==3.0.3
+ # via nanoemoji
+protobuf==3.20.3
+ # via
+ # axisregistry
+ # diffenator2
+ # fontbakery
+ # gflanguages
+ # gftools
+ # shaperglot
+pyahocorasick==2.1.0
+ # via diffenator2
+pybind11==2.13.6
+ # via skia-python
+pycairo==1.27.0
+ # via gftools
+pyclipper==1.3.0.post5
+ # via
+ # beziers
+ # booleanoperations
+pycparser==2.22
+ # via cffi
+pygit2==1.14.1
+ # via gftools
+pygithub==2.4.0
+ # via gftools
+pygments==2.18.0
+ # via rich
+pyjwt[crypto]==2.9.0
+ # via pygithub
+pynacl==1.5.0
+ # via pygithub
+pyparsing==3.1.4
+ # via vttlib
+pysocks==1.7.1
+ # via urllib3
+python-bidi==0.4.2
+ # via diffenator2
+python-dateutil==2.9.0.post0
+ # via strictyaml
+pyyaml==6.0.2
+ # via
+ # fontbakery
+ # gftools
+ # glyphsets
+ # shaperglot
+regex==2024.9.11
+ # via nanoemoji
+requests==2.32.3
+ # via
+ # fontbakery
+ # gftools
+ # glyphsets
+ # pygithub
+ # youseedee
+resvg-cli==0.44.0
+ # via nanoemoji
+rich==13.9.2
+ # via
+ # fontbakery
+ # gftools
+rstr==3.2.2
+ # via stringbrewer
+ruamel-yaml==0.18.6
+ # via gftools
+ruamel-yaml-clib==0.2.8
+ # via ruamel-yaml
+selenium==4.25.0
+ # via diffenator2
+shaperglot==0.5.1
+ # via fontbakery
+six==1.16.0
+ # via
+ # fs
+ # python-bidi
+ # python-dateutil
+skia-pathops==0.8.0.post1
+ # via
+ # collidoscope
+ # gftools
+ # picosvg
+skia-python==87.6
+ # via blackrenderer
+smmap==5.0.1
+ # via gitdb
+sniffio==1.3.1
+ # via trio
+sortedcontainers==2.4.0
+ # via trio
+soupsieve==2.6
+ # via beautifulsoup4
+sre-yield==1.2
+ # via stringbrewer
+statmake==0.6.0
+ # via gftools
+strictyaml==1.7.3
+ # via
+ # gftools
+ # shaperglot
+stringbrewer==0.0.1
+ # via fontbakery
+tabulate==0.9.0
+ # via gftools
+termcolor==2.5.0
+ # via shaperglot
+toml==0.10.2
+ # via
+ # fontbakery
+ # nanoemoji
+tqdm==4.66.5
+ # via
+ # afdko
+ # collidoscope
+ # diffenator2
+trio==0.26.2
+ # via
+ # selenium
+ # trio-websocket
+trio-websocket==0.11.1
+ # via selenium
+ttfautohint-py==0.5.1
+ # via gftools
+typing-extensions==4.12.2
+ # via
+ # cattrs
+ # fontbakery
+ # pygithub
+ # rich
+ # selenium
+ # vfblib
+ufo2ft[cffsubr,compreffor]==3.3.1
+ # via
+ # fontbakery
+ # fontmake
+ # nanoemoji
+ # shaperglot
+ufolib2[json]==0.16.0
+ # via
+ # babelfont
+ # bumpfontversion
+ # fontmake
+ # glyphslib
+ # nanoemoji
+ # ufomerge
+ # vfblib
+ # vttlib
+ufolint==1.2.0
+ # via fontbakery
+ufomerge==1.8.2
+ # via gftools
+ufonormalizer==0.6.2
+ # via
+ # afdko
+ # vfblib
+ufoprocessor==1.13.1
+ # via afdko
+uharfbuzz==0.41.0
+ # via
+ # blackrenderer
+ # collidoscope
+ # diffenator2
+ # fontbakery
+ # vharfbuzz
+unicodedata2==15.1.0
+ # via
+ # diffenator2
+ # fontbakery
+ # fonttools
+ # glyphsets
+unidecode==1.3.8
+ # via gftools
+urllib3[socks]==2.2.3
+ # via
+ # pygithub
+ # requests
+ # selenium
+vfblib==0.7.1
+ # via babelfont
+vharfbuzz==0.3.1
+ # via
+ # fontbakery
+ # gftools
+ # shaperglot
+vttlib==0.12.0
+ # via gftools
+websocket-client==1.8.0
+ # via selenium
+wrapt==1.16.0
+ # via deprecated
+wsproto==1.2.0
+ # via trio-websocket
+youseedee==0.5.3
+ # via
+ # diffenator2
+ # shaperglot
+zopfli==0.2.3
+ # via
+ # fonttools
+ # nanoemoji
+
+# The following packages are considered to be unsafe in a requirements file:
+# pip
+# setuptools
diff --git a/requirements.in b/requirements.in
new file mode 100644
index 0000000..d63ae05
--- /dev/null
+++ b/requirements.in
@@ -0,0 +1,6 @@
+fontmake>=3.9.0
+gftools[qa]>=0.9.54
+drawbot-skia>=0.5.0
+sh>=2.0.6
+bumpfontversion>=0.4.1
+diffenator2>=0.3.8
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index d63ae05..2138726 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,497 @@
-fontmake>=3.9.0
-gftools[qa]>=0.9.54
-drawbot-skia>=0.5.0
-sh>=2.0.6
-bumpfontversion>=0.4.1
-diffenator2>=0.3.8
\ No newline at end of file
+#
+# This file is autogenerated by pip-compile with Python 3.10
+# by the following command:
+#
+# pip-compile requirements.in
+#
+absl-py==2.1.0
+ # via
+ # gftools
+ # nanoemoji
+ # picosvg
+afdko==4.0.1
+ # via gftools
+appdirs==1.4.4
+ # via fs
+attrs==24.2.0
+ # via
+ # cattrs
+ # outcome
+ # statmake
+ # trio
+ # ufolib2
+axisregistry==0.4.11
+ # via
+ # fontbakery
+ # gftools
+babelfont==3.0.5
+ # via
+ # collidoscope
+ # gftools
+beautifulsoup4==4.12.3
+ # via
+ # fontbakery
+ # gftools
+beziers==0.6.0
+ # via fontbakery
+blackrenderer[skia]==0.6.0
+ # via
+ # diffenator2
+ # drawbot-skia
+booleanoperations==0.9.0
+ # via
+ # afdko
+ # fontparts
+ # ufo2ft
+brotli==1.1.0
+ # via
+ # fonttools
+ # gftools
+bump2version==1.0.1
+ # via bumpfontversion
+bumpfontversion==0.4.1
+ # via
+ # -r requirements.in
+ # gftools
+cattrs==24.1.2
+ # via
+ # statmake
+ # ufolib2
+certifi==2024.8.30
+ # via
+ # requests
+ # selenium
+cffi==1.17.1
+ # via
+ # cmarkgfm
+ # cryptography
+ # pygit2
+ # pynacl
+cffsubr==0.3.0
+ # via ufo2ft
+charset-normalizer==3.4.0
+ # via requests
+cmarkgfm==2024.1.14
+ # via fontbakery
+collidoscope==0.6.5
+ # via fontbakery
+commandlines==0.4.1
+ # via ufolint
+compreffor==0.5.5
+ # via ufo2ft
+cryptography==43.0.1
+ # via pyjwt
+defcon[lxml,pens]==0.10.3
+ # via
+ # afdko
+ # fontbakery
+ # fontparts
+ # glyphsets
+ # mutatormath
+ # ufoprocessor
+dehinter==4.0.0
+ # via fontbakery
+deprecated==1.2.14
+ # via pygithub
+diffenator2==0.4.4
+ # via
+ # -r requirements.in
+ # gftools
+docopt==0.6.2
+ # via num2words
+drawbot-skia==0.5.1
+ # via -r requirements.in
+exceptiongroup==1.2.2
+ # via
+ # cattrs
+ # trio
+ # trio-websocket
+filelock==3.16.1
+ # via youseedee
+font-v==2.1.0
+ # via gftools
+fontbakery[beautifulsoup4,googlefonts,googlefontsalwayslatest,shaperglot]==0.12.10
+ # via gftools
+fontfeatures==1.8.0
+ # via
+ # babelfont
+ # gftools
+fontmake[json]==3.9.0
+ # via
+ # -r requirements.in
+ # gftools
+fontmath==0.9.4
+ # via
+ # afdko
+ # fontmake
+ # fontparts
+ # mutatormath
+ # ufo2ft
+ # ufoprocessor
+fontparts==0.12.2
+ # via ufoprocessor
+fontpens==0.2.4
+ # via defcon
+fonttools[lxml,ufo,unicode,woff]==4.54.1
+ # via
+ # afdko
+ # axisregistry
+ # babelfont
+ # blackrenderer
+ # booleanoperations
+ # bumpfontversion
+ # cffsubr
+ # collidoscope
+ # compreffor
+ # defcon
+ # dehinter
+ # diffenator2
+ # drawbot-skia
+ # font-v
+ # fontbakery
+ # fontfeatures
+ # fontmake
+ # fontmath
+ # fontparts
+ # fontpens
+ # gftools
+ # glyphsets
+ # glyphslib
+ # kurbopy
+ # mutatormath
+ # nanoemoji
+ # statmake
+ # ufo2ft
+ # ufolib2
+ # ufolint
+ # ufomerge
+ # ufoprocessor
+ # vfblib
+ # vharfbuzz
+ # vttlib
+freetype-py==2.3.0
+ # via
+ # diffenator2
+ # fontbakery
+fs==2.4.16
+ # via
+ # fontfeatures
+ # fonttools
+gflanguages==0.6.4
+ # via
+ # diffenator2
+ # fontbakery
+ # gftools
+ # glyphsets
+ # shaperglot
+gfsubsets==2024.9.25
+ # via
+ # fontbakery
+ # gftools
+gftools[qa]==0.9.71
+ # via -r requirements.in
+gitdb==4.0.11
+ # via gitpython
+gitpython==3.1.43
+ # via font-v
+glyphsets==1.0.0
+ # via
+ # diffenator2
+ # fontbakery
+ # gftools
+glyphslib==6.9.2
+ # via
+ # babelfont
+ # bumpfontversion
+ # fontmake
+ # gftools
+ # glyphsets
+h11==0.14.0
+ # via wsproto
+idna==3.10
+ # via
+ # requests
+ # trio
+importlib-resources==6.4.5
+ # via gfsubsets
+jinja2==3.1.4
+ # via
+ # diffenator2
+ # fontbakery
+ # gftools
+kurbopy==0.11.0
+ # via collidoscope
+lxml==5.3.0
+ # via
+ # afdko
+ # fontfeatures
+ # fonttools
+ # nanoemoji
+ # picosvg
+markdown-it-py==3.0.0
+ # via rich
+markupsafe==3.0.1
+ # via jinja2
+mdurl==0.1.2
+ # via markdown-it-py
+munkres==1.1.4
+ # via fontbakery
+mutatormath==3.0.1
+ # via ufoprocessor
+nanoemoji==0.15.1
+ # via gftools
+networkx==3.4
+ # via gftools
+ninja==1.11.1.1
+ # via
+ # diffenator2
+ # gftools
+ # nanoemoji
+num2words==0.5.13
+ # via shaperglot
+numpy==2.1.2
+ # via
+ # blackrenderer
+ # drawbot-skia
+ # skia-python
+openstep-plist==0.3.1
+ # via
+ # babelfont
+ # bumpfontversion
+ # glyphslib
+opentype-sanitizer==9.1.0
+ # via
+ # fontbakery
+ # gftools
+opentypespec==1.9.1
+ # via fontbakery
+orjson==3.10.7
+ # via
+ # babelfont
+ # ufolib2
+outcome==1.3.0.post0
+ # via trio
+packaging==24.1
+ # via
+ # fontbakery
+ # gftools
+picosvg==0.22.1
+ # via nanoemoji
+pillow==10.4.0
+ # via
+ # diffenator2
+ # gftools
+ # nanoemoji
+pip-api==0.0.34
+ # via fontbakery
+pngquant-cli==3.0.3
+ # via nanoemoji
+protobuf==3.20.3
+ # via
+ # axisregistry
+ # diffenator2
+ # fontbakery
+ # gflanguages
+ # gftools
+ # shaperglot
+pyahocorasick==2.1.0
+ # via diffenator2
+pybind11==2.13.6
+ # via skia-python
+pycairo==1.27.0
+ # via gftools
+pyclipper==1.3.0.post5
+ # via
+ # beziers
+ # booleanoperations
+pycparser==2.22
+ # via cffi
+pygit2==1.14.1
+ # via gftools
+pygithub==2.4.0
+ # via gftools
+pygments==2.18.0
+ # via rich
+pyjwt[crypto]==2.9.0
+ # via pygithub
+pynacl==1.5.0
+ # via pygithub
+pyparsing==3.1.4
+ # via vttlib
+pysocks==1.7.1
+ # via urllib3
+python-bidi==0.4.2
+ # via
+ # diffenator2
+ # drawbot-skia
+python-dateutil==2.9.0.post0
+ # via strictyaml
+pyyaml==6.0.2
+ # via
+ # fontbakery
+ # gftools
+ # glyphsets
+ # shaperglot
+regex==2024.9.11
+ # via nanoemoji
+requests==2.32.3
+ # via
+ # fontbakery
+ # gftools
+ # glyphsets
+ # pygithub
+ # youseedee
+resvg-cli==0.44.0
+ # via nanoemoji
+rich==13.9.2
+ # via
+ # fontbakery
+ # gftools
+rstr==3.2.2
+ # via stringbrewer
+ruamel-yaml==0.18.6
+ # via gftools
+ruamel-yaml-clib==0.2.8
+ # via ruamel-yaml
+selenium==4.25.0
+ # via diffenator2
+sh==2.1.0
+ # via -r requirements.in
+shaperglot==0.5.1
+ # via fontbakery
+six==1.16.0
+ # via
+ # fs
+ # python-bidi
+ # python-dateutil
+skia-pathops==0.8.0.post1
+ # via
+ # collidoscope
+ # gftools
+ # picosvg
+skia-python==87.6
+ # via
+ # blackrenderer
+ # drawbot-skia
+smmap==5.0.1
+ # via gitdb
+sniffio==1.3.1
+ # via trio
+sortedcontainers==2.4.0
+ # via trio
+soupsieve==2.6
+ # via beautifulsoup4
+sre-yield==1.2
+ # via stringbrewer
+statmake==0.6.0
+ # via gftools
+strictyaml==1.7.3
+ # via
+ # gftools
+ # shaperglot
+stringbrewer==0.0.1
+ # via fontbakery
+tabulate==0.9.0
+ # via gftools
+termcolor==2.5.0
+ # via shaperglot
+toml==0.10.2
+ # via
+ # fontbakery
+ # nanoemoji
+tqdm==4.66.5
+ # via
+ # afdko
+ # collidoscope
+ # diffenator2
+trio==0.26.2
+ # via
+ # selenium
+ # trio-websocket
+trio-websocket==0.11.1
+ # via selenium
+ttfautohint-py==0.5.1
+ # via gftools
+typing-extensions==4.12.2
+ # via
+ # cattrs
+ # fontbakery
+ # pygithub
+ # rich
+ # selenium
+ # vfblib
+ufo2ft[cffsubr,compreffor]==3.3.1
+ # via
+ # fontbakery
+ # fontmake
+ # nanoemoji
+ # shaperglot
+ufolib2[json]==0.16.0
+ # via
+ # babelfont
+ # bumpfontversion
+ # fontmake
+ # glyphslib
+ # nanoemoji
+ # ufomerge
+ # vfblib
+ # vttlib
+ufolint==1.2.0
+ # via fontbakery
+ufomerge==1.8.2
+ # via gftools
+ufonormalizer==0.6.2
+ # via
+ # afdko
+ # vfblib
+ufoprocessor==1.13.1
+ # via afdko
+uharfbuzz==0.41.0
+ # via
+ # blackrenderer
+ # collidoscope
+ # diffenator2
+ # drawbot-skia
+ # fontbakery
+ # vharfbuzz
+unicodedata2==15.1.0
+ # via
+ # diffenator2
+ # drawbot-skia
+ # fontbakery
+ # fonttools
+ # glyphsets
+unidecode==1.3.8
+ # via gftools
+urllib3[socks]==2.2.3
+ # via
+ # pygithub
+ # requests
+ # selenium
+vfblib==0.7.1
+ # via babelfont
+vharfbuzz==0.3.1
+ # via
+ # fontbakery
+ # gftools
+ # shaperglot
+vttlib==0.12.0
+ # via gftools
+websocket-client==1.8.0
+ # via selenium
+wrapt==1.16.0
+ # via deprecated
+wsproto==1.2.0
+ # via trio-websocket
+youseedee==0.5.3
+ # via
+ # diffenator2
+ # shaperglot
+zopfli==0.2.3
+ # via
+ # fonttools
+ # nanoemoji
+
+# The following packages are considered to be unsafe in a requirements file:
+# pip
+# setuptools
diff --git a/scripts/customize.py b/scripts/customize.py
new file mode 100644
index 0000000..f7feab4
--- /dev/null
+++ b/scripts/customize.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python3
+
+# This script is run by the user using `make customize` after the repository
+# is cloned. If you are reading this because `make customize` failed,
+# skip down to the section headed "INITIALIZATION STEPS".
+
+from sh import git
+import datetime
+import re
+import sys
+from urllib.parse import quote
+import subprocess
+import requests
+
+BASE_OWNER = "googlefonts"
+BASE_REPONAME = "googlefonts-project-template"
+DUMMY_URL = "https://yourname.github.io/your-font-repository-name"
+LATEST_OFL = "https://raw.githubusercontent.com/googlefonts/googlefonts-project-template/main/OFL.txt"
+
+
+def repo_url(owner, name):
+ return f"https://github.com/{owner}/{name}"
+
+
+def web_url(owner, name):
+ return f"https://{owner}.github.io/{name}"
+
+
+def raw_url(owner, name):
+ return f"https://raw.githubusercontent.com/{owner}/{name}"
+
+
+def lose(msg, e=None):
+ print(msg)
+ print("You will need to do the initialization steps manually.")
+ print("Read scripts/customize.py for more instructions how to do this.")
+ if e:
+ print(
+ "\nHere's an additional error message which may help diagnose the problem."
+ )
+ raise e
+ sys.exit(1)
+
+
+try:
+ my_repo_url = git.remote("get-url", "origin")
+except Exception as e:
+ lose("Could not use git to find my own repository URL", e)
+
+m = re.match(r"(?:https://github.com/|git@github.com:)(.*)/(.*)/?", str(my_repo_url))
+if not m:
+ lose(
+ f"My git repository URL ({my_repo_url}) didn't look what I expected - are you hosting this on github?"
+ )
+
+owner, reponame = m[1], m[2]
+
+if owner == BASE_OWNER and reponame == BASE_REPONAME:
+ print("I am being run on the upstream repository; don't do that")
+ sys.exit()
+
+# INITIALIZATION STEPS
+
+# First, the README file contains URLs to pages in the `gh-pages` branch of the
+# repo. When initially cloned, these URLs will point to the
+# googlefonts/Unified-Font-Repository itself. But downstream users want links
+# and badges about their own font, not ours! So any URLs need to be adjusted to
+# refer to the end user's repository.
+
+# We will also pin the dependencies so future builds are reproducible.
+
+readme = open("README.md").read()
+ghpages_url = web_url(owner, reponame)
+project_url = repo_url(owner, reponame)
+
+print("Fixing URLs:", web_url(BASE_OWNER, BASE_REPONAME), "->", ghpages_url)
+
+readme = readme.replace(web_url(BASE_OWNER, BASE_REPONAME), ghpages_url)
+# In the badges, the URLs to raw.githubusercontent.com are URL-encoded as they
+# are passed to shields.io.
+readme = readme.replace(
+ quote(raw_url(BASE_OWNER, BASE_REPONAME), safe=""),
+ quote(raw_url(owner, reponame), safe=""),
+)
+
+print("Fixing URLs:", DUMMY_URL, "->", ghpages_url)
+readme = readme.replace(f"`{DUMMY_URL}`", ghpages_url)
+
+with open("README.md", "w") as fh:
+ fh.write(readme)
+
+git.add("README.md")
+
+# Fix the OFL
+year = datetime.date.today().year
+title = reponame.title()
+copyright = f"Copyright {year} The {title} Project Authors ({project_url})\n"
+print("Fetching the latest OFL..")
+ofl = requests.get(LATEST_OFL).text.splitlines()
+print("Writing an OFL for you")
+print(copyright)
+with open("OFL.txt", "w") as fh:
+ fh.write(copyright)
+ fh.write("\n".join(ofl[1:]))
+
+git.add("OFL.txt")
+
+# Pin the dependencies
+print("Pinning dependencies")
+dependencies = subprocess.check_output(["pip", "freeze"])
+with open("requirements.txt", "wb") as dependency_file:
+ dependency_file.write(dependencies)
+git.add("requirements.txt")
+
+# Did anything change?
+result = git.status("--porcelain")
+if any(line.startswith("M ") for line in result.splitlines()):
+ git.commit("-m", "Customize repository")
+
+ print("Pushing changes to GitHub")
+ git.push()
+else:
+ print("Nothing changed, no need to push")
diff --git a/scripts/index.html b/scripts/index.html
index f76f5f5..07bb551 100644
--- a/scripts/index.html
+++ b/scripts/index.html
@@ -3,11 +3,10 @@
- Kode Mono Test Reports
+ My Font development
-
- Kode Mono Test Reports
+ My Font testing pages
-