Subversion Repositories Kolibri OS

Rev

Rev 7756 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7756 Rev 7757
1
enum { TAG=1, VALUE, TEXT, COMMENT, SCRIPT};
1
enum { TAG=1, VALUE, TEXT, COMMENT, SCRIPT};
2
 
2
 
3
int opened_font_counter=0;
3
int opened_font_counter=0;
4
int mode;
4
int mode;
5
 
5
 
6
dword source_buf_end;
6
dword source_buf_end;
7
 
7
 
8
void SourceBufAdd(dword _mode, src)
8
void SourceBufAdd(dword _mode, src)
9
{
9
{
10
	dword font_found_pointer, src_orig = src;
10
	dword font_found_pointer, src_orig = src;
11
 
11
 
12
	if (_mode) mode = _mode;
12
	if (_mode) mode = _mode;
13
 
13
 
14
	strcpy(source_buf_end, src);
14
	strcpy(source_buf_end, src);
15
	source_buf_end += strlen(source_buf_end);
15
	source_buf_end += strlen(source_buf_end);
16
 
16
 
17
	if (font_found_pointer = strstr(src, "")) {
17
	if (font_found_pointer = strstr(src, "")) {
18
		opened_font_counter--;
18
		opened_font_counter--;
19
		src = font_found_pointer+2;
19
		src = font_found_pointer+2;
20
	}
20
	}
21
 
21
 
22
	src = src_orig;
22
	src = src_orig;
23
	if (font_found_pointer = strstr(src, "
23
	if (font_found_pointer = strstr(src, "
24
		opened_font_counter++;
24
		opened_font_counter++;
25
		src = font_found_pointer+2;
25
		src = font_found_pointer+2;
26
	}
26
	}
27
}
27
}
28
 
28
 
29
void CloseAllOpenedFonts(dword _mode)
29
void CloseAllOpenedFonts(dword _mode)
30
{
30
{
31
	while (opened_font_counter) SourceBufAdd(_mode, "");
31
	while (opened_font_counter) SourceBufAdd(_mode, "");
32
}
32
}
33
 
33
 
34
dword ShowSource(dword _bufdata, _in_bufsize)
34
dword ShowSource(dword _bufdata, _in_bufsize)
35
{
35
{
36
	dword i, j;
36
	dword i, j;
37
	bool activate_script_mode = false;
37
	bool activate_script_mode = false;
38
	dword source_buf_start;
38
	dword source_buf_start;
39
 
39
 
40
	opened_font_counter=0;
40
	opened_font_counter=0;
41
	source_buf_end = malloc(_in_bufsize*5);
41
	source_buf_start = malloc(_in_bufsize*5);
42
	source_buf_start = source_buf_end;
42
	source_buf_end = source_buf_start;
43
 
43
 
44
	SourceBufAdd(TEXT, "View Source
");
44
	SourceBufAdd(TEXT, "View Source
");
45
 
45
 
46
	for (i=_bufdata; i<_bufdata+_in_bufsize; i++) switch (ESBYTE[i])
46
	for (i=_bufdata; i<_bufdata+_in_bufsize; i++) switch (ESBYTE[i])
47
	{
47
	{
48
		case '<':
48
		case '<':
49
			if (!strncmp(i+1,"!--", 3)) SourceBufAdd(COMMENT, "<");
49
			if (!strncmp(i+1,"!--", 3)) SourceBufAdd(COMMENT, "<");
50
			else if (SCRIPT == mode) {
50
			else if (SCRIPT == mode) {
51
				if (!strncmp(i+1,"/script>", 8)) {
51
				if (!strncmp(i+1,"/script>", 8)) {
52
					CloseAllOpenedFonts(NULL);
52
					CloseAllOpenedFonts(NULL);
53
					SourceBufAdd(TAG, "<");
53
					SourceBufAdd(TAG, "<");
54
				}
54
				}
55
				else SourceBufAdd(NULL, "<");
55
				else SourceBufAdd(NULL, "<");
56
			}
56
			}
57
			else if (COMMENT == mode) {
57
			else if (COMMENT == mode) {
58
				SourceBufAdd(NULL, "<");
58
				SourceBufAdd(NULL, "<");
59
			}
59
			}
60
			else if (TEXT == mode) {
60
			else if (TEXT == mode) {
61
				if (!strncmp(i+1,"script", 6)) activate_script_mode = true;
61
				if (!strncmp(i+1,"script", 6)) activate_script_mode = true;
62
				SourceBufAdd(TAG, "<");
62
				SourceBufAdd(TAG, "<");
63
			}
63
			}
64
			break;
64
			break;
65
		case '>':
65
		case '>':
66
			if (TAG == mode) && (activate_script_mode) {
66
			if (TAG == mode) && (activate_script_mode) {
67
				activate_script_mode = false;
67
				activate_script_mode = false;
68
				SourceBufAdd(SCRIPT, ">");
68
				SourceBufAdd(SCRIPT, ">");
69
			}
69
			}
70
			else if (VALUE == mode) CloseAllOpenedFonts(TEXT);
70
			else if (VALUE == mode) CloseAllOpenedFonts(TEXT);
71
			else if (COMMENT == mode) && (!strncmp(i-2,"--", 2)) {
71
			else if (COMMENT == mode) && (!strncmp(i-2,"--", 2)) {
72
				SourceBufAdd(TEXT, ">");
72
				SourceBufAdd(TEXT, ">");
73
				CloseAllOpenedFonts(TEXT);
73
				CloseAllOpenedFonts(TEXT);
74
			}
74
			}
75
			else if (COMMENT == mode) || (SCRIPT == mode) SourceBufAdd(NULL, ">");
75
			else if (COMMENT == mode) || (SCRIPT == mode) SourceBufAdd(NULL, ">");
76
			else if (TAG == mode) SourceBufAdd(TEXT, ">");
76
			else if (TAG == mode) SourceBufAdd(TEXT, ">");
77
			break;
77
			break;
78
		case '&':
78
		case '&':
79
			SourceBufAdd(NULL, "&");
79
			SourceBufAdd(NULL, "&");
80
			break;
80
			break;
81
		case '\"':
81
		case '\"':
82
		case '\'':
82
		case '\'':
83
			if (TAG == mode) SourceBufAdd(VALUE, "'");
83
			if (TAG == mode) SourceBufAdd(VALUE, "'");
84
			else if (VALUE == mode) SourceBufAdd(TAG, "'");
84
			else if (VALUE == mode) SourceBufAdd(TAG, "'");
85
			else SourceBufAdd(NULL, "'");
85
			else SourceBufAdd(NULL, "'");
86
			break;
86
			break;
87
		default:
87
		default:
88
			ESBYTE[source_buf_end] = ESBYTE[i];
88
			ESBYTE[source_buf_end] = ESBYTE[i];
89
			source_buf_end++;
89
			source_buf_end++;
90
	}
90
	}
91
	ESBYTE[source_buf_end] = 0;
91
	ESBYTE[source_buf_end] = 0;
92
	LoadInternalPage(source_buf_start, _in_bufsize);
92
	LoadInternalPage(source_buf_start, source_buf_end-source_buf_start);
93
	free(source_buf_start);
93
	free(source_buf_start);
94
}
94
}
95
>
95
>