forked from KolibriOS/kolibrios
HTMLv 0.93: anchors, upgrade menu
git-svn-id: svn://kolibrios.org@2793 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0be6e3c3f4
commit
5f5baa4e63
@ -1,3 +1,7 @@
|
|||||||
|
14.06.12 -- v0.93
|
||||||
|
- заработали якоря;
|
||||||
|
- улучшено меню.
|
||||||
|
|
||||||
13.06.12 -- v0.92
|
13.06.12 -- v0.92
|
||||||
- базовое меню ПКМ;
|
- базовое меню ПКМ;
|
||||||
- убрана постоянная загрузка страницы при перерисовке окна;
|
- убрана постоянная загрузка страницы при перерисовке окна;
|
||||||
|
@ -9,7 +9,10 @@ dword j,
|
|||||||
|
|
||||||
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.92";
|
char version[]=" Text-based Browser 0.93";
|
||||||
|
|
||||||
|
char tinypad_path[]="/sys/tinypad";
|
||||||
|
char t_edit_path[]="/sys/develop/t_edit";
|
||||||
|
|
||||||
|
|
||||||
struct TWebBrowser {
|
struct TWebBrowser {
|
||||||
@ -17,7 +20,7 @@ struct TWebBrowser {
|
|||||||
void DrawScroller();
|
void DrawScroller();
|
||||||
void ShowPage();
|
void ShowPage();
|
||||||
void ParseHTML(dword, dword);
|
void ParseHTML(dword, dword);
|
||||||
void Scan(dword);
|
void Scan(int);
|
||||||
void WhatTextStyle(int left1, top1, width1);
|
void WhatTextStyle(int left1, top1, width1);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -26,7 +29,7 @@ TWebBrowser WB1;
|
|||||||
byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, link, ignor_text, li_tab, body_present;
|
byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, link, ignor_text, li_tab, body_present;
|
||||||
|
|
||||||
|
|
||||||
dword text_colors[10],
|
dword text_colors[30],
|
||||||
text_color_index,
|
text_color_index,
|
||||||
link_color,
|
link_color,
|
||||||
bg_color;
|
bg_color;
|
||||||
@ -41,6 +44,9 @@ char line[330],
|
|||||||
parametr[1200],
|
parametr[1200],
|
||||||
options[1000];
|
options[1000];
|
||||||
|
|
||||||
|
char anchor[256];
|
||||||
|
int anchor_line_num;
|
||||||
|
|
||||||
|
|
||||||
#include "include\history.h"
|
#include "include\history.h"
|
||||||
#include "include\colors.h"
|
#include "include\colors.h"
|
||||||
@ -48,19 +54,30 @@ char line[330],
|
|||||||
#include "include\some_code.h"
|
#include "include\some_code.h"
|
||||||
|
|
||||||
|
|
||||||
void TWebBrowser::Scan(dword id) {
|
void TWebBrowser::Scan(int id) {
|
||||||
if (id > 399)
|
if (id > 399)
|
||||||
{
|
{
|
||||||
GetURLfromPageLinks(id);
|
GetURLfromPageLinks(id);
|
||||||
//эту всю хрень нужно в GetNewUrl() переместить
|
|
||||||
if (URL[0] == '#') { //мы не умеем переходить по ссылке внутри документа. Пока что...
|
//#1
|
||||||
copystr(BrowserHistory.CurrentUrl(), #editURL);
|
if (URL[0] == '#')
|
||||||
copystr(#URL, #editURL + strlen(#editURL));
|
{
|
||||||
|
copystr(#URL+find_symbol(#URL, '#'), #anchor);
|
||||||
|
|
||||||
copystr(BrowserHistory.CurrentUrl(), #URL);
|
copystr(BrowserHistory.CurrentUrl(), #URL);
|
||||||
|
//copystr(#editURL, #URL + strlen(#URL));
|
||||||
|
//copystr(#URL, #editURL);
|
||||||
|
|
||||||
|
za_kadrom=count-max_kolvo_strok;
|
||||||
ShowPage(#URL);
|
ShowPage(#URL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
URL[find_symbol(#URL, '#')-1] = 0x00; //заглушка, но это не совсем правильно - в едитурл должно оставаться
|
//liner.ru#1
|
||||||
|
if (find_symbol(#URL, '#')<>-1)
|
||||||
|
{
|
||||||
|
copystr(#URL+find_symbol(#URL, '#'), #anchor);
|
||||||
|
URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà
|
||||||
|
}
|
||||||
|
|
||||||
GetNewUrl();
|
GetNewUrl();
|
||||||
|
|
||||||
@ -117,9 +134,13 @@ void TWebBrowser::Scan(dword id) {
|
|||||||
return;
|
return;
|
||||||
case 052: //Íàæàòà F3
|
case 052: //Íàæàòà F3
|
||||||
IF(edit1.flags <> 66)
|
IF(edit1.flags <> 66)
|
||||||
IF (strcmp(get_URL_part(5),"http:")<>0) RunProgram("tinypad", #URL); ELSE RunProgram("tinypad", #download_path);
|
IF (!strcmp(get_URL_part(5),"http:")) RunProgram(#tinypad_path, #download_path); ELSE RunProgram(#tinypad_path, #URL);
|
||||||
return;
|
return;
|
||||||
|
case 053: //Íàæàòà F4
|
||||||
|
IF(edit1.flags <> 66)
|
||||||
|
IF (!strcmp(get_URL_part(5),"http:")) RunProgram(#t_edit_path, #download_path); ELSE RunProgram(#t_edit_path, #URL);
|
||||||
|
return;
|
||||||
|
|
||||||
case HOME:
|
case HOME:
|
||||||
copystr("http://kolibri-os.narod.ru", #editURL);
|
copystr("http://kolibri-os.narod.ru", #editURL);
|
||||||
case GOTOURL:
|
case GOTOURL:
|
||||||
@ -349,6 +370,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
||||||
|
|
||||||
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì
|
line = 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;
|
||||||
@ -420,6 +442,14 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
|
|||||||
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 (za_kadrom == 0) count = stroka;
|
if (za_kadrom == 0) count = stroka;
|
||||||
|
|
||||||
|
if (anchor)
|
||||||
|
{
|
||||||
|
anchor[0]='';
|
||||||
|
za_kadrom=anchor_line_num;
|
||||||
|
ParseHTML(buf, filesize);
|
||||||
|
}
|
||||||
|
|
||||||
DrawScroller(); //ðèñóåì ñêðîëë
|
DrawScroller(); //ðèñóåì ñêðîëë
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,7 +531,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
|
|
||||||
IF (ignor_text == 1) return;
|
IF (ignor_text == 1) return;
|
||||||
//
|
//
|
||||||
|
|
||||||
//
|
//
|
||||||
IF(!chTag("q")) copystr("\"", #line + strlen(#line));
|
IF(!chTag("q")) copystr("\"", #line + strlen(#line));
|
||||||
|
|
||||||
@ -522,6 +552,14 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
IF(!tag) return;
|
IF(!tag) return;
|
||||||
stolbec += strlen(#line);
|
stolbec += strlen(#line);
|
||||||
|
|
||||||
|
if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
|
||||||
|
{
|
||||||
|
if (!strcmp(#anchor, #options))
|
||||||
|
{
|
||||||
|
anchor_line_num=za_kadrom+stroka;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!chTag("body"))
|
if (!chTag("body"))
|
||||||
{
|
{
|
||||||
BODY_MARK:
|
BODY_MARK:
|
||||||
@ -550,11 +588,15 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
if (!chTag("a")) {
|
if (!chTag("a"))
|
||||||
IF (stroka - 1 > max_kolvo_strok) || (stroka < -2) return;
|
{
|
||||||
if (rez) {
|
if (rez)
|
||||||
HREF: IF(strcmp(#parametr, "href=") == 0) {
|
{
|
||||||
IF(link == 1) text_color_index--; //если какой-то долбоёб не закрыл тэг
|
_A_MARK:
|
||||||
|
if (!strcmp(#parametr, "href="))
|
||||||
|
{
|
||||||
|
if (stroka - 1 > max_kolvo_strok) || (stroka < -2) return;
|
||||||
|
if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã
|
||||||
link = 1;
|
link = 1;
|
||||||
blink++;
|
blink++;
|
||||||
text_color_index++;
|
text_color_index++;
|
||||||
@ -562,9 +604,17 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
copystr(#options, #page_links + strlen(#page_links));
|
copystr(#options, #page_links + strlen(#page_links));
|
||||||
copystr("|", #page_links + strlen(#page_links));
|
copystr("|", #page_links + strlen(#page_links));
|
||||||
}
|
}
|
||||||
IF(tagparam) {
|
if (anchor) && (!strcmp(#parametr, "name="))
|
||||||
|
{
|
||||||
|
if (!strcmp(#anchor, #options))
|
||||||
|
{
|
||||||
|
anchor_line_num=za_kadrom+stroka;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tagparam)
|
||||||
|
{
|
||||||
GetNextParam();
|
GetNextParam();
|
||||||
GOTO HREF;
|
GOTO _A_MARK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ELSE {
|
ELSE {
|
||||||
|
@ -57,8 +57,8 @@
|
|||||||
<hr color="grey">
|
<hr color="grey">
|
||||||
|
|
||||||
<p><a href='index.htm'>Íà ãëàâíóþ ñòðàíèöó index.htm</a></p>
|
<p><a href='index.htm'>Íà ãëàâíóþ ñòðàíèöó index.htm</a></p>
|
||||||
<p><a href="index.htm#home" id="#end">index.htm#home</a></p>
|
<p><a href="index.htm#2.1.4">index.htm#2.1.4</a></p>
|
||||||
<p><a href="#home">#home</a></p>
|
<p><a href="#2.1.4">#2.1.4</a></p>
|
||||||
<p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p>
|
<p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
#define ITEM_WIDTH 138
|
#define ITEM_WIDTH 138
|
||||||
|
|
||||||
char *ITEMS_LIST[]={
|
char *ITEMS_LIST[]={
|
||||||
"View html code F3",
|
"View in Tinypad F3",
|
||||||
|
"View in TextEdit F4",
|
||||||
"--------------------", //ñäåëàòü îïðåäåëåíèå òàêèõ ëèíèé è ðèñîâàòü èõ
|
"--------------------", //ñäåëàòü îïðåäåëåíèå òàêèõ ëèíèé è ðèñîâàòü èõ
|
||||||
"KOI-8 Ctrl+K",
|
"KOI-8 Ctrl+K",
|
||||||
"UTF Ctrl+U",
|
"UTF Ctrl+U",
|
||||||
@ -17,46 +18,70 @@ void menu_rmb()
|
|||||||
{
|
{
|
||||||
|
|
||||||
mouse mm;
|
mouse mm;
|
||||||
int items_num;
|
int items_num, items_cur;
|
||||||
int id, letitclose=0;
|
byte id, key;
|
||||||
|
|
||||||
SetEventMask(100111b);
|
SetEventMask(100111b);
|
||||||
|
|
||||||
loop() switch(CheckEvent())
|
loop() switch(CheckEvent())
|
||||||
{
|
{
|
||||||
case evMouse:
|
case evMouse:
|
||||||
/*mm.get();
|
mm.get();
|
||||||
//êóëüíî
|
id=mm.y/ITEM_HEIGHT;
|
||||||
if (mm.x>85) && (mm.x<155) && (mm.y>190) && (mm.y<190+22)
|
if (id<0) || (id+1>items_num) break;
|
||||||
if (mm.lkm) {DrawRegion_3D(86,191,68,20,0xC7C7C7,0xFFFFFF); letitclose=1;}
|
if (items_cur<>id)
|
||||||
ELSE {IF (letitclose) {DrawRegion_3D(86,191,68,20,0xFFFFFF,0xC7C7C7); Pause(7); ExitProcess();}}
|
{
|
||||||
ELSE IF (letitclose) {letitclose=0; DrawRegion_3D(86,191,68,20,0xFFFFFF,0xC7C7C7);}*/
|
items_cur=id;
|
||||||
|
goto _ITEMS_DRAW;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evButton:
|
case evButton:
|
||||||
id=GetButtonID();
|
id=GetButtonID();
|
||||||
if (id==1) ExitProcess();
|
if (id==1) ExitProcess();
|
||||||
|
_BUTTON_MARK:
|
||||||
if (id==10) WB1.Scan(52); //View html code
|
if (id==10) WB1.Scan(52); //View html code
|
||||||
if (id==11) break;
|
if (id==11) WB1.Scan(53); //View html code
|
||||||
if (id==12) WB1.Scan(11); //KOI
|
if (id==12) break;
|
||||||
if (id==13) WB1.Scan(21); //UTF
|
if (id==13) WB1.Scan(11); //KOI
|
||||||
|
if (id==14) WB1.Scan(21); //UTF
|
||||||
|
|
||||||
ExitProcess();
|
ExitProcess();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evKey:
|
case evKey:
|
||||||
if (GetKey()==27) ExitProcess();
|
key = GetKey();
|
||||||
|
if (key==27) ExitProcess();
|
||||||
|
if (key==178) && (items_cur)
|
||||||
|
{
|
||||||
|
items_cur--;
|
||||||
|
goto _ITEMS_DRAW;
|
||||||
|
}
|
||||||
|
if (key==177) && (items_cur+1<items_num)
|
||||||
|
{
|
||||||
|
items_cur++;
|
||||||
|
goto _ITEMS_DRAW;
|
||||||
|
}
|
||||||
|
if (key==13)
|
||||||
|
{
|
||||||
|
id=items_cur+10;
|
||||||
|
//WriteDebug(IntToStr(id));
|
||||||
|
goto _BUTTON_MARK;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evReDraw:
|
case evReDraw:
|
||||||
for (items_num=0; ITEMS_LIST[items_num]<>0; items_num++;) {};
|
for (items_num=0; ITEMS_LIST[items_num]<>0; items_num++;) {};
|
||||||
DefineAndDrawWindow(Form.left+m.x,Form.top+m.y+GetSkinWidth()+3,ITEM_WIDTH,items_num*ITEM_HEIGHT,0x01,0x10FFFFFF,0,0,0);
|
DefineAndDrawWindow(Form.left+m.x,Form.top+m.y+GetSkinWidth()+3,ITEM_WIDTH,items_num*ITEM_HEIGHT+1,0x01,0x10FFFFFF,0,0,0);
|
||||||
|
|
||||||
DrawRegion(0,0,ITEM_WIDTH,items_num*ITEM_HEIGHT,0x777777); //îáîäîê
|
DrawRegion(0,0,ITEM_WIDTH,items_num*ITEM_HEIGHT+1,0x777777); //îáîäîê
|
||||||
DrawBar(1,1,ITEM_WIDTH-1,items_num*ITEM_HEIGHT-1,0xFFFFFF); //ôîí
|
_ITEMS_DRAW:
|
||||||
for (i=0; i<items_num; i++;)
|
for (i=0; i<items_num; i++;)
|
||||||
{
|
{
|
||||||
DefineButton(0, i*ITEM_HEIGHT, ITEM_WIDTH, ITEM_HEIGHT, i+10+BT_HIDE, 0xFFFFFF);
|
DefineButton(0, i*ITEM_HEIGHT, ITEM_WIDTH, ITEM_HEIGHT, i+10+BT_HIDE, 0xFFFFFF);
|
||||||
|
if (i<>items_cur) EDX=0xFFFFFF; else EDX=0x94AECE;
|
||||||
|
DrawBar(1, i*ITEM_HEIGHT+1, ITEM_WIDTH-1, ITEM_HEIGHT, EDX);
|
||||||
WriteText(8,i*ITEM_HEIGHT+6,0x80,0x000000,ITEMS_LIST[i],0);
|
WriteText(8,i*ITEM_HEIGHT+6,0x80,0x000000,ITEMS_LIST[i],0);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -25,7 +25,7 @@ dword get_URL_part(byte len) {
|
|||||||
inline byte chTag(dword text) {return strcmp(#tag,text);}
|
inline byte chTag(dword text) {return strcmp(#tag,text);}
|
||||||
|
|
||||||
|
|
||||||
void GetURLfromPageLinks(int id) //ñòîëüêî áðåäà, ïîòîìó ÷òî íåëüçÿ ñîçäàòü ìàññèâ ñòðèíãîâ
|
void GetURLfromPageLinks(int id)
|
||||||
{
|
{
|
||||||
j = 0;
|
j = 0;
|
||||||
for (i = 0; i <= id - 401; i++)
|
for (i = 0; i <= id - 401; i++)
|
||||||
@ -38,30 +38,25 @@ void GetURLfromPageLinks(int id) //
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//У нас нет наклонных шрифтов, поэтому делаем костыль из
|
||||||
|
//палочек для мороженого и жевательной резинки:
|
||||||
|
//Снимаем область экрана и выводим её обратно полосками со смещением,
|
||||||
|
//что даёт перекос картинки
|
||||||
|
//При наличии фона и т.п. проявится вся костыльность решения :)
|
||||||
|
|
||||||
//“ á ¥â ª«®ëå èà¨ä⮢, ¯®í⮬㠤¥« ¥¬ ª®áâë«ì ¨§
|
|
||||||
//¯ «®ç¥ª ¤«ï ¬®à®¦¥®£® ¨ ¦¥¢ ⥫쮩 १¨ª¨:
|
|
||||||
//‘¨¬ ¥¬ ®¡« áâì íªà ¨ ¢ë¢®¤¨¬ ¥ñ ®¡à â® ¯®«®áª ¬¨ ᮠᬥ饨¥¬,
|
|
||||||
//çâ® ¤ ñâ ¯¥à¥ª®á ª à⨪¨
|
|
||||||
//<2F>ਠ«¨ç¨¨ ä® ¨ â.¯. ¯à®ï¢¨âáï ¢áï ª®áâë«ì®áâì à¥è¥¨ï :)
|
|
||||||
|
|
||||||
//ç áâì ¤ ëå 㦥 ¯®«ãç¥ ¢ TBW - skin_width, Form.top, ¯®¤ª«î票¥ memory
|
|
||||||
inline void Skew(dword x,y,w,h)
|
inline void Skew(dword x,y,w,h)
|
||||||
{
|
{
|
||||||
dword italic_buf;
|
dword italic_buf;
|
||||||
int tile_height=2,//¡ã¤¥¬ ¢ë¢®¤¨âì ¤¢ã寨ªá¥«ì묨 ¯®«®áª ¬¨
|
int tile_height=2, //будем выводить двухпиксельными полосками
|
||||||
i, skin_width,
|
shift=-2, //с двухпиксельным смещением
|
||||||
shift=-2;
|
i;
|
||||||
|
|
||||||
italic_buf = mem_Alloc(w*h*3);
|
italic_buf = mem_Alloc(w*h*3);
|
||||||
|
|
||||||
skin_width = GetSkinWidth();
|
|
||||||
|
|
||||||
CopyScreen(italic_buf, x+Form.left+2, y+Form.top+skin_width, w, h);
|
CopyScreen(italic_buf, x+Form.left+2, GetSkinWidth()+y+Form.top, w, h);
|
||||||
|
|
||||||
|
FOR (i=0;i*tile_height<h;i++){
|
||||||
FOR (i=0;i*tile_height<h;i++){
|
PutImage(w*3*tile_height*i+italic_buf,w,tile_height,x+shift-i+1,i*tile_height+y);
|
||||||
PutImage(w*3*tile_height*i+italic_buf,w,tile_height,x+shift-i+1,i*tile_height+y);
|
}
|
||||||
}
|
mem_Free(italic_buf);
|
||||||
mem_Free(italic_buf);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user