From: fpunktk <git@fpunktk.de> Date: Thu, 20 Aug 2015 18:45:36 +0000 (+0200) Subject: add initial version X-Git-Url: https://fpunktk.de/gitweb/?a=commitdiff_plain;ds=inline;p=unicode-write.sh.git add initial version --- diff --git a/unicode-write.sh b/unicode-write.sh new file mode 100755 index 0000000..320cead --- /dev/null +++ b/unicode-write.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +# unicode-write.sh by Felix Kästner (fpunktk), GPL3 + +# a script that transforms text into random similar looking unicode characters +# it can be used to generate human readable text that cannot easily be processed by machines + +# selection of replace characters +# echo " +# # complete lower upper +# ï½ï½ï½ï½ï½ ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ï½ +# ABCDEFGHIJKLï¼ï¼®ï¼¯ï¼°ï¼±ï¼²ï¼³ï¼´ï¼µï¼¶ï¼·ï¼¸ï¼¹ï¼º +# ððððððð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð«ð¬ðð®ð¯ð°ð±ð²ð³ +# ðððððð ðððððððððððððððððððð +# ðððð ðððððððððððððððððððððð +# ð¨ð©ðªð«ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ðð +# ðªð«ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ðððð +# ððððððððððððððððð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð© +# ðððððððððððððððððððððððððð +# ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ðððððð +# ðºð»ð¼ð½ð¾ð¿ðððððð ðððððððððððððð +# ð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð«ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ +# ð®ð¯ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ðððððð ðð +# ððððððððððððð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð«ð¬ð +# ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð«ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ðºð» +# ððððððððððððððððððððððððð ð¡ +# ððððððððððð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð«ð¬ðð®ð¯ +# ð¼ð½ð¾ð¿ðððððð ðððððððððððððððð +# ððððððððððððððððððððððð ð¡ð¢ð£ +# ð°ð±ð²ð³ð´ðµð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ðððððð ðððð +# âââââââââââââââââ â¡â¢â£â¤â¥â¦â§â¨â© +# â¶â·â¸â¹âºâ»â¼â½â¾â¿ââââââ ââââââââââ +# +# # numbers +# ðððððððððð +# ððððððððð ð¡ +# ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð« +# ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµ +# ð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ +# ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ +# ââââââ ââââ +# â°Â¹Â²Â³â´âµâ¶â·â¸â¹ +# +# # complete lower +# âââââ â¡â¢â£â¤â¥â¦â§â¨â©âªâ«â¬ââ®â¯â°â±â²â³â´âµ +# ððð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð«ð¬ðð®ð¯ð°ð±ð²ð³ð´ðµð¶ð· +# ððððððððððððððð ð¡ð¢ð£ð¤ð¥ð¦ð§ð¨ð©ðªð« +# +# # complete upper +# ð´ðµð¶ð·ð¸ð¹ðºð»ð¼ð½ð¾ð¿ðððððð ðððððððð +# +# # incomplete +# â â¡â¢â£â¤â¥â¦â§â¨ +# â´âµâ¶â·â¸â¹âºâ»â¼ +# ðâââââââââ +# ð¸ð¹ð»ð¼ð½ð¾ððððððððððððð +# ððððððððððððððððð ð¡ð¢ð£ð¤ð¥ð¦ð§ +# ð¶ð·ð¸ð¹ð»ð½ð¾ð¿ððððð ðððððððððð +# ðððð¢ð¥ð¦ð©ðªð«ð¬ð®ð¯ð°ð±ð²ð³ð´ðµ +# ð¤ð¥ð¨ð©ð¬ðð®ð°ð±ð³ð´ð¶ð¸ð¹ð»ð¾ðð ððððððððððððð¢ð£ð¦ð§ð¨ðªð«ðð®ð°ð²ðµð¸ð¼ð¿ððð ðððððð +# ððð ð¡ð¢ð¤ð¥ð§ð¨ðªð¬ð¯ð²ð¶ð¹ðºð¾ð¿ðððððððððððð¡ð¢ð¤ð¦ð©ðªð¬ +# ð°ð´ð¸ð¹ð¼ð¾ðððððððððððððð ð£ð¤ð¦ðªð¬ð®ð²ð³ð¶ð¸ðºð½ð¾ððð +# " > /dev/null + +declare -A ca # associative character array + +# code to generate the assignment of the ca array +# orig="" # "0123456789" "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +# for trans in "" +# do +# for i in $(seq 0 $((${#orig} -1))) +# do +# c="${orig:$i:1}" +# ca[$c]+="${trans:$i:1}" +# done +# done +# for i in $(seq 0 $((${#orig} -1))) +# do +# c="${orig:$i:1}" +# echo -n "ca[$c]+=\"${ca[$c]}\"; " +# done +# exit 253 + +# numbers +ca[0]+="ððð¢ð¬ð¶ï¼ð"; ca[1]+="ððð£ðð·ï¼â"; ca[2]+="ððð¤ð®ð¸ï¼â"; ca[3]+="ððð¥ð¯ð¹ï¼â"; ca[4]+="ððð¦ð°ðºï¼â"; ca[5]+="ððð§ð±ð»ï¼â"; ca[6]+="ððð¨ð²ð¼ï¼â"; ca[7]+="ððð©ð³ð½ï¼â"; ca[8]+="ðð ðªð´ð¾ï¼â"; ca[9]+="ðð¡ð«ðµð¿ï¼â" +# ca[0]+="ââ°"; ca[1]+="â¹"; ca[2]+="â²"; ca[3]+="â³"; ca[4]+="ââ´"; ca[5]+="â âµ"; ca[6]+="ââ¶"; ca[7]+="ââ·"; ca[8]+="ââ¸"; ca[9]+="ââ¹" +# ca[1]+="â â´"; ca[2]+="â¡âµ"; ca[3]+="â¢â¶"; ca[4]+="â£â·"; ca[5]+="â¤â¸"; ca[6]+="â¥â¹"; ca[7]+="â¦âº"; ca[8]+="â§â»"; ca[9]+="â¨â¼" + +# characters +ca[a]+="ðððºð®ð¢ðð"; ca[b]+="ððð»ð¯ð£ðð"; ca[c]+="ððð¼ð°ð¤ðð"; ca[d]+="ðð ð½ð±ð¥ðð"; ca[e]+="ððð¾ð²ð¦ðð"; ca[f]+="ððð¿ð³ð§ðð"; ca[g]+="ð ððð´ð¨ðð"; ca[h]+="ð¡ðððµð©ðð"; ca[i]+="ð¢ððð¶ðªðð"; ca[j]+="ð£ððð·ð«ðð"; ca[k]+="ð¤ððð¸ð¬ð ð"; ca[l]+="ð¥ðð ð¹ðð¡ð"; ca[m]+="ð¦ðððºð®ð¢ð"; ca[n]+="ð§ððð»ð¯ð£ð"; ca[o]+="ð¨ððð¼ð°ð¤ð"; ca[p]+="ð©ððð½ð±ð¥ð"; ca[q]+="ðªððð¾ð²ð¦ð"; ca[r]+="ð«ððð¿ð³ð§ð"; ca[s]+="ð¬ðððð´ð¨ð"; ca[t]+="ðððððµð©ð"; ca[u]+="ð®ðððð¶ðªð"; ca[v]+="ð¯ðððð·ð«ð"; ca[w]+="ð°ðððð¸ð¬ð "; ca[x]+="ð±ððð ð¹ðð¡"; ca[y]+="ð²ððððºð®ð¢"; ca[z]+="ð³ðððð»ð¯ð£"; ca[A]+="ðð¨ð ððð¼ð°"; ca[B]+="ðð©ð¡ððð½ð±"; ca[C]+="ððªð¢ððð¾ð²"; ca[D]+="ðð«ð£ððð¿ð³"; ca[E]+="ðð¬ð¤ðððð´"; ca[F]+="ð ðð¥ððððµ"; ca[G]+="ðð®ð¦ðððð¶"; ca[H]+="ðð¯ð§ðððð·"; ca[I]+="ðð°ð¨ðððð¸"; ca[J]+="ðð±ð©ððð ð¹"; ca[K]+="ðð²ðªððððº"; ca[L]+="ðð³ð«ðððð»"; ca[M]+="ðð´ð¬ð ððð¼"; ca[N]+="ððµðð¡ððð½"; ca[O]+="ðð¶ð®ð¢ððð¾"; ca[P]+="ðð·ð¯ð£ððð¿"; ca[Q]+="ðð¸ð°ð¤ððð"; ca[R]+="ðð¹ð±ð¥ððð"; ca[S]+="ððºð²ð¦ððð"; ca[T]+="ðð»ð³ð§ððð"; ca[U]+="ðð¼ð´ð¨ððð"; ca[V]+="ðð½ðµð©ððð "; ca[W]+="ðð¾ð¶ðªððð"; ca[X]+="ðð¿ð·ð«ððð"; ca[Y]+="ððð¸ð¬ð ðð"; ca[Z]+="ððð¹ðð¡ðð" +ca[a]+="ï½"; ca[b]+="ï½"; ca[c]+="ï½"; ca[d]+="ï½"; ca[e]+="ï½ "; ca[f]+="ï½"; ca[g]+="ï½"; ca[h]+="ï½"; ca[i]+="ï½"; ca[j]+="ï½"; ca[k]+="ï½"; ca[l]+="ï½"; ca[m]+="ï½"; ca[n]+="ï½"; ca[o]+="ï½"; ca[p]+="ï½"; ca[q]+="ï½"; ca[r]+="ï½"; ca[s]+="ï½"; ca[t]+="ï½"; ca[u]+="ï½"; ca[v]+="ï½"; ca[w]+="ï½"; ca[x]+="ï½"; ca[y]+="ï½"; ca[z]+="ï½"; ca[A]+="A"; ca[B]+="ï¼¢"; ca[C]+="ï¼£"; ca[D]+="D"; ca[E]+="ï¼¥"; ca[F]+="F"; ca[G]+="ï¼§"; ca[H]+="H"; ca[I]+="I"; ca[J]+="J"; ca[K]+="K"; ca[L]+="L"; ca[M]+="ï¼"; ca[N]+="ï¼®"; ca[O]+="O"; ca[P]+="ï¼°"; ca[Q]+="ï¼±"; ca[R]+="ï¼²"; ca[S]+="ï¼³"; ca[T]+="ï¼´"; ca[U]+="ï¼µ"; ca[V]+="ï¼¶"; ca[W]+="ï¼·"; ca[X]+="X"; ca[Y]+="ï¼¹"; ca[Z]+="Z" +# ca[a]+="ðªð"; ca[b]+="ð«ð"; ca[c]+="ð¬ð"; ca[d]+="ðð"; ca[e]+="ð®ð"; ca[f]+="ð¯ð"; ca[g]+="ð°ð"; ca[h]+="ð±ð"; ca[i]+="ð²ð"; ca[j]+="ð³ð"; ca[k]+="ð´ð"; ca[l]+="ðµð"; ca[m]+="ð¶ð"; ca[n]+="ð·ð"; ca[o]+="ð¸ð"; ca[p]+="ð¹ð"; ca[q]+="ðºð"; ca[r]+="ð»ð"; ca[s]+="ð¼ð"; ca[t]+="ð½ð"; ca[u]+="ð¾ð"; ca[v]+="ð¿ð"; ca[w]+="ðð"; ca[x]+="ðð"; ca[y]+="ðð"; ca[z]+="ðð"; ca[A]+="ðð¬"; ca[B]+="ðð"; ca[C]+="ðð®"; ca[D]+="ðð¯"; ca[E]+="ðð°"; ca[F]+="ðð±"; ca[G]+="ðð²"; ca[H]+="ðð³"; ca[I]+="ðð´"; ca[J]+="ððµ"; ca[K]+="ðð¶"; ca[L]+="ðð·"; ca[M]+="ðð¸"; ca[N]+="ðð¹"; ca[O]+="ððº"; ca[P]+="ðð»"; ca[Q]+="ð ð¼"; ca[R]+="ð¡ð½"; ca[S]+="ð¢ð¾"; ca[T]+="ð£ð¿"; ca[U]+="ð¤ð"; ca[V]+="ð¥ð"; ca[W]+="ð¦ð"; ca[X]+="ð§ð"; ca[Y]+="ð¨ð"; ca[Z]+="ð©ð " +# ca[a]+="â"; ca[b]+="â"; ca[c]+="â"; ca[d]+="â"; ca[e]+="â"; ca[f]+="â"; ca[g]+="â"; ca[h]+="â"; ca[i]+="â"; ca[j]+="â"; ca[k]+="â"; ca[l]+="â"; ca[m]+="â"; ca[n]+="â"; ca[o]+="â"; ca[p]+="â"; ca[q]+="â "; ca[r]+="â¡"; ca[s]+="â¢"; ca[t]+="â£"; ca[u]+="â¤"; ca[v]+="â¥"; ca[w]+="â¦"; ca[x]+="â§"; ca[y]+="â¨"; ca[z]+="â©"; ca[A]+="â¶"; ca[B]+="â·"; ca[C]+="â¸"; ca[D]+="â¹"; ca[E]+="âº"; ca[F]+="â»"; ca[G]+="â¼"; ca[H]+="â½"; ca[I]+="â¾"; ca[J]+="â¿"; ca[K]+="â"; ca[L]+="â"; ca[M]+="â"; ca[N]+="â"; ca[O]+="â"; ca[P]+="â "; ca[Q]+="â"; ca[R]+="â"; ca[S]+="â"; ca[T]+="â"; ca[U]+="â"; ca[V]+="â"; ca[W]+="â"; ca[X]+="â"; ca[Y]+="â"; ca[Z]+="â" + +# german umlaute and à +ca[ä]+="ÈÇãÄæ"; ca[ö]+="ÅÅ"; ca[ü]+="űūÇÇ" +ca[Ã]+="ÃÃÇÈ"; ca[Ã]+="ÅÅ"; ca[Ã]+="ŰŪÇÇ" +ca[Ã]+="áº" + +# additional characters +ca[a]+="á¸ðð¼ð¶ðð"; ca[b]+="á¸á¸ á¸"; ca[c]+="á¸ððð¸"; ca[d]+="á¸á¸á¸á¸á¸â " +ca[e]+="ÄÄÄÇÉÉá¸á¸áº¹áº»áº½á¸á¸á¸á¸á¸â®â¯â "; ca[f]+="á¸Å¿ð"; ca[g]+="ḡðð"; ca[h]+="ḣḥḧḩḫ" +ca[i]+="ïîÃìá¸á»á¸á¸¯â ð¤"; ca[j]+="ðâ ð¥ð¿"; ca[k]+="ḱḳḵðð"; ca[l]+="ĺÉÊ á¸»á¸½ð" +ca[m]+="ḿá¹á¹"; ca[n]+="á¹ á¹á¹á¹"; ca[o]+="á¹á¹á¹Ã¸"; ca[p]+="á¹á¹ð¡ð" +ca[q]+="ð¢ðð"; ca[r]+="á¹á¹á¹á¹"; ca[s]+="ṡṣṥṧṩ"; ca[t]+="ṫá¹á¹¯á¹±" +ca[u]+="ṳṵṷṹṻ"; ca[v]+="ṽṿð£ð§"; ca[w]+="áºáºáº áºáº"; ca[x]+="áºáºð©ð¥" +ca[y]+="áºð¦ðª"; ca[z]+="áºáºáº" +ca[A]+="á¸ðð´ð¸"; ca[B]+="á¸á¸á¸â¬"; ca[C]+="á¸ðð¶"; ca[D]+="á¸á¸á¸á¸á¸â ð" +ca[E]+="â°Æá¸á¸á¸á¸á¸"; ca[F]+="â±Æá¸ê°"; ca[G]+="Ḡðºð¾"; ca[H]+="ḢḤḦḨḪ" +ca[I]+="İḬḮð¼"; ca[J]+="ðð½"; ca[K]+="ḰḲḴ"; ca[L]+="ḶḸḺḼ" +ca[M]+="Ḿá¹á¹â³"; ca[N]+="á¹á¹á¹á¹"; ca[O]+="á¹á¹á¹"; ca[P]+="á¹á¹ð" +ca[Q]+="ð"; ca[R]+="á¹á¹á¹á¹â"; ca[S]+="ṠṢṤṦṨ"; ca[T]+="ṪṬðð" +ca[U]+="á¹´á¹¶ð°"; ca[V]+="ṼṾð±ðð"; ca[W]+="áºáºáºáºáº"; ca[X]+="áºáºð³" +ca[Y]+="áºð´ðð"; ca[Z]+="áºáºáºâ¤" + + +sel1r() { # select one random character from the argument string + arg="$*" + pos="$(($RANDOM%${#arg}))" + echo "${arg:$pos:1}" +} + +transform() { + arg="$*" + i='-1' + while [ $((++i)) -lt ${#arg} ] + do + c="${arg:$i:1}" # one character from the input string + rc="${ca[$c]}" # set of replace characters + if [ "$rc" = "" ] + then + # replace characters that cannot be used in the array $ca + case "$c" in + "@") rc="ï¼ ";; + # use tr for these: "!§$%?=().:,;-_ + # ï¼ï¼ï¼ï¼ï¼ ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼¿ï¼»ï¼¼ï¼½ï¼¾ï½ï½ï½ï½ + *) rc="$c";; # no replacement defined + esac + fi + echo -n "$(sel1r "$rc")" + done + echo "" +} + + +# if files are specified use them, if nothing is specified use stdin +infile="" +if [ "$1" ] +then + while [ -f "$1" ] + do + infile="$infile $1" + shift + done +else + infile="/dev/stdin" +fi + +# transform files or commandline arguments line by line +if [ -n "$infile" ] +then + cat $infile +else + echo "$*" +fi | while read line +do + transform "$line" +done +