USING: accessors ascii assocs biassocs combinators hashtables kernel lists literals math namespaces make multiline openal parser sequences splitting strings synth synth.buffers ;
IN: morse
+ERROR: no-morse-code ch ;
+
<PRIVATE
CONSTANT: dot-char CHAR: .
CONSTANT: dash-char CHAR: -
CONSTANT: char-gap-char CHAR: \s
CONSTANT: word-gap-char CHAR: /
-CONSTANT: unknown-char CHAR: ?
+CONSTANT: unknown-char "?"
PRIVATE>
]
: ch>morse ( ch -- morse )
- ch>lower morse-code-table at [ unknown-char ] unless* ;
+ ch>lower morse-code-table at unknown-char or ;
: morse>ch ( str -- ch )
- morse-code-table value-at [ char-gap-char ] unless* ;
+ morse-code-table value-at char-gap-char or ;
<PRIVATE
source get source-play
] with-scope ; inline
-: play-char ( ch -- )
+: play-char ( string -- )
[ intra-char-gap ] [
{
{ dot-char [ dot ] }
{ dash-char [ dash ] }
{ word-gap-char [ intra-char-gap ] }
+ [ drop intra-char-gap ]
} case
] interleave ;