summaryrefslogtreecommitdiff
path: root/src/cssparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cssparser.cc')
-rw-r--r--src/cssparser.cc26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/cssparser.cc b/src/cssparser.cc
index 04faffa2..f567c333 100644
--- a/src/cssparser.cc
+++ b/src/cssparser.cc
@@ -447,6 +447,7 @@ static const CssShorthandInfo Css_shorthand_info[] = {
* ---------------------------------------------------------------------- */
CssParser::CssParser(CssContext *context, CssOrigin origin,
+ const DilloUrl *baseUrl,
const char *buf, int buflen)
{
this->context = context;
@@ -456,6 +457,7 @@ CssParser::CssParser(CssContext *context, CssOrigin origin,
this->bufptr = 0;
this->spaceSeparated = false;
this->withinBlock = false;
+ this->baseUrl = baseUrl;
nextToken ();
}
@@ -1570,15 +1572,17 @@ char * CssParser::parseUrl()
}
if (urlStr) {
- char *url = urlStr->str;
- dStr_free(urlStr, 0);
+ DilloUrl *dilloUrl = a_Url_new(urlStr->str, a_Url_str(this->baseUrl));
+ char *url = dStrdup(a_Url_str(dilloUrl));
+ a_Url_free(dilloUrl);
+ dStr_free(urlStr, 1);
return url;
} else {
return NULL;
}
}
-void CssParser::parseImport(DilloHtml *html, DilloUrl *baseUrl)
+void CssParser::parseImport(DilloHtml *html)
{
char *urlStr = NULL;
bool importSyntaxIsOK = false;
@@ -1624,8 +1628,8 @@ void CssParser::parseImport(DilloHtml *html, DilloUrl *baseUrl)
if (urlStr) {
if (importSyntaxIsOK && mediaIsSelected) {
MSG("CssParser::parseImport(): @import %s\n", urlStr);
- DilloUrl *url = a_Html_url_new (html, urlStr, a_Url_str(baseUrl),
- baseUrl ? 1 : 0);
+ DilloUrl *url = a_Html_url_new (html, urlStr, a_Url_str(this->baseUrl),
+ this->baseUrl ? 1 : 0);
a_Html_load_stylesheet(html, url);
a_Url_free(url);
}
@@ -1717,11 +1721,12 @@ void CssParser::ignoreStatement()
}
}
-void CssParser::parse(DilloHtml *html, DilloUrl *url, CssContext *context,
+void CssParser::parse(DilloHtml *html, const DilloUrl *baseUrl,
+ CssContext *context,
const char *buf,
int buflen, CssOrigin origin)
{
- CssParser parser (context, origin, buf, buflen);
+ CssParser parser (context, origin, baseUrl, buf, buflen);
bool importsAreAllowed = true;
while (parser.ttype != CSS_TK_END) {
@@ -1732,7 +1737,7 @@ void CssParser::parse(DilloHtml *html, DilloUrl *url, CssContext *context,
if (dStrAsciiCasecmp(parser.tval, "import") == 0 &&
html != NULL &&
importsAreAllowed) {
- parser.parseImport(html, url);
+ parser.parseImport(html);
} else if (dStrAsciiCasecmp(parser.tval, "media") == 0) {
parser.parseMedia();
} else {
@@ -1748,11 +1753,12 @@ void CssParser::parse(DilloHtml *html, DilloUrl *url, CssContext *context,
}
}
-void CssParser::parseDeclarationBlock(const char *buf, int buflen,
+void CssParser::parseDeclarationBlock(const DilloUrl *baseUrl,
+ const char *buf, int buflen,
CssPropertyList *props,
CssPropertyList *propsImortant)
{
- CssParser parser (NULL, CSS_ORIGIN_AUTHOR, buf, buflen);
+ CssParser parser (NULL, CSS_ORIGIN_AUTHOR, baseUrl, buf, buflen);
parser.withinBlock = true;