sassc 0.0.10 → 0.0.11

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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/libsass/.gitignore +6 -0
  4. data/ext/libsass/.travis.yml +5 -1
  5. data/ext/libsass/Makefile +12 -3
  6. data/ext/libsass/Makefile.am +16 -28
  7. data/ext/libsass/Readme.md +1 -0
  8. data/ext/libsass/appveyor.yml +1 -2
  9. data/ext/libsass/ast.cpp +9 -0
  10. data/ext/libsass/ast.hpp +152 -55
  11. data/ext/libsass/ast_factory.hpp +2 -0
  12. data/ext/libsass/ast_fwd_decl.hpp +1 -0
  13. data/ext/libsass/backtrace.hpp +2 -2
  14. data/ext/libsass/bind.cpp +15 -13
  15. data/ext/libsass/configure.ac +17 -5
  16. data/ext/libsass/constants.cpp +22 -2
  17. data/ext/libsass/constants.hpp +21 -2
  18. data/ext/libsass/context.cpp +79 -57
  19. data/ext/libsass/context.hpp +23 -9
  20. data/ext/libsass/contextualize.cpp +2 -28
  21. data/ext/libsass/contextualize.hpp +6 -10
  22. data/ext/libsass/contextualize_eval.cpp +93 -0
  23. data/ext/libsass/contextualize_eval.hpp +44 -0
  24. data/ext/libsass/contrib/plugin.cpp +57 -0
  25. data/ext/libsass/cssize.cpp +3 -1
  26. data/ext/libsass/debugger.hpp +242 -83
  27. data/ext/libsass/emitter.cpp +1 -1
  28. data/ext/libsass/emitter.hpp +1 -1
  29. data/ext/libsass/environment.hpp +109 -25
  30. data/ext/libsass/error_handling.cpp +3 -3
  31. data/ext/libsass/error_handling.hpp +0 -1
  32. data/ext/libsass/eval.cpp +145 -61
  33. data/ext/libsass/eval.hpp +9 -1
  34. data/ext/libsass/expand.cpp +134 -60
  35. data/ext/libsass/expand.hpp +5 -2
  36. data/ext/libsass/extend.cpp +7 -5
  37. data/ext/libsass/file.cpp +176 -123
  38. data/ext/libsass/file.hpp +44 -7
  39. data/ext/libsass/functions.cpp +36 -17
  40. data/ext/libsass/functions.hpp +2 -2
  41. data/ext/libsass/inspect.cpp +23 -14
  42. data/ext/libsass/inspect.hpp +1 -0
  43. data/ext/libsass/json.cpp +132 -135
  44. data/ext/libsass/lexer.cpp +133 -0
  45. data/ext/libsass/lexer.hpp +239 -0
  46. data/ext/libsass/listize.cpp +83 -0
  47. data/ext/libsass/listize.hpp +41 -0
  48. data/ext/libsass/operation.hpp +2 -0
  49. data/ext/libsass/output.cpp +5 -6
  50. data/ext/libsass/parser.cpp +426 -388
  51. data/ext/libsass/parser.hpp +97 -109
  52. data/ext/libsass/plugins.cpp +15 -2
  53. data/ext/libsass/plugins.hpp +6 -4
  54. data/ext/libsass/position.cpp +52 -17
  55. data/ext/libsass/position.hpp +19 -17
  56. data/ext/libsass/prelexer.cpp +202 -235
  57. data/ext/libsass/prelexer.hpp +73 -333
  58. data/ext/libsass/sass.cpp +21 -11
  59. data/ext/libsass/sass.h +6 -6
  60. data/ext/libsass/sass_context.cpp +167 -81
  61. data/ext/libsass/sass_context.h +26 -6
  62. data/ext/libsass/sass_functions.cpp +49 -40
  63. data/ext/libsass/sass_functions.h +55 -43
  64. data/ext/libsass/sass_interface.cpp +9 -8
  65. data/ext/libsass/sass_interface.h +3 -3
  66. data/ext/libsass/sass_version.h +8 -0
  67. data/ext/libsass/sass_version.h.in +8 -0
  68. data/ext/libsass/script/ci-build-libsass +3 -3
  69. data/ext/libsass/script/ci-report-coverage +2 -1
  70. data/ext/libsass/source_map.cpp +2 -2
  71. data/ext/libsass/util.cpp +60 -11
  72. data/ext/libsass/util.hpp +6 -1
  73. data/ext/libsass/win/libsass.filters +12 -0
  74. data/ext/libsass/win/libsass.vcxproj +10 -0
  75. data/lib/sassc.rb +3 -1
  76. data/lib/sassc/cache_stores/base.rb +2 -0
  77. data/lib/sassc/dependency.rb +3 -1
  78. data/lib/sassc/engine.rb +31 -16
  79. data/lib/sassc/error.rb +3 -2
  80. data/lib/sassc/functions_handler.rb +54 -0
  81. data/lib/sassc/import_handler.rb +41 -0
  82. data/lib/sassc/importer.rb +4 -31
  83. data/lib/sassc/native.rb +1 -1
  84. data/lib/sassc/native/native_context_api.rb +3 -2
  85. data/lib/sassc/script.rb +0 -51
  86. data/lib/sassc/version.rb +1 -1
  87. data/sassc.gemspec +1 -0
  88. data/test/custom_importer_test.rb +72 -69
  89. data/test/engine_test.rb +53 -54
  90. data/test/functions_test.rb +40 -39
  91. data/test/native_test.rb +145 -149
  92. data/test/output_style_test.rb +98 -0
  93. data/test/test_helper.rb +21 -7
  94. metadata +28 -2
