zuora_connect_ui 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (449) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/zuora_connect_ui.js +1 -0
  3. data/app/assets/javascripts/zuora_connect_ui/util.js +51 -0
  4. data/app/assets/stylesheets/_zuora_connect_ui.scss +4 -6
  5. data/app/assets/stylesheets/zuora_connect_ui/datatables.scss +3 -3
  6. data/app/helpers/zuora_connect_ui/application_helper.rb +28 -4
  7. data/app/views/partials/_table.html.erb +16 -7
  8. data/lib/zuora_connect_ui/version.rb +1 -1
  9. data/vendor/ruby/2.6.0/cache/autoprefixer-rails-9.6.1.1.gem +0 -0
  10. data/vendor/ruby/2.6.0/cache/parser-2.6.4.1.gem +0 -0
  11. data/vendor/ruby/2.6.0/cache/sassc-2.2.0.gem +0 -0
  12. data/vendor/ruby/2.6.0/cache/zeitwerk-2.1.10.gem +0 -0
  13. data/vendor/ruby/2.6.0/extensions/x86_64-linux/2.6.0/sassc-2.2.0/gem.build_complete +0 -0
  14. data/vendor/ruby/2.6.0/extensions/x86_64-linux/2.6.0/sassc-2.2.0/gem_make.out +75 -0
  15. data/vendor/ruby/2.6.0/extensions/x86_64-linux/2.6.0/sassc-2.2.0/sassc/libsass.so +0 -0
  16. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/CHANGELOG.md +1085 -0
  17. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/Gemfile +10 -0
  18. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/LICENSE +20 -0
  19. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/README.md +237 -0
  20. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/Rakefile +53 -0
  21. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/autoprefixer-rails.gemspec +32 -0
  22. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails.rb +41 -0
  23. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/processor.rb +194 -0
  24. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/railtie.rb +50 -0
  25. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/result.rb +24 -0
  26. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/sprockets.rb +62 -0
  27. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/version.rb +3 -0
  28. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/rake/autoprefixer_tasks.rb +28 -0
  29. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/Rakefile +2 -0
  30. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/config/manifest.js +0 -0
  31. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/evaluate.css.erb +1 -0
  32. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/loaded.sass +2 -0
  33. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/sass.sass +1 -0
  34. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/test.css +3 -0
  35. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/wrong.css +2 -0
  36. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/controllers/application_controller.rb +2 -0
  37. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/controllers/css_controller.rb +6 -0
  38. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config.ru +2 -0
  39. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/application.rb +16 -0
  40. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/autoprefixer.yml +2 -0
  41. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/boot.rb +2 -0
  42. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/environment.rb +3 -0
  43. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/environments/test.rb +9 -0
  44. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/initializers/secret_token.rb +1 -0
  45. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/routes.rb +3 -0
  46. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/autoprefixer_spec.rb +121 -0
  47. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/processor_spec.rb +25 -0
  48. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/rails_spec.rb +40 -0
  49. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/railtie_spec.rb +29 -0
  50. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/spec_helper.rb +16 -0
  51. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/vendor/autoprefixer.js +67195 -0
  52. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/CHANGELOG.md +909 -0
  53. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/CONTRIBUTING.md +17 -0
  54. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/Gemfile +10 -0
  55. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/LICENSE.txt +25 -0
  56. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/README.md +301 -0
  57. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/Rakefile +166 -0
  58. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/bin/ruby-parse +7 -0
  59. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/bin/ruby-rewrite +7 -0
  60. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/ci/run_rubocop_specs +14 -0
  61. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/AST_FORMAT.md +1816 -0
  62. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/CUSTOMIZATION.md +37 -0
  63. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/INTERNALS.md +21 -0
  64. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/css/common.css +68 -0
  65. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/gauntlet_parser.rb +123 -0
  66. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser.rb +82 -0
  67. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/all.rb +12 -0
  68. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ast/node.rb +40 -0
  69. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ast/processor.rb +264 -0
  70. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/base.rb +270 -0
  71. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/builders/default.rb +1741 -0
  72. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/clobbering_error.rb +13 -0
  73. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/color.rb +32 -0
  74. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/context.rb +59 -0
  75. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/current.rb +92 -0
  76. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/deprecation.rb +13 -0
  77. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/diagnostic.rb +163 -0
  78. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/diagnostic/engine.rb +105 -0
  79. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer.rb +23546 -0
  80. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer.rl +2503 -0
  81. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/dedenter.rb +79 -0
  82. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/explanation.rb +55 -0
  83. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/literal.rb +269 -0
  84. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/max_numparam_stack.rb +42 -0
  85. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/stack_state.rb +49 -0
  86. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/macruby.rb +6124 -0
  87. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/macruby.y +2198 -0
  88. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/messages.rb +90 -0
  89. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/meta.rb +33 -0
  90. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/rewriter.rb +105 -0
  91. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby18.rb +5661 -0
  92. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby18.y +1934 -0
  93. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby19.rb +6084 -0
  94. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby19.y +2175 -0
  95. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby20.rb +6511 -0
  96. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby20.y +2353 -0
  97. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby21.rb +6570 -0
  98. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby21.y +2357 -0
  99. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby22.rb +6605 -0
  100. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby22.y +2364 -0
  101. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby23.rb +6624 -0
  102. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby23.y +2370 -0
  103. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby24.rb +6689 -0
  104. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby24.y +2408 -0
  105. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby25.rb +6656 -0
  106. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby25.y +2405 -0
  107. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby26.rb +6670 -0
  108. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby26.y +2413 -0
  109. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby27.rb +6893 -0
  110. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby27.y +2470 -0
  111. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/rubymotion.rb +6078 -0
  112. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/rubymotion.y +2182 -0
  113. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/runner.rb +253 -0
  114. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/runner/ruby_parse.rb +157 -0
  115. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/runner/ruby_rewrite.rb +101 -0
  116. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/buffer.rb +330 -0
  117. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/comment.rb +121 -0
  118. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/comment/associator.rb +210 -0
  119. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map.rb +186 -0
  120. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/collection.rb +18 -0
  121. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/condition.rb +21 -0
  122. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/constant.rb +32 -0
  123. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/definition.rb +23 -0
  124. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/for.rb +19 -0
  125. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/heredoc.rb +19 -0
  126. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/index.rb +33 -0
  127. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/keyword.rb +20 -0
  128. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/objc_kwarg.rb +19 -0
  129. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/operator.rb +17 -0
  130. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/rescue_body.rb +21 -0
  131. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/send.rb +36 -0
  132. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/ternary.rb +18 -0
  133. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/variable.rb +31 -0
  134. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/range.rb +310 -0
  135. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/rewriter.rb +513 -0
  136. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/rewriter/action.rb +44 -0
  137. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/tree_rewriter.rb +301 -0
  138. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/tree_rewriter/action.rb +133 -0
  139. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/static_environment.rb +46 -0
  140. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/syntax_error.rb +21 -0
  141. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/tree_rewriter.rb +134 -0
  142. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/version.rb +5 -0
  143. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/parser.gemspec +51 -0
  144. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/bug_163/fixtures/input.rb +5 -0
  145. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/bug_163/fixtures/output.rb +5 -0
  146. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/bug_163/rewriter.rb +20 -0
  147. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/helper.rb +59 -0
  148. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/parse_helper.rb +316 -0
  149. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/racc_coverage_helper.rb +133 -0
  150. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_base.rb +31 -0
  151. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_current.rb +29 -0
  152. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_diagnostic.rb +96 -0
  153. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_diagnostic_engine.rb +62 -0
  154. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_encoding.rb +99 -0
  155. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_lexer.rb +3659 -0
  156. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_lexer_stack_state.rb +78 -0
  157. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_parse_helper.rb +80 -0
  158. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_parser.rb +7579 -0
  159. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_runner_parse.rb +35 -0
  160. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_runner_rewrite.rb +47 -0
  161. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_buffer.rb +162 -0
  162. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_comment.rb +36 -0
  163. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_comment_associator.rb +367 -0
  164. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_map.rb +15 -0
  165. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_range.rb +172 -0
  166. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_rewriter.rb +541 -0
  167. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_rewriter_action.rb +46 -0
  168. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_tree_rewriter.rb +173 -0
  169. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_static_environment.rb +45 -0
  170. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/using_tree_rewriter/fixtures/input.rb +3 -0
  171. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/using_tree_rewriter/fixtures/output.rb +3 -0
  172. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/using_tree_rewriter/using_tree_rewriter.rb +9 -0
  173. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/CHANGELOG.md +77 -0
  174. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/CODE_OF_CONDUCT.md +10 -0
  175. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/Gemfile +2 -0
  176. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/LICENSE.txt +22 -0
  177. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/README.md +68 -0
  178. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/Rakefile +53 -0
  179. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/Makefile +271 -0
  180. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/SharedPtr.o +0 -0
  181. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast.o +0 -0
  182. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast2c.o +0 -0
  183. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_fwd_decl.o +0 -0
  184. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_sel_cmp.o +0 -0
  185. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_sel_unify.o +0 -0
  186. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_selectors.o +0 -0
  187. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_supports.o +0 -0
  188. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_values.o +0 -0
  189. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/backtrace.o +0 -0
  190. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/base64vlq.o +0 -0
  191. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/bind.o +0 -0
  192. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/c2ast.o +0 -0
  193. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/c99func.o +0 -0
  194. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/cencode.o +0 -0
  195. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/check_nesting.o +0 -0
  196. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/color_maps.o +0 -0
  197. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/constants.o +0 -0
  198. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/context.o +0 -0
  199. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/cssize.o +0 -0
  200. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/depend +4 -0
  201. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/emitter.o +0 -0
  202. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/environment.o +0 -0
  203. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/error_handling.o +0 -0
  204. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/eval.o +0 -0
  205. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/expand.o +0 -0
  206. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/extconf.rb +84 -0
  207. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/extend.o +0 -0
  208. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/file.o +0 -0
  209. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_colors.o +0 -0
  210. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_lists.o +0 -0
  211. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_maps.o +0 -0
  212. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_miscs.o +0 -0
  213. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_numbers.o +0 -0
  214. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_selectors.o +0 -0
  215. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_strings.o +0 -0
  216. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_utils.o +0 -0
  217. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/inspect.o +0 -0
  218. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/json.o +0 -0
  219. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/lexer.o +0 -0
  220. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass.so +0 -0
  221. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/VERSION +1 -0
  222. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/contrib/plugin.cpp +60 -0
  223. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass.h +15 -0
  224. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/base.h +96 -0
  225. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/context.h +170 -0
  226. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/functions.h +139 -0
  227. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/values.h +145 -0
  228. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/version.h +12 -0
  229. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass2scss.h +120 -0
  230. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast.cpp +963 -0
  231. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast.hpp +905 -0
  232. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast2c.cpp +80 -0
  233. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast2c.hpp +39 -0
  234. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_def_macros.hpp +132 -0
  235. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_fwd_decl.cpp +30 -0
  236. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_fwd_decl.hpp +341 -0
  237. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_sel_cmp.cpp +909 -0
  238. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_sel_unify.cpp +280 -0
  239. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_selectors.cpp +1475 -0
  240. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_selectors.hpp +568 -0
  241. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_supports.cpp +130 -0
  242. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_supports.hpp +121 -0
  243. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_values.cpp +967 -0
  244. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_values.hpp +489 -0
  245. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/b64/cencode.h +32 -0
  246. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/b64/encode.h +79 -0
  247. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/backtrace.cpp +50 -0
  248. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/backtrace.hpp +29 -0
  249. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/base64vlq.cpp +47 -0
  250. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/base64vlq.hpp +30 -0
  251. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/bind.cpp +312 -0
  252. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/bind.hpp +15 -0
  253. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/c2ast.cpp +64 -0
  254. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/c2ast.hpp +14 -0
  255. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/c99func.c +54 -0
  256. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/cencode.c +108 -0
  257. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/check_nesting.cpp +394 -0
  258. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/check_nesting.hpp +66 -0
  259. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/color_maps.cpp +651 -0
  260. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/color_maps.hpp +331 -0
  261. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/constants.cpp +194 -0
  262. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/constants.hpp +194 -0
  263. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/context.cpp +890 -0
  264. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/context.hpp +152 -0
  265. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/cssize.cpp +604 -0
  266. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/cssize.hpp +77 -0
  267. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/debug.hpp +43 -0
  268. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/debugger.hpp +807 -0
  269. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/emitter.cpp +298 -0
  270. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/emitter.hpp +103 -0
  271. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/environment.cpp +260 -0
  272. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/environment.hpp +119 -0
  273. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/error_handling.cpp +212 -0
  274. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/error_handling.hpp +229 -0
  275. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/eval.cpp +1657 -0
  276. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/eval.hpp +112 -0
  277. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/expand.cpp +822 -0
  278. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/expand.hpp +78 -0
  279. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/extend.cpp +2132 -0
  280. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/extend.hpp +86 -0
  281. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/file.cpp +522 -0
  282. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/file.hpp +133 -0
  283. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_colors.cpp +594 -0
  284. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_colors.hpp +85 -0
  285. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_lists.cpp +284 -0
  286. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_lists.hpp +34 -0
  287. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_maps.cpp +94 -0
  288. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_maps.hpp +30 -0
  289. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_miscs.cpp +256 -0
  290. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_miscs.hpp +40 -0
  291. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_numbers.cpp +220 -0
  292. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_numbers.hpp +45 -0
  293. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_selectors.cpp +235 -0
  294. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_selectors.hpp +35 -0
  295. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_strings.cpp +254 -0
  296. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_strings.hpp +34 -0
  297. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_utils.cpp +156 -0
  298. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_utils.hpp +56 -0
  299. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/inspect.cpp +1087 -0
  300. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/inspect.hpp +99 -0
  301. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/json.cpp +1436 -0
  302. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/json.hpp +117 -0
  303. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/kwd_arg_macros.hpp +28 -0
  304. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/lexer.cpp +184 -0
  305. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/lexer.hpp +315 -0
  306. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/listize.cpp +84 -0
  307. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/listize.hpp +38 -0
  308. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/mapping.hpp +18 -0
  309. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/memory/SharedPtr.cpp +33 -0
  310. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/memory/SharedPtr.hpp +286 -0
  311. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/node.cpp +322 -0
  312. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/node.hpp +118 -0
  313. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/operation.hpp +213 -0
  314. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/operators.cpp +266 -0
  315. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/operators.hpp +30 -0
  316. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/output.cpp +339 -0
  317. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/output.hpp +47 -0
  318. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/parser.cpp +3153 -0
  319. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/parser.hpp +402 -0
  320. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/paths.hpp +71 -0
  321. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/plugins.cpp +188 -0
  322. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/plugins.hpp +57 -0
  323. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/position.cpp +184 -0
  324. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/position.hpp +124 -0
  325. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/prelexer.cpp +1780 -0
  326. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/prelexer.hpp +484 -0
  327. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/remove_placeholders.cpp +87 -0
  328. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/remove_placeholders.hpp +34 -0
  329. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass.cpp +155 -0
  330. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass.hpp +142 -0
  331. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass2scss.cpp +895 -0
  332. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_context.cpp +772 -0
  333. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_context.hpp +129 -0
  334. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_functions.cpp +210 -0
  335. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_functions.hpp +50 -0
  336. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_util.cpp +152 -0
  337. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_util.hpp +256 -0
  338. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_values.cpp +365 -0
  339. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_values.hpp +82 -0
  340. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/source_map.cpp +198 -0
  341. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/source_map.hpp +62 -0
  342. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/subset_map.cpp +58 -0
  343. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/subset_map.hpp +76 -0
  344. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/to_value.cpp +114 -0
  345. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/to_value.hpp +46 -0
  346. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/units.cpp +505 -0
  347. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/units.hpp +110 -0
  348. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8.h +34 -0
  349. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8/checked.h +336 -0
  350. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8/core.h +332 -0
  351. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8/unchecked.h +235 -0
  352. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8_string.cpp +105 -0
  353. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8_string.hpp +37 -0
  354. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util.cpp +725 -0
  355. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util.hpp +106 -0
  356. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util_string.cpp +75 -0
  357. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util_string.hpp +19 -0
  358. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/values.cpp +140 -0
  359. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/values.hpp +12 -0
  360. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/listize.o +0 -0
  361. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/node.o +0 -0
  362. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/operators.o +0 -0
  363. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/output.o +0 -0
  364. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/parser.o +0 -0
  365. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/plugins.o +0 -0
  366. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/position.o +0 -0
  367. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/prelexer.o +0 -0
  368. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/remove_placeholders.o +0 -0
  369. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass.o +0 -0
  370. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass2scss.o +0 -0
  371. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_context.o +0 -0
  372. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_functions.o +0 -0
  373. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_util.o +0 -0
  374. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_values.o +0 -0
  375. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/source_map.o +0 -0
  376. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/subset_map.o +0 -0
  377. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/to_value.o +0 -0
  378. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/units.o +0 -0
  379. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/utf8_string.o +0 -0
  380. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/util.o +0 -0
  381. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/util_string.o +0 -0
  382. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/values.o +0 -0
  383. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc.rb +57 -0
  384. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/dependency.rb +17 -0
  385. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/engine.rb +139 -0
  386. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/error.rb +37 -0
  387. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/functions_handler.rb +73 -0
  388. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/import_handler.rb +50 -0
  389. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/importer.rb +31 -0
  390. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/libsass.so +0 -0
  391. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native.rb +62 -0
  392. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/lib_c.rb +21 -0
  393. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/native_context_api.rb +147 -0
  394. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/native_functions_api.rb +159 -0
  395. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass2scss_api.rb +10 -0
  396. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass_input_style.rb +13 -0
  397. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass_output_style.rb +12 -0
  398. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass_value.rb +97 -0
  399. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/string_list.rb +10 -0
  400. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/sass_2_scss.rb +9 -0
  401. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script.rb +17 -0
  402. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/functions.rb +8 -0
  403. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value.rb +137 -0
  404. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/bool.rb +32 -0
  405. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/color.rb +95 -0
  406. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/list.rb +136 -0
  407. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/map.rb +69 -0
  408. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/number.rb +389 -0
  409. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/string.rb +96 -0
  410. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion.rb +69 -0
  411. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/base.rb +13 -0
  412. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/bool.rb +13 -0
  413. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/color.rb +18 -0
  414. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/list.rb +25 -0
  415. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/map.rb +21 -0
  416. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/number.rb +13 -0
  417. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/string.rb +17 -0
  418. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/util.rb +231 -0
  419. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/util/normalized_map.rb +117 -0
  420. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/version.rb +5 -0
  421. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/sassc.gemspec +69 -0
  422. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/custom_importer_test.rb +127 -0
  423. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/engine_test.rb +314 -0
  424. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/error_test.rb +29 -0
  425. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/fixtures/paths.scss +10 -0
  426. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/functions_test.rb +323 -0
  427. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/native_test.rb +213 -0
  428. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/output_style_test.rb +107 -0
  429. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/sass_2_scss_test.rb +14 -0
  430. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/test_helper.rb +45 -0
  431. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/README.md +533 -0
  432. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk.rb +12 -0
  433. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/error.rb +10 -0
  434. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/explicit_namespace.rb +80 -0
  435. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/gem_inflector.rb +19 -0
  436. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/inflector.rb +19 -0
  437. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/kernel.rb +33 -0
  438. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/loader.rb +759 -0
  439. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/loader/callbacks.rb +71 -0
  440. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/real_mod_name.rb +15 -0
  441. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/registry.rb +147 -0
  442. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/version.rb +5 -0
  443. data/vendor/ruby/2.6.0/specifications/autoprefixer-rails-9.6.1.1.gemspec +47 -0
  444. data/vendor/ruby/2.6.0/specifications/parser-2.6.4.1.gemspec +62 -0
  445. data/vendor/ruby/2.6.0/specifications/sassc-2.2.0.gemspec +60 -0
  446. data/vendor/ruby/2.6.0/specifications/zeitwerk-2.1.10.gemspec +21 -0
  447. metadata +441 -4
  448. data/vendor/assets/anjuna/css/anjuna-application.css +0 -2
  449. data/vendor/assets/anjuna/css/anjuna-theme.css +0 -2
