Subversion Repositories Kolibri OS

Rev

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