Subversion Repositories Kolibri OS

Rev

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

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