@@ -0,0 +1,87 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include "remove_placeholders.hpp"
6
+ #include "context.hpp"
7
+ #include "inspect.hpp"
8
+ #include <iostream>
9
+
10
+ namespace Sass {
11
+
12
+ Remove_Placeholders::Remove_Placeholders()
13
+ { }
14
+
15
+ void Remove_Placeholders::operator()(Block* b) {
16
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
17
+ Statement* st = b->at(i);
18
+ st->perform(this);
19
+ }
20
+ }
21
+
22
+ Selector_List* Remove_Placeholders::remove_placeholders(Selector_List* sl)
23
+ {
24
+ Selector_List* new_sl = SASS_MEMORY_NEW(Selector_List, sl->pstate());
25
+
26
+ for (size_t i = 0, L = sl->length(); i < L; ++i) {
27
+ if (!sl->at(i)->contains_placeholder()) {
28
+ new_sl->append(sl->at(i));
29
+ }
30
+ }
31
+
32
+ return new_sl;
33
+
34
+ }
35
+
36
+
37
+ void Remove_Placeholders::operator()(Ruleset* r) {
38
+ // Create a new selector group without placeholders
39
+ Selector_List_Obj sl = Cast<Selector_List>(r->selector());
40
+
41
+ if (sl) {
42
+ // Set the new placeholder selector list
43
+ r->selector(remove_placeholders(sl));
44
+ // Remove placeholders in wrapped selectors
45
+ for (Complex_Selector_Obj cs : sl->elements()) {
46
+ while (cs) {
47
+ if (cs->head()) {
48
+ for (Simple_Selector_Obj& ss : cs->head()->elements()) {
49
+ if (Wrapped_Selector* ws = Cast<Wrapped_Selector>(ss)) {
50
+ if (Selector_List* wsl = Cast<Selector_List>(ws->selector())) {
51
+ Selector_List* clean = remove_placeholders(wsl);
52
+ // also clean superflous parent selectors
53
+ // probably not really the correct place
54
+ clean->remove_parent_selectors();
55
+ ws->selector(clean);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ cs = cs->tail();
61
+ }
62
+ }
63
+ }
64
+
65
+ // Iterate into child blocks
66
+ Block_Obj b = r->block();
67
+
68
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
69
+ if (b->at(i)) {
70
+ Statement_Obj st = b->at(i);
71
+ st->perform(this);
72
+ }
73
+ }
74
+ }
75
+
76
+ void Remove_Placeholders::operator()(Media_Block* m) {
77
+ operator()(m->block());
78
+ }
79
+ void Remove_Placeholders::operator()(Supports_Block* m) {
80
+ operator()(m->block());
81
+ }
82
+
83
+ void Remove_Placeholders::operator()(Directive* a) {
84
+ if (a->block()) a->block()->perform(this);
85
+ }
86
+
87
+ }
@@ -0,0 +1,34 @@
1
+ #ifndef SASS_REMOVE_PLACEHOLDERS_H
2
+ #define SASS_REMOVE_PLACEHOLDERS_H
3
+
4
+ #pragma once
5
+
6
+ #include "ast.hpp"
7
+ #include "operation.hpp"
8
+
9
+ namespace Sass {
10
+
11
+
12
+ class Remove_Placeholders : public Operation_CRTP<void, Remove_Placeholders> {
13
+
14
+ public:
15
+ Selector_List* remove_placeholders(Selector_List*);
16
+
17
+ public:
18
+ Remove_Placeholders();
19
+ ~Remove_Placeholders() { }
20
+
21
+ void operator()(Block*);
22
+ void operator()(Ruleset*);
23
+ void operator()(Media_Block*);
24
+ void operator()(Supports_Block*);
25
+ void operator()(Directive*);
26
+
27
+ // ignore missed types
28
+ template <typename U>
29
+ void fallback(U x) {}
30
+ };
31
+
32
+ }
33
+
34
+ #endif
@@ -0,0 +1,155 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include <cstdlib>
6
+ #include <cstring>
7
+ #include <vector>
8
+ #include <sstream>
9
+
10
+ #include "sass.h"
11
+ #include "file.hpp"
12
+ #include "util.hpp"
13
+ #include "context.hpp"
14
+ #include "sass_context.hpp"
15
+ #include "sass_functions.hpp"
16
+
17
+ namespace Sass {
18
+
19
+ // helper to convert string list to vector
20
+ std::vector<std::string> list2vec(struct string_list* cur)
21
+ {
22
+ std::vector<std::string> list;
23
+ while (cur) {
24
+ list.push_back(cur->string);
25
+ cur = cur->next;
26
+ }
27
+ return list;
28
+ }
29
+
30
+ }
31
+
32
+ extern "C" {
33
+ using namespace Sass;
34
+
35
+ // Allocate libsass heap memory
36
+ // Don't forget string termination!
37
+ void* ADDCALL sass_alloc_memory(size_t size)
38
+ {
39
+ void* ptr = malloc(size);
40
+ if (ptr == NULL) {
41
+ std::cerr << "Out of memory.\n";
42
+ exit(EXIT_FAILURE);
43
+ }
44
+ return ptr;
45
+ }
46
+
47
+ char* ADDCALL sass_copy_c_string(const char* str)
48
+ {
49
+ size_t len = strlen(str) + 1;
50
+ char* cpy = (char*) sass_alloc_memory(len);
51
+ std::memcpy(cpy, str, len);
52
+ return cpy;
53
+ }
54
+
55
+ // Deallocate libsass heap memory
56
+ void ADDCALL sass_free_memory(void* ptr)
57
+ {
58
+ if (ptr) free (ptr);
59
+ }
60
+
61
+ // caller must free the returned memory
62
+ char* ADDCALL sass_string_quote (const char *str, const char quote_mark)
63
+ {
64
+ std::string quoted = quote(str, quote_mark);
65
+ return sass_copy_c_string(quoted.c_str());
66
+ }
67
+
68
+ // caller must free the returned memory
69
+ char* ADDCALL sass_string_unquote (const char *str)
70
+ {
71
+ std::string unquoted = unquote(str);
72
+ return sass_copy_c_string(unquoted.c_str());
73
+ }
74
+
75
+ char* ADDCALL sass_compiler_find_include (const char* file, struct Sass_Compiler* compiler)
76
+ {
77
+ // get the last import entry to get current base directory
78
+ Sass_Import_Entry import = sass_compiler_get_last_import(compiler);
79
+ const std::vector<std::string>& incs = compiler->cpp_ctx->include_paths;
80
+ // create the vector with paths to lookup
81
+ std::vector<std::string> paths(1 + incs.size());
82
+ paths.push_back(File::dir_name(import->abs_path));
83
+ paths.insert( paths.end(), incs.begin(), incs.end() );
84
+ // now resolve the file path relative to lookup paths
85
+ std::string resolved(File::find_include(file, paths));
86
+ return sass_copy_c_string(resolved.c_str());
87
+ }
88
+
89
+ char* ADDCALL sass_compiler_find_file (const char* file, struct Sass_Compiler* compiler)
90
+ {
91
+ // get the last import entry to get current base directory
92
+ Sass_Import_Entry import = sass_compiler_get_last_import(compiler);
93
+ const std::vector<std::string>& incs = compiler->cpp_ctx->include_paths;
94
+ // create the vector with paths to lookup
95
+ std::vector<std::string> paths(1 + incs.size());
96
+ paths.push_back(File::dir_name(import->abs_path));
97
+ paths.insert( paths.end(), incs.begin(), incs.end() );
98
+ // now resolve the file path relative to lookup paths
99
+ std::string resolved(File::find_file(file, paths));
100
+ return sass_copy_c_string(resolved.c_str());
101
+ }
102
+
103
+ // Make sure to free the returned value!
104
+ // Incs array has to be null terminated!
105
+ // this has the original resolve logic for sass include
106
+ char* ADDCALL sass_find_include (const char* file, struct Sass_Options* opt)
107
+ {
108
+ std::vector<std::string> vec(list2vec(opt->include_paths));
109
+ std::string resolved(File::find_include(file, vec));
110
+ return sass_copy_c_string(resolved.c_str());
111
+ }
112
+
113
+ // Make sure to free the returned value!
114
+ // Incs array has to be null terminated!
115
+ char* ADDCALL sass_find_file (const char* file, struct Sass_Options* opt)
116
+ {
117
+ std::vector<std::string> vec(list2vec(opt->include_paths));
118
+ std::string resolved(File::find_file(file, vec));
119
+ return sass_copy_c_string(resolved.c_str());
120
+ }
121
+
122
+ // Get compiled libsass version
123
+ const char* ADDCALL libsass_version(void)
124
+ {
125
+ return LIBSASS_VERSION;
126
+ }
127
+
128
+ // Get compiled libsass version
129
+ const char* ADDCALL libsass_language_version(void)
130
+ {
131
+ return LIBSASS_LANGUAGE_VERSION;
132
+ }
133
+
134
+ }
135
+
136
+ namespace Sass {
137
+
138
+ // helper to aid dreaded MSVC debug mode
139
+ char* sass_copy_string(std::string str)
140
+ {
141
+ // In MSVC the following can lead to segfault:
142
+ // sass_copy_c_string(stream.str().c_str());
143
+ // Reason is that the string returned by str() is disposed before
144
+ // sass_copy_c_string is invoked. The string is actually a stack
145
+ // object, so indeed nobody is holding on to it. So it seems
146
+ // perfectly fair to release it right away. So the const char*
147
+ // by c_str will point to invalid memory. I'm not sure if this is
148
+ // the behavior for all compiler, but I'm pretty sure we would
149
+ // have gotten more issues reported if that would be the case.
150
+ // Wrapping it in a functions seems the cleanest approach as the
151
+ // function must hold on to the stack variable until it's done.
152
+ return sass_copy_c_string(str.c_str());
153
+ }
154
+
155
+ }
@@ -0,0 +1,142 @@
1
+ // must be the first include in all compile units
2
+ #ifndef SASS_SASS_H
3
+ #define SASS_SASS_H
4
+
5
+ // undefine extensions macro to tell sys includes
6
+ // that we do not want any macros to be exported
7
+ // mainly fixes an issue on SmartOS (SEC macro)
8
+ #undef __EXTENSIONS__
9
+
10
+ #ifdef _MSC_VER
11
+ #pragma warning(disable : 4005)
12
+ #endif
13
+
14
+ // aplies to MSVC and MinGW
15
+ #ifdef _WIN32
16
+ // we do not want the ERROR macro
17
+ # ifndef NOGDI
18
+ # define NOGDI
19
+ # endif
20
+ // we do not want the min/max macro
21
+ # ifndef NOMINMAX
22
+ # define NOMINMAX
23
+ # endif
24
+ // we do not want the IN/OUT macro
25
+ # ifndef _NO_W32_PSEUDO_MODIFIERS
26
+ # define _NO_W32_PSEUDO_MODIFIERS
27
+ # endif
28
+ #endif
29
+
30
+
31
+ // should we be case insensitive
32
+ // when dealing with files or paths
33
+ #ifndef FS_CASE_SENSITIVE
34
+ # ifdef _WIN32
35
+ # define FS_CASE_SENSITIVE 0
36
+ # else
37
+ # define FS_CASE_SENSITIVE 1
38
+ # endif
39
+ #endif
40
+
41
+ // path separation char
42
+ #ifndef PATH_SEP
43
+ # ifdef _WIN32
44
+ # define PATH_SEP ';'
45
+ # else
46
+ # define PATH_SEP ':'
47
+ # endif
48
+ #endif
49
+
50
+
51
+ // include C-API header
52
+ #include "sass/base.h"
53
+
54
+ // For C++ helper
55
+ #include <string>
56
+
57
+ // output behaviours
58
+ namespace Sass {
59
+
60
+ // create some C++ aliases for the most used options
61
+ const static Sass_Output_Style NESTED = SASS_STYLE_NESTED;
62
+ const static Sass_Output_Style COMPACT = SASS_STYLE_COMPACT;
63
+ const static Sass_Output_Style EXPANDED = SASS_STYLE_EXPANDED;
64
+ const static Sass_Output_Style COMPRESSED = SASS_STYLE_COMPRESSED;
65
+ // only used internal to trigger ruby inspect behavior
66
+ const static Sass_Output_Style INSPECT = SASS_STYLE_INSPECT;
67
+ const static Sass_Output_Style TO_SASS = SASS_STYLE_TO_SASS;
68
+
69
+ // helper to aid dreaded MSVC debug mode
70
+ // see implementation for more details
71
+ char* sass_copy_string(std::string str);
72
+
73
+ }
74
+
75
+ // input behaviours
76
+ enum Sass_Input_Style {
77
+ SASS_CONTEXT_NULL,
78
+ SASS_CONTEXT_FILE,
79
+ SASS_CONTEXT_DATA,
80
+ SASS_CONTEXT_FOLDER
81
+ };
82
+
83
+ // simple linked list
84
+ struct string_list {
85
+ string_list* next;
86
+ char* string;
87
+ };
88
+
89
+ // sass config options structure
90
+ struct Sass_Inspect_Options {
91
+
92
+ // Output style for the generated css code
93
+ // A value from above SASS_STYLE_* constants
94
+ enum Sass_Output_Style output_style;
95
+
96
+ // Precision for fractional numbers
97
+ int precision;
98
+
99
+ // initialization list (constructor with defaults)
100
+ Sass_Inspect_Options(Sass_Output_Style style = Sass::NESTED,
101
+ int precision = 10)
102
+ : output_style(style), precision(precision)
103
+ { }
104
+
105
+ };
106
+
107
+ // sass config options structure
108
+ struct Sass_Output_Options : Sass_Inspect_Options {
109
+
110
+ // String to be used for indentation
111
+ const char* indent;
112
+ // String to be used to for line feeds
113
+ const char* linefeed;
114
+
115
+ // Emit comments in the generated CSS indicating
116
+ // the corresponding source line.
117
+ bool source_comments;
118
+
119
+ // initialization list (constructor with defaults)
120
+ Sass_Output_Options(struct Sass_Inspect_Options opt,
121
+ const char* indent = " ",
122
+ const char* linefeed = "\n",
123
+ bool source_comments = false)
124
+ : Sass_Inspect_Options(opt),
125
+ indent(indent), linefeed(linefeed),
126
+ source_comments(source_comments)
127
+ { }
128
+
129
+ // initialization list (constructor with defaults)
130
+ Sass_Output_Options(Sass_Output_Style style = Sass::NESTED,
131
+ int precision = 10,
132
+ const char* indent = " ",
133
+ const char* linefeed = "\n",
134
+ bool source_comments = false)
135
+ : Sass_Inspect_Options(style, precision),
136
+ indent(indent), linefeed(linefeed),
137
+ source_comments(source_comments)
138
+ { }
139
+
140
+ };
141
+
142
+ #endif
@@ -0,0 +1,895 @@
1
+ /**
2
+ * sass2scss
3
+ * Licensed under the MIT License
4
+ * Copyright (c) Marcel Greter
5
+ */
6
+
7
+ #ifdef _MSC_VER
8
+ #define _CRT_SECURE_NO_WARNINGS
9
+ #define _CRT_NONSTDC_NO_DEPRECATE
10
+ #endif
11
+
12
+ // include library
13
+ #include <stack>
14
+ #include <string>
15
+ #include <cstring>
16
+ #include <cstdlib>
17
+ #include <sstream>
18
+ #include <iostream>
19
+ #include <stdio.h>
20
+
21
+ ///*
22
+ //
23
+ // src comments: comments in sass syntax (staring with //)
24
+ // css comments: multiline comments in css syntax (starting with /*)
25
+ //
26
+ // KEEP_COMMENT: keep src comments in the resulting css code
27
+ // STRIP_COMMENT: strip out all comments (either src or css)
28
+ // CONVERT_COMMENT: convert all src comments to css comments
29
+ //
30
+ //*/
31
+
32
+ // our own header
33
+ #include "sass2scss.h"
34
+
35
+ // add namespace for c++
36
+ namespace Sass
37
+ {
38
+
39
+ // return the actual prettify value from options
40
+ #define PRETTIFY(converter) (converter.options - (converter.options & 248))
41
+ // query the options integer to check if the option is enables
42
+ #define KEEP_COMMENT(converter) ((converter.options & SASS2SCSS_KEEP_COMMENT) == SASS2SCSS_KEEP_COMMENT)
43
+ #define STRIP_COMMENT(converter) ((converter.options & SASS2SCSS_STRIP_COMMENT) == SASS2SCSS_STRIP_COMMENT)
44
+ #define CONVERT_COMMENT(converter) ((converter.options & SASS2SCSS_CONVERT_COMMENT) == SASS2SCSS_CONVERT_COMMENT)
45
+
46
+ // some makros to access the indentation stack
47
+ #define INDENT(converter) (converter.indents.top())
48
+
49
+ // some makros to query comment parser status
50
+ #define IS_PARSING(converter) (converter.comment == "")
51
+ #define IS_COMMENT(converter) (converter.comment != "")
52
+ #define IS_SRC_COMMENT(converter) (converter.comment == "//" && ! CONVERT_COMMENT(converter))
53
+ #define IS_CSS_COMMENT(converter) (converter.comment == "/*" || (converter.comment == "//" && CONVERT_COMMENT(converter)))
54
+
55
+ // pretty printer helper function
56
+ static std::string closer (const converter& converter)
57
+ {
58
+ return PRETTIFY(converter) == 0 ? " }" :
59
+ PRETTIFY(converter) <= 1 ? " }" :
60
+ "\n" + INDENT(converter) + "}";
61
+ }
62
+
63
+ // pretty printer helper function
64
+ static std::string opener (const converter& converter)
65
+ {
66
+ return PRETTIFY(converter) == 0 ? " { " :
67
+ PRETTIFY(converter) <= 2 ? " {" :
68
+ "\n" + INDENT(converter) + "{";
69
+ }
70
+
71
+ // check if the given string is a pseudo selector
72
+ // needed to differentiate from sass property syntax
73
+ static bool isPseudoSelector (std::string& sel)
74
+ {
75
+
76
+ size_t len = sel.length();
77
+ if (len < 1) return false;
78
+ size_t pos = sel.find_first_not_of("abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ", 1);
79
+ if (pos != std::string::npos) sel.erase(pos, std::string::npos);
80
+ size_t i = sel.length();
81
+ while (i -- > 0) { sel.at(i) = tolower(sel.at(i)); }
82
+
83
+ // CSS Level 1 - Recommendation
84
+ if (sel == ":link") return true;
85
+ if (sel == ":visited") return true;
86
+ if (sel == ":active") return true;
87
+
88
+ // CSS Level 2 (Revision 1) - Recommendation
89
+ if (sel == ":lang") return true;
90
+ if (sel == ":first-child") return true;
91
+ if (sel == ":hover") return true;
92
+ if (sel == ":focus") return true;
93
+ // disabled - also valid properties
94
+ // if (sel == ":left") return true;
95
+ // if (sel == ":right") return true;
96
+ if (sel == ":first") return true;
97
+
98
+ // Selectors Level 3 - Recommendation
99
+ if (sel == ":target") return true;
100
+ if (sel == ":root") return true;
101
+ if (sel == ":nth-child") return true;
102
+ if (sel == ":nth-last-of-child") return true;
103
+ if (sel == ":nth-of-type") return true;
104
+ if (sel == ":nth-last-of-type") return true;
105
+ if (sel == ":last-child") return true;
106
+ if (sel == ":first-of-type") return true;
107
+ if (sel == ":last-of-type") return true;
108
+ if (sel == ":only-child") return true;
109
+ if (sel == ":only-of-type") return true;
110
+ if (sel == ":empty") return true;
111
+ if (sel == ":not") return true;
112
+
113
+ // CSS Basic User Interface Module Level 3 - Working Draft
114
+ if (sel == ":default") return true;
115
+ if (sel == ":valid") return true;
116
+ if (sel == ":invalid") return true;
117
+ if (sel == ":in-range") return true;
118
+ if (sel == ":out-of-range") return true;
119
+ if (sel == ":required") return true;
120
+ if (sel == ":optional") return true;
121
+ if (sel == ":read-only") return true;
122
+ if (sel == ":read-write") return true;
123
+ if (sel == ":dir") return true;
124
+ if (sel == ":enabled") return true;
125
+ if (sel == ":disabled") return true;
126
+ if (sel == ":checked") return true;
127
+ if (sel == ":indeterminate") return true;
128
+ if (sel == ":nth-last-child") return true;
129
+
130
+ // Selectors Level 4 - Working Draft
131
+ if (sel == ":any-link") return true;
132
+ if (sel == ":local-link") return true;
133
+ if (sel == ":scope") return true;
134
+ if (sel == ":active-drop-target") return true;
135
+ if (sel == ":valid-drop-target") return true;
136
+ if (sel == ":invalid-drop-target") return true;
137
+ if (sel == ":current") return true;
138
+ if (sel == ":past") return true;
139
+ if (sel == ":future") return true;
140
+ if (sel == ":placeholder-shown") return true;
141
+ if (sel == ":user-error") return true;
142
+ if (sel == ":blank") return true;
143
+ if (sel == ":nth-match") return true;
144
+ if (sel == ":nth-last-match") return true;
145
+ if (sel == ":nth-column") return true;
146
+ if (sel == ":nth-last-column") return true;
147
+ if (sel == ":matches") return true;
148
+
149
+ // Fullscreen API - Living Standard
150
+ if (sel == ":fullscreen") return true;
151
+
152
+ // not a pseudo selector
153
+ return false;
154
+
155
+ }
156
+
157
+ static size_t findFirstCharacter (std::string& sass, size_t pos)
158
+ {
159
+ return sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE, pos);
160
+ }
161
+
162
+ static size_t findLastCharacter (std::string& sass, size_t pos)
163
+ {
164
+ return sass.find_last_not_of(SASS2SCSS_FIND_WHITESPACE, pos);
165
+ }
166
+
167
+ static bool isUrl (std::string& sass, size_t pos)
168
+ {
169
+ return sass[pos] == 'u' && sass[pos+1] == 'r' && sass[pos+2] == 'l' && sass[pos+3] == '(';
170
+ }
171
+
172
+ // check if there is some char data
173
+ // will ignore everything in comments
174
+ static bool hasCharData (std::string& sass)
175
+ {
176
+
177
+ size_t col_pos = 0;
178
+
179
+ while (true)
180
+ {
181
+
182
+ // try to find some meaningfull char
183
+ col_pos = sass.find_first_not_of(" \t\n\v\f\r", col_pos);
184
+
185
+ // there was no meaningfull char found
186
+ if (col_pos == std::string::npos) return false;
187
+
188
+ // found a multiline comment opener
189
+ if (sass.substr(col_pos, 2) == "/*")
190
+ {
191
+ // find the multiline comment closer
192
+ col_pos = sass.find("*/", col_pos);
193
+ // maybe we did not find the closer here
194
+ if (col_pos == std::string::npos) return false;
195
+ // skip closer
196
+ col_pos += 2;
197
+ }
198
+ else
199
+ {
200
+ return true;
201
+ }
202
+
203
+ }
204
+
205
+ }
206
+ // EO hasCharData
207
+
208
+ // find src comment opener
209
+ // correctly skips quoted strings
210
+ static size_t findCommentOpener (std::string& sass)
211
+ {
212
+
213
+ size_t col_pos = 0;
214
+ bool apoed = false;
215
+ bool quoted = false;
216
+ bool comment = false;
217
+ size_t brackets = 0;
218
+
219
+ while (col_pos != std::string::npos)
220
+ {
221
+
222
+ // process all interesting chars
223
+ col_pos = sass.find_first_of("\"\'/\\*()", col_pos);
224
+
225
+ // assertion for valid result
226
+ if (col_pos != std::string::npos)
227
+ {
228
+ char character = sass.at(col_pos);
229
+
230
+ if (character == '(')
231
+ {
232
+ if (!quoted && !apoed) brackets ++;
233
+ }
234
+ else if (character == ')')
235
+ {
236
+ if (!quoted && !apoed) brackets --;
237
+ }
238
+ else if (character == '\"')
239
+ {
240
+ // invert quote bool
241
+ if (!apoed && !comment) quoted = !quoted;
242
+ }
243
+ else if (character == '\'')
244
+ {
245
+ // invert quote bool
246
+ if (!quoted && !comment) apoed = !apoed;
247
+ }
248
+ else if (col_pos > 0 && character == '/')
249
+ {
250
+ if (sass.at(col_pos - 1) == '*')
251
+ {
252
+ comment = false;
253
+ }
254
+ // next needs to be a slash too
255
+ else if (sass.at(col_pos - 1) == '/')
256
+ {
257
+ // only found if not in single or double quote, bracket or comment
258
+ if (!quoted && !apoed && !comment && brackets == 0) return col_pos - 1;
259
+ }
260
+ }
261
+ else if (character == '\\')
262
+ {
263
+ // skip next char if in quote
264
+ if (quoted || apoed) col_pos ++;
265
+ }
266
+ // this might be a comment opener
267
+ else if (col_pos > 0 && character == '*')
268
+ {
269
+ // opening a multiline comment
270
+ if (sass.at(col_pos - 1) == '/')
271
+ {
272
+ // we are now in a comment
273
+ if (!quoted && !apoed) comment = true;
274
+ }
275
+ }
276
+
277
+ // skip char
278
+ col_pos ++;
279
+
280
+ }
281
+
282
+ }
283
+ // EO while
284
+
285
+ return col_pos;
286
+
287
+ }
288
+ // EO findCommentOpener
289
+
290
+ // remove multiline comments from sass string
291
+ // correctly skips quoted strings
292
+ static std::string removeMultilineComment (std::string &sass)
293
+ {
294
+
295
+ std::string clean = "";
296
+ size_t col_pos = 0;
297
+ size_t open_pos = 0;
298
+ size_t close_pos = 0;
299
+ bool apoed = false;
300
+ bool quoted = false;
301
+ bool comment = false;
302
+
303
+ // process sass til string end
304
+ while (col_pos != std::string::npos)
305
+ {
306
+
307
+ // process all interesting chars
308
+ col_pos = sass.find_first_of("\"\'/\\*", col_pos);
309
+
310
+ // assertion for valid result
311
+ if (col_pos != std::string::npos)
312
+ {
313
+ char character = sass.at(col_pos);
314
+
315
+ // found quoted string delimiter
316
+ if (character == '\"')
317
+ {
318
+ if (!apoed && !comment) quoted = !quoted;
319
+ }
320
+ else if (character == '\'')
321
+ {
322
+ if (!quoted && !comment) apoed = !apoed;
323
+ }
324
+ // found possible comment closer
325
+ else if (character == '/')
326
+ {
327
+ // look back to see if it is actually a closer
328
+ if (comment && col_pos > 0 && sass.at(col_pos - 1) == '*')
329
+ {
330
+ close_pos = col_pos + 1; comment = false;
331
+ }
332
+ }
333
+ else if (character == '\\')
334
+ {
335
+ // skip escaped char
336
+ if (quoted || apoed) col_pos ++;
337
+ }
338
+ // this might be a comment opener
339
+ else if (character == '*')
340
+ {
341
+ // look back to see if it is actually an opener
342
+ if (!quoted && !apoed && col_pos > 0 && sass.at(col_pos - 1) == '/')
343
+ {
344
+ comment = true; open_pos = col_pos - 1;
345
+ clean += sass.substr(close_pos, open_pos - close_pos);
346
+ }
347
+ }
348
+
349
+ // skip char
350
+ col_pos ++;
351
+
352
+ }
353
+
354
+ }
355
+ // EO while
356
+
357
+ // add final parts (add half open comment text)
358
+ if (comment) clean += sass.substr(open_pos);
359
+ else clean += sass.substr(close_pos);
360
+
361
+ // return string
362
+ return clean;
363
+
364
+ }
365
+ // EO removeMultilineComment
366
+
367
+ // right trim a given string
368
+ std::string rtrim(const std::string &sass)
369
+ {
370
+ std::string trimmed = sass;
371
+ size_t pos_ws = trimmed.find_last_not_of(" \t\n\v\f\r");
372
+ if (pos_ws != std::string::npos)
373
+ { trimmed.erase(pos_ws + 1); }
374
+ else { trimmed.clear(); }
375
+ return trimmed;
376
+ }
377
+ // EO rtrim
378
+
379
+ // flush whitespace and print additional text, but
380
+ // only print additional chars and buffer whitespace
381
+ std::string flush (std::string& sass, converter& converter)
382
+ {
383
+
384
+ // return flushed
385
+ std::string scss = "";
386
+
387
+ // print whitespace buffer
388
+ scss += PRETTIFY(converter) > 0 ?
389
+ converter.whitespace : "";
390
+ // reset whitespace buffer
391
+ converter.whitespace = "";
392
+
393
+ // remove possible newlines from string
394
+ size_t pos_right = sass.find_last_not_of("\n\r");
395
+ if (pos_right == std::string::npos) return scss;
396
+
397
+ // get the linefeeds from the string
398
+ std::string lfs = sass.substr(pos_right + 1);
399
+ sass = sass.substr(0, pos_right + 1);
400
+
401
+ // find some source comment opener
402
+ size_t comment_pos = findCommentOpener(sass);
403
+ // check if there was a source comment
404
+ if (comment_pos != std::string::npos)
405
+ {
406
+ // convert comment (but only outside other coments)
407
+ if (CONVERT_COMMENT(converter) && !IS_COMMENT(converter))
408
+ {
409
+ // convert to multiline comment
410
+ sass.at(comment_pos + 1) = '*';
411
+ // add comment node to the whitespace
412
+ sass += " */";
413
+ }
414
+ // not at line start
415
+ if (comment_pos > 0)
416
+ {
417
+ // also include whitespace before the actual comment opener
418
+ size_t ws_pos = sass.find_last_not_of(SASS2SCSS_FIND_WHITESPACE, comment_pos - 1);
419
+ comment_pos = ws_pos == std::string::npos ? 0 : ws_pos + 1;
420
+ }
421
+ if (!STRIP_COMMENT(converter))
422
+ {
423
+ // add comment node to the whitespace
424
+ converter.whitespace += sass.substr(comment_pos);
425
+ }
426
+ else
427
+ {
428
+ // sass = removeMultilineComments(sass);
429
+ }
430
+ // update the actual sass code
431
+ sass = sass.substr(0, comment_pos);
432
+ }
433
+
434
+ // add newline as getline discharged it
435
+ converter.whitespace += lfs + "\n";
436
+
437
+ // maybe remove any leading whitespace
438
+ if (PRETTIFY(converter) == 0)
439
+ {
440
+ // remove leading whitespace and update string
441
+ size_t pos_left = sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE);
442
+ if (pos_left != std::string::npos) sass = sass.substr(pos_left);
443
+ }
444
+
445
+ // add flushed data
446
+ scss += sass;
447
+
448
+ // return string
449
+ return scss;
450
+
451
+ }
452
+ // EO flush
453
+
454
+ // process a line of the sass text
455
+ std::string process (std::string& sass, converter& converter)
456
+ {
457
+
458
+ // resulting string
459
+ std::string scss = "";
460
+
461
+ // strip multi line comments
462
+ if (STRIP_COMMENT(converter))
463
+ {
464
+ sass = removeMultilineComment(sass);
465
+ }
466
+
467
+ // right trim input
468
+ sass = rtrim(sass);
469
+
470
+ // get postion of first meaningfull character in string
471
+ size_t pos_left = sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE);
472
+
473
+ // special case for final run
474
+ if (converter.end_of_file) pos_left = 0;
475
+
476
+ // maybe has only whitespace
477
+ if (pos_left == std::string::npos)
478
+ {
479
+ // just add complete whitespace
480
+ converter.whitespace += sass + "\n";
481
+ }
482
+ // have meaningfull first char
483
+ else
484
+ {
485
+
486
+ // extract and store indentation string
487
+ std::string indent = sass.substr(0, pos_left);
488
+
489
+ // check if current line starts a comment
490
+ std::string open = sass.substr(pos_left, 2);
491
+
492
+ // line has less or same indentation
493
+ // finalize previous open parser context
494
+ if (indent.length() <= INDENT(converter).length())
495
+ {
496
+
497
+ // close multilinie comment
498
+ if (IS_CSS_COMMENT(converter))
499
+ {
500
+ // check if comments will be stripped anyway
501
+ if (!STRIP_COMMENT(converter)) scss += " */";
502
+ }
503
+ // close src comment comment
504
+ else if (IS_SRC_COMMENT(converter))
505
+ {
506
+ // add a newline to avoid closer on same line
507
+ // this would put the bracket in the comment node
508
+ // no longer needed since we parse them correctly
509
+ // if (KEEP_COMMENT(converter)) scss += "\n";
510
+ }
511
+ // close css properties
512
+ else if (converter.property)
513
+ {
514
+ // add closer unless in concat mode
515
+ if (!converter.comma)
516
+ {
517
+ // if there was no colon we have a selector
518
+ // looks like there were no inner properties
519
+ if (converter.selector) scss += " {}";
520
+ // add final semicolon
521
+ else if (!converter.semicolon) scss += ";";
522
+ }
523
+ }
524
+
525
+ // reset comment state
526
+ converter.comment = "";
527
+
528
+ }
529
+
530
+ // make sure we close every "higher" block
531
+ while (indent.length() < INDENT(converter).length())
532
+ {
533
+ // pop stacked context
534
+ converter.indents.pop();
535
+ // print close bracket
536
+ if (IS_PARSING(converter))
537
+ { scss += closer(converter); }
538
+ else { scss += " */"; }
539
+ // reset comment state
540
+ converter.comment = "";
541
+ }
542
+
543
+ // reset converter state
544
+ converter.selector = false;
545
+
546
+ // looks like some undocumented behavior ...
547
+ // https://github.com/mgreter/sass2scss/issues/29
548
+ if (sass.substr(pos_left, 1) == "\\") {
549
+ converter.selector = true;
550
+ sass[pos_left] = ' ';
551
+ }
552
+
553
+ // check if we have sass property syntax
554
+ if (sass.substr(pos_left, 1) == ":" && sass.substr(pos_left, 2) != "::")
555
+ {
556
+
557
+ // default to a selector
558
+ // change back if property found
559
+ converter.selector = true;
560
+ // get postion of first whitespace char
561
+ size_t pos_wspace = sass.find_first_of(SASS2SCSS_FIND_WHITESPACE, pos_left);
562
+ // assertion check for valid result
563
+ if (pos_wspace != std::string::npos)
564
+ {
565
+ // get the possible pseudo selector
566
+ std::string pseudo = sass.substr(pos_left, pos_wspace - pos_left);
567
+ // get position of the first real property value char
568
+ // pseudo selectors get this far, but have no actual value
569
+ size_t pos_value = sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE, pos_wspace);
570
+ // assertion check for valid result
571
+ if (pos_value != std::string::npos)
572
+ {
573
+ // only process if not (fallowed by a semicolon or is a pseudo selector)
574
+ if (!(sass.at(pos_value) == ':' || isPseudoSelector(pseudo)))
575
+ {
576
+ // create new string by interchanging the colon sign for property and value
577
+ sass = indent + sass.substr(pos_left + 1, pos_wspace - pos_left - 1) + ":" + sass.substr(pos_wspace);
578
+ // try to find a colon in the current line, but only ...
579
+ size_t pos_colon = sass.find_first_not_of(":", pos_left);
580
+ // assertion for valid result
581
+ if (pos_colon != std::string::npos)
582
+ {
583
+ // ... after the first word (skip begining colons)
584
+ pos_colon = sass.find_first_of(":", pos_colon);
585
+ // it is a selector if there was no colon found
586
+ converter.selector = pos_colon == std::string::npos;
587
+ }
588
+ }
589
+ }
590
+ }
591
+
592
+ // check if we have a BEM property (one colon and no selector)
593
+ if (sass.substr(pos_left, 1) == ":" && converter.selector == true) {
594
+ size_t pos_wspace = sass.find_first_of(SASS2SCSS_FIND_WHITESPACE, pos_left);
595
+ sass = indent + sass.substr(pos_left + 1, pos_wspace) + ":";
596
+ }
597
+
598
+ }
599
+
600
+ // terminate some statements immediately
601
+ else if (
602
+ sass.substr(pos_left, 5) == "@warn" ||
603
+ sass.substr(pos_left, 6) == "@debug" ||
604
+ sass.substr(pos_left, 6) == "@error" ||
605
+ sass.substr(pos_left, 6) == "@value" ||
606
+ sass.substr(pos_left, 8) == "@charset" ||
607
+ sass.substr(pos_left, 10) == "@namespace"
608
+ ) { sass = indent + sass.substr(pos_left); }
609
+ // replace some specific sass shorthand directives (if not fallowed by a white space character)
610
+ else if (sass.substr(pos_left, 1) == "=")
611
+ { sass = indent + "@mixin " + sass.substr(pos_left + 1); }
612
+ else if (sass.substr(pos_left, 1) == "+")
613
+ {
614
+ // must be followed by a mixin call (no whitespace afterwards or at ending directly)
615
+ if (sass[pos_left+1] != 0 && sass[pos_left+1] != ' ' && sass[pos_left+1] != '\t') {
616
+ sass = indent + "@include " + sass.substr(pos_left + 1);
617
+ }
618
+ }
619
+
620
+ // add quotes for import if needed
621
+ else if (sass.substr(pos_left, 7) == "@import")
622
+ {
623
+ // get positions for the actual import url
624
+ size_t pos_import = sass.find_first_of(SASS2SCSS_FIND_WHITESPACE, pos_left + 7);
625
+ size_t pos = sass.find_first_not_of(SASS2SCSS_FIND_WHITESPACE, pos_import);
626
+ size_t start = pos;
627
+ bool in_dqstr = false;
628
+ bool in_sqstr = false;
629
+ bool is_escaped = false;
630
+ do {
631
+ if (is_escaped) {
632
+ is_escaped = false;
633
+ }
634
+ else if (sass[pos] == '\\') {
635
+ is_escaped = true;
636
+ }
637
+ else if (sass[pos] == '"') {
638
+ if (!in_sqstr) in_dqstr = ! in_dqstr;
639
+ }
640
+ else if (sass[pos] == '\'') {
641
+ if (!in_dqstr) in_sqstr = ! in_sqstr;
642
+ }
643
+ else if (in_dqstr || in_sqstr) {
644
+ // skip over quoted stuff
645
+ }
646
+ else if (sass[pos] == ',' || sass[pos] == 0) {
647
+ if (sass[start] != '"' && sass[start] != '\'' && !isUrl(sass, start)) {
648
+ size_t end = findLastCharacter(sass, pos - 1) + 1;
649
+ sass = sass.replace(end, 0, "\"");
650
+ sass = sass.replace(start, 0, "\"");
651
+ pos += 2;
652
+ }
653
+ start = findFirstCharacter(sass, pos + 1);
654
+ }
655
+ }
656
+ while (sass[pos++] != 0);
657
+
658
+ }
659
+ else if (
660
+ sass.substr(pos_left, 7) != "@return" &&
661
+ sass.substr(pos_left, 7) != "@extend" &&
662
+ sass.substr(pos_left, 8) != "@include" &&
663
+ sass.substr(pos_left, 8) != "@content"
664
+ ) {
665
+
666
+ // probably a selector anyway
667
+ converter.selector = true;
668
+ // try to find first colon in the current line
669
+ size_t pos_colon = sass.find_first_of(":", pos_left);
670
+ // assertion that we have a colon
671
+ if (pos_colon != std::string::npos)
672
+ {
673
+ // it is not a selector if we have a space after a colon
674
+ if (sass[pos_colon+1] == ' ') converter.selector = false;
675
+ if (sass[pos_colon+1] == ' ') converter.selector = false;
676
+ }
677
+
678
+ }
679
+
680
+ // current line has more indentation
681
+ if (indent.length() >= INDENT(converter).length())
682
+ {
683
+ // not in comment mode
684
+ if (IS_PARSING(converter))
685
+ {
686
+ // has meaningfull chars
687
+ if (hasCharData(sass))
688
+ {
689
+ // is probably a property
690
+ // also true for selectors
691
+ converter.property = true;
692
+ }
693
+ }
694
+ }
695
+ // current line has more indentation
696
+ if (indent.length() > INDENT(converter).length())
697
+ {
698
+ // not in comment mode
699
+ if (IS_PARSING(converter))
700
+ {
701
+ // had meaningfull chars
702
+ if (converter.property)
703
+ {
704
+ // print block opener
705
+ scss += opener(converter);
706
+ // push new stack context
707
+ converter.indents.push("");
708
+ // store block indentation
709
+ INDENT(converter) = indent;
710
+ }
711
+ }
712
+ // is and will be a src comment
713
+ else if (!IS_CSS_COMMENT(converter))
714
+ {
715
+ // scss does not allow multiline src comments
716
+ // therefore add forward slashes to all lines
717
+ sass.at(INDENT(converter).length()+0) = '/';
718
+ // there is an edge case here if indentation
719
+ // is minimal (will overwrite the fist char)
720
+ sass.at(INDENT(converter).length()+1) = '/';
721
+ // could code around that, but I dont' think
722
+ // this will ever be the cause for any trouble
723
+ }
724
+ }
725
+
726
+ // line is opening a new comment
727
+ if (open == "/*" || open == "//")
728
+ {
729
+ // reset the property state
730
+ converter.property = false;
731
+ // close previous comment
732
+ if (IS_CSS_COMMENT(converter) && open != "")
733
+ {
734
+ if (!STRIP_COMMENT(converter) && !CONVERT_COMMENT(converter)) scss += " */";
735
+ }
736
+ // force single line comments
737
+ // into a correct css comment
738
+ if (CONVERT_COMMENT(converter))
739
+ {
740
+ if (IS_PARSING(converter))
741
+ { sass.at(pos_left + 1) = '*'; }
742
+ }
743
+ // set comment flag
744
+ converter.comment = open;
745
+
746
+ }
747
+
748
+ // flush data only under certain conditions
749
+ if (!(
750
+ // strip css and src comments if option is set
751
+ (IS_COMMENT(converter) && STRIP_COMMENT(converter)) ||
752
+ // strip src comment even if strip option is not set
753
+ // but only if the keep src comment option is not set
754
+ (IS_SRC_COMMENT(converter) && ! KEEP_COMMENT(converter))
755
+ ))
756
+ {
757
+ // flush data and buffer whitespace
758
+ scss += flush(sass, converter);
759
+ }
760
+
761
+ // get postion of last meaningfull char
762
+ size_t pos_right = sass.find_last_not_of(SASS2SCSS_FIND_WHITESPACE);
763
+
764
+ // check for invalid result
765
+ if (pos_right != std::string::npos)
766
+ {
767
+
768
+ // get the last meaningfull char
769
+ std::string close = sass.substr(pos_right, 1);
770
+
771
+ // check if next line should be concatenated (list mode)
772
+ converter.comma = IS_PARSING(converter) && close == ",";
773
+ converter.semicolon = IS_PARSING(converter) && close == ";";
774
+
775
+ // check if we have more than
776
+ // one meaningfull char
777
+ if (pos_right > 0)
778
+ {
779
+
780
+ // get the last two chars from string
781
+ std::string close = sass.substr(pos_right - 1, 2);
782
+ // update parser status for expicitly closed comment
783
+ if (close == "*/") converter.comment = "";
784
+
785
+ }
786
+
787
+ }
788
+ // EO have meaningfull chars from end
789
+
790
+ }
791
+ // EO have meaningfull chars from start
792
+
793
+ // return scss
794
+ return scss;
795
+
796
+ }
797
+ // EO process
798
+
799
+ // read line with either CR, LF or CR LF format
800
+ // http://stackoverflow.com/a/6089413/1550314
801
+ static std::istream& safeGetline(std::istream& is, std::string& t)
802
+ {
803
+ t.clear();
804
+
805
+ // The characters in the stream are read one-by-one using a std::streambuf.
806
+ // That is faster than reading them one-by-one using the std::istream.
807
+ // Code that uses streambuf this way must be guarded by a sentry object.
808
+ // The sentry object performs various tasks,
809
+ // such as thread synchronization and updating the stream state.
810
+
811
+ std::istream::sentry se(is, true);
812
+ std::streambuf* sb = is.rdbuf();
813
+
814
+ for(;;) {
815
+ int c = sb->sbumpc();
816
+ switch (c) {
817
+ case '\n':
818
+ return is;
819
+ case '\r':
820
+ if(sb->sgetc() == '\n')
821
+ sb->sbumpc();
822
+ return is;
823
+ case EOF:
824
+ // Also handle the case when the last line has no line ending
825
+ if(t.empty())
826
+ is.setstate(std::ios::eofbit);
827
+ return is;
828
+ default:
829
+ t += (char)c;
830
+ }
831
+ }
832
+ }
833
+
834
+ // the main converter function for c++
835
+ char* sass2scss (const std::string& sass, const int options)
836
+ {
837
+
838
+ // local variables
839
+ std::string line;
840
+ std::string scss = "";
841
+ std::stringstream stream(sass);
842
+
843
+ // create converter variable
844
+ converter converter;
845
+ // initialise all options
846
+ converter.comma = false;
847
+ converter.property = false;
848
+ converter.selector = false;
849
+ converter.semicolon = false;
850
+ converter.end_of_file = false;
851
+ converter.comment = "";
852
+ converter.whitespace = "";
853
+ converter.indents.push("");
854
+ converter.options = options;
855
+
856
+ // read line by line and process them
857
+ while(safeGetline(stream, line) && !stream.eof())
858
+ { scss += process(line, converter); }
859
+
860
+ // create mutable string
861
+ std::string closer = "";
862
+ // set the end of file flag
863
+ converter.end_of_file = true;
864
+ // process to close all open blocks
865
+ scss += process(closer, converter);
866
+
867
+ // allocate new memory on the heap
868
+ // caller has to free it after use
869
+ char * cstr = (char*) malloc (scss.length() + 1);
870
+ // create a copy of the string
871
+ strcpy (cstr, scss.c_str());
872
+ // return pointer
873
+ return &cstr[0];
874
+
875
+ }
876
+ // EO sass2scss
877
+
878
+ }
879
+ // EO namespace
880
+
881
+ // implement for c
882
+ extern "C"
883
+ {
884
+
885
+ char* ADDCALL sass2scss (const char* sass, const int options)
886
+ {
887
+ return Sass::sass2scss(sass, options);
888
+ }
889
+
890
+ // Get compiled sass2scss version
891
+ const char* ADDCALL sass2scss_version(void) {
892
+ return SASS2SCSS_VERSION;
893
+ }
894
+
895
+ }