#!/bin/sh 

# defaults

INPUT="http://uneex.ru/PspoClasses/Status"

EIGHTBIT_CHARSET="cp1251"
MAIN_CHARSET="utf8"

PAST=0
PRESENT=0
FUTURE=0

RENDERER="elinks"
RENDERER_CMD=""

#functions

show_usage ()
{
	cat <<EOF
Usage: $0 [ --past ] [ --present ] [ --future ] [ --input=HTML_DOCUMENT ]
	[ --renderer=RENDERER_PRESET ] [ --renderer-cmd=RENDERER_COMMAND_LINE ]
	[ --eightbit-charset=CHARSET ] [ --main-charset=CHARSET ]
	[ --usage | --help ]
Available renderer presets: elinks w3m
EOF
}

show_help ()
{
	cat <<EOF
$0: status table parser (see --usage for syntax information)
EOF
}

while [ $# -gt 0 ]; do
	case "$1" in
		--past)			PAST=1;;
		--present)		PRESENT=1;;
		--future)		FUTURE=1;;
		--input=*)		INPUT="${1#--input=}";;
		--renderer=*)		RENDERER="${1#--renderer=}";;
		--renderer-cmd=*)	RENDERER_CMD="${1#--renderer-cmd=}";;
		--eightbit-charset=*)	EIGHTBIT_CHARSET="${1#--eightbit-charset=}";;
		--main-charset=*)	MAIN_CHARSET="${1#--main-charset=}";;
		--usage)		show_usage; exit 0;;
		--help)			show_help; exit 0;;
		*)			show_usage; exit 2;;
	esac
	shift
done

if [ -z "$RENDERER_CMD" ]; then
	if [ "$RENDERER" = "elinks" ]; then
		RENDERER_CMD="elinks -no-numbering -dump-width 1000 -dump"
	elif [ "$RENDERER" = "w3m" ]; then
		RENDERER_CMD="w3m -cols 1000 -dump"
	else
		echo "Unknown renderer: $RENDERER" 1>&2
		exit 2
	fi
fi

$RENDERER_CMD "$INPUT" | 
sed -nr '/Готов\?/,/\(\.\/\)/s/[[:space:]]+/ /gp' | 
sed -nr '/[[:digit:]]+% /s/^[^[:digit:]]*([[:digit:]]+)%/\1%/p' |
sed -nr 's/^([[:digit:]]*)% (.*) 1 1 1 1 ([^[:digit:]]*).*$/\1%\2%\3/p' |
iconv -f "$MAIN_CHARSET" -t "$EIGHTBIT_CHARSET" |
awk -F % '
BEGIN {
	stage[1] = "Deciphering"
	stage[2] = "Translating"
	stage[3] = "Editing"
	stage[4] = "Illustrating"
	stage[5] = "Checking"
	stage[6] = "Done"
}
{
	status = $1
	title = $2
	gsub(" ", "", $3)
	split($3, team, ",")
	for (i = 1; i <= 3; i++)
		if (team[i] == "") team[i] = "Nobody"
	team[4] = team[3]
	team[5] = "FrBrGeorge"
	team[6] = "Nobody"
	if (status < 20) pos = 1
	else if (status < 50) pos = 2
	else if (status < 70) pos = 3
	else if (status < 90) pos = 4
	else if (status < 100) pos = 5
	else if (status == 100) pos = 6
	else { print "Invalid status: "status"%"; next }
	for (i = 1; i <= 6; i++)
		if ((i < pos) && (past == 1) ||
		    (i == pos) && (present == 1) ||
		    (i > pos) && (future == 1))
			printf "%-60s\t[%d] %-15s\t%25s\t%3s%%\n", title, i, stage[i], team[i], status
}' past=$PAST present=$PRESENT future=$FUTURE |
iconv -f "$EIGHTBIT_CHARSET" -t "$MAIN_CHARSET"

