Subversion Repositories Kolibri OS

Rev

Rev 5483 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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