Subversion Repositories Kolibri OS

Rev

Rev 7750 | Rev 7756 | Go to most recent revision | 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;
41
	source_buf_end = malloc(_in_bufsize*5);
42
	source_buf_start = source_buf_end;
7750 leency 43
	header[strrchr(#header, '-')-2]=0;
7437 leency 44
 
7750 leency 45
	SourceBufAdd(TEXT, "Source: ");</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l46">46</a></td>
           <td class="code"><pre>	SourceBufAdd(TEXT, #header);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l47">47</a></td>
           <td class="code"><pre>	SourceBufAdd(TEXT, "
");
48
 
7755 leency 49
	for (i=_bufdata; i<_bufdata+_in_bufsize; i++) switch (ESBYTE[i])
7437 leency 50
	{
7750 leency 51
		case '<':
52
			if (!strncmp(i+1,"!--", 3)) SourceBufAdd(COMMENT, "<");
53
			else if (SCRIPT == mode) {
54
				if (!strncmp(i+1,"/script>", 8)) {
55
					CloseAllOpenedFonts(NULL);
56
					SourceBufAdd(TAG, "<");
57
				}
58
				else SourceBufAdd(NULL, "<");
7437 leency 59
			}
7750 leency 60
			else if (COMMENT == mode) {
61
				SourceBufAdd(NULL, "<");
7437 leency 62
			}
7750 leency 63
			else if (TEXT == mode) {
64
				if (!strncmp(i+1,"script", 6)) activate_script_mode = true;
65
				SourceBufAdd(TAG, "<");
7437 leency 66
			}
7750 leency 67
			break;
68
		case '>':
69
			if (TAG == mode) && (activate_script_mode) {
70
				activate_script_mode = false;
71
				SourceBufAdd(SCRIPT, ">");
72
			}
73
			else if (VALUE == mode) CloseAllOpenedFonts(TEXT);
74
			else if (COMMENT == mode) && (!strncmp(i-2,"--", 2)) {
75
				SourceBufAdd(TEXT, ">");
76
				CloseAllOpenedFonts(TEXT);
77
			}
78
			else if (COMMENT == mode) || (SCRIPT == mode) SourceBufAdd(NULL, ">");
79
			else if (TAG == mode) SourceBufAdd(TEXT, ">");
80
			break;
81
		case '&':
82
			SourceBufAdd(NULL, "&");
83
			break;
84
		case '\"':
85
		case '\'':
86
			if (TAG == mode) SourceBufAdd(VALUE, "'");
87
			else if (VALUE == mode) SourceBufAdd(TAG, "'");
88
			else SourceBufAdd(NULL, "'");
89
			break;
90
		default:
91
			ESBYTE[source_buf_end] = ESBYTE[i];
92
			source_buf_end++;
7437 leency 93
	}
7750 leency 94
	ESBYTE[source_buf_end] = 0;
7755 leency 95
	LoadInternalPage(source_buf_start, _in_bufsize);
96
	free(source_buf_start);
7437 leency 97
}