blob: 2fecab6cc4e03a3fe5aaa5b651f30335e4bc2bd1 [file] [log] [blame]
#!/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<"