/****************************************************************************** * This program converts text to Morse code. * * Copyright © 2021 Richard Lesh. All rights reserved. *****************************************************************************/ #include "Utils.hpp" #include #include #include #include #include std::locale utf8loc(std::locale(), new std::codecvt_utf8); using namespace std; static vector morseCode = { L" ", // L"−·−·−−", // ! L"·−··−·", // " L"", // # L"···−··−", // $ L"", // % L"·−···", // & L"·−−−−·", // ' L"−·−−·", // ( L"−·−−·−", // ) L"", // * L"·−·−·", // + L"−−··−−", // , L"−····−", // - L"·−·−·−", // . L"−··−·", // / L"−−−−−", // 0 L"·−−−−", // 1 L"··−−−", // 2 L"···−−", // 3 L"····−", // 4 L"·····", // 5 L"−····", // 6 L"−−···", // 7 L"−−−··", // 8 L"−−−−·", // 9 L"−−−···", // : L"−·−·−·", // ; L"", // < L"−···−", // = L"", // > L"··−−··", // ? L"·−−·−·", // @ L"· −", // A L"−···", // B L"−·−·", // C L"−··", // D L"·", // E L"··−·", // F L"−−·", // G L"····", // H L"··", // I L"·−−−", // J L"−·−", // K L"·−··", // L L"−−", // M L"−·", // N L"−−−", // O L"·−−·", // P L"−−·−", // Q L"·−·", // R L"···", // S L"−", // T L"··−", // U L"···−", // V L"·−−", // W L"−··−", // X L"−·−−", // Y L"−−··", // Z L"", // [ L"", // \ L"", // ] L"", // ^ L"··−−·−" // _ }; int main(int argc, char **argv) { setlocale(LC_ALL, "en_US.UTF-8"); wcout.imbue(utf8loc); wcin.imbue(utf8loc); if (argc == 1) { wcout << L"Syntax: " << Utils::UTF8_to_wstring(argv[0]) << L" {message}" << endl; exit(1); } for (auto m = 1; m <= (argc - 1); ++m) { if (m != 1) { wcout << L" "; } bool first = true; for (auto c : Utils::UTF8_to_wstring(argv[m])) { int cp = int(c); if (cp < 32 || cp >= 128) { continue; } if (cp >= 96) { cp -= 32; } if (!first) { wcout << L" "; } wcout << morseCode[cp - 32]; first = false; } } wcout << endl; return 0; }