sassc 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/context.h +3 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +117 -117
- data/ext/libsass/src/ast.hpp +160 -162
- data/ext/libsass/src/ast_def_macros.hpp +10 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
- data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
- data/ext/libsass/src/ast_helpers.hpp +5 -5
- data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
- data/ext/libsass/src/ast_sel_super.cpp +52 -52
- data/ext/libsass/src/ast_sel_unify.cpp +16 -16
- data/ext/libsass/src/ast_sel_weave.cpp +62 -62
- data/ext/libsass/src/ast_selectors.cpp +87 -77
- data/ext/libsass/src/ast_selectors.hpp +72 -62
- data/ext/libsass/src/ast_supports.cpp +35 -35
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +58 -58
- data/ext/libsass/src/ast_values.hpp +75 -75
- data/ext/libsass/src/backtrace.cpp +9 -9
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +2 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +17 -17
- data/ext/libsass/src/bind.hpp +1 -1
- data/ext/libsass/src/c2ast.cpp +3 -3
- data/ext/libsass/src/c2ast.hpp +1 -1
- data/ext/libsass/src/check_nesting.cpp +36 -36
- data/ext/libsass/src/check_nesting.hpp +2 -2
- data/ext/libsass/src/color_maps.cpp +5 -5
- data/ext/libsass/src/color_maps.hpp +1 -1
- data/ext/libsass/src/context.cpp +63 -60
- data/ext/libsass/src/context.hpp +33 -33
- data/ext/libsass/src/cssize.cpp +30 -29
- data/ext/libsass/src/cssize.hpp +13 -13
- data/ext/libsass/src/dart_helpers.hpp +5 -5
- data/ext/libsass/src/debugger.hpp +127 -128
- data/ext/libsass/src/emitter.cpp +12 -12
- data/ext/libsass/src/emitter.hpp +10 -10
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +24 -24
- data/ext/libsass/src/error_handling.cpp +42 -42
- data/ext/libsass/src/error_handling.hpp +38 -50
- data/ext/libsass/src/eval.cpp +138 -132
- data/ext/libsass/src/eval.hpp +17 -17
- data/ext/libsass/src/eval_selectors.cpp +3 -3
- data/ext/libsass/src/expand.cpp +70 -64
- data/ext/libsass/src/expand.hpp +12 -12
- data/ext/libsass/src/extender.cpp +55 -53
- data/ext/libsass/src/extender.hpp +14 -14
- data/ext/libsass/src/file.cpp +66 -58
- data/ext/libsass/src/file.hpp +23 -25
- data/ext/libsass/src/fn_colors.cpp +9 -9
- data/ext/libsass/src/fn_lists.cpp +18 -18
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +15 -15
- data/ext/libsass/src/fn_numbers.cpp +7 -7
- data/ext/libsass/src/fn_selectors.cpp +8 -8
- data/ext/libsass/src/fn_strings.cpp +34 -22
- data/ext/libsass/src/fn_utils.cpp +29 -26
- data/ext/libsass/src/fn_utils.hpp +10 -10
- data/ext/libsass/src/inspect.cpp +35 -34
- data/ext/libsass/src/inspect.hpp +21 -21
- data/ext/libsass/src/lexer.cpp +3 -1
- data/ext/libsass/src/listize.cpp +2 -2
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
- data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +18 -6
- data/ext/libsass/src/operation.hpp +44 -44
- data/ext/libsass/src/operators.cpp +18 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +18 -18
- data/ext/libsass/src/output.cpp +16 -16
- data/ext/libsass/src/output.hpp +5 -5
- data/ext/libsass/src/parser.cpp +327 -345
- data/ext/libsass/src/parser.hpp +77 -87
- data/ext/libsass/src/parser_selectors.cpp +6 -6
- data/ext/libsass/src/permutate.hpp +39 -15
- data/ext/libsass/src/plugins.cpp +7 -7
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +7 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/remove_placeholders.cpp +4 -4
- data/ext/libsass/src/remove_placeholders.hpp +3 -3
- data/ext/libsass/src/sass.cpp +16 -15
- data/ext/libsass/src/sass.hpp +9 -5
- data/ext/libsass/src/sass_context.cpp +52 -34
- data/ext/libsass/src/sass_values.cpp +8 -10
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +22 -18
- data/ext/libsass/src/source_map.hpp +12 -9
- data/ext/libsass/src/units.cpp +19 -19
- data/ext/libsass/src/units.hpp +8 -8
- data/ext/libsass/src/utf8_string.cpp +9 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +38 -38
- data/ext/libsass/src/util.hpp +18 -18
- data/ext/libsass/src/util_string.cpp +13 -13
- data/ext/libsass/src/util_string.hpp +9 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/native.rb +3 -5
- data/lib/sassc/version.rb +1 -1
- data/test/native_test.rb +4 -4
- metadata +14 -5
- data/lib/sassc/native/lib_c.rb +0 -21
@@ -283,21 +283,21 @@ extern "C" {
|
|
283
283
|
|
284
284
|
union Sass_Value* ADDCALL sass_value_stringify (const union Sass_Value* v, bool compressed, int precision)
|
285
285
|
{
|
286
|
-
|
286
|
+
ValueObj val = sass_value_to_ast_node(v);
|
287
287
|
Sass_Inspect_Options options(compressed ? COMPRESSED : NESTED, precision);
|
288
|
-
|
288
|
+
sass::string str(val->to_string(options));
|
289
289
|
return sass_make_qstring(str.c_str());
|
290
290
|
}
|
291
291
|
|
292
292
|
union Sass_Value* ADDCALL sass_value_op (enum Sass_OP op, const union Sass_Value* a, const union Sass_Value* b)
|
293
293
|
{
|
294
294
|
|
295
|
-
Sass::
|
295
|
+
Sass::ValueObj rv;
|
296
296
|
|
297
297
|
try {
|
298
298
|
|
299
|
-
|
300
|
-
|
299
|
+
ValueObj lhs = sass_value_to_ast_node(a);
|
300
|
+
ValueObj rhs = sass_value_to_ast_node(b);
|
301
301
|
struct Sass_Inspect_Options options(NESTED, 5);
|
302
302
|
|
303
303
|
// see if it's a relational expression
|
@@ -340,12 +340,10 @@ extern "C" {
|
|
340
340
|
rv = Operators::op_colors(op, *l_c, *r_c, options, l_c->pstate());
|
341
341
|
}
|
342
342
|
else /* convert other stuff to string and apply operation */ {
|
343
|
-
|
344
|
-
Value* r_v = Cast<Value>(rhs);
|
345
|
-
rv = Operators::op_strings(op, *l_v, *r_v, options, l_v->pstate());
|
343
|
+
rv = Operators::op_strings(op, *lhs, *rhs, options, lhs->pstate());
|
346
344
|
}
|
347
345
|
|
348
|
-
// ToDo: maybe we should
|
346
|
+
// ToDo: maybe we should return null value?
|
349
347
|
if (!rv) return sass_make_error("invalid return value");
|
350
348
|
|
351
349
|
// convert result back to ast node
|
@@ -356,7 +354,7 @@ extern "C" {
|
|
356
354
|
catch (Exception::InvalidSass& e) { return sass_make_error(e.what()); }
|
357
355
|
catch (std::bad_alloc&) { return sass_make_error("memory exhausted"); }
|
358
356
|
catch (std::exception& e) { return sass_make_error(e.what()); }
|
359
|
-
catch (
|
357
|
+
catch (sass::string& e) { return sass_make_error(e.c_str()); }
|
360
358
|
catch (const char* e) { return sass_make_error(e); }
|
361
359
|
catch (...) { return sass_make_error("unknown"); }
|
362
360
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#ifndef SASS_SETTINGS_H
|
2
|
+
#define SASS_SETTINGS_H
|
3
|
+
|
4
|
+
// Global compile time settings should go here
|
5
|
+
|
6
|
+
// When enabled we use our custom memory pool allocator
|
7
|
+
// With intense workloads this can double the performance
|
8
|
+
// Max memory usage mostly only grows by a slight amount
|
9
|
+
// #define SASS_CUSTOM_ALLOCATOR
|
10
|
+
|
11
|
+
// How many buckets should we have for the free-list
|
12
|
+
// Determines when allocations go directly to malloc/free
|
13
|
+
// For maximum size of managed items multiply by alignment
|
14
|
+
#define SassAllocatorBuckets 512
|
15
|
+
|
16
|
+
// The size of the memory pool arenas in bytes.
|
17
|
+
#define SassAllocatorArenaSize (1024 * 256)
|
18
|
+
|
19
|
+
#endif
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <string.h>
|
3
|
+
#include "source.hpp"
|
4
|
+
#include "utf8/checked.h"
|
5
|
+
#include "position.hpp"
|
6
|
+
|
7
|
+
namespace Sass {
|
8
|
+
|
9
|
+
SourceData::SourceData()
|
10
|
+
: SharedObj()
|
11
|
+
{
|
12
|
+
}
|
13
|
+
|
14
|
+
SourceFile::SourceFile(
|
15
|
+
const char* path,
|
16
|
+
const char* data,
|
17
|
+
size_t srcid) :
|
18
|
+
SourceData(),
|
19
|
+
path(sass_copy_c_string(path)),
|
20
|
+
data(sass_copy_c_string(data)),
|
21
|
+
length(0),
|
22
|
+
srcid(srcid)
|
23
|
+
{
|
24
|
+
length = strlen(data);
|
25
|
+
}
|
26
|
+
|
27
|
+
SourceFile::~SourceFile() {
|
28
|
+
sass_free_memory(path);
|
29
|
+
sass_free_memory(data);
|
30
|
+
}
|
31
|
+
|
32
|
+
const char* SourceFile::end() const
|
33
|
+
{
|
34
|
+
return data + length;
|
35
|
+
}
|
36
|
+
|
37
|
+
const char* SourceFile::begin() const
|
38
|
+
{
|
39
|
+
return data;
|
40
|
+
}
|
41
|
+
|
42
|
+
const char* SourceFile::getRawData() const
|
43
|
+
{
|
44
|
+
return data;
|
45
|
+
}
|
46
|
+
|
47
|
+
SourceSpan SourceFile::getSourceSpan()
|
48
|
+
{
|
49
|
+
return SourceSpan(this);
|
50
|
+
}
|
51
|
+
|
52
|
+
ItplFile::ItplFile(const char* data, const SourceSpan& pstate) :
|
53
|
+
SourceFile(pstate.getPath(),
|
54
|
+
data, pstate.getSrcId()),
|
55
|
+
pstate(pstate)
|
56
|
+
{}
|
57
|
+
|
58
|
+
const char* ItplFile::getRawData() const
|
59
|
+
{
|
60
|
+
return pstate.getRawData();
|
61
|
+
}
|
62
|
+
|
63
|
+
SourceSpan ItplFile::getSourceSpan()
|
64
|
+
{
|
65
|
+
return SourceSpan(pstate);
|
66
|
+
}
|
67
|
+
|
68
|
+
}
|
69
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#ifndef SASS_SOURCE_H
|
2
|
+
#define SASS_SOURCE_H
|
3
|
+
|
4
|
+
#include "sass.hpp"
|
5
|
+
#include "memory.hpp"
|
6
|
+
#include "position.hpp"
|
7
|
+
#include "source_data.hpp"
|
8
|
+
|
9
|
+
namespace Sass {
|
10
|
+
|
11
|
+
class SourceFile :
|
12
|
+
public SourceData {
|
13
|
+
protected:
|
14
|
+
char* path;
|
15
|
+
char* data;
|
16
|
+
size_t length;
|
17
|
+
size_t srcid;
|
18
|
+
public:
|
19
|
+
|
20
|
+
SourceFile(
|
21
|
+
const char* path,
|
22
|
+
const char* data,
|
23
|
+
size_t srcid);
|
24
|
+
|
25
|
+
~SourceFile();
|
26
|
+
|
27
|
+
const char* end() const override final;
|
28
|
+
const char* begin() const override final;
|
29
|
+
virtual const char* getRawData() const override;
|
30
|
+
virtual SourceSpan getSourceSpan() override;
|
31
|
+
|
32
|
+
size_t size() const override final {
|
33
|
+
return length;
|
34
|
+
}
|
35
|
+
|
36
|
+
virtual const char* getPath() const override {
|
37
|
+
return path;
|
38
|
+
}
|
39
|
+
|
40
|
+
virtual size_t getSrcId() const override {
|
41
|
+
return srcid;
|
42
|
+
}
|
43
|
+
|
44
|
+
};
|
45
|
+
|
46
|
+
class SynthFile :
|
47
|
+
public SourceData {
|
48
|
+
protected:
|
49
|
+
const char* path;
|
50
|
+
public:
|
51
|
+
|
52
|
+
SynthFile(
|
53
|
+
const char* path) :
|
54
|
+
path(path)
|
55
|
+
{}
|
56
|
+
|
57
|
+
~SynthFile() {}
|
58
|
+
|
59
|
+
const char* end() const override final { return nullptr; }
|
60
|
+
const char* begin() const override final { return nullptr; };
|
61
|
+
virtual const char* getRawData() const override { return nullptr; };
|
62
|
+
virtual SourceSpan getSourceSpan() override { return SourceSpan(path); };
|
63
|
+
|
64
|
+
size_t size() const override final {
|
65
|
+
return 0;
|
66
|
+
}
|
67
|
+
|
68
|
+
virtual const char* getPath() const override {
|
69
|
+
return path;
|
70
|
+
}
|
71
|
+
|
72
|
+
virtual size_t getSrcId() const override {
|
73
|
+
return std::string::npos;
|
74
|
+
}
|
75
|
+
|
76
|
+
};
|
77
|
+
|
78
|
+
|
79
|
+
class ItplFile :
|
80
|
+
public SourceFile {
|
81
|
+
private:
|
82
|
+
SourceSpan pstate;
|
83
|
+
public:
|
84
|
+
|
85
|
+
ItplFile(const char* data,
|
86
|
+
const SourceSpan& pstate);
|
87
|
+
|
88
|
+
// Offset getPosition() const override final;
|
89
|
+
const char* getRawData() const override final;
|
90
|
+
SourceSpan getSourceSpan() override final;
|
91
|
+
};
|
92
|
+
|
93
|
+
}
|
94
|
+
|
95
|
+
#endif
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#ifndef SASS_SOURCE_DATA_H
|
2
|
+
#define SASS_SOURCE_DATA_H
|
3
|
+
|
4
|
+
#include "sass.hpp"
|
5
|
+
#include "memory.hpp"
|
6
|
+
|
7
|
+
namespace Sass {
|
8
|
+
|
9
|
+
class SourceSpan;
|
10
|
+
|
11
|
+
class SourceData :
|
12
|
+
public SharedObj {
|
13
|
+
public:
|
14
|
+
SourceData();
|
15
|
+
virtual size_t size() const = 0;
|
16
|
+
virtual size_t getSrcId() const = 0;
|
17
|
+
virtual const char* end() const = 0;
|
18
|
+
virtual const char* begin() const = 0;
|
19
|
+
virtual const char* getPath() const = 0;
|
20
|
+
// virtual Offset getPosition() const = 0;
|
21
|
+
virtual const char* getRawData() const = 0;
|
22
|
+
virtual SourceSpan getSourceSpan() = 0;
|
23
|
+
|
24
|
+
sass::string to_string() const override {
|
25
|
+
return sass::string{ begin(), end() };
|
26
|
+
}
|
27
|
+
~SourceData() {}
|
28
|
+
};
|
29
|
+
|
30
|
+
}
|
31
|
+
|
32
|
+
#endif
|
@@ -15,13 +15,13 @@
|
|
15
15
|
|
16
16
|
namespace Sass {
|
17
17
|
SourceMap::SourceMap() : current_position(0, 0, 0), file("stdin") { }
|
18
|
-
SourceMap::SourceMap(const
|
18
|
+
SourceMap::SourceMap(const sass::string& file) : current_position(0, 0, 0), file(file) { }
|
19
19
|
|
20
|
-
|
20
|
+
sass::string SourceMap::render_srcmap(Context &ctx) {
|
21
21
|
|
22
22
|
const bool include_sources = ctx.c_options.source_map_contents;
|
23
|
-
const
|
24
|
-
const
|
23
|
+
const sass::vector<sass::string> links = ctx.srcmap_links;
|
24
|
+
const sass::vector<Resource>& sources(ctx.resources);
|
25
25
|
|
26
26
|
JsonNode* json_srcmap = json_mkobject();
|
27
27
|
|
@@ -39,7 +39,7 @@ namespace Sass {
|
|
39
39
|
|
40
40
|
JsonNode *json_sources = json_mkarray();
|
41
41
|
for (size_t i = 0; i < source_index.size(); ++i) {
|
42
|
-
|
42
|
+
sass::string source(links[source_index[i]]);
|
43
43
|
if (ctx.c_options.source_map_file_urls) {
|
44
44
|
source = File::rel2abs(source);
|
45
45
|
// check for windows abs path
|
@@ -72,19 +72,19 @@ namespace Sass {
|
|
72
72
|
// no problem as we do not alter any identifiers
|
73
73
|
json_append_member(json_srcmap, "names", json_names);
|
74
74
|
|
75
|
-
|
75
|
+
sass::string mappings = serialize_mappings();
|
76
76
|
JsonNode *json_mappings = json_mkstring(mappings.c_str());
|
77
77
|
json_append_member(json_srcmap, "mappings", json_mappings);
|
78
78
|
|
79
79
|
char *str = json_stringify(json_srcmap, "\t");
|
80
|
-
|
80
|
+
sass::string result = sass::string(str);
|
81
81
|
free(str);
|
82
82
|
json_delete(json_srcmap);
|
83
83
|
return result;
|
84
84
|
}
|
85
85
|
|
86
|
-
|
87
|
-
|
86
|
+
sass::string SourceMap::serialize_mappings() {
|
87
|
+
sass::string result = "";
|
88
88
|
|
89
89
|
size_t previous_generated_line = 0;
|
90
90
|
size_t previous_generated_column = 0;
|
@@ -101,7 +101,7 @@ namespace Sass {
|
|
101
101
|
if (generated_line != previous_generated_line) {
|
102
102
|
previous_generated_column = 0;
|
103
103
|
if (generated_line > previous_generated_line) {
|
104
|
-
result +=
|
104
|
+
result += sass::string(generated_line - previous_generated_line, ';');
|
105
105
|
previous_generated_line = generated_line;
|
106
106
|
}
|
107
107
|
}
|
@@ -175,23 +175,27 @@ namespace Sass {
|
|
175
175
|
|
176
176
|
void SourceMap::add_open_mapping(const AST_Node* node)
|
177
177
|
{
|
178
|
-
|
178
|
+
const SourceSpan& span(node->pstate());
|
179
|
+
Position from(span.getSrcId(), span.position);
|
180
|
+
mappings.push_back(Mapping(from, current_position));
|
179
181
|
}
|
180
182
|
|
181
183
|
void SourceMap::add_close_mapping(const AST_Node* node)
|
182
184
|
{
|
183
|
-
|
185
|
+
const SourceSpan& span(node->pstate());
|
186
|
+
Position to(span.getSrcId(), span.position + span.offset);
|
187
|
+
mappings.push_back(Mapping(to, current_position));
|
184
188
|
}
|
185
189
|
|
186
|
-
|
190
|
+
SourceSpan SourceMap::remap(const SourceSpan& pstate) {
|
187
191
|
for (size_t i = 0; i < mappings.size(); ++i) {
|
188
192
|
if (
|
189
|
-
mappings[i].generated_position.file == pstate.
|
190
|
-
mappings[i].generated_position.line == pstate.line &&
|
191
|
-
mappings[i].generated_position.column == pstate.column
|
192
|
-
) return
|
193
|
+
mappings[i].generated_position.file == pstate.getSrcId() &&
|
194
|
+
mappings[i].generated_position.line == pstate.position.line &&
|
195
|
+
mappings[i].generated_position.column == pstate.position.column
|
196
|
+
) return SourceSpan(pstate.source, mappings[i].original_position, pstate.offset);
|
193
197
|
}
|
194
|
-
return
|
198
|
+
return SourceSpan(pstate.source, Position(-1, -1, -1), Offset(0, 0));
|
195
199
|
|
196
200
|
}
|
197
201
|
|
@@ -9,6 +9,9 @@
|
|
9
9
|
#include "position.hpp"
|
10
10
|
#include "mapping.hpp"
|
11
11
|
|
12
|
+
#include "backtrace.hpp"
|
13
|
+
#include "memory.hpp"
|
14
|
+
|
12
15
|
#define VECTOR_PUSH(vec, ins) vec.insert(vec.end(), ins.begin(), ins.end())
|
13
16
|
#define VECTOR_UNSHIFT(vec, ins) vec.insert(vec.begin(), ins.begin(), ins.end())
|
14
17
|
|
@@ -20,9 +23,9 @@ namespace Sass {
|
|
20
23
|
class SourceMap {
|
21
24
|
|
22
25
|
public:
|
23
|
-
|
26
|
+
sass::vector<size_t> source_index;
|
24
27
|
SourceMap();
|
25
|
-
SourceMap(const
|
28
|
+
SourceMap(const sass::string& file);
|
26
29
|
|
27
30
|
void append(const Offset& offset);
|
28
31
|
void prepend(const Offset& offset);
|
@@ -31,17 +34,17 @@ namespace Sass {
|
|
31
34
|
void add_open_mapping(const AST_Node* node);
|
32
35
|
void add_close_mapping(const AST_Node* node);
|
33
36
|
|
34
|
-
|
35
|
-
|
37
|
+
sass::string render_srcmap(Context &ctx);
|
38
|
+
SourceSpan remap(const SourceSpan& pstate);
|
36
39
|
|
37
40
|
private:
|
38
41
|
|
39
|
-
|
42
|
+
sass::string serialize_mappings();
|
40
43
|
|
41
|
-
|
44
|
+
sass::vector<Mapping> mappings;
|
42
45
|
Position current_position;
|
43
46
|
public:
|
44
|
-
|
47
|
+
sass::string file;
|
45
48
|
private:
|
46
49
|
Base64VLQ base64vlq;
|
47
50
|
};
|
@@ -49,11 +52,11 @@ private:
|
|
49
52
|
class OutputBuffer {
|
50
53
|
public:
|
51
54
|
OutputBuffer(void)
|
52
|
-
: buffer(
|
55
|
+
: buffer(),
|
53
56
|
smap()
|
54
57
|
{ }
|
55
58
|
public:
|
56
|
-
|
59
|
+
sass::string buffer;
|
57
60
|
SourceMap smap;
|
58
61
|
};
|
59
62
|
|
data/ext/libsass/src/units.cpp
CHANGED
@@ -65,7 +65,7 @@ namespace Sass {
|
|
65
65
|
}
|
66
66
|
};
|
67
67
|
|
68
|
-
|
68
|
+
sass::string get_unit_class(UnitType unit)
|
69
69
|
{
|
70
70
|
switch (unit & 0xFF00)
|
71
71
|
{
|
@@ -91,7 +91,7 @@ namespace Sass {
|
|
91
91
|
}
|
92
92
|
};
|
93
93
|
|
94
|
-
UnitType string_to_unit(const
|
94
|
+
UnitType string_to_unit(const sass::string& s)
|
95
95
|
{
|
96
96
|
// size units
|
97
97
|
if (s == "px") return UnitType::PX;
|
@@ -149,7 +149,7 @@ namespace Sass {
|
|
149
149
|
}
|
150
150
|
}
|
151
151
|
|
152
|
-
|
152
|
+
sass::string unit_to_class(const sass::string& s)
|
153
153
|
{
|
154
154
|
if (s == "px") return "LENGTH";
|
155
155
|
else if (s == "pt") return "LENGTH";
|
@@ -177,7 +177,7 @@ namespace Sass {
|
|
177
177
|
}
|
178
178
|
|
179
179
|
// throws incompatibleUnits exceptions
|
180
|
-
double conversion_factor(const
|
180
|
+
double conversion_factor(const sass::string& s1, const sass::string& s2)
|
181
181
|
{
|
182
182
|
// assert for same units
|
183
183
|
if (s1 == s2) return 1;
|
@@ -219,7 +219,7 @@ namespace Sass {
|
|
219
219
|
return 0;
|
220
220
|
}
|
221
221
|
|
222
|
-
double convert_units(const
|
222
|
+
double convert_units(const sass::string& lhs, const sass::string& rhs, int& lhsexp, int& rhsexp)
|
223
223
|
{
|
224
224
|
double f = 0;
|
225
225
|
// do not convert same ones
|
@@ -283,7 +283,7 @@ namespace Sass {
|
|
283
283
|
double factor = 1;
|
284
284
|
|
285
285
|
for (size_t i = 0; i < iL; i++) {
|
286
|
-
|
286
|
+
sass::string &lhs = numerators[i];
|
287
287
|
UnitType ulhs = string_to_unit(lhs);
|
288
288
|
if (ulhs == UNKNOWN) continue;
|
289
289
|
UnitClass clhs = get_unit_type(ulhs);
|
@@ -296,7 +296,7 @@ namespace Sass {
|
|
296
296
|
}
|
297
297
|
|
298
298
|
for (size_t n = 0; n < nL; n++) {
|
299
|
-
|
299
|
+
sass::string &rhs = denominators[n];
|
300
300
|
UnitType urhs = string_to_unit(rhs);
|
301
301
|
if (urhs == UNKNOWN) continue;
|
302
302
|
UnitClass crhs = get_unit_type(urhs);
|
@@ -328,7 +328,7 @@ namespace Sass {
|
|
328
328
|
// it seems that a map table will fit nicely to do this
|
329
329
|
// we basically construct exponents for each unit
|
330
330
|
// has the advantage that they will be pre-sorted
|
331
|
-
std::map<
|
331
|
+
std::map<sass::string, int> exponents;
|
332
332
|
|
333
333
|
// initialize by summing up occurrences in unit vectors
|
334
334
|
// this will already cancel out equivalent units (e.q. px/px)
|
@@ -341,7 +341,7 @@ namespace Sass {
|
|
341
341
|
// convert between compatible units
|
342
342
|
for (size_t i = 0; i < iL; i++) {
|
343
343
|
for (size_t n = 0; n < nL; n++) {
|
344
|
-
|
344
|
+
sass::string &lhs = numerators[i], &rhs = denominators[n];
|
345
345
|
int &lhsexp = exponents[lhs], &rhsexp = exponents[rhs];
|
346
346
|
double f(convert_units(lhs, rhs, lhsexp, rhsexp));
|
347
347
|
if (f == 0) continue;
|
@@ -367,9 +367,9 @@ namespace Sass {
|
|
367
367
|
|
368
368
|
}
|
369
369
|
|
370
|
-
|
370
|
+
sass::string Units::unit() const
|
371
371
|
{
|
372
|
-
|
372
|
+
sass::string u;
|
373
373
|
size_t iL = numerators.size();
|
374
374
|
size_t nL = denominators.size();
|
375
375
|
for (size_t i = 0; i < iL; i += 1) {
|
@@ -400,11 +400,11 @@ namespace Sass {
|
|
400
400
|
double Units::convert_factor(const Units& r) const
|
401
401
|
{
|
402
402
|
|
403
|
-
|
404
|
-
|
403
|
+
sass::vector<sass::string> miss_nums(0);
|
404
|
+
sass::vector<sass::string> miss_dens(0);
|
405
405
|
// create copy since we need these for state keeping
|
406
|
-
|
407
|
-
|
406
|
+
sass::vector<sass::string> r_nums(r.numerators);
|
407
|
+
sass::vector<sass::string> r_dens(r.denominators);
|
408
408
|
|
409
409
|
auto l_num_it = numerators.begin();
|
410
410
|
auto l_num_end = numerators.end();
|
@@ -419,7 +419,7 @@ namespace Sass {
|
|
419
419
|
while (l_num_it != l_num_end)
|
420
420
|
{
|
421
421
|
// get and increment afterwards
|
422
|
-
const
|
422
|
+
const sass::string l_num = *(l_num_it ++);
|
423
423
|
|
424
424
|
auto r_num_it = r_nums.begin(), r_num_end = r_nums.end();
|
425
425
|
|
@@ -428,7 +428,7 @@ namespace Sass {
|
|
428
428
|
while (r_num_it != r_num_end)
|
429
429
|
{
|
430
430
|
// get and increment afterwards
|
431
|
-
const
|
431
|
+
const sass::string r_num = *(r_num_it);
|
432
432
|
// get possible conversion factor for units
|
433
433
|
double conversion = conversion_factor(l_num, r_num);
|
434
434
|
// skip incompatible numerator
|
@@ -456,7 +456,7 @@ namespace Sass {
|
|
456
456
|
while (l_den_it != l_den_end)
|
457
457
|
{
|
458
458
|
// get and increment afterwards
|
459
|
-
const
|
459
|
+
const sass::string l_den = *(l_den_it ++);
|
460
460
|
|
461
461
|
auto r_den_it = r_dens.begin();
|
462
462
|
auto r_den_end = r_dens.end();
|
@@ -466,7 +466,7 @@ namespace Sass {
|
|
466
466
|
while (r_den_it != r_den_end)
|
467
467
|
{
|
468
468
|
// get and increment afterwards
|
469
|
-
const
|
469
|
+
const sass::string r_den = *(r_den_it);
|
470
470
|
// get possible conversion factor for units
|
471
471
|
double conversion = conversion_factor(l_den, r_den);
|
472
472
|
// skip incompatible denominator
|