Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
6043 leency 1
char char_width[255];
2
 
3
void PreparePage()
4
{
5
int i;
6
	list.SetSizes(0, TOOLBAR_H, Form.cwidth-scroll.size_x-1, Form.cheight-TOOLBAR_H, label.size.pt+1);
7
	//get font chars width, need to increase performance
8
	//if (strstri(io.buffer_data, "")==-1) {
9
		debugln("no  found");
10
		label.changeSIZE();
11
		for (i=0; i<256; i++) char_width[i] = label.symbol_size(i);
12
		ChangeCharset(charsets[encoding], "CP866", io.buffer_data);
13
		DrawProgress(STEP_2_COUNT_PAGE_HEIGHT);     ParceTxt(false);        //get page height to calculate buffer size
14
		DrawProgress(STEP_3_DRAW_PAGE_INTO_BUFFER); ParceTxt(true);         //draw text in buffer
15
		DrawProgress(STEP_4_SMOOTH_FONT);           label.apply_smooth();
16
		DrawProgress(STEP_5_STOP);                  DrawPage();
17
	/*}
18
	else {
19
		debugln(" tag found");
20
		label.changeSIZE();
21
		for (i=0; i<256; i++) char_width[i] = label.symbol_size(i);
22
		ChangeCharset(charsets[encoding], "CP866", io.buffer_data);
23
		DrawProgress(STEP_2_COUNT_PAGE_HEIGHT);     ParceHtml(false);        //get page height to calculate buffer size
24
		DrawProgress(STEP_3_DRAW_PAGE_INTO_BUFFER); ParceHtml(true);         //draw text in buffer
25
		DrawProgress(STEP_4_SMOOTH_FONT);           label.apply_smooth();
26
		DrawProgress(STEP_5_STOP);                  DrawPage();
27
	}*/
28
}
29
 
