Rev 7746 | Rev 7755 | Go to most recent revision | Show entire file | Ignore 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 -... | Line 1... | ||
- | 1 | dword source_buf_start, source_buf_end; |
|
2 | 2 | int opened_font=0; |
|
- | 3 | int mode; |
|
- | 4 | ||
- | 5 | void SourceBufAdd(dword _mode, src) |
|
3 | dword ShowSource() |
6 | { |
4 | { |
7 | dword font_found_pointer, src_orig = src; |
5 | dword new_buf, new_buf_start, i, j; |
- | |
6 | int opened_font=0; |
- | |
7 | int mode = TEXT; |
8 | |
8 | 9 | if (_mode) mode = _mode; |
|
- | 10 | ||
9 | if (souce_mode) return; |
11 | strcpy(source_buf_end, src); |
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," |
12 | source_buf_end += strlen(source_buf_end); |
15 | new_buf += strlen(new_buf); |
- | |
16 | for (i=bufpointer; i |
13 | |
17 | { |
- | |
18 | switch (ESBYTE[i]) |
- | |
19 | { |
- | |
20 | case '<': |
14 | if (font_found_pointer = strstr(src, "")) { |
21 | if (mode == TEXT) && (!strncmp(i+1,"script", 6)) { |
- | |
22 | mode = SCRIPT; |
- | |
23 | strcpy(new_buf, "<script"); opened_font++; |
15 | 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; |
16 | src = font_found_pointer+2; |
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; |
17 | } |
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; |
- | |
43 | break; |
18 | |
44 | } |
- | |
45 | if (mode == TEXT) { |
19 | src = src_orig; |
46 | mode = TAG; |
- | |
47 | strcpy(new_buf, "<"); opened_font++; |
- | |
48 | new_buf+=21; |
- | |
49 | break; |
- | |
50 | } |
20 | if (font_found_pointer = strstr(src, " |
51 | if (mode == COMMENT) || (mode == SCRIPT) { |
- | |
52 | strcpy(new_buf, "<"); |
21 | opened_font++; |
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; |
22 | src = font_found_pointer+2; |
60 | while (opened_font) { |
- | |
61 | strcpy(new_buf, """); 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, ">"); opened_font--; |
- | |
69 | new_buf+=11; |
- | |
70 | break; |
- | |
71 | } |
- | |
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; |
- | |
82 | } |
- | |
83 | break; |
- | |
84 | case '\"': |
- | |
85 | case '\'': |
- | |
86 | if (mode == TAG) { |
- | |
87 | mode = OPTION_VALUE; |
- | |
88 | strcpy(new_buf, "'"); opened_font++; |
- | |
89 | new_buf+=25; |
- | |
90 | break; |
- | |
91 | } |
- | |
92 | if (mode == OPTION_VALUE) { |
- | |
93 | mode = TAG; |
- | |
94 | strcpy(new_buf, "'"); opened_font--; |
- | |
95 | new_buf+=12; |
- | |
96 | break; |
- | |
97 | } |
- | |
98 | default: |
- | |
99 | ESBYTE[new_buf] = ESBYTE[i]; |
- | |
100 | new_buf++; |
- | |
101 | } |
23 | } |
102 | } |
- | |
103 | ESBYTE[new_buf] = 0; |
- | |
104 | bufsize = new_buf - new_buf_start; |
- | |
105 | free(bufpointer); |
- | |
106 | bufpointer = new_buf_start; |
24 | } |
Line -... | Line 25... | ||
- | 25 | ||
- | 26 | void CloseAllOpenedFonts(dword _mode) |
|
- | 27 | { |
|
107 | } |
28 | while (opened_font) SourceBufAdd(_mode, ""); |
Line 108... | Line 29... | ||
108 | 29 | } |
|
- | 30 | ||
- | 31 | enum { TAG=1, VALUE, TEXT, COMMENT, SCRIPT}; |
|
- | 32 | dword ShowSource() |
|
- | 33 | { |
|
Line 109... | Line -... | ||
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", |
34 | dword i, j; |
115 | "union", "typedef", "static", "class", "case", "#include", |
- | |
116 | "volatile", "register", "sizeof", "typedef", "union", "goto", "const", "auto", |
35 | bool activate_script_mode = false; |
117 | "#define", "#endif", "#error", "#ifdef", "#ifndef", "#undef", "#if", "#else", |
- | |
118 | "inline", |
36 | |
119 | - | ||
Line 120... | Line 37... | ||
120 | "int ", "dword ", "long ", "double ", "float ", "char ", "unsigned ", "signed ", |
37 | opened_font=0; |
121 | "void ", "bool ", "enum ", "byte ", "word ", "struct ", "NULL", "loop", "stdcall ", |
- | |
122 | ":void ", ":int ", ":bool ", ":dword ", NULL |
38 | source_buf_start = source_buf_end = malloc(bufsize*5); |
123 | }; |
39 | header[strrchr(#header, '-')-2]=0; |
Line 124... | Line -... | ||
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; |
40 | |
134 | 41 | SourceBufAdd(TEXT, " |
|
135 | new_buf = malloc(bufsize*10); |
- | |
136 | new_buf_start = new_buf; |
- | |
137 | sprintf(new_buf," |
- | |
138 | new_buf += strlen(new_buf); |
42 | SourceBufAdd(TEXT, #header); |
139 | for (i=bufpointer; i |
- | |
140 | { |
- | |
141 | if ('<' == ESBYTE[i]) { |
- | |
142 | strcpy(new_buf, "<"); |
- | |
143 | new_buf+=4; |
- | |
144 | continue; |
- | |
145 | } |
43 | SourceBufAdd(TEXT, ""); |
146 | if ('>' == ESBYTE[i]) { |
44 | |
147 | strcpy(new_buf, ">"); |
45 | for (i=bufpointer; i |
148 | new_buf+=4; |
- | |
149 | continue; |
46 | { |
150 | } |
47 | case '<': |
151 | if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) { |
- | |
152 | strcpy(new_buf, "?"); |
48 | if (!strncmp(i+1,"!--", 3)) SourceBufAdd(COMMENT, "<"); |
- | 49 | else if (SCRIPT == mode) { |
|
153 | ESBYTE[new_buf+20] = ESBYTE[i]; |
50 | if (!strncmp(i+1,"/script>", 8)) { |
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, "//"); |
51 | CloseAllOpenedFonts(NULL); |
179 | new_buf+=19; |
- | |
180 | i++; |
- | |
181 | continue; |
52 | SourceBufAdd(TAG, "<"); |
182 | } |
- | |
183 | - | ||
184 | if (INLINE_COMMENT == mode) { |
53 | } |
185 | if (13 == ESBYTE[i]) { |
- | |
186 | mode = CODE; |
- | |
187 | strcpy(new_buf, "\13"); |
54 | else SourceBufAdd(NULL, "<"); |
188 | new_buf+=8; |
55 | } |
189 | continue; |
56 | else if (COMMENT == mode) { |
190 | } |
- | |
191 | } |
57 | SourceBufAdd(NULL, "<"); |
192 | 58 | } |
|
193 | if (! strncmp(i, "/*", 2) ) { |
59 | else if (TEXT == mode) { |
194 | mode = COMMENT; |
60 | if (!strncmp(i+1,"script", 6)) activate_script_mode = true; |
195 | strcpy(new_buf, "/*"); |
61 | SourceBufAdd(TAG, "<"); |
196 | new_buf+=19; |
62 | } |
197 | i++; |
- | |
198 | continue; |
- | |
199 | } |
- | |
200 | if (! strncmp(i, "*/", 2) ) { |
63 | break; |
201 | mode = CODE; |
- | |
202 | strcpy(new_buf, "*/"); |
64 | case '>': |
203 | new_buf+=9; |
- | |
204 | i++; |
- | |
205 | continue; |
65 | if (TAG == mode) && (activate_script_mode) { |
206 | } |
- | |
207 | - | ||
208 | if (CODE == mode) for (keyn=0; C_HL_keywords[keyn]!=NULL; keyn++) |
- | |
209 | { |
66 | activate_script_mode = false; |
210 | keylen = strlen(C_HL_keywords[keyn]); |
- | |
211 | if (! strncmp(i, C_HL_keywords[keyn], keylen) ) { |
67 | SourceBufAdd(SCRIPT, ">"); |
212 | - | ||
213 | if (keyn<31) keycolor="#f00"; else keycolor="#00f"; |
- | |
214 | sprintf(#spstr, "%s", keycolor, C_HL_keywords[keyn]); |
68 | } |
- | 69 | else if (VALUE == mode) CloseAllOpenedFonts(TEXT); |
|
- | 70 | else if (COMMENT == mode) && (!strncmp(i-2,"--", 2)) { |
|
215 | strcpy(new_buf, #spstr); |
71 | SourceBufAdd(TEXT, ">"); |
- | 72 | CloseAllOpenedFonts(TEXT); |
|
216 | 73 | } |
|
217 | new_buf += keylen + 24; |
74 | else if (COMMENT == mode) || (SCRIPT == mode) SourceBufAdd(NULL, ">"); |
218 | i += keylen-1; |
75 | else if (TAG == mode) SourceBufAdd(TEXT, ">"); |
- | 76 | break; |
|
- | 77 | case '&': |
|
- | 78 | SourceBufAdd(NULL, "&"); |
|
- | 79 | break; |
|
- | 80 | case '\"': |
|
- | 81 | case '\'': |
|
- | 82 | if (TAG == mode) SourceBufAdd(VALUE, "'"); |
|
- | 83 | else if (VALUE == mode) SourceBufAdd(TAG, "'"); |
|
219 | goto _CONTINUE; |
84 | else SourceBufAdd(NULL, "'"); |
220 | } |
85 | break; |
221 | } |
86 | default: |
222 | ESBYTE[new_buf] = ESBYTE[i]; |
87 | ESBYTE[source_buf_end] = ESBYTE[i]; |
223 | new_buf++; |
88 | source_buf_end++; |
224 | _CONTINUE: |
89 | } |
225 | } |
- | |
226 | ESBYTE[new_buf] = 0; |
90 | ESBYTE[source_buf_end] = 0; |