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 }