summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2022-11-05 16:28:09 -0700
committeryum <yum.food.vr@gmail.com>2022-11-05 16:32:06 -0700
commit4f2316a1493f7dd338604ca749df15ea7a40dc16 (patch)
tree51733f7662610263765e5a6656d9c6314d9b7f53
parentda8e8d93813ca85a78653587ed23c90820763e69 (diff)
Add generate_fonts.py
Add code to generate 4k textures holding a bunch of unicode characters. Add unicode blocks for English, Japanese, Chinese, and Korean. Embed GNU's excellent Unifont ttf, which I use to generate these textures. The license is included under $filename.LICENSE.
-rw-r--r--generate_fonts.py81
-rw-r--r--unifont-15.0.01.ttfbin0 -> 12273948 bytes
-rw-r--r--unifont-15.0.01.ttf.LICENSE90
3 files changed, 171 insertions, 0 deletions
diff --git a/generate_fonts.py b/generate_fonts.py
new file mode 100644
index 0000000..0b9a4fd
--- /dev/null
+++ b/generate_fonts.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+from PIL import Image, ImageFont, ImageDraw
+
+import math
+
+# Use a power of 2 pixels per character so we can evenly divide the plane.
+font_pixels = 64
+font = ImageFont.truetype("unifont-15.0.01.ttf", font_pixels)
+
+n_rows = 64
+n_cols = 128
+
+def allow_range(allowlist, lo, hi):
+ for i in range(lo, hi + 1):
+ allowlist.add(i)
+def ban_range(allowlist, lo, hi):
+ for i in range(lo, hi + 1):
+ allowlist.remove(i)
+allowlist = set()
+# ASCII
+allow_range(allowlist, 32, 126)
+# Latin-1 supplement
+allow_range(allowlist, 0x00A1, 255)
+# Latin extended-A
+allow_range(allowlist, 0x0100, 0x017F)
+# Latin extended-B
+allow_range(allowlist, 0x0180, 0x024F)
+# Spacing modifier letters
+allow_range(allowlist, 0x0250, 0x02AF)
+# Greek and Coptic
+allow_range(allowlist, 880, 1023)
+ban_range(allowlist, 0x0378, 0x03a2)
+# Cyrillic
+allow_range(allowlist, 0x0400, 0x04FF)
+# Currency symbols
+allow_range(allowlist, 0x20A0, 0x20C0)
+
+# Japanese
+# Punctuation
+allow_range(allowlist, 0x3000, 0x303F)
+# Hiragana
+allow_range(allowlist, 0x3041, 0x30FF)
+ban_range(allowlist, 0x3097, 0x3098)
+# Katakana
+allow_range(allowlist, 0x30A0, 0x30FF)
+# CJK Unified Ideographs (Kanji)
+allow_range(allowlist, 0x4E00, 0x9FFF)
+# CJK Unified Ideographs extension A (rare Kanji)
+allow_range(allowlist, 0x3400, 0x4dbf)
+
+# Korean
+allow_range(allowlist, 0x1100, 0x11FF)
+allow_range(allowlist, 0xAC00, 0xD7A3)
+
+max_char = max(allowlist)
+total_rows = math.ceil(max_char / n_cols)
+print("total rows {}".format(total_rows))
+total_textures = math.ceil(total_rows / n_rows)
+print("total textures {}".format(total_textures))
+
+for nth_texture in range(0, total_textures):
+ # Create a 4K grayscale ("L") image
+ image = Image.new(mode="L", size=(4096,4096), color=255)
+ draw = ImageDraw.Draw(image)
+
+ row_begin = nth_texture * n_rows
+
+ for row in range(row_begin, row_begin + n_rows):
+ line = ""
+ for col in range(0, n_cols):
+ # Generate the unicode character for this spot.
+ n = row * n_cols + col
+ if n in allowlist:
+ line += chr(n)
+ else:
+ line += " "
+ draw.text((0, (row - row_begin) * font_pixels), line, font=font)
+
+ image.save("font-%01d.png" % nth_texture)
+
diff --git a/unifont-15.0.01.ttf b/unifont-15.0.01.ttf
new file mode 100644
index 0000000..bc3428d
--- /dev/null
+++ b/unifont-15.0.01.ttf
Binary files differ
diff --git a/unifont-15.0.01.ttf.LICENSE b/unifont-15.0.01.ttf.LICENSE
new file mode 100644
index 0000000..94339e0
--- /dev/null
+++ b/unifont-15.0.01.ttf.LICENSE
@@ -0,0 +1,90 @@
+The SIL Open Font License version 1.1 is copied below, and is also
+available with a FAQ at http://scripts.sil.org/OFL.
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.