#! /bin/sh
# Script to check that the GUI texts in the documentation match the ones in the
#	application, and to provide a translation for them if available
# Syntax: ./check_gui_texts <language> <documentation>
# Maintained by Eric Bischoff <e.bischoff@noos.fr>

if [ "$1" = ""  -o "$1" = "en" ]; then appdir=templates; else appdir=$1/messages; fi
if [ "$2" = "" ]; then documentation=kspell; else documentation=$2; fi
modules="kdeaddons kdeadmin kdebase kdeedu kdegames kdegraphics kdelibs kdemultimedia kdenetwork kdenonbeta kdepim kdesdk kdetoys kdeutils koffice others"

# Verify that the language exists
if [ ! -d $appdir ]; then
	echo "Language not supported: $1"
	exit 1
fi

# Search the module this documentation belongs to
module=x
for m in $modules; do
	if [ -f templates/docs/$m/$documentation.pot ]; then module=$m; fi
done
if [ module = x ]; then
	echo "Documentation not found: $documentation"
	exit 1
fi

# Extract the GUI elements from the documentation
egrep -v "^(#|msgstr)" templates/docs/$module/$documentation*.pot | sed 's/^[^"]*"//; s/"$//' | awk 'BEGIN { r=""} !/^$/ {r=r$0} /^$/ {print r; r=""} END {print r}' > /tmp/seek.sh-1
sed 's:<guilabel>:#msgid ":g; s:</guilabel>:"#:g; s:<guimenu>:#msgid ":g; s:</guimenu>:"#:g; s:<guisubmenu>:#msgid ":g; s:</guisubmenu>:"#:g; s:<guimenuitem>:#msgid ":g; s:</guimenuitem>:"#:g; s:<guibutton>:#msgid ":g; s:</guibutton>:"#:g' /tmp/seek.sh-1 | tr '#' '\n' | grep '^msgid "' | sort -u > /tmp/seek.sh-2
if [ ! -s /tmp/seek.sh-2 ]; then
	echo "No GUI elements in the documentation: $documentation"
	rm /tmp/seek.sh-*
	exit 0
fi

# Determine where to search
# Feel free to add the information relevant for the documents that are not yet listed here
case $documentation in
	kasteroids) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kasteroids.po"
		;;
	katomic) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/katomic.po"
		;;
	kbackgammon) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kbackgammon.po"
		;;
	kbattleship) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kbattleship.po"
		;;
	kblackbox) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kblackbox.po"
		;;
	kenolaba) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kenolaba.po"
		;;
	kfouleggs) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ksirtet.po"
		;;
	kjezz) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kjezz.po"
		;;
	kjumpingcube) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kjumpingcube.po"
		;;
	klines) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/klines.po"
		;;
	kmines) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kmines.po"
		;;
	konqueror) where="kdelibs/kdelibs.po kdeaddons/konqsidebar_mediaplayer.po kdebase/konqueror.po"
		;;
	konquest) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/konquest.po"
		;;
	kpat) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kpat.po"
		;;
	kpoker) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kpoker.po"
		;;
	kreversi) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kreversi.po"
		;;
	ksame) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ksame.po"
		;;
	kshisen) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kshisen.po"
		;;
	ksmiletris) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ksirtet.po kdegames/ksmiletris.po"
		;;
	ksnake) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ksnake.po"
		;;
	ksokoban) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ksokoban.po"
		;;
	kspell) where="kdelibs/kdelibs.po"
		;;
	kspaceduel) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kspaceduel.po"
		;;
	ktron) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ktron.po"
		;;
	ktuberling) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/ktuberling.po"
		;;
	kwin4) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/kwin4.po"
		;;
	lskat) where="kdelibs/kdelibs.po kdegames/libkdegames.po kdegames/lskat.po"
		;;
	*) if [ ! -f  $appdir/$module/$documentation.po* ]; then
		echo "Cannot determine the list of po files to search"
		echo "for $documentation (module $module)"
		rm /tmp/seek.sh-*
		exit 1
	   fi
	   where="kdelibs/kdelibs.po $module/$documentation.po"
esac

# Verify that these GUI texts exist in the GUI messages,
# and if yes then provide their translation
cat /tmp/seek.sh-2 | (read guielement; \
while [ "$guielement" != "" ]; do \
	echo "$guielement"; \
	# Escape characters that have a meaning for egrep
	guielement=$(echo $guielement | sed 's/[\^\$\+\*\?]/\\&/g; s/^/\^/'); \
	found=no; \
	# Try to search an exact match
	for f in $where; do \
		file=$appdir/$f; \
		if [ $appdir = templates ]; then file=${file}t; fi; \
        	cat $file | tr -d '&' > /tmp/seek.sh-1; \
		result=$(egrep -n "$guielement" /tmp/seek.sh-1); \
		if [ $? -eq 0 ]; then \
			found=yes; \
			line=$(echo $result | sed 's/^\([^:]*\):.*$/\1/'); \
			if [ $appdir = templates ]; then \
				echo "  Found in $file"; \
			else \
				head -n $(expr $line + 1) $file | tail -n 1 | tr -d '&' > /tmp/seek.sh-3; \
				recode utf-8..iso-8859-1 /tmp/seek.sh-3; \
				echo "  Found in $file: $(cat /tmp/seek.sh-3)"; \
			fi; \
		fi; \
	done; \
	# Try to search an approximative match
	if [ $found = no ]; then \
		guielement=$(echo $guielement | sed 's/^\^msgid "//; s/"$//'); \
		guielement=$(echo $guielement | sed 's/  */ */g; s/^/\^msgid "/; s/[:.! ]*$/[:.! ]*"/'); \
		for f in $where; do \
			file=$appdir/$f; \
			if [ $appdir = templates ]; then file=${file}t; fi; \
        		cat $file | tr -d '&' > /tmp/seek.sh-1; \
			result=$(egrep -i -n "$guielement" /tmp/seek.sh-1); \
			if [ $? -eq 0 ]; then \
				found=yes; \
				line=$(echo $result | sed 's/^\([^:]*\):.*$/\1/'); \
				if [ $appdir = templates ]; then \
					head -n $line $file | tail -n 1 | tr -d '&' > /tmp/seek.sh-3; \
					echo "  Found something similar in $file:"
					sed "s/^/    /" /tmp/seek.sh-3; \
				else \
					head -n $(expr $line + 1) $file | tail -n 2 | tr -d '&' > /tmp/seek.sh-3; \
					recode utf-8..iso-8859-1 /tmp/seek.sh-3; \
					echo "  Found something similar in $file:"; \
					sed "s/^/    /" /tmp/seek.sh-3; \
				fi; \
			fi; \
		done; \
	fi; \
	# Not found: indicate where we've been searching
	if [ $found = no ]; then \
		echo "  Not found! I searched in:"; \
		for f in $where; do \
			file=$appdir/$f; \
			if [ $appdir = templates ]; then file=${file}t; fi; \
			echo "  $file"; \
		done; \
	fi; \
	read guielement; \
done)

# Do housekeeping
rm /tmp/seek.sh-*
exit 0
