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
5c16dd51
Commit
5c16dd51
authored
Jun 15, 2012
by
Aaron Leung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Parsing and evaluating arbitrary directives.
parent
60e53749
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
54 additions
and
5 deletions
+54
-5
document.hpp
document.hpp
+1
-0
document_parser.cpp
document_parser.cpp
+23
-0
eval_apply.cpp
eval_apply.cpp
+6
-0
node.hpp
node.hpp
+18
-5
prelexer.cpp
prelexer.cpp
+4
-0
prelexer.hpp
prelexer.hpp
+2
-0
No files found.
document.hpp
View file @
5c16dd51
...
@@ -166,6 +166,7 @@ namespace Sass {
...
@@ -166,6 +166,7 @@ namespace Sass {
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
);
Node
parse_while_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_while_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_media_query
(
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_media_query
(
Node
::
Type
inside_of
=
Node
::
none
);
Node
parse_media_expression
();
Node
parse_media_expression
();
Node
parse_warning
();
Node
parse_warning
();
...
...
document_parser.cpp
View file @
5c16dd51
...
@@ -58,6 +58,13 @@ namespace Sass {
...
@@ -58,6 +58,13 @@ namespace Sass {
root
<<
parse_warning
();
root
<<
parse_warning
();
if
(
!
lex
<
exactly
<
';'
>
>
())
throw_syntax_error
(
"top-level @warn directive must be terminated by ';'"
);
if
(
!
lex
<
exactly
<
';'
>
>
())
throw_syntax_error
(
"top-level @warn directive must be terminated by ';'"
);
}
}
else
if
(
peek
<
directive
>
())
{
Node
dir
(
parse_directive
(
Node
(),
Node
::
none
));
if
(
dir
.
type
()
==
Node
::
blockless_directive
)
{
if
(
!
lex
<
exactly
<
';'
>
>
())
throw_syntax_error
(
"top-level blockless directive must be terminated by ';'"
);
}
root
<<
dir
;
}
else
if
(
peek
<
spaces
>
()
||
peek
<
block_comment
>
()
||
peek
<
line_comment
>
())
{
else
if
(
peek
<
spaces
>
()
||
peek
<
block_comment
>
()
||
peek
<
line_comment
>
())
{
lex
<
spaces_and_comments
>
();
lex
<
spaces_and_comments
>
();
continue
;
continue
;
...
@@ -553,6 +560,11 @@ namespace Sass {
...
@@ -553,6 +560,11 @@ namespace Sass {
else
if
(
peek
<
media
>
())
{
else
if
(
peek
<
media
>
())
{
block
<<
parse_media_query
(
inside_of
);
block
<<
parse_media_query
(
inside_of
);
}
}
else
if
(
peek
<
directive
>
())
{
Node
dir
(
parse_directive
(
surrounding_ruleset
,
inside_of
));
if
(
dir
.
type
()
==
Node
::
blockless_directive
)
semicolon
=
true
;
block
<<
dir
;
}
else
if
(
!
peek
<
exactly
<
';'
>
>
())
{
else
if
(
!
peek
<
exactly
<
';'
>
>
())
{
Node
rule
(
parse_rule
());
Node
rule
(
parse_rule
());
// check for lbrace; if it's there, we have a namespace property with a value
// check for lbrace; if it's there, we have a namespace property with a value
...
@@ -1055,6 +1067,17 @@ namespace Sass {
...
@@ -1055,6 +1067,17 @@ namespace Sass {
return
loop
;
return
loop
;
}
}
Node
Document
::
parse_directive
(
Node
surrounding_ruleset
,
Node
::
Type
inside_of
)
{
lex
<
directive
>
();
Node
dir_name
(
context
.
new_Node
(
Node
::
blockless_directive
,
path
,
line
,
lexed
));
if
(
!
peek
<
exactly
<
'{'
>
>
())
return
dir_name
;
Node
block
(
parse_block
(
surrounding_ruleset
,
inside_of
));
Node
dir
(
context
.
new_Node
(
Node
::
block_directive
,
path
,
line
,
2
));
dir
<<
dir_name
<<
block
;
return
dir
;
}
Node
Document
::
parse_media_query
(
Node
::
Type
inside_of
)
Node
Document
::
parse_media_query
(
Node
::
Type
inside_of
)
{
{
lex
<
media
>
();
lex
<
media
>
();
...
...
eval_apply.cpp
View file @
5c16dd51
...
@@ -407,6 +407,12 @@ namespace Sass {
...
@@ -407,6 +407,12 @@ namespace Sass {
}
}
}
break
;
}
break
;
case
Node
:
:
block_directive
:
{
// TO DO: eval the directive name for interpolants
eval
(
expr
[
1
],
new_Node
(
Node
::
none
,
expr
.
path
(),
expr
.
line
(),
0
),
env
,
f_env
,
new_Node
,
ctx
);
return
expr
;
}
break
;
case
Node
:
:
warning
:
{
case
Node
:
:
warning
:
{
expr
[
0
]
=
eval
(
expr
[
0
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
expr
[
0
]
=
eval
(
expr
[
0
],
prefix
,
env
,
f_env
,
new_Node
,
ctx
);
return
expr
;
return
expr
;
...
...
node.hpp
View file @
5c16dd51
...
@@ -164,6 +164,9 @@ namespace Sass {
...
@@ -164,6 +164,9 @@ namespace Sass {
warning
,
warning
,
block_directive
,
blockless_directive
,
variable
,
variable
,
assignment
assignment
};
};
...
@@ -297,21 +300,31 @@ namespace Sass {
...
@@ -297,21 +300,31 @@ namespace Sass {
case
Node
:
:
css_import
:
case
Node
:
:
css_import
:
case
Node
:
:
rule
:
case
Node
:
:
rule
:
case
Node
:
:
propset
:
case
Node
:
:
propset
:
case
Node
:
:
warning
:
has_statements
=
true
;
break
;
case
Node
:
:
warning
:
case
Node
:
:
block_directive
:
case
Node
:
:
blockless_directive
:
{
has_statements
=
true
;
}
break
;
case
Node
:
:
media_query
:
case
Node
:
:
media_query
:
case
Node
:
:
ruleset
:
has_blocks
=
true
;
break
;
case
Node
:
:
ruleset
:
{
has_blocks
=
true
;
}
break
;
case
Node
:
:
if_directive
:
case
Node
:
:
if_directive
:
case
Node
:
:
for_through_directive
:
case
Node
:
:
for_through_directive
:
case
Node
:
:
for_to_directive
:
case
Node
:
:
for_to_directive
:
case
Node
:
:
each_directive
:
case
Node
:
:
each_directive
:
case
Node
:
:
while_directive
:
case
Node
:
:
while_directive
:
case
Node
:
:
expansion
:
has_expansions
=
true
;
break
;
case
Node
:
:
expansion
:
{
has_expansions
=
true
;
}
break
;
case
Node
:
:
backref
:
has_backref
=
true
;
break
;
case
Node
:
:
backref
:
{
has_backref
=
true
;
}
break
;
default
:
break
;
default
:
break
;
}
}
if
(
n
.
has_backref
())
has_backref
=
true
;
if
(
n
.
has_backref
())
has_backref
=
true
;
}
}
...
...
prelexer.cpp
View file @
5c16dd51
...
@@ -185,6 +185,10 @@ namespace Sass {
...
@@ -185,6 +185,10 @@ namespace Sass {
return
exactly
<
warn_kwd
>
(
src
);
return
exactly
<
warn_kwd
>
(
src
);
}
}
const
char
*
directive
(
const
char
*
src
)
{
return
sequence
<
exactly
<
'@'
>
,
identifier
>
(
src
);
}
// Match CSS type selectors
// Match CSS type selectors
const
char
*
namespace_prefix
(
const
char
*
src
)
{
const
char
*
namespace_prefix
(
const
char
*
src
)
{
return
sequence
<
optional
<
alternatives
<
identifier
,
exactly
<
'*'
>
>
>
,
return
sequence
<
optional
<
alternatives
<
identifier
,
exactly
<
'*'
>
>
>
,
...
...
prelexer.hpp
View file @
5c16dd51
...
@@ -331,6 +331,8 @@ namespace Sass {
...
@@ -331,6 +331,8 @@ namespace Sass {
const
char
*
warn
(
const
char
*
src
);
const
char
*
warn
(
const
char
*
src
);
const
char
*
directive
(
const
char
*
src
);
// Match CSS type selectors
// Match CSS type selectors
const
char
*
namespace_prefix
(
const
char
*
src
);
const
char
*
namespace_prefix
(
const
char
*
src
);
const
char
*
type_selector
(
const
char
*
src
);
const
char
*
type_selector
(
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