sassc 0.0.9 → 0.0.10

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/ext/libsass/.gitignore +13 -6
  4. data/ext/libsass/Makefile +42 -26
  5. data/ext/libsass/Makefile.am +43 -30
  6. data/ext/libsass/Readme.md +4 -2
  7. data/ext/libsass/appveyor.yml +10 -14
  8. data/ext/libsass/ast.cpp +54 -44
  9. data/ext/libsass/ast.hpp +404 -236
  10. data/ext/libsass/ast_def_macros.hpp +5 -0
  11. data/ext/libsass/ast_factory.hpp +6 -3
  12. data/ext/libsass/ast_fwd_decl.hpp +12 -0
  13. data/ext/libsass/b64/encode.h +2 -2
  14. data/ext/libsass/backtrace.hpp +13 -17
  15. data/ext/libsass/base64vlq.hpp +4 -1
  16. data/ext/libsass/bind.cpp +12 -15
  17. data/ext/libsass/bind.hpp +6 -6
  18. data/ext/libsass/color_names.hpp +4 -1
  19. data/ext/libsass/configure.ac +7 -21
  20. data/ext/libsass/constants.cpp +6 -4
  21. data/ext/libsass/constants.hpp +10 -4
  22. data/ext/libsass/context.cpp +89 -58
  23. data/ext/libsass/context.hpp +28 -35
  24. data/ext/libsass/contextualize.cpp +20 -10
  25. data/ext/libsass/contextualize.hpp +8 -23
  26. data/ext/libsass/contrib/libsass.spec +66 -0
  27. data/ext/libsass/cssize.cpp +547 -0
  28. data/ext/libsass/cssize.hpp +82 -0
  29. data/ext/libsass/debug.hpp +3 -3
  30. data/ext/libsass/debugger.hpp +358 -0
  31. data/ext/libsass/emitter.cpp +255 -0
  32. data/ext/libsass/emitter.hpp +83 -0
  33. data/ext/libsass/environment.hpp +7 -3
  34. data/ext/libsass/error_handling.cpp +11 -14
  35. data/ext/libsass/error_handling.hpp +9 -7
  36. data/ext/libsass/eval.cpp +253 -161
  37. data/ext/libsass/eval.hpp +13 -13
  38. data/ext/libsass/expand.cpp +135 -64
  39. data/ext/libsass/expand.hpp +11 -13
  40. data/ext/libsass/extend.cpp +66 -20
  41. data/ext/libsass/extend.hpp +6 -11
  42. data/ext/libsass/file.cpp +31 -26
  43. data/ext/libsass/file.hpp +6 -1
  44. data/ext/libsass/functions.cpp +270 -287
  45. data/ext/libsass/functions.hpp +8 -11
  46. data/ext/libsass/inspect.cpp +385 -255
  47. data/ext/libsass/inspect.hpp +15 -26
  48. data/ext/libsass/kwd_arg_macros.hpp +5 -0
  49. data/ext/libsass/mapping.hpp +4 -3
  50. data/ext/libsass/memory_manager.hpp +5 -2
  51. data/ext/libsass/node.cpp +50 -50
  52. data/ext/libsass/node.hpp +26 -27
  53. data/ext/libsass/operation.hpp +15 -4
  54. data/ext/libsass/output.cpp +401 -0
  55. data/ext/libsass/output.hpp +56 -0
  56. data/ext/libsass/parser.cpp +573 -399
  57. data/ext/libsass/parser.hpp +122 -88
  58. data/ext/libsass/paths.hpp +7 -2
  59. data/ext/libsass/plugins.cpp +155 -0
  60. data/ext/libsass/plugins.hpp +56 -0
  61. data/ext/libsass/position.cpp +128 -0
  62. data/ext/libsass/position.hpp +108 -11
  63. data/ext/libsass/prelexer.cpp +184 -110
  64. data/ext/libsass/prelexer.hpp +131 -24
  65. data/ext/libsass/remove_placeholders.cpp +1 -1
  66. data/ext/libsass/remove_placeholders.hpp +6 -6
  67. data/ext/libsass/sass.cpp +3 -3
  68. data/ext/libsass/sass.h +12 -4
  69. data/ext/libsass/sass2scss.cpp +3 -2
  70. data/ext/libsass/sass2scss.h +5 -0
  71. data/ext/libsass/sass_context.cpp +136 -37
  72. data/ext/libsass/sass_context.h +19 -10
  73. data/ext/libsass/sass_functions.cpp +29 -2
  74. data/ext/libsass/sass_functions.h +8 -2
  75. data/ext/libsass/sass_interface.cpp +32 -23
  76. data/ext/libsass/sass_interface.h +9 -4
  77. data/ext/libsass/sass_util.cpp +19 -23
  78. data/ext/libsass/sass_util.hpp +28 -27
  79. data/ext/libsass/sass_values.cpp +6 -4
  80. data/ext/libsass/sass_values.h +3 -3
  81. data/ext/libsass/script/ci-build-libsass +13 -1
  82. data/ext/libsass/script/ci-report-coverage +2 -1
  83. data/ext/libsass/source_map.cpp +79 -28
  84. data/ext/libsass/source_map.hpp +35 -16
  85. data/ext/libsass/subset_map.hpp +6 -4
  86. data/ext/libsass/to_c.hpp +4 -4
  87. data/ext/libsass/to_string.cpp +13 -8
  88. data/ext/libsass/to_string.hpp +6 -4
  89. data/ext/libsass/units.cpp +2 -1
  90. data/ext/libsass/units.hpp +6 -1
  91. data/ext/libsass/utf8_string.cpp +0 -5
  92. data/ext/libsass/utf8_string.hpp +3 -2
  93. data/ext/libsass/util.cpp +461 -49
  94. data/ext/libsass/util.hpp +34 -13
  95. data/ext/libsass/version.sh +10 -0
  96. data/ext/libsass/win/libsass.filters +20 -11
  97. data/ext/libsass/win/libsass.vcxproj +11 -8
  98. data/lib/sassc/importer.rb +1 -8
  99. data/lib/sassc/native.rb +7 -0
  100. data/lib/sassc/native/native_context_api.rb +5 -5
  101. data/lib/sassc/version.rb +1 -1
  102. data/test/native_test.rb +1 -1
  103. metadata +14 -10
  104. data/ext/libsass/copy_c_str.cpp +0 -13
  105. data/ext/libsass/copy_c_str.hpp +0 -5
  106. data/ext/libsass/output_compressed.cpp +0 -401
  107. data/ext/libsass/output_compressed.hpp +0 -95
  108. data/ext/libsass/output_nested.cpp +0 -364
  109. data/ext/libsass/output_nested.hpp +0 -108
  110. data/ext/libsass/test-driver +0 -127
  111. data/ext/libsass/token.hpp +0 -32
