WebView: minor changes

git-svn-id: svn://kolibrios.org@5704 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2015-08-10 07:09:10 +00:00
parent 6fc5704c83
commit eca8c966f9
5 changed files with 44 additions and 92 deletions

View File

@ -26,8 +26,6 @@ byte b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, li_tab,
link, ignor_text, cur_encoding, text_align, t_html, t_body; link, ignor_text, cur_encoding, text_align, t_html, t_body;
byte condition_text_active, condition_text_val, condition_href, condition_max; byte condition_text_active, condition_text_val, condition_href, condition_max;
enum { _WIN, _DOS, _KOI, _UTF, _DEFAULT };
enum { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT}; enum { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT};
dword text_colors[300]; dword text_colors[300];
@ -100,24 +98,6 @@ void TWebBrowser::DrawPage()
//======================================================================= //=======================================================================
void BufEncode(int set_new_encoding)
{
int bufpointer_realsize;
cur_encoding = set_new_encoding;
if (o_bufpointer==0)
{
o_bufpointer = malloc(bufsize);
strcpy(o_bufpointer, bufpointer);
}
else
{
strcpy(bufpointer, o_bufpointer);
}
if (set_new_encoding==_WIN) bufpointer = ChangeCharset("CP1251", "CP866", bufpointer);
if (set_new_encoding==_UTF) bufpointer = ChangeCharset("UTF-8", "CP866", bufpointer);
if (set_new_encoding==_KOI) bufpointer = ChangeCharset("KOI8-RU", "CP866", bufpointer);
}
void TWebBrowser::Prepare(dword bufpos, in_filesize){ void TWebBrowser::Prepare(dword bufpos, in_filesize){
bufsize = in_filesize; bufsize = in_filesize;
bufpointer = bufpos; bufpointer = bufpos;
@ -155,7 +135,6 @@ void TWebBrowser::Parse(){
{ {
pre_text=0; pre_text=0;
if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1; if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1;
if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
} }
for ( ; (bufpointer+bufsize > bufpos) && (ESBYTE[bufpos]!=0); bufpos++;) for ( ; (bufpointer+bufsize > bufpos) && (ESBYTE[bufpos]!=0); bufpos++;)
@ -183,18 +162,6 @@ void TWebBrowser::Parse(){
break; break;
} }
goto DEFAULT_MARK; goto DEFAULT_MARK;
case '=': //quoted printable
if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK;
temp[0] = ESBYTE[bufpos+1];
temp[1] = ESBYTE[bufpos+2];
temp[2] = '\0';
if (bukva = Hex2Symb(#temp))
{
bufpos+=2;
goto DEFAULT_MARK;
}
break;
case '&': //&nbsp; and so on case '&': //&nbsp; and so on
bufpos++; bufpos++;
@ -313,7 +280,6 @@ void TWebBrowser::SetTextStyle(int left1, top1) {
if (isTag("html")) if (isTag("html"))
{ {
IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (opened==0) ignor_text = 1; ELSE ignor_text = 0;
t_html = opened; t_html = opened;
return; return;
} }
@ -362,10 +328,10 @@ void TWebBrowser::SetTextStyle(int left1, top1) {
DrawBuf.Fill(bg_color); DrawBuf.Fill(bg_color);
} }
} while(GetNextParam()); } while(GetNextParam());
if (opened) && (cur_encoding==_DEFAULT) if (opened) && (cur_encoding==CH_NULL)
{ {
debugln("Document has no information about encoding, UTF will be used"); debugln("Document has no information about encoding, UTF will be used");
BufEncode(_UTF); //BufEncode(CH_UTF8);
} }
return; return;
} }
@ -594,12 +560,14 @@ void TWebBrowser::SetTextStyle(int left1, top1) {
{ {
strcpy(#options, #options[strrchr(#options, '=')]); //ïîèñê â content= strcpy(#options, #options[strrchr(#options, '=')]); //ïîèñê â content=
strlwr(#options); strlwr(#options);
meta_encoding = _DEFAULT; meta_encoding = CH_NULL;
if (!strcmp(#options, "utf-8")) || (!strcmp(#options,"utf8")) meta_encoding = _UTF; if (!strcmp(#options, "utf-8")) || (!strcmp(#options,"utf8")) meta_encoding = CH_UTF8;
if (!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u")) meta_encoding = _KOI; else if (!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u")) meta_encoding = CH_KOI8;
if (!strcmp(#options, "windows-1251")) || (!strcmp(#options, "windows1251")) meta_encoding = _WIN; else if (!strcmp(#options, "windows-1251")) || (!strcmp(#options, "windows1251")) meta_encoding = CH_CP1251;
if (!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866")) meta_encoding = _DOS; else if (!strcmp(#options, "windows-1252")) || (!strcmp(#options, "windows1252")) meta_encoding = CH_CP1252;
if (cur_encoding==_DEFAULT) BufEncode(meta_encoding); else if (!strcmp(#options, "iso-8859-5")) || (!strcmp(#options, "iso8859-5")) meta_encoding = CH_ISO8859_5;
else if (!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866")) meta_encoding = CH_CP866;
if (cur_encoding==CH_NULL) BufEncode(meta_encoding);
return; return;
} }
} while(GetNextParam()); } while(GetNextParam());
@ -607,6 +575,24 @@ void TWebBrowser::SetTextStyle(int left1, top1) {
} }
} }
void BufEncode(int set_new_encoding)
{
int bufpointer_realsize;
cur_encoding = set_new_encoding;
if (o_bufpointer==0)
{
o_bufpointer = malloc(bufsize);
strcpy(o_bufpointer, bufpointer);
}
else
{
strcpy(bufpointer, o_bufpointer);
}
debugln(charsets[set_new_encoding]);
bufpointer = ChangeCharset(charsets[set_new_encoding], "CP866", bufpointer);
}
void TWebBrowser::DrawScroller() void TWebBrowser::DrawScroller()
{ {
scroll_wv.max_area = list.count; scroll_wv.max_area = list.count;
@ -652,20 +638,3 @@ int isTag(dword text)
if (!strcmp(#tag,text)) return 1; else return 0; if (!strcmp(#tag,text)) return 1; else return 0;
} }
:dword Hex2Symb(char* htmlcolor)
{
dword j=0, symbol=0;
char ch=0x00;
for (;j<2;j++)
{
ch=ESBYTE[htmlcolor+j];
if (ch==0x0d) || (ch=='\9') RETURN 0;
if ((ch>='0') && (ch<='9')) ch -= '0';
if ((ch>='A') && (ch<='F')) ch -= 'A'-10;
if ((ch>='a') && (ch<='f')) ch -= 'a'-10;
symbol = symbol*0x10 + ch;
}
AL=symbol;
}

View File

@ -5,9 +5,9 @@
<title>Тест Acid 0.1</title> <title>Тест Acid 0.1</title>
</head> </head>
<body bgcolor="#000000" link="#0066FF" text="#FFFFFF"> <body bgcolor="#000000" link="#0066FF" text="#FFFFFF">
<h1 align=center>Это тестовая страница для проверки HTML Viewer</h1> <h1 align=center>Это тестовая страница для проверки WebViewer</h1>
<br /> <br />
<p>HTMLv является текстовым браузером и поддерживает все популярные кодировки (cp1251, koi-8, cp866, unicode) <p>WebViewer является текстовым браузером и поддерживает все популярные кодировки (cp1251, koi-8, cp866, unicode)
и некоторые теги. Поддержка таблииц (&lt;table&gt;), CSS, Javascript'a и Контактика пока не реализована :) и некоторые теги. Поддержка таблииц (&lt;table&gt;), CSS, Javascript'a и Контактика пока не реализована :)
</p> </p>
<br /> <br />
@ -55,7 +55,7 @@
<br> <br>
<a href="logo.png"><img id="2.1.4" src="logo.png" alt="logo"><br>Открыть</a><br> <a href="http://kolibrios.org/i/logo.png"><img id="2.1.4" src="http://kolibrios.org/i/logo.png" alt="logo"><br>Открыть</a><br>
<br> <br>
<br> <br>

View File

@ -333,12 +333,6 @@ void Draw_Window()
} }
void ChangeCharset1(byte new_charset)
{
BufEncode(new_charset);
WB1.Parse();
}
void Scan(int id) void Scan(int id)
{ {
action_buf=0; action_buf=0;
@ -350,39 +344,36 @@ void Scan(int id)
switch (id) switch (id)
{ {
case 011: //Ctrk+K case 011: //Ctrk+K
ChangeCharset1(_KOI); BufEncode(CH_KOI8);
WB1.Parse();
return; return;
case 021: //Ctrl+U case 021: //Ctrl+U
ChangeCharset1(_UTF); BufEncode(CH_UTF8);
WB1.Parse();
return; return;
case 004: //Ctrl+D case 004: //Ctrl+D
ChangeCharset1(_DOS); BufEncode(CH_CP866);
WB1.Parse();
return; return;
case 005: //Win encoding case 005: //Win encoding
ChangeCharset1(_WIN); BufEncode(CH_CP1251);
WB1.Parse();
return; return;
case 009: //free img cache case 009: //free img cache
ImgCache.Free(); ImgCache.Free();
notify(IMAGES_CACHE_CLEARED); notify(IMAGES_CACHE_CLEARED);
WB1.Parse(); WB1.Parse();
return; return;
case 003: //history case 003: //history
strcpy(#URL, URL_SERVICE_HISTORY); strcpy(#URL, URL_SERVICE_HISTORY);
OpenPage(); OpenPage();
return; return;
case 006: //download manager case 006: //download manager
if (!downloader_opened) { if (!downloader_opened) {
strncpy(#DL_URL, "http://",7); strncpy(#DL_URL, "http://",7);
CreateThread(#Downloader,#downloader_stak+4092); CreateThread(#Downloader,#downloader_stak+4092);
} }
return; return;
case ASCII_KEY_BS: case ASCII_KEY_BS:
case BACK: case BACK:
if (!BrowserHistory.GoBack()) return; if (!BrowserHistory.GoBack()) return;
@ -576,7 +567,7 @@ void SetPageDefaults()
pre_text = 0; pre_text = 0;
WB1.list.count = WB1.list.first = 0; WB1.list.count = WB1.list.first = 0;
stroka = 0; stroka = 0;
cur_encoding = _DEFAULT; cur_encoding = CH_NULL;
if (o_bufpointer) o_bufpointer = free(o_bufpointer); if (o_bufpointer) o_bufpointer = free(o_bufpointer);
anchor_line_num=WB1.list.first; anchor_line_num=WB1.list.first;
anchor[0]='|'; anchor[0]='|';

View File

@ -80,10 +80,10 @@ void DrawMenuList()
} }
WriteText(18,N*menu.line_h+8,0x80,0x000000,ITEMS_LIST[N*2]); WriteText(18,N*menu.line_h+8,0x80,0x000000,ITEMS_LIST[N*2]);
} }
if (cur_encoding!=_DEFAULT) if (cur_encoding!=CH_NULL)
WriteText(5, cur_encoding*menu.line_h+7, 0x80, 0x777777, "\x10"); //show current encoding WriteText(5, cur_encoding*menu.line_h+7, 0x80, 0x777777, "\x10"); //show current encoding
else else
WriteText(5, _DOS*menu.line_h+7, 0x80, 0x777777, "\x10"); //show current encoding WriteText(5, CH_CP866*menu.line_h+7, 0x80, 0x777777, "\x10"); //show current encoding
if (WB1.DrawBuf.zoom == 2) DrawBar(6, 4*menu.line_h+8, 6, 6, 0x777777); if (WB1.DrawBuf.zoom == 2) DrawBar(6, 4*menu.line_h+8, 6, 6, 0x777777);
} }

View File

@ -57,16 +57,8 @@ dword ChangeCharset(dword from_chs, to_chs, conv_buf)
} }
:char *charsets[] = { " ", "UTF-8", "KOI8-RU", "CP1251", "CP1252", "ISO8859-5", "CP866"};
:int cur_charset; :int cur_charset;
enum { :char *charsets[] = { " ", "UTF-8", "KOI8-RU", "CP1251", "CP1252", "ISO8859-5", "CP866" };
CH_NULL, enum { CH_NULL, CH_UTF8, CH_KOI8, CH_CP1251, CH_CP1252, CH_ISO8859_5, CH_CP866 };
CH_UTF8,
CH_KOI8,
CH_CP1251,
CH_CP1252,
CH_ISO8859_5,
CH_CP866
};
#endif #endif