diff --git a/programs/cmm/TWB/TWB.c b/programs/cmm/TWB/TWB.c index f62c0c5cd1..7f8232f542 100644 --- a/programs/cmm/TWB/TWB.c +++ b/programs/cmm/TWB/TWB.c @@ -101,8 +101,8 @@ void TWebBrowser::DrawStyle() if (style.s) DrawBuf.DrawBar(start_x, list.line_h / 2 - DrawBuf.zoom + start_y, line_length, DrawBuf.zoom, text_colors[text_color_index]); if (style.u) DrawBuf.DrawBar(start_x, list.line_h - DrawBuf.zoom - DrawBuf.zoom + start_y, line_length, DrawBuf.zoom, text_colors[text_color_index]); if (link) { - DrawBuf.DrawBar(start_x, list.line_h - DrawBuf.zoom - DrawBuf.zoom + start_y, line_length, DrawBuf.zoom, text_colors[text_color_index]); - PageLinks.AddText(#line, line_length, list.line_h, UNDERLINE); + DrawBuf.DrawBar(start_x, list.line_h*style.h + list.line_h - DrawBuf.zoom - DrawBuf.zoom + start_y, line_length, DrawBuf.zoom, text_colors[text_color_index]); + PageLinks.AddText(#line, line_length, list.line_h*style.h + list.line_h, UNDERLINE); } stolbec += stolbec_len; } @@ -118,10 +118,8 @@ void TWebBrowser::Prepare(){ word bukva[2]; int j; byte ignor_param; - char temp[768]; - dword bufpos = bufpointer; - int line_len; - + dword bufpos; + int line_len; style.b = style.i = style.u = style.s = style.h = style.blq = t_html = t_body = style.li = link = ignor_text = text_color_index = text_colors[0] = style.li_tab = 0; style.align = ALIGN_LEFT; @@ -134,30 +132,27 @@ void TWebBrowser::Prepare(){ stroka = -list.first; stolbec = 0; line = 0; - //for plaint text use CP866 for other UTF if (strstri(bufpointer, "html")) { style.pre = 0; - cur_encoding = CH_CP866; + cur_encoding = CH_UTF8; } else { style.pre = 1; - cur_encoding = CH_UTF8; + cur_encoding = CH_CP866; } - - for ( ; (bufpointer+bufsize > bufpos) && (ESBYTE[bufpos]!=0); bufpos++;) + for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;) { + if (ignor_text) && (ESBYTE[bufpos]!='<') continue; bukva = ESBYTE[bufpos]; - if (ignor_text) && (bukva!='<') continue; switch (bukva) { case 0x0a: if (style.pre) { chrcat(#line, ' '); - bukva = temp = NULL; Perenos(); break; } @@ -170,7 +165,6 @@ void TWebBrowser::Prepare(){ break; } goto DEFAULT_MARK; - case '&': //  and so on bufpos++; tag=0; @@ -212,7 +206,7 @@ void TWebBrowser::Prepare(){ Perenos(); DrawStyle(); line = NULL; - if (tag) SetStyle(WB1.DrawBuf.zoom * 5 + list.x, stroka * list.line_h + list.y + 5); //юсЁрсюЄър Єхуют + if (tag) SetStyle(); //юсЁрсюЄър Єхуют strcpy(#oldtag, #tag); tag = attr = tagparam = ignor_param = NULL; break; @@ -245,9 +239,9 @@ void TWebBrowser::Perenos() { int perenos_num; char new_line_text[4096]; - if (stolbec + utf8_strlen(#line) < list.column_max) return; + if (utf8_strlen(#line)*DrawBuf.zoom + stolbec < list.column_max) return; perenos_num = strrchr(#line, ' '); - if (!perenos_num) && (utf8_strlen(#line)>list.column_max) perenos_num=list.column_max; + if (!perenos_num) && (utf8_strlen(#line)*DrawBuf.zoom>list.column_max) perenos_num=list.column_max/DrawBuf.zoom; strcpy(#new_line_text, #line + perenos_num); line[perenos_num] = 0x00; DrawStyle(); @@ -255,8 +249,9 @@ void TWebBrowser::Perenos() NewLine(); } //============================================================================================ -void TWebBrowser::SetStyle(int left1, top1) { - dword hr_color; +void TWebBrowser::SetStyle() { + int left1 = 5 + list.x; + int top1 = stroka * list.line_h + list.y + 5; byte opened; byte meta_encoding; //яЁютхЁ хь Єху юЄъЁ√трхЄё  шыш чръЁ√трхЄё  @@ -266,7 +261,6 @@ void TWebBrowser::SetStyle(int left1, top1) { strcpy(#tag, #tag+1); } else opened = 1; - if (istag("html")) { t_html = opened; return; @@ -394,15 +388,14 @@ void TWebBrowser::SetStyle(int left1, top1) { if (opened) NewLine(); return; } - if (istag("li")) || (istag("dt")) //эрфю ёфхырЄ№ тыюцхээ√х ёяшёъш + if (istag("li")) || (istag("dt")) { style.li = opened; if (opened) { NewLine(); - if (stroka > -1) && (stroka - 2 < list.visible) - DrawBuf.DrawBar(style.li_tab * 5 * list.font_w * DrawBuf.zoom + list.x, list.line_h - / 2 - DrawBuf.zoom - DrawBuf.zoom, DrawBuf.zoom*2, DrawBuf.zoom*2, 0x555555); + DrawBuf.DrawBar(style.li_tab * 5 * list.font_w * DrawBuf.zoom + list.x, stroka +1 * list.line_h - 3 + - DrawBuf.zoom - DrawBuf.zoom, DrawBuf.zoom*2, DrawBuf.zoom*2, 0x454545); } return; } @@ -416,15 +409,13 @@ void TWebBrowser::SetStyle(int left1, top1) { else style.li_tab++; } if (istag("hr")) { - if (anchor) || (stroka < -1) - { - stroka+=2; - return; - } - if (strcmp(#attr, "color=") == 0) hr_color = GetColor(#val); else hr_color = 0x999999; + if (isattr("color=")) EDI = GetColor(#val); else EDI = 0x999999; + $push edi; NewLine(); - DrawBuf.DrawBar(5, list.line_h/2, list.w-10, 1, hr_color); + $pop edi; + DrawBuf.DrawBar(5, list.line_h*stroka+4, list.w-10, 1, EDI); NewLine(); + return; } if (istag("meta")) || (istag("?xml")) { do{ diff --git a/programs/cmm/TWB/links.h b/programs/cmm/TWB/links.h index bade95c195..660f021d2f 100644 --- a/programs/cmm/TWB/links.h +++ b/programs/cmm/TWB/links.h @@ -18,6 +18,7 @@ struct LinksArray { void Hover(); void AddLink(); void AddText(); + void ClickLink(); dword GetURL(); void Clear(); void GetAbsoluteURL(); @@ -68,15 +69,17 @@ PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, #temp, 0 void LinksArray::Hover(dword mx, my, link_col_in, link_col_a, bg_col) { int i; - signed int WBY = -WB1.list.first*WB1.list.line_h + WB1.list.line_h - WB1.DrawBuf.zoom; + signed int WBY = -WB1.list.first*WB1.list.line_h - WB1.DrawBuf.zoom; for (i=0; ilinks[i].x) && (my>links[i].y) && (mx 0) + { + StopLoading(); + BrowserHistory.current--; + } + + strcpy(#URL, PageLinks.GetURL(PageLinks.active)); + //#1 + if (URL[0] == '#') + { + strcpy(#anchor, #URL+strrchr(#URL, '#')); + strcpy(#URL, BrowserHistory.CurrentUrl()); + WB1.list.first=WB1.list.count-WB1.list.visible; + ShowPage(); + return; + } + //liner.ru#1 + if (strrchr(#URL, '#')!=-1) + { + strcpy(#anchor, #URL+strrchr(#URL, '#')); + URL[strrchr(#URL, '#')-1] = 0x00; + } + + PageLinks.GetAbsoluteURL(#URL); + + if (UrlExtIs(".png")==1) || (UrlExtIs(".gif")==1) || (UrlExtIs(".jpg")==1) || (UrlExtIs(".zip")==1) || (UrlExtIs(".kex")==1) + || (UrlExtIs(".7z")==1) || (UrlExtIs("netcfg")==1) + { + //notify(#URL); + if (!strncmp(#URL,"http://", 7)) + { + strcpy(#DL_URL, #URL); + CreateThread(#Downloader,#downloader_stak+4092); + } + else RunProgram("@open", #URL); + strcpy(#editURL, BrowserHistory.CurrentUrl()); + strcpy(#URL, BrowserHistory.CurrentUrl()); + return; + } + if (!strncmp(#URL,"mailto:", 7)) + { + notify(#URL); + strcpy(#editURL, BrowserHistory.CurrentUrl()); + strcpy(#URL, BrowserHistory.CurrentUrl()); + return; + } + OpenPage(); + return; +} diff --git a/programs/cmm/browser/WebView.c b/programs/cmm/browser/WebView.c index 2b3e233214..25c724260d 100644 --- a/programs/cmm/browser/WebView.c +++ b/programs/cmm/browser/WebView.c @@ -13,28 +13,26 @@ #include "..\lib\draw_buf.h" #include "..\lib\list_box.h" #include "..\lib\cursor.h" - //*.obj libraries #include "..\lib\obj\box_lib.h" #include "..\lib\obj\libio_lib.h" #include "..\lib\obj\libimg_lib.h" #include "..\lib\obj\http.h" #include "..\lib\obj\iconv.h" - //useful patterns #include "..\lib\patterns\libimg_load_skin.h" char homepage[] = FROM "html\\homepage.htm"; #ifdef LANG_RUS - char version[]=" Текстовый браузер 1.35"; + char version[]=" Текстовый браузер 1.38"; ?define IMAGES_CACHE_CLEARED "Кэш картинок очищен" ?define T_LAST_SLIDE "Это последний слайд" char loading[] = "Загрузка страницы...
"; char page_not_found[] = FROM "html\page_not_found_ru.htm"; char accept_language[]= "Accept-Language: ru\n"; #else - char version[]=" Text-based Browser 1.35"; + char version[]=" Text-based Browser 1.38"; ?define IMAGES_CACHE_CLEARED "Images cache cleared" ?define T_LAST_SLIDE "This slide is the last" char loading[] = "Loading...
"; @@ -42,14 +40,14 @@ char homepage[] = FROM "html\\homepage.htm"; char accept_language[]= "Accept-Language: en\n"; #endif +#define URL_SERVICE_HISTORY "WebView://history" +#define URL_SERVICE_HOME "WebView://home" +#define URL_SERVICE_SOURCE "WebView://source:" proc_info Form; -#define WIN_W 799 -#define WIN_H 559 //char search_path[]="http://nigma.ru/index.php?s="; -char str_location[]="location\0"; int redirected = 0; char stak[4096]; @@ -95,12 +93,6 @@ char editURL[sizeof(URL)]; int mouse_twb; edit_box address_box = {250,56,34,0xffffff,0x94AECE,0xffffff,0xffffff,0,sizeof(URL),#editURL,#mouse_twb,2,19,19}; -#define URL_SERVICE_HISTORY "WebView://history" -#define URL_SERVICE_HOME "WebView://home" -#define URL_SERVICE_SOURCE "WebView://source:" - -libimg_image skin; - void main() { @@ -134,12 +126,6 @@ void main() PageLinks.Hover(mouse.x, WB1.list.first*WB1.list.line_h + mouse.y, link_color_inactive, link_color_active, bg_color); if (bufsize) && (mouse.pkm) && (mouse.up) { CreateThread(#menu_rmb,#stak+4092); break; } if (WB1.list.MouseScroll(mouse.vert)) WB1.DrawPage(); - if (mouse.down) && (PageLinks.active>=0) - { - DrawRectangle(PageLinks.links[PageLinks.active].x, PageLinks.links[PageLinks.active].y, - PageLinks.links[PageLinks.active].w, PageLinks.links[PageLinks.active].h, 0); - ClickLink(); - } } //Drag scroller scroll_wv.all_redraw = 0; @@ -180,7 +166,7 @@ void main() case evReDraw: if (action_buf) Scan(action_buf); - DefineAndDrawWindow(GetScreenWidth()-WIN_W/2,GetScreenHeight()-WIN_H/2,WIN_W,WIN_H,0x73,col_bg,0,0); + DefineAndDrawWindow(GetScreenWidth()-800/2,GetScreenHeight()-600/2,800,600,0x73,col_bg,0,0); GetProcessInfo(#Form, SelfInfo); if (Form.status_window>2) { DrawTitle(#header); break; } if (Form.height<120) MoveSize(OLD,OLD,OLD,120); @@ -208,7 +194,7 @@ void main() redirected++; if (redirected<=5) { - http_find_header_field stdcall (http_transfer, #str_location); + http_find_header_field stdcall (http_transfer, "location\0"); if (EAX!=0) { ESI = EAX; EDI = #URL; @@ -267,7 +253,7 @@ void SetElementSizes() WB1.list.wheel_size = 7; WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w; WB1.list.visible = WB1.list.h - 5 / WB1.list.line_h; - if (WB1.list.w!=WB1.DrawBuf.bufw) WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h * 20); + if (WB1.list.w!=WB1.DrawBuf.bufw) WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, WB1.list.h * 30); } void Draw_Window() @@ -352,7 +338,7 @@ void Scan(dword id__) case VIEW_SOURCE: WB1.list.first = 0; ShowSource(); - WB1.DrawPage(); + WB1.LoadInternalPage(bufpointer, bufsize); break; case EDIT_SOURCE: if (!strncmp(#URL,"http:",5)) @@ -390,59 +376,6 @@ void Scan(dword id__) } - -void ClickLink() -{ - if (http_transfer > 0) - { - StopLoading(); - BrowserHistory.current--; - } - - strcpy(#URL, PageLinks.GetURL(PageLinks.active)); - //#1 - if (URL[0] == '#') - { - strcpy(#anchor, #URL+strrchr(#URL, '#')); - strcpy(#URL, BrowserHistory.CurrentUrl()); - WB1.list.first=WB1.list.count-WB1.list.visible; - ShowPage(); - return; - } - //liner.ru#1 - if (strrchr(#URL, '#')!=-1) - { - strcpy(#anchor, #URL+strrchr(#URL, '#')); - URL[strrchr(#URL, '#')-1] = 0x00; - } - - PageLinks.GetAbsoluteURL(#URL); - - if (UrlExtIs(".png")==1) || (UrlExtIs(".gif")==1) || (UrlExtIs(".jpg")==1) || (UrlExtIs(".zip")==1) || (UrlExtIs(".kex")==1) - || (UrlExtIs(".7z")==1) || (UrlExtIs("netcfg")==1) - { - //notify(#URL); - if (!strncmp(#URL,"http://", 7)) - { - strcpy(#DL_URL, #URL); - CreateThread(#Downloader,#downloader_stak+4092); - } - else RunProgram("@open", #URL); - strcpy(#editURL, BrowserHistory.CurrentUrl()); - strcpy(#URL, BrowserHistory.CurrentUrl()); - return; - } - if (!strncmp(#URL,"mailto:", 7)) - { - notify(#URL); - strcpy(#editURL, BrowserHistory.CurrentUrl()); - strcpy(#URL, BrowserHistory.CurrentUrl()); - return; - } - OpenPage(); - return; -} - void StopLoading() { if (http_transfer) @@ -531,20 +464,15 @@ void ShowPage() DrawEditBox(); if (!bufsize) { - PageLinks.Clear(); - if (http_transfer) - { - WB1.LoadInternalPage(#loading, sizeof(loading)); - } - else - WB1.LoadInternalPage(#page_not_found, sizeof(page_not_found)); + if (http_transfer) WB1.LoadInternalPage(#loading, sizeof(loading)); + else WB1.LoadInternalPage(#page_not_found, sizeof(page_not_found)); } else { WB1.Prepare(); } - if (!header) strcpy(#header, #version); + //if (!header) strcpy(#header, #version); if (!strcmp(#version, #header)) DrawTitle(#header); } diff --git a/programs/cmm/browser/show_src.h b/programs/cmm/browser/show_src.h index 5f1727c063..76ae897577 100644 --- a/programs/cmm/browser/show_src.h +++ b/programs/cmm/browser/show_src.h @@ -10,8 +10,8 @@ dword ShowSource() souce_mode = true; new_buf = malloc(bufsize*5); new_buf_start = new_buf; - if (strlen(#header)-strlen(#version)>0) header[strlen(#header)-strlen(#version)-2] = 0; else strcpy(#header, "Source"); - new_buf += sprintf(new_buf,"%s
",#header);
+	header[strrchr(#header, '-')-2]=0;
+	new_buf += sprintf(new_buf,"Source: %s
",#header);
 	for (i=bufpointer; i