Subversion Repositories Kolibri OS

Rev

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

  1. enum { TAG, OPTION_VALUE, TEXT, COMMENT };
  2.  
  3. //you are butifull, you are butifull
  4. dword ShowSource()
  5. {
  6.         dword new_buf, new_buf_start, i;
  7.         byte ww, mode;
  8.  
  9.         if (souce_mode) return;
  10.         souce_mode = true;
  11.         new_buf = malloc(bufsize*5);
  12.         new_buf_start = new_buf;
  13.         strcpy(new_buf, "<html><head><title>");
  14.         if (strlen(#header)-strlen(#version)>0) header[strlen(#header)-strlen(#version)-2] = 0; else strcpy(#header, "Source");
  15.         strcat(new_buf, #header);
  16.         strcat(new_buf, "</title><body><pre>");
  17.         new_buf += strlen(new_buf);
  18.         for (i=bufpointer; i<bufpointer+bufsize; i++)
  19.         {
  20.                 ww = ESBYTE[i];
  21.                 switch (ww)
  22.                 {
  23.                         case '<':
  24.                                 if (ESBYTE[i+1]=='!') && (ESBYTE[i+2]=='-') && (ESBYTE[i+3]=='-')
  25.                                 {
  26.                                         strcpy(new_buf, "<font color=#ccc>&lt;");
  27.                                         new_buf+=21;
  28.                                         mode = COMMENT;
  29.                                 }
  30.                                 else
  31.                                 {
  32.                                         strcpy(new_buf, "<font color=#00f>&lt;");
  33.                                         new_buf+=21;
  34.                                         mode = TAG;
  35.                                 }
  36.                                 break;
  37.                         case '>':
  38.                                 if (mode == OPTION_VALUE) //fix non-closed quote in TAG
  39.                                 {
  40.                                         strcpy(new_buf, "&quot;</font>");
  41.                                         new_buf+=13;                                   
  42.                                         mode = TAG;
  43.                                 }
  44.                                 if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-')
  45.                                 {
  46.                                         strcpy(new_buf, "&gt;</font>");
  47.                                         new_buf+=11;
  48.                                         mode = TEXT;
  49.                                 }
  50.                                 if (mode == TAG)
  51.                                 {
  52.                                         strcpy(new_buf, "&gt;</font>");
  53.                                         new_buf+=11;
  54.                                         mode = TEXT;
  55.                                 }
  56.                                 break;
  57.                         case '\"':
  58.                         case '\'':
  59.                                 if (mode == TAG)
  60.                                 {
  61.                                         strcpy(new_buf, "<font color=#f0f>&#39;");
  62.                                         new_buf+=22;
  63.                                         mode = OPTION_VALUE;
  64.                                         break;
  65.                                 }
  66.                                 if (mode == OPTION_VALUE)
  67.                                 {
  68.                                         strcpy(new_buf, "&#39;</font>");
  69.                                         new_buf+=12;
  70.                                         mode = TAG;
  71.                                         break;
  72.                                 }
  73.                         default:
  74.                                 ESBYTE[new_buf] = ww;
  75.                                 new_buf++;
  76.                 }
  77.         }
  78.         ESBYTE[new_buf] = 0;
  79.         bufsize = new_buf - new_buf_start;
  80.         free(bufpointer);
  81.         bufpointer = new_buf_start;
  82. }