forked from KolibriOS/kolibrios
WebView 2.0 beta 4: highlight a link as a single item, more refactoring
git-svn-id: svn://kolibrios.org@7757 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
7b61a5afa1
commit
2c4fa5e173
@ -2,8 +2,12 @@
|
|||||||
#include "..\TWB\anchors.h"
|
#include "..\TWB\anchors.h"
|
||||||
#include "..\TWB\parce_tag.h"
|
#include "..\TWB\parce_tag.h"
|
||||||
#include "..\TWB\absolute_url.h"
|
#include "..\TWB\absolute_url.h"
|
||||||
char line[500];
|
|
||||||
#include "..\TWB\unicode_tags.h"
|
#include "..\TWB\unicode_tags.h"
|
||||||
|
#include "..\TWB\img_cache.h"
|
||||||
|
dword page_bg;
|
||||||
|
dword link_color_inactive;
|
||||||
|
dword link_color_active;
|
||||||
|
#include "..\TWB\links.h"
|
||||||
|
|
||||||
enum { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT};
|
enum { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT};
|
||||||
|
|
||||||
@ -39,15 +43,10 @@ struct TWebBrowser {
|
|||||||
void BufEncode();
|
void BufEncode();
|
||||||
} WB1;
|
} WB1;
|
||||||
|
|
||||||
dword page_bg;
|
char line[500];
|
||||||
#include "..\TWB\img_cache.h"
|
|
||||||
|
|
||||||
dword link_color_inactive;
|
|
||||||
dword link_color_active;
|
|
||||||
|
|
||||||
bool link, cur_encoding, t_html, t_body;
|
bool link, cur_encoding, t_html, t_body;
|
||||||
|
|
||||||
#include "..\TWB\links.h"
|
|
||||||
|
|
||||||
dword bufpointer=0;
|
dword bufpointer=0;
|
||||||
dword bufsize=0;
|
dword bufsize=0;
|
||||||
@ -57,7 +56,7 @@ char header[150];
|
|||||||
int body_magrin=6;
|
int body_magrin=6;
|
||||||
int basic_line_h=22;
|
int basic_line_h=22;
|
||||||
|
|
||||||
scroll_bar scroll_wv = { 15,NULL,NULL,NULL,0,2,NULL,15,0,0xeeeeee,0xBBBbbb,0xeeeeee};
|
scroll_bar scroll_wv = { 15,NULL,NULL,NULL,0,2,NULL,0,0,0xeeeeee,0xBBBbbb,0xeeeeee};
|
||||||
|
|
||||||
//============================================================================================
|
//============================================================================================
|
||||||
void TWebBrowser::DrawStyle()
|
void TWebBrowser::DrawStyle()
|
||||||
@ -128,8 +127,10 @@ void TWebBrowser::SetPageDefaults()
|
|||||||
stolbec = 0;
|
stolbec = 0;
|
||||||
line = 0;
|
line = 0;
|
||||||
zoom = 1;
|
zoom = 1;
|
||||||
if (o_bufpointer) free(o_bufpointer);
|
//hold original buffer
|
||||||
o_bufpointer = 0;
|
if (o_bufpointer) o_bufpointer=free(o_bufpointer);
|
||||||
|
o_bufpointer = malloc(bufsize);
|
||||||
|
memmov(o_bufpointer, bufpointer, bufsize);
|
||||||
}
|
}
|
||||||
//============================================================================================
|
//============================================================================================
|
||||||
void TWebBrowser::AddCharToTheLine(unsigned char _char)
|
void TWebBrowser::AddCharToTheLine(unsigned char _char)
|
||||||
@ -187,7 +188,7 @@ void TWebBrowser::ParseHtml(){
|
|||||||
bukva = ESBYTE[bufpos+j];
|
bukva = ESBYTE[bufpos+j];
|
||||||
chrcat(#unicode_symbol, bukva);
|
chrcat(#unicode_symbol, bukva);
|
||||||
}
|
}
|
||||||
if (bukva = GetUnicodeSymbol(#unicode_symbol)) {
|
if (GetUnicodeSymbol(#line, #unicode_symbol, sizeof(line)-1)) {
|
||||||
bufpos += j;
|
bufpos += j;
|
||||||
CheckForLineBreak();
|
CheckForLineBreak();
|
||||||
} else {
|
} else {
|
||||||
@ -242,7 +243,7 @@ void TWebBrowser::ParseHtml(){
|
|||||||
if (tag.name[strlen(#tag.name)-1]=='/') tag.name[strlen(#tag.name)-1]=NULL; //for br/ !!!!!!!!
|
if (tag.name[strlen(#tag.name)-1]=='/') tag.name[strlen(#tag.name)-1]=NULL; //for br/ !!!!!!!!
|
||||||
if (tag.params) tag.parse_params();
|
if (tag.params) tag.parse_params();
|
||||||
|
|
||||||
if (tag.name) && (!tag.is("i")) && (!tag.is("svg")) {
|
if (tag.name) {
|
||||||
CheckForLineBreak();
|
CheckForLineBreak();
|
||||||
DrawStyle();
|
DrawStyle();
|
||||||
if (tag.name) SetStyle();
|
if (tag.name) SetStyle();
|
||||||
@ -300,12 +301,12 @@ void TWebBrowser::SetStyle() {
|
|||||||
t_html = tag.opened;
|
t_html = tag.opened;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(tag.is("title")) {
|
if (tag.is("title")) {
|
||||||
if (tag.opened) header=NULL;
|
if (tag.opened) header=NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
IF(tag.is("q"))
|
if (tag.is("q"))
|
||||||
{
|
{
|
||||||
if (tag.opened) {
|
if (tag.opened) {
|
||||||
meta_encoding = strlen(#line);
|
meta_encoding = strlen(#line);
|
||||||
@ -384,6 +385,7 @@ void TWebBrowser::SetStyle() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tag.is("br")) { NewLine(); return; }
|
if (tag.is("br")) { NewLine(); return; }
|
||||||
|
if (tag.is("td")) { if (tag.opened) AddCharToTheLine(' '); return; }
|
||||||
if (tag.is("tr")) { if (tag.opened) NewLine(); return; }
|
if (tag.is("tr")) { if (tag.opened) NewLine(); return; }
|
||||||
if (tag.is("b")) || (tag.is("strong")) || (tag.is("big")) { style.b = tag.opened; return; }
|
if (tag.is("b")) || (tag.is("strong")) || (tag.is("big")) { style.b = tag.opened; return; }
|
||||||
if (tag.is("button")) { style.button = tag.opened; stolbec++; return; }
|
if (tag.is("button")) { style.button = tag.opened; stolbec++; return; }
|
||||||
@ -459,7 +461,7 @@ void TWebBrowser::SetStyle() {
|
|||||||
if (tag.is("ul")) || (tag.is("ol")) {
|
if (tag.is("ul")) || (tag.is("ol")) {
|
||||||
if (!tag.opened)
|
if (!tag.opened)
|
||||||
{
|
{
|
||||||
style.li = tag.opened;
|
style.li = false;
|
||||||
style.li_tab--;
|
style.li_tab--;
|
||||||
NewLine();
|
NewLine();
|
||||||
}
|
}
|
||||||
@ -495,17 +497,10 @@ void TWebBrowser::SetStyle() {
|
|||||||
//============================================================================================
|
//============================================================================================
|
||||||
void TWebBrowser::BufEncode(dword set_new_encoding)
|
void TWebBrowser::BufEncode(dword set_new_encoding)
|
||||||
{
|
{
|
||||||
if (cur_encoding == set_new_encoding) return;
|
if (cur_encoding != set_new_encoding) {
|
||||||
if (o_bufpointer==0) {
|
cur_encoding = set_new_encoding;
|
||||||
o_bufpointer = malloc(bufsize);
|
bufpointer = ChangeCharset(charsets[cur_encoding], "CP866", bufpointer);
|
||||||
strcpy(o_bufpointer, bufpointer);
|
|
||||||
} else {
|
|
||||||
strcpy(bufpointer, o_bufpointer);
|
|
||||||
}
|
}
|
||||||
//debugval("cur_encoding ", cur_encoding);
|
|
||||||
//debugval("set_new_encoding", set_new_encoding);
|
|
||||||
cur_encoding = set_new_encoding;
|
|
||||||
bufpointer = ChangeCharset(charsets[cur_encoding], "CP866", bufpointer);
|
|
||||||
}
|
}
|
||||||
//============================================================================================
|
//============================================================================================
|
||||||
void TWebBrowser::DrawScroller()
|
void TWebBrowser::DrawScroller()
|
||||||
|
@ -1,40 +1,33 @@
|
|||||||
|
|
||||||
dword GetAbsoluteURL(dword in_URL)
|
:dword GetAbsoluteURL(dword new_URL, base_URL)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
dword orig_URL = in_URL;
|
dword orig_URL = new_URL;
|
||||||
char newurl[URL_SIZE+1];
|
char newurl[URL_SIZE+1];
|
||||||
|
strcpy(#newurl, base_URL);
|
||||||
|
|
||||||
while (i=strstr(in_URL, "&"))
|
while (i=strstr(new_URL, "&"))
|
||||||
{
|
{
|
||||||
strcpy(i+1, i+5);
|
strcpy(i+1, i+5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_is_the_url_absolute(in_URL)) return orig_URL;
|
if (check_is_the_url_absolute(new_URL)) return orig_URL;
|
||||||
|
|
||||||
IF (!strncmp(in_URL,"//", 2))
|
IF (!strncmp(new_URL,"//", 2))
|
||||||
{
|
{
|
||||||
strcpy(#newurl, "http:");
|
strcpy(#newurl, "http:");
|
||||||
strcat(#newurl, in_URL);
|
strcat(#newurl, new_URL);
|
||||||
strcpy(orig_URL, #newurl);
|
strcpy(orig_URL, #newurl);
|
||||||
return orig_URL;
|
return orig_URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
IF (!strncmp(in_URL,"./", 2)) in_URL+=2;
|
IF (!strncmp(new_URL,"./", 2)) new_URL+=2;
|
||||||
if (!http.transfer)
|
|
||||||
{
|
|
||||||
strcpy(#newurl, history.current());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(#newurl, history.items.get(history.active-2));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ESBYTE[in_URL] == '/') //remove everything after site domain name
|
if (ESBYTE[new_URL] == '/') //remove everything after site domain name
|
||||||
{
|
{
|
||||||
i = strchr(#newurl+8, '/');
|
i = strchr(#newurl+8, '/');
|
||||||
if (i) ESBYTE[i]=0;
|
if (i) ESBYTE[i]=0;
|
||||||
in_URL+=1;
|
new_URL+=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
_CUT_ST_LEVEL_MARK:
|
_CUT_ST_LEVEL_MARK:
|
||||||
@ -44,16 +37,16 @@ dword GetAbsoluteURL(dword in_URL)
|
|||||||
newurl[strrchr(#newurl, '/')] = 0x00;
|
newurl[strrchr(#newurl, '/')] = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
IF (!strncmp(in_URL,"../",3))
|
IF (!strncmp(new_URL,"../",3))
|
||||||
{
|
{
|
||||||
in_URL+=3;
|
new_URL+=3;
|
||||||
newurl[strrchr(#newurl, '/')-1] = 0x00;
|
newurl[strrchr(#newurl, '/')-1] = 0x00;
|
||||||
goto _CUT_ST_LEVEL_MARK;
|
goto _CUT_ST_LEVEL_MARK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/");
|
if (newurl[strlen(#newurl)-1]<>'/') strcat(#newurl, "/");
|
||||||
|
|
||||||
strcat(#newurl, in_URL);
|
strcat(#newurl, new_URL);
|
||||||
strcpy(orig_URL, #newurl);
|
strcpy(orig_URL, #newurl);
|
||||||
return orig_URL;
|
return orig_URL;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,9 @@ void ImageCache::Images(dword left1, top1, width1)
|
|||||||
imgh = DSWORD[pics[cur_pic].image+8];
|
imgh = DSWORD[pics[cur_pic].image+8];
|
||||||
if (imgw > width1) imgw = width1;
|
if (imgw > width1) imgw = width1;
|
||||||
|
|
||||||
//draw_y += imgh + 5; TEMPORARY TURN OFF!!!
|
/*
|
||||||
|
draw_y += imgh + 5; TEMPORARY TURN OFF!!!
|
||||||
|
|
||||||
if (top1+imgh<WB1.list.y) || (top1>WB1.list.y+WB1.list.h-10) return; //if all image is out of visible area
|
if (top1+imgh<WB1.list.y) || (top1>WB1.list.y+WB1.list.h-10) return; //if all image is out of visible area
|
||||||
if (top1<WB1.list.y) //if image partly visible (at the top)
|
if (top1<WB1.list.y) //if image partly visible (at the top)
|
||||||
{
|
{
|
||||||
@ -69,7 +71,6 @@ void ImageCache::Images(dword left1, top1, width1)
|
|||||||
img_draw stdcall (pics[cur_pic].image, left1-5, top1, imgw, imgh,0,img_lines_first);
|
img_draw stdcall (pics[cur_pic].image, left1-5, top1, imgw, imgh,0,img_lines_first);
|
||||||
DrawBar(left1+imgw - 5, top1, WB1.list.w-imgw, imgh, page_bg);
|
DrawBar(left1+imgw - 5, top1, WB1.list.w-imgw, imgh, page_bg);
|
||||||
DrawBar(WB1.list.x, top1+imgh, WB1.list.w, -imgh % WB1.list.item_h + WB1.list.item_h, page_bg);
|
DrawBar(WB1.list.x, top1+imgh, WB1.list.w, -imgh % WB1.list.item_h + WB1.list.item_h, page_bg);
|
||||||
/*
|
|
||||||
if (link)
|
if (link)
|
||||||
{
|
{
|
||||||
UnsafeDefineButton(left1 - 5, top1, imgw, imgh-1, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9);
|
UnsafeDefineButton(left1 - 5, top1, imgw, imgh-1, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9);
|
||||||
|
@ -9,26 +9,30 @@ dword CursorFile = FROM "../TWB/pointer.cur";
|
|||||||
|
|
||||||
struct array_link {
|
struct array_link {
|
||||||
dword link;
|
dword link;
|
||||||
int x,y,w,h;
|
unsigned int x,y,w,h;
|
||||||
|
unsigned int unic_id;
|
||||||
int underline, underline_h;
|
int underline, underline_h;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LinksArray {
|
struct LinksArray {
|
||||||
array_link links[MAXLINKS];
|
array_link links[MAXLINKS];
|
||||||
collection page_links;
|
collection page_links;
|
||||||
int count;
|
unsigned int count;
|
||||||
int active;
|
unsigned int unic_count;
|
||||||
|
unsigned int active;
|
||||||
bool HoverAndProceed();
|
bool HoverAndProceed();
|
||||||
void AddLink();
|
void AddLink();
|
||||||
void AddText();
|
void AddText();
|
||||||
dword GetURL();
|
dword GetURL();
|
||||||
void Clear();
|
void Clear();
|
||||||
|
void DrawUnderline();
|
||||||
} PageLinks;
|
} PageLinks;
|
||||||
|
|
||||||
void LinksArray::AddLink(dword lpath)
|
void LinksArray::AddLink(dword lpath)
|
||||||
{
|
{
|
||||||
if (count>= MAXLINKS) return;
|
if (count>= MAXLINKS) return;
|
||||||
page_links.add(lpath);
|
page_links.add(lpath);
|
||||||
|
unic_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinksArray::AddText(dword _x, _y, _w, _h, _link_underline, _underline_h)
|
void LinksArray::AddText(dword _x, _y, _w, _h, _link_underline, _underline_h)
|
||||||
@ -41,6 +45,7 @@ void LinksArray::AddText(dword _x, _y, _w, _h, _link_underline, _underline_h)
|
|||||||
links[count].underline = _link_underline;
|
links[count].underline = _link_underline;
|
||||||
links[count].underline_h = _underline_h;
|
links[count].underline_h = _underline_h;
|
||||||
links[count].link = page_links.get(page_links.count-1);
|
links[count].link = page_links.get(page_links.count-1);
|
||||||
|
links[count].unic_id = unic_count;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,12 +60,24 @@ void LinksArray::Clear()
|
|||||||
page_links.realloc_size = 4096 * 32;
|
page_links.realloc_size = 4096 * 32;
|
||||||
count = 0;
|
count = 0;
|
||||||
active = -1;
|
active = -1;
|
||||||
|
unic_count = 0;
|
||||||
CursorPointer.Restore();
|
CursorPointer.Restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LinksArray::DrawUnderline(dword und_id, list_first, list_y, color)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i=0; i<count; i++)
|
||||||
|
{
|
||||||
|
if (links[i].unic_id==links[und_id].unic_id) && (links[i].y + links[i].h - list_first > list_y) {
|
||||||
|
DrawBar(links[i].x, links[i].y + links[i].h - list_first, links[i].w, links[i].underline_h, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, NULL, 0};
|
PathShow_data status_text = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, 0, NULL, 0};
|
||||||
|
|
||||||
bool LinksArray::HoverAndProceed(dword mx, my)
|
bool LinksArray::HoverAndProceed(dword mx, my, list_y, list_first)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (!count) return true;
|
if (!count) return true;
|
||||||
@ -68,10 +85,10 @@ bool LinksArray::HoverAndProceed(dword mx, my)
|
|||||||
{
|
{
|
||||||
if (mx>links[i].x) && (my>links[i].y)
|
if (mx>links[i].x) && (my>links[i].y)
|
||||||
&& (mx<links[i].x+links[i].w) && (my<links[i].y+links[i].h)
|
&& (mx<links[i].x+links[i].w) && (my<links[i].y+links[i].h)
|
||||||
&& (my>WB1.list.y+WB1.list.first)
|
&& (my>list_y+list_first)
|
||||||
{
|
{
|
||||||
if (mouse.lkm) && (mouse.down) {
|
if (mouse.lkm) && (mouse.down) {
|
||||||
DrawRectangle(links[active].x, -WB1.list.first + links[active].y,
|
DrawRectangle(links[active].x, -list_first + links[active].y,
|
||||||
links[active].w, links[active].h, 0);
|
links[active].w, links[active].h, 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -91,10 +108,15 @@ bool LinksArray::HoverAndProceed(dword mx, my)
|
|||||||
if (active==i) return false;
|
if (active==i) return false;
|
||||||
CursorPointer.Load(#CursorFile);
|
CursorPointer.Load(#CursorFile);
|
||||||
CursorPointer.Set();
|
CursorPointer.Set();
|
||||||
if (links[active].underline) DrawUnderline(links[active].x, -WB1.list.first + links[active].y
|
|
||||||
+ links[active].h, links[active].w, links[active].underline_h, link_color_inactive);
|
if (links[active].underline) {
|
||||||
if (links[i].underline) DrawUnderline(links[i].x, -WB1.list.first + links[i].y
|
DrawUnderline(active, list_first, list_y, link_color_inactive);
|
||||||
+ links[i].h, links[i].w, links[i].underline_h, page_bg);
|
}
|
||||||
|
|
||||||
|
if (links[i].underline) {
|
||||||
|
DrawUnderline(i, list_first, list_y, page_bg);
|
||||||
|
}
|
||||||
|
|
||||||
active = i;
|
active = i;
|
||||||
DrawStatusBar(links[active].link);
|
DrawStatusBar(links[active].link);
|
||||||
return true;
|
return true;
|
||||||
@ -104,15 +126,10 @@ bool LinksArray::HoverAndProceed(dword mx, my)
|
|||||||
{
|
{
|
||||||
CursorPointer.Restore();
|
CursorPointer.Restore();
|
||||||
if (links[active].underline) {
|
if (links[active].underline) {
|
||||||
DrawUnderline(links[active].x, -WB1.list.first + links[active].y + links[active].h,links[active].w,
|
DrawUnderline(active, list_first, list_y, link_color_inactive);
|
||||||
links[active].underline_h, link_color_inactive);
|
|
||||||
}
|
}
|
||||||
DrawBar(status_text.start_x, status_text.start_y, status_text.area_size_x, 9, col_bg);
|
DrawStatusBar(NULL);
|
||||||
active = -1;
|
active = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawUnderline(dword x,y,w,h,color)
|
|
||||||
{
|
|
||||||
if (y>WB1.list.y) DrawBar(x,y,w,h,color);
|
|
||||||
}
|
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
char *unicode_symbols[]={
|
char *unicode_symbols[]={
|
||||||
"#32", " ",
|
"quot","\"",
|
||||||
"#34", "\"", "quot","\"",
|
"amp", "&",
|
||||||
"#38", "&", "amp", "&",
|
"lt", "<",
|
||||||
"#39", "'",
|
"gt", ">",
|
||||||
"#039","'",
|
"#183","\31", "middot", "\31",
|
||||||
"#60", "<", "lt", "<",
|
|
||||||
"#62", ">", "gt", ">",
|
|
||||||
"#91", "[",
|
|
||||||
"#93", "]",
|
|
||||||
"#96", "'",
|
|
||||||
"#149","-",
|
"#149","-",
|
||||||
"#151","-",
|
"#151","-",
|
||||||
"#160"," ", "nbsp", " ",
|
"#160"," ", "nbsp", " ",
|
||||||
@ -32,11 +27,13 @@ char *unicode_symbols[]={
|
|||||||
|
|
||||||
"#8211", "-",
|
"#8211", "-",
|
||||||
"#8217", "'",
|
"#8217", "'",
|
||||||
|
"#8220", "\"",
|
||||||
"#8222", "\"", "ldquo", "\"",
|
"#8222", "\"", "ldquo", "\"",
|
||||||
"#8221", "\"", "rdquo", "\"",
|
"#8221", "\"", "rdquo", "\"",
|
||||||
"#8470", "N",
|
"#8470", "N",
|
||||||
"#8722", "-",
|
"#8722", "-",
|
||||||
"#9642", "-", //square in the middle of the line
|
"#9642", "-", //square in the middle of the line
|
||||||
|
"#65122", "+",
|
||||||
|
|
||||||
"uarr", "\24",
|
"uarr", "\24",
|
||||||
"darr", "\25",
|
"darr", "\25",
|
||||||
@ -53,33 +50,31 @@ char *unicode_symbols[]={
|
|||||||
|
|
||||||
unsigned char unicode_chars[] = "€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>徕沅彐玷殛腱眍镳駂<EFBFBD>243i\105\244\0";
|
unsigned char unicode_chars[] = "€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆<EFBFBD><EFBFBD><EFBFBD>徕沅彐玷殛腱眍镳駂<EFBFBD>243i\105\244\0";
|
||||||
|
|
||||||
bool GetUnicodeSymbol(dword in_tag)
|
bool GetUnicodeSymbol(dword _line, in_tag, size)
|
||||||
{
|
{
|
||||||
int j, specia1040;
|
int j;
|
||||||
|
int code;
|
||||||
|
|
||||||
for (j=0; unicode_symbols[j]!=0; j+=2;)
|
for (j=0; unicode_symbols[j]!=0; j+=2;)
|
||||||
{
|
{
|
||||||
if (!strcmp(in_tag, unicode_symbols[j]))
|
if (!strcmp(in_tag, unicode_symbols[j]))
|
||||||
{
|
{
|
||||||
strcat(#line, unicode_symbols[j+1]);
|
strncat(_line, unicode_symbols[j+1], size);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
specia1040 = atoi(in_tag + 1) - 1040;
|
if (ESBYTE[in_tag]=='#')
|
||||||
|
|
||||||
if (ESBYTE[in_tag+1] == '1') && (specia1040>=0)
|
|
||||||
&& (specia1040<=72) && (strlen(in_tag) == 5)
|
|
||||||
{
|
{
|
||||||
if (strlen(#line)<sizeof(line)-2) {
|
code = atoi(in_tag + 1);
|
||||||
/*
|
if (code>=0) && (code<=255) {
|
||||||
j = strlen(#line);
|
chrncat(_line, code, size); //NOT ALL ASCII CODES IN KOLIBRI ARE COMPATABLE WITH STANDARDS
|
||||||
line[j] = unicode_chars[specia1040];
|
return true;
|
||||||
line[j+1] = EOS;
|
}
|
||||||
*/
|
if (code>=1040) && (code<=1040+72) {
|
||||||
chrcat(#line, unicode_chars[specia1040]);
|
chrncat(_line, unicode_chars[code-1040], size);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -23,6 +23,8 @@ llist list;
|
|||||||
#include "canvas.h"
|
#include "canvas.h"
|
||||||
#include "favicon.h"
|
#include "favicon.h"
|
||||||
|
|
||||||
|
_history history;
|
||||||
|
|
||||||
char default_dir[] = "/rd/1";
|
char default_dir[] = "/rd/1";
|
||||||
od_filter filter2 = { 16, "TXT\0HTM\0HTML\0\0" };
|
od_filter filter2 = { 16, "TXT\0HTM\0HTML\0\0" };
|
||||||
|
|
||||||
|
@ -23,13 +23,26 @@
|
|||||||
#include "..\lib\obj\http.h"
|
#include "..\lib\obj\http.h"
|
||||||
#include "..\lib\obj\iconv.h"
|
#include "..\lib\obj\iconv.h"
|
||||||
#include "..\lib\obj\proc_lib.h"
|
#include "..\lib\obj\proc_lib.h"
|
||||||
|
|
||||||
//useful patterns
|
//useful patterns
|
||||||
#include "..\lib\patterns\history.h"
|
#include "..\lib\patterns\history.h"
|
||||||
#include "..\lib\patterns\http_downloader.h"
|
#include "..\lib\patterns\http_downloader.h"
|
||||||
#include "..\lib\patterns\simple_open_dialog.h"
|
#include "..\lib\patterns\simple_open_dialog.h"
|
||||||
|
|
||||||
|
#include "show_src.h"
|
||||||
|
_http http = {0, 0, 0, 0, 0, 0, 0};
|
||||||
|
#include "download_manager.h"
|
||||||
|
_history history;
|
||||||
|
#include "history.h"
|
||||||
|
|
||||||
|
bool debug_mode = false;
|
||||||
|
dword col_bg = 0xE3E2E2;
|
||||||
|
dword panel_color = 0xE3E2E2;
|
||||||
|
dword border_color = 0x787878;
|
||||||
|
#include "..\TWB\TWB.c"
|
||||||
|
|
||||||
#ifdef LANG_RUS
|
#ifdef LANG_RUS
|
||||||
char version[]="’¥ªáâ®¢ë© ¡à 㧥à 2.0 beta2";
|
char version[]="’¥ªáâ®¢ë© ¡à 㧥à 2.0 beta4";
|
||||||
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
|
char page_not_found[] = FROM "html\\page_not_found_ru.htm""\0";
|
||||||
char homepage[] = FROM "html\\homepage_ru.htm""\0";
|
char homepage[] = FROM "html\\homepage_ru.htm""\0";
|
||||||
char help[] = FROM "html\\help_ru.htm""\0";
|
char help[] = FROM "html\\help_ru.htm""\0";
|
||||||
@ -43,7 +56,7 @@ char link_menu[] =
|
|||||||
"Š®¯¨à®¢ âì áá뫪ã
|
"Š®¯¨à®¢ âì áá뫪ã
|
||||||
‘ª ç âì ᮤ¥à¦¨¬®¥ áá뫪¨";
|
‘ª ç âì ᮤ¥à¦¨¬®¥ áá뫪¨";
|
||||||
#else
|
#else
|
||||||
char version[]="Text-based Browser 2.0 beta2";
|
char version[]="Text-based Browser 2.0 beta4";
|
||||||
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
||||||
char homepage[] = FROM "html\\homepage_en.htm""\0";
|
char homepage[] = FROM "html\\homepage_en.htm""\0";
|
||||||
char help[] = FROM "html\\help_en.htm""\0";
|
char help[] = FROM "html\\help_en.htm""\0";
|
||||||
@ -60,19 +73,6 @@ Download link contents";
|
|||||||
|
|
||||||
#define URL_SIZE 4000
|
#define URL_SIZE 4000
|
||||||
|
|
||||||
dword col_bg = 0xE3E2E2;
|
|
||||||
dword panel_color = 0xE3E2E2;
|
|
||||||
dword border_color = 0x787878;
|
|
||||||
|
|
||||||
bool debug_mode = false;
|
|
||||||
|
|
||||||
_http http = {0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
#include "..\TWB\TWB.c"
|
|
||||||
#include "history.h"
|
|
||||||
#include "show_src.h"
|
|
||||||
#include "download_manager.h"
|
|
||||||
|
|
||||||
#define URL_SERVICE_HISTORY "WebView:history"
|
#define URL_SERVICE_HISTORY "WebView:history"
|
||||||
#define URL_SERVICE_HOMEPAGE "WebView:home"
|
#define URL_SERVICE_HOMEPAGE "WebView:home"
|
||||||
#define URL_SERVICE_HELP "WebView:help"
|
#define URL_SERVICE_HELP "WebView:help"
|
||||||
@ -158,7 +158,7 @@ void main()
|
|||||||
case evMouse:
|
case evMouse:
|
||||||
edit_box_mouse stdcall (#address_box);
|
edit_box_mouse stdcall (#address_box);
|
||||||
mouse.get();
|
mouse.get();
|
||||||
if (PageLinks.HoverAndProceed(mouse.x, WB1.list.first + mouse.y))
|
if (PageLinks.HoverAndProceed(mouse.x, WB1.list.first + mouse.y, WB1.list.y, WB1.list.first))
|
||||||
&& (mouse.pkm) && (mouse.up) {
|
&& (mouse.pkm) && (mouse.up) {
|
||||||
if (WB1.list.MouseOver(mouse.x, mouse.y)) EventShowPageMenu(mouse.x, mouse.y);
|
if (WB1.list.MouseOver(mouse.x, mouse.y)) EventShowPageMenu(mouse.x, mouse.y);
|
||||||
break;
|
break;
|
||||||
@ -250,7 +250,7 @@ void main()
|
|||||||
{
|
{
|
||||||
http.handle_redirect();
|
http.handle_redirect();
|
||||||
http.free();
|
http.free();
|
||||||
GetAbsoluteURL(#http.redirect_url);
|
GetAbsoluteURL(#http.redirect_url, history.current());
|
||||||
debug("Redirect: "); debugln(#http.redirect_url);
|
debug("Redirect: "); debugln(#http.redirect_url);
|
||||||
history.back();
|
history.back();
|
||||||
OpenPage(#http.redirect_url);
|
OpenPage(#http.redirect_url);
|
||||||
@ -277,7 +277,7 @@ void SetElementSizes()
|
|||||||
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w + 1;
|
WB1.list.column_max = WB1.list.w - scroll_wv.size_x / WB1.list.font_w + 1;
|
||||||
WB1.list.visible = WB1.list.h;
|
WB1.list.visible = WB1.list.h;
|
||||||
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
||||||
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 800*20);
|
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 400*20);
|
||||||
OpenPage(history.current());
|
OpenPage(history.current());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,13 +301,12 @@ void draw_window()
|
|||||||
if (!header) {
|
if (!header) {
|
||||||
OpenPage(history.current());
|
OpenPage(history.current());
|
||||||
WB1.DrawScroller();
|
WB1.DrawScroller();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
WB1.DrawPage();
|
WB1.DrawPage();
|
||||||
DrawOmnibox();
|
DrawOmnibox();
|
||||||
|
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x,
|
||||||
|
scroll_wv.size_y-1, scroll_wv.bckg_col);
|
||||||
}
|
}
|
||||||
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x,
|
|
||||||
scroll_wv.size_y-1, scroll_wv.bckg_col);
|
|
||||||
DrawProgress();
|
DrawProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,21 +400,24 @@ void StopLoading()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//rewrite into
|
//rewrite into
|
||||||
//bool strrpl(dword dst, from, to, dst_len); !!!!!!!!
|
//bool strrpl(dword dst, from, into, dst_len);
|
||||||
void ReplaceSpaceInUrl(dword url, size) {
|
bool ReplaceSpaceInUrl(dword url, size) {
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
for (i=size-3; i>0; i--)
|
bool was_changed=false;
|
||||||
|
for (i=url+size-3; i>url; i--)
|
||||||
{
|
{
|
||||||
if (ESBYTE[i]!=' ') continue;
|
if (ESBYTE[i]!=' ') continue;
|
||||||
for (j=size-3; j>i; j--) {
|
for (j=url+size-3; j>=i; j--) {
|
||||||
|
ESBYTE[j+3]=ESBYTE[j+2];
|
||||||
ESBYTE[j+2]=ESBYTE[j+1];
|
ESBYTE[j+2]=ESBYTE[j+1];
|
||||||
ESBYTE[j+1]=ESBYTE[j];
|
ESBYTE[j+1]=ESBYTE[j];
|
||||||
}
|
}
|
||||||
ESBYTE[i] = '%';
|
ESBYTE[i] = '%';
|
||||||
ESBYTE[i+1] = '2';
|
ESBYTE[i+1] = '2';
|
||||||
ESBYTE[i+2] = '0';
|
ESBYTE[i+2] = '0';
|
||||||
|
was_changed = true;
|
||||||
}
|
}
|
||||||
debugln(url);
|
return was_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GetLocalFileData(dword _path)
|
bool GetLocalFileData(dword _path)
|
||||||
@ -462,7 +464,11 @@ void OpenPage(dword _open_URL)
|
|||||||
img_draw stdcall(skin.image, address_box.left+address_box.width+1,
|
img_draw stdcall(skin.image, address_box.left+address_box.width+1,
|
||||||
address_box.top-3, 17, skin.h, 85, SKIN_Y);
|
address_box.top-3, 17, skin.h, 85, SKIN_Y);
|
||||||
|
|
||||||
//ReplaceSpaceInUrl(#new_url, URL_SIZE);
|
if (ReplaceSpaceInUrl(#new_url, URL_SIZE)) {
|
||||||
|
strcpy(#editURL, #new_url);
|
||||||
|
DrawOmnibox();
|
||||||
|
}
|
||||||
|
|
||||||
if (!strncmp(#new_url,"http:",5)) {
|
if (!strncmp(#new_url,"http:",5)) {
|
||||||
http.get(#new_url);
|
http.get(#new_url);
|
||||||
} else if (!strncmp(#new_url,"https://",8)) {
|
} else if (!strncmp(#new_url,"https://",8)) {
|
||||||
@ -509,7 +515,7 @@ void EventClickLink(dword _click_URL)
|
|||||||
}
|
}
|
||||||
|
|
||||||
strcpy(#new_url, _click_URL);
|
strcpy(#new_url, _click_URL);
|
||||||
GetAbsoluteURL(#new_url);
|
GetAbsoluteURL(#new_url, history.current());
|
||||||
|
|
||||||
if (strrchr(#new_url, '#')!=0) {
|
if (strrchr(#new_url, '#')!=0) {
|
||||||
anchors.take_anchor_from(#new_url);
|
anchors.take_anchor_from(#new_url);
|
||||||
@ -594,14 +600,13 @@ void LoadInternalPage(dword _bufdata, _in_bufsize){
|
|||||||
strcat(#editURL, #anchors.current);
|
strcat(#editURL, #anchors.current);
|
||||||
DrawOmnibox();
|
DrawOmnibox();
|
||||||
}
|
}
|
||||||
|
WB1.ParseHtml();
|
||||||
if (source_mode) {
|
if (source_mode) {
|
||||||
source_mode = false;
|
source_mode = false;
|
||||||
WB1.ParseHtml();
|
|
||||||
ShowSource(bufpointer, bufsize);
|
ShowSource(bufpointer, bufsize);
|
||||||
return;
|
} else {
|
||||||
|
WB1.DrawPage();
|
||||||
}
|
}
|
||||||
WB1.ParseHtml();
|
|
||||||
WB1.DrawPage();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,8 +38,8 @@ dword ShowSource(dword _bufdata, _in_bufsize)
|
|||||||
dword source_buf_start;
|
dword source_buf_start;
|
||||||
|
|
||||||
opened_font_counter=0;
|
opened_font_counter=0;
|
||||||
source_buf_end = malloc(_in_bufsize*5);
|
source_buf_start = malloc(_in_bufsize*5);
|
||||||
source_buf_start = source_buf_end;
|
source_buf_end = source_buf_start;
|
||||||
|
|
||||||
SourceBufAdd(TEXT, "<html><head><title>View Source</title><body><pre>");
|
SourceBufAdd(TEXT, "<html><head><title>View Source</title><body><pre>");
|
||||||
|
|
||||||
@ -89,6 +89,6 @@ dword ShowSource(dword _bufdata, _in_bufsize)
|
|||||||
source_buf_end++;
|
source_buf_end++;
|
||||||
}
|
}
|
||||||
ESBYTE[source_buf_end] = 0;
|
ESBYTE[source_buf_end] = 0;
|
||||||
LoadInternalPage(source_buf_start, _in_bufsize);
|
LoadInternalPage(source_buf_start, source_buf_end-source_buf_start);
|
||||||
free(source_buf_start);
|
free(source_buf_start);
|
||||||
}
|
}
|
||||||
|
@ -14,13 +14,11 @@
|
|||||||
#include "..\lib\obj\box_lib.h"
|
#include "..\lib\obj\box_lib.h"
|
||||||
#include "..\lib\obj\libio.h"
|
#include "..\lib\obj\libio.h"
|
||||||
#include "..\lib\obj\libimg.h"
|
#include "..\lib\obj\libimg.h"
|
||||||
#include "..\lib\obj\http.h"
|
|
||||||
#include "..\lib\obj\iconv.h"
|
#include "..\lib\obj\iconv.h"
|
||||||
|
#include "..\lib\obj\proc_lib.h"
|
||||||
|
|
||||||
#include "..\lib\patterns\history.h"
|
//useful patterns
|
||||||
#include "..\lib\patterns\http_downloader.h"
|
#include "..\lib\patterns\simple_open_dialog.h"
|
||||||
|
|
||||||
_http http = {0, 0, 0, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
char homepage[] = FROM "html\\homepage.htm""\0";
|
char homepage[] = FROM "html\\homepage.htm""\0";
|
||||||
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
||||||
@ -28,7 +26,7 @@ char page_not_found[] = FROM "html\\page_not_found_en.htm""\0";
|
|||||||
char version[]="C-- Code View";
|
char version[]="C-- Code View";
|
||||||
char accept_language[]= "Accept-Language: en\n";
|
char accept_language[]= "Accept-Language: en\n";
|
||||||
|
|
||||||
#define URL_SERVICE_HOME "CodeView://home"
|
#define URL_SERVICE_HOME "CodeView:home"
|
||||||
|
|
||||||
proc_info Form;
|
proc_info Form;
|
||||||
|
|
||||||
@ -52,24 +50,33 @@ enum {
|
|||||||
|
|
||||||
#define URL_SIZE 4000;
|
#define URL_SIZE 4000;
|
||||||
#include "..\TWB\TWB.c"
|
#include "..\TWB\TWB.c"
|
||||||
#include "show_src.h"
|
#include "highlight_c.h"
|
||||||
|
|
||||||
char URL[URL_SIZE+1];
|
char default_dir[] = "/rd/1";
|
||||||
char editURL[URL_SIZE+1];
|
od_filter filter2 = { 16, "C\0H\0C--\0H--\0CPP\0\0" };
|
||||||
|
|
||||||
|
char current_path[URL_SIZE+1];
|
||||||
|
char edit_path[URL_SIZE+1];
|
||||||
int mouse_twb;
|
int mouse_twb;
|
||||||
edit_box address_box = {250,60,30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,URL_SIZE-2,#editURL,#mouse_twb,2,19,19};
|
edit_box address_box = {250,60,30,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,URL_SIZE-2,#edit_path,#mouse_twb,2,19,19};
|
||||||
|
|
||||||
#define SKIN_Y 24
|
#define SKIN_Y 24
|
||||||
|
|
||||||
void main()
|
void LoadLibraries()
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
int id;
|
|
||||||
load_dll(boxlib, #box_lib_init,0);
|
load_dll(boxlib, #box_lib_init,0);
|
||||||
load_dll(libio, #libio_init,1);
|
load_dll(libio, #libio_init,1);
|
||||||
load_dll(libimg, #libimg_init,1);
|
load_dll(libimg, #libimg_init,1);
|
||||||
load_dll(iconv_lib, #iconv_open,0);
|
load_dll(iconv_lib, #iconv_open,0);
|
||||||
if (param) strcpy(#URL, #param); else strcpy(#URL, URL_SERVICE_HOME);
|
load_dll(Proc_lib, #OpenDialog_init,0);
|
||||||
|
OpenDialog_init stdcall (#o_dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
LoadLibraries();
|
||||||
|
if (param) strcpy(#current_path, #param); else strcpy(#current_path, URL_SERVICE_HOME);
|
||||||
WB1.list.SetFont(8, 14, 10011000b);
|
WB1.list.SetFont(8, 14, 10011000b);
|
||||||
WB1.list.no_selection = true;
|
WB1.list.no_selection = true;
|
||||||
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
|
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER);
|
||||||
@ -89,23 +96,28 @@ void main()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case evButton:
|
case evButton:
|
||||||
id=GetButtonID();
|
if (GetButtonID()==1) ExitProcess();
|
||||||
if (1==id) ExitProcess();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case evKey:
|
case evKey:
|
||||||
GetKeys();
|
GetKeys();
|
||||||
|
|
||||||
if (SCAN_CODE_F5 == key_scancode) {
|
if (SCAN_CODE_F5 == key_scancode) {
|
||||||
OpenPage();
|
OpenPage(#current_path);
|
||||||
}
|
}
|
||||||
if (SCAN_CODE_F3 == key_scancode) {
|
if (SCAN_CODE_F3 == key_scancode) {
|
||||||
RunProgram("/rd/1/tinypad", #URL);
|
RunProgram("/rd/1/tinypad", #current_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) {
|
||||||
|
if (key_scancode == SCAN_CODE_KEY_O) {EventOpenDialog();break;}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (address_box.flags & 0b10)
|
if (address_box.flags & 0b10)
|
||||||
{
|
{
|
||||||
if (key_ascii == ASCII_KEY_ENTER) EventGoToPage();
|
if (key_ascii == ASCII_KEY_ENTER) {
|
||||||
|
OpenPage(#edit_path);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
EAX = key_editbox;
|
EAX = key_editbox;
|
||||||
edit_box_key stdcall(#address_box);
|
edit_box_key stdcall(#address_box);
|
||||||
@ -126,7 +138,8 @@ void main()
|
|||||||
if (Form.status_window>2) { DrawTitle(#header); break; }
|
if (Form.status_window>2) { DrawTitle(#header); break; }
|
||||||
if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
|
if (Form.height<120) { MoveSize(OLD,OLD,OLD,120); break; }
|
||||||
if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
|
if (Form.width<280) { MoveSize(OLD,OLD,280,OLD); break; }
|
||||||
Draw_Window();
|
SetElementSizes();
|
||||||
|
draw_window();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -144,76 +157,48 @@ void SetElementSizes()
|
|||||||
WB1.list.visible = WB1.list.h;
|
WB1.list.visible = WB1.list.h;
|
||||||
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
if (WB1.list.w!=WB1.DrawBuf.bufw) {
|
||||||
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 32700);
|
WB1.DrawBuf.Init(WB1.list.x, WB1.list.y, WB1.list.w, 32700);
|
||||||
OpenPage();
|
OpenPage(#current_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw_Window()
|
void draw_window()
|
||||||
{
|
{
|
||||||
DrawBar(0,0, Form.cwidth,TOOLBAR_H-2, panel_color);
|
DrawBar(0,0, Form.cwidth,TOOLBAR_H-2, panel_color);
|
||||||
DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, 0xD7D0D3);
|
DrawBar(0,TOOLBAR_H-2, Form.cwidth,1, 0xD7D0D3);
|
||||||
DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, border_color);
|
DrawBar(0,TOOLBAR_H-1, Form.cwidth,1, border_color);
|
||||||
SetElementSizes();
|
|
||||||
DrawRectangle(address_box.left-3, address_box.top-3, address_box.width+4, 25,border_color);
|
DrawRectangle(address_box.left-3, address_box.top-3, address_box.width+4, 25,border_color);
|
||||||
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, col_bg);
|
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,STATUSBAR_H, col_bg);
|
||||||
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, border_color);
|
DrawBar(0,Form.cheight - STATUSBAR_H, Form.cwidth,1, border_color);
|
||||||
DrawEditBoxWebView();
|
DrawEditBoxWebView();
|
||||||
if (!header)
|
if (!header) {
|
||||||
OpenPage();
|
OpenPage(#current_path);
|
||||||
else {
|
} else {
|
||||||
WB1.DrawPage();
|
WB1.DrawPage();
|
||||||
DrawEditBoxWebView();
|
DrawEditBoxWebView();
|
||||||
}
|
}
|
||||||
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x, scroll_wv.size_y-1, scroll_wv.bckg_col);
|
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x, scroll_wv.size_y-1, scroll_wv.bckg_col);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventGoToPage()
|
|
||||||
{
|
|
||||||
if (!editURL[0]) {
|
|
||||||
strcpy(#URL, URL_SERVICE_HOME);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(#URL, #editURL);
|
|
||||||
}
|
|
||||||
OpenPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void OpenPage(dword _path)
|
||||||
void SetPageDefaults()
|
|
||||||
{
|
{
|
||||||
strncpy(#header, #version, sizeof(header)-1);
|
dword buf, size;
|
||||||
WB1.list.count = WB1.list.first = 0;
|
strcpy(#current_path, _path);
|
||||||
cur_encoding = CH_NULL;
|
if (streq(_path, URL_SERVICE_HOME)) {
|
||||||
}
|
LoadInternalPage(#homepage, sizeof(homepage));
|
||||||
|
|
||||||
void OpenPage()
|
|
||||||
{
|
|
||||||
char getUrl[URL_SIZE+1];
|
|
||||||
strcpy(#editURL, #URL);
|
|
||||||
history.add(#URL);
|
|
||||||
if (!strncmp(#URL,"CodeView:",8))
|
|
||||||
{
|
|
||||||
SetPageDefaults();
|
|
||||||
if (!strcmp(#URL, URL_SERVICE_HOME)) LoadInternalPage(#homepage, sizeof(homepage));
|
|
||||||
DrawEditBoxWebView();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
file_size stdcall (_path);
|
||||||
|
if (EBX)
|
||||||
{
|
{
|
||||||
file_size stdcall (#URL);
|
size = EBX;
|
||||||
bufsize = EBX;
|
buf = malloc(size);
|
||||||
if (bufsize)
|
ReadFile(0, size, buf, _path);
|
||||||
{
|
ShowCodeSource();
|
||||||
free(bufpointer);
|
free(buf);
|
||||||
bufpointer = malloc(bufsize);
|
return;
|
||||||
SetPageDefaults();
|
|
||||||
ReadFile(0, bufsize, bufpointer, #URL);
|
|
||||||
ShowCodeSource();
|
|
||||||
LoadInternalPage(bufpointer, bufsize);
|
|
||||||
}
|
|
||||||
ShowPage();
|
|
||||||
}
|
}
|
||||||
|
LoadInternalPage(NULL,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawEditBoxWebView()
|
DrawEditBoxWebView()
|
||||||
@ -221,27 +206,43 @@ DrawEditBoxWebView()
|
|||||||
int skin_x_offset;
|
int skin_x_offset;
|
||||||
DrawBar(address_box.left-2, address_box.top-2, address_box.width+3, 2, address_box.color);
|
DrawBar(address_box.left-2, address_box.top-2, address_box.width+3, 2, address_box.color);
|
||||||
DrawBar(address_box.left-2, address_box.top, 2, 22, address_box.color);
|
DrawBar(address_box.left-2, address_box.top, 2, 22, address_box.color);
|
||||||
address_box.size = address_box.pos = address_box.shift = address_box.shift_old = strlen(#editURL);
|
address_box.size = address_box.pos = address_box.shift = address_box.shift_old = strlen(#edit_path);
|
||||||
address_box.offset = 0;
|
address_box.offset = 0;
|
||||||
edit_box_draw stdcall(#address_box);
|
edit_box_draw stdcall(#address_box);
|
||||||
skin_x_offset = 51;
|
skin_x_offset = 51;
|
||||||
img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, skin_x_offset, SKIN_Y);
|
img_draw stdcall(skin.image, address_box.left+address_box.width+1, address_box.top-3, 17, skin.h, skin_x_offset, SKIN_Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadInternalPage(dword bufpos, in_filesize){
|
void LoadInternalPage(dword _bufpos, _bufsize)
|
||||||
bufsize = in_filesize;
|
|
||||||
bufpointer = bufpos;
|
|
||||||
ShowPage();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ShowPage()
|
|
||||||
{
|
{
|
||||||
|
if (bufpointer) free(bufpointer);
|
||||||
|
|
||||||
|
if (!_bufpos) || (!_bufsize) {
|
||||||
|
LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strcpy(#edit_path, #current_path);
|
||||||
DrawEditBoxWebView();
|
DrawEditBoxWebView();
|
||||||
if (!bufsize) LoadInternalPage(#page_not_found, sizeof(page_not_found));
|
|
||||||
|
bufpointer = _bufpos;
|
||||||
|
bufsize = _bufsize;
|
||||||
|
bufpointer = malloc(bufsize);
|
||||||
|
strcpy(bufpointer, _bufpos);
|
||||||
|
|
||||||
|
WB1.list.first = 0;
|
||||||
WB1.ParseHtml();
|
WB1.ParseHtml();
|
||||||
WB1.DrawPage();
|
WB1.DrawPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventOpenDialog()
|
||||||
|
{
|
||||||
|
OpenDialog_start stdcall (#o_dialog);
|
||||||
|
if (o_dialog.status) {
|
||||||
|
OpenPage(#openfile_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DrawStatusBar() {return;};
|
void DrawStatusBar() {return;};
|
||||||
void EventClickLink() {return;};
|
void EventClickLink() {return;};
|
||||||
void EventShowLinkMenu() {return;};
|
void EventShowLinkMenu() {return;};
|
||||||
|
@ -14,7 +14,7 @@ char* C_HL_keywords[] = {
|
|||||||
":void ", ":int ", ":bool ", ":dword ", NULL
|
":void ", ":int ", ":bool ", ":dword ", NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
dword ShowCodeSource()
|
dword ShowCodeSource(dword _bufpointer, _bufsize)
|
||||||
{
|
{
|
||||||
dword new_buf, new_buf_start, i;
|
dword new_buf, new_buf_start, i;
|
||||||
int mode = CODE;
|
int mode = CODE;
|
||||||
@ -24,11 +24,11 @@ dword ShowCodeSource()
|
|||||||
dword keyn;
|
dword keyn;
|
||||||
dword keycolor;
|
dword keycolor;
|
||||||
|
|
||||||
new_buf = malloc(bufsize*10);
|
new_buf = malloc(_bufsize*10);
|
||||||
new_buf_start = new_buf;
|
new_buf_start = new_buf;
|
||||||
sprintf(new_buf,"<html><head><body><pre>",#URL);
|
sprintf(new_buf,"<html><head><title>%s</title><body><pre>",#current_path);
|
||||||
new_buf += strlen(new_buf);
|
new_buf += strlen(new_buf);
|
||||||
for (i=bufpointer; i<bufpointer+bufsize; i++)
|
for (i=_bufpointer; i<_bufpointer+_bufsize; i++)
|
||||||
{
|
{
|
||||||
if ('<' == ESBYTE[i]) {
|
if ('<' == ESBYTE[i]) {
|
||||||
strcpy(new_buf, "<");
|
strcpy(new_buf, "<");
|
||||||
@ -116,7 +116,6 @@ dword ShowCodeSource()
|
|||||||
_CONTINUE:
|
_CONTINUE:
|
||||||
}
|
}
|
||||||
ESBYTE[new_buf] = 0;
|
ESBYTE[new_buf] = 0;
|
||||||
bufsize = new_buf - new_buf_start;
|
LoadInternalPage(new_buf_start, new_buf - new_buf_start);
|
||||||
free(bufpointer);
|
free(new_buf_start);
|
||||||
bufpointer = new_buf_start;
|
|
||||||
}
|
}
|
@ -5,8 +5,9 @@
|
|||||||
<body>
|
<body>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
CodeView is a sipmle C--/C/C++ code viewer based on TWB component.
|
CodeView is a sipmle C--/C/C++ code viewer based on TWB component.<br>
|
||||||
|
<br>
|
||||||
|
Press Ctrl+O to open a file.
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -1,14 +1,10 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="content-type" content="text/html; charset=cp-866" />
|
<meta charset=cp-866 />
|
||||||
<title>File not found</title>
|
<title>File not found</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1> File not found</h1>
|
<h1> File not found</h1>
|
||||||
<ul>
|
Please, check file address, there may have been made a typo.
|
||||||
<li>
|
|
||||||
Check page address, there may have been made a typo.<br>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -50,6 +50,8 @@ enum {
|
|||||||
ONLY_OPEN
|
ONLY_OPEN
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_history history;
|
||||||
|
|
||||||
struct Eolite_colors
|
struct Eolite_colors
|
||||||
{
|
{
|
||||||
bool def;
|
bool def;
|
||||||
|
@ -269,6 +269,8 @@ struct llist
|
|||||||
|
|
||||||
:void llist_copy(dword dest, src)
|
:void llist_copy(dword dest, src)
|
||||||
{
|
{
|
||||||
|
memmov(dest, src, sizeof(llist));
|
||||||
|
/*
|
||||||
EDI = dest;
|
EDI = dest;
|
||||||
ESI = src;
|
ESI = src;
|
||||||
EDI.llist.x = ESI.llist.x;
|
EDI.llist.x = ESI.llist.x;
|
||||||
@ -286,6 +288,7 @@ struct llist
|
|||||||
EDI.llist.cur_y = ESI.llist.cur_y;
|
EDI.llist.cur_y = ESI.llist.cur_y;
|
||||||
EDI.llist.column_max = ESI.llist.column_max;
|
EDI.llist.column_max = ESI.llist.column_max;
|
||||||
EDI.llist.active = ESI.llist.active;
|
EDI.llist.active = ESI.llist.active;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -7,7 +7,7 @@ struct _history {
|
|||||||
int back();
|
int back();
|
||||||
int forward();
|
int forward();
|
||||||
dword current();
|
dword current();
|
||||||
} history;
|
};
|
||||||
|
|
||||||
int _history::add(dword in)
|
int _history::add(dword in)
|
||||||
{
|
{
|
||||||
|
@ -114,6 +114,30 @@ L1:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
signed int strncmp(dword s1, s2, signed n)
|
||||||
|
unsigned char _s1,_s2;
|
||||||
|
{
|
||||||
|
if (n == 0)
|
||||||
|
return 0;
|
||||||
|
do {
|
||||||
|
_s1 = DSBYTE[s1];
|
||||||
|
_s2 = DSBYTE[s2];
|
||||||
|
if (_s1 != _s2)
|
||||||
|
{
|
||||||
|
$dec s2
|
||||||
|
return _s1 - _s2;
|
||||||
|
}
|
||||||
|
$inc s2
|
||||||
|
if (_s1 == 0)
|
||||||
|
break;
|
||||||
|
$inc s1
|
||||||
|
$dec n
|
||||||
|
} while (n);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
inline signed int strncmp(dword text1,text2,len)
|
inline signed int strncmp(dword text1,text2,len)
|
||||||
{
|
{
|
||||||
@ -134,7 +158,7 @@ inline fastcall unsigned int strlen( EDI)
|
|||||||
EAX-=2+ECX;
|
EAX-=2+ECX;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline strnlen(dword str, dword maxlen)
|
inline dword strnlen(dword str, dword maxlen)
|
||||||
{
|
{
|
||||||
dword cp;
|
dword cp;
|
||||||
for (cp = str; (maxlen != 0) && (DSBYTE[cp] != '\0'); cp++, maxlen--);
|
for (cp = str; (maxlen != 0) && (DSBYTE[cp] != '\0'); cp++, maxlen--);
|
||||||
@ -181,19 +205,6 @@ inline signed int strcmp(dword text1, text2)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
TODO: rewrite streq() using pure assembliy
|
|
||||||
|
|
||||||
inline fastcall void strcpy( EDI, ESI)
|
|
||||||
{
|
|
||||||
$cld
|
|
||||||
L2:
|
|
||||||
$lodsb
|
|
||||||
$stosb
|
|
||||||
$test al,al
|
|
||||||
$jnz L2
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline fastcall streq(ESI, EDI)
|
inline fastcall streq(ESI, EDI)
|
||||||
{
|
{
|
||||||
@ -212,31 +223,6 @@ inline fastcall streq(ESI, EDI)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
signed int strncmp(dword s1, s2, signed n)
|
|
||||||
unsigned char _s1,_s2;
|
|
||||||
{
|
|
||||||
if (n == 0)
|
|
||||||
return 0;
|
|
||||||
do {
|
|
||||||
_s1 = DSBYTE[s1];
|
|
||||||
_s2 = DSBYTE[s2];
|
|
||||||
if (_s1 != _s2)
|
|
||||||
{
|
|
||||||
$dec s2
|
|
||||||
return _s1 - _s2;
|
|
||||||
}
|
|
||||||
$inc s2
|
|
||||||
if (_s1 == 0)
|
|
||||||
break;
|
|
||||||
$inc s1
|
|
||||||
$dec n
|
|
||||||
} while (n);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
inline fastcall void strcpy( EDI, ESI)
|
inline fastcall void strcpy( EDI, ESI)
|
||||||
{
|
{
|
||||||
$cld
|
$cld
|
||||||
@ -395,13 +381,13 @@ inline fastcall void strcat( EDI, ESI)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:void strncat(dword dst, src, dword len)
|
:void strncat(dword dst, src, len)
|
||||||
{
|
{
|
||||||
while (ESBYTE[dst]) && (len) {
|
while (ESBYTE[dst]) && (len) {
|
||||||
dst++;
|
dst++;
|
||||||
len--;
|
len--;
|
||||||
}
|
}
|
||||||
while (ESBYTE[src]) && (len) {
|
while (ESBYTE[src]) && (len>1) {
|
||||||
ESBYTE[dst] = ESBYTE[src];
|
ESBYTE[dst] = ESBYTE[src];
|
||||||
dst++;
|
dst++;
|
||||||
src++;
|
src++;
|
||||||
@ -410,6 +396,18 @@ inline fastcall void strcat( EDI, ESI)
|
|||||||
ESBYTE[dst] = 0;
|
ESBYTE[dst] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:void chrncat(dword dst, unsigned char s, dword len)
|
||||||
|
{
|
||||||
|
while (ESBYTE[dst]) && (len) {
|
||||||
|
dst++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
if (len>1) {
|
||||||
|
ESBYTE[dst] = s;
|
||||||
|
ESBYTE[dst+1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline fastcall void chrcat(ESI, DI)
|
inline fastcall void chrcat(ESI, DI)
|
||||||
{
|
{
|
||||||
while (ESBYTE[ESI]) ESI++;
|
while (ESBYTE[ESI]) ESI++;
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include "../lib/obj/netcode.h"
|
#include "../lib/obj/netcode.h"
|
||||||
#include "../lib/obj/iconv.h"
|
#include "../lib/obj/iconv.h"
|
||||||
//patterns
|
//patterns
|
||||||
#include "../lib/patterns/history.h"
|
|
||||||
#include "../lib/patterns/http_downloader.h"
|
#include "../lib/patterns/http_downloader.h"
|
||||||
//images
|
//images
|
||||||
byte letter_icons[sizeof(file "img/letter_icons.raw")] = FROM "img/letter_icons.raw";
|
byte letter_icons[sizeof(file "img/letter_icons.raw")] = FROM "img/letter_icons.raw";
|
||||||
|
Loading…
Reference in New Issue
Block a user