HTML Object nearly RAII complete.

This commit is contained in:
2025-08-12 03:05:02 -04:00
parent a02ed91d3b
commit d12cf52b73
2 changed files with 21 additions and 34 deletions

View File

@ -505,8 +505,6 @@ DilloHtml::DilloHtml(BrowserWindow *p_bw, const DilloUrl *url,
Num_HTML = Num_HEAD = Num_BODY = Num_TITLE = 0;
attr_data = dStr_sized_new(1024);
non_css_link_color = -1;
non_css_visited_color = -1;
visited_color = -1;
@ -542,8 +540,6 @@ DilloHtml::~DilloHtml()
{
_MSG("::~DilloHtml(this=%p)\n", this);
freeParseData();
a_Bw_remove_doc(bw, this);
}
@ -592,14 +588,6 @@ int DilloHtml::getCurrLineNumber()
return line;
}
/**
* Free parsing data.
*/
void DilloHtml::freeParseData()
{
dStr_free(attr_data, TRUE);
}
/**
* Finish parsing a HTML page. Close the parser and close the client.
* The class is not deleted here, it remains until the widget is destroyed.
@ -2577,20 +2565,20 @@ static const char* Html_get_javascript_link(DilloHtml *html)
{
size_t i;
char ch, *p1, *p2;
Dstr *Buf = html->attr_data;
std::string &Buf = html->attr_data;
if (dStrnAsciiCasecmp("javascript", Buf->str, 10) == 0) {
i = strcspn(Buf->str, "'\"");
ch = Buf->str[i];
if (dStrnAsciiCasecmp("javascript", Buf.c_str(), 10) == 0) {
i = strcspn(Buf.c_str(), "'\"");
ch = Buf.at( i );
if ((ch == '"' || ch == '\'') &&
(p2 = strchr(Buf->str + i + 1 , ch))) {
p1 = Buf->str + i;
(p2 = strchr(Buf.data() + i + 1 , ch))) {
p1 = Buf.data() + i;
BUG_MSG("Link depends on javascript().");
dStr_truncate(Buf, p2 - Buf->str);
dStr_erase(Buf, 0, p1 - Buf->str + 1);
while( Buf.size() > ( p2 - Buf.c_str() ) ) Buf.pop_back();
Buf.erase( 0, p1 - Buf.c_str() + 1 );
}
}
return Buf->str;
return Buf.c_str();
}
/**
@ -4085,12 +4073,12 @@ static const char *Html_get_attr2(DilloHtml *html,
int tag_parsing_flags)
{
int i, entsize, Found = 0, delimiter = 0, attr_pos = 0;
Dstr *Buf = html->attr_data;
std::string &Buf = html->attr_data;
DilloHtmlTagParsingState state = SEEK_ATTR_START;
dReturn_val_if_fail(*attrname, NULL);
dStr_truncate(Buf, 0);
Buf.clear();
for (i = 1; i < tagsize; ++i) {
switch (state) {
@ -4148,17 +4136,17 @@ static const char *Html_get_attr2(DilloHtml *html,
if ((entstr = Html_parse_entity(html, tag+i, tagsize-i, &entsize,
is_attr))) {
dStr_append(Buf, entstr);
Buf+= entstr;
i += entsize-1;
} else {
dStr_append_c(Buf, tag[i]);
Buf+= tag[i];
}
} else if (tag[i] == '\r' || tag[i] == '\t') {
dStr_append_c(Buf, ' ');
Buf+= ' ';
} else if (tag[i] == '\n') {
/* ignore */
} else {
dStr_append_c(Buf, tag[i]);
Buf+= tag[i];
}
break;
@ -4169,13 +4157,13 @@ static const char *Html_get_attr2(DilloHtml *html,
}
if (tag_parsing_flags & HTML_LeftTrim)
while (isspace(Buf->str[0]))
dStr_erase(Buf, 0, 1);
while (isspace(Buf.front()))
Buf.erase( 0, 1 );
if (tag_parsing_flags & HTML_RightTrim)
while (Buf->len && isspace(Buf->str[Buf->len - 1]))
dStr_truncate(Buf, Buf->len - 1);
while (Buf.size() && isspace( Buf.back() ))
Buf.pop_back();
return (Found) ? Buf->str : NULL;
return (Found) ? Buf.c_str() : NULL;
}
/**

View File

@ -214,7 +214,7 @@ public: //BUG: for now everything is public
* ATM they're used as three state flags {0,1,>1} */
uchar_t Num_HTML, Num_HEAD, Num_BODY, Num_TITLE;
Dstr *attr_data; /**< Buffer for attribute value */
std::string attr_data; /**< Buffer for attribute value */
int32_t non_css_link_color; /**< as provided by link attribute in BODY */
int32_t non_css_visited_color; /**< as provided by vlink attribute in BODY */
@ -230,7 +230,6 @@ public: //BUG: for now everything is public
dw::ImageMapsList maps;
private:
void freeParseData();
void initDw(); /* Used by the constructor */
public: