#!/bin/bash
|
|
export CurPos=0
|
export TOKENS=()
|
|
mergeInSingleLine() {
|
OPENING_TOKEN="${TOKENS[$CurPos]}"
|
echo -n "${OPENING_TOKEN}"
|
CurPos=$[$CurPos + 1]
|
if ! [[ "${OPENING_TOKEN}" =~ \< ]] && ! [[ "${OPENING_TOKEN}" =~ \( ]]
|
then
|
# This is not an opening token, it's an atomic component.
|
return
|
fi
|
while true
|
do
|
if ! [[ "${TOKENS[$CurPos]}" =~ \> ]] && ! [[ "${TOKENS[$CurPos]}" =~ \) ]]
|
then
|
mergeInSingleLine
|
else
|
if [[ "${TOKENS[$CurPos]}" =~ \< ]] || [[ "${TOKENS[$CurPos]}" =~ \( ]]
|
then
|
# Both an opening and a closing token, print it and go ahead.
|
echo -n "${TOKENS[$CurPos]}"
|
CurPos=$[$CurPos + 1]
|
else
|
break
|
fi
|
fi
|
done
|
echo -n "${TOKENS[CurPos]}"
|
CurPos=$[$CurPos + 1]
|
}
|
|
considerMerging() {
|
OPENING_TOKEN="${TOKENS[CurPos]}"
|
if ! [[ "${OPENING_TOKEN}" =~ \< ]] && ! [[ "${OPENING_TOKEN}" =~ \( ]]
|
then
|
# This is not an opening token, it's an atomic component.
|
echo "${OPENING_TOKEN}"
|
CurPos=$[$CurPos + 1]
|
return;
|
fi
|
if [[ "${OPENING_TOKEN}" = "Type<" ]]
|
then
|
# Type<...> should be on a single line.
|
mergeInSingleLine
|
echo
|
return;
|
fi
|
echo "${OPENING_TOKEN}"
|
CurPos=$[$CurPos + 1]
|
while true
|
do
|
if ! [[ "${TOKENS[$CurPos]}" =~ \> ]] && ! [[ "${TOKENS[$CurPos]}" =~ \) ]]
|
then
|
considerMerging
|
else
|
if [[ "${TOKENS[$CurPos]}" =~ \< ]] || [[ "${TOKENS[$CurPos]}" =~ \( ]]
|
then
|
# Both an opening and a closing token, print it and go ahead.
|
echo "${TOKENS[$CurPos]}"
|
CurPos=$[$CurPos + 1]
|
else
|
break
|
fi
|
fi
|
done
|
echo "${TOKENS[$CurPos]}"
|
CurPos=$[$CurPos + 1]
|
}
|
|
while read line
|
do
|
if [[ "${line}" =~ required\ from\ .*DoEval\< ]]
|
then
|
echo
|
IFS=$'\r\n' GLOBIGNORE='*' :;
|
TOKENS=($(echo "${line}" |
|
sed 's| (\*)||g;
|
s|.* required from .*DoEval<||;
|
s|>.$||;
|
s/fruit::impl::meta:://g;
|
s| >|>|g;
|
s|, |,|g' |
|
sed 's|[>]|,>|g;
|
s|[)]|,)|g' |
|
sed 's|[<]|<\n|g;
|
s|[(]|(\n|g;
|
s|[,]|,\n|g' |
|
grep -v "^,$" ))
|
considerMerging |
|
sed 's|,>|>|g;
|
s|,)|)|g' |
|
awk -F@ '/^[^()<>]*[>)][^()<>]*[(<][^()<>]*$/ {curIndent-=2; for (i=0; i<curIndent; i++) { printf(" "); } print; curIndent+=2; next;}
|
/[()<>].*[()<>]/ || !/[()<>]/ {for (i=0; i<curIndent; i++) { printf(" "); } print; next;}
|
/[(<]/ { for (i=0; i<curIndent; i++) { printf(" "); } print; curIndent+=2; next; }
|
/[)>]/ || /^[^()<>]*>/ { curIndent-=2; for (i=0; i<curIndent; i++) { printf(" "); } print; next; }
|
'
|
elif [[ "${line}" =~ required\ from\ .*EvalFun\< ]]
|
then
|
echo
|
IFS=$'\r\n' GLOBIGNORE='*' :;
|
TOKENS=($(echo "${line}" |
|
sed 's|,|(|' |
|
sed 's| (\*)||g;
|
s|.* required from .*EvalFun<||;
|
s|>.$||;
|
s/fruit::impl::meta:://g;
|
s| >|>|g;
|
s|, |,|g' |
|
sed 's|[>]|,>|g;
|
s|[)]|,)|g' |
|
sed 's|[<]|<\n|g;
|
s|[(]|(\n|g;
|
s|[,]|,\n|g' |
|
grep -v "^,$";
|
echo ')'))
|
considerMerging |
|
sed 's|,>|>|g;
|
s|,)|)|g' |
|
awk -F@ '/^[^()<>]*[>)][^()<>]*[(<][^()<>]*$/ {curIndent-=2; for (i=0; i<curIndent; i++) { printf(" "); } print; curIndent+=2; next;}
|
/[()<>].*[()<>]/ || !/[()<>]/ {for (i=0; i<curIndent; i++) { printf(" "); } print; next;}
|
/[(<]/ { for (i=0; i<curIndent; i++) { printf(" "); } print; curIndent+=2; next; }
|
/[)>]/ || /^[^()<>]*>/ { curIndent-=2; for (i=0; i<curIndent; i++) { printf(" "); } print; next; }
|
'
|
else
|
echo "${line}"
|
fi
|
done | sed 's/fruit::impl::meta:://g;s/struct //g' | grep -v "required from .EvalIf<"
|