Subversion Repositories Kolibri OS

Rev

Rev 3067 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. inline fastcall void wintodos( ESI)
  3. {
  4.    while (BL=ESBYTE[ESI])
  5.    {
  6.         IF (BL>=192)
  7.         {
  8.              IF (BL>=240) ESBYTE[ESI] = BL - 16;
  9.              ELSE ESBYTE[ESI] = BL - 64;
  10.         }
  11.         ELSE
  12.         {
  13.                         IF (BL==178) ESBYTE[ESI] = 73;  //I
  14.                         IF (BL==179) ESBYTE[ESI] = 105; //i
  15.                         IF (BL==175) ESBYTE[ESI] = 244; //J
  16.                         IF (BL==191) ESBYTE[ESI] = 245; //j
  17.                         IF (BL==170) ESBYTE[ESI] = 242; //E
  18.                         IF (BL==186) ESBYTE[ESI] = 243; //e
  19.                         IF (BL==168) ESBYTE[ESI] = 240; //Ё
  20.                         IF (BL==184) ESBYTE[ESI] = 'e'; //e
  21.                         IF (BL==180) ESBYTE[ESI] = 254; //у
  22.                         IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34;
  23.                         IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45;
  24.         }
  25.         ESI++;
  26.    }
  27. }
  28.  
  29.  
  30. byte mas[66] = "юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ";
  31. inline fastcall void koitodos( EDI)
  32. {
  33.         WHILE (BL=ESBYTE[EDI])
  34.         {      
  35.                 IF (BL >= 0xC0)
  36.                 {
  37.                         BL -= 0xC0;
  38.                         ESBYTE[EDI] = mas[BL];
  39.                 }
  40.                 //IF (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i';
  41.                 EDI++;
  42.         }
  43. }
  44.  
  45. //Asper, lev
  46. //uncomplete
  47. inline fastcall void utf8rutodos( ESI)
  48. {
  49.     EDI=ESI;
  50.   while (BL=ESBYTE[ESI])
  51.   {
  52.     IF (BL == 0xD0) || (BL == 0xD1) EDI--;
  53.         else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //°
  54.         else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //ь
  55.         //0xE2 0x80 - ёуЁєяяшЁютрЄ№
  56.         else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80)
  57.         SWITCH (ESBYTE[ESI+2])
  58.         {
  59.         case 0x93: //long defis
  60.         CASE 0x94:
  61.         {
  62.           ESBYTE[EDI] = '-';
  63.           ESI+=2;
  64.             BREAK;
  65.         }
  66.         CASE 0xA2: //central point
  67.         {
  68.           ESBYTE[EDI] = '*';
  69.           ESI+=2;
  70.             BREAK;
  71.         }
  72.         CASE 0xA6: //ьэюуюЄюўшх
  73.         {
  74.           ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.';
  75.           EDI+=2;
  76.           ESI+=2;
  77.           break;
  78.           }
  79.         }
  80.  
  81.         else IF (BL == 0xC2) //ЄрсышЎє яхЁхъюфшЁютюъ?
  82.           SWITCH(ESBYTE[ESI+1]) {
  83.             case 0xAB: //"
  84.             CASE 0xBB: //"
  85.               {
  86.                 ESBYTE[EDI] = '\"';
  87.                 ESI++;
  88.                 BREAK;
  89.               }
  90.             CASE 0xB7: // _
  91.               {
  92.                 ESBYTE[EDI] = '_';
  93.                 ESI++;
  94.                 BREAK;
  95.               }
  96.             CASE 0xA0: // Alt+160 - эхЁрчсштр■∙шщ яЁюсхы
  97.               {
  98.                 ESBYTE[EDI] = ' ';
  99.                 ESI++;
  100.                 BREAK;
  101.               }
  102.             CASE 0xB0: // уЁрфєё
  103.               {
  104.                 ESBYTE[EDI] = '\29';
  105.                 ESI++;
  106.                 BREAK;
  107.               }
  108.                         CASE 0xA9: // (c) --- т√ыхЄ ╬_ю
  109.                         {
  110.                           ESBYTE[EDI] = 'c';
  111.                           //ESBYTE[EDI] = '(';
  112.                           //ESBYTE[EDI+1] = 'c';
  113.                           //ESBYTE[EDI+2] = ')';
  114.                           //EDI+=2;
  115.                           ESI++;
  116.                           BREAK;
  117.                         }
  118.                         CASE 0xAE: // (r)
  119.                         {
  120.                           ESBYTE[EDI] = 'r';
  121.                           //ESBYTE[EDI] = '(';
  122.                           //ESBYTE[EDI+1] = 'r';
  123.                           //ESBYTE[EDI+2] = ')';
  124.                           //EDI+=2;
  125.                           ESI++;
  126.                           BREAK;
  127.                         }
  128.      }
  129.  
  130.         ELSE IF (BL >= 0x90) && (BL <= 0xAF)
  131.     {
  132.       BL -= 0x10;
  133.       ESBYTE[EDI] = BL;
  134.     }
  135.         ELSE IF (BL >= 0x80) && (BL <= 0x8F)
  136.     {
  137.       BL += 0x60;
  138.       ESBYTE[EDI] = BL;
  139.     }
  140.       ELSE IF (BL >= 0xB0) && (BL <= 0xBF)
  141.     {
  142.      BL -= 0x10;
  143.      ESBYTE[EDI] = BL;
  144.     }
  145.     ELSE ESBYTE[EDI] = BL;
  146.     ESI++;
  147.     EDI++;
  148.   }
  149.   WHILE (EDI<ESI)
  150.   {
  151.     ESBYTE[EDI] = ' ';
  152.     EDI++;
  153.    }
  154. }
  155.  
  156. //------------------------------------------------------------------------------
  157.  
  158. dword Hex2Symb(char* htmlcolor)
  159. {
  160.   dword j=0, symbol=0;
  161.   char ch=0x00;
  162.   FOR (;j<2;j++)
  163.   {
  164.     ch=ESBYTE[htmlcolor+j];
  165.     IF (ch==0x0d) || (ch=='\9') RETURN '';
  166.     IF ((ch>='0') && (ch<='9')) ch -= '0';
  167.     IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
  168.     IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
  169.     symbol = symbol*0x10 + ch;
  170.   }
  171.   wintodos(#symbol);
  172.   AL=symbol;
  173. }