Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
node-sass
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
楚学文
node-sass
Commits
d47e4cd9
Commit
d47e4cd9
authored
Sep 17, 2012
by
Aaron Leung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Making the 'url' css function take more dynamic arguments.
parent
fac67038
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
60 additions
and
14 deletions
+60
-14
document.hpp
document.hpp
+1
-0
document_parser.cpp
document_parser.cpp
+37
-9
prelexer.cpp
prelexer.cpp
+18
-5
prelexer.hpp
prelexer.hpp
+4
-0
No files found.
document.hpp
View file @
d47e4cd9
...
@@ -164,6 +164,7 @@ namespace Sass {
...
@@ -164,6 +164,7 @@ namespace Sass {
Node
parse_string
();
Node
parse_string
();
Node
parse_value_schema
();
Node
parse_value_schema
();
Node
parse_identifier_schema
();
Node
parse_identifier_schema
();
Node
parse_url_schema
();
Node
parse_if_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_if_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_for_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_for_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_each_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_each_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
...
...
document_parser.cpp
View file @
d47e4cd9
...
@@ -858,20 +858,19 @@ namespace Sass {
...
@@ -858,20 +858,19 @@ namespace Sass {
Node
result
(
context
.
new_Node
(
Node
::
uri
,
path
,
line
,
1
));
Node
result
(
context
.
new_Node
(
Node
::
uri
,
path
,
line
,
1
));
if
(
lex
<
variable
>
())
{
if
(
lex
<
variable
>
())
{
result
<<
context
.
new_Node
(
Node
::
variable
,
path
,
line
,
lexed
);
result
<<
context
.
new_Node
(
Node
::
variable
,
path
,
line
,
lexed
);
if
(
!
lex
<
exactly
<
')'
>
>
())
throw_syntax_error
(
"URI is missing ')'"
);
result
.
should_eval
()
=
true
;
result
.
should_eval
()
=
true
;
}
}
else
if
(
lex
<
string_constant
>
())
{
else
if
(
lex
<
string_constant
>
())
{
result
<<
parse_string
();
result
<<
parse_string
();
if
(
!
lex
<
exactly
<
')'
>
>
())
throw_syntax_error
(
"URI is missing ')'"
);
result
.
should_eval
()
=
true
;
result
.
should_eval
()
=
true
;
}
}
// else if (lex< value_schema >()) {
else
if
(
lex
<
url_schema
>
())
{
// cerr << lexed.to_string() << endl;
result
<<
Document
::
make_from_token
(
context
,
lexed
,
path
,
line
).
parse_url_schema
();
// result << Document::make_from_token(context, lexed, path, line).parse_value_schema();
result
.
should_eval
()
=
true
;
// if (!lex< exactly<')'> >()) throw_syntax_error("URI is missing ')'");
}
// result.should_eval() = true;
else
if
(
lex
<
url_value
>
())
{
// }
result
<<
context
.
new_Node
(
Node
::
identifier
,
path
,
line
,
lexed
);
}
else
{
else
{
const
char
*
value
=
position
;
const
char
*
value
=
position
;
const
char
*
rparen
=
find_first
<
exactly
<
')'
>
>
(
position
);
const
char
*
rparen
=
find_first
<
exactly
<
')'
>
>
(
position
);
...
@@ -881,8 +880,8 @@ namespace Sass {
...
@@ -881,8 +880,8 @@ namespace Sass {
// lex< string_constant >();
// lex< string_constant >();
result
<<
content_node
;
result
<<
content_node
;
position
=
rparen
;
position
=
rparen
;
lex
<
exactly
<
')'
>
>
();
}
}
if
(
!
lex
<
exactly
<
')'
>
>
())
throw_syntax_error
(
"URI is missing ')'"
);
return
result
;
return
result
;
}
}
...
@@ -1021,6 +1020,35 @@ namespace Sass {
...
@@ -1021,6 +1020,35 @@ namespace Sass {
return
schema
;
return
schema
;
}
}
Node
Document
::
parse_url_schema
()
{
Node
schema
(
context
.
new_Node
(
Node
::
value_schema
,
path
,
line
,
1
));
while
(
position
<
end
)
{
if
(
position
[
0
]
==
'/'
)
{
lexed
=
Token
::
make
(
position
,
position
+
1
);
schema
<<
context
.
new_Node
(
Node
::
identifier
,
path
,
line
,
lexed
);
++
position
;
}
else
if
(
lex
<
interpolant
>
())
{
Token
insides
(
Token
::
make
(
lexed
.
begin
+
2
,
lexed
.
end
-
1
));
Node
interp_node
(
Document
::
make_from_token
(
context
,
insides
,
path
,
line
).
parse_list
());
schema
<<
interp_node
;
}
else
if
(
lex
<
sequence
<
identifier
,
exactly
<
':'
>
>
>
())
{
schema
<<
context
.
new_Node
(
Node
::
identifier
,
path
,
line
,
lexed
);
}
else
if
(
lex
<
filename
>
())
{
schema
<<
context
.
new_Node
(
Node
::
identifier
,
path
,
line
,
lexed
);
}
else
{
throw_syntax_error
(
"error parsing interpolated url"
);
}
}
schema
.
should_eval
()
=
true
;
return
schema
;
}
Node
Document
::
parse_identifier_schema
()
Node
Document
::
parse_identifier_schema
()
{
{
lex
<
sequence
<
optional
<
exactly
<
'*'
>
>
,
identifier_schema
>
>
();
lex
<
sequence
<
optional
<
exactly
<
'*'
>
>
,
identifier_schema
>
>
();
...
...
prelexer.cpp
View file @
d47e4cd9
#include <cctype>
#include <cctype>
#include "prelexer.hpp"
#include "prelexer.hpp"
#include <iostream>
namespace
Sass
{
namespace
Sass
{
namespace
Prelexer
{
namespace
Prelexer
{
using
std
::
cerr
;
using
std
::
endl
;
// Matches zero characters (always succeeds without consuming input).
// Matches zero characters (always succeeds without consuming input).
const
char
*
epsilon
(
char
*
src
)
{
const
char
*
epsilon
(
char
*
src
)
{
return
src
;
return
src
;
...
@@ -94,6 +95,15 @@ namespace Sass {
...
@@ -94,6 +95,15 @@ namespace Sass {
interpolant
,
interpolant
,
zero_plus
<
alternatives
<
identifier
,
percentage
,
dimension
,
hex
,
number
,
string_constant
>
>
>
>
(
src
);
zero_plus
<
alternatives
<
identifier
,
percentage
,
dimension
,
hex
,
number
,
string_constant
>
>
>
>
(
src
);
}
}
const
char
*
filename_schema
(
const
char
*
src
)
{
return
one_plus
<
sequence
<
zero_plus
<
alternatives
<
identifier
,
number
,
exactly
<
'.'
>
,
exactly
<
'/'
>
>
>
,
interpolant
,
zero_plus
<
alternatives
<
identifier
,
number
,
exactly
<
'.'
>
,
exactly
<
'/'
>
>
>
>
>
(
src
);
}
const
char
*
filename
(
const
char
*
src
)
{
return
one_plus
<
alternatives
<
identifier
,
number
,
exactly
<
'.'
>
>
>
(
src
);
}
// Match CSS '@' keywords.
// Match CSS '@' keywords.
const
char
*
at_keyword
(
const
char
*
src
)
{
const
char
*
at_keyword
(
const
char
*
src
)
{
...
@@ -279,11 +289,14 @@ namespace Sass {
...
@@ -279,11 +289,14 @@ namespace Sass {
optional
<
spaces
>
,
optional
<
spaces
>
,
exactly
<
')'
>
>
(
src
);
exactly
<
')'
>
>
(
src
);
}
}
const
char
*
url
(
const
char
*
src
)
{
const
char
*
url_value
(
const
char
*
src
)
{
return
sequence
<
optional
<
sequence
<
identifier
,
exactly
<
':'
>
>
>
,
// optional protocol
one_plus
<
sequence
<
zero_plus
<
exactly
<
'/'
>
>
,
filename
>
>
,
// one or more folders and/or trailing filename
optional
<
exactly
<
'/'
>
>
>
(
src
);
}
const
char
*
url_schema
(
const
char
*
src
)
{
return
sequence
<
optional
<
sequence
<
identifier
,
exactly
<
':'
>
>
>
,
// optional protocol
return
sequence
<
optional
<
sequence
<
identifier
,
exactly
<
':'
>
>
>
,
// optional protocol
optional
<
exactly
<
':'
>
>
,
// extra slash
filename_schema
>
(
src
);
// optional trailing 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
// Match SCSS image-url function
extern
const
char
image_url_kwd
[]
=
"image-url("
;
extern
const
char
image_url_kwd
[]
=
"image-url("
;
...
...
prelexer.hpp
View file @
d47e4cd9
...
@@ -305,6 +305,10 @@ namespace Sass {
...
@@ -305,6 +305,10 @@ namespace Sass {
// Match interpolant schemas
// Match interpolant schemas
const
char
*
identifier_schema
(
const
char
*
src
);
const
char
*
identifier_schema
(
const
char
*
src
);
const
char
*
value_schema
(
const
char
*
src
);
const
char
*
value_schema
(
const
char
*
src
);
const
char
*
filename
(
const
char
*
src
);
const
char
*
filename_schema
(
const
char
*
src
);
const
char
*
url_schema
(
const
char
*
src
);
const
char
*
url_value
(
const
char
*
src
);
// Match CSS '@' keywords.
// Match CSS '@' keywords.
const
char
*
at_keyword
(
const
char
*
src
);
const
char
*
at_keyword
(
const
char
*
src
);
const
char
*
import
(
const
char
*
src
);
const
char
*
import
(
const
char
*
src
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment