Subversion Repositories Kolibri OS

Rev

Rev 2799 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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