Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5753 leency 1
#ifndef INCLUDE_ENCODING_H
2
#define INCLUDE_ENCODING_H
3
#print "[include ]\n"
4
 
5
#ifndef INCLUDE_KOLIBRI_H
6
#include "../lib/kolibri.h"
7
#endif
8
 
9
inline fastcall void wintodos( ESI)
10
{
11
   while (BL=ESBYTE[ESI])
12
   {
13
        if (BL>=192)
14
        {
15
             if (BL>=240) ESBYTE[ESI] = BL - 16;
16
             else ESBYTE[ESI] = BL - 64;
17
        }
18
        else
19
        {
20
			if (BL==178) ESBYTE[ESI] = 73;  //I
21
			if (BL==179) ESBYTE[ESI] = 105; //i
22
			if (BL==175) ESBYTE[ESI] = 244; //J
23
			if (BL==191) ESBYTE[ESI] = 245; //j
24
			if (BL==170) ESBYTE[ESI] = 242; //E
25
			if (BL==186) ESBYTE[ESI] = 243; //e
26
			if (BL==168) ESBYTE[ESI] = 240; //
27
			if (BL==184) ESBYTE[ESI] = 'e'; //e
28
			if (BL==180) ESBYTE[ESI] = 254; //
29
			if ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
30
			if ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
31
        }
32
        ESI++;
33
   }
34
}
35
 
36
 
37
byte mas[66] = "椥娩㦢Ꞁ";
38
inline fastcall void koitodos( EDI)
39
{
40
	while (BL=ESBYTE[EDI])
41
	{
42
		if (BL >= 0xC0)
43
		{
44
			BL -= 0xC0;
45
			ESBYTE[EDI] = mas[BL];
46
		}
47
		//if (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i';
48
		EDI++;
49
	}
50
}
51
 
52
//Asper, lev
53
//uncomplete
54
inline fastcall void utf8rutodos( ESI)
55
{
56
    EDI=ESI;
57
  while (BL=ESBYTE[ESI])
58
  {
59
    if (BL == 0xD0) || (BL == 0xD1) EDI--;
60
        else if (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //
61
        else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //
62
        //0xE2 0x80 - 
63
        else if (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
64
        switch (ESBYTE[ESI+2])
65
        {
66
        case 0x93: //long defis
67
        case 0x94:
68
        {
69
          ESBYTE[EDI] = '-';
70
          ESI+=2;
71
            break;
72
        }
73
        case 0xA2: //central point
74
        {
75
          ESBYTE[EDI] = '*';
76
          ESI+=2;
77
            break;
78
        }
79
        case 0xA6: //
80
        {
81
          ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.';
82
          EDI+=2;
83
          ESI+=2;
84
          break;
85
          }
86
        }
87
 
88
        else if (BL == 0xC2) // ?
89
          switch(ESBYTE[ESI+1]) {
90
            case 0xAB: //"
91
            case 0xBB: //"
92
              {
93
                ESBYTE[EDI] = '\"';
94
                ESI++;
95
                break;
96
              }
97
            case 0xB7: // _
98
              {
99
                ESBYTE[EDI] = '_';
100
                ESI++;
101
                break;
102
              }
103
            case 0xA0: // Alt+160 -  
104
              {
105
                ESBYTE[EDI] = ' ';
106
                ESI++;
107
                break;
108
              }
109
            case 0xB0: // 
110
              {
111
                ESBYTE[EDI] = '\29';
112
                ESI++;
113
                break;
114
              }
115
			case 0xA9: // (c) ---  _
116
			{
117
			  ESBYTE[EDI] = 'c';
118
			  ESI++;
119
			  break;
120
			}
121
			case 0xAE: // (r)
122
			{
123
			  ESBYTE[EDI] = 'r';
124
			  ESI++;
125
			  break;
126
			}
127
     }
128
 
129
        else if (BL >= 0x90) && (BL <= 0xAF)
130
    {
131
      BL -= 0x10;
132
      ESBYTE[EDI] = BL;
133
    }
134
        else if (BL >= 0x80) && (BL <= 0x8F)
135
    {
136
      BL += 0x60;
137
      ESBYTE[EDI] = BL;
138
    }
139
      else if (BL >= 0xB0) && (BL <= 0xBF)
140
    {
141
     BL -= 0x10;
142
     ESBYTE[EDI] = BL;
143
    }
144
    else ESBYTE[EDI] = BL;
145
    ESI++;
146
    EDI++;
147
  }
148
  while (EDI
149
  {
150
    ESBYTE[EDI] = ' ';
151
    EDI++;
152
   }
153
}
154
 
155
//------------------------------------------------------------------------------
156
 
157
:dword Hex2Symb(char* htmlcolor)
158
{
159
  dword j=0, symbol=0;
160
  char ch=0x00;
161
  for (;j<2;j++)
162
  {
163
    ch=ESBYTE[htmlcolor+j];
164
    if (ch==0x0d) || (ch=='\9') RETURN 0;
165
    if ((ch>='0') && (ch<='9')) ch -= '0';
166
    if ((ch>='A') && (ch<='F')) ch -= 'A'-10;
167
    if ((ch>='a') && (ch<='f')) ch -= 'a'-10;
168
    symbol = symbol*0x10 + ch;
169
  }
170
  wintodos(#symbol);
171
  AL=symbol;
172
}
173
 
174
 
175
#endif