WebView 3.52: handle dd, dl unclosed tags (thanks turbocat2001 for the bug report)

git-svn-id: svn://kolibrios.org@9263 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2021-11-13 17:21:44 +00:00
parent 9257d2c34c
commit 2b790ca52d
3 changed files with 23 additions and 14 deletions

View File

@ -153,7 +153,7 @@ void TWebBrowser::ParseHtml(dword _bufpointer, _bufsize){
} }
tr_col_count.drop(); table.cols.drop();
secondrun = false; secondrun = false;
_PARSE_START_: _PARSE_START_:

View File

@ -37,6 +37,7 @@ void TWebBrowser::SetStyle()
if (tag.is("h4")) { tag_h1234_caption(); return; } if (tag.is("h4")) { tag_h1234_caption(); return; }
if (tag.is("font")) { tag_font(); return; } if (tag.is("font")) { tag_font(); return; }
if (tag.is("dt")) { tag_ol_ul_dt(); return; } if (tag.is("dt")) { tag_ol_ul_dt(); return; }
if (tag.is("dd")) { tag_ol_ul_dt(); return; }
if (tag.is("ul")) { tag_ol_ul_dt(); return; } if (tag.is("ul")) { tag_ol_ul_dt(); return; }
if (tag.is("ol")) { tag_ol_ul_dt(); return; } if (tag.is("ol")) { tag_ol_ul_dt(); return; }
if (tag.is("li")) { tag_li(); return; } if (tag.is("li")) { tag_li(); return; }
@ -164,14 +165,16 @@ void TWebBrowser::tag_code()
void TWebBrowser::tag_ol_ul_dt() void TWebBrowser::tag_ol_ul_dt()
{ {
char type = ESBYTE[#tag.name]; char type = ESBYTE[#tag.name];
style.tag_list.upd_level(tag.opened, type);
switch(type) switch(type)
{ {
case 'd': case 'd':
if (ESBYTE[#tag.name+1]=='d') style.tag_list.upd_level(tag.opened, type);
if (ESBYTE[#tag.name+1]=='t') style.tag_list.upd_level(false, 'd');
if (tag.opened) NewLine(); if (tag.opened) NewLine();
break; break;
case 'u': case 'u':
case 'o': case 'o':
style.tag_list.upd_level(tag.opened, type);
if (!tag.opened) && (!style.pre) NewLine(); if (!tag.opened) && (!style.pre) NewLine();
} }
} }
@ -318,11 +321,12 @@ NOIMG:
struct TABLE {
int depth;
collection_int cols;
} table;
int tdepth;
collection_int tr_col_count; //drop on once!
int tr_pos, td_pos; int tr_pos, td_pos;
int row_start_y; int row_start_y;
int colcount; int colcount;
@ -330,7 +334,7 @@ dword tallest_cell_in_row;
void TWebBrowser::tag_table_reset() void TWebBrowser::tag_table_reset()
{ {
tdepth = 0; table.depth = 0;
colcount = 0; colcount = 0;
tr_pos = 0; tr_pos = 0;
td_pos = 0; td_pos = 0;
@ -340,10 +344,15 @@ void TWebBrowser::tag_table()
{ {
if (tag.is("table")) { if (tag.is("table")) {
if(tag.opened) { if(tag.opened) {
tdepth++; table.depth++;
if (table.depth==1) {
colcount = 0;
}
} else { } else {
if (tdepth>0) tdepth--; if (table.depth>0) {
if (tdepth==0) { table.depth--;
}
if (table.depth==0) {
draw_x = left_gap = style.tag_list.level * 5 * list.font_w + BODY_MARGIN; draw_x = left_gap = style.tag_list.level * 5 * list.font_w + BODY_MARGIN;
draw_w = list.w; draw_w = list.w;
draw_y = math.max(draw_y+style.cur_line_h, tallest_cell_in_row); draw_y = math.max(draw_y+style.cur_line_h, tallest_cell_in_row);
@ -352,7 +361,7 @@ void TWebBrowser::tag_table()
} }
} }
} }
if (tdepth>1) { if (table.depth>1) {
if (tag.is("tr")) && (tag.opened) NewLine(); if (tag.is("tr")) && (tag.opened) NewLine();
return; return;
} }
@ -360,13 +369,13 @@ void TWebBrowser::tag_table()
if (!secondrun) { if (!secondrun) {
if (tag.is("tr")) { if (tag.is("tr")) {
if (tag.opened) { if (tag.opened) {
tr_col_count.add(1); table.cols.add(1);
} }
colcount = 0; colcount = 0;
} }
if (tag.opened) && (tag.is("td")) || (tag.is("th")) { if (tag.opened) && (tag.is("td")) || (tag.is("th")) {
colcount++; colcount++;
if (colcount) tr_col_count.set(tr_col_count.count-1, colcount); if (colcount) table.cols.set(table.cols.count-1, colcount);
//if (tag.get_number_of("colspan")) colcount += tag.number-1; //if (tag.get_number_of("colspan")) colcount += tag.number-1;
} }
} else { } else {
@ -390,7 +399,7 @@ void TWebBrowser::tag_table()
tallest_cell_in_row = math.max(draw_y+style.cur_line_h-list.item_h, tallest_cell_in_row); tallest_cell_in_row = math.max(draw_y+style.cur_line_h-list.item_h, tallest_cell_in_row);
style.cur_line_h = list.item_h; style.cur_line_h = list.item_h;
if (tag.opened) { if (tag.opened) {
draw_w = list.w - BODY_MARGIN - BODY_MARGIN - 23 / tr_col_count.get(tr_pos-1); draw_w = list.w - BODY_MARGIN - BODY_MARGIN - 23 / table.cols.get(tr_pos-1);
draw_x = left_gap = draw_w * td_pos + BODY_MARGIN; draw_x = left_gap = draw_w * td_pos + BODY_MARGIN;
//debugval(itoa(draw_x), list.w); //debugval(itoa(draw_x), list.w);
draw_y = row_start_y; draw_y = row_start_y;

View File

@ -107,4 +107,4 @@ char editbox_icons[] = FROM "res/editbox_icons.raw";
#define DEFAULT_URL URL_SERVICE_HOMEPAGE #define DEFAULT_URL URL_SERVICE_HOMEPAGE
char version[]="WebView 3.51b"; char version[]="WebView 3.52";