Subversion Repositories Kolibri OS

Rev

Rev 5483 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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