#!/bin/sh

# IMPORTANTE: Si quieres tener información de depuración (algo no funciona bien)
# dale a la siguiente variable cualquier valor
DEP=

# Recuperación de variables importantes
titulo=`dcop kate kate-mainwindow\#1 caption`
guion=`basename $0`
ruta=${titulo:5}
ruta=${ruta/ */}
fichero=${ruta/\/*\/}
nombre=${fichero/.*}
extension=${fichero/$nombre}
ruta=${ruta/\/$fichero}
ferrores=${fichero}_errors
flinea=${fichero}_errors_n

# Control de extensión del fichero
[ "$extension" != ".md" -a "$extension" != ".mi" ] && exit 1

# Trabajo en mismo directorio en que reside el módulo
cd $ruta

# Recuperar línea, columna y mensaje del error a mostrar
# Controlar límites: línea de error mayor que el total o menor que 1
if [ ! -f $ferrores -o ! -f $flinea ] ; then
	let linea=0
	mensaje="$fichero: No hubo errores de compilación"
	[ -f $flinea ] && rm $flinea
else
	linea=`cat $flinea`
	if [ $guion == mocka_sigerror.sh ] ; then
		# ¡Maldita asignación! Sólo funciona así. A no ser que sepas lo que
		# haces, no lo toques o dejará de funcionar
		let totlineas=$(echo `wc -l < $ferrores`)
		if [ $linea -ge $totlineas ] ; then
			let linea=$totlineas+1
			echo $linea > $flinea
			mensaje="$fichero: No hay más errores"
		else
			let linea=$linea+1
		fi
	else
		if [ $linea -le 1 ] ; then
			let linea=0
			echo $linea > $flinea
			mensaje="$fichero: No hay más errores"
		else
			let linea=$linea-1
		fi
	fi
	if [ "$mensaje" == "" ] ; then
		echo $linea > $flinea
		let l=`echo $linea | ed -s $ferrores | cut -f1 -d" " | cut -f1 -d,`-1
		let c=`echo $linea | ed -s $ferrores | cut -f1 -d" " | cut -f2 -d,`-1
		mensaje=`echo $linea | ed -s $ferrores | cut -f2- -d" "`
	fi
fi

# Información de depuración
[ -n "$DEP" ] && echo "Título   : $titulo" > $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Guión    : $guion" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Ruta     : $ruta" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Fichero  : $fichero" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Nombre   : $nombre" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Extensión: $extension" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "F.línea  : $flinea" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "F.errores: $ferrores" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Línea    : $linea" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Error en : $l,$c" >> $ruta/mocka_error.log
[ -n "$DEP" ] && echo "Men.error: $mensaje" >> $ruta/mocka_error.log

# Averiguar qué documento y método usar para colocar el cursor
ifdoc=`dcop kate KateMainWindow0 currentDocumentIfaceNumber`
vci=`dcop kate | grep ViewCursorInterface\#$ifdoc | head -1`

# Preparar una ventana debajo de la de edición para el mensaje de error
# siempre y cuando no esté divida ya la ventana principal
dcop kate kate-mainwindow\#1 activateAction go_next
titulo=`dcop kate kate-mainwindow\#1 caption`

if [ "$titulo" == "${titulo/\/Mensaje}" ] ; then
	dcop kate kate-mainwindow\#1 activateAction view_split_horiz
	dcop kate KateMainWindow0 openURL "file:$ruta/Mensaje"
fi

# Poner el mensaje de error en la ventana recién creada
iferr=`dcop kate KateMainWindow0 currentDocumentIfaceNumber`
dcop kate EditInterface\#$iferr setText "$mensaje"

# Devolver el cursor a la ventana principal de edición
dcop kate kate-mainwindow\#1 activateAction go_prev

# Colocar el cursor
[ $l. != . -a $c. != . ] && dcop kate $vci setCursorPositionReal $l $c