OSDN Git Service

Moved available_codepages() function into MUtilities library.
authorLoRd_MuldeR <mulder2@gmx.de>
Fri, 19 Dec 2014 22:50:58 +0000 (23:50 +0100)
committerLoRd_MuldeR <mulder2@gmx.de>
Fri, 19 Dec 2014 22:50:58 +0000 (23:50 +0100)
include/MUtils/Global.h
src/Global.cpp

index 07750a7..286efa4 100644 (file)
@@ -95,6 +95,8 @@ namespace MUtils
        MUTILS_API QString clean_file_name(const QString &name);
        MUTILS_API QString clean_file_path(const QString &path);
 
+       MUTILS_API QStringList available_codepages(const bool &noAliases = true);
+
        //Internal
        namespace Internal
        {
index 984b56d..96d60e2 100644 (file)
@@ -35,6 +35,7 @@
 #include <QDir>
 #include <QReadWriteLock>
 #include <QProcess>
+#include <QTextCodec>
 
 //CRT
 #include <cstdlib>
@@ -379,6 +380,38 @@ QString MUtils::clean_file_path(const QString &path)
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// AVAILABLE CODEPAGES
+///////////////////////////////////////////////////////////////////////////////
+
+QStringList MUtils::available_codepages(const bool &noAliases)
+{
+       QStringList codecList;
+       QList<QByteArray> availableCodecs = QTextCodec::availableCodecs();
+
+       while(!availableCodecs.isEmpty())
+       {
+               const QByteArray current = availableCodecs.takeFirst();
+               if(!current.toLower().startsWith("system"))
+               {
+                       codecList << QString::fromLatin1(current.constData(), current.size());
+                       if(noAliases)
+                       {
+                               if(QTextCodec *const currentCodec = QTextCodec::codecForName(current.constData()))
+                               {
+                                       const QList<QByteArray> aliases = currentCodec->aliases();
+                                       for(QList<QByteArray>::ConstIterator iter = aliases.constBegin(); iter != aliases.constEnd(); iter++)
+                                       {
+                                               availableCodecs.removeAll(*iter);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return codecList;
+}
+
+///////////////////////////////////////////////////////////////////////////////
 // SELF-TEST
 ///////////////////////////////////////////////////////////////////////////////