#!/bin/bash

robot=false
echo $HTTP_USER_AGENT | grep -q Amazonbot && robot=true

for ban in 4.227.36. 18.97.9. 18.97.14. 20.171.207. 57.141. 65.108.72 66.220.149. 66.249.6 66.249.7 69.171.230. 74.7.241. 74.7.242. 85.208.96. 98.97.33. 136.243.228. 154.54.249. 173.252.87. 185.191.171. 217.113.194.
do
  echo A$REMOTE_ADDR | grep -Fq A$ban && robot=true
done

if $robot
then
  cat << xx
Content-type: text/html

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
Stop robo-crawling my Shavian converter!
xx
  exit
fi

wget -N dechifro.org/shavian/{shaw.py,brit.dict,vs1.dict,amer.dict.xz} 2>/dev/null
[ amer.dict.xz -nt amer.dict ] && xz -dkf amer.dict.xz

export LANG=en_US.UTF-8
echo Content-type: text/html
echo

[ -z "$QUERY_STRING" ] && read QUERY_STRING

for var in alphabet lang text tooltips url
do
  line="`echo $QUERY_STRING | sed 's/%0D%0A/<br>/g' | tr \& \\\\012 | grep ^${var}= |
	sed -e 's/%0D%0A/<br>/g' -e 's/+/ /g' -e 's/%/\\\\x/g'`"
  line=`echo -e "$line"`
  [ -n "$line" ] && declare "$line"
done

cmd=""
[ "$alphabet" == "Deseret"    ] && cmd="-a 1"
[ "$alphabet" == "IPA"        ] && cmd="-a 2"
[ "$alphabet" == "Runic"      ] && cmd="-a 3"
[ "$alphabet" == "Diacritic"  ] && cmd="-a 4"
[ "$alphabet" == "Digraph"    ] && cmd="-a 5"
[ "$alphabet" == "Franklin"   ] && cmd="-a 6"
[ "$alphabet" == "Quikscript" ] && cmd="-a 7"
[ "$alphabet" == "Cyrillic"   ] && cmd="-a 8"
[ "$alphabet" == "CUBE"       ] && cmd="-a 9"
[ "$alphabet" == "SAMPA"      ] && cmd="-a 10"
[ "$alphabet" == "Arabic"     ] && cmd="-a 11"
[ "$alphabet" == "Coptic"     ] && cmd="-a 12"
[ "$tooltips" == "on"         ] && cmd="$cmd -t"

english=false
if [ "$lang" == "American" ]
then
  cmd="python shaw.py -p 1 $cmd amer.dict"
  english=true
elif [ "$lang" == "British" ]
then
  cmd="python shaw.py -p 1 $cmd amer.dict brit.dict"
  english=true
elif [ "$lang" == "German-d" ]
then
  cmd="uconv -x Any-NFC | sed 's@<span typeof=\"mw:Entity\">­</span>@@g' | python shaw.py $cmd -d german.dict"
else
  if [ -n "$cmd" ]
  then
    cmd="| python shaw.py $cmd"
  fi
  [ -f sedcon ] || gcc -o sedcon /var/www/html/shavian/sedcon.c
  cmd="uconv -x Any-NFD | ./sedcon /var/www/html/shavian/$lang.sed $cmd"
fi

if [ "$alphabet" == "Shavian54" ]
then
  if $english
  then
    cmd="$cmd vs1.dict"
  else
    cmd="$cmd | sed 's/𐑣\([𐑒𐑜𐑤𐑢]\)/\1︀/g'"
  fi
fi

echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>'

if [ -n "$text" ]
then
  echo $text | sh -c "$cmd"
  exit
fi

pdf=$REMOTE_ADDR-$$.pdf
txt=$REMOTE_ADDR-$$.txt
html=$REMOTE_ADDR-$$.html
wget -k --referer=http://dechifro.org/shavian/ -U "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" -O $html $url 2>/dev/null

if file $html | grep -q PDF
then
  mv $html $pdf
  pdftohtml -i -stdout $pdf | sed 's/&#160;/ /g' | sed 's@<br/>@ @g' | grep -v '<hr/>' | awk '{ print "<p>"$0 }' | sed s/$html//g > $html
fi

if ! file $html | grep -q HTML
then
  mv $html $txt
  tr -d \\015 < $txt | sed 's/^$/<p>/' >> $html
fi

[ "$tooltips" == "on" ] && cat << xx
<style>
div {
  line-height: 2.0;
}

.shawtip {
  position: relative;
  display: inline-block;
}

.shawtip .shawtiptext {
  visibility: hidden;
  width: 200%;
  top: 70%;
  left: 50%;
  margin-left: -100%;
  background-color: black;
  color: #fff;
  text-align: center;
  padding: 0 5px;
  border-radius: 6px;

  position: absolute;
  z-index: 1;
}

.shawtip:hover .shawtiptext {
  visibility: visible;
}
</style>
xx

tr -d \\015 < $html | sed \
	-e 's@a href="\([^"]*\)"@a hfref="SHURL\1"@g' \
	-e 's@ href="\([^"]*\.html\)"@ hfref="SHURL\1"@g' \
	-e 's@a class="\([^"]*\)" href="\([^"]*\)"@a class="\1" hfref="SHURL\2"@g' \
	-e "s@SHURL$html@@g" \
	-e 's@SHURL\(https://yes-pdf.com/electronic-book/\)@\1@g' \
	-e "s@SHURL@https://dechifro.org/cgi-bin/shave35718.sh?lang=$lang\&alphabet=$alphabet\&url=@g" \
	-e s/NEXT_DATA/IGNORE/g | sed s/hfref/href/g | sh -c "$cmd" | sed 's/𐑗𐑨𐑐𐑑𐑼 𐑲/𐑗𐑨𐑐𐑑𐑼 I/g'

[ -s $html ] || rm $html
