forked from KolibriOS/kolibrios
HTMLv 0.94d STABLE
git-svn-id: svn://kolibrios.org@2823 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8cee52c51b
commit
c208ff6147
@ -58,6 +58,7 @@ void main()
|
|||||||
else strcpy(#URL, "/sys/index.htm");
|
else strcpy(#URL, "/sys/index.htm");
|
||||||
strcpy(#editURL, #URL);
|
strcpy(#editURL, #URL);
|
||||||
|
|
||||||
|
lines.column_max = 101;
|
||||||
WB1.OpenPage();
|
WB1.OpenPage();
|
||||||
|
|
||||||
SetEventMask(0x27);
|
SetEventMask(0x27);
|
||||||
@ -114,7 +115,7 @@ void main()
|
|||||||
btn=lines.first; //ñîõðàíÿåì ñòàðîå êîëè÷åñòâî
|
btn=lines.first; //ñîõðàíÿåì ñòàðîå êîëè÷åñòâî
|
||||||
lines.first = m.y -half_scroll_size -WB1.top * lines.all / WB1.height;
|
lines.first = m.y -half_scroll_size -WB1.top * lines.all / WB1.height;
|
||||||
IF (lines.visible+lines.first>lines.all) lines.first=lines.all-lines.visible;
|
IF (lines.visible+lines.first>lines.all) lines.first=lines.all-lines.visible;
|
||||||
IF (btn<>lines.first) WB1.ParseHTML(buf, filesize); //чтоб лишний раз не перерисовывать
|
IF (btn<>lines.first) WB1.ParseHTML(buf); //чтоб лишний раз не перерисовывать
|
||||||
m.get();
|
m.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,16 +9,17 @@ 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.94c";
|
char version[]=" Text-based Browser 0.94d";
|
||||||
|
|
||||||
|
|
||||||
struct TWebBrowser {
|
struct TWebBrowser {
|
||||||
int left, top, width, height;
|
int left, top, width, height;
|
||||||
void Scan(int);
|
void Scan(int);
|
||||||
|
void GetNewUrl();
|
||||||
void OpenPage();
|
void OpenPage();
|
||||||
void ReadHtml(byte);
|
void ReadHtml(byte);
|
||||||
void ShowPage();
|
void ShowPage();
|
||||||
void ParseHTML(dword, dword);
|
void ParseHTML(dword);
|
||||||
void WhatTextStyle(int left1, top1, width1);
|
void WhatTextStyle(int left1, top1, width1);
|
||||||
void DrawScroller();
|
void DrawScroller();
|
||||||
};
|
};
|
||||||
@ -52,6 +53,7 @@ int anchor_line_num;
|
|||||||
#include "include\colors.h"
|
#include "include\colors.h"
|
||||||
#include "include\unicode_tags.h"
|
#include "include\unicode_tags.h"
|
||||||
#include "include\some_code.h"
|
#include "include\some_code.h"
|
||||||
|
#include "include\parce_tag.h"
|
||||||
|
|
||||||
|
|
||||||
void TWebBrowser::Scan(int id)
|
void TWebBrowser::Scan(int id)
|
||||||
@ -180,12 +182,12 @@ void TWebBrowser::Scan(int id)
|
|||||||
default:
|
default:
|
||||||
RETURN;
|
RETURN;
|
||||||
}
|
}
|
||||||
ParseHTML(buf, filesize);
|
ParseHTML(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void GetNewUrl(){
|
void TWebBrowser::GetNewUrl(){
|
||||||
IF (!strcmp(get_URL_part(2),"./")) strcpy(#URL, #URL+2); //èãíîðèì :)
|
IF (!strcmp(get_URL_part(2),"./")) strcpy(#URL, #URL+2); //èãíîðèì :)
|
||||||
|
|
||||||
if (URL[0] <> '/')
|
if (URL[0] <> '/')
|
||||||
@ -215,7 +217,7 @@ void GetNewUrl(){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TWebBrowser::ReadHtml(byte dest)
|
void TWebBrowser::ReadHtml(byte encoding)
|
||||||
{
|
{
|
||||||
if (!strcmp(get_URL_part(5),"http:")))
|
if (!strcmp(get_URL_part(5),"http:")))
|
||||||
file_size stdcall (#download_path);
|
file_size stdcall (#download_path);
|
||||||
@ -232,9 +234,9 @@ void TWebBrowser::ReadHtml(byte dest)
|
|||||||
else
|
else
|
||||||
ReadFile(0, filesize, buf, #URL);
|
ReadFile(0, filesize, buf, #URL);
|
||||||
|
|
||||||
if (dest==_WIN) wintodos(buf);
|
if (encoding==_WIN) wintodos(buf);
|
||||||
if (dest==_UTF) utf8rutodos(buf);
|
if (encoding==_UTF) utf8rutodos(buf);
|
||||||
if (dest==_KOI) koitodos(buf);
|
if (encoding==_KOI) koitodos(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -287,13 +289,13 @@ void TWebBrowser::ShowPage()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ParseHTML(buf, filesize);
|
ParseHTML(buf);
|
||||||
IF (!strcmp(#version, #header)) DrawTitle(#header);
|
IF (!strcmp(#version, #header)) DrawTitle(#header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TWebBrowser::ParseHTML(dword bword, fsize){
|
void TWebBrowser::ParseHTML(dword bword){
|
||||||
word bukva[1];
|
word bukva[1];
|
||||||
int j, perenos_num;
|
int j, perenos_num;
|
||||||
byte ignor_param = 0;
|
byte ignor_param = 0;
|
||||||
@ -318,7 +320,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
|
|
||||||
debug("Start parsing");
|
debug("Start parsing");
|
||||||
|
|
||||||
for ( ; buf+fsize > bword; bword++;) {//ESBYTE[bword]
|
for ( ; buf+filesize > bword; bword++;) {//ESBYTE[bword]
|
||||||
bukva = ESBYTE[bword];
|
bukva = ESBYTE[bword];
|
||||||
switch (bukva) {
|
switch (bukva) {
|
||||||
case 0x0a:
|
case 0x0a:
|
||||||
@ -350,7 +352,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
bword++;
|
bword++;
|
||||||
if (bword >= buf + fsize) break 1;
|
if (bword >= buf + filesize) break 1;
|
||||||
}
|
}
|
||||||
while (ESBYTE[bword] <>'-');
|
while (ESBYTE[bword] <>'-');
|
||||||
|
|
||||||
@ -358,7 +360,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
if (ESBYTE[bword] <>'-') goto HH_;
|
if (ESBYTE[bword] <>'-') goto HH_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû
|
while (ESBYTE[bword] <>'>') && (bword < buf + filesize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû
|
||||||
{
|
{
|
||||||
bukva = ESBYTE[bword];
|
bukva = ESBYTE[bword];
|
||||||
if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' ';
|
if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' ';
|
||||||
@ -375,7 +377,11 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
|
|
||||||
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
|
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
|
||||||
if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
|
if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
|
||||||
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
//while (tagparam)
|
||||||
|
//{
|
||||||
|
// GetNextParam();
|
||||||
|
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
||||||
|
//}
|
||||||
|
|
||||||
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì
|
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì
|
||||||
|
|
||||||
@ -386,7 +392,6 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
bword++;
|
bword++;
|
||||||
bukva=ESBYTE[bword];
|
bukva=ESBYTE[bword];
|
||||||
strcpy(#temp,#bukva);
|
strcpy(#temp,#bukva);
|
||||||
|
|
||||||
bword++;
|
bword++;
|
||||||
bukva=ESBYTE[bword];
|
bukva=ESBYTE[bword];
|
||||||
strcat(#temp,#bukva);
|
strcat(#temp,#bukva);
|
||||||
@ -455,7 +460,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
{
|
{
|
||||||
anchor='';
|
anchor='';
|
||||||
lines.first=anchor_line_num;
|
lines.first=anchor_line_num;
|
||||||
ParseHTML(buf, filesize);
|
ParseHTML(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug("End parsing");
|
debug("End parsing");
|
||||||
@ -463,48 +468,6 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GetNextParam()
|
|
||||||
{
|
|
||||||
byte kavichki = false;
|
|
||||||
int i = strlen(#tagparam) - 1;
|
|
||||||
|
|
||||||
WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/')))
|
|
||||||
{
|
|
||||||
IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i];
|
|
||||||
tagparam[i] = 0x00;
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
|
|
||||||
IF (kavichki)
|
|
||||||
{
|
|
||||||
i=find_symbol(#tagparam, kavichki);
|
|
||||||
strcpy(#options, #tagparam + i);
|
|
||||||
}
|
|
||||||
ELSE
|
|
||||||
{
|
|
||||||
WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1;
|
|
||||||
i++;
|
|
||||||
|
|
||||||
strcpy(#options, #tagparam + i); //êîïèðóåì îïöèþ
|
|
||||||
WHILE (options[0] == ' ') strcpy(#options, #options+1);
|
|
||||||
}
|
|
||||||
tagparam[i] = 0x00;
|
|
||||||
|
|
||||||
FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--)
|
|
||||||
{
|
|
||||||
IF (tagparam[i] == '=') //äåðçêàÿ çàãëóøêà
|
|
||||||
{
|
|
||||||
//copystr(#tagparam+i+2,#options);
|
|
||||||
tagparam[i + 1] = 0x00;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strcpy(#parametr, #tagparam + i + 1); //êîïèðóåì ïàðàìåòð
|
|
||||||
tagparam[i] = 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char oldtag[100];
|
char oldtag[100];
|
||||||
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
||||||
dword hr_color;
|
dword hr_color;
|
||||||
@ -539,9 +502,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IF (ignor_text == 1) return;
|
IF (ignor_text == 1) return;
|
||||||
//
|
|
||||||
|
|
||||||
//
|
|
||||||
IF(!chTag("q")) strcat(#line, "\"");
|
IF(!chTag("q")) strcat(#line, "\"");
|
||||||
|
|
||||||
//âûâîä íà ýêðàí
|
//âûâîä íà ýêðàí
|
||||||
@ -563,7 +524,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]);
|
DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
|
||||||
IF(!tag) return;
|
IF(!tag) return;
|
||||||
stolbec += strlen(#line);
|
stolbec += strlen(#line);
|
||||||
|
|
||||||
@ -579,20 +540,17 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
{
|
{
|
||||||
BODY_MARK:
|
BODY_MARK:
|
||||||
|
|
||||||
if (strcmp(#parametr, "link=") == 0)
|
if (!strcmp(#parametr, "link="))
|
||||||
link_color = GetColor(#options);
|
link_color = GetColor(#options);
|
||||||
|
|
||||||
if (strcmp(#parametr, "text=") == 0)
|
if (!strcmp(#parametr, "text="))
|
||||||
{
|
|
||||||
text_colors[0]=GetColor(#options);
|
text_colors[0]=GetColor(#options);
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(#parametr, "bgcolor=") == 0)
|
if (!strcmp(#parametr, "bgcolor="))
|
||||||
{
|
|
||||||
bg_color=GetColor(#options);
|
bg_color=GetColor(#options);
|
||||||
}
|
|
||||||
|
|
||||||
IF(tagparam) {
|
IF(tagparam)
|
||||||
|
{
|
||||||
GetNextParam();
|
GetNextParam();
|
||||||
GOTO BODY_MARK;
|
GOTO BODY_MARK;
|
||||||
}
|
}
|
||||||
@ -696,7 +654,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
if(!chTag("li")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè
|
if(!chTag("li")) || (!chTag("dt")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè
|
||||||
{
|
{
|
||||||
li_text = rez;
|
li_text = rez;
|
||||||
IF(rez == 0) return;
|
IF(rez == 0) return;
|
||||||
@ -725,58 +683,67 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
|
|
||||||
if (!chTag("img"))
|
if (!chTag("img"))
|
||||||
{
|
{
|
||||||
//IF (GetFileInfo(#libimg)<>0) return; //åñëè áèáëèîòåêè íåò
|
//if (GetFileInfo(#libimg)<>0) return; //åñëè áèáëèîòåêè íåò
|
||||||
IMG_TAG:
|
IMG_TAG:
|
||||||
IF (strcmp(#parametr,"src=")==0) //íàäî îáúåäèíèòü ñ GetNewUrl()
|
if (!strcmp(#parametr,"src=")) //íàäî îáúåäèíèòü ñ GetNewUrl()
|
||||||
{
|
{
|
||||||
strcpy(#temp, BrowserHistory.CurrentUrl()); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
|
strcpy(#temp, BrowserHistory.CurrentUrl()); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
|
||||||
temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
|
temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
|
||||||
strcat(#temp, #options);
|
strcat(#temp, #options);
|
||||||
image=load_image(#temp);
|
image=load_image(#temp);
|
||||||
|
w=DSWORD[image+4];
|
||||||
|
h=DSWORD[image+8];
|
||||||
|
}
|
||||||
|
if (!strcmp(#parametr,"alt="))
|
||||||
|
{
|
||||||
|
strcpy(#tag, "[Image: ");
|
||||||
|
strcat(#tag, #options);
|
||||||
|
strcat(#tag, "]");
|
||||||
|
}
|
||||||
|
|
||||||
w=DSWORD[image+4];
|
IF(tagparam)
|
||||||
h=DSWORD[image+8];
|
{
|
||||||
}
|
|
||||||
IF(tagparam) {
|
|
||||||
GetNextParam();
|
GetNextParam();
|
||||||
GOTO IMG_TAG;
|
GOTO IMG_TAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!image)
|
||||||
|
{
|
||||||
|
//debug(#tag);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (w>width1) w=width1;
|
if (w>width1) w=width1;
|
||||||
|
|
||||||
if (image)
|
if (stroka==0) DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
|
||||||
{
|
|
||||||
stroka+=h/10;
|
|
||||||
|
|
||||||
if (top1+h<WB1.top) || (top1>WB1.top+WB1.height-10) //åñëè ÂѨ èçîáðàæåíèå óøëî ÂÅÐÕ èëè ÂÍÈÇ
|
stroka+=h/10;
|
||||||
return;
|
|
||||||
|
|
||||||
if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó
|
if (top1+h<WB1.top) || (top1>WB1.top+WB1.height-10) //åñëè ÂѨ èçîáðàæåíèå óøëî ÂÅÐÕ èëè ÂÍÈÇ
|
||||||
{
|
return;
|
||||||
img_lines_first=WB1.top-top1;
|
|
||||||
h=h-img_lines_first;
|
|
||||||
top1=WB1.top;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó IF (stroka - 2 < lines.visible)
|
if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó
|
||||||
{
|
|
||||||
h=WB1.top+WB1.height-top1-15;
|
|
||||||
}
|
|
||||||
|
|
||||||
IF (h<=0) return;
|
|
||||||
|
|
||||||
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);
|
|
||||||
IF (link)
|
|
||||||
{
|
|
||||||
DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/*else
|
|
||||||
{
|
{
|
||||||
IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line));
|
DrawBar(left, top, width-15, 10, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
|
||||||
}*/
|
img_lines_first=WB1.top-top1;
|
||||||
|
h=h-img_lines_first;
|
||||||
|
top1=WB1.top;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó IF (stroka - 2 < lines.visible)
|
||||||
|
{
|
||||||
|
h=WB1.top+WB1.height-top1-15;
|
||||||
|
}
|
||||||
|
|
||||||
|
IF (h<=0) return;
|
||||||
|
|
||||||
|
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);
|
||||||
|
IF (link)
|
||||||
|
{
|
||||||
|
DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
<body bgcolor="#000000" link="#0066FF" text="#FFFFFF">
|
<body bgcolor="#000000" link="#0066FF" text="#FFFFFF">
|
||||||
|
|
||||||
|
<img src="background.gif" alt="background">
|
||||||
|
|
||||||
<b>Это тестовая страница для проверки HTML Viewer</b><br />
|
<b>Это тестовая страница для проверки HTML Viewer</b><br />
|
||||||
<br />
|
<br />
|
||||||
Эта программа поддерживает все популярные кодировки: cp1251, koi-8, cp866, Unicode.<br><br>
|
Эта программа поддерживает все популярные кодировки: cp1251, koi-8, cp866, Unicode.<br><br>
|
||||||
|
Loading…
Reference in New Issue
Block a user