diff options
author | Egmont Koblinger <egmont@gmail.com> | 2017-12-11 22:02:44 +0100 |
---|---|---|
committer | Egmont Koblinger <egmont@gmail.com> | 2017-12-11 22:02:44 +0100 |
commit | 9be01fdf027c1f3e5ed665e6da024cf5ca424f0b (patch) | |
tree | 8437d9a5bf8742ec79a289ab84043bf050e8c87b | |
parent | a8af47bcabc66417f3b0930c7f3e2a903f1b9710 (diff) | |
download | vte-9be01fdf027c1f3e5ed665e6da024cf5ca424f0b.tar.gz |
sgr-test.sh: New script for testing SGR escape sequences0.51.2
https://bugzilla.gnome.org/show_bug.cgi?id=721761
-rw-r--r-- | perf/Makefile.am | 1 | ||||
-rwxr-xr-x | perf/sgr-test.sh | 138 |
2 files changed, 139 insertions, 0 deletions
diff --git a/perf/Makefile.am b/perf/Makefile.am index a5d68431..e308dea7 100644 --- a/perf/Makefile.am +++ b/perf/Makefile.am @@ -5,6 +5,7 @@ EXTRA_DIST = \ inc.sh \ random.sh \ scroll.vim \ + sgr-test.sh \ utf8.sh \ vim.sh \ $(NULL) diff --git a/perf/sgr-test.sh b/perf/sgr-test.sh new file mode 100755 index 00000000..82dc0dd6 --- /dev/null +++ b/perf/sgr-test.sh @@ -0,0 +1,138 @@ +#!/usr/bin/env bash + +# Tester for various SGR attributes. +# Copyright (C) 2017 Egmont Koblinger +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +words=( Efg Ijk Pqr Xyz) +words_comment=(normal "green text" "magenta background" "bright red underline") +words_start=( "" 32 45 58:5:9) +words_end=( "" 39 49 59) + +attr_name=(bold dim italic underline underline "double underline" "double underline" "curly underline" blink reverse hidden strikethrough overline) +attr_start=( 1 2 3 4 4:1 21 4:2 4:3 5 7 8 9 53) +attr_end=( 22 22 23 24 4:0 24 4:0 4:0 25 27 28 29 55) + +col_name=("normal") +col_start=("") +col_end=("") + +row_name=("normal") +row_start=("") +row_end=("") + +# Construct the cell's contents +cell="" +cell_width=0 +for (( i = 0; i < ${#words[@]}; i++ )); do + if [ $i != 0 ]; then + cell="$cell " + cell_width=$((cell_width+1)) + fi + if [ -n "${words_start[i]}" ]; then + cell="$cell"$'\e['"${words_start[i]}m" + fi + cell="$cell${words[i]}" + cell_width=$((cell_width+${#words[i]})) + if [ -n "${words_end[i]}" ]; then + cell="$cell"$'\e['"${words_end[i]}m" + fi +done + +# Fill up the row_* arrays based on attr_*. +col1_width=6 +for (( i = 0; i < ${#attr_name[@]}; i++ )); do + rn="${attr_name[i]} (${attr_start[i]}/${attr_end[i]})" + if [ ${#rn} -gt $col1_width ]; then + col1_width=${#rn} + fi + row_name+=("$rn") + row_start+=($'\e['"${attr_start[i]}m") + row_end+=($'\e['"${attr_end[i]}m") +done + +# Fill up the col_* arrays based on the cmdline parameters +for arg; do + name="" + start="" + end="" + IFS="+" read -r -a codes <<< "$arg" + for code in "${codes[@]}"; do + for (( i = 0; i < ${#attr_name[@]}; i++ )); do + if [ "$code" = "${attr_name[i]}" -o "$code" = "${attr_start[i]}" ]; then + if [ -n "$name" ]; then + name="$name + " + fi + name="$name${attr_name[i]} (${attr_start[i]}/${attr_end[i]})" + start="$start"$'\e['"${attr_start[i]}m" + end=$'\e['"${attr_end[i]}m$end" + break + fi + done + done + if [ -n "$name" ]; then + col_name+=("$name") + col_start+=("$start") + col_end+=("$end") + fi +done + + +echo "Hint:" +echo " Specify command line arguments (attribute names or starting numbers)" +echo " to create columns for them. Use the + sign to enable more attributes at once." +echo " E.g.: ${0##*/} 1 7+8, or ${0##*/} bold reverse+hidden." +echo + +echo "Sample text is:" +for (( i = 0; i < ${#words[@]}; i++ )); do + echo -n " ${words[i]}: ${words_comment[i]}" + if [ -n "${words_start[i]}" -o -n "${words_end[i]}" ]; then + echo -n " (${words_start[i]}/${words_end[i]})" + fi + echo +done +echo + +# Print the top header, using multiple lines if necessary +again=1 +while [ $again = 1 ]; do + again=0 + printf "%${col1_width}s" + for (( col = 0; col < ${#col_end[@]}; col++ )); do + echo -n " " + printf "%-${cell_width}.${cell_width}s" "${col_name[col]}" + col_name[col]="${col_name[col]:cell_width}" + if [ -n "${col_name[col]}" ]; then + again=1 + fi + done + echo +done + +# Print the body of the table +for (( row = 0; row < ${#row_end[@]}; row++ )); do + printf "%-${col1_width}.${col1_width}s" "${row_name[row]}" + for (( col = 0; col < ${#col_end[@]}; col++ )); do + echo -n " " + echo -n "${row_start[row]}" + echo -n "${col_start[col]}" + echo -n "$cell" + echo -n "${col_end[col]}" + echo -n "${row_end[row]}" + done + echo +done |