#!/bin/bash

# Needed for proper sorting:
lc="$LC_ALL"
export LC_ALL="C"

if [ -z "$1" -o "$1" = "-h" ]; then
	if [ -z "$1" ]; then echo -e "$0: Error: Directory expected as argument\n" 1>&2; fi
	echo "Usage: mergeout dir"
	echo "Merges rjrv output files into a single file that is just like jrv -i."
	exit
fi

dir=$1
errors=`egrep -h "^\..*:$|expected" $dir/pc*`
errors="$errors ."
errors=`echo $errors | sed -e 's,[^. ][^ ]*: [^e],,g' -e 's, \.$,,g'`
merged=`egrep -h "^\..*:$" $dir/pc* | sed 's,:,,g' | sort | sed 's,$,:,g'`

while [ "$errors" != "." ]; do
	line=""

	while [ -z "`echo $line | grep :`" ]; do
		line="$line.`echo $errors | cut -d. -f2`"
		errors=".`echo $errors | cut -d. -f3-`"
	done

	line=`echo $line | sed 's/,/@/g'`		# Hard to escape commas inside a variable, so just change it temporarily.
	leaf="\\`echo $line | sed 's,:.*,:,g'`"		# Get the directory and escape the leading dot.
	merged=`echo $merged | sed "s,$leaf,$line,g"`	# Replace the directory with the directory plus the error.
done

merged=`echo "$merged" | sed 's/@/,/g'`				# Put the commas back.
merged=`echo "$merged" | sed 's,: ,:\n,g'`			# Add an endline after each directory.
merged=`echo "$merged" | sed 's,\([^:]\) \./,\1\n\./,g'`	# Add an endline after each error message.
merged=`echo "$merged" | sed 's,expected,    expected,g'`	# Tab each error message in by 4 spaces.

LC_ALL="$lc"
echo "$merged" > $dir/merged
