sassc 2.0.0 → 2.4.0

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 (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
@@ -13,90 +13,88 @@ namespace Sass {
13
13
  // import all the class-specific methods and override as desired
14
14
  using Operation_CRTP<void, Inspect>::operator();
15
15
 
16
- void fallback_impl(AST_Node_Ptr n);
17
-
18
16
  public:
19
17
 
20
18
  Inspect(const Emitter& emi);
21
19
  virtual ~Inspect();
22
20
 
23
21
  // statements
24
- virtual void operator()(Block_Ptr);
25
- virtual void operator()(Ruleset_Ptr);
26
- virtual void operator()(Bubble_Ptr);
27
- virtual void operator()(Supports_Block_Ptr);
28
- virtual void operator()(Media_Block_Ptr);
29
- virtual void operator()(At_Root_Block_Ptr);
30
- virtual void operator()(Directive_Ptr);
31
- virtual void operator()(Keyframe_Rule_Ptr);
32
- virtual void operator()(Declaration_Ptr);
33
- virtual void operator()(Assignment_Ptr);
34
- virtual void operator()(Import_Ptr);
35
- virtual void operator()(Import_Stub_Ptr);
36
- virtual void operator()(Warning_Ptr);
37
- virtual void operator()(Error_Ptr);
38
- virtual void operator()(Debug_Ptr);
39
- virtual void operator()(Comment_Ptr);
40
- virtual void operator()(If_Ptr);
41
- virtual void operator()(For_Ptr);
42
- virtual void operator()(Each_Ptr);
43
- virtual void operator()(While_Ptr);
44
- virtual void operator()(Return_Ptr);
45
- virtual void operator()(Extension_Ptr);
46
- virtual void operator()(Definition_Ptr);
47
- virtual void operator()(Mixin_Call_Ptr);
48
- virtual void operator()(Content_Ptr);
22
+ virtual void operator()(Block*);
23
+ virtual void operator()(StyleRule*);
24
+ virtual void operator()(Bubble*);
25
+ virtual void operator()(SupportsRule*);
26
+ virtual void operator()(AtRootRule*);
27
+ virtual void operator()(AtRule*);
28
+ virtual void operator()(Keyframe_Rule*);
29
+ virtual void operator()(Declaration*);
30
+ virtual void operator()(Assignment*);
31
+ virtual void operator()(Import*);
32
+ virtual void operator()(Import_Stub*);
33
+ virtual void operator()(WarningRule*);
34
+ virtual void operator()(ErrorRule*);
35
+ virtual void operator()(DebugRule*);
36
+ virtual void operator()(Comment*);
37
+ virtual void operator()(If*);
38
+ virtual void operator()(ForRule*);
39
+ virtual void operator()(EachRule*);
40
+ virtual void operator()(WhileRule*);
41
+ virtual void operator()(Return*);
42
+ virtual void operator()(ExtendRule*);
43
+ virtual void operator()(Definition*);
44
+ virtual void operator()(Mixin_Call*);
45
+ virtual void operator()(Content*);
49
46
  // expressions
50
- virtual void operator()(Map_Ptr);
51
- virtual void operator()(Function_Ptr);
52
- virtual void operator()(List_Ptr);
53
- virtual void operator()(Binary_Expression_Ptr);
54
- virtual void operator()(Unary_Expression_Ptr);
55
- virtual void operator()(Function_Call_Ptr);
56
- virtual void operator()(Function_Call_Schema_Ptr);
57
- // virtual void operator()(Custom_Warning_Ptr);
58
- // virtual void operator()(Custom_Error_Ptr);
59
- virtual void operator()(Variable_Ptr);
60
- virtual void operator()(Number_Ptr);
61
- virtual void operator()(Color_Ptr);
62
- virtual void operator()(Boolean_Ptr);
63
- virtual void operator()(String_Schema_Ptr);
64
- virtual void operator()(String_Constant_Ptr);
65
- virtual void operator()(String_Quoted_Ptr);
66
- virtual void operator()(Custom_Error_Ptr);
67
- virtual void operator()(Custom_Warning_Ptr);
68
- virtual void operator()(Supports_Operator_Ptr);
69
- virtual void operator()(Supports_Negation_Ptr);
70
- virtual void operator()(Supports_Declaration_Ptr);
71
- virtual void operator()(Supports_Interpolation_Ptr);
72
- virtual void operator()(Media_Query_Ptr);
73
- virtual void operator()(Media_Query_Expression_Ptr);
74
- virtual void operator()(At_Root_Query_Ptr);
75
- virtual void operator()(Null_Ptr);
76
- virtual void operator()(Parent_Selector_Ptr p);
47
+ virtual void operator()(Map*);
48
+ virtual void operator()(Function*);
49
+ virtual void operator()(List*);
50
+ virtual void operator()(Binary_Expression*);
51
+ virtual void operator()(Unary_Expression*);
52
+ virtual void operator()(Function_Call*);
53
+ // virtual void operator()(Custom_Warning*);
54
+ // virtual void operator()(Custom_Error*);
55
+ virtual void operator()(Variable*);
56
+ virtual void operator()(Number*);
57
+ virtual void operator()(Color_RGBA*);
58
+ virtual void operator()(Color_HSLA*);
59
+ virtual void operator()(Boolean*);
60
+ virtual void operator()(String_Schema*);
61
+ virtual void operator()(String_Constant*);
62
+ virtual void operator()(String_Quoted*);
63
+ virtual void operator()(Custom_Error*);
64
+ virtual void operator()(Custom_Warning*);
65
+ virtual void operator()(SupportsOperation*);
66
+ virtual void operator()(SupportsNegation*);
67
+ virtual void operator()(SupportsDeclaration*);
68
+ virtual void operator()(Supports_Interpolation*);
69
+ virtual void operator()(MediaRule*);
70
+ virtual void operator()(CssMediaRule*);
71
+ virtual void operator()(CssMediaQuery*);
72
+ virtual void operator()(Media_Query*);
73
+ virtual void operator()(Media_Query_Expression*);
74
+ virtual void operator()(At_Root_Query*);
75
+ virtual void operator()(Null*);
76
+ virtual void operator()(Parent_Reference* p);
77
77
  // parameters and arguments
78
- virtual void operator()(Parameter_Ptr);
79
- virtual void operator()(Parameters_Ptr);
80
- virtual void operator()(Argument_Ptr);
81
- virtual void operator()(Arguments_Ptr);
78
+ virtual void operator()(Parameter*);
79
+ virtual void operator()(Parameters*);
80
+ virtual void operator()(Argument*);
81
+ virtual void operator()(Arguments*);
82
82
  // selectors
83
- virtual void operator()(Selector_Schema_Ptr);
84
- virtual void operator()(Placeholder_Selector_Ptr);
85
- virtual void operator()(Element_Selector_Ptr);
86
- virtual void operator()(Class_Selector_Ptr);
87
- virtual void operator()(Id_Selector_Ptr);
88
- virtual void operator()(Attribute_Selector_Ptr);
89
- virtual void operator()(Pseudo_Selector_Ptr);
90
- virtual void operator()(Wrapped_Selector_Ptr);
91
- virtual void operator()(Compound_Selector_Ptr);
92
- virtual void operator()(Complex_Selector_Ptr);
93
- virtual void operator()(Selector_List_Ptr);
94
-
95
- virtual std::string lbracket(List_Ptr);
96
- virtual std::string rbracket(List_Ptr);
83
+ virtual void operator()(Selector_Schema*);
84
+ virtual void operator()(PlaceholderSelector*);
85
+ virtual void operator()(TypeSelector*);
86
+ virtual void operator()(ClassSelector*);
87
+ virtual void operator()(IDSelector*);
88
+ virtual void operator()(AttributeSelector*);
89
+ virtual void operator()(PseudoSelector*);
90
+ virtual void operator()(SelectorComponent*);
91
+ virtual void operator()(SelectorCombinator*);
92
+ virtual void operator()(CompoundSelector*);
93
+ virtual void operator()(ComplexSelector*);
94
+ virtual void operator()(SelectorList*);
95
+ virtual sass::string lbracket(List*);
96
+ virtual sass::string rbracket(List*);
97
97
 
98
- // template <typename U>
99
- // void fallback(U x) { fallback_impl(reinterpret_cast<AST_Node_Ptr>(x)); }
100
98
  };
101
99
 
102
100
  }
