Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsogrproxytextcodec.cpp 3 : : ------------- 4 : : begin : June 2020 5 : : copyright : (C) 2020 Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #include "qgsogrproxytextcodec.h" 17 : : #include "qgslogger.h" 18 : : #include <cpl_string.h> 19 : : #include <mutex> 20 : : 21 : 0 : QgsOgrProxyTextCodec::QgsOgrProxyTextCodec( const QByteArray &name ) 22 : 0 : : mName( name ) 23 : 0 : { 24 : : 25 : 0 : } 26 : : 27 : 0 : QString QgsOgrProxyTextCodec::convertToUnicode( const char *chars, int, ConverterState * ) const 28 : : { 29 : 0 : if ( !chars ) 30 : 0 : return QString(); 31 : : 32 : 0 : char *res = CPLRecode( chars, mName.constData(), CPL_ENC_UTF8 ); 33 : 0 : if ( !res ) 34 : : { 35 : 0 : QgsDebugMsg( "convertToUnicode failed" ); 36 : 0 : return QString(); 37 : : } 38 : : 39 : 0 : const QString result = QString::fromUtf8( res ); 40 : 0 : CPLFree( res ); 41 : 0 : return result; 42 : 0 : } 43 : : 44 : 0 : QByteArray QgsOgrProxyTextCodec::convertFromUnicode( const QChar *unicode, int length, ConverterState * ) const 45 : : { 46 : 0 : if ( !unicode ) 47 : 0 : return QByteArray(); 48 : : 49 : 0 : const QString src = QString( unicode, length ); 50 : 0 : char *res = CPLRecode( src.toUtf8().constData(), CPL_ENC_UTF8, mName.constData() ); 51 : 0 : if ( !res ) 52 : : { 53 : 0 : QgsDebugMsg( "convertFromUnicode failed" ); 54 : 0 : return QByteArray(); 55 : : } 56 : : 57 : 0 : const QByteArray result = QByteArray( res ); 58 : 0 : CPLFree( res ); 59 : 0 : return result; 60 : 0 : } 61 : : 62 : : // MY 5 YEAR OLD DAUGHTER WROTE THIS LINE, REMOVE AT YOUR OWN RISK!!! 63 : : // i don't want this to be here 64 : : 65 : 0 : QByteArray QgsOgrProxyTextCodec::name() const 66 : : { 67 : 0 : return mName; 68 : : } 69 : : 70 : 0 : QList<QByteArray> QgsOgrProxyTextCodec::aliases() const 71 : : { 72 : 0 : return QList<QByteArray>(); 73 : : } 74 : : 75 : 0 : int QgsOgrProxyTextCodec::mibEnum() const 76 : : { 77 : : // doesn't seem required in this case 78 : 0 : return 0; 79 : : } 80 : : 81 : 0 : QStringList QgsOgrProxyTextCodec::supportedCodecs() 82 : : { 83 : 0 : static QStringList codecs; 84 : : static std::once_flag initialized; 85 : 0 : std::call_once( initialized, [&]( ) 86 : : { 87 : : // there's likely others that are supported by GDAL, but we're primarily concerned here 88 : : // with codecs used by the shapefile driver, and which are no longer supported on the 89 : : // windows Qt builds (due to removal of ICU support in windows Qt builds) 90 : : // see https://github.com/qgis/QGIS/issues/36871 91 : 0 : for ( int i = 437; i <= 950; ++i ) 92 : 0 : codecs << QStringLiteral( "CP%1" ).arg( i ); 93 : 0 : for ( int i = 1250; i <= 1258; ++i ) 94 : 0 : codecs << QStringLiteral( "CP%1" ).arg( i ); 95 : 0 : codecs << QStringLiteral( "CP1251" ); 96 : 0 : } ); 97 : 0 : return codecs; 98 : : }