Subversion Repositories Kolibri OS

Rev

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

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