Subversion Repositories Kolibri OS

Rev

Rev 8491 | Rev 9089 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. char *unicode_symbols[]={
  2. "quot","\"",
  3. "amp", "&",
  4. "lt",  "<",
  5. "gt",  ">",
  6. "#183","\31",   "middot", "\31",
  7. "#149","-",
  8. "#151","-",
  9. "#160"," ",     "nbsp", "\t",   "emsp", " ",
  10. "#169","(c)",   "copy", "(c)",
  11. "#171","<<",    "laquo","<<",
  12. "#174","(r)",   "reg",  "(r)",
  13. "#187",">>",    "raquo",">>",
  14.  
  15. "trade", "[TM]",
  16. "bdquo", ",,",
  17.  
  18. "minus", "-",
  19. "ndash", "-",
  20. "mdash", "-", //--
  21.  
  22. "rsquo", "'", "apos", "'",
  23. "sect", "#",
  24.  
  25. "ensp",    " ",
  26. "emsp13",  " ",
  27. "emsp14",  " ",
  28. "numsp",   " ",
  29. "puncsp",  " ",
  30. "thinsp",  " ",
  31.  
  32. "#1028", "\242",
  33. "#1030", "I",
  34. "#1031", "\244",
  35.  
  36. "#8211", "-",
  37. "#8212", "-",
  38. "#8217", "'",
  39. "#8220", "\"",
  40. "#8222", "\"", "ldquo", "\"",
  41. "#8221", "\"", "rdquo", "\"",
  42. "#8470", "N",
  43. "#8722", "-",
  44. "#9642", "-", //square in the middle of the line
  45. "#9658", ">",
  46. "#9660", "v",
  47. "#10094", "<",
  48. "#10095", ">",
  49. "#65122", "+",
  50.  
  51. "#8594", "->",
  52.  
  53. "uarr",  "^",
  54. "darr",  "v",
  55. "rarr",  "->",
  56. "larr",  "<-",
  57.  
  58. "bull",  "\31",
  59. "percnt","%",
  60.  
  61. "#xfeff", "",
  62.  
  63. "times", "x",
  64. "lowast","*",
  65.  
  66. 0};
  67.  
  68.  
  69. unsigned char unicode_chars[] = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîïðñh£\243i\105\244\0";
  70.  
  71. bool GetUnicodeSymbol(dword _line, line_size, bufpos, buf_end)
  72. {
  73.         int i;
  74.         int code;
  75.         char special_code[10];
  76.         bool white_end = false;
  77.         dword bufstart = bufpos;
  78.  
  79.         for (i=0; i<9; i++, bufpos++)
  80.         {
  81.                 if (__isWhite(ESBYTE[bufpos])) {bufpos--; break;}
  82.                 if (ESBYTE[bufpos] == ';') || (bufpos >= buf_end) break;
  83.                 special_code[i] = ESBYTE[bufpos];
  84.         }
  85.         special_code[i] = '\0';
  86.        
  87.         for (i=0; unicode_symbols[i]!=0; i+=2;)
  88.         {
  89.                 if (!strcmp(#special_code, unicode_symbols[i]))
  90.                 {
  91.                         strncat(_line, unicode_symbols[i+1], line_size);
  92.                         return bufpos;
  93.                 }
  94.         }
  95.  
  96.         if (special_code[0]=='#')
  97.         {
  98.                 code = atoi(#special_code + 1);
  99.                 if (code>=0) && (code<=255)     {
  100.                         chrncat(_line, code, line_size); //NOT ALL ASCII CODES IN KOLIBRI ARE COMPATABLE WITH STANDARDS
  101.                         return bufpos;
  102.                 }
  103.                 if (code>=1040) && (code<=1040+72) {
  104.                         chrncat(_line, unicode_chars[code-1040], line_size);
  105.                         return bufpos;
  106.                 }
  107.         }
  108.  
  109.         chrncat(_line, '&', line_size);
  110.         return bufstart;
  111. }
  112.