sassc 2.0.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +9 -3
  5. data/CHANGELOG.md +36 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +43 -7
  9. data/ext/depend +4 -0
  10. data/ext/extconf.rb +92 -0
  11. data/ext/libsass/VERSION +1 -0
  12. data/ext/libsass/include/sass/base.h +9 -1
  13. data/ext/libsass/include/sass/context.h +5 -1
  14. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  15. data/ext/libsass/src/ast.cpp +755 -2028
  16. data/ext/libsass/src/ast.hpp +492 -2477
  17. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  18. data/ext/libsass/src/ast2c.hpp +39 -0
  19. data/ext/libsass/src/ast_def_macros.hpp +70 -10
  20. data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
  21. data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
  22. data/ext/libsass/src/ast_helpers.hpp +292 -0
  23. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  24. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  25. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  26. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1043 -0
  28. data/ext/libsass/src/ast_selectors.hpp +522 -0
  29. data/ext/libsass/src/ast_supports.cpp +114 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +1154 -0
  32. data/ext/libsass/src/ast_values.hpp +498 -0
  33. data/ext/libsass/src/backtrace.cpp +11 -7
  34. data/ext/libsass/src/backtrace.hpp +5 -5
  35. data/ext/libsass/src/base64vlq.cpp +5 -2
  36. data/ext/libsass/src/base64vlq.hpp +1 -1
  37. data/ext/libsass/src/bind.cpp +35 -34
  38. data/ext/libsass/src/bind.hpp +3 -1
  39. data/ext/libsass/src/c2ast.cpp +64 -0
  40. data/ext/libsass/src/c2ast.hpp +14 -0
  41. data/ext/libsass/src/cencode.c +4 -6
  42. data/ext/libsass/src/check_nesting.cpp +83 -88
  43. data/ext/libsass/src/check_nesting.hpp +39 -34
  44. data/ext/libsass/src/color_maps.cpp +168 -164
  45. data/ext/libsass/src/color_maps.hpp +152 -160
  46. data/ext/libsass/src/constants.cpp +20 -0
  47. data/ext/libsass/src/constants.hpp +19 -0
  48. data/ext/libsass/src/context.cpp +104 -121
  49. data/ext/libsass/src/context.hpp +43 -55
  50. data/ext/libsass/src/cssize.cpp +103 -188
  51. data/ext/libsass/src/cssize.hpp +45 -51
  52. data/ext/libsass/src/dart_helpers.hpp +199 -0
  53. data/ext/libsass/src/debugger.hpp +524 -361
  54. data/ext/libsass/src/emitter.cpp +26 -26
  55. data/ext/libsass/src/emitter.hpp +20 -18
  56. data/ext/libsass/src/environment.cpp +41 -27
  57. data/ext/libsass/src/environment.hpp +33 -22
  58. data/ext/libsass/src/error_handling.cpp +92 -94
  59. data/ext/libsass/src/error_handling.hpp +73 -50
  60. data/ext/libsass/src/eval.cpp +380 -515
  61. data/ext/libsass/src/eval.hpp +64 -57
  62. data/ext/libsass/src/eval_selectors.cpp +75 -0
  63. data/ext/libsass/src/expand.cpp +322 -263
  64. data/ext/libsass/src/expand.hpp +55 -39
  65. data/ext/libsass/src/extender.cpp +1188 -0
  66. data/ext/libsass/src/extender.hpp +399 -0
  67. data/ext/libsass/src/extension.cpp +43 -0
  68. data/ext/libsass/src/extension.hpp +89 -0
  69. data/ext/libsass/src/file.cpp +134 -88
  70. data/ext/libsass/src/file.hpp +28 -37
  71. data/ext/libsass/src/fn_colors.cpp +596 -0
  72. data/ext/libsass/src/fn_colors.hpp +85 -0
  73. data/ext/libsass/src/fn_lists.cpp +285 -0
  74. data/ext/libsass/src/fn_lists.hpp +34 -0
  75. data/ext/libsass/src/fn_maps.cpp +94 -0
  76. data/ext/libsass/src/fn_maps.hpp +30 -0
  77. data/ext/libsass/src/fn_miscs.cpp +244 -0
  78. data/ext/libsass/src/fn_miscs.hpp +40 -0
  79. data/ext/libsass/src/fn_numbers.cpp +227 -0
  80. data/ext/libsass/src/fn_numbers.hpp +45 -0
  81. data/ext/libsass/src/fn_selectors.cpp +205 -0
  82. data/ext/libsass/src/fn_selectors.hpp +35 -0
  83. data/ext/libsass/src/fn_strings.cpp +268 -0
  84. data/ext/libsass/src/fn_strings.hpp +34 -0
  85. data/ext/libsass/src/fn_utils.cpp +158 -0
  86. data/ext/libsass/src/fn_utils.hpp +62 -0
  87. data/ext/libsass/src/inspect.cpp +253 -266
  88. data/ext/libsass/src/inspect.hpp +72 -74
  89. data/ext/libsass/src/json.cpp +2 -2
  90. data/ext/libsass/src/lexer.cpp +25 -84
  91. data/ext/libsass/src/lexer.hpp +5 -16
  92. data/ext/libsass/src/listize.cpp +27 -43
  93. data/ext/libsass/src/listize.hpp +14 -11
  94. data/ext/libsass/src/mapping.hpp +1 -0
  95. data/ext/libsass/src/memory.hpp +12 -0
  96. data/ext/libsass/src/memory/allocator.cpp +48 -0
  97. data/ext/libsass/src/memory/allocator.hpp +138 -0
  98. data/ext/libsass/src/memory/config.hpp +20 -0
  99. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  100. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  101. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  102. data/ext/libsass/src/operation.hpp +193 -143
  103. data/ext/libsass/src/operators.cpp +56 -29
  104. data/ext/libsass/src/operators.hpp +11 -11
  105. data/ext/libsass/src/ordered_map.hpp +112 -0
  106. data/ext/libsass/src/output.cpp +59 -75
  107. data/ext/libsass/src/output.hpp +15 -22
  108. data/ext/libsass/src/parser.cpp +662 -818
  109. data/ext/libsass/src/parser.hpp +96 -100
  110. data/ext/libsass/src/parser_selectors.cpp +189 -0
  111. data/ext/libsass/src/permutate.hpp +164 -0
  112. data/ext/libsass/src/plugins.cpp +12 -8
  113. data/ext/libsass/src/plugins.hpp +8 -8
  114. data/ext/libsass/src/position.cpp +10 -26
  115. data/ext/libsass/src/position.hpp +44 -21
  116. data/ext/libsass/src/prelexer.cpp +14 -8
  117. data/ext/libsass/src/prelexer.hpp +9 -9
  118. data/ext/libsass/src/remove_placeholders.cpp +59 -57
  119. data/ext/libsass/src/remove_placeholders.hpp +20 -18
  120. data/ext/libsass/src/sass.cpp +25 -18
  121. data/ext/libsass/src/sass.hpp +22 -14
  122. data/ext/libsass/src/sass2scss.cpp +49 -18
  123. data/ext/libsass/src/sass_context.cpp +104 -132
  124. data/ext/libsass/src/sass_context.hpp +2 -2
  125. data/ext/libsass/src/sass_functions.cpp +7 -4
  126. data/ext/libsass/src/sass_functions.hpp +1 -1
  127. data/ext/libsass/src/sass_values.cpp +26 -21
  128. data/ext/libsass/src/settings.hpp +19 -0
  129. data/ext/libsass/src/source.cpp +69 -0
  130. data/ext/libsass/src/source.hpp +95 -0
  131. data/ext/libsass/src/source_data.hpp +32 -0
  132. data/ext/libsass/src/source_map.cpp +27 -20
  133. data/ext/libsass/src/source_map.hpp +14 -11
  134. data/ext/libsass/src/stylesheet.cpp +22 -0
  135. data/ext/libsass/src/stylesheet.hpp +57 -0
  136. data/ext/libsass/src/to_value.cpp +24 -22
  137. data/ext/libsass/src/to_value.hpp +18 -22
  138. data/ext/libsass/src/units.cpp +28 -22
  139. data/ext/libsass/src/units.hpp +9 -8
  140. data/ext/libsass/src/utf8/checked.h +12 -10
  141. data/ext/libsass/src/utf8/core.h +3 -0
  142. data/ext/libsass/src/utf8_string.cpp +12 -10
  143. data/ext/libsass/src/utf8_string.hpp +7 -6
  144. data/ext/libsass/src/util.cpp +97 -107
  145. data/ext/libsass/src/util.hpp +74 -30
  146. data/ext/libsass/src/util_string.cpp +125 -0
  147. data/ext/libsass/src/util_string.hpp +73 -0
  148. data/ext/libsass/src/values.cpp +33 -24
  149. data/ext/libsass/src/values.hpp +2 -2
  150. data/lib/sassc.rb +24 -0
  151. data/lib/sassc/engine.rb +7 -5
  152. data/lib/sassc/functions_handler.rb +11 -13
  153. data/lib/sassc/native.rb +10 -9
  154. data/lib/sassc/native/native_functions_api.rb +0 -5
  155. data/lib/sassc/script.rb +4 -6
  156. data/lib/sassc/version.rb +1 -1
  157. data/sassc.gemspec +32 -12
  158. data/test/engine_test.rb +32 -2
  159. data/test/functions_test.rb +38 -1
  160. data/test/native_test.rb +4 -4
  161. metadata +95 -109
  162. data/ext/Rakefile +0 -3
  163. data/ext/libsass/.editorconfig +0 -15
  164. data/ext/libsass/.gitattributes +0 -2
  165. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  166. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  167. data/ext/libsass/.gitignore +0 -85
  168. data/ext/libsass/.travis.yml +0 -64
  169. data/ext/libsass/COPYING +0 -25
  170. data/ext/libsass/GNUmakefile.am +0 -88
  171. data/ext/libsass/INSTALL +0 -1
  172. data/ext/libsass/LICENSE +0 -25
  173. data/ext/libsass/Makefile +0 -351
  174. data/ext/libsass/Makefile.conf +0 -55
  175. data/ext/libsass/Readme.md +0 -104
  176. data/ext/libsass/SECURITY.md +0 -10
  177. data/ext/libsass/appveyor.yml +0 -91
  178. data/ext/libsass/configure.ac +0 -138
  179. data/ext/libsass/contrib/libsass.spec +0 -66
  180. data/ext/libsass/docs/README.md +0 -20
  181. data/ext/libsass/docs/api-context-example.md +0 -45
  182. data/ext/libsass/docs/api-context-internal.md +0 -163
  183. data/ext/libsass/docs/api-context.md +0 -295
  184. data/ext/libsass/docs/api-doc.md +0 -215
  185. data/ext/libsass/docs/api-function-example.md +0 -67
  186. data/ext/libsass/docs/api-function-internal.md +0 -8
  187. data/ext/libsass/docs/api-function.md +0 -74
  188. data/ext/libsass/docs/api-importer-example.md +0 -112
  189. data/ext/libsass/docs/api-importer-internal.md +0 -20
  190. data/ext/libsass/docs/api-importer.md +0 -86
  191. data/ext/libsass/docs/api-value-example.md +0 -55
  192. data/ext/libsass/docs/api-value-internal.md +0 -76
  193. data/ext/libsass/docs/api-value.md +0 -154
  194. data/ext/libsass/docs/build-on-darwin.md +0 -27
  195. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  196. data/ext/libsass/docs/build-on-windows.md +0 -139
  197. data/ext/libsass/docs/build-shared-library.md +0 -35
  198. data/ext/libsass/docs/build-with-autotools.md +0 -78
  199. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  200. data/ext/libsass/docs/build-with-mingw.md +0 -107
  201. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  202. data/ext/libsass/docs/build.md +0 -97
  203. data/ext/libsass/docs/compatibility-plan.md +0 -48
  204. data/ext/libsass/docs/contributing.md +0 -17
  205. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  206. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  207. data/ext/libsass/docs/implementations.md +0 -56
  208. data/ext/libsass/docs/plugins.md +0 -47
  209. data/ext/libsass/docs/setup-environment.md +0 -68
  210. data/ext/libsass/docs/source-map-internals.md +0 -51
  211. data/ext/libsass/docs/trace.md +0 -26
  212. data/ext/libsass/docs/triage.md +0 -17
  213. data/ext/libsass/docs/unicode.md +0 -39
  214. data/ext/libsass/extconf.rb +0 -6
  215. data/ext/libsass/include/sass/version.h.in +0 -12
  216. data/ext/libsass/m4/.gitkeep +0 -0
  217. data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
  218. data/ext/libsass/res/resource.rc +0 -35
  219. data/ext/libsass/script/bootstrap +0 -13
  220. data/ext/libsass/script/branding +0 -10
  221. data/ext/libsass/script/ci-build-libsass +0 -134
  222. data/ext/libsass/script/ci-build-plugin +0 -62
  223. data/ext/libsass/script/ci-install-compiler +0 -6
  224. data/ext/libsass/script/ci-install-deps +0 -20
  225. data/ext/libsass/script/ci-report-coverage +0 -42
  226. data/ext/libsass/script/spec +0 -5
  227. data/ext/libsass/script/tap-driver +0 -652
  228. data/ext/libsass/script/tap-runner +0 -1
  229. data/ext/libsass/script/test-leaks.pl +0 -103
  230. data/ext/libsass/src/GNUmakefile.am +0 -54
  231. data/ext/libsass/src/extend.cpp +0 -2130
  232. data/ext/libsass/src/extend.hpp +0 -86
  233. data/ext/libsass/src/functions.cpp +0 -2234
  234. data/ext/libsass/src/functions.hpp +0 -198
  235. data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
  236. data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
  237. data/ext/libsass/src/node.cpp +0 -319
  238. data/ext/libsass/src/node.hpp +0 -118
  239. data/ext/libsass/src/paths.hpp +0 -71
  240. data/ext/libsass/src/sass_util.cpp +0 -149
  241. data/ext/libsass/src/sass_util.hpp +0 -256
  242. data/ext/libsass/src/subset_map.cpp +0 -55
  243. data/ext/libsass/src/subset_map.hpp +0 -76
  244. data/ext/libsass/src/support/libsass.pc.in +0 -11
  245. data/ext/libsass/src/to_c.hpp +0 -39
  246. data/ext/libsass/test/test_node.cpp +0 -94
  247. data/ext/libsass/test/test_paths.cpp +0 -28
  248. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  249. data/ext/libsass/test/test_specificity.cpp +0 -25
  250. data/ext/libsass/test/test_subset_map.cpp +0 -472
  251. data/ext/libsass/test/test_superselector.cpp +0 -69
  252. data/ext/libsass/test/test_unification.cpp +0 -31
  253. data/ext/libsass/version.sh +0 -10
  254. data/ext/libsass/win/libsass.sln +0 -39
  255. data/ext/libsass/win/libsass.sln.DotSettings +0 -9
  256. data/ext/libsass/win/libsass.targets +0 -118
  257. data/ext/libsass/win/libsass.vcxproj +0 -188
  258. data/ext/libsass/win/libsass.vcxproj.filters +0 -357
  259. data/lib/sassc/native/lib_c.rb +0 -21
  260. data/lib/tasks/libsass.rb +0 -33
