Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7592 leency 1
enum { TAG, OPTION_VALUE, TEXT, COMMENT, INLINE_COMMENT, CODE };
2
 
3
 
4
 
5
char* C_HL_keywords[] = {
6
    "switch", "if", "while", "for", "break", "continue", "return", "else",
7
    "union", "typedef", "static", "class", "case", "#include",
8
    "volatile", "register", "sizeof", "typedef", "union", "goto", "const", "auto",
9
    "#define", "#endif", "#error", "#ifdef", "#ifndef", "#undef", "#if", "#else",
10
    "inline",
11
 
12
    "int ", "dword ", "long ", "double ", "float ", "char ", "unsigned ", "signed ",
13
    "void ", "bool ", "enum ", "byte ", "word ", "struct ", "NULL", "loop", "stdcall ",
14
    ":void ", ":int ", ":bool ", ":dword ", NULL
15
};
16
 
17
dword ShowCodeSource()
18
{
19
	dword new_buf, new_buf_start, i;
20
	int mode = CODE;
21
 
22
	char spstr[64];
23
	dword keylen;
24
	dword keyn;
25
	dword keycolor;
26
 
27
	new_buf = malloc(bufsize*10);
28
	new_buf_start = new_buf;
29
	sprintf(new_buf,"
",#URL);
30
	new_buf += strlen(new_buf);
31
	for (i=bufpointer; i
32
	{
33
		if ('<' == ESBYTE[i]) {
34
			strcpy(new_buf, "<");
35
			new_buf+=4;
36
			continue;
37
		}
38
		if ('>' == ESBYTE[i]) {
39
			strcpy(new_buf, ">");
40
			new_buf+=4;
41
			continue;
42
		}
43
		if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) {
44
			strcpy(new_buf, "?");
45
			ESBYTE[new_buf+20] = ESBYTE[i];
46
			new_buf+=28;
47
			if (ESBYTE[i+1] == 'x') {
48
				strcpy(new_buf, "x");
49
				new_buf+=28;
50
				i++;
51
			}
52
			continue;
53
		}
54
 
55
		if (CODE == mode) && ('\"' == ESBYTE[i]) {
56
			mode = TEXT;
57
			strcpy(new_buf, "\"");
58
			new_buf+=18;
59
			continue;
60
		}
61
		if (TEXT == mode) && ('\"' == ESBYTE[i]) {
62
			mode = CODE;
63
			strcpy(new_buf, "\"");
64
			new_buf+=8;
65
			continue;
66
		}
67
 
68
		if (! strncmp(i, "//", 2) ) && (mode == CODE) {
69
			mode = INLINE_COMMENT;
70
			strcpy(new_buf, "//");
71
			new_buf+=19;
72
			i++;
73
			continue;
74
		}
75
 
76
		if (INLINE_COMMENT == mode) {
77
			if (13 == ESBYTE[i]) {
78
				mode = CODE;
79
				strcpy(new_buf, "\13");
80
				new_buf+=8;
81
				continue;
82
			}
83
		}
84
 
85
		if (! strncmp(i, "/*", 2) ) {
86
			mode = COMMENT;
87
			strcpy(new_buf, "/*");
88
			new_buf+=19;
89
			i++;
90
			continue;
91
		}
92
		if (! strncmp(i, "*/", 2) ) {
93
			mode = CODE;
94
			strcpy(new_buf, "*/");
95
			new_buf+=9;
96
			i++;
97
			continue;
98
		}
99
 
100
		if (CODE == mode) for (keyn=0; C_HL_keywords[keyn]!=NULL; keyn++)
101
		{
102
			keylen = strlen(C_HL_keywords[keyn]);
103
			if (! strncmp(i, C_HL_keywords[keyn], keylen) ) {
104
 
105
				if (keyn<31) keycolor="#f00"; else keycolor="#00f";
106
				sprintf(#spstr, "%s", keycolor, C_HL_keywords[keyn]);
107
				strcpy(new_buf, #spstr);
108
 
109
				new_buf += keylen + 24;
110
				i += keylen-1;
111
				goto _CONTINUE;
112
			}
113
		}
114
		ESBYTE[new_buf] = ESBYTE[i];
115
		new_buf++;
116
		_CONTINUE:
117
	}
118
	ESBYTE[new_buf] = 0;
119
	bufsize = new_buf - new_buf_start;
120
	free(bufpointer);
121
	bufpointer = new_buf_start;
122
}