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
@@ -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
  }