Subversion Repositories Kolibri OS

Rev

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