Subversion Repositories Kolibri OS

Rev

Rev 5598 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5598 Rev 5676
1
#ifndef INCLUDE_ENCODING_H
1
#ifndef INCLUDE_ENCODING_H
2
#define INCLUDE_ENCODING_H
2
#define INCLUDE_ENCODING_H
-
 
3
#print "[include ]\n"
3
 
4
 
4
#ifndef INCLUDE_KOLIBRI_H
5
#ifndef INCLUDE_KOLIBRI_H
5
#include "../lib/kolibri.h"
6
#include "../lib/kolibri.h"
6
#endif
7
#endif
7
 
8
 
8
inline fastcall void wintodos( ESI) 
9
inline fastcall void wintodos( ESI) 
9
{
10
{
10
   while (BL=ESBYTE[ESI])
11
   while (BL=ESBYTE[ESI])
11
   {
12
   {
12
        if (BL>=192)
13
        if (BL>=192)
13
        {
14
        {
14
             if (BL>=240) ESBYTE[ESI] = BL - 16;
15
             if (BL>=240) ESBYTE[ESI] = BL - 16;
15
             else ESBYTE[ESI] = BL - 64;
16
             else ESBYTE[ESI] = BL - 64;
16
        }
17
        }
17
        else
18
        else
18
        {
19
        {
19
			if (BL==178) ESBYTE[ESI] = 73;  //I
20
			if (BL==178) ESBYTE[ESI] = 73;  //I
20
			if (BL==179) ESBYTE[ESI] = 105; //i
21
			if (BL==179) ESBYTE[ESI] = 105; //i
21
			if (BL==175) ESBYTE[ESI] = 244; //J
22
			if (BL==175) ESBYTE[ESI] = 244; //J
22
			if (BL==191) ESBYTE[ESI] = 245; //j
23
			if (BL==191) ESBYTE[ESI] = 245; //j
23
			if (BL==170) ESBYTE[ESI] = 242; //E
24
			if (BL==170) ESBYTE[ESI] = 242; //E
24
			if (BL==186) ESBYTE[ESI] = 243; //e
25
			if (BL==186) ESBYTE[ESI] = 243; //e
25
			if (BL==168) ESBYTE[ESI] = 240; //ð
26
			if (BL==168) ESBYTE[ESI] = 240; //ð
26
			if (BL==184) ESBYTE[ESI] = 'e'; //e
27
			if (BL==184) ESBYTE[ESI] = 'e'; //e
27
			if (BL==180) ESBYTE[ESI] = 254; //ã
28
			if (BL==180) ESBYTE[ESI] = 254; //ã
28
			if ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
29
			if ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
29
			if ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
30
			if ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
30
        }
31
        }
31
        ESI++;
32
        ESI++;
32
   }
33
   }
33
}
34
}
34
 
35
 
35
 
36
 
36
byte mas[66] = "椥ä£å¨©ª«¬­®¯ïàáâ㦢ìë§èíéçꞀ–„…”ƒ•ˆ‰Š‹ŒŽŸ‘’“†‚œ›‡˜™—š";
37
byte mas[66] = "椥ä£å¨©ª«¬­®¯ïàáâ㦢ìë§èíéçꞀ–„…”ƒ•ˆ‰Š‹ŒŽŸ‘’“†‚œ›‡˜™—š";
37
inline fastcall void koitodos( EDI)
38
inline fastcall void koitodos( EDI)
38
{
39
{
39
	while (BL=ESBYTE[EDI])
40
	while (BL=ESBYTE[EDI])
40
	{	
41
	{	
41
		if (BL >= 0xC0)
42
		if (BL >= 0xC0)
42
		{
43
		{
43
			BL -= 0xC0;
44
			BL -= 0xC0;
44
			ESBYTE[EDI] = mas[BL];
45
			ESBYTE[EDI] = mas[BL];
45
		}
46
		}
46
		//if (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i';
47
		//if (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i';
47
		EDI++;
48
		EDI++;
48
	}
49
	}
49
}
50
}
50
 
51
 
