sassc 1.10.1 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/ext/libsass/.github/CONTRIBUTING.md +65 -0
  4. data/ext/libsass/.github/ISSUE_TEMPLATE.md +29 -0
  5. data/ext/libsass/Makefile +8 -3
  6. data/ext/libsass/Makefile.conf +28 -22
  7. data/ext/libsass/Readme.md +14 -7
  8. data/ext/libsass/configure.ac +5 -8
  9. data/ext/libsass/docs/api-context-internal.md +3 -0
  10. data/ext/libsass/docs/api-context.md +7 -0
  11. data/ext/libsass/docs/api-doc.md +4 -0
  12. data/ext/libsass/docs/api-importer.md +2 -0
  13. data/ext/libsass/docs/api-value-example.md +55 -0
  14. data/ext/libsass/docs/api-value.md +49 -22
  15. data/ext/libsass/docs/implementations.md +4 -0
  16. data/ext/libsass/include/sass/base.h +5 -4
  17. data/ext/libsass/include/sass/context.h +3 -0
  18. data/ext/libsass/include/sass/values.h +28 -27
  19. data/ext/libsass/include/sass/version.h +1 -1
  20. data/ext/libsass/include/sass2scss.h +1 -1
  21. data/ext/libsass/script/ci-build-libsass +3 -3
  22. data/ext/libsass/script/ci-install-deps +12 -3
  23. data/ext/libsass/src/ast.cpp +321 -212
  24. data/ext/libsass/src/ast.hpp +273 -165
  25. data/ext/libsass/src/ast_factory.hpp +4 -5
  26. data/ext/libsass/src/ast_fwd_decl.hpp +8 -7
  27. data/ext/libsass/src/bind.cpp +2 -7
  28. data/ext/libsass/src/bind.hpp +0 -1
  29. data/ext/libsass/src/check_nesting.cpp +379 -0
  30. data/ext/libsass/src/check_nesting.hpp +60 -0
  31. data/ext/libsass/src/constants.cpp +7 -6
  32. data/ext/libsass/src/constants.hpp +2 -1
  33. data/ext/libsass/src/context.cpp +7 -1
  34. data/ext/libsass/src/context.hpp +1 -1
  35. data/ext/libsass/src/cssize.cpp +76 -32
  36. data/ext/libsass/src/cssize.hpp +7 -8
  37. data/ext/libsass/src/debugger.hpp +70 -40
  38. data/ext/libsass/src/error_handling.cpp +15 -2
  39. data/ext/libsass/src/error_handling.hpp +19 -0
  40. data/ext/libsass/src/eval.cpp +107 -161
  41. data/ext/libsass/src/eval.hpp +12 -8
  42. data/ext/libsass/src/expand.cpp +81 -74
  43. data/ext/libsass/src/expand.hpp +13 -12
  44. data/ext/libsass/src/extend.cpp +149 -142
  45. data/ext/libsass/src/extend.hpp +10 -3
  46. data/ext/libsass/src/file.cpp +2 -1
  47. data/ext/libsass/src/functions.cpp +96 -59
  48. data/ext/libsass/src/functions.hpp +2 -2
  49. data/ext/libsass/src/inspect.cpp +33 -45
  50. data/ext/libsass/src/inspect.hpp +7 -7
  51. data/ext/libsass/src/json.cpp +17 -5
  52. data/ext/libsass/src/lexer.cpp +3 -3
  53. data/ext/libsass/src/listize.cpp +10 -10
  54. data/ext/libsass/src/listize.hpp +3 -3
  55. data/ext/libsass/src/node.cpp +30 -30
  56. data/ext/libsass/src/node.hpp +13 -13
  57. data/ext/libsass/src/operation.hpp +21 -19
  58. data/ext/libsass/src/output.cpp +48 -103
  59. data/ext/libsass/src/output.hpp +0 -1
  60. data/ext/libsass/src/parser.cpp +161 -133
  61. data/ext/libsass/src/parser.hpp +10 -7
  62. data/ext/libsass/src/remove_placeholders.cpp +6 -6
  63. data/ext/libsass/src/remove_placeholders.hpp +1 -1
  64. data/ext/libsass/src/sass.cpp +21 -0
  65. data/ext/libsass/src/sass.hpp +8 -1
  66. data/ext/libsass/src/sass2scss.cpp +14 -3
  67. data/ext/libsass/src/sass_context.cpp +69 -24
  68. data/ext/libsass/src/sass_context.hpp +3 -0
  69. data/ext/libsass/src/source_map.cpp +22 -10
  70. data/ext/libsass/src/to_value.cpp +2 -2
  71. data/ext/libsass/src/to_value.hpp +1 -1
  72. data/ext/libsass/src/units.hpp +3 -1
  73. data/ext/libsass/src/util.cpp +20 -16
  74. data/ext/libsass/src/util.hpp +2 -1
  75. data/ext/libsass/win/libsass.targets +2 -0
  76. data/ext/libsass/win/libsass.vcxproj.filters +6 -0
  77. data/lib/sassc/engine.rb +5 -0
  78. data/lib/sassc/native/native_functions_api.rb +13 -1
  79. data/lib/sassc/script/value_conversion.rb +11 -1
  80. data/lib/sassc/script/value_conversion/list.rb +23 -0
  81. data/lib/sassc/version.rb +1 -1
  82. data/test/engine_test.rb +18 -2
  83. data/test/functions_test.rb +30 -0
  84. data/test/native_test.rb +1 -1
  85. metadata +8 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9be0f0a939018b6002c548e4c5a4e62a2a5cd2d2