@@ -1,5 +1,5 @@
1
- #ifndef SASS_C_CONTEXT
2
- #define SASS_C_CONTEXT
1
+ #ifndef SASS_C_CONTEXT_H
2
+ #define SASS_C_CONTEXT_H
3
3
 
4
4
  #include <stddef.h>
5
5
  #include <stdbool.h>
@@ -50,7 +50,7 @@ ADDAPI void ADDCALL sass_delete_data_context (struct Sass_Data_Context* ctx);
50
50
  ADDAPI struct Sass_Context* ADDCALL sass_file_context_get_context (struct Sass_File_Context* file_ctx);
51
51
  ADDAPI struct Sass_Context* ADDCALL sass_data_context_get_context (struct Sass_Data_Context* data_ctx);
52
52
 
53
- // Getters for context options from Sass_Context
53
+ // Getters for Context_Options from Sass_Context
54
54
  ADDAPI struct Sass_Options* ADDCALL sass_context_get_options (struct Sass_Context* ctx);
55
55
  ADDAPI struct Sass_Options* ADDCALL sass_file_context_get_options (struct Sass_File_Context* file_ctx);
56
56
  ADDAPI struct Sass_Options* ADDCALL sass_data_context_get_options (struct Sass_Data_Context* data_ctx);
@@ -58,7 +58,7 @@ ADDAPI void ADDCALL sass_file_context_set_options (struct Sass_File_Context* fil
58
58
  ADDAPI void ADDCALL sass_data_context_set_options (struct Sass_Data_Context* data_ctx, struct Sass_Options* opt);
59
59
 
60
60
 
61
- // Getters for options
61
+ // Getters for Context_Option values
62
62
  ADDAPI int ADDCALL sass_option_get_precision (struct Sass_Options* options);
63
63
  ADDAPI enum Sass_Output_Style ADDCALL sass_option_get_output_style (struct Sass_Options* options);
64
64
  ADDAPI bool ADDCALL sass_option_get_source_comments (struct Sass_Options* options);
@@ -66,15 +66,18 @@ ADDAPI bool ADDCALL sass_option_get_source_map_embed (struct Sass_Options* optio
66
66
  ADDAPI bool ADDCALL sass_option_get_source_map_contents (struct Sass_Options* options);
67
67
  ADDAPI bool ADDCALL sass_option_get_omit_source_map_url (struct Sass_Options* options);
68
68
  ADDAPI bool ADDCALL sass_option_get_is_indented_syntax_src (struct Sass_Options* options);
69
+ ADDAPI const char* ADDCALL sass_option_get_indent (struct Sass_Options* options);
70
+ ADDAPI const char* ADDCALL sass_option_get_linefeed (struct Sass_Options* options);
69
71
  ADDAPI const char* ADDCALL sass_option_get_input_path (struct Sass_Options* options);
70
72
  ADDAPI const char* ADDCALL sass_option_get_output_path (struct Sass_Options* options);
71
- ADDAPI const char* ADDCALL sass_option_get_image_path (struct Sass_Options* options);
73
+ ADDAPI const char* ADDCALL sass_option_get_plugin_path (struct Sass_Options* options);
72
74
  ADDAPI const char* ADDCALL sass_option_get_include_path (struct Sass_Options* options);
73
75
  ADDAPI const char* ADDCALL sass_option_get_source_map_file (struct Sass_Options* options);
76
+ ADDAPI const char* ADDCALL sass_option_get_source_map_root (struct Sass_Options* options);
74
77
  ADDAPI Sass_C_Function_List ADDCALL sass_option_get_c_functions (struct Sass_Options* options);
75
78
  ADDAPI Sass_C_Import_Callback ADDCALL sass_option_get_importer (struct Sass_Options* options);
76
79
 
77
- // Setters for options
80
+ // Setters for Context_Option values
78
81
  ADDAPI void ADDCALL sass_option_set_precision (struct Sass_Options* options, int precision);
79
82
  ADDAPI void ADDCALL sass_option_set_output_style (struct Sass_Options* options, enum Sass_Output_Style output_style);
80
83
  ADDAPI void ADDCALL sass_option_set_source_comments (struct Sass_Options* options, bool source_comments);
@@ -82,19 +85,23 @@ ADDAPI void ADDCALL sass_option_set_source_map_embed (struct Sass_Options* optio
82
85
  ADDAPI void ADDCALL sass_option_set_source_map_contents (struct Sass_Options* options, bool source_map_contents);
83
86
  ADDAPI void ADDCALL sass_option_set_omit_source_map_url (struct Sass_Options* options, bool omit_source_map_url);
84
87
  ADDAPI void ADDCALL sass_option_set_is_indented_syntax_src (struct Sass_Options* options, bool is_indented_syntax_src);
88
+ ADDAPI void ADDCALL sass_option_set_indent (struct Sass_Options* options, const char* indent);
89
+ ADDAPI void ADDCALL sass_option_set_linefeed (struct Sass_Options* options, const char* linefeed);
85
90
  ADDAPI void ADDCALL sass_option_set_input_path (struct Sass_Options* options, const char* input_path);
86
91
  ADDAPI void ADDCALL sass_option_set_output_path (struct Sass_Options* options, const char* output_path);
87
- ADDAPI void ADDCALL sass_option_set_image_path (struct Sass_Options* options, const char* image_path);
92
+ ADDAPI void ADDCALL sass_option_set_plugin_path (struct Sass_Options* options, const char* plugin_path);
88
93
  ADDAPI void ADDCALL sass_option_set_include_path (struct Sass_Options* options, const char* include_path);
89
94
  ADDAPI void ADDCALL sass_option_set_source_map_file (struct Sass_Options* options, const char* source_map_file);
95
+ ADDAPI void ADDCALL sass_option_set_source_map_root (struct Sass_Options* options, const char* source_map_root);
90
96
  ADDAPI void ADDCALL sass_option_set_c_functions (struct Sass_Options* options, Sass_C_Function_List c_functions);
91
97
  ADDAPI void ADDCALL sass_option_set_importer (struct Sass_Options* options, Sass_C_Import_Callback importer);
92
98
 
93
99
 
94
- // Getter for context
100
+ // Getters for Sass_Context values
95
101
  ADDAPI const char* ADDCALL sass_context_get_output_string (struct Sass_Context* ctx);
96
102
  ADDAPI int ADDCALL sass_context_get_error_status (struct Sass_Context* ctx);
97
103
  ADDAPI const char* ADDCALL sass_context_get_error_json (struct Sass_Context* ctx);
104
+ ADDAPI const char* ADDCALL sass_context_get_error_text (struct Sass_Context* ctx);
98
105
  ADDAPI const char* ADDCALL sass_context_get_error_message (struct Sass_Context* ctx);
99
106
  ADDAPI const char* ADDCALL sass_context_get_error_file (struct Sass_Context* ctx);
100
107
  ADDAPI size_t ADDCALL sass_context_get_error_line (struct Sass_Context* ctx);
@@ -104,12 +111,14 @@ ADDAPI char** ADDCALL sass_context_get_included_files (struct Sass_Context* ctx)
104
111
 
105
112
  // Take ownership of memory (value on context is set to 0)
106
113
  ADDAPI char* ADDCALL sass_context_take_error_json (struct Sass_Context* ctx);
114
+ ADDAPI char* ADDCALL sass_context_take_error_text (struct Sass_Context* ctx);
107
115
  ADDAPI char* ADDCALL sass_context_take_error_message (struct Sass_Context* ctx);
108
116
  ADDAPI char* ADDCALL sass_context_take_error_file (struct Sass_Context* ctx);
109
117
  ADDAPI char* ADDCALL sass_context_take_output_string (struct Sass_Context* ctx);
110
118
  ADDAPI char* ADDCALL sass_context_take_source_map_string (struct Sass_Context* ctx);
111
119
 
112
- // Push function for include paths (no manipulation support for now)
120
+ // Push function for paths (no manipulation support for now)
121
+ ADDAPI void ADDCALL sass_option_push_plugin_path (struct Sass_Options* options, const char* path);
113
122
  ADDAPI void ADDCALL sass_option_push_include_path (struct Sass_Options* options, const char* path);
114
123
 
115
124
 
@@ -117,4 +126,4 @@ ADDAPI void ADDCALL sass_option_push_include_path (struct Sass_Options* options,
117
126
  } // __cplusplus defined.
118
127
  #endif
119
128
 
120
- #endif
129
+ #endif
@@ -4,11 +4,14 @@
4
4
  #include <unistd.h>
5
5
  #endif
6
6
 
7
+ #include <cstring>
8
+ #include "util.hpp"
7
9
  #include "context.hpp"
8
10
  #include "sass_functions.h"
9
11
 
10
12
  extern "C" {
11
13
  using namespace std;
14
+ using namespace Sass;
12
15
 
13
16
  // Struct to hold custom function callback
14
17
  struct Sass_C_Function_Descriptor {
@@ -46,6 +49,10 @@ extern "C" {
46
49
  char* base;
47
50
  char* source;
48
51
  char* srcmap;
52
+ // error handling
53
+ char* error;
54
+ size_t line;
55
+ size_t column;
49
56
  };
50
57
 
51
58
  // Struct to hold importer callback
@@ -84,10 +91,13 @@ extern "C" {
84
91
  {
85
92
  Sass_Import* v = (Sass_Import*) calloc(1, sizeof(Sass_Import));
86
93
  if (v == 0) return 0;
87
- v->path = path ? strdup(path) : 0;
88
- v->base = base ? strdup(base) : 0;
94
+ v->path = path ? sass_strdup(path) : 0;
95
+ v->base = base ? sass_strdup(base) : 0;
89
96
  v->source = source;
90
97
  v->srcmap = srcmap;
98
+ v->error = 0;
99
+ v->line = -1;
100
+ v->column = -1;
91
101
  return v;
92
102
  }
93
103
 
@@ -97,6 +107,17 @@ extern "C" {
97
107
  return sass_make_import(path, path, source, srcmap);
98
108
  }
99
109
 
110
+ // 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)
112
+ {
113
+ if (import == 0) return 0;
114
+ if (import->error) free(import->error);
115
+ import->error = error ? strdup(error) : 0;
116
+ import->line = line ? line : -1;
117
+ import->column = col ? col : -1;
118
+ return import;
119
+ }
120
+
100
121
  // Setters and getters for entries on the import list
101
122
  void ADDCALL sass_import_set_list_entry(struct Sass_Import** list, size_t idx, struct Sass_Import* entry) { list[idx] = entry; }
102
123
  struct Sass_Import* ADDCALL sass_import_get_list_entry(struct Sass_Import** list, size_t idx) { return list[idx]; }
@@ -120,6 +141,7 @@ extern "C" {
120
141
  free(import->base);
121
142
  free(import->source);
122
143
  free(import->srcmap);
144
+ free(import->error);
123
145
  free(import);
124
146
  }
125
147
 
@@ -129,6 +151,11 @@ extern "C" {
129
151
  const char* ADDCALL sass_import_get_source(struct Sass_Import* entry) { return entry->source; }
130
152
  const char* ADDCALL sass_import_get_srcmap(struct Sass_Import* entry) { return entry->srcmap; }
131
153
 
154
+ // 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; }
158
+
132
159
  // Explicit functions to take ownership of the memory
133
160
  // Resets our own property since we do not know if it is still alive
134
161
  char* ADDCALL sass_import_take_source(struct Sass_Import* entry) { char* ptr = entry->source; entry->source = 0; return ptr; }
@@ -1,5 +1,5 @@
1
- #ifndef SASS_C_FUNCTIONS
2
- #define SASS_C_FUNCTIONS
1
+ #ifndef SASS_C_FUNCTIONS_H
2
+ #define SASS_C_FUNCTIONS_H
3
3
 
4
4
  #include <stddef.h>
5
5
  #include <stdbool.h>
@@ -37,6 +37,8 @@ ADDAPI struct Sass_Import** ADDCALL sass_make_import_list (size_t length);
37
37
  // Creator for a single import entry returned by the custom importer inside the list
38
38
  ADDAPI struct Sass_Import* ADDCALL sass_make_import_entry (const char* path, char* source, char* srcmap);
39
39
  ADDAPI struct Sass_Import* ADDCALL sass_make_import (const char* path, const char* base, char* source, char* srcmap);
40
+ // 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);
40
42
 
41
43
  // Setters to insert an entry into the import list (you may also use [] access directly)
42
44
  // Since we are dealing with pointers they should have a guaranteed and fixed size
@@ -52,6 +54,10 @@ ADDAPI const char* ADDCALL sass_import_get_srcmap (struct Sass_Import*);
52
54
  // The property on our struct will be reset to NULL
53
55
  ADDAPI char* ADDCALL sass_import_take_source (struct Sass_Import*);
54
56
  ADDAPI char* ADDCALL sass_import_take_srcmap (struct Sass_Import*);
57
+ // 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*);
55
61
 
56
62
  // Deallocator for associated memory (incl. entries)
57
63
  ADDAPI void ADDCALL sass_delete_import_list (struct Sass_Import**);
@@ -1,22 +1,23 @@
1
1
  #ifdef _WIN32
2
2
  #include <io.h>
3
+ #define LFEED "\n"
3
4
  #else
4
5
  #include <unistd.h>
6
+ #define LFEED "\n"
5
7
  #endif
6
8
 
7
- #include "sass_interface.h"
9
+ #include <string>
10
+ #include <cstdlib>
11
+ #include <cstring>
12
+ #include <sstream>
13
+ #include <iostream>
14
+
15
+ #include "util.hpp"
8
16
  #include "context.hpp"
9
17
  #include "inspect.hpp"
10
-
11
- #ifndef SASS_ERROR_HANDLING
12
18
  #include "error_handling.hpp"
13
- #endif
19
+ #include "sass_interface.h"
14
20
 
15
- #include <iostream>
16
- #include <sstream>
17
- #include <string>
18
- #include <cstdlib>
19
- #include <cstring>
20
21
 
21
22
  extern "C" {
22
23
  using namespace std;
@@ -114,14 +115,19 @@ extern "C" {
114
115
  .is_indented_syntax_src(c_ctx->options.is_indented_syntax_src)
115
116
  .source_comments(c_ctx->options.source_comments)
116
117
  .source_map_file(safe_str(c_ctx->options.source_map_file))
118
+ .source_map_root(safe_str(c_ctx->options.source_map_root))
117
119
  .source_map_embed(c_ctx->options.source_map_embed)
118
120
  .source_map_contents(c_ctx->options.source_map_contents)
119
121
  .omit_source_map_url(c_ctx->options.omit_source_map_url)
120
- .image_path(safe_str(c_ctx->options.image_path))
121
122
  .include_paths_c_str(c_ctx->options.include_paths)
123
+ .plugin_paths_c_str(c_ctx->options.plugin_paths)
122
124
  .include_paths_array(0)
125
+ .plugin_paths_array(0)
123
126
  .include_paths(vector<string>())
127
+ .plugin_paths(vector<string>())
124
128
  .precision(c_ctx->options.precision ? c_ctx->options.precision : 5)
129
+ .indent(c_ctx->options.indent ? c_ctx->options.indent : " ")
130
+ .linefeed(c_ctx->options.linefeed ? c_ctx->options.linefeed : LFEED)
125
131
  .importer(0)
126
132
  );
127
133
  if (c_ctx->c_functions) {
@@ -140,8 +146,8 @@ extern "C" {
140
146
  }
141
147
  catch (Sass_Error& e) {
142
148
  stringstream msg_stream;
143
- msg_stream << e.path << ":" << e.position.line << ": " << e.message << endl;
144
- c_ctx->error_message = strdup(msg_stream.str().c_str());
149
+ msg_stream << e.pstate.path << ":" << e.pstate.line << ": " << e.message << endl;
150
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
145
151
  c_ctx->error_status = 1;
146
152
  c_ctx->output_string = 0;
147
153
  c_ctx->source_map_string = 0;
@@ -149,7 +155,7 @@ extern "C" {
149
155
  catch(bad_alloc& ba) {
150
156
  stringstream msg_stream;
151
157
  msg_stream << "Unable to allocate memory: " << ba.what() << endl;
152
- c_ctx->error_message = strdup(msg_stream.str().c_str());
158
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
153
159
  c_ctx->error_status = 1;
154
160
  c_ctx->output_string = 0;
155
161
  c_ctx->source_map_string = 0;
@@ -157,7 +163,7 @@ extern "C" {
157
163
  catch (std::exception& e) {
158
164
  stringstream msg_stream;
159
165
  msg_stream << "Error: " << e.what() << endl;
160
- c_ctx->error_message = strdup(msg_stream.str().c_str());
166
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
161
167
  c_ctx->error_status = 1;
162
168
  c_ctx->output_string = 0;
163
169
  c_ctx->source_map_string = 0;
@@ -165,7 +171,7 @@ extern "C" {
165
171
  catch (string& e) {
166
172
  stringstream msg_stream;
167
173
  msg_stream << "Error: " << e << endl;
168
- c_ctx->error_message = strdup(msg_stream.str().c_str());
174
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
169
175
  c_ctx->error_status = 1;
170
176
  c_ctx->output_string = 0;
171
177
  c_ctx->source_map_string = 0;
@@ -174,7 +180,7 @@ extern "C" {
174
180
  // couldn't find the specified file in the include paths; report an error
175
181
  stringstream msg_stream;
176
182
  msg_stream << "Unknown error occurred" << endl;
177
- c_ctx->error_message = strdup(msg_stream.str().c_str());
183
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
178
184
  c_ctx->error_status = 1;
179
185
  c_ctx->output_string = 0;
180
186
  c_ctx->source_map_string = 0;
@@ -202,13 +208,16 @@ extern "C" {
202
208
  .is_indented_syntax_src(c_ctx->options.is_indented_syntax_src)
203
209
  .source_comments(c_ctx->options.source_comments)
204
210
  .source_map_file(safe_str(c_ctx->options.source_map_file))
211
+ .source_map_root(safe_str(c_ctx->options.source_map_root))
205
212
  .source_map_embed(c_ctx->options.source_map_embed)
206
213
  .source_map_contents(c_ctx->options.source_map_contents)
207
214
  .omit_source_map_url(c_ctx->options.omit_source_map_url)
208
- .image_path(safe_str(c_ctx->options.image_path))
209
215
  .include_paths_c_str(c_ctx->options.include_paths)
216
+ .plugin_paths_c_str(c_ctx->options.plugin_paths)
210
217
  .include_paths_array(0)
218
+ .plugin_paths_array(0)
211
219
  .include_paths(vector<string>())
220
+ .plugin_paths(vector<string>())
212
221
  .precision(c_ctx->options.precision ? c_ctx->options.precision : 5)
213
222
  );
214
223
  if (c_ctx->c_functions) {
@@ -227,8 +236,8 @@ extern "C" {
227
236
  }
228
237
  catch (Sass_Error& e) {
229
238
  stringstream msg_stream;
230
- msg_stream << e.path << ":" << e.position.line << ": " << e.message << endl;
231
- c_ctx->error_message = strdup(msg_stream.str().c_str());
239
+ msg_stream << e.path << ":" << e.pstate.line << ": " << e.message << endl;
240
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
232
241
  c_ctx->error_status = 1;
233
242
  c_ctx->output_string = 0;
234
243
  c_ctx->source_map_string = 0;
@@ -236,7 +245,7 @@ extern "C" {
236
245
  catch(bad_alloc& ba) {
237
246
  stringstream msg_stream;
238
247
  msg_stream << "Unable to allocate memory: " << ba.what() << endl;
239
- c_ctx->error_message = strdup(msg_stream.str().c_str());
248
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
240
249
  c_ctx->error_status = 1;
241
250
  c_ctx->output_string = 0;
242
251
  c_ctx->source_map_string = 0;
@@ -244,7 +253,7 @@ extern "C" {
244
253
  catch (std::exception& e) {
245
254
  stringstream msg_stream;
246
255
  msg_stream << "Error: " << e.what() << endl;
247
- c_ctx->error_message = strdup(msg_stream.str().c_str());
256
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
248
257
  c_ctx->error_status = 1;
249
258
  c_ctx->output_string = 0;
250
259
  c_ctx->source_map_string = 0;
@@ -252,7 +261,7 @@ extern "C" {
252
261
  catch (string& e) {
253
262
  stringstream msg_stream;
254
263
  msg_stream << "Error: " << e << endl;
255
- c_ctx->error_message = strdup(msg_stream.str().c_str());
264
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
256
265
  c_ctx->error_status = 1;
257
266
  c_ctx->output_string = 0;
258
267
  c_ctx->source_map_string = 0;
@@ -261,7 +270,7 @@ extern "C" {
261
270
  // couldn't find the specified file in the include paths; report an error
262
271
  stringstream msg_stream;
263
272
  msg_stream << "Unknown error occurred" << endl;
264
- c_ctx->error_message = strdup(msg_stream.str().c_str());
273
+ c_ctx->error_message = sass_strdup(msg_stream.str().c_str());
265
274
  c_ctx->error_status = 1;
266
275
  c_ctx->output_string = 0;
267
276
  c_ctx->source_map_string = 0;
@@ -1,5 +1,5 @@
1
- #ifndef SASS_C_INTERFACE
2
- #define SASS_C_INTERFACE
1
+ #ifndef SASS_C_INTERFACE_H
2
+ #define SASS_C_INTERFACE_H
3
3
 
4
4
  #include <stddef.h>
5
5
  #include <stdbool.h>
@@ -28,13 +28,18 @@ struct sass_options {
28
28
  bool source_map_embed;
29
29
  // embed include contents in maps
30
30
  bool source_map_contents;
31
+ // Pass-through as sourceRoot property
32
+ const char* source_map_root;
31
33
  // Treat source_string as sass (as opposed to scss)
32
34
  bool is_indented_syntax_src;
33
35
  // Colon-separated list of paths
34
36
  // Semicolon-separated on Windows
35
37
  const char* include_paths;
36
- // For the image-url Sass function
37
- const char* image_path;
38
+ const char* plugin_paths;
39
+ // String to be used for indentation
40
+ const char* indent;
41
+ // String to be used to for line feeds
42
+ const char* linefeed;
38
43
  // Precision for outputting fractional numbers
39
44
  int precision;
40
45
  };
@@ -1,16 +1,12 @@
1
- #ifndef SASS_AST
2
1
  #include "node.hpp"
3
- #endif
4
-
5
2
  #include "to_string.hpp"
6
3
 
7
-
8
4
  namespace Sass {
9
5
 
10
6
 
11
7
  /*
12
8
  This is the equivalent of ruby's Sass::Util.paths.
13
-
9
+
14
10
  # Return an array of all possible paths through the given arrays.
15
11
  #
16
12
  # @param arrs [NodeCollection<NodeCollection<Node>>]
@@ -22,7 +18,7 @@ namespace Sass {
22
18
  # # [2, 3, 5],
23
19
  # # [1, 4, 5],
24
20
  # # [2, 4, 5]]
25
-
21
+
26
22
  The following is the modified version of the ruby code that was more portable to C++. You
27
23
  should be able to drop it into ruby 3.2.19 and get the same results from ruby sass.
28
24
 
@@ -42,55 +38,55 @@ namespace Sass {
42
38
  end
43
39
  */
44
40
  Node paths(const Node& arrs, Context& ctx) {
45
- To_String to_string;
41
+ To_String to_string(&ctx);
46
42
 
47
43
  Node loopStart = Node::createCollection();
48
44
  loopStart.collection()->push_back(Node::createCollection());
49
-
45
+
50
46
  for (NodeDeque::iterator arrsIter = arrs.collection()->begin(), arrsEndIter = arrs.collection()->end();
51
47
  arrsIter != arrsEndIter; ++arrsIter) {
52
-
48
+
53
49
  Node& arr = *arrsIter;
54
-
50
+
55
51
  Node permutations = Node::createCollection();
56
-
52
+
57
53
  for (NodeDeque::iterator arrIter = arr.collection()->begin(), arrIterEnd = arr.collection()->end();
58
54
  arrIter != arrIterEnd; ++arrIter) {
59
-
55
+
60
56
  Node& e = *arrIter;
61
-
57
+
62
58
  for (NodeDeque::iterator loopStartIter = loopStart.collection()->begin(), loopStartIterEnd = loopStart.collection()->end();
63
59
  loopStartIter != loopStartIterEnd; ++loopStartIter) {
64
-
60
+
65
61
  Node& path = *loopStartIter;
66
-
62
+
67
63
  Node newPermutation = Node::createCollection();
68
64
  newPermutation.plus(path);
69
65
  newPermutation.collection()->push_back(e);
70
-
66
+
71
67
  permutations.collection()->push_back(newPermutation);
72
68
  }
73
69
  }
74
-
70
+
75
71
  loopStart = permutations;
76
72
  }
77
-
73
+
78
74
  return loopStart;
79
75
  }
80
-
76
+
81
77
 
82
78
  /*
83
79
  This is the equivalent of ruby sass' Sass::Util.flatten and [].flatten.
84
80
  Sass::Util.flatten requires the number of levels to flatten, while
85
81
  [].flatten doesn't and will flatten the entire array. This function
86
82
  supports both.
87
-
83
+
88
84
  # Flattens the first `n` nested arrays. If n == -1, all arrays will be flattened
89
85
  #
90
86
  # @param arr [NodeCollection] The array to flatten
91
87
  # @param n [int] The number of levels to flatten
92
88
  # @return [NodeCollection] The flattened array
93
-
89
+
94
90
  The following is the modified version of the ruby code that was more portable to C++. You
95
91
  should be able to drop it into ruby 3.2.19 and get the same results from ruby sass.
96
92
 
@@ -118,11 +114,11 @@ namespace Sass {
118
114
  }
119
115
 
120
116
  Node flattened = Node::createCollection();
121
-
117
+
122
118
  for (NodeDeque::iterator iter = arr.collection()->begin(), iterEnd = arr.collection()->end();
123
119
  iter != iterEnd; iter++) {
124
120
  Node& e = *iter;
125
-
121
+
126
122
  if (e.isCollection()) {
127
123
  Node recurseFlattened = flatten(e, ctx, n - 1);
128
124
  flattened.collection()->insert(flattened.collection()->end(), recurseFlattened.collection()->begin(), recurseFlattened.collection()->end());