File indexing completed on 2024-05-12 17:24:21
0001 // SPDX-FileCopyrightText: 2023 Felipe Kinoshita <kinofhek@gmail.com> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #include <QDebug> 0005 0006 #include <QString> 0007 #include <QChar> 0008 0009 #include "translator.h" 0010 0011 Translator::Translator(QObject *parent) 0012 : QObject(parent) 0013 { 0014 m_morseTable[QChar::fromLatin1('a')] = QString::fromLatin1(".-"); 0015 m_morseTable[QChar::fromLatin1('b')] = QString::fromLatin1("-..."); 0016 m_morseTable[QChar::fromLatin1('c')] = QString::fromLatin1("-.-."); 0017 m_morseTable[QChar::fromLatin1('d')] = QString::fromLatin1("-.."); 0018 m_morseTable[QChar::fromLatin1('e')] = QString::fromLatin1("."); 0019 m_morseTable[QChar::fromLatin1('f')] = QString::fromLatin1("..-."); 0020 m_morseTable[QChar::fromLatin1('g')] = QString::fromLatin1("--."); 0021 m_morseTable[QChar::fromLatin1('h')] = QString::fromLatin1("...."); 0022 m_morseTable[QChar::fromLatin1('i')] = QString::fromLatin1(".."); 0023 m_morseTable[QChar::fromLatin1('j')] = QString::fromLatin1(".---"); 0024 m_morseTable[QChar::fromLatin1('k')] = QString::fromLatin1("-.-"); 0025 m_morseTable[QChar::fromLatin1('l')] = QString::fromLatin1(".-.."); 0026 m_morseTable[QChar::fromLatin1('m')] = QString::fromLatin1("--"); 0027 m_morseTable[QChar::fromLatin1('n')] = QString::fromLatin1("-."); 0028 m_morseTable[QChar::fromLatin1('o')] = QString::fromLatin1("---"); 0029 m_morseTable[QChar::fromLatin1('p')] = QString::fromLatin1(".--."); 0030 m_morseTable[QChar::fromLatin1('q')] = QString::fromLatin1("--.-"); 0031 m_morseTable[QChar::fromLatin1('r')] = QString::fromLatin1(".-."); 0032 m_morseTable[QChar::fromLatin1('s')] = QString::fromLatin1("..."); 0033 m_morseTable[QChar::fromLatin1('t')] = QString::fromLatin1("-"); 0034 m_morseTable[QChar::fromLatin1('u')] = QString::fromLatin1("..-"); 0035 m_morseTable[QChar::fromLatin1('v')] = QString::fromLatin1("...-"); 0036 m_morseTable[QChar::fromLatin1('w')] = QString::fromLatin1(".--"); 0037 m_morseTable[QChar::fromLatin1('x')] = QString::fromLatin1("-..-"); 0038 m_morseTable[QChar::fromLatin1('y')] = QString::fromLatin1("-.- -"); 0039 m_morseTable[QChar::fromLatin1('z')] = QString::fromLatin1("--.."); 0040 0041 m_morseTable[QChar::fromLatin1('1')] = QString::fromLatin1(".----"); 0042 m_morseTable[QChar::fromLatin1('2')] = QString::fromLatin1("..---"); 0043 m_morseTable[QChar::fromLatin1('3')] = QString::fromLatin1("...--"); 0044 m_morseTable[QChar::fromLatin1('4')] = QString::fromLatin1("....-"); 0045 m_morseTable[QChar::fromLatin1('5')] = QString::fromLatin1("....."); 0046 m_morseTable[QChar::fromLatin1('6')] = QString::fromLatin1("-...."); 0047 m_morseTable[QChar::fromLatin1('7')] = QString::fromLatin1("--..."); 0048 m_morseTable[QChar::fromLatin1('8')] = QString::fromLatin1("---.."); 0049 m_morseTable[QChar::fromLatin1('9')] = QString::fromLatin1("----."); 0050 m_morseTable[QChar::fromLatin1('0')] = QString::fromLatin1("-----"); 0051 0052 m_morseTable[QChar::fromLatin1('&')] = QString::fromLatin1(".-..."); 0053 m_morseTable[QChar::fromLatin1('\'')] = QString::fromLatin1(".----."); 0054 m_morseTable[QChar::fromLatin1('@')] = QString::fromLatin1(".--.-."); 0055 m_morseTable[QChar::fromLatin1(')')] = QString::fromLatin1("-.--.-"); 0056 m_morseTable[QChar::fromLatin1('(')] = QString::fromLatin1("-.--."); 0057 m_morseTable[QChar::fromLatin1(':')] = QString::fromLatin1("---..."); 0058 m_morseTable[QChar::fromLatin1(',')] = QString::fromLatin1("--..--"); 0059 m_morseTable[QChar::fromLatin1('=')] = QString::fromLatin1("-...-"); 0060 m_morseTable[QChar::fromLatin1('!')] = QString::fromLatin1("-.-.--"); 0061 m_morseTable[QChar::fromLatin1('.')] = QString::fromLatin1(".-.-.-"); 0062 m_morseTable[QChar::fromLatin1('-')] = QString::fromLatin1("-....-"); 0063 m_morseTable[QChar::fromLatin1('x')] = QString::fromLatin1("-..-"); 0064 m_morseTable[QChar::fromLatin1('+')] = QString::fromLatin1(".-.-."); 0065 m_morseTable[QChar::fromLatin1('"')] = QString::fromLatin1(".-..-."); 0066 m_morseTable[QChar::fromLatin1('?')] = QString::fromLatin1("..--.."); 0067 m_morseTable[QChar::fromLatin1('/')] = QString::fromLatin1("-..-."); 0068 } 0069 0070 void Translator::translate(const QString &message) 0071 { 0072 const QStringList words = message.toLower().split(QStringLiteral(" ")); 0073 QString morse; 0074 0075 for (const QString &word : words) { 0076 for (const QChar &character : word) { 0077 morse.append(m_morseTable.value(character)); 0078 0079 if (word.indexOf(character) == word.length()) { 0080 morse.append(QString()); 0081 } else { 0082 morse.append(QStringLiteral(" ")); 0083 } 0084 } 0085 0086 if (words.indexOf(word) == words.length() - 1) { 0087 morse.append(QString()); 0088 } else { 0089 morse.append(QStringLiteral(" / ")); 0090 } 0091 } 0092 0093 Q_EMIT translation(morse); 0094 }