A collection of scripts
1#!/bin/sh
2# Script to preview fonts
3
4usage() {
5 printf '%b\n' "${0##*/} [-F FILE | -S | -t STRING] [OPTIONS]" \
6 "actions:" \
7 "\t-F FILE - read from file" \
8 "\t-S - read from stdin" \
9 "\t-t STRING - use a string" \
10 "\noptions:" \
11 "\t-b SIZE - border size" \
12 "\t-c COLORS - set the color of the text and background" \
13 "\t-f FONT - which font to preview" \
14 "\t-h - display this message" \
15 "\t-i - generate the inverse image (horizontal, vertical, none)" \
16 "\t-o FILE - output file for the generated image" \
17 "\t-s SIZE - size of the font" \
18 "\ndefault values:" \
19 "These values can be set before execution to change default values" \
20 "\tPREFON_ACTION=text (file, stdin, or text)" \
21 "\tPREFON_BORDER_SIZE=16" \
22 "\tPREFON_COLORS=\"000000,ffffff\"" \
23 "\tPREFON_FONT=\"monospace\"" \
24 "\tPREFON_OUTPUT=\"/tmp/prefon.png\"" \
25 "\tPREFON_SIZE=16" \
26 "\tPREFON_TEXT=\"The quick brown fox jumps\\\n over the lazy dog\"" \
27 "\tPREFON_INVERSE=vertical (horizontal, vertical, none)"
28}
29
30info() {
31 case $1 in
32 i ) prefix=INFO ;;
33 w ) prefix=WARNING ;;
34 e ) prefix=ERROR ;;
35 * ) printf '%s\n' "sus!" 1>&2; exit 1 ;;
36 esac; shift
37
38 printf "${0##*/}: $prefix: %b\n" "$*" 1>&2
39}
40
41# Default values
42PREFON_ACTION=${PREFON_ACTION:-text}
43PREFON_BORDER_SIZE=${PREFON_BORDER_SIZE:-16}
44PREFON_COLORS=${PREFON_COLORS:-000000,ffffff}
45PREFON_FONT="${PREFON_FONT:-monospace}"
46PREFON_OUTPUT="${PREFON_OUTPUT:-/tmp/prefon.png}"
47PREFON_SIZE=${PREFON_SIZE:-16}
48PREFON_TEXT="${PREFON_TEXT:-The quick brown fox jumps\n over the lazy dog}"
49PREFON_INVERSE=${PREFON_WITHOUT_INVERSE:-vertical}
50
51# Handle arguments
52while [ "$*" ]
53do
54 case $1 in
55 - ) shift; continue ;;
56 -- ) shift; break ;;
57 -* ) flag=${1#-}; shift ;;
58 * ) shift; continue ;;
59 esac
60
61 while [ "$flag" ]
62 do
63 arg=${flag%${flag#?}}
64
65 case $arg in
66 F ) PREFON_ACTION="file"; PREFON_FILE=$1; shift ;;
67 S ) PREFON_ACTION=stdin; PREFON_FILE=/dev/stdin ;;
68 b ) PREFON_BORDER_SIZE=$1; shift ;;
69 c ) PREFON_COLORS=$1; shift ;;
70 f ) PREFON_FONT=$1; shift ;;
71 h ) usage; exit 0 ;;
72 i ) PREFON_INVERSE=$1; shift ;;
73 o ) PREFON_OUTPUT=$1; shift ;;
74 s ) PREFON_SIZE=$1; shift ;;
75 t ) PREFON_ACTION=text; PREFON_TEXT=$1; shift ;;
76 * ) printf '%s\n' "${0##*/}: -$arg: invalid argument" 1>&2
77 usage 1>&2; exit 1 ;;
78 esac
79
80 flag=${flag#?}
81 done
82done
83
84_gen_img() {
85 convert -background "#$2" -bordercolor "#$2" -border "$PREFON_BORDER_SIZE" \
86 pango:"<span foreground=\"#$1\" font_desc=\"$PREFON_FONT $PREFON_SIZE\">$4</span>" "$3"
87}
88
89_output_file() {
90 while IFS= read -r line
91 do printf '%s\n' "$line"
92 done < "$PREFON_FILE"
93}
94
95generate_image() {
96 fgcolor=${PREFON_COLORS%,*}
97 bgcolor=${PREFON_COLORS#*,}
98
99 _gen_img "$fgcolor" "$bgcolor" "$PREFON_OUTPUT" "$1" || {
100 info e failed to generate image
101 exit 1
102 }
103
104 [ "$PREFON_INVERSE" != "none" ] && {
105 inverse="${PREFON_OUTPUT%.*}"
106 inverse="${inverse}-inverse.${PREFON_OUTPUT##*.}"
107
108 _gen_img "$bgcolor" "$fgcolor" "$inverse" "$1" || {
109 info e failed to generate image
110 exit 1
111 }
112
113 case $PREFON_INVERSE in
114 horizontal ) convert "$PREFON_OUTPUT" "$inverse" +append "$PREFON_OUTPUT" \
115 || { info e failed to generate image; exit 1; } ;;
116 vertical ) convert "$PREFON_OUTPUT" "$inverse" -append "$PREFON_OUTPUT" \
117 || { info e failed to generate image; exit 1; } ;;
118 * ) info e "${PREFON_INVERSE}: is not a valid value for PREFON_INVERSE"
119 exit 1 ;;
120 esac
121
122 rm "$inverse" || info w failed to remove temporary file: "${inverse}"
123 }
124
125 printf '%s\n' "$PREFON_OUTPUT"
126}
127
128read_input() {
129 input="$(_output_file)"
130 generate_image "$input"
131}
132
133case $PREFON_ACTION in
134 file )
135 [ -e "$PREFON_FILE" ] || { info e "'$PREFON_FILE' does not exist"; exit 1; }
136 read_input
137 ;;
138 stdin )
139 [ -e /dev/stdin ] || { info e "/dev/stdin does not exist"; exit 1; }
140 read_input
141 ;;
142 text )
143 [ "$PREFON_TEXT" ] || { info e "string not provided"; exit 1; }
144 generate_image "$PREFON_TEXT"
145 ;;
146 * ) info e invalid action: $PREFON_ACTION; exit 1 ;;
147esac