Rev 7437 | Rev 7750 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7746 | leency | 1 | enum { TAG, OPTION_VALUE, TEXT, COMMENT, SCRIPT}; |
4719 | leency | 2 | |
4718 | leency | 3 | dword ShowSource() |
4 | { |
||
7746 | leency | 5 | dword new_buf, new_buf_start, i, j; |
6 | int opened_font=0; |
||
7 | int mode = TEXT; |
||
4718 | leency | 8 | |
9 | if (souce_mode) return; |
||
10 | souce_mode = true; |
||
4725 | leency | 11 | new_buf = malloc(bufsize*5); |
12 | new_buf_start = new_buf; |
||
5773 | leency | 13 | header[strrchr(#header, '-')-2]=0; |
6794 | leency | 14 | sprintf(new_buf," |
15 | new_buf += strlen(new_buf); |
||
4718 | leency | 16 | for (i=bufpointer; i |
17 | { |
||
7437 | leency | 18 | switch (ESBYTE[i]) |
4718 | leency | 19 | { |
20 | case '<': |
||
7746 | leency | 21 | if (mode == TEXT) && (!strncmp(i+1,"script", 6)) { |
22 | mode = SCRIPT; |
||
23 | strcpy(new_buf, "<script"); opened_font++; |
||
24 | new_buf+=54; |
||
25 | i+=6; |
||
6986 | leency | 26 | break; |
27 | } |
||
7746 | leency | 28 | if (mode == COMMENT) || (mode == SCRIPT) && (!strncmp(i+1,"/script>", 8)) { |
29 | mode = TEXT; |
||
30 | while (opened_font) { |
||
31 | strcpy(new_buf, ""); opened_font--; |
||
32 | new_buf+=7; |
||
33 | } |
||
34 | strcpy(new_buf, "</script>"); |
||
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, "<"); opened_font++; |
||
4725 | leency | 42 | new_buf+=21; |
6986 | leency | 43 | break; |
4718 | leency | 44 | } |
7746 | leency | 45 | if (mode == TEXT) { |
46 | mode = TAG; |
||
47 | strcpy(new_buf, "<"); opened_font++; |
||
4725 | leency | 48 | new_buf+=21; |
6986 | leency | 49 | break; |
4718 | leency | 50 | } |
7746 | leency | 51 | if (mode == COMMENT) || (mode == SCRIPT) { |
52 | strcpy(new_buf, "<"); |
||
53 | new_buf+=4; |
||
54 | break; |
||
55 | } |
||
4718 | leency | 56 | break; |
57 | case '>': |
||
7746 | leency | 58 | if (mode == OPTION_VALUE) { //fix non-closed quote in TAG |
59 | mode = TEXT; |
||
60 | while (opened_font) { |
||
61 | strcpy(new_buf, """); opened_font--; |
||
62 | new_buf+=13; |
||
63 | } |
||
6986 | leency | 64 | break; |
4718 | leency | 65 | } |
7746 | leency | 66 | if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-') { |
67 | mode = TEXT; |
||
68 | strcpy(new_buf, ">"); opened_font--; |
||
4725 | leency | 69 | new_buf+=11; |
6986 | leency | 70 | break; |
4718 | leency | 71 | } |
7746 | leency | 72 | if (mode == COMMENT) || (mode == SCRIPT) { |
6986 | leency | 73 | strcpy(new_buf, ">"); |
74 | new_buf+=4; |
||
75 | break; |
||
76 | } |
||
7746 | leency | 77 | if (mode == TAG) { |
78 | mode = TEXT; |
||
79 | strcpy(new_buf, ">"); opened_font--; |
||
4725 | leency | 80 | new_buf+=11; |
6986 | leency | 81 | break; |
4718 | leency | 82 | } |
83 | break; |
||
84 | case '\"': |
||
85 | case '\'': |
||
7746 | leency | 86 | if (mode == TAG) { |
4719 | leency | 87 | mode = OPTION_VALUE; |
7746 | leency | 88 | strcpy(new_buf, "'"); opened_font++; |
89 | new_buf+=25; |
||
4719 | leency | 90 | break; |
4718 | leency | 91 | } |
7746 | leency | 92 | if (mode == OPTION_VALUE) { |
93 | mode = TAG; |
||
94 | strcpy(new_buf, "'"); opened_font--; |
||
4718 | leency | 95 | new_buf+=12; |
4719 | leency | 96 | break; |
4718 | leency | 97 | } |
98 | default: |
||
7437 | leency | 99 | ESBYTE[new_buf] = ESBYTE[i]; |
4725 | leency | 100 | new_buf++; |
4718 | leency | 101 | } |
102 | } |
||
4725 | leency | 103 | ESBYTE[new_buf] = 0; |
104 | bufsize = new_buf - new_buf_start; |
||
4718 | leency | 105 | free(bufpointer); |
106 | bufpointer = new_buf_start; |
||
7437 | leency | 107 | } |
108 | |||
109 | /* |
||
7746 | leency | 110 | |
111 | enum { TAG, OPTION_VALUE, TEXT, COMMENT, INLINE_COMMENT, CODE }; |
||
112 | |||
7437 | leency | 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," |
||
138 | new_buf += strlen(new_buf); |
||
139 | for (i=bufpointer; i |
||
140 | { |
||
141 | if ('<' == ESBYTE[i]) { |
||
142 | strcpy(new_buf, "<"); |
||
143 | new_buf+=4; |
||
144 | continue; |
||
145 | } |
||
146 | if ('>' == ESBYTE[i]) { |
||
147 | strcpy(new_buf, ">"); |
||
148 | new_buf+=4; |
||
149 | continue; |
||
150 | } |
||
151 | if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) { |
||
152 | strcpy(new_buf, "?"); |
||
153 | ESBYTE[new_buf+20] = ESBYTE[i]; |
||
154 | new_buf+=28; |
||
155 | if (ESBYTE[i+1] == 'x') { |
||
156 | strcpy(new_buf, "x"); |
||
157 | new_buf+=28; |
||
158 | i++; |
||
159 | } |
||
160 | continue; |
||
161 | } |
||
162 | |||
163 | if (CODE == mode) && ('\"' == ESBYTE[i]) { |
||
164 | mode = TEXT; |
||
165 | strcpy(new_buf, "\""); |
||
166 | new_buf+=18; |
||
167 | continue; |
||
168 | } |
||
169 | if (TEXT == mode) && ('\"' == ESBYTE[i]) { |
||
170 | mode = CODE; |
||
171 | strcpy(new_buf, "\""); |
||
172 | new_buf+=8; |
||
173 | continue; |
||
174 | } |
||
175 | |||
176 | if (! strncmp(i, "//", 2) ) && (mode == CODE) { |
||
177 | mode = INLINE_COMMENT; |
||
178 | strcpy(new_buf, "//"); |
||
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"); |
||
188 | new_buf+=8; |
||
189 | continue; |
||
190 | } |
||
191 | } |
||
192 | |||
193 | if (! strncmp(i, "/*", 2) ) { |
||
194 | mode = COMMENT; |
||
195 | strcpy(new_buf, "/*"); |
||
196 | new_buf+=19; |
||
197 | i++; |
||
198 | continue; |
||
199 | } |
||
200 | if (! strncmp(i, "*/", 2) ) { |
||
201 | mode = CODE; |
||
202 | strcpy(new_buf, "*/"); |
||
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, "%s", 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 | */31)>=>'>': |