WebView 3.01: bugfixes (thanks Mihail Serebryakov and rgimad for reports), refactor URL parse

git-svn-id: svn://kolibrios.org@8410 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2020-12-15 02:08:04 +00:00
parent e63d25e33e
commit feeb972821
3 changed files with 35 additions and 39 deletions

View File

@ -189,7 +189,6 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;) for (bufpos=bufpointer ; (bufpos < bufpointer+bufsize) && (ESBYTE[bufpos]!=0) ; bufpos++;)
{ {
//bukva = ESBYTE[bufpos];
switch (ESBYTE[bufpos]) switch (ESBYTE[bufpos])
{ {
case 0x0a: case 0x0a:
@ -212,8 +211,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
case '&': //&nbsp; and so on case '&': //&nbsp; and so on
for (j=1, unicode_symbol=0; (ESBYTE[bufpos+j]<>';') && (!__isWhite(ESBYTE[bufpos+j])) && (j<8); j++) for (j=1, unicode_symbol=0; (ESBYTE[bufpos+j]<>';') && (!__isWhite(ESBYTE[bufpos+j])) && (j<8); j++)
{ {
bukva = ESBYTE[bufpos+j]; chrcat(#unicode_symbol, ESBYTE[bufpos+j]);
chrcat(#unicode_symbol, bukva);
} }
if (GetUnicodeSymbol(#line, #unicode_symbol, sizeof(line)-1)) { if (GetUnicodeSymbol(#line, #unicode_symbol, sizeof(line)-1)) {
bufpos += j; bufpos += j;
@ -228,6 +226,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
switch (ESBYTE[bufpos]) { switch (ESBYTE[bufpos]) {
case '!': case '!':
case '/': case '/':
case '?':
case 'a'...'z': case 'a'...'z':
case 'A'...'Z': case 'A'...'Z':
goto _TAG; goto _TAG;

View File

@ -41,7 +41,7 @@
// DATA // // DATA //
// // // //
//===================================================// //===================================================//
char version[]="WebView 3 GOLD"; char version[]="WebView 3.01";
#define DEFAULT_URL URL_SERVICE_HOMEPAGE #define DEFAULT_URL URL_SERVICE_HOMEPAGE
@ -593,7 +593,6 @@ bool EventClickAnchor()
if (anchors.get_pos_by_name(aURL+1)!=-1) { if (anchors.get_pos_by_name(aURL+1)!=-1) {
WB1.list.first = anchors.get_pos_by_name(aURL+1); WB1.list.first = anchors.get_pos_by_name(aURL+1);
//WB1.list.CheckDoesValuesOkey();
strcpy(#editURL, history.current()); strcpy(#editURL, history.current());
strcat(#editURL, aURL); strcat(#editURL, aURL);
DrawOmnibox(); DrawOmnibox();

View File

@ -101,7 +101,7 @@ dword _http::get(dword _url)
cur_url = _url; cur_url = _url;
http_get stdcall (_url, 0, 0, #accept_language); http_get stdcall (_url, 0, 0, #accept_language);
transfer = EAX; transfer = EAX;
return transfer; return EAX;
} }
void _http::hfree() void _http::hfree()
@ -203,41 +203,39 @@ void _http::receive()
while (i=strstr(new_URL, "&amp;")) strcpy(i+1, i+5); while (i=strstr(new_URL, "&amp;")) strcpy(i+1, i+5);
if (check_is_the_url_absolute(new_URL)) return orig_URL; if (check_is_the_url_absolute(new_URL)) return new_URL;
IF (!strncmp(new_URL,"//", 2)) switch(ESBYTE[new_URL]) {
{ case '.':
strncpy(#newurl, "http:", URL_SIZE); new_URL++;
strncat(#newurl, new_URL, URL_SIZE); if (ESBYTE[new_URL] == '/') {
strncpy(orig_URL, #newurl, URL_SIZE); new_URL++;
return orig_URL; }
else if (ESBYTE[new_URL] == '.') && (ESBYTE[new_URL+1] == '/') {
_GO_UP:
new_URL+=2;
newurl[strrchr(#newurl, '/')-1] = '\0';
}
goto _DEFAULT;
case '?':
strchr(#newurl+8, '?'); //returns EAX
if (EAX) ESBYTE[EAX] = '\0';
break;
case '/':
new_URL++;
if (ESBYTE[new_URL] == '/') {
strcpy(#newurl, "http:/");
break;
}
EAX = strchr(#newurl+8, '/');
if (EAX) ESBYTE[EAX] = '\0';
default:
_DEFAULT:
EAX = strrchr(#newurl, '/');
if (newurl[EAX-2]!='/') newurl[EAX] = '\0';
if (!strncmp(new_URL,"../",3)) goto _GO_UP;
if (newurl[strlen(#newurl)-1]!='/') strncat(#newurl, "/", URL_SIZE);
} }
IF (!strncmp(new_URL,"./", 2)) new_URL+=2;
if (ESBYTE[new_URL] == '/') //remove everything after site domain name
{
i = strchr(#newurl+8, '/');
if (i) ESBYTE[i]=0;
new_URL+=1;
}
_CUT_ST_LEVEL_MARK:
if (newurl[strrchr(#newurl, '/')-2]<>'/')
{
newurl[strrchr(#newurl, '/')] = 0x00;
}
IF (!strncmp(new_URL,"../",3))
{
new_URL+=3;
newurl[strrchr(#newurl, '/')-1] = 0x00;
goto _CUT_ST_LEVEL_MARK;
}
if (newurl[strlen(#newurl)-1]<>'/') strncat(#newurl, "/", URL_SIZE);
strncat(#newurl, new_URL, URL_SIZE); strncat(#newurl, new_URL, URL_SIZE);
strncpy(orig_URL, #newurl, URL_SIZE); strncpy(orig_URL, #newurl, URL_SIZE);
return orig_URL; return orig_URL;