Subversion Repositories Kolibri OS

Rev

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

  1. enum { TAG=1, VALUE, TEXT, COMMENT, SCRIPT};
  2.  
  3. int opened_font_counter=0;
  4. int mode;
  5.  
  6. dword source_buf_end;
  7.  
  8. void SourceBufAdd(dword _mode, src)
  9. {
  10.         dword font_found_pointer, src_orig = src;
  11.  
  12.         if (_mode) mode = _mode;
  13.  
  14.         strcpy(source_buf_end, src);
  15.         source_buf_end += strlen(source_buf_end);
  16.  
  17.         if (font_found_pointer = strstr(src, "</font>")) {
  18.                 opened_font_counter--;
  19.                 src = font_found_pointer+2;
  20.         }
  21.  
  22.         src = src_orig;
  23.         if (font_found_pointer = strstr(src, "<font ")) {
  24.                 opened_font_counter++;
  25.                 src = font_found_pointer+2;
  26.         }
  27. }
  28.  
  29. void CloseAllOpenedFonts(dword _mode)
  30. {
  31.         while (opened_font_counter) SourceBufAdd(_mode, "</font>");
  32. }
  33.  
  34. dword ShowSource(dword _bufdata, _in_bufsize)
  35. {
  36.         dword i, j;
  37.         bool activate_script_mode = false;
  38.         dword source_buf_start;
  39.  
  40.         opened_font_counter=0;
  41.         source_buf_start = malloc(_in_bufsize*5);
  42.         source_buf_end = source_buf_start;
  43.  
  44.         SourceBufAdd(TEXT, "<html><head><title>View Source</title><body><pre>");
  45.  
  46.         for (i=_bufdata; i<_bufdata+_in_bufsize; i++) switch (ESBYTE[i])
  47.         {
  48.                 case '<':
  49.                         if (!strncmp(i+1,"!--", 3)) SourceBufAdd(COMMENT, "<font color=#bbb>&lt;");
  50.                         else if (SCRIPT == mode) {
  51.                                 if (!strncmp(i+1,"/script>", 8)) {
  52.                                         CloseAllOpenedFonts(NULL);
  53.                                         SourceBufAdd(TAG, "<font color=#00f>&lt;");
  54.                                 }
  55.                                 else SourceBufAdd(NULL, "&lt;");
  56.                         }
  57.                         else if (COMMENT == mode) {
  58.                                 SourceBufAdd(NULL, "&lt;");
  59.                         }
  60.                         else if (TEXT == mode) {
  61.                                 if (!strncmp(i+1,"script", 6)) activate_script_mode = true;
  62.                                 SourceBufAdd(TAG, "<font color=#00f>&lt;");
  63.                         }
  64.                         break;
  65.                 case '>':
  66.                         if (TAG == mode) && (activate_script_mode) {
  67.                                 activate_script_mode = false;
  68.                                 SourceBufAdd(SCRIPT, "&gt;</font><font color=#994500>");
  69.                         }
  70.                         else if (VALUE == mode) CloseAllOpenedFonts(TEXT);
  71.                         else if (COMMENT == mode) && (!strncmp(i-2,"--", 2)) {
  72.                                 SourceBufAdd(TEXT, "&gt;");
  73.                                 CloseAllOpenedFonts(TEXT);
  74.                         }
  75.                         else if (COMMENT == mode) || (SCRIPT == mode) SourceBufAdd(NULL, "&gt;");
  76.                         else if (TAG == mode) SourceBufAdd(TEXT, "&gt;</font>");
  77.                         break;
  78.                 case '&':
  79.                         SourceBufAdd(NULL, "&amp;");
  80.                         break;
  81.                 case '\"':
  82.                 case '\'':
  83.                         if (TAG == mode) SourceBufAdd(VALUE, "<font color=#F301F2>&quot;");
  84.                         else if (VALUE == mode) SourceBufAdd(TAG, "&quot;</font>");
  85.                         else SourceBufAdd(NULL, "&quot;");
  86.                         break;
  87.                 default:
  88.                         ESBYTE[source_buf_end] = ESBYTE[i];
  89.                         source_buf_end++;
  90.         }
  91.         ESBYTE[source_buf_end] = 0;
  92.         LoadInternalPage(source_buf_start, source_buf_end-source_buf_start);
  93.         free(source_buf_start);
  94. }
  95.