CSS-Sass
view release on metacpan or search on metacpan
libsass/prelexer.cpp view on Meta::CPAN
const char* dash_match(const char* src) { return exactly<pipe_equal>(src); }
const char* prefix_match(const char* src) { return exactly<caret_equal>(src); }
const char* suffix_match(const char* src) { return exactly<dollar_equal>(src); }
const char* substring_match(const char* src) { return exactly<star_equal>(src); }
// Match CSS combinators.
/* not used anymore - remove?
const char* adjacent_to(const char* src) {
return sequence< optional_spaces, exactly<'+'> >(src);
}
const char* precedes(const char* src) {
return sequence< optional_spaces, exactly<'~'> >(src);
}
const char* parent_of(const char* src) {
return sequence< optional_spaces, exactly<'>'> >(src);
}
const char* ancestor_of(const char* src) {
return sequence< spaces, negate< exactly<'{'> > >(src);
}*/
// Match SCSS variable names.
const char* variable(const char* src) {
return sequence<exactly<'$'>, identifier>(src);
}
// Match Sass boolean keywords.
const char* kwd_true(const char* src) {
return word<true_kwd>(src);
}
const char* kwd_false(const char* src) {
return word<false_kwd>(src);
}
const char* kwd_and(const char* src) {
return word<and_kwd>(src);
}
const char* kwd_or(const char* src) {
return word<or_kwd>(src);
}
const char* kwd_not(const char* src) {
return word<not_kwd>(src);
}
const char* kwd_eq(const char* src) {
return exactly<eq>(src);
}
const char* kwd_neq(const char* src) {
return exactly<neq>(src);
}
const char* kwd_gt(const char* src) {
return exactly<gt>(src);
}
const char* kwd_gte(const char* src) {
return exactly<gte>(src);
}
const char* kwd_lt(const char* src) {
return exactly<lt>(src);
}
const char* kwd_lte(const char* src) {
return exactly<lte>(src);
}
// match specific IE syntax
const char* ie_progid(const char* src) {
return sequence <
word<progid_kwd>,
exactly<':'>,
alternatives< identifier_schema, identifier >,
zero_plus< sequence<
exactly<'.'>,
alternatives< identifier_schema, identifier >
> >,
zero_plus < sequence<
exactly<'('>,
optional_css_whitespace,
optional < sequence<
alternatives< variable, identifier_schema, identifier >,
optional_css_whitespace,
exactly<'='>,
optional_css_whitespace,
alternatives< variable, identifier_schema, identifier, quoted_string, number, hexa >,
zero_plus< sequence<
optional_css_whitespace,
exactly<','>,
optional_css_whitespace,
sequence<
alternatives< variable, identifier_schema, identifier >,
optional_css_whitespace,
exactly<'='>,
optional_css_whitespace,
alternatives< variable, identifier_schema, identifier, quoted_string, number, hexa >
>
> >
> >,
optional_css_whitespace,
exactly<')'>
> >
>(src);
}
const char* ie_expression(const char* src) {
return sequence < word<expression_kwd>, delimited_by< '(', ')', true> >(src);
}
const char* ie_property(const char* src) {
return alternatives < ie_expression, ie_progid >(src);
}
// const char* ie_args(const char* src) {
// return sequence< alternatives< ie_keyword_arg, value_schema, quoted_string, interpolant, number, identifier, delimited_by< '(', ')', true> >,
// zero_plus< sequence< optional_css_whitespace, exactly<','>, optional_css_whitespace, alternatives< ie_keyword_arg, value_schema, quoted_string, interpolant, number, identifier, delimited_by<'(', ')', true> > > > >(src);
// }
const char* ie_keyword_arg(const char* src) {
return sequence<
alternatives< variable, identifier_schema, identifier >,
optional_css_whitespace,
exactly<'='>,
optional_css_whitespace,
alternatives< variable, identifier_schema, identifier, quoted_string, number, hexa >
>(src);
}
// Path matching functions.
/* not used anymore - remove?
const char* folder(const char* src) {
return sequence< zero_plus< any_char_except<'/'> >,
exactly<'/'> >(src);
}
const char* folders(const char* src) {
return zero_plus< folder >(src);
}*/
/* not used anymore - remove?
const char* chunk(const char* src) {
char inside_str = 0;
const char* p = src;
size_t depth = 0;
while (true) {
if (!*p) {
return 0;
}
else if (!inside_str && (*p == '"' || *p == '\'')) {
inside_str = *p;
}
else if (*p == inside_str && *(p-1) != '\\') {
inside_str = 0;
}
else if (*p == '(' && !inside_str) {
++depth;
}
else if (*p == ')' && !inside_str) {
if (depth == 0) return p;
else --depth;
}
++p;
}
// unreachable
return 0;
}
*/
// follow the CSS spec more closely and see if this helps us scan URLs correctly
/* not used anymore - remove?
const char* NL(const char* src) {
return alternatives< exactly<'\n'>,
sequence< exactly<'\r'>, exactly<'\n'> >,
( run in 1.073 second using v1.01-cache-2.11-cpan-5735350b133 )