File indexing completed on 2024-04-14 05:44:35

0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2007 Dominik Seichter <domseichter@web.de>
0003 
0004 #include "translitplugin.h"
0005 
0006 #include "batchrenamer.h"
0007 
0008 #include <QListWidget>
0009 #include <KLocalizedString>
0010 
0011 #include <QLabel>
0012 #include <QHBoxLayout>
0013 
0014 /*
0015 const QString TranslitPlugin::s_strUtf8[] = {"а","б","в","г","д","е","ё","ж","з","и",
0016     "й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь",
0017     "э","ю","я",
0018     "А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П",
0019     "Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я",
0020     "á","ä","č","ď","é","ě","í","ľ","ĺ","ň","ó","ô","ö","ő","ř","ŕ","š","ť","ú","ů","ü","ű","ý","ž",
0021     "Á","Ä","Č","Ď","É","Ě","Í","Ľ","Ĺ","Ň","Ó","Ô","Ö","Ő","Ř","Ŕ","Š","Ť","Ú","Ů","Ü","Ű","Ý","Ž",QString()};
0022 */
0023 const QString TranslitPlugin::s_strUtf8[] = {
0024     "\xD0\xB0", "\xD0\xB1", "\xD0\xB2",
0025     "\xD0\xB3", "\xD0\xB4", "\xD0\xB5",
0026     "\xD1\x91", "\xD0\xB6", "\xD0\xB7",
0027     "\xD0\xB8", "\xD0\xB9", "\xD0\xBA",
0028     "\xD0\xBB", "\xD0\xBC", "\xD0\xBD",
0029     "\xD0\xBE", "\xD0\xBF", "\xD1\x80",
0030     "\xD1\x81", "\xD1\x82", "\xD1\x83",
0031     "\xD1\x84", "\xD1\x85", "\xD1\x86",
0032     "\xD1\x87", "\xD1\x88", "\xD1\x89",
0033     "\xD1\x8A", "\xD1\x8B", "\xD1\x8C",
0034     "\xD1\x8D", "\xD1\x8E", "\xD1\x8F",
0035     "\xD0\x90", "\xD0\x91", "\xD0\x92",
0036     "\xD0\x93", "\xD0\x94", "\xD0\x95",
0037     "\xD0\x81", "\xD0\x96", "\xD0\x97",
0038     "\xD0\x98", "\xD0\x99", "\xD0\x9A",
0039     "\xD0\x9B", "\xD0\x9C", "\xD0\x9D",
0040     "\xD0\x9E", "\xD0\x9F", "\xD0\xA0",
0041     "\xD0\xA1", "\xD0\xA2", "\xD0\xA3",
0042     "\xD0\xA4", "\xD0\xA5", "\xD0\xA6",
0043     "\xD0\xA7", "\xD0\xA8", "\xD0\xA9",
0044     "\xD0\xAA", "\xD0\xAB", "\xD0\xAC",
0045     "\xD0\xAD", "\xD0\xAE", "\xD0\xAF",
0046     "\xC3\xA1", "\xC3\xA4", "\xC4\x8D",
0047     "\xC4\x8F", "\xC3\xA9", "\xC4\x9B",
0048     "\xC3\xAD", "\xC4\xBE", "\xC4\xBA",
0049     "\xC5\x88", "\xC3\xB3", "\xC3\xB4",
0050     "\xC3\xB6", "\xC5\x91", "\xC5\x99",
0051     "\xC5\x95", "\xC5\xA1", "\xC5\xA5",
0052     "\xC3\xBA", "\xC5\xAF", "\xC3\xBC",
0053     "\xC5\xB1", "\xC3\xBD", "\xC5\xBE",
0054     "\xC3\x81", "\xC3\x84", "\xC4\x8C",
0055     "\xC4\x8E", "\xC3\x89", "\xC4\x9A",
0056     "\xC3\x8D", "\xC4\xBD", "\xC4\xB9",
0057     "\xC5\x87", "\xC3\x93", "\xC3\x94",
0058     "\xC3\x96", "\xC5\x90", "\xC5\x94",
0059     "\xC5\xA0", "\xC5\xA4", "\xC3\x9A",
0060     "\xC5\xAE", "\xC3\x9C", "\xC5\xB0",
0061     "\xC3\x9D", "\xC5\xBD",  QString()
0062 };
0063 
0064 const QString TranslitPlugin::s_strEngl[] = {"a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i",
0065                                              "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "sh", "", "y", "",
0066                                              "e", "yu", "ya",
0067                                              "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "J", "K", "L", "M", "N", "O", "P",
0068                                              "R", "S", "T", "U", "F", "H", "C", "Ch", "Sh", "Sh", "", "Y", "", "E", "Yu", "Ya",
0069                                              "a", "a", "c", "d", "e", "e", "i", "l", "l", "n", "o", "o", "o", "o", "r", "r", "s", "t", "u", "u", "u", "u", "y", "z",
0070                                              "A", "A", "C", "D", "E", "E", "I", "L", "L", "N", "O", "O", "O", "O", "R", "R", "S", "T", "U", "U", "U", "U", "Y", "Z", QString()
0071                                             };
0072 
0073 QHash<QString, QString> TranslitPlugin::s_mapFromUTF8;
0074 
0075 TranslitPlugin::TranslitPlugin(PluginLoader *loader)
0076     : FilePlugin(loader)
0077 {
0078     this->addSupportedToken("transliterated");
0079     this->addSupportedToken("transliterated;.*");
0080 
0081     m_help.append(Plugin::createHelpEntry("transliterated", i18n("Inserts the transliterated original filename")));
0082     m_help.append(Plugin::createHelpEntry("%transliterated", i18n("Inserts the transliterated original filename converted to lower case")));
0083     m_help.append(Plugin::createHelpEntry("&transliterated", i18n("Inserts the transliterated original filename converted to upper case")));
0084     m_help.append(Plugin::createHelpEntry("*transliterated", i18n("Inserts the transliterated original filename capitalized")));
0085     m_help.append(Plugin::createHelpEntry("transliterated;Some string", i18n("Transliterates the string following the semicolon")));
0086 
0087     m_name = i18n("Transliteration");
0088     m_icon = "applications-education-language";
0089     m_comment = i18n("<qt>This plugin can transcribe a filename "
0090                      "into English (i.e. perform transliteration).</qt>");
0091 
0092     if (TranslitPlugin::s_mapFromUTF8.isEmpty()) {
0093         int i = 0;
0094         while (! TranslitPlugin::s_strUtf8[i].isEmpty()) {
0095             TranslitPlugin::s_mapFromUTF8[ TranslitPlugin::s_strUtf8[i] ] = TranslitPlugin::s_strEngl[i];
0096 
0097             ++i;
0098         }
0099 
0100     }
0101 }
0102 
0103 TranslitPlugin::~TranslitPlugin()
0104 {
0105 
0106 }
0107 
0108 QString TranslitPlugin::processFile(BatchRenamer *b, int index, const QString &filenameOrToken, EPluginType eCurrentType)
0109 {
0110     QString src;
0111     QString token;
0112 
0113     // This plugin supports to types
0114     if (eCurrentType == ePluginType_Token) {
0115         if (filenameOrToken.contains(";")) {
0116             src   = filenameOrToken.section(';', 1, 1);
0117             token = filenameOrToken.section(';', 0, 0).toLower();
0118         } else {
0119             token = filenameOrToken.toLower();
0120         }
0121 
0122         if (token == "transliterated") {
0123             if (src.isEmpty()) {
0124                 // TODO: If extension .....
0125                 if (true) {
0126                     src = b->files()->at(index).srcFilename();
0127                 } else {
0128                     src = b->files()->at(index).srcExtension();
0129                 }
0130             }
0131 
0132             return this->transliterate(src);
0133         }
0134     }
0135     /*
0136     else if( eCurrentType == ePluginType_Filename )
0137     {
0138         // TODO: If extension .....
0139         if( true )
0140             src = b->files()->at( index ).srcFilename();
0141         else
0142             src = b->files()->at( index ).srcExtension();
0143 
0144         return this->transliterate( src );
0145     }
0146     */
0147     return QString();
0148 }
0149 
0150 /*
0151 void TranslitPlugin::createUI( QWidget* parent ) const
0152 {
0153     QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding );
0154 
0155     QVBoxLayout* l    = new QVBoxLayout( parent );
0156     QHBoxLayout* hbox = new QHBoxLayout( parent );
0157 
0158     QLabel* pix = new QLabel( parent );
0159     pix->setPixmap( KIconLoader::global()->loadIcon( m_icon, K3Icon::Desktop ) );
0160 
0161     hbox->addWidget( pix );
0162     hbox->addWidget( new QLabel( "<qt><b>"+name()+"</b></qt>", parent  ) );
0163     hbox->addItem( spacer );
0164 
0165     l->addLayout( hbox );
0166     l->addWidget( new QLabel( i18n("This plugin will transliterate the following characters."), parent  ) );
0167 
0168     QListWidget* list = new QListWidget( parent );
0169 
0170     int i=0;
0171     while( TranslitPlugin::s_strUtf8[i]!=QString() )
0172     {
0173         QString text = QString::fromUtf8( TranslitPlugin::s_strUtf8[i].toUtf8().data() );
0174         text += " -> ";
0175         text += TranslitPlugin::s_strEngl[i];;
0176 
0177         list->insertItem( 0, text );
0178 
0179         ++i;
0180     }
0181 
0182     l->addWidget( list );
0183     l->setStretchFactor( list, 2 );
0184 }
0185 */
0186 
0187 QString TranslitPlugin::transliterate(const QString &unicoded)
0188 {
0189     int i;
0190     QString transed = "";
0191 
0192     transed.reserve(unicoded.length());
0193 
0194     for (i = 0; i < (int)unicoded.length(); i++) {
0195         QString charIn = unicoded.mid(i, 1);
0196         if (TranslitPlugin::s_mapFromUTF8.contains(charIn.toUtf8())) {
0197             QString charTrans = TranslitPlugin::s_mapFromUTF8[charIn.toUtf8()];
0198             transed.append(charTrans);
0199         } else {
0200             transed.append(charIn);
0201         }
0202 
0203     }
0204 
0205     return transed;
0206 }
0207