9,16 → 9,17 |
|
char download_path[]="/rd/1/.download"; |
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 { |
int left, top, width, height; |
void Scan(int); |
void GetNewUrl(); |
void OpenPage(); |
void ReadHtml(byte); |
void ShowPage(); |
void ParseHTML(dword, dword); |
void ParseHTML(dword); |
void WhatTextStyle(int left1, top1, width1); |
void DrawScroller(); |
}; |
52,6 → 53,7 |
#include "include\colors.h" |
#include "include\unicode_tags.h" |
#include "include\some_code.h" |
#include "include\parce_tag.h" |
|
|
void TWebBrowser::Scan(int id) |
180,12 → 182,12 |
default: |
RETURN; |
} |
ParseHTML(buf, filesize); |
ParseHTML(buf); |
} |
|
|
|
void GetNewUrl(){ |
void TWebBrowser::GetNewUrl(){ |
IF (!strcmp(get_URL_part(2),"./")) strcpy(#URL, #URL+2); //èãíîðèì :) |
|
if (URL[0] <> '/') |
215,7 → 217,7 |
|
|
|
void TWebBrowser::ReadHtml(byte dest) |
void TWebBrowser::ReadHtml(byte encoding) |
{ |
if (!strcmp(get_URL_part(5),"http:"))) |
file_size stdcall (#download_path); |
232,9 → 234,9 |
else |
ReadFile(0, filesize, buf, #URL); |
|
if (dest==_WIN) wintodos(buf); |
if (dest==_UTF) utf8rutodos(buf); |
if (dest==_KOI) koitodos(buf); |
if (encoding==_WIN) wintodos(buf); |
if (encoding==_UTF) utf8rutodos(buf); |
if (encoding==_KOI) koitodos(buf); |
} |
|
|
287,13 → 289,13 |
return; |
} |
|
ParseHTML(buf, filesize); |
ParseHTML(buf); |
IF (!strcmp(#version, #header)) DrawTitle(#header); |
} |
|
|
|
void TWebBrowser::ParseHTML(dword bword, fsize){ |
void TWebBrowser::ParseHTML(dword bword){ |
word bukva[1]; |
int j, perenos_num; |
byte ignor_param = 0; |
318,7 → 320,7 |
|
debug("Start parsing"); |
|
for ( ; buf+fsize > bword; bword++;) {//ESBYTE[bword] |
for ( ; buf+filesize > bword; bword++;) {//ESBYTE[bword] |
bukva = ESBYTE[bword]; |
switch (bukva) { |
case 0x0a: |
350,7 → 352,7 |
do |
{ |
bword++; |
if (bword >= buf + fsize) break 1; |
if (bword >= buf + filesize) break 1; |
} |
while (ESBYTE[bword] <>'-'); |
|
358,7 → 360,7 |
if (ESBYTE[bword] <>'-') goto HH_; |
} |
} |
while (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû |
while (ESBYTE[bword] <>'>') && (bword < buf + filesize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû |
{ |
bukva = ESBYTE[bword]; |
if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; |
375,7 → 377,11 |
|
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/ |
if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); |
//while (tagparam) |
//{ |
// GetNextParam(); |
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ |
//} |
|
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì |
|
386,7 → 392,6 |
bword++; |
bukva=ESBYTE[bword]; |
strcpy(#temp,#bukva); |
|
bword++; |
bukva=ESBYTE[bword]; |
strcat(#temp,#bukva); |
455,7 → 460,7 |
{ |
anchor=''; |
lines.first=anchor_line_num; |
ParseHTML(buf, filesize); |
ParseHTML(buf); |
} |
|
debug("End parsing"); |
463,48 → 468,6 |
} |
|
|
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]; |
void TWebBrowser::WhatTextStyle(int left1, top1, width1) { |
dword hr_color; |
539,9 → 502,7 |
} |
|
IF (ignor_text == 1) return; |
// |
|
// |
IF(!chTag("q")) strcat(#line, "\""); |
|
//âûâîä íà ýêðàí |
563,7 → 524,7 |
DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); |
} |
} |
// |
|
IF(!tag) return; |
stolbec += strlen(#line); |
|
579,20 → 540,17 |
{ |
BODY_MARK: |
|
if (strcmp(#parametr, "link=") == 0) |
if (!strcmp(#parametr, "link=")) |
link_color = GetColor(#options); |
|
if (strcmp(#parametr, "text=") == 0) |
{ |
if (!strcmp(#parametr, "text=")) |
text_colors[0]=GetColor(#options); |
} |
|
if (strcmp(#parametr, "bgcolor=") == 0) |
{ |
if (!strcmp(#parametr, "bgcolor=")) |
bg_color=GetColor(#options); |
} |
|
IF(tagparam) { |
IF(tagparam) |
{ |
GetNextParam(); |
GOTO BODY_MARK; |
} |
696,7 → 654,7 |
return; |
} |
///////////////////////////// |
if(!chTag("li")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè |
if(!chTag("li")) || (!chTag("dt")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè |
{ |
li_text = rez; |
IF(rez == 0) return; |
725,27 → 683,40 |
|
if (!chTag("img")) |
{ |
//IF (GetFileInfo(#libimg)<>0) return; //åñëè áèáëèîòåêè íåò |
//if (GetFileInfo(#libimg)<>0) return; //åñëè áèáëèîòåêè íåò |
IMG_TAG: |
IF (strcmp(#parametr,"src=")==0) //íàäî îáúåäèíèòü ñ GetNewUrl() |
if (!strcmp(#parametr,"src=")) //íàäî îáúåäèíèòü ñ GetNewUrl() |
{ |
strcpy(#temp, BrowserHistory.CurrentUrl()); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû |
temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
strcat(#temp, #options); |
image=load_image(#temp); |
|
w=DSWORD[image+4]; |
h=DSWORD[image+8]; |
} |
IF(tagparam) { |
if (!strcmp(#parametr,"alt=")) |
{ |
strcpy(#tag, "[Image: "); |
strcat(#tag, #options); |
strcat(#tag, "]"); |
} |
|
IF(tagparam) |
{ |
GetNextParam(); |
GOTO IMG_TAG; |
} |
|
if (!image) |
{ |
//debug(#tag); |
return; |
} |
|
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) //åñëè ÂѨ èçîáðàæåíèå óøëî ÂÅÐÕ èëè ÂÍÈÇ |
753,6 → 724,7 |
|
if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó |
{ |
DrawBar(left, top, width-15, 10, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó |
img_lines_first=WB1.top-top1; |
h=h-img_lines_first; |
top1=WB1.top; |
772,11 → 744,6 |
DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); |
} |
|
} |
/*else |
{ |
IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line)); |
}*/ |
return; |
} |
|