blob: f194db9b01a98481845a6285caffe067f444c408 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/******************************************************************************
*
* Latin1UTF16 - SWFilter decendant to convert a Latin-1 character to UTF-16
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <latin1utf16.h>
SWORD_NAMESPACE_START
Latin1UTF16::Latin1UTF16() {
}
char Latin1UTF16::ProcessText(char *text, int maxlen, const SWKey *key, const SWModule *module)
{
unsigned char *from;
unsigned short *to;
int len;
if ((unsigned long)key < 2) // hack, we're en(1)/de(0)ciphering
return -1;
len = strlen(text) + 1; // shift string to right of buffer
if (len < maxlen) {
memmove(&text[maxlen - len], text, len);
from = (unsigned char*)&text[maxlen - len];
}
else
from = (unsigned char*)text;
// -------------------------------
for (to = (unsigned short*)text; *from; from++) {
switch (*from) {
case 0x80: // '€'
*to++ = 0x20AC;
break;
case 0x82: // '‚'
*to++ = 0x201A;
break;
case 0x83: // 'ƒ'
*to++ = 0x0192;
break;
case 0x84: // '„'
*to++ = 0x201E;
break;
case 0x85: // '…'
*to++ = 0x2026;
break;
case 0x86: // '†'
*to++ = 0x2020;
break;
case 0x87: // '‡'
*to++ = 0x2021;
break;
case 0x88: // 'ˆ'
*to++ = 0x02C6;
break;
case 0x89: // '‰'
*to++ = 0x2030;
break;
case 0x8A: // 'Š'
*to++ = 0x0160;
break;
case 0x8B: // '‹'
*to++ = 0x2039;
break;
case 0x8C: // 'Œ'
*to++ = 0x0152;
break;
case 0x8E: // 'Ž'
*to++ = 0x017D;
break;
case 0x91: // '‘'
*to++ = 0x2018;
break;
case 0x92: // '’'
*to++ = 0x2019;
break;
case 0x93: // '“'
*to++ = 0x201C;
break;
case 0x94: // '”'
*to++ = 0x201D;
break;
case 0x95: // '•'
*to++ = 0x2022;
break;
case 0x96: // '–'
*to++ = 0x2013;
break;
case 0x97: // '—'
*to++ = 0x2014;
break;
case 0x98: // '˜'
*to++ = 0x02DC;
break;
case 0x99: // '™'
*to++ = 0x2122;
break;
case 0x9A: // 'š'
*to++ = 0x0161;
break;
case 0x9B: // '›'
*to++ = 0x203A;
break;
case 0x9C: // 'œ'
*to++ = 0x0153;
break;
case 0x9E: // 'ž'
*to++ = 0x017E;
break;
case 0x9F: // 'Ÿ'
*to++ = 0x0178;
break;
default:
*to++ = (unsigned short)*from;
}
}
*to = 0;
return 0;
}
SWORD_NAMESPACE_END
|