sassc 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.gitmodules +3 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +24 -0
- data/Rakefile +21 -0
- data/ext/libsass/.editorconfig +15 -0
- data/ext/libsass/.gitattributes +2 -0
- data/ext/libsass/.gitignore +61 -0
- data/ext/libsass/.travis.yml +38 -0
- data/ext/libsass/COPYING +25 -0
- data/ext/libsass/INSTALL +1 -0
- data/ext/libsass/LICENSE +25 -0
- data/ext/libsass/Makefile +223 -0
- data/ext/libsass/Makefile.am +145 -0
- data/ext/libsass/Readme.md +93 -0
- data/ext/libsass/appveyor.yml +76 -0
- data/ext/libsass/ast.cpp +581 -0
- data/ext/libsass/ast.hpp +1949 -0
- data/ext/libsass/ast_def_macros.hpp +16 -0
- data/ext/libsass/ast_factory.hpp +87 -0
- data/ext/libsass/ast_fwd_decl.hpp +72 -0
- data/ext/libsass/b64/cencode.h +32 -0
- data/ext/libsass/b64/encode.h +77 -0
- data/ext/libsass/backtrace.hpp +81 -0
- data/ext/libsass/base64vlq.cpp +43 -0
- data/ext/libsass/base64vlq.hpp +28 -0
- data/ext/libsass/bind.cpp +187 -0
- data/ext/libsass/bind.hpp +18 -0
- data/ext/libsass/cencode.c +102 -0
- data/ext/libsass/color_names.hpp +324 -0
- data/ext/libsass/configure.ac +130 -0
- data/ext/libsass/constants.cpp +144 -0
- data/ext/libsass/constants.hpp +145 -0
- data/ext/libsass/context.cpp +507 -0
- data/ext/libsass/context.hpp +150 -0
- data/ext/libsass/contextualize.cpp +157 -0
- data/ext/libsass/contextualize.hpp +65 -0
- data/ext/libsass/copy_c_str.cpp +13 -0
- data/ext/libsass/copy_c_str.hpp +5 -0
- data/ext/libsass/debug.hpp +39 -0
- data/ext/libsass/environment.hpp +75 -0
- data/ext/libsass/error_handling.cpp +28 -0
- data/ext/libsass/error_handling.hpp +28 -0
- data/ext/libsass/eval.cpp +1149 -0
- data/ext/libsass/eval.hpp +80 -0
- data/ext/libsass/expand.cpp +430 -0
- data/ext/libsass/expand.hpp +77 -0
- data/ext/libsass/extconf.rb +6 -0
- data/ext/libsass/extend.cpp +1962 -0
- data/ext/libsass/extend.hpp +50 -0
- data/ext/libsass/file.cpp +291 -0
- data/ext/libsass/file.hpp +18 -0
- data/ext/libsass/functions.cpp +1565 -0
- data/ext/libsass/functions.hpp +187 -0
- data/ext/libsass/inspect.cpp +727 -0
- data/ext/libsass/inspect.hpp +108 -0
- data/ext/libsass/json.cpp +1411 -0
- data/ext/libsass/json.hpp +117 -0
- data/ext/libsass/kwd_arg_macros.hpp +23 -0
- data/ext/libsass/m4/.gitkeep +0 -0
- data/ext/libsass/mapping.hpp +17 -0
- data/ext/libsass/memory_manager.hpp +54 -0
- data/ext/libsass/node.cpp +251 -0
- data/ext/libsass/node.hpp +122 -0
- data/ext/libsass/operation.hpp +153 -0
- data/ext/libsass/output_compressed.cpp +401 -0
- data/ext/libsass/output_compressed.hpp +95 -0
- data/ext/libsass/output_nested.cpp +364 -0
- data/ext/libsass/output_nested.hpp +108 -0
- data/ext/libsass/parser.cpp +2016 -0
- data/ext/libsass/parser.hpp +264 -0
- data/ext/libsass/paths.hpp +69 -0
- data/ext/libsass/position.hpp +22 -0
- data/ext/libsass/posix/getopt.c +562 -0
- data/ext/libsass/posix/getopt.h +95 -0
- data/ext/libsass/prelexer.cpp +688 -0
- data/ext/libsass/prelexer.hpp +513 -0
- data/ext/libsass/remove_placeholders.cpp +59 -0
- data/ext/libsass/remove_placeholders.hpp +43 -0
- data/ext/libsass/res/resource.rc +35 -0
- data/ext/libsass/sass.cpp +33 -0
- data/ext/libsass/sass.h +60 -0
- data/ext/libsass/sass2scss.cpp +834 -0
- data/ext/libsass/sass2scss.h +110 -0
- data/ext/libsass/sass_context.cpp +709 -0
- data/ext/libsass/sass_context.h +120 -0
- data/ext/libsass/sass_functions.cpp +137 -0
- data/ext/libsass/sass_functions.h +90 -0
- data/ext/libsass/sass_interface.cpp +277 -0
- data/ext/libsass/sass_interface.h +97 -0
- data/ext/libsass/sass_util.cpp +136 -0
- data/ext/libsass/sass_util.hpp +259 -0
- data/ext/libsass/sass_values.cpp +337 -0
- data/ext/libsass/sass_values.h +124 -0
- data/ext/libsass/script/bootstrap +10 -0
- data/ext/libsass/script/branding +10 -0
- data/ext/libsass/script/ci-build-libsass +72 -0
- data/ext/libsass/script/ci-install-compiler +4 -0
- data/ext/libsass/script/ci-install-deps +19 -0
- data/ext/libsass/script/ci-report-coverage +25 -0
- data/ext/libsass/script/coveralls-debug +32 -0
- data/ext/libsass/script/spec +5 -0
- data/ext/libsass/script/tap-driver +652 -0
- data/ext/libsass/script/tap-runner +1 -0
- data/ext/libsass/source_map.cpp +133 -0
- data/ext/libsass/source_map.hpp +46 -0
- data/ext/libsass/subset_map.hpp +145 -0
- data/ext/libsass/support/libsass.pc.in +11 -0
- data/ext/libsass/test-driver +127 -0
- data/ext/libsass/test/test_node.cpp +98 -0
- data/ext/libsass/test/test_paths.cpp +29 -0
- data/ext/libsass/test/test_selector_difference.cpp +28 -0
- data/ext/libsass/test/test_specificity.cpp +28 -0
- data/ext/libsass/test/test_subset_map.cpp +472 -0
- data/ext/libsass/test/test_superselector.cpp +71 -0
- data/ext/libsass/test/test_unification.cpp +33 -0
- data/ext/libsass/to_c.cpp +61 -0
- data/ext/libsass/to_c.hpp +44 -0
- data/ext/libsass/to_string.cpp +29 -0
- data/ext/libsass/to_string.hpp +32 -0
- data/ext/libsass/token.hpp +32 -0
- data/ext/libsass/units.cpp +54 -0
- data/ext/libsass/units.hpp +10 -0
- data/ext/libsass/utf8.h +34 -0
- data/ext/libsass/utf8/checked.h +327 -0
- data/ext/libsass/utf8/core.h +329 -0
- data/ext/libsass/utf8/unchecked.h +228 -0
- data/ext/libsass/utf8_string.cpp +102 -0
- data/ext/libsass/utf8_string.hpp +36 -0
- data/ext/libsass/util.cpp +189 -0
- data/ext/libsass/util.hpp +26 -0
- data/ext/libsass/win/libsass.filters +291 -0
- data/ext/libsass/win/libsass.sln +28 -0
- data/ext/libsass/win/libsass.vcxproj +255 -0
- data/lib/sassc.rb +6 -0
- data/lib/sassc/engine.rb +13 -0
- data/lib/sassc/native.rb +44 -0
- data/lib/sassc/native/native_context_api.rb +140 -0
- data/lib/sassc/native/native_functions_api.rb +41 -0
- data/lib/sassc/native/sass_input_style.rb +11 -0
- data/lib/sassc/native/sass_output_style.rb +10 -0
- data/lib/sassc/native/sass_value.rb +95 -0
- data/lib/sassc/native/string_list.rb +8 -0
- data/lib/sassc/version.rb +3 -0
- data/sassc.gemspec +43 -0
- data/test/smoke_test.rb +171 -0
- data/test/test_helper.rb +4 -0
- 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
|