#!/bin/bash # Given an array of decimal numbers print all unicode codepoint. function print-decimal-unicode-range() { local originalSequence=("$@") local counter=0 # Use alternating colors to see which symbols extend out of the bounding # box. local bgColorBorder='\033[48;5;8m' local bgColorCode='\033[48;5;246m' local alternateBgColorCode='\033[48;5;240m' local bgColorChar='\033[48;5;66m' local alternateBgColorChar='\033[48;5;60m' local underline='\033[4m' local currentColorCode="${bgColorCode}" local currentColorChar="${bgColorChar}" local reset_color='\033[0m' local allChars="" local allCodes="" local wrapAt=5 local topLine="${bgColorBorder}╔══════╦══════╦══════╦══════╦══════╗${reset_color}" local bottomLine="${bgColorBorder}╚══════╩══════╩══════╩══════╩══════╝${reset_color}" local line="${bgColorBorder}╠══════╬══════╬══════╬══════╬══════╣${reset_color}" local bar="${bgColorBorder}║${reset_color}" local originalSequenceLength=${#originalSequence[@]} local leftoverSpaces=$((wrapAt - (originalSequenceLength % wrapAt))) # add fillers to array to maintain table: if [[ "$leftoverSpaces" < "$wrapAt" ]]; then for i in $(seq 1 $leftoverSpaces); do originalSequence+=(0) done fi local sequenceLength=${#originalSequence[@]} printf "%b\n" "$topLine" for decimalCode in "${originalSequence[@]}"; do local hexCode=$(printf '%x' "${decimalCode}") local code="${hexCode}" local char="\u${hexCode}" # fill in placeholder cells properly formatted: if [ "${char}" = "\u0" ]; then char=" " code=" " fi allCodes+="${currentColorCode} ${underline}${code}${reset_color}${currentColorCode} ${reset_color}$bar" allChars+="${currentColorChar} ${char} ${reset_color}$bar" counter=$((counter + 1)) count=$(( (count + 1) % wrapAt)) if [[ $count -eq 0 ]]; then if [[ "${currentColorCode}" = "${alternateBgColorCode}" ]]; then currentColorCode="${bgColorCode}" currentColorChar="${bgColorChar}" else currentColorCode="${alternateBgColorCode}" currentColorChar="${alternateBgColorChar}" fi printf "%b%b%b" "$bar" "$allCodes" "$reset_color" printf "\n" printf "%b%b%b" "$bar" "$allChars" "$reset_color" printf "\n" if [ "$counter" != "$sequenceLength" ]; then printf "%b\n" "$line" fi allCodes="" allChars="" fi done printf "%b\n" "$bottomLine" } function print-unicode-ranges() { echo '' local arr=($@) local len=$# local combinedRanges=() for ((j=0; j