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,320 @@
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 "output.hpp"
7
+ #include "util.hpp"
8
+
9
+ namespace Sass {
10
+
11
+ Output::Output(Sass_Output_Options& opt)
12
+ : Inspect(Emitter(opt)),
13
+ charset(""),
14
+ top_nodes(0)
15
+ {}
16
+
17
+ Output::~Output() { }
18
+
19
+ void Output::fallback_impl(AST_Node* n)
20
+ {
21
+ return n->perform(this);
22
+ }
23
+
24
+ void Output::operator()(Number* n)
25
+ {
26
+ // check for a valid unit here
27
+ // includes result for reporting
28
+ if (!n->is_valid_css_unit()) {
29
+ // should be handle in check_expression
30
+ throw Exception::InvalidValue({}, *n);
31
+ }
32
+ // use values to_string facility
33
+ sass::string res = n->to_string(opt);
34
+ // output the final token
35
+ append_token(res, n);
36
+ }
37
+
38
+ void Output::operator()(Import* imp)
39
+ {
40
+ top_nodes.push_back(imp);
41
+ }
42
+
43
+ void Output::operator()(Map* m)
44
+ {
45
+ // should be handle in check_expression
46
+ throw Exception::InvalidValue({}, *m);
47
+ }
48
+
49
+ OutputBuffer Output::get_buffer(void)
50
+ {
51
+
52
+ Emitter emitter(opt);
53
+ Inspect inspect(emitter);
54
+
55
+ size_t size_nodes = top_nodes.size();
56
+ for (size_t i = 0; i < size_nodes; i++) {
57
+ top_nodes[i]->perform(&inspect);
58
+ inspect.append_mandatory_linefeed();
59
+ }
60
+
61
+ // flush scheduled outputs
62
+ // maybe omit semicolon if possible
63
+ inspect.finalize(wbuf.buffer.size() == 0);
64
+ // prepend buffer on top
65
+ prepend_output(inspect.output());
66
+ // make sure we end with a linefeed
67
+ if (!ends_with(wbuf.buffer, opt.linefeed)) {
68
+ // if the output is not completely empty
69
+ if (!wbuf.buffer.empty()) append_string(opt.linefeed);
70
+ }
71
+
72
+ // search for unicode char
73
+ for(const char& chr : wbuf.buffer) {
74
+ // skip all ascii chars
75
+ // static cast to unsigned to handle `char` being signed / unsigned
76
+ if (static_cast<unsigned>(chr) < 128) continue;
77
+ // declare the charset
78
+ if (output_style() != COMPRESSED)
79
+ charset = "@charset \"UTF-8\";"
80
+ + sass::string(opt.linefeed);
81
+ else charset = "\xEF\xBB\xBF";
82
+ // abort search
83
+ break;
84
+ }
85
+
86
+ // add charset as first line, before comments and imports
87
+ if (!charset.empty()) prepend_string(charset);
88
+
89
+ return wbuf;
90
+
91
+ }
92
+
93
+ void Output::operator()(Comment* c)
94
+ {
95
+ // if (indentation && txt == "/**/") return;
96
+ bool important = c->is_important();
97
+ if (output_style() != COMPRESSED || important) {
98
+ if (buffer().size() == 0) {
99
+ top_nodes.push_back(c);
100
+ } else {
101
+ in_comment = true;
102
+ append_indentation();
103
+ c->text()->perform(this);
104
+ in_comment = false;
105
+ if (indentation == 0) {
106
+ append_mandatory_linefeed();
107
+ } else {
108
+ append_optional_linefeed();
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+ void Output::operator()(StyleRule* r)
115
+ {
116
+ Block_Obj b = r->block();
117
+ SelectorListObj s = r->selector();
118
+
119
+ if (!s || s->empty()) return;
120
+
121
+ // Filter out rulesets that aren't printable (process its children though)
122
+ if (!Util::isPrintable(r, output_style())) {
123
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
124
+ const Statement_Obj& stm = b->get(i);
125
+ if (Cast<ParentStatement>(stm)) {
126
+ if (!Cast<Declaration>(stm)) {
127
+ stm->perform(this);
128
+ }
129
+ }
130
+ }
131
+ return;
132
+ }
133
+
134
+ if (output_style() == NESTED) {
135
+ indentation += r->tabs();
136
+ }
137
+ if (opt.source_comments) {
138
+ sass::ostream ss;
139
+ append_indentation();
140
+ sass::string path(File::abs2rel(r->pstate().getPath()));
141
+ ss << "/* line " << r->pstate().getLine() << ", " << path << " */";
142
+ append_string(ss.str());
143
+ append_optional_linefeed();
144
+ }
145
+ scheduled_crutch = s;
146
+ if (s) s->perform(this);
147
+ append_scope_opener(b);
148
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
149
+ Statement_Obj stm = b->get(i);
150
+ bool bPrintExpression = true;
151
+ // Check print conditions
152
+ if (Declaration* dec = Cast<Declaration>(stm)) {
153
+ if (const String_Constant* valConst = Cast<String_Constant>(dec->value())) {
154
+ const sass::string& val = valConst->value();
155
+ if (const String_Quoted* qstr = Cast<const String_Quoted>(valConst)) {
156
+ if (!qstr->quote_mark() && val.empty()) {
157
+ bPrintExpression = false;
158
+ }
159
+ }
160
+ }
161
+ else if (List* list = Cast<List>(dec->value())) {
162
+ bool all_invisible = true;
163
+ for (size_t list_i = 0, list_L = list->length(); list_i < list_L; ++list_i) {
164
+ Expression* item = list->get(list_i);
165
+ if (!item->is_invisible()) all_invisible = false;
166
+ }
167
+ if (all_invisible && !list->is_bracketed()) bPrintExpression = false;
168
+ }
169
+ }
170
+ // Print if OK
171
+ if (bPrintExpression) {
172
+ stm->perform(this);
173
+ }
174
+ }
175
+ if (output_style() == NESTED) indentation -= r->tabs();
176
+ append_scope_closer(b);
177
+
178
+ }
179
+ void Output::operator()(Keyframe_Rule* r)
180
+ {
181
+ Block_Obj b = r->block();
182
+ Selector_Obj v = r->name();
183
+
184
+ if (!v.isNull()) {
185
+ v->perform(this);
186
+ }
187
+
188
+ if (!b) {
189
+ append_colon_separator();
190
+ return;
191
+ }
192
+
193
+ append_scope_opener();
194
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
195
+ Statement_Obj stm = b->get(i);
196
+ stm->perform(this);
197
+ if (i < L - 1) append_special_linefeed();
198
+ }
199
+ append_scope_closer();
200
+ }
201
+
202
+ void Output::operator()(SupportsRule* f)
203
+ {
204
+ if (f->is_invisible()) return;
205
+
206
+ SupportsConditionObj c = f->condition();
207
+ Block_Obj b = f->block();
208
+
209
+ // Filter out feature blocks that aren't printable (process its children though)
210
+ if (!Util::isPrintable(f, output_style())) {
211
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
212
+ Statement_Obj stm = b->get(i);
213
+ if (Cast<ParentStatement>(stm)) {
214
+ stm->perform(this);
215
+ }
216
+ }
217
+ return;
218
+ }
219
+
220
+ if (output_style() == NESTED) indentation += f->tabs();
221
+ append_indentation();
222
+ append_token("@supports", f);
223
+ append_mandatory_space();
224
+ c->perform(this);
225
+ append_scope_opener();
226
+
227
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
228
+ Statement_Obj stm = b->get(i);
229
+ stm->perform(this);
230
+ if (i < L - 1) append_special_linefeed();
231
+ }
232
+
233
+ if (output_style() == NESTED) indentation -= f->tabs();
234
+
235
+ append_scope_closer();
236
+
237
+ }
238
+
239
+ void Output::operator()(CssMediaRule* rule)
240
+ {
241
+ // Avoid null pointer exception
242
+ if (rule == nullptr) return;
243
+ // Skip empty/invisible rule
244
+ if (rule->isInvisible()) return;
245
+ // Avoid null pointer exception
246
+ if (rule->block() == nullptr) return;
247
+ // Skip empty/invisible rule
248
+ if (rule->block()->isInvisible()) return;
249
+ // Skip if block is empty/invisible
250
+ if (Util::isPrintable(rule, output_style())) {
251
+ // Let inspect do its magic
252
+ Inspect::operator()(rule);
253
+ }
254
+ }
255
+
256
+ void Output::operator()(AtRule* a)
257
+ {
258
+ sass::string kwd = a->keyword();
259
+ Selector_Obj s = a->selector();
260
+ ExpressionObj v = a->value();
261
+ Block_Obj b = a->block();
262
+
263
+ append_indentation();
264
+ append_token(kwd, a);
265
+ if (s) {
266
+ append_mandatory_space();
267
+ in_wrapped = true;
268
+ s->perform(this);
269
+ in_wrapped = false;
270
+ }
271
+ if (v) {
272
+ append_mandatory_space();
273
+ // ruby sass bug? should use options?
274
+ append_token(v->to_string(/* opt */), v);
275
+ }
276
+ if (!b) {
277
+ append_delimiter();
278
+ return;
279
+ }
280
+
281
+ if (b->is_invisible() || b->length() == 0) {
282
+ append_optional_space();
283
+ return append_string("{}");
284
+ }
285
+
286
+ append_scope_opener();
287
+
288
+ bool format = kwd != "@font-face";;
289
+
290
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
291
+ Statement_Obj stm = b->get(i);
292
+ if (stm) stm->perform(this);
293
+ if (i < L - 1 && format) append_special_linefeed();
294
+ }
295
+
296
+ append_scope_closer();
297
+ }
298
+
299
+ void Output::operator()(String_Quoted* s)
300
+ {
301
+ if (s->quote_mark()) {
302
+ append_token(quote(s->value(), s->quote_mark()), s);
303
+ } else if (!in_comment) {
304
+ append_token(string_to_output(s->value()), s);
305
+ } else {
306
+ append_token(s->value(), s);
307
+ }
308
+ }
309
+
310
+ void Output::operator()(String_Constant* s)
311
+ {
312
+ sass::string value(s->value());
313
+ if (!in_comment && !in_custom_property) {
314
+ append_token(string_to_output(value), s);
315
+ } else {
316
+ append_token(value, s);
317
+ }
318
+ }
319
+
320
+ }
@@ -0,0 +1,47 @@
1
+ #ifndef SASS_OUTPUT_H
2
+ #define SASS_OUTPUT_H
3
+
4
+ #include <string>
5
+ #include <vector>
6
+
7
+ #include "util.hpp"
8
+ #include "inspect.hpp"
9
+ #include "operation.hpp"
10
+
11
+ namespace Sass {
12
+ class Context;
13
+
14
+ class Output : public Inspect {
15
+ protected:
16
+ using Inspect::operator();
17
+
18
+ public:
19
+ Output(Sass_Output_Options& opt);
20
+ virtual ~Output();
21
+
22
+ protected:
23
+ sass::string charset;
24
+ sass::vector<AST_Node*> top_nodes;
25
+
26
+ public:
27
+ OutputBuffer get_buffer(void);
28
+
29
+ virtual void operator()(Map*);
30
+ virtual void operator()(StyleRule*);
31
+ virtual void operator()(SupportsRule*);
32
+ virtual void operator()(CssMediaRule*);
33
+ virtual void operator()(AtRule*);
34
+ virtual void operator()(Keyframe_Rule*);
35
+ virtual void operator()(Import*);
36
+ virtual void operator()(Comment*);
37
+ virtual void operator()(Number*);
38
+ virtual void operator()(String_Quoted*);
39
+ virtual void operator()(String_Constant*);
40
+
41
+ void fallback_impl(AST_Node* n);
42
+
43
+ };
44
+
45
+ }
46
+
47
+ #endif