mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-27 08:49:40 +03:00
HTMLv 0.95: fixed bug in utf-decoding, in opening program with params, with images, complete improvements in strings.h (now it C-like library)
git-svn-id: svn://kolibrios.org@2844 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0d1782e8b0
commit
2a73669575
@ -20,9 +20,9 @@
|
|||||||
#include "img\URLgoto.txt";
|
#include "img\URLgoto.txt";
|
||||||
|
|
||||||
|
|
||||||
//ïåðåìåííûå
|
#define URL param
|
||||||
char URL[4096],
|
|
||||||
editURL[4096],
|
char editURL[4096],
|
||||||
page_links[12000],
|
page_links[12000],
|
||||||
header[300];
|
header[300];
|
||||||
|
|
||||||
@ -34,7 +34,12 @@ int mouse_dd;
|
|||||||
edit_box edit1= {250,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,248,#editURL,#mouse_dd,2,19,19};
|
edit_box edit1= {250,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,248,#editURL,#mouse_dd,2,19,19};
|
||||||
scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; //details in scroll_lib.h--
|
scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; //details in scroll_lib.h--
|
||||||
|
|
||||||
|
|
||||||
proc_info Form;
|
proc_info Form;
|
||||||
|
#define WIN_W 640
|
||||||
|
#define WIN_H 480
|
||||||
|
|
||||||
|
|
||||||
dword stak[100]; //ìåíþ ÏÊÌ
|
dword stak[100]; //ìåíþ ÏÊÌ
|
||||||
mouse m;
|
mouse m;
|
||||||
|
|
||||||
@ -55,11 +60,14 @@ void main()
|
|||||||
load_dll2(#abox_lib, #boxlib_init,0);
|
load_dll2(#abox_lib, #boxlib_init,0);
|
||||||
//load_dll2(libtruetype, #truetype,0);
|
//load_dll2(libtruetype, #truetype,0);
|
||||||
|
|
||||||
if (param) strcpy(#URL, #param);
|
if (!URL) strcpy(#URL, "/sys/index.htm");
|
||||||
else strcpy(#URL, "/sys/index.htm");
|
|
||||||
strcpy(#editURL, #URL);
|
strcpy(#editURL, #URL);
|
||||||
|
|
||||||
lines.column_max = 101;
|
Form.width=WIN_W;
|
||||||
|
Form.height=WIN_H;
|
||||||
|
|
||||||
|
SetElementSizes();
|
||||||
|
|
||||||
WB1.OpenPage();
|
WB1.OpenPage();
|
||||||
|
|
||||||
SetEventMask(0x27);
|
SetEventMask(0x27);
|
||||||
@ -161,11 +169,21 @@ void main()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetElementSizes()
|
||||||
|
{
|
||||||
|
edit1.width=Form.width-266;
|
||||||
|
WB1.top=44;
|
||||||
|
WB1.width=Form.width-13;
|
||||||
|
WB1.height=onTop(43,5);
|
||||||
|
lines.column_max = WB1.width - 30 / 6;
|
||||||
|
lines.visible = WB1.height - 3 / 10 - 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Draw_Window()
|
void Draw_Window()
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0);
|
DefineAndDrawWindow(215,100,WIN_W,WIN_H,0x73,0x00E4DFE1,0,0,0);
|
||||||
|
|
||||||
GetProcessInfo(#Form, SelfInfo);
|
GetProcessInfo(#Form, SelfInfo);
|
||||||
if (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
|
if (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
|
||||||
@ -189,13 +207,7 @@ void Draw_Window()
|
|||||||
DrawRegion(205,14,onLeft(58,205),18,0x94AECE); //îáîäîê ïîëîñû àäðåñà
|
DrawRegion(205,14,onLeft(58,205),18,0x94AECE); //îáîäîê ïîëîñû àäðåñà
|
||||||
DrawRegion(206,15,onLeft(59,205),16,0xE4ECF3);
|
DrawRegion(206,15,onLeft(59,205),16,0xE4ECF3);
|
||||||
|
|
||||||
edit1.width=Form.width-266;
|
SetElementSizes();
|
||||||
WB1.top=44;
|
|
||||||
WB1.width=Form.width-13;
|
|
||||||
WB1.height=onTop(43,5);
|
|
||||||
lines.column_max = WB1.width - 30 / 6;
|
|
||||||
lines.visible = WB1.height - 3 / 10 - 2;
|
|
||||||
|
|
||||||
WB1.ShowPage();
|
WB1.ShowPage();
|
||||||
|
|
||||||
DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1);
|
DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1);
|
||||||
|
@ -5,11 +5,10 @@ dword
|
|||||||
buf,
|
buf,
|
||||||
filesize,
|
filesize,
|
||||||
blink;
|
blink;
|
||||||
int i;
|
|
||||||
|
|
||||||
char download_path[]="/rd/1/.download";
|
char download_path[]="/rd/1/.download";
|
||||||
char search_path[]="http://nigma.ru/index.php?s=";
|
char search_path[]="http://nigma.ru/index.php?s=";
|
||||||
char version[]=" Text-based Browser 0.94z";
|
char version[]=" Text-based Browser 0.95";
|
||||||
|
|
||||||
|
|
||||||
struct TWebBrowser {
|
struct TWebBrowser {
|
||||||
@ -21,6 +20,7 @@ struct TWebBrowser {
|
|||||||
void ShowPage();
|
void ShowPage();
|
||||||
void ParseHTML(dword);
|
void ParseHTML(dword);
|
||||||
void WhatTextStyle(int left1, top1, width1);
|
void WhatTextStyle(int left1, top1, width1);
|
||||||
|
void DrawPage();
|
||||||
void DrawScroller();
|
void DrawScroller();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -48,7 +48,6 @@ char line[500],
|
|||||||
parametr[1200],
|
parametr[1200],
|
||||||
options[1000];
|
options[1000];
|
||||||
|
|
||||||
|
|
||||||
#include "include\history.h"
|
#include "include\history.h"
|
||||||
#include "include\colors.h"
|
#include "include\colors.h"
|
||||||
#include "include\unicode_tags.h"
|
#include "include\unicode_tags.h"
|
||||||
@ -58,7 +57,7 @@ char line[500],
|
|||||||
|
|
||||||
void TWebBrowser::Scan(int id)
|
void TWebBrowser::Scan(int id)
|
||||||
{
|
{
|
||||||
if (id > 399)
|
if (id >= 400)
|
||||||
{
|
{
|
||||||
GetURLfromPageLinks(id);
|
GetURLfromPageLinks(id);
|
||||||
|
|
||||||
@ -247,6 +246,7 @@ void TWebBrowser::OpenPage()
|
|||||||
KillProcess(downloader_id);
|
KillProcess(downloader_id);
|
||||||
strcpy(#editURL, #URL);
|
strcpy(#editURL, #URL);
|
||||||
BrowserHistory.AddUrl();
|
BrowserHistory.AddUrl();
|
||||||
|
strcpy(#header, #version);
|
||||||
if (!strcmp(get_URL_part(5),"http:")))
|
if (!strcmp(get_URL_part(5),"http:")))
|
||||||
{
|
{
|
||||||
KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
|
KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
|
||||||
@ -286,20 +286,21 @@ void TWebBrowser::ShowPage()
|
|||||||
WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0);
|
WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0);
|
||||||
if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0);
|
if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0);
|
||||||
}
|
}
|
||||||
DrawTitle(#version); //?
|
//return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
ParseHTML(buf);
|
ParseHTML(buf);
|
||||||
IF (!strcmp(#version, #header)) DrawTitle(#header);
|
|
||||||
|
if (!header) strcpy(#header, #version);
|
||||||
|
if (!strcmp(#version, #header)) DrawTitle(#header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TWebBrowser::ParseHTML(dword bword){
|
void TWebBrowser::ParseHTML(dword bword){
|
||||||
word bukva[1];
|
word bukva[2];
|
||||||
int j, perenos_num;
|
int j, perenos_num;
|
||||||
byte ignor_param = 0;
|
byte ignor_param;
|
||||||
char temp[768];
|
char temp[768];
|
||||||
|
|
||||||
stroka = -lines.first;
|
stroka = -lines.first;
|
||||||
@ -314,7 +315,7 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
bg_color = 0xFFFFFF;
|
bg_color = 0xFFFFFF;
|
||||||
line = '';
|
line = '';
|
||||||
strcpy(#page_links,"|");
|
strcpy(#page_links,"|");
|
||||||
strcpy(#header,#version);
|
strcpy(#header, #version);
|
||||||
|
|
||||||
if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1;
|
if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1;
|
||||||
if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
|
if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
|
||||||
@ -339,7 +340,7 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
tab_len=strlen(#line)/8;
|
tab_len=strlen(#line)/8;
|
||||||
tab_len=tab_len*8;
|
tab_len=tab_len*8;
|
||||||
tab_len=8+tab_len-strlen(#line);
|
tab_len=8+tab_len-strlen(#line);
|
||||||
for (i=0; i<tab_len; i++;) strcat(#line," ");
|
for (j=0; j<tab_len; j++;) strcat(#line," ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x0d:
|
case 0x0d:
|
||||||
@ -347,15 +348,17 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
goto DEFAULT_MARK;
|
goto DEFAULT_MARK;
|
||||||
case '<':
|
case '<':
|
||||||
bword++; //ïðîìîòàåì ñèìâîë <
|
bword++; //ïðîìîòàåì ñèìâîë <
|
||||||
|
tag = parametr = tagparam = ignor_param = 0;
|
||||||
if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî
|
if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî
|
||||||
{
|
{
|
||||||
bword++;
|
bword++;
|
||||||
if (ESBYTE[bword] == '-') {
|
if (ESBYTE[bword] == '-')
|
||||||
HH_:
|
{
|
||||||
|
HH_:
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
bword++;
|
bword++;
|
||||||
if (bword >= buf + filesize) break 1;
|
if (buf + filesize <= bword) break 2;
|
||||||
}
|
}
|
||||||
while (ESBYTE[bword] <>'-');
|
while (ESBYTE[bword] <>'-');
|
||||||
|
|
||||||
@ -378,19 +381,18 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
}
|
}
|
||||||
bword++;
|
bword++;
|
||||||
}
|
}
|
||||||
lowcase(#tag);
|
strlwr(#tag);
|
||||||
lowcase(#tagparam);
|
strlwr(#tagparam);
|
||||||
|
|
||||||
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
|
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //for br/
|
||||||
if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
|
if (tagparam) && (strlen(#tagparam) < 4000) GetNextParam();
|
||||||
//while (tagparam)
|
|
||||||
//{
|
|
||||||
// GetNextParam();
|
|
||||||
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
|
||||||
//}
|
|
||||||
|
|
||||||
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì
|
DrawPage();
|
||||||
|
line=0;
|
||||||
|
|
||||||
|
if (tag) WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
||||||
|
|
||||||
|
tag = parametr = tagparam = ignor_param = '\0';
|
||||||
break;
|
break;
|
||||||
case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7
|
case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7
|
||||||
if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK;
|
if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK;
|
||||||
@ -406,10 +408,10 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
if (bukva) goto DEFAULT_MARK;
|
if (bukva) goto DEFAULT_MARK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '&': //îáðàáîòêà òåãîâ òèïà
|
case '&': // and so on
|
||||||
bword++;
|
bword++;
|
||||||
tag='';
|
tag=0;
|
||||||
for (j=0; (ESBYTE[bword] <>';') && (j < 7); j++, bword++;)
|
for (j=0; (ESBYTE[bword]<>';') && (j<7); j++, bword++;)
|
||||||
{
|
{
|
||||||
bukva = ESBYTE[bword];
|
bukva = ESBYTE[bword];
|
||||||
strcat(#tag, #bukva);
|
strcat(#tag, #bukva);
|
||||||
@ -424,14 +426,15 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rez = StrToInt(#tag + 1) - 1040;
|
rez = atoi(#tag + 1) - 1040;
|
||||||
if (tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5)
|
if (tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5)
|
||||||
{
|
{
|
||||||
bukva = unicode_chars[rez];
|
bukva = unicode_chars[rez];
|
||||||
GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó
|
//GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó ëó÷øå íàâåðíî strcat(#line, unicode_tags[j+1]); è break 1;
|
||||||
}
|
strcat(#line, #bukva);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
//debug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè
|
|
||||||
strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
|
strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -445,13 +448,13 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
line[perenos_num] = 0x00;
|
line[perenos_num] = 0x00;
|
||||||
NEXT_MARK:
|
NEXT_MARK:
|
||||||
if (stroka >= lines.visible) && (lines.first <>0) break 1; //óõîäèì...
|
if (stroka >= lines.visible) && (lines.first <>0) break 1; //óõîäèì...
|
||||||
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè
|
DrawPage();
|
||||||
TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
|
TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
|
||||||
strcpy(#line, #temp);
|
strcpy(#line, #temp);
|
||||||
}
|
}
|
||||||
if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) break;
|
if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) break;
|
||||||
strcat(#line, #bukva);
|
if (strlen(#line)<sizeof(line)) strcat(#line, #bukva);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lines.visible * 10 + 25 <= height)
|
if (lines.visible * 10 + 25 <= height)
|
||||||
@ -459,16 +462,74 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
if (stroka * 10 + 15 <= height)
|
if (stroka * 10 + 15 <= height)
|
||||||
DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà
|
DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà
|
||||||
if (lines.first == 0) lines.all = stroka;
|
if (lines.first == 0) lines.all = stroka;
|
||||||
|
debug ("Pre end - anchor");
|
||||||
if (anchor)
|
if (anchor)
|
||||||
{
|
{
|
||||||
|
//åñëè ïîñðåäè òåêñòà ïîÿâèòñÿ íîâûé ÿêîðü - áóäåò áåñêîíå÷íûé öèêë
|
||||||
anchor='';
|
anchor='';
|
||||||
lines.first=anchor_line_num;
|
lines.first=anchor_line_num;
|
||||||
ParseHTML(buf);
|
ParseHTML(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug("End parsing");
|
debug("End parsing");
|
||||||
DrawScroller(); //ðèñóåì ñêðîëë
|
|
||||||
|
DrawScroller();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TWebBrowser::DrawPage() //ðåçàòü çäåñü!!1!
|
||||||
|
{
|
||||||
|
int start_x, start_y, line_length;
|
||||||
|
char temp[sizeof(line)];
|
||||||
|
|
||||||
|
if (!header) //&& (tag)
|
||||||
|
{
|
||||||
|
if (strlen(#version)+strlen(#line)+2>sizeof(header))
|
||||||
|
{
|
||||||
|
//line = 123456789
|
||||||
|
//header = 1234
|
||||||
|
//line = 56789
|
||||||
|
debug("too long header");
|
||||||
|
strcpy(#temp, #line);
|
||||||
|
temp[sizeof(header)-strlen(#version)-2]=0;
|
||||||
|
strcpy(#header, #temp);
|
||||||
|
strcpy(#line, #line+strlen(#temp));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("normal header");
|
||||||
|
strcpy(#header, #line);
|
||||||
|
line=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(#header, " -");
|
||||||
|
strcat(#header, #version);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stroka >= 0) && (stroka - 2 < lines.visible) && (line) && (!anchor)
|
||||||
|
{
|
||||||
|
if (!stroka) && (!stolbec)
|
||||||
|
{
|
||||||
|
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
|
||||||
|
first_line_drawed=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
start_x=stolbec * 6 + left+5;
|
||||||
|
start_y=stroka * 10 + top + 5;
|
||||||
|
line_length=strlen(#line)*6;
|
||||||
|
|
||||||
|
WriteText(start_x, start_y, 0x80, text_colors[text_color_index], #line, 0);
|
||||||
|
//line_length = get_length stdcall (#line,-1,16,line_length);
|
||||||
|
//text_out stdcall (#line, -1, 17, text_colors[text_color_index], start_x, start_y-2);
|
||||||
|
IF (b_text) { $add ebx, 1<<16 $int 0x40 }
|
||||||
|
IF (i_text) Skew(start_x, start_y, line_length+6, 10);
|
||||||
|
IF (s_text) DrawBar(start_x, start_y + 4, line_length, 1, text_colors[text_color_index]);
|
||||||
|
IF (u_text) DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]);
|
||||||
|
IF (link) {
|
||||||
|
DefineButton(start_x-2, start_y, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9);
|
||||||
|
DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]);
|
||||||
|
}
|
||||||
|
stolbec += strlen(#line);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -478,61 +539,44 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
|
|
||||||
dword image;
|
dword image;
|
||||||
char temp[4096];
|
char temp[4096];
|
||||||
int w, h, img_lines_first, line_length;
|
int w=0, h=0, img_lines_first=0;
|
||||||
|
|
||||||
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
|
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
|
||||||
IF(tag[0] == '/')
|
if (tag[0] == '/')
|
||||||
{
|
{
|
||||||
rez = 0;
|
rez = 0;
|
||||||
strcpy(#tag, #tag+1);
|
strcpy(#tag, #tag+1);
|
||||||
}
|
}
|
||||||
ELSE
|
else
|
||||||
rez = 1;
|
rez = 1;
|
||||||
|
|
||||||
//
|
if (!chTag("html")) {
|
||||||
IF(!chTag("html")) {
|
|
||||||
IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0;
|
IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
IF(!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez;
|
|
||||||
|
|
||||||
if(!chTag("title")) && (!rez)
|
if (!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez;
|
||||||
|
|
||||||
|
if(!chTag("title"))
|
||||||
{
|
{
|
||||||
strcpy(#header, #line);
|
if (rez)
|
||||||
strcat(#header, " -");
|
{
|
||||||
strcat(#header, #version);
|
header=0;
|
||||||
if (stroka==0) DrawTitle(#header);
|
}
|
||||||
|
else //òåã çàêðûëñÿ - âûâåëè ñòðîêó
|
||||||
|
{
|
||||||
|
if (stroka==0) DrawTitle(#header);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
IF (ignor_text) return;
|
|
||||||
|
|
||||||
|
if (ignor_text) return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IF(!chTag("q")) strcat(#line, "\"");
|
IF(!chTag("q")) strcat(#line, "\"");
|
||||||
|
|
||||||
//âûâîä íà ýêðàí
|
|
||||||
if (stroka >= 0) && (stroka - 2 < lines.visible) && (line) && (!anchor)
|
|
||||||
{
|
|
||||||
if (stroka==0) && (stolbec==0)
|
|
||||||
{
|
|
||||||
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
|
|
||||||
first_line_drawed=1;
|
|
||||||
}
|
|
||||||
line_length=strlen(#line)*6;
|
|
||||||
WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
|
|
||||||
//line_length = get_length stdcall (#line,-1,16,line_length);
|
|
||||||
//text_out stdcall (#line, -1, 17, text_colors[text_color_index], stolbec * 6 + left1, top1-2);
|
|
||||||
IF (b_text) { $add ebx, 1<<16 $int 0x40 }
|
|
||||||
IF (i_text) Skew(stolbec * 6 + left1, top1, line_length+6, 10); //íàêëîííûé òåêñò
|
|
||||||
IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, line_length, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
|
|
||||||
IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé
|
|
||||||
IF (link) {
|
|
||||||
DefineButton(stolbec * 6 + left1 - 2, top1, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
|
|
||||||
DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IF(!tag) return;
|
|
||||||
stolbec += strlen(#line);
|
|
||||||
|
|
||||||
if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
|
if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
|
||||||
{
|
{
|
||||||
@ -541,7 +585,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
anchor_line_num=lines.first+stroka;
|
anchor_line_num=lines.first+stroka;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!chTag("body"))
|
if (!chTag("body"))
|
||||||
{
|
{
|
||||||
BODY_MARK:
|
BODY_MARK:
|
||||||
@ -595,13 +639,14 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
GOTO _A_MARK;
|
GOTO _A_MARK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ELSE {
|
else {
|
||||||
link = 0;
|
link = 0;
|
||||||
IF(text_color_index > 0) text_color_index--;
|
IF(text_color_index > 0) text_color_index--;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!chTag("font"))
|
if (!chTag("font"))
|
||||||
{
|
{
|
||||||
if (rez)
|
if (rez)
|
||||||
@ -748,7 +793,8 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
h=WB1.top+WB1.height-top1-15;
|
h=WB1.top+WB1.height-top1-15;
|
||||||
}
|
}
|
||||||
|
|
||||||
IF (h<=0) return;
|
if (h<=0) return;
|
||||||
|
if (anchor) return;
|
||||||
|
|
||||||
img_draw stdcall (image,left1-5,top1+10,w, h,0,img_lines_first);
|
img_draw stdcall (image,left1-5,top1+10,w, h,0,img_lines_first);
|
||||||
DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color);
|
DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color);
|
||||||
|
@ -52,16 +52,75 @@
|
|||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<!--этого текста здесь <нет>-->
|
<!--этого текста здесь <нет>-->
|
||||||
|
|
||||||
|
|
||||||
|
<a href='/sys/index.htm'>Index.htm</a><br>
|
||||||
|
<a href="/sys/kernel.mnt">Kernel.mnt</a><br>
|
||||||
|
<a href="index.htm#2.1.4">index.htm#2.1.4</a><br>
|
||||||
|
<a href="#2.1.4">#2.1.4</a><br>
|
||||||
|
<a href="background.gif">Ôîíîâàÿ êàðòèíêà</a><br>
|
||||||
|
<a href='1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111
|
||||||
|
'>Î÷åíü äëèííûé àäðåñ ñòðîêè</a><br>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<hr color="#758999">
|
<hr color="#758999">
|
||||||
В этом тексте есть переход на следующую строку, но браузер
|
В этом тексте есть переход на следующую строку, но браузер
|
||||||
его должен проигнорировать. Еще много пробелов. А тут есть
|
его должен проигнорировать. Еще много пробелов. А тут есть
|
||||||
табы. Кое-какие символы: " & < > • © ® „ “ — Їжачок іншого боку р. Євфрат з'їв ґрунт та єврейський ґербалайф.
|
табы. Кое-какие символы: " & < > • © ® „ “ — Їжачок іншого боку р. Євфрат з'їв ґрунт та єврейський ґербалайф.
|
||||||
<hr color="grey">
|
<hr color="grey">
|
||||||
|
|
||||||
<p><a href='index.htm'>Íà ãëàâíóþ ñòðàíèöó index.htm</a></p>
|
|
||||||
<p><a href="index.htm#2.1.4">index.htm#2.1.4</a></p>
|
|
||||||
<p><a href="#2.1.4">#2.1.4</a></p>
|
|
||||||
<p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
void wintodos(dword ESI)
|
inline fastcall void wintodos( ESI)
|
||||||
{
|
{
|
||||||
while (BL=ESBYTE[ESI])
|
while (BL=ESBYTE[ESI])
|
||||||
{
|
{
|
||||||
@ -28,7 +28,7 @@ void wintodos(dword ESI)
|
|||||||
|
|
||||||
|
|
||||||
byte mas[66] = "î ¡æ¤¥ä£å¨©ª«¬®¯ïàáâ㦢ìë§èíéçꞀ<EFBFBD>–„…”ƒ•ˆ‰Š‹Œ<EFBFBD>Ž<EFBFBD>Ÿ<EFBFBD>‘’“†‚œ›‡˜<EFBFBD>™—š";
|
byte mas[66] = "î ¡æ¤¥ä£å¨©ª«¬®¯ïàáâ㦢ìë§èíéçꞀ<EFBFBD>–„…”ƒ•ˆ‰Š‹Œ<EFBFBD>Ž<EFBFBD>Ÿ<EFBFBD>‘’“†‚œ›‡˜<EFBFBD>™—š";
|
||||||
void koitodos(dword EDI)
|
inline fastcall void koitodos( EDI)
|
||||||
{
|
{
|
||||||
WHILE (BL=ESBYTE[EDI])
|
WHILE (BL=ESBYTE[EDI])
|
||||||
{
|
{
|
||||||
@ -42,10 +42,9 @@ void koitodos(dword EDI)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Asper, lev
|
//Asper, lev
|
||||||
//uncomplete
|
//uncomplete
|
||||||
int utf8rutodos(dword ESI) //-
|
inline fastcall void utf8rutodos( ESI)
|
||||||
{
|
{
|
||||||
EDI=ESI;
|
EDI=ESI;
|
||||||
while (BL=ESBYTE[ESI])
|
while (BL=ESBYTE[ESI])
|
||||||
@ -79,8 +78,6 @@ int utf8rutodos(dword ESI) //-
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//0xC2 ñãðóïïèðîâàòü
|
|
||||||
|
|
||||||
else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê?
|
else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê?
|
||||||
SWITCH(ESBYTE[ESI+1]) {
|
SWITCH(ESBYTE[ESI+1]) {
|
||||||
case 0xAB: //"
|
case 0xAB: //"
|
||||||
@ -108,25 +105,27 @@ int utf8rutodos(dword ESI) //-
|
|||||||
ESI++;
|
ESI++;
|
||||||
BREAK;
|
BREAK;
|
||||||
}
|
}
|
||||||
CASE 0xA9: // (c)
|
CASE 0xA9: // (c) --- âûëåò Î_î
|
||||||
{
|
{
|
||||||
ESWORD[EDI] = 'c(';
|
ESBYTE[EDI] = 'c';
|
||||||
// ESBYTE[EDI] = '(';
|
//ESBYTE[EDI] = '(';
|
||||||
// ESBYTE[EDI+1] = 'c';
|
//ESBYTE[EDI+1] = 'c';
|
||||||
ESBYTE[EDI+2] = ')';
|
//ESBYTE[EDI+2] = ')';
|
||||||
EDI+=2;
|
//EDI+=2;
|
||||||
ESI++;
|
ESI++;
|
||||||
BREAK;
|
BREAK;
|
||||||
}
|
}
|
||||||
CASE 0xAE: // (r)
|
CASE 0xAE: // (r)
|
||||||
{
|
{
|
||||||
ESWORD[EDI] = 'r(';
|
ESBYTE[EDI] = 'r';
|
||||||
ESBYTE[EDI+2] = ')';
|
//ESBYTE[EDI] = '(';
|
||||||
EDI+=2;
|
//ESBYTE[EDI+1] = 'r';
|
||||||
ESI++;
|
//ESBYTE[EDI+2] = ')';
|
||||||
break;
|
//EDI+=2;
|
||||||
}
|
ESI++;
|
||||||
}
|
BREAK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ELSE IF (BL >= 0x90) && (BL <= 0xAF)
|
ELSE IF (BL >= 0x90) && (BL <= 0xAF)
|
||||||
{
|
{
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
// strchr( ESI,BL)
|
// strchr( ESI,BL)
|
||||||
// strrchr( ESI,BL)
|
// strrchr( ESI,BL)
|
||||||
// strstr( EBX, EDX)
|
// strstr( EBX, EDX)
|
||||||
//
|
// itoa( ESI)
|
||||||
// IntToStr( ESI)
|
// atoi( EAX)
|
||||||
// StrToInt()
|
// strupr( ESI)
|
||||||
// upcase( ESI)
|
// strlwr( ESI)
|
||||||
// lowcase( ESI)
|
// strtok( ESI)
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ inline fastcall strcat( EDI, ESI)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char buffer[11];
|
char buffer[11];
|
||||||
inline fastcall dword IntToStr( ESI)
|
inline fastcall dword itoa( ESI)
|
||||||
{
|
{
|
||||||
$mov edi, #buffer
|
$mov edi, #buffer
|
||||||
$mov ecx, 10
|
$mov ecx, 10
|
||||||
@ -91,9 +91,10 @@ f3:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline fastcall dword StrToInt()
|
inline fastcall dword atoi( EDI)
|
||||||
{
|
{
|
||||||
ESI=EDI=EAX;
|
//ESI=EDI=EAX;
|
||||||
|
ESI=EDI;
|
||||||
IF(DSBYTE[ESI]=='-')ESI++;
|
IF(DSBYTE[ESI]=='-')ESI++;
|
||||||
EAX=0;
|
EAX=0;
|
||||||
BH=AL;
|
BH=AL;
|
||||||
@ -141,7 +142,7 @@ inline fastcall unsigned int strrchr( ESI,BL)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline fastcall upcase( ESI)
|
inline fastcall strupr( ESI)
|
||||||
{
|
{
|
||||||
do{
|
do{
|
||||||
AL=DSBYTE[ESI];
|
AL=DSBYTE[ESI];
|
||||||
@ -150,7 +151,7 @@ inline fastcall upcase( ESI)
|
|||||||
}while(AL!=0);
|
}while(AL!=0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fastcall lowcase( ESI)
|
inline fastcall strlwr( ESI)
|
||||||
{
|
{
|
||||||
do{
|
do{
|
||||||
$LODSB
|
$LODSB
|
||||||
@ -200,4 +201,44 @@ ls1: mov esi, edx
|
|||||||
ls2: xor eax, eax
|
ls2: xor eax, eax
|
||||||
ls3:
|
ls3:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* strtok( LPSTR dest, src, divs);
|
||||||
|
src - указатель на исходную строку или результат предыдущего вызова
|
||||||
|
dest - указатель на буфер, куда будет скопировано слово
|
||||||
|
divs - указатель на строку, содержащую символы-разделители
|
||||||
|
Возвращает: 0, если слов больше нет
|
||||||
|
не 0, если слово скопировано в dest (передайте это значение
|
||||||
|
в качестве src для последующего поиска) */
|
||||||
|
|
||||||
|
dword fastcall strtok( EDX, ESI, EBX)
|
||||||
|
{
|
||||||
|
asm {
|
||||||
|
XOR ECX, ECX
|
||||||
|
MOV EDI, EBX
|
||||||
|
XOR EAX, EAX
|
||||||
|
DEC ECX
|
||||||
|
REPNE SCASB
|
||||||
|
XOR ECX, 0FFFFFFFFH
|
||||||
|
DEC ECX
|
||||||
|
PUSH ECX
|
||||||
|
L1: LODSB
|
||||||
|
OR AL, AL
|
||||||
|
JZ L4
|
||||||
|
MOV EDI, EBX
|
||||||
|
MOV ECX, SSDWORD[ ESP]
|
||||||
|
REPNE SCASB
|
||||||
|
JZ L1
|
||||||
|
DEC ESI
|
||||||
|
L2: LODSB
|
||||||
|
MOV EDI, EBX
|
||||||
|
MOV ECX, SSDWORD[ ESP]
|
||||||
|
REPNE SCASB
|
||||||
|
JZ L3
|
||||||
|
MOV DSBYTE[ EDX], AL
|
||||||
|
INC EDX
|
||||||
|
JMP SHORT L2
|
||||||
|
L3: MOV EAX, ESI
|
||||||
|
L4: POP ECX
|
||||||
|
} DSBYTE[ EDX] = 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user