@@ -402,7 +402,7 @@ char *json_encode_string(const char *str)
402
402
  try {
403
403
  emit_string(&sb, str);
404
404
  }
405
- catch (std::exception) {
405
+ catch (std::exception&) {
406
406
  sb_free(&sb);
407
407
  throw;
408
408
  }
@@ -421,7 +421,7 @@ char *json_stringify(const JsonNode *node, const char *space)
421
421
  else
422
422
  emit_value(&sb, node);
423
423
  }
424
- catch (std::exception) {
424
+ catch (std::exception&) {
425
425
  sb_free(&sb);
426
426
  throw;
427
427
  }
@@ -1,9 +1,12 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
2
- #include <cctype>
4
+
3
5
  #include <iostream>
4
6
  #include <iomanip>
5
7
  #include "lexer.hpp"
6
8
  #include "constants.hpp"
9
+ #include "util_string.hpp"
7
10
 
8
11
 
9
12
  namespace Sass {
@@ -25,77 +28,14 @@ namespace Sass {
25
28
  const char* kwd_minus(const char* src) { return exactly<'-'>(src); };
26
29
  const char* kwd_slash(const char* src) { return exactly<'/'>(src); };
27
30
 
28
- //####################################
29
- // implement some function that do exist in the standard
30
- // but those are locale aware which brought some trouble
31
- // this even seems to improve performance by quite a bit
32
- //####################################
33
-
34
- bool is_alpha(const char& chr)
35
- {
36
- return unsigned(chr - 'A') <= 'Z' - 'A' ||
37
- unsigned(chr - 'a') <= 'z' - 'a';
38
- }
39
-
40
- bool is_space(const char& chr)
41
- {
42
- // adapted the technique from is_alpha
43
- return chr == ' ' || unsigned(chr - '\t') <= '\r' - '\t';
44
- }
45
-
46
- bool is_digit(const char& chr)
47
- {
48
- // adapted the technique from is_alpha
49
- return unsigned(chr - '0') <= '9' - '0';
50
- }
51
-
52
- bool is_number(const char& chr)
53
- {
54
- // adapted the technique from is_alpha
55
- return is_digit(chr) || chr == '-' || chr == '+';
56
- }
57
-
58
- bool is_xdigit(const char& chr)
59
- {
60
- // adapted the technique from is_alpha
61
- return unsigned(chr - '0') <= '9' - '0' ||
62
- unsigned(chr - 'a') <= 'f' - 'a' ||
63
- unsigned(chr - 'A') <= 'F' - 'A';
64
- }
65
-
66
- bool is_punct(const char& chr)
67
- {
68
- // locale independent
69
- return chr == '.';
70
- }
71
-
72
- bool is_alnum(const char& chr)
73
- {
74
- return is_alpha(chr) || is_digit(chr);
75
- }
76
-
77
- // check if char is outside ascii range
78
- bool is_unicode(const char& chr)
79
- {
80
- // check for unicode range
81
- return unsigned(chr) > 127;
82
- }
83
-
84
- // check if char is outside ascii range
85
- // but with specific ranges (copied from Ruby Sass)
86
- bool is_nonascii(const char& chr)
87
- {
88
- unsigned int cmp = unsigned(chr);
89
- return (
90
- (cmp >= 128 && cmp <= 15572911) ||
91
- (cmp >= 15630464 && cmp <= 15712189) ||
92
- (cmp >= 4036001920)
93
- );
31
+ bool is_number(char chr) {
32
+ return Util::ascii_isdigit(static_cast<unsigned char>(chr)) ||
33
+ chr == '-' || chr == '+';
94
34
  }
95
35
 
96
36
  // check if char is within a reduced ascii range
97
37
  // valid in a uri (copied from Ruby Sass)
98
- bool is_uri_character(const char& chr)
38
+ bool is_uri_character(char chr)
99
39
  {
100
40
  unsigned int cmp = unsigned(chr);
101
41
  return (cmp > 41 && cmp < 127) ||
@@ -104,17 +44,19 @@ namespace Sass {
104
44
 
105
45
  // check if char is within a reduced ascii range
106
46
  // valid for escaping (copied from Ruby Sass)
107
- bool is_escapable_character(const char& chr)
47
+ bool is_escapable_character(char chr)
108
48
  {
109
49
  unsigned int cmp = unsigned(chr);
110
50
  return cmp > 31 && cmp < 127;
111
51
  }
112
52
 
113
53
  // Match word character (look ahead)
114
- bool is_character(const char& chr)
54
+ bool is_character(char chr)
115
55
  {
116
56
  // valid alpha, numeric or unicode char (plus hyphen)
117
- return is_alnum(chr) || is_unicode(chr) || chr == '-';
57
+ return Util::ascii_isalnum(static_cast<unsigned char>(chr)) ||
58
+ !Util::ascii_isascii(static_cast<unsigned char>(chr)) ||
59
+ chr == '-';
118
60
  }
119
61
 
120
62
  //####################################
@@ -122,16 +64,13 @@ namespace Sass {
122
64
  //####################################
123
65
 
124
66
  // create matchers that advance the position
125
- const char* space(const char* src) { return is_space(*src) ? src + 1 : 0; }
126
- const char* alpha(const char* src) { return is_alpha(*src) ? src + 1 : 0; }
127
- const char* unicode(const char* src) { return is_unicode(*src) ? src + 1 : 0; }
128
- const char* nonascii(const char* src) { return is_nonascii(*src) ? src + 1 : 0; }
129
- const char* digit(const char* src) { return is_digit(*src) ? src + 1 : 0; }
130
- const char* xdigit(const char* src) { return is_xdigit(*src) ? src + 1 : 0; }
131
- const char* alnum(const char* src) { return is_alnum(*src) ? src + 1 : 0; }
132
- const char* punct(const char* src) { return is_punct(*src) ? src + 1 : 0; }
133
- const char* hyphen(const char* src) { return *src && *src == '-' ? src + 1 : 0; }
134
- const char* character(const char* src) { return is_character(*src) ? src + 1 : 0; }
67
+ const char* space(const char* src) { return Util::ascii_isspace(static_cast<unsigned char>(*src)) ? src + 1 : nullptr; }
68
+ const char* alpha(const char* src) { return Util::ascii_isalpha(static_cast<unsigned char>(*src)) ? src + 1 : nullptr; }
69
+ const char* nonascii(const char* src) { return Util::ascii_isascii(static_cast<unsigned char>(*src)) ? nullptr : src + 1; }
70
+ const char* digit(const char* src) { return Util::ascii_isdigit(static_cast<unsigned char>(*src)) ? src + 1 : nullptr; }
71
+ const char* xdigit(const char* src) { return Util::ascii_isxdigit(static_cast<unsigned char>(*src)) ? src + 1 : nullptr; }
72
+ const char* alnum(const char* src) { return Util::ascii_isalnum(static_cast<unsigned char>(*src)) ? src + 1 : nullptr; }
73
+ const char* hyphen(const char* src) { return *src == '-' ? src + 1 : 0; }
135
74
  const char* uri_character(const char* src) { return is_uri_character(*src) ? src + 1 : 0; }
136
75
  const char* escapable_character(const char* src) { return is_escapable_character(*src) ? src + 1 : 0; }
137
76
 
@@ -150,11 +89,13 @@ namespace Sass {
150
89
  // Match word boundary (zero-width lookahead).
151
90
  const char* word_boundary(const char* src) { return is_character(*src) || *src == '#' ? 0 : src; }
152
91
 
153
- // Match linefeed /(?:\n|\r\n?)/
92
+ // Match linefeed /(?:\n|\r\n?|\f)/
154
93
  const char* re_linebreak(const char* src)
155
94
  {
156
95
  // end of file or unix linefeed return here
157
- if (*src == 0 || *src == '\n') return src + 1;
96
+ if (*src == 0) return src;
97
+ // end of file or unix linefeed return here
98
+ if (*src == '\n' || *src == '\f') return src + 1;
158
99
  // a carriage return may optionally be followed by a linefeed
159
100
  if (*src == '\r') return *(src + 1) == '\n' ? src + 2 : src + 1;
160
101
  // no linefeed
@@ -166,7 +107,7 @@ namespace Sass {
166
107
  const char* end_of_line(const char* src)
167
108
  {
168
109
  // end of file or unix linefeed return here
169
- return *src == 0 || *src == '\n' || *src == '\r' ? src : 0;
110
+ return *src == 0 || *src == '\n' || *src == '\r' || *src == '\f' ? src : 0;
170
111
  }
171
112
 
172
113
  // Assert end_of_file boundary (/\z/)
@@ -24,19 +24,11 @@ namespace Sass {
24
24
  // BASIC CLASS MATCHERS
25
25
  //####################################
26
26
 
27
- // These are locale independant
28
- bool is_space(const char& src);
29
- bool is_alpha(const char& src);
30
- bool is_punct(const char& src);
31
- bool is_digit(const char& src);
32
- bool is_number(const char& src);
33
- bool is_alnum(const char& src);
34
- bool is_xdigit(const char& src);
35
- bool is_unicode(const char& src);
36
- bool is_nonascii(const char& src);
37
- bool is_character(const char& src);
38
- bool is_uri_character(const char& src);
39
- bool escapable_character(const char& src);
27
+ // Matches ASCII digits, +, and -.
28
+ bool is_number(char src);
29
+
30
+ bool is_uri_character(char src);
31
+ bool escapable_character(char src);
40
32
 
41
33
  // Match a single ctype predicate.
42
34
  const char* space(const char* src);
@@ -44,11 +36,8 @@ namespace Sass {
44
36
  const char* digit(const char* src);
45
37
  const char* xdigit(const char* src);
46
38
  const char* alnum(const char* src);
47
- const char* punct(const char* src);
48
39
  const char* hyphen(const char* src);
49
- const char* unicode(const char* src);
50
40
  const char* nonascii(const char* src);
51
- const char* character(const char* src);
52
41
  const char* uri_character(const char* src);
53
42
  const char* escapable_character(const char* src);
54
43
 
@@ -1,4 +1,7 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
4
+
2
5
  #include <iostream>
3
6
  #include <typeinfo>
4
7
  #include <string>
@@ -13,7 +16,13 @@ namespace Sass {
13
16
  Listize::Listize()
14
17
  { }
15
18
 
16
- Expression_Ptr Listize::operator()(Selector_List_Ptr sel)
19
+ Expression* Listize::perform(AST_Node* node)
20
+ {
21
+ Listize listize;
22
+ return node->perform(&listize);
23
+ }
24
+
25
+ Expression* Listize::operator()(SelectorList* sel)
17
26
  {
18
27
  List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), sel->length(), SASS_COMMA);
19
28
  l->from_selector(true);
@@ -25,62 +34,37 @@ namespace Sass {
25
34
  return SASS_MEMORY_NEW(Null, l->pstate());
26
35
  }
27
36
 
28
- Expression_Ptr Listize::operator()(Compound_Selector_Ptr sel)
37
+ Expression* Listize::operator()(CompoundSelector* sel)
29
38
  {
30
- std::string str;
39
+ sass::string str;
31
40
  for (size_t i = 0, L = sel->length(); i < L; ++i) {
32
- Expression_Ptr e = (*sel)[i]->perform(this);
41
+ Expression* e = (*sel)[i]->perform(this);
33
42
  if (e) str += e->to_string();
34
43
  }
35
44
  return SASS_MEMORY_NEW(String_Quoted, sel->pstate(), str);
36
45
  }
37
46
 
38
- Expression_Ptr Listize::operator()(Complex_Selector_Ptr sel)
47
+ Expression* Listize::operator()(ComplexSelector* sel)
39
48
  {
40
- List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), 2);
49
+ List_Obj l = SASS_MEMORY_NEW(List, sel->pstate());
50
+ // ToDo: investigate what this does
51
+ // Note: seems reated to parent ref
41
52
  l->from_selector(true);
42
- Compound_Selector_Obj head = sel->head();
43
- if (head && !head->is_empty_reference())
44
- {
45
- Expression_Ptr hh = head->perform(this);
46
- if (hh) l->append(hh);
47
- }
48
53
 
49
- std::string reference = ! sel->reference() ? ""
50
- : sel->reference()->to_string();
51
- switch(sel->combinator())
52
- {
53
- case Complex_Selector::PARENT_OF:
54
- l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), ">"));
55
- break;
56
- case Complex_Selector::ADJACENT_TO:
57
- l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "+"));
58
- break;
59
- case Complex_Selector::REFERENCE:
60
- l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "/" + reference + "/"));
61
- break;
62
- case Complex_Selector::PRECEDES:
63
- l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "~"));
64
- break;
65
- case Complex_Selector::ANCESTOR_OF:
66
- break;
67
- default: break;
54
+ for (auto component : sel->elements()) {
55
+ if (CompoundSelectorObj compound = Cast<CompoundSelector>(component)) {
56
+ if (!compound->empty()) {
57
+ ExpressionObj hh = compound->perform(this);
58
+ if (hh) l->append(hh);
59
+ }
60
+ }
61
+ else if (component) {
62
+ l->append(SASS_MEMORY_NEW(String_Quoted, component->pstate(), component->to_string()));
63
+ }
68
64
  }
69
65
 
70
- Complex_Selector_Obj tail = sel->tail();
71
- if (tail)
72
- {
73
- Expression_Obj tt = tail->perform(this);
74
- if (List_Ptr ls = Cast<List>(tt))
75
- { l->concat(ls); }
76
- }
77
66
  if (l->length() == 0) return 0;
78
67
  return l.detach();
79
68
  }
80
69
 
81
- Expression_Ptr Listize::fallback_impl(AST_Node_Ptr n)
82
- {
83
- return Cast<Expression>(n);
84
- }
85
-
86
70
  }