Subversion Repositories Kolibri OS

Rev

Rev 6986 | Rev 7746 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7437 leency 1
enum { TAG, OPTION_VALUE, TEXT, COMMENT, INLINE_COMMENT, CODE };
4719 leency 2
 
4718 leency 3
//you are butifull, you are butifull
4
dword ShowSource()
5
{
6
	dword new_buf, new_buf_start, i;
7437 leency 7
	int mode;
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 '<':
6986 leency 21
				if (mode == COMMENT)
22
				{
23
					strcpy(new_buf, "<");
24
					new_buf+=4;
25
					break;
26
				}
4718 leency 27
				if (ESBYTE[i+1]=='!') && (ESBYTE[i+2]=='-') && (ESBYTE[i+3]=='-')
28
				{
4728 leency 29
					strcpy(new_buf, "<");
4725 leency 30
					new_buf+=21;
4719 leency 31
					mode = COMMENT;
6986 leency 32
					break;
4718 leency 33
				}
4728 leency 34
				if (mode != COMMENT)
4718 leency 35
				{
4725 leency 36
					strcpy(new_buf, "<");
37
					new_buf+=21;
4719 leency 38
					mode = TAG;
6986 leency 39
					break;
4718 leency 40
				}
41
				break;
42
			case '>':
4719 leency 43
				if (mode == OPTION_VALUE) //fix non-closed quote in TAG
4718 leency 44
				{
4725 leency 45
					strcpy(new_buf, """);
46
					new_buf+=13;
4719 leency 47
					mode = TAG;
6986 leency 48
					break;
4718 leency 49
				}
4719 leency 50
				if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-')
4718 leency 51
				{
4725 leency 52
					strcpy(new_buf, ">");
53
					new_buf+=11;
4719 leency 54
					mode = TEXT;
6986 leency 55
					break;
4718 leency 56
				}
6986 leency 57
				if (mode == COMMENT)
58
				{
59
					strcpy(new_buf, ">");
60
					new_buf+=4;
61
					break;
62
				}
4719 leency 63
				if (mode == TAG)
4718 leency 64
				{
4725 leency 65
					strcpy(new_buf, ">");
66
					new_buf+=11;
4719 leency 67
					mode = TEXT;
6986 leency 68
					break;
4718 leency 69
				}
70
				break;
71
			case '\"':
72
			case '\'':
4719 leency 73
				if (mode == TAG)
4718 leency 74
				{
4725 leency 75
					strcpy(new_buf, "'");
4718 leency 76
					new_buf+=22;
4719 leency 77
					mode = OPTION_VALUE;
78
					break;
4718 leency 79
				}
4719 leency 80
				if (mode == OPTION_VALUE)
4718 leency 81
				{
4725 leency 82
					strcpy(new_buf, "'");
4718 leency 83
					new_buf+=12;
4719 leency 84
					mode = TAG;
85
					break;
4718 leency 86
				}
87
			default:
7437 leency 88
				ESBYTE[new_buf] = ESBYTE[i];
4725 leency 89
				new_buf++;
4718 leency 90
		}
91
	}
4725 leency 92
	ESBYTE[new_buf] = 0;
93
	bufsize = new_buf - new_buf_start;
4718 leency 94
	free(bufpointer);
95
	bufpointer = new_buf_start;
7437 leency 96
}
97
 
98
/*
99
char* C_HL_keywords[] = {
100
    "switch", "if", "while", "for", "break", "continue", "return", "else",
101
    "union", "typedef", "static", "class", "case", "#include",
102
    "volatile", "register", "sizeof", "typedef", "union", "goto", "const", "auto",
103
    "#define", "#endif", "#error", "#ifdef", "#ifndef", "#undef", "#if", "#else",
104
    "inline",
105
 
106
    "int ", "dword ", "long ", "double ", "float ", "char ", "unsigned ", "signed ",
107
    "void ", "bool ", "enum ", "byte ", "word ", "struct ", "NULL", "loop", "stdcall ",
108
    ":void ", ":int ", ":bool ", ":dword ", NULL
109
};
110
 
111
dword ShowCodeSource()
112
{
113
	dword new_buf, new_buf_start, i;
114
	int mode = CODE;
115
 
116
	char spstr[64];
117
	dword keylen;
118
	dword keyn;
119
	dword keycolor;
120
 
121
	new_buf = malloc(bufsize*10);
122
	new_buf_start = new_buf;
123
	sprintf(new_buf,"C/C++/C-- source: %s
",#URL);
124
	new_buf += strlen(new_buf);
125
	for (i=bufpointer; i
126
	{
127
		if ('<' == ESBYTE[i]) {
128
			strcpy(new_buf, "<");
129
			new_buf+=4;
130
			continue;
131
		}
132
		if ('>' == ESBYTE[i]) {
133
			strcpy(new_buf, ">");
134
			new_buf+=4;
135
			continue;
136
		}
137
		if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) {
138
			strcpy(new_buf, "?");
139
			ESBYTE[new_buf+20] = ESBYTE[i];
140
			new_buf+=28;
141
			if (ESBYTE[i+1] == 'x') {
142
				strcpy(new_buf, "x");
143
				new_buf+=28;
144
				i++;
145
			}
146
			continue;
147
		}
148
 
149
		if (CODE == mode) && ('\"' == ESBYTE[i]) {
150
			mode = TEXT;
151
			strcpy(new_buf, "\"");
152
			new_buf+=18;
153
			continue;
154
		}
155
		if (TEXT == mode) && ('\"' == ESBYTE[i]) {
156
			mode = CODE;
157
			strcpy(new_buf, "\"");
158
			new_buf+=8;
159
			continue;
160
		}
161
 
162
		if (! strncmp(i, "//", 2) ) && (mode == CODE) {
163
			mode = INLINE_COMMENT;
164
			strcpy(new_buf, "//");
165
			new_buf+=19;
166
			i++;
167
			continue;
168
		}
169
 
170
		if (INLINE_COMMENT == mode) {
171
			if (13 == ESBYTE[i]) {
172
				mode = CODE;
173
				strcpy(new_buf, "\13");
174
				new_buf+=8;
175
				continue;
176
			}
177
		}
178
 
179
		if (! strncmp(i, "/*", 2) ) {
180
			mode = COMMENT;
181
			strcpy(new_buf, "/*");
182
			new_buf+=19;
183
			i++;
184
			continue;
185
		}
186
		if (! strncmp(i, "*/", 2) ) {
187
			mode = CODE;
188
			strcpy(new_buf, "*/");
189
			new_buf+=9;
190
			i++;
191
			continue;
192
		}
193
 
194
		if (CODE == mode) for (keyn=0; C_HL_keywords[keyn]!=NULL; keyn++)
195
		{
196
			keylen = strlen(C_HL_keywords[keyn]);
197
			if (! strncmp(i, C_HL_keywords[keyn], keylen) ) {
198
 
199
				if (keyn<31) keycolor="#f00"; else keycolor="#00f";
200
				sprintf(#spstr, "%s", keycolor, C_HL_keywords[keyn]);
201
				strcpy(new_buf, #spstr);
202
 
203
				new_buf += keylen + 24;
204
				i += keylen-1;
205
				goto _CONTINUE;
206
			}
207
		}
208
		ESBYTE[new_buf] = ESBYTE[i];
209
		new_buf++;
210
		_CONTINUE:
211
	}
212
	ESBYTE[new_buf] = 0;
213
	bufsize = new_buf - new_buf_start;
214
	free(bufpointer);
215
	bufpointer = new_buf_start;
216
}
217
*/