#!/bin/bash
# Pangramtest, versjon 1.0
# Copyright © Axel Bojer 2007
# Laster inn ditt oppgitte pangram, tester det og gir litt enkel statistikk
# Hentet fra: http://www.bojer.no/Axel/Moro/

# ============ Variabler og funksjoner ============
# I fall tmp ikke er skrivbar og tilgjengelig, bruk gjeldende mappe
lagringsmappe=""
innrykk="  "

# Foreløpig angivelse av lagringsmappe
# Sjekk om /tmp finnes og er skrivbar
if [ -e /tmp/ ] && [ -w /tmp/ ]; then
	lagringsmappe="/tmp/Pangramtest-filer"
else
	lagringsmappe=".Pangramtest-filer"
fi

#Bruk /tmp som lagringsmappe hvis det er mulig
lagLagringsmappe () {
	# Sjekk om /tmp finnes og er skrivbar
	if [ -e /tmp/ ] && [ -w /tmp/ ]; then
		# Angi en egen undermappe for dette skriptet
		lagringsmappe="/tmp/Pangramtest-filer"
	else
		lagringsmappe=".Pangramtest-filer"
		echo
		echo "NB: Mappa «/tmp» er ikke skrivbar, bruker isteden «$lagringsmappe» til foreløpige filer"
	fi
	# Slett gamle filer, så vi starter fra bunnen :-)
	rm $lagringsmappe/*
	# Sjekk om lagringsmappa finnes og er skrivbar
	if [ ! -e "$lagringsmappe" ] || [ -w "$lagringsmappe" ]; then
		mkdir -p "$lagringsmappe"
	fi
} 2> /dev/null

# Gi tilbakemelding og avslutt hvis mappa ikke er skrivbar
LagrePangram () {
    echo $pangram > $lagringsmappe/pangram.txt
    rettValg=$?
    if [ "$rettValg" != "0" ]; then
        echo "Klarte ikke å skrive til mappa, skriptet avsluttet med feilverdien $rettValg."
        echo "Kan ikke fortsette."
	echo
        exit
    fi
}

kortLisens () {
	echo
	echo "«Pangramtest» versjon 1.0 © Axel Bojer 2007"
	echo "Distribueres som fri programvare under GPL-lisensen (GNU General Public License)"
	echo "I korthet vil de si du kan endre programmet og/eller gi det videre bare andre får samme frihet."
	echo "Programmet er laget i håp om at andre finner det nyttig, men det gis ingen garanti."
	echo
}

langLisens () {
	echo "=========== Kortversjon av den engelske lisensteksten =========="
	echo "This program is free software; you can redistribute it and/or"
	echo "modify it under the terms of the GNU General Public License"
	echo "as published by the Free Software Foundation; either version 2"
	echo "of the License, or (at your option) any later version."
	echo
	echo "This program is distributed in the hope that it will be useful,"
	echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"
	echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the"
	echo "GNU General Public License for more details."
	echo
	echo "http://www.gnu.org/copyleft/gpl.html"
	echo "================================================================"
	echo
}

# ============ Ulike kommandolinjevalg ============
if [ "$1" = '-e' ] || [ "$1" = '--eksempel' ] ; then
	echo
	echo "Et eksempel på et norsk pangram:"
	echo "$innrykk Vår sære Zulu fra badeøya spilte jo whist og quickstep i min taxi"
	echo
	exit
elif [ "$1" = '-h' ] || [ "$1" = '--hjelp' ] ; then
	echo
	echo "== Kommandolinjetest for å sjekke om et pangram er fullstendig =="
	echo "$innrykk Sjekk om en setning bruker alle de norske bokstavene og gi litt statistikk :-)"
	echo "$innrykk © Axel Bojer 2007 under GPL-lisensen"
	echo
	echo "= Bruk: ="
	echo "Hvis du starter uten tilvalg vil programmet be deg skrive inn ditt pangram. Mulige tilvalg er:"
	echo
	echo "$innrykk -e eller --eksempel		Vis Axels eksempel på et norsk pangram :-)"
	echo "$innrykk -h eller --hjelp		Vis denne hjelpeteksten"
	echo "$innrykk -k eller --kolonne		List opp hvor mange ganger hver bokstav er brukt i en kolonne"
	echo "$innrykk -l eller --lisens		Vis lisensinformasjon"
	echo "$innrykk -o eller --oversikt		List opp hvor mange ganger hver bokstav er blitt brukt som et sammendrag"
	echo "$innrykk -p eller --pangram		Angi et pangram på kommandolinja"
	echo "$innrykk -r eller --rad		List opp hvor mange ganger hver bokstav er brukt over tre rader"
	echo "$innrykk -s eller --slett		Slett mappa med foreløpige filer ($lagringsmappe) og alle filene i den"
	echo
	exit
elif [ "$1" = '-l' ] || [ "$1" = '--lisens' ] ; then
	kortLisens
	langLisens
	exit
elif [ "$1" = '-p' ] || [ "$1" = '--pangram' ]||[ "$2" = '-p' ] || [ "$2" = '--pangram' ]; then
	if [ 3 = ${#} ]; then
		pangram=$3
	else
		pangram=$2
	fi 2> /dev/null
# Slett mappa for foreløpige filer -- hvis den finnes
elif [ "$1" = '-s' ] || [ "$1" = '--slett' ] ; then
	if [ ! -e $lagringsmappe ]; then
		echo
		echo "Mappa «$lagringsmappe» finnes ikke og kan derfor ikke slettes"
		echo
		exit
	else
		rm -rf $lagringsmappe
		echo
		echo "Mappa «$lagringsmappe» er nå slettet"
		echo
		exit
	fi
else
	echo
	echo "Skriv inn ditt pangram:"
	read pangram
fi

# ============ Selve programmet ============

# Lag først en mappe å ha de foreløpige filene i
lagLagringsmappe

# Legg det oppgitte pangrammet i en egen foreløpig fil
LagrePangram

# Skriv inn dagens dato og klokkeslettet øverst i statistikkfila som en referanse
echo "# Fila ble opprettet:" $( date +%d.%m.%Y\ kl.\ %T ) > $lagringsmappe/pangram-s.txt

# Fyll statistikkfilene med noe nyttig :-)
echo
echo "Kort oversikt:"
for bokstav in  a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å; do
	# Splitt alle de brukte bokstavene på hver sin linje og lagre i en egen fil
	grep -io $bokstav $lagringsmappe/pangram.txt >> $lagringsmappe/pangram-s.txt
	# For hver bokstav, tell hvor mange ganger hver bokstav er brukt og lagre resultatet i en ny fil
	echo "$bokstav  $( grep -ic ^$bokstav$ $lagringsmappe/pangram-s.txt )" >> $lagringsmappe/statistikk-k.txt
#done
done  2> /dev/null

# Lag en (pent) formatert oppsummering
for antall in $( echo $(cut -d" " -f3 $lagringsmappe/statistikk-k.txt | sort | uniq) ); do
	 # Fordel bokstavene i egne filer etter hvor mange ganger de forekommer ( $antall  )
	grep $antall $lagringsmappe/statistikk-k.txt >> $lagringsmappe/$antall.txt
	# Formater litt penere -- på en rad
	sed 's/  */ /g' $lagringsmappe/statistikk-k.txt | sed 's/ /: /g' | sed 's/^/    /g' > $lagringsmappe/statistikk-r.txt
	# Fjern linjeskift og tall og lagre bare bokstavene som rekker i nye filer
	echo $( cut -d" " -f1 $lagringsmappe/$antall.txt sort | uniq ) > $lagringsmappe/$antall-1.txt
done 2> /dev/null
 
# Skriv ut sortert statistikk til kommandolinja ved bruk av filene over
# Denne skal alltid vises
if [ -e $lagringsmappe/0.txt ]; then
	if [ $( wc -l $lagringsmappe/0.txt | cut -d" " -f1 ) = "1" ]; then
		echo "$innrykk Du mangler bokstaven" $( cat $lagringsmappe/0-1.txt )
	else
		echo "$innrykk Du mangler bokstavene" $( cat $lagringsmappe/0-1.txt )
	fi
else
	echo "$innrykk Gratulerer! Pangrammet er komplett!"
fi

# Detaljert statistikk. Vises bare hvis det bes om det (tilvalg -o eller --oversikt)
oppsummering () {
for antall in $( echo $(cut -d" " -f3 $lagringsmappe/statistikk-k.txt | sort | uniq) ); do
	# For bokstaver som bare forekommer en gang
	if [ $antall = "1" ] && [ -e $lagringsmappe/1.txt ]; then
		if [ $( wc -l $lagringsmappe/1.txt | cut -d" " -f1 ) = "1" ]; then
 			echo -e "$innrykk Du har brukt bokstaven " $( cat $lagringsmappe/1-1.txt ) " $antall gang"
		else
			echo -e "$innrykk Du har brukt bokstavene " $( cat $lagringsmappe/1-1.txt ) " $antall gang hver"
		fi
	fi
	# For alle bokstaver som forekommer mer enn en gang
	if [ ! $antall = "0" ] && [ ! $antall = "1" ] && [ -e $lagringsmappe/$antall-1.txt ]; then
		if [ $( wc -l $lagringsmappe/$antall.txt | cut -d" " -f1 ) = "1" ]; then
			echo  -e "$innrykk Du har brukt bokstaven " $( cat $lagringsmappe/$antall-1.txt ) " $antall ganger"
		else
			echo  -e "$innrykk Du har brukt bokstavene " $( cat $lagringsmappe/$antall-1.txt ) " $antall ganger hver "
		fi
	fi
done
}

# Tell antall bokstaver og andre tegn
# Variabel, bare i bruk akkurat her
antallBokstaver=$( grep -c -v "#"  $lagringsmappe/pangram-s.txt )
# Melding til kommandolinja
echo "$innrykk Setningen har tilsammen ${#pangram} tegn, derav $antallBokstaver bokstaver og $((${#pangram} - $antallBokstaver)) andre tegn, som mellomrom, komma m.m."
echo

# En enkel alfabetisk oversikt i en kolonne
if [ "$1" = '-k' ] || [ "$1" = '--kolonne' ] || [ "$2" = '-k' ] || [ "$2" = '--kolonne' ]; then
	echo "Alfabetisk oversikt:"
	cat $lagringsmappe/statistikk-k.txt | sed 's/^/   /'
	echo
# Et forsøk på en bedre og mer komprimert oversikt
elif [ "$1" = '-o' ] || [ "$1" = '--oversikt' ] || [ "$2" = '-o' ] || [ "$2" = '--oversikt' ]; then
	echo "Detaljer:"
	oppsummering
	echo
# En enkel alfabetisk oversikt i en rad
elif [ "$1" = '-r' ] || [ "$1" = '--rad' ] || [ "$2" = '-r' ] || [ "$2" = '--rad' ]; then
	echo "Alfabetisk oversikt:"
	# Fordel bokstavene over tre linjer og lag avstand mellom dem
	echo  $( cat $lagringsmappe/statistikk-r.txt ) | sed 's/ /    /g' | sed 's/: */: /g' | sed 's/k/\n   k/' | sed 's/u/\n   u/' | sed 's/a/   a/'
	echo
fi

# ========== Slutt :-)  ==========
