Rev 7746 | Rev 7755 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7746 | Rev 7750 | ||
---|---|---|---|
Line 1... | Line -... | ||
1 | enum { TAG, OPTION_VALUE, TEXT, COMMENT, SCRIPT}; |
- | |
Line 2... | Line -... | ||
2 | - | ||
3 | dword ShowSource() |
- | |
4 | { |
1 | dword source_buf_start, source_buf_end; |
5 | dword new_buf, new_buf_start, i, j; |
2 | int opened_font=0; |
6 | int opened_font=0; |
3 | int mode; |
Line 7... | Line 4... | ||
7 | int mode = TEXT; |
4 | |
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," |
- | |
15 | new_buf += strlen(new_buf); |
- | |
16 | for (i=bufpointer; i |
- | |
17 | { |
5 | void SourceBufAdd(dword _mode, src) |
18 | switch (ESBYTE[i]) |
- | |
19 | { |
6 | { |
- | 7 | dword font_found_pointer, src_orig = src; |
|
20 | case '<': |
8 | |
- | 9 | if (_mode) mode = _mode; |
|
21 | if (mode == TEXT) && (!strncmp(i+1,"script", 6)) { |
10 | |
22 | mode = SCRIPT; |
11 | strcpy(source_buf_end, src); |
- | 12 | source_buf_end += strlen(source_buf_end); |
|
- | 13 | ||
23 | strcpy(new_buf, "<script"); opened_font++; |
14 | if (font_found_pointer = strstr(src, "")) { |
24 | new_buf+=54; |
15 | opened_font--; |
25 | i+=6; |
16 | src = font_found_pointer+2; |
26 | break; |
- | |
- | 17 | } |
|
27 | } |
18 | |
28 | if (mode == COMMENT) || (mode == SCRIPT) && (!strncmp(i+1,"/script>", 8)) { |
- | |
29 | mode = TEXT; |
19 | src = src_orig; |
30 | while (opened_font) { |
20 | if (font_found_pointer = strstr(src, " |
31 | strcpy(new_buf, ""); opened_font--; |
- | |
32 | new_buf+=7; |
- | |
33 | } |
21 | opened_font++; |
34 | strcpy(new_buf, "</script>"); |
- | |
35 | new_buf+=39; |
- | |
36 | i+=8; |
22 | src = font_found_pointer+2; |
37 | break; |
- | |
38 | } |
- | |
39 | if (ESBYTE[i+1]=='!') && (ESBYTE[i+2]=='-') && (ESBYTE[i+3]=='-') { |
- | |
40 | mode = COMMENT; |
- | |
41 | strcpy(new_buf, "<"); opened_font++; |
- | |
42 | new_buf+=21; |
23 | } |
- | 24 | } |
|
43 | break; |
25 | |
44 | } |
26 | void CloseAllOpenedFonts(dword _mode) |
45 | if (mode == TEXT) { |
27 | { |
46 | mode = TAG; |
- | |
47 | strcpy(new_buf, "<"); opened_font++; |
- | |
48 | new_buf+=21; |
28 | while (opened_font) SourceBufAdd(_mode, ""); |
- | 29 | } |
|
49 | break; |
30 | |
- | 31 | enum { TAG=1, VALUE, TEXT, COMMENT, SCRIPT}; |
|
- | 32 | dword ShowSource() |
|
- | 33 | { |
|
50 | } |
34 | dword i, j; |
- | 35 | bool activate_script_mode = false; |
|
51 | if (mode == COMMENT) || (mode == SCRIPT) { |
36 | |
- | 37 | opened_font=0; |
|
- | 38 | source_buf_start = source_buf_end = malloc(bufsize*5); |
|
- | 39 | header[strrchr(#header, '-')-2]=0; |
|
- | 40 | ||
- | 41 | SourceBufAdd(TEXT, " |
|
- | 42 | SourceBufAdd(TEXT, #header); |
|
- | 43 | SourceBufAdd(TEXT, ""); |
|
- | 44 | ||
- | 45 | for (i=bufpointer; i |
|
52 | strcpy(new_buf, "<"); |
46 | { |
- | 47 | case '<': |
|
- | 48 | if (!strncmp(i+1,"!--", 3)) SourceBufAdd(COMMENT, "<"); |
|
- | 49 | else if (SCRIPT == mode) { |
|
- | 50 | if (!strncmp(i+1,"/script>", 8)) { |
|
- | 51 | CloseAllOpenedFonts(NULL); |
|
- | 52 | SourceBufAdd(TAG, "<"); |
|
- | 53 | } |
|
- | 54 | else SourceBufAdd(NULL, "<"); |
|
- | 55 | } |
|
- | 56 | else if (COMMENT == mode) { |
|
- | 57 | SourceBufAdd(NULL, "<"); |
|
- | 58 | } |
|
- | 59 | else if (TEXT == mode) { |
|
- | 60 | if (!strncmp(i+1,"script", 6)) activate_script_mode = true; |
|
53 | new_buf+=4; |
61 | SourceBufAdd(TAG, "<"); |
54 | break; |
62 | } |
55 | } |
63 | break; |
56 | break; |
64 | case '>': |
57 | case '>': |
65 | if (TAG == mode) && (activate_script_mode) { |
58 | if (mode == OPTION_VALUE) { //fix non-closed quote in TAG |
- | |
59 | mode = TEXT; |
66 | activate_script_mode = false; |
60 | while (opened_font) { |
- | |
61 | strcpy(new_buf, """); opened_font--; |
67 | SourceBufAdd(SCRIPT, ">"); |
- | 68 | } |
|
- | 69 | else if (VALUE == mode) CloseAllOpenedFonts(TEXT); |
|
62 | new_buf+=13; |
70 | else if (COMMENT == mode) && (!strncmp(i-2,"--", 2)) { |
- | 71 | SourceBufAdd(TEXT, ">"); |
|
63 | } |
72 | CloseAllOpenedFonts(TEXT); |
64 | break; |
73 | } |
65 | } |
- | |
66 | if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-') { |
74 | else if (COMMENT == mode) || (SCRIPT == mode) SourceBufAdd(NULL, ">"); |
67 | mode = TEXT; |
- | |
68 | strcpy(new_buf, ">"); opened_font--; |
75 | else if (TAG == mode) SourceBufAdd(TEXT, ">"); |
69 | new_buf+=11; |
76 | break; |
70 | break; |
- | |
71 | } |
77 | case '&': |
72 | if (mode == COMMENT) || (mode == SCRIPT) { |
- | |
73 | strcpy(new_buf, ">"); |
- | |
74 | new_buf+=4; |
- | |
75 | break; |
- | |
76 | } |
- | |
77 | if (mode == TAG) { |
- | |
78 | mode = TEXT; |
- | |
79 | strcpy(new_buf, ">"); opened_font--; |
- | |
80 | new_buf+=11; |
- | |
81 | break; |
78 | SourceBufAdd(NULL, "&"); |
82 | } |
79 | break; |
83 | break; |
80 | case '\"': |
84 | case '\"': |
- | |
85 | case '\'': |
- | |
86 | if (mode == TAG) { |
81 | case '\'': |
87 | mode = OPTION_VALUE; |
- | |
88 | strcpy(new_buf, "'"); opened_font++; |
- | |
89 | new_buf+=25; |
- | |
90 | break; |
- | |
91 | } |
- | |
92 | if (mode == OPTION_VALUE) { |
82 | if (TAG == mode) SourceBufAdd(VALUE, "'"); |
93 | mode = TAG; |
83 | else if (VALUE == mode) SourceBufAdd(TAG, "'"); |
94 | strcpy(new_buf, "'"); opened_font--; |
84 | else SourceBufAdd(NULL, "'"); |
95 | new_buf+=12; |
- | |
96 | break; |
85 | break; |
97 | } |
86 | default: |
98 | default: |
87 | ESBYTE[source_buf_end] = ESBYTE[i]; |
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," |
- | |
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++; |
88 | source_buf_end++; |
224 | _CONTINUE: |
89 | } |
225 | } |
90 | ESBYTE[source_buf_end] = 0; |
226 | ESBYTE[new_buf] = 0; |
91 | bufsize = source_buf_end - source_buf_start; |
227 | bufsize = new_buf - new_buf_start; |
92 | free(bufpointer); |
228 | free(bufpointer); |
93 | bufpointer = source_buf_start; |
229 | bufpointer = new_buf_start; |
- | |
230 | } |
94 | }': |