~ubuntu-branches/ubuntu/wily/kbibtex/wily

« back to all changes in this revision

Viewing changes to src/iso6937converter.cpp

  • Committer: Package Import Robot
  • Author(s): Michael Hanke
  • Date: 2011-07-18 09:29:48 UTC
  • mfrom: (1.1.6) (2.1.5 sid)
  • Revision ID: package-import@ubuntu.com-20110718092948-ksxjmg7kdfamolmg
Tags: 0.3-1
* First upstream release for KDE4 (Closes: #634255). A number of search
  engines are still missing, in comparison to the 0.2 series.
* Bumped Standards-Version to 3.9.2, no changes necessary.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
    copyright            : (C) 2006 by Robby Stephenson
3
 
    email                : robby@periapsis.org
4
 
 ***************************************************************************/
5
 
 
6
 
/***************************************************************************
7
 
 *                                                                         *
8
 
 *   This file has been modified to match the requirements of KBibTeX.     *
9
 
 *   In case of problems or bugs arising from this implementation, please  *
10
 
 *   contact the KBibTeX team first.                                       *
11
 
 *                             Thomas Fischer <fischer@unix-ag.uni-kl.de>  *
12
 
 *                                                                         *
13
 
 ***************************************************************************/
14
 
 
15
 
/***************************************************************************
16
 
 *                                                                         *
17
 
 *   This program is free software; you can redistribute it and/or modify  *
18
 
 *   it under the terms of version 2 of the GNU General Public License as  *
19
 
 *   published by the Free Software Foundation;                            *
20
 
 *                                                                         *
21
 
 ***************************************************************************/
22
 
 
23
 
// This class is adapted from Iso6937ToUnicode from the MARC4J project, available
24
 
// from http://marc4j.tigris.org, with the following notice:
25
 
// * Copyright (C) 2002 Bas  Peters  (mail@bpeters.com)
26
 
// * Copyright (C) 2002 Yves Pratter (ypratter@club-internet.fr)
27
 
//
28
 
// That source was released under the terms of the GNU Lesser General Public
29
 
// License, version 2.1. In accordance with Condition 3 of that license,
30
 
// I am applying the terms of the GNU General Public License to the source
31
 
// code, and including a large portion of it here
32
 
 
33
 
#include "iso6937converter.h"
34
 
#include <kdebug.h>
35
 
 
36
 
#include <qstring.h>
37
 
 
38
 
using KBibTeX::Iso6937Converter;
39
 
 
40
 
QString Iso6937Converter::toUtf8(const QCString& text_) {
41
 
  const uint len = text_.length();
42
 
  QString result;
43
 
  result.reserve(len);
44
 
  uint pos = 0;
45
 
  for(uint i = 0; i < len; ++i) {
46
 
    uchar c = text_[i];
47
 
    if(isAscii(c)) {
48
 
      result[pos++] = c;
49
 
    } else if(isCombining(c) && hasNext(i, len)) {
50
 
      QChar d = getCombiningChar(c * 256 + text_[i + 1]);
51
 
      if(!d.isNull()) {
52
 
        result[pos++] = d;
53
 
        ++i;
54
 
      } else {
55
 
        result[pos++] = getChar(c);
56
 
      }
57
 
    } else {
58
 
      result[pos++] = getChar(c);
59
 
    }
60
 
  }
61
 
  result.squeeze();
62
 
  return result;
63
 
}
64
 
 
65
 
inline
66
 
bool Iso6937Converter::hasNext(uint pos, uint len) {
67
 
  return pos < (len - 1);
68
 
}
69
 
 
70
 
inline
71
 
bool Iso6937Converter::isAscii(uchar c) {
72
 
  return c <= 0x7F;
73
 
}
74
 
 
75
 
inline
76
 
bool Iso6937Converter::isCombining(uchar c) {
77
 
  return c >= 0xC0 && c <= 0xDF;
78
 
}
79
 
 
80
 
// Source : http://anubis.dkuug.dk/JTC1/SC2/WG3/docs/6937cd.pdf
81
 
QChar Iso6937Converter::getChar(uchar c) {
82
 
  switch(c) {
83
 
  case 0xA0:
84
 
    return 0x00A0; // 10/00 NO-BREAK SPACE
85
 
  case 0xA1:
86
 
    return 0x00A1; // 10/01 INVERTED EXCLAMATION MARK
87
 
  case 0xA2:
88
 
    return 0x00A2; // 10/02 CENT SIGN
89
 
  case 0xA3:
90
 
    return 0x00A3; // 10/03 POUND SIGN
91
 
    // 10/04 (This position shall not be used)
92
 
  case 0xA5:
93
 
    return 0x00A5; // 10/05 YEN SIGN
94
 
    // 10/06 (This position shall not be used)
95
 
  case 0xA7:
96
 
    return 0x00A7; // 10/07 SECTION SIGN
97
 
  case 0xA8:
98
 
    return 0x00A4; // 10/08 CURRENCY SIGN
99
 
  case 0xA9:
100
 
    return 0x2018; // 10/09 LEFT SINGLE QUOTATION MARK
101
 
  case 0xAA:
102
 
    return 0x201C; // 10/10 LEFT DOUBLE QUOTATION MARK
103
 
  case 0xAB:
104
 
    return 0x00AB; // 10/11 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
105
 
  case 0xAC:
106
 
    return 0x2190; // 10/12 LEFTWARDS ARROW
107
 
  case 0xAD:
108
 
    return 0x2191; // 10/13 UPWARDS ARROW
109
 
  case 0xAE:
110
 
    return 0x2192; // 10/14 RIGHTWARDS ARROW
111
 
  case 0xAF:
112
 
    return 0x2193; // 10/15 DOWNWARDS ARROW
113
 
 
114
 
  case 0xB0:
115
 
    return 0x00B0; // 11/00 DEGREE SIGN
116
 
  case 0xB1:
117
 
    return 0x00B1; // 11/01 PLUS-MINUS SIGN
118
 
  case 0xB2:
119
 
    return 0x00B2; // 11/02 SUPERSCRIPT TWO
120
 
  case 0xB3:
121
 
    return 0x00B3; // 11/03 SUPERSCRIPT THREE
122
 
  case 0xB4:
123
 
    return 0x00D7; // 11/04 MULTIPLICATION SIGN
124
 
  case 0xB5:
125
 
    return 0x00B5; // 11/05 MICRO SIGN
126
 
  case 0xB6:
127
 
    return 0x00B6; // 11/06 PILCROW SIGN
128
 
  case 0xB7:
129
 
    return 0x00B7; // 11/07 MIDDLE DOT
130
 
  case 0xB8:
131
 
    return 0x00F7; // 11/08 DIVISION SIGN
132
 
  case 0xB9:
133
 
    return 0x2019; // 11/09 RIGHT SINGLE QUOTATION MARK
134
 
  case 0xBA:
135
 
    return 0x201D; // 11/10 RIGHT DOUBLE QUOTATION MARK
136
 
  case 0xBB:
137
 
    return 0x00BB; // 11/11 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
138
 
  case 0xBC:
139
 
    return 0x00BC; // 11/12 VULGAR FRACTION ONE QUARTER
140
 
  case 0xBD:
141
 
    return 0x00BD; // 11/13 VULGAR FRACTION ONE HALF
142
 
  case 0xBE:
143
 
    return 0x00BE; // 11/14 VULGAR FRACTION THREE QUARTERS
144
 
  case 0xBF:
145
 
    return 0x00BF; // 11/15 INVERTED QUESTION MARK
146
 
 
147
 
    // 4/0 to 5/15 diacritic characters
148
 
 
149
 
  case 0xD0:
150
 
    return 0x2015; // 13/00 HORIZONTAL BAR
151
 
  case 0xD1:
152
 
    return 0x00B9; // 13/01 SUPERSCRIPT ONE
153
 
  case 0xD2:
154
 
    return 0x2117; // 13/02 REGISTERED SIGN
155
 
  case 0xD3:
156
 
    return 0x00A9; // 13/03 COPYRIGHT SIGN
157
 
  case 0xD4:
158
 
    return 0x00AE; // 13/04 TRADE MARK SIGN
159
 
  case 0xD5:
160
 
    return 0x266A; // 13/05 EIGHTH NOTE
161
 
  case 0xD6:
162
 
    return 0x00AC; // 13/06 NOT SIGN
163
 
  case 0xD7:
164
 
    return 0x00A6; // 13/07 BROKEN BAR
165
 
    // 13/08 (This position shall not be used)
166
 
    // 13/09 (This position shall not be used)
167
 
    // 13/10 (This position shall not be used)
168
 
    // 13/11 (This position shall not be used)
169
 
  case 0xDC:
170
 
    return 0x215B; // 13/12 VULGAR FRACTION ONE EIGHTH
171
 
  case 0xDF:
172
 
    return 0x215E; // 13/15 VULGAR FRACTION SEVEN EIGHTHS
173
 
 
174
 
  case 0xE0:
175
 
    return 0x2126; // 14/00 OHM SIGN
176
 
  case 0xE1:
177
 
    return 0x00C6; // 14/01 LATIN CAPITAL LETTER AE
178
 
  case 0xE2:
179
 
    return 0x0110; // 14/02 LATIN CAPITAL LETTER D WITH STROKE
180
 
  case 0xE3:
181
 
    return 0x00AA; // 14/03 FEMININE ORDINAL INDICATOR
182
 
  case 0xE4:
183
 
    return 0x0126; // 14/04 LATIN CAPITAL LETTER H WITH STROKE
184
 
    // 14/05 (This position shall not be used)
185
 
  case 0xE6:
186
 
    return 0x0132; // 14/06 LATIN CAPITAL LIGATURE IJ
187
 
  case 0xE7:
188
 
    return 0x013F; // 14/07 LATIN CAPITAL LETTER L WITH MIDDLE DOT
189
 
  case 0xE8:
190
 
    return 0x0141; // 14/08 LATIN CAPITAL LETTER L WITH STROKE
191
 
  case 0xE9:
192
 
    return 0x00D8; // 14/09 LATIN CAPITAL LETTER O WITH STROKE
193
 
  case 0xEA:
194
 
    return 0x0152; // 14/10 LATIN CAPITAL LIGATURE OE
195
 
  case 0xEB:
196
 
    return 0x00BA; // 14/11 MASCULINE ORDINAL INDICATOR
197
 
  case 0xEC:
198
 
    return 0x00DE; // 14/12 LATIN CAPITAL LETTER THORN
199
 
  case 0xED:
200
 
    return 0x0166; // 14/13 LATIN CAPITAL LETTER T WITH STROKE
201
 
  case 0xEE:
202
 
    return 0x014A; // 14/14 LATIN CAPITAL LETTER ENG
203
 
  case 0xEF:
204
 
    return 0x0149; // 14/15 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
205
 
 
206
 
  case 0xF0:
207
 
    return 0x0138; // 15/00 LATIN SMALL LETTER KRA
208
 
  case 0xF1:
209
 
    return 0x00E6; // 15/01 LATIN SMALL LETTER AE
210
 
  case 0xF2:
211
 
    return 0x0111; // 15/02 LATIN SMALL LETTER D WITH STROKE
212
 
  case 0xF3:
213
 
    return 0x00F0; // 15/03 LATIN SMALL LETTER ETH
214
 
  case 0xF4:
215
 
    return 0x0127; // 15/04 LATIN SMALL LETTER H WITH STROKE
216
 
  case 0xF5:
217
 
    return 0x0131; // 15/05 LATIN SMALL LETTER DOTLESS I
218
 
  case 0xF6:
219
 
    return 0x0133; // 15/06 LATIN SMALL LIGATURE IJ
220
 
  case 0xF7:
221
 
    return 0x0140; // 15/07 LATIN SMALL LETTER L WITH MIDDLE DOT
222
 
  case 0xF8:
223
 
    return 0x0142; // 15/08 LATIN SMALL LETTER L WITH STROKE
224
 
  case 0xF9:
225
 
    return 0x00F8; // 15/09 LATIN SMALL LETTER O WITH STROKE
226
 
  case 0xFA:
227
 
    return 0x0153; // 15/10 LATIN SMALL LIGATURE OE
228
 
  case 0xFB:
229
 
    return 0x00DF; // 15/11 LATIN SMALL LETTER SHARP S
230
 
  case 0xFC:
231
 
    return 0x00FE; // 15/12 LATIN SMALL LETTER THORN
232
 
  case 0xFD:
233
 
    return 0x0167; // 15/13 LATIN SMALL LETTER T WITH STROKE
234
 
  case 0xFE:
235
 
    return 0x014B; // 15/14 LATIN SMALL LETTER ENG
236
 
  case 0xFF:
237
 
    return 0x00AD; // 15/15 SOFT HYPHEN$
238
 
  default:
239
 
    return c;
240
 
  }
241
 
}
242
 
 
243
 
QChar Iso6937Converter::getCombiningChar(uint c) {
244
 
  switch(c) {
245
 
    // 12/00 (This position shall not be used)
246
 
 
247
 
    // 12/01 non-spacing grave accent
248
 
  case 0xC141:
249
 
    return 0x00C0; // LATIN CAPITAL LETTER A WITH GRAVE
250
 
  case 0xC145:
251
 
    return 0x00C8; // LATIN CAPITAL LETTER E WITH GRAVE
252
 
  case 0xC149:
253
 
    return 0x00CC; // LATIN CAPITAL LETTER I WITH GRAVE
254
 
  case 0xC14F:
255
 
    return 0x00D2; // LATIN CAPITAL LETTER O WITH GRAVE
256
 
  case 0xC155:
257
 
    return 0x00D9; // LATIN CAPITAL LETTER U WITH GRAVE
258
 
  case 0xC161:
259
 
    return 0x00E0; // LATIN SMALL LETTER A WITH GRAVE
260
 
  case 0xC165:
261
 
    return 0x00E8; // LATIN SMALL LETTER E WITH GRAVE
262
 
  case 0xC169:
263
 
    return 0x00EC; // LATIN SMALL LETTER I WITH GRAVE
264
 
  case 0xC16F:
265
 
    return 0x00F2; // LATIN SMALL LETTER O WITH GRAVE
266
 
  case 0xC175:
267
 
    return 0x00F9; // LATIN SMALL LETTER U WITH GRAVE
268
 
 
269
 
    // 12/02 non-spacing acute accent
270
 
  case 0xC220:
271
 
    return 0x00B4; // ACUTE ACCENT
272
 
  case 0xC241:
273
 
    return 0x00C1; // LATIN CAPITAL LETTER A WITH ACUTE
274
 
  case 0xC243:
275
 
    return 0x0106; // LATIN CAPITAL LETTER C WITH ACUTE
276
 
  case 0xC245:
277
 
    return 0x00C9; // LATIN CAPITAL LETTER E WITH ACUTE
278
 
  case 0xC249:
279
 
    return 0x00CD; // LATIN CAPITAL LETTER I WITH ACUTE
280
 
  case 0xC24C:
281
 
    return 0x0139; // LATIN CAPITAL LETTER L WITH ACUTE
282
 
  case 0xC24E:
283
 
    return 0x0143; // LATIN CAPITAL LETTER N WITH ACUTE
284
 
  case 0xC24F:
285
 
    return 0x00D3; // LATIN CAPITAL LETTER O WITH ACUTE
286
 
  case 0xC252:
287
 
    return 0x0154; // LATIN CAPITAL LETTER R WITH ACUTE
288
 
  case 0xC253:
289
 
    return 0x015A; // LATIN CAPITAL LETTER S WITH ACUTE
290
 
  case 0xC255:
291
 
    return 0x00DA; // LATIN CAPITAL LETTER U WITH ACUTE
292
 
  case 0xC259:
293
 
    return 0x00DD; // LATIN CAPITAL LETTER Y WITH ACUTE
294
 
  case 0xC25A:
295
 
    return 0x0179; // LATIN CAPITAL LETTER Z WITH ACUTE
296
 
  case 0xC261:
297
 
    return 0x00E1; // LATIN SMALL LETTER A WITH ACUTE
298
 
  case 0xC263:
299
 
    return 0x0107; // LATIN SMALL LETTER C WITH ACUTE
300
 
  case 0xC265:
301
 
    return 0x00E9; // LATIN SMALL LETTER E WITH ACUTE
302
 
  case 0xC267:
303
 
    return 0x01F5; // LATIN SMALL LETTER G WITH CEDILLA(4)
304
 
  case 0xC269:
305
 
    return 0x00ED; // LATIN SMALL LETTER I WITH ACUTE
306
 
  case 0xC26C:
307
 
    return 0x013A; // LATIN SMALL LETTER L WITH ACUTE
308
 
  case 0xC26E:
309
 
    return 0x0144; // LATIN SMALL LETTER N WITH ACUTE
310
 
  case 0xC26F:
311
 
    return 0x00F3; // LATIN SMALL LETTER O WITH ACUTE
312
 
  case 0xC272:
313
 
    return 0x0155; // LATIN SMALL LETTER R WITH ACUTE
314
 
  case 0xC273:
315
 
    return 0x015B; // LATIN SMALL LETTER S WITH ACUTE
316
 
  case 0xC275:
317
 
    return 0x00FA; // LATIN SMALL LETTER U WITH ACUTE
318
 
  case 0xC279:
319
 
    return 0x00FD; // LATIN SMALL LETTER Y WITH ACUTE
320
 
  case 0xC27A:
321
 
    return 0x017A; // LATIN SMALL LETTER Z WITH ACUTE
322
 
 
323
 
    // 12/03 non-spacing circumflex accent
324
 
  case 0xC341:
325
 
    return 0x00C2; // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
326
 
  case 0xC343:
327
 
    return 0x0108; // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
328
 
  case 0xC345:
329
 
    return 0x00CA; // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
330
 
  case 0xC347:
331
 
    return 0x011C; // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
332
 
  case 0xC348:
333
 
    return 0x0124; // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
334
 
  case 0xC349:
335
 
    return 0x00CE; // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
336
 
  case 0xC34A:
337
 
    return 0x0134; // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
338
 
  case 0xC34F:
339
 
    return 0x00D4; // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
340
 
  case 0xC353:
341
 
    return 0x015C; // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
342
 
  case 0xC355:
343
 
    return 0x00DB; // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
344
 
  case 0xC357:
345
 
    return 0x0174; // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
346
 
  case 0xC359:
347
 
    return 0x0176; // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
348
 
  case 0xC361:
349
 
    return 0x00E2; // LATIN SMALL LETTER A WITH CIRCUMFLEX
350
 
  case 0xC363:
351
 
    return 0x0109; // LATIN SMALL LETTER C WITH CIRCUMFLEX
352
 
  case 0xC365:
353
 
    return 0x00EA; // LATIN SMALL LETTER E WITH CIRCUMFLEX
354
 
  case 0xC367:
355
 
    return 0x011D; // LATIN SMALL LETTER G WITH CIRCUMFLEX
356
 
  case 0xC368:
357
 
    return 0x0125; // LATIN SMALL LETTER H WITH CIRCUMFLEX
358
 
  case 0xC369:
359
 
    return 0x00EE; // LATIN SMALL LETTER I WITH CIRCUMFLEX
360
 
  case 0xC36A:
361
 
    return 0x0135; // LATIN SMALL LETTER J WITH CIRCUMFLEX
362
 
  case 0xC36F:
363
 
    return 0x00F4; // LATIN SMALL LETTER O WITH CIRCUMFLEX
364
 
  case 0xC373:
365
 
    return 0x015D; // LATIN SMALL LETTER S WITH CIRCUMFLEX
366
 
  case 0xC375:
367
 
    return 0x00FB; // LATIN SMALL LETTER U WITH CIRCUMFLEX
368
 
  case 0xC377:
369
 
    return 0x0175; // LATIN SMALL LETTER W WITH CIRCUMFLEX
370
 
  case 0xC379:
371
 
    return 0x0177; // LATIN SMALL LETTER Y WITH CIRCUMFLEX
372
 
 
373
 
    // 12/04 non-spacing tilde
374
 
  case 0xC441:
375
 
    return 0x00C3; // LATIN CAPITAL LETTER A WITH TILDE
376
 
  case 0xC449:
377
 
    return 0x0128; // LATIN CAPITAL LETTER I WITH TILDE
378
 
  case 0xC44E:
379
 
    return 0x00D1; // LATIN CAPITAL LETTER N WITH TILDE
380
 
  case 0xC44F:
381
 
    return 0x00D5; // LATIN CAPITAL LETTER O WITH TILDE
382
 
  case 0xC455:
383
 
    return 0x0168; // LATIN CAPITAL LETTER U WITH TILDE
384
 
  case 0xC461:
385
 
    return 0x00E3; // LATIN SMALL LETTER A WITH TILDE
386
 
  case 0xC469:
387
 
    return 0x0129; // LATIN SMALL LETTER I WITH TILDE
388
 
  case 0xC46E:
389
 
    return 0x00F1; // LATIN SMALL LETTER N WITH TILDE
390
 
  case 0xC46F:
391
 
    return 0x00F5; // LATIN SMALL LETTER O WITH TILDE
392
 
  case 0xC475:
393
 
    return 0x0169; // LATIN SMALL LETTER U WITH TILDE
394
 
 
395
 
    // 12/05 non-spacing macron
396
 
  case 0xC541:
397
 
    return 0x0100; // LATIN CAPITAL LETTER A WITH MACRON
398
 
  case 0xC545:
399
 
    return 0x0112; // LATIN CAPITAL LETTER E WITH MACRON
400
 
  case 0xC549:
401
 
    return 0x012A; // LATIN CAPITAL LETTER I WITH MACRON
402
 
  case 0xC54F:
403
 
    return 0x014C; // LATIN CAPITAL LETTER O WITH MACRON
404
 
  case 0xC555:
405
 
    return 0x016A; // LATIN CAPITAL LETTER U WITH MACRON
406
 
  case 0xC561:
407
 
    return 0x0101; // LATIN SMALL LETTER A WITH MACRON
408
 
  case 0xC565:
409
 
    return 0x0113; // LATIN SMALL LETTER E WITH MACRON
410
 
  case 0xC569:
411
 
    return 0x012B; // LATIN SMALL LETTER I WITH MACRON
412
 
  case 0xC56F:
413
 
    return 0x014D; // LATIN SMALL LETTER O WITH MACRON
414
 
  case 0xC575:
415
 
    return 0x016B; // LATIN SMALL LETTER U WITH MACRON
416
 
 
417
 
    // 12/06 non-spacing breve
418
 
  case 0xC620:
419
 
    return 0x02D8; // BREVE
420
 
  case 0xC641:
421
 
    return 0x0102; // LATIN CAPITAL LETTER A WITH BREVE
422
 
  case 0xC647:
423
 
    return 0x011E; // LATIN CAPITAL LETTER G WITH BREVE
424
 
  case 0xC655:
425
 
    return 0x016C; // LATIN CAPITAL LETTER U WITH BREVE
426
 
  case 0xC661:
427
 
    return 0x0103; // LATIN SMALL LETTER A WITH BREVE
428
 
  case 0xC667:
429
 
    return 0x011F; // LATIN SMALL LETTER G WITH BREVE
430
 
  case 0xC675:
431
 
    return 0x016D; // LATIN SMALL LETTER U WITH BREVE
432
 
 
433
 
    // 12/07 non-spacing dot above
434
 
  case 0xC743:
435
 
    return 0x010A; // LATIN CAPITAL LETTER C WITH DOT ABOVE
436
 
  case 0xC745:
437
 
    return 0x0116; // LATIN CAPITAL LETTER E WITH DOT ABOVE
438
 
  case 0xC747:
439
 
    return 0x0120; // LATIN CAPITAL LETTER G WITH DOT ABOVE
440
 
  case 0xC749:
441
 
    return 0x0130; // LATIN CAPITAL LETTER I WITH DOT ABOVE
442
 
  case 0xC75A:
443
 
    return 0x017B; // LATIN CAPITAL LETTER Z WITH DOT ABOVE
444
 
  case 0xC763:
445
 
    return 0x010B; // LATIN SMALL LETTER C WITH DOT ABOVE
446
 
  case 0xC765:
447
 
    return 0x0117; // LATIN SMALL LETTER E WITH DOT ABOVE
448
 
  case 0xC767:
449
 
    return 0x0121; // LATIN SMALL LETTER G WITH DOT ABOVE
450
 
  case 0xC77A:
451
 
    return 0x017C; // LATIN SMALL LETTER Z WITH DOT ABOVE
452
 
 
453
 
    // 12/08 non-spacing diaeresis
454
 
  case 0xC820:
455
 
    return 0x00A8; // DIAERESIS
456
 
  case 0xC841:
457
 
    return 0x00C4; // LATIN CAPITAL LETTER A WITH DIAERESIS
458
 
  case 0xC845:
459
 
    return 0x00CB; // LATIN CAPITAL LETTER E WITH DIAERESIS
460
 
  case 0xC849:
461
 
    return 0x00CF; // LATIN CAPITAL LETTER I WITH DIAERESIS
462
 
  case 0xC84F:
463
 
    return 0x00D6; // LATIN CAPITAL LETTER O WITH DIAERESIS
464
 
  case 0xC855:
465
 
    return 0x00DC; // LATIN CAPITAL LETTER U WITH DIAERESIS
466
 
  case 0xC859:
467
 
    return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS
468
 
  case 0xC861:
469
 
    return 0x00E4; // LATIN SMALL LETTER A WITH DIAERESIS
470
 
  case 0xC865:
471
 
    return 0x00EB; // LATIN SMALL LETTER E WITH DIAERESIS
472
 
  case 0xC869:
473
 
    return 0x00EF; // LATIN SMALL LETTER I WITH DIAERESIS
474
 
  case 0xC86F:
475
 
    return 0x00F6; // LATIN SMALL LETTER O WITH DIAERESIS
476
 
  case 0xC875:
477
 
    return 0x00FC; // LATIN SMALL LETTER U WITH DIAERESIS
478
 
  case 0xC879:
479
 
    return 0x00FF; // LATIN SMALL LETTER Y WITH DIAERESIS
480
 
 
481
 
    // 12/09 (This position shall not be used)
482
 
 
483
 
    // 12/10 non-spacing ring above
484
 
  case 0xCA20:
485
 
    return 0x02DA; // RING ABOVE
486
 
  case 0xCA41:
487
 
    return 0x00C5; // LATIN CAPITAL LETTER A WITH RING ABOVE
488
 
  case 0xCAAD:
489
 
    return 0x016E; // LATIN CAPITAL LETTER U WITH RING ABOVE
490
 
  case 0xCA61:
491
 
    return 0x00E5; // LATIN SMALL LETTER A WITH RING ABOVE
492
 
  case 0xCA75:
493
 
    return 0x016F; // LATIN SMALL LETTER U WITH RING ABOVE
494
 
 
495
 
    // 12/11 non-spacing cedilla
496
 
  case 0xCB20:
497
 
    return 0x00B8; // CEDILLA
498
 
  case 0xCB43:
499
 
    return 0x00C7; // LATIN CAPITAL LETTER C WITH CEDILLA
500
 
  case 0xCB47:
501
 
    return 0x0122; // LATIN CAPITAL LETTER G WITH CEDILLA
502
 
  case 0xCB4B:
503
 
    return 0x0136; // LATIN CAPITAL LETTER K WITH CEDILLA
504
 
  case 0xCB4C:
505
 
    return 0x013B; // LATIN CAPITAL LETTER L WITH CEDILLA
506
 
  case 0xCB4E:
507
 
    return 0x0145; // LATIN CAPITAL LETTER N WITH CEDILLA
508
 
  case 0xCB52:
509
 
    return 0x0156; // LATIN CAPITAL LETTER R WITH CEDILLA
510
 
  case 0xCB53:
511
 
    return 0x015E; // LATIN CAPITAL LETTER S WITH CEDILLA
512
 
  case 0xCB54:
513
 
    return 0x0162; // LATIN CAPITAL LETTER T WITH CEDILLA
514
 
  case 0xCB63:
515
 
    return 0x00E7; // LATIN SMALL LETTER C WITH CEDILLA
516
 
    //        case 0xCB67: return 0x0123; // small g with cedilla
517
 
  case 0xCB6B:
518
 
    return 0x0137; // LATIN SMALL LETTER K WITH CEDILLA
519
 
  case 0xCB6C:
520
 
    return 0x013C; // LATIN SMALL LETTER L WITH CEDILLA
521
 
  case 0xCB6E:
522
 
    return 0x0146; // LATIN SMALL LETTER N WITH CEDILLA
523
 
  case 0xCB72:
524
 
    return 0x0157; // LATIN SMALL LETTER R WITH CEDILLA
525
 
  case 0xCB73:
526
 
    return 0x015F; // LATIN SMALL LETTER S WITH CEDILLA
527
 
  case 0xCB74:
528
 
    return 0x0163; // LATIN SMALL LETTER T WITH CEDILLA
529
 
 
530
 
    // 12/12 (This position shall not be used)
531
 
 
532
 
    // 12/13 non-spacing double acute accent
533
 
  case 0xCD4F:
534
 
    return 0x0150; // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
535
 
  case 0xCD55:
536
 
    return 0x0170; // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
537
 
  case 0xCD6F:
538
 
    return 0x0151; // LATIN SMALL LETTER O WITH DOUBLE ACUTE
539
 
  case 0xCD75:
540
 
    return 0x0171; // LATIN SMALL LETTER U WITH DOUBLE ACUTE
541
 
 
542
 
    // 12/14 non-spacing ogonek
543
 
  case 0xCE20:
544
 
    return 0x02DB; // ogonek
545
 
  case 0xCE41:
546
 
    return 0x0104; // LATIN CAPITAL LETTER A WITH OGONEK
547
 
  case 0xCE45:
548
 
    return 0x0118; // LATIN CAPITAL LETTER E WITH OGONEK
549
 
  case 0xCE49:
550
 
    return 0x012E; // LATIN CAPITAL LETTER I WITH OGONEK
551
 
  case 0xCE55:
552
 
    return 0x0172; // LATIN CAPITAL LETTER U WITH OGONEK
553
 
  case 0xCE61:
554
 
    return 0x0105; // LATIN SMALL LETTER A WITH OGONEK
555
 
  case 0xCE65:
556
 
    return 0x0119; // LATIN SMALL LETTER E WITH OGONEK
557
 
  case 0xCE69:
558
 
    return 0x012F; // LATIN SMALL LETTER I WITH OGONEK
559
 
  case 0xCE75:
560
 
    return 0x0173; // LATIN SMALL LETTER U WITH OGONEK
561
 
 
562
 
    // 12/15 non-spacing caron
563
 
  case 0xCF20:
564
 
    return 0x02C7; // CARON
565
 
  case 0xCF43:
566
 
    return 0x010C; // LATIN CAPITAL LETTER C WITH CARON
567
 
  case 0xCF44:
568
 
    return 0x010E; // LATIN CAPITAL LETTER D WITH CARON
569
 
  case 0xCF45:
570
 
    return 0x011A; // LATIN CAPITAL LETTER E WITH CARON
571
 
  case 0xCF4C:
572
 
    return 0x013D; // LATIN CAPITAL LETTER L WITH CARON
573
 
  case 0xCF4E:
574
 
    return 0x0147; // LATIN CAPITAL LETTER N WITH CARON
575
 
  case 0xCF52:
576
 
    return 0x0158; // LATIN CAPITAL LETTER R WITH CARON
577
 
  case 0xCF53:
578
 
    return 0x0160; // LATIN CAPITAL LETTER S WITH CARON
579
 
  case 0xCF54:
580
 
    return 0x0164; // LATIN CAPITAL LETTER T WITH CARON
581
 
  case 0xCF5A:
582
 
    return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON
583
 
  case 0xCF63:
584
 
    return 0x010D; // LATIN SMALL LETTER C WITH CARON
585
 
  case 0xCF64:
586
 
    return 0x010F; // LATIN SMALL LETTER D WITH CARON
587
 
  case 0xCF65:
588
 
    return 0x011B; // LATIN SMALL LETTER E WITH CARON
589
 
  case 0xCF6C:
590
 
    return 0x013E; // LATIN SMALL LETTER L WITH CARON
591
 
  case 0xCF6E:
592
 
    return 0x0148; // LATIN SMALL LETTER N WITH CARON
593
 
  case 0xCF72:
594
 
    return 0x0159; // LATIN SMALL LETTER R WITH CARON
595
 
  case 0xCF73:
596
 
    return 0x0161; // LATIN SMALL LETTER S WITH CARON
597
 
  case 0xCF74:
598
 
    return 0x0165; // LATIN SMALL LETTER T WITH CARON
599
 
  case 0xCF7A:
600
 
    return 0x017E; // LATIN SMALL LETTER Z WITH CARON
601
 
 
602
 
  default:
603
 
    kdDebug() << "Iso6937Converter::getCombiningChar() - no match for " << c << endl;
604
 
    return QChar();
605
 
  }
606
 
}