enum { TAG, OPTION_VALUE, TEXT, COMMENT }; //you are butifull, you are butifull dword ShowSource() { dword new_buf, new_buf_start, i; byte ww, mode; if (souce_mode) return; souce_mode = true; new_buf = malloc(bufsize*5); new_buf_start = new_buf; header[strrchr(#header, '-')-2]=0; new_buf += sprintf(new_buf,"
",#header); for (i=bufpointer; i<"); new_buf+=21; mode = COMMENT; } if (mode != COMMENT) { strcpy(new_buf, "<"); new_buf+=21; mode = TAG; } break; case '>': if (mode == OPTION_VALUE) //fix non-closed quote in TAG { strcpy(new_buf, """); new_buf+=13; mode = TAG; } if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-') { strcpy(new_buf, ">"); new_buf+=11; mode = TEXT; } if (mode == TAG) { strcpy(new_buf, ">"); new_buf+=11; mode = TEXT; } break; case '\"': case '\'': if (mode == TAG) { strcpy(new_buf, "'"); new_buf+=22; mode = OPTION_VALUE; break; } if (mode == OPTION_VALUE) { strcpy(new_buf, "'"); new_buf+=12; mode = TAG; break; } default: ESBYTE[new_buf] = ww; new_buf++; } } ESBYTE[new_buf] = 0; bufsize = new_buf - new_buf_start; free(bufpointer); bufpointer = new_buf_start; }