Files
scwrypts/zsh/lib/utils/io.print.zsh
T

66 lines
1.4 KiB
Bash
Raw Normal View History

2024-02-06 14:06:44 -07:00
PRINT() {
local MESSAGE
local LAST_LINE_END='\n'
local STDERR=1
local STDOUT=0
local LTRIM=1
2024-05-07 23:11:21 -06:00
local FORMAT=$SCWRYPTS_OUTPUT_FORMAT
local _S
2024-02-06 14:06:44 -07:00
while [[ $# -gt 0 ]]
do
2024-05-07 23:11:21 -06:00
_S=1
2024-02-06 14:06:44 -07:00
case $1 in
-n | --no-trim-tabs ) LTRIM=0 ;;
-x | --no-line-end ) LAST_LINE_END='' ;;
-o | --use-stdout ) STDOUT=1; STDERR=0 ;;
2024-05-07 23:11:21 -06:00
-f | --format ) ((_S+=1)); FORMAT=$2 ;;
2024-02-06 14:06:44 -07:00
* ) MESSAGE+="$(echo $1) " ;;
esac
2024-05-07 23:11:21 -06:00
shift $_S
2024-02-06 14:06:44 -07:00
done
2024-05-07 23:11:21 -06:00
[ $FORMAT ] || FORMAT=pretty
local STYLED_MESSAGE
case $FORMAT in
pretty )
STYLED_MESSAGE="$(echo "$MESSAGE" | sed 's/%/%%/g')"
STYLED_MESSAGE="$({
printf "${COLOR}"
while IFS='' read line
do
[[ $PREFIX =~ ^[[:space:]]\+$ ]] && printf '\n'
printf "${PREFIX} : $(echo "$line" | sed 's/^ \+//; s/ \+$//')"
2024-02-06 14:06:44 -07:00
2024-05-07 23:11:21 -06:00
PREFIX=$(echo $PREFIX | sed 's/./ /g')
done <<< $MESSAGE
})"
STYLED_MESSAGE="${COLOR}$(echo "$STYLED_MESSAGE" | sed 's/%/%%/g')${__COLOR_RESET}${LAST_LINE_END}"
;;
json )
STYLED_MESSAGE="$(
echo '{}' | jq -c ".
| .timestamp = \"$(date +%s)\"
| .runtime = \"$SCWRYPTS_RUNTIME_ID\"
| .status = \"$(echo "$PREFIX" | sed 's/ .*//')\"
| .message = $(echo $MESSAGE | sed 's/^\t\+//' | jq -Rs)
" | sed 's/\\/\\\\/g'
)\n"
;;
* )
echo "ERROR : unsupported format '$FORMAT'" >&2
return 1
;;
esac
2024-02-06 14:06:44 -07:00
2024-05-07 23:11:21 -06:00
[[ $STDERR -eq 1 ]] && printf -- "$STYLED_MESSAGE" >&2
[[ $STDOUT -eq 1 ]] && printf -- "$STYLED_MESSAGE"
2024-02-06 14:06:44 -07:00
return 0
}