diff --git a/scritps/prefon b/scritps/prefon new file mode 100755 index 0000000..d2153ec --- /dev/null +++ b/scritps/prefon @@ -0,0 +1,132 @@ +#!/bin/sh +# Script to preview fonts + +usage() { + printf '%b\n' "${0##*/} [-F FILE | -S | -t STRING] [OPTIONS]" \ + "actions:" \ + "\t-F FILE - read from file" \ + "\t-S - read from stdin" \ + "\t-t STRING - use a string" \ + "\noptions:" \ + "\t-b SIZE - border size" \ + "\t-c COLORS - set the color of the text and background" \ + "\t-f FONT - which font to preview" \ + "\t-h - display this message" \ + "\t-i - do not generate an inverse image" \ + "\t-o FILE - output file for the generated image" \ + "\t-s SIZE - size of the font" \ + "\ndefault values:" \ + "These values can be set before execution to change default values" \ + "\tPREFON_ACTION=text (file, stdin, or text)" \ + "\tPREFON_BORDER_SIZE=16" \ + "\tPREFON_COLORS=\"000000,ffffff\"" \ + "\tPREFON_FONT=\"monospace\"" \ + "\tPREFON_OUTPUT=\"/tmp/prefon.png\"" \ + "\tPREFON_SIZE=16" \ + "\tPREFON_TEXT=\"The quick brown fox jumps\\\n over the lazy dog}\"" \ + "\tPREFON_INVERSE=vertical (horizontal, vertical, none)" +} + +info() { + case $1 in + i ) prefix=INFO ;; + w ) prefix=WARNING ;; + e ) prefix=ERROR ;; + * ) printf '%s\n' "sus!" 1>&2; exit 1 ;; + esac + shift + + printf "${0##*/}: $prefix: %b\n" "$*" 1>&2 +} + +# Default values +PREFON_ACTION=${PREFON_ACTION:-text} +PREFON_BORDER_SIZE=${PREFON_BORDER_SIZE:-16} +PREFON_COLORS=${PREFON_COLORS:-000000,ffffff} +PREFON_FONT="${PREFON_FONT:-monospace}" +PREFON_OUTPUT="${PREFON_OUTPUT:-/tmp/prefon.png}" +PREFON_SIZE=${PREFON_SIZE:-16} +PREFON_TEXT="${PREFON_TEXT:-The quick brown fox jumps\n over the lazy dog}" +PREFON_INVERSE=${PREFON_WITHOUT_INVERSE:-vertical} + +# Handle arguments +while [ "$*" ] +do + case $1 in + - ) shift; continue ;; + -- ) shift; break ;; + -* ) flag=${1#-}; shift ;; + * ) shift; continue ;; + esac + while [ "$flag" ] + do + arg=${flag%${flag#?}} + case $arg in + F ) PREFON_ACTION="file"; PREFON_FILE=$1; shift ;; + S ) PREFON_ACTION=stdin; PREFON_FILE=/dev/stdin ;; + b ) PREFON_BORDER_SIZE=$1; shift ;; + c ) PREFON_COLORS=$1; shift ;; + f ) PREFON_FONT=$1; shift ;; + h ) usage; exit 0 ;; + i ) PREFON_INVERSE=$1; shift ;; + o ) PREFON_OUTPUT=$1; shift ;; + s ) PREFON_SIZE=$1; shift ;; + t ) PREFON_ACTION=text; PREFON_TEXT=$1; shift ;; + * ) printf '%s\n' "${0##*/}: -$arg: invalid argument" 1>&2; usage 1>&2; exit 1 ;; + esac + flag=${flag#?} + done +done + +generate_image() { + _gen_img() { + convert -background "#$2" -bordercolor "#$2" -border "$PREFON_BORDER_SIZE" \ + pango:"$4" "$3" + } + + fgcolor=${PREFON_COLORS%,*} + bgcolor=${PREFON_COLORS#*,} + + _gen_img "$fgcolor" "$bgcolor" "$PREFON_OUTPUT" "$1" || { info e failed to generate image; exit 1; } + + [ "$PREFON_INVERSE" != "none" ] && { + inverse="${PREFON_OUTPUT%.*}" + inverse="${inverse}-inverse.${PREFON_OUTPUT##*.}" + + _gen_img "$bgcolor" "$fgcolor" "$inverse" "$1" || { info e failed to generate image; exit 1; } + + case $PREFON_INVERSE in + horizontal ) convert "$PREFON_OUTPUT" "$inverse" +append "$PREFON_OUTPUT" \ + || { info e failed to generate image; exit 1; } ;; + vertical ) convert "$PREFON_OUTPUT" "$inverse" -append "$PREFON_OUTPUT" \ + || { info e failed to generate image; exit 1; } ;; + * ) info e "${PREFON_INVERSE}: is not a valid value for PREFON_INVERSE"; exit 1 ;; + esac + + rm "$inverse" || info w failed to remove temporary file: "${inverse}" + } + + printf '%s\n' "$PREFON_OUTPUT" +} + +read_input() { + _output_file() { + while IFS= read -r line + do + printf '%s\n' "$line" + done < "$PREFON_FILE" + } + + input="$(_output_file)" + generate_image "$input" +} + +case $PREFON_ACTION in + file ) [ -e "$PREFON_FILE" ] || { info e "'$PREFON_FILE' does not exist"; exit 1; } + wa ;; + stdin ) [ -e /dev/stdin ] || { info e "/dev/stdin does not exist"; exit 1; } + wa ;; + text ) [ "$PREFON_TEXT" ] || { info e "string not provided"; exit 1; } + generate_image "$PREFON_TEXT" ;; + * ) info e invalid action: $PREFON_ACTION; exit 1 ;; +esac