sassc 2.0.1 → 2.1.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.gitmodules +1 -1
- data/.travis.yml +7 -3
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +1 -1
- data/Rakefile +23 -8
- data/ext/extconf.rb +39 -0
- data/ext/libsass/.gitignore +1 -0
- data/ext/libsass/GNUmakefile.am +23 -39
- data/ext/libsass/Makefile +56 -91
- data/ext/libsass/Makefile.conf +16 -2
- data/ext/libsass/configure.ac +8 -12
- data/ext/libsass/include/sass/base.h +1 -0
- data/ext/libsass/include/sass/context.h +1 -1
- data/ext/libsass/src/GNUmakefile.am +1 -5
- data/ext/libsass/src/ast.cpp +747 -2010
- data/ext/libsass/src/ast.hpp +239 -2383
- data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
- data/ext/libsass/src/ast2c.hpp +39 -0
- data/ext/libsass/src/ast_def_macros.hpp +62 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +1 -0
- data/ext/libsass/src/ast_fwd_decl.hpp +43 -165
- data/ext/libsass/src/ast_sel_cmp.cpp +909 -0
- data/ext/libsass/src/ast_sel_unify.cpp +280 -0
- data/ext/libsass/src/ast_selectors.cpp +1475 -0
- data/ext/libsass/src/ast_selectors.hpp +568 -0
- data/ext/libsass/src/ast_supports.cpp +130 -0
- data/ext/libsass/src/ast_supports.hpp +121 -0
- data/ext/libsass/src/ast_values.cpp +967 -0
- data/ext/libsass/src/ast_values.hpp +489 -0
- data/ext/libsass/src/backtrace.cpp +4 -0
- data/ext/libsass/src/base64vlq.cpp +3 -0
- data/ext/libsass/src/bind.cpp +18 -17
- data/ext/libsass/src/bind.hpp +3 -1
- data/ext/libsass/src/c2ast.cpp +64 -0
- data/ext/libsass/src/c2ast.hpp +14 -0
- data/ext/libsass/src/cencode.c +2 -2
- data/ext/libsass/src/check_nesting.cpp +52 -56
- data/ext/libsass/src/check_nesting.hpp +35 -34
- data/ext/libsass/src/color_maps.cpp +156 -153
- data/ext/libsass/src/color_maps.hpp +152 -152
- data/ext/libsass/src/constants.cpp +15 -0
- data/ext/libsass/src/constants.hpp +13 -0
- data/ext/libsass/src/context.cpp +24 -14
- data/ext/libsass/src/context.hpp +6 -6
- data/ext/libsass/src/cssize.cpp +69 -71
- data/ext/libsass/src/cssize.hpp +50 -50
- data/ext/libsass/src/debugger.hpp +117 -110
- data/ext/libsass/src/emitter.cpp +13 -12
- data/ext/libsass/src/emitter.hpp +13 -9
- data/ext/libsass/src/environment.cpp +15 -1
- data/ext/libsass/src/environment.hpp +6 -0
- data/ext/libsass/src/error_handling.cpp +36 -59
- data/ext/libsass/src/error_handling.hpp +29 -16
- data/ext/libsass/src/eval.cpp +302 -323
- data/ext/libsass/src/eval.hpp +64 -55
- data/ext/libsass/src/expand.cpp +94 -88
- data/ext/libsass/src/expand.hpp +33 -37
- data/ext/libsass/src/extend.cpp +38 -36
- data/ext/libsass/src/extend.hpp +15 -15
- data/ext/libsass/src/file.cpp +34 -2
- data/ext/libsass/src/fn_colors.cpp +594 -0
- data/ext/libsass/src/fn_colors.hpp +85 -0
- data/ext/libsass/src/fn_lists.cpp +284 -0
- data/ext/libsass/src/fn_lists.hpp +34 -0
- data/ext/libsass/src/fn_maps.cpp +94 -0
- data/ext/libsass/src/fn_maps.hpp +30 -0
- data/ext/libsass/src/fn_miscs.cpp +256 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +220 -0
- data/ext/libsass/src/fn_numbers.hpp +45 -0
- data/ext/libsass/src/fn_selectors.cpp +235 -0
- data/ext/libsass/src/fn_selectors.hpp +35 -0
- data/ext/libsass/src/fn_strings.cpp +254 -0
- data/ext/libsass/src/fn_strings.hpp +34 -0
- data/ext/libsass/src/fn_utils.cpp +156 -0
- data/ext/libsass/src/fn_utils.hpp +56 -0
- data/ext/libsass/src/inspect.cpp +101 -152
- data/ext/libsass/src/inspect.hpp +69 -73
- data/ext/libsass/src/json.cpp +2 -2
- data/ext/libsass/src/lexer.cpp +6 -3
- data/ext/libsass/src/listize.cpp +9 -11
- data/ext/libsass/src/listize.hpp +11 -7
- data/ext/libsass/src/memory/SharedPtr.cpp +2 -83
- data/ext/libsass/src/memory/SharedPtr.hpp +127 -143
- data/ext/libsass/src/node.cpp +13 -10
- data/ext/libsass/src/node.hpp +3 -3
- data/ext/libsass/src/operation.hpp +184 -144
- data/ext/libsass/src/operators.cpp +43 -17
- data/ext/libsass/src/operators.hpp +5 -5
- data/ext/libsass/src/output.cpp +21 -18
- data/ext/libsass/src/output.hpp +14 -21
- data/ext/libsass/src/parser.cpp +215 -183
- data/ext/libsass/src/parser.hpp +28 -24
- data/ext/libsass/src/plugins.cpp +5 -1
- data/ext/libsass/src/position.cpp +3 -0
- data/ext/libsass/src/prelexer.cpp +9 -3
- data/ext/libsass/src/prelexer.hpp +9 -9
- data/ext/libsass/src/remove_placeholders.cpp +14 -11
- data/ext/libsass/src/remove_placeholders.hpp +8 -9
- data/ext/libsass/src/sass.cpp +9 -3
- data/ext/libsass/src/sass.hpp +12 -9
- data/ext/libsass/src/sass2scss.cpp +45 -14
- data/ext/libsass/src/sass_context.cpp +18 -15
- data/ext/libsass/src/sass_functions.cpp +6 -3
- data/ext/libsass/src/sass_functions.hpp +1 -1
- data/ext/libsass/src/sass_util.cpp +3 -0
- data/ext/libsass/src/sass_values.cpp +21 -13
- data/ext/libsass/src/source_map.cpp +5 -2
- data/ext/libsass/src/source_map.hpp +2 -2
- data/ext/libsass/src/subset_map.cpp +4 -1
- data/ext/libsass/src/to_value.cpp +23 -21
- data/ext/libsass/src/to_value.hpp +18 -22
- data/ext/libsass/src/units.cpp +4 -0
- data/ext/libsass/src/units.hpp +1 -0
- data/ext/libsass/src/utf8/checked.h +12 -10
- data/ext/libsass/src/utf8/core.h +3 -0
- data/ext/libsass/src/utf8_string.cpp +3 -0
- data/ext/libsass/src/util.cpp +67 -75
- data/ext/libsass/src/util.hpp +64 -19
- data/ext/libsass/src/util_string.cpp +75 -0
- data/ext/libsass/src/util_string.hpp +19 -0
- data/ext/libsass/src/values.cpp +22 -13
- data/ext/libsass/src/values.hpp +2 -2
- data/ext/libsass/win/libsass.targets +30 -4
- data/ext/libsass/win/libsass.vcxproj.filters +82 -4
- data/lib/sassc.rb +24 -0
- data/lib/sassc/engine.rb +2 -2
- data/lib/sassc/native.rb +8 -1
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +19 -11
- data/test/engine_test.rb +26 -1
- data/test/native_test.rb +1 -1
- metadata +66 -72
- data/ext/Rakefile +0 -3
- data/ext/libsass/.github/CONTRIBUTING.md +0 -65
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
- data/ext/libsass/.travis.yml +0 -64
- data/ext/libsass/Readme.md +0 -104
- data/ext/libsass/SECURITY.md +0 -10
- data/ext/libsass/appveyor.yml +0 -91
- data/ext/libsass/docs/README.md +0 -20
- data/ext/libsass/docs/api-context-example.md +0 -45
- data/ext/libsass/docs/api-context-internal.md +0 -163
- data/ext/libsass/docs/api-context.md +0 -295
- data/ext/libsass/docs/api-doc.md +0 -215
- data/ext/libsass/docs/api-function-example.md +0 -67
- data/ext/libsass/docs/api-function-internal.md +0 -8
- data/ext/libsass/docs/api-function.md +0 -74
- data/ext/libsass/docs/api-importer-example.md +0 -112
- data/ext/libsass/docs/api-importer-internal.md +0 -20
- data/ext/libsass/docs/api-importer.md +0 -86
- data/ext/libsass/docs/api-value-example.md +0 -55
- data/ext/libsass/docs/api-value-internal.md +0 -76
- data/ext/libsass/docs/api-value.md +0 -154
- data/ext/libsass/docs/build-on-darwin.md +0 -27
- data/ext/libsass/docs/build-on-gentoo.md +0 -55
- data/ext/libsass/docs/build-on-windows.md +0 -139
- data/ext/libsass/docs/build-shared-library.md +0 -35
- data/ext/libsass/docs/build-with-autotools.md +0 -78
- data/ext/libsass/docs/build-with-makefiles.md +0 -68
- data/ext/libsass/docs/build-with-mingw.md +0 -107
- data/ext/libsass/docs/build-with-visual-studio.md +0 -90
- data/ext/libsass/docs/build.md +0 -97
- data/ext/libsass/docs/compatibility-plan.md +0 -48
- data/ext/libsass/docs/contributing.md +0 -17
- data/ext/libsass/docs/custom-functions-internal.md +0 -122
- data/ext/libsass/docs/dev-ast-memory.md +0 -223
- data/ext/libsass/docs/implementations.md +0 -56
- data/ext/libsass/docs/plugins.md +0 -47
- data/ext/libsass/docs/setup-environment.md +0 -68
- data/ext/libsass/docs/source-map-internals.md +0 -51
- data/ext/libsass/docs/trace.md +0 -26
- data/ext/libsass/docs/triage.md +0 -17
- data/ext/libsass/docs/unicode.md +0 -39
- data/ext/libsass/extconf.rb +0 -6
- data/ext/libsass/script/bootstrap +0 -13
- data/ext/libsass/script/branding +0 -10
- data/ext/libsass/script/ci-build-libsass +0 -134
- data/ext/libsass/script/ci-build-plugin +0 -62
- data/ext/libsass/script/ci-install-compiler +0 -6
- data/ext/libsass/script/ci-install-deps +0 -20
- data/ext/libsass/script/ci-report-coverage +0 -42
- data/ext/libsass/script/spec +0 -5
- data/ext/libsass/script/tap-driver +0 -652
- data/ext/libsass/script/tap-runner +0 -1
- data/ext/libsass/script/test-leaks.pl +0 -103
- data/ext/libsass/src/functions.cpp +0 -2234
- data/ext/libsass/src/functions.hpp +0 -198
- data/ext/libsass/src/to_c.hpp +0 -39
- data/ext/libsass/test/test_node.cpp +0 -94
- data/ext/libsass/test/test_paths.cpp +0 -28
- data/ext/libsass/test/test_selector_difference.cpp +0 -25
- data/ext/libsass/test/test_specificity.cpp +0 -25
- data/ext/libsass/test/test_subset_map.cpp +0 -472
- data/ext/libsass/test/test_superselector.cpp +0 -69
- data/ext/libsass/test/test_unification.cpp +0 -31
- data/lib/tasks/libsass.rb +0 -33
@@ -0,0 +1,34 @@
|
|
1
|
+
#ifndef SASS_FN_STRINGS_H
|
2
|
+
#define SASS_FN_STRINGS_H
|
3
|
+
|
4
|
+
#include "fn_utils.hpp"
|
5
|
+
|
6
|
+
namespace Sass {
|
7
|
+
|
8
|
+
namespace Functions {
|
9
|
+
|
10
|
+
extern Signature unquote_sig;
|
11
|
+
extern Signature quote_sig;
|
12
|
+
extern Signature str_length_sig;
|
13
|
+
extern Signature str_insert_sig;
|
14
|
+
extern Signature str_index_sig;
|
15
|
+
extern Signature str_slice_sig;
|
16
|
+
extern Signature to_upper_case_sig;
|
17
|
+
extern Signature to_lower_case_sig;
|
18
|
+
extern Signature length_sig;
|
19
|
+
|
20
|
+
BUILT_IN(sass_unquote);
|
21
|
+
BUILT_IN(sass_quote);
|
22
|
+
BUILT_IN(str_length);
|
23
|
+
BUILT_IN(str_insert);
|
24
|
+
BUILT_IN(str_index);
|
25
|
+
BUILT_IN(str_slice);
|
26
|
+
BUILT_IN(to_upper_case);
|
27
|
+
BUILT_IN(to_lower_case);
|
28
|
+
BUILT_IN(length);
|
29
|
+
|
30
|
+
}
|
31
|
+
|
32
|
+
}
|
33
|
+
|
34
|
+
#endif
|
@@ -0,0 +1,156 @@
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
3
|
+
#include "sass.hpp"
|
4
|
+
|
5
|
+
#include "parser.hpp"
|
6
|
+
#include "fn_utils.hpp"
|
7
|
+
#include "util_string.hpp"
|
8
|
+
|
9
|
+
namespace Sass {
|
10
|
+
|
11
|
+
Definition* make_native_function(Signature sig, Native_Function func, Context& ctx)
|
12
|
+
{
|
13
|
+
Parser sig_parser = Parser::from_c_str(sig, ctx, ctx.traces, ParserState("[built-in function]"));
|
14
|
+
sig_parser.lex<Prelexer::identifier>();
|
15
|
+
std::string name(Util::normalize_underscores(sig_parser.lexed));
|
16
|
+
Parameters_Obj params = sig_parser.parse_parameters();
|
17
|
+
return SASS_MEMORY_NEW(Definition,
|
18
|
+
ParserState("[built-in function]"),
|
19
|
+
sig,
|
20
|
+
name,
|
21
|
+
params,
|
22
|
+
func,
|
23
|
+
false);
|
24
|
+
}
|
25
|
+
|
26
|
+
Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx)
|
27
|
+
{
|
28
|
+
using namespace Prelexer;
|
29
|
+
|
30
|
+
const char* sig = sass_function_get_signature(c_func);
|
31
|
+
Parser sig_parser = Parser::from_c_str(sig, ctx, ctx.traces, ParserState("[c function]"));
|
32
|
+
// allow to overload generic callback plus @warn, @error and @debug with custom functions
|
33
|
+
sig_parser.lex < alternatives < identifier, exactly <'*'>,
|
34
|
+
exactly < Constants::warn_kwd >,
|
35
|
+
exactly < Constants::error_kwd >,
|
36
|
+
exactly < Constants::debug_kwd >
|
37
|
+
> >();
|
38
|
+
std::string name(Util::normalize_underscores(sig_parser.lexed));
|
39
|
+
Parameters_Obj params = sig_parser.parse_parameters();
|
40
|
+
return SASS_MEMORY_NEW(Definition,
|
41
|
+
ParserState("[c function]"),
|
42
|
+
sig,
|
43
|
+
name,
|
44
|
+
params,
|
45
|
+
c_func);
|
46
|
+
}
|
47
|
+
|
48
|
+
namespace Functions {
|
49
|
+
|
50
|
+
std::string function_name(Signature sig)
|
51
|
+
{
|
52
|
+
std::string str(sig);
|
53
|
+
return str.substr(0, str.find('('));
|
54
|
+
}
|
55
|
+
|
56
|
+
Map* get_arg_m(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
|
57
|
+
{
|
58
|
+
AST_Node* value = env[argname];
|
59
|
+
if (Map* map = Cast<Map>(value)) return map;
|
60
|
+
List* list = Cast<List>(value);
|
61
|
+
if (list && list->length() == 0) {
|
62
|
+
return SASS_MEMORY_NEW(Map, pstate, 0);
|
63
|
+
}
|
64
|
+
return get_arg<Map>(argname, env, sig, pstate, traces);
|
65
|
+
}
|
66
|
+
|
67
|
+
double get_arg_r(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, double lo, double hi)
|
68
|
+
{
|
69
|
+
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
70
|
+
Number tmpnr(val);
|
71
|
+
tmpnr.reduce();
|
72
|
+
double v = tmpnr.value();
|
73
|
+
if (!(lo <= v && v <= hi)) {
|
74
|
+
std::stringstream msg;
|
75
|
+
msg << "argument `" << argname << "` of `" << sig << "` must be between ";
|
76
|
+
msg << lo << " and " << hi;
|
77
|
+
error(msg.str(), pstate, traces);
|
78
|
+
}
|
79
|
+
return v;
|
80
|
+
}
|
81
|
+
|
82
|
+
Number* get_arg_n(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
|
83
|
+
{
|
84
|
+
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
85
|
+
val = SASS_MEMORY_COPY(val);
|
86
|
+
val->reduce();
|
87
|
+
return val;
|
88
|
+
}
|
89
|
+
|
90
|
+
double get_arg_val(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
|
91
|
+
{
|
92
|
+
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
93
|
+
Number tmpnr(val);
|
94
|
+
tmpnr.reduce();
|
95
|
+
return tmpnr.value();
|
96
|
+
}
|
97
|
+
|
98
|
+
double color_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
|
99
|
+
{
|
100
|
+
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
101
|
+
Number tmpnr(val);
|
102
|
+
tmpnr.reduce();
|
103
|
+
if (tmpnr.unit() == "%") {
|
104
|
+
return std::min(std::max(tmpnr.value() * 255 / 100.0, 0.0), 255.0);
|
105
|
+
} else {
|
106
|
+
return std::min(std::max(tmpnr.value(), 0.0), 255.0);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
double alpha_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces) {
|
111
|
+
Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
|
112
|
+
Number tmpnr(val);
|
113
|
+
tmpnr.reduce();
|
114
|
+
if (tmpnr.unit() == "%") {
|
115
|
+
return std::min(std::max(tmpnr.value(), 0.0), 100.0);
|
116
|
+
} else {
|
117
|
+
return std::min(std::max(tmpnr.value(), 0.0), 1.0);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
Selector_List_Obj get_arg_sels(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx) {
|
122
|
+
Expression_Obj exp = ARG(argname, Expression);
|
123
|
+
if (exp->concrete_type() == Expression::NULL_VAL) {
|
124
|
+
std::stringstream msg;
|
125
|
+
msg << argname << ": null is not a valid selector: it must be a string,\n";
|
126
|
+
msg << "a list of strings, or a list of lists of strings for `" << function_name(sig) << "'";
|
127
|
+
error(msg.str(), exp->pstate(), traces);
|
128
|
+
}
|
129
|
+
if (String_Constant* str = Cast<String_Constant>(exp)) {
|
130
|
+
str->quote_mark(0);
|
131
|
+
}
|
132
|
+
std::string exp_src = exp->to_string(ctx.c_options);
|
133
|
+
return Parser::parse_selector(exp_src.c_str(), ctx, traces, exp->pstate(), pstate.src, /*allow_parent=*/false);
|
134
|
+
}
|
135
|
+
|
136
|
+
Compound_Selector_Obj get_arg_sel(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx) {
|
137
|
+
Expression_Obj exp = ARG(argname, Expression);
|
138
|
+
if (exp->concrete_type() == Expression::NULL_VAL) {
|
139
|
+
std::stringstream msg;
|
140
|
+
msg << argname << ": null is not a string for `" << function_name(sig) << "'";
|
141
|
+
error(msg.str(), exp->pstate(), traces);
|
142
|
+
}
|
143
|
+
if (String_Constant* str = Cast<String_Constant>(exp)) {
|
144
|
+
str->quote_mark(0);
|
145
|
+
}
|
146
|
+
std::string exp_src = exp->to_string(ctx.c_options);
|
147
|
+
Selector_List_Obj sel_list = Parser::parse_selector(exp_src.c_str(), ctx, traces, exp->pstate(), pstate.src, /*allow_parent=*/false);
|
148
|
+
if (sel_list->length() == 0) return {};
|
149
|
+
Complex_Selector_Obj first = sel_list->first();
|
150
|
+
if (!first->tail()) return first->head();
|
151
|
+
return first->tail()->head();
|
152
|
+
}
|
153
|
+
|
154
|
+
}
|
155
|
+
|
156
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
#ifndef SASS_FN_UTILS_H
|
2
|
+
#define SASS_FN_UTILS_H
|
3
|
+
#include "units.hpp"
|
4
|
+
#include "backtrace.hpp"
|
5
|
+
#include "environment.hpp"
|
6
|
+
#include "ast_fwd_decl.hpp"
|
7
|
+
#include "error_handling.hpp"
|
8
|
+
|
9
|
+
namespace Sass {
|
10
|
+
|
11
|
+
#define FN_PROTOTYPE \
|
12
|
+
Env& env, \
|
13
|
+
Env& d_env, \
|
14
|
+
Context& ctx, \
|
15
|
+
Signature sig, \
|
16
|
+
ParserState pstate, \
|
17
|
+
Backtraces& traces, \
|
18
|
+
SelectorStack& selector_stack
|
19
|
+
|
20
|
+
typedef const char* Signature;
|
21
|
+
typedef PreValue* (*Native_Function)(FN_PROTOTYPE);
|
22
|
+
#define BUILT_IN(name) PreValue* name(FN_PROTOTYPE)
|
23
|
+
|
24
|
+
#define ARG(argname, argtype) get_arg<argtype>(argname, env, sig, pstate, traces)
|
25
|
+
// special function for weird hsla percent (10px == 10% == 10 != 0.1)
|
26
|
+
#define ARGVAL(argname) get_arg_val(argname, env, sig, pstate, traces) // double
|
27
|
+
|
28
|
+
Definition* make_native_function(Signature, Native_Function, Context& ctx);
|
29
|
+
Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx);
|
30
|
+
|
31
|
+
namespace Functions {
|
32
|
+
|
33
|
+
template <typename T>
|
34
|
+
T* get_arg(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
|
35
|
+
{
|
36
|
+
T* val = Cast<T>(env[argname]);
|
37
|
+
if (!val) {
|
38
|
+
error("argument `" + argname + "` of `" + sig + "` must be a " + T::type_name(), pstate, traces);
|
39
|
+
}
|
40
|
+
return val;
|
41
|
+
}
|
42
|
+
|
43
|
+
Map* get_arg_m(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // maps only
|
44
|
+
Number* get_arg_n(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // numbers only
|
45
|
+
double alpha_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // colors only
|
46
|
+
double color_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // colors only
|
47
|
+
double get_arg_r(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, double lo, double hi); // colors only
|
48
|
+
double get_arg_val(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // shared
|
49
|
+
Selector_List_Obj get_arg_sels(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx); // selectors only
|
50
|
+
Compound_Selector_Obj get_arg_sel(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx); // selectors only
|
51
|
+
|
52
|
+
}
|
53
|
+
|
54
|
+
}
|
55
|
+
|
56
|
+
#endif
|
data/ext/libsass/src/inspect.cpp
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
// sass.hpp must go before all system headers to get the
|
2
|
+
// __EXTENSIONS__ fix on Solaris.
|
1
3
|
#include "sass.hpp"
|
4
|
+
|
2
5
|
#include <cmath>
|
3
6
|
#include <string>
|
4
7
|
#include <iostream>
|
@@ -21,7 +24,7 @@ namespace Sass {
|
|
21
24
|
Inspect::~Inspect() { }
|
22
25
|
|
23
26
|
// statements
|
24
|
-
void Inspect::operator()(
|
27
|
+
void Inspect::operator()(Block* block)
|
25
28
|
{
|
26
29
|
if (!block->is_root()) {
|
27
30
|
add_open_mapping(block);
|
@@ -39,25 +42,23 @@ namespace Sass {
|
|
39
42
|
|
40
43
|
}
|
41
44
|
|
42
|
-
void Inspect::operator()(
|
45
|
+
void Inspect::operator()(Ruleset* ruleset)
|
43
46
|
{
|
44
47
|
if (ruleset->selector()) {
|
45
|
-
opt.in_selector = true;
|
46
48
|
ruleset->selector()->perform(this);
|
47
|
-
opt.in_selector = false;
|
48
49
|
}
|
49
50
|
if (ruleset->block()) {
|
50
51
|
ruleset->block()->perform(this);
|
51
52
|
}
|
52
53
|
}
|
53
54
|
|
54
|
-
void Inspect::operator()(
|
55
|
+
void Inspect::operator()(Keyframe_Rule* rule)
|
55
56
|
{
|
56
57
|
if (rule->name()) rule->name()->perform(this);
|
57
58
|
if (rule->block()) rule->block()->perform(this);
|
58
59
|
}
|
59
60
|
|
60
|
-
void Inspect::operator()(
|
61
|
+
void Inspect::operator()(Bubble* bubble)
|
61
62
|
{
|
62
63
|
append_indentation();
|
63
64
|
append_token("::BUBBLE", bubble);
|
@@ -66,7 +67,7 @@ namespace Sass {
|
|
66
67
|
append_scope_closer();
|
67
68
|
}
|
68
69
|
|
69
|
-
void Inspect::operator()(
|
70
|
+
void Inspect::operator()(Media_Block* media_block)
|
70
71
|
{
|
71
72
|
append_indentation();
|
72
73
|
append_token("@media", media_block);
|
@@ -77,7 +78,7 @@ namespace Sass {
|
|
77
78
|
media_block->block()->perform(this);
|
78
79
|
}
|
79
80
|
|
80
|
-
void Inspect::operator()(
|
81
|
+
void Inspect::operator()(Supports_Block* feature_block)
|
81
82
|
{
|
82
83
|
append_indentation();
|
83
84
|
append_token("@supports", feature_block);
|
@@ -86,7 +87,7 @@ namespace Sass {
|
|
86
87
|
feature_block->block()->perform(this);
|
87
88
|
}
|
88
89
|
|
89
|
-
void Inspect::operator()(
|
90
|
+
void Inspect::operator()(At_Root_Block* at_root_block)
|
90
91
|
{
|
91
92
|
append_indentation();
|
92
93
|
append_token("@at-root ", at_root_block);
|
@@ -95,7 +96,7 @@ namespace Sass {
|
|
95
96
|
if(at_root_block->block()) at_root_block->block()->perform(this);
|
96
97
|
}
|
97
98
|
|
98
|
-
void Inspect::operator()(
|
99
|
+
void Inspect::operator()(Directive* at_rule)
|
99
100
|
{
|
100
101
|
append_indentation();
|
101
102
|
append_token(at_rule->keyword(), at_rule);
|
@@ -118,7 +119,7 @@ namespace Sass {
|
|
118
119
|
}
|
119
120
|
}
|
120
121
|
|
121
|
-
void Inspect::operator()(
|
122
|
+
void Inspect::operator()(Declaration* dec)
|
122
123
|
{
|
123
124
|
if (dec->value()->concrete_type() == Expression::NULL_VAL) return;
|
124
125
|
bool was_decl = in_declaration;
|
@@ -150,7 +151,7 @@ namespace Sass {
|
|
150
151
|
in_declaration = was_decl;
|
151
152
|
}
|
152
153
|
|
153
|
-
void Inspect::operator()(
|
154
|
+
void Inspect::operator()(Assignment* assn)
|
154
155
|
{
|
155
156
|
append_token(assn->variable(), assn);
|
156
157
|
append_colon_separator();
|
@@ -162,7 +163,7 @@ namespace Sass {
|
|
162
163
|
append_delimiter();
|
163
164
|
}
|
164
165
|
|
165
|
-
void Inspect::operator()(
|
166
|
+
void Inspect::operator()(Import* import)
|
166
167
|
{
|
167
168
|
if (!import->urls().empty()) {
|
168
169
|
append_token("@import", import);
|
@@ -193,7 +194,7 @@ namespace Sass {
|
|
193
194
|
}
|
194
195
|
}
|
195
196
|
|
196
|
-
void Inspect::operator()(
|
197
|
+
void Inspect::operator()(Import_Stub* import)
|
197
198
|
{
|
198
199
|
append_indentation();
|
199
200
|
append_token("@import", import);
|
@@ -202,7 +203,7 @@ namespace Sass {
|
|
202
203
|
append_delimiter();
|
203
204
|
}
|
204
205
|
|
205
|
-
void Inspect::operator()(
|
206
|
+
void Inspect::operator()(Warning* warning)
|
206
207
|
{
|
207
208
|
append_indentation();
|
208
209
|
append_token("@warn", warning);
|
@@ -211,7 +212,7 @@ namespace Sass {
|
|
211
212
|
append_delimiter();
|
212
213
|
}
|
213
214
|
|
214
|
-
void Inspect::operator()(
|
215
|
+
void Inspect::operator()(Error* error)
|
215
216
|
{
|
216
217
|
append_indentation();
|
217
218
|
append_token("@error", error);
|
@@ -220,7 +221,7 @@ namespace Sass {
|
|
220
221
|
append_delimiter();
|
221
222
|
}
|
222
223
|
|
223
|
-
void Inspect::operator()(
|
224
|
+
void Inspect::operator()(Debug* debug)
|
224
225
|
{
|
225
226
|
append_indentation();
|
226
227
|
append_token("@debug", debug);
|
@@ -229,14 +230,14 @@ namespace Sass {
|
|
229
230
|
append_delimiter();
|
230
231
|
}
|
231
232
|
|
232
|
-
void Inspect::operator()(
|
233
|
+
void Inspect::operator()(Comment* comment)
|
233
234
|
{
|
234
235
|
in_comment = true;
|
235
236
|
comment->text()->perform(this);
|
236
237
|
in_comment = false;
|
237
238
|
}
|
238
239
|
|
239
|
-
void Inspect::operator()(
|
240
|
+
void Inspect::operator()(If* cond)
|
240
241
|
{
|
241
242
|
append_indentation();
|
242
243
|
append_token("@if", cond);
|
@@ -251,7 +252,7 @@ namespace Sass {
|
|
251
252
|
}
|
252
253
|
}
|
253
254
|
|
254
|
-
void Inspect::operator()(
|
255
|
+
void Inspect::operator()(For* loop)
|
255
256
|
{
|
256
257
|
append_indentation();
|
257
258
|
append_token("@for", loop);
|
@@ -264,7 +265,7 @@ namespace Sass {
|
|
264
265
|
loop->block()->perform(this);
|
265
266
|
}
|
266
267
|
|
267
|
-
void Inspect::operator()(
|
268
|
+
void Inspect::operator()(Each* loop)
|
268
269
|
{
|
269
270
|
append_indentation();
|
270
271
|
append_token("@each", loop);
|
@@ -279,7 +280,7 @@ namespace Sass {
|
|
279
280
|
loop->block()->perform(this);
|
280
281
|
}
|
281
282
|
|
282
|
-
void Inspect::operator()(
|
283
|
+
void Inspect::operator()(While* loop)
|
283
284
|
{
|
284
285
|
append_indentation();
|
285
286
|
append_token("@while", loop);
|
@@ -288,7 +289,7 @@ namespace Sass {
|
|
288
289
|
loop->block()->perform(this);
|
289
290
|
}
|
290
291
|
|
291
|
-
void Inspect::operator()(
|
292
|
+
void Inspect::operator()(Return* ret)
|
292
293
|
{
|
293
294
|
append_indentation();
|
294
295
|
append_token("@return", ret);
|
@@ -297,7 +298,7 @@ namespace Sass {
|
|
297
298
|
append_delimiter();
|
298
299
|
}
|
299
300
|
|
300
|
-
void Inspect::operator()(
|
301
|
+
void Inspect::operator()(Extension* extend)
|
301
302
|
{
|
302
303
|
append_indentation();
|
303
304
|
append_token("@extend", extend);
|
@@ -306,7 +307,7 @@ namespace Sass {
|
|
306
307
|
append_delimiter();
|
307
308
|
}
|
308
309
|
|
309
|
-
void Inspect::operator()(
|
310
|
+
void Inspect::operator()(Definition* def)
|
310
311
|
{
|
311
312
|
append_indentation();
|
312
313
|
if (def->type() == Definition::MIXIN) {
|
@@ -321,7 +322,7 @@ namespace Sass {
|
|
321
322
|
def->block()->perform(this);
|
322
323
|
}
|
323
324
|
|
324
|
-
void Inspect::operator()(
|
325
|
+
void Inspect::operator()(Mixin_Call* call)
|
325
326
|
{
|
326
327
|
append_indentation();
|
327
328
|
append_token("@include", call);
|
@@ -337,14 +338,14 @@ namespace Sass {
|
|
337
338
|
if (!call->block()) append_delimiter();
|
338
339
|
}
|
339
340
|
|
340
|
-
void Inspect::operator()(
|
341
|
+
void Inspect::operator()(Content* content)
|
341
342
|
{
|
342
343
|
append_indentation();
|
343
344
|
append_token("@content", content);
|
344
345
|
append_delimiter();
|
345
346
|
}
|
346
347
|
|
347
|
-
void Inspect::operator()(
|
348
|
+
void Inspect::operator()(Map* map)
|
348
349
|
{
|
349
350
|
if (output_style() == TO_SASS && map->empty()) {
|
350
351
|
append_string("()");
|
@@ -366,15 +367,15 @@ namespace Sass {
|
|
366
367
|
append_string(")");
|
367
368
|
}
|
368
369
|
|
369
|
-
std::string Inspect::lbracket(
|
370
|
+
std::string Inspect::lbracket(List* list) {
|
370
371
|
return list->is_bracketed() ? "[" : "(";
|
371
372
|
}
|
372
373
|
|
373
|
-
std::string Inspect::rbracket(
|
374
|
+
std::string Inspect::rbracket(List* list) {
|
374
375
|
return list->is_bracketed() ? "]" : ")";
|
375
376
|
}
|
376
377
|
|
377
|
-
void Inspect::operator()(
|
378
|
+
void Inspect::operator()(List* list)
|
378
379
|
{
|
379
380
|
if (list->empty() && (output_style() == TO_SASS || list->is_bracketed())) {
|
380
381
|
append_string(lbracket(list));
|
@@ -462,7 +463,7 @@ namespace Sass {
|
|
462
463
|
|
463
464
|
}
|
464
465
|
|
465
|
-
void Inspect::operator()(
|
466
|
+
void Inspect::operator()(Binary_Expression* expr)
|
466
467
|
{
|
467
468
|
expr->left()->perform(this);
|
468
469
|
if ( in_media_block ||
|
@@ -499,7 +500,7 @@ namespace Sass {
|
|
499
500
|
expr->right()->perform(this);
|
500
501
|
}
|
501
502
|
|
502
|
-
void Inspect::operator()(
|
503
|
+
void Inspect::operator()(Unary_Expression* expr)
|
503
504
|
{
|
504
505
|
if (expr->optype() == Unary_Expression::PLUS) append_string("+");
|
505
506
|
else if (expr->optype() == Unary_Expression::SLASH) append_string("/");
|
@@ -507,91 +508,42 @@ namespace Sass {
|
|
507
508
|
expr->operand()->perform(this);
|
508
509
|
}
|
509
510
|
|
510
|
-
void Inspect::operator()(
|
511
|
+
void Inspect::operator()(Function_Call* call)
|
511
512
|
{
|
512
513
|
append_token(call->name(), call);
|
513
514
|
call->arguments()->perform(this);
|
514
515
|
}
|
515
516
|
|
516
|
-
void Inspect::operator()(
|
517
|
-
{
|
518
|
-
call->name()->perform(this);
|
519
|
-
call->arguments()->perform(this);
|
520
|
-
}
|
521
|
-
|
522
|
-
void Inspect::operator()(Variable_Ptr var)
|
517
|
+
void Inspect::operator()(Variable* var)
|
523
518
|
{
|
524
519
|
append_token(var->name(), var);
|
525
520
|
}
|
526
521
|
|
527
|
-
void Inspect::operator()(
|
522
|
+
void Inspect::operator()(Number* n)
|
528
523
|
{
|
529
524
|
|
530
|
-
std::string res;
|
531
|
-
|
532
525
|
// reduce units
|
533
526
|
n->reduce();
|
534
527
|
|
535
|
-
// check if the fractional part of the value equals to zero
|
536
|
-
// neat trick from http://stackoverflow.com/a/1521682/1550314
|
537
|
-
// double int_part; bool is_int = modf(value, &int_part) == 0.0;
|
538
|
-
|
539
|
-
// this all cannot be done with one run only, since fixed
|
540
|
-
// output differs from normal output and regular output
|
541
|
-
// can contain scientific notation which we do not want!
|
542
|
-
|
543
|
-
// first sample
|
544
528
|
std::stringstream ss;
|
545
|
-
ss.precision(
|
546
|
-
ss << n->value();
|
547
|
-
|
548
|
-
// check if we got scientific notation in result
|
549
|
-
if (ss.str().find_first_of("e") != std::string::npos) {
|
550
|
-
ss.clear(); ss.str(std::string());
|
551
|
-
ss.precision(std::max(12, opt.precision));
|
552
|
-
ss << std::fixed << n->value();
|
553
|
-
}
|
554
|
-
|
555
|
-
std::string tmp = ss.str();
|
556
|
-
size_t pos_point = tmp.find_first_of(".,");
|
557
|
-
size_t pos_fract = tmp.find_last_not_of("0");
|
558
|
-
bool is_int = pos_point == pos_fract ||
|
559
|
-
pos_point == std::string::npos;
|
529
|
+
ss.precision(opt.precision);
|
530
|
+
ss << std::fixed << n->value();
|
560
531
|
|
561
|
-
|
562
|
-
|
532
|
+
std::string res = ss.str();
|
533
|
+
int s = res.length();
|
563
534
|
|
564
|
-
//
|
565
|
-
|
535
|
+
// delete trailing zeros
|
536
|
+
for(s = s - 1; s > 0; --s)
|
566
537
|
{
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
// process floats
|
572
|
-
else
|
573
|
-
{
|
574
|
-
// do we have have too much precision?
|
575
|
-
if (pos_fract < opt.precision + pos_point)
|
576
|
-
{ ss.precision((int)(pos_fract - pos_point)); }
|
577
|
-
else { ss.precision(opt.precision); }
|
578
|
-
// round value again
|
579
|
-
ss << std::fixed << n->value();
|
580
|
-
res = std::string(ss.str());
|
581
|
-
// maybe we truncated up to decimal point
|
582
|
-
size_t pos = res.find_last_not_of("0");
|
583
|
-
// handle case where we have a "0"
|
584
|
-
if (pos == std::string::npos) {
|
585
|
-
res = "0.0";
|
586
|
-
} else {
|
587
|
-
bool at_dec_point = res[pos] == '.' ||
|
588
|
-
res[pos] == ',';
|
589
|
-
// don't leave a blank point
|
590
|
-
if (at_dec_point) ++ pos;
|
591
|
-
res.resize (pos + 1);
|
592
|
-
}
|
538
|
+
if(res[s] == '0') {
|
539
|
+
res.erase(s, 1);
|
540
|
+
}
|
541
|
+
else break;
|
593
542
|
}
|
594
543
|
|
544
|
+
// delete trailing decimal separator
|
545
|
+
if(res[s] == '.') res.erase(s, 1);
|
546
|
+
|
595
547
|
// some final cosmetics
|
596
548
|
if (res == "0.0") res = "0";
|
597
549
|
else if (res == "") res = "0";
|
@@ -599,10 +551,12 @@ namespace Sass {
|
|
599
551
|
else if (res == "-0.0") res = "0";
|
600
552
|
else if (opt.output_style == COMPRESSED)
|
601
553
|
{
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
554
|
+
if (n->zero()) {
|
555
|
+
// check if handling negative nr
|
556
|
+
size_t off = res[0] == '-' ? 1 : 0;
|
557
|
+
// remove leading zero from floating point in compressed mode
|
558
|
+
if (res[off] == '0' && res[off+1] == '.') res.erase(off, 1);
|
559
|
+
}
|
606
560
|
}
|
607
561
|
|
608
562
|
// add unit now
|
@@ -620,7 +574,7 @@ namespace Sass {
|
|
620
574
|
else return c;
|
621
575
|
}
|
622
576
|
|
623
|
-
void Inspect::operator()(
|
577
|
+
void Inspect::operator()(Color_RGBA* c)
|
624
578
|
{
|
625
579
|
// output the final token
|
626
580
|
std::stringstream ss;
|
@@ -629,11 +583,6 @@ namespace Sass {
|
|
629
583
|
// maybe an unknown token
|
630
584
|
std::string name = c->disp();
|
631
585
|
|
632
|
-
if (opt.in_selector && name != "") {
|
633
|
-
append_token(name, c);
|
634
|
-
return;
|
635
|
-
}
|
636
|
-
|
637
586
|
// resolved color
|
638
587
|
std::string res_name = name;
|
639
588
|
|
@@ -644,7 +593,7 @@ namespace Sass {
|
|
644
593
|
|
645
594
|
// get color from given name (if one was given at all)
|
646
595
|
if (name != "" && name_to_color(name)) {
|
647
|
-
|
596
|
+
const Color_RGBA* n = name_to_color(name);
|
648
597
|
r = Sass::round(cap_channel<0xff>(n->r()), opt.precision);
|
649
598
|
g = Sass::round(cap_channel<0xff>(n->g()), opt.precision);
|
650
599
|
b = Sass::round(cap_channel<0xff>(n->b()), opt.precision);
|
@@ -658,6 +607,9 @@ namespace Sass {
|
|
658
607
|
}
|
659
608
|
|
660
609
|
std::stringstream hexlet;
|
610
|
+
// dart sass compressed all colors in regular css always
|
611
|
+
// ruby sass and libsass does it only when not delayed
|
612
|
+
// since color math is going to be removed, this can go too
|
661
613
|
bool compressed = opt.output_style == COMPRESSED;
|
662
614
|
hexlet << '#' << std::setw(1) << std::setfill('0');
|
663
615
|
// create a short color hexlet if there is any need for it
|
@@ -681,9 +633,6 @@ namespace Sass {
|
|
681
633
|
if (name != "") {
|
682
634
|
ss << name;
|
683
635
|
}
|
684
|
-
else if (r == 0 && g == 0 && b == 0 && a == 0) {
|
685
|
-
ss << "transparent";
|
686
|
-
}
|
687
636
|
else if (a >= 1) {
|
688
637
|
if (res_name != "") {
|
689
638
|
if (compressed && hexlet.str().size() < res_name.size()) {
|
@@ -711,13 +660,19 @@ namespace Sass {
|
|
711
660
|
|
712
661
|
}
|
713
662
|
|
714
|
-
void Inspect::operator()(
|
663
|
+
void Inspect::operator()(Color_HSLA* c)
|
664
|
+
{
|
665
|
+
Color_RGBA_Obj rgba = c->toRGBA();
|
666
|
+
operator()(rgba);
|
667
|
+
}
|
668
|
+
|
669
|
+
void Inspect::operator()(Boolean* b)
|
715
670
|
{
|
716
671
|
// output the final token
|
717
672
|
append_token(b->value() ? "true" : "false", b);
|
718
673
|
}
|
719
674
|
|
720
|
-
void Inspect::operator()(
|
675
|
+
void Inspect::operator()(String_Schema* ss)
|
721
676
|
{
|
722
677
|
// Evaluation should turn these into String_Constants,
|
723
678
|
// so this method is only for inspection purposes.
|
@@ -728,12 +683,12 @@ namespace Sass {
|
|
728
683
|
}
|
729
684
|
}
|
730
685
|
|
731
|
-
void Inspect::operator()(
|
686
|
+
void Inspect::operator()(String_Constant* s)
|
732
687
|
{
|
733
688
|
append_token(s->value(), s);
|
734
689
|
}
|
735
690
|
|
736
|
-
void Inspect::operator()(
|
691
|
+
void Inspect::operator()(String_Quoted* s)
|
737
692
|
{
|
738
693
|
if (const char q = s->quote_mark()) {
|
739
694
|
append_token(quote(s->value(), q), s);
|
@@ -742,17 +697,17 @@ namespace Sass {
|
|
742
697
|
}
|
743
698
|
}
|
744
699
|
|
745
|
-
void Inspect::operator()(
|
700
|
+
void Inspect::operator()(Custom_Error* e)
|
746
701
|
{
|
747
702
|
append_token(e->message(), e);
|
748
703
|
}
|
749
704
|
|
750
|
-
void Inspect::operator()(
|
705
|
+
void Inspect::operator()(Custom_Warning* w)
|
751
706
|
{
|
752
707
|
append_token(w->message(), w);
|
753
708
|
}
|
754
709
|
|
755
|
-
void Inspect::operator()(
|
710
|
+
void Inspect::operator()(Supports_Operator* so)
|
756
711
|
{
|
757
712
|
|
758
713
|
if (so->needs_parens(so->left())) append_string("(");
|
@@ -774,7 +729,7 @@ namespace Sass {
|
|
774
729
|
if (so->needs_parens(so->right())) append_string(")");
|
775
730
|
}
|
776
731
|
|
777
|
-
void Inspect::operator()(
|
732
|
+
void Inspect::operator()(Supports_Negation* sn)
|
778
733
|
{
|
779
734
|
append_token("not", sn);
|
780
735
|
append_mandatory_space();
|
@@ -783,7 +738,7 @@ namespace Sass {
|
|
783
738
|
if (sn->needs_parens(sn->condition())) append_string(")");
|
784
739
|
}
|
785
740
|
|
786
|
-
void Inspect::operator()(
|
741
|
+
void Inspect::operator()(Supports_Declaration* sd)
|
787
742
|
{
|
788
743
|
append_string("(");
|
789
744
|
sd->feature()->perform(this);
|
@@ -792,12 +747,12 @@ namespace Sass {
|
|
792
747
|
append_string(")");
|
793
748
|
}
|
794
749
|
|
795
|
-
void Inspect::operator()(
|
750
|
+
void Inspect::operator()(Supports_Interpolation* sd)
|
796
751
|
{
|
797
752
|
sd->value()->perform(this);
|
798
753
|
}
|
799
754
|
|
800
|
-
void Inspect::operator()(
|
755
|
+
void Inspect::operator()(Media_Query* mq)
|
801
756
|
{
|
802
757
|
size_t i = 0;
|
803
758
|
if (mq->media_type()) {
|
@@ -814,7 +769,7 @@ namespace Sass {
|
|
814
769
|
}
|
815
770
|
}
|
816
771
|
|
817
|
-
void Inspect::operator()(
|
772
|
+
void Inspect::operator()(Media_Query_Expression* mqe)
|
818
773
|
{
|
819
774
|
if (mqe->is_interpolated()) {
|
820
775
|
mqe->feature()->perform(this);
|
@@ -830,7 +785,7 @@ namespace Sass {
|
|
830
785
|
}
|
831
786
|
}
|
832
787
|
|
833
|
-
void Inspect::operator()(
|
788
|
+
void Inspect::operator()(At_Root_Query* ae)
|
834
789
|
{
|
835
790
|
if (ae->feature()) {
|
836
791
|
append_string("(");
|
@@ -843,7 +798,7 @@ namespace Sass {
|
|
843
798
|
}
|
844
799
|
}
|
845
800
|
|
846
|
-
void Inspect::operator()(
|
801
|
+
void Inspect::operator()(Function* f)
|
847
802
|
{
|
848
803
|
append_token("get-function", f);
|
849
804
|
append_string("(");
|
@@ -851,14 +806,14 @@ namespace Sass {
|
|
851
806
|
append_string(")");
|
852
807
|
}
|
853
808
|
|
854
|
-
void Inspect::operator()(
|
809
|
+
void Inspect::operator()(Null* n)
|
855
810
|
{
|
856
811
|
// output the final token
|
857
812
|
append_token("null", n);
|
858
813
|
}
|
859
814
|
|
860
815
|
// parameters and arguments
|
861
|
-
void Inspect::operator()(
|
816
|
+
void Inspect::operator()(Parameter* p)
|
862
817
|
{
|
863
818
|
append_token(p->name(), p);
|
864
819
|
if (p->default_value()) {
|
@@ -870,7 +825,7 @@ namespace Sass {
|
|
870
825
|
}
|
871
826
|
}
|
872
827
|
|
873
|
-
void Inspect::operator()(
|
828
|
+
void Inspect::operator()(Parameters* p)
|
874
829
|
{
|
875
830
|
append_string("(");
|
876
831
|
if (!p->empty()) {
|
@@ -883,7 +838,7 @@ namespace Sass {
|
|
883
838
|
append_string(")");
|
884
839
|
}
|
885
840
|
|
886
|
-
void Inspect::operator()(
|
841
|
+
void Inspect::operator()(Argument* a)
|
887
842
|
{
|
888
843
|
if (!a->name().empty()) {
|
889
844
|
append_token(a->name(), a);
|
@@ -895,7 +850,7 @@ namespace Sass {
|
|
895
850
|
return;
|
896
851
|
}
|
897
852
|
if (a->value()->concrete_type() == Expression::STRING) {
|
898
|
-
|
853
|
+
String_Constant* s = Cast<String_Constant>(a->value());
|
899
854
|
if (s) s->perform(this);
|
900
855
|
} else {
|
901
856
|
a->value()->perform(this);
|
@@ -905,7 +860,7 @@ namespace Sass {
|
|
905
860
|
}
|
906
861
|
}
|
907
862
|
|
908
|
-
void Inspect::operator()(
|
863
|
+
void Inspect::operator()(Arguments* a)
|
909
864
|
{
|
910
865
|
append_string("(");
|
911
866
|
if (!a->empty()) {
|
@@ -919,19 +874,17 @@ namespace Sass {
|
|
919
874
|
append_string(")");
|
920
875
|
}
|
921
876
|
|
922
|
-
void Inspect::operator()(
|
877
|
+
void Inspect::operator()(Selector_Schema* s)
|
923
878
|
{
|
924
|
-
opt.in_selector = true;
|
925
879
|
s->contents()->perform(this);
|
926
|
-
opt.in_selector = false;
|
927
880
|
}
|
928
881
|
|
929
|
-
void Inspect::operator()(
|
882
|
+
void Inspect::operator()(Parent_Selector* p)
|
930
883
|
{
|
931
|
-
if (p->
|
884
|
+
if (p->real()) append_string("&");
|
932
885
|
}
|
933
886
|
|
934
|
-
void Inspect::operator()(
|
887
|
+
void Inspect::operator()(Placeholder_Selector* s)
|
935
888
|
{
|
936
889
|
append_token(s->name(), s);
|
937
890
|
if (s->has_line_break()) append_optional_linefeed();
|
@@ -939,26 +892,26 @@ namespace Sass {
|
|
939
892
|
|
940
893
|
}
|
941
894
|
|
942
|
-
void Inspect::operator()(
|
895
|
+
void Inspect::operator()(Type_Selector* s)
|
943
896
|
{
|
944
897
|
append_token(s->ns_name(), s);
|
945
898
|
}
|
946
899
|
|
947
|
-
void Inspect::operator()(
|
900
|
+
void Inspect::operator()(Class_Selector* s)
|
948
901
|
{
|
949
902
|
append_token(s->ns_name(), s);
|
950
903
|
if (s->has_line_break()) append_optional_linefeed();
|
951
904
|
if (s->has_line_break()) append_indentation();
|
952
905
|
}
|
953
906
|
|
954
|
-
void Inspect::operator()(
|
907
|
+
void Inspect::operator()(Id_Selector* s)
|
955
908
|
{
|
956
909
|
append_token(s->ns_name(), s);
|
957
910
|
if (s->has_line_break()) append_optional_linefeed();
|
958
911
|
if (s->has_line_break()) append_indentation();
|
959
912
|
}
|
960
913
|
|
961
|
-
void Inspect::operator()(
|
914
|
+
void Inspect::operator()(Attribute_Selector* s)
|
962
915
|
{
|
963
916
|
append_string("[");
|
964
917
|
add_open_mapping(s);
|
@@ -977,7 +930,7 @@ namespace Sass {
|
|
977
930
|
append_string("]");
|
978
931
|
}
|
979
932
|
|
980
|
-
void Inspect::operator()(
|
933
|
+
void Inspect::operator()(Pseudo_Selector* s)
|
981
934
|
{
|
982
935
|
append_token(s->ns_name(), s);
|
983
936
|
if (s->expression()) {
|
@@ -987,7 +940,7 @@ namespace Sass {
|
|
987
940
|
}
|
988
941
|
}
|
989
942
|
|
990
|
-
void Inspect::operator()(
|
943
|
+
void Inspect::operator()(Wrapped_Selector* s)
|
991
944
|
{
|
992
945
|
if (s->name() == " ") {
|
993
946
|
append_string("");
|
@@ -1005,7 +958,7 @@ namespace Sass {
|
|
1005
958
|
}
|
1006
959
|
}
|
1007
960
|
|
1008
|
-
void Inspect::operator()(
|
961
|
+
void Inspect::operator()(Compound_Selector* s)
|
1009
962
|
{
|
1010
963
|
for (size_t i = 0, L = s->length(); i < L; ++i) {
|
1011
964
|
(*s)[i]->perform(this);
|
@@ -1017,7 +970,7 @@ namespace Sass {
|
|
1017
970
|
}
|
1018
971
|
}
|
1019
972
|
|
1020
|
-
void Inspect::operator()(
|
973
|
+
void Inspect::operator()(Complex_Selector* c)
|
1021
974
|
{
|
1022
975
|
Compound_Selector_Obj head = c->head();
|
1023
976
|
Complex_Selector_Obj tail = c->tail();
|
@@ -1057,7 +1010,7 @@ namespace Sass {
|
|
1057
1010
|
case Complex_Selector::REFERENCE:
|
1058
1011
|
append_mandatory_space();
|
1059
1012
|
append_string("/");
|
1060
|
-
c->reference()->perform(this);
|
1013
|
+
if (c->reference()) c->reference()->perform(this);
|
1061
1014
|
append_string("/");
|
1062
1015
|
append_mandatory_space();
|
1063
1016
|
break;
|
@@ -1081,7 +1034,7 @@ namespace Sass {
|
|
1081
1034
|
}
|
1082
1035
|
}
|
1083
1036
|
|
1084
|
-
void Inspect::operator()(
|
1037
|
+
void Inspect::operator()(Selector_List* g)
|
1085
1038
|
{
|
1086
1039
|
|
1087
1040
|
if (g->empty()) {
|
@@ -1131,8 +1084,4 @@ namespace Sass {
|
|
1131
1084
|
|
1132
1085
|
}
|
1133
1086
|
|
1134
|
-
void Inspect::fallback_impl(AST_Node_Ptr n)
|
1135
|
-
{
|
1136
|
-
}
|
1137
|
-
|
1138
1087
|
}
|