Subversion Repositories Kolibri OS

Rev

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,"Source: %s
",#header);
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,"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++;
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
*/