unichat/unichat.sh
Jaidyn Lev 952a896057 Init
2019-01-19 23:42:07 -06:00

161 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
########################################
# name: unichat.sh
# desc: download a unichat page to ansi
# -formatted, colored text.
# perfect for reading on terminal!
########################################
if test -e uclib; then
prefix="./"
else
prefix="$(dirname "$(echo "$0")")/"
fi
. "${prefix}uclib/usernames.sh"
. "${prefix}uclib/ansi.sh"
. "${prefix}uclib/255color.sh"
. "${prefix}/uclib/8color.sh"
# --------------------------------------
# generic
# NIL --> STRING
# read from stdin until eof hit; return all input
# good for writing functions that take piped info
function reade {
local stack=""
while read input
do
stack="$(printf '%s\n%s' "$stack" "$input")"
done
echo "$stack"
}
# --------------------------------------
# fetch
# NUMBER --> STRING
# actual download/return HTML of unichat comic of given id
function unichat_fetch {
id="$1"
gendl -o "$TEMP" "http://unichat-comic.com/comics/${id}/"
cat "$TEMP"
}
# --------------------------------------
# html manipulations
# |STRING --> STRING
# remove everything from piped unichat html except for
# the actual comic part
function isolate_log {
html="$(reade)"
echo "$html" \
| sed '1,/Unichat log/d' \
| sed '/article-foot/,$d'
}
# |STRING --> STRING
# add tags to the isolated log to make it valid HTML
function isolate_to_html {
log="$(reade)"
header="<html><head><title>Unichat</title></head><body>"
footer="</body></html>"
printf "%s\n%s\n%s" "$header" "$log" "$footer"
}
# |STRING --> STRING
# convert piped HTML into plain-text-- via w3m
function html_to_txt {
html="$(reade)"
echo "$html" \
| echo "$(lynx -stdin -width 1000 -nolist -dump)"
}
function whitespace_trim {
string="$1"
echo "$string" \
| sed 's/^ //g' \
| sed 's/^ //g'
}
function unichat_to_txt {
id="$1"
gendl "http://unichat-comic.com/comics/${id}/" \
| isolate_log \
| isolate_to_html \
| html_to_txt
}
function txt_process {
txt="$1"
txt="$(whitespace_trim "$txt")"
echo "$txt"
}
function txt_to_txt {
txt="$1"
width="$2"
txt_process "$txt" | fold -sw $width
}
# --------------------------------------
# invocation
ID="1"
WIDTH="80"
COLOR=8
TEMP="$(mktemp)"
if test -n "$1"; then
ID="$1"
fi
if test -n "$2"; then
WIDTH="$2"
fi
if test -n "$3"; then
COLOR=$3
fi
# --------------------------------------
function invoke {
if test $COLOR -eq 0; then
txt_to_txt "$(unichat_to_txt "$ID")" $WIDTH
else
txt_to_ansi "$(unichat_to_txt "$ID")" $WIDTH
fi
rm $TEMP
}
if test -z "$1"; then
echo "usage: unichat.sh id [width] [color]"
exit 2
fi
invoke