sassc 2.0.0 → 2.4.0
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 +2 -0
- data/.gitmodules +1 -1
- data/.travis.yml +9 -3
- data/CHANGELOG.md +36 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +1 -1
- data/Rakefile +43 -7
- data/ext/depend +4 -0
- data/ext/extconf.rb +92 -0
- data/ext/libsass/VERSION +1 -0
- data/ext/libsass/include/sass/base.h +9 -1
- data/ext/libsass/include/sass/context.h +5 -1
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +755 -2028
- data/ext/libsass/src/ast.hpp +492 -2477
- 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 +70 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
- data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
- data/ext/libsass/src/ast_helpers.hpp +292 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
- data/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/ext/libsass/src/ast_sel_unify.cpp +275 -0
- data/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/ext/libsass/src/ast_selectors.cpp +1043 -0
- data/ext/libsass/src/ast_selectors.hpp +522 -0
- data/ext/libsass/src/ast_supports.cpp +114 -0
- data/ext/libsass/src/ast_supports.hpp +121 -0
- data/ext/libsass/src/ast_values.cpp +1154 -0
- data/ext/libsass/src/ast_values.hpp +498 -0
- data/ext/libsass/src/backtrace.cpp +11 -7
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +5 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +35 -34
- 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 +4 -6
- data/ext/libsass/src/check_nesting.cpp +83 -88
- data/ext/libsass/src/check_nesting.hpp +39 -34
- data/ext/libsass/src/color_maps.cpp +168 -164
- data/ext/libsass/src/color_maps.hpp +152 -160
- data/ext/libsass/src/constants.cpp +20 -0
- data/ext/libsass/src/constants.hpp +19 -0
- data/ext/libsass/src/context.cpp +104 -121
- data/ext/libsass/src/context.hpp +43 -55
- data/ext/libsass/src/cssize.cpp +103 -188
- data/ext/libsass/src/cssize.hpp +45 -51
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +524 -361
- data/ext/libsass/src/emitter.cpp +26 -26
- data/ext/libsass/src/emitter.hpp +20 -18
- data/ext/libsass/src/environment.cpp +41 -27
- data/ext/libsass/src/environment.hpp +33 -22
- data/ext/libsass/src/error_handling.cpp +92 -94
- data/ext/libsass/src/error_handling.hpp +73 -50
- data/ext/libsass/src/eval.cpp +380 -515
- data/ext/libsass/src/eval.hpp +64 -57
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +322 -263
- data/ext/libsass/src/expand.hpp +55 -39
- data/ext/libsass/src/extender.cpp +1188 -0
- data/ext/libsass/src/extender.hpp +399 -0
- data/ext/libsass/src/extension.cpp +43 -0
- data/ext/libsass/src/extension.hpp +89 -0
- data/ext/libsass/src/file.cpp +134 -88
- data/ext/libsass/src/file.hpp +28 -37
- data/ext/libsass/src/fn_colors.cpp +596 -0
- data/ext/libsass/src/fn_colors.hpp +85 -0
- data/ext/libsass/src/fn_lists.cpp +285 -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 +244 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +227 -0
- data/ext/libsass/src/fn_numbers.hpp +45 -0
- data/ext/libsass/src/fn_selectors.cpp +205 -0
- data/ext/libsass/src/fn_selectors.hpp +35 -0
- data/ext/libsass/src/fn_strings.cpp +268 -0
- data/ext/libsass/src/fn_strings.hpp +34 -0
- data/ext/libsass/src/fn_utils.cpp +158 -0
- data/ext/libsass/src/fn_utils.hpp +62 -0
- data/ext/libsass/src/inspect.cpp +253 -266
- data/ext/libsass/src/inspect.hpp +72 -74
- data/ext/libsass/src/json.cpp +2 -2
- data/ext/libsass/src/lexer.cpp +25 -84
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +27 -43
- data/ext/libsass/src/listize.hpp +14 -11
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
- data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
- data/ext/libsass/src/operation.hpp +193 -143
- data/ext/libsass/src/operators.cpp +56 -29
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +59 -75
- data/ext/libsass/src/output.hpp +15 -22
- data/ext/libsass/src/parser.cpp +662 -818
- data/ext/libsass/src/parser.hpp +96 -100
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- data/ext/libsass/src/plugins.cpp +12 -8
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +10 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/prelexer.cpp +14 -8
- data/ext/libsass/src/prelexer.hpp +9 -9
- data/ext/libsass/src/remove_placeholders.cpp +59 -57
- data/ext/libsass/src/remove_placeholders.hpp +20 -18
- data/ext/libsass/src/sass.cpp +25 -18
- data/ext/libsass/src/sass.hpp +22 -14
- data/ext/libsass/src/sass2scss.cpp +49 -18
- data/ext/libsass/src/sass_context.cpp +104 -132
- data/ext/libsass/src/sass_context.hpp +2 -2
- data/ext/libsass/src/sass_functions.cpp +7 -4
- data/ext/libsass/src/sass_functions.hpp +1 -1
- data/ext/libsass/src/sass_values.cpp +26 -21
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +27 -20
- data/ext/libsass/src/source_map.hpp +14 -11
- data/ext/libsass/src/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +24 -22
- data/ext/libsass/src/to_value.hpp +18 -22
- data/ext/libsass/src/units.cpp +28 -22
- data/ext/libsass/src/units.hpp +9 -8
- 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 +12 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +97 -107
- data/ext/libsass/src/util.hpp +74 -30
- data/ext/libsass/src/util_string.cpp +125 -0
- data/ext/libsass/src/util_string.hpp +73 -0
- data/ext/libsass/src/values.cpp +33 -24
- data/ext/libsass/src/values.hpp +2 -2
- data/lib/sassc.rb +24 -0
- data/lib/sassc/engine.rb +7 -5
- data/lib/sassc/functions_handler.rb +11 -13
- data/lib/sassc/native.rb +10 -9
- data/lib/sassc/native/native_functions_api.rb +0 -5
- data/lib/sassc/script.rb +4 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +32 -12
- data/test/engine_test.rb +32 -2
- data/test/functions_test.rb +38 -1
- data/test/native_test.rb +4 -4
- metadata +95 -109
- data/ext/Rakefile +0 -3
- data/ext/libsass/.editorconfig +0 -15
- data/ext/libsass/.gitattributes +0 -2
- data/ext/libsass/.github/CONTRIBUTING.md +0 -65
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
- data/ext/libsass/.gitignore +0 -85
- data/ext/libsass/.travis.yml +0 -64
- data/ext/libsass/COPYING +0 -25
- data/ext/libsass/GNUmakefile.am +0 -88
- data/ext/libsass/INSTALL +0 -1
- data/ext/libsass/LICENSE +0 -25
- data/ext/libsass/Makefile +0 -351
- data/ext/libsass/Makefile.conf +0 -55
- data/ext/libsass/Readme.md +0 -104
- data/ext/libsass/SECURITY.md +0 -10
- data/ext/libsass/appveyor.yml +0 -91
- data/ext/libsass/configure.ac +0 -138
- data/ext/libsass/contrib/libsass.spec +0 -66
- 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/include/sass/version.h.in +0 -12
- data/ext/libsass/m4/.gitkeep +0 -0
- data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
- data/ext/libsass/res/resource.rc +0 -35
- 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/GNUmakefile.am +0 -54
- data/ext/libsass/src/extend.cpp +0 -2130
- data/ext/libsass/src/extend.hpp +0 -86
- data/ext/libsass/src/functions.cpp +0 -2234
- data/ext/libsass/src/functions.hpp +0 -198
- data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
- data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
- data/ext/libsass/src/node.cpp +0 -319
- data/ext/libsass/src/node.hpp +0 -118
- data/ext/libsass/src/paths.hpp +0 -71
- data/ext/libsass/src/sass_util.cpp +0 -149
- data/ext/libsass/src/sass_util.hpp +0 -256
- data/ext/libsass/src/subset_map.cpp +0 -55
- data/ext/libsass/src/subset_map.hpp +0 -76
- data/ext/libsass/src/support/libsass.pc.in +0 -11
- 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/ext/libsass/version.sh +0 -10
- data/ext/libsass/win/libsass.sln +0 -39
- data/ext/libsass/win/libsass.sln.DotSettings +0 -9
- data/ext/libsass/win/libsass.targets +0 -118
- data/ext/libsass/win/libsass.vcxproj +0 -188
- data/ext/libsass/win/libsass.vcxproj.filters +0 -357
- data/lib/sassc/native/lib_c.rb +0 -21
- data/lib/tasks/libsass.rb +0 -33
data/ext/libsass/src/context.hpp
CHANGED
|
@@ -1,93 +1,81 @@
|
|
|
1
1
|
#ifndef SASS_CONTEXT_H
|
|
2
2
|
#define SASS_CONTEXT_H
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
#include
|
|
4
|
+
// sass.hpp must go before all system headers to get the
|
|
5
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
6
|
+
#include "sass.hpp"
|
|
7
|
+
#include "ast.hpp"
|
|
8
|
+
|
|
7
9
|
|
|
8
10
|
#define BUFFERSIZE 255
|
|
9
11
|
#include "b64/encode.h"
|
|
10
12
|
|
|
11
|
-
#include "ast_fwd_decl.hpp"
|
|
12
|
-
#include "kwd_arg_macros.hpp"
|
|
13
|
-
#include "ast_fwd_decl.hpp"
|
|
14
13
|
#include "sass_context.hpp"
|
|
15
|
-
#include "
|
|
16
|
-
#include "source_map.hpp"
|
|
17
|
-
#include "subset_map.hpp"
|
|
18
|
-
#include "backtrace.hpp"
|
|
19
|
-
#include "output.hpp"
|
|
14
|
+
#include "stylesheet.hpp"
|
|
20
15
|
#include "plugins.hpp"
|
|
21
|
-
#include "
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
struct Sass_Function;
|
|
16
|
+
#include "output.hpp"
|
|
25
17
|
|
|
26
18
|
namespace Sass {
|
|
27
19
|
|
|
28
20
|
class Context {
|
|
29
21
|
public:
|
|
30
|
-
void import_url (
|
|
31
|
-
bool call_headers(const
|
|
22
|
+
void import_url (Import* imp, sass::string load_path, const sass::string& ctx_path);
|
|
23
|
+
bool call_headers(const sass::string& load_path, const char* ctx_path, SourceSpan& pstate, Import* imp)
|
|
32
24
|
{ return call_loader(load_path, ctx_path, pstate, imp, c_headers, false); };
|
|
33
|
-
bool call_importers(const
|
|
25
|
+
bool call_importers(const sass::string& load_path, const char* ctx_path, SourceSpan& pstate, Import* imp)
|
|
34
26
|
{ return call_loader(load_path, ctx_path, pstate, imp, c_importers, true); };
|
|
35
27
|
|
|
36
28
|
private:
|
|
37
|
-
bool call_loader(const
|
|
29
|
+
bool call_loader(const sass::string& load_path, const char* ctx_path, SourceSpan& pstate, Import* imp, sass::vector<Sass_Importer_Entry> importers, bool only_one = true);
|
|
38
30
|
|
|
39
31
|
public:
|
|
40
|
-
const
|
|
32
|
+
const sass::string CWD;
|
|
41
33
|
struct Sass_Options& c_options;
|
|
42
|
-
|
|
34
|
+
sass::string entry_path;
|
|
43
35
|
size_t head_imports;
|
|
44
36
|
Plugins plugins;
|
|
45
37
|
Output emitter;
|
|
46
38
|
|
|
47
39
|
// generic ast node garbage container
|
|
48
40
|
// used to avoid possible circular refs
|
|
49
|
-
|
|
41
|
+
CallStack ast_gc;
|
|
50
42
|
// resources add under our control
|
|
51
43
|
// these are guaranteed to be freed
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
std::map<const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
sass::vector<char*> strings;
|
|
45
|
+
sass::vector<Resource> resources;
|
|
46
|
+
std::map<const sass::string, StyleSheet> sheets;
|
|
47
|
+
ImporterStack import_stack;
|
|
48
|
+
sass::vector<Sass_Callee> callee_stack;
|
|
49
|
+
sass::vector<Backtrace> traces;
|
|
50
|
+
Extender extender;
|
|
59
51
|
|
|
60
52
|
struct Sass_Compiler* c_compiler;
|
|
61
53
|
|
|
62
54
|
// absolute paths to includes
|
|
63
|
-
|
|
55
|
+
sass::vector<sass::string> included_files;
|
|
64
56
|
// relative includes for sourcemap
|
|
65
|
-
|
|
57
|
+
sass::vector<sass::string> srcmap_links;
|
|
66
58
|
// vectors above have same size
|
|
67
59
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
60
|
+
sass::vector<sass::string> plugin_paths; // relative paths to load plugins
|
|
61
|
+
sass::vector<sass::string> include_paths; // lookup paths for includes
|
|
74
62
|
|
|
75
|
-
void apply_custom_headers(Block_Obj root, const char* path,
|
|
63
|
+
void apply_custom_headers(Block_Obj root, const char* path, SourceSpan pstate);
|
|
76
64
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
65
|
+
sass::vector<Sass_Importer_Entry> c_headers;
|
|
66
|
+
sass::vector<Sass_Importer_Entry> c_importers;
|
|
67
|
+
sass::vector<Sass_Function_Entry> c_functions;
|
|
80
68
|
|
|
81
69
|
void add_c_header(Sass_Importer_Entry header);
|
|
82
70
|
void add_c_importer(Sass_Importer_Entry importer);
|
|
83
71
|
void add_c_function(Sass_Function_Entry function);
|
|
84
72
|
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
const
|
|
73
|
+
const sass::string indent; // String to be used for indentation
|
|
74
|
+
const sass::string linefeed; // String to be used for line feeds
|
|
75
|
+
const sass::string input_path; // for relative paths in src-map
|
|
76
|
+
const sass::string output_path; // for relative paths to the output
|
|
77
|
+
const sass::string source_map_file; // path to source map file (enables feature)
|
|
78
|
+
const sass::string source_map_root; // path for sourceRoot property (pass-through)
|
|
91
79
|
|
|
92
80
|
virtual ~Context();
|
|
93
81
|
Context(struct Sass_Context&);
|
|
@@ -97,29 +85,29 @@ namespace Sass {
|
|
|
97
85
|
virtual char* render_srcmap();
|
|
98
86
|
|
|
99
87
|
void register_resource(const Include&, const Resource&);
|
|
100
|
-
void register_resource(const Include&, const Resource&,
|
|
101
|
-
|
|
102
|
-
Include load_import(const Importer&,
|
|
88
|
+
void register_resource(const Include&, const Resource&, SourceSpan&);
|
|
89
|
+
sass::vector<Include> find_includes(const Importer& import);
|
|
90
|
+
Include load_import(const Importer&, SourceSpan pstate);
|
|
103
91
|
|
|
104
92
|
Sass_Output_Style output_style() { return c_options.output_style; };
|
|
105
|
-
|
|
93
|
+
sass::vector<sass::string> get_included_files(bool skip = false, size_t headers = 0);
|
|
106
94
|
|
|
107
95
|
private:
|
|
108
96
|
void collect_plugin_paths(const char* paths_str);
|
|
109
97
|
void collect_plugin_paths(string_list* paths_array);
|
|
110
98
|
void collect_include_paths(const char* paths_str);
|
|
111
99
|
void collect_include_paths(string_list* paths_array);
|
|
112
|
-
|
|
113
|
-
|
|
100
|
+
sass::string format_embedded_source_map();
|
|
101
|
+
sass::string format_source_mapping_url(const sass::string& out_path);
|
|
114
102
|
|
|
115
103
|
|
|
116
104
|
// void register_built_in_functions(Env* env);
|
|
117
105
|
// void register_function(Signature sig, Native_Function f, Env* env);
|
|
118
106
|
// void register_function(Signature sig, Native_Function f, size_t arity, Env* env);
|
|
119
|
-
// void register_overload_stub(
|
|
107
|
+
// void register_overload_stub(sass::string name, Env* env);
|
|
120
108
|
|
|
121
109
|
public:
|
|
122
|
-
const
|
|
110
|
+
const sass::string& cwd() { return CWD; };
|
|
123
111
|
};
|
|
124
112
|
|
|
125
113
|
class File_Context : public Context {
|
data/ext/libsass/src/cssize.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 <iostream>
|
|
3
6
|
#include <typeinfo>
|
|
4
7
|
#include <vector>
|
|
@@ -9,18 +12,17 @@
|
|
|
9
12
|
namespace Sass {
|
|
10
13
|
|
|
11
14
|
Cssize::Cssize(Context& ctx)
|
|
12
|
-
:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
p_stack(std::vector<Statement_Ptr>())
|
|
15
|
+
: traces(ctx.traces),
|
|
16
|
+
block_stack(BlockStack()),
|
|
17
|
+
p_stack(sass::vector<Statement*>())
|
|
16
18
|
{ }
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
Statement* Cssize::parent()
|
|
19
21
|
{
|
|
20
22
|
return p_stack.size() ? p_stack.back() : block_stack.front();
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
Block* Cssize::operator()(Block* b)
|
|
24
26
|
{
|
|
25
27
|
Block_Obj bb = SASS_MEMORY_NEW(Block, b->pstate(), b->length(), b->is_root());
|
|
26
28
|
// bb->tabs(b->tabs());
|
|
@@ -30,7 +32,7 @@ namespace Sass {
|
|
|
30
32
|
return bb.detach();
|
|
31
33
|
}
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
Statement* Cssize::operator()(Trace* t)
|
|
34
36
|
{
|
|
35
37
|
traces.push_back(Backtrace(t->pstate()));
|
|
36
38
|
auto result = t->block()->perform(this);
|
|
@@ -38,11 +40,11 @@ namespace Sass {
|
|
|
38
40
|
return result;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
Statement* Cssize::operator()(Declaration* d)
|
|
42
44
|
{
|
|
43
45
|
String_Obj property = Cast<String>(d->property());
|
|
44
46
|
|
|
45
|
-
if (
|
|
47
|
+
if (Declaration* dd = Cast<Declaration>(parent())) {
|
|
46
48
|
String_Obj parent_property = Cast<String>(dd->property());
|
|
47
49
|
property = SASS_MEMORY_NEW(String_Constant,
|
|
48
50
|
d->property()->pstate(),
|
|
@@ -78,17 +80,17 @@ namespace Sass {
|
|
|
78
80
|
return 0;
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
Statement* Cssize::operator()(AtRule* r)
|
|
82
84
|
{
|
|
83
85
|
if (!r->block() || !r->block()->length()) return r;
|
|
84
86
|
|
|
85
87
|
if (parent()->statement_type() == Statement::RULESET)
|
|
86
88
|
{
|
|
87
|
-
return
|
|
89
|
+
return r->is_keyframes() ? SASS_MEMORY_NEW(Bubble, r->pstate(), r) : bubble(r);
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
p_stack.push_back(r);
|
|
91
|
-
|
|
93
|
+
AtRuleObj rr = SASS_MEMORY_NEW(AtRule,
|
|
92
94
|
r->pstate(),
|
|
93
95
|
r->keyword(),
|
|
94
96
|
r->selector(),
|
|
@@ -105,15 +107,15 @@ namespace Sass {
|
|
|
105
107
|
Bubble_Obj s_obj = Cast<Bubble>(s);
|
|
106
108
|
s = s_obj->node();
|
|
107
109
|
if (s->statement_type() != Statement::DIRECTIVE) directive_exists = false;
|
|
108
|
-
else directive_exists = (Cast<
|
|
110
|
+
else directive_exists = (Cast<AtRule>(s)->keyword() == rr->keyword());
|
|
109
111
|
}
|
|
110
112
|
|
|
111
113
|
}
|
|
112
114
|
|
|
113
|
-
|
|
115
|
+
Block* result = SASS_MEMORY_NEW(Block, rr->pstate());
|
|
114
116
|
if (!(directive_exists || rr->is_keyframes()))
|
|
115
117
|
{
|
|
116
|
-
|
|
118
|
+
AtRule* empty_node = Cast<AtRule>(rr);
|
|
117
119
|
empty_node->block(SASS_MEMORY_NEW(Block, rr->block() ? rr->block()->pstate() : rr->pstate()));
|
|
118
120
|
result->append(empty_node);
|
|
119
121
|
}
|
|
@@ -128,7 +130,7 @@ namespace Sass {
|
|
|
128
130
|
return result;
|
|
129
131
|
}
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
Statement* Cssize::operator()(Keyframe_Rule* r)
|
|
132
134
|
{
|
|
133
135
|
if (!r->block() || !r->block()->length()) return r;
|
|
134
136
|
|
|
@@ -140,20 +142,20 @@ namespace Sass {
|
|
|
140
142
|
return debubble(rr->block(), rr);
|
|
141
143
|
}
|
|
142
144
|
|
|
143
|
-
|
|
145
|
+
Statement* Cssize::operator()(StyleRule* r)
|
|
144
146
|
{
|
|
145
147
|
p_stack.push_back(r);
|
|
146
148
|
// this can return a string schema
|
|
147
149
|
// string schema is not a statement!
|
|
148
150
|
// r->block() is already a string schema
|
|
149
|
-
// and that is
|
|
150
|
-
|
|
151
|
+
// and that is coming from propset expand
|
|
152
|
+
Block* bb = operator()(r->block());
|
|
151
153
|
// this should protect us (at least a bit) from our mess
|
|
152
154
|
// fixing this properly is harder that it should be ...
|
|
153
155
|
if (Cast<Statement>(bb) == NULL) {
|
|
154
156
|
error("Illegal nesting: Only properties may be nested beneath properties.", r->block()->pstate(), traces);
|
|
155
157
|
}
|
|
156
|
-
|
|
158
|
+
StyleRuleObj rr = SASS_MEMORY_NEW(StyleRule,
|
|
157
159
|
r->pstate(),
|
|
158
160
|
r->selector(),
|
|
159
161
|
bb);
|
|
@@ -167,10 +169,10 @@ namespace Sass {
|
|
|
167
169
|
}
|
|
168
170
|
|
|
169
171
|
Block_Obj props = SASS_MEMORY_NEW(Block, rr->block()->pstate());
|
|
170
|
-
|
|
172
|
+
Block* rules = SASS_MEMORY_NEW(Block, rr->block()->pstate());
|
|
171
173
|
for (size_t i = 0, L = rr->block()->length(); i < L; i++)
|
|
172
174
|
{
|
|
173
|
-
|
|
175
|
+
Statement* s = rr->block()->at(i);
|
|
174
176
|
if (bubblable(s)) rules->append(s);
|
|
175
177
|
if (!bubblable(s)) props->append(s);
|
|
176
178
|
}
|
|
@@ -183,14 +185,14 @@ namespace Sass {
|
|
|
183
185
|
|
|
184
186
|
for (size_t i = 0, L = rules->length(); i < L; i++)
|
|
185
187
|
{
|
|
186
|
-
|
|
188
|
+
Statement* stm = rules->at(i);
|
|
187
189
|
stm->tabs(stm->tabs() + 1);
|
|
188
190
|
}
|
|
189
191
|
|
|
190
192
|
rules->unshift(rr);
|
|
191
193
|
}
|
|
192
194
|
|
|
193
|
-
|
|
195
|
+
Block* ptr = rules;
|
|
194
196
|
rules = debubble(rules);
|
|
195
197
|
void* lp = ptr;
|
|
196
198
|
void* rp = rules;
|
|
@@ -207,25 +209,28 @@ namespace Sass {
|
|
|
207
209
|
return rules;
|
|
208
210
|
}
|
|
209
211
|
|
|
210
|
-
|
|
212
|
+
Statement* Cssize::operator()(Null* m)
|
|
211
213
|
{
|
|
212
214
|
return 0;
|
|
213
215
|
}
|
|
214
216
|
|
|
215
|
-
|
|
217
|
+
Statement* Cssize::operator()(CssMediaRule* m)
|
|
216
218
|
{
|
|
217
219
|
if (parent()->statement_type() == Statement::RULESET)
|
|
218
|
-
{
|
|
220
|
+
{
|
|
221
|
+
return bubble(m);
|
|
222
|
+
}
|
|
219
223
|
|
|
220
224
|
if (parent()->statement_type() == Statement::MEDIA)
|
|
221
|
-
{
|
|
225
|
+
{
|
|
226
|
+
return SASS_MEMORY_NEW(Bubble, m->pstate(), m);
|
|
227
|
+
}
|
|
222
228
|
|
|
223
229
|
p_stack.push_back(m);
|
|
224
230
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
operator()(m->block()));
|
|
231
|
+
CssMediaRuleObj mm = SASS_MEMORY_NEW(CssMediaRule, m->pstate(), m->block());
|
|
232
|
+
mm->concat(m->elements());
|
|
233
|
+
mm->block(operator()(m->block()));
|
|
229
234
|
mm->tabs(m->tabs());
|
|
230
235
|
|
|
231
236
|
p_stack.pop_back();
|
|
@@ -233,7 +238,7 @@ namespace Sass {
|
|
|
233
238
|
return debubble(mm->block(), mm);
|
|
234
239
|
}
|
|
235
240
|
|
|
236
|
-
|
|
241
|
+
Statement* Cssize::operator()(SupportsRule* m)
|
|
237
242
|
{
|
|
238
243
|
if (!m->block()->length())
|
|
239
244
|
{ return m; }
|
|
@@ -243,7 +248,7 @@ namespace Sass {
|
|
|
243
248
|
|
|
244
249
|
p_stack.push_back(m);
|
|
245
250
|
|
|
246
|
-
|
|
251
|
+
SupportsRuleObj mm = SASS_MEMORY_NEW(SupportsRule,
|
|
247
252
|
m->pstate(),
|
|
248
253
|
m->condition(),
|
|
249
254
|
operator()(m->block()));
|
|
@@ -254,17 +259,17 @@ namespace Sass {
|
|
|
254
259
|
return debubble(mm->block(), mm);
|
|
255
260
|
}
|
|
256
261
|
|
|
257
|
-
|
|
262
|
+
Statement* Cssize::operator()(AtRootRule* m)
|
|
258
263
|
{
|
|
259
264
|
bool tmp = false;
|
|
260
265
|
for (size_t i = 0, L = p_stack.size(); i < L; ++i) {
|
|
261
|
-
|
|
266
|
+
Statement* s = p_stack[i];
|
|
262
267
|
tmp |= m->exclude_node(s);
|
|
263
268
|
}
|
|
264
269
|
|
|
265
270
|
if (!tmp && m->block())
|
|
266
271
|
{
|
|
267
|
-
|
|
272
|
+
Block* bb = operator()(m->block());
|
|
268
273
|
for (size_t i = 0, L = bb->length(); i < L; ++i) {
|
|
269
274
|
// (bb->elements())[i]->tabs(m->tabs());
|
|
270
275
|
Statement_Obj stm = bb->at(i);
|
|
@@ -282,33 +287,33 @@ namespace Sass {
|
|
|
282
287
|
return bubble(m);
|
|
283
288
|
}
|
|
284
289
|
|
|
285
|
-
|
|
290
|
+
Statement* Cssize::bubble(AtRule* m)
|
|
286
291
|
{
|
|
287
|
-
|
|
288
|
-
|
|
292
|
+
Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
|
|
293
|
+
ParentStatementObj new_rule = Cast<ParentStatement>(SASS_MEMORY_COPY(this->parent()));
|
|
289
294
|
new_rule->block(bb);
|
|
290
295
|
new_rule->tabs(this->parent()->tabs());
|
|
291
296
|
new_rule->block()->concat(m->block());
|
|
292
297
|
|
|
293
298
|
Block_Obj wrapper_block = SASS_MEMORY_NEW(Block, m->block() ? m->block()->pstate() : m->pstate());
|
|
294
299
|
wrapper_block->append(new_rule);
|
|
295
|
-
|
|
300
|
+
AtRuleObj mm = SASS_MEMORY_NEW(AtRule,
|
|
296
301
|
m->pstate(),
|
|
297
302
|
m->keyword(),
|
|
298
303
|
m->selector(),
|
|
299
304
|
wrapper_block);
|
|
300
305
|
if (m->value()) mm->value(m->value());
|
|
301
306
|
|
|
302
|
-
|
|
307
|
+
Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
|
|
303
308
|
return bubble;
|
|
304
309
|
}
|
|
305
310
|
|
|
306
|
-
|
|
311
|
+
Statement* Cssize::bubble(AtRootRule* m)
|
|
307
312
|
{
|
|
308
313
|
if (!m || !m->block()) return NULL;
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
314
|
+
Block* bb = SASS_MEMORY_NEW(Block, this->parent()->pstate());
|
|
315
|
+
ParentStatementObj new_rule = Cast<ParentStatement>(SASS_MEMORY_COPY(this->parent()));
|
|
316
|
+
Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
|
|
312
317
|
if (new_rule) {
|
|
313
318
|
new_rule->block(bb);
|
|
314
319
|
new_rule->tabs(this->parent()->tabs());
|
|
@@ -316,74 +321,74 @@ namespace Sass {
|
|
|
316
321
|
wrapper_block->append(new_rule);
|
|
317
322
|
}
|
|
318
323
|
|
|
319
|
-
|
|
324
|
+
AtRootRule* mm = SASS_MEMORY_NEW(AtRootRule,
|
|
320
325
|
m->pstate(),
|
|
321
326
|
wrapper_block,
|
|
322
327
|
m->expression());
|
|
323
|
-
|
|
328
|
+
Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
|
|
324
329
|
return bubble;
|
|
325
330
|
}
|
|
326
331
|
|
|
327
|
-
|
|
332
|
+
Statement* Cssize::bubble(SupportsRule* m)
|
|
328
333
|
{
|
|
329
|
-
|
|
334
|
+
StyleRuleObj parent = Cast<StyleRule>(SASS_MEMORY_COPY(this->parent()));
|
|
330
335
|
|
|
331
|
-
|
|
332
|
-
|
|
336
|
+
Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
|
|
337
|
+
StyleRule* new_rule = SASS_MEMORY_NEW(StyleRule,
|
|
333
338
|
parent->pstate(),
|
|
334
339
|
parent->selector(),
|
|
335
340
|
bb);
|
|
336
341
|
new_rule->tabs(parent->tabs());
|
|
337
342
|
new_rule->block()->concat(m->block());
|
|
338
343
|
|
|
339
|
-
|
|
344
|
+
Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
|
|
340
345
|
wrapper_block->append(new_rule);
|
|
341
|
-
|
|
346
|
+
SupportsRule* mm = SASS_MEMORY_NEW(SupportsRule,
|
|
342
347
|
m->pstate(),
|
|
343
348
|
m->condition(),
|
|
344
349
|
wrapper_block);
|
|
345
350
|
|
|
346
351
|
mm->tabs(m->tabs());
|
|
347
352
|
|
|
348
|
-
|
|
353
|
+
Bubble* bubble = SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
|
|
349
354
|
return bubble;
|
|
350
355
|
}
|
|
351
356
|
|
|
352
|
-
|
|
357
|
+
Statement* Cssize::bubble(CssMediaRule* m)
|
|
353
358
|
{
|
|
354
|
-
|
|
359
|
+
StyleRuleObj parent = Cast<StyleRule>(SASS_MEMORY_COPY(this->parent()));
|
|
355
360
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
+
Block* bb = SASS_MEMORY_NEW(Block, parent->block()->pstate());
|
|
362
|
+
StyleRule* new_rule = SASS_MEMORY_NEW(StyleRule,
|
|
363
|
+
parent->pstate(),
|
|
364
|
+
parent->selector(),
|
|
365
|
+
bb);
|
|
361
366
|
new_rule->tabs(parent->tabs());
|
|
362
367
|
new_rule->block()->concat(m->block());
|
|
363
368
|
|
|
364
|
-
|
|
369
|
+
Block* wrapper_block = SASS_MEMORY_NEW(Block, m->block()->pstate());
|
|
365
370
|
wrapper_block->append(new_rule);
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
371
|
+
CssMediaRuleObj mm = SASS_MEMORY_NEW(CssMediaRule,
|
|
372
|
+
m->pstate(),
|
|
373
|
+
wrapper_block);
|
|
374
|
+
mm->concat(m->elements());
|
|
370
375
|
|
|
371
376
|
mm->tabs(m->tabs());
|
|
372
377
|
|
|
373
378
|
return SASS_MEMORY_NEW(Bubble, mm->pstate(), mm);
|
|
374
379
|
}
|
|
375
380
|
|
|
376
|
-
bool Cssize::bubblable(
|
|
381
|
+
bool Cssize::bubblable(Statement* s)
|
|
377
382
|
{
|
|
378
|
-
return Cast<
|
|
383
|
+
return Cast<StyleRule>(s) || (s && s->bubbles());
|
|
379
384
|
}
|
|
380
385
|
|
|
381
|
-
|
|
386
|
+
Block* Cssize::flatten(const Block* b)
|
|
382
387
|
{
|
|
383
|
-
|
|
388
|
+
Block* result = SASS_MEMORY_NEW(Block, b->pstate(), 0, b->is_root());
|
|
384
389
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
|
385
|
-
|
|
386
|
-
if (
|
|
390
|
+
Statement* ss = b->at(i);
|
|
391
|
+
if (const Block* bb = Cast<Block>(ss)) {
|
|
387
392
|
Block_Obj bs = flatten(bb);
|
|
388
393
|
for (size_t j = 0, K = bs->length(); j < K; ++j) {
|
|
389
394
|
result->append(bs->at(j));
|
|
@@ -396,9 +401,9 @@ namespace Sass {
|
|
|
396
401
|
return result;
|
|
397
402
|
}
|
|
398
403
|
|
|
399
|
-
|
|
404
|
+
sass::vector<std::pair<bool, Block_Obj>> Cssize::slice_by_bubble(Block* b)
|
|
400
405
|
{
|
|
401
|
-
|
|
406
|
+
sass::vector<std::pair<bool, Block_Obj>> results;
|
|
402
407
|
|
|
403
408
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
|
404
409
|
Statement_Obj value = b->at(i);
|
|
@@ -411,7 +416,7 @@ namespace Sass {
|
|
|
411
416
|
}
|
|
412
417
|
else
|
|
413
418
|
{
|
|
414
|
-
|
|
419
|
+
Block* wrapper_block = SASS_MEMORY_NEW(Block, value->pstate());
|
|
415
420
|
wrapper_block->append(value);
|
|
416
421
|
results.push_back(std::make_pair(key, wrapper_block));
|
|
417
422
|
}
|
|
@@ -419,10 +424,10 @@ namespace Sass {
|
|
|
419
424
|
return results;
|
|
420
425
|
}
|
|
421
426
|
|
|
422
|
-
|
|
427
|
+
Block* Cssize::debubble(Block* children, Statement* parent)
|
|
423
428
|
{
|
|
424
|
-
|
|
425
|
-
|
|
429
|
+
ParentStatementObj previous_parent;
|
|
430
|
+
sass::vector<std::pair<bool, Block_Obj>> baz = slice_by_bubble(children);
|
|
426
431
|
Block_Obj result = SASS_MEMORY_NEW(Block, children->pstate());
|
|
427
432
|
|
|
428
433
|
for (size_t i = 0, L = baz.size(); i < L; ++i) {
|
|
@@ -437,7 +442,7 @@ namespace Sass {
|
|
|
437
442
|
previous_parent->block()->concat(slice);
|
|
438
443
|
}
|
|
439
444
|
else {
|
|
440
|
-
previous_parent =
|
|
445
|
+
previous_parent = SASS_MEMORY_COPY(parent);
|
|
441
446
|
previous_parent->block(slice);
|
|
442
447
|
previous_parent->tabs(parent->tabs());
|
|
443
448
|
|
|
@@ -448,36 +453,24 @@ namespace Sass {
|
|
|
448
453
|
|
|
449
454
|
for (size_t j = 0, K = slice->length(); j < K; ++j)
|
|
450
455
|
{
|
|
451
|
-
|
|
456
|
+
Statement_Obj ss;
|
|
452
457
|
Statement_Obj stm = slice->at(j);
|
|
453
458
|
// this has to go now here (too bad)
|
|
454
459
|
Bubble_Obj node = Cast<Bubble>(stm);
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
if (
|
|
459
|
-
if (
|
|
460
|
-
|
|
461
|
-
node->node()->statement_type() != Statement::MEDIA ||
|
|
462
|
-
(m1 && m2 && *m1->media_queries() == *m2->media_queries())
|
|
463
|
-
)
|
|
464
|
-
{
|
|
465
|
-
ss = node->node();
|
|
466
|
-
}
|
|
467
|
-
else
|
|
468
|
-
{
|
|
469
|
-
List_Obj mq = merge_media_queries(
|
|
470
|
-
Cast<Media_Block>(node->node()),
|
|
471
|
-
Cast<Media_Block>(parent)
|
|
472
|
-
);
|
|
473
|
-
if (!mq->length()) continue;
|
|
474
|
-
if (Media_Block* b = Cast<Media_Block>(node->node())) {
|
|
475
|
-
b->media_queries(mq);
|
|
476
|
-
}
|
|
460
|
+
|
|
461
|
+
CssMediaRule* rule1 = NULL;
|
|
462
|
+
CssMediaRule* rule2 = NULL;
|
|
463
|
+
if (parent) rule1 = Cast<CssMediaRule>(parent);
|
|
464
|
+
if (node) rule2 = Cast<CssMediaRule>(node->node());
|
|
465
|
+
if (rule1 || rule2) {
|
|
477
466
|
ss = node->node();
|
|
478
467
|
}
|
|
479
468
|
|
|
480
|
-
|
|
469
|
+
ss = node->node();
|
|
470
|
+
|
|
471
|
+
if (!ss) {
|
|
472
|
+
continue;
|
|
473
|
+
}
|
|
481
474
|
|
|
482
475
|
ss->tabs(ss->tabs() + node->tabs());
|
|
483
476
|
ss->group_end(node->group_end());
|
|
@@ -486,18 +479,19 @@ namespace Sass {
|
|
|
486
479
|
children->pstate(),
|
|
487
480
|
children->length(),
|
|
488
481
|
children->is_root());
|
|
489
|
-
|
|
482
|
+
auto evaled = ss->perform(this);
|
|
483
|
+
if (evaled) bb->append(evaled);
|
|
490
484
|
|
|
491
485
|
Block_Obj wrapper_block = SASS_MEMORY_NEW(Block,
|
|
492
486
|
children->pstate(),
|
|
493
487
|
children->length(),
|
|
494
488
|
children->is_root());
|
|
495
489
|
|
|
496
|
-
|
|
490
|
+
Block* wrapper = flatten(bb);
|
|
497
491
|
wrapper_block->append(wrapper);
|
|
498
492
|
|
|
499
493
|
if (wrapper->length()) {
|
|
500
|
-
previous_parent =
|
|
494
|
+
previous_parent = {};
|
|
501
495
|
}
|
|
502
496
|
|
|
503
497
|
if (wrapper_block) {
|
|
@@ -509,16 +503,11 @@ namespace Sass {
|
|
|
509
503
|
return flatten(result);
|
|
510
504
|
}
|
|
511
505
|
|
|
512
|
-
|
|
513
|
-
{
|
|
514
|
-
return static_cast<Statement_Ptr>(n);
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
void Cssize::append_block(Block_Ptr b, Block_Ptr cur)
|
|
506
|
+
void Cssize::append_block(Block* b, Block* cur)
|
|
518
507
|
{
|
|
519
508
|
for (size_t i = 0, L = b->length(); i < L; ++i) {
|
|
520
509
|
Statement_Obj ith = b->at(i)->perform(this);
|
|
521
|
-
if (
|
|
510
|
+
if (Block_Obj bb = Cast<Block>(ith)) {
|
|
522
511
|
for (size_t j = 0, K = bb->length(); j < K; ++j) {
|
|
523
512
|
cur->append(bb->at(j));
|
|
524
513
|
}
|
|
@@ -529,78 +518,4 @@ namespace Sass {
|
|
|
529
518
|
}
|
|
530
519
|
}
|
|
531
520
|
|
|
532
|
-
List_Ptr Cssize::merge_media_queries(Media_Block_Ptr m1, Media_Block_Ptr m2)
|
|
533
|
-
{
|
|
534
|
-
List_Ptr qq = SASS_MEMORY_NEW(List,
|
|
535
|
-
m1->media_queries()->pstate(),
|
|
536
|
-
m1->media_queries()->length(),
|
|
537
|
-
SASS_COMMA);
|
|
538
|
-
|
|
539
|
-
for (size_t i = 0, L = m1->media_queries()->length(); i < L; i++) {
|
|
540
|
-
for (size_t j = 0, K = m2->media_queries()->length(); j < K; j++) {
|
|
541
|
-
Expression_Obj l1 = m1->media_queries()->at(i);
|
|
542
|
-
Expression_Obj l2 = m2->media_queries()->at(j);
|
|
543
|
-
Media_Query_Ptr mq1 = Cast<Media_Query>(l1);
|
|
544
|
-
Media_Query_Ptr mq2 = Cast<Media_Query>(l2);
|
|
545
|
-
Media_Query_Ptr mq = merge_media_query(mq1, mq2);
|
|
546
|
-
if (mq) qq->append(mq);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
return qq;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
Media_Query_Ptr Cssize::merge_media_query(Media_Query_Ptr mq1, Media_Query_Ptr mq2)
|
|
555
|
-
{
|
|
556
|
-
|
|
557
|
-
std::string type;
|
|
558
|
-
std::string mod;
|
|
559
|
-
|
|
560
|
-
std::string m1 = std::string(mq1->is_restricted() ? "only" : mq1->is_negated() ? "not" : "");
|
|
561
|
-
std::string t1 = mq1->media_type() ? mq1->media_type()->to_string(ctx.c_options) : "";
|
|
562
|
-
std::string m2 = std::string(mq2->is_restricted() ? "only" : mq1->is_negated() ? "not" : "");
|
|
563
|
-
std::string t2 = mq2->media_type() ? mq2->media_type()->to_string(ctx.c_options) : "";
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
if (t1.empty()) t1 = t2;
|
|
567
|
-
if (t2.empty()) t2 = t1;
|
|
568
|
-
|
|
569
|
-
if ((m1 == "not") ^ (m2 == "not")) {
|
|
570
|
-
if (t1 == t2) {
|
|
571
|
-
return 0;
|
|
572
|
-
}
|
|
573
|
-
type = m1 == "not" ? t2 : t1;
|
|
574
|
-
mod = m1 == "not" ? m2 : m1;
|
|
575
|
-
}
|
|
576
|
-
else if (m1 == "not" && m2 == "not") {
|
|
577
|
-
if (t1 != t2) {
|
|
578
|
-
return 0;
|
|
579
|
-
}
|
|
580
|
-
type = t1;
|
|
581
|
-
mod = "not";
|
|
582
|
-
}
|
|
583
|
-
else if (t1 != t2) {
|
|
584
|
-
return 0;
|
|
585
|
-
} else {
|
|
586
|
-
type = t1;
|
|
587
|
-
mod = m1.empty() ? m2 : m1;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
Media_Query_Ptr mm = SASS_MEMORY_NEW(Media_Query,
|
|
591
|
-
mq1->pstate(),
|
|
592
|
-
0,
|
|
593
|
-
mq1->length() + mq2->length(),
|
|
594
|
-
mod == "not",
|
|
595
|
-
mod == "only");
|
|
596
|
-
|
|
597
|
-
if (!type.empty()) {
|
|
598
|
-
mm->media_type(SASS_MEMORY_NEW(String_Quoted, mq1->pstate(), type));
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
mm->concat(mq2);
|
|
602
|
-
mm->concat(mq1);
|
|
603
|
-
|
|
604
|
-
return mm;
|
|
605
|
-
}
|
|
606
521
|
}
|