sassc 1.11.4 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +2 -2
- data/CODE_OF_CONDUCT.md +10 -0
- data/README.md +4 -1
- data/ext/libsass/.editorconfig +1 -1
- data/ext/libsass/.github/CONTRIBUTING.md +7 -7
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +31 -6
- data/ext/libsass/.gitignore +3 -0
- data/ext/libsass/.travis.yml +37 -18
- data/ext/libsass/GNUmakefile.am +23 -37
- data/ext/libsass/Makefile +10 -6
- data/ext/libsass/Makefile.conf +3 -0
- data/ext/libsass/Readme.md +68 -63
- data/ext/libsass/appveyor.yml +7 -3
- data/ext/libsass/configure.ac +10 -14
- data/ext/libsass/docs/api-context-internal.md +29 -21
- data/ext/libsass/docs/api-context.md +26 -6
- data/ext/libsass/docs/api-doc.md +49 -16
- data/ext/libsass/docs/api-function-example.md +1 -1
- data/ext/libsass/docs/api-function.md +31 -7
- data/ext/libsass/docs/api-importer.md +19 -19
- data/ext/libsass/docs/api-value.md +4 -2
- data/ext/libsass/docs/build-on-windows.md +4 -4
- data/ext/libsass/docs/build-with-mingw.md +3 -3
- data/ext/libsass/docs/build.md +9 -9
- data/ext/libsass/docs/custom-functions-internal.md +10 -8
- data/ext/libsass/docs/implementations.md +20 -8
- data/ext/libsass/docs/unicode.md +16 -10
- data/ext/libsass/include/sass/base.h +0 -3
- data/ext/libsass/include/sass/context.h +20 -2
- data/ext/libsass/include/sass/functions.h +31 -0
- data/ext/libsass/include/sass/values.h +3 -1
- data/ext/libsass/include/sass/version.h +1 -1
- data/ext/libsass/include/sass/version.h.in +1 -1
- data/ext/libsass/include/sass2scss.h +1 -1
- data/ext/libsass/res/resource.rc +6 -6
- data/ext/libsass/script/ci-build-libsass +10 -5
- data/ext/libsass/script/ci-build-plugin +62 -0
- data/ext/libsass/script/ci-install-compiler +1 -1
- data/ext/libsass/script/ci-install-deps +4 -7
- data/ext/libsass/script/ci-report-coverage +13 -3
- data/ext/libsass/script/tap-driver +1 -1
- data/ext/libsass/script/tap-runner +1 -1
- data/ext/libsass/src/GNUmakefile.am +1 -1
- data/ext/libsass/src/ast.cpp +537 -762
- data/ext/libsass/src/ast.hpp +377 -419
- data/ext/libsass/src/ast_def_macros.hpp +26 -1
- data/ext/libsass/src/ast_fwd_decl.cpp +29 -0
- data/ext/libsass/src/ast_fwd_decl.hpp +94 -21
- data/ext/libsass/src/b64/encode.h +3 -1
- data/ext/libsass/src/backtrace.cpp +46 -0
- data/ext/libsass/src/backtrace.hpp +7 -54
- data/ext/libsass/src/bind.cpp +72 -50
- data/ext/libsass/src/bind.hpp +0 -1
- data/ext/libsass/src/cencode.c +6 -0
- data/ext/libsass/src/check_nesting.cpp +157 -135
- data/ext/libsass/src/check_nesting.hpp +11 -10
- data/ext/libsass/src/color_maps.cpp +10 -6
- data/ext/libsass/src/color_maps.hpp +6 -8
- data/ext/libsass/src/constants.cpp +4 -3
- data/ext/libsass/src/constants.hpp +4 -3
- data/ext/libsass/src/context.cpp +110 -47
- data/ext/libsass/src/context.hpp +11 -1
- data/ext/libsass/src/cssize.cpp +105 -94
- data/ext/libsass/src/cssize.hpp +4 -5
- data/ext/libsass/src/debugger.hpp +247 -244
- data/ext/libsass/src/emitter.cpp +30 -6
- data/ext/libsass/src/emitter.hpp +7 -0
- data/ext/libsass/src/environment.cpp +67 -16
- data/ext/libsass/src/environment.hpp +28 -7
- data/ext/libsass/src/error_handling.cpp +92 -64
- data/ext/libsass/src/error_handling.hpp +64 -43
- data/ext/libsass/src/eval.cpp +494 -544
- data/ext/libsass/src/eval.hpp +17 -23
- data/ext/libsass/src/expand.cpp +182 -154
- data/ext/libsass/src/expand.hpp +4 -5
- data/ext/libsass/src/extend.cpp +299 -291
- data/ext/libsass/src/extend.hpp +46 -11
- data/ext/libsass/src/file.cpp +103 -36
- data/ext/libsass/src/file.hpp +21 -4
- data/ext/libsass/src/functions.cpp +561 -312
- data/ext/libsass/src/functions.hpp +8 -5
- data/ext/libsass/src/inspect.cpp +108 -53
- data/ext/libsass/src/inspect.hpp +5 -2
- data/ext/libsass/src/lexer.cpp +15 -7
- data/ext/libsass/src/lexer.hpp +13 -4
- data/ext/libsass/src/listize.cpp +3 -2
- data/ext/libsass/src/listize.hpp +0 -1
- data/ext/libsass/src/memory/SharedPtr.cpp +16 -18
- data/ext/libsass/src/memory/SharedPtr.hpp +47 -43
- data/ext/libsass/src/node.cpp +34 -38
- data/ext/libsass/src/node.hpp +6 -8
- data/ext/libsass/src/operation.hpp +2 -2
- data/ext/libsass/src/operators.cpp +240 -0
- data/ext/libsass/src/operators.hpp +30 -0
- data/ext/libsass/src/output.cpp +22 -20
- data/ext/libsass/src/parser.cpp +719 -358
- data/ext/libsass/src/parser.hpp +57 -22
- data/ext/libsass/src/plugins.cpp +28 -10
- data/ext/libsass/src/position.cpp +21 -3
- data/ext/libsass/src/position.hpp +2 -1
- data/ext/libsass/src/prelexer.cpp +104 -19
- data/ext/libsass/src/prelexer.hpp +10 -3
- data/ext/libsass/src/remove_placeholders.cpp +9 -10
- data/ext/libsass/src/remove_placeholders.hpp +1 -5
- data/ext/libsass/src/sass.cpp +62 -4
- data/ext/libsass/src/sass.hpp +5 -2
- data/ext/libsass/src/sass_context.cpp +96 -58
- data/ext/libsass/src/sass_context.hpp +7 -5
- data/ext/libsass/src/sass_functions.cpp +63 -1
- data/ext/libsass/src/sass_functions.hpp +19 -1
- data/ext/libsass/src/sass_util.cpp +3 -3
- data/ext/libsass/src/sass_util.hpp +4 -4
- data/ext/libsass/src/sass_values.cpp +42 -39
- data/ext/libsass/src/sass_values.hpp +2 -1
- data/ext/libsass/src/source_map.cpp +16 -18
- data/ext/libsass/src/subset_map.cpp +6 -8
- data/ext/libsass/src/subset_map.hpp +6 -6
- data/ext/libsass/src/to_c.cpp +2 -2
- data/ext/libsass/src/to_value.cpp +8 -3
- data/ext/libsass/src/to_value.hpp +1 -0
- data/ext/libsass/src/units.cpp +349 -45
- data/ext/libsass/src/units.hpp +39 -22
- data/ext/libsass/src/utf8/checked.h +7 -0
- data/ext/libsass/src/utf8/unchecked.h +7 -0
- data/ext/libsass/src/utf8_string.cpp +1 -1
- data/ext/libsass/src/util.cpp +139 -45
- data/ext/libsass/src/util.hpp +4 -7
- data/ext/libsass/src/values.cpp +15 -23
- data/ext/libsass/win/libsass.sln +13 -2
- data/ext/libsass/win/libsass.sln.DotSettings +9 -0
- data/ext/libsass/win/libsass.targets +3 -0
- data/ext/libsass/win/libsass.vcxproj.filters +9 -0
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +1 -1
- data/test/native_test.rb +1 -1
- metadata +11 -4
data/ext/libsass/appveyor.yml
CHANGED
@@ -7,8 +7,13 @@ environment:
|
|
7
7
|
matrix:
|
8
8
|
- Compiler: msvc
|
9
9
|
Config: Release
|
10
|
+
Platform: Win32
|
10
11
|
- Compiler: msvc
|
11
12
|
Config: Debug
|
13
|
+
Platform: Win32
|
14
|
+
- Compiler: msvc
|
15
|
+
Config: Release
|
16
|
+
Platform: Win64
|
12
17
|
- Compiler: mingw
|
13
18
|
Build: static
|
14
19
|
- Compiler: mingw
|
@@ -38,7 +43,7 @@ build_script:
|
|
38
43
|
if ($env:Compiler -eq "mingw") {
|
39
44
|
mingw32-make -j4 sassc
|
40
45
|
} else {
|
41
|
-
msbuild /m:4 /p:Configuration=$env:Config sassc\win\sassc.sln
|
46
|
+
msbuild /m:4 /p:"Configuration=$env:Config;Platform=$env:Platform" sassc\win\sassc.sln
|
42
47
|
}
|
43
48
|
|
44
49
|
# print the branding art
|
@@ -65,7 +70,7 @@ test_script:
|
|
65
70
|
}
|
66
71
|
$env:TargetPath = Join-Path $pwd.Path $env:TargetPath
|
67
72
|
If (Test-Path "$env:TargetPath") {
|
68
|
-
ruby sass-spec/sass-spec.rb -V 3.
|
73
|
+
ruby sass-spec/sass-spec.rb -V 3.5 --probe-todo --impl libsass -c $env:TargetPath -s sass-spec/spec
|
69
74
|
if(-not($?)) {
|
70
75
|
echo "sass-spec tests failed"
|
71
76
|
exit 1
|
@@ -84,4 +89,3 @@ test_script:
|
|
84
89
|
} else {
|
85
90
|
echo "Success!"
|
86
91
|
}
|
87
|
-
|
data/ext/libsass/configure.ac
CHANGED
@@ -9,6 +9,7 @@ AC_CONFIG_MACRO_DIR([m4])
|
|
9
9
|
AC_CONFIG_HEADERS([src/config.h])
|
10
10
|
AC_CONFIG_FILES([include/sass/version.h])
|
11
11
|
AC_CONFIG_AUX_DIR([script])
|
12
|
+
|
12
13
|
# These are flags passed to automake
|
13
14
|
# Though they look like gcc flags!
|
14
15
|
AM_INIT_AUTOMAKE([foreign parallel-tests -Wall])
|
@@ -93,21 +94,16 @@ the --with-sass-spec-dir=<dir> argument.
|
|
93
94
|
;;
|
94
95
|
esac
|
95
96
|
AC_SUBST(SASS_SPEC_PATH)
|
96
|
-
|
97
|
-
#
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
use_tap=no
|
104
|
-
fi
|
105
|
-
AC_MSG_RESULT([$use_tap])
|
106
|
-
|
97
|
+
else
|
98
|
+
# we do not really need these paths for non test build
|
99
|
+
# but automake may error if we do not define them here
|
100
|
+
SASS_SPEC_PATH=sass-spec
|
101
|
+
SASS_SASSC_PATH=sassc
|
102
|
+
AC_SUBST(SASS_SPEC_PATH)
|
103
|
+
AC_SUBST(SASS_SASSC_PATH)
|
107
104
|
fi
|
108
105
|
|
109
106
|
AM_CONDITIONAL(ENABLE_TESTS, test "x$enable_tests" = "xyes")
|
110
|
-
AM_CONDITIONAL(USE_TAP, test "x$use_tap" = "xyes")
|
111
107
|
|
112
108
|
AC_ARG_ENABLE([coverage],
|
113
109
|
[AS_HELP_STRING([--enable-coverage],
|
@@ -121,8 +117,8 @@ if test "x$enable_cov" = "xyes"; then
|
|
121
117
|
|
122
118
|
# Remove all optimization flags from C[XX]FLAGS
|
123
119
|
changequote({,})
|
124
|
-
CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
|
125
|
-
CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O[0-9]*//g'`
|
120
|
+
CFLAGS=`echo "$CFLAGS -O1 -fno-omit-frame-pointer" | $SED -e 's/-O[0-9]*//g'`
|
121
|
+
CXXFLAGS=`echo "$CXXFLAGS -O1 -fno-omit-frame-pointer" | $SED -e 's/-O[0-9]*//g'`
|
126
122
|
changequote([,])
|
127
123
|
|
128
124
|
AC_SUBST(GCOV)
|
@@ -7,26 +7,35 @@ enum Sass_Input_Style {
|
|
7
7
|
SASS_CONTEXT_FOLDER
|
8
8
|
};
|
9
9
|
|
10
|
-
// simple linked list
|
11
|
-
struct string_list {
|
12
|
-
string_list* next;
|
13
|
-
char* string;
|
14
|
-
};
|
15
|
-
|
16
10
|
// sass config options structure
|
17
|
-
struct
|
18
|
-
|
19
|
-
// Precision for fractional numbers
|
20
|
-
int precision;
|
11
|
+
struct Sass_Inspect_Options {
|
21
12
|
|
22
13
|
// Output style for the generated css code
|
23
14
|
// A value from above SASS_STYLE_* constants
|
24
15
|
enum Sass_Output_Style output_style;
|
25
16
|
|
17
|
+
// Precision for fractional numbers
|
18
|
+
int precision;
|
19
|
+
|
20
|
+
};
|
21
|
+
|
22
|
+
// sass config options structure
|
23
|
+
struct Sass_Output_Options : Sass_Inspect_Options {
|
24
|
+
|
25
|
+
// String to be used for indentation
|
26
|
+
const char* indent;
|
27
|
+
// String to be used to for line feeds
|
28
|
+
const char* linefeed;
|
29
|
+
|
26
30
|
// Emit comments in the generated CSS indicating
|
27
31
|
// the corresponding source line.
|
28
32
|
bool source_comments;
|
29
33
|
|
34
|
+
};
|
35
|
+
|
36
|
+
// sass config options structure
|
37
|
+
struct Sass_Options : Sass_Output_Options {
|
38
|
+
|
30
39
|
// embed sourceMappingUrl as data uri
|
31
40
|
bool source_map_embed;
|
32
41
|
|
@@ -56,15 +65,9 @@ struct Sass_Options {
|
|
56
65
|
// information in source-maps etc.
|
57
66
|
char* output_path;
|
58
67
|
|
59
|
-
// String to be used for indentation
|
60
|
-
const char* indent;
|
61
|
-
// String to be used to for line feeds
|
62
|
-
const char* linefeed;
|
63
|
-
|
64
68
|
// Colon-separated list of paths
|
65
69
|
// Semicolon-separated on Windows
|
66
|
-
//
|
67
|
-
// array interface instead
|
70
|
+
// Maybe use array interface instead?
|
68
71
|
char* include_path;
|
69
72
|
char* plugin_path;
|
70
73
|
|
@@ -82,10 +85,13 @@ struct Sass_Options {
|
|
82
85
|
char* source_map_root;
|
83
86
|
|
84
87
|
// Custom functions that can be called from sccs code
|
85
|
-
|
88
|
+
Sass_Function_List c_functions;
|
86
89
|
|
87
90
|
// Callback to overload imports
|
88
|
-
|
91
|
+
Sass_Importer_List c_importers;
|
92
|
+
|
93
|
+
// List of custom headers
|
94
|
+
Sass_Importer_List c_headers;
|
89
95
|
|
90
96
|
};
|
91
97
|
|
@@ -111,6 +117,7 @@ struct Sass_Context : Sass_Options
|
|
111
117
|
char* error_file;
|
112
118
|
size_t error_line;
|
113
119
|
size_t error_column;
|
120
|
+
const char* error_src;
|
114
121
|
|
115
122
|
// report imported files
|
116
123
|
char** included_files;
|
@@ -130,6 +137,7 @@ struct Sass_Data_Context : Sass_Context {
|
|
130
137
|
|
131
138
|
// provided source string
|
132
139
|
char* source_string;
|
140
|
+
char* srcmap_string;
|
133
141
|
|
134
142
|
};
|
135
143
|
|
@@ -147,9 +155,9 @@ struct Sass_Compiler {
|
|
147
155
|
// original c context
|
148
156
|
Sass_Context* c_ctx;
|
149
157
|
// Sass::Context
|
150
|
-
|
158
|
+
Sass::Context* cpp_ctx;
|
151
159
|
// Sass::Block
|
152
|
-
|
160
|
+
Sass::Block_Obj root;
|
153
161
|
};
|
154
162
|
```
|
155
163
|
|
@@ -207,6 +207,15 @@ size_t sass_context_get_error_column (struct Sass_Context* ctx);
|
|
207
207
|
const char* sass_context_get_source_map_string (struct Sass_Context* ctx);
|
208
208
|
char** sass_context_get_included_files (struct Sass_Context* ctx);
|
209
209
|
|
210
|
+
// Getters for Sass_Compiler options (query import stack)
|
211
|
+
size_t sass_compiler_get_import_stack_size(struct Sass_Compiler* compiler);
|
212
|
+
Sass_Import_Entry sass_compiler_get_last_import(struct Sass_Compiler* compiler);
|
213
|
+
Sass_Import_Entry sass_compiler_get_import_entry(struct Sass_Compiler* compiler, size_t idx);
|
214
|
+
// Getters for Sass_Compiler options (query function stack)
|
215
|
+
size_t sass_compiler_get_callee_stack_size(struct Sass_Compiler* compiler);
|
216
|
+
Sass_Callee_Entry sass_compiler_get_last_callee(struct Sass_Compiler* compiler);
|
217
|
+
Sass_Callee_Entry sass_compiler_get_callee_entry(struct Sass_Compiler* compiler, size_t idx);
|
218
|
+
|
210
219
|
// Take ownership of memory (value on context is set to 0)
|
211
220
|
char* sass_context_take_error_json (struct Sass_Context* ctx);
|
212
221
|
char* sass_context_take_error_text (struct Sass_Context* ctx);
|
@@ -214,10 +223,6 @@ char* sass_context_take_error_message (struct Sass_Context* ctx);
|
|
214
223
|
char* sass_context_take_error_file (struct Sass_Context* ctx);
|
215
224
|
char* sass_context_take_output_string (struct Sass_Context* ctx);
|
216
225
|
char* sass_context_take_source_map_string (struct Sass_Context* ctx);
|
217
|
-
|
218
|
-
// Push function for plugin/include paths (no manipulation support for now)
|
219
|
-
void sass_option_push_plugin_path (struct Sass_Options* options, const char* path);
|
220
|
-
void sass_option_push_include_path (struct Sass_Options* options, const char* path);
|
221
226
|
```
|
222
227
|
|
223
228
|
### Sass Options API
|
@@ -236,13 +241,18 @@ const char* sass_option_get_indent (struct Sass_Options* options);
|
|
236
241
|
const char* sass_option_get_linefeed (struct Sass_Options* options);
|
237
242
|
const char* sass_option_get_input_path (struct Sass_Options* options);
|
238
243
|
const char* sass_option_get_output_path (struct Sass_Options* options);
|
239
|
-
const char* sass_option_get_plugin_path (struct Sass_Options* options);
|
240
|
-
const char* sass_option_get_include_path (struct Sass_Options* options);
|
241
244
|
const char* sass_option_get_source_map_file (struct Sass_Options* options);
|
242
245
|
const char* sass_option_get_source_map_root (struct Sass_Options* options);
|
243
246
|
Sass_C_Function_List sass_option_get_c_functions (struct Sass_Options* options);
|
244
247
|
Sass_C_Import_Callback sass_option_get_importer (struct Sass_Options* options);
|
245
248
|
|
249
|
+
// Getters for Context_Option include path array
|
250
|
+
size_t sass_option_get_include_path_size(struct Sass_Options* options);
|
251
|
+
const char* sass_option_get_include_path(struct Sass_Options* options, size_t i);
|
252
|
+
// Plugin paths to load dynamic libraries work the same
|
253
|
+
size_t sass_option_get_plugin_path_size(struct Sass_Options* options);
|
254
|
+
const char* sass_option_get_plugin_path(struct Sass_Options* options, size_t i);
|
255
|
+
|
246
256
|
// Setters for Context_Option values
|
247
257
|
void sass_option_set_precision (struct Sass_Options* options, int precision);
|
248
258
|
void sass_option_set_output_style (struct Sass_Options* options, enum Sass_Output_Style output_style);
|
@@ -266,6 +276,16 @@ void sass_option_set_importer (struct Sass_Options* options, Sass_C_Import_Callb
|
|
266
276
|
// Push function for paths (no manipulation support for now)
|
267
277
|
void sass_option_push_plugin_path (struct Sass_Options* options, const char* path);
|
268
278
|
void sass_option_push_include_path (struct Sass_Options* options, const char* path);
|
279
|
+
|
280
|
+
// Resolve a file via the given include paths in the sass option struct
|
281
|
+
// find_file looks for the exact file name while find_include does a regular sass include
|
282
|
+
char* sass_find_file (const char* path, struct Sass_Options* opt);
|
283
|
+
char* sass_find_include (const char* path, struct Sass_Options* opt);
|
284
|
+
|
285
|
+
// Resolve a file relative to last import or include paths in the sass option struct
|
286
|
+
// find_file looks for the exact file name while find_include does a regular sass include
|
287
|
+
char* sass_compiler_find_file (const char* path, struct Sass_Compiler* compiler);
|
288
|
+
char* sass_compiler_find_include (const char* path, struct Sass_Compiler* compiler);
|
269
289
|
```
|
270
290
|
|
271
291
|
### More links
|
data/ext/libsass/docs/api-doc.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
## Introduction
|
2
2
|
|
3
|
-
LibSass wouldn't be much good without a way to interface with it. These
|
3
|
+
LibSass wouldn't be much good without a way to interface with it. These
|
4
|
+
interface documentations describe the various functions and data structures
|
5
|
+
available to implementers. They are split up over three major components, which
|
6
|
+
have all their own source files (plus some common functionality).
|
4
7
|
|
5
8
|
- [Sass Context](api-context.md) - Trigger and handle the main Sass compilation
|
6
9
|
- [Sass Value](api-value.md) - Exchange values and its format with LibSass
|
@@ -41,7 +44,12 @@ gcc -Wall version.c -lsass -o version && ./version
|
|
41
44
|
|
42
45
|
## Compiling your code
|
43
46
|
|
44
|
-
The most important is your sass file (or string of sass code).
|
47
|
+
The most important is your sass file (or string of sass code). With this, you
|
48
|
+
will want to start a LibSass compiler. Here is some pseudocode describing the
|
49
|
+
process. The compiler has two different modes: direct input as a string with
|
50
|
+
`Sass_Data_Context` or LibSass will do file reading for you by using
|
51
|
+
`Sass_File_Context`. See the code for a list of options available
|
52
|
+
[Sass_Options](https://github.com/sass/libsass/blob/36feef0/include/sass/interface.h#L18)
|
45
53
|
|
46
54
|
**Building a file compiler**
|
47
55
|
|
@@ -97,7 +105,9 @@ struct Sass_Data_context : Sass_Context;
|
|
97
105
|
|
98
106
|
This mirrors very well how `libsass` uses these structures.
|
99
107
|
|
100
|
-
- `Sass_Options` holds everything you feed in before the compilation. It also hosts
|
108
|
+
- `Sass_Options` holds everything you feed in before the compilation. It also hosts
|
109
|
+
`input_path` and `output_path` options, because they are used to generate/calculate
|
110
|
+
relative links in source-maps. The `input_path` is shared with `Sass_File_Context`.
|
101
111
|
- `Sass_Context` holds all the data returned by the compilation step.
|
102
112
|
- `Sass_File_Context` is a specific implementation that requires no additional fields
|
103
113
|
- `Sass_Data_Context` is a specific implementation that adds the `input_source` field
|
@@ -106,8 +116,11 @@ Structs can be down-casted to access `context` or `options`!
|
|
106
116
|
|
107
117
|
## Memory handling and life-cycles
|
108
118
|
|
109
|
-
We keep memory around for as long as the main [context](api-context.md) object
|
110
|
-
|
119
|
+
We keep memory around for as long as the main [context](api-context.md) object
|
120
|
+
is not destroyed (`sass_delete_context`). LibSass will create copies of most
|
121
|
+
inputs/options beside the main sass code. You need to allocate and fill that
|
122
|
+
buffer before passing it to LibSass. You may also overtake memory management
|
123
|
+
from libsass for certain return values (i.e. `sass_context_take_output_string`).
|
111
124
|
|
112
125
|
```C
|
113
126
|
// to allocate buffer to be filled
|
@@ -125,9 +138,6 @@ void sass_free_memory(void* ptr);
|
|
125
138
|
char* sass_string_unquote (const char* str);
|
126
139
|
char* sass_string_quote (const char* str, const char quote_mark);
|
127
140
|
|
128
|
-
// Resolve a file via the given include paths in the include char* array
|
129
|
-
char* sass_resolve_file (const char* path, const char* incs[]);
|
130
|
-
|
131
141
|
// Get compiled libsass version
|
132
142
|
const char* libsass_version(void);
|
133
143
|
|
@@ -140,15 +150,25 @@ const char* libsass_language_version(void);
|
|
140
150
|
|
141
151
|
**input_path**
|
142
152
|
|
143
|
-
The `input_path` is part of `Sass_Options`, but it also is the main option for
|
153
|
+
The `input_path` is part of `Sass_Options`, but it also is the main option for
|
154
|
+
`Sass_File_Context`. It is also used to generate relative file links in source-
|
155
|
+
maps. Therefore it is pretty usefull to pass this information if you have a
|
156
|
+
`Sass_Data_Context` and know the original path.
|
144
157
|
|
145
158
|
**output_path**
|
146
159
|
|
147
|
-
Be aware that `libsass` does not write the output file itself. This option
|
160
|
+
Be aware that `libsass` does not write the output file itself. This option
|
161
|
+
merely exists to give `libsass` the proper information to generate links in
|
162
|
+
source-maps. The file has to be written to the disk by the
|
163
|
+
binding/implementation. If the `output_path` is omitted, `libsass` tries to
|
164
|
+
extrapolate one from the `input_path` by replacing (or adding) the file ending
|
165
|
+
with `.css`.
|
148
166
|
|
149
167
|
## Error Codes
|
150
168
|
|
151
|
-
The `error_code` is integer value which indicates the type of error that
|
169
|
+
The `error_code` is integer value which indicates the type of error that
|
170
|
+
occurred inside the LibSass process. Following is the list of error codes along
|
171
|
+
with the short description:
|
152
172
|
|
153
173
|
* 1: normal errors like parsing or `eval` errors
|
154
174
|
* 2: bad allocation error (memory error)
|
@@ -156,23 +176,36 @@ The `error_code` is integer value which indicates the type of error that occurre
|
|
156
176
|
* 4: legacy string exceptions ( `throw const char*` or `std::string` )
|
157
177
|
* 5: Some other unknown exception
|
158
178
|
|
159
|
-
Although for the API consumer, error codes do not offer much value except
|
179
|
+
Although for the API consumer, error codes do not offer much value except
|
180
|
+
indicating whether *any* error occurred during the compilation, it helps
|
181
|
+
debugging the LibSass internal code paths.
|
160
182
|
|
161
183
|
## Real-World Implementations
|
162
184
|
|
163
|
-
The proof is in the pudding, so we have highlighted a few implementations that
|
185
|
+
The proof is in the pudding, so we have highlighted a few implementations that
|
186
|
+
should be on par with the latest LibSass interface version. Some of them may not
|
187
|
+
have all features implemented!
|
164
188
|
|
165
189
|
1. [Perl Example](https://github.com/sass/perl-libsass/blob/master/lib/CSS/Sass.xs)
|
166
|
-
2. [Go Example](
|
190
|
+
2. [Go Example](https://godoc.org/github.com/wellington/go-libsass#example-Compiler--Stdin)
|
167
191
|
3. [Node Example](https://github.com/sass/node-sass/blob/master/src/binding.cpp)
|
168
192
|
|
169
193
|
## ABI forward compatibility
|
170
194
|
|
171
|
-
We use a functional API to make dynamic linking more robust and future
|
195
|
+
We use a functional API to make dynamic linking more robust and future
|
196
|
+
compatible. The API is not yet 100% stable, so we do not yet guarantee
|
197
|
+
[ABI](https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html) forward
|
198
|
+
compatibility.
|
172
199
|
|
173
200
|
## Plugins (experimental)
|
174
201
|
|
175
|
-
LibSass can load plugins from directories. Just define `plugin_path` on context
|
202
|
+
LibSass can load plugins from directories. Just define `plugin_path` on context
|
203
|
+
options to load all plugins from the directories. To implement plugins, please
|
204
|
+
consult the following example implementations.
|
205
|
+
|
206
|
+
- https://github.com/mgreter/libsass-glob
|
207
|
+
- https://github.com/mgreter/libsass-math
|
208
|
+
- https://github.com/mgreter/libsass-digest
|
176
209
|
|
177
210
|
## Internal Structs
|
178
211
|
|
@@ -11,7 +11,7 @@ union Sass_Value* call_fn_foo(const union Sass_Value* s_args, Sass_Function_Entr
|
|
11
11
|
struct Sass_Context* ctx = sass_compiler_get_context(comp);
|
12
12
|
struct Sass_Options* opts = sass_compiler_get_options(comp);
|
13
13
|
// get information about previous importer entry from the stack
|
14
|
-
|
14
|
+
Sass_Import_Entry import = sass_compiler_get_last_import(comp);
|
15
15
|
const char* prev_abs_path = sass_import_get_abs_path(import);
|
16
16
|
const char* prev_imp_path = sass_import_get_imp_path(import);
|
17
17
|
// get the cookie from function descriptor
|
@@ -30,17 +30,41 @@ typedef union Sass_Value* (*Sass_Function_Fn)
|
|
30
30
|
(const union Sass_Value*, Sass_Function_Entry cb, struct Sass_Compiler* compiler);
|
31
31
|
|
32
32
|
// Creators for sass function list and function descriptors
|
33
|
-
|
34
|
-
|
33
|
+
Sass_Function_List sass_make_function_list (size_t length);
|
34
|
+
Sass_Function_Entry sass_make_function (const char* signature, Sass_Function_Fn cb, void* cookie);
|
35
|
+
// In case you need to free them yourself
|
36
|
+
void sass_delete_function (Sass_Function_Entry entry);
|
37
|
+
void sass_delete_function_list (Sass_Function_List list);
|
35
38
|
|
36
39
|
// Setters and getters for callbacks on function lists
|
37
|
-
|
38
|
-
|
40
|
+
Sass_Function_Entry sass_function_get_list_entry(Sass_Function_List list, size_t pos);
|
41
|
+
void sass_function_set_list_entry(Sass_Function_List list, size_t pos, Sass_Function_Entry cb);
|
42
|
+
|
43
|
+
// Setters to insert an entry into the import list (you may also use [] access directly)
|
44
|
+
// Since we are dealing with pointers they should have a guaranteed and fixed size
|
45
|
+
void sass_import_set_list_entry (Sass_Import_List list, size_t idx, Sass_Import_Entry entry);
|
46
|
+
Sass_Import_Entry sass_import_get_list_entry (Sass_Import_List list, size_t idx);
|
39
47
|
|
40
48
|
// Getters for custom function descriptors
|
41
|
-
|
42
|
-
|
43
|
-
|
49
|
+
const char* sass_function_get_signature (Sass_Function_Entry cb);
|
50
|
+
Sass_Function_Fn sass_function_get_function (Sass_Function_Entry cb);
|
51
|
+
void* sass_function_get_cookie (Sass_Function_Entry cb);
|
52
|
+
|
53
|
+
// Getters for callee entry
|
54
|
+
const char* sass_callee_get_name (Sass_Callee_Entry);
|
55
|
+
const char* sass_callee_get_path (Sass_Callee_Entry);
|
56
|
+
size_t sass_callee_get_line (Sass_Callee_Entry);
|
57
|
+
size_t sass_callee_get_column (Sass_Callee_Entry);
|
58
|
+
enum Sass_Callee_Type sass_callee_get_type (Sass_Callee_Entry);
|
59
|
+
Sass_Env_Frame sass_callee_get_env (Sass_Callee_Entry);
|
60
|
+
|
61
|
+
// Getters and Setters for environments (lexical, local and global)
|
62
|
+
union Sass_Value* sass_env_get_lexical (Sass_Env_Frame, const char*);
|
63
|
+
void sass_env_set_lexical (Sass_Env_Frame, const char*, union Sass_Value*);
|
64
|
+
union Sass_Value* sass_env_get_local (Sass_Env_Frame, const char*);
|
65
|
+
void sass_env_set_local (Sass_Env_Frame, const char*, union Sass_Value*);
|
66
|
+
union Sass_Value* sass_env_get_global (Sass_Env_Frame, const char*);
|
67
|
+
void sass_env_set_global (Sass_Env_Frame, const char*, union Sass_Value*);
|
44
68
|
```
|
45
69
|
|
46
70
|
### More links
|
@@ -5,7 +5,7 @@ By using custom importers, Sass stylesheets can be implemented in any possible w
|
|
5
5
|
You actually have to return a list of imports, since some importers may want to import multiple files from one import statement (ie. a glob/star importer). The memory you pass with source and srcmap is taken over by LibSass and freed automatically when the import is done. You are also allowed to return `0` instead of a list, which will tell LibSass to handle the import by itself (as if no custom importer was in use).
|
6
6
|
|
7
7
|
```C
|
8
|
-
|
8
|
+
Sass_Import_Entry* rv = sass_make_import_list(1);
|
9
9
|
rv[0] = sass_make_import(rel, abs, source, srcmap);
|
10
10
|
```
|
11
11
|
|
@@ -31,7 +31,7 @@ struct Sass_C_Import_Descriptor;
|
|
31
31
|
// Typedef defining the custom importer callback
|
32
32
|
typedef struct Sass_C_Import_Descriptor (*Sass_C_Import_Callback);
|
33
33
|
// Typedef defining the importer c function prototype
|
34
|
-
typedef
|
34
|
+
typedef Sass_Import_Entry* (*Sass_C_Import_Fn) (const char* url, const char* prev, void* cookie);
|
35
35
|
|
36
36
|
// Creators for custom importer callback (with some additional pointer)
|
37
37
|
// The pointer is mostly used to store the callback into the actual function
|
@@ -45,38 +45,38 @@ void* sass_import_get_cookie (Sass_C_Import_Callback fn);
|
|
45
45
|
void sass_delete_importer (Sass_C_Import_Callback fn);
|
46
46
|
|
47
47
|
// Creator for sass custom importer return argument list
|
48
|
-
|
48
|
+
Sass_Import_Entry* sass_make_import_list (size_t length);
|
49
49
|
// Creator for a single import entry returned by the custom importer inside the list
|
50
|
-
|
51
|
-
|
50
|
+
Sass_Import_Entry sass_make_import_entry (const char* path, char* source, char* srcmap);
|
51
|
+
Sass_Import_Entry sass_make_import (const char* rel, const char* abs, char* source, char* srcmap);
|
52
52
|
|
53
53
|
// set error message to abort import and to print out a message (path from existing object is used in output)
|
54
|
-
|
54
|
+
Sass_Import_Entry sass_import_set_error(Sass_Import_Entry import, const char* message, size_t line, size_t col);
|
55
55
|
|
56
56
|
// Setters to insert an entry into the import list (you may also use [] access directly)
|
57
57
|
// Since we are dealing with pointers they should have a guaranteed and fixed size
|
58
|
-
void sass_import_set_list_entry (
|
59
|
-
|
58
|
+
void sass_import_set_list_entry (Sass_Import_Entry* list, size_t idx, Sass_Import_Entry entry);
|
59
|
+
Sass_Import_Entry sass_import_get_list_entry (Sass_Import_Entry* list, size_t idx);
|
60
60
|
|
61
61
|
// Getters for import entry
|
62
|
-
const char*
|
63
|
-
const char* sass_import_get_abs_path (
|
64
|
-
const char* sass_import_get_source (
|
65
|
-
const char* sass_import_get_srcmap (
|
62
|
+
const char* sass_import_get_imp_path (Sass_Import_Entry);
|
63
|
+
const char* sass_import_get_abs_path (Sass_Import_Entry);
|
64
|
+
const char* sass_import_get_source (Sass_Import_Entry);
|
65
|
+
const char* sass_import_get_srcmap (Sass_Import_Entry);
|
66
66
|
// Explicit functions to take ownership of these items
|
67
67
|
// The property on our struct will be reset to NULL
|
68
|
-
char* sass_import_take_source (
|
69
|
-
char* sass_import_take_srcmap (
|
68
|
+
char* sass_import_take_source (Sass_Import_Entry);
|
69
|
+
char* sass_import_take_srcmap (Sass_Import_Entry);
|
70
70
|
|
71
71
|
// Getters for import error entries
|
72
|
-
size_t sass_import_get_error_line (
|
73
|
-
size_t sass_import_get_error_column (
|
74
|
-
const char* sass_import_get_error_message (
|
72
|
+
size_t sass_import_get_error_line (Sass_Import_Entry);
|
73
|
+
size_t sass_import_get_error_column (Sass_Import_Entry);
|
74
|
+
const char* sass_import_get_error_message (Sass_Import_Entry);
|
75
75
|
|
76
76
|
// Deallocator for associated memory (incl. entries)
|
77
|
-
void sass_delete_import_list (
|
77
|
+
void sass_delete_import_list (Sass_Import_Entry*);
|
78
78
|
// Just in case we have some stray import structs
|
79
|
-
void sass_delete_import (
|
79
|
+
void sass_delete_import (Sass_Import_Entry);
|
80
80
|
```
|
81
81
|
|
82
82
|
### More links
|