Subversion Repositories Kolibri OS

Rev

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

Rev 2799 Rev 2803
1
int	downloader_id;
1
int	downloader_id;
2
 
2
 
3
dword j,
3
dword j,
4
	buf,
4
	buf,
5
	filesize,
5
	filesize,
6
	blink = 400;
6
	blink = 400;
7
 int i;
7
 int i;
8
 
8
 
9
char download_path[]="/rd/1/.download";
9
char download_path[]="/rd/1/.download";
10
char search_path[]="http://nigma.ru/index.php?s=";
10
char search_path[]="http://nigma.ru/index.php?s=";
11
char version[]=" Text-based Browser 0.93b";
11
char version[]=" Text-based Browser 0.93e";
12
 
12
 
13
char tinypad_path[]="/sys/tinypad";
-
 
14
char t_edit_path[]="/sys/develop/t_edit";
-
 
15
 
-
 
16
 
13
 
17
struct TWebBrowser {
14
struct TWebBrowser {
18
	int left, top, width, height;
15
	int left, top, width, height;
19
	void DrawScroller();
16
	void DrawScroller();
20
	void ShowPage();
17
	void ShowPage();
21
	void ParseHTML(dword, dword);
18
	void ParseHTML(dword, dword);
22
	void Scan(int);
19
	void Scan(int);
23
	void WhatTextStyle(int left1, top1, width1);
20
	void WhatTextStyle(int left1, top1, width1);
24
};
21
};
25
 
22
 
26
TWebBrowser WB1;
23
TWebBrowser WB1;
27
 
24
 
28
byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, link, ignor_text, li_tab, body_present;
25
byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, link, ignor_text, li_tab, body_present;
29
 
26
 
30
 
27
 
31
dword text_colors[30],
28
dword text_colors[30],
32
	text_color_index,
29
	text_color_index,
33
	link_color,
30
	link_color,
34
	bg_color;
31
	bg_color;
35
 
32
 
36
int stroka,
33
int stroka,
37
	stolbec,
34
	stolbec,
38
	tab_len;
35
	tab_len;
39
	
36
	
40
char line[330],
37
char line[330],
41
	tag[100],
38
	tag[100],
42
	tagparam[10000],
39
	tagparam[10000],
43
	parametr[1200],
40
	parametr[1200],
44
	options[1000];
41
	options[1000];
45
 
42
 
46
char anchor[256];
43
char anchor[256];
47
int anchor_line_num;
44
int anchor_line_num;
48
 
45
 
49
 
46
 
50
#include "include\history.h"
47
#include "include\history.h"
51
#include "include\colors.h"
48
#include "include\colors.h"
52
#include "include\unicode_tags.h"
49
#include "include\unicode_tags.h"
53
#include "include\some_code.h"
50
#include "include\some_code.h"
54
 
51
 
55
 
52
 
