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
ba11a13c
Commit
ba11a13c
authored
May 30, 2012
by
Aaron Leung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Parsing @if directives.
parent
f1f1d456
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
2 deletions
+30
-2
document.hpp
document.hpp
+2
-0
document_parser.cpp
document_parser.cpp
+28
-2
No files found.
document.hpp
View file @
ba11a13c
...
@@ -160,6 +160,8 @@ namespace Sass {
...
@@ -160,6 +160,8 @@ namespace Sass {
Node
parse_function_call
();
Node
parse_function_call
();
Node
parse_string
();
Node
parse_string
();
Node
parse_value_schema
();
Node
parse_value_schema
();
Node
parse_if_directive
(
Node
surrounding_ruleset
);
Selector_Lookahead
lookahead_for_selector
(
const
char
*
start
=
0
);
Selector_Lookahead
lookahead_for_selector
(
const
char
*
start
=
0
);
...
...
document_parser.cpp
View file @
ba11a13c
...
@@ -36,6 +36,9 @@ namespace Sass {
...
@@ -36,6 +36,9 @@ namespace Sass {
root
<<
parse_mixin_call
();
root
<<
parse_mixin_call
();
if
(
!
lex
<
exactly
<
';'
>
>
())
throw_syntax_error
(
"top-level @include directive must be terminated by ';'"
);
if
(
!
lex
<
exactly
<
';'
>
>
())
throw_syntax_error
(
"top-level @include directive must be terminated by ';'"
);
}
}
else
if
(
peek
<
if_directive
>
())
{
root
<<
parse_if_directive
(
Node
());
}
else
{
else
{
lex
<
spaces_and_comments
>
();
lex
<
spaces_and_comments
>
();
throw_syntax_error
(
"invalid top-level expression"
);
throw_syntax_error
(
"invalid top-level expression"
);
...
@@ -477,13 +480,16 @@ namespace Sass {
...
@@ -477,13 +480,16 @@ namespace Sass {
semicolon
=
true
;
semicolon
=
true
;
}
}
else
if
(
lex
<
extend
>
())
{
else
if
(
lex
<
extend
>
())
{
if
(
surrounding_ruleset
.
is_null_ptr
())
throw_syntax_error
(
"@extend directive may only be used within rules"
);
Node
extendee
(
parse_simple_selector_sequence
());
Node
extendee
(
parse_simple_selector_sequence
());
// context.extensions[extendee] = surrounding_ruleset;
context
.
extensions
.
insert
(
pair
<
Node
,
Node
>
(
extendee
,
surrounding_ruleset
));
context
.
extensions
.
insert
(
pair
<
Node
,
Node
>
(
extendee
,
surrounding_ruleset
));
cerr
<<
"PARSED EXTENSION REQUEST: "
<<
surrounding_ruleset
[
0
].
to_string
()
<<
" EXTENDS "
<<
extendee
.
to_string
()
<<
endl
;
cerr
<<
"PARSED EXTENSION REQUEST: "
<<
surrounding_ruleset
[
0
].
to_string
()
<<
" EXTENDS "
<<
extendee
.
to_string
()
<<
endl
;
context
.
has_extensions
=
true
;
context
.
has_extensions
=
true
;
semicolon
=
true
;
semicolon
=
true
;
}
}
else
if
(
peek
<
if_directive
>
())
{
block
<<
parse_if_directive
(
surrounding_ruleset
);
}
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
...
@@ -871,8 +877,28 @@ namespace Sass {
...
@@ -871,8 +877,28 @@ namespace Sass {
call
.
should_eval
()
=
true
;
call
.
should_eval
()
=
true
;
return
call
;
return
call
;
}
}
Node
Document
::
parse_if_directive
(
Node
surrounding_ruleset
)
{
lex
<
if_directive
>
();
Node
conditional
(
context
.
new_Node
(
Node
::
if_directive
,
path
,
line
,
2
));
conditional
<<
parse_list
();
// the predicate
if
(
!
lex
<
exactly
<
'{'
>
>
())
throw_syntax_error
(
"expected '{' after the predicate for @if"
);
conditional
<<
parse_block
(
surrounding_ruleset
);
// the consequent
// collect all "@else if"s
while
(
lex
<
elseif_directive
>
())
{
conditional
<<
parse_list
();
// the next predicate
if
(
!
lex
<
exactly
<
'{'
>
>
())
throw_syntax_error
(
"expected '{' after the predicate for @else if"
);
conditional
<<
parse_block
(
surrounding_ruleset
);
// the next consequent
}
// parse the "@else" if present
if
(
lex
<
else_directive
>
())
{
if
(
!
lex
<
exactly
<
'{'
>
>
())
throw_syntax_error
(
"expected '{' after @else"
);
conditional
<<
parse_block
(
surrounding_ruleset
);
// the alternative
}
return
conditional
;
}
// const char* Document::lookahead_for_selector(const char* start)
Selector_Lookahead
Document
::
lookahead_for_selector
(
const
char
*
start
)
Selector_Lookahead
Document
::
lookahead_for_selector
(
const
char
*
start
)
{
{
const
char
*
p
=
start
?
start
:
position
;
const
char
*
p
=
start
?
start
:
position
;
...
...
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