qtsciicodec.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/corelib/codecs/qtsciicodec.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtCore module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34// Most of the code here was originally written by Hans Petter Bieker,-
35// and is included in Qt with the author's permission, and the grateful-
36// thanks of the Qt team.-
37-
38#include "qtsciicodec_p.h"-
39#include "qlist.h"-
40-
41#ifndef QT_NO_CODECS-
42-
43QT_BEGIN_NAMESPACE-
44-
45static unsigned char qt_UnicodeToTSCII(ushort u1, ushort u2, ushort u3);-
46static unsigned int qt_TSCIIToUnicode(unsigned int code, uint *s);-
47-
48#define IsTSCIIChar(c) (((c) >= 0x80) && ((c) <= 0xfd))-
49-
50/*! \class QTsciiCodec-
51 \inmodule QtCore-
52 \reentrant-
53 \internal-
54*/-
55-
56/*!-
57 Destroys the text codec object.-
58*/-
59QTsciiCodec::~QTsciiCodec()-
60{-
61}-
62-
63/*!-
64 Converts the first \a len characters in \a uc from Unicode to this-
65 encoding, and returns the result in a byte array. The \a state contains-
66 some conversion flags, and is used by the codec to maintain state-
67 information.-
68*/-
69QByteArray QTsciiCodec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const-
70{-
71 char replacement = '?';-
72 if (state) {
stateDescription
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QTextCodec
0-3
73 if (state->flags & ConvertInvalidToNull)
state->flags &...tInvalidToNullDescription
TRUEnever evaluated
FALSEnever evaluated
0
74 replacement = 0;
never executed: replacement = 0;
0
75 }
never executed: end of block
0
76 int invalid = 0;-
77-
78 QByteArray rstr(len, Qt::Uninitialized);-
79 uchar* cursor = (uchar*)rstr.data();-
80 for (int i = 0; i < len; i++) {
i < lenDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_QTextCodec
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QTextCodec
3-12
81 QChar ch = uc[i];-
82 uchar j;-
83 if (ch.row() == 0x00 && ch.cell() < 0x80) {
ch.row() == 0x00Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_QTextCodec
FALSEnever evaluated
ch.cell() < 0x80Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_QTextCodec
FALSEnever evaluated
0-12
84 // ASCII-
85 j = ch.cell();-
86 } else if ((j = qt_UnicodeToTSCII(uc[i].unicode(),
executed 12 times by 1 test: end of block
Executed by:
  • tst_QTextCodec
(j = qt_Unicod...2].unicode()))Description
TRUEnever evaluated
FALSEnever evaluated
0-12
87 uc[i + 1].unicode(),
(j = qt_Unicod...2].unicode()))Description
TRUEnever evaluated
FALSEnever evaluated
0
88 uc[i + 2].unicode()))) {
(j = qt_Unicod...2].unicode()))Description
TRUEnever evaluated
FALSEnever evaluated
0
89 // We have to check the combined chars first!-
90 i += 2;-
91 } else if ((j = qt_UnicodeToTSCII(uc[i].unicode(),
never executed: end of block
(j = qt_Unicod...unicode(), 0))Description
TRUEnever evaluated
FALSEnever evaluated
0
92 uc[i + 1].unicode(), 0))) {
(j = qt_Unicod...unicode(), 0))Description
TRUEnever evaluated
FALSEnever evaluated
0
93 i++;-
94 } else if ((j = qt_UnicodeToTSCII(uc[i].unicode(), 0, 0))) {
never executed: end of block
(j = qt_Unicod...code(), 0, 0))Description
TRUEnever evaluated
FALSEnever evaluated
0
95 } else {
never executed: end of block
0
96 // Error-
97 j = replacement;-
98 ++invalid;-
99 }
never executed: end of block
0
100 *cursor++ = j;-
101 }
executed 12 times by 1 test: end of block
Executed by:
  • tst_QTextCodec