4
- data.tar.gz: 6a4565b6ef56faf224e58d7a4b4976b820124f62
3
+ metadata.gz: 7bbf189c8dd82c9e7a55454104b1ccdd03590bf0
4
+ data.tar.gz: 2cee2d1a55a747b4e873079e184964c84bee4fdd
5
5
  SHA512:
6
- metadata.gz: 95e8f1ca2ef3ae160f2a934ba97dd8d9f545a2310ed48a3b1670dca315b11d2b7b2cde987defb848c484944647144028dcad377eddf1d6668acfc8db67585b9f
7
- data.tar.gz: 7ed0d484f040dc411e3995d0603670cb5ca488b081506d54c875f79d81929e59c4435b8d59370b751691832a5c55640322aabeed50b0c499b9647be68e5ecb92
6
+ metadata.gz: a8128f57ef6fcafe9faacc7998411590c028b4946f60faddea2c9154885206707784cf20dcfabc254bb25bc47c10334e338019625ed4050f42136b32e495115e
7
+ data.tar.gz: 4870de37197958d7bdbfa4b95d3f7574da5754ff93148c4f1d0a7a9c42b8070b85d28f4faa4158537b2dd2464bb7c62a11285c99a9ab118e64502e622ddabdd3
data/README.md CHANGED
@@ -6,7 +6,7 @@ This gem combines the speed of `libsass`, the [Sass C implementation](https://gi
6
6
 
7
7
  ### libsass Version
8
8
 
9
- [3.3.6](https://github.com/sass/libsass/releases/tag/3.3.6)
9
+ [3.4.0](https://github.com/sass/libsass/releases/tag/3.4.0)
10
10
 
11
11
  ## Installation
12
12
 
@@ -49,6 +49,9 @@ and [awesome contributors](https://github.com/bolandrm/sassc-ruby/graphs/contrib
49
49
 
50
50
  ## Changelog
51
51
 
52
+ - **1.11.0**
53
+ - [Add support for lists in functions](https://github.com/sass/sassc-ruby/pull/55)
54
+ - [Update to libsass 3.4.0](https://github.com/sass/sassc-ruby/pull/57)
52
55
  - **1.10.1**
53
56
  - [Add sourcemap getter](https://github.com/sass/sassc-ruby/pull/48)
54
57
  - **1.10.0**
@@ -102,7 +105,7 @@ and [awesome contributors](https://github.com/bolandrm/sassc-ruby/graphs/contrib
102
105
 
103
106
  ### Code Changes
104
107
 
105
- 1. Fork it ( https://github.com/[my-github-username]/sassc/fork )
108
+ 1. Fork it ( https://github.com/sass/sassc-ruby/fork )
106
109
  1. Create your feature branch (`git checkout -b my-new-feature`)
107
110
  1. Commit your changes (`git commit -am 'Add some feature'`) - try to include tests
108
111
  1. Push to the branch (`git push origin my-new-feature`)
@@ -0,0 +1,65 @@
1
+ # Contributing to LibSass
2
+
3
+ :+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
4
+
5
+ The following is a set of guidelines for contributing to LibSass, which is hosted in the [Sass Organization](https://github.com/sass) on GitHub.
6
+ These are just guidelines, not rules, use your best judgment and feel free to propose changes to this document in a pull request.
7
+
8
+ LibSass is a library that implements a [sass language] [8] compiler. As such it does not directly interface with end users (frontend developers).
9
+ For direct contributions to the LibSass code base you will need to have at least a rough idea of C++, we will not lie about that.
10
+ But there are other ways to contribute to the progress of LibSass. All contributions are done via github pull requests.
11
+
12
+ You can also contribute to the LibSass [documentation] [9] or provide additional [spec tests] [10] (and we will gladly point you in the
13
+ direction for corners that lack test coverage). Foremost we rely on good and concise bug reports for issues the spec tests do not yet catch.
14
+
15
+ ## Precheck: My Sass isn't compiling
16
+ - [ ] Check if you can reproduce the issue via [SourceMap Inspector] [5] (updated regularly).
17
+ - [ ] Validate official ruby sass compiler via [SassMeister] [6] produces your expected result.
18
+ - [ ] Search for similar issue in [LibSass] [1] and [node-sass] [2] (include closed tickets)
19
+ - [ ] Optionally test your code directly with [sass] [7] or [sassc] [3] ([installer] [4])
20
+
21
+ ## Precheck: My build/install fails
22
+ - [ ] Problems with building or installing libsass should be directed to implementors first!
23
+ - [ ] Except for issues directly verified via sassc or LibSass own build (make/autotools9
24
+
25
+ ## Craft a meaningfull error report
26
+ - [ ] Include the version of libsass and the implementor (i.e. node-sass or sassc)
27
+ - [ ] Include information about your operating system and environment (i.e. io.js)
28
+ - [ ] Either create a self contained sample that shows your issue ...
29
+ - [ ] ... or provide it as a fetchable (github preferred) archive/repo
30
+ - [ ] ... and include a step by step list of command to get all dependencies
31
+ - [ ] Make it clear if you use indented or/and scss syntax
32
+
33
+ ## My error is hiding in a big code base
34
+ 1. we do not have time to support your code base!
35
+ 2. to fix occuring issues we need precise bug reports
36
+ 3. the more precise you are, the faster we can help you
37
+ 4. lazy reports get overlooked even when exposing serious bugs
38
+ 5. it's not hard to do, it only takes time
39
+ - [ ] Make sure you saved the current state (i.e. commit to git)
40
+ - [ ] Start by uncommenting blocks in the initial source file
41
+ - [ ] Check if the problem is still there after each edit
42
+ - [ ] Repeat until the problem goes away
43
+ - [ ] Inline imported files as you go along
44
+ - [ ] Finished once you cannot remove more
45
+ - [ ] The emphasis is on the word "repeat" ...
46
+
47
+ ## What makes a code test case
48
+
49
+ Important is that someone else can get the test case up and running to reproduce it locally. For this
50
+ we urge you to verify that your sample yields the expected result by testing it via [SassMeister] [6]
51
+ or directly via ruby sass or node-sass (or any other libsass implementor) before submitting your bug
52
+ report. Once you verified all of the above, you may use the template below to file your bug report.
53
+
54
+
55
+ [1]: https://github.com/sass/libsass/issues?utf8=%E2%9C%93&q=is%3Aissue
56
+ [2]: https://github.com/sass/node-sass/issues?utf8=%E2%9C%93&q=is%3Aissue
57
+ [3]: https://github.com/sass/sassc
58
+ [4]: http://libsass.ocbnet.ch/installer/
59
+ [5]: http://libsass.ocbnet.ch/srcmap/
60
+ [6]: http://www.sassmeister.com/
61
+ [7]: https://rubygems.org/gems/sass
62
+
63
+ [8]: http://sass-lang.com/
64
+ [9]: https://github.com/sass/libsass/tree/master/docs
65
+ [10]: https://github.com/sass/sass-spec
@@ -0,0 +1,29 @@
1
+ ### Title: Be as meaningful as possible in 60 chars if possible
2
+
3
+ input.scss
4
+ ```scss
5
+ test {
6
+ content: bar
7
+ }
8
+ ```
9
+
10
+ [libsass 3.5.5] [1]
11
+ ```css
12
+ test {
13
+ content: bar; }
14
+ ```
15
+
16
+ ruby sass 3.4.21
17
+ ```css
18
+ test {
19
+ content: bar; }
20
+ ```
21
+
22
+ version info:
23
+ ```cmd
24
+ $ node-sass --version
25
+ node-sass 3.3.3 (Wrapper) [JavaScript]
26
+ libsass 3.2.5 (Sass Compiler) [C/C++]
27
+ ```
28
+
29
+ [1]: http://libsass.ocbnet.ch/srcmap/#dGVzdCB7CiAgY29udGVudDogYmFyOyB9Cg==
@@ -125,13 +125,18 @@ endif
125
125
 
126
126
  ifneq (Windows,$(UNAME))
127
127
  ifneq (FreeBSD,$(UNAME))
128
- LDFLAGS += -ldl
129
- LDLIBS += -ldl
128
+ ifneq (OpenBSD,$(UNAME))
129
+ LDFLAGS += -ldl
130
+ LDLIBS += -ldl
131
+ endif
130
132
  endif
131
133
  endif
132
134
 
133
135
  ifneq ($(BUILD),shared)
134
- BUILD = static
136
+ BUILD := static
137
+ endif
138
+ ifeq ($(DEBUG),1)
139
+ BUILD := debug-$(BUILD)
135
140
  endif
136
141
 
137
142
  ifeq (,$(TRAVIS_BUILD_DIR))
@@ -1,32 +1,38 @@
1
1
  # this is merely a common Makefile multiple implementers can use
2
+ # bigger files (in terms of compile time) tend to go to the top,
3
+ # so they don't end up as the last compile unit when compiling
4
+ # in parallel. But we also want to mix them a little too avoid
5
+ # heavy RAM usage peaks. Other than that the order is arbitrary.
6
+
2
7
 
3
8
  SOURCES = \
4
9
  ast.cpp \
5
- base64vlq.cpp \
6
- bind.cpp \
7
- color_maps.cpp \
8
- constants.cpp \
10
+ node.cpp \
9
11
  context.cpp \
10
- cssize.cpp \
11
- emitter.cpp \
12
+ constants.cpp \
13
+ functions.cpp \
14
+ color_maps.cpp \
12
15
  environment.cpp \
13
- error_handling.cpp \
14
- eval.cpp \
15
- expand.cpp \
16
- extend.cpp \
16
+ bind.cpp \
17
17
  file.cpp \
18
- functions.cpp \
19
- inspect.cpp \
18
+ util.cpp \
20
19
  json.cpp \
21
- lexer.cpp \
22
- listize.cpp \
23
- memory_manager.cpp \
24
- node.cpp \
25
- output.cpp \
26
- parser.cpp \
20
+ units.cpp \
21
+ values.cpp \
27
22
  plugins.cpp \
28
23
  position.cpp \
24
+ lexer.cpp \
25
+ parser.cpp \
29
26
  prelexer.cpp \
27
+ eval.cpp \
28
+ expand.cpp \
29
+ listize.cpp \
30
+ cssize.cpp \
31
+ extend.cpp \
32
+ output.cpp \
33
+ inspect.cpp \
34
+ emitter.cpp \
35
+ check_nesting.cpp \
30
36
  remove_placeholders.cpp \
31
37
  sass.cpp \
32
38
  sass_util.cpp \
@@ -34,12 +40,12 @@ SOURCES = \
34
40
  sass_context.cpp \
35
41
  sass_functions.cpp \
36
42
  sass2scss.cpp \
37
- source_map.cpp \
38
43
  to_c.cpp \
39
44
  to_value.cpp \
40
- units.cpp \
45
+ source_map.cpp \
46
+ error_handling.cpp \
47
+ memory_manager.cpp \
41
48
  utf8_string.cpp \
42
- values.cpp \
43
- util.cpp
49
+ base64vlq.cpp
44
50
 
45
51
  CSOURCES = cencode.c
@@ -3,7 +3,7 @@ LibSass
3
3
 
4
4
  by Aaron Leung ([@akhleung]), Hampton Catlin ([@hcatlin]), Marcel Greter ([@mgreter]) and Michael Mifsud ([@xzyfer])
5
5
 
6
- [![Linux CI](https://travis-ci.org/sass/libsass.svg?branch=master)](https://travis-ci.org/sass/libsass)
6
+ [![Unix CI](https://travis-ci.org/sass/libsass.svg?branch=master)](https://travis-ci.org/sass/libsass)
7
7
  [![Windows CI](https://ci.appveyor.com/api/projects/status/github/sass/libsass?svg=true)](https://ci.appveyor.com/project/sass/libsass/branch/master)
8
8
  [![Bountysource](https://www.bountysource.com/badge/tracker?tracker_id=283068)](https://www.bountysource.com/trackers/283068-libsass?utm_source=283068&utm_medium=shield&utm_campaign=TRACKER_BADGE)
9
9
  [![Coverage Status](https://img.shields.io/coveralls/sass/libsass.svg)](https://coveralls.io/r/sass/libsass?branch=feature%2Ftest-travis-ci-3)
@@ -34,9 +34,9 @@ As you may have noticed, the LibSass repo itself has
34
34
  no executables and no tests. Oh noes! How can you develop???
35
35
 
36
36
  Well, luckily, [SassC](http://github.com/sass/sassc) is the official binary wrapper for
37
- LibSass and is *always* kept in sync. SassC uses a git submodule
38
- to include LibSass. When developing LibSass, its best to actually
39
- check out SassC and develop in that directory with the SassC spec
37
+ LibSass and is *always* kept in sync. SassC is used by continous integration systems in
38
+ LibSass repository. When developing LibSass, it is best to actually
39
+ checkout SassC and develop in that directory with the SassC spec
40
40
  and tests there.
41
41
 
42
42
  We even run Travis tests for SassC!
@@ -48,6 +48,12 @@ Since LibSass is a pure library, tests are run through the [SassSpec](https://gi
48
48
 
49
49
  To run tests against LibSass while developing, you can run `./script/spec`. This will clone SassC and Sass-Spec under the project folder and then run the Sass-Spec test suite. You may want to update the clones to ensure you have the latest version.
50
50
 
51
+ ### DEBUG builds
52
+
53
+ Set the environment variable `DEBUG` to `1` to enable debug builds that can be debugged
54
+ with `gdb`, `lldb` and others. E.g.: use `$ DEBUG=1 ./script/spec` to run the tests with
55
+ a debug build.
56
+
51
57
  Library Usage
52
58
  -------------
53
59
 
@@ -81,12 +87,13 @@ Licensing
81
87
 
82
88
  Our MIT license is designed to be as simple, and liberal as possible.
83
89
 
90
+ sass2scss was originally written by [Marcel Greter][@mgreter]
91
+ and he happily agreed to have it merged into the project.
92
+
93
+
84
94
  [@hcatlin]: https://github.com/hcatlin
85
95
  [@akhleung]: https://github.com/akhleung
86
96
  [@chriseppstein]: https://github.com/chriseppstein
87
97
  [@nex3]: https://github.com/nex3
88
98
  [@mgreter]: https://github.com/mgreter
89
99
  [@xzyfer]: https://github.com/xzyfer
90
-
91
- sass2scss was originally written by [Marcel Greter](@mgreter)
92
- and he happily agreed to have it merged into the project.
@@ -13,8 +13,6 @@ AC_CONFIG_AUX_DIR([script])
13
13
  # Though they look like gcc flags!
14
14
  AM_INIT_AUTOMAKE([foreign parallel-tests -Wall])
15
15
  m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([no])])
16
- # would fail with mingw otherwise
17
- # m4_pattern_allow([AM_PROG_AR])
18
16
 
19
17
  # Checks for programs.
20
18
  AC_PROG_CC
@@ -25,11 +23,10 @@ AC_GNU_SOURCE
25
23
  # Check fails on Travis, but it works fine
26
24
  # AX_CXX_COMPILE_STDCXX_11([ext],[optional])
27
25
  AC_CHECK_TOOL([AR], [ar], [false])
28
- if test "x$is_mingw32" != "xyes"; then
29
- AC_CHECK_TOOL([DLLTOOL], [dlltool], [false])
30
- AC_CHECK_TOOL([DLLWRAP], [dllwrap], [false])
31
- AC_CHECK_TOOL([WINDRES], [windres], [false])
32
- fi
26
+ AC_CHECK_TOOL([DLLTOOL], [dlltool], [false])
27
+ AC_CHECK_TOOL([DLLWRAP], [dllwrap], [false])
28
+ AC_CHECK_TOOL([WINDRES], [windres], [false])
29
+ m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
33
30
  LT_INIT([dlopen])
34
31
 
35
32
  # Checks for header files.
@@ -46,7 +43,7 @@ AC_CHECK_FUNCS([floor getcwd strtol])
46
43
  AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests], [enable testing the build]),
47
44
  [enable_tests="$enableval"], [enable_tests=no])
48
45
 
49
- AS_CASE([$target], [*-*-mingw32], [is_mingw32=yes], [is_mingw32=no])
46
+ AS_CASE([$host], [*-*-mingw*], [is_mingw32=yes], [is_mingw32=no])
50
47
  AM_CONDITIONAL(COMPILER_IS_MINGW32, test "x$is_mingw32" = "xyes")
51
48
 
52
49
  dnl The dlopen() function is in the C library for *BSD and in
@@ -33,6 +33,9 @@ struct Sass_Options {
33
33
  // embed include contents in maps
34
34
  bool source_map_contents;
35
35
 
36
+ // create file urls for sources
37
+ bool source_map_file_urls;
38
+
36
39
  // Disable sourceMappingUrl in css output
37
40
  bool omit_source_map_url;
38
41
 
@@ -34,6 +34,10 @@ bool source_map_embed;
34
34
  bool source_map_contents;
35
35
  ```
36
36
  ```C
37
+ // create file urls for sources
38
+ bool source_map_file_urls;
39
+ ```
40
+ ```C
37
41
  // Disable sourceMappingUrl in css output
38
42
  bool omit_source_map_url;
39
43
  ```
@@ -174,6 +178,7 @@ int sass_compiler_execute (struct Sass_Compiler* compiler);
174
178
  // Release all memory allocated with the compiler
175
179
  // This does _not_ include any contexts or options
176
180
  void sass_delete_compiler (struct Sass_Compiler* compiler);
181
+ void sass_delete_options(struct Sass_Options* options);
177
182
 
178
183
  // Release all memory allocated and also ourself
179
184
  void sass_delete_file_context (struct Sass_File_Context* ctx);
@@ -224,6 +229,7 @@ enum Sass_Output_Style sass_option_get_output_style (struct Sass_Options* option
224
229
  bool sass_option_get_source_comments (struct Sass_Options* options);
225
230
  bool sass_option_get_source_map_embed (struct Sass_Options* options);
226
231
  bool sass_option_get_source_map_contents (struct Sass_Options* options);
232
+ bool sass_option_get_source_map_file_urls (struct Sass_Options* options);
227
233
  bool sass_option_get_omit_source_map_url (struct Sass_Options* options);
228
234
  bool sass_option_get_is_indented_syntax_src (struct Sass_Options* options);
229
235
  const char* sass_option_get_indent (struct Sass_Options* options);
@@ -243,6 +249,7 @@ void sass_option_set_output_style (struct Sass_Options* options, enum Sass_Outpu
243
249
  void sass_option_set_source_comments (struct Sass_Options* options, bool source_comments);
244
250
  void sass_option_set_source_map_embed (struct Sass_Options* options, bool source_map_embed);
245
251
  void sass_option_set_source_map_contents (struct Sass_Options* options, bool source_map_contents);
252
+ void sass_option_set_source_map_file_urls (struct Sass_Options* options, bool source_map_file_urls);
246
253
  void sass_option_set_omit_source_map_url (struct Sass_Options* options, bool omit_source_map_url);
247
254
  void sass_option_set_is_indented_syntax_src (struct Sass_Options* options, bool is_indented_syntax_src);
248
255
  void sass_option_set_indent (struct Sass_Options* options, const char* indent);
@@ -130,6 +130,10 @@ char* sass_resolve_file (const char* path, const char* incs[]);
130
130
 
131
131
  // Get compiled libsass version
132
132
  const char* libsass_version(void);
133
+
134
+ // Implemented sass language version
135
+ // Hardcoded version 3.4 for time being
136
+ const char* libsass_language_version(void);
133
137
  ```
134
138
 
135
139
  ## Common Pitfalls
@@ -11,6 +11,8 @@ rv[0] = sass_make_import(rel, abs, source, srcmap);
11
11
 
12
12
  Every import will then be included in LibSass. You are allowed to only return a file path without any loaded source. This way you can ie. implement rewrite rules for import paths and leave the loading part for LibSass.
13
13
 
14
+ Please note that LibSass doesn't use the srcmap parameter yet. It has been added to not deprecate the C-API once support has been implemented. It will be used to re-map the actual sourcemap with the provided ones.
15
+
14
16
  ### Basic Usage
15
17
 
16
18
  ```C
@@ -0,0 +1,55 @@
1
+ ## Example operation.c
2
+
3
+ ```C
4
+ #include <stdio.h>
5
+ #include <string.h>
6
+ #include "sass/values.h"
7
+
8
+ int main( int argc, const char* argv[] )
9
+ {
10
+
11
+ // create two new sass values to be added
12
+ union Sass_Value* string = sass_make_string("String");
13
+ union Sass_Value* number = sass_make_number(42, "nits");
14
+
15
+ // invoke the add operation which returns a new sass value
16
+ union Sass_Value* total = sass_value_op(ADD, string, number);
17
+
18
+ // no further use for the two operands
19
+ sass_delete_value(string);
20
+ sass_delete_value(number);
21
+
22
+ // this works since libsass will always return a
23
+ // string for add operations with a string as the
24
+ // left hand side. But you should never rely on it!
25
+ puts(sass_string_get_value(total));
26
+
27
+ // invoke stringification (uncompressed with precision of 5)
28
+ union Sass_Value* result = sass_value_stringify(total, false, 5);
29
+
30
+ // no further use for the sum
31
+ sass_delete_value(total);
32
+
33
+ // print the result - you may want to make
34
+ // sure result is indeed a string, altough
35
+ // stringify guarantees to return a string
36
+ // if (sass_value_is_string(result)) {}
37
+ // really depends on your level of paranoia
38
+ puts(sass_string_get_value(result));
39
+
40
+ // finally free result
41
+ sass_delete_value(result);
42
+
43
+ // exit status
44
+ return 0;
45
+
46
+ }
47
+ ```
48
+
49
+ ## Compile operation.c
50
+
51
+ ```bash
52
+ gcc -c operation.c -o operation.o
53
+ gcc -o operation operation.o -lsass
54
+ ./operation # => String42nits
55
+ ```
@@ -1,4 +1,11 @@
1
- `Sass_Values` are used to pass values and their types between the implementer and LibSass. Sass knows various different value types (including nested arrays and hash-maps). If you implement a binding to another programming language, you have to find a way to convert `Sass_Values` between the targeted language and C. `Sass_Values` are currently only used by custom functions.
1
+ `Sass_Values` are used to pass values and their types between the implementer
2
+ and LibSass. Sass knows various different value types (including nested arrays
3
+ and hash-maps). If you implement a binding to another programming language, you
4
+ have to find a way to [marshal] [1] (convert) `Sass_Values` between the target
5
+ language and C. `Sass_Values` are currently only used by custom functions, but
6
+ it should also be possible to use them without a compiler context.
7
+
8
+ [1]: https://en.wikipedia.org/wiki/Marshalling_%28computer_science%29
2
9
 
3
10
  ### Basic Usage
4
11
 
@@ -23,7 +30,18 @@ enum Sass_Tag {
23
30
  // Tags for denoting Sass list separators
24
31
  enum Sass_Separator {
25
32
  SASS_COMMA,
26
- SASS_SPACE
33
+ SASS_SPACE,
34
+ // only used internally to represent a hash map before evaluation
35
+ // otherwise we would be too early to check for duplicate keys
36
+ SASS_HASH
37
+ };
38
+
39
+ // Value Operators
40
+ enum Sass_OP {
41
+ AND, OR, // logical connectives
42
+ EQ, NEQ, GT, GTE, LT, LTE, // arithmetic relations
43
+ ADD, SUB, MUL, DIV, MOD, // arithmetic functions
44
+ NUM_OPS // so we know how big to make the op table
27
45
  };
28
46
  ```
29
47
 
@@ -33,6 +51,32 @@ enum Sass_Separator {
33
51
  // Forward declaration
34
52
  union Sass_Value;
35
53
 
54
+ // Creator functions for all value types
55
+ union Sass_Value* sass_make_null (void);
56
+ union Sass_Value* sass_make_boolean (bool val);
57
+ union Sass_Value* sass_make_string (const char* val);
58
+ union Sass_Value* sass_make_qstring (const char* val);
59
+ union Sass_Value* sass_make_number (double val, const char* unit);
60
+ union Sass_Value* sass_make_color (double r, double g, double b, double a);
61
+ union Sass_Value* sass_make_list (size_t len, enum Sass_Separator sep);
62
+ union Sass_Value* sass_make_map (size_t len);
63
+ union Sass_Value* sass_make_error (const char* msg);
64
+ union Sass_Value* sass_make_warning (const char* msg);
65
+
66
+ // Generic destructor function for all types
67
+ // Will release memory of all associated Sass_Values
68
+ // Means we will delete recursively for lists and maps
69
+ void sass_delete_value (union Sass_Value* val);
70
+
71
+ // Make a deep cloned copy of the given sass value
72
+ union Sass_Value* sass_clone_value (const union Sass_Value* val);
73
+
74
+ // Stringify a Sass_Values and also return the result as a Sass_Value (of type STRING)
75
+ union Sass_Value* sass_value_stringify (const union Sass_Value* a, bool compressed, int precision);
76
+
77
+ // Execute an operation for two Sass_Values and return the result as a Sass_Value too
78
+ union Sass_Value* sass_value_op (enum Sass_OP op, const union Sass_Value* a, const union Sass_Value* b);
79
+
36
80
  // Return the sass tag for a generic sass value
37
81
  // Check is needed before accessing specific values!
38
82
  enum Sass_Tag sass_value_get_tag (const union Sass_Value* v);
@@ -58,6 +102,8 @@ void sass_number_set_unit (union Sass_Value* v, char* unit);
58
102
  // Getters and setters for Sass_String
59
103
  const char* sass_string_get_value (const union Sass_Value* v);
60
104
  void sass_string_set_value (union Sass_Value* v, char* value);
105
+ bool sass_string_is_quoted(const union Sass_Value* v);
106
+ void sass_string_set_quoted(union Sass_Value* v, bool quoted);
61
107
 
62
108
  // Getters and setters for Sass_Boolean
63
109
  bool sass_boolean_get_value (const union Sass_Value* v);
@@ -84,7 +130,7 @@ void sass_list_set_value (union Sass_Value* v, size_t i, union Sass_Value* value
84
130
 
85
131
  // Getter for the number of items in map
86
132
  size_t sass_map_get_length (const union Sass_Value* v);
87
- // Getters and setters for Sass_List keys and values
133
+ // Getters and setters for Sass_Map keys and values
88
134
  union Sass_Value* sass_map_get_key (const union Sass_Value* v, size_t i);
89
135
  void sass_map_set_key (union Sass_Value* v, size_t i, union Sass_Value*);
90
136
  union Sass_Value* sass_map_get_value (const union Sass_Value* v, size_t i);
@@ -97,25 +143,6 @@ void sass_error_set_message (union Sass_Value* v, char* msg);
97
143
  // Getters and setters for Sass_Warning
98
144
  char* sass_warning_get_message (const union Sass_Value* v);
99
145
  void sass_warning_set_message (union Sass_Value* v, char* msg);
100
-
101
- // Creator functions for all value types
102
- union Sass_Value* sass_make_null (void);
103
- union Sass_Value* sass_make_boolean (bool val);
104
- union Sass_Value* sass_make_string (const char* val);
105
- union Sass_Value* sass_make_number (double val, const char* unit);
106
- union Sass_Value* sass_make_color (double r, double g, double b, double a);
107
- union Sass_Value* sass_make_list (size_t len, enum Sass_Separator sep);
108
- union Sass_Value* sass_make_map (size_t len);
109
- union Sass_Value* sass_make_error (const char* msg);
110
- union Sass_Value* sass_make_warning (const char* msg);
111
-
112
- // Generic destructor function for all types
113
- // Will release memory of all associated Sass_Values
114
- // Means we will delete recursively for lists and maps
115
- void sass_delete_value (union Sass_Value* val);
116
-
117
- // Make a deep cloned copy of the given sass value
118
- union Sass_Value* sass_clone_value (const union Sass_Value* val);
119
146
  ```
120
147
 
121
148
  ### More links