diff options
Diffstat (limited to 'font_lib')
-rw-r--r-- | font_lib/settingtypes.txt | 1 | ||||
-rwxr-xr-x | font_lib/tools/make_font_textures.sh | 111 |
2 files changed, 112 insertions, 0 deletions
diff --git a/font_lib/settingtypes.txt b/font_lib/settingtypes.txt new file mode 100644 index 0000000..d111159 --- /dev/null +++ b/font_lib/settingtypes.txt @@ -0,0 +1 @@ +default_font(Default font) string diff --git a/font_lib/tools/make_font_textures.sh b/font_lib/tools/make_font_textures.sh new file mode 100755 index 0000000..ade2e32 --- /dev/null +++ b/font_lib/tools/make_font_textures.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +# This program generates a bitmap font for font_lib mod for Minetest game. +# (c) Andrzej Pieńkowski <pienkowski.andrzej@gmail.com> +# (c) Pierre-Yves Rollo <dev@pyrollo.com> +# License: GPL + +usage() { + echo "Usage: $0 fontfile fontname fontsize" + echo "fontfile: A TTF font file to use to create textures." + echo "fontname: The font name to be used in font_lib (should be simple, with no spaces)." + echo "fontsize: Font height to be rendered." +} + +if [ $# -ne 3 ] +then + usage + exit 1 +fi + +fontfile=$1 +fontname=$2 +fontsize=$3 + +if [ ! -r "$fontfile" ] +then + echo "$fontfile not readable." + exit 1 +fi + +# check imagemagick +hash convert &>/dev/null +if [ $? -eq 1 ]; then + echo -e "Error: This program requires convert from ImageMagick! Please install it by typing 'sudo apt-get install imagemagick' in terminal." + abort=1 +fi + +# check ttx +hash ttx &>/dev/null +if [ $? -eq 1 ]; then + echo -e "Error: This program requires ttx from FontTools! Please install it by typing 'sudo apt-get install fonttools' in terminal." + abort=1 +fi + +if [ $abort ] +then + exit 1 +fi + +generate() { + for i in $(seq $((0x$1)) $((0x$2))) + do + if echo "$codepoints" | grep -qi $(printf "0x%x" $i) + then + hex=$(printf "%04x" $i) + echo -e "Generating textures/font_${fontname}_$hex.png file for \"\\U$hex\" char." + if [[ "$hex" == "005c" ]] # Backslash char + then + convert -background none -fill black -font "$fontfile" -pointsize $fontsize label:"\\\\" -colorspace gray -channel alpha -threshold 50% textures/font_${fontname}_$hex.png + else + convert -background none -fill black -font "$fontfile" -pointsize $fontsize label:"$(echo -en "\\U$hex")" -colorspace gray -channel alpha -threshold 50% textures/font_${fontname}_$hex.png + fi + fi + done +} + +mkdir textures + +# Reads all available code points in the font. +codepoints=$(ttx -o - $fontfile | grep "<map code=" | cut -d \" -f 2) + +# Mandatory chars +generate 0020 007f + +# generate space and null characters +if [ ! -f "textures/font_${fontname}_0030.png" ]; then + echo "Error: Something wrong happened! Font was not generated!" + exit 1 +else + size=$(identify textures/font_${fontname}_0030.png | cut -d " " -f 3) + if ! [[ $fontHeight =~ $re ]] ; then + echo "Error: Something wrong happened! Generated files might be broken!" + exit 1 + else + w=$(expr $(echo $size | cut -d x -f 1) - 1) + h=$(expr $(echo $size | cut -d x -f 2) - 1) + # Space char + convert -size $size xc:transparent -colorspace gray textures/font_${fontname}_0020.png + # Null char + convert -size $size xc:transparent -colorspace gray -stroke black -fill transparent -strokewidth 1 -draw "rectangle 0,0 $w,$h" textures/font_${fontname}_0000.png + fi +fi + +# Optional Unicode pages (see https://en.wikipedia.org/wiki/Unicode) : + +# 00a0-00ff Latin-1 Supplement (full) +generate 00a0 00ff +# 0100-017f Latin Extended-A (full) +generate 0100 017f +# 0370-03ff Greek (full) +generate 0370 03ff +# 0400-04ff Cyrilic (full) +generate 0400 04ff +# 2000-206f General Punctuation (Limited to Dashes) +generate 2010 2015 +# 2000-206f General Punctuation (Limited to Quotes) +generate 2018 201F +# 20a0-20cf Currency Symbols (Limited to Euro symbol) +generate 20ac 20ac + + |