sassc4 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.
Files changed (216) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +16 -0
  5. data/CHANGELOG.md +97 -0
  6. data/CODE_OF_CONDUCT.md +10 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +80 -0
  10. data/Rakefile +51 -0
  11. data/ext/depend +4 -0
  12. data/ext/extconf.rb +92 -0
  13. data/ext/libsass/VERSION +1 -0
  14. data/ext/libsass/contrib/plugin.cpp +60 -0
  15. data/ext/libsass/include/sass/base.h +97 -0
  16. data/ext/libsass/include/sass/context.h +174 -0
  17. data/ext/libsass/include/sass/functions.h +139 -0
  18. data/ext/libsass/include/sass/values.h +145 -0
  19. data/ext/libsass/include/sass/version.h +12 -0
  20. data/ext/libsass/include/sass.h +15 -0
  21. data/ext/libsass/include/sass2scss.h +120 -0
  22. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  23. data/ext/libsass/src/ast.cpp +953 -0
  24. data/ext/libsass/src/ast.hpp +1064 -0
  25. data/ext/libsass/src/ast2c.cpp +80 -0
  26. data/ext/libsass/src/ast2c.hpp +39 -0
  27. data/ext/libsass/src/ast_def_macros.hpp +140 -0
  28. data/ext/libsass/src/ast_fwd_decl.cpp +31 -0
  29. data/ext/libsass/src/ast_fwd_decl.hpp +274 -0
  30. data/ext/libsass/src/ast_helpers.hpp +316 -0
  31. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  32. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  33. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  34. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  35. data/ext/libsass/src/ast_selectors.cpp +1070 -0
  36. data/ext/libsass/src/ast_selectors.hpp +523 -0
  37. data/ext/libsass/src/ast_supports.cpp +114 -0
  38. data/ext/libsass/src/ast_supports.hpp +121 -0
  39. data/ext/libsass/src/ast_values.cpp +1154 -0
  40. data/ext/libsass/src/ast_values.hpp +498 -0
  41. data/ext/libsass/src/b64/cencode.h +32 -0
  42. data/ext/libsass/src/b64/encode.h +79 -0
  43. data/ext/libsass/src/backtrace.cpp +50 -0
  44. data/ext/libsass/src/backtrace.hpp +29 -0
  45. data/ext/libsass/src/base64vlq.cpp +47 -0
  46. data/ext/libsass/src/base64vlq.hpp +30 -0
  47. data/ext/libsass/src/bind.cpp +312 -0
  48. data/ext/libsass/src/bind.hpp +15 -0
  49. data/ext/libsass/src/c2ast.cpp +64 -0
  50. data/ext/libsass/src/c2ast.hpp +14 -0
  51. data/ext/libsass/src/c99func.c +54 -0
  52. data/ext/libsass/src/cencode.c +106 -0
  53. data/ext/libsass/src/check_nesting.cpp +393 -0
  54. data/ext/libsass/src/check_nesting.hpp +70 -0
  55. data/ext/libsass/src/color_maps.cpp +652 -0
  56. data/ext/libsass/src/color_maps.hpp +323 -0
  57. data/ext/libsass/src/color_spaces.cpp +241 -0
  58. data/ext/libsass/src/color_spaces.hpp +227 -0
  59. data/ext/libsass/src/constants.cpp +199 -0
  60. data/ext/libsass/src/constants.hpp +200 -0
  61. data/ext/libsass/src/context.cpp +870 -0
  62. data/ext/libsass/src/context.hpp +140 -0
  63. data/ext/libsass/src/cssize.cpp +521 -0
  64. data/ext/libsass/src/cssize.hpp +71 -0
  65. data/ext/libsass/src/dart_helpers.hpp +199 -0
  66. data/ext/libsass/src/debug.hpp +43 -0
  67. data/ext/libsass/src/debugger.hpp +964 -0
  68. data/ext/libsass/src/emitter.cpp +297 -0
  69. data/ext/libsass/src/emitter.hpp +101 -0
  70. data/ext/libsass/src/environment.cpp +260 -0
  71. data/ext/libsass/src/environment.hpp +124 -0
  72. data/ext/libsass/src/error_handling.cpp +239 -0
  73. data/ext/libsass/src/error_handling.hpp +248 -0
  74. data/ext/libsass/src/eval.cpp +1543 -0
  75. data/ext/libsass/src/eval.hpp +110 -0
  76. data/ext/libsass/src/eval_selectors.cpp +75 -0
  77. data/ext/libsass/src/expand.cpp +875 -0
  78. data/ext/libsass/src/expand.hpp +98 -0
  79. data/ext/libsass/src/extender.cpp +1226 -0
  80. data/ext/libsass/src/extender.hpp +399 -0
  81. data/ext/libsass/src/extension.cpp +43 -0
  82. data/ext/libsass/src/extension.hpp +89 -0
  83. data/ext/libsass/src/file.cpp +531 -0
  84. data/ext/libsass/src/file.hpp +124 -0
  85. data/ext/libsass/src/fn_colors.cpp +836 -0
  86. data/ext/libsass/src/fn_colors.hpp +99 -0
  87. data/ext/libsass/src/fn_lists.cpp +285 -0
  88. data/ext/libsass/src/fn_lists.hpp +34 -0
  89. data/ext/libsass/src/fn_maps.cpp +94 -0
  90. data/ext/libsass/src/fn_maps.hpp +30 -0
  91. data/ext/libsass/src/fn_miscs.cpp +248 -0
  92. data/ext/libsass/src/fn_miscs.hpp +40 -0
  93. data/ext/libsass/src/fn_numbers.cpp +246 -0
  94. data/ext/libsass/src/fn_numbers.hpp +45 -0
  95. data/ext/libsass/src/fn_selectors.cpp +205 -0
  96. data/ext/libsass/src/fn_selectors.hpp +35 -0
  97. data/ext/libsass/src/fn_strings.cpp +268 -0
  98. data/ext/libsass/src/fn_strings.hpp +34 -0
  99. data/ext/libsass/src/fn_utils.cpp +159 -0
  100. data/ext/libsass/src/fn_utils.hpp +62 -0
  101. data/ext/libsass/src/inspect.cpp +1126 -0
  102. data/ext/libsass/src/inspect.hpp +101 -0
  103. data/ext/libsass/src/json.cpp +1436 -0
  104. data/ext/libsass/src/json.hpp +117 -0
  105. data/ext/libsass/src/kwd_arg_macros.hpp +28 -0
  106. data/ext/libsass/src/lexer.cpp +122 -0
  107. data/ext/libsass/src/lexer.hpp +304 -0
  108. data/ext/libsass/src/listize.cpp +70 -0
  109. data/ext/libsass/src/listize.hpp +37 -0
  110. data/ext/libsass/src/mapping.hpp +19 -0
  111. data/ext/libsass/src/memory/allocator.cpp +48 -0
  112. data/ext/libsass/src/memory/allocator.hpp +138 -0
  113. data/ext/libsass/src/memory/config.hpp +20 -0
  114. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  115. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  116. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  117. data/ext/libsass/src/memory.hpp +12 -0
  118. data/ext/libsass/src/operation.hpp +223 -0
  119. data/ext/libsass/src/operators.cpp +267 -0
  120. data/ext/libsass/src/operators.hpp +30 -0
  121. data/ext/libsass/src/ordered_map.hpp +112 -0
  122. data/ext/libsass/src/output.cpp +320 -0
  123. data/ext/libsass/src/output.hpp +47 -0
  124. data/ext/libsass/src/parser.cpp +3059 -0
  125. data/ext/libsass/src/parser.hpp +395 -0
  126. data/ext/libsass/src/parser_selectors.cpp +189 -0
  127. data/ext/libsass/src/permutate.hpp +164 -0
  128. data/ext/libsass/src/plugins.cpp +188 -0
  129. data/ext/libsass/src/plugins.hpp +57 -0
  130. data/ext/libsass/src/position.cpp +163 -0
  131. data/ext/libsass/src/position.hpp +147 -0
  132. data/ext/libsass/src/prelexer.cpp +1780 -0
  133. data/ext/libsass/src/prelexer.hpp +484 -0
  134. data/ext/libsass/src/remove_placeholders.cpp +86 -0
  135. data/ext/libsass/src/remove_placeholders.hpp +37 -0
  136. data/ext/libsass/src/sass.cpp +156 -0
  137. data/ext/libsass/src/sass.hpp +147 -0
  138. data/ext/libsass/src/sass2scss.cpp +895 -0
  139. data/ext/libsass/src/sass_context.cpp +742 -0
  140. data/ext/libsass/src/sass_context.hpp +129 -0
  141. data/ext/libsass/src/sass_functions.cpp +210 -0
  142. data/ext/libsass/src/sass_functions.hpp +50 -0
  143. data/ext/libsass/src/sass_values.cpp +362 -0
  144. data/ext/libsass/src/sass_values.hpp +82 -0
  145. data/ext/libsass/src/settings.hpp +19 -0
  146. data/ext/libsass/src/source.cpp +69 -0
  147. data/ext/libsass/src/source.hpp +95 -0
  148. data/ext/libsass/src/source_data.hpp +32 -0
  149. data/ext/libsass/src/source_map.cpp +202 -0
  150. data/ext/libsass/src/source_map.hpp +65 -0
  151. data/ext/libsass/src/stylesheet.cpp +22 -0
  152. data/ext/libsass/src/stylesheet.hpp +57 -0
  153. data/ext/libsass/src/to_value.cpp +114 -0
  154. data/ext/libsass/src/to_value.hpp +46 -0
  155. data/ext/libsass/src/units.cpp +507 -0
  156. data/ext/libsass/src/units.hpp +110 -0
  157. data/ext/libsass/src/utf8/checked.h +336 -0
  158. data/ext/libsass/src/utf8/core.h +332 -0
  159. data/ext/libsass/src/utf8/unchecked.h +235 -0
  160. data/ext/libsass/src/utf8.h +34 -0
  161. data/ext/libsass/src/utf8_string.cpp +104 -0
  162. data/ext/libsass/src/utf8_string.hpp +38 -0
  163. data/ext/libsass/src/util.cpp +723 -0
  164. data/ext/libsass/src/util.hpp +105 -0
  165. data/ext/libsass/src/util_string.cpp +125 -0
  166. data/ext/libsass/src/util_string.hpp +73 -0
  167. data/ext/libsass/src/values.cpp +140 -0
  168. data/ext/libsass/src/values.hpp +12 -0
  169. data/lib/sassc/dependency.rb +17 -0
  170. data/lib/sassc/engine.rb +141 -0
  171. data/lib/sassc/error.rb +37 -0
  172. data/lib/sassc/functions_handler.rb +73 -0
  173. data/lib/sassc/import_handler.rb +50 -0
  174. data/lib/sassc/importer.rb +31 -0
  175. data/lib/sassc/native/native_context_api.rb +147 -0
  176. data/lib/sassc/native/native_functions_api.rb +159 -0
  177. data/lib/sassc/native/sass2scss_api.rb +10 -0
  178. data/lib/sassc/native/sass_input_style.rb +13 -0
  179. data/lib/sassc/native/sass_output_style.rb +12 -0
  180. data/lib/sassc/native/sass_value.rb +97 -0
  181. data/lib/sassc/native/string_list.rb +10 -0
  182. data/lib/sassc/native.rb +64 -0
  183. data/lib/sassc/sass_2_scss.rb +9 -0
  184. data/lib/sassc/script/functions.rb +8 -0
  185. data/lib/sassc/script/value/bool.rb +32 -0
  186. data/lib/sassc/script/value/color.rb +95 -0
  187. data/lib/sassc/script/value/list.rb +136 -0
  188. data/lib/sassc/script/value/map.rb +69 -0
  189. data/lib/sassc/script/value/number.rb +389 -0
  190. data/lib/sassc/script/value/string.rb +96 -0
  191. data/lib/sassc/script/value.rb +137 -0
  192. data/lib/sassc/script/value_conversion/base.rb +13 -0
  193. data/lib/sassc/script/value_conversion/bool.rb +13 -0
  194. data/lib/sassc/script/value_conversion/color.rb +18 -0
  195. data/lib/sassc/script/value_conversion/list.rb +25 -0
  196. data/lib/sassc/script/value_conversion/map.rb +21 -0
  197. data/lib/sassc/script/value_conversion/number.rb +13 -0
  198. data/lib/sassc/script/value_conversion/string.rb +17 -0
  199. data/lib/sassc/script/value_conversion.rb +69 -0
  200. data/lib/sassc/script.rb +17 -0
  201. data/lib/sassc/util/normalized_map.rb +117 -0
  202. data/lib/sassc/util.rb +231 -0
  203. data/lib/sassc/version.rb +5 -0
  204. data/lib/sassc.rb +57 -0
  205. data/sassc.gemspec +69 -0
  206. data/test/css_color_level4_test.rb +168 -0
  207. data/test/custom_importer_test.rb +127 -0
  208. data/test/engine_test.rb +314 -0
  209. data/test/error_test.rb +29 -0
  210. data/test/fixtures/paths.scss +10 -0
  211. data/test/functions_test.rb +340 -0
  212. data/test/native_test.rb +213 -0
  213. data/test/output_style_test.rb +107 -0
  214. data/test/sass_2_scss_test.rb +14 -0
  215. data/test/test_helper.rb +45 -0
  216. metadata +396 -0
