1 /**************************************************************************** 2 ** 3 ** DQt - D bindings for the Qt Toolkit 4 ** 5 ** GNU Lesser General Public License Usage 6 ** This file may be used under the terms of the GNU Lesser 7 ** General Public License version 3 as published by the Free Software 8 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 9 ** packaging of this file. Please review the following information to 10 ** ensure the GNU Lesser General Public License version 3 requirements 11 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 12 ** 13 ****************************************************************************/ 14 module qt.core.textcodec; 15 extern(C++): 16 17 import qt.config; 18 import qt.core.bytearray; 19 import qt.core.flags; 20 import qt.core.list; 21 import qt.core.qchar; 22 import qt.core.string; 23 import qt.core.stringview; 24 import qt.helpers; 25 26 /+ QT_REQUIRE_CONFIG(textcodec); 27 28 29 class QTextCodec; 30 class QIODevice; 31 32 class QTextDecoder; 33 class QTextEncoder; +/ 34 35 class /+ Q_CORE_EXPORT +/ QTextCodec 36 { 37 private: 38 /+ Q_DISABLE_COPY(QTextCodec) +/ 39 public: 40 static QTextCodec codecForName(ref const(QByteArray) name); 41 static QTextCodec codecForName(const(char)* name) { auto tmp = QByteArray(name); return codecForName(tmp); } 42 static QTextCodec codecForMib(int mib); 43 44 static QList!(QByteArray) availableCodecs(); 45 static QList!(int) availableMibs(); 46 47 static QTextCodec codecForLocale(); 48 static void setCodecForLocale(QTextCodec c); 49 50 /+ #if QT_DEPRECATED_SINCE(5, 0) 51 QT_DEPRECATED static QTextCodec *codecForTr() { return codecForMib(106); /* Utf8 */ } 52 #endif +/ 53 54 static QTextCodec codecForHtml(ref const(QByteArray) ba); 55 static QTextCodec codecForHtml(ref const(QByteArray) ba, QTextCodec defaultCodec); 56 57 static QTextCodec codecForUtfText(ref const(QByteArray) ba); 58 static QTextCodec codecForUtfText(ref const(QByteArray) ba, QTextCodec defaultCodec); 59 60 final bool canEncode(QChar) const; 61 static if(QT_STRINGVIEW_LEVEL < 2) 62 { 63 final bool canEncode(ref const(QString)) const; 64 } 65 final bool canEncode(QStringView) const; 66 67 final QString toUnicode(ref const(QByteArray)) const; 68 final QString toUnicode(const(char)* chars) const; 69 static if(QT_STRINGVIEW_LEVEL < 2) 70 { 71 final QByteArray fromUnicode(ref const(QString) uc) const; 72 } 73 final QByteArray fromUnicode(QStringView uc) const; 74 enum ConversionFlag { 75 DefaultConversion, 76 ConvertInvalidToNull = 0x80000000, 77 IgnoreHeader = 0x1, 78 FreeFunction = 0x2 79 } 80 /+ Q_DECLARE_FLAGS(ConversionFlags, ConversionFlag) +/ 81 alias ConversionFlags = QFlags!(ConversionFlag); 82 struct /+ Q_CORE_EXPORT +/ ConverterState { 83 this(ConversionFlags f/+ = ConversionFlag.DefaultConversion+/) 84 { 85 this.flags = f; 86 this.remainingChars = 0; 87 this.invalidChars = 0; 88 this.d = null; 89 state_data[0] = state_data[1] = state_data[2] = 0; 90 } 91 ~this(); 92 ConversionFlags flags = ConversionFlag.DefaultConversion; 93 int remainingChars = 0; 94 int invalidChars = 0; 95 uint[3] state_data = [0, 0, 0]; 96 void* d = null; 97 private: 98 /+ Q_DISABLE_COPY(ConverterState) +/ 99 @disable this(this); 100 /+this(ref const(ConverterState));+//+ref ConverterState operator =(ref const(ConverterState));+/ } 101 102 final QString toUnicode(const(char)* in_, int length, ConverterState* state = null) const 103 { return convertToUnicode(in_, length, state); } 104 final QByteArray fromUnicode(const(QChar)* in_, int length, ConverterState* state = null) const 105 { return convertFromUnicode(in_, length, state); } 106 107 final QTextDecoder* makeDecoder(ConversionFlags flags = ConversionFlag.DefaultConversion) const; 108 final QTextEncoder* makeEncoder(ConversionFlags flags = ConversionFlag.DefaultConversion) const; 109 110 /+ virtual +/ abstract QByteArray name() const; 111 /+ virtual +/ QList!(QByteArray) aliases() const; 112 /+ virtual +/ abstract int mibEnum() const; 113 114 protected: 115 /+ virtual +/ abstract QString convertToUnicode(const(char)* in_, int length, ConverterState* state) const; 116 /+ virtual +/ abstract QByteArray convertFromUnicode(const(QChar)* in_, int length, ConverterState* state) const; 117 118 this(); 119 /*public*/ /+ virtual +/~this(); 120 121 private: 122 /+ friend struct QCoreGlobalData; +/ 123 } 124 /+pragma(inline, true) QFlags!(QTextCodec.ConversionFlags.enum_type) operator |(QTextCodec.ConversionFlags.enum_type f1, QTextCodec.ConversionFlags.enum_type f2)/+noexcept+/{return QFlags!(QTextCodec.ConversionFlags.enum_type)(f1)|f2;}+/ 125 /+pragma(inline, true) QFlags!(QTextCodec.ConversionFlags.enum_type) operator |(QTextCodec.ConversionFlags.enum_type f1, QFlags!(QTextCodec.ConversionFlags.enum_type) f2)/+noexcept+/{return f2|f1;}+/ 126 /+pragma(inline, true) QIncompatibleFlag operator |(QTextCodec.ConversionFlags.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/ 127 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QTextCodec::ConversionFlags) +/ 128 extern(C++, class) struct /+ Q_CORE_EXPORT +/ QTextEncoder { 129 private: 130 /+ Q_DISABLE_COPY(QTextEncoder) +/ 131 @disable this(this); 132 /+this(ref const(QTextEncoder));+//+ref QTextEncoder operator =(ref const(QTextEncoder));+/public: 133 /+ explicit +/this(const(QTextCodec) codec) 134 { 135 this.c = codec; 136 this.state = typeof(this.state)(); 137 } 138 /+ explicit +/this(const(QTextCodec) codec, QTextCodec.ConversionFlags flags); 139 ~this(); 140 static if(QT_STRINGVIEW_LEVEL < 2) 141 { 142 QByteArray fromUnicode(ref const(QString) str); 143 } 144 QByteArray fromUnicode(QStringView str); 145 QByteArray fromUnicode(const(QChar)* uc, int len); 146 bool hasFailure() const; 147 private: 148 const(QTextCodec) c; 149 QTextCodec.ConverterState state; 150 } 151 152 extern(C++, class) struct /+ Q_CORE_EXPORT +/ QTextDecoder { 153 private: 154 /+ Q_DISABLE_COPY(QTextDecoder) +/ 155 @disable this(this); 156 /+this(ref const(QTextDecoder));+//+ref QTextDecoder operator =(ref const(QTextDecoder));+/public: 157 /+ explicit +/this(const(QTextCodec) codec) 158 { 159 this.c = codec; 160 this.state = typeof(this.state)(); 161 } 162 /+ explicit +/this(const(QTextCodec) codec, QTextCodec.ConversionFlags flags); 163 ~this(); 164 QString toUnicode(const(char)* chars, int len); 165 QString toUnicode(ref const(QByteArray) ba); 166 void toUnicode(QString* target, const(char)* chars, int len); 167 bool hasFailure() const; 168 bool needsMoreData() const; 169 private: 170 const(QTextCodec) c; 171 QTextCodec.ConverterState state; 172 } 173