Subversion Repositories Kolibri OS

Rev

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

  1. enum { TAG, OPTION_VALUE, TEXT, COMMENT, SCRIPT};
  2.  
  3. dword ShowSource()
  4. {
  5.         dword new_buf, new_buf_start, i, j;
  6.         int opened_font=0;
  7.         int mode = TEXT;
  8.  
  9.         if (souce_mode) return;
  10.         souce_mode = true;
  11.         new_buf = malloc(bufsize*5);
  12.         new_buf_start = new_buf;
  13.         header[strrchr(#header, '-')-2]=0;
  14.         sprintf(new_buf,"<html><head><title>Source: %s</title><body><pre>",#header);
  15.         new_buf += strlen(new_buf);
  16.         for (i=bufpointer; i<bufpointer+bufsize; i++)
  17.         {
  18.                 switch (ESBYTE[i])
  19.                 {
  20.                         case '<':
  21.                                 if (mode == TEXT) && (!strncmp(i+1,"script", 6)) {
  22.                                         mode = SCRIPT;
  23.                                         strcpy(new_buf, "<font color=#00f>&lt;script</font><font color=#994500>"); opened_font++;
  24.                                         new_buf+=54;
  25.                                         i+=6;
  26.                                         break;
  27.                                 }
  28.                                 if (mode == COMMENT) || (mode == SCRIPT) && (!strncmp(i+1,"/script>", 8)) {
  29.                                         mode = TEXT;
  30.                                         while (opened_font) {
  31.                                                 strcpy(new_buf, "</font>"); opened_font--;
  32.                                                 new_buf+=7;                                            
  33.                                         }
  34.                                         strcpy(new_buf, "<font color=#00f>&lt;/script&gt;</font>");
  35.                                         new_buf+=39;
  36.                                         i+=8;
  37.                                         break;
  38.                                 }
  39.                                 if (ESBYTE[i+1]=='!') && (ESBYTE[i+2]=='-') && (ESBYTE[i+3]=='-') {
  40.                                         mode = COMMENT;
  41.                                         strcpy(new_buf, "<font color=#bbb>&lt;"); opened_font++;
  42.                                         new_buf+=21;
  43.                                         break;
  44.                                 }
  45.                                 if (mode == TEXT) {
  46.                                         mode = TAG;
  47.                                         strcpy(new_buf, "<font color=#00f>&lt;"); opened_font++;
  48.                                         new_buf+=21;
  49.                                         break;
  50.                                 }
  51.                                 if (mode == COMMENT) || (mode == SCRIPT) {
  52.                                         strcpy(new_buf, "&lt;");
  53.                                         new_buf+=4;
  54.                                         break;
  55.                                 }
  56.                                 break;
  57.                         case '>':
  58.                                 if (mode == OPTION_VALUE) { //fix non-closed quote in TAG
  59.                                         mode = TEXT;
  60.                                         while (opened_font) {
  61.                                                 strcpy(new_buf, "&quot;</font>"); opened_font--;
  62.                                                 new_buf+=13;                                           
  63.                                         }
  64.                                         break;
  65.                                 }
  66.                                 if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-') {
  67.                                         mode = TEXT;
  68.                                         strcpy(new_buf, "&gt;</font>"); opened_font--;
  69.                                         new_buf+=11;
  70.                                         break;
  71.                                 }
  72.                                 if (mode == COMMENT) || (mode == SCRIPT) {
  73.                                         strcpy(new_buf, "&gt;");
  74.                                         new_buf+=4;
  75.                                         break;                                 
  76.                                 }
  77.                                 if (mode == TAG) {
  78.                                         mode = TEXT;
  79.                                         strcpy(new_buf, "&gt;</font>"); opened_font--;
  80.                                         new_buf+=11;
  81.                                         break;
  82.                                 }
  83.                                 break;
  84.                         case '\"':
  85.                         case '\'':
  86.                                 if (mode == TAG) {
  87.                                         mode = OPTION_VALUE;
  88.                                         strcpy(new_buf, "<font color=#F301F2>&#39;"); opened_font++;
  89.                                         new_buf+=25;
  90.                                         break;
  91.                                 }
  92.                                 if (mode == OPTION_VALUE) {
  93.                                         mode = TAG;
  94.                                         strcpy(new_buf, "&#39;</font>"); opened_font--;
  95.                                         new_buf+=12;
  96.                                         break;
  97.                                 }
  98.                         default:
  99.                                 ESBYTE[new_buf] = ESBYTE[i];
  100.                                 new_buf++;
  101.                 }
  102.         }
  103.         ESBYTE[new_buf] = 0;
  104.         bufsize = new_buf - new_buf_start;
  105.         free(bufpointer);
  106.         bufpointer = new_buf_start;
  107. }
  108.  
  109. /*
  110.  
  111. enum { TAG, OPTION_VALUE, TEXT, COMMENT, INLINE_COMMENT, CODE };
  112.  
  113. char* C_HL_keywords[] = {
  114.     "switch", "if", "while", "for", "break", "continue", "return", "else",
  115.     "union", "typedef", "static", "class", "case", "#include",
  116.     "volatile", "register", "sizeof", "typedef", "union", "goto", "const", "auto",
  117.     "#define", "#endif", "#error", "#ifdef", "#ifndef", "#undef", "#if", "#else",
  118.     "inline",
  119.  
  120.     "int ", "dword ", "long ", "double ", "float ", "char ", "unsigned ", "signed ",
  121.     "void ", "bool ", "enum ", "byte ", "word ", "struct ", "NULL", "loop", "stdcall ",
  122.     ":void ", ":int ", ":bool ", ":dword ", NULL
  123. };
  124.  
  125. dword ShowCodeSource()
  126. {
  127.         dword new_buf, new_buf_start, i;
  128.         int mode = CODE;
  129.  
  130.         char spstr[64];
  131.         dword keylen;
  132.         dword keyn;
  133.         dword keycolor;
  134.  
  135.         new_buf = malloc(bufsize*10);
  136.         new_buf_start = new_buf;
  137.         sprintf(new_buf,"<html><head><title>C/C++/C-- source: %s</title><body><pre>",#URL);
  138.         new_buf += strlen(new_buf);
  139.         for (i=bufpointer; i<bufpointer+bufsize; i++)
  140.         {
  141.                 if ('<' == ESBYTE[i]) {
  142.                         strcpy(new_buf, "&lt;");
  143.                         new_buf+=4;
  144.                         continue;
  145.                 }
  146.                 if ('>' == ESBYTE[i]) {
  147.                         strcpy(new_buf, "&gt;");
  148.                         new_buf+=4;
  149.                         continue;
  150.                 }
  151.                 if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) {
  152.                         strcpy(new_buf, "<font color=#CF00FF>?</font>");
  153.                         ESBYTE[new_buf+20] = ESBYTE[i];
  154.                         new_buf+=28;
  155.                         if (ESBYTE[i+1] == 'x') {
  156.                                 strcpy(new_buf, "<font color=#CF00FF>x</font>");
  157.                                 new_buf+=28;
  158.                                 i++;
  159.                         }
  160.                         continue;
  161.                 }
  162.  
  163.                 if (CODE == mode) && ('\"' == ESBYTE[i]) {
  164.                         mode = TEXT;
  165.                         strcpy(new_buf, "<font color=#080>\"");
  166.                         new_buf+=18;
  167.                         continue;
  168.                 }
  169.                 if (TEXT == mode) && ('\"' == ESBYTE[i]) {
  170.                         mode = CODE;
  171.                         strcpy(new_buf, "\"</font>");
  172.                         new_buf+=8;
  173.                         continue;              
  174.                 }
  175.  
  176.                 if (! strncmp(i, "//", 2) ) && (mode == CODE) {
  177.                         mode = INLINE_COMMENT;
  178.                         strcpy(new_buf, "<font color=#777>//");
  179.                         new_buf+=19;
  180.                         i++;
  181.                         continue;
  182.                 }
  183.  
  184.                 if (INLINE_COMMENT == mode) {
  185.                         if (13 == ESBYTE[i]) {
  186.                                 mode = CODE;
  187.                                 strcpy(new_buf, "\13</font>");
  188.                                 new_buf+=8;
  189.                                 continue;                              
  190.                         }
  191.                 }
  192.  
  193.                 if (! strncmp(i, "/*", 2) ) {
  194.                         mode = COMMENT;
  195.                         strcpy(new_buf, "<font color=#665>/*");
  196.                         new_buf+=19;
  197.                         i++;
  198.                         continue;
  199.                 }
  200.                 if (! strncmp(i, "*/", 2) ) {
  201.                         mode = CODE;
  202.                         strcpy(new_buf, "*/</font>");
  203.                         new_buf+=9;
  204.                         i++;
  205.                         continue;
  206.                 }
  207.  
  208.                 if (CODE == mode) for (keyn=0; C_HL_keywords[keyn]!=NULL; keyn++)
  209.                 {
  210.                         keylen = strlen(C_HL_keywords[keyn]);
  211.                         if (! strncmp(i, C_HL_keywords[keyn], keylen) ) {
  212.  
  213.                                 if (keyn<31) keycolor="#f00"; else keycolor="#00f";
  214.                                 sprintf(#spstr, "<font color=%s>%s</font>", keycolor, C_HL_keywords[keyn]);
  215.                                 strcpy(new_buf, #spstr);
  216.  
  217.                                 new_buf += keylen + 24;
  218.                                 i += keylen-1;
  219.                                 goto _CONTINUE;
  220.                         }
  221.                 }
  222.                 ESBYTE[new_buf] = ESBYTE[i];
  223.                 new_buf++;
  224.                 _CONTINUE:             
  225.         }
  226.         ESBYTE[new_buf] = 0;
  227.         bufsize = new_buf - new_buf_start;
  228.         free(bufpointer);
  229.         bufpointer = new_buf_start;
  230. }
  231. */