Commit fac67038 by Aaron Leung

Allowing 'url' to take variables.

parent bd9aba84
......@@ -855,16 +855,34 @@ namespace Sass {
{
if (lex< uri_prefix >())
{
const char* value = position;
const char* rparen = find_first< exactly<')'> >(position);
if (!rparen) throw_syntax_error("URI is missing ')'");
Token content_tok(Token::make(value, rparen));
Node content_node(context.new_Node(Node::string_constant, path, line, content_tok));
// lex< string_constant >();
Node result(context.new_Node(Node::uri, path, line, 1));
result << content_node;
position = rparen;
lex< exactly<')'> >();
if (lex< variable >()) {
result << context.new_Node(Node::variable, path, line, lexed);
if (!lex< exactly<')'> >()) throw_syntax_error("URI is missing ')'");
result.should_eval() = true;
}
else if (lex< string_constant >()) {
result << parse_string();
if (!lex< exactly<')'> >()) throw_syntax_error("URI is missing ')'");
result.should_eval() = true;
}
// else if (lex< value_schema >()) {
// cerr << lexed.to_string() << endl;
// result << Document::make_from_token(context, lexed, path, line).parse_value_schema();
// if (!lex< exactly<')'> >()) throw_syntax_error("URI is missing ')'");
// result.should_eval() = true;
// }
else {
const char* value = position;
const char* rparen = find_first< exactly<')'> >(position);
if (!rparen) throw_syntax_error("URI is missing ')'");
Token content_tok(Token::make(value, rparen));
Node content_node(context.new_Node(Node::identifier, path, line, content_tok));
// lex< string_constant >();
result << content_node;
position = rparen;
lex< exactly<')'> >();
}
return result;
}
......
......@@ -289,6 +289,11 @@ namespace Sass {
return env[expr.token()];
} break;
case Node::uri: {
expr[0] = eval(expr[0], prefix, env, f_env, new_Node, ctx);
return expr;
} break;
case Node::image_url: {
Node base(eval(expr[0], prefix, env, f_env, new_Node, ctx));
Node prefix(new_Node(Node::identifier, base.path(), base.line(), Token::make(ctx.image_path)));
......
......@@ -271,6 +271,7 @@ namespace Sass {
const char* uri_prefix(const char* src) {
return exactly<url_kwd>(src);
}
// TODO: rename the following two functions
const char* uri(const char* src) {
return sequence< exactly<url_kwd>,
optional<spaces>,
......@@ -278,6 +279,12 @@ namespace Sass {
optional<spaces>,
exactly<')'> >(src);
}
const char* url(const char* src) {
return sequence< optional< sequence< identifier, exactly<':'> > >, // optional protocol
optional< exactly<':'> >, // extra slash
one_plus< sequence< exactly<'/'>, value_schema > >, // one or more folders and/or trailing filename
optional< exactly<'/'> > >(src); // optional trailing slash
}
// Match SCSS image-url function
extern const char image_url_kwd[] = "image-url(";
const char* image_url_prefix(const char* src) {
......
......@@ -354,6 +354,7 @@ namespace Sass {
// Match CSS uri specifiers.
const char* uri_prefix(const char* src);
const char* uri(const char* src);
const char* url(const char* src);
// Match SCSS image-url function.
const char* image_url_prefix(const char* src);
// Match CSS "!important" keyword.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment