sassc 1.7.1 → 1.8.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/ext/libsass/.gitignore +10 -6
- data/ext/libsass/.travis.yml +4 -1
- data/ext/libsass/GNUmakefile.am +88 -0
- data/ext/libsass/Makefile +157 -76
- data/ext/libsass/Makefile.conf +47 -0
- data/ext/libsass/Readme.md +13 -14
- data/ext/libsass/appveyor.yml +25 -41
- data/ext/libsass/configure.ac +20 -7
- data/ext/libsass/contrib/plugin.cpp +1 -1
- data/ext/libsass/include/sass.h +15 -0
- data/ext/libsass/{sass.h → include/sass/base.h} +17 -9
- data/ext/libsass/{sass_context.h → include/sass/context.h} +3 -1
- data/ext/libsass/{sass_functions.h → include/sass/functions.h} +4 -4
- data/ext/libsass/{sass_interface.h → include/sass/interface.h} +5 -2
- data/ext/libsass/{sass_values.h → include/sass/values.h} +15 -1
- data/ext/libsass/{sass_version.h → include/sass/version.h} +0 -0
- data/ext/libsass/{sass_version.h.in → include/sass/version.h.in} +0 -0
- data/ext/libsass/{sass2scss.h → include/sass2scss.h} +6 -7
- data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +167 -0
- data/ext/libsass/script/ci-build-libsass +67 -23
- data/ext/libsass/src/GNUmakefile.am +54 -0
- data/ext/libsass/src/ast.cpp +2029 -0
- data/ext/libsass/{ast.hpp → src/ast.hpp} +832 -660
- data/ext/libsass/src/ast_def_macros.hpp +47 -0
- data/ext/libsass/src/ast_factory.hpp +93 -0
- data/ext/libsass/{ast_fwd_decl.hpp → src/ast_fwd_decl.hpp} +9 -4
- data/ext/libsass/{b64 → src/b64}/cencode.h +1 -1
- data/ext/libsass/{b64 → src/b64}/encode.h +0 -0
- data/ext/libsass/{backtrace.hpp → src/backtrace.hpp} +9 -10
- data/ext/libsass/{base64vlq.cpp → src/base64vlq.cpp} +2 -2
- data/ext/libsass/{base64vlq.hpp → src/base64vlq.hpp} +1 -2
- data/ext/libsass/{bind.cpp → src/bind.cpp} +96 -59
- data/ext/libsass/{bind.hpp → src/bind.hpp} +1 -1
- data/ext/libsass/src/c99func.c +54 -0
- data/ext/libsass/{cencode.c → src/cencode.c} +5 -5
- data/ext/libsass/src/color_maps.cpp +643 -0
- data/ext/libsass/src/color_maps.hpp +333 -0
- data/ext/libsass/{constants.cpp → src/constants.cpp} +10 -1
- data/ext/libsass/{constants.hpp → src/constants.hpp} +7 -0
- data/ext/libsass/{context.cpp → src/context.cpp} +152 -122
- data/ext/libsass/src/context.hpp +150 -0
- data/ext/libsass/{cssize.cpp → src/cssize.cpp} +123 -109
- data/ext/libsass/{cssize.hpp → src/cssize.hpp} +9 -13
- data/ext/libsass/{debug.hpp → src/debug.hpp} +9 -9
- data/ext/libsass/src/debugger.hpp +683 -0
- data/ext/libsass/{emitter.cpp → src/emitter.cpp} +13 -13
- data/ext/libsass/{emitter.hpp → src/emitter.hpp} +10 -11
- data/ext/libsass/src/environment.cpp +184 -0
- data/ext/libsass/src/environment.hpp +92 -0
- data/ext/libsass/src/error_handling.cpp +46 -0
- data/ext/libsass/src/error_handling.hpp +34 -0
- data/ext/libsass/src/eval.cpp +1462 -0
- data/ext/libsass/src/eval.hpp +107 -0
- data/ext/libsass/src/expand.cpp +653 -0
- data/ext/libsass/{expand.hpp → src/expand.hpp} +17 -16
- data/ext/libsass/{extend.cpp → src/extend.cpp} +198 -139
- data/ext/libsass/{extend.hpp → src/extend.hpp} +7 -8
- data/ext/libsass/{file.cpp → src/file.cpp} +103 -57
- data/ext/libsass/{file.hpp → src/file.hpp} +23 -14
- data/ext/libsass/{functions.cpp → src/functions.cpp} +642 -333
- data/ext/libsass/{functions.hpp → src/functions.hpp} +17 -4
- data/ext/libsass/{inspect.cpp → src/inspect.cpp} +147 -260
- data/ext/libsass/{inspect.hpp → src/inspect.hpp} +7 -7
- data/ext/libsass/{json.cpp → src/json.cpp} +33 -43
- data/ext/libsass/{json.hpp → src/json.hpp} +1 -1
- data/ext/libsass/{kwd_arg_macros.hpp → src/kwd_arg_macros.hpp} +0 -0
- data/ext/libsass/{lexer.cpp → src/lexer.cpp} +28 -0
- data/ext/libsass/{lexer.hpp → src/lexer.hpp} +25 -10
- data/ext/libsass/{listize.cpp → src/listize.cpp} +17 -13
- data/ext/libsass/{listize.hpp → src/listize.hpp} +0 -2
- data/ext/libsass/{mapping.hpp → src/mapping.hpp} +0 -0
- data/ext/libsass/src/memory_manager.cpp +76 -0
- data/ext/libsass/src/memory_manager.hpp +48 -0
- data/ext/libsass/{node.cpp → src/node.cpp} +89 -18
- data/ext/libsass/{node.hpp → src/node.hpp} +5 -6
- data/ext/libsass/{operation.hpp → src/operation.hpp} +18 -12
- data/ext/libsass/{output.cpp → src/output.cpp} +47 -55
- data/ext/libsass/{output.hpp → src/output.hpp} +5 -4
- data/ext/libsass/src/parser.cpp +2529 -0
- data/ext/libsass/{parser.hpp → src/parser.hpp} +84 -60
- data/ext/libsass/{paths.hpp → src/paths.hpp} +10 -13
- data/ext/libsass/{plugins.cpp → src/plugins.cpp} +14 -17
- data/ext/libsass/{plugins.hpp → src/plugins.hpp} +10 -11
- data/ext/libsass/{position.cpp → src/position.cpp} +5 -6
- data/ext/libsass/{position.hpp → src/position.hpp} +19 -22
- data/ext/libsass/{prelexer.cpp → src/prelexer.cpp} +401 -53
- data/ext/libsass/{prelexer.hpp → src/prelexer.hpp} +50 -10
- data/ext/libsass/{remove_placeholders.cpp → src/remove_placeholders.cpp} +12 -16
- data/ext/libsass/{remove_placeholders.hpp → src/remove_placeholders.hpp} +1 -7
- data/ext/libsass/{sass.cpp → src/sass.cpp} +3 -5
- data/ext/libsass/{sass2scss.cpp → src/sass2scss.cpp} +51 -46
- data/ext/libsass/{sass_context.cpp → src/sass_context.cpp} +114 -112
- data/ext/libsass/{sass_functions.cpp → src/sass_functions.cpp} +11 -18
- data/ext/libsass/{sass_interface.cpp → src/sass_interface.cpp} +44 -81
- data/ext/libsass/{sass_util.cpp → src/sass_util.cpp} +26 -8
- data/ext/libsass/{sass_util.hpp → src/sass_util.hpp} +14 -18
- data/ext/libsass/{sass_values.cpp → src/sass_values.cpp} +91 -20
- data/ext/libsass/{source_map.cpp → src/source_map.cpp} +13 -13
- data/ext/libsass/{source_map.hpp → src/source_map.hpp} +9 -9
- data/ext/libsass/{subset_map.hpp → src/subset_map.hpp} +29 -31
- data/ext/libsass/{support → src/support}/libsass.pc.in +0 -0
- data/ext/libsass/src/to_c.cpp +73 -0
- data/ext/libsass/src/to_c.hpp +41 -0
- data/ext/libsass/src/to_string.cpp +47 -0
- data/ext/libsass/{to_string.hpp → src/to_string.hpp} +9 -7
- data/ext/libsass/src/to_value.cpp +109 -0
- data/ext/libsass/src/to_value.hpp +50 -0
- data/ext/libsass/{units.cpp → src/units.cpp} +56 -51
- data/ext/libsass/{units.hpp → src/units.hpp} +8 -9
- data/ext/libsass/{utf8.h → src/utf8.h} +0 -0
- data/ext/libsass/{utf8 → src/utf8}/checked.h +0 -0
- data/ext/libsass/{utf8 → src/utf8}/core.h +12 -12
- data/ext/libsass/{utf8 → src/utf8}/unchecked.h +0 -0
- data/ext/libsass/{utf8_string.cpp → src/utf8_string.cpp} +0 -0
- data/ext/libsass/{utf8_string.hpp → src/utf8_string.hpp} +6 -6
- data/ext/libsass/{util.cpp → src/util.cpp} +144 -86
- data/ext/libsass/src/util.hpp +59 -0
- data/ext/libsass/src/values.cpp +137 -0
- data/ext/libsass/src/values.hpp +12 -0
- data/ext/libsass/test/test_node.cpp +33 -33
- data/ext/libsass/test/test_paths.cpp +5 -6
- data/ext/libsass/test/test_selector_difference.cpp +4 -5
- data/ext/libsass/test/test_specificity.cpp +4 -5
- data/ext/libsass/test/test_subset_map.cpp +91 -91
- data/ext/libsass/test/test_superselector.cpp +11 -11
- data/ext/libsass/test/test_unification.cpp +4 -4
- data/ext/libsass/win/libsass.targets +101 -0
- data/ext/libsass/win/libsass.vcxproj +45 -127
- data/ext/libsass/win/libsass.vcxproj.filters +303 -0
- data/lib/sassc/import_handler.rb +1 -1
- data/lib/sassc/native/native_functions_api.rb +3 -3
- data/lib/sassc/version.rb +1 -1
- data/test/custom_importer_test.rb +1 -4
- data/test/functions_test.rb +3 -2
- data/test/native_test.rb +4 -3
- metadata +117 -110
- data/ext/libsass/Makefile.am +0 -146
- data/ext/libsass/ast.cpp +0 -945
- data/ext/libsass/ast_def_macros.hpp +0 -21
- data/ext/libsass/ast_factory.hpp +0 -92
- data/ext/libsass/color_names.hpp +0 -327
- data/ext/libsass/context.hpp +0 -157
- data/ext/libsass/contextualize.cpp +0 -148
- data/ext/libsass/contextualize.hpp +0 -46
- data/ext/libsass/contextualize_eval.cpp +0 -93
- data/ext/libsass/contextualize_eval.hpp +0 -44
- data/ext/libsass/debugger.hpp +0 -558
- data/ext/libsass/environment.hpp +0 -163
- data/ext/libsass/error_handling.cpp +0 -35
- data/ext/libsass/error_handling.hpp +0 -32
- data/ext/libsass/eval.cpp +0 -1392
- data/ext/libsass/eval.hpp +0 -88
- data/ext/libsass/expand.cpp +0 -575
- data/ext/libsass/memory_manager.hpp +0 -57
- data/ext/libsass/parser.cpp +0 -2403
- data/ext/libsass/posix/getopt.c +0 -562
- data/ext/libsass/posix/getopt.h +0 -95
- data/ext/libsass/to_c.cpp +0 -61
- data/ext/libsass/to_c.hpp +0 -44
- data/ext/libsass/to_string.cpp +0 -34
- data/ext/libsass/util.hpp +0 -54
- data/ext/libsass/win/libsass.filters +0 -312
@@ -4,7 +4,7 @@
|
|
4
4
|
#include <string>
|
5
5
|
#include <vector>
|
6
6
|
#include "utf8_string.hpp"
|
7
|
-
#include "
|
7
|
+
#include "sass/functions.h"
|
8
8
|
|
9
9
|
#ifdef _WIN32
|
10
10
|
|
@@ -27,7 +27,6 @@
|
|
27
27
|
|
28
28
|
namespace Sass {
|
29
29
|
|
30
|
-
using namespace std;
|
31
30
|
|
32
31
|
class Plugins {
|
33
32
|
|
@@ -37,22 +36,22 @@ namespace Sass {
|
|
37
36
|
|
38
37
|
public: // methods
|
39
38
|
// load one specific plugin
|
40
|
-
bool load_plugin(const string& path);
|
39
|
+
bool load_plugin(const std::string& path);
|
41
40
|
// load all plugins from a directory
|
42
|
-
size_t load_plugins(const string& path);
|
41
|
+
size_t load_plugins(const std::string& path);
|
43
42
|
|
44
43
|
public: // public accessors
|
45
|
-
const vector<Sass_Importer_Entry> get_headers(void) { return headers; }
|
46
|
-
const vector<Sass_Importer_Entry> get_importers(void) { return importers; }
|
47
|
-
const vector<Sass_Function_Entry> get_functions(void) { return functions; }
|
44
|
+
const std::vector<Sass_Importer_Entry> get_headers(void) { return headers; }
|
45
|
+
const std::vector<Sass_Importer_Entry> get_importers(void) { return importers; }
|
46
|
+
const std::vector<Sass_Function_Entry> get_functions(void) { return functions; }
|
48
47
|
|
49
48
|
private: // private vars
|
50
|
-
vector<Sass_Importer_Entry> headers;
|
51
|
-
vector<Sass_Importer_Entry> importers;
|
52
|
-
vector<Sass_Function_Entry> functions;
|
49
|
+
std::vector<Sass_Importer_Entry> headers;
|
50
|
+
std::vector<Sass_Importer_Entry> importers;
|
51
|
+
std::vector<Sass_Function_Entry> functions;
|
53
52
|
|
54
53
|
};
|
55
54
|
|
56
55
|
}
|
57
56
|
|
58
|
-
#endif
|
57
|
+
#endif
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
namespace Sass {
|
4
4
|
|
5
|
-
using namespace std;
|
6
5
|
|
7
6
|
Offset::Offset(const char* string)
|
8
7
|
: line(0), column(0)
|
@@ -10,7 +9,7 @@ namespace Sass {
|
|
10
9
|
*this = inc(string, string + strlen(string));
|
11
10
|
}
|
12
11
|
|
13
|
-
Offset::Offset(const string& text)
|
12
|
+
Offset::Offset(const std::string& text)
|
14
13
|
: line(0), column(0)
|
15
14
|
{
|
16
15
|
*this = inc(text.c_str(), text.c_str() + text.size());
|
@@ -96,13 +95,13 @@ namespace Sass {
|
|
96
95
|
: Offset(line, column), file(file) { }
|
97
96
|
|
98
97
|
|
99
|
-
ParserState::ParserState(
|
98
|
+
ParserState::ParserState(const char* path, const char* src, const size_t file)
|
100
99
|
: Position(file, 0, 0), path(path), src(src), offset(0, 0), token() { }
|
101
100
|
|
102
|
-
ParserState::ParserState(
|
101
|
+
ParserState::ParserState(const char* path, const char* src, const Position& position, Offset offset)
|
103
102
|
: Position(position), path(path), src(src), offset(offset), token() { }
|
104
103
|
|
105
|
-
ParserState::ParserState(
|
104
|
+
ParserState::ParserState(const char* path, const char* src, const Token& token, const Position& position, Offset offset)
|
106
105
|
: Position(position), path(path), src(src), offset(offset), token(token) { }
|
107
106
|
|
108
107
|
Position Position::add(const char* begin, const char* end)
|
@@ -160,4 +159,4 @@ namespace Sass {
|
|
160
159
|
return strm;
|
161
160
|
} */
|
162
161
|
|
163
|
-
}
|
162
|
+
}
|
@@ -3,19 +3,16 @@
|
|
3
3
|
|
4
4
|
#include <string>
|
5
5
|
#include <cstring>
|
6
|
-
#include <
|
7
|
-
#include <sstream>
|
8
|
-
#include <iostream>
|
6
|
+
// #include <iostream>
|
9
7
|
|
10
8
|
namespace Sass {
|
11
9
|
|
12
|
-
using namespace std;
|
13
10
|
|
14
11
|
class Offset {
|
15
12
|
|
16
13
|
public: // c-tor
|
17
14
|
Offset(const char* string);
|
18
|
-
Offset(const string& text);
|
15
|
+
Offset(const std::string& text);
|
19
16
|
Offset(const size_t line, const size_t column);
|
20
17
|
|
21
18
|
// return new position, incremented by the given string
|
@@ -33,10 +30,10 @@ namespace Sass {
|
|
33
30
|
Offset operator- (const Offset &off) const;
|
34
31
|
|
35
32
|
public: // overload output stream operator
|
36
|
-
// friend ostream& operator<<(ostream& strm, const Offset& off);
|
33
|
+
// friend std::ostream& operator<<(std::ostream& strm, const Offset& off);
|
37
34
|
|
38
35
|
public:
|
39
|
-
Offset off() { return *this; }
|
36
|
+
Offset off() { return *this; }
|
40
37
|
|
41
38
|
public:
|
42
39
|
size_t line;
|
@@ -63,7 +60,7 @@ namespace Sass {
|
|
63
60
|
Position inc(const char* begin, const char* end) const;
|
64
61
|
|
65
62
|
public: // overload output stream operator
|
66
|
-
// friend ostream& operator<<(ostream& strm, const Position& pos);
|
63
|
+
// friend std::ostream& operator<<(std::ostream& strm, const Position& pos);
|
67
64
|
|
68
65
|
public:
|
69
66
|
size_t file;
|
@@ -87,16 +84,16 @@ namespace Sass {
|
|
87
84
|
: prefix(p), begin(b), end(e) { }
|
88
85
|
|
89
86
|
size_t length() const { return end - begin; }
|
90
|
-
string ws_before() const { return string(prefix, begin); }
|
91
|
-
string to_string() const { return string(begin, end); }
|
92
|
-
string time_wspace() const {
|
93
|
-
string str(to_string());
|
94
|
-
string whitespaces(" \t\f\v\n\r");
|
87
|
+
std::string ws_before() const { return std::string(prefix, begin); }
|
88
|
+
std::string to_string() const { return std::string(begin, end); }
|
89
|
+
std::string time_wspace() const {
|
90
|
+
std::string str(to_string());
|
91
|
+
std::string whitespaces(" \t\f\v\n\r");
|
95
92
|
return str.erase(str.find_last_not_of(whitespaces)+1);
|
96
93
|
}
|
97
94
|
|
98
|
-
operator bool()
|
99
|
-
operator string() { return to_string(); }
|
95
|
+
operator bool() { return begin && end && begin >= end; }
|
96
|
+
operator std::string() { return to_string(); }
|
100
97
|
|
101
98
|
bool operator==(Token t) { return to_string() == t.to_string(); }
|
102
99
|
};
|
@@ -104,17 +101,17 @@ namespace Sass {
|
|
104
101
|
class ParserState : public Position {
|
105
102
|
|
106
103
|
public: // c-tor
|
107
|
-
ParserState(
|
108
|
-
ParserState(
|
109
|
-
ParserState(
|
104
|
+
ParserState(const char* path, const char* src = 0, const size_t file = std::string::npos);
|
105
|
+
ParserState(const char* path, const char* src, const Position& position, Offset offset = Offset(0, 0));
|
106
|
+
ParserState(const char* path, const char* src, const Token& token, const Position& position, Offset offset = Offset(0, 0));
|
110
107
|
|
111
108
|
public: // down casts
|
112
|
-
Offset off() { return *this; }
|
113
|
-
Position pos() { return *this; }
|
114
|
-
ParserState pstate() { return *this; }
|
109
|
+
Offset off() { return *this; }
|
110
|
+
Position pos() { return *this; }
|
111
|
+
ParserState pstate() { return *this; }
|
115
112
|
|
116
113
|
public:
|
117
|
-
|
114
|
+
const char* path;
|
118
115
|
const char* src;
|
119
116
|
Offset offset;
|
120
117
|
Token token;
|
@@ -33,7 +33,6 @@ namespace Sass {
|
|
33
33
|
const char* block_comment(const char* src)
|
34
34
|
{
|
35
35
|
return sequence<
|
36
|
-
zero_plus < space >,
|
37
36
|
delimited_by<
|
38
37
|
slash_star,
|
39
38
|
star_slash,
|
@@ -71,7 +70,15 @@ namespace Sass {
|
|
71
70
|
{
|
72
71
|
return sequence<
|
73
72
|
exactly<'\\'>,
|
74
|
-
|
73
|
+
alternatives <
|
74
|
+
minmax_range<
|
75
|
+
1, 3, xdigit
|
76
|
+
>,
|
77
|
+
any_char
|
78
|
+
>,
|
79
|
+
optional <
|
80
|
+
exactly <' '>
|
81
|
+
>
|
75
82
|
>(src);
|
76
83
|
}
|
77
84
|
|
@@ -79,6 +86,7 @@ namespace Sass {
|
|
79
86
|
const char* identifier_alpha(const char* src)
|
80
87
|
{
|
81
88
|
return alternatives<
|
89
|
+
unicode_seq,
|
82
90
|
alpha,
|
83
91
|
unicode,
|
84
92
|
exactly<'-'>,
|
@@ -91,6 +99,7 @@ namespace Sass {
|
|
91
99
|
const char* identifier_alnum(const char* src)
|
92
100
|
{
|
93
101
|
return alternatives<
|
102
|
+
unicode_seq,
|
94
103
|
alnum,
|
95
104
|
unicode,
|
96
105
|
exactly<'-'>,
|
@@ -99,6 +108,16 @@ namespace Sass {
|
|
99
108
|
>(src);
|
100
109
|
}
|
101
110
|
|
111
|
+
// Match CSS identifiers.
|
112
|
+
const char* strict_identifier(const char* src)
|
113
|
+
{
|
114
|
+
return sequence<
|
115
|
+
one_plus < strict_identifier_alpha >,
|
116
|
+
zero_plus < strict_identifier_alnum >
|
117
|
+
// word_boundary not needed
|
118
|
+
>(src);
|
119
|
+
}
|
120
|
+
|
102
121
|
// Match CSS identifiers.
|
103
122
|
const char* identifier(const char* src)
|
104
123
|
{
|
@@ -110,6 +129,42 @@ namespace Sass {
|
|
110
129
|
>(src);
|
111
130
|
}
|
112
131
|
|
132
|
+
const char* strict_identifier_alpha(const char* src)
|
133
|
+
{
|
134
|
+
return alternatives <
|
135
|
+
alpha,
|
136
|
+
unicode,
|
137
|
+
escape_seq,
|
138
|
+
exactly<'_'>
|
139
|
+
>(src);
|
140
|
+
}
|
141
|
+
|
142
|
+
const char* strict_identifier_alnum(const char* src)
|
143
|
+
{
|
144
|
+
return alternatives <
|
145
|
+
alnum,
|
146
|
+
unicode,
|
147
|
+
escape_seq,
|
148
|
+
exactly<'_'>
|
149
|
+
>(src);
|
150
|
+
}
|
151
|
+
|
152
|
+
// Match CSS unit identifier.
|
153
|
+
const char* unit_identifier(const char* src)
|
154
|
+
{
|
155
|
+
return sequence <
|
156
|
+
optional < exactly <'-'> >,
|
157
|
+
strict_identifier_alpha,
|
158
|
+
zero_plus < alternatives<
|
159
|
+
strict_identifier_alnum,
|
160
|
+
sequence <
|
161
|
+
one_plus < exactly<'-'> >,
|
162
|
+
strict_identifier_alpha
|
163
|
+
>
|
164
|
+
> >
|
165
|
+
>(src);
|
166
|
+
}
|
167
|
+
|
113
168
|
const char* identifier_alnums(const char* src)
|
114
169
|
{
|
115
170
|
return one_plus< identifier_alnum >(src);
|
@@ -129,11 +184,32 @@ namespace Sass {
|
|
129
184
|
|
130
185
|
// Match interpolant schemas
|
131
186
|
const char* identifier_schema(const char* src) {
|
132
|
-
|
133
|
-
return sequence
|
134
|
-
|
135
|
-
|
136
|
-
|
187
|
+
|
188
|
+
return sequence <
|
189
|
+
one_plus <
|
190
|
+
sequence <
|
191
|
+
zero_plus <
|
192
|
+
alternatives <
|
193
|
+
identifier,
|
194
|
+
exactly <'-'>
|
195
|
+
>
|
196
|
+
>,
|
197
|
+
interpolant,
|
198
|
+
zero_plus <
|
199
|
+
alternatives <
|
200
|
+
digits,
|
201
|
+
identifier,
|
202
|
+
quoted_string,
|
203
|
+
exactly<'+'>,
|
204
|
+
exactly<'-'>
|
205
|
+
>
|
206
|
+
>
|
207
|
+
>
|
208
|
+
>,
|
209
|
+
negate <
|
210
|
+
exactly<'%'>
|
211
|
+
>
|
212
|
+
> (src);
|
137
213
|
}
|
138
214
|
|
139
215
|
// interpolants can be recursive/nested
|
@@ -151,10 +227,10 @@ namespace Sass {
|
|
151
227
|
// skip escapes
|
152
228
|
sequence <
|
153
229
|
exactly < '\\' >,
|
154
|
-
|
155
|
-
exactly < '\n' >
|
230
|
+
re_linebreak
|
156
231
|
>,
|
157
232
|
escape_seq,
|
233
|
+
unicode_seq,
|
158
234
|
// skip interpolants
|
159
235
|
interpolant,
|
160
236
|
// skip non delimiters
|
@@ -175,10 +251,10 @@ namespace Sass {
|
|
175
251
|
// skip escapes
|
176
252
|
sequence <
|
177
253
|
exactly < '\\' >,
|
178
|
-
|
179
|
-
exactly < '\n' >
|
254
|
+
re_linebreak
|
180
255
|
>,
|
181
256
|
escape_seq,
|
257
|
+
unicode_seq,
|
182
258
|
// skip interpolants
|
183
259
|
interpolant,
|
184
260
|
// skip non delimiters
|
@@ -216,8 +292,44 @@ namespace Sass {
|
|
216
292
|
return sequence<exactly<'@'>, identifier>(src);
|
217
293
|
}
|
218
294
|
|
219
|
-
const char*
|
220
|
-
return
|
295
|
+
const char* re_reference_combinator(const char* src) {
|
296
|
+
return sequence <
|
297
|
+
optional <
|
298
|
+
sequence <
|
299
|
+
zero_plus <
|
300
|
+
exactly <'-'>
|
301
|
+
>,
|
302
|
+
identifier,
|
303
|
+
exactly <'|'>
|
304
|
+
>
|
305
|
+
>,
|
306
|
+
zero_plus <
|
307
|
+
exactly <'-'>
|
308
|
+
>,
|
309
|
+
identifier
|
310
|
+
>(src);
|
311
|
+
}
|
312
|
+
|
313
|
+
const char* static_reference_combinator(const char* src) {
|
314
|
+
return sequence <
|
315
|
+
exactly <'/'>,
|
316
|
+
re_reference_combinator,
|
317
|
+
exactly <'/'>
|
318
|
+
>(src);
|
319
|
+
}
|
320
|
+
|
321
|
+
const char* schema_reference_combinator(const char* src) {
|
322
|
+
return sequence <
|
323
|
+
exactly <'/'>,
|
324
|
+
optional <
|
325
|
+
sequence <
|
326
|
+
css_ip_identifier,
|
327
|
+
exactly <'|'>
|
328
|
+
>
|
329
|
+
>,
|
330
|
+
css_ip_identifier,
|
331
|
+
exactly <'/'>
|
332
|
+
> (src);
|
221
333
|
}
|
222
334
|
|
223
335
|
const char* kwd_import(const char* src) {
|
@@ -240,7 +352,7 @@ namespace Sass {
|
|
240
352
|
return word<media_kwd>(src);
|
241
353
|
}
|
242
354
|
|
243
|
-
const char*
|
355
|
+
const char* kwd_supports_directive(const char* src) {
|
244
356
|
return word<supports_kwd>(src);
|
245
357
|
}
|
246
358
|
|
@@ -256,14 +368,18 @@ namespace Sass {
|
|
256
368
|
return word<return_kwd>(src);
|
257
369
|
}
|
258
370
|
|
259
|
-
const char*
|
371
|
+
const char* kwd_include_directive(const char* src) {
|
260
372
|
return word<include_kwd>(src);
|
261
373
|
}
|
262
374
|
|
263
|
-
const char*
|
375
|
+
const char* kwd_content_directive(const char* src) {
|
264
376
|
return word<content_kwd>(src);
|
265
377
|
}
|
266
378
|
|
379
|
+
const char* kwd_charset_directive(const char* src) {
|
380
|
+
return word<charset_kwd>(src);
|
381
|
+
}
|
382
|
+
|
267
383
|
const char* kwd_extend(const char* src) {
|
268
384
|
return word<extend_kwd>(src);
|
269
385
|
}
|
@@ -338,14 +454,59 @@ namespace Sass {
|
|
338
454
|
return word<null_kwd>(src);
|
339
455
|
}
|
340
456
|
|
457
|
+
const char* css_identifier(const char* src) {
|
458
|
+
return sequence <
|
459
|
+
zero_plus <
|
460
|
+
exactly <'-'>
|
461
|
+
>,
|
462
|
+
identifier
|
463
|
+
>(src);
|
464
|
+
}
|
465
|
+
|
466
|
+
const char* css_ip_identifier(const char* src) {
|
467
|
+
return sequence <
|
468
|
+
zero_plus <
|
469
|
+
exactly <'-'>
|
470
|
+
>,
|
471
|
+
alternatives <
|
472
|
+
identifier,
|
473
|
+
interpolant
|
474
|
+
>
|
475
|
+
>(src);
|
476
|
+
}
|
477
|
+
|
341
478
|
// Match CSS type selectors
|
342
479
|
const char* namespace_prefix(const char* src) {
|
343
|
-
return sequence
|
344
|
-
|
480
|
+
return sequence <
|
481
|
+
optional <
|
482
|
+
alternatives <
|
483
|
+
exactly <'*'>,
|
484
|
+
css_identifier
|
485
|
+
>
|
486
|
+
>,
|
487
|
+
exactly <'|'>,
|
488
|
+
negate <
|
489
|
+
exactly <'='>
|
490
|
+
>
|
491
|
+
>(src);
|
345
492
|
}
|
346
|
-
|
347
|
-
|
493
|
+
|
494
|
+
// Match CSS type selectors
|
495
|
+
const char* namespace_schema(const char* src) {
|
496
|
+
return sequence <
|
497
|
+
optional <
|
498
|
+
alternatives <
|
499
|
+
exactly <'*'>,
|
500
|
+
css_ip_identifier
|
501
|
+
>
|
502
|
+
>,
|
503
|
+
exactly<'|'>,
|
504
|
+
negate <
|
505
|
+
exactly <'='>
|
506
|
+
>
|
507
|
+
>(src);
|
348
508
|
}
|
509
|
+
|
349
510
|
const char* hyphens_and_identifier(const char* src) {
|
350
511
|
return sequence< zero_plus< exactly< '-' > >, identifier >(src);
|
351
512
|
}
|
@@ -353,7 +514,7 @@ namespace Sass {
|
|
353
514
|
return sequence< zero_plus< exactly< '-' > >, name >(src);
|
354
515
|
}
|
355
516
|
const char* universal(const char* src) {
|
356
|
-
return sequence< optional<
|
517
|
+
return sequence< optional<namespace_schema>, exactly<'*'> >(src);
|
357
518
|
}
|
358
519
|
// Match CSS id names.
|
359
520
|
const char* id_name(const char* src) {
|
@@ -365,7 +526,7 @@ namespace Sass {
|
|
365
526
|
}
|
366
527
|
// Attribute name in an attribute selector.
|
367
528
|
const char* attribute_name(const char* src) {
|
368
|
-
return alternatives< sequence< optional<
|
529
|
+
return alternatives< sequence< optional<namespace_schema>, identifier>,
|
369
530
|
identifier >(src);
|
370
531
|
}
|
371
532
|
// match placeholder selectors
|
@@ -391,13 +552,15 @@ namespace Sass {
|
|
391
552
|
sign >(src);
|
392
553
|
}
|
393
554
|
const char* binomial(const char* src) {
|
394
|
-
return sequence
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
555
|
+
return sequence <
|
556
|
+
optional < sign >,
|
557
|
+
optional < digits >,
|
558
|
+
exactly <'n'>,
|
559
|
+
zero_plus < sequence <
|
560
|
+
optional_css_whitespace, sign,
|
561
|
+
optional_css_whitespace, digits
|
562
|
+
> >
|
563
|
+
>(src);
|
401
564
|
}
|
402
565
|
const char* percentage(const char* src) {
|
403
566
|
return sequence< number, exactly<'%'> >(src);
|
@@ -411,7 +574,7 @@ namespace Sass {
|
|
411
574
|
return sequence< number, exactly<em_kwd> >(src);
|
412
575
|
} */
|
413
576
|
const char* dimension(const char* src) {
|
414
|
-
return sequence<number,
|
577
|
+
return sequence<number, unit_identifier >(src);
|
415
578
|
}
|
416
579
|
const char* hex(const char* src) {
|
417
580
|
const char* p = sequence< exactly<'#'>, one_plus<xdigit> >(src);
|
@@ -448,6 +611,7 @@ namespace Sass {
|
|
448
611
|
zero_plus <
|
449
612
|
alternatives <
|
450
613
|
alnum,
|
614
|
+
interpolant,
|
451
615
|
exactly <'/'>,
|
452
616
|
class_char < uri_chars >
|
453
617
|
>
|
@@ -476,13 +640,13 @@ namespace Sass {
|
|
476
640
|
filename_schema >(src); // optional trailing slash
|
477
641
|
}*/
|
478
642
|
// Match CSS "!important" keyword.
|
479
|
-
const char*
|
643
|
+
const char* kwd_important(const char* src) {
|
480
644
|
return sequence< exactly<'!'>,
|
481
645
|
optional_css_whitespace,
|
482
646
|
word<important_kwd> >(src);
|
483
647
|
}
|
484
648
|
// Match CSS "!optional" keyword.
|
485
|
-
const char*
|
649
|
+
const char* kwd_optional(const char* src) {
|
486
650
|
return sequence< exactly<'!'>,
|
487
651
|
optional_css_whitespace,
|
488
652
|
word<optional_kwd> >(src);
|
@@ -505,10 +669,46 @@ namespace Sass {
|
|
505
669
|
}
|
506
670
|
// Match CSS function call openers.
|
507
671
|
const char* functional_schema(const char* src) {
|
508
|
-
return sequence
|
672
|
+
return sequence <
|
673
|
+
one_plus <
|
674
|
+
sequence <
|
675
|
+
zero_plus <
|
676
|
+
alternatives <
|
677
|
+
identifier,
|
678
|
+
exactly <'-'>
|
679
|
+
>
|
680
|
+
>,
|
681
|
+
one_plus <
|
682
|
+
sequence <
|
683
|
+
interpolant,
|
684
|
+
alternatives <
|
685
|
+
digits,
|
686
|
+
identifier,
|
687
|
+
exactly<'+'>,
|
688
|
+
exactly<'-'>
|
689
|
+
>
|
690
|
+
>
|
691
|
+
>
|
692
|
+
>
|
693
|
+
>,
|
694
|
+
negate <
|
695
|
+
exactly <'%'>
|
696
|
+
>,
|
697
|
+
lookahead <
|
698
|
+
exactly <'('>
|
699
|
+
>
|
700
|
+
> (src);
|
509
701
|
}
|
510
|
-
|
511
|
-
|
702
|
+
|
703
|
+
const char* re_nothing(const char* src) {
|
704
|
+
return src;
|
705
|
+
}
|
706
|
+
|
707
|
+
const char* re_functional(const char* src) {
|
708
|
+
return sequence< identifier, optional < block_comment >, exactly<'('> >(src);
|
709
|
+
}
|
710
|
+
const char* re_pseudo_selector(const char* src) {
|
711
|
+
return sequence< identifier, optional < block_comment >, exactly<'('> >(src);
|
512
712
|
}
|
513
713
|
// Match the CSS negation pseudo-class.
|
514
714
|
const char* pseudo_not(const char* src) {
|
@@ -714,22 +914,72 @@ namespace Sass {
|
|
714
914
|
exactly<'\f'> >(src);
|
715
915
|
}*/
|
716
916
|
|
717
|
-
/* not used anymore - remove?
|
718
917
|
const char* H(const char* src) {
|
719
918
|
return std::isxdigit(*src) ? src+1 : 0;
|
720
|
-
}
|
919
|
+
}
|
721
920
|
|
722
|
-
|
723
|
-
|
921
|
+
const char* W(const char* src) {
|
922
|
+
return zero_plus< alternatives<
|
923
|
+
space,
|
924
|
+
exactly< '\t' >,
|
925
|
+
exactly< '\r' >,
|
926
|
+
exactly< '\n' >,
|
927
|
+
exactly< '\f' >
|
928
|
+
> >(src);
|
929
|
+
}
|
930
|
+
|
931
|
+
const char* UUNICODE(const char* src) {
|
724
932
|
return sequence< exactly<'\\'>,
|
725
933
|
between<H, 1, 6>,
|
726
|
-
optional<
|
727
|
-
|
934
|
+
optional< W >
|
935
|
+
>(src);
|
936
|
+
}
|
937
|
+
|
938
|
+
const char* NONASCII(const char* src) {
|
939
|
+
return nonascii(src);
|
940
|
+
}
|
728
941
|
|
729
|
-
/* not used anymore - remove?
|
730
942
|
const char* ESCAPE(const char* src) {
|
731
|
-
return alternatives<
|
732
|
-
|
943
|
+
return alternatives<
|
944
|
+
UUNICODE,
|
945
|
+
sequence<
|
946
|
+
exactly<'\\'>,
|
947
|
+
NONASCII,
|
948
|
+
class_char< escape_chars >
|
949
|
+
>
|
950
|
+
>(src);
|
951
|
+
}
|
952
|
+
|
953
|
+
|
954
|
+
// const char* real_uri_prefix(const char* src) {
|
955
|
+
// return alternatives<
|
956
|
+
// exactly< url_kwd >,
|
957
|
+
// exactly< url_prefix_kwd >
|
958
|
+
// >(src);
|
959
|
+
// }
|
960
|
+
|
961
|
+
const char* real_uri_suffix(const char* src) {
|
962
|
+
return sequence< W, exactly< ')' > >(src);
|
963
|
+
}
|
964
|
+
|
965
|
+
const char* real_uri_value(const char* src) {
|
966
|
+
return
|
967
|
+
sequence<
|
968
|
+
non_greedy<
|
969
|
+
alternatives<
|
970
|
+
class_char< real_uri_chars >,
|
971
|
+
uri_character,
|
972
|
+
NONASCII,
|
973
|
+
ESCAPE
|
974
|
+
>,
|
975
|
+
alternatives<
|
976
|
+
real_uri_suffix,
|
977
|
+
exactly< hash_lbrace >
|
978
|
+
>
|
979
|
+
>
|
980
|
+
>
|
981
|
+
(src);
|
982
|
+
}
|
733
983
|
|
734
984
|
const char* static_string(const char* src) {
|
735
985
|
const char* pos = src;
|
@@ -739,31 +989,86 @@ namespace Sass {
|
|
739
989
|
return (p == 0) ? t.end : 0;
|
740
990
|
}
|
741
991
|
|
992
|
+
const char* unicode_seq(const char* src) {
|
993
|
+
return sequence <
|
994
|
+
alternatives <
|
995
|
+
exactly< 'U' >,
|
996
|
+
exactly< 'u' >
|
997
|
+
>,
|
998
|
+
exactly< '+' >,
|
999
|
+
padded_token <
|
1000
|
+
6, xdigit,
|
1001
|
+
exactly < '?' >
|
1002
|
+
>
|
1003
|
+
>(src);
|
1004
|
+
}
|
1005
|
+
|
742
1006
|
const char* static_component(const char* src) {
|
743
1007
|
return alternatives< identifier,
|
744
1008
|
static_string,
|
745
1009
|
percentage,
|
746
1010
|
hex,
|
1011
|
+
exactly<'|'>,
|
1012
|
+
// exactly<'+'>,
|
1013
|
+
sequence < number, identifier >,
|
747
1014
|
number,
|
748
1015
|
sequence< exactly<'!'>, word<important_kwd> >
|
749
1016
|
>(src);
|
750
1017
|
}
|
751
1018
|
|
1019
|
+
const char* static_property(const char* src) {
|
1020
|
+
return
|
1021
|
+
sequence <
|
1022
|
+
zero_plus<
|
1023
|
+
sequence <
|
1024
|
+
optional_css_comments,
|
1025
|
+
alternatives <
|
1026
|
+
exactly<','>,
|
1027
|
+
exactly<'('>,
|
1028
|
+
exactly<')'>,
|
1029
|
+
kwd_optional,
|
1030
|
+
quoted_string,
|
1031
|
+
interpolant,
|
1032
|
+
identifier,
|
1033
|
+
percentage,
|
1034
|
+
dimension,
|
1035
|
+
variable,
|
1036
|
+
alnum,
|
1037
|
+
sequence <
|
1038
|
+
exactly <'\\'>,
|
1039
|
+
any_char
|
1040
|
+
>
|
1041
|
+
>
|
1042
|
+
>
|
1043
|
+
>,
|
1044
|
+
lookahead <
|
1045
|
+
sequence <
|
1046
|
+
optional_css_comments,
|
1047
|
+
alternatives <
|
1048
|
+
exactly <';'>,
|
1049
|
+
exactly <'}'>,
|
1050
|
+
end_of_file
|
1051
|
+
>
|
1052
|
+
>
|
1053
|
+
>
|
1054
|
+
>(src);
|
1055
|
+
}
|
1056
|
+
|
752
1057
|
const char* static_value(const char* src) {
|
753
1058
|
return sequence< sequence<
|
754
1059
|
static_component,
|
755
1060
|
zero_plus< identifier >
|
756
1061
|
>,
|
757
1062
|
zero_plus < sequence<
|
758
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
1063
|
+
alternatives<
|
1064
|
+
sequence< optional_spaces, alternatives<
|
1065
|
+
exactly < '/' >,
|
1066
|
+
exactly < ',' >,
|
1067
|
+
exactly < ' ' >
|
1068
|
+
>, optional_spaces >,
|
1069
|
+
spaces
|
1070
|
+
>,
|
1071
|
+
static_component
|
767
1072
|
> >,
|
768
1073
|
optional_css_whitespace,
|
769
1074
|
alternatives< exactly<';'>, exactly<'}'> >
|
@@ -780,5 +1085,48 @@ namespace Sass {
|
|
780
1085
|
>(src);
|
781
1086
|
}
|
782
1087
|
|
1088
|
+
const char* type_selector(const char* src) {
|
1089
|
+
return sequence< optional<namespace_schema>, identifier>(src);
|
1090
|
+
}
|
1091
|
+
const char* re_type_selector(const char* src) {
|
1092
|
+
return alternatives< type_selector, universal, quoted_string, dimension, percentage, number, identifier_alnums >(src);
|
1093
|
+
}
|
1094
|
+
const char* re_type_selector2(const char* src) {
|
1095
|
+
return alternatives< type_selector, universal, quoted_string, dimension, percentage, number, identifier_alnums >(src);
|
1096
|
+
}
|
1097
|
+
const char* re_static_expression(const char* src) {
|
1098
|
+
return sequence< number, optional_spaces, exactly<'/'>, optional_spaces, number >(src);
|
1099
|
+
}
|
1100
|
+
|
1101
|
+
template <size_t size, prelexer mx, prelexer pad>
|
1102
|
+
const char* padded_token(const char* src)
|
1103
|
+
{
|
1104
|
+
size_t got = 0;
|
1105
|
+
const char* pos = src;
|
1106
|
+
while (got < size) {
|
1107
|
+
if (!mx(pos)) break;
|
1108
|
+
++ pos; ++ got;
|
1109
|
+
}
|
1110
|
+
while (got < size) {
|
1111
|
+
if (!pad(pos)) break;
|
1112
|
+
++ pos; ++ got;
|
1113
|
+
}
|
1114
|
+
return got ? pos : 0;
|
1115
|
+
}
|
1116
|
+
|
1117
|
+
template <size_t min, size_t max, prelexer mx>
|
1118
|
+
const char* minmax_range(const char* src)
|
1119
|
+
{
|
1120
|
+
size_t got = 0;
|
1121
|
+
const char* pos = src;
|
1122
|
+
while (got < max) {
|
1123
|
+
if (!mx(pos)) break;
|
1124
|
+
++ pos; ++ got;
|
1125
|
+
}
|
1126
|
+
if (got < min) return 0;
|
1127
|
+
if (got > max) return 0;
|
1128
|
+
return pos;
|
1129
|
+
}
|
1130
|
+
|
783
1131
|
}
|
784
1132
|
}
|