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,498 @@
1
+ #ifndef SASS_AST_VALUES_H
2
+ #define SASS_AST_VALUES_H
3
+
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
+
9
+ namespace Sass {
10
+
11
+ //////////////////////////////////////////////////////////////////////
12
+ // Still just an expression, but with a to_string method
13
+ //////////////////////////////////////////////////////////////////////
14
+ class PreValue : public Expression {
15
+ public:
16
+ PreValue(SourceSpan pstate, bool d = false, bool e = false, bool i = false, Type ct = NONE);
17
+ ATTACH_VIRTUAL_AST_OPERATIONS(PreValue);
18
+ virtual ~PreValue() { }
19
+ };
20
+
21
+ //////////////////////////////////////////////////////////////////////
22
+ // base class for values that support operations
23
+ //////////////////////////////////////////////////////////////////////
24
+ class Value : public PreValue {
25
+ public:
26
+ Value(SourceSpan pstate, bool d = false, bool e = false, bool i = false, Type ct = NONE);
27
+
28
+ // Some obects are not meant to be compared
29
+ // ToDo: maybe fallback to pointer comparison?
30
+ virtual bool operator< (const Expression& rhs) const override = 0;
31
+ virtual bool operator== (const Expression& rhs) const override = 0;
32
+
33
+ // We can give some reasonable implementations by using
34
+ // inverst operators on the specialized implementations
35
+ virtual bool operator> (const Expression& rhs) const {
36
+ return rhs < *this;
37
+ }
38
+ virtual bool operator!= (const Expression& rhs) const {
39
+ return !(*this == rhs);
40
+ }
41
+
42
+ ATTACH_VIRTUAL_AST_OPERATIONS(Value);
43
+
44
+ };
45
+
46
+ ///////////////////////////////////////////////////////////////////////
47
+ // Lists of values, both comma- and space-separated (distinguished by a
48
+ // type-tag.) Also used to represent variable-length argument lists.
49
+ ///////////////////////////////////////////////////////////////////////
50
+ class List : public Value, public Vectorized<ExpressionObj> {
51
+ void adjust_after_pushing(ExpressionObj e) override { is_expanded(false); }
52
+ private:
53
+ ADD_PROPERTY(enum Sass_Separator, separator)
54
+ ADD_PROPERTY(bool, is_arglist)
55
+ ADD_PROPERTY(bool, is_bracketed)
56
+ ADD_PROPERTY(bool, from_selector)
57
+ public:
58
+ List(SourceSpan pstate, size_t size = 0, enum Sass_Separator sep = SASS_SPACE, bool argl = false, bool bracket = false);
59
+ sass::string type() const override { return is_arglist_ ? "arglist" : "list"; }
60
+ static sass::string type_name() { return "list"; }
61
+ const char* sep_string(bool compressed = false) const {
62
+ return separator() == SASS_SPACE ?
63
+ " " : (compressed ? "," : ", ");
64
+ }
65
+ bool is_invisible() const override { return empty() && !is_bracketed(); }
66
+ ExpressionObj value_at_index(size_t i);
67
+
68
+ virtual size_t hash() const override;
69
+ virtual size_t size() const;
70
+ virtual void set_delayed(bool delayed) override;
71
+
72
+ virtual bool operator< (const Expression& rhs) const override;
73
+ virtual bool operator== (const Expression& rhs) const override;
74
+
75
+ ATTACH_AST_OPERATIONS(List)
76
+ ATTACH_CRTP_PERFORM_METHODS()
77
+ };
78
+
79
+ ///////////////////////////////////////////////////////////////////////
80
+ // Key value paris.
81
+ ///////////////////////////////////////////////////////////////////////
82
+ class Map : public Value, public Hashed<ExpressionObj, ExpressionObj, Map_Obj> {
83
+ void adjust_after_pushing(std::pair<ExpressionObj, ExpressionObj> p) override { is_expanded(false); }
84
+ public:
85
+ Map(SourceSpan pstate, size_t size = 0);
86
+ sass::string type() const override { return "map"; }
87
+ static sass::string type_name() { return "map"; }
88
+ bool is_invisible() const override { return empty(); }
89
+ List_Obj to_list(SourceSpan& pstate);
90
+
91
+ virtual size_t hash() const override;
92
+
93
+ virtual bool operator< (const Expression& rhs) const override;
94
+ virtual bool operator== (const Expression& rhs) const override;
95
+
96
+ ATTACH_AST_OPERATIONS(Map)
97
+ ATTACH_CRTP_PERFORM_METHODS()
98
+ };
99
+
100
+
101
+ //////////////////////////////////////////////////////////////////////////
102
+ // Binary expressions. Represents logical, relational, and arithmetic
103
+ // operations. Templatized to avoid large switch statements and repetitive
104
+ // subclassing.
105
+ //////////////////////////////////////////////////////////////////////////
106
+ class Binary_Expression : public PreValue {
107
+ private:
108
+ HASH_PROPERTY(Operand, op)
109
+ HASH_PROPERTY(ExpressionObj, left)
110
+ HASH_PROPERTY(ExpressionObj, right)
111
+ mutable size_t hash_;
112
+ public:
113
+ Binary_Expression(SourceSpan pstate,
114
+ Operand op, ExpressionObj lhs, ExpressionObj rhs);
115
+
116
+ const sass::string type_name();
117
+ const sass::string separator();
118
+ bool is_left_interpolant(void) const override;
119
+ bool is_right_interpolant(void) const override;
120
+ bool has_interpolant() const override;
121
+
122
+ virtual void set_delayed(bool delayed) override;
123
+
124
+ virtual bool operator< (const Expression& rhs) const override;
125
+ virtual bool operator==(const Expression& rhs) const override;
126
+
127
+ virtual size_t hash() const override;
128
+ enum Sass_OP optype() const { return op_.operand; }
129
+ ATTACH_AST_OPERATIONS(Binary_Expression)
130
+ ATTACH_CRTP_PERFORM_METHODS()
131
+ };
132
+
133
+ ////////////////////////////////////////////////////
134
+ // Function reference.
135
+ ////////////////////////////////////////////////////
136
+ class Function final : public Value {
137
+ public:
138
+ ADD_PROPERTY(Definition_Obj, definition)
139
+ ADD_PROPERTY(bool, is_css)
140
+ public:
141
+ Function(SourceSpan pstate, Definition_Obj def, bool css);
142
+
143
+ sass::string type() const override { return "function"; }
144
+ static sass::string type_name() { return "function"; }
145
+ bool is_invisible() const override { return true; }
146
+
147
+ sass::string name();
148
+
149
+ bool operator< (const Expression& rhs) const override;
150
+ bool operator== (const Expression& rhs) const override;
151
+
152
+ ATTACH_AST_OPERATIONS(Function)
153
+ ATTACH_CRTP_PERFORM_METHODS()
154
+ };
155
+
156
+ //////////////////
157
+ // Function calls.
158
+ //////////////////
159
+ class Function_Call final : public PreValue {
160
+ HASH_CONSTREF(String_Obj, sname)
161
+ HASH_PROPERTY(Arguments_Obj, arguments)
162
+ HASH_PROPERTY(Function_Obj, func)
163
+ ADD_PROPERTY(bool, via_call)
164
+ ADD_PROPERTY(void*, cookie)
165
+ mutable size_t hash_;
166
+ public:
167
+ Function_Call(SourceSpan pstate, sass::string n, Arguments_Obj args, void* cookie);
168
+ Function_Call(SourceSpan pstate, sass::string n, Arguments_Obj args, Function_Obj func);
169
+ Function_Call(SourceSpan pstate, sass::string n, Arguments_Obj args);
170
+
171
+ Function_Call(SourceSpan pstate, String_Obj n, Arguments_Obj args, void* cookie);
172
+ Function_Call(SourceSpan pstate, String_Obj n, Arguments_Obj args, Function_Obj func);
173
+ Function_Call(SourceSpan pstate, String_Obj n, Arguments_Obj args);
174
+
175
+ sass::string name() const;
176
+ bool is_css();
177
+
178
+ bool operator==(const Expression& rhs) const override;
179
+
180
+ size_t hash() const override;
181
+
182
+ ATTACH_AST_OPERATIONS(Function_Call)
183
+ ATTACH_CRTP_PERFORM_METHODS()
184
+ };
185
+
186
+ ///////////////////////
187
+ // Variable references.
188
+ ///////////////////////
189
+ class Variable final : public PreValue {
190
+ ADD_CONSTREF(sass::string, name)
191
+ public:
192
+ Variable(SourceSpan pstate, sass::string n);
193
+ virtual bool operator==(const Expression& rhs) const override;
194
+ virtual size_t hash() const override;
195
+ ATTACH_AST_OPERATIONS(Variable)
196
+ ATTACH_CRTP_PERFORM_METHODS()
197
+ };
198
+
199
+ ////////////////////////////////////////////////
200
+ // Numbers, percentages, dimensions, and colors.
201
+ ////////////////////////////////////////////////
202
+ class Number final : public Value, public Units {
203
+ HASH_PROPERTY(double, value)
204
+ ADD_PROPERTY(bool, zero)
205
+ mutable size_t hash_;
206
+ public:
207
+ Number(SourceSpan pstate, double val, sass::string u = "", bool zero = true);
208
+
209
+ bool zero() { return zero_; }
210
+
211
+ sass::string type() const override { return "number"; }
212
+ static sass::string type_name() { return "number"; }
213
+
214
+ // cancel out unnecessary units
215
+ // result will be in input units
216
+ void reduce();
217
+
218
+ // normalize units to defaults
219
+ // needed to compare two numbers
220
+ void normalize();
221
+
222
+ size_t hash() const override;
223
+
224
+ bool operator< (const Number& rhs) const;
225
+ bool operator== (const Number& rhs) const;
226
+ bool operator< (const Expression& rhs) const override;
227
+ bool operator== (const Expression& rhs) const override;
228
+ ATTACH_AST_OPERATIONS(Number)
229
+ ATTACH_CRTP_PERFORM_METHODS()
230
+ };
231
+
232
+ //////////
233
+ // Colors.
234
+ //////////
235
+ class Color : public Value {
236
+ ADD_CONSTREF(sass::string, disp)
237
+ HASH_PROPERTY(double, a)
238
+ protected:
239
+ mutable size_t hash_;
240
+ public:
241
+ Color(SourceSpan pstate, double a = 1, const sass::string disp = "");
242
+
243
+ sass::string type() const override { return "color"; }
244
+ static sass::string type_name() { return "color"; }
245
+
246
+ virtual size_t hash() const override = 0;
247
+
248
+ bool operator< (const Expression& rhs) const override;
249
+ bool operator== (const Expression& rhs) const override;
250
+
251
+ virtual Color_RGBA* copyAsRGBA() const = 0;
252
+ virtual Color_RGBA* toRGBA() = 0;
253
+
254
+ virtual Color_HSLA* copyAsHSLA() const = 0;
255
+ virtual Color_HSLA* toHSLA() = 0;
256
+
257
+ ATTACH_VIRTUAL_AST_OPERATIONS(Color)
258
+ };
259
+
260
+ //////////
261
+ // Colors.
262
+ //////////
263
+ class Color_RGBA final : public Color {
264
+ HASH_PROPERTY(double, r)
265
+ HASH_PROPERTY(double, g)
266
+ HASH_PROPERTY(double, b)
267
+ public:
268
+ Color_RGBA(SourceSpan pstate, double r, double g, double b, double a = 1, const sass::string disp = "");
269
+
270
+ sass::string type() const override { return "color"; }
271
+ static sass::string type_name() { return "color"; }
272
+
273
+ size_t hash() const override;
274
+
275
+ Color_RGBA* copyAsRGBA() const override;
276
+ Color_RGBA* toRGBA() override { return this; }
277
+
278
+ Color_HSLA* copyAsHSLA() const override;
279
+ Color_HSLA* toHSLA() override { return copyAsHSLA(); }
280
+
281
+ bool operator< (const Expression& rhs) const override;
282
+ bool operator== (const Expression& rhs) const override;
283
+
284
+ ATTACH_AST_OPERATIONS(Color_RGBA)
285
+ ATTACH_CRTP_PERFORM_METHODS()
286
+ };
287
+
288
+
289
+ //////////
290
+ // Colors.
291
+ //////////
292
+ class Color_HSLA final : public Color {
293
+ HASH_PROPERTY(double, h)
294
+ HASH_PROPERTY(double, s)
295
+ HASH_PROPERTY(double, l)
296
+ public:
297
+ Color_HSLA(SourceSpan pstate, double h, double s, double l, double a = 1, const sass::string disp = "");
298
+
299
+ sass::string type() const override { return "color"; }
300
+ static sass::string type_name() { return "color"; }
301
+
302
+ size_t hash() const override;
303
+
304
+ Color_RGBA* copyAsRGBA() const override;
305
+ Color_RGBA* toRGBA() override { return copyAsRGBA(); }
306
+
307
+ Color_HSLA* copyAsHSLA() const override;
308
+ Color_HSLA* toHSLA() override { return this; }
309
+
310
+ bool operator< (const Expression& rhs) const override;
311
+ bool operator== (const Expression& rhs) const override;
312
+
313
+ ATTACH_AST_OPERATIONS(Color_HSLA)
314
+ ATTACH_CRTP_PERFORM_METHODS()
315
+ };
316
+
317
+ //////////////////////////////
318
+ // Errors from Sass_Values.
319
+ //////////////////////////////
320
+ class Custom_Error final : public Value {
321
+ ADD_CONSTREF(sass::string, message)
322
+ public:
323
+ Custom_Error(SourceSpan pstate, sass::string msg);
324
+ bool operator< (const Expression& rhs) const override;
325
+ bool operator== (const Expression& rhs) const override;
326
+ ATTACH_AST_OPERATIONS(Custom_Error)
327
+ ATTACH_CRTP_PERFORM_METHODS()
328
+ };
329
+
330
+ //////////////////////////////
331
+ // Warnings from Sass_Values.
332
+ //////////////////////////////
333
+ class Custom_Warning final : public Value {
334
+ ADD_CONSTREF(sass::string, message)
335
+ public:
336
+ Custom_Warning(SourceSpan pstate, sass::string msg);
337
+ bool operator< (const Expression& rhs) const override;
338
+ bool operator== (const Expression& rhs) const override;
339
+ ATTACH_AST_OPERATIONS(Custom_Warning)
340
+ ATTACH_CRTP_PERFORM_METHODS()
341
+ };
342
+
343
+ ////////////
344
+ // Booleans.
345
+ ////////////
346
+ class Boolean final : public Value {
347
+ HASH_PROPERTY(bool, value)
348
+ mutable size_t hash_;
349
+ public:
350
+ Boolean(SourceSpan pstate, bool val);
351
+ operator bool() override { return value_; }
352
+
353
+ sass::string type() const override { return "bool"; }
354
+ static sass::string type_name() { return "bool"; }
355
+
356
+ size_t hash() const override;
357
+
358
+ bool is_false() override { return !value_; }
359
+
360
+ bool operator< (const Expression& rhs) const override;
361
+ bool operator== (const Expression& rhs) const override;
362
+
363
+ ATTACH_AST_OPERATIONS(Boolean)
364
+ ATTACH_CRTP_PERFORM_METHODS()
365
+ };
366
+
367
+ ////////////////////////////////////////////////////////////////////////
368
+ // Abstract base class for Sass string values. Includes interpolated and
369
+ // "flat" strings.
370
+ ////////////////////////////////////////////////////////////////////////
371
+ class String : public Value {
372
+ public:
373
+ String(SourceSpan pstate, bool delayed = false);
374
+ static sass::string type_name() { return "string"; }
375
+ virtual ~String() = 0;
376
+ virtual void rtrim() = 0;
377
+ virtual bool operator<(const Expression& rhs) const override {
378
+ return this->to_string() < rhs.to_string();
379
+ };
380
+ virtual bool operator==(const Expression& rhs) const override {
381
+ return this->to_string() == rhs.to_string();
382
+ };
383
+ ATTACH_VIRTUAL_AST_OPERATIONS(String);
384
+ ATTACH_CRTP_PERFORM_METHODS()
385
+ };
386
+ inline String::~String() { };
387
+
388
+ ///////////////////////////////////////////////////////////////////////
389
+ // Interpolated strings. Meant to be reduced to flat strings during the
390
+ // evaluation phase.
391
+ ///////////////////////////////////////////////////////////////////////
392
+ class String_Schema final : public String, public Vectorized<PreValueObj> {
393
+ ADD_PROPERTY(bool, css)
394
+ mutable size_t hash_;
395
+ public:
396
+ String_Schema(SourceSpan pstate, size_t size = 0, bool css = true);
397
+
398
+ sass::string type() const override { return "string"; }
399
+ static sass::string type_name() { return "string"; }
400
+
401
+ bool is_left_interpolant(void) const override;
402
+ bool is_right_interpolant(void) const override;
403
+
404
+ bool has_interpolants();
405
+ void rtrim() override;
406
+ size_t hash() const override;
407
+ virtual void set_delayed(bool delayed) override;
408
+
409
+ bool operator< (const Expression& rhs) const override;
410
+ bool operator==(const Expression& rhs) const override;
411
+ ATTACH_AST_OPERATIONS(String_Schema)
412
+ ATTACH_CRTP_PERFORM_METHODS()
413
+ };
414
+
415
+ ////////////////////////////////////////////////////////
416
+ // Flat strings -- the lowest level of raw textual data.
417
+ ////////////////////////////////////////////////////////
418
+ class String_Constant : public String {
419
+ ADD_PROPERTY(char, quote_mark)
420
+ HASH_CONSTREF(sass::string, value)
421
+ protected:
422
+ mutable size_t hash_;
423
+ public:
424
+ String_Constant(SourceSpan pstate, sass::string val, bool css = true);
425
+ String_Constant(SourceSpan pstate, const char* beg, bool css = true);
426
+ String_Constant(SourceSpan pstate, const char* beg, const char* end, bool css = true);
427
+ String_Constant(SourceSpan pstate, const Token& tok, bool css = true);
428
+ sass::string type() const override { return "string"; }
429
+ static sass::string type_name() { return "string"; }
430
+ bool is_invisible() const override;
431
+ virtual void rtrim() override;
432
+ size_t hash() const override;
433
+ bool operator< (const Expression& rhs) const override;
434
+ bool operator==(const Expression& rhs) const override;
435
+ // quotes are forced on inspection
436
+ virtual sass::string inspect() const override;
437
+ ATTACH_AST_OPERATIONS(String_Constant)
438
+ ATTACH_CRTP_PERFORM_METHODS()
439
+ };
440
+
441
+ ////////////////////////////////////////////////////////
442
+ // Possibly quoted string (unquote on instantiation)
443
+ ////////////////////////////////////////////////////////
444
+ class String_Quoted final : public String_Constant {
445
+ public:
446
+ String_Quoted(SourceSpan pstate, sass::string val, char q = 0,
447
+ bool keep_utf8_escapes = false, bool skip_unquoting = false,
448
+ bool strict_unquoting = true, bool css = true);
449
+ bool operator< (const Expression& rhs) const override;
450
+ bool operator==(const Expression& rhs) const override;
451
+ // quotes are forced on inspection
452
+ sass::string inspect() const override;
453
+ ATTACH_AST_OPERATIONS(String_Quoted)
454
+ ATTACH_CRTP_PERFORM_METHODS()
455
+ };
456
+
457
+ //////////////////
458
+ // The null value.
459
+ //////////////////
460
+ class Null final : public Value {
461
+ public:
462
+ Null(SourceSpan pstate);
463
+ sass::string type() const override { return "null"; }
464
+ static sass::string type_name() { return "null"; }
465
+ bool is_invisible() const override { return true; }
466
+ operator bool() override { return false; }
467
+ bool is_false() override { return true; }
468
+
469
+ size_t hash() const override;
470
+
471
+ bool operator< (const Expression& rhs) const override;
472
+ bool operator== (const Expression& rhs) const override;
473
+
474
+ ATTACH_AST_OPERATIONS(Null)
475
+ ATTACH_CRTP_PERFORM_METHODS()
476
+ };
477
+
478
+ //////////////////////////////////
479
+ // The Parent Reference Expression.
480
+ //////////////////////////////////
481
+ class Parent_Reference final : public Value {
482
+ public:
483
+ Parent_Reference(SourceSpan pstate);
484
+ sass::string type() const override { return "parent"; }
485
+ static sass::string type_name() { return "parent"; }
486
+ bool operator< (const Expression& rhs) const override {
487
+ return false; // they are always equal
488
+ }
489
+ bool operator==(const Expression& rhs) const override {
490
+ return true; // they are always equal
491
+ };
492
+ ATTACH_AST_OPERATIONS(Parent_Reference)
493
+ ATTACH_CRTP_PERFORM_METHODS()
494
+ };
495
+
496
+ }
497
+
498
+ #endif
@@ -0,0 +1,32 @@
1
+ /*
2
+ cencode.h - c header for a base64 encoding algorithm
3
+
4
+ This is part of the libb64 project, and has been placed in the public domain.
5
+ For details, see http://sourceforge.net/projects/libb64
6
+ */
7
+
8
+ #ifndef BASE64_CENCODE_H
9
+ #define BASE64_CENCODE_H
10
+
11
+ typedef enum
12
+ {
13
+ step_A, step_B, step_C
14
+ } base64_encodestep;
15
+
16
+ typedef struct
17
+ {
18
+ base64_encodestep step;
19
+ char result;
20
+ int stepcount;
21
+ } base64_encodestate;
22
+
23
+ void base64_init_encodestate(base64_encodestate* state_in);
24
+
25
+ char base64_encode_value(char value_in);
26
+
27
+ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in);
28
+
29
+ int base64_encode_blockend(char* code_out, base64_encodestate* state_in);
30
+
31
+ #endif /* BASE64_CENCODE_H */
32
+
@@ -0,0 +1,79 @@
1
+ // :mode=c++:
2
+ /*
3
+ encode.h - c++ wrapper for a base64 encoding algorithm
4
+
5
+ This is part of the libb64 project, and has been placed in the public domain.
6
+ For details, see http://sourceforge.net/projects/libb64
7
+ */
8
+ #ifndef BASE64_ENCODE_H
9
+ #define BASE64_ENCODE_H
10
+
11
+ #include <iostream>
12
+
13
+ namespace base64
14
+ {
15
+ extern "C"
16
+ {
17
+ #include "cencode.h"
18
+ }
19
+
20
+ struct encoder
21
+ {
22
+ base64_encodestate _state;
23
+ int _buffersize;
24
+
25
+ encoder(int buffersize_in = BUFFERSIZE)
26
+ : _buffersize(buffersize_in)
27
+ {
28
+ base64_init_encodestate(&_state);
29
+ }
30
+
31
+ int encode(char value_in)
32
+ {
33
+ return base64_encode_value(value_in);
34
+ }
35
+
36
+ int encode(const char* code_in, const int length_in, char* plaintext_out)
37
+ {
38
+ return base64_encode_block(code_in, length_in, plaintext_out, &_state);
39
+ }
40
+
41
+ int encode_end(char* plaintext_out)
42
+ {
43
+ return base64_encode_blockend(plaintext_out, &_state);
44
+ }
45
+
46
+ void encode(std::istream& istream_in, std::ostream& ostream_in)
47
+ {
48
+ base64_init_encodestate(&_state);
49
+ //
50
+ const int N = _buffersize;
51
+ char* plaintext = new char[N];
52
+ char* code = new char[2*N];
53
+ int plainlength;
54
+ int codelength;
55
+
56
+ do
57
+ {
58
+ istream_in.read(plaintext, N);
59
+ plainlength = static_cast<int>(istream_in.gcount());
60
+ //
61
+ codelength = encode(plaintext, plainlength, code);
62
+ ostream_in.write(code, codelength);
63
+ }
64
+ while (istream_in.good() && plainlength > 0);
65
+
66
+ codelength = encode_end(code);
67
+ ostream_in.write(code, codelength);
68
+ //
69
+ base64_init_encodestate(&_state);
70
+
71
+ delete [] code;
72
+ delete [] plaintext;
73
+ }
74
+ };
75
+
76
+ } // namespace base64
77
+
78
+ #endif // BASE64_ENCODE_H
79
+
@@ -0,0 +1,50 @@
1
+ #include "backtrace.hpp"
2
+
3
+ namespace Sass {
4
+
5
+ const sass::string traces_to_string(Backtraces traces, sass::string indent) {
6
+
7
+ sass::ostream ss;
8
+ sass::string cwd(File::get_cwd());
9
+
10
+ bool first = true;
11
+ size_t i_beg = traces.size() - 1;
12
+ size_t i_end = sass::string::npos;
13
+ for (size_t i = i_beg; i != i_end; i --) {
14
+
15
+ const Backtrace& trace = traces[i];
16
+
17
+ // make path relative to the current directory
18
+ sass::string rel_path(File::abs2rel(trace.pstate.getPath(), cwd, cwd));
19
+
20
+ // skip functions on error cases (unsure why ruby sass does this)
21
+ // if (trace.caller.substr(0, 6) == ", in f") continue;
22
+
23
+ if (first) {
24
+ ss << indent;
25
+ ss << "on line ";
26
+ ss << trace.pstate.getLine();
27
+ ss << ":";
28
+ ss << trace.pstate.getColumn();
29
+ ss << " of " << rel_path;
30
+ // ss << trace.caller;
31
+ first = false;
32
+ } else {
33
+ ss << trace.caller;
34
+ ss << std::endl;
35
+ ss << indent;
36
+ ss << "from line ";
37
+ ss << trace.pstate.getLine();
38
+ ss << ":";
39
+ ss << trace.pstate.getColumn();
40
+ ss << " of " << rel_path;
41
+ }
42
+
43
+ }
44
+
45
+ ss << std::endl;
46
+ return ss.str();
47
+
48
+ }
49
+
50
+ };