30
void ParceTxt(byte draw)
31
{
32
byte ch, zeroch=0;
33
dword bufoff, buflen, line_start, srch_pos;
34
int stroka_y=5, line_length=0;
35
 
36
	line_start=io.buffer_data;
37
	buflen = strlen(io.buffer_data) + io.buffer_data;
38
	for (bufoff=io.buffer_data; bufoff
39
	{
40
		ch = ESBYTE[bufoff];
41
		line_length += char_width[ch];
42
		if (line_length>=list.w-30) || (ch==10) {
43
			srch_pos = bufoff;
44
			loop()
45
			{
46
				if (__isWhite(ESBYTE[srch_pos])) { bufoff=srch_pos+1; break; } //normal word-break
47
				if (srch_pos == line_start) break; //no white space found in whole line
48
				srch_pos--;
49
			}
50
			if (draw==true) {
51
				ESBYTE[bufoff] >< zeroch; //set line end
52
				label.write_buf(8,stroka_y,list.w,label.size.height, 0xFFFFFF, 0, label.size.pt, line_start);
53
				ESBYTE[bufoff] >< zeroch; //restore line
54
				DrawProgressWhileDrawing(bufoff, buflen);
55
				if (stroka_y/list.item_h-list.first==list.visible) DrawPage();
56
			}
57
			stroka_y += list.item_h;
58
			line_start = bufoff;
59
			line_length = 0;
60
		}
61
	}
62
	if (draw==false) {
63
		list.count = stroka_y/list.item_h+2;
64
		if (list.count < list.visible) list.count = list.visible;
65
		label.size.height = list.count+1*list.item_h;
66
		label.raw_size = 0;
67
	}
68
	if (draw==true) label.write_buf(8,stroka_y,list.w,label.size.height, 0xFFFFFF, 0, label.size.pt, line_start);
69
}
70
 
71
 
72
/*========================================================
73
=                                                        =
74
=                        HTML                            =
75
=                                                        =
76
========================================================*/
77
 
78
/*
79
HTML parcer tags:
80
</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l81">81</a></td>
           <td class="code"><pre><meta encoding></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l82">82</a></td>
           <td class="code"><pre><a hrf=""></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l83">83</a></td>
           <td class="code"><pre><img src="" alt=""></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l84">84</a></td>
           <td class="code"><pre><h1> ... <h6></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l85">85</a></td>
           <td class="code"><pre><b></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l86">86</a></td>
           <td class="code"><pre><u></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l87">87</a></td>
           <td class="code"><pre><s></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l88">88</a></td>
           <td class="code"><pre><pre></pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l89">89</a></td>
           <td class="code"><pre>*/</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l90">90</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l91">91</a></td>
           <td class="code"><pre>struct _DOM {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l92">92</a></td>
           <td class="code"><pre>	dword start;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l93">93</a></td>
           <td class="code"><pre>	dword end;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l94">94</a></td>
           <td class="code"><pre>	dword len;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l95">95</a></td>
           <td class="code"><pre>};</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l96">96</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l97">97</a></td>
           <td class="code"><pre>struct _style {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l98">98</a></td>
           <td class="code"><pre>	bool b, u, i, s;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l99">99</a></td>
           <td class="code"><pre>	bool h1, h2, h3, h4, h5, h6;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l100">100</a></td>
           <td class="code"><pre>	bool a;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l101">101</a></td>
           <td class="code"><pre>	bool pre;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l102">102</a></td>
           <td class="code"><pre>	bool title;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l103">103</a></td>
           <td class="code"><pre>	bool br;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l104">104</a></td>
           <td class="code"><pre>} style;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l105">105</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l106">106</a></td>
           <td class="code"><pre>struct _tag {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l107">107</a></td>
           <td class="code"><pre>	dword start;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l108">108</a></td>
           <td class="code"><pre>	dword name;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l109">109</a></td>
           <td class="code"><pre>	dword param[10];</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l110">110</a></td>
           <td class="code"><pre>	dword value[10];</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l111">111</a></td>
           <td class="code"><pre>	void parce();</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l112">112</a></td>
           <td class="code"><pre>	void get_param_value();</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l113">113</a></td>
           <td class="code"><pre>};</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l114">114</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l115">115</a></td>
           <td class="code"><pre>void _tag::parce()</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l116">116</a></td>
           <td class="code"><pre>{</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l117">117</a></td>
           <td class="code"><pre>	bool closed_status = false;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l118">118</a></td>
           <td class="code"><pre>	if (start) debugln(start);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l119">119</a></td>
           <td class="code"><pre>	/*</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l120">120</a></td>
           <td class="code"><pre>	if (strncmp(start, "/", 1)==0) {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l121">121</a></td>
           <td class="code"><pre>		start++;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l122">122</a></td>
           <td class="code"><pre>		closed_status = true;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l123">123</a></td>
           <td class="code"><pre>	}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l124">124</a></td>
           <td class="code"><pre>	if (!strcmp(start, "title")) style.title = closed_status;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l125">125</a></td>
           <td class="code"><pre>	if (!strcmp(start, "br")) style.br = closed_status;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l126">126</a></td>
           <td class="code"><pre>	*/</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l127">127</a></td>
           <td class="code"><pre>}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l128">128</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l129">129</a></td>
           <td class="code"><pre>struct _text {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l130">130</a></td>
           <td class="code"><pre>	dword start;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l131">131</a></td>
           <td class="code"><pre>	int x, y;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l132">132</a></td>
           <td class="code"><pre>	void draw();</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l133">133</a></td>
           <td class="code"><pre>};</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l134">134</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l135">135</a></td>
           <td class="code"><pre>void _text::draw()</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l136">136</a></td>
           <td class="code"><pre>{</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l137">137</a></td>
           <td class="code"><pre>	if (start) debugln(start);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l138">138</a></td>
           <td class="code"><pre>	/*</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l139">139</a></td>
           <td class="code"><pre>	if (style.title) {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l140">140</a></td>
           <td class="code"><pre>		strlcpy(#title, start, sizeof(title));</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l141">141</a></td>
           <td class="code"><pre>		DrawTitle(#title);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l142">142</a></td>
           <td class="code"><pre>		return;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l143">143</a></td>
           <td class="code"><pre>	}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l144">144</a></td>
           <td class="code"><pre>	if (style.br) {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l145">145</a></td>
           <td class="code"><pre>		y += list.item_h;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l146">146</a></td>
           <td class="code"><pre>		style.br = false;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l147">147</a></td>
           <td class="code"><pre>	}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l148">148</a></td>
           <td class="code"><pre>	*/</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l149">149</a></td>
           <td class="code"><pre>}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l150">150</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l151">151</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l152">152</a></td>
           <td class="code"><pre>void ParceHtml(byte draw)</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l153">153</a></td>
           <td class="code"><pre>{</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l154">154</a></td>
           <td class="code"><pre>byte ch;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l155">155</a></td>
           <td class="code"><pre>_DOM DOM;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l156">156</a></td>
           <td class="code"><pre>_text text;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l157">157</a></td>
           <td class="code"><pre>_tag tag;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l158">158</a></td>
           <td class="code"><pre>dword DOM_pos;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l159">159</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l160">160</a></td>
           <td class="code"><pre>	/* Create DOM */</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l161">161</a></td>
           <td class="code"><pre>	debugln("starting DOM parce");</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l162">162</a></td>
           <td class="code"><pre>	DOM.len = strlen(io.buffer_data);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l163">163</a></td>
           <td class="code"><pre>	DOM.start = malloc(DOM.len);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l164">164</a></td>
           <td class="code"><pre>	DOM.end = DOM.start + DOM.len;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l165">165</a></td>
           <td class="code"><pre>	strlcpy(DOM.start, io.buffer_data, DOM.len);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l166">166</a></td>
           <td class="code"><pre> </pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l167">167</a></td>
           <td class="code"><pre>	/* Parce DOM */</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l168">168</a></td>
           <td class="code"><pre>	text.start = DOM_pos;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l169">169</a></td>
           <td class="code"><pre>	for (DOM_pos=DOM.start; DOM_pos<DOM.end; DOM_pos++)</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l170">170</a></td>
           <td class="code"><pre>	{</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l171">171</a></td>
           <td class="code"><pre>		ch = ESBYTE[DOM_pos];</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l172">172</a></td>
           <td class="code"><pre>		if (ch=='<') {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l173">173</a></td>
           <td class="code"><pre>			ESBYTE[DOM_pos] = NULL;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l174">174</a></td>
           <td class="code"><pre>			tag.start = DOM_pos + 1;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l175">175</a></td>
           <td class="code"><pre>			text.draw();</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l176">176</a></td>
           <td class="code"><pre>		}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l177">177</a></td>
           <td class="code"><pre>		if (ch=='>') {</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l178">178</a></td>
           <td class="code"><pre>			ESBYTE[DOM_pos] = NULL;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l179">179</a></td>
           <td class="code"><pre>			text.start = DOM_pos + 1;</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l180">180</a></td>
           <td class="code"><pre>			tag.parce();</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l181">181</a></td>
           <td class="code"><pre>		}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l182">182</a></td>
           <td class="code"><pre>	}</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l183">183</a></td>
           <td class="code"><pre>	free(DOM.start);</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l184">184</a></td>
           <td class="code"><pre>	ExitProcess();</pre></td>
        </tr>
        <tr valign="middle">
           <td></td>
           <td></td>
           <td><a name="l185">185</a></td>
           <td class="code"><pre>}</')></DOM.end;></pre></s></u></b></h6></h1></img></a></meta>