Subversion Repositories Kolibri OS

Rev

Rev 7757 | Details | Compare with Previous | Last modification | View Log | RSS feed

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