#!/usr/bin/raven
'hello world' as $msg
# map letters to codes
group
'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' '-----' '.' '.-.-.-' ',' '--..--' ' ' ' ' 'EOM' '.-.-.'
hash as $letters
# map codes to letters
$letters values $letters keys combine as $codes
' ' as space
# convert text to morse
define morse_encode use $msg
group $msg lower each chr
dup space !=
if $letters swap get
list space join
# convert morse to text
define morse_decode use $msg
group $msg ' ' split each
space split each
$codes swap get
space
join rtrim
$msg morse_encode as $enc
$enc morse_decode as $dec
"%($enc)s\n" format print
"%($dec)s\n" format print
Result:
.... . .-.. .-.. --- .-- --- .-. .-.. -.. hello world
eof