sassc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +9 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +24 -0
  8. data/Rakefile +21 -0
  9. data/ext/libsass/.editorconfig +15 -0
  10. data/ext/libsass/.gitattributes +2 -0
  11. data/ext/libsass/.gitignore +61 -0
  12. data/ext/libsass/.travis.yml +38 -0
  13. data/ext/libsass/COPYING +25 -0
  14. data/ext/libsass/INSTALL +1 -0
  15. data/ext/libsass/LICENSE +25 -0
  16. data/ext/libsass/Makefile +223 -0
  17. data/ext/libsass/Makefile.am +145 -0
  18. data/ext/libsass/Readme.md +93 -0
  19. data/ext/libsass/appveyor.yml +76 -0
  20. data/ext/libsass/ast.cpp +581 -0
  21. data/ext/libsass/ast.hpp +1949 -0
  22. data/ext/libsass/ast_def_macros.hpp +16 -0
  23. data/ext/libsass/ast_factory.hpp +87 -0
  24. data/ext/libsass/ast_fwd_decl.hpp +72 -0
  25. data/ext/libsass/b64/cencode.h +32 -0
  26. data/ext/libsass/b64/encode.h +77 -0
  27. data/ext/libsass/backtrace.hpp +81 -0
  28. data/ext/libsass/base64vlq.cpp +43 -0
  29. data/ext/libsass/base64vlq.hpp +28 -0
  30. data/ext/libsass/bind.cpp +187 -0
  31. data/ext/libsass/bind.hpp +18 -0
  32. data/ext/libsass/cencode.c +102 -0
  33. data/ext/libsass/color_names.hpp +324 -0
  34. data/ext/libsass/configure.ac +130 -0
  35. data/ext/libsass/constants.cpp +144 -0
  36. data/ext/libsass/constants.hpp +145 -0
  37. data/ext/libsass/context.cpp +507 -0
  38. data/ext/libsass/context.hpp +150 -0
  39. data/ext/libsass/contextualize.cpp +157 -0
  40. data/ext/libsass/contextualize.hpp +65 -0
  41. data/ext/libsass/copy_c_str.cpp +13 -0
  42. data/ext/libsass/copy_c_str.hpp +5 -0
  43. data/ext/libsass/debug.hpp +39 -0
  44. data/ext/libsass/environment.hpp +75 -0
  45. data/ext/libsass/error_handling.cpp +28 -0
  46. data/ext/libsass/error_handling.hpp +28 -0
  47. data/ext/libsass/eval.cpp +1149 -0
  48. data/ext/libsass/eval.hpp +80 -0
  49. data/ext/libsass/expand.cpp +430 -0
  50. data/ext/libsass/expand.hpp +77 -0
  51. data/ext/libsass/extconf.rb +6 -0
  52. data/ext/libsass/extend.cpp +1962 -0
  53. data/ext/libsass/extend.hpp +50 -0
  54. data/ext/libsass/file.cpp +291 -0
  55. data/ext/libsass/file.hpp +18 -0
  56. data/ext/libsass/functions.cpp +1565 -0
  57. data/ext/libsass/functions.hpp +187 -0
  58. data/ext/libsass/inspect.cpp +727 -0
  59. data/ext/libsass/inspect.hpp +108 -0
  60. data/ext/libsass/json.cpp +1411 -0
  61. data/ext/libsass/json.hpp +117 -0
  62. data/ext/libsass/kwd_arg_macros.hpp +23 -0
  63. data/ext/libsass/m4/.gitkeep +0 -0
  64. data/ext/libsass/mapping.hpp +17 -0
  65. data/ext/libsass/memory_manager.hpp +54 -0
  66. data/ext/libsass/node.cpp +251 -0
  67. data/ext/libsass/node.hpp +122 -0
  68. data/ext/libsass/operation.hpp +153 -0
  69. data/ext/libsass/output_compressed.cpp +401 -0
  70. data/ext/libsass/output_compressed.hpp +95 -0
  71. data/ext/libsass/output_nested.cpp +364 -0
  72. data/ext/libsass/output_nested.hpp +108 -0
  73. data/ext/libsass/parser.cpp +2016 -0
  74. data/ext/libsass/parser.hpp +264 -0
  75. data/ext/libsass/paths.hpp +69 -0
  76. data/ext/libsass/position.hpp +22 -0
  77. data/ext/libsass/posix/getopt.c +562 -0
  78. data/ext/libsass/posix/getopt.h +95 -0
  79. data/ext/libsass/prelexer.cpp +688 -0
  80. data/ext/libsass/prelexer.hpp +513 -0
  81. data/ext/libsass/remove_placeholders.cpp +59 -0
  82. data/ext/libsass/remove_placeholders.hpp +43 -0
  83. data/ext/libsass/res/resource.rc +35 -0
  84. data/ext/libsass/sass.cpp +33 -0
  85. data/ext/libsass/sass.h +60 -0
  86. data/ext/libsass/sass2scss.cpp +834 -0
  87. data/ext/libsass/sass2scss.h +110 -0
  88. data/ext/libsass/sass_context.cpp +709 -0
  89. data/ext/libsass/sass_context.h +120 -0
  90. data/ext/libsass/sass_functions.cpp +137 -0
  91. data/ext/libsass/sass_functions.h +90 -0
  92. data/ext/libsass/sass_interface.cpp +277 -0
  93. data/ext/libsass/sass_interface.h +97 -0
  94. data/ext/libsass/sass_util.cpp +136 -0
  95. data/ext/libsass/sass_util.hpp +259 -0
  96. data/ext/libsass/sass_values.cpp +337 -0
  97. data/ext/libsass/sass_values.h +124 -0
  98. data/ext/libsass/script/bootstrap +10 -0
  99. data/ext/libsass/script/branding +10 -0
  100. data/ext/libsass/script/ci-build-libsass +72 -0
  101. data/ext/libsass/script/ci-install-compiler +4 -0
  102. data/ext/libsass/script/ci-install-deps +19 -0
  103. data/ext/libsass/script/ci-report-coverage +25 -0
  104. data/ext/libsass/script/coveralls-debug +32 -0
  105. data/ext/libsass/script/spec +5 -0
  106. data/ext/libsass/script/tap-driver +652 -0
  107. data/ext/libsass/script/tap-runner +1 -0
  108. data/ext/libsass/source_map.cpp +133 -0
  109. data/ext/libsass/source_map.hpp +46 -0
  110. data/ext/libsass/subset_map.hpp +145 -0
  111. data/ext/libsass/support/libsass.pc.in +11 -0
  112. data/ext/libsass/test-driver +127 -0
  113. data/ext/libsass/test/test_node.cpp +98 -0
  114. data/ext/libsass/test/test_paths.cpp +29 -0
  115. data/ext/libsass/test/test_selector_difference.cpp +28 -0
  116. data/ext/libsass/test/test_specificity.cpp +28 -0
  117. data/ext/libsass/test/test_subset_map.cpp +472 -0
  118. data/ext/libsass/test/test_superselector.cpp +71 -0
  119. data/ext/libsass/test/test_unification.cpp +33 -0
  120. data/ext/libsass/to_c.cpp +61 -0
  121. data/ext/libsass/to_c.hpp +44 -0
  122. data/ext/libsass/to_string.cpp +29 -0
  123. data/ext/libsass/to_string.hpp +32 -0
  124. data/ext/libsass/token.hpp +32 -0
  125. data/ext/libsass/units.cpp +54 -0
  126. data/ext/libsass/units.hpp +10 -0
  127. data/ext/libsass/utf8.h +34 -0
  128. data/ext/libsass/utf8/checked.h +327 -0
  129. data/ext/libsass/utf8/core.h +329 -0
  130. data/ext/libsass/utf8/unchecked.h +228 -0
  131. data/ext/libsass/utf8_string.cpp +102 -0
  132. data/ext/libsass/utf8_string.hpp +36 -0
  133. data/ext/libsass/util.cpp +189 -0
  134. data/ext/libsass/util.hpp +26 -0
  135. data/ext/libsass/win/libsass.filters +291 -0
  136. data/ext/libsass/win/libsass.sln +28 -0
  137. data/ext/libsass/win/libsass.vcxproj +255 -0
  138. data/lib/sassc.rb +6 -0
  139. data/lib/sassc/engine.rb +13 -0
  140. data/lib/sassc/native.rb +44 -0
  141. data/lib/sassc/native/native_context_api.rb +140 -0
  142. data/lib/sassc/native/native_functions_api.rb +41 -0
  143. data/lib/sassc/native/sass_input_style.rb +11 -0
  144. data/lib/sassc/native/sass_output_style.rb +10 -0
  145. data/lib/sassc/native/sass_value.rb +95 -0
  146. data/lib/sassc/native/string_list.rb +8 -0
  147. data/lib/sassc/version.rb +3 -0
  148. data/sassc.gemspec +43 -0
  149. data/test/smoke_test.rb +171 -0
  150. data/test/test_helper.rb +4 -0
  151. metadata +281 -0
