morse_codec/
charsets.rs

1//! Contains morse code to character set mappings.
2
3use crate::{
4    MorseSignal::{Long as L, Short as S},
5    MORSE_DEFAULT_CHAR,
6    MorseCodeArray,
7    Character,
8};
9
10/// Maximum number of characters in default mapping set of morse code to letters.
11pub const DEFAULT_CHARACTER_SET_LENGTH: usize = 53;
12
13/// Allows creating a custom character set.
14///
15/// Client code can use this type to construct a different character mapping to morse code
16/// and construct the decoder or encoder with this custom character set.
17///
18/// Empty character b' ' should be added at the beginning.
19/// It does not include special characters longer than 6 signals to keep arrays small. So no $ sign for ya.
20/// In order to change it and use a different mapping, client code can use [CharacterSet] type
21/// to construct an array of u8 with [CHARACTER_SET_LENGTH].
22/// ```ignore
23/// let my_set: CharacterSet = b" ADD SOME CHARACTERS TO THIS BYTE STRING"];
24/// // Or with 'utf8' feature
25/// let my_set: CharacterSet = &[' ', ...FILL IN THE CHARS...];
26/// // Then
27/// let decoder = Decoder::<128>::new().with_character_set(my_set).build();
28/// ```
29pub type CharacterSet = &'static [Character];
30
31/// Default international morse code characters. It includes English language letters, numbers and
32/// punctuation marks. In utf8 mode a custom version of this array can be used while building an Encoder or Decoder
33/// using 'with_character_set' functions. Corresponding [MORSE_CODE_SET]
34/// can also be changed to support different languages.
35#[cfg(not(feature = "utf8"))]
36pub const DEFAULT_CHARACTER_SET: CharacterSet = b" ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,?:-\"(=X.;/'_)+@";
37
38#[cfg(feature = "utf8")]
39pub const DEFAULT_CHARACTER_SET: CharacterSet = &[
40        ' ',
41        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
42        'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
43        '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
44        ',', '?', ':', '-', '"', '(', '=', 'X', '.', ';', '/', '\'', '_', ')', '+', '@',
45    ];
46
47/// Allows creating a custom morse code set.
48///
49/// Client code can use this type to construct a different morse code mapping to characters
50/// and construct the decoder or encoder with this custom morse code set.
51pub type MorseCodeSet = &'static [MorseCodeArray];
52
53/// Default internal representation of morse characters.
54///
55/// Letters can be converted to these morse code arrays and vice-versa. To support an utf8
56/// character set, this array of morse codes can be changed along with the corresponding [CharacterSet]
57pub const DEFAULT_MORSE_CODE_SET: MorseCodeSet =
58    &[
59        //
60        // Default char is empty character
61        MORSE_DEFAULT_CHAR, // Empty character ' '
62        //
63        // Letters
64        [Some(S), Some(L), None, None, None, None],       // A
65        [Some(L), Some(S), Some(S), Some(S), None, None], // B
66        [Some(L), Some(S), Some(L), Some(S), None, None], // C
67        [Some(L), Some(S), Some(S), None, None, None],    // D
68        [Some(S), None, None, None, None, None],          // E
69        [Some(S), Some(S), Some(L), Some(S), None, None], // F
70        [Some(L), Some(L), Some(S), None, None, None],    // G
71        [Some(S), Some(S), Some(S), Some(S), None, None], // H
72        [Some(S), Some(S), None, None, None, None],       // I
73        [Some(S), Some(L), Some(L), Some(L), None, None], // J
74        [Some(L), Some(S), Some(L), None, None, None],    // K
75        [Some(S), Some(L), Some(S), Some(S), None, None], // L
76        [Some(L), Some(L), None, None, None, None],       // M
77        [Some(L), Some(S), None, None, None, None],       // N
78        [Some(L), Some(L), Some(L), None, None, None],    // O
79        [Some(S), Some(L), Some(L), Some(S), None, None], // P
80        [Some(L), Some(L), Some(S), Some(L), None, None], // Q
81        [Some(S), Some(L), Some(S), None, None, None],    // R
82        [Some(S), Some(S), Some(S), None, None, None],    // S
83        [Some(L), None, None, None, None, None],          // T
84        [Some(S), Some(S), Some(L), None, None, None],    // U
85        [Some(S), Some(S), Some(S), Some(L), None, None], // V
86        [Some(S), Some(L), Some(L), None, None, None],    // W
87        [Some(L), Some(S), Some(S), Some(L), None, None], // X
88        [Some(L), Some(S), Some(L), Some(L), None, None], // Y
89        [Some(L), Some(L), Some(S), Some(S), None, None], // Z
90        //
91        // Numbers
92        [Some(S), Some(L), Some(L), Some(L), Some(L), None], // 1
93        [Some(S), Some(S), Some(L), Some(L), Some(L), None], // 2
94        [Some(S), Some(S), Some(S), Some(L), Some(L), None], // 3
95        [Some(S), Some(S), Some(S), Some(S), Some(L), None], // 4
96        [Some(S), Some(S), Some(S), Some(S), Some(S), None], // 5
97        [Some(L), Some(S), Some(S), Some(S), Some(S), None], // 6
98        [Some(L), Some(L), Some(S), Some(S), Some(S), None], // 7
99        [Some(L), Some(L), Some(L), Some(S), Some(S), None], // 8
100        [Some(L), Some(L), Some(L), Some(L), Some(S), None], // 9
101        [Some(L), Some(L), Some(L), Some(L), Some(L), None], // 0
102        //
103        // Punctuation marks
104        [Some(L), Some(L), Some(S), Some(S), Some(L), Some(L)], // Comma                ,
105        [Some(S), Some(S), Some(L), Some(L), Some(S), Some(S)], // Question mark        ?
106        [Some(L), Some(L), Some(L), Some(S), Some(S), Some(S)], // Colon                :
107        [Some(L), Some(S), Some(S), Some(S), Some(S), Some(L)], // Dash                 -
108        [Some(S), Some(L), Some(S), Some(S), Some(L), Some(S)], // Double quote         "
109        [Some(L), Some(S), Some(L), Some(L), Some(S), None],    // Left bracket         (
110        [Some(L), Some(S), Some(S), Some(S), Some(L), None],    // Equals               =
111        [Some(L), Some(S), Some(S), Some(L), None, None],       // Multiplication       X
112        [Some(S), Some(L), Some(S), Some(L), Some(S), Some(L)], // Full stop (period)   .
113        [Some(L), Some(S), Some(L), Some(S), Some(L), Some(S)], // Semicolon            ;
114        [Some(L), Some(S), Some(S), Some(L), Some(S), None],    // Slash                /
115        [Some(S), Some(L), Some(L), Some(L), Some(L), Some(S)], // Apostrophe           '
116        [Some(S), Some(S), Some(L), Some(L), Some(S), Some(L)], // Underscore           _
117        [Some(L), Some(S), Some(L), Some(L), Some(S), Some(L)], // Right bracket        )
118        [Some(S), Some(L), Some(S), Some(L), Some(S), None],    // Addition             +
119        [Some(S), Some(L), Some(L), Some(S), Some(L), Some(S)], // At sign              @
120    ];
121