Subversion Repositories Kolibri OS

Rev

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

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