@@ -0,0 +1,337 @@
1
+ #ifdef _WIN32
2
+ #include <io.h>
3
+ #else
4
+ #include <unistd.h>
5
+ #endif
6
+
7
+ #include <cstdlib>
8
+ #include <cstring>
9
+ #include "sass_values.h"
10
+
11
+ extern "C" {
12
+ using namespace std;
13
+
14
+ struct Sass_Unknown {
15
+ enum Sass_Tag tag;
16
+ };
17
+
18
+ struct Sass_Boolean {
19
+ enum Sass_Tag tag;
20
+ bool value;
21
+ };
22
+
23
+ struct Sass_Number {
24
+ enum Sass_Tag tag;
25
+ double value;
26
+ char* unit;
27
+ };
28
+
29
+ struct Sass_Color {
30
+ enum Sass_Tag tag;
31
+ double r;
32
+ double g;
33
+ double b;
34
+ double a;
35
+ };
36
+
37
+ struct Sass_String {
38
+ enum Sass_Tag tag;
39
+ char* value;
40
+ };
41
+
42
+ struct Sass_List {
43
+ enum Sass_Tag tag;
44
+ enum Sass_Separator separator;
45
+ size_t length;
46
+ // null terminated "array"
47
+ union Sass_Value** values;
48
+ };
49
+
50
+ struct Sass_Map {
51
+ enum Sass_Tag tag;
52
+ size_t length;
53
+ struct Sass_MapPair* pairs;
54
+ };
55
+
56
+ struct Sass_Null {
57
+ enum Sass_Tag tag;
58
+ };
59
+
60
+ struct Sass_Error {
61
+ enum Sass_Tag tag;
62
+ char* message;
63
+ };
64
+
65
+ struct Sass_Warning {
66
+ enum Sass_Tag tag;
67
+ char* message;
68
+ };
69
+
70
+ union Sass_Value {
71
+ struct Sass_Unknown unknown;
72
+ struct Sass_Boolean boolean;
73
+ struct Sass_Number number;
74
+ struct Sass_Color color;
75
+ struct Sass_String string;
76
+ struct Sass_List list;
77
+ struct Sass_Map map;
78
+ struct Sass_Null null;
79
+ struct Sass_Error error;
80
+ struct Sass_Warning warning;
81
+ };
82
+
83
+ struct Sass_MapPair {
84
+ union Sass_Value* key;
85
+ union Sass_Value* value;
86
+ };
87
+
88
+ // Return the sass tag for a generic sass value
89
+ enum Sass_Tag ADDCALL sass_value_get_tag(const union Sass_Value* v) { return v->unknown.tag; }
90
+
91
+ // Check value for specified type
92
+ bool ADDCALL sass_value_is_null(const union Sass_Value* v) { return v->unknown.tag == SASS_NULL; }
93
+ bool ADDCALL sass_value_is_number(const union Sass_Value* v) { return v->unknown.tag == SASS_NUMBER; }
94
+ bool ADDCALL sass_value_is_string(const union Sass_Value* v) { return v->unknown.tag == SASS_STRING; }
95
+ bool ADDCALL sass_value_is_boolean(const union Sass_Value* v) { return v->unknown.tag == SASS_BOOLEAN; }
96
+ bool ADDCALL sass_value_is_color(const union Sass_Value* v) { return v->unknown.tag == SASS_COLOR; }
97
+ bool ADDCALL sass_value_is_list(const union Sass_Value* v) { return v->unknown.tag == SASS_LIST; }
98
+ bool ADDCALL sass_value_is_map(const union Sass_Value* v) { return v->unknown.tag == SASS_MAP; }
99
+ bool ADDCALL sass_value_is_error(const union Sass_Value* v) { return v->unknown.tag == SASS_ERROR; }
100
+ bool ADDCALL sass_value_is_warning(const union Sass_Value* v) { return v->unknown.tag == SASS_WARNING; }
101
+
102
+ // Getters and setters for Sass_Number
103
+ double ADDCALL sass_number_get_value(const union Sass_Value* v) { return v->number.value; }
104
+ void ADDCALL sass_number_set_value(union Sass_Value* v, double value) { v->number.value = value; }
105
+ const char* ADDCALL sass_number_get_unit(const union Sass_Value* v) { return v->number.unit; }
106
+ void ADDCALL sass_number_set_unit(union Sass_Value* v, char* unit) { v->number.unit = unit; }
107
+
108
+ // Getters and setters for Sass_String
109
+ const char* ADDCALL sass_string_get_value(const union Sass_Value* v) { return v->string.value; }
110
+ void ADDCALL sass_string_set_value(union Sass_Value* v, char* value) { v->string.value = value; }
111
+
112
+ // Getters and setters for Sass_Boolean
113
+ bool ADDCALL sass_boolean_get_value(const union Sass_Value* v) { return v->boolean.value; }
114
+ void ADDCALL sass_boolean_set_value(union Sass_Value* v, bool value) { v->boolean.value = value; }
115
+
116
+ // Getters and setters for Sass_Color
117
+ double ADDCALL sass_color_get_r(const union Sass_Value* v) { return v->color.r; }
118
+ void ADDCALL sass_color_set_r(union Sass_Value* v, double r) { v->color.r = r; }
119
+ double ADDCALL sass_color_get_g(const union Sass_Value* v) { return v->color.g; }
120
+ void ADDCALL sass_color_set_g(union Sass_Value* v, double g) { v->color.g = g; }
121
+ double ADDCALL sass_color_get_b(const union Sass_Value* v) { return v->color.b; }
122
+ void ADDCALL sass_color_set_b(union Sass_Value* v, double b) { v->color.b = b; }
123
+ double ADDCALL sass_color_get_a(const union Sass_Value* v) { return v->color.a; }
124
+ void ADDCALL sass_color_set_a(union Sass_Value* v, double a) { v->color.a = a; }
125
+
126
+ // Getters and setters for Sass_List
127
+ size_t ADDCALL sass_list_get_length(const union Sass_Value* v) { return v->list.length; }
128
+ enum Sass_Separator ADDCALL sass_list_get_separator(const union Sass_Value* v) { return v->list.separator; }
129
+ void ADDCALL sass_list_set_separator(union Sass_Value* v, enum Sass_Separator separator) { v->list.separator = separator; }
130
+ // Getters and setters for Sass_List values
131
+ union Sass_Value* ADDCALL sass_list_get_value(const union Sass_Value* v, size_t i) { return v->list.values[i]; }
132
+ void ADDCALL sass_list_set_value(union Sass_Value* v, size_t i, union Sass_Value* value) { v->list.values[i] = value; }
133
+
134
+ // Getters and setters for Sass_Map
135
+ size_t ADDCALL sass_map_get_length(const union Sass_Value* v) { return v->map.length; }
136
+ // Getters and setters for Sass_List keys and values
137
+ union Sass_Value* ADDCALL sass_map_get_key(const union Sass_Value* v, size_t i) { return v->map.pairs[i].key; }
138
+ union Sass_Value* ADDCALL sass_map_get_value(const union Sass_Value* v, size_t i) { return v->map.pairs[i].value; }
139
+ void ADDCALL sass_map_set_key(union Sass_Value* v, size_t i, union Sass_Value* key) { v->map.pairs[i].key = key; }
140
+ void ADDCALL sass_map_set_value(union Sass_Value* v, size_t i, union Sass_Value* val) { v->map.pairs[i].value = val; }
141
+
142
+ // Getters and setters for Sass_Error
143
+ char* ADDCALL sass_error_get_message(const union Sass_Value* v) { return v->error.message; };
144
+ void ADDCALL sass_error_set_message(union Sass_Value* v, char* msg) { v->error.message = msg; };
145
+
146
+ // Getters and setters for Sass_Warning
147
+ char* ADDCALL sass_warning_get_message(const union Sass_Value* v) { return v->warning.message; };
148
+ void ADDCALL sass_warning_set_message(union Sass_Value* v, char* msg) { v->warning.message = msg; };
149
+
150
+ // Creator functions for all value types
151
+
152
+ union Sass_Value* ADDCALL sass_make_boolean(bool val)
153
+ {
154
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
155
+ if (v == 0) return 0;
156
+ v->boolean.tag = SASS_BOOLEAN;
157
+ v->boolean.value = val;
158
+ return v;
159
+ }
160
+
161
+ union Sass_Value* ADDCALL sass_make_number(double val, const char* unit)
162
+ {
163
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
164
+ if (v == 0) return 0;
165
+ v->number.tag = SASS_NUMBER;
166
+ v->number.value = val;
167
+ v->number.unit = strdup(unit);
168
+ if (v->number.unit == 0) { free(v); return 0; }
169
+ return v;
170
+ }
171
+
172
+ union Sass_Value* ADDCALL sass_make_color(double r, double g, double b, double a)
173
+ {
174
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
175
+ if (v == 0) return 0;
176
+ v->color.tag = SASS_COLOR;
177
+ v->color.r = r;
178
+ v->color.g = g;
179
+ v->color.b = b;
180
+ v->color.a = a;
181
+ return v;
182
+ }
183
+
184
+ union Sass_Value* ADDCALL sass_make_string(const char* val)
185
+ {
186
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
187
+ if (v == 0) return 0;
188
+ v->string.tag = SASS_STRING;
189
+ v->string.value = strdup(val);
190
+ if (v->string.value == 0) { free(v); return 0; }
191
+ return v;
192
+ }
193
+
194
+ union Sass_Value* ADDCALL sass_make_list(size_t len, enum Sass_Separator sep)
195
+ {
196
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
197
+ if (v == 0) return 0;
198
+ v->list.tag = SASS_LIST;
199
+ v->list.length = len;
200
+ v->list.separator = sep;
201
+ v->list.values = (union Sass_Value**) calloc(len, sizeof(union Sass_Value));
202
+ if (v->list.values == 0) { free(v); return 0; }
203
+ return v;
204
+ }
205
+
206
+ union Sass_Value* ADDCALL sass_make_map(size_t len)
207
+ {
208
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
209
+ if (v == 0) return 0;
210
+ v->map.tag = SASS_MAP;
211
+ v->map.length = len;
212
+ v->map.pairs = (struct Sass_MapPair*) calloc(len, sizeof(struct Sass_MapPair));
213
+ if (v->map.pairs == 0) { free(v); return 0; }
214
+ return v;
215
+ }
216
+
217
+ union Sass_Value* ADDCALL sass_make_null(void)
218
+ {
219
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
220
+ if (v == 0) return 0;
221
+ v->null.tag = SASS_NULL;
222
+ return v;
223
+ }
224
+
225
+ union Sass_Value* ADDCALL sass_make_error(const char* msg)
226
+ {
227
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
228
+ if (v == 0) return 0;
229
+ v->error.tag = SASS_ERROR;
230
+ v->error.message = strdup(msg);
231
+ if (v->error.message == 0) { free(v); return 0; }
232
+ return v;
233
+ }
234
+
235
+ union Sass_Value* ADDCALL sass_make_warning(const char* msg)
236
+ {
237
+ Sass_Value* v = (Sass_Value*) calloc(1, sizeof(Sass_Value));
238
+ if (v == 0) return 0;
239
+ v->warning.tag = SASS_WARNING;
240
+ v->warning.message = strdup(msg);
241
+ if (v->warning.message == 0) { free(v); return 0; }
242
+ return v;
243
+ }
244
+
245
+ // will free all associated sass values
246
+ void ADDCALL sass_delete_value(union Sass_Value* val) {
247
+
248
+ size_t i;
249
+ if (val == 0) return;
250
+ switch(val->unknown.tag) {
251
+ case SASS_NULL: {
252
+ } break;
253
+ case SASS_BOOLEAN: {
254
+ } break;
255
+ case SASS_NUMBER: {
256
+ free(val->number.unit);
257
+ } break;
258
+ case SASS_COLOR: {
259
+ } break;
260
+ case SASS_STRING: {
261
+ free(val->string.value);
262
+ } break;
263
+ case SASS_LIST: {
264
+ for (i=0; i<val->list.length; i++) {
265
+ sass_delete_value(val->list.values[i]);
266
+ }
267
+ free(val->list.values);
268
+ } break;
269
+ case SASS_MAP: {
270
+ for (i=0; i<val->map.length; i++) {
271
+ sass_delete_value(val->map.pairs[i].key);
272
+ sass_delete_value(val->map.pairs[i].value);
273
+ }
274
+ free(val->map.pairs);
275
+ } break;
276
+ case SASS_ERROR: {
277
+ free(val->error.message);
278
+ } break;
279
+ case SASS_WARNING: {
280
+ free(val->error.message);
281
+ } break;
282
+ }
283
+
284
+ free(val);
285
+
286
+ }
287
+
288
+ // Make a deep cloned copy of the given sass value
289
+ union Sass_Value* ADDCALL sass_clone_value (const union Sass_Value* val)
290
+ {
291
+
292
+ size_t i;
293
+ if (val == 0) return 0;
294
+ switch(val->unknown.tag) {
295
+ case SASS_NULL: {
296
+ return sass_make_null();
297
+ } break;
298
+ case SASS_BOOLEAN: {
299
+ return sass_make_boolean(val->boolean.value);
300
+ } break;
301
+ case SASS_NUMBER: {
302
+ return sass_make_number(val->number.value, val->number.unit);
303
+ } break;
304
+ case SASS_COLOR: {
305
+ return sass_make_color(val->color.r, val->color.g, val->color.b, val->color.a);
306
+ } break;
307
+ case SASS_STRING: {
308
+ return sass_make_string(val->string.value);
309
+ } break;
310
+ case SASS_LIST: {
311
+ union Sass_Value* list = sass_make_list(val->list.length, val->list.separator);
312
+ for (i = 0; i < list->list.length; i++) {
313
+ list->list.values[i] = sass_clone_value(val->list.values[i]);
314
+ }
315
+ return list;
316
+ } break;
317
+ case SASS_MAP: {
318
+ union Sass_Value* map = sass_make_map(val->map.length);
319
+ for (i = 0; i < val->map.length; i++) {
320
+ map->map.pairs[i].key = sass_clone_value(val->map.pairs[i].key);
321
+ map->map.pairs[i].value = sass_clone_value(val->map.pairs[i].value);
322
+ }
323
+ return map;
324
+ } break;
325
+ case SASS_ERROR: {
326
+ return sass_make_error(val->error.message);
327
+ } break;
328
+ case SASS_WARNING: {
329
+ return sass_make_warning(val->warning.message);
330
+ } break;
331
+ }
332
+
333
+ return 0;
334
+
335
+ }
336
+
337
+ }
@@ -0,0 +1,124 @@
1
+ #ifndef SASS_C_VALUES
2
+ #define SASS_C_VALUES
3
+
4
+ #include <stddef.h>
5
+ #include <stdbool.h>
6
+ #include "sass.h"
7
+
8
+ #ifdef __cplusplus
9
+ extern "C" {
10
+ #endif
11
+
12
+
13
+ // Forward declaration
14
+ union Sass_Value;
15
+
16
+ // Type for Sass values
17
+ enum Sass_Tag {
18
+ SASS_BOOLEAN,
19
+ SASS_NUMBER,
20
+ SASS_COLOR,
21
+ SASS_STRING,
22
+ SASS_LIST,
23
+ SASS_MAP,
24
+ SASS_NULL,
25
+ SASS_ERROR,
26
+ SASS_WARNING
27
+ };
28
+
29
+ // Tags for denoting Sass list separators
30
+ enum Sass_Separator {
31
+ SASS_COMMA,
32
+ SASS_SPACE
33
+ };
34
+
35
+ // Return the sass tag for a generic sass value
36
+ // Check is needed before accessing specific values!
37
+ ADDAPI enum Sass_Tag ADDCALL sass_value_get_tag (const union Sass_Value* v);
38
+
39
+ // Check value to be of a specific type
40
+ // Can also be used before accessing properties!
41
+ ADDAPI bool ADDCALL sass_value_is_null (const union Sass_Value* v);
42
+ ADDAPI bool ADDCALL sass_value_is_number (const union Sass_Value* v);
43
+ ADDAPI bool ADDCALL sass_value_is_string (const union Sass_Value* v);
44
+ ADDAPI bool ADDCALL sass_value_is_boolean (const union Sass_Value* v);
45
+ ADDAPI bool ADDCALL sass_value_is_color (const union Sass_Value* v);
46
+ ADDAPI bool ADDCALL sass_value_is_list (const union Sass_Value* v);
47
+ ADDAPI bool ADDCALL sass_value_is_map (const union Sass_Value* v);
48
+ ADDAPI bool ADDCALL sass_value_is_error (const union Sass_Value* v);
49
+ ADDAPI bool ADDCALL sass_value_is_warning (const union Sass_Value* v);
50
+
51
+ // Getters and setters for Sass_Number
52
+ ADDAPI double ADDCALL sass_number_get_value (const union Sass_Value* v);
53
+ ADDAPI void ADDCALL sass_number_set_value (union Sass_Value* v, double value);
54
+ ADDAPI const char* ADDCALL sass_number_get_unit (const union Sass_Value* v);
55
+ ADDAPI void ADDCALL sass_number_set_unit (union Sass_Value* v, char* unit);
56
+
57
+ // Getters and setters for Sass_String
58
+ ADDAPI const char* ADDCALL sass_string_get_value (const union Sass_Value* v);
59
+ ADDAPI void ADDCALL sass_string_set_value (union Sass_Value* v, char* value);
60
+
61
+ // Getters and setters for Sass_Boolean
62
+ ADDAPI bool ADDCALL sass_boolean_get_value (const union Sass_Value* v);
63
+ ADDAPI void ADDCALL sass_boolean_set_value (union Sass_Value* v, bool value);
64
+
65
+ // Getters and setters for Sass_Color
66
+ ADDAPI double ADDCALL sass_color_get_r (const union Sass_Value* v);
67
+ ADDAPI void ADDCALL sass_color_set_r (union Sass_Value* v, double r);
68
+ ADDAPI double ADDCALL sass_color_get_g (const union Sass_Value* v);
69
+ ADDAPI void ADDCALL sass_color_set_g (union Sass_Value* v, double g);
70
+ ADDAPI double ADDCALL sass_color_get_b (const union Sass_Value* v);
71
+ ADDAPI void ADDCALL sass_color_set_b (union Sass_Value* v, double b);
72
+ ADDAPI double ADDCALL sass_color_get_a (const union Sass_Value* v);
73
+ ADDAPI void ADDCALL sass_color_set_a (union Sass_Value* v, double a);
74
+
75
+ // Getter for the number of items in list
76
+ ADDAPI size_t ADDCALL sass_list_get_length (const union Sass_Value* v);
77
+ // Getters and setters for Sass_List
78
+ ADDAPI enum Sass_Separator ADDCALL sass_list_get_separator (const union Sass_Value* v);
79
+ ADDAPI void ADDCALL sass_list_set_separator (union Sass_Value* v, enum Sass_Separator value);
80
+ // Getters and setters for Sass_List values
81
+ ADDAPI union Sass_Value* ADDCALL sass_list_get_value (const union Sass_Value* v, size_t i);
82
+ ADDAPI void ADDCALL sass_list_set_value (union Sass_Value* v, size_t i, union Sass_Value* value);
83
+
84
+ // Getter for the number of items in map
85
+ ADDAPI size_t ADDCALL sass_map_get_length (const union Sass_Value* v);
86
+ // Getters and setters for Sass_List keys and values
87
+ ADDAPI union Sass_Value* ADDCALL sass_map_get_key (const union Sass_Value* v, size_t i);
88
+ ADDAPI void ADDCALL sass_map_set_key (union Sass_Value* v, size_t i, union Sass_Value*);
89
+ ADDAPI union Sass_Value* ADDCALL sass_map_get_value (const union Sass_Value* v, size_t i);
90
+ ADDAPI void ADDCALL sass_map_set_value (union Sass_Value* v, size_t i, union Sass_Value*);
91
+
92
+ // Getters and setters for Sass_Error
93
+ ADDAPI char* ADDCALL sass_error_get_message (const union Sass_Value* v);
94
+ ADDAPI void ADDCALL sass_error_set_message (union Sass_Value* v, char* msg);
95
+
96
+ // Getters and setters for Sass_Warning
97
+ ADDAPI char* ADDCALL sass_warning_get_message (const union Sass_Value* v);
98
+ ADDAPI void ADDCALL sass_warning_set_message (union Sass_Value* v, char* msg);
99
+
100
+ // Creator functions for all value types
101
+ ADDAPI union Sass_Value* ADDCALL sass_make_null (void);
102
+ ADDAPI union Sass_Value* ADDCALL sass_make_boolean (bool val);
103
+ ADDAPI union Sass_Value* ADDCALL sass_make_string (const char* val);
104
+ ADDAPI union Sass_Value* ADDCALL sass_make_number (double val, const char* unit);
105
+ ADDAPI union Sass_Value* ADDCALL sass_make_color (double r, double g, double b, double a);
106
+ ADDAPI union Sass_Value* ADDCALL sass_make_list (size_t len, enum Sass_Separator sep);
107
+ ADDAPI union Sass_Value* ADDCALL sass_make_map (size_t len);
108
+ ADDAPI union Sass_Value* ADDCALL sass_make_error (const char* msg);
109
+ ADDAPI union Sass_Value* ADDCALL sass_make_warning (const char* msg);
110
+
111
+ // Generic destructor function for all types
112
+ // Will release memory of all associated Sass_Values
113
+ // Means we will delete recursively for lists and maps
114
+ ADDAPI void ADDCALL sass_delete_value (union Sass_Value* val);
115
+
116
+ // Make a deep cloned copy of the given sass value
117
+ ADDAPI union Sass_Value* ADDCALL sass_clone_value (const union Sass_Value* val);
118
+
119
+
120
+ #ifdef __cplusplus
121
+ } // __cplusplus defined.
122
+ #endif
123
+
124
+ #endif