Commit 44c140ed by Aaron Leung

Forgot to handle :not(...) as a special case of functional pseudo-classes.

parent 7dff7a7b
...@@ -5,14 +5,12 @@ ...@@ -5,14 +5,12 @@
namespace Sass { namespace Sass {
Document::Document(string path, char* source) Document::Document(string path, char* source)
: path(path), source(source), //source_refs(vector<char*>()), : path(path), source(source),
line_number(1), own_source(false), line_number(1), own_source(false),
context(*(new Context())), context(*(new Context())),
root(Node(1, Node::root)), root(Node(1, Node::root)),
// statements(vector<Node>()),
lexed(Token()) lexed(Token())
{ {
// if (!source) read_file();
if (!source) { if (!source) {
std::FILE *f; std::FILE *f;
// TO DO: CHECK f AGAINST NULL/0 // TO DO: CHECK f AGAINST NULL/0
...@@ -33,11 +31,10 @@ namespace Sass { ...@@ -33,11 +31,10 @@ namespace Sass {
} }
Document::Document(string path, Context& context) Document::Document(string path, Context& context)
: path(path), source(0), //source_refs(vector<char*>()), : path(path), source(0),
line_number(1), own_source(false), line_number(1), own_source(false),
context(context), context(context),
root(Node(1, Node::root)), root(Node(1, Node::root)),
// statements(vector<Node>()),
lexed(Token()) lexed(Token())
{ {
std::FILE *f; std::FILE *f;
...@@ -57,12 +54,8 @@ namespace Sass { ...@@ -57,12 +54,8 @@ namespace Sass {
} }
Document::~Document() { Document::~Document() {
// if (own_source) delete [] source;
--context.ref_count; --context.ref_count;
if (context.ref_count == 0) delete &context; if (context.ref_count == 0) delete &context;
// for (int i = 0; i < source_refs.size(); ++i) {
// delete [] source_refs[i];
// }
} }
} }
\ No newline at end of file
...@@ -130,7 +130,14 @@ namespace Sass { ...@@ -130,7 +130,14 @@ namespace Sass {
} }
Node Document::parse_pseudo() { Node Document::parse_pseudo() {
if (lex< sequence< pseudo_prefix, functional > >()) { if (lex< pseudo_not >()) {
Node ps_not(line_number, Node::functional_pseudo, 2);
ps_not << Node(line_number, Node::value, lexed);
ps_not << parse_simple_selector();
lex< exactly<')'> >();
return ps_not;
}
else if (lex< sequence< pseudo_prefix, functional > >()) {
Node pseudo(line_number, Node::functional_pseudo, 2); Node pseudo(line_number, Node::functional_pseudo, 2);
pseudo << Node(line_number, Node::value, lexed); pseudo << Node(line_number, Node::value, lexed);
if (lex< alternatives< even, odd > >()) { if (lex< alternatives< even, odd > >()) {
......
...@@ -24,6 +24,7 @@ namespace Sass { ...@@ -24,6 +24,7 @@ namespace Sass {
class_selector, class_selector,
id_selector, id_selector,
pseudo, pseudo,
pseudo_negation,
functional_pseudo, functional_pseudo,
attribute_selector, attribute_selector,
block, block,
......
...@@ -165,6 +165,11 @@ namespace Sass { ...@@ -165,6 +165,11 @@ namespace Sass {
const char* functional(const char* src) { const char* functional(const char* src) {
return sequence< identifier, exactly<'('> >(src); return sequence< identifier, exactly<'('> >(src);
} }
// Match the CSS negation pseudo-class.
extern const char not_kwd[] = ":not(";
const char* pseudo_not(const char* src) {
return exactly< not_kwd >(src);
}
// Match CSS 'odd' and 'even' keywords for functional pseudo-classes. // Match CSS 'odd' and 'even' keywords for functional pseudo-classes.
extern const char even_chars[] = "even"; extern const char even_chars[] = "even";
extern const char odd_chars[] = "odd"; extern const char odd_chars[] = "odd";
......
...@@ -298,6 +298,7 @@ namespace Sass { ...@@ -298,6 +298,7 @@ namespace Sass {
const char* pseudo_prefix(const char* src); const char* pseudo_prefix(const char* src);
// Match CSS function call openers. // Match CSS function call openers.
const char* functional(const char* src); const char* functional(const char* src);
const char* pseudo_not(const char* src);
// Match CSS 'odd' and 'even' keywords for functional pseudo-classes. // Match CSS 'odd' and 'even' keywords for functional pseudo-classes.
const char* even(const char* src); const char* even(const char* src);
const char* odd(const char* src); const char* odd(const char* src);
......
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