51
//Asper, lev
52
//Asper, lev
52
//uncomplete
53
//uncomplete
53
inline fastcall void utf8rutodos( ESI)
54
inline fastcall void utf8rutodos( ESI)
54
{
55
{
55
    EDI=ESI;
56
    EDI=ESI;
56
  while (BL=ESBYTE[ESI])
57
  while (BL=ESBYTE[ESI])
57
  {
58
  {
58
    if (BL == 0xD0) || (BL == 0xD1) EDI--;
59
    if (BL == 0xD0) || (BL == 0xD1) EDI--;
59
        else if (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //ø
60
        else if (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //ø
60
        else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //ì
61
        else if (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //ì
61
        //0xE2 0x80 - ñãðóïïèðîâàòü
62
        //0xE2 0x80 - ñãðóïïèðîâàòü
62
        else if (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
63
        else if (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
63
        switch (ESBYTE[ESI+2])
64
        switch (ESBYTE[ESI+2])
64
        {
65
        {
65
        case 0x93: //long defis
66
        case 0x93: //long defis
66
        case 0x94:
67
        case 0x94:
67
        {
68
        {
68
          ESBYTE[EDI] = '-';
69
          ESBYTE[EDI] = '-';
69
          ESI+=2;
70
          ESI+=2;
70
            break;
71
            break;
71
        }
72
        }
72
        case 0xA2: //central point
73
        case 0xA2: //central point
73
        {
74
        {
74
          ESBYTE[EDI] = '*';
75
          ESBYTE[EDI] = '*';
75
          ESI+=2;
76
          ESI+=2;
76
            break;
77
            break;
77
        }
78
        }
78
        case 0xA6: //ìíîãîòî÷èå
79
        case 0xA6: //ìíîãîòî÷èå
79
        {
80
        {
80
          ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.';
81
          ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.';
81
          EDI+=2;
82
          EDI+=2;
82
          ESI+=2;
83
          ESI+=2;
83
          break;
84
          break;
84
          }
85
          }
85
        }
86
        }
86
 
87
 
87
        else if (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê?
88
        else if (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê?
88
          switch(ESBYTE[ESI+1]) {
89
          switch(ESBYTE[ESI+1]) {
89
            case 0xAB: //"
90
            case 0xAB: //"
90
            case 0xBB: //"
91
            case 0xBB: //"
91
              {
92
              {
92
                ESBYTE[EDI] = '\"';
93
                ESBYTE[EDI] = '\"';
93
                ESI++;
94
                ESI++;
94
                break;
95
                break;
95
              }
96
              }
96
            case 0xB7: // _
97
            case 0xB7: // _
97
              {
98
              {
98
                ESBYTE[EDI] = '_';
99
                ESBYTE[EDI] = '_';
99
                ESI++;
100
                ESI++;
100
                break;
101
                break;
101
              }
102
              }
102
            case 0xA0: // Alt+160 - íåðàçáèâàþùèé ïðîáåë
103
            case 0xA0: // Alt+160 - íåðàçáèâàþùèé ïðîáåë
103
              {
104
              {
104
                ESBYTE[EDI] = ' ';
105
                ESBYTE[EDI] = ' ';
105
                ESI++;
106
                ESI++;
106
                break;
107
                break;
107
              }
108
              }
108
            case 0xB0: // ãðàäóñ
109
            case 0xB0: // ãðàäóñ
109
              {
110
              {
110
                ESBYTE[EDI] = '\29';
111
                ESBYTE[EDI] = '\29';
111
                ESI++;
112
                ESI++;
112
                break;
113
                break;
113
              }
114
              }
114
			case 0xA9: // (c) --- âûëåò Î_î
115
			case 0xA9: // (c) --- âûëåò Î_î
115
			{
116
			{
116
			  ESBYTE[EDI] = 'c';
117
			  ESBYTE[EDI] = 'c';
117
			  ESI++;
118
			  ESI++;
118
			  break;
119
			  break;
119
			}
120
			}
120
			case 0xAE: // (r)
121
			case 0xAE: // (r)
121
			{
122
			{
122
			  ESBYTE[EDI] = 'r';
123
			  ESBYTE[EDI] = 'r';
123
			  ESI++;
124
			  ESI++;
124
			  break;
125
			  break;
125
			} 
126
			} 
126
     }
127
     }
127
 
128
 
128
        else if (BL >= 0x90) && (BL <= 0xAF)
129
        else if (BL >= 0x90) && (BL <= 0xAF)
129
    {
130
    {
130
      BL -= 0x10;
131
      BL -= 0x10;
131
      ESBYTE[EDI] = BL;
132
      ESBYTE[EDI] = BL;
132
    }
133
    }
133
        else if (BL >= 0x80) && (BL <= 0x8F)
134
        else if (BL >= 0x80) && (BL <= 0x8F)
134
    {
135
    {
135
      BL += 0x60;
136
      BL += 0x60;
136
      ESBYTE[EDI] = BL;
137
      ESBYTE[EDI] = BL;
137
    }
138
    }
138
      else if (BL >= 0xB0) && (BL <= 0xBF)
139
      else if (BL >= 0xB0) && (BL <= 0xBF)
139
    {
140
    {
140
     BL -= 0x10;
141
     BL -= 0x10;
141
     ESBYTE[EDI] = BL;
142
     ESBYTE[EDI] = BL;
142
    }
143
    }
143
    else ESBYTE[EDI] = BL;
144
    else ESBYTE[EDI] = BL;
144
    ESI++;
145
    ESI++;
145
    EDI++;
146
    EDI++;
146
  }
147
  }
147
  while (EDI
148
  while (EDI
148
  {
149
  {
149
    ESBYTE[EDI] = ' ';
150
    ESBYTE[EDI] = ' ';
150
    EDI++;
151
    EDI++;
151
   }
152
   }
152
}
153
}
153
 
154
 
154
//------------------------------------------------------------------------------
155
//------------------------------------------------------------------------------
155
 
156
 
156
:dword Hex2Symb(char* htmlcolor)
157
:dword Hex2Symb(char* htmlcolor)
157
{
158
{
158
  dword j=0, symbol=0;
159
  dword j=0, symbol=0;
159
  char ch=0x00;
160
  char ch=0x00;
160
  for (;j<2;j++)
161
  for (;j<2;j++)
161
  {
162
  {
162
    ch=ESBYTE[htmlcolor+j];
163
    ch=ESBYTE[htmlcolor+j];
163
    if (ch==0x0d) || (ch=='\9') RETURN 0;
164
    if (ch==0x0d) || (ch=='\9') RETURN 0;
164
    if ((ch>='0') && (ch<='9')) ch -= '0';
165
    if ((ch>='0') && (ch<='9')) ch -= '0';
165
    if ((ch>='A') && (ch<='F')) ch -= 'A'-10;
166
    if ((ch>='A') && (ch<='F')) ch -= 'A'-10;
166
    if ((ch>='a') && (ch<='f')) ch -= 'a'-10;
167
    if ((ch>='a') && (ch<='f')) ch -= 'a'-10;
167
    symbol = symbol*0x10 + ch;
168
    symbol = symbol*0x10 + ch;
168
  }
169
  }
169
  wintodos(#symbol);
170
  wintodos(#symbol);
170
  AL=symbol;
171
  AL=symbol;
171
}
172
}
172
 
173
 
173
 
174
 
174
#endif
175
#endif
175
>
176
>
176
>
177
>