12
102 rstr.resize(cursor - (const uchar*)rstr.constData());-
103-
104 if (state) {
stateDescription
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • tst_QTextCodec
0-3
105 state->invalidChars += invalid;-
106 }
never executed: end of block
0
107 return rstr;
executed 3 times by 1 test: return rstr;
Executed by:
  • tst_QTextCodec
3
108}-
109-
110/*!-
111 Converts the first \a len characters in \a chars from this encoding-
112 to Unicode, and returns the result in a QString. The \a state contains-
113 some conversion flags, and is used by the codec to maintain state-
114 information.-
115*/-
116QString QTsciiCodec::convertToUnicode(const char* chars, int len, ConverterState *state) const-
117{-
118 QChar replacement = QChar::ReplacementCharacter;-
119 if (state) {
stateDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QTextCodec
0-2
120 if (state->flags & ConvertInvalidToNull)
state->flags &...tInvalidToNullDescription
TRUEnever evaluated
FALSEnever evaluated
0
121 replacement = QChar::Null;
never executed: replacement = QChar::Null;
0
122 }
never executed: end of block
0
123 int invalid = 0;-
124-
125 QString result;-
126 for (int i = 0; i < len; i++) {
i < lenDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • tst_QTextCodec
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QTextCodec
2-9
127 uchar ch = chars[i];-
128 if (ch < 0x80) {
ch < 0x80Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • tst_QTextCodec
FALSEnever evaluated
0-9
129 // ASCII-
130 result += QLatin1Char(ch);-
131 } else if (IsTSCIIChar(ch)) {
executed 9 times by 1 test: end of block
Executed by:
  • tst_QTextCodec
((ch) >= 0x80)Description
TRUEnever evaluated
FALSEnever evaluated
((ch) <= 0xfd)Description
TRUEnever evaluated
FALSEnever evaluated
0-9
132 // TSCII-
133 uint s[3];-
134 uint u = qt_TSCIIToUnicode(ch, s);-
135 uint *p = s;-
136 while (u--) {
u--Description
TRUEnever evaluated
FALSEnever evaluated
0
137 uint c = *p++;-
138 if (c)
cDescription
TRUEnever evaluated
FALSEnever evaluated
0
139 result += QChar(c);
never executed: result += QChar(c);
0
140 else {-
141 result += replacement;-
142 ++invalid;-
143 }
never executed: end of block
0
144 }-
145 } else {
never executed: end of block
0
146 // Invalid-
147 result += replacement;-
148 ++invalid;-
149 }
never executed: end of block
0
150 }-
151-
152 if (state) {
stateDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QTextCodec
0-2
153 state->invalidChars += invalid;-
154 }
never executed: end of block
0
155 return result;
executed 2 times by 1 test: return result;
Executed by:
  • tst_QTextCodec
2
156}-
157-
158/*!-
159 Returns the official name for the encoding that is handled by the codec.-
160-
161 \sa QTextCodec::name()-
162*/-
163QByteArray QTsciiCodec::name() const-
164{-
165 return "TSCII";
executed 27 times by 1 test: return "TSCII";
Executed by:
  • tst_QTextCodec
27
166}-
167-
168/*!-
169 Returns the MIB enum for the encoding.-
170-
171 \sa QTextCodec::mibEnum()-
172*/-
173int QTsciiCodec::mibEnum() const-
174{-
175 return 2107;
executed 113 times by 1 test: return 2107;
Executed by:
  • tst_QTextCodec
113
176}-
177-
178static const int UnToTsLast = 124; // 125 items -- so the last will be 124-
179static const ushort UnToTs [][4] = {-
180 // *Sorted* list of TSCII maping for unicode chars-
181 //FIRST SECOND THIRD TSCII-
182 {0x00A0, 0x0000, 0x0000, 0xA0},-
183 {0x00A9, 0x0000, 0x0000, 0xA9},-
184 {0x0B83, 0x0000, 0x0000, 0xB7},-
185 {0x0B85, 0x0000, 0x0000, 0xAB},-
186 {0x0B86, 0x0000, 0x0000, 0xAC},-
187 {0x0B87, 0x0000, 0x0000, 0xAD},-
188 {0x0B88, 0x0000, 0x0000, 0xAE},-
189 {0x0B89, 0x0000, 0x0000, 0xAF},-
190 {0x0B8A, 0x0000, 0x0000, 0xB0},-
191 {0x0B8E, 0x0000, 0x0000, 0xB1},-
192 {0x0B8F, 0x0000, 0x0000, 0xB2},-
193 {0x0B90, 0x0000, 0x0000, 0xB3},-
194 {0x0B92, 0x0000, 0x0000, 0xB4},-
195 {0x0B93, 0x0000, 0x0000, 0xB5},-
196 {0x0B94, 0x0000, 0x0000, 0xB6},-
197 {0x0B95, 0x0000, 0x0000, 0xB8},-
198 {0x0B95, 0x0B82, 0x0000, 0xEC},-
199 {0x0B95, 0x0BC1, 0x0000, 0xCC},-
200 {0x0B95, 0x0BC2, 0x0000, 0xDC},-
201 {0x0B99, 0x0000, 0x0000, 0xB9},-
202 {0x0B99, 0x0B82, 0x0000, 0xED},-
203 {0x0B99, 0x0BC1, 0x0000, 0x99},-
204 {0x0B99, 0x0BC2, 0x0000, 0x9B},-
205 {0x0B9A, 0x0000, 0x0000, 0xBA},-
206 {0x0B9A, 0x0B82, 0x0000, 0xEE},-
207 {0x0B9A, 0x0BC1, 0x0000, 0xCD},-
208 {0x0B9A, 0x0BC2, 0x0000, 0xDD},-
209 {0x0B9C, 0x0000, 0x0000, 0x83},-
210 {0x0B9C, 0x0B82, 0x0000, 0x88},-
211 {0x0B9E, 0x0000, 0x0000, 0xBB},-
212 {0x0B9E, 0x0B82, 0x0000, 0xEF},-
213 {0x0B9E, 0x0BC1, 0x0000, 0x9A},-
214 {0x0B9E, 0x0BC2, 0x0000, 0x9C},-
215 {0x0B9F, 0x0000, 0x0000, 0xBC},-
216 {0x0B9F, 0x0B82, 0x0000, 0xF0},-
217 {0x0B9F, 0x0BBF, 0x0000, 0xCA},-
218 {0x0B9F, 0x0BC0, 0x0000, 0xCB},-
219 {0x0B9F, 0x0BC1, 0x0000, 0xCE},-
220 {0x0B9F, 0x0BC2, 0x0000, 0xDE},-
221 {0x0BA1, 0x0B82, 0x0000, 0xF2},-
222 {0x0BA3, 0x0000, 0x0000, 0xBD},-
223 {0x0BA3, 0x0B82, 0x0000, 0xF1},-
224 {0x0BA3, 0x0BC1, 0x0000, 0xCF},-
225 {0x0BA3, 0x0BC2, 0x0000, 0xDF},-
226 {0x0BA4, 0x0000, 0x0000, 0xBE},-
227 {0x0BA4, 0x0BC1, 0x0000, 0xD0},-
228 {0x0BA4, 0x0BC2, 0x0000, 0xE0},-
229 {0x0BA8, 0x0000, 0x0000, 0xBF},-
230 {0x0BA8, 0x0B82, 0x0000, 0xF3},-
231 {0x0BA8, 0x0BC1, 0x0000, 0xD1},-
232 {0x0BA8, 0x0BC2, 0x0000, 0xE1},-
233 {0x0BA9, 0x0000, 0x0000, 0xC9},-
234 {0x0BA9, 0x0B82, 0x0000, 0xFD},-
235 {0x0BA9, 0x0BC1, 0x0000, 0xDB},-
236 {0x0BA9, 0x0BC2, 0x0000, 0xEB},-
237 {0x0BAA, 0x0000, 0x0000, 0xC0},-
238 {0x0BAA, 0x0B82, 0x0000, 0xF4},-
239 {0x0BAA, 0x0BC1, 0x0000, 0xD2},-
240 {0x0BAA, 0x0BC2, 0x0000, 0xE2},-
241 {0x0BAE, 0x0000, 0x0000, 0xC1},-
242 {0x0BAE, 0x0B82, 0x0000, 0xF5},-
243 {0x0BAE, 0x0BC1, 0x0000, 0xD3},-
244 {0x0BAE, 0x0BC2, 0x0000, 0xE3},-
245 {0x0BAF, 0x0000, 0x0000, 0xC2},-
246 {0x0BAF, 0x0B82, 0x0000, 0xF6},-
247 {0x0BAF, 0x0BC1, 0x0000, 0xD4},-
248 {0x0BAF, 0x0BC2, 0x0000, 0xE4},-
249 {0x0BB0, 0x0000, 0x0000, 0xC3},-
250 {0x0BB0, 0x0B82, 0x0000, 0xF7},-
251 {0x0BB0, 0x0BC1, 0x0000, 0xD5},-
252 {0x0BB0, 0x0BC2, 0x0000, 0xE5},-
253 {0x0BB1, 0x0000, 0x0000, 0xC8},-
254 {0x0BB1, 0x0B82, 0x0000, 0xFC},-
255 {0x0BB1, 0x0BC1, 0x0000, 0xDA},-
256 {0x0BB1, 0x0BC2, 0x0000, 0xEA},-
257 {0x0BB2, 0x0000, 0x0000, 0xC4},-
258 {0x0BB2, 0x0B82, 0x0000, 0xF8},-
259 {0x0BB2, 0x0BC1, 0x0000, 0xD6},-
260 {0x0BB2, 0x0BC2, 0x0000, 0xE6},-
261 {0x0BB3, 0x0000, 0x0000, 0xC7},-
262 {0x0BB3, 0x0B82, 0x0000, 0xFB},-
263 {0x0BB3, 0x0BC1, 0x0000, 0xD9},-
264 {0x0BB3, 0x0BC2, 0x0000, 0xE9},-
265 {0x0BB4, 0x0000, 0x0000, 0xC6},-
266 {0x0BB4, 0x0B82, 0x0000, 0xFA},-
267 {0x0BB4, 0x0BC1, 0x0000, 0xD8},-
268 {0x0BB4, 0x0BC2, 0x0000, 0xE8},-
269 {0x0BB5, 0x0000, 0x0000, 0xC5},-
270 {0x0BB5, 0x0B82, 0x0000, 0xF9},-
271 {0x0BB5, 0x0BC1, 0x0000, 0xD7},-
272 {0x0BB5, 0x0BC2, 0x0000, 0xE7},-
273 {0x0BB7, 0x0000, 0x0000, 0x84},-
274 {0x0BB7, 0x0B82, 0x0000, 0x89},-
275 {0x0BB8, 0x0000, 0x0000, 0x85},-
276 {0x0BB8, 0x0B82, 0x0000, 0x8A},-
277 {0x0BB9, 0x0000, 0x0000, 0x86},-
278 {0x0BB9, 0x0B82, 0x0000, 0x8B},-
279 {0x0BBE, 0x0000, 0x0000, 0xA1},-
280 {0x0BBF, 0x0000, 0x0000, 0xA2},-
281 {0x0BC0, 0x0000, 0x0000, 0xA3},-
282 {0x0BC1, 0x0000, 0x0000, 0xA4},-
283 {0x0BC2, 0x0000, 0x0000, 0xA5},-
284 {0x0BC6, 0x0000, 0x0000, 0xA6},-
285 {0x0BC7, 0x0000, 0x0000, 0xA7},-
286 {0x0BC8, 0x0000, 0x0000, 0xA8},-
287 {0x0BCC, 0x0000, 0x0000, 0xAA},-
288 {0x0BE6, 0x0000, 0x0000, 0x80},-
289 {0x0BE7, 0x0000, 0x0000, 0x81},-
290 {0x0BE7, 0x0BB7, 0x0000, 0x87},-
291 {0x0BE7, 0x0BB7, 0x0B82, 0x8C},-
292 {0x0BE8, 0x0000, 0x0000, 0x8D},-
293 {0x0BE9, 0x0000, 0x0000, 0x8E},-
294 {0x0BEA, 0x0000, 0x0000, 0x8F},-
295 {0x0BEB, 0x0000, 0x0000, 0x90},-
296 {0x0BEC, 0x0000, 0x0000, 0x95},-
297 {0x0BED, 0x0000, 0x0000, 0x96},-
298 {0x0BEE, 0x0000, 0x0000, 0x97},-
299 {0x0BEF, 0x0000, 0x0000, 0x98},-
300 {0x0BF0, 0x0000, 0x0000, 0x9D},-
301 {0x0BF1, 0x0000, 0x0000, 0x9E},-
302 {0x0BF2, 0x0000, 0x0000, 0x9F},-
303 {0x2018, 0x0000, 0x0000, 0x91},-
304 {0x2019, 0x0000, 0x0000, 0x92},-
305 {0x201C, 0x0000, 0x0000, 0x93},-
306 {0x201C, 0x0000, 0x0000, 0x94}-
307};-
308-
309static const ushort TsToUn [][3] = {-
310 // Starting at 0x80-
311 {0x0BE6, 0x0000, 0x0000},-
312 {0x0BE7, 0x0000, 0x0000},-
313 {0x0000, 0x0000, 0x0000}, // unknown-
314 {0x0B9C, 0x0000, 0x0000},-
315 {0x0BB7, 0x0000, 0x0000},-
316 {0x0BB8, 0x0000, 0x0000},-
317 {0x0BB9, 0x0000, 0x0000},-
318 {0x0BE7, 0x0BB7, 0x0000},-
319 {0x0B9C, 0x0B82, 0x0000},-
320 {0x0BB7, 0x0B82, 0x0000},-
321 {0x0BB8, 0x0B82, 0x0000},-
322 {0x0BB9, 0x0B82, 0x0000},-
323 {0x0BE7, 0x0BB7, 0x0B82},-
324 {0x0BE8, 0x0000, 0x0000},-
325 {0x0BE9, 0x0000, 0x0000},-
326 {0x0BEA, 0x0000, 0x0000},-
327 {0x0BEB, 0x0000, 0x0000},-
328 {0x2018, 0x0000, 0x0000},-
329 {0x2019, 0x0000, 0x0000},-
330 {0x201C, 0x0000, 0x0000},-
331 {0x201C, 0x0000, 0x0000}, // two of the same??-
332 {0x0BEC, 0x0000, 0x0000},-
333 {0x0BED, 0x0000, 0x0000},-
334 {0x0BEE, 0x0000, 0x0000},-
335 {0x0BEF, 0x0000, 0x0000},-
336 {0x0B99, 0x0BC1, 0x0000},-
337 {0x0B9E, 0x0BC1, 0x0000},-
338 {0x0B99, 0x0BC2, 0x0000},-
339 {0x0B9E, 0x0BC2, 0x0000},-
340 {0x0BF0, 0x0000, 0x0000},-
341 {0x0BF1, 0x0000, 0x0000},-
342 {0x0BF2, 0x0000, 0x0000},-
343 {0x00A0, 0x0000, 0x0000},-
344 {0x0BBE, 0x0000, 0x0000},-
345 {0x0BBF, 0x0000, 0x0000},-
346 {0x0BC0, 0x0000, 0x0000},-
347 {0x0BC1, 0x0000, 0x0000},-
348 {0x0BC2, 0x0000, 0x0000},-
349 {0x0BC6, 0x0000, 0x0000},-
350 {0x0BC7, 0x0000, 0x0000},-
351 {0x0BC8, 0x0000, 0x0000},-
352 {0x00A9, 0x0000, 0x0000},-
353 {0x0BCC, 0x0000, 0x0000},-
354 {0x0B85, 0x0000, 0x0000},-
355 {0x0B86, 0x0000, 0x0000},-
356 {0x0B87, 0x0000, 0x0000},-
357 {0x0B88, 0x0000, 0x0000},-
358 {0x0B89, 0x0000, 0x0000},-
359 {0x0B8A, 0x0000, 0x0000},-
360 {0x0B8E, 0x0000, 0x0000},-
361 {0x0B8F, 0x0000, 0x0000},-
362 {0x0B90, 0x0000, 0x0000},-
363 {0x0B92, 0x0000, 0x0000},-
364 {0x0B93, 0x0000, 0x0000},-
365 {0x0B94, 0x0000, 0x0000},-
366 {0x0B83, 0x0000, 0x0000},-
367 {0x0B95, 0x0000, 0x0000},-
368 {0x0B99, 0x0000, 0x0000},-
369 {0x0B9A, 0x0000, 0x0000},-
370 {0x0B9E, 0x0000, 0x0000},-
371 {0x0B9F, 0x0000, 0x0000},-
372 {0x0BA3, 0x0000, 0x0000},-
373 {0x0BA4, 0x0000, 0x0000},-
374 {0x0BA8, 0x0000, 0x0000},-
375 {0x0BAA, 0x0000, 0x0000},-
376 {0x0BAE, 0x0000, 0x0000},-
377 {0x0BAF, 0x0000, 0x0000},-
378 {0x0BB0, 0x0000, 0x0000},-
379 {0x0BB2, 0x0000, 0x0000},-
380 {0x0BB5, 0x0000, 0x0000},-
381 {0x0BB4, 0x0000, 0x0000},-
382 {0x0BB3, 0x0000, 0x0000},-
383 {0x0BB1, 0x0000, 0x0000},-
384 {0x0BA9, 0x0000, 0x0000},-
385 {0x0B9F, 0x0BBF, 0x0000},-
386 {0x0B9F, 0x0BC0, 0x0000},-
387 {0x0B95, 0x0BC1, 0x0000},-
388 {0x0B9A, 0x0BC1, 0x0000},-
389 {0x0B9F, 0x0BC1, 0x0000},-
390 {0x0BA3, 0x0BC1, 0x0000},-
391 {0x0BA4, 0x0BC1, 0x0000},-
392 {0x0BA8, 0x0BC1, 0x0000},-
393 {0x0BAA, 0x0BC1, 0x0000},-
394 {0x0BAE, 0x0BC1, 0x0000},-
395 {0x0BAF, 0x0BC1, 0x0000},-
396 {0x0BB0, 0x0BC1, 0x0000},-
397 {0x0BB2, 0x0BC1, 0x0000},-
398 {0x0BB5, 0x0BC1, 0x0000},-
399 {0x0BB4, 0x0BC1, 0x0000},-
400 {0x0BB3, 0x0BC1, 0x0000},-
401 {0x0BB1, 0x0BC1, 0x0000},-
402 {0x0BA9, 0x0BC1, 0x0000},-
403 {0x0B95, 0x0BC2, 0x0000},-
404 {0x0B9A, 0x0BC2, 0x0000},-
405 {0x0B9F, 0x0BC2, 0x0000},-
406 {0x0BA3, 0x0BC2, 0x0000},-
407 {0x0BA4, 0x0BC2, 0x0000},-
408 {0x0BA8, 0x0BC2, 0x0000},-
409 {0x0BAA, 0x0BC2, 0x0000},-
410 {0x0BAE, 0x0BC2, 0x0000},-
411 {0x0BAF, 0x0BC2, 0x0000},-
412 {0x0BB0, 0x0BC2, 0x0000},-
413 {0x0BB2, 0x0BC2, 0x0000},-
414 {0x0BB5, 0x0BC2, 0x0000},-
415 {0x0BB4, 0x0BC2, 0x0000},-
416 {0x0BB3, 0x0BC2, 0x0000},-
417 {0x0BB1, 0x0BC2, 0x0000},-
418 {0x0BA9, 0x0BC2, 0x0000},-
419 {0x0B95, 0x0B82, 0x0000},-
420 {0x0B99, 0x0B82, 0x0000},-
421 {0x0B9A, 0x0B82, 0x0000},-
422 {0x0B9E, 0x0B82, 0x0000},-
423 {0x0B9F, 0x0B82, 0x0000},-
424 {0x0BA3, 0x0B82, 0x0000},-
425 {0x0BA1, 0x0B82, 0x0000},-
426 {0x0BA8, 0x0B82, 0x0000},-
427 {0x0BAA, 0x0B82, 0x0000},-
428 {0x0BAE, 0x0B82, 0x0000},-
429 {0x0BAF, 0x0B82, 0x0000},-
430 {0x0BB0, 0x0B82, 0x0000},-
431 {0x0BB2, 0x0B82, 0x0000},-
432 {0x0BB5, 0x0B82, 0x0000},-
433 {0x0BB4, 0x0B82, 0x0000},-
434 {0x0BB3, 0x0B82, 0x0000},-
435 {0x0BB1, 0x0B82, 0x0000},-
436 {0x0BA9, 0x0B82, 0x0000}-
437};-
438-
439static int cmp(const ushort *s1, const ushort *s2, size_t len)-
440{-
441 int diff = 0;-
442-
443 while (len-- && (diff = *s1++ - *s2++) == 0)
len--Description
TRUEnever evaluated
FALSEnever evaluated
(diff = *s1++ - *s2++) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
444 ;
never executed: ;
0
445-
446 return diff;
never executed: return diff;
0
447}-
448-
449static unsigned char qt_UnicodeToTSCII(ushort u1, ushort u2, ushort u3)-
450{-
451 ushort s[3];-
452 s[0] = u1;-
453 s[1] = u2;-
454 s[2] = u3;-
455-
456 int a = 0; // start pos-
457 int b = UnToTsLast; // end pos-
458-
459 // do a binary search for the composed unicode in the list-
460 while (a <= b) {
a <= bDescription
TRUEnever evaluated
FALSEnever evaluated
0
461 int w = (a + b) / 2;-
462 int j = cmp(UnToTs[w], s, 3);-
463-
464 if (j == 0)
j == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
465 // found it-
466 return UnToTs[w][3];
never executed: return UnToTs[w][3];
0
467-
468 if (j < 0)
j < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
469 a = w + 1;
never executed: a = w + 1;
0
470 else-
471 b = w - 1;
never executed: b = w - 1;
0
472 }-
473-
474 return 0;
never executed: return 0;
0
475}-
476-
477static unsigned int qt_TSCIIToUnicode(uint code, uint *s)-
478{-
479 int len = 0;-
480 for (int i = 0; i < 3; i++) {
i < 3Description
TRUEnever evaluated
FALSEnever evaluated
0
481 uint u = TsToUn[code & 0x7f][i];-
482 s[i] = u;-
483 if (s[i]) len = i + 1;
never executed: len = i + 1;
s[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
484 }
never executed: end of block
0
485-
486 return len;
never executed: return len;
0
487}-
488-
489QT_END_NAMESPACE-
490-
491#endif // QT_NO_CODECS-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9