Raven - Morse Code

#!/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