os-test-framework/utils/ansi-screenshots/to_ansi.sh
2018-07-25 09:50:10 +02:00

57 lines
2.3 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
file="$1"
width="$2"
mini_png="$(mktemp --suffix=".png")"
colors_gif="$(mktemp --suffix=".gif")"
indexed_gif="$(mktemp --suffix=".gif")"
indexed_pgm="$(mktemp --suffix=".pgm")"
odd_lines="$(mktemp --suffix=".odd")"
even_lines="$(mktemp --suffix=".even")"
odd_lines_px="$(mktemp --suffix=".odd.px")"
even_lines_px="$(mktemp --suffix=".even.px")"
colors=(78,78,78 255,108,96 0,170,0 288,288,182 150,203,254 255,115,253 85,255,255 238,238,238 124,124,124 255,155,147 177,253,121 255,255,145 181,220,254 255,156,254 85,255,255 255,255,255)
args=()
for i in `seq 0 15`; do
if test $i -ge 8; then
color=$((i+8))
else
color=$((i))
fi
args+=(-fuzz 0% -fill "gray(${color})" -opaque "rgb(${colors[$i]})")
done
convert "$file" -resize "${width}x" "${mini_png}" \
&& convert +dither -remap "$(dirname "$0")/travis-palette.gif" "${mini_png}" "${colors_gif}" \
&& convert "${colors_gif}" "${args[@]}" "${indexed_gif}" \
&& convert "${indexed_gif}" "${indexed_pgm}" \
&& tail -n +4 "${indexed_pgm}" \
| hexdump -Cv \
| sed -n -e 's/^[0-9a-f]* \(\([0-9a-f]\{2\} \?\)\{1,16\}\).*$/\1/p' \
| tr '\n' ' ' \
| sed -e 's/ \+/ /g' \
| fold -w $((width*3)) \
| awk "{ if (NR % 2 == 0) print > \"$even_lines\"; else print > \"$odd_lines\"; }"
nodd="$($(dirname "$0")/../file-length.sh -l "$odd_lines")"
neven="$($(dirname "$0")/../file-length.sh -l "$even_lines")"
if test "$nodd" -gt "$neven"; then nlines="$neven"; else nlines="$nodd"; fi
head -n "$nlines" "$odd_lines" | sed -e 's/ $//' | tr ' ' '\n' > "$odd_lines_px"
head -n "$nlines" "$even_lines" | sed -e 's/ $//' | tr ' ' '\n' > "$even_lines_px"
paste "$odd_lines_px" "$even_lines_px" \
| tr '\t\n' ' ' \
| fold -w $((width*6)) \
| sed -e 's/\([01]\)\([0-7]\) \([01]\)\([0-7]\) /[\1;3\2;4\4m▀/g' -e 's/$//' \
| if test "$CI" = "true" -a "$TRAVIS" = "true"; then sed -e 's/▀/"/g'; else cat; fi
# Using the line below instead of the one above will ensure that the output is
# printed slow enought that unicode corruption by Travis is unlikely.
#
# | if test "$CI" = "true" -a "$TRAVIS" = "true"; then while IFS=$'\n' read -n 11 ab; do if test "${#ab}" -ne 11; then echo "$ab"; else echo -n "$ab"; fi; sleep 0.01; done; else cat; fi
echo
rm "${mini_png}" "${colors_gif}" "${indexed_gif}" "${indexed_pgm}" "${odd_lines}" "${even_lines}" "${odd_lines_px}" "${even_lines_px}"