@@ -1,76 +0,0 @@
1
- #ifndef SASS_SUBSET_MAP_H
2
- #define SASS_SUBSET_MAP_H
3
-
4
- #include <map>
5
- #include <set>
6
- #include <vector>
7
- #include <algorithm>
8
- #include <iterator>
9
-
10
- #include "ast_fwd_decl.hpp"
11
-
12
-
13
- // #include <iostream>
14
- // #include <sstream>
15
- // template<typename T>
16
- // std::string vector_to_string(std::vector<T> v)
17
- // {
18
- // std::stringstream buffer;
19
- // buffer << "[";
20
-
21
- // if (!v.empty())
22
- // { buffer << v[0]; }
23
- // else
24
- // { buffer << "]"; }
25
-
26
- // if (v.size() == 1)
27
- // { buffer << "]"; }
28
- // else
29
- // {
30
- // for (size_t i = 1, S = v.size(); i < S; ++i) buffer << ", " << v[i];
31
- // buffer << "]";
32
- // }
33
-
34
- // return buffer.str();
35
- // }
36
-
37
- // template<typename T>
38
- // std::string set_to_string(set<T> v)
39
- // {
40
- // std::stringstream buffer;
41
- // buffer << "[";
42
- // typename std::set<T>::iterator i = v.begin();
43
- // if (!v.empty())
44
- // { buffer << *i; }
45
- // else
46
- // { buffer << "]"; }
47
-
48
- // if (v.size() == 1)
49
- // { buffer << "]"; }
50
- // else
51
- // {
52
- // for (++i; i != v.end(); ++i) buffer << ", " << *i;
53
- // buffer << "]";
54
- // }
55
-
56
- // return buffer.str();
57
- // }
58
-
59
- namespace Sass {
60
-
61
- class Subset_Map {
62
- private:
63
- std::vector<SubSetMapPair> values_;
64
- std::map<Simple_Selector_Obj, std::vector<std::pair<Compound_Selector_Obj, size_t> >, OrderNodes > hash_;
65
- public:
66
- void put(const Compound_Selector_Obj& sel, const SubSetMapPair& value);
67
- std::vector<SubSetMapPair> get_kv(const Compound_Selector_Obj& s);
68
- std::vector<SubSetMapPair> get_v(const Compound_Selector_Obj& s);
69
- bool empty() { return values_.empty(); }
70
- void clear() { values_.clear(); hash_.clear(); }
71
- const std::vector<SubSetMapPair> values(void) { return values_; }
72
- };
73
-
74
- }
75
-
76
- #endif
@@ -1,11 +0,0 @@
1
- prefix=@prefix@
2
- exec_prefix=@exec_prefix@
3
- libdir=@libdir@
4
- includedir=@includedir@
5
-
6
- Name: libsass
7
- URL: https://github.com/sass/libsass
8
- Description: A C implementation of a Sass compiler
9
- Version: @VERSION@
10
- Libs: -L${libdir} -lsass
11
- Cflags: -I${includedir}
@@ -1,39 +0,0 @@
1
- #ifndef SASS_TO_C_H
2
- #define SASS_TO_C_H
3
-
4
- #include "ast_fwd_decl.hpp"
5
- #include "operation.hpp"
6
- #include "sass/values.h"
7
-
8
- namespace Sass {
9
-
10
- class To_C : public Operation_CRTP<union Sass_Value*, To_C> {
11
- // override this to define a catch-all
12
- union Sass_Value* fallback_impl(AST_Node_Ptr n);
13
-
14
- public:
15
-
16
- To_C() { }
17
- ~To_C() { }
18
-
19
- union Sass_Value* operator()(Boolean_Ptr);
20
- union Sass_Value* operator()(Number_Ptr);
21
- union Sass_Value* operator()(Color_Ptr);
22
- union Sass_Value* operator()(String_Constant_Ptr);
23
- union Sass_Value* operator()(String_Quoted_Ptr);
24
- union Sass_Value* operator()(Custom_Warning_Ptr);
25
- union Sass_Value* operator()(Custom_Error_Ptr);
26
- union Sass_Value* operator()(List_Ptr);
27
- union Sass_Value* operator()(Map_Ptr);
28
- union Sass_Value* operator()(Null_Ptr);
29
- union Sass_Value* operator()(Arguments_Ptr);
30
- union Sass_Value* operator()(Argument_Ptr);
31
-
32
- // dispatch to fallback implementation
33
- union Sass_Value* fallback(AST_Node_Ptr x)
34
- { return fallback_impl(x); }
35
- };
36
-
37
- }
38
-
39
- #endif
@@ -1,94 +0,0 @@
1
- #include <assert.h>
2
- #include <sstream>
3
-
4
- #include "node.hpp"
5
- #include "parser.hpp"
6
-
7
-
8
- #define STATIC_ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
9
-
10
-
11
- namespace Sass {
12
-
13
- Context ctx = Context::Data();
14
-
15
- const char* const ROUNDTRIP_TESTS[] = {
16
- NULL,
17
- "~",
18
- "CMPD",
19
- "~ CMPD",
20
- "CMPD >",
21
- "> > CMPD",
22
- "CMPD ~ ~",
23
- "> + CMPD1.CMPD2 > ~",
24
- "> + CMPD1.CMPD2 CMPD3.CMPD4 > ~",
25
- "+ CMPD1 CMPD2 ~ CMPD3 + CMPD4 > CMPD5 > ~"
26
- };
27
-
28
-
29
-
30
- static Complex_Selector* createComplexSelector(std::string src) {
31
- std::string temp(src);
32
- temp += ";";
33
- return (*Parser::from_c_str(temp.c_str(), ctx, "", Position()).parse_selector_list())[0];
34
- }
35
-
36
-
37
- void roundtripTest(const char* toTest) {
38
-
39
- // Create the initial selector
40
-
41
- Complex_Selector* pOrigSelector = NULL;
42
- if (toTest) {
43
- pOrigSelector = createComplexSelector(toTest);
44
- }
45
-
46
- std::string expected(pOrigSelector ? pOrigSelector->to_string() : "NULL");
47
-
48
-
49
- // Roundtrip the selector into a node and back
50
-
51
- Node node = complexSelectorToNode(pOrigSelector, ctx);
52
-
53
- std::stringstream nodeStringStream;
54
- nodeStringStream << node;
55
- std::string nodeString = nodeStringStream.str();
56
- cout << "ASNODE: " << node << endl;
57
-
58
- Complex_Selector* pNewSelector = nodeToComplexSelector(node, ctx);
59
-
60
- // Show the result
61
-
62
- std::string result(pNewSelector ? pNewSelector->to_string() : "NULL");
63
-
64
- cout << "SELECTOR: " << expected << endl;
65
- cout << "NEW SELECTOR: " << result << endl;
66
-
67
-
68
- // Test that they are equal using the equality operator
69
-
70
- assert( (!pOrigSelector && !pNewSelector ) || (pOrigSelector && pNewSelector) );
71
- if (pOrigSelector) {
72
- assert( *pOrigSelector == *pNewSelector );
73
- }
74
-
75
-
76
- // Test that they are equal by comparing the string versions of the selectors
77
-
78
- assert(expected == result);
79
-
80
- }
81
-
82
-
83
- int main() {
84
- for (int index = 0; index < STATIC_ARRAY_SIZE(ROUNDTRIP_TESTS); index++) {
85
- const char* const toTest = ROUNDTRIP_TESTS[index];
86
- cout << "\nINPUT STRING: " << (toTest ? toTest : "NULL") << endl;
87
- roundtripTest(toTest);
88
- }
89
-
90
- cout << "\nTesting Done.\n";
91
- }
92
-
93
-
94
- }
@@ -1,28 +0,0 @@
1
- #include <iostream>
2
- #include "../paths.hpp"
3
-
4
- using namespace Sass;
5
-
6
- template<typename T>
7
- std::vector<T>& operator<<(std::vector<T>& v, const T& e)
8
- {
9
- v.push_back(e);
10
- return v;
11
- }
12
-
13
- int main()
14
- {
15
- std::vector<int> v1, v2, v3;
16
- v1 << 1 << 2;
17
- v2 << 3;
18
- v3 << 4 << 5 << 6;
19
-
20
- std::vector<std::vector<int> > ss;
21
- ss << v1 << v2 << v3;
22
-
23
- std::vector<std::vector<int> > ps = paths(ss);
24
- for (size_t i = 0, S = ps.size(); i < S; ++i) {
25
- std::cout << vector_to_string(ps[i]) << std::endl;
26
- }
27
- return 0;
28
- }
@@ -1,25 +0,0 @@
1
- #include "../ast.hpp"
2
- #include "../context.hpp"
3
- #include "../parser.hpp"
4
- #include <string>
5
- #include <iostream>
6
-
7
- using namespace Sass;
8
-
9
- Context ctx = Context::Data();
10
-
11
- Compound_Selector* selector(std::string src)
12
- { return Parser::from_c_str(src.c_str(), ctx, "", Position()).parse_compound_selector(); }
13
-
14
- void diff(std::string s, std::string t)
15
- {
16
- std::cout << s << " - " << t << " = " << selector(s + ";")->minus(selector(t + ";"), ctx)->to_string() << std::endl;
17
- }
18
-
19
- int main()
20
- {
21
- diff(".a.b.c", ".c.b");
22
- diff(".a.b.c", ".fludge.b");
23
-
24
- return 0;
25
- }
@@ -1,25 +0,0 @@
1
- #include "../ast.hpp"
2
- #include "../context.hpp"
3
- #include "../parser.hpp"
4
- #include <string>
5
- #include <iostream>
6
-
7
- using namespace Sass;
8
-
9
- Context ctx = Context::Data();
10
-
11
- Selector* selector(std::string src)
12
- { return Parser::from_c_str(src.c_str(), ctx, "", Position()).parse_selector_list(); }
13
-
14
- void spec(std::string sel)
15
- { std::cout << sel << "\t::\t" << selector(sel + ";")->specificity() << std::endl; }
16
-
17
- int main()
18
- {
19
- spec("foo bar hux");
20
- spec(".foo .bar hux");
21
- spec("#foo .bar[hux='mux']");
22
- spec("a b c d e f");
23
-
24
- return 0;
25
- }
@@ -1,472 +0,0 @@
1
- #include <string>
2
- #include <iostream>
3
- #include <assert.h>
4
- #include "../subset_map.hpp"
5
-
6
- Subset_Map<std::string, std::string> ssm;
7
-
8
- string toString(std::vector<std::string> v);
9
- string toString(std::vector<std::pair<std::string, std::vector<std::string>>> v);
10
- void assertEqual(string std::sExpected, std::string sResult);
11
-
12
- void setup() {
13
- ssm.clear();
14
-
15
- //@ssm[Set[1, 2]] = "Foo"
16
- std::vector<std::string> s1;
17
- s1.push_back("1");
18
- s1.push_back("2");
19
- ssm.put(s1, "Foo");
20
-
21
- //@ssm[Set["fizz", "fazz"]] = "Bar"
22
- std::vector<std::string> s2;
23
- s2.push_back("fizz");
24
- s2.push_back("fazz");
25
- ssm.put(s2, "Bar");
26
-
27
- //@ssm[Set[:foo, :bar]] = "Baz"
28
- std::vector<std::string> s3;
29
- s3.push_back(":foo");
30
- s3.push_back(":bar");
31
- ssm.put(s3, "Baz");
32
-
33
- //@ssm[Set[:foo, :bar, :baz]] = "Bang"
34
- std::vector<std::string> s4;
35
- s4.push_back(":foo");
36
- s4.push_back(":bar");
37
- s4.push_back(":baz");
38
- ssm.put(s4, "Bang");
39
-
40
- //@ssm[Set[:bip, :bop, :blip]] = "Qux"
41
- std::vector<std::string> s5;
42
- s5.push_back(":bip");
43
- s5.push_back(":bop");
44
- s5.push_back(":blip");
45
- ssm.put(s5, "Qux");
46
-
47
- //@ssm[Set[:bip, :bop]] = "Thram"
48
- std::vector<std::string> s6;
49
- s6.push_back(":bip");
50
- s6.push_back(":bop");
51
- ssm.put(s6, "Thram");
52
- }
53
-
54
- void testEqualKeys() {
55
- std::cout << "testEqualKeys" << std::endl;
56
-
57
- //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2])
58
- std::vector<std::string> k1;
59
- k1.push_back("1");
60
- k1.push_back("2");
61
- assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
62
-
63
- //assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz"])
64
- std::vector<std::string> k2;
65
- k2.push_back("fizz");
66
- k2.push_back("fazz");
67
- assertEqual("[[Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
68
-
69
- std::cout << std::endl;
70
- }
71
-
72
- void testSubsetKeys() {
73
- std::cout << "testSubsetKeys" << std::endl;
74
-
75
- //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2, "fuzz"])
76
- std::vector<std::string> k1;
77
- k1.push_back("1");
78
- k1.push_back("2");
79
- k1.push_back("fuzz");
80
- assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
81
-
82
- //assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz", 3])
83
- std::vector<std::string> k2;
84
- k2.push_back("fizz");
85
- k2.push_back("fazz");
86
- k2.push_back("3");
87
- assertEqual("[[Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
88
-
89
- std::cout << std::endl;
90
- }
91
-
92
- void testSupersetKeys() {
93
- std::cout << "testSupersetKeys" << std::endl;
94
-
95
- //assert_equal [], @ssm.get(Set[1])
96
- std::vector<std::string> k1;
97
- k1.push_back("1");
98
- assertEqual("[]", toString(ssm.get_kv(k1)));
99
-
100
- //assert_equal [], @ssm.get(Set[2])
101
- std::vector<std::string> k2;
102
- k2.push_back("2");
103
- assertEqual("[]", toString(ssm.get_kv(k2)));
104
-
105
- //assert_equal [], @ssm.get(Set["fizz"])
106
- std::vector<std::string> k3;
107
- k3.push_back("fizz");
108
- assertEqual("[]", toString(ssm.get_kv(k3)));
109
-
110
- //assert_equal [], @ssm.get(Set["fazz"])
111
- std::vector<std::string> k4;
112
- k4.push_back("fazz");
113
- assertEqual("[]", toString(ssm.get_kv(k4)));
114
-
115
- std::cout << std::endl;
116
- }
117
-
118
- void testDisjointKeys() {
119
- std::cout << "testDisjointKeys" << std::endl;
120
-
121
- //assert_equal [], @ssm.get(Set[3, 4])
122
- std::vector<std::string> k1;
123
- k1.push_back("3");
124
- k1.push_back("4");
125
- assertEqual("[]", toString(ssm.get_kv(k1)));
126
-
127
- //assert_equal [], @ssm.get(Set["fuzz", "frizz"])
128
- std::vector<std::string> k2;
129
- k2.push_back("fuzz");
130
- k2.push_back("frizz");
131
- assertEqual("[]", toString(ssm.get_kv(k2)));
132
-
133
- //assert_equal [], @ssm.get(Set["gran", 15])
134
- std::vector<std::string> k3;
135
- k3.push_back("gran");
136
- k3.push_back("15");
137
- assertEqual("[]", toString(ssm.get_kv(k3)));
138
-
139
- std::cout << std::endl;
140
- }
141
-
142
- void testSemiDisjointKeys() {
143
- std::cout << "testSemiDisjointKeys" << std::endl;
144
-
145
- //assert_equal [], @ssm.get(Set[2, 3])
146
- std::vector<std::string> k1;
147
- k1.push_back("2");
148
- k1.push_back("3");
149
- assertEqual("[]", toString(ssm.get_kv(k1)));
150
-
151
- //assert_equal [], @ssm.get(Set["fizz", "fuzz"])
152
- std::vector<std::string> k2;
153
- k2.push_back("fizz");
154
- k2.push_back("fuzz");
155
- assertEqual("[]", toString(ssm.get_kv(k2)));
156
-
157
- //assert_equal [], @ssm.get(Set[1, "fazz"])
158
- std::vector<std::string> k3;
159
- k3.push_back("1");
160
- k3.push_back("fazz");
161
- assertEqual("[]", toString(ssm.get_kv(k3)));
162
-
163
- std::cout << std::endl;
164
- }
165
-
166
- void testEmptyKeySet() {
167
- std::cout << "testEmptyKeySet" << std::endl;
168
-
169
- //assert_raises(ArgumentError) {@ssm[Set[]] = "Fail"}
170
- std::vector<std::string> s1;
171
- try {
172
- ssm.put(s1, "Fail");
173
- }
174
- catch (const char* &e) {
175
- assertEqual("internal error: subset map keys may not be empty", e);
176
- }
177
- }
178
-
179
- void testEmptyKeyGet() {
180
- std::cout << "testEmptyKeyGet" << std::endl;
181
-
182
- //assert_equal [], @ssm.get(Set[])
183
- std::vector<std::string> k1;
184
- assertEqual("[]", toString(ssm.get_kv(k1)));
185
-
186
- std::cout << std::endl;
187
- }
188
- void testMultipleSubsets() {
189
- std::cout << "testMultipleSubsets" << std::endl;
190
-
191
- //assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, "fizz", "fazz"])
192
- std::vector<std::string> k1;
193
- k1.push_back("1");
194
- k1.push_back("2");
195
- k1.push_back("fizz");
196
- k1.push_back("fazz");
197
- assertEqual("[[Foo, Set[1, 2]], [Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k1)));
198
-
199
- //assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, 3, "fizz", "fazz", "fuzz"])
200
- std::vector<std::string> k2;
201
- k2.push_back("1");
202
- k2.push_back("2");
203
- k2.push_back("3");
204
- k2.push_back("fizz");
205
- k2.push_back("fazz");
206
- k2.push_back("fuzz");
207
- assertEqual("[[Foo, Set[1, 2]], [Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
208
-
209
- //assert_equal [["Baz", Set[:foo, :bar]]], @ssm.get(Set[:foo, :bar])
210
- std::vector<std::string> k3;
211
- k3.push_back(":foo");
212
- k3.push_back(":bar");
213
- assertEqual("[[Baz, Set[:foo, :bar]]]", toString(ssm.get_kv(k3)));
214
-
215
- //assert_equal [["Baz", Set[:foo, :bar]], ["Bang", Set[:foo, :bar, :baz]]], @ssm.get(Set[:foo, :bar, :baz])
216
- std::vector<std::string> k4;
217
- k4.push_back(":foo");
218
- k4.push_back(":bar");
219
- k4.push_back(":baz");
220
- assertEqual("[[Baz, Set[:foo, :bar]], [Bang, Set[:foo, :bar, :baz]]]", toString(ssm.get_kv(k4)));
221
-
222
- std::cout << std::endl;
223
- }
224
- void testBracketBracket() {
225
- std::cout << "testBracketBracket" << std::endl;
226
-
227
- //assert_equal ["Foo"], @ssm[Set[1, 2, "fuzz"]]
228
- std::vector<std::string> k1;
229
- k1.push_back("1");
230
- k1.push_back("2");
231
- k1.push_back("fuzz");
232
- assertEqual("[Foo]", toString(ssm.get_v(k1)));
233
-
234
- //assert_equal ["Baz", "Bang"], @ssm[Set[:foo, :bar, :baz]]
235
- std::vector<std::string> k2;
236
- k2.push_back(":foo");
237
- k2.push_back(":bar");
238
- k2.push_back(":baz");
239
- assertEqual("[Baz, Bang]", toString(ssm.get_v(k2)));
240
-
241
- std::cout << std::endl;
242
- }
243
-
244
- void testKeyOrder() {
245
- std::cout << "testEqualKeys" << std::endl;
246
-
247
- //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[2, 1])
248
- std::vector<std::string> k1;
249
- k1.push_back("2");
250
- k1.push_back("1");
251
- assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
252
-
253
- std::cout << std::endl;
254
- }
255
-
256
- void testOrderPreserved() {
257
- std::cout << "testOrderPreserved" << std::endl;
258
- //@ssm[Set[10, 11, 12]] = 1
259
- std::vector<std::string> s1;
260
- s1.push_back("10");
261
- s1.push_back("11");
262
- s1.push_back("12");
263
- ssm.put(s1, "1");
264
-
265
- //@ssm[Set[10, 11]] = 2
266
- std::vector<std::string> s2;
267
- s2.push_back("10");
268
- s2.push_back("11");
269
- ssm.put(s2, "2");
270
-
271
- //@ssm[Set[11]] = 3
272
- std::vector<std::string> s3;
273
- s3.push_back("11");
274
- ssm.put(s3, "3");
275
-
276
- //@ssm[Set[11, 12]] = 4
277
- std::vector<std::string> s4;
278
- s4.push_back("11");
279
- s4.push_back("12");
280
- ssm.put(s4, "4");
281
-
282
- //@ssm[Set[9, 10, 11, 12, 13]] = 5
283
- std::vector<std::string> s5;
284
- s5.push_back("9");
285
- s5.push_back("10");
286
- s5.push_back("11");
287
- s5.push_back("12");
288
- s5.push_back("13");
289
- ssm.put(s5, "5");
290
-
291
- //@ssm[Set[10, 13]] = 6
292
- std::vector<std::string> s6;
293
- s6.push_back("10");
294
- s6.push_back("13");
295
- ssm.put(s6, "6");
296
-
297
- //assert_equal([[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]], @ssm.get(Set[9, 10, 11, 12, 13]))
298
- std::vector<std::string> k1;
299
- k1.push_back("9");
300
- k1.push_back("10");
301
- k1.push_back("11");
302
- k1.push_back("12");
303
- k1.push_back("13");
304
- assertEqual("[[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]]", toString(ssm.get_kv(k1)));
305
-
306
- std::cout << std::endl;
307
- }
308
- void testMultipleEqualValues() {
309
- std::cout << "testMultipleEqualValues" << std::endl;
310
- //@ssm[Set[11, 12]] = 1
311
- std::vector<std::string> s1;
312
- s1.push_back("11");
313
- s1.push_back("12");
314
- ssm.put(s1, "1");
315
-
316
- //@ssm[Set[12, 13]] = 2
317
- std::vector<std::string> s2;
318
- s2.push_back("12");
319
- s2.push_back("13");
320
- ssm.put(s2, "2");
321
-
322
- //@ssm[Set[13, 14]] = 1
323
- std::vector<std::string> s3;
324
- s3.push_back("13");
325
- s3.push_back("14");
326
- ssm.put(s3, "1");
327
-
328
- //@ssm[Set[14, 15]] = 1
329
- std::vector<std::string> s4;
330
- s4.push_back("14");
331
- s4.push_back("15");
332
- ssm.put(s4, "1");
333
-
334
- //assert_equal([[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]], @ssm.get(Set[11, 12, 13, 14, 15]))
335
- std::vector<std::string> k1;
336
- k1.push_back("11");
337
- k1.push_back("12");
338
- k1.push_back("13");
339
- k1.push_back("14");
340
- k1.push_back("15");
341
- assertEqual("[[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]]", toString(ssm.get_kv(k1)));
342
-
343
- std::cout << std::endl;
344
- }
345
-
346
- int main()
347
- {
348
- std::vector<std::string> s1;
349
- s1.push_back("1");
350
- s1.push_back("2");
351
-
352
- std::vector<std::string> s2;
353
- s2.push_back("2");
354
- s2.push_back("3");
355
-
356
- std::vector<std::string> s3;
357
- s3.push_back("3");
358
- s3.push_back("4");
359
-
360
- ssm.put(s1, "value1");
361
- ssm.put(s2, "value2");
362
- ssm.put(s3, "value3");
363
-
364
- std::vector<std::string> s4;
365
- s4.push_back("1");
366
- s4.push_back("2");
367
- s4.push_back("3");
368
-
369
- std::vector<std::pair<string, std::vector<std::string> > > fetched(ssm.get_kv(s4));
370
-
371
- std::cout << "PRINTING RESULTS:" << std::endl;
372
- for (size_t i = 0, S = fetched.size(); i < S; ++i) {
373
- std::cout << fetched[i].first << std::endl;
374
- }
375
-
376
- Subset_Map<string, string> ssm2;
377
- ssm2.put(s1, "foo");
378
- ssm2.put(s2, "bar");
379
- ssm2.put(s4, "hux");
380
-
381
- std::vector<std::pair<string, std::vector<std::string> > > fetched2(ssm2.get_kv(s4));
382
-
383
- std::cout << std::endl << "PRINTING RESULTS:" << std::endl;
384
- for (size_t i = 0, S = fetched2.size(); i < S; ++i) {
385
- std::cout << fetched2[i].first << std::endl;
386
- }
387
-
388
- std::cout << "TRYING ON A SELECTOR-LIKE OBJECT" << std::endl;
389
-
390
- Subset_Map<string, string> sel_ssm;
391
- std::vector<std::string> target;
392
- target.push_back("desk");
393
- target.push_back(".wood");
394
-
395
- std::vector<std::string> actual;
396
- actual.push_back("desk");
397
- actual.push_back(".wood");
398
- actual.push_back(".mine");
399
-
400
- sel_ssm.put(target, "has-aquarium");
401
- std::vector<std::pair<string, std::vector<std::string> > > fetched3(sel_ssm.get_kv(actual));
402
- std::cout << "RESULTS:" << std::endl;
403
- for (size_t i = 0, S = fetched3.size(); i < S; ++i) {
404
- std::cout << fetched3[i].first << std::endl;
405
- }
406
-
407
- std::cout << std::endl;
408
-
409
- // BEGIN PORTED RUBY TESTS FROM /test/sass/util/subset_map_test.rb
410
-
411
- setup();
412
- testEqualKeys();
413
- testSubsetKeys();
414
- testSupersetKeys();
415
- testDisjointKeys();
416
- testSemiDisjointKeys();
417
- testEmptyKeySet();
418
- testEmptyKeyGet();
419
- testMultipleSubsets();
420
- testBracketBracket();
421
- testKeyOrder();
422
-
423
- setup();
424
- testOrderPreserved();
425
-
426
- setup();
427
- testMultipleEqualValues();
428
-
429
- return 0;
430
- }
431
-
432
- string toString(std::vector<std::pair<string, std::vector<std::string>>> v)
433
- {
434
- std::stringstream buffer;
435
- buffer << "[";
436
- for (size_t i = 0, S = v.size(); i < S; ++i) {
437
- buffer << "[" << v[i].first;
438
- buffer << ", Set[";
439
- for (size_t j = 0, S = v[i].second.size(); j < S; ++j) {
440
- buffer << v[i].second[j];
441
- if (j < S-1) {
442
- buffer << ", ";
443
- }
444
- }
445
- buffer << "]]";
446
- if (i < S-1) {
447
- buffer << ", ";
448
- }
449
- }
450
- buffer << "]";
451
- return buffer.str();
452
- }
453
-
454
- string toString(std::vector<std::string> v)
455
- {
456
- std::stringstream buffer;
457
- buffer << "[";
458
- for (size_t i = 0, S = v.size(); i < S; ++i) {
459
- buffer << v[i];
460
- if (i < S-1) {
461
- buffer << ", ";
462
- }
463
- }
464
- buffer << "]";
465
- return buffer.str();
466
- }
467
-
468
- void assertEqual(string sExpected, string sResult) {
469
- std::cout << "Expected: " << sExpected << std::endl;
470
- std::cout << "Result: " << sResult << std::endl;
471
- assert(sExpected == sResult);
472
- }