Use QStringConverter to replace QTextCodec.
This commit is contained in:
parent
f5f4b1e4c8
commit
787cfcfc16
|
@ -33,7 +33,10 @@
|
||||||
#include "../vformat/vdimensions.h"
|
#include "../vformat/vdimensions.h"
|
||||||
|
|
||||||
class QxtCsvModel;
|
class QxtCsvModel;
|
||||||
class QTextCodec;
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
class VTextCodec;
|
||||||
|
#endif
|
||||||
|
|
||||||
enum class IndividualMeasurementsColumns: qint8
|
enum class IndividualMeasurementsColumns: qint8
|
||||||
{
|
{
|
||||||
|
@ -75,7 +78,7 @@ public:
|
||||||
|
|
||||||
void SetWithHeader(bool withHeader);
|
void SetWithHeader(bool withHeader);
|
||||||
void SetSeparator(const QChar &separator);
|
void SetSeparator(const QChar &separator);
|
||||||
void SetCodec(QTextCodec *codec);
|
void SetCodec(VTextCodec *codec);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void changeEvent(QEvent* event) override;
|
void changeEvent(QEvent* event) override;
|
||||||
|
@ -92,7 +95,7 @@ private:
|
||||||
QString m_fileName;
|
QString m_fileName;
|
||||||
bool m_withHeader{false};
|
bool m_withHeader{false};
|
||||||
QChar m_separator{','};
|
QChar m_separator{','};
|
||||||
QTextCodec *m_codec{nullptr};
|
VTextCodec *m_codec{nullptr};
|
||||||
QVector<int> m_columnsMap{};
|
QVector<int> m_columnsMap{};
|
||||||
MeasurementsType m_type;
|
MeasurementsType m_type;
|
||||||
QList<MeasurementDimension_p> m_dimensions{};
|
QList<MeasurementDimension_p> m_dimensions{};
|
||||||
|
@ -150,7 +153,7 @@ inline void DialogMeasurementsCSVColumns::SetSeparator(const QChar &separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
inline void DialogMeasurementsCSVColumns::SetCodec(QTextCodec *codec)
|
inline void DialogMeasurementsCSVColumns::SetCodec(VTextCodec *codec)
|
||||||
{
|
{
|
||||||
m_codec = codec;
|
m_codec = codec;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,12 @@
|
||||||
#include "../vmisc/dialogs/dialogselectlanguage.h"
|
#include "../vmisc/dialogs/dialogselectlanguage.h"
|
||||||
#include "mapplication.h" // Should be last because of definning qApp
|
#include "mapplication.h" // Should be last because of definning qApp
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
|
||||||
#include "../vmisc/backport/qscopeguard.h"
|
#include "../vmisc/backport/qscopeguard.h"
|
||||||
#else
|
#else
|
||||||
|
@ -71,7 +77,6 @@
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QtNumeric>
|
#include <QtNumeric>
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
|
@ -849,7 +854,7 @@ void TMainWindow::ExportToCSVData(const QString &fileName, bool withHeader, int
|
||||||
}
|
}
|
||||||
|
|
||||||
QString error;
|
QString error;
|
||||||
csv.toCSV(fileName, error, withHeader, separator, QTextCodec::codecForMib(mib));
|
csv.toCSV(fileName, error, withHeader, separator, VTextCodec::codecForMib(mib));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -1102,12 +1107,12 @@ void TMainWindow::ImportDataFromCSV()
|
||||||
}
|
}
|
||||||
columns->SetWithHeader(dialog.IsWithHeader());
|
columns->SetWithHeader(dialog.IsWithHeader());
|
||||||
columns->SetSeparator(dialog.GetSeparator());
|
columns->SetSeparator(dialog.GetSeparator());
|
||||||
columns->SetCodec(QTextCodec::codecForMib(dialog.GetSelectedMib()));
|
columns->SetCodec(VTextCodec::codecForMib(dialog.GetSelectedMib()));
|
||||||
|
|
||||||
if (columns->exec() == QDialog::Accepted)
|
if (columns->exec() == QDialog::Accepted)
|
||||||
{
|
{
|
||||||
QxtCsvModel csv(fileName, nullptr, dialog.IsWithHeader(), dialog.GetSeparator(),
|
QxtCsvModel csv(fileName, nullptr, dialog.IsWithHeader(), dialog.GetSeparator(),
|
||||||
QTextCodec::codecForMib(dialog.GetSelectedMib()));
|
VTextCodec::codecForMib(dialog.GetSelectedMib()));
|
||||||
const QVector<int> map = columns->ColumnsMap();
|
const QVector<int> map = columns->ColumnsMap();
|
||||||
|
|
||||||
if (m_m->Type() == MeasurementsType::Individual)
|
if (m_m->Type() == MeasurementsType::Individual)
|
||||||
|
|
|
@ -36,7 +36,12 @@
|
||||||
#include "../vmisc/dialogs/dialogexporttocsv.h"
|
#include "../vmisc/dialogs/dialogexporttocsv.h"
|
||||||
#include "../vlayout/vlayoutgenerator.h"
|
#include "../vlayout/vlayoutgenerator.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
VCommandLinePtr VCommandLine::instance = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
VCommandLinePtr VCommandLine::instance = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
|
|
||||||
|
@ -736,7 +741,7 @@ void VCommandLine::InitCommandLineOptions()
|
||||||
"Qt. Default value depend from system. On Windows, the codec will be based on a system locale. On Unix "
|
"Qt. Default value depend from system. On Windows, the codec will be based on a system locale. On Unix "
|
||||||
"systems, the codec will might fall back to using the iconv library if no builtin codec for the locale can be "
|
"systems, the codec will might fall back to using the iconv library if no builtin codec for the locale can be "
|
||||||
"found. Valid values for this installation:") + DialogExportToCSV::MakeHelpCodecsList(),
|
"found. Valid values for this installation:") + DialogExportToCSV::MakeHelpCodecsList(),
|
||||||
translate("VCommandLine", "Codec name"), QString(QTextCodec::codecForLocale()->name())},
|
translate("VCommandLine", "Codec name"), QString(VTextCodec::codecForLocale()->name())},
|
||||||
{LONG_OPTION_CSVSEPARATOR,
|
{LONG_OPTION_CSVSEPARATOR,
|
||||||
translate("VCommandLine", "Specify csv separator character. Default value is '%1'. Valid characters:")
|
translate("VCommandLine", "Specify csv separator character. Default value is '%1'. Valid characters:")
|
||||||
.arg(VCommonSettings::GetDefCSVSeparator()) + DialogExportToCSV::MakeHelpSeparatorList(),
|
.arg(VCommonSettings::GetDefCSVSeparator()) + DialogExportToCSV::MakeHelpSeparatorList(),
|
||||||
|
|
|
@ -49,11 +49,16 @@
|
||||||
#include "../ifc/xml/vvitconverter.h"
|
#include "../ifc/xml/vvitconverter.h"
|
||||||
#include "../vwidgets/vwidgetpopup.h"
|
#include "../vwidgets/vwidgetpopup.h"
|
||||||
#include "../vwidgets/vmaingraphicsscene.h"
|
#include "../vwidgets/vmaingraphicsscene.h"
|
||||||
|
|
||||||
#include "../vtools/undocommands/undogroup.h"
|
#include "../vtools/undocommands/undogroup.h"
|
||||||
#include "../vformat/vpatternrecipe.h"
|
#include "../vformat/vpatternrecipe.h"
|
||||||
#include "../vlayout/dialogs/watermarkwindow.h"
|
#include "../vlayout/dialogs/watermarkwindow.h"
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
||||||
#include "../vmisc/backport/qoverload.h"
|
#include "../vmisc/backport/qoverload.h"
|
||||||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
||||||
|
@ -201,7 +206,6 @@
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <QFileSystemWatcher>
|
#include <QFileSystemWatcher>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QDoubleSpinBox>
|
#include <QDoubleSpinBox>
|
||||||
#include <QProgressBar>
|
#include <QProgressBar>
|
||||||
#include <QGlobalStatic>
|
#include <QGlobalStatic>
|
||||||
|
@ -1924,7 +1928,7 @@ void MainWindow::ExportToCSVData(const QString &fileName, bool withHeader, int m
|
||||||
SavePreviewCalculation(true);
|
SavePreviewCalculation(true);
|
||||||
|
|
||||||
QString error;
|
QString error;
|
||||||
csv.toCSV(fileName, error, withHeader, separator, QTextCodec::codecForMib(mib));
|
csv.toCSV(fileName, error, withHeader, separator, VTextCodec::codecForMib(mib));
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -6735,10 +6739,10 @@ auto MainWindow::DoFMExport(const VCommandLinePtr &expParams) -> bool
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString codecName = expParams->OptCSVCodecName();
|
const QString codecName = expParams->OptCSVCodecName();
|
||||||
int mib = QTextCodec::codecForLocale()->mibEnum();
|
int mib = VTextCodec::codecForLocale()->mibEnum();
|
||||||
if (not codecName.isEmpty())
|
if (not codecName.isEmpty())
|
||||||
{
|
{
|
||||||
if (QTextCodec *codec = QTextCodec::codecForName(codecName.toLatin1()))
|
if (VTextCodec *codec = VTextCodec::codecForName(codecName.toLatin1()))
|
||||||
{
|
{
|
||||||
mib = codec->mibEnum();
|
mib = codec->mibEnum();
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,12 @@
|
||||||
#include "../vmisc/vvalentinasettings.h"
|
#include "../vmisc/vvalentinasettings.h"
|
||||||
#include "../vdxf/libdxfrw/drw_base.h"
|
#include "../vdxf/libdxfrw/drw_base.h"
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
|
@ -62,7 +68,6 @@
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <QPageSize>
|
#include <QPageSize>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTextCodec>
|
|
||||||
|
|
||||||
#if defined(Q_OS_WIN32) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
|
#if defined(Q_OS_WIN32) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
|
||||||
#include <QWinTaskbarButton>
|
#include <QWinTaskbarButton>
|
||||||
|
@ -1308,7 +1313,7 @@ bool MainWindowsNoGUI::ExportFMeasurementsToCSVData(const QString &fileName, boo
|
||||||
}
|
}
|
||||||
|
|
||||||
QString error;
|
QString error;
|
||||||
const bool success = csv.toCSV(fileName, error, withHeader, separator, QTextCodec::codecForMib(mib));
|
const bool success = csv.toCSV(fileName, error, withHeader, separator, VTextCodec::codecForMib(mib));
|
||||||
|
|
||||||
if (not success)
|
if (not success)
|
||||||
{
|
{
|
||||||
|
|
|
@ -791,7 +791,9 @@ bool VDomDocument::SaveDocument(const QString &fileName, QString &error)
|
||||||
}
|
}
|
||||||
// Left these strings in case we will need them for testing purposes
|
// Left these strings in case we will need them for testing purposes
|
||||||
// QTextStream out(&file);
|
// QTextStream out(&file);
|
||||||
|
//#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
// out.setCodec("UTF-8");
|
// out.setCodec("UTF-8");
|
||||||
|
//#endif
|
||||||
// save(out, indent);
|
// save(out, indent);
|
||||||
|
|
||||||
success = file.commit();
|
success = file.commit();
|
||||||
|
|
|
@ -372,6 +372,7 @@ bool SupportedLocale(const QLocale &locale)
|
||||||
locale.decimalPoint().size() == 1 &&
|
locale.decimalPoint().size() == 1 &&
|
||||||
locale.groupSeparator().size() == 1;
|
locale.groupSeparator().size() == 1;
|
||||||
#else
|
#else
|
||||||
|
Q_UNUSED(locale)
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -417,7 +418,11 @@ QChar LocaleSign0(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'0'};
|
return {'0'};
|
||||||
|
#else
|
||||||
|
return QChar('0');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -429,7 +434,11 @@ QChar LocaleSign1(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'1'};
|
return {'1'};
|
||||||
|
#else
|
||||||
|
return QChar('1');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -441,7 +450,11 @@ QChar LocaleSign2(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'2'};
|
return {'2'};
|
||||||
|
#else
|
||||||
|
return QChar('2');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -453,7 +466,11 @@ QChar LocaleSign3(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'3'};
|
return {'3'};
|
||||||
|
#else
|
||||||
|
return QChar('3');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -465,7 +482,11 @@ QChar LocaleSign4(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'4'};
|
return {'4'};
|
||||||
|
#else
|
||||||
|
return QChar('4');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -477,7 +498,11 @@ QChar LocaleSign5(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'5'};
|
return {'5'};
|
||||||
|
#else
|
||||||
|
return QChar('5');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -489,7 +514,11 @@ QChar LocaleSign6(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'6'};
|
return {'6'};
|
||||||
|
#else
|
||||||
|
return QChar('6');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -501,7 +530,11 @@ QChar LocaleSign7(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'7'};
|
return {'7'};
|
||||||
|
#else
|
||||||
|
return QChar('7');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -513,7 +546,11 @@ QChar LocaleSign8(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'8'};
|
return {'8'};
|
||||||
|
#else
|
||||||
|
return QChar('8');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -525,7 +562,11 @@ QChar LocaleSign9(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'9'};
|
return {'9'};
|
||||||
|
#else
|
||||||
|
return QChar('9');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -110,7 +110,6 @@ typedef float dfloat32; /* 32 bit floating point */
|
||||||
typedef double ddouble64; /* 64 bit floating point */
|
typedef double ddouble64; /* 64 bit floating point */
|
||||||
typedef long double ddouble80; /* 80 bit floating point */
|
typedef long double ddouble80; /* 80 bit floating point */
|
||||||
|
|
||||||
|
|
||||||
namespace DRW {
|
namespace DRW {
|
||||||
|
|
||||||
//! Version numbers for the DXF Format.
|
//! Version numbers for the DXF Format.
|
||||||
|
|
|
@ -4,46 +4,16 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "../drw_base.h"
|
#include "../drw_base.h"
|
||||||
#include "../vmisc/vabstractvalapplication.h"
|
#include "../vmisc/vabstractvalapplication.h"
|
||||||
#include "../ifc/exception/vexception.h"
|
#include "../ifc/exception/vexception.h"
|
||||||
|
|
||||||
namespace
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
{
|
#include "../vmisc/vtextcodec.h"
|
||||||
QMap<QString, QStringList> QtCodecs()
|
#else
|
||||||
{
|
#include <QTextCodec>
|
||||||
return QMap<QString, QStringList>
|
#endif
|
||||||
{
|
|
||||||
{"ANSI_874", {"ANSI_874", "CP874", "windows-874", "MS874", "x-windows-874", "TIS-620", "IBM1162",
|
|
||||||
"x-IBM874"}}, // Latin/Thai
|
|
||||||
{"ANSI_932", {"ANSI_932", "CP932", "SHIFT-JIS", "SHIFT_JIS", "CSSHIFTJIS", "CSWINDOWS31J", "MS_KANJI",
|
|
||||||
"X-MS-CP932", "X-SJIS", "EUCJP", "EUC-JP", "CSEUCPKDFMTJAPANESE", "X-EUC", "X-EUC-JP", "IBM-943",
|
|
||||||
"JIS7"}}, // Japanese
|
|
||||||
{"ANSI_936", {"ANSI_936", "GBK", "CP936", "MS936", "Windows-936", "GB2312",
|
|
||||||
"CHINESE"}}, // Chinese PRC GBK (XGB) simplified
|
|
||||||
{"ANSI_949", {"ANSI_949", "Windows-949", "MS949", "CP949"}}, // Korean
|
|
||||||
{"ANSI_950", {"ANSI_950", "BIG5", "windows-950-2000", "csBig5", "windows-950", "x-windows-950", "x-big5",
|
|
||||||
"ms950"}}, // Chinese Big5 (Taiwan, Hong Kong SAR)
|
|
||||||
{"ANSI_1250", {"ANSI_1250", "CP1250", "windows-1250", "ibm-1250_P100-1995",
|
|
||||||
"ibm-1250"}}, //Central Europe and Eastern Europe
|
|
||||||
{"ANSI_1251", {"ANSI_1251", "CP1251", "windows-1251", "ANSI1251", "ibm-5347_P100-1998",
|
|
||||||
"ibm-5347"}}, // Cyrillic script
|
|
||||||
{"ANSI_1252", {"ANSI_1252", "CP1252", "windows-1252", "LATIN1", "ISO-8859-1", "CP819", "CSISO", "IBM819",
|
|
||||||
"ISO_8859-1", "APPLE ROMAN", "ISO8859-1", "ISO8859-15", "ISO-IR-100", "L1",
|
|
||||||
"IBM 850", "850"}}, // Western Europe
|
|
||||||
{"ANSI_1253", {"ANSI_1253", "CP1253", "windows-1253"}}, // Greek
|
|
||||||
{"ANSI_1254", {"ANSI_1254", "CP1254", "windows-1254"}}, // Turkish
|
|
||||||
{"ANSI_1255", {"ANSI_1255", "CP1255", "windows-1255"}}, // Hebrew
|
|
||||||
{"ANSI_1256", {"ANSI_1256", "CP1256", "windows-1256", "x-windows-1256S"}}, // Arabic
|
|
||||||
{"ANSI_1257", {"ANSI_1257", "CP1257", "windows-1257"}}, // Baltic
|
|
||||||
{"ANSI_1258", {"ANSI_1258", "CP1258", "windows-1258"}}, // Vietnamese
|
|
||||||
{"UTF-8", {"UTF-8", "UTF8", "UTF8-BIT"}},
|
|
||||||
{"UTF-16", {"UTF-16", "UTF16", "UTF16-BIT"}},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
DRW_TextCodec::DRW_TextCodec()
|
DRW_TextCodec::DRW_TextCodec()
|
||||||
: version(DRW::AC1021)
|
: version(DRW::AC1021)
|
||||||
|
@ -123,29 +93,22 @@ void DRW_TextCodec::setCodePage(const std::string &c, bool dxfFormat){
|
||||||
if (version < DRW::AC1021)
|
if (version < DRW::AC1021)
|
||||||
{
|
{
|
||||||
if (cp == "UTF-8")
|
if (cp == "UTF-8")
|
||||||
{ //DXF older than 2007 are write in win codepages
|
{ // DXF older than 2007 are write in win codepages
|
||||||
cp = "ANSI_1252";
|
cp = "ANSI_1252";
|
||||||
}
|
}
|
||||||
conv = DRW_TextCodec::CodecForName(QString::fromStdString(cp));
|
conv = DRW_TextCodec::CodecForName(QString::fromStdString(cp));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (dxfFormat)
|
conv = DRW_TextCodec::CodecForName(dxfFormat ? QStringLiteral("UTF-8") : QStringLiteral("UTF-16"));
|
||||||
{
|
|
||||||
conv = DRW_TextCodec::CodecForName(QString::fromStdString("UTF-8"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
conv = DRW_TextCodec::CodecForName(QString::fromStdString("UTF-16"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conv == nullptr)
|
if (conv == nullptr)
|
||||||
{
|
{
|
||||||
const QString errorMsg = QCoreApplication::translate("DRW_TextCodec", "No available codec for code page '%1'.")
|
const QString errorMsg = QCoreApplication::translate("DRW_TextCodec", "No available codec for code page '%1'.")
|
||||||
.arg(cp.c_str());
|
.arg(cp.c_str());
|
||||||
VAbstractApplication::VApp()->IsPedantic() ? throw VException(errorMsg) :
|
VAbstractApplication::VApp()->IsPedantic()
|
||||||
qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
|
? throw VException(errorMsg) : qWarning() << VAbstractValApplication::warningMessageSignature + errorMsg;
|
||||||
|
|
||||||
if (version < DRW::AC1021 && cp == "UTF-8")
|
if (version < DRW::AC1021 && cp == "UTF-8")
|
||||||
{
|
{
|
||||||
|
@ -157,7 +120,7 @@ void DRW_TextCodec::setCodePage(const std::string &c, bool dxfFormat){
|
||||||
|
|
||||||
QMap<QString, QStringList> DRW_TextCodec::DXFCodePageMap()
|
QMap<QString, QStringList> DRW_TextCodec::DXFCodePageMap()
|
||||||
{
|
{
|
||||||
return QMap<QString, QStringList>
|
static auto map = QMap<QString, QStringList>
|
||||||
{
|
{
|
||||||
{"ANSI_874", {"ANSI_874", "CP874", "ISO8859-11", "TIS-620"}}, // Latin/Thai
|
{"ANSI_874", {"ANSI_874", "CP874", "ISO8859-11", "TIS-620"}}, // Latin/Thai
|
||||||
{"ANSI_932", {"ANSI_932", "SHIFT-JIS", "SHIFT_JIS", "CSSHIFTJIS", "CSWINDOWS31J", "MS_KANJI", "X-MS-CP932",
|
{"ANSI_932", {"ANSI_932", "SHIFT-JIS", "SHIFT_JIS", "CSSHIFTJIS", "CSWINDOWS31J", "MS_KANJI", "X-MS-CP932",
|
||||||
|
@ -170,8 +133,8 @@ QMap<QString, QStringList> DRW_TextCodec::DXFCodePageMap()
|
||||||
"BIG5-HKSCS"}}, // Chinese Big5 (Taiwan, Hong Kong SAR)
|
"BIG5-HKSCS"}}, // Chinese Big5 (Taiwan, Hong Kong SAR)
|
||||||
{"ANSI_1250", {"ANSI_1250", "CP1250", "ISO8859-2"}}, //Central Europe and Eastern Europe
|
{"ANSI_1250", {"ANSI_1250", "CP1250", "ISO8859-2"}}, //Central Europe and Eastern Europe
|
||||||
{"ANSI_1251", {"ANSI_1251", "CP1251", "ISO8859-5", "KOI8-R", "KOI8-U", "IBM 866"}}, // Cyrillic script
|
{"ANSI_1251", {"ANSI_1251", "CP1251", "ISO8859-5", "KOI8-R", "KOI8-U", "IBM 866"}}, // Cyrillic script
|
||||||
{"ANSI_1252", {"ANSI_1252", "CP1252", "LATIN1", "ISO-8859-1", "CP819", "CSISO", "IBM819", "ISO_8859-1",
|
{"ANSI_1252", {"ANSI_1252", "CP1252", "LATIN1", "ISO-8859-1", "CP819", "CSISO", "IBM819", "L1",
|
||||||
"APPLE ROMAN", "ISO8859-1", "ISO8859-15", "ISO-IR-100", "L1", "IBM 850"}}, // Western Europe
|
"ISO_8859-1", "APPLE ROMAN", "ISO8859-1", "ISO8859-15", "ISO-IR-100", "IBM 850"}}, // Western Europe
|
||||||
{"ANSI_1253", {"ANSI_1253", "CP1253", "ISO8859-7"}}, // Greek
|
{"ANSI_1253", {"ANSI_1253", "CP1253", "ISO8859-7"}}, // Greek
|
||||||
{"ANSI_1254", {"ANSI_1254", "CP1254", "ISO8859-9", "iso8859-3"}}, // Turkish
|
{"ANSI_1254", {"ANSI_1254", "CP1254", "ISO8859-9", "iso8859-3"}}, // Turkish
|
||||||
{"ANSI_1255", {"ANSI_1255", "CP1255", "ISO8859-8"}}, // Hebrew
|
{"ANSI_1255", {"ANSI_1255", "CP1255", "ISO8859-8"}}, // Hebrew
|
||||||
|
@ -181,17 +144,19 @@ QMap<QString, QStringList> DRW_TextCodec::DXFCodePageMap()
|
||||||
{"UTF-8", {"UTF-8", "UTF8", "UTF8-BIT"}},
|
{"UTF-8", {"UTF-8", "UTF8", "UTF8-BIT"}},
|
||||||
{"UTF-16", {"UTF-16", "UTF16", "UTF16-BIT"}},
|
{"UTF-16", {"UTF-16", "UTF16", "UTF16-BIT"}},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTextCodec *DRW_TextCodec::CodecForName(const QString &name)
|
VTextCodec *DRW_TextCodec::CodecForName(const QString &name)
|
||||||
{
|
{
|
||||||
QMap<QString, QStringList> knownCodecs = QtCodecs();
|
QMap<QString, QStringList> knownCodecs = DXFCodePageMap();
|
||||||
if (knownCodecs.contains(name))
|
if (knownCodecs.contains(name))
|
||||||
{
|
{
|
||||||
QStringList aliases = knownCodecs.value(name);
|
QStringList aliases = knownCodecs.value(name);
|
||||||
for (auto &alias : aliases)
|
for (auto &alias : aliases)
|
||||||
{
|
{
|
||||||
if (QTextCodec *codec = QTextCodec::codecForName(alias.toLatin1()))
|
if (VTextCodec *codec = VTextCodec::codecForName(alias.toLatin1()))
|
||||||
{
|
{
|
||||||
return codec;
|
return codec;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,13 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
#include "../drw_base.h"
|
#include "../drw_base.h"
|
||||||
#include "../vmisc/defglobal.h"
|
|
||||||
|
|
||||||
class QTextCodec;
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include "../vmisc/defglobal.h"
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
class QStringList;
|
class QStringList;
|
||||||
|
@ -27,7 +31,7 @@ public:
|
||||||
std::string getCodePage() const {return cp;}
|
std::string getCodePage() const {return cp;}
|
||||||
|
|
||||||
static QMap<QString, QStringList> DXFCodePageMap();
|
static QMap<QString, QStringList> DXFCodePageMap();
|
||||||
static QTextCodec* CodecForName(const QString &name);
|
static VTextCodec* CodecForName(const QString &name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static auto correctCodePage(const std::string& s) -> std::string;
|
static auto correctCodePage(const std::string& s) -> std::string;
|
||||||
|
@ -37,7 +41,7 @@ private:
|
||||||
Q_DISABLE_COPY_MOVE(DRW_TextCodec) // NOLINT
|
Q_DISABLE_COPY_MOVE(DRW_TextCodec) // NOLINT
|
||||||
DRW::Version version{DRW::UNKNOWNV};
|
DRW::Version version{DRW::UNKNOWNV};
|
||||||
std::string cp{};
|
std::string cp{};
|
||||||
QTextCodec *conv{nullptr};
|
VTextCodec *conv{nullptr};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DRW_TEXTCODEC_H
|
#endif // DRW_TEXTCODEC_H
|
||||||
|
|
|
@ -41,12 +41,17 @@
|
||||||
#include <QPainterPath>
|
#include <QPainterPath>
|
||||||
#include <QPen>
|
#include <QPen>
|
||||||
#include <QPolygonF>
|
#include <QPolygonF>
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QTextItem>
|
#include <QTextItem>
|
||||||
#include <Qt>
|
#include <Qt>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../vmisc/def.h"
|
#include "../vmisc/def.h"
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||||
#include "../vmisc/diagnostic.h"
|
#include "../vmisc/diagnostic.h"
|
||||||
|
@ -1251,7 +1256,7 @@ auto VDxfEngine::AAMAPoint(const QPointF &pos, const UTF8STRING &layer) const ->
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto VDxfEngine::FromUnicodeToCodec(const QString &str, QTextCodec *codec) -> std::string
|
auto VDxfEngine::FromUnicodeToCodec(const QString &str, VTextCodec *codec) -> std::string
|
||||||
{
|
{
|
||||||
return codec->fromUnicode(str).toStdString();
|
return codec->fromUnicode(str).toStdString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "../vmisc/def.h"
|
#include "../vmisc/def.h"
|
||||||
|
#include "../vmisc/defglobal.h"
|
||||||
#include "dxfdef.h"
|
#include "dxfdef.h"
|
||||||
#include "libdxfrw/drw_base.h"
|
#include "libdxfrw/drw_base.h"
|
||||||
|
|
||||||
|
@ -50,7 +51,10 @@ class DRW_Entity;
|
||||||
class dx_ifaceBlock;
|
class dx_ifaceBlock;
|
||||||
class VLayoutPoint;
|
class VLayoutPoint;
|
||||||
class DRW_Point;
|
class DRW_Point;
|
||||||
class QTextCodec;
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
class VTextCodec;
|
||||||
|
#endif
|
||||||
|
|
||||||
class VDxfEngine final : public QPaintEngine
|
class VDxfEngine final : public QPaintEngine
|
||||||
{
|
{
|
||||||
|
@ -158,7 +162,7 @@ private:
|
||||||
Q_REQUIRED_RESULT auto CreateAAMAPolygon(const QVector<C> &polygon, const UTF8STRING &layer,
|
Q_REQUIRED_RESULT auto CreateAAMAPolygon(const QVector<C> &polygon, const UTF8STRING &layer,
|
||||||
bool forceClosed) -> P *;
|
bool forceClosed) -> P *;
|
||||||
|
|
||||||
static auto FromUnicodeToCodec(const QString &str, QTextCodec *codec) -> std::string;
|
static auto FromUnicodeToCodec(const QString &str, VTextCodec *codec) -> std::string;
|
||||||
auto GetFileNameForLocale() const -> std::string;
|
auto GetFileNameForLocale() const -> std::string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -125,4 +125,9 @@ using vsizetype = qsizetype;
|
||||||
using vsizetype = int;
|
using vsizetype = int;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
class QTextCodec;
|
||||||
|
using VTextCodec = QTextCodec;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // DEFGLOBAL_H
|
#endif // DEFGLOBAL_H
|
||||||
|
|
|
@ -35,9 +35,14 @@
|
||||||
|
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QShowEvent>
|
#include <QShowEvent>
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
||||||
#include "../vmisc/backport/qoverload.h"
|
#include "../vmisc/backport/qoverload.h"
|
||||||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
#endif // QT_VERSION < QT_VERSION_CHECK(5, 7, 0)
|
||||||
|
@ -51,10 +56,10 @@ DialogExportToCSV::DialogExportToCSV(QWidget *parent)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
const QList<int> mibs = QTextCodec::availableMibs();
|
const QList<int> mibs = VTextCodec::availableMibs();
|
||||||
for (auto mib : mibs)
|
for (auto mib : mibs)
|
||||||
{
|
{
|
||||||
if (QTextCodec *codec = QTextCodec::codecForMib(mib))
|
if (VTextCodec *codec = VTextCodec::codecForMib(mib))
|
||||||
{
|
{
|
||||||
ui->comboBoxCodec->addItem(codec->name(), mib);
|
ui->comboBoxCodec->addItem(codec->name(), mib);
|
||||||
}
|
}
|
||||||
|
@ -214,7 +219,7 @@ void DialogExportToCSV::ShowPreview()
|
||||||
|
|
||||||
ui->groupBoxPreview->setVisible(true);
|
ui->groupBoxPreview->setVisible(true);
|
||||||
|
|
||||||
QxtCsvModel csv(m_fileName, nullptr, IsWithHeader(), GetSeparator(), QTextCodec::codecForMib(GetSelectedMib()));
|
QxtCsvModel csv(m_fileName, nullptr, IsWithHeader(), GetSeparator(), VTextCodec::codecForMib(GetSelectedMib()));
|
||||||
|
|
||||||
const int columns = csv.columnCount();
|
const int columns = csv.columnCount();
|
||||||
const int rows = csv.rowCount();
|
const int rows = csv.rowCount();
|
||||||
|
@ -285,10 +290,10 @@ void DialogExportToCSV::ShowFilePreview(const QString &fileName)
|
||||||
QString DialogExportToCSV::MakeHelpCodecsList()
|
QString DialogExportToCSV::MakeHelpCodecsList()
|
||||||
{
|
{
|
||||||
QString out = QStringLiteral("\n");
|
QString out = QStringLiteral("\n");
|
||||||
const QList<int> list = QTextCodec::availableMibs();
|
const QList<int> list = VTextCodec::availableMibs();
|
||||||
for (int i = 0; i < list.size(); ++i)
|
for (int i = 0; i < list.size(); ++i)
|
||||||
{
|
{
|
||||||
if (QTextCodec *codec = QTextCodec::codecForMib(list.at(i)))
|
if (VTextCodec *codec = VTextCodec::codecForMib(list.at(i)))
|
||||||
{
|
{
|
||||||
out += QStringLiteral("\t* ") + codec->name();
|
out += QStringLiteral("\t* ") + codec->name();
|
||||||
out += i < list.size()-1 ? QLatin1String(",\n") : QLatin1String(".\n");
|
out += i < list.size()-1 ? QLatin1String(",\n") : QLatin1String(".\n");
|
||||||
|
|
|
@ -41,6 +41,12 @@
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <Qt>
|
#include <Qt>
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||||
#include "../vmisc/diagnostic.h"
|
#include "../vmisc/diagnostic.h"
|
||||||
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
#endif // QT_VERSION < QT_VERSION_CHECK(5, 5, 0)
|
||||||
|
@ -85,7 +91,7 @@ QxtCsvModel::QxtCsvModel(QObject *parent) : QAbstractTableModel(parent)
|
||||||
|
|
||||||
\sa setSource
|
\sa setSource
|
||||||
*/
|
*/
|
||||||
QxtCsvModel::QxtCsvModel(QIODevice *file, QObject *parent, bool withHeader, QChar separator, QTextCodec* codec)
|
QxtCsvModel::QxtCsvModel(QIODevice *file, QObject *parent, bool withHeader, QChar separator, VTextCodec* codec)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
{
|
{
|
||||||
QXT_INIT_PRIVATE(QxtCsvModel)
|
QXT_INIT_PRIVATE(QxtCsvModel)
|
||||||
|
@ -102,7 +108,7 @@ QxtCsvModel::QxtCsvModel(QIODevice *file, QObject *parent, bool withHeader, QCha
|
||||||
|
|
||||||
\sa setSource
|
\sa setSource
|
||||||
*/
|
*/
|
||||||
QxtCsvModel::QxtCsvModel(const QString &filename, QObject *parent, bool withHeader, QChar separator, QTextCodec* codec)
|
QxtCsvModel::QxtCsvModel(const QString &filename, QObject *parent, bool withHeader, QChar separator, VTextCodec* codec)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
{
|
{
|
||||||
QXT_INIT_PRIVATE(QxtCsvModel)
|
QXT_INIT_PRIVATE(QxtCsvModel)
|
||||||
|
@ -183,7 +189,7 @@ QVariant QxtCsvModel::headerData(int section, Qt::Orientation orientation, int r
|
||||||
|
|
||||||
Reads in a CSV file from the provided \a file using \a codec.
|
Reads in a CSV file from the provided \a file using \a codec.
|
||||||
*/
|
*/
|
||||||
void QxtCsvModel::setSource(const QString &filename, bool withHeader, QChar separator, QTextCodec* codec)
|
void QxtCsvModel::setSource(const QString &filename, bool withHeader, QChar separator, VTextCodec* codec)
|
||||||
{
|
{
|
||||||
QFile src(filename);
|
QFile src(filename);
|
||||||
setSource(&src, withHeader, separator, codec);
|
setSource(&src, withHeader, separator, codec);
|
||||||
|
@ -198,7 +204,7 @@ void QxtCsvModel::setSource(const QString &filename, bool withHeader, QChar sepa
|
||||||
|
|
||||||
\sa quoteMode
|
\sa quoteMode
|
||||||
*/
|
*/
|
||||||
void QxtCsvModel::setSource(QIODevice *file, bool withHeader, QChar separator, QTextCodec* codec)
|
void QxtCsvModel::setSource(QIODevice *file, bool withHeader, QChar separator, VTextCodec* codec)
|
||||||
{
|
{
|
||||||
QxtCsvModelPrivate* d_ptr = &qxt_d();
|
QxtCsvModelPrivate* d_ptr = &qxt_d();
|
||||||
bool headerSet = !withHeader;
|
bool headerSet = !withHeader;
|
||||||
|
@ -221,10 +227,10 @@ void QxtCsvModel::setSource(QIODevice *file, bool withHeader, QChar separator, Q
|
||||||
QChar ch, buffer(0);
|
QChar ch, buffer(0);
|
||||||
bool readCR = false;
|
bool readCR = false;
|
||||||
QTextStream stream(file);
|
QTextStream stream(file);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
codec ? stream.setCodec(codec) : stream.setAutoDetectUnicode(true);
|
codec ? stream.setEncoding(codec->Encoding()) : stream.setAutoDetectUnicode(true);
|
||||||
#else
|
#else
|
||||||
stream.setAutoDetectUnicode(true);
|
codec ? stream.setCodec(codec) : stream.setAutoDetectUnicode(true);
|
||||||
#endif
|
#endif
|
||||||
while (not stream.atEnd())
|
while (not stream.atEnd())
|
||||||
{
|
{
|
||||||
|
@ -594,7 +600,7 @@ static QString qxt_addCsvQuotes(QxtCsvModel::QuoteMode mode, QString field)
|
||||||
Fields in the output file will be separated by \a separator. Set \a withHeader to true
|
Fields in the output file will be separated by \a separator. Set \a withHeader to true
|
||||||
to output a row of headers at the top of the file.
|
to output a row of headers at the top of the file.
|
||||||
*/
|
*/
|
||||||
bool QxtCsvModel::toCSV(QIODevice* dest, QString &error, bool withHeader, QChar separator, QTextCodec* codec) const
|
bool QxtCsvModel::toCSV(QIODevice* dest, QString &error, bool withHeader, QChar separator, VTextCodec* codec) const
|
||||||
{
|
{
|
||||||
const QxtCsvModelPrivate& d_ptr = qxt_d();
|
const QxtCsvModelPrivate& d_ptr = qxt_d();
|
||||||
int row, col, rows, cols;
|
int row, col, rows, cols;
|
||||||
|
@ -610,12 +616,16 @@ bool QxtCsvModel::toCSV(QIODevice* dest, QString &error, bool withHeader, QChar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QTextStream stream(dest);
|
QTextStream stream(dest);
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
|
||||||
if (codec)
|
if (codec)
|
||||||
{
|
{
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
stream.setEncoding(codec->Encoding());
|
||||||
|
#else
|
||||||
stream.setCodec(codec);
|
stream.setCodec(codec);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (withHeader)
|
if (withHeader)
|
||||||
{
|
{
|
||||||
data = QString();
|
data = QString();
|
||||||
|
@ -664,7 +674,7 @@ bool QxtCsvModel::toCSV(QIODevice* dest, QString &error, bool withHeader, QChar
|
||||||
to output a row of headers at the top of the file.
|
to output a row of headers at the top of the file.
|
||||||
*/
|
*/
|
||||||
bool QxtCsvModel::toCSV(const QString &filename, QString &error, bool withHeader, QChar separator,
|
bool QxtCsvModel::toCSV(const QString &filename, QString &error, bool withHeader, QChar separator,
|
||||||
QTextCodec* codec) const
|
VTextCodec* codec) const
|
||||||
{
|
{
|
||||||
QFile dest(filename);
|
QFile dest(filename);
|
||||||
return toCSV(&dest, error, withHeader, separator, codec);
|
return toCSV(&dest, error, withHeader, separator, codec);
|
||||||
|
|
|
@ -49,7 +49,10 @@
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
|
|
||||||
class QxtCsvModelPrivate;
|
class QxtCsvModelPrivate;
|
||||||
class QTextCodec;
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
class VTextCodec;
|
||||||
|
#endif
|
||||||
|
|
||||||
class QxtCsvModel final : public QAbstractTableModel
|
class QxtCsvModel final : public QAbstractTableModel
|
||||||
{
|
{
|
||||||
|
@ -57,9 +60,9 @@ class QxtCsvModel final : public QAbstractTableModel
|
||||||
public:
|
public:
|
||||||
explicit QxtCsvModel(QObject *parent = nullptr);
|
explicit QxtCsvModel(QObject *parent = nullptr);
|
||||||
explicit QxtCsvModel(QIODevice *file, QObject *parent = nullptr, bool withHeader = false, QChar separator = ',',
|
explicit QxtCsvModel(QIODevice *file, QObject *parent = nullptr, bool withHeader = false, QChar separator = ',',
|
||||||
QTextCodec *codec = nullptr);
|
VTextCodec *codec = nullptr);
|
||||||
explicit QxtCsvModel(const QString &filename, QObject *parent = nullptr, bool withHeader = false,
|
explicit QxtCsvModel(const QString &filename, QObject *parent = nullptr, bool withHeader = false,
|
||||||
QChar separator = ',', QTextCodec *codec = nullptr);
|
QChar separator = ',', VTextCodec *codec = nullptr);
|
||||||
virtual ~QxtCsvModel() = default;
|
virtual ~QxtCsvModel() = default;
|
||||||
|
|
||||||
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
|
||||||
|
@ -91,14 +94,14 @@ public:
|
||||||
bool removeColumn(int col, const QModelIndex& parent = QModelIndex());
|
bool removeColumn(int col, const QModelIndex& parent = QModelIndex());
|
||||||
virtual bool removeColumns(int col, int count, const QModelIndex& parent = QModelIndex()) override;
|
virtual bool removeColumns(int col, int count, const QModelIndex& parent = QModelIndex()) override;
|
||||||
|
|
||||||
void setSource(QIODevice *file, bool withHeader = false, QChar separator = ',', QTextCodec* codec = nullptr);
|
void setSource(QIODevice *file, bool withHeader = false, QChar separator = ',', VTextCodec* codec = nullptr);
|
||||||
void setSource(const QString &filename, bool withHeader = false, QChar separator = ',',
|
void setSource(const QString &filename, bool withHeader = false, QChar separator = ',',
|
||||||
QTextCodec* codec = nullptr);
|
VTextCodec* codec = nullptr);
|
||||||
|
|
||||||
bool toCSV(QIODevice *file, QString &error, bool withHeader = false, QChar separator = ',',
|
bool toCSV(QIODevice *file, QString &error, bool withHeader = false, QChar separator = ',',
|
||||||
QTextCodec* codec = nullptr) const;
|
VTextCodec* codec = nullptr) const;
|
||||||
bool toCSV(const QString &filename, QString &error, bool withHeader = false, QChar separator = ',',
|
bool toCSV(const QString &filename, QString &error, bool withHeader = false, QChar separator = ',',
|
||||||
QTextCodec* codec = nullptr) const;
|
VTextCodec* codec = nullptr) const;
|
||||||
|
|
||||||
enum QuoteOption { NoQuotes = 0,
|
enum QuoteOption { NoQuotes = 0,
|
||||||
SingleQuote = 1,
|
SingleQuote = 1,
|
||||||
|
|
|
@ -39,7 +39,13 @@
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
|
||||||
#include "../vmisc/compatibility.h"
|
#include "compatibility.h"
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_UNIX
|
#ifdef Q_OS_UNIX
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
|
@ -145,6 +151,19 @@ VAbstractApplication::VAbstractApplication(int &argc, char **argv)
|
||||||
connect(this, &QApplication::aboutToQuit, this, &VAbstractApplication::AboutToQuit);
|
connect(this, &QApplication::aboutToQuit, this, &VAbstractApplication::AboutToQuit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
VAbstractApplication::~VAbstractApplication()
|
||||||
|
{
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
QHashIterator<QStringConverter::Encoding, VTextCodec *> i(m_codecs);
|
||||||
|
while (i.hasNext())
|
||||||
|
{
|
||||||
|
i.next();
|
||||||
|
delete i.value();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* @brief translationsPath return path to the root directory that contain QM files.
|
* @brief translationsPath return path to the root directory that contain QM files.
|
||||||
|
@ -360,6 +379,28 @@ QFileDialog::Options VAbstractApplication::NativeFileDialog(QFileDialog::Options
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
VTextCodec *VAbstractApplication::TextCodecCache(QStringConverter::Encoding encoding) const
|
||||||
|
{
|
||||||
|
if (m_codecs.contains(encoding))
|
||||||
|
{
|
||||||
|
return m_codecs.value(encoding);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VAbstractApplication::CacheTextCodec(QStringConverter::Encoding encoding, VTextCodec *codec)
|
||||||
|
{
|
||||||
|
if (not m_codecs.contains(encoding))
|
||||||
|
{
|
||||||
|
m_codecs.insert(encoding, codec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VAbstractApplication::CheckSystemLocale()
|
void VAbstractApplication::CheckSystemLocale()
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,6 +49,10 @@ class QUndoStack;
|
||||||
class VAbstractApplication;// use in define
|
class VAbstractApplication;// use in define
|
||||||
class VCommonSettings;
|
class VCommonSettings;
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
class VTextCodec;
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_WARNING_PUSH
|
QT_WARNING_PUSH
|
||||||
QT_WARNING_DISABLE_GCC("-Wsuggest-final-types")
|
QT_WARNING_DISABLE_GCC("-Wsuggest-final-types")
|
||||||
QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods")
|
QT_WARNING_DISABLE_GCC("-Wsuggest-final-methods")
|
||||||
|
@ -58,7 +62,7 @@ class VAbstractApplication : public QApplication
|
||||||
Q_OBJECT // NOLINT
|
Q_OBJECT // NOLINT
|
||||||
public:
|
public:
|
||||||
VAbstractApplication(int &argc, char ** argv);
|
VAbstractApplication(int &argc, char ** argv);
|
||||||
virtual ~VAbstractApplication() =default;
|
virtual ~VAbstractApplication();
|
||||||
|
|
||||||
virtual const VTranslateVars *TrVars()=0;
|
virtual const VTranslateVars *TrVars()=0;
|
||||||
|
|
||||||
|
@ -84,6 +88,11 @@ public:
|
||||||
|
|
||||||
QFileDialog::Options NativeFileDialog(QFileDialog::Options options = QFileDialog::Options()) const;
|
QFileDialog::Options NativeFileDialog(QFileDialog::Options options = QFileDialog::Options()) const;
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
VTextCodec * TextCodecCache(QStringConverter::Encoding encoding) const;
|
||||||
|
void CacheTextCodec(QStringConverter::Encoding encoding, VTextCodec *codec);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(Q_OS_WIN)
|
#if defined(Q_OS_WIN)
|
||||||
static void WinAttachConsole();
|
static void WinAttachConsole();
|
||||||
#endif
|
#endif
|
||||||
|
@ -116,6 +125,10 @@ protected slots:
|
||||||
private:
|
private:
|
||||||
Q_DISABLE_COPY_MOVE(VAbstractApplication) // NOLINT
|
Q_DISABLE_COPY_MOVE(VAbstractApplication) // NOLINT
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
QHash<QStringConverter::Encoding, VTextCodec *> m_codecs{};
|
||||||
|
#endif
|
||||||
|
|
||||||
void ClearTranslation();
|
void ClearTranslation();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -35,13 +35,19 @@
|
||||||
#include <QMessageLogger>
|
#include <QMessageLogger>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QGlobalStatic>
|
#include <QGlobalStatic>
|
||||||
#include <QMarginsF>
|
#include <QMarginsF>
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../vmisc/def.h"
|
#include "../vmisc/def.h"
|
||||||
|
#include "../vmisc/defglobal.h"
|
||||||
#include "../vmisc/compatibility.h"
|
#include "../vmisc/compatibility.h"
|
||||||
#include "../vmisc/literals.h"
|
#include "../vmisc/literals.h"
|
||||||
|
|
||||||
|
@ -1009,7 +1015,7 @@ auto VCommonSettings::GetCSVCodec() const -> int
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
auto VCommonSettings::GetDefCSVCodec() -> int
|
auto VCommonSettings::GetDefCSVCodec() -> int
|
||||||
{
|
{
|
||||||
return QTextCodec::codecForLocale()->mibEnum();
|
return VTextCodec::codecForLocale()->mibEnum();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -9,45 +9,53 @@ VLib {
|
||||||
}
|
}
|
||||||
|
|
||||||
name: "VMiscLib"
|
name: "VMiscLib"
|
||||||
files: [
|
files: {
|
||||||
"def.cpp",
|
var files = [
|
||||||
"testpath.cpp",
|
"def.cpp",
|
||||||
"vabstractvalapplication.cpp",
|
"testpath.cpp",
|
||||||
"vabstractapplication.cpp",
|
"vabstractvalapplication.cpp",
|
||||||
"projectversion.cpp",
|
"vabstractapplication.cpp",
|
||||||
"vcommonsettings.cpp",
|
"projectversion.cpp",
|
||||||
"vvalentinasettings.cpp",
|
"vcommonsettings.cpp",
|
||||||
"commandoptions.cpp",
|
"vvalentinasettings.cpp",
|
||||||
"qxtcsvmodel.cpp",
|
"commandoptions.cpp",
|
||||||
"vtablesearch.cpp",
|
"qxtcsvmodel.cpp",
|
||||||
"literals.cpp",
|
"vtablesearch.cpp",
|
||||||
"vmodifierkey.cpp",
|
"literals.cpp",
|
||||||
"compatibility.h",
|
"vmodifierkey.cpp",
|
||||||
"lambdaconstants.h",
|
"compatibility.h",
|
||||||
"def.h",
|
"lambdaconstants.h",
|
||||||
"testpath.h",
|
"def.h",
|
||||||
"vabstractvalapplication.h",
|
"testpath.h",
|
||||||
"vmath.h",
|
"vabstractvalapplication.h",
|
||||||
"vabstractapplication.h",
|
"vmath.h",
|
||||||
"projectversion.h",
|
"vabstractapplication.h",
|
||||||
"vcommonsettings.h",
|
"projectversion.h",
|
||||||
"vvalentinasettings.h",
|
"vcommonsettings.h",
|
||||||
"debugbreak.h",
|
"vvalentinasettings.h",
|
||||||
"vlockguard.h",
|
"debugbreak.h",
|
||||||
"vsysexits.h",
|
"vlockguard.h",
|
||||||
"commandoptions.h",
|
"vsysexits.h",
|
||||||
"qxtcsvmodel.h",
|
"commandoptions.h",
|
||||||
"vtablesearch.h",
|
"qxtcsvmodel.h",
|
||||||
"diagnostic.h",
|
"vtablesearch.h",
|
||||||
"customevents.h",
|
"diagnostic.h",
|
||||||
"defglobal.h",
|
"customevents.h",
|
||||||
"testvapplication.h",
|
"defglobal.h",
|
||||||
"literals.h",
|
"testvapplication.h",
|
||||||
"qt_dispatch/qt_dispatch.h",
|
"literals.h",
|
||||||
"vdatastreamenum.h",
|
"qt_dispatch/qt_dispatch.h",
|
||||||
"vmodifierkey.h",
|
"vdatastreamenum.h",
|
||||||
"typedef.h",
|
"vmodifierkey.h",
|
||||||
]
|
"typedef.h",
|
||||||
|
]
|
||||||
|
|
||||||
|
if (Utilities.versionCompare(Qt.core.version, "6") >= 0) {
|
||||||
|
files.push("vtextcodec.cpp", "vtextcodec.h");
|
||||||
|
}
|
||||||
|
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
Group {
|
Group {
|
||||||
name: "AppImage"
|
name: "AppImage"
|
||||||
|
|
174
src/libs/vmisc/vtextcodec.cpp
Normal file
174
src/libs/vmisc/vtextcodec.cpp
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
/************************************************************************
|
||||||
|
**
|
||||||
|
** @file vtextcodec.cpp
|
||||||
|
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||||
|
** @date 11 2, 2023
|
||||||
|
**
|
||||||
|
** @brief
|
||||||
|
** @copyright
|
||||||
|
** This source code is part of the Valentina project, a pattern making
|
||||||
|
** program, whose allow create and modeling patterns of clothing.
|
||||||
|
** Copyright (C) 2023 Valentina project
|
||||||
|
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
|
||||||
|
**
|
||||||
|
** Valentina is free software: you can redistribute it and/or modify
|
||||||
|
** it under the terms of the GNU General Public License as published by
|
||||||
|
** the Free Software Foundation, either version 3 of the License, or
|
||||||
|
** (at your option) any later version.
|
||||||
|
**
|
||||||
|
** Valentina is distributed in the hope that it will be useful,
|
||||||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
** GNU General Public License for more details.
|
||||||
|
**
|
||||||
|
** You should have received a copy of the GNU General Public License
|
||||||
|
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
**
|
||||||
|
*************************************************************************/
|
||||||
|
#include "vtextcodec.h"
|
||||||
|
|
||||||
|
#include <QMap>
|
||||||
|
#include <QStringConverter>
|
||||||
|
|
||||||
|
#include "vabstractapplication.h"
|
||||||
|
#include "compatibility.h"
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto QtCodecs() -> QMap<QStringConverter::Encoding, QStringList>
|
||||||
|
{
|
||||||
|
static auto codecs = QMap<QStringConverter::Encoding, QStringList>
|
||||||
|
{
|
||||||
|
{QStringConverter::Latin1, {"ISO-8859-1", "ANSI_1252", "CP1252", "windows-1252", "LATIN1", "CP819", "CSISO",
|
||||||
|
"IBM819", "ISO_8859-1", "APPLE ROMAN", "ISO8859-1", "ISO8859-15", "ISO-IR-100", "L1", "IBM 850",
|
||||||
|
"850"}}, // Western Europe
|
||||||
|
{QStringConverter::Utf8, {"UTF-8", "UTF8", "UTF8-BIT"}},
|
||||||
|
{QStringConverter::Utf16, {"UTF-16", "UTF16", "UTF16-BIT"}},
|
||||||
|
{QStringConverter::Utf16BE, {"UTF-16BE"}},
|
||||||
|
{QStringConverter::Utf16LE, {"UTF-16LE"}},
|
||||||
|
{QStringConverter::Utf32, {"UTF-32"}},
|
||||||
|
{QStringConverter::Utf32BE, {"UTF-32BE"}},
|
||||||
|
{QStringConverter::Utf32LE, {"UTF-32LE"}},
|
||||||
|
{QStringConverter::System, {"System"}},
|
||||||
|
};
|
||||||
|
|
||||||
|
return codecs;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto CodecMibs() -> QMap<QStringConverter::Encoding, int>
|
||||||
|
{
|
||||||
|
static auto mibs = QMap<QStringConverter::Encoding, int>
|
||||||
|
{
|
||||||
|
{QStringConverter::Utf8, 106},
|
||||||
|
{QStringConverter::Utf16, 1015},
|
||||||
|
{QStringConverter::Utf16BE, 1013},
|
||||||
|
{QStringConverter::Utf16LE, 1014},
|
||||||
|
{QStringConverter::Utf32, 1017},
|
||||||
|
{QStringConverter::Utf32BE, 1018},
|
||||||
|
{QStringConverter::Utf32LE, 1019},
|
||||||
|
{QStringConverter::Latin1, 4},
|
||||||
|
{QStringConverter::System, 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
return mibs;
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
VTextCodec::VTextCodec(QStringConverter::Encoding encoding)
|
||||||
|
: m_encoding(encoding)
|
||||||
|
{}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::codecForName(const QString &name) -> VTextCodec *
|
||||||
|
{
|
||||||
|
QMap<QStringConverter::Encoding, QStringList> codecs = QtCodecs();
|
||||||
|
|
||||||
|
auto i = codecs.constBegin();
|
||||||
|
while (i != codecs.constEnd())
|
||||||
|
{
|
||||||
|
QStringList aliases = i.value();
|
||||||
|
if (aliases.contains(name))
|
||||||
|
{
|
||||||
|
return MakeCodec(i.key());
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::codecForLocale() -> VTextCodec *
|
||||||
|
{
|
||||||
|
return MakeCodec(QStringConverter::System);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::codecForMib(int mib) -> VTextCodec *
|
||||||
|
{
|
||||||
|
QMap<QStringConverter::Encoding, int> mibs = CodecMibs();
|
||||||
|
|
||||||
|
auto i = mibs.constBegin();
|
||||||
|
while (i != mibs.constEnd())
|
||||||
|
{
|
||||||
|
if (mib == i.value())
|
||||||
|
{
|
||||||
|
return MakeCodec(i.key());
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::availableMibs() -> QList<int>
|
||||||
|
{
|
||||||
|
return CodecMibs().values();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::availableCodecs() -> QList<QByteArray>
|
||||||
|
{
|
||||||
|
QMap<QStringConverter::Encoding, QStringList> codecs = QtCodecs();
|
||||||
|
|
||||||
|
QList<QByteArray> names;
|
||||||
|
names.reserve(codecs.size());
|
||||||
|
|
||||||
|
auto i = codecs.constBegin();
|
||||||
|
while (i != codecs.constEnd())
|
||||||
|
{
|
||||||
|
names.append(ConstFirst(i.value()).toLatin1());
|
||||||
|
}
|
||||||
|
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::name() const -> QString
|
||||||
|
{
|
||||||
|
return ConstFirst(QtCodecs().value(m_encoding));
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::mibEnum() const -> int
|
||||||
|
{
|
||||||
|
return CodecMibs().value(m_encoding, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
auto VTextCodec::MakeCodec(QStringConverter::Encoding encoding) -> VTextCodec *
|
||||||
|
{
|
||||||
|
VTextCodec *codec = VAbstractApplication::VApp()->TextCodecCache(encoding);
|
||||||
|
if (codec != nullptr)
|
||||||
|
{
|
||||||
|
return codec;
|
||||||
|
}
|
||||||
|
|
||||||
|
codec = new VTextCodec(encoding);
|
||||||
|
VAbstractApplication::VApp()->CacheTextCodec(encoding, codec);
|
||||||
|
return codec;
|
||||||
|
}
|
78
src/libs/vmisc/vtextcodec.h
Normal file
78
src/libs/vmisc/vtextcodec.h
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
/************************************************************************
|
||||||
|
**
|
||||||
|
** @file vtextcodec.h
|
||||||
|
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||||
|
** @date 11 2, 2023
|
||||||
|
**
|
||||||
|
** @brief
|
||||||
|
** @copyright
|
||||||
|
** This source code is part of the Valentina project, a pattern making
|
||||||
|
** program, whose allow create and modeling patterns of clothing.
|
||||||
|
** Copyright (C) 2023 Valentina project
|
||||||
|
** <https://gitlab.com/smart-pattern/valentina> All Rights Reserved.
|
||||||
|
**
|
||||||
|
** Valentina is free software: you can redistribute it and/or modify
|
||||||
|
** it under the terms of the GNU General Public License as published by
|
||||||
|
** the Free Software Foundation, either version 3 of the License, or
|
||||||
|
** (at your option) any later version.
|
||||||
|
**
|
||||||
|
** Valentina is distributed in the hope that it will be useful,
|
||||||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
** GNU General Public License for more details.
|
||||||
|
**
|
||||||
|
** You should have received a copy of the GNU General Public License
|
||||||
|
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
**
|
||||||
|
*************************************************************************/
|
||||||
|
#ifndef VTEXTCODEC_H
|
||||||
|
#define VTEXTCODEC_H
|
||||||
|
|
||||||
|
class VTextCodec
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~VTextCodec() = default;
|
||||||
|
|
||||||
|
static auto codecForName(const QString &name) -> VTextCodec *;
|
||||||
|
static auto codecForLocale() -> VTextCodec *;
|
||||||
|
static auto codecForMib(int mib) -> VTextCodec *;
|
||||||
|
static auto availableMibs() -> QList<int>;
|
||||||
|
static auto availableCodecs() -> QList<QByteArray>;
|
||||||
|
|
||||||
|
auto fromUnicode(const QString &str) const -> QByteArray;
|
||||||
|
auto toUnicode(const char *chars) const -> QString;
|
||||||
|
|
||||||
|
auto name() const -> QString;
|
||||||
|
auto mibEnum() const -> int;
|
||||||
|
|
||||||
|
auto Encoding() const -> QStringConverter::Encoding;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
explicit VTextCodec(QStringConverter::Encoding encoding);
|
||||||
|
private:
|
||||||
|
Q_DISABLE_COPY_MOVE(VTextCodec) // NOLINT
|
||||||
|
|
||||||
|
QStringConverter::Encoding m_encoding{QStringConverter::Utf8};
|
||||||
|
|
||||||
|
static auto MakeCodec(QStringConverter::Encoding encoding) -> VTextCodec *;
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
inline auto VTextCodec::Encoding() const -> QStringConverter::Encoding
|
||||||
|
{
|
||||||
|
return m_encoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
inline auto VTextCodec::fromUnicode(const QString &str) const -> QByteArray
|
||||||
|
{
|
||||||
|
return QStringEncoder(m_encoding)(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
inline auto VTextCodec::toUnicode(const char *chars) const -> QString
|
||||||
|
{
|
||||||
|
return QStringDecoder(m_encoding)(chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // VTEXTCODEC_H
|
|
@ -69,7 +69,11 @@ QChar VPELocaleSign0(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'0'};
|
return {'0'};
|
||||||
|
#else
|
||||||
|
return QChar('0');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -81,7 +85,11 @@ QChar VPELocaleSign1(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'1'};
|
return {'1'};
|
||||||
|
#else
|
||||||
|
return QChar('1');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -93,7 +101,11 @@ QChar VPELocaleSign2(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'2'};
|
return {'2'};
|
||||||
|
#else
|
||||||
|
return QChar('2');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -105,7 +117,11 @@ QChar VPELocaleSign3(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'3'};
|
return {'3'};
|
||||||
|
#else
|
||||||
|
return QChar('3');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -117,7 +133,11 @@ QChar VPELocaleSign4(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'4'};
|
return {'4'};
|
||||||
|
#else
|
||||||
|
return QChar('4');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -129,7 +149,11 @@ QChar VPELocaleSign5(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'5'};
|
return {'5'};
|
||||||
|
#else
|
||||||
|
return QChar('5');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -141,7 +165,11 @@ QChar VPELocaleSign6(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'6'};
|
return {'6'};
|
||||||
|
#else
|
||||||
|
return QChar('6');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -153,7 +181,11 @@ QChar VPELocaleSign7(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'7'};
|
return {'7'};
|
||||||
|
#else
|
||||||
|
return QChar('7');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -165,7 +197,11 @@ QChar VPELocaleSign8(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'8'};
|
return {'8'};
|
||||||
|
#else
|
||||||
|
return QChar('8');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -177,7 +213,11 @@ QChar VPELocaleSign9(const QLocale &locale)
|
||||||
return sign.front();
|
return sign.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
return {'9'};
|
return {'9'};
|
||||||
|
#else
|
||||||
|
return QChar('9');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
#include "tst_dxf.h"
|
#include "tst_dxf.h"
|
||||||
|
|
||||||
#include <QTextCodec>
|
|
||||||
#include <QtTest>
|
#include <QtTest>
|
||||||
|
|
||||||
#include "../vmisc/def.h"
|
#include "../vmisc/def.h"
|
||||||
|
@ -35,6 +34,12 @@
|
||||||
#include "../vdxf/dxfdef.h"
|
#include "../vdxf/dxfdef.h"
|
||||||
#include "../vdxf/libdxfrw/intern/drw_textcodec.h"
|
#include "../vdxf/libdxfrw/intern/drw_textcodec.h"
|
||||||
|
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include "../vmisc/vtextcodec.h"
|
||||||
|
#else
|
||||||
|
#include <QTextCodec>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
||||||
#include "../vmisc/backport/text.h"
|
#include "../vmisc/backport/text.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,7 +49,7 @@ namespace
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QStringList AvailableCodecs()
|
QStringList AvailableCodecs()
|
||||||
{
|
{
|
||||||
QList<QByteArray> codecs = QTextCodec::availableCodecs();
|
QList<QByteArray> codecs = VTextCodec::availableCodecs();
|
||||||
QSet<QString> uniqueNames;
|
QSet<QString> uniqueNames;
|
||||||
for(auto &codec: codecs)
|
for(auto &codec: codecs)
|
||||||
{
|
{
|
||||||
|
@ -53,7 +58,7 @@ QStringList AvailableCodecs()
|
||||||
|
|
||||||
return ConvertToList(uniqueNames);
|
return ConvertToList(uniqueNames);
|
||||||
}
|
}
|
||||||
}
|
} // namespace
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
TST_DXF::TST_DXF(QObject *parent)
|
TST_DXF::TST_DXF(QObject *parent)
|
||||||
|
@ -113,7 +118,7 @@ void TST_DXF::TestCodecPage()
|
||||||
|
|
||||||
QVERIFY (not dxfCodePage.isEmpty());
|
QVERIFY (not dxfCodePage.isEmpty());
|
||||||
|
|
||||||
QTextCodec *codec = DRW_TextCodec::CodecForName(dxfCodePage);
|
VTextCodec *codec = DRW_TextCodec::CodecForName(dxfCodePage);
|
||||||
|
|
||||||
QVERIFY2(codec != nullptr, qUtf8Printable(QStringLiteral("No codec for dxf codepage %1 found.")
|
QVERIFY2(codec != nullptr, qUtf8Printable(QStringLiteral("No codec for dxf codepage %1 found.")
|
||||||
.arg(dxfCodePage)));
|
.arg(dxfCodePage)));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user