Subversion Repositories Kolibri OS

Rev

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,"Source: %s
",#header);
-
 
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, "Source: ");</pre></td>
          </tr>
          <tr>
            <td class="lineno">-</td>
            <td class="diffempty"><pre> </pre></td>
            <td class="lineno">42</td>
            <td class="diffadded"><pre>	SourceBufAdd(TEXT, #header);</pre></td>
          </tr>
          <tr>
            <td class="lineno">-</td>
            <td class="diffempty"><pre> </pre></td>
            <td class="lineno">43</td>
            <td class="diffadded"><pre>	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,"C/C++/C-- source: %s
",#URL);
-
 
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
}