56
void TWebBrowser::Scan(int id) {
53
void TWebBrowser::Scan(int id)
-
 
54
{
57
	if (id > 399)
55
	if (id > 399)
58
	{
56
	{
59
		GetURLfromPageLinks(id);
57
		GetURLfromPageLinks(id);
60
		
58
		
61
		//#1
59
		//#1
62
		if (URL[0] == '#')
60
		if (URL[0] == '#')
63
		{
61
		{
64
			copystr(#URL+find_symbol(#URL, '#'), #anchor);
62
			copystr(#URL+find_symbol(#URL, '#'), #anchor);
65
			
63
			
66
			copystr(BrowserHistory.CurrentUrl(), #URL);
64
			copystr(BrowserHistory.CurrentUrl(), #URL);
67
			//copystr(#editURL, #URL + strlen(#URL));
65
			//copystr(#editURL, #URL + strlen(#URL));
68
			//copystr(#URL, #editURL);
66
			//copystr(#URL, #editURL);
69
			
67
			
70
			za_kadrom=count-max_kolvo_strok;
68
			za_kadrom=count-max_kolvo_strok;
71
			ShowPage(#URL);
69
			ShowPage(#URL);
72
			return;
70
			return;
73
		}
71
		}
74
		//liner.ru#1
72
		//liner.ru#1
75
		if (find_symbol(#URL, '#')<>-1)
73
		if (find_symbol(#URL, '#')<>-1)
76
		{
74
		{
77
			copystr(#URL+find_symbol(#URL, '#'), #anchor);
75
			copystr(#URL+find_symbol(#URL, '#'), #anchor);
78
			URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà
76
			URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà
79
		}
77
		}
80
 
78
 
81
		GetNewUrl();
79
		GetNewUrl();
82
		
80
		
83
		if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg"))
81
		if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg"))
84
		{
82
		{
85
			RunProgram("/sys/media/kiv", #URL);
83
			RunProgram("/sys/media/kiv", #URL);
86
			copystr(BrowserHistory.CurrentUrl(), #URL);
84
			copystr(BrowserHistory.CurrentUrl(), #URL);
87
			return;
85
			return;
88
		}
86
		}
89
 
87
 
90
		OpenPage();
88
		OpenPage();
91
		return;
89
		return;
92
	}
90
	}
93
	
91
	
94
	//edit1.flags=64;
-
 
95
	IF(count < max_kolvo_strok) SWITCH(id) //åñëè ìàëî ñòðîê èãíîðèðóåì íåêîòîðûå êíîïêè
92
	IF(count < max_kolvo_strok) SWITCH(id) //åñëè ìàëî ñòðîê èãíîðèðóåì íåêîòîðûå êíîïêè
96
	{ CASE 183: CASE 184: CASE 180: CASE 181: return; } 
93
	{ CASE 183: CASE 184: CASE 180: CASE 181: return; } 
97
	
94
	
98
	switch (id)
95
	switch (id)
99
	{
96
	{
100
		case 011: //Ctrk+K 
97
		case 011: //Ctrk+K 
101
			ReadHtml();
98
			ReadHtml();
102
			koitodos(buf);
99
			koitodos(buf);
103
			break;
100
			break;
104
		case 021: //Ctrl+U
101
		case 021: //Ctrl+U
105
			ReadHtml();
102
			ReadHtml();
106
			utf8rutodos(buf);
103
			utf8rutodos(buf);
107
			break;
104
			break;
108
		case BACK:
105
		case BACK:
109
			if (!BrowserHistory.GoBack()) return;
106
			if (!BrowserHistory.GoBack()) return;
110
			OpenPage();
107
			OpenPage();
111
			return;
108
			return;
112
		case FORWARD:
109
		case FORWARD:
113
			if (!BrowserHistory.GoForward()) return;
110
			if (!BrowserHistory.GoForward()) return;
114
			OpenPage();
111
			OpenPage();
115
			return;
112
			return;
116
		case 054: //F5
113
		case 052:  //Íàæàòà F3
-
 
114
			if (strcmp(get_URL_part(5),"http:")<>0) RunProgram("/rd/1/tinypad", #URL); else RunProgram("/rd/1/tinypad", #download_path);
-
 
115
			return;
-
 
116
		case 053:  //Íàæàòà F4
-
 
117
			if (strcmp(get_URL_part(5),"http:")<>0) RunProgram("/rd/1/develop/t_edit", #URL); else RunProgram("/rd/1/develop/t_edit", #download_path);
-
 
118
			return;
-
 
119
		case 054: //F5
117
			IF(edit1.flags == 66) break;
120
			IF(edit1.flags == 66) break;
118
		case REFRESH:
121
		case REFRESH:
119
			if (GetProcessSlot(downloader_id)<>0)
122
			if (GetProcessSlot(downloader_id)<>0)
120
			{
123
			{
121
				KillProcess(downloader_id);
124
				KillProcess(downloader_id);
122
				Pause(20);
125
				Pause(20);
123
				Draw_Window();
126
				Draw_Window();
124
				return;
127
				return;
125
			}
128
			}
126
			OpenPage(); //îò ñåðäöà îòðûâàþ, çäåñü íóæíî za_kadrom ñòàðîå
129
			anchor_line_num=za_kadrom; //âåñ¸ëûé êîñòûëü :Ð
127
			return;
130
			anchor[0]='|';
-
 
131
			OpenPage();
-
 
132
			return;
128
		case 014: //Ctrl+N íîâîå îêíî
133
		case 014: //Ctrl+N íîâîå îêíî
129
		case 020: //Ctrl+T íîâàÿ âêëàäêà
134
		case 020: //Ctrl+T íîâàÿ âêëàäêà
130
		case NEWTAB:
135
		case NEWTAB:
131
			MoveSize(190,80,OLD,OLD);
136
			MoveSize(190,80,OLD,OLD);
132
			RunProgram(#program_path, #URL);
137
			RunProgram(#program_path, #URL);
133
			return;
138
			return;
134
		case 052:  //Íàæàòà F3
139
			
135
			IF(edit1.flags <> 66) 
-
 
136
			IF (!strcmp(get_URL_part(5),"http:")) RunProgram(#tinypad_path, #download_path); ELSE RunProgram(#tinypad_path, #URL);
-
 
137
			return;
-
 
138
		case 053:  //Íàæàòà F4
-
 
139
			IF(edit1.flags <> 66) 
-
 
140
			IF (!strcmp(get_URL_part(5),"http:")) RunProgram(#t_edit_path, #download_path); ELSE RunProgram(#t_edit_path, #URL);
-
 
141
			return;
-
 
142
			
-
 
143
		case HOME:
140
		case HOME:
144
			copystr("http://kolibri-os.narod.ru", #editURL);
141
			copystr("http://kolibri-os.narod.ru", #editURL);
145
		case GOTOURL:
142
		case GOTOURL:
146
		case 0x0D: //enter
143
		case 0x0D: //enter
147
			copystr(#editURL, #URL);
144
			copystr(#editURL, #URL);
148
			OpenPage();
145
			OpenPage();
149
			return;
146
			return;
150
		case 173:	//ctrl+enter
147
		case 173:	//ctrl+enter
151
		case SEARCHWEB:
148
		case SEARCHWEB:
152
			copystr(#search_path, #URL);
149
			copystr(#search_path, #URL);
153
			copystr(#editURL, #URL + strlen(#URL));
150
			copystr(#editURL, #URL + strlen(#URL));
154
			OpenPage();
151
			OpenPage();
155
			return;
152
			return;
156
 
153
 
157
		case ID1: //ìîòàåì ââåðõ
154
		case ID1: //ìîòàåì ââåðõ
158
			IF(za_kadrom <= 0) return;
155
			IF(za_kadrom <= 0) return;
159
			za_kadrom--;
156
			za_kadrom--;
160
			break; 
157
			break; 
161
		case ID2: //ìîòàåì âíèç
158
		case ID2: //ìîòàåì âíèç
162
			IF(max_kolvo_strok + za_kadrom >= count) return;
159
			IF(max_kolvo_strok + za_kadrom >= count) return;
163
			za_kadrom++;
160
			za_kadrom++;
164
			break; 
161
			break; 
165
		case 183: //PgDown
162
		case 183: //PgDown
166
			IF(za_kadrom == count - max_kolvo_strok) return;
163
			IF(za_kadrom == count - max_kolvo_strok) return;
167
			za_kadrom += max_kolvo_strok + 2;
164
			za_kadrom += max_kolvo_strok + 2;
168
			IF(max_kolvo_strok + za_kadrom > count) za_kadrom = count - max_kolvo_strok;
165
			IF(max_kolvo_strok + za_kadrom > count) za_kadrom = count - max_kolvo_strok;
169
			BREAK;
166
			BREAK;
170
		case 184: //PgUp
167
		case 184: //PgUp
171
			IF(za_kadrom == 0) RETURN;
168
			IF(za_kadrom == 0) RETURN;
172
			za_kadrom -= max_kolvo_strok - 2;
169
			za_kadrom -= max_kolvo_strok - 2;
173
			IF(za_kadrom < 0) za_kadrom = 0;
170
			IF(za_kadrom < 0) za_kadrom = 0;
174
			BREAK;
171
			BREAK;
175
		case 180: //home
172
		case 180: //home
176
			IF(za_kadrom == 0) RETURN;
173
			IF(za_kadrom == 0) RETURN;
177
			za_kadrom = 0;
174
			za_kadrom = 0;
178
			BREAK; 
175
			BREAK; 
179
		case 181: //end
176
		case 181: //end
180
			IF (za_kadrom == count - max_kolvo_strok) RETURN;
177
			IF (za_kadrom == count - max_kolvo_strok) RETURN;
181
			za_kadrom = count - max_kolvo_strok;
178
			za_kadrom = count - max_kolvo_strok;
182
			BREAK; 
179
			BREAK; 
183
		default:
180
		default:
184
			RETURN;
181
			RETURN;
185
	}
182
	}
186
	ParseHTML(buf, filesize);
183
	ParseHTML(buf, filesize);
187
}
184
}
188
 
185
 
189
 
186
 
190
 
187
 
191
void GetNewUrl(){
188
void GetNewUrl(){
192
	IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //èãíîðèì :)
189
	IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //èãíîðèì :)
193
	
190
	
194
	if (URL[0] <> '/')
191
	if (URL[0] <> '/')
195
	&& (strcmp(get_URL_part(5),"http:")<>0)	&& (strcmp(get_URL_part(5),"mailt")<>0)	&& (strcmp(get_URL_part(5),"ftp:/")<>0) 
192
	&& (strcmp(get_URL_part(5),"http:")<>0)	&& (strcmp(get_URL_part(5),"mailt")<>0)	&& (strcmp(get_URL_part(5),"ftp:/")<>0) 
196
	{
193
	{
197
		copystr(BrowserHistory.CurrentUrl(), #editURL); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
194
		copystr(BrowserHistory.CurrentUrl(), #editURL); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
198
		
195
		
199
		_CUT_ST_LEVEL_MARK:
196
		_CUT_ST_LEVEL_MARK:
200
		
197
		
201
		if (editURL[find_symbol(#editURL, '/')-2]<>'/')  // åñëè íå http://pagename.ua <-- íàõðåíà ýòà ñòðîêà???
198
		if (editURL[find_symbol(#editURL, '/')-2]<>'/')  // åñëè íå http://pagename.ua <-- íàõðåíà ýòà ñòðîêà???
202
		{
199
		{
203
			editURL[find_symbol(#editURL, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
200
			editURL[find_symbol(#editURL, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
204
		}
201
		}
205
		
202
		
206
		IF (!strcmp(get_URL_part(3),"../")) //íà óðîâåíü ââåðõ
203
		IF (!strcmp(get_URL_part(3),"../")) //íà óðîâåíü ââåðõ
207
		{
204
		{
208
			copystr(#URL+3,#URL);
205
			copystr(#URL+3,#URL);
209
			editURL[find_symbol(#editURL, '/')-1] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
206
			editURL[find_symbol(#editURL, '/')-1] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
210
			goto _CUT_ST_LEVEL_MARK;
207
			goto _CUT_ST_LEVEL_MARK;
211
		}
208
		}
212
		
209
		
213
		if (editURL[strlen(#editURL)-1]<>'/') copystr("/", #editURL + strlen(#editURL)); 
210
		if (editURL[strlen(#editURL)-1]<>'/') copystr("/", #editURL + strlen(#editURL)); 
214
		copystr(#URL, #editURL + strlen(#editURL)); //êëåèì íîâûé àäðåñ
211
		copystr(#URL, #editURL + strlen(#editURL)); //êëåèì íîâûé àäðåñ
215
		copystr(#editURL, #URL);
212
		copystr(#editURL, #URL);
216
	}
213
	}
217
}
214
}
218
 
215
 
219
 
216
 
220
	
217
	
221
void ReadHtml()
218
void ReadHtml()
222
{
219
{
223
	if (!strcmp(get_URL_part(5),"http:"))) 
220
	if (!strcmp(get_URL_part(5),"http:"))) 
224
		file_size stdcall (#download_path);
221
		file_size stdcall (#download_path);
225
	else
222
	else
226
		file_size stdcall (#URL);
223
		file_size stdcall (#URL);
227
	
224
	
228
	filesize = EBX;
225
	filesize = EBX;
229
	if (!filesize) return;
226
	if (!filesize) return;
230
	
227
	
231
	mem_Free(buf);
228
	mem_Free(buf);
232
	buf = mem_Alloc(filesize);
229
	buf = mem_Alloc(filesize);
233
	if (!strcmp(get_URL_part(5),"http:"))) 
230
	if (!strcmp(get_URL_part(5),"http:"))) 
234
		ReadFile(0, filesize, buf, #download_path);
231
		ReadFile(0, filesize, buf, #download_path);
235
	else
232
	else
236
		ReadFile(0, filesize, buf, #URL);
233
		ReadFile(0, filesize, buf, #URL);
237
}
234
}
238
 
235
 
239
 
236
 
240
void OpenPage()
237
void OpenPage()
241
{
238
{
242
	if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal);
239
	if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal);
243
	KillProcess(downloader_id);
240
	KillProcess(downloader_id);
244
	copystr(#URL, #editURL);
241
	copystr(#URL, #editURL);
245
	BrowserHistory.AddUrl();
242
	BrowserHistory.AddUrl();
246
	za_kadrom = count = 0;
243
	za_kadrom = count = 0;
247
	if (!strcmp(get_URL_part(5),"http:")))
244
	if (!strcmp(get_URL_part(5),"http:")))
248
	{
245
	{
249
		copystr(#version, #header);
246
		copystr(#version, #header);
250
		KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
247
		KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
251
		DeleteFile(#download_path);
248
		DeleteFile(#download_path);
252
		IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]='';
249
		IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]='';
253
		downloader_id = RunProgram("/sys/network/downloader", #URL);
250
		downloader_id = RunProgram("/sys/network/downloader", #URL);
254
		//ýòî ãåíèàëüíî è ýòî ïèçäåö!!!
251
		//ýòî ãåíèàëüíî è ýòî ïèçäåö!!!
255
		Pause(60);
252
		Pause(60);
256
		if (GetProcessSlot(downloader_id)<>0)
253
		if (GetProcessSlot(downloader_id)<>0)
257
		{
254
		{
258
			WriteDebug("Browser Hack v2.0: Killing downloader and trying to run it one more!");
255
			debug("Browser Hack v2.0: Killing downloader and trying to run it one more!");
259
			KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
256
			KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
260
			downloader_id = RunProgram("/sys/network/downloader", #URL);
257
			downloader_id = RunProgram("/sys/network/downloader", #URL);
261
		}
258
		}
262
		//
259
		//
263
		IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable.");
260
		IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable.");
264
		Draw_Window();
261
		Draw_Window();
265
		return;
262
		return;
266
	}
263
	}
267
	ReadHtml();
264
	ReadHtml();
268
	if (filesize) wintodos(buf);
265
	if (filesize) wintodos(buf);
269
	WB1.ShowPage(#URL);
266
	WB1.ShowPage(#URL);
270
}
267
}
271
 
268
 
272
 
269
 
273
void TWebBrowser::ShowPage(dword adress)
270
void TWebBrowser::ShowPage(dword adress)
274
{
271
{
275
	edit1.size = edit1.pos = strlen(#editURL);
272
	edit1.size = edit1.pos = strlen(#editURL);
276
	edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà
273
	edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà
277
	
274
	
278
	if (!filesize)
275
	if (!filesize)
279
	{
276
	{
280
		DrawBar(left, top, width+4, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó
277
		DrawBar(left, top, width+4, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó
281
		if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0);
278
		if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0);
282
		else
279
		else
283
		{
280
		{
284
			WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0);
281
			WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0);
285
			if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0);
282
			if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0);
286
		}
283
		}
287
		DrawTitle(#version); //?
284
		DrawTitle(#version); //?
288
		return;
285
		return;
289
	}
286
	}
290
	
287
	
291
	ParseHTML(buf, filesize);
288
	ParseHTML(buf, filesize);
292
	IF (!strcmp(#version, #header)) DrawTitle(#header);
289
	IF (!strcmp(#version, #header)) DrawTitle(#header);
293
}
290
}
294
 
291
 
295
 
292
 
296
 
293
 
297
void TWebBrowser::ParseHTML(dword bword, fsize){
294
void TWebBrowser::ParseHTML(dword bword, fsize){
298
	word bukva[1];
295
	word bukva[1];
299
	byte ignor_param = 0;
296
	byte ignor_param = 0;
300
	char temp[768];
297
	char temp[768];
301
	stroka = -za_kadrom;
298
	stroka = -za_kadrom;
302
	stolbec = 0;
299
	stolbec = 0;
303
	FOR(j = 400; j < blink + 1; j++;) DeleteButton(j);
300
	FOR(j = 400; j < blink + 1; j++;) DeleteButton(j);
304
	b_text = i_text = u_text = s_text = pre_text = blq_text = body_present =
301
	b_text = i_text = u_text = s_text = pre_text = blq_text = body_present =
305
	li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //îáíóëÿåì òåãè
302
	li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //îáíóëÿåì òåãè
306
	link_color = 0x0000FF;
303
	link_color = 0x0000FF;
307
	bg_color = 0xFFFFFF;
304
	bg_color = 0xFFFFFF;
308
	blink = 400;
305
	blink = 400;
309
	line = '';
306
	line = '';
310
	copystr("|", #page_links);
307
	copystr("|", #page_links);
311
	copystr(#version, #header);
308
	copystr(#version, #header);
312
	IF(!strcmp(#URL + strlen(#URL) - 4, ".txt"))
309
	IF(!strcmp(#URL + strlen(#URL) - 4, ".txt"))
313
	{
310
	{
314
		DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
311
		DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
315
		pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà 
312
		pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà 
316
	}
313
	}
317
	IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
314
	IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
318
	for (bword = buf; buf + fsize > bword; bword++;) {
315
	for (bword = buf; buf + fsize > bword; bword++;) {
319
	  bukva = ESBYTE[bword];
316
	  bukva = ESBYTE[bword];
320
	  switch (bukva) {
317
	  switch (bukva) {
321
		case 0x0a:
318
		case 0x0a:
322
			IF(pre_text == 1) {
319
			IF(pre_text == 1) {
323
				bukva = '';
320
				bukva = '';
324
				temp = '';
321
				temp = '';
325
				goto NEXT_MARK;
322
				goto NEXT_MARK;
326
			}
323
			}
327
		case '\9':
324
		case '\9':
328
			if (pre_text == 1) //èíà÷å èä¸ì íà 0x0d	
325
			if (pre_text == 1) //èíà÷å èä¸ì íà 0x0d	
329
			{
326
			{
330
				tab_len=strlen(#line)/8;
327
				tab_len=strlen(#line)/8;
331
				tab_len=tab_len*8;
328
				tab_len=tab_len*8;
332
				tab_len=8+tab_len-strlen(#line);
329
				tab_len=8+tab_len-strlen(#line);
333
				for (i=0; i
330
				for (i=0; i
334
				break;
331
				break;
335
			}		
332
			}		
336
		case 0x0d:
333
		case 0x0d:
337
			bukva = ' ';
334
			bukva = ' ';
338
			goto DEFAULT_MARK;
335
			goto DEFAULT_MARK;
339
		case '<':
336
		case '<':
340
			bword++; //ïðîìîòàåì ñèìâîë <
337
			bword++; //ïðîìîòàåì ñèìâîë <
341
			IF(ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè , äåðçêî
338
			IF(ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè , äåðçêî
342
			{
339
			{
343
				bword++;
340
				bword++;
344
				IF(ESBYTE[bword] == '-') {
341
				IF(ESBYTE[bword] == '-') {
345
					HH_: do {
342
					HH_: do {
346
						bword++;
343
						bword++;
347
						IF(bword >= buf + fsize) break 1;
344
						IF(bword >= buf + fsize) break 1;
348
					} while (ESBYTE[bword] <>'-');
345
					} while (ESBYTE[bword] <>'-');
349
					bword++;
346
					bword++;
350
					IF(ESBYTE[bword] <>'-') GOTO HH_;
347
					IF(ESBYTE[bword] <>'-') GOTO HH_;
351
				}
348
				}
352
			}
349
			}
353
			WHILE (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû
350
			WHILE (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû
354
			{
351
			{
355
				bukva = ESBYTE[bword];
352
				bukva = ESBYTE[bword];
356
				IF(bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' ';
353
				IF(bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' ';
357
				IF(!ignor_param) && (bukva <>' ') copystr(#bukva, #tag + strlen(#tag));
354
				IF(!ignor_param) && (bukva <>' ') copystr(#bukva, #tag + strlen(#tag));
358
				ELSE {
355
				ELSE {
359
					ignor_param = true;
356
					ignor_param = true;
360
					copystr(#bukva, #tagparam + strlen(#tagparam));
357
					copystr(#bukva, #tagparam + strlen(#tagparam));
361
				}
358
				}
362
				bword++;
359
				bword++;
363
			}
360
			}
364
			lowcase(#tag);
361
			lowcase(#tag);
365
			lowcase(#tagparam);
362
			lowcase(#tagparam);
366
 
363
 
367
			IF (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
364
			IF (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
368
			IF(strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
365
			IF(strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
369
			WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
366
			WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
370
 
367
 
371
			line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì
368
			line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì
372
			
369
			
373
			break;
370
			break;
374
		case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7
371
		case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7
375
			IF(strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK;
372
			IF(strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK;
376
 
373
 
377
			bword++;
374
			bword++;
378
			bukva=ESBYTE[bword];
375
			bukva=ESBYTE[bword];
379
			copystr(#bukva, #temp);
376
			copystr(#bukva, #temp);
380
 
377
 
381
			bword++;
378
			bword++;
382
			bukva=ESBYTE[bword];
379
			bukva=ESBYTE[bword];
383
			copystr(#bukva, #temp + strlen(#temp));
380
			copystr(#bukva, #temp + strlen(#temp));
384
			
381
			
385
			bukva=Hex2Symb(#temp);
382
			bukva=Hex2Symb(#temp);
386
			IF (bukva) goto DEFAULT_MARK;
383
			IF (bukva) goto DEFAULT_MARK;
387
			break;
384
			break;
388
			
385
			
389
		case '&': //îáðàáîòêà òåãîâ òèïà  
386
		case '&': //îáðàáîòêà òåãîâ òèïà  
390
			IF(ignor_text) break;
387
			IF(ignor_text) break;
391
			bword++;
388
			bword++;
392
			tag='';
389
			tag='';
393
			FOR (j=0;   (ESBYTE[bword] <>';') && (j < 7);     j++; bword++;)
390
			FOR (j=0;   (ESBYTE[bword] <>';') && (j < 7);     j++; bword++;)
394
			{
391
			{
395
				bukva = ESBYTE[bword];
392
				bukva = ESBYTE[bword];
396
				copystr(#bukva, #tag + strlen(#tag));
393
				copystr(#bukva, #tag + strlen(#tag));
397
			}
394
			}
398
			
395
			
399
			FOR (j=0; unicode_tags[j]!=0; j+=2;) 
396
			FOR (j=0; unicode_tags[j]!=0; j+=2;) 
400
			{
397
			{
401
				IF(!strcmp(#tag, unicode_tags[j]))
398
				IF(!strcmp(#tag, unicode_tags[j]))
402
				{
399
				{
403
					copystr(unicode_tags[j+1], #line + strlen(#line));
400
					copystr(unicode_tags[j+1], #line + strlen(#line));
404
					break 1;
401
					break 1;
405
				}
402
				}
406
			}
403
			}
407
			
404
			
408
			rez = StrToInt(#tag + 1) - 1040;
405
			rez = StrToInt(#tag + 1) - 1040;
409
			IF(tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5)
406
			IF(tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5)
410
				{
407
				{
411
					bukva = unicode_chars[rez];
408
					bukva = unicode_chars[rez];
412
					GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó
409
					GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó
413
				}
410
				}
414
			
411
			
415
			//WriteDebug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè
412
			//WriteDebug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè
416
			copystr(#tag, #line + strlen(#line)); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
413
			copystr(#tag, #line + strlen(#line)); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
417
			break;
414
			break;
418
		default:
415
		default:
419
			DEFAULT_MARK:
416
			DEFAULT_MARK:
420
			IF(ignor_text) break;
417
			IF(ignor_text) break;
421
			IF(pre_text == 0) && (bukva == ' ') && (strcmp(#line + strlen(#line) - 1, " ") == 0) continue;
418
			IF(pre_text == 0) && (bukva == ' ') && (strcmp(#line + strlen(#line) - 1, " ") == 0) continue;
422
			//
419
			//
423
			if (stolbec + strlen(#line) > max_kolvo_stolbcov)
420
			if (stolbec + strlen(#line) > max_kolvo_stolbcov)
424
			{
421
			{
425
				copystr(#line + find_symbol(#line, ' '), #temp); //ïåðåíîñ ïî ñëîâàì
422
				copystr(#line + find_symbol(#line, ' '), #temp); //ïåðåíîñ ïî ñëîâàì
426
				line[find_symbol(#line, ' ')] = 0x00;
423
				line[find_symbol(#line, ' ')] = 0x00;
427
				NEXT_MARK: IF(stroka - 1 > max_kolvo_strok) && (za_kadrom <>0) break 1; //óõîäèì...
424
				NEXT_MARK: IF(stroka - 1 > max_kolvo_strok) && (za_kadrom <>0) break 1; //óõîäèì...
428
				WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè
425
				WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè
429
				TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
426
				TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
430
				copystr(#temp, #line);
427
				copystr(#temp, #line);
431
			}
428
			}
432
			IF(pre_text == 0) && (bukva == ' ') && (stolbec == 0) && (strlen(#line) == 0) CONTINUE;
429
			IF(pre_text == 0) && (bukva == ' ') && (stolbec == 0) && (strlen(#line) == 0) CONTINUE;
433
			copystr(#bukva, #line + strlen(#line));
430
			copystr(#bukva, #line + strlen(#line));
434
	  }
431
	  }
435
	}
432
	}
436
	if (strcmp(#URL + strlen(#URL) - 4, ".txt")<>0) && (body_present==0)
433
	if (strcmp(#URL + strlen(#URL) - 4, ".txt")<>0) && (body_present==0)
437
		DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó åñëè êàêîé-òî ðàõèò íå ñîçäàë òåã áîäè
434
		DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó åñëè êàêîé-òî ðàõèò íå ñîçäàë òåã áîäè
438
 
435
 
439
	if (max_kolvo_strok * 10 + 25 <= height)
436
	if (max_kolvo_strok * 10 + 25 <= height)
440
		DrawBar(left, max_kolvo_strok * 10 + top + 25, width - 15, -max_kolvo_strok * 10 + height - 25, bg_color);
437
		DrawBar(left, max_kolvo_strok * 10 + top + 25, width - 15, -max_kolvo_strok * 10 + height - 25, bg_color);
441
	if (stroka * 10 + 15 <= height)
438
	if (stroka * 10 + 15 <= height)
442
		DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà
439
		DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà
443
	if (za_kadrom == 0) count = stroka;
440
	if (za_kadrom == 0) count = stroka;
444
	
441
	
445
	if (anchor)
442
	if (anchor)
446
	{
443
	{
447
		anchor[0]='';
444
		anchor[0]='';
448
		za_kadrom=anchor_line_num;
445
		za_kadrom=anchor_line_num;
449
		ParseHTML(buf, filesize);
446
		ParseHTML(buf, filesize);
450
	}
447
	}
451
 
448
 
452
	DrawScroller(); //ðèñóåì ñêðîëë
449
	DrawScroller(); //ðèñóåì ñêðîëë
453
}
450
}
454
 
451
 
455
 
452
 
456
void GetNextParam()
453
void GetNextParam()
457
{
454
{
458
	byte	kavichki = false;
455
	byte	kavichki = false;
459
	int		i = strlen(#tagparam) - 1;
456
	int		i = strlen(#tagparam) - 1;
460
	
457
	
461
	WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/')))
458
	WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/')))
462
	{
459
	{
463
		IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i];
460
		IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i];
464
		tagparam[i] = 0x00;
461
		tagparam[i] = 0x00;
465
		i--;
462
		i--;
466
	}
463
	}
467
 
464
 
468
	IF (kavichki)
465
	IF (kavichki)
469
	{
466
	{
470
		i=find_symbol(#tagparam, kavichki);
467
		i=find_symbol(#tagparam, kavichki);
471
		copystr(#tagparam + i, #options);
468
		copystr(#tagparam + i, #options);
472
	}
469
	}
473
	ELSE
470
	ELSE
474
	{
471
	{
475
		WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1;
472
		WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1;
476
		i++;
473
		i++;
477
		
474
		
478
		copystr(#tagparam + i, #options); //êîïèðóåì îïöèþ
475
		copystr(#tagparam + i, #options); //êîïèðóåì îïöèþ
479
		WHILE (options[0] == ' ') copystr(#options + 1, #options);
476
		WHILE (options[0] == ' ') copystr(#options + 1, #options);
480
	}
477
	}
481
	tagparam[i] = 0x00;
478
	tagparam[i] = 0x00;
482
 
479
 
483
	FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--)
480
	FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--)
484
	{
481
	{
485
		IF (tagparam[i] == '=') //äåðçêàÿ çàãëóøêà
482
		IF (tagparam[i] == '=') //äåðçêàÿ çàãëóøêà
486
		{
483
		{
487
			//copystr(#tagparam+i+2,#options);
484
			//copystr(#tagparam+i+2,#options);
488
			tagparam[i + 1] = 0x00;
485
			tagparam[i + 1] = 0x00;
489
		}
486
		}
490
	}
487
	}
491
 
488
 
492
	copystr(#tagparam + i + 1, #parametr); //êîïèðóåì ïàðàìåòð
489
	copystr(#tagparam + i + 1, #parametr); //êîïèðóåì ïàðàìåòð
493
	tagparam[i] = 0x00;
490
	tagparam[i] = 0x00;
494
}
491
}
495
 
492
 
496
 
493
 
497
 
494
 
498
char oldtag[100];
495
char oldtag[100];
499
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
496
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
500
	dword hr_color;
497
	dword hr_color;
501
 
498
 
502
    dword image=0;
499
    dword image=0;
503
    char temp[4096];
500
    char temp[4096];
504
    int w, h, img_za_kadrom=0;
501
    int w, h, img_za_kadrom=0;
505
 
502
 
506
	//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
503
	//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
507
	IF(tag[0] == '/') 
504
	IF(tag[0] == '/') 
508
	{
505
	{
509
		rez = 0;
506
		rez = 0;
510
		copystr(#tag + 1, #tag);
507
		copystr(#tag + 1, #tag);
511
	}
508
	}
512
	ELSE
509
	ELSE
513
		rez = 1;
510
		rez = 1;
514
 
511
 
515
	//
512
	//
516
	IF(!chTag("html")) {
513
	IF(!chTag("html")) {
517
		IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0;
514
		IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0;
518
		return;
515
		return;
519
	}
516
	}
520
	IF(!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez;
517
	IF(!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez;
521
 
518
 
522
	if(!chTag("title")) && (!rez)
519
	if(!chTag("title")) && (!rez)
523
	{
520
	{
524
		copystr(#line, #header);
521
		copystr(#line, #header);
525
		copystr(" -", #header + strlen(#header));
522
		copystr(" -", #header + strlen(#header));
526
		copystr(#version, #header + strlen(#header));
523
		copystr(#version, #header + strlen(#header));
527
		if (stroka==0) DrawTitle(#header);
524
		if (stroka==0) DrawTitle(#header);
528
		return;
525
		return;
529
	}
526
	}
530
	
527
	
531
	IF (ignor_text == 1) return;
528
	IF (ignor_text == 1) return;
532
	//
529
	//
533
 
530
 
534
	//
531
	//
535
	IF(!chTag("q")) copystr("\"", #line + strlen(#line));
532
	IF(!chTag("q")) copystr("\"", #line + strlen(#line));
536
	
533
	
537
	//âûâîä íà ýêðàí
534
	//âûâîä íà ýêðàí
538
	if (stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (line) 
535
	if (stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (line) && (!anchor)
539
	{
536
	{
540
		WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
537
		WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
541
		IF (b_text)	{ $add ebx, 1<<16   $int 0x40 }
538
		IF (b_text)	{ $add ebx, 1<<16   $int 0x40 }
542
		IF (i_text) Skew(stolbec * 6 + left1, top1, strlen(#line)+1*6, 10); //íàêëîííûé òåêñò
539
		IF (i_text) Skew(stolbec * 6 + left1, top1, strlen(#line)+1*6, 10); //íàêëîííûé òåêñò
543
		IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, strlen(#line) * 6, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
540
		IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, strlen(#line) * 6, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
544
		IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé
541
		IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé
545
		IF (link) {
542
		IF (link) {
546
			DefineButton(stolbec * 6 + left1 - 2, top1, strlen(#line) * 6 + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
543
			DefineButton(stolbec * 6 + left1 - 2, top1, strlen(#line) * 6 + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
547
			DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]);
544
			DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]);
548
		}
545
		}
549
	}
546
	}
550
	//
547
	//
551
	IF(!tag) return;
548
	IF(!tag) return;
552
	stolbec += strlen(#line);
549
	stolbec += strlen(#line);
553
 
550
 
554
	if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
551
	if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
555
	{
552
	{
556
		if (!strcmp(#anchor, #options))
553
		if (!strcmp(#anchor, #options))
557
		{
554
		{
558
			anchor_line_num=za_kadrom+stroka;
555
			anchor_line_num=za_kadrom+stroka;
559
		}
556
		}
560
	}
557
	}
561
 
558
 
562
	if (!chTag("body"))
559
	if (!chTag("body"))
563
	{
560
	{
564
		BODY_MARK:
561
		BODY_MARK:
565
		
562
		
566
		if (strcmp(#parametr, "link=") == 0)
563
		if (strcmp(#parametr, "link=") == 0)
567
			link_color = GetColor(#options);
564
			link_color = GetColor(#options);
568
		
565
		
569
		if (strcmp(#parametr, "text=") == 0)
566
		if (strcmp(#parametr, "text=") == 0)
570
		{
567
		{
571
			text_colors[0]=GetColor(#options);
568
			text_colors[0]=GetColor(#options);
572
		}
569
		}
573
		
570
		
574
		if (strcmp(#parametr, "bgcolor=") == 0)
571
		if (strcmp(#parametr, "bgcolor=") == 0)
575
		{
572
		{
576
			bg_color=GetColor(#options);
573
			bg_color=GetColor(#options);
577
		}
574
		}
578
		
575
		
579
		IF(tagparam) {
576
		IF(tagparam) {
580
			GetNextParam();
577
			GetNextParam();
581
			GOTO BODY_MARK;
578
			GOTO BODY_MARK;
582
		}
579
		}
583
		
580
		
584
		body_present = 1; //åñëè êàëè÷ íå ñîçäàë òåã áîäè íóæíî èçâðàùàòüñÿ
581
		body_present = 1; //åñëè êàëè÷ íå ñîçäàë òåã áîäè íóæíî èçâðàùàòüñÿ
585
 
582
 
586
		if (rez) DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
583
		if (rez) DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
587
		return;
584
		return;
588
	}
585
	}
589
	//////////////////////////
586
	//////////////////////////
590
	if (!chTag("a"))
587
	if (!chTag("a"))
591
	{
588
	{
592
		if (rez)
589
		if (rez)
593
		{
590
		{
594
			_A_MARK:
591
			_A_MARK:
595
			if (!strcmp(#parametr, "href="))
592
			if (!strcmp(#parametr, "href="))
596
			{
593
			{
597
				if (stroka - 1 > max_kolvo_strok) || (stroka < -2) return;
594
				if (stroka - 1 > max_kolvo_strok) || (stroka < -2) return;
598
				if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã
595
				if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã
599
				link = 1;
596
				link = 1;
600
				blink++;
597
				blink++;
601
				text_color_index++;
598
				text_color_index++;
602
				text_colors[text_color_index] = link_color;
599
				text_colors[text_color_index] = link_color;
603
				copystr(#options, #page_links + strlen(#page_links));
600
				copystr(#options, #page_links + strlen(#page_links));
604
				copystr("|", #page_links + strlen(#page_links));
601
				copystr("|", #page_links + strlen(#page_links));
605
			}
602
			}
606
			if (anchor) && (!strcmp(#parametr, "name="))
603
			if (anchor) && (!strcmp(#parametr, "name="))
607
			{
604
			{
608
				if (!strcmp(#anchor, #options))
605
				if (!strcmp(#anchor, #options))
609
				{
606
				{
610
					anchor_line_num=za_kadrom+stroka;
607
					anchor_line_num=za_kadrom+stroka;
611
				}
608
				}
612
			}
609
			}
613
			if (tagparam)
610
			if (tagparam)
614
			{
611
			{
615
				GetNextParam();
612
				GetNextParam();
616
				GOTO _A_MARK;
613
				GOTO _A_MARK;
617
			}
614
			}
618
		}
615
		}
619
		ELSE {
616
		ELSE {
620
			link = 0;
617
			link = 0;
621
			IF(text_color_index > 0) text_color_index--;
618
			IF(text_color_index > 0) text_color_index--;
622
		}
619
		}
623
		return;
620
		return;
624
	}
621
	}
625
	/////////////////////////
622
	/////////////////////////
626
	if (!chTag("font"))
623
	if (!chTag("font"))
627
	{
624
	{
628
		IF (stroka - 1 > max_kolvo_strok) return;
625
		IF (stroka - 1 > max_kolvo_strok) return;
629
		COL_MARK:
626
		COL_MARK:
630
		if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#')
627
		if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#')
631
		{
628
		{
632
			text_color_index++;
629
			text_color_index++;
633
			text_colors[text_color_index] = GetColor(#options);
630
			text_colors[text_color_index] = GetColor(#options);
634
		}
631
		}
635
		IF(tagparam) {
632
		IF(tagparam) {
636
			GetNextParam();
633
			GetNextParam();
637
			GOTO COL_MARK;
634
			GOTO COL_MARK;
638
		}
635
		}
639
		IF(!rez) && (text_color_index > 0) text_color_index--;
636
		IF(!rez) && (text_color_index > 0) text_color_index--;
640
		return;
637
		return;
641
	}
638
	}
642
	//////////////////////////
639
	//////////////////////////
643
	IF(!chTag("tr")) || (!chTag("br")) {
640
	IF(!chTag("tr")) || (!chTag("br")) {
644
		TextGoDown(left1, top1, width1);
641
		TextGoDown(left1, top1, width1);
645
		return;
642
		return;
646
	}
643
	}
647
	IF(!chTag("div")) {
644
	IF(!chTag("div")) {
648
		IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1);
645
		IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1);
649
		return;
646
		return;
650
	}
647
	}
651
	IF(!chTag("p")) {
648
	IF(!chTag("p")) {
652
		IF(oldtag[0] == 'h') return;
649
		IF(oldtag[0] == 'h') return;
653
		TextGoDown(left1, top1, width1);
650
		TextGoDown(left1, top1, width1);
654
		IF(rez) TextGoDown(left1, top1 + 10, width1);
651
		IF(rez) TextGoDown(left1, top1 + 10, width1);
655
		return;
652
		return;
656
	}
653
	}
657
	////////////////////////////
654
	////////////////////////////
658
	IF(!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) {
655
	IF(!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) {
659
		TextGoDown(left1, top1, width1);
656
		TextGoDown(left1, top1, width1);
660
		IF(rez) TextGoDown(left1, top1 + 10, width1);
657
		IF(rez) TextGoDown(left1, top1 + 10, width1);
661
		b_text = rez;
658
		b_text = rez;
662
		copystr(#tag, #oldtag);
659
		copystr(#tag, #oldtag);
663
		return;
660
		return;
664
	} ELSE copystr("", #oldtag);
661
	} ELSE copystr("", #oldtag);
665
	IF(!chTag("b")) || (!chTag("strong")) || (!chTag("big")) {
662
	IF(!chTag("b")) || (!chTag("strong")) || (!chTag("big")) {
666
		b_text = rez;
663
		b_text = rez;
667
		return;
664
		return;
668
	}
665
	}
669
	////////////////////////////
666
	////////////////////////////
670
	IF(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) {
667
	IF(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) {
671
		i_text = rez;
668
		i_text = rez;
672
		return;
669
		return;
673
	}	
670
	}	
674
	////////////////////////////
671
	////////////////////////////
675
	if (!chTag("dt"))
672
	if (!chTag("dt"))
676
	{
673
	{
677
		li_text = rez;
674
		li_text = rez;
678
		IF(rez == 0) return;
675
		IF(rez == 0) return;
679
		TextGoDown(left1, top1, width1);
676
		TextGoDown(left1, top1, width1);
680
		return;
677
		return;
681
	}
678
	}
682
	/////////////////////////////
679
	/////////////////////////////
683
	if(!chTag("li")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè
680
	if(!chTag("li")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè
684
	{
681
	{
685
		li_text = rez;
682
		li_text = rez;
686
		IF(rez == 0) return;
683
		IF(rez == 0) return;
687
		TextGoDown(left1, top1, width1);
684
		TextGoDown(left1, top1, width1);
688
		IF(stroka > -1) && (stroka - 2 < max_kolvo_strok) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0);
685
		IF(stroka > -1) && (stroka - 2 < max_kolvo_strok) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0);
689
		return;
686
		return;
690
	}
687
	}
691
	////////////////////////////
688
	////////////////////////////
692
	IF(!chTag("u")) || (!chTag("ins")) u_text = rez;
689
	IF(!chTag("u")) || (!chTag("ins")) u_text = rez;
693
	IF(!chTag("s")) || (!chTag("strike")) || (!chTag("del")) s_text = rez;
690
	IF(!chTag("s")) || (!chTag("strike")) || (!chTag("del")) s_text = rez;
694
	IF(!chTag("ul")) || (!chTag("ol")) IF(!rez) {
691
	IF(!chTag("ul")) || (!chTag("ol")) IF(!rez) {
695
		li_text = rez;
692
		li_text = rez;
696
		li_tab--;
693
		li_tab--;
697
		TextGoDown(left1, top1, width1);
694
		TextGoDown(left1, top1, width1);
698
	} ELSE li_tab++;
695
	} ELSE li_tab++;
699
	IF(!chTag("dd")) stolbec += 5;
696
	IF(!chTag("dd")) stolbec += 5;
700
	IF(!chTag("blockquote")) blq_text = rez;
697
	IF(!chTag("blockquote")) blq_text = rez;
701
	IF(!chTag("pre")) pre_text = rez; 
698
	IF(!chTag("pre")) pre_text = rez; 
702
	IF(!chTag("hr")) {
699
	IF(!chTag("hr")) {
703
		TextGoDown(left1, top1, width1);
700
		TextGoDown(left1, top1, width1);
704
		TextGoDown(left1, top1 + 10, width1);
701
		TextGoDown(left1, top1 + 10, width1);
705
		IF(strcmp(#parametr, "color=") == 0) hr_color = GetColor(#options);
702
		IF(strcmp(#parametr, "color=") == 0) hr_color = GetColor(#options);
706
		ELSE hr_color = 0x999999;
703
		ELSE hr_color = 0x999999;
707
		IF(stroka > 0) DrawBar(left1, top1 + 14, width1 - 8, 1, hr_color);
704
		IF(stroka > 0) DrawBar(left1, top1 + 14, width1 - 8, 1, hr_color);
708
	}
705
	}
709
 
706
 
710
	if (!chTag("img"))
707
	if (!chTag("img"))
711
	{
708
	{
712
		//IF (GetFileInfo(#libimg)<>0) return;  //åñëè áèáëèîòåêè íåò
709
		//IF (GetFileInfo(#libimg)<>0) return;  //åñëè áèáëèîòåêè íåò
713
		IMG_TAG:
710
		IMG_TAG:
714
			IF (strcmp(#parametr,"src=")==0)   //íàäî îáúåäèíèòü ñ GetNewUrl()
711
			IF (strcmp(#parametr,"src=")==0)   //íàäî îáúåäèíèòü ñ GetNewUrl()
715
	          {
712
	          {
716
				copystr(BrowserHistory.CurrentUrl(), #temp); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
713
				copystr(BrowserHistory.CurrentUrl(), #temp); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
717
				temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
714
				temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
718
				copystr(#options,#temp+strlen(#temp));
715
				copystr(#options,#temp+strlen(#temp));
719
				image=load_image(#temp);
716
				image=load_image(#temp);
720
	
717
	
721
	                w=DSWORD[image+4];
718
	                w=DSWORD[image+4];
722
	                h=DSWORD[image+8]; 
719
	                h=DSWORD[image+8]; 
723
	          }
720
	          }
724
		IF(tagparam) {
721
		IF(tagparam) {
725
			GetNextParam();
722
			GetNextParam();
726
			GOTO IMG_TAG;
723
			GOTO IMG_TAG;
727
		}
724
		}
728
 
725
 
729
		if (w>width1) w=width1;
726
		if (w>width1) w=width1;
730
		
727
		
731
        if (image)
728
        if (image)
732
        {
729
        {
733
			stroka+=h/10;
730
			stroka+=h/10;
734
			
731
			
735
			if (top1+hWB1.top+WB1.height-10) //åñëè ÂѨ èçîáðàæåíèå óøëî ÂÅÐÕ èëè ÂÍÈÇ
732
			if (top1+hWB1.top+WB1.height-10) //åñëè ÂѨ èçîáðàæåíèå óøëî ÂÅÐÕ èëè ÂÍÈÇ
736
				return;
733
				return;
737
 
734
 
738
			if (top1
735
			if (top1
739
			{
736
			{
740
				img_za_kadrom=WB1.top-top1;
737
				img_za_kadrom=WB1.top-top1;
741
				h=h-img_za_kadrom;
738
				h=h-img_za_kadrom;
742
				top1=WB1.top;
739
				top1=WB1.top;
743
			}
740
			}
744
			
741
			
745
			if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó     IF (stroka - 2 < max_kolvo_strok)
742
			if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó     IF (stroka - 2 < max_kolvo_strok)
746
			{
743
			{
747
				h=WB1.top+WB1.height-top1-15;
744
				h=WB1.top+WB1.height-top1-15;
748
			}	
745
			}	
749
 
746
 
750
			IF (h<=0) return;
747
			IF (h<=0) return;
751
			
748
			
752
			img_draw stdcall (image,left1-5,top1+10,w, h,0,img_za_kadrom);
749
			img_draw stdcall (image,left1-5,top1+10,w, h,0,img_za_kadrom);
753
			DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color);
750
			DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color);
754
			IF (link)
751
			IF (link)
755
			{
752
			{
756
				DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9);
753
				DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9);
757
			}
754
			}
758
 
755
 
759
        }
756
        }
760
		/*else
757
		/*else
761
		{
758
		{
762
			IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line));
759
			IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line));
763
		}*/
760
		}*/
764
		return;
761
		return;
765
	}
762
	}
766
 
763
 
767
	if (!chTag("meta")) || (!chTag("?xml"))
764
	if (!chTag("meta")) || (!chTag("?xml"))
768
	{
765
	{
769
		META:
766
		META:
770
		if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding="))
767
		if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding="))
771
		{
768
		{
772
			copystr(#options[find_symbol(#options, '=')],#options); //ïîèñê â content=
769
			copystr(#options[find_symbol(#options, '=')],#options); //ïîèñê â content=
773
 
770
 
774
			IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8"))
771
			IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8"))
775
			{
772
			{
776
				ReadHtml();
773
				ReadHtml();
777
				utf8rutodos(buf);
774
				utf8rutodos(buf);
778
			}
775
			}
779
			IF(!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u"))
776
			IF(!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u"))
780
			{
777
			{
781
				ReadHtml();
778
				ReadHtml();
782
				koitodos(buf);
779
				koitodos(buf);
783
			}
780
			}
784
			IF(!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866"))
781
			IF(!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866"))
785
			{
782
			{
786
				ReadHtml();
783
				ReadHtml();
787
			}
784
			}
788
		}
785
		}
789
		IF(tagparam)
786
		IF(tagparam)
790
		{
787
		{
791
			GetNextParam();
788
			GetNextParam();
792
			goto META;
789
			goto META;
793
		}
790
		}
794
		return;
791
		return;
795
	}
792
	}
796
}
793
}
797
 
794
 
798
 
795
 
799
void TextGoDown(int left1, top1, width1)
796
void TextGoDown(int left1, top1, width1)
800
{
797
{
801
	stroka++;
798
	stroka++;
802
	IF(blq_text == 1) stolbec = 8;
799
	IF(blq_text == 1) stolbec = 8;
803
	ELSE stolbec = 0;
800
	ELSE stolbec = 0;
804
	IF(li_text == 1) stolbec = li_tab * 5;
801
	IF(li_text == 1) stolbec = li_tab * 5;
805
	IF(stroka >= 0) && (stroka - 2 < max_kolvo_strok) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color);
802
	IF(stroka >= 0) && (stroka - 2 < max_kolvo_strok)  && (!anchor) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color);
806
}
803
}
807
 
804
 
808
 
805
 
809
//ñêðîëë
806
//ñêðîëë
810
void TWebBrowser::DrawScroller() //íå îïòèìàëüíàÿ îòðèñîâêà, íî çàòî â îäíîì ìåñòå
807
void TWebBrowser::DrawScroller() //íå îïòèìàëüíàÿ îòðèñîâêà, íî çàòî â îäíîì ìåñòå
811
{
808
{
812
	scroll1.max_area = count;
809
	scroll1.max_area = count;
813
	scroll1.cur_area = max_kolvo_strok;
810
	scroll1.cur_area = max_kolvo_strok;
814
	scroll1.position = za_kadrom;
811
	scroll1.position = za_kadrom;
815
 
812
 
816
	scroll1.all_redraw=1;
813
	scroll1.all_redraw=1;
817
	scroll1.start_x=Form.width-28; //left + width - 15
814
	scroll1.start_x=Form.width-28; //left + width - 15
818
	scroll1.size_y=WB1.height;
815
	scroll1.size_y=WB1.height;
819
 
816
 
820
	scrollbar_v_draw(#scroll1);
817
	scrollbar_v_draw(#scroll1);
821
 
818
 
822
	DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1);
819
	DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1);
823
	DefineButton(scroll1.start_x+1, scroll1.start_y+scroll1.size_y-18, 16, 16, ID2+BT_HIDE, 0xE4DFE1);
820
	DefineButton(scroll1.start_x+1, scroll1.start_y+scroll1.size_y-18, 16, 16, ID2+BT_HIDE, 0xE4DFE1);
824
}
821
}
825
>
822
>
826
>
823
>