@@ -14,11 +14,18 @@ extern "C" {
14
14
  struct Sass_Compiler;
15
15
 
16
16
  // Forward declaration
17
- struct Sass_Options;
17
+ struct Sass_Options; // base struct
18
18
  struct Sass_Context; // : Sass_Options
19
19
  struct Sass_File_Context; // : Sass_Context
20
20
  struct Sass_Data_Context; // : Sass_Context
21
21
 
22
+ // Compiler states
23
+ enum Sass_Compiler_State {
24
+ SASS_COMPILER_CREATED,
25
+ SASS_COMPILER_PARSED,
26
+ SASS_COMPILER_EXECUTED
27
+ };
28
+
22
29
  // Create and initialize an option struct
23
30
  ADDAPI struct Sass_Options* ADDCALL sass_make_options (void);
24
31
  // Create and initialize a specific context
@@ -74,8 +81,9 @@ ADDAPI const char* ADDCALL sass_option_get_plugin_path (struct Sass_Options* opt
74
81
  ADDAPI const char* ADDCALL sass_option_get_include_path (struct Sass_Options* options);
75
82
  ADDAPI const char* ADDCALL sass_option_get_source_map_file (struct Sass_Options* options);
76
83
  ADDAPI const char* ADDCALL sass_option_get_source_map_root (struct Sass_Options* options);
77
- ADDAPI Sass_C_Function_List ADDCALL sass_option_get_c_functions (struct Sass_Options* options);
78
- ADDAPI Sass_C_Import_Callback ADDCALL sass_option_get_importer (struct Sass_Options* options);
84
+ ADDAPI Sass_Importer_List ADDCALL sass_option_get_c_headers (struct Sass_Options* options);
85
+ ADDAPI Sass_Importer_List ADDCALL sass_option_get_c_importers (struct Sass_Options* options);
86
+ ADDAPI Sass_Function_List ADDCALL sass_option_get_c_functions (struct Sass_Options* options);
79
87
 
80
88
  // Setters for Context_Option values
81
89
  ADDAPI void ADDCALL sass_option_set_precision (struct Sass_Options* options, int precision);
@@ -93,8 +101,9 @@ ADDAPI void ADDCALL sass_option_set_plugin_path (struct Sass_Options* options, c
93
101
  ADDAPI void ADDCALL sass_option_set_include_path (struct Sass_Options* options, const char* include_path);
94
102
  ADDAPI void ADDCALL sass_option_set_source_map_file (struct Sass_Options* options, const char* source_map_file);
95
103
  ADDAPI void ADDCALL sass_option_set_source_map_root (struct Sass_Options* options, const char* source_map_root);
96
- ADDAPI void ADDCALL sass_option_set_c_functions (struct Sass_Options* options, Sass_C_Function_List c_functions);
97
- ADDAPI void ADDCALL sass_option_set_importer (struct Sass_Options* options, Sass_C_Import_Callback importer);
104
+ ADDAPI void ADDCALL sass_option_set_c_headers (struct Sass_Options* options, Sass_Importer_List c_headers);
105
+ ADDAPI void ADDCALL sass_option_set_c_importers (struct Sass_Options* options, Sass_Importer_List c_importers);
106
+ ADDAPI void ADDCALL sass_option_set_c_functions (struct Sass_Options* options, Sass_Function_List c_functions);
98
107
 
99
108
 
100
109
  // Getters for Sass_Context values
@@ -104,11 +113,15 @@ ADDAPI const char* ADDCALL sass_context_get_error_json (struct Sass_Context* ctx
104
113
  ADDAPI const char* ADDCALL sass_context_get_error_text (struct Sass_Context* ctx);
105
114
  ADDAPI const char* ADDCALL sass_context_get_error_message (struct Sass_Context* ctx);
106
115
  ADDAPI const char* ADDCALL sass_context_get_error_file (struct Sass_Context* ctx);
116
+ ADDAPI const char* ADDCALL sass_context_get_error_src (struct Sass_Context* ctx);
107
117
  ADDAPI size_t ADDCALL sass_context_get_error_line (struct Sass_Context* ctx);
108
118
  ADDAPI size_t ADDCALL sass_context_get_error_column (struct Sass_Context* ctx);
109
119
  ADDAPI const char* ADDCALL sass_context_get_source_map_string (struct Sass_Context* ctx);
110
120
  ADDAPI char** ADDCALL sass_context_get_included_files (struct Sass_Context* ctx);
111
121
 
122
+ // Calculate the size of the stored null terminated array
123
+ ADDAPI size_t ADDCALL sass_context_get_included_files_size (struct Sass_Context* ctx);
124
+
112
125
  // Take ownership of memory (value on context is set to 0)
113
126
  ADDAPI char* ADDCALL sass_context_take_error_json (struct Sass_Context* ctx);
114
127
  ADDAPI char* ADDCALL sass_context_take_error_text (struct Sass_Context* ctx);
@@ -116,12 +129,19 @@ ADDAPI char* ADDCALL sass_context_take_error_message (struct Sass_Context* ctx);
116
129
  ADDAPI char* ADDCALL sass_context_take_error_file (struct Sass_Context* ctx);
117
130
  ADDAPI char* ADDCALL sass_context_take_output_string (struct Sass_Context* ctx);
118
131
  ADDAPI char* ADDCALL sass_context_take_source_map_string (struct Sass_Context* ctx);
132
+ ADDAPI char** ADDCALL sass_context_take_included_files (struct Sass_Context* ctx);
133
+
134
+ // Getters for Sass_Compiler options
135
+ ADDAPI enum Sass_Compiler_State ADDCALL sass_compiler_get_state(struct Sass_Compiler* compiler);
136
+ ADDAPI struct Sass_Context* ADDCALL sass_compiler_get_context(struct Sass_Compiler* compiler);
137
+ ADDAPI size_t ADDCALL sass_compiler_get_import_stack_size(struct Sass_Compiler* compiler);
138
+ ADDAPI Sass_Import_Entry ADDCALL sass_compiler_get_last_import(struct Sass_Compiler* compiler);
139
+ ADDAPI Sass_Import_Entry ADDCALL sass_compiler_get_import_entry(struct Sass_Compiler* compiler, size_t idx);
119
140
 
120
141
  // Push function for paths (no manipulation support for now)
121
142
  ADDAPI void ADDCALL sass_option_push_plugin_path (struct Sass_Options* options, const char* path);
122
143
  ADDAPI void ADDCALL sass_option_push_include_path (struct Sass_Options* options, const char* path);
123
144
 
124
-
125
145
  #ifdef __cplusplus
126
146
  } // __cplusplus defined.
127
147
  #endif
@@ -14,20 +14,20 @@ extern "C" {
14
14
  using namespace Sass;
15
15
 
16
16
  // Struct to hold custom function callback
17
- struct Sass_C_Function_Descriptor {
18
- const char* signature;
19
- Sass_C_Function function;
20
- void* cookie;
17
+ struct Sass_Function {
18
+ const char* signature;
19
+ Sass_Function_Fn function;
20
+ void* cookie;
21
21
  };
22
22
 
23
- Sass_C_Function_List ADDCALL sass_make_function_list(size_t length)
23
+ Sass_Function_List ADDCALL sass_make_function_list(size_t length)
24
24
  {
25
- return (Sass_C_Function_List) calloc(length + 1, sizeof(Sass_C_Function_Callback));
25
+ return (Sass_Function_List) calloc(length + 1, sizeof(Sass_Function_Entry));
26
26
  }
27
27
 
28
- Sass_C_Function_Callback ADDCALL sass_make_function(const char* signature, Sass_C_Function function, void* cookie)
28
+ Sass_Function_Entry ADDCALL sass_make_function(const char* signature, Sass_Function_Fn function, void* cookie)
29
29
  {
30
- Sass_C_Function_Callback cb = (Sass_C_Function_Callback) calloc(1, sizeof(Sass_C_Function_Descriptor));
30
+ Sass_Function_Entry cb = (Sass_Function_Entry) calloc(1, sizeof(Sass_Function));
31
31
  if (cb == 0) return 0;
32
32
  cb->signature = signature;
33
33
  cb->function = function;
@@ -36,12 +36,12 @@ extern "C" {
36
36
  }
37
37
 
38
38
  // Setters and getters for callbacks on function lists
39
- Sass_C_Function_Callback ADDCALL sass_function_get_list_entry(Sass_C_Function_List list, size_t pos) { return list[pos]; }
40
- void sass_function_set_list_entry(Sass_C_Function_List list, size_t pos, Sass_C_Function_Callback cb) { list[pos] = cb; }
39
+ Sass_Function_Entry ADDCALL sass_function_get_list_entry(Sass_Function_List list, size_t pos) { return list[pos]; }
40
+ void sass_function_set_list_entry(Sass_Function_List list, size_t pos, Sass_Function_Entry cb) { list[pos] = cb; }
41
41
 
42
- const char* ADDCALL sass_function_get_signature(Sass_C_Function_Callback fn) { return fn->signature; }
43
- Sass_C_Function ADDCALL sass_function_get_function(Sass_C_Function_Callback fn) { return fn->function; }
44
- void* ADDCALL sass_function_get_cookie(Sass_C_Function_Callback fn) { return fn->cookie; }
42
+ const char* ADDCALL sass_function_get_signature(Sass_Function_Entry cb) { return cb->signature; }
43
+ Sass_Function_Fn ADDCALL sass_function_get_function(Sass_Function_Entry cb) { return cb->function; }
44
+ void* ADDCALL sass_function_get_cookie(Sass_Function_Entry cb) { return cb->cookie; }
45
45
 
46
46
  // External import entry
47
47
  struct Sass_Import {
@@ -56,38 +56,47 @@ extern "C" {
56
56
  };
57
57
 
58
58
  // Struct to hold importer callback
59
- struct Sass_C_Import_Descriptor {
60
- Sass_C_Import_Fn function;
59
+ struct Sass_Importer {
60
+ Sass_Importer_Fn importer;
61
+ double priority;
61
62
  void* cookie;
62
63
  };
63
64
 
64
- Sass_C_Import_Callback ADDCALL sass_make_importer(Sass_C_Import_Fn function, void* cookie)
65
+ Sass_Importer_Entry ADDCALL sass_make_importer(Sass_Importer_Fn importer, double priority, void* cookie)
65
66
  {
66
- Sass_C_Import_Callback cb = (Sass_C_Import_Callback) calloc(1, sizeof(Sass_C_Import_Descriptor));
67
+ Sass_Importer_Entry cb = (Sass_Importer_Entry) calloc(1, sizeof(Sass_Importer));
67
68
  if (cb == 0) return 0;
68
- cb->function = function;
69
+ cb->importer = importer;
70
+ cb->priority = priority;
69
71
  cb->cookie = cookie;
70
72
  return cb;
71
73
  }
72
74
 
73
- Sass_C_Import_Fn ADDCALL sass_import_get_function(Sass_C_Import_Callback fn) { return fn->function; }
74
- void* ADDCALL sass_import_get_cookie(Sass_C_Import_Callback fn) { return fn->cookie; }
75
+ Sass_Importer_Fn ADDCALL sass_importer_get_function(Sass_Importer_Entry cb) { return cb->importer; }
76
+ double ADDCALL sass_importer_get_priority (Sass_Importer_Entry cb) { return cb->priority; }
77
+ void* ADDCALL sass_importer_get_cookie(Sass_Importer_Entry cb) { return cb->cookie; }
75
78
 
76
79
  // Just in case we have some stray import structs
77
- void ADDCALL sass_delete_importer (Sass_C_Import_Callback fn)
80
+ void ADDCALL sass_delete_importer (Sass_Importer_Entry cb)
81
+ {
82
+ free(cb);
83
+ }
84
+
85
+ // Creator for sass custom importer function list
86
+ Sass_Importer_List ADDCALL sass_make_importer_list(size_t length)
78
87
  {
79
- free(fn);
88
+ return (Sass_Importer_List) calloc(length + 1, sizeof(Sass_Importer_Entry));
80
89
  }
81
90
 
82
91
  // Creator for sass custom importer return argument list
83
- struct Sass_Import** ADDCALL sass_make_import_list(size_t length)
92
+ Sass_Import_List ADDCALL sass_make_import_list(size_t length)
84
93
  {
85
94
  return (Sass_Import**) calloc(length + 1, sizeof(Sass_Import*));
86
95
  }
87
96
 
88
97
  // Creator for a single import entry returned by the custom importer inside the list
89
98
  // We take ownership of the memory for source and srcmap (freed when context is destroyd)
90
- struct Sass_Import* ADDCALL sass_make_import(const char* path, const char* base, char* source, char* srcmap)
99
+ Sass_Import_Entry ADDCALL sass_make_import(const char* path, const char* base, char* source, char* srcmap)
91
100
  {
92
101
  Sass_Import* v = (Sass_Import*) calloc(1, sizeof(Sass_Import));
93
102
  if (v == 0) return 0;
@@ -102,13 +111,13 @@ extern "C" {
102
111
  }
103
112
 
104
113
  // Older style, but somehow still valid - keep around or deprecate?
105
- struct Sass_Import* ADDCALL sass_make_import_entry(const char* path, char* source, char* srcmap)
114
+ Sass_Import_Entry ADDCALL sass_make_import_entry(const char* path, char* source, char* srcmap)
106
115
  {
107
116
  return sass_make_import(path, path, source, srcmap);
108
117
  }
109
118
 
110
119
  // Upgrade a normal import entry to throw an error (original path can be re-used by error reporting)
111
- struct Sass_Import* ADDCALL sass_import_set_error(struct Sass_Import* import, const char* error, size_t line, size_t col)
120
+ Sass_Import_Entry ADDCALL sass_import_set_error(Sass_Import_Entry import, const char* error, size_t line, size_t col)
112
121
  {
113
122
  if (import == 0) return 0;
114
123
  if (import->error) free(import->error);
@@ -119,13 +128,13 @@ extern "C" {
119
128
  }
120
129
 
121
130
  // Setters and getters for entries on the import list
122
- void ADDCALL sass_import_set_list_entry(struct Sass_Import** list, size_t idx, struct Sass_Import* entry) { list[idx] = entry; }
123
- struct Sass_Import* ADDCALL sass_import_get_list_entry(struct Sass_Import** list, size_t idx) { return list[idx]; }
131
+ void ADDCALL sass_import_set_list_entry(Sass_Import_List list, size_t idx, Sass_Import_Entry entry) { list[idx] = entry; }
132
+ Sass_Import_Entry ADDCALL sass_import_get_list_entry(Sass_Import_List list, size_t idx) { return list[idx]; }
124
133
 
125
134
  // Deallocator for the allocated memory
126
- void ADDCALL sass_delete_import_list(struct Sass_Import** list)
135
+ void ADDCALL sass_delete_import_list(Sass_Import_List list)
127
136
  {
128
- struct Sass_Import** it = list;
137
+ Sass_Import_List it = list;
129
138
  if (list == 0) return;
130
139
  while(*list) {
131
140
  sass_delete_import(*list);
@@ -135,7 +144,7 @@ extern "C" {
135
144
  }
136
145
 
137
146
  // Just in case we have some stray import structs
138
- void ADDCALL sass_delete_import(struct Sass_Import* import)
147
+ void ADDCALL sass_delete_import(Sass_Import_Entry import)
139
148
  {
140
149
  free(import->path);
141
150
  free(import->base);
@@ -146,19 +155,19 @@ extern "C" {
146
155
  }
147
156
 
148
157
  // Getter for import entry
149
- const char* ADDCALL sass_import_get_path(struct Sass_Import* entry) { return entry->path; }
150
- const char* ADDCALL sass_import_get_base(struct Sass_Import* entry) { return entry->base; }
151
- const char* ADDCALL sass_import_get_source(struct Sass_Import* entry) { return entry->source; }
152
- const char* ADDCALL sass_import_get_srcmap(struct Sass_Import* entry) { return entry->srcmap; }
158
+ const char* ADDCALL sass_import_get_path(Sass_Import_Entry entry) { return entry->path; }
159
+ const char* ADDCALL sass_import_get_base(Sass_Import_Entry entry) { return entry->base; }
160
+ const char* ADDCALL sass_import_get_source(Sass_Import_Entry entry) { return entry->source; }
161
+ const char* ADDCALL sass_import_get_srcmap(Sass_Import_Entry entry) { return entry->srcmap; }
153
162
 
154
163
  // Getter for import error entry
155
- size_t ADDCALL sass_import_get_error_line(struct Sass_Import* entry) { return entry->line; }
156
- size_t ADDCALL sass_import_get_error_column(struct Sass_Import* entry) { return entry->column; }
157
- const char* ADDCALL sass_import_get_error_message(struct Sass_Import* entry) { return entry->error; }
164
+ size_t ADDCALL sass_import_get_error_line(Sass_Import_Entry entry) { return entry->line; }
165
+ size_t ADDCALL sass_import_get_error_column(Sass_Import_Entry entry) { return entry->column; }
166
+ const char* ADDCALL sass_import_get_error_message(Sass_Import_Entry entry) { return entry->error; }
158
167
 
159
168
  // Explicit functions to take ownership of the memory
160
169
  // Resets our own property since we do not know if it is still alive
161
- char* ADDCALL sass_import_take_source(struct Sass_Import* entry) { char* ptr = entry->source; entry->source = 0; return ptr; }
162
- char* ADDCALL sass_import_take_srcmap(struct Sass_Import* entry) { char* ptr = entry->srcmap; entry->srcmap = 0; return ptr; }
170
+ char* ADDCALL sass_import_take_source(Sass_Import_Entry entry) { char* ptr = entry->source; entry->source = 0; return ptr; }
171
+ char* ADDCALL sass_import_take_srcmap(Sass_Import_Entry entry) { char* ptr = entry->srcmap; entry->srcmap = 0; return ptr; }
163
172
 
164
173
  }
@@ -12,81 +12,93 @@ extern "C" {
12
12
 
13
13
  // Forward declaration
14
14
  struct Sass_Import;
15
+ struct Sass_Options;
16
+ struct Sass_Compiler;
17
+ struct Sass_Importer;
18
+ struct Sass_Function;
19
+
20
+ // Typedef helpers for import lists
21
+ typedef struct Sass_Import (*Sass_Import_Entry);
22
+ typedef struct Sass_Import* (*Sass_Import_List);
23
+ // Typedef helpers for custom importer lists
24
+ typedef struct Sass_Importer (*Sass_Importer_Entry);
25
+ typedef struct Sass_Importer* (*Sass_Importer_List);
26
+ // Typedef defining importer signature and return type
27
+ typedef Sass_Import_List (*Sass_Importer_Fn)
28
+ (const char* url, Sass_Importer_Entry cb, struct Sass_Compiler* compiler);
29
+
30
+ // Typedef helpers for custom functions lists
31
+ typedef struct Sass_Function (*Sass_Function_Entry);
32
+ typedef struct Sass_Function* (*Sass_Function_List);
33
+ // Typedef defining function signature and return type
34
+ typedef union Sass_Value* (*Sass_Function_Fn)
35
+ (const union Sass_Value*, Sass_Function_Entry cb, struct Sass_Options* options);
15
36
 
16
- // Forward declaration
17
- struct Sass_C_Import_Descriptor;
18
37
 
19
- // Typedef defining the custom importer callback
20
- typedef struct Sass_C_Import_Descriptor (*Sass_C_Import_Callback);
21
- // Typedef defining the importer c function prototype
22
- typedef struct Sass_Import** (*Sass_C_Import_Fn) (const char* url, const char* prev, void* cookie);
38
+ // Creator for sass custom importer return argument list
39
+ ADDAPI Sass_Importer_List ADDCALL sass_make_importer_list (size_t length);
40
+ ADDAPI Sass_Importer_Entry ADDCALL sass_importer_get_list_entry (Sass_Importer_List list, size_t idx);
41
+ ADDAPI void ADDCALL sass_importer_set_list_entry (Sass_Importer_List list, size_t idx, Sass_Importer_Entry entry);
42
+
23
43
 
24
44
  // Creators for custom importer callback (with some additional pointer)
25
45
  // The pointer is mostly used to store the callback into the actual binding
26
- ADDAPI Sass_C_Import_Callback ADDCALL sass_make_importer (Sass_C_Import_Fn, void* cookie);
46
+ ADDAPI Sass_Importer_Entry ADDCALL sass_make_importer (Sass_Importer_Fn importer, double priority, void* cookie);
27
47
 
28
48
  // Getters for import function descriptors
29
- ADDAPI Sass_C_Import_Fn ADDCALL sass_import_get_function (Sass_C_Import_Callback fn);
30
- ADDAPI void* ADDCALL sass_import_get_cookie (Sass_C_Import_Callback fn);
49
+ ADDAPI Sass_Importer_Fn ADDCALL sass_importer_get_function (Sass_Importer_Entry cb);
50
+ ADDAPI double ADDCALL sass_importer_get_priority (Sass_Importer_Entry cb);
51
+ ADDAPI void* ADDCALL sass_importer_get_cookie (Sass_Importer_Entry cb);
31
52
 
32
53
  // Deallocator for associated memory
33
- ADDAPI void ADDCALL sass_delete_importer (Sass_C_Import_Callback fn);
54
+ ADDAPI void ADDCALL sass_delete_importer (Sass_Importer_Entry cb);
34
55
 
35
56
  // Creator for sass custom importer return argument list
36
- ADDAPI struct Sass_Import** ADDCALL sass_make_import_list (size_t length);
57
+ ADDAPI Sass_Import_List ADDCALL sass_make_import_list (size_t length);
37
58
  // Creator for a single import entry returned by the custom importer inside the list
38
- ADDAPI struct Sass_Import* ADDCALL sass_make_import_entry (const char* path, char* source, char* srcmap);
39
- ADDAPI struct Sass_Import* ADDCALL sass_make_import (const char* path, const char* base, char* source, char* srcmap);
59
+ ADDAPI Sass_Import_Entry ADDCALL sass_make_import_entry (const char* path, char* source, char* srcmap);
60
+ ADDAPI Sass_Import_Entry ADDCALL sass_make_import (const char* path, const char* base, char* source, char* srcmap);
40
61
  // set error message to abort import and to print out a message (path from existing object is used in output)
41
- ADDAPI struct Sass_Import* ADDCALL sass_import_set_error(struct Sass_Import* import, const char* message, size_t line, size_t col);
62
+ ADDAPI Sass_Import_Entry ADDCALL sass_import_set_error(Sass_Import_Entry import, const char* message, size_t line, size_t col);
42
63
 
43
64
  // Setters to insert an entry into the import list (you may also use [] access directly)
44
65
  // Since we are dealing with pointers they should have a guaranteed and fixed size
45
- ADDAPI void ADDCALL sass_import_set_list_entry (struct Sass_Import** list, size_t idx, struct Sass_Import* entry);
46
- ADDAPI struct Sass_Import* ADDCALL sass_import_get_list_entry (struct Sass_Import** list, size_t idx);
66
+ ADDAPI void ADDCALL sass_import_set_list_entry (Sass_Import_List list, size_t idx, Sass_Import_Entry entry);
67
+ ADDAPI Sass_Import_Entry ADDCALL sass_import_get_list_entry (Sass_Import_List list, size_t idx);
47
68
 
48
69
  // Getters for import entry
49
- ADDAPI const char* ADDCALL sass_import_get_path (struct Sass_Import*);
50
- ADDAPI const char* ADDCALL sass_import_get_base (struct Sass_Import*);
51
- ADDAPI const char* ADDCALL sass_import_get_source (struct Sass_Import*);
52
- ADDAPI const char* ADDCALL sass_import_get_srcmap (struct Sass_Import*);
70
+ ADDAPI const char* ADDCALL sass_import_get_path (Sass_Import_Entry);
71
+ ADDAPI const char* ADDCALL sass_import_get_base (Sass_Import_Entry);
72
+ ADDAPI const char* ADDCALL sass_import_get_source (Sass_Import_Entry);
73
+ ADDAPI const char* ADDCALL sass_import_get_srcmap (Sass_Import_Entry);
53
74
  // Explicit functions to take ownership of these items
54
75
  // The property on our struct will be reset to NULL
55
- ADDAPI char* ADDCALL sass_import_take_source (struct Sass_Import*);
56
- ADDAPI char* ADDCALL sass_import_take_srcmap (struct Sass_Import*);
76
+ ADDAPI char* ADDCALL sass_import_take_source (Sass_Import_Entry);
77
+ ADDAPI char* ADDCALL sass_import_take_srcmap (Sass_Import_Entry);
57
78
  // Getters from import error entry
58
- ADDAPI size_t ADDCALL sass_import_get_error_line (struct Sass_Import*);
59
- ADDAPI size_t ADDCALL sass_import_get_error_column (struct Sass_Import*);
60
- ADDAPI const char* ADDCALL sass_import_get_error_message (struct Sass_Import*);
79
+ ADDAPI size_t ADDCALL sass_import_get_error_line (Sass_Import_Entry);
80
+ ADDAPI size_t ADDCALL sass_import_get_error_column (Sass_Import_Entry);
81
+ ADDAPI const char* ADDCALL sass_import_get_error_message (Sass_Import_Entry);
61
82
 
62
83
  // Deallocator for associated memory (incl. entries)
63
- ADDAPI void ADDCALL sass_delete_import_list (struct Sass_Import**);
84
+ ADDAPI void ADDCALL sass_delete_import_list (Sass_Import_List);
64
85
  // Just in case we have some stray import structs
65
- ADDAPI void ADDCALL sass_delete_import (struct Sass_Import*);
66
-
67
-
68
- // Forward declaration
69
- struct Sass_C_Function_Descriptor;
86
+ ADDAPI void ADDCALL sass_delete_import (Sass_Import_Entry);
70
87
 
71
- // Typedef defining null terminated list of custom callbacks
72
- typedef struct Sass_C_Function_Descriptor* (*Sass_C_Function_List);
73
- typedef struct Sass_C_Function_Descriptor (*Sass_C_Function_Callback);
74
- // Typedef defining custom function prototype and its return value type
75
- typedef union Sass_Value*(*Sass_C_Function) (const union Sass_Value*, void* cookie);
76
88
 
77
89
 
78
90
  // Creators for sass function list and function descriptors
79
- ADDAPI Sass_C_Function_List ADDCALL sass_make_function_list (size_t length);
80
- ADDAPI Sass_C_Function_Callback ADDCALL sass_make_function (const char* signature, Sass_C_Function fn, void* cookie);
91
+ ADDAPI Sass_Function_List ADDCALL sass_make_function_list (size_t length);
92
+ ADDAPI Sass_Function_Entry ADDCALL sass_make_function (const char* signature, Sass_Function_Fn cb, void* cookie);
81
93
 
82
94
  // Setters and getters for callbacks on function lists
83
- ADDAPI Sass_C_Function_Callback ADDCALL sass_function_get_list_entry(Sass_C_Function_List list, size_t pos);
84
- ADDAPI void ADDCALL sass_function_set_list_entry(Sass_C_Function_List list, size_t pos, Sass_C_Function_Callback cb);
95
+ ADDAPI Sass_Function_Entry ADDCALL sass_function_get_list_entry(Sass_Function_List list, size_t pos);
96
+ ADDAPI void ADDCALL sass_function_set_list_entry(Sass_Function_List list, size_t pos, Sass_Function_Entry cb);
85
97
 
86
98
  // Getters for custom function descriptors
87
- ADDAPI const char* ADDCALL sass_function_get_signature (Sass_C_Function_Callback fn);
88
- ADDAPI Sass_C_Function ADDCALL sass_function_get_function (Sass_C_Function_Callback fn);
89
- ADDAPI void* ADDCALL sass_function_get_cookie (Sass_C_Function_Callback fn);
99
+ ADDAPI const char* ADDCALL sass_function_get_signature (Sass_Function_Entry cb);
100
+ ADDAPI Sass_Function_Fn ADDCALL sass_function_get_function (Sass_Function_Entry cb);
101
+ ADDAPI void* ADDCALL sass_function_get_cookie (Sass_Function_Entry cb);
90
102
 
91
103
 
92
104
  #ifdef __cplusplus
@@ -121,17 +121,16 @@ extern "C" {
121
121
  .omit_source_map_url(c_ctx->options.omit_source_map_url)
122
122
  .include_paths_c_str(c_ctx->options.include_paths)
123
123
  .plugin_paths_c_str(c_ctx->options.plugin_paths)
124
- .include_paths_array(0)
125
- .plugin_paths_array(0)
124
+ // .include_paths_array(0)
125
+ // .plugin_paths_array(0)
126
126
  .include_paths(vector<string>())
127
127
  .plugin_paths(vector<string>())
128
128
  .precision(c_ctx->options.precision ? c_ctx->options.precision : 5)
129
129
  .indent(c_ctx->options.indent ? c_ctx->options.indent : " ")
130
130
  .linefeed(c_ctx->options.linefeed ? c_ctx->options.linefeed : LFEED)
131
- .importer(0)
132
131
  );
133
132
  if (c_ctx->c_functions) {
134
- struct Sass_C_Function_Descriptor** this_func_data = c_ctx->c_functions;
133
+ Sass_Function_List this_func_data = c_ctx->c_functions;
135
134
  while ((this_func_data) && (*this_func_data)) {
136
135
  cpp_ctx.c_functions.push_back(*this_func_data);
137
136
  ++this_func_data;
@@ -214,14 +213,16 @@ extern "C" {
214
213
  .omit_source_map_url(c_ctx->options.omit_source_map_url)
215
214
  .include_paths_c_str(c_ctx->options.include_paths)
216
215
  .plugin_paths_c_str(c_ctx->options.plugin_paths)
217
- .include_paths_array(0)
218
- .plugin_paths_array(0)
216
+ // .include_paths_array(0)
217
+ // .plugin_paths_array(0)
219
218
  .include_paths(vector<string>())
220
219
  .plugin_paths(vector<string>())
221
220
  .precision(c_ctx->options.precision ? c_ctx->options.precision : 5)
221
+ .indent(c_ctx->options.indent ? c_ctx->options.indent : " ")
222
+ .linefeed(c_ctx->options.linefeed ? c_ctx->options.linefeed : LFEED)
222
223
  );
223
224
  if (c_ctx->c_functions) {
224
- struct Sass_C_Function_Descriptor** this_func_data = c_ctx->c_functions;
225
+ Sass_Function_List this_func_data = c_ctx->c_functions;
225
226
  while ((this_func_data) && (*this_func_data)) {
226
227
  cpp_ctx.c_functions.push_back(*this_func_data);
227
228
  ++this_func_data;
@@ -236,7 +237,7 @@ extern "C" {
236
237
  }
237
238
  catch (Sass_Error& e) {
238
239
  stringstream msg_stream;
239
- msg_stream << e.path << ":" << e.pstate.line << ": " << e.message << endl;
240
+ msg_stream << e.pstate.path << ":" << e.pstate.line << ": " << e.message << endl;
240
241
  c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
241
242
  c_ctx->error_status = 1;
242
243
  c_ctx->output_string = 0;
@@ -53,7 +53,7 @@ struct sass_context {
53
53
  struct sass_options options;
54
54
  int error_status;
55
55
  char* error_message;
56
- Sass_C_Function_List c_functions;
56
+ Sass_Function_List c_functions;
57
57
  char** included_files;
58
58
  int num_included_files;
59
59
  };
@@ -66,7 +66,7 @@ struct sass_file_context {
66
66
  struct sass_options options;
67
67
  int error_status;
68
68
  char* error_message;
69
- Sass_C_Function_List c_functions;
69
+ Sass_Function_List c_functions;
70
70
  char** included_files;
71
71
  int num_included_files;
72
72
  };
@@ -77,7 +77,7 @@ struct sass_folder_context {
77
77
  struct sass_options options;
78
78
  int error_status;
79
79
  char* error_message;
80
- Sass_C_Function_List c_functions;
80
+ Sass_Function_List c_functions;
81
81
  char** included_files;
82
82
  int num_included_files;
83
83
  };