Subversion Repositories Kolibri OS

Rev

Rev 5483 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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