File indexing completed on 2024-12-01 13:50:28

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