@@ -0,0 +1,202 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include <string>
6
+ #include <sstream>
7
+ #include <iostream>
8
+ #include <iomanip>
9
+
10
+ #include "ast.hpp"
11
+ #include "json.hpp"
12
+ #include "context.hpp"
13
+ #include "position.hpp"
14
+ #include "source_map.hpp"
15
+
16
+ namespace Sass {
17
+ SourceMap::SourceMap() : current_position(0, 0, 0), file("stdin") { }
18
+ SourceMap::SourceMap(const sass::string& file) : current_position(0, 0, 0), file(file) { }
19
+
20
+ sass::string SourceMap::render_srcmap(Context &ctx) {
21
+
22
+ const bool include_sources = ctx.c_options.source_map_contents;
23
+ const sass::vector<sass::string> links = ctx.srcmap_links;
24
+ const sass::vector<Resource>& sources(ctx.resources);
25
+
26
+ JsonNode* json_srcmap = json_mkobject();
27
+
28
+ json_append_member(json_srcmap, "version", json_mknumber(3));
29
+
30
+ const char *file_name = file.c_str();
31
+ JsonNode *json_file_name = json_mkstring(file_name);
32
+ json_append_member(json_srcmap, "file", json_file_name);
33
+
34
+ // pass-through sourceRoot option
35
+ if (!ctx.source_map_root.empty()) {
36
+ JsonNode* root = json_mkstring(ctx.source_map_root.c_str());
37
+ json_append_member(json_srcmap, "sourceRoot", root);
38
+ }
39
+
40
+ JsonNode *json_sources = json_mkarray();
41
+ for (size_t i = 0; i < source_index.size(); ++i) {
42
+ sass::string source(links[source_index[i]]);
43
+ if (ctx.c_options.source_map_file_urls) {
44
+ source = File::rel2abs(source);
45
+ // check for windows abs path
46
+ if (source[0] == '/') {
47
+ // ends up with three slashes
48
+ source = "file://" + source;
49
+ } else {
50
+ // needs an additional slash
51
+ source = "file:///" + source;
52
+ }
53
+ }
54
+ const char* source_name = source.c_str();
55
+ JsonNode *json_source_name = json_mkstring(source_name);
56
+ json_append_element(json_sources, json_source_name);
57
+ }
58
+ json_append_member(json_srcmap, "sources", json_sources);
59
+
60
+ if (include_sources && source_index.size()) {
61
+ JsonNode *json_contents = json_mkarray();
62
+ for (size_t i = 0; i < source_index.size(); ++i) {
63
+ const Resource& resource(sources[source_index[i]]);
64
+ JsonNode *json_content = json_mkstring(resource.contents);
65
+ json_append_element(json_contents, json_content);
66
+ }
67
+ json_append_member(json_srcmap, "sourcesContent", json_contents);
68
+ }
69
+
70
+ JsonNode *json_names = json_mkarray();
71
+ // so far we have no implementation for names
72
+ // no problem as we do not alter any identifiers
73
+ json_append_member(json_srcmap, "names", json_names);
74
+
75
+ sass::string mappings = serialize_mappings();
76
+ JsonNode *json_mappings = json_mkstring(mappings.c_str());
77
+ json_append_member(json_srcmap, "mappings", json_mappings);
78
+
79
+ char *str = json_stringify(json_srcmap, "\t");
80
+ sass::string result = sass::string(str);
81
+ free(str);
82
+ json_delete(json_srcmap);
83
+ return result;
84
+ }
85
+
86
+ sass::string SourceMap::serialize_mappings() {
87
+ sass::string result = "";
88
+
89
+ size_t previous_generated_line = 0;
90
+ size_t previous_generated_column = 0;
91
+ size_t previous_original_line = 0;
92
+ size_t previous_original_column = 0;
93
+ size_t previous_original_file = 0;
94
+ for (size_t i = 0; i < mappings.size(); ++i) {
95
+ const size_t generated_line = mappings[i].generated_position.line;
96
+ const size_t generated_column = mappings[i].generated_position.column;
97
+ const size_t original_line = mappings[i].original_position.line;
98
+ const size_t original_column = mappings[i].original_position.column;
99
+ const size_t original_file = mappings[i].original_position.file;
100
+
101
+ if (generated_line != previous_generated_line) {
102
+ previous_generated_column = 0;
103
+ if (generated_line > previous_generated_line) {
104
+ result += sass::string(generated_line - previous_generated_line, ';');
105
+ previous_generated_line = generated_line;
106
+ }
107
+ }
108
+ else if (i > 0) {
109
+ result += ",";
110
+ }
111
+
112
+ // generated column
113
+ result += base64vlq.encode(static_cast<int>(generated_column) - static_cast<int>(previous_generated_column));
114
+ previous_generated_column = generated_column;
115
+ // file
116
+ result += base64vlq.encode(static_cast<int>(original_file) - static_cast<int>(previous_original_file));
117
+ previous_original_file = original_file;
118
+ // source line
119
+ result += base64vlq.encode(static_cast<int>(original_line) - static_cast<int>(previous_original_line));
120
+ previous_original_line = original_line;
121
+ // source column
122
+ result += base64vlq.encode(static_cast<int>(original_column) - static_cast<int>(previous_original_column));
123
+ previous_original_column = original_column;
124
+ }
125
+
126
+ return result;
127
+ }
128
+
129
+ void SourceMap::prepend(const OutputBuffer& out)
130
+ {
131
+ Offset size(out.smap.current_position);
132
+ for (Mapping mapping : out.smap.mappings) {
133
+ if (mapping.generated_position.line > size.line) {
134
+ throw(std::runtime_error("prepend sourcemap has illegal line"));
135
+ }
136
+ if (mapping.generated_position.line == size.line) {
137
+ if (mapping.generated_position.column > size.column) {
138
+ throw(std::runtime_error("prepend sourcemap has illegal column"));
139
+ }
140
+ }
141
+ }
142
+ // adjust the buffer offset
143
+ prepend(Offset(out.buffer));
144
+ // now add the new mappings
145
+ VECTOR_UNSHIFT(mappings, out.smap.mappings);
146
+ }
147
+
148
+ void SourceMap::append(const OutputBuffer& out)
149
+ {
150
+ append(Offset(out.buffer));
151
+ }
152
+
153
+ void SourceMap::prepend(const Offset& offset)
154
+ {
155
+ if (offset.line != 0 || offset.column != 0) {
156
+ for (Mapping& mapping : mappings) {
157
+ // move stuff on the first old line
158
+ if (mapping.generated_position.line == 0) {
159
+ mapping.generated_position.column += offset.column;
160
+ }
161
+ // make place for the new lines
162
+ mapping.generated_position.line += offset.line;
163
+ }
164
+ }
165
+ if (current_position.line == 0) {
166
+ current_position.column += offset.column;
167
+ }
168
+ current_position.line += offset.line;
169
+ }
170
+
171
+ void SourceMap::append(const Offset& offset)
172
+ {
173
+ current_position += offset;
174
+ }
175
+
176
+ void SourceMap::add_open_mapping(const AST_Node* node)
177
+ {
178
+ const SourceSpan& span(node->pstate());
179
+ Position from(span.getSrcId(), span.position);
180
+ mappings.push_back(Mapping(from, current_position));
181
+ }
182
+
183
+ void SourceMap::add_close_mapping(const AST_Node* node)
184
+ {
185
+ const SourceSpan& span(node->pstate());
186
+ Position to(span.getSrcId(), span.position + span.offset);
187
+ mappings.push_back(Mapping(to, current_position));
188
+ }
189
+
190
+ SourceSpan SourceMap::remap(const SourceSpan& pstate) {
191
+ for (size_t i = 0; i < mappings.size(); ++i) {
192
+ if (
193
+ mappings[i].generated_position.file == pstate.getSrcId() &&
194
+ mappings[i].generated_position.line == pstate.position.line &&
195
+ mappings[i].generated_position.column == pstate.position.column
196
+ ) return SourceSpan(pstate.source, mappings[i].original_position, pstate.offset);
197
+ }
198
+ return SourceSpan(pstate.source, Position(-1, -1, -1), Offset(0, 0));
199
+
200
+ }
201
+
202
+ }
@@ -0,0 +1,65 @@
1
+ #ifndef SASS_SOURCE_MAP_H
2
+ #define SASS_SOURCE_MAP_H
3
+
4
+ #include <string>
5
+ #include <vector>
6
+
7
+ #include "ast_fwd_decl.hpp"
8
+ #include "base64vlq.hpp"
9
+ #include "position.hpp"
10
+ #include "mapping.hpp"
11
+
12
+ #include "backtrace.hpp"
13
+ #include "memory.hpp"
14
+
15
+ #define VECTOR_PUSH(vec, ins) vec.insert(vec.end(), ins.begin(), ins.end())
16
+ #define VECTOR_UNSHIFT(vec, ins) vec.insert(vec.begin(), ins.begin(), ins.end())
17
+
18
+ namespace Sass {
19
+
20
+ class Context;
21
+ class OutputBuffer;
22
+
23
+ class SourceMap {
24
+
25
+ public:
26
+ sass::vector<size_t> source_index;
27
+ SourceMap();
28
+ SourceMap(const sass::string& file);
29
+
30
+ void append(const Offset& offset);
31
+ void prepend(const Offset& offset);
32
+ void append(const OutputBuffer& out);
33
+ void prepend(const OutputBuffer& out);
34
+ void add_open_mapping(const AST_Node* node);
35
+ void add_close_mapping(const AST_Node* node);
36
+
37
+ sass::string render_srcmap(Context &ctx);
38
+ SourceSpan remap(const SourceSpan& pstate);
39
+
40
+ private:
41
+
42
+ sass::string serialize_mappings();
43
+
44
+ sass::vector<Mapping> mappings;
45
+ Position current_position;
46
+ public:
47
+ sass::string file;
48
+ private:
49
+ Base64VLQ base64vlq;
50
+ };
51
+
52
+ class OutputBuffer {
53
+ public:
54
+ OutputBuffer(void)
55
+ : buffer(),
56
+ smap()
57
+ { }
58
+ public:
59
+ sass::string buffer;
60
+ SourceMap smap;
61
+ };
62
+
63
+ }
64
+
65
+ #endif
@@ -0,0 +1,22 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include "stylesheet.hpp"
6
+
7
+ namespace Sass {
8
+
9
+ // Constructor
10
+ Sass::StyleSheet::StyleSheet(const Resource& res, Block_Obj root) :
11
+ Resource(res),
12
+ root(root)
13
+ {
14
+ }
15
+
16
+ StyleSheet::StyleSheet(const StyleSheet& sheet) :
17
+ Resource(sheet),
18
+ root(sheet.root)
19
+ {
20
+ }
21
+
22
+ }
@@ -0,0 +1,57 @@
1
+ #ifndef SASS_STYLESHEET_H
2
+ #define SASS_STYLESHEET_H
3
+
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+
8
+ #include "ast_fwd_decl.hpp"
9
+ #include "extender.hpp"
10
+ #include "file.hpp"
11
+
12
+ namespace Sass {
13
+
14
+ // parsed stylesheet from loaded resource
15
+ // this should be a `Module` for sass 4.0
16
+ class StyleSheet : public Resource {
17
+ public:
18
+
19
+ // The canonical URL for this module's source file. This may be `null`
20
+ // if the module was loaded from a string without a URL provided.
21
+ // Uri get url;
22
+
23
+ // Modules that this module uses.
24
+ // List<Module> get upstream;
25
+
26
+ // The module's variables.
27
+ // Map<String, Value> get variables;
28
+
29
+ // The module's functions. Implementations must ensure
30
+ // that each [Callable] is stored under its own name.
31
+ // Map<String, Callable> get functions;
32
+
33
+ // The module's mixins. Implementations must ensure that
34
+ // each [Callable] is stored under its own name.
35
+ // Map<String, Callable> get mixins;
36
+
37
+ // The extensions defined in this module, which is also able to update
38
+ // [css]'s style rules in-place based on downstream extensions.
39
+ // Extender extender;
40
+
41
+ // The module's CSS tree.
42
+ Block_Obj root;
43
+
44
+ public:
45
+
46
+ // default argument constructor
47
+ StyleSheet(const Resource& res, Block_Obj root);
48
+
49
+ // Copy constructor
50
+ StyleSheet(const StyleSheet& res);
51
+
52
+ };
53
+
54
+
55
+ }
56
+
57
+ #endif
@@ -0,0 +1,114 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include "ast.hpp"
6
+ #include "to_value.hpp"
7
+
8
+ namespace Sass {
9
+
10
+ // Custom_Error is a valid value
11
+ Value* To_Value::operator()(Custom_Error* e)
12
+ {
13
+ return e;
14
+ }
15
+
16
+ // Custom_Warning is a valid value
17
+ Value* To_Value::operator()(Custom_Warning* w)
18
+ {
19
+ return w;
20
+ }
21
+
22
+ // Boolean is a valid value
23
+ Value* To_Value::operator()(Boolean* b)
24
+ {
25
+ return b;
26
+ }
27
+
28
+ // Number is a valid value
29
+ Value* To_Value::operator()(Number* n)
30
+ {
31
+ return n;
32
+ }
33
+
34
+ // Color is a valid value
35
+ Value* To_Value::operator()(Color_RGBA* c)
36
+ {
37
+ return c;
38
+ }
39
+
40
+ // Color is a valid value
41
+ Value* To_Value::operator()(Color_HSLA* c)
42
+ {
43
+ return c;
44
+ }
45
+
46
+ // String_Constant is a valid value
47
+ Value* To_Value::operator()(String_Constant* s)
48
+ {
49
+ return s;
50
+ }
51
+
52
+ // String_Quoted is a valid value
53
+ Value* To_Value::operator()(String_Quoted* s)
54
+ {
55
+ return s;
56
+ }
57
+
58
+ // List is a valid value
59
+ Value* To_Value::operator()(List* l)
60
+ {
61
+ List_Obj ll = SASS_MEMORY_NEW(List,
62
+ l->pstate(),
63
+ l->length(),
64
+ l->separator(),
65
+ l->is_arglist(),
66
+ l->is_bracketed());
67
+ for (size_t i = 0, L = l->length(); i < L; ++i) {
68
+ ll->append((*l)[i]->perform(this));
69
+ }
70
+ return ll.detach();
71
+ }
72
+
73
+ // Map is a valid value
74
+ Value* To_Value::operator()(Map* m)
75
+ {
76
+ return m;
77
+ }
78
+
79
+ // Null is a valid value
80
+ Value* To_Value::operator()(Null* n)
81
+ {
82
+ return n;
83
+ }
84
+
85
+ // Function is a valid value
86
+ Value* To_Value::operator()(Function* n)
87
+ {
88
+ return n;
89
+ }
90
+
91
+ // Argument returns its value
92
+ Value* To_Value::operator()(Argument* arg)
93
+ {
94
+ if (!arg->name().empty()) return 0;
95
+ return arg->value()->perform(this);
96
+ }
97
+
98
+ // SelectorList is converted to a string
99
+ Value* To_Value::operator()(SelectorList* s)
100
+ {
101
+ return SASS_MEMORY_NEW(String_Quoted,
102
+ s->pstate(),
103
+ s->to_string(ctx.c_options));
104
+ }
105
+
106
+ // Binary_Expression is converted to a string
107
+ Value* To_Value::operator()(Binary_Expression* s)
108
+ {
109
+ return SASS_MEMORY_NEW(String_Quoted,
110
+ s->pstate(),
111
+ s->to_string(ctx.c_options));
112
+ }
113
+
114
+ };
@@ -0,0 +1,46 @@
1
+ #ifndef SASS_TO_VALUE_H
2
+ #define SASS_TO_VALUE_H
3
+
4
+ #include "operation.hpp"
5
+ #include "sass/values.h"
6
+ #include "ast_fwd_decl.hpp"
7
+
8
+ namespace Sass {
9
+
10
+ class To_Value : public Operation_CRTP<Value*, To_Value> {
11
+
12
+ private:
13
+
14
+ Context& ctx;
15
+
16
+ public:
17
+
18
+ To_Value(Context& ctx)
19
+ : ctx(ctx)
20
+ { }
21
+ ~To_Value() { }
22
+ using Operation<Value*>::operator();
23
+
24
+ Value* operator()(Argument*);
25
+ Value* operator()(Boolean*);
26
+ Value* operator()(Number*);
27
+ Value* operator()(Color_RGBA*);
28
+ Value* operator()(Color_HSLA*);
29
+ Value* operator()(String_Constant*);
30
+ Value* operator()(String_Quoted*);
31
+ Value* operator()(Custom_Warning*);
32
+ Value* operator()(Custom_Error*);
33
+ Value* operator()(List*);
34
+ Value* operator()(Map*);
35
+ Value* operator()(Null*);
36
+ Value* operator()(Function*);
37
+
38
+ // convert to string via `To_String`
39
+ Value* operator()(SelectorList*);
40
+ Value* operator()(Binary_Expression*);
41
+
42
+ };
43
+
44
+ }
45
+
46
+ #endif