PlusOuMoins/monolith.sh

51 lines
874 B
Bash
Executable File

#!/bin/bash
SRCDIR=src
MODULES=(Utils Menu Level Mode MainMenu)
MAIN_MODULE=Main
PRAGMA_PATTERN='^{-# LANGUAGE [a-zA-Z]\+ #-}$'
IMPORT_PATTERN='^import '
sourceFile()
{
printf "${SRCDIR}/${1}.hs"
}
pragmas()
{
grep -rh "${PRAGMA_PATTERN}" "${SRCDIR}" | sort -u
}
imports()
{
local modulesPattern="$(echo ${MODULES[@]} | sed 's: :\\|:g')"
grep -rh "${IMPORT_PATTERN}" "${SRCDIR}" | grep -v "\(${modulesPattern}\)" | sort -u
}
body()
{
grep -vh "${PRAGMA_PATTERN}" "$(sourceFile "${1}")" |\
uncork |\
grep -v "${IMPORT_PATTERN}" |\
cat -s
}
uncork()
{
LINE="null"
while ([ -z "${LINE}" ] || [ -n "${LINE%%module*}" ]); do read LINE; done
while [ -n "${LINE}" ]; do read LINE; done
cat
}
pragmas
grep '^module' "$(sourceFile ${MAIN_MODULE})"
printf "\n"
imports
for module in ${MODULES[@]}
do
body "${module}"
done
body "${MAIN_MODULE}"