summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcountdown23
-rwxr-xr-xcountdown230
-rwxr-xr-xembolden265
-rwxr-xr-xitalicise267
-rwxr-xr-xmap11
-rwxr-xr-xreduce9
6 files changed, 605 insertions, 0 deletions
diff --git a/countdown b/countdown
new file mode 100755
index 0000000..59daf56
--- /dev/null
+++ b/countdown
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+declare -i t=$1
+
+while [ $((t--)) -ne 0 ]; do
+ if [ $t -gt 5400 ]; then
+ h=$((t/3600))
+ m=$(((t-(h*3600))/60))
+ if [ $m -lt 10 ]; then m=0$m; fi
+ s=$((t%60))
+ if [ $s -lt 10 ]; then s=0$s; fi
+ echo -en "\r$h:$m:$s "
+ elif [ $t -gt 90 ]; then
+ m=$((t/60))
+ s=$((t%60))
+ if [ $s -lt 10 ]; then s=0$s; fi
+ echo -en "\r$m:$s "
+ else
+ echo -en "\r$t "
+ fi
+ sleep 1
+done
+echo -en "\r"
diff --git a/countdown2 b/countdown2
new file mode 100755
index 0000000..615f6eb
--- /dev/null
+++ b/countdown2
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+if [ -z "$1" ]; then echo "usage $0 date"; exit 1; fi
+
+declare -ir t=`date +%s -d "$1"`;
+
+declare -i d=t-`date +%s`;
+while [ $d -gt 0 ]; do
+ #yyyy-mm-ddThh:mm:ss
+ #ww-dd hh:mm:ss
+ if [ $d -gt 5400 ]; then
+ h=$((d/3600))
+ m=$(((d-(h*3600))/60))
+ if [ $m -lt 10 ]; then m=0$m; fi
+ s=$((d%60))
+ if [ $s -lt 10 ]; then s=0$s; fi
+ echo -en "\r$h:$m:$s "
+ elif [ $d -gt 90 ]; then
+ m=$((d/60))
+ s=$((d%60))
+ if [ $s -lt 10 ]; then s=0$s; fi
+ echo -en "\r$m:$s "
+ else
+ echo -en "\r$d "
+ fi
+ #echo -en "\r$d\t";
+ sleep 1;
+ d=t-`date +%s`;
+done
+echo -en "\r"
diff --git a/embolden b/embolden
new file mode 100755
index 0000000..4b783e5
--- /dev/null
+++ b/embolden
@@ -0,0 +1,265 @@
+#!/bin/bash
+
+# For bold and italic we can use the Mathematical font variant mappings,
+# although those are only defined for Latin and Greek.
+# Latin bold capital: u1d400 - u1d419
+# Latin bold small: u1d41a - u1d433
+# Latin italic capital: u1d434 - u1d44d
+# Latin italic small: u1d44e - u1d467
+# Latin bold italic capital: u1d468 - u1d481
+# Latin bold italic small: u1d482 - u1d49b
+# (Script capital, script small, bold script capital, bold script small)
+# (Fraktur capital, fraktur small)
+# (Double-struck capital, double-struck small)
+# (some Hebrew symbol variants)
+# (Bold fraktur capital, bold fraktur small)
+# (Sans-serif capital, sans-serif small)
+# (Sans-serif bold capital, sans-serif bold small)
+# (Sans-serif italic capital, sans-serif italic small)
+# (Sans-serif bold italic capital, sans-serif bold italic small)
+# (Monospace capital, monospace small)
+# Greek bold capital: u1d6a8 - u1d6c0
+# Greek bold small: u1d6c2 - u1d6da
+# Greek italic capital: u1d6e2 - u1d6fa
+# Greek italic small: u1dcfc - u1d714
+# Greek bold italic capital: u1d71c - u1d734
+# Greek bold italic small: u1d736 - u1d74e
+# (Greek sans-serif bold capital: u1d756 - u1d76e)
+# (Greek sans-serif bold small: u1d770 - u1d788)
+# (Greek sans-serif bold italic capital: u1d790 - u1d7a8)
+# (Greek sans-serif bold italic small: u1d7aa - u1d7c2)
+# bold digits: u1d7ce - u1d7d7
+# (double-struck digits)
+# (sans-serif digits)
+# (sans-serif bold digits)
+# (monospace digits)
+# (Arabic mathematical)
+# (Arabic stretched)
+# (Arabic looped)
+# (Arabic double-struck)
+#
+# It turns out there are no Unicode control codes for marking text
+# bold or italic. There are for subscript and superscript,
+# and ASCII has similar codes which nobody ever uses.
+
+declare -A bold=(
+ [A]=$'\xf0\x9d\x90\x80'
+ [B]=$'\xf0\x9d\x90\x81'
+ [C]=$'\xf0\x9d\x90\x82'
+ [D]=$'\xf0\x9d\x90\x83'
+ [E]=$'\xf0\x9d\x90\x84'
+ [F]=$'\xf0\x9d\x90\x85'
+ [G]=$'\xf0\x9d\x90\x86'
+ [H]=$'\xf0\x9d\x90\x87'
+ [I]=$'\xf0\x9d\x90\x88'
+ [J]=$'\xf0\x9d\x90\x89'
+ [K]=$'\xf0\x9d\x90\x8a'
+ [L]=$'\xf0\x9d\x90\x8b'
+ [M]=$'\xf0\x9d\x90\x8c'
+ [N]=$'\xf0\x9d\x90\x8d'
+ [O]=$'\xf0\x9d\x90\x8e'
+ [P]=$'\xf0\x9d\x90\x8f'
+ [Q]=$'\xf0\x9d\x90\x90'
+ [R]=$'\xf0\x9d\x90\x91'
+ [S]=$'\xf0\x9d\x90\x92'
+ [T]=$'\xf0\x9d\x90\x93'
+ [U]=$'\xf0\x9d\x90\x94'
+ [V]=$'\xf0\x9d\x90\x95'
+ [W]=$'\xf0\x9d\x90\x96'
+ [X]=$'\xf0\x9d\x90\x97'
+ [Y]=$'\xf0\x9d\x90\x98'
+ [Z]=$'\xf0\x9d\x90\x99'
+ [a]=$'\xf0\x9d\x90\x9a'
+ [b]=$'\xf0\x9d\x90\x9b'
+ [c]=$'\xf0\x9d\x90\x9c'
+ [d]=$'\xf0\x9d\x90\x9d'
+ [e]=$'\xf0\x9d\x90\x9e'
+ [f]=$'\xf0\x9d\x90\x9f'
+ [g]=$'\xf0\x9d\x90\xa0'
+ [h]=$'\xf0\x9d\x90\xa1'
+ [i]=$'\xf0\x9d\x90\xa2'
+ [j]=$'\xf0\x9d\x90\xa3'
+ [k]=$'\xf0\x9d\x90\xa4'
+ [l]=$'\xf0\x9d\x90\xa5'
+ [m]=$'\xf0\x9d\x90\xa6'
+ [n]=$'\xf0\x9d\x90\xa7'
+ [o]=$'\xf0\x9d\x90\xa8'
+ [p]=$'\xf0\x9d\x90\xa9'
+ [q]=$'\xf0\x9d\x90\xaa'
+ [r]=$'\xf0\x9d\x90\xab'
+ [s]=$'\xf0\x9d\x90\xac'
+ [t]=$'\xf0\x9d\x90\xad'
+ [u]=$'\xf0\x9d\x90\xae'
+ [v]=$'\xf0\x9d\x90\xaf'
+ [w]=$'\xf0\x9d\x90\xb0'
+ [x]=$'\xf0\x9d\x90\xb1'
+ [y]=$'\xf0\x9d\x90\xb2'
+ [z]=$'\xf0\x9d\x90\xb3'
+ [Α]=$'\xf0\x9d\x9a\xa8'
+ [Β]=$'\xf0\x9d\x9a\xa9'
+ [Γ]=$'\xf0\x9d\x9a\xaa'
+ [Δ]=$'\xf0\x9d\x9a\xab'
+ [Ε]=$'\xf0\x9d\x9a\xac'
+ [Ζ]=$'\xf0\x9d\x9a\xad'
+ [Η]=$'\xf0\x9d\x9a\xae'
+ [Θ]=$'\xf0\x9d\x9a\xaf'
+ [Ι]=$'\xf0\x9d\x9a\xb0'
+ [Κ]=$'\xf0\x9d\x9a\xb1'
+ [Λ]=$'\xf0\x9d\x9a\xb2'
+ [Μ]=$'\xf0\x9d\x9a\xb3'
+ [Ν]=$'\xf0\x9d\x9a\xb4'
+ [Ξ]=$'\xf0\x9d\x9a\xb5'
+ [Ο]=$'\xf0\x9d\x9a\xb6'
+ [Π]=$'\xf0\x9d\x9a\xb7'
+ [Ρ]=$'\xf0\x9d\x9a\xb8'
+ [Σ]=$'\xf0\x9d\x9a\xba'
+ [Τ]=$'\xf0\x9d\x9a\xbb'
+ [Υ]=$'\xf0\x9d\x9a\xbc'
+ [Φ]=$'\xf0\x9d\x9a\xbd'
+ [Χ]=$'\xf0\x9d\x9a\xbe'
+ [Ψ]=$'\xf0\x9d\x9a\xbf'
+ [Ω]=$'\xf0\x9d\x9b\x80'
+ [α]=$'\xf0\x9d\x9b\x82'
+ [β]=$'\xf0\x9d\x9b\x83'
+ [γ]=$'\xf0\x9d\x9b\x84'
+ [δ]=$'\xf0\x9d\x9b\x85'
+ [ε]=$'\xf0\x9d\x9b\x86'
+ [ζ]=$'\xf0\x9d\x9b\x87'
+ [η]=$'\xf0\x9d\x9b\x88'
+ [θ]=$'\xf0\x9d\x9b\x89'
+ [ι]=$'\xf0\x9d\x9b\x8a'
+ [κ]=$'\xf0\x9d\x9b\x8b'
+ [λ]=$'\xf0\x9d\x9b\x8c'
+ [μ]=$'\xf0\x9d\x9b\x8d'
+ [ν]=$'\xf0\x9d\x9b\x8e'
+ [ξ]=$'\xf0\x9d\x9b\x8f'
+ [ο]=$'\xf0\x9d\x9b\x90'
+ [π]=$'\xf0\x9d\x9b\x91'
+ [ρ]=$'\xf0\x9d\x9b\x92'
+ [ς]=$'\xf0\x9d\x9b\x93'
+ [σ]=$'\xf0\x9d\x9b\x94'
+ [τ]=$'\xf0\x9d\x9b\x95'
+ [υ]=$'\xf0\x9d\x9b\x96'
+ [φ]=$'\xf0\x9d\x9b\x97'
+ [χ]=$'\xf0\x9d\x9b\x98'
+ [ψ]=$'\xf0\x9d\x9b\x99'
+ [ω]=$'\xf0\x9d\x9b\x9a'
+)
+
+declare -A italic=(
+ [A]=$'\xf0\x9d\x90\xb4'
+ [B]=$'\xf0\x9d\x90\xb5'
+ [C]=$'\xf0\x9d\x90\xb6'
+ [D]=$'\xf0\x9d\x90\xb7'
+ [E]=$'\xf0\x9d\x90\xb8'
+ [F]=$'\xf0\x9d\x90\xb9'
+ [G]=$'\xf0\x9d\x90\xba'
+ [H]=$'\xf0\x9d\x90\xbb'
+ [I]=$'\xf0\x9d\x90\xbc'
+ [J]=$'\xf0\x9d\x90\xbd'
+ [K]=$'\xf0\x9d\x90\xbe'
+ [L]=$'\xf0\x9d\x90\xbf'
+ [M]=$'\xf0\x9d\x91\x80'
+ [N]=$'\xf0\x9d\x91\x81'
+ [O]=$'\xf0\x9d\x91\x82'
+ [P]=$'\xf0\x9d\x91\x83'
+ [Q]=$'\xf0\x9d\x91\x84'
+ [R]=$'\xf0\x9d\x91\x85'
+ [S]=$'\xf0\x9d\x91\x86'
+ [T]=$'\xf0\x9d\x91\x87'
+ [U]=$'\xf0\x9d\x91\x88'
+ [V]=$'\xf0\x9d\x91\x89'
+ [W]=$'\xf0\x9d\x91\x8a'
+ [X]=$'\xf0\x9d\x91\x8b'
+ [Y]=$'\xf0\x9d\x91\x8c'
+ [Z]=$'\xf0\x9d\x91\x8d'
+ [a]=$'\xf0\x9d\x91\x8e'
+ [b]=$'\xf0\x9d\x91\x8f'
+ [c]=$'\xf0\x9d\x91\x90'
+ [d]=$'\xf0\x9d\x91\x91'
+ [e]=$'\xf0\x9d\x91\x92'
+ [f]=$'\xf0\x9d\x91\x93'
+ [g]=$'\xf0\x9d\x91\x94'
+ [h]=$'\xf0\x9d\x98\xa9' # Sans-serif, because f0 9d 91 95 is not assigned.
+ [i]=$'\xf0\x9d\x91\x96'
+ [j]=$'\xf0\x9d\x91\x97'
+ [k]=$'\xf0\x9d\x91\x98'
+ [l]=$'\xf0\x9d\x91\x99'
+ [m]=$'\xf0\x9d\x91\x9a'
+ [n]=$'\xf0\x9d\x91\x9b'
+ [o]=$'\xf0\x9d\x91\x9c'
+ [p]=$'\xf0\x9d\x91\x9d'
+ [q]=$'\xf0\x9d\x91\x9e'
+ [r]=$'\xf0\x9d\x91\x9f'
+ [s]=$'\xf0\x9d\x91\xa0'
+ [t]=$'\xf0\x9d\x91\xa1'
+ [u]=$'\xf0\x9d\x91\xa2'
+ [v]=$'\xf0\x9d\x91\xa3'
+ [w]=$'\xf0\x9d\x91\xa4'
+ [x]=$'\xf0\x9d\x91\xa5'
+ [y]=$'\xf0\x9d\x91\xa6'
+ [z]=$'\xf0\x9d\x91\xa7'
+ [Α]=$'\xf0\x9d\x9b\xa2'
+ [Β]=$'\xf0\x9d\x9b\xa3'
+ [Γ]=$'\xf0\x9d\x9b\xa4'
+ [Δ]=$'\xf0\x9d\x9b\xa5'
+ [Ε]=$'\xf0\x9d\x9b\xa6'
+ [Ζ]=$'\xf0\x9d\x9b\xa7'
+ [Η]=$'\xf0\x9d\x9b\xa8'
+ [Θ]=$'\xf0\x9d\x9b\xa9'
+ [Ι]=$'\xf0\x9d\x9b\xaa'
+ [Κ]=$'\xf0\x9d\x9b\xab'
+ [Λ]=$'\xf0\x9d\x9b\xac'
+ [Μ]=$'\xf0\x9d\x9b\xad'
+ [Ν]=$'\xf0\x9d\x9b\xae'
+ [Ξ]=$'\xf0\x9d\x9b\xaf'
+ [Ο]=$'\xf0\x9d\x9b\xb0'
+ [Π]=$'\xf0\x9d\x9b\xb1'
+ [Ρ]=$'\xf0\x9d\x9b\xb2'
+ [Σ]=$'\xf0\x9d\x9b\xb4'
+ [Τ]=$'\xf0\x9d\x9b\xb5'
+ [Υ]=$'\xf0\x9d\x9b\xb6'
+ [Φ]=$'\xf0\x9d\x9b\xb7'
+ [Χ]=$'\xf0\x9d\x9b\xb8'
+ [Ψ]=$'\xf0\x9d\x9b\xb9'
+ [Ω]=$'\xf0\x9d\x9b\xba'
+ [α]=$'\xf0\x9d\x9b\xbc'
+ [β]=$'\xf0\x9d\x9b\xbd'
+ [γ]=$'\xf0\x9d\x9b\xbe'
+ [δ]=$'\xf0\x9d\x9b\xbf'
+ [ε]=$'\xf0\x9d\x9c\x80'
+ [ζ]=$'\xf0\x9d\x9c\x81'
+ [η]=$'\xf0\x9d\x9c\x82'
+ [θ]=$'\xf0\x9d\x9c\x83'
+ [ι]=$'\xf0\x9d\x9c\x84'
+ [κ]=$'\xf0\x9d\x9c\x85'
+ [λ]=$'\xf0\x9d\x9c\x86'
+ [μ]=$'\xf0\x9d\x9c\x87'
+ [ν]=$'\xf0\x9d\x9c\x88'
+ [ξ]=$'\xf0\x9d\x9c\x89'
+ [ο]=$'\xf0\x9d\x9c\x8a'
+ [π]=$'\xf0\x9d\x9c\x8b'
+ [ρ]=$'\xf0\x9d\x9c\x8c'
+ [ς]=$'\xf0\x9d\x9c\x8d'
+ [σ]=$'\xf0\x9d\x9c\x8e'
+ [τ]=$'\xf0\x9d\x9c\x8f'
+ [υ]=$'\xf0\x9d\x9c\x90'
+ [φ]=$'\xf0\x9d\x9c\x91'
+ [χ]=$'\xf0\x9d\x9c\x92'
+ [ψ]=$'\xf0\x9d\x9c\x93'
+ [ω]=$'\xf0\x9d\x9c\x94'
+)
+
+# TODO: bold italics.
+
+while IFS= read -r line
+do for i in $(seq 0 $((${#line}-1)))
+ do
+ c1=${line:$i:1}
+ if [[ $c1 =~ [a-zA-Zα-ωΑ-Ω] ]]
+ then replacement+=${bold[$c1]}
+ else replacement+=$'\u0331'$c1
+ fi
+ done
+ echo "$replacement"
+done
diff --git a/italicise b/italicise
new file mode 100755
index 0000000..237238a
--- /dev/null
+++ b/italicise
@@ -0,0 +1,267 @@
+#!/bin/bash
+
+# For bold and italic we can use the Mathematical font variant mappings,
+# although those are only defined for Latin and Greek.
+# Latin bold capital: u1d400 - u1d419
+# Latin bold small: u1d41a - u1d433
+# Latin italic capital: u1d434 - u1d44d
+# Latin italic small: u1d44e - u1d467
+# Latin bold italic capital: u1d468 - u1d481
+# Latin bold italic small: u1d482 - u1d49b
+# (Script capital, script small, bold script capital, bold script small)
+# (Fraktur capital, fraktur small)
+# (Double-struck capital, double-struck small)
+# (some Hebrew symbol variants)
+# (Bold fraktur capital, bold fraktur small)
+# (Sans-serif capital, sans-serif small)
+# (Sans-serif bold capital, sans-serif bold small)
+# (Sans-serif italic capital, sans-serif italic small)
+# (Sans-serif bold italic capital, sans-serif bold italic small)
+# (Monospace capital, monospace small)
+# Greek bold capital: u1d6a8 - u1d6c0
+# Greek bold small: u1d6c2 - u1d6da
+# Greek italic capital: u1d6e2 - u1d6fa
+# Greek italic small: u1dcfc - u1d714
+# Greek bold italic capital: u1d71c - u1d734
+# Greek bold italic small: u1d736 - u1d74e
+# (Greek sans-serif bold capital: u1d756 - u1d76e)
+# (Greek sans-serif bold small: u1d770 - u1d788)
+# (Greek sans-serif bold italic capital: u1d790 - u1d7a8)
+# (Greek sans-serif bold italic small: u1d7aa - u1d7c2)
+# bold digits: u1d7ce - u1d7d7
+# (double-struck digits)
+# (sans-serif digits)
+# (sans-serif bold digits)
+# (monospace digits)
+# (Arabic mathematical)
+# (Arabic stretched)
+# (Arabic looped)
+# (Arabic double-struck)
+#
+# It turns out there are no Unicode control codes for marking text
+# bold or italic. There are for subscript and superscript,
+# and ASCII has similar codes which nobody ever uses.
+
+declare -A bold=(
+ [A]=$'\xf0\x9d\x90\x80'
+ [B]=$'\xf0\x9d\x90\x81'
+ [C]=$'\xf0\x9d\x90\x82'
+ [D]=$'\xf0\x9d\x90\x83'
+ [E]=$'\xf0\x9d\x90\x84'
+ [F]=$'\xf0\x9d\x90\x85'
+ [G]=$'\xf0\x9d\x90\x86'
+ [H]=$'\xf0\x9d\x90\x87'
+ [I]=$'\xf0\x9d\x90\x88'
+ [J]=$'\xf0\x9d\x90\x89'
+ [K]=$'\xf0\x9d\x90\x8a'
+ [L]=$'\xf0\x9d\x90\x8b'
+ [M]=$'\xf0\x9d\x90\x8c'
+ [N]=$'\xf0\x9d\x90\x8d'
+ [O]=$'\xf0\x9d\x90\x8e'
+ [P]=$'\xf0\x9d\x90\x8f'
+ [Q]=$'\xf0\x9d\x90\x90'
+ [R]=$'\xf0\x9d\x90\x91'
+ [S]=$'\xf0\x9d\x90\x92'
+ [T]=$'\xf0\x9d\x90\x93'
+ [U]=$'\xf0\x9d\x90\x94'
+ [V]=$'\xf0\x9d\x90\x95'
+ [W]=$'\xf0\x9d\x90\x96'
+ [X]=$'\xf0\x9d\x90\x97'
+ [Y]=$'\xf0\x9d\x90\x98'
+ [Z]=$'\xf0\x9d\x90\x99'
+ [a]=$'\xf0\x9d\x90\x9a'
+ [b]=$'\xf0\x9d\x90\x9b'
+ [c]=$'\xf0\x9d\x90\x9c'
+ [d]=$'\xf0\x9d\x90\x9d'
+ [e]=$'\xf0\x9d\x90\x9e'
+ [f]=$'\xf0\x9d\x90\x9f'
+ [g]=$'\xf0\x9d\x90\xa0'
+ [h]=$'\xf0\x9d\x90\xa1'
+ [i]=$'\xf0\x9d\x90\xa2'
+ [j]=$'\xf0\x9d\x90\xa3'
+ [k]=$'\xf0\x9d\x90\xa4'
+ [l]=$'\xf0\x9d\x90\xa5'
+ [m]=$'\xf0\x9d\x90\xa6'
+ [n]=$'\xf0\x9d\x90\xa7'
+ [o]=$'\xf0\x9d\x90\xa8'
+ [p]=$'\xf0\x9d\x90\xa9'
+ [q]=$'\xf0\x9d\x90\xaa'
+ [r]=$'\xf0\x9d\x90\xab'
+ [s]=$'\xf0\x9d\x90\xac'
+ [t]=$'\xf0\x9d\x90\xad'
+ [u]=$'\xf0\x9d\x90\xae'
+ [v]=$'\xf0\x9d\x90\xaf'
+ [w]=$'\xf0\x9d\x90\xb0'
+ [x]=$'\xf0\x9d\x90\xb1'
+ [y]=$'\xf0\x9d\x90\xb2'
+ [z]=$'\xf0\x9d\x90\xb3'
+ [Α]=$'\xf0\x9d\x9a\xa8'
+ [Β]=$'\xf0\x9d\x9a\xa9'
+ [Γ]=$'\xf0\x9d\x9a\xaa'
+ [Δ]=$'\xf0\x9d\x9a\xab'
+ [Ε]=$'\xf0\x9d\x9a\xac'
+ [Ζ]=$'\xf0\x9d\x9a\xad'
+ [Η]=$'\xf0\x9d\x9a\xae'
+ [Θ]=$'\xf0\x9d\x9a\xaf'
+ [Ι]=$'\xf0\x9d\x9a\xb0'
+ [Κ]=$'\xf0\x9d\x9a\xb1'
+ [Λ]=$'\xf0\x9d\x9a\xb2'
+ [Μ]=$'\xf0\x9d\x9a\xb3'
+ [Ν]=$'\xf0\x9d\x9a\xb4'
+ [Ξ]=$'\xf0\x9d\x9a\xb5'
+ [Ο]=$'\xf0\x9d\x9a\xb6'
+ [Π]=$'\xf0\x9d\x9a\xb7'
+ [Ρ]=$'\xf0\x9d\x9a\xb8'
+ [Σ]=$'\xf0\x9d\x9a\xba'
+ [Τ]=$'\xf0\x9d\x9a\xbb'
+ [Υ]=$'\xf0\x9d\x9a\xbc'
+ [Φ]=$'\xf0\x9d\x9a\xbd'
+ [Χ]=$'\xf0\x9d\x9a\xbe'
+ [Ψ]=$'\xf0\x9d\x9a\xbf'
+ [Ω]=$'\xf0\x9d\x9b\x80'
+ [α]=$'\xf0\x9d\x9b\x82'
+ [β]=$'\xf0\x9d\x9b\x83'
+ [γ]=$'\xf0\x9d\x9b\x84'
+ [δ]=$'\xf0\x9d\x9b\x85'
+ [ε]=$'\xf0\x9d\x9b\x86'
+ [ζ]=$'\xf0\x9d\x9b\x87'
+ [η]=$'\xf0\x9d\x9b\x88'
+ [θ]=$'\xf0\x9d\x9b\x89'
+ [ι]=$'\xf0\x9d\x9b\x8a'
+ [κ]=$'\xf0\x9d\x9b\x8b'
+ [λ]=$'\xf0\x9d\x9b\x8c'
+ [μ]=$'\xf0\x9d\x9b\x8d'
+ [ν]=$'\xf0\x9d\x9b\x8e'
+ [ξ]=$'\xf0\x9d\x9b\x8f'
+ [ο]=$'\xf0\x9d\x9b\x90'
+ [π]=$'\xf0\x9d\x9b\x91'
+ [ρ]=$'\xf0\x9d\x9b\x92'
+ [ς]=$'\xf0\x9d\x9b\x93'
+ [σ]=$'\xf0\x9d\x9b\x94'
+ [τ]=$'\xf0\x9d\x9b\x95'
+ [υ]=$'\xf0\x9d\x9b\x96'
+ [φ]=$'\xf0\x9d\x9b\x97'
+ [χ]=$'\xf0\x9d\x9b\x98'
+ [ψ]=$'\xf0\x9d\x9b\x99'
+ [ω]=$'\xf0\x9d\x9b\x9a'
+)
+
+declare -A italic=(
+ [A]=$'\xf0\x9d\x90\xb4'
+ [B]=$'\xf0\x9d\x90\xb5'
+ [C]=$'\xf0\x9d\x90\xb6'
+ [D]=$'\xf0\x9d\x90\xb7'
+ [E]=$'\xf0\x9d\x90\xb8'
+ [F]=$'\xf0\x9d\x90\xb9'
+ [G]=$'\xf0\x9d\x90\xba'
+ [H]=$'\xf0\x9d\x90\xbb'
+ [I]=$'\xf0\x9d\x90\xbc'
+ [J]=$'\xf0\x9d\x90\xbd'
+ [K]=$'\xf0\x9d\x90\xbe'
+ [L]=$'\xf0\x9d\x90\xbf'
+ [M]=$'\xf0\x9d\x91\x80'
+ [N]=$'\xf0\x9d\x91\x81'
+ [O]=$'\xf0\x9d\x91\x82'
+ [P]=$'\xf0\x9d\x91\x83'
+ [Q]=$'\xf0\x9d\x91\x84'
+ [R]=$'\xf0\x9d\x91\x85'
+ [S]=$'\xf0\x9d\x91\x86'
+ [T]=$'\xf0\x9d\x91\x87'
+ [U]=$'\xf0\x9d\x91\x88'
+ [V]=$'\xf0\x9d\x91\x89'
+ [W]=$'\xf0\x9d\x91\x8a'
+ [X]=$'\xf0\x9d\x91\x8b'
+ [Y]=$'\xf0\x9d\x91\x8c'
+ [Z]=$'\xf0\x9d\x91\x8d'
+ [a]=$'\xf0\x9d\x91\x8e'
+ [b]=$'\xf0\x9d\x91\x8f'
+ [c]=$'\xf0\x9d\x91\x90'
+ [d]=$'\xf0\x9d\x91\x91'
+ [e]=$'\xf0\x9d\x91\x92'
+ [f]=$'\xf0\x9d\x91\x93'
+ [g]=$'\xf0\x9d\x91\x94'
+ [h]=$'\xf0\x9d\x98\xa9' # Sans-serif, because f0 9d 91 95 is not assigned.
+ [i]=$'\xf0\x9d\x91\x96'
+ [j]=$'\xf0\x9d\x91\x97'
+ [k]=$'\xf0\x9d\x91\x98'
+ [l]=$'\xf0\x9d\x91\x99'
+ [m]=$'\xf0\x9d\x91\x9a'
+ [n]=$'\xf0\x9d\x91\x9b'
+ [o]=$'\xf0\x9d\x91\x9c'
+ [p]=$'\xf0\x9d\x91\x9d'
+ [q]=$'\xf0\x9d\x91\x9e'
+ [r]=$'\xf0\x9d\x91\x9f'
+ [s]=$'\xf0\x9d\x91\xa0'
+ [t]=$'\xf0\x9d\x91\xa1'
+ [u]=$'\xf0\x9d\x91\xa2'
+ [v]=$'\xf0\x9d\x91\xa3'
+ [w]=$'\xf0\x9d\x91\xa4'
+ [x]=$'\xf0\x9d\x91\xa5'
+ [y]=$'\xf0\x9d\x91\xa6'
+ [z]=$'\xf0\x9d\x91\xa7'
+ [Α]=$'\xf0\x9d\x9b\xa2'
+ [Β]=$'\xf0\x9d\x9b\xa3'
+ [Γ]=$'\xf0\x9d\x9b\xa4'
+ [Δ]=$'\xf0\x9d\x9b\xa5'
+ [Ε]=$'\xf0\x9d\x9b\xa6'
+ [Ζ]=$'\xf0\x9d\x9b\xa7'
+ [Η]=$'\xf0\x9d\x9b\xa8'
+ [Θ]=$'\xf0\x9d\x9b\xa9'
+ [Ι]=$'\xf0\x9d\x9b\xaa'
+ [Κ]=$'\xf0\x9d\x9b\xab'
+ [Λ]=$'\xf0\x9d\x9b\xac'
+ [Μ]=$'\xf0\x9d\x9b\xad'
+ [Ν]=$'\xf0\x9d\x9b\xae'
+ [Ξ]=$'\xf0\x9d\x9b\xaf'
+ [Ο]=$'\xf0\x9d\x9b\xb0'
+ [Π]=$'\xf0\x9d\x9b\xb1'
+ [Ρ]=$'\xf0\x9d\x9b\xb2'
+ [Σ]=$'\xf0\x9d\x9b\xb4'
+ [Τ]=$'\xf0\x9d\x9b\xb5'
+ [Υ]=$'\xf0\x9d\x9b\xb6'
+ [Φ]=$'\xf0\x9d\x9b\xb7'
+ [Χ]=$'\xf0\x9d\x9b\xb8'
+ [Ψ]=$'\xf0\x9d\x9b\xb9'
+ [Ω]=$'\xf0\x9d\x9b\xba'
+ [α]=$'\xf0\x9d\x9b\xbc'
+ [β]=$'\xf0\x9d\x9b\xbd'
+ [γ]=$'\xf0\x9d\x9b\xbe'
+ [δ]=$'\xf0\x9d\x9b\xbf'
+ [ε]=$'\xf0\x9d\x9c\x80'
+ [ζ]=$'\xf0\x9d\x9c\x81'
+ [η]=$'\xf0\x9d\x9c\x82'
+ [θ]=$'\xf0\x9d\x9c\x83'
+ [ι]=$'\xf0\x9d\x9c\x84'
+ [κ]=$'\xf0\x9d\x9c\x85'
+ [λ]=$'\xf0\x9d\x9c\x86'
+ [μ]=$'\xf0\x9d\x9c\x87'
+ [ν]=$'\xf0\x9d\x9c\x88'
+ [ξ]=$'\xf0\x9d\x9c\x89'
+ [ο]=$'\xf0\x9d\x9c\x8a'
+ [π]=$'\xf0\x9d\x9c\x8b'
+ [ρ]=$'\xf0\x9d\x9c\x8c'
+ [ς]=$'\xf0\x9d\x9c\x8d'
+ [σ]=$'\xf0\x9d\x9c\x8e'
+ [τ]=$'\xf0\x9d\x9c\x8f'
+ [υ]=$'\xf0\x9d\x9c\x90'
+ [φ]=$'\xf0\x9d\x9c\x91'
+ [χ]=$'\xf0\x9d\x9c\x92'
+ [ψ]=$'\xf0\x9d\x9c\x93'
+ [ω]=$'\xf0\x9d\x9c\x94'
+)
+
+# TODO: bold italics.
+
+while IFS= read -r line
+do
+ replacement=""
+ for i in $(seq 0 "$((${#line}-1))")
+ do
+ c1=${line:$i:1}
+ if [[ $c1 =~ [a-zA-Zα-ωΑ-Ω] ]]
+ then replacement+=${italic[$c1]}
+ else replacement+=$'\u0331'$c1
+ fi
+ done
+ echo "$replacement"
+done
diff --git a/map b/map
new file mode 100755
index 0000000..ec514ad
--- /dev/null
+++ b/map
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+fn=$1
+if [[ "$fn" = *\$1* ]]
+then f(){ eval "$fn";}
+else f(){ eval "$fn" "$1";}
+fi
+shift
+for x in "$@"
+do f "$x"
+done
diff --git a/reduce b/reduce
new file mode 100755
index 0000000..2e7269c
--- /dev/null
+++ b/reduce
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+fn=$1
+f() { eval "$fn $*"; }
+a=$2
+b=$3
+shift 3
+[[ -z "$b" ]] && exec echo "$a"
+exec "$0" "$fn" "$(f "$a" "$b")" "$@"