CSS-Sass
view release on metacpan or search on metacpan
libsass/lexer.hpp view on Meta::CPAN
#ifndef SASS_LEXER_H
#define SASS_LEXER_H
#include <cstring>
namespace Sass {
namespace Prelexer {
//####################################
// BASIC CHARACTER MATCHERS
//####################################
// Match standard control chars
const char* kwd_at(const char* src);
const char* kwd_dot(const char* src);
const char* kwd_comma(const char* src);
const char* kwd_colon(const char* src);
const char* kwd_star(const char* src);
const char* kwd_plus(const char* src);
const char* kwd_minus(const char* src);
const char* kwd_slash(const char* src);
//####################################
// BASIC CLASS MATCHERS
//####################################
// These are locale independant
const bool is_space(const char& src);
const bool is_alpha(const char& src);
const bool is_punct(const char& src);
const bool is_digit(const char& src);
const bool is_alnum(const char& src);
const bool is_xdigit(const char& src);
const bool is_unicode(const char& src);
const bool is_character(const char& src);
// Match a single ctype predicate.
const char* space(const char* src);
const char* alpha(const char* src);
const char* digit(const char* src);
const char* xdigit(const char* src);
const char* alnum(const char* src);
const char* punct(const char* src);
const char* unicode(const char* src);
const char* character(const char* src);
// Match multiple ctype characters.
const char* spaces(const char* src);
const char* digits(const char* src);
// Whitespace handling.
const char* no_spaces(const char* src);
const char* optional_spaces(const char* src);
// Match any single character (/./).
const char* any_char(const char* src);
// Assert word boundary (/\b/)
// Is a zero-width positive lookaheads
const char* word_boundary(const char* src);
// Match a single linebreak (/(?:\n|\r\n?)/).
const char* re_linebreak(const char* src);
// Assert string boundaries (/\Z|\z|\A/)
// There are zero-width positive lookaheads
const char* end_of_line(const char* src);
// const char* end_of_string(const char* src);
// const char* start_of_string(const char* src);
// Type definition for prelexer functions
typedef const char* (*prelexer)(const char*);
//####################################
// BASIC "REGEX" CONSTRUCTORS
//####################################
// Match a single character literal.
// Regex equivalent: /(?:literal)/
template <char chr>
const char* exactly(const char* src) {
return *src == chr ? src + 1 : 0;
}
// Match a string constant.
// Regex equivalent: /[axy]/
template <const char* str>
const char* exactly(const char* src) {
if (str == 0) return 0;
const char* pre = str;
if (src == 0) return 0;
// there is a small chance that the search string
// is longer than the rest of the string to look at
while (*pre && *src == *pre) {
++src, ++pre;
}
return *pre ? 0 : src;
}
// Match for members of char class.
// Regex equivalent: /[axy]/
template <const char* char_class>
const char* class_char(const char* src) {
const char* cc = char_class;
( run in 1.261 second using v1.01-cache-2.11-cpan-39bf76dae61 )