aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/filters/latin1utf16.cpp
blob: 75ee998218bb90e755424fd2dbc324ecda0eb15e (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
/******************************************************************************
 *
 * Latin1UTF16 -	SWFilter decendant to convert a Latin-1 character to UTF-16
 *
 */


#include <stdlib.h>
#include <stdio.h>
#include <latin1utf16.h>

Latin1UTF16::Latin1UTF16() {
}


char Latin1UTF16::ProcessText(char *text, int maxlen, const SWKey *key, const SWModule *module)
{
    unsigned char *from;
    unsigned short *to;
    int len;
    
    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;
}