1# fontscale
2# Font scaling program which converts a vector font to a FONT.bdf
3# using `otf2bdf`
4#
5# This program is licensed under the ISC License.
6# Copyright 2026 uint
7#
8# Permission to use, copy, modify, and/or distribute this software for any
9# purpose with or without fee is hereby granted, provided that the above
10# copyright notice and this permission notice appear in all copies.
11#
12# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
13# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
14# FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
15# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
16# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
17# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18# PERFORMANCE OF THIS SOFTWARE.
19
20#!/bin/sh
21set -eu
22
23DIR="$HOME/.local/share/fonts"
24FONT="$DIR/FONT.ttf"
25BDF="$DIR/FONT.bdf"
26META="$DIR/fontscale"
27DPI=96
28
29[ "$#" -eq 1 ] || {
30 echo "Usage: fontscale {+|-}" >&2
31 exit 1
32}
33
34[ -f "$FONT" ] || {
35 echo "Font not found: $FONT" >&2
36 exit 1
37}
38
39[ -f "$META" ] || {
40 echo "Scale file not found: $META" >&2
41 exit 1
42}
43
44scale=$(cat "$META")
45
46case "$scale" in
47 ''|*[!0-9]*)
48 echo "Invalid scale in $META: $scale" >&2
49 exit 1
50 ;;
51esac
52
53case "$1" in
54 +)
55 scale=$((scale + 1))
56 ;;
57 -)
58 [ "$scale" -gt 1 ] || {
59 echo "Scale cannot be less than 1" >&2
60 exit 1
61 }
62 scale=$((scale - 1))
63 ;;
64 *)
65 echo "Usage: fontscale [+|-]" >&2
66 exit 1
67 ;;
68esac
69
70otf2bdf -n -p "$scale" -r "$DPI" -o "$BDF" "$FONT"
71printf '%s\n' "$scale" >"$META"
72