#!/usr/bin/env bash

#sed -e 's/$/A.-B-...C-.-.D-..E.F..-.G--.H....I..J.---K-.-L.-..M--N-.O---P.--.Q--.-R.-.S...T-U..-V...-W.--X-..-Y-.--Z--..1.----2..---3...--4....-5.....6-....7--...8---..9----.0----- \/\//'
#sed -e 's/\(.\).*\1\([^A-Z0-9]*\).*/\2/'
#sed -e 's/$/A.-B-...C-.-.D-..E.F..-.G--.H....I..J.---K-.-L.-..M--N-.O---P.--.Q--.-R.-.S...T-U..-V...-W.--X-..-Y-.--Z--..1.----2..---3...--4....-5.....6-....7--...8---..9----.0----- \/\//'
#s/A/.- /g

#    -e 's/-/-....-  /g' \
sed -e 's/[[:space:]]\+/\n/g' \
    -e 's/\./.-.-.-  /g' \
    -e 's/,/--..--  /g' \
    -e 's/\?/..--..  /g' \
    -e 's/!/-.-.--  /g' \
    -e 's/\//-..-.  /g' \
    -e 's/(/-.--.-  /g' \
    -e 's/)/-.--.-  /g' \
    -e 's/:/---...  /g' \
    -e 's/''''/.----.  /g' \
    -e 's/;/-.-.-.  /g' \
    -e 's/=/-...-  /g' \
    -e 's/"/.-..-.  /g' \
    -e 's/\$/...-..-  /g' \
    -e 's/@/.--.-.  /g' \
    -e 's/A/.-  /ig' \
    -e 's/B/-...  /ig' \
    -e 's/C/-.-.  /ig' \
    -e 's/D/-..  /ig' \
    -e 's/E/.  /ig' \
    -e 's/F/..-.  /ig' \
    -e 's/G/--.  /ig' \
    -e 's/H/....  /ig' \
    -e 's/I/..  /ig' \
    -e 's/J/.---  /ig' \
    -e 's/K/-.-  /ig' \
    -e 's/L/.-..  /ig' \
    -e 's/M/--  /ig' \
    -e 's/N/-.  /ig' \
    -e 's/O/---  /ig' \
    -e 's/P/.--.  /ig' \
    -e 's/Q/--.-  /ig' \
    -e 's/R/.-.  /ig' \
    -e 's/S/...  /ig' \
    -e 's/T/-  /ig' \
    -e 's/U/..-  /ig' \
    -e 's/V/...-  /ig' \
    -e 's/W/.--  /ig' \
    -e 's/X/-..-  /ig' \
    -e 's/Y/-.--  /ig' \
    -e 's/Z/--..  /ig' \
    -e 's/0/-----  /g' \
    -e 's/1/.----  /g' \
    -e 's/2/..---  /g' \
    -e 's/3/...--  /g' \
    -e 's/4/....-  /g' \
    -e 's/5/.....  /g' \
    -e 's/6/-....  /g' \
    -e 's/7/--...  /g' \
    -e 's/8/---..  /g' \
    -e 's/9/----.  /g'

exit 66

# morse - This generates morse code from ascii
# you can contact me at:
# --. .-. ..- .-.. --- ... .--.-. --. -- .- .. .-..
# .-.-.- -.-. --- --

# You can assign different dot and dash characters.
#dot=.
#dash=_

# generate ascii (from space to ~)
for ((i=32; i<127; i++)); do
	ascii="$ascii$(echo -en $(printf "%s%o" "\\" "$i"))"
done

# This is a list of chars that can be translated to morse.
# Note that SPACE is treated special.
eng=" .,?'!/():;=-\"\$@ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

# The morse code for each character in eng
mor=( # punctuation
	SPACE
	.-.-.- --..-- ..--.. .----. -.-.-- -..-. -.--.- -.--.-
	---... -.-.-. -...- -....- .-..-.
	...-..- .--.-.
	# alphabet A-Z
	.- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -.
	--- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..
	# Numbers 0-9
	----- .---- ..--- ...-- ....-
	..... -.... --... ---.. ----. )

mor=( ${mor[@]//./${dot:-.}} )
mor=( ${mor[@]//-/${dash:--}} )

#while read -a line; do
while read line; do
	line=$(echo "${line}" | tr '[a-z]' '[A-Z]')
	for i in "${line[@]}"; do
		for (( j=0; j<${#i}; j++ )); do
			if  [ "${eng/${i:$j:1}/}" == "$eng" ]; then
				pos=${ascii%%${i:$j:1}*}
				eval char=\$\'\\$( printf "%o" "$(( ${#pos} ))" )\'
				[ "${eng/$char/}" == "$eng" ] && continue
			else
				char="${i:$j:1}"
			fi
			if [ "${char}" == " " ]; then
				printf "\n"
			else
				pos="${eng%%$char*}"
				printf "%s " "${mor[${#pos}]}"
			fi
		done
		printf " "
	done
	printf "\n"
done

# vim:set sr et ts=4 sw=4 ft=sh: // See Vim, :help 'modeline'
# morse - This generates morse code from ascii
# you can contact me at:
# --. .-. ..- .-.. --- ... .--.-. --. -- .- .. .-..
# .-.-.- -.-. --- --

# You can assign different dot and dash characters.
#dot=.
#dash=_

# generate ascii (from space to ~)
for ((i=32; i<127; i++)); do
	ascii="$ascii$(echo -en $(printf "%s%o" "\\" "$i"))"
done

# This is a list of chars that can be translated to morse.
# Note that SPACE is treated special.
eng=" .,?'!/():;=-\"\$@ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

# The morse code for each character in eng
mor=( # punctuation
	SPACE .-.-.- --..-- ..--.. .----. -.-.-- -..-. -.--.- -.--.-
	---... -.-.-. -...- -....- .-..-.
	...-..- .--.-.
	# alphabet A-Z
	.- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -.
	--- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..
	# Numbers 0-9
	----- .---- ..--- ...-- ....-
	..... -.... --... ---.. ----. )

mor=( ${mor[@]//./${dot:-.}} )
mor=( ${mor[@]//-/${dash:--}} )

#while read -a line; do
while read line; do
	line=$(echo "${line}" | tr '[a-z]' '[A-Z]')
	for i in "${line[@]}"; do
		for (( j=0; j<${#i}; j++ )); do
			if  [ "${eng/${i:$j:1}/}" == "$eng" ]; then
				pos=${ascii%%${i:$j:1}*}
				eval char=\$\'\\$( printf "%o" "$(( ${#pos} ))" )\'
				[ "${eng/$char/}" == "$eng" ] && continue
			else
				char="${i:$j:1}"
			fi
			if [ "${char}" == " " ]; then
				printf "\n"
			else
				pos="${eng%%$char*}"
				printf "%s " "${mor[${#pos}]}"
			fi
		done
		printf " "
	done
	printf "\n"
done

# vim:set sr et ts=4 sw=4 ft=sh: // See Vim, :help 'modeline'
