#!/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].*[()<>]/ || !/[()<>]/ {for (i=0; i]/ || /^[^()<>]*>/ { curIndent-=2; for (i=0; i.$||; 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].*[()<>]/ || !/[()<>]/ {for (i=0; i]/ || /^[^()<>]*>/ { curIndent-=2; for (i=0; i