haml 3.2.0.alpha.10 → 3.2.0.alpha.13

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of haml might be problematic. Click here for more details.

Files changed (389) hide show
  1. data/.yardopts +19 -7
  2. data/CHANGELOG.md +1224 -0
  3. data/FAQ.md +157 -0
  4. data/README.md +99 -62
  5. data/REFERENCE.md +1404 -0
  6. data/Rakefile +52 -341
  7. data/init.rb +1 -18
  8. data/lib/haml.rb +6 -30
  9. data/lib/haml/buffer.rb +37 -16
  10. data/lib/haml/compiler.rb +52 -13
  11. data/lib/haml/engine.rb +61 -44
  12. data/lib/haml/exec.rb +21 -4
  13. data/lib/haml/filters.rb +136 -166
  14. data/lib/haml/helpers.rb +37 -10
  15. data/lib/haml/helpers/action_view_extensions.rb +2 -1
  16. data/lib/haml/helpers/action_view_mods.rb +67 -181
  17. data/lib/haml/helpers/rails_323_textarea_fix.rb +39 -0
  18. data/lib/haml/helpers/xss_mods.rb +9 -11
  19. data/lib/haml/html.rb +22 -9
  20. data/lib/haml/html/erb.rb +1 -1
  21. data/lib/haml/parser.rb +22 -15
  22. data/lib/haml/railtie.rb +2 -13
  23. data/lib/haml/template.rb +18 -85
  24. data/lib/haml/template/options.rb +1 -1
  25. data/lib/haml/template/plugin.rb +15 -101
  26. data/lib/haml/util.rb +120 -603
  27. data/lib/haml/version.rb +1 -107
  28. data/test/{haml/engine_test.rb → engine_test.rb} +137 -143
  29. data/test/{haml/erb → erb}/_av_partial_1.erb +1 -1
  30. data/test/{haml/erb → erb}/_av_partial_2.erb +1 -1
  31. data/test/{haml/erb → erb}/action_view.erb +1 -1
  32. data/test/{haml/erb → erb}/standard.erb +0 -0
  33. data/test/filters_test.rb +141 -0
  34. data/test/gemfiles/Gemfile.rails-3.0.x +4 -6
  35. data/test/gemfiles/Gemfile.rails-3.1.x +5 -6
  36. data/test/gemfiles/Gemfile.rails-3.2.x +6 -0
  37. data/test/haml-spec/LICENSE +14 -0
  38. data/test/{haml/spec → haml-spec}/README.md +26 -17
  39. data/test/haml-spec/lua_haml_spec.lua +38 -0
  40. data/test/haml-spec/perl_haml_test.pl +81 -0
  41. data/test/haml-spec/ruby_haml_test.rb +23 -0
  42. data/test/{haml/spec → haml-spec}/tests.json +132 -54
  43. data/test/{haml/helper_test.rb → helper_test.rb} +50 -36
  44. data/test/{haml/html2haml → html2haml}/erb_tests.rb +0 -0
  45. data/test/{haml/html2haml_test.rb → html2haml_test.rb} +11 -5
  46. data/test/{haml/markaby → markaby}/standard.mab +0 -0
  47. data/test/{haml/mocks → mocks}/article.rb +0 -0
  48. data/test/{haml/results → results}/content_for_layout.xhtml +0 -0
  49. data/test/{haml/results → results}/eval_suppressed.xhtml +0 -0
  50. data/test/{haml/results → results}/helpers.xhtml +0 -0
  51. data/test/{haml/results → results}/helpful.xhtml +0 -0
  52. data/test/{haml/results → results}/just_stuff.xhtml +0 -0
  53. data/test/{haml/results → results}/list.xhtml +0 -0
  54. data/test/{haml/results → results}/nuke_inner_whitespace.xhtml +0 -0
  55. data/test/{haml/results → results}/nuke_outer_whitespace.xhtml +0 -0
  56. data/test/{haml/results → results}/original_engine.xhtml +0 -0
  57. data/test/{haml/results → results}/partial_layout.xhtml +0 -0
  58. data/test/{haml/results → results}/partials.xhtml +0 -0
  59. data/test/{haml/results → results}/render_layout.xhtml +0 -0
  60. data/test/{haml/results → results}/silent_script.xhtml +1 -1
  61. data/test/{haml/results → results}/standard.xhtml +0 -0
  62. data/test/{haml/results → results}/tag_parsing.xhtml +0 -0
  63. data/test/{haml/results → results}/very_basic.xhtml +0 -0
  64. data/test/{haml/results → results}/whitespace_handling.xhtml +46 -50
  65. data/test/{haml/template_test.rb → template_test.rb} +20 -81
  66. data/test/{haml/templates → templates}/_av_partial_1.haml +1 -1
  67. data/test/{haml/templates → templates}/_av_partial_1_ugly.haml +1 -1
  68. data/test/{haml/templates → templates}/_av_partial_2.haml +1 -1
  69. data/test/{haml/templates → templates}/_av_partial_2_ugly.haml +1 -1
  70. data/test/{haml/templates → templates}/_layout.erb +0 -0
  71. data/test/{haml/templates → templates}/_layout_for_partial.haml +0 -0
  72. data/test/{haml/templates → templates}/_partial.haml +0 -0
  73. data/test/{haml/templates → templates}/_text_area.haml +0 -0
  74. data/test/{haml/templates → templates}/action_view.haml +1 -1
  75. data/test/{haml/templates → templates}/action_view_ugly.haml +1 -1
  76. data/test/{haml/templates → templates}/breakage.haml +0 -0
  77. data/test/{haml/templates → templates}/content_for_layout.haml +0 -0
  78. data/test/{haml/templates → templates}/eval_suppressed.haml +0 -0
  79. data/test/{haml/templates → templates}/helpers.haml +0 -0
  80. data/test/{haml/templates → templates}/helpful.haml +0 -0
  81. data/test/{haml/templates → templates}/just_stuff.haml +0 -0
  82. data/test/{haml/templates → templates}/list.haml +0 -0
  83. data/test/{haml/templates → templates}/nuke_inner_whitespace.haml +0 -0
  84. data/test/{haml/templates → templates}/nuke_outer_whitespace.haml +0 -0
  85. data/test/{haml/templates → templates}/original_engine.haml +0 -0
  86. data/test/templates/partial_layout.haml +3 -0
  87. data/test/{haml/templates → templates}/partialize.haml +0 -0
  88. data/test/{haml/templates → templates}/partials.haml +0 -0
  89. data/test/{haml/templates → templates}/render_layout.haml +0 -0
  90. data/test/{haml/templates → templates}/silent_script.haml +2 -2
  91. data/test/{haml/templates → templates}/standard.haml +0 -0
  92. data/test/{haml/templates → templates}/standard_ugly.haml +0 -0
  93. data/test/{haml/templates → templates}/tag_parsing.haml +0 -0
  94. data/test/{haml/templates → templates}/very_basic.haml +0 -0
  95. data/test/{haml/templates → templates}/whitespace_handling.haml +0 -0
  96. data/test/test_helper.rb +42 -34
  97. data/test/util_test.rb +80 -0
  98. metadata +259 -427
  99. data/CONTRIBUTING +0 -3
  100. data/REVISION +0 -1
  101. data/VERSION +0 -1
  102. data/VERSION_NAME +0 -1
  103. data/extra/update_watch.rb +0 -13
  104. data/lib/haml/root.rb +0 -7
  105. data/lib/haml/shared.rb +0 -78
  106. data/lib/haml/template/patch.rb +0 -58
  107. data/lib/sass.rb +0 -8
  108. data/lib/sass/plugin.rb +0 -10
  109. data/lib/sass/rails2_shim.rb +0 -9
  110. data/lib/sass/rails3_shim.rb +0 -16
  111. data/test/benchmark.rb +0 -91
  112. data/test/gemfiles/Gemfile.rails-2.0.x +0 -8
  113. data/test/gemfiles/Gemfile.rails-2.0.x.lock +0 -38
  114. data/test/gemfiles/Gemfile.rails-2.1.x +0 -8
  115. data/test/gemfiles/Gemfile.rails-2.1.x.lock +0 -38
  116. data/test/gemfiles/Gemfile.rails-2.2.x +0 -8
  117. data/test/gemfiles/Gemfile.rails-2.2.x.lock +0 -38
  118. data/test/gemfiles/Gemfile.rails-2.3.x +0 -8
  119. data/test/gemfiles/Gemfile.rails-2.3.x.lock +0 -40
  120. data/test/gemfiles/Gemfile.rails-3.0.x.lock +0 -85
  121. data/test/gemfiles/Gemfile.rails-3.1.x.lock +0 -98
  122. data/test/gemfiles/Gemfile.rails-xss-2.3.x +0 -9
  123. data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +0 -42
  124. data/test/haml/results/filters.xhtml +0 -62
  125. data/test/haml/spec/lua_haml_spec.lua +0 -30
  126. data/test/haml/spec/ruby_haml_test.rb +0 -19
  127. data/test/haml/spec_test.rb +0 -44
  128. data/test/haml/templates/filters.haml +0 -66
  129. data/test/haml/templates/partial_layout.haml +0 -10
  130. data/test/haml/util_test.rb +0 -300
  131. data/test/linked_rails.rb +0 -42
  132. data/vendor/sass/CONTRIBUTING +0 -3
  133. data/vendor/sass/MIT-LICENSE +0 -20
  134. data/vendor/sass/README.md +0 -201
  135. data/vendor/sass/Rakefile +0 -339
  136. data/vendor/sass/TODO +0 -39
  137. data/vendor/sass/VERSION +0 -1
  138. data/vendor/sass/VERSION_NAME +0 -1
  139. data/vendor/sass/bin/sass +0 -8
  140. data/vendor/sass/bin/sass-convert +0 -7
  141. data/vendor/sass/bin/scss +0 -8
  142. data/vendor/sass/doc-src/FAQ.md +0 -35
  143. data/vendor/sass/doc-src/INDENTED_SYNTAX.md +0 -210
  144. data/vendor/sass/doc-src/SASS_CHANGELOG.md +0 -2327
  145. data/vendor/sass/doc-src/SASS_REFERENCE.md +0 -1965
  146. data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +0 -155
  147. data/vendor/sass/ext/extconf.rb +0 -10
  148. data/vendor/sass/extra/update_watch.rb +0 -13
  149. data/vendor/sass/init.rb +0 -18
  150. data/vendor/sass/lib/sass.rb +0 -73
  151. data/vendor/sass/lib/sass/cache_stores.rb +0 -15
  152. data/vendor/sass/lib/sass/cache_stores/base.rb +0 -86
  153. data/vendor/sass/lib/sass/cache_stores/chain.rb +0 -33
  154. data/vendor/sass/lib/sass/cache_stores/filesystem.rb +0 -60
  155. data/vendor/sass/lib/sass/cache_stores/memory.rb +0 -47
  156. data/vendor/sass/lib/sass/cache_stores/null.rb +0 -25
  157. data/vendor/sass/lib/sass/callbacks.rb +0 -66
  158. data/vendor/sass/lib/sass/css.rb +0 -295
  159. data/vendor/sass/lib/sass/engine.rb +0 -878
  160. data/vendor/sass/lib/sass/environment.rb +0 -166
  161. data/vendor/sass/lib/sass/error.rb +0 -201
  162. data/vendor/sass/lib/sass/exec.rb +0 -672
  163. data/vendor/sass/lib/sass/importers.rb +0 -22
  164. data/vendor/sass/lib/sass/importers/base.rb +0 -139
  165. data/vendor/sass/lib/sass/importers/filesystem.rb +0 -149
  166. data/vendor/sass/lib/sass/less.rb +0 -382
  167. data/vendor/sass/lib/sass/logger.rb +0 -15
  168. data/vendor/sass/lib/sass/logger/base.rb +0 -32
  169. data/vendor/sass/lib/sass/logger/log_level.rb +0 -49
  170. data/vendor/sass/lib/sass/plugin.rb +0 -132
  171. data/vendor/sass/lib/sass/plugin/compiler.rb +0 -383
  172. data/vendor/sass/lib/sass/plugin/configuration.rb +0 -123
  173. data/vendor/sass/lib/sass/plugin/generic.rb +0 -15
  174. data/vendor/sass/lib/sass/plugin/merb.rb +0 -48
  175. data/vendor/sass/lib/sass/plugin/rack.rb +0 -60
  176. data/vendor/sass/lib/sass/plugin/rails.rb +0 -47
  177. data/vendor/sass/lib/sass/plugin/staleness_checker.rb +0 -173
  178. data/vendor/sass/lib/sass/railtie.rb +0 -9
  179. data/vendor/sass/lib/sass/repl.rb +0 -58
  180. data/vendor/sass/lib/sass/root.rb +0 -7
  181. data/vendor/sass/lib/sass/script.rb +0 -40
  182. data/vendor/sass/lib/sass/script/bool.rb +0 -18
  183. data/vendor/sass/lib/sass/script/color.rb +0 -480
  184. data/vendor/sass/lib/sass/script/css_lexer.rb +0 -29
  185. data/vendor/sass/lib/sass/script/css_parser.rb +0 -31
  186. data/vendor/sass/lib/sass/script/funcall.rb +0 -175
  187. data/vendor/sass/lib/sass/script/functions.rb +0 -1386
  188. data/vendor/sass/lib/sass/script/interpolation.rb +0 -79
  189. data/vendor/sass/lib/sass/script/lexer.rb +0 -339
  190. data/vendor/sass/lib/sass/script/list.rb +0 -83
  191. data/vendor/sass/lib/sass/script/literal.rb +0 -250
  192. data/vendor/sass/lib/sass/script/node.rb +0 -99
  193. data/vendor/sass/lib/sass/script/number.rb +0 -452
  194. data/vendor/sass/lib/sass/script/operation.rb +0 -99
  195. data/vendor/sass/lib/sass/script/parser.rb +0 -474
  196. data/vendor/sass/lib/sass/script/string.rb +0 -51
  197. data/vendor/sass/lib/sass/script/string_interpolation.rb +0 -103
  198. data/vendor/sass/lib/sass/script/unary_operation.rb +0 -64
  199. data/vendor/sass/lib/sass/script/variable.rb +0 -59
  200. data/vendor/sass/lib/sass/scss.rb +0 -17
  201. data/vendor/sass/lib/sass/scss/css_parser.rb +0 -46
  202. data/vendor/sass/lib/sass/scss/parser.rb +0 -960
  203. data/vendor/sass/lib/sass/scss/rx.rb +0 -128
  204. data/vendor/sass/lib/sass/scss/sass_parser.rb +0 -11
  205. data/vendor/sass/lib/sass/scss/script_lexer.rb +0 -15
  206. data/vendor/sass/lib/sass/scss/script_parser.rb +0 -25
  207. data/vendor/sass/lib/sass/scss/static_parser.rb +0 -40
  208. data/vendor/sass/lib/sass/selector.rb +0 -361
  209. data/vendor/sass/lib/sass/selector/abstract_sequence.rb +0 -62
  210. data/vendor/sass/lib/sass/selector/comma_sequence.rb +0 -81
  211. data/vendor/sass/lib/sass/selector/sequence.rb +0 -233
  212. data/vendor/sass/lib/sass/selector/simple.rb +0 -113
  213. data/vendor/sass/lib/sass/selector/simple_sequence.rb +0 -134
  214. data/vendor/sass/lib/sass/shared.rb +0 -78
  215. data/vendor/sass/lib/sass/tree/charset_node.rb +0 -22
  216. data/vendor/sass/lib/sass/tree/comment_node.rb +0 -90
  217. data/vendor/sass/lib/sass/tree/debug_node.rb +0 -18
  218. data/vendor/sass/lib/sass/tree/directive_node.rb +0 -23
  219. data/vendor/sass/lib/sass/tree/each_node.rb +0 -24
  220. data/vendor/sass/lib/sass/tree/extend_node.rb +0 -29
  221. data/vendor/sass/lib/sass/tree/for_node.rb +0 -36
  222. data/vendor/sass/lib/sass/tree/function_node.rb +0 -27
  223. data/vendor/sass/lib/sass/tree/if_node.rb +0 -52
  224. data/vendor/sass/lib/sass/tree/import_node.rb +0 -68
  225. data/vendor/sass/lib/sass/tree/media_node.rb +0 -32
  226. data/vendor/sass/lib/sass/tree/mixin_def_node.rb +0 -27
  227. data/vendor/sass/lib/sass/tree/mixin_node.rb +0 -32
  228. data/vendor/sass/lib/sass/tree/node.rb +0 -201
  229. data/vendor/sass/lib/sass/tree/prop_node.rb +0 -148
  230. data/vendor/sass/lib/sass/tree/return_node.rb +0 -18
  231. data/vendor/sass/lib/sass/tree/root_node.rb +0 -28
  232. data/vendor/sass/lib/sass/tree/rule_node.rb +0 -136
  233. data/vendor/sass/lib/sass/tree/variable_node.rb +0 -30
  234. data/vendor/sass/lib/sass/tree/visitors/base.rb +0 -75
  235. data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +0 -133
  236. data/vendor/sass/lib/sass/tree/visitors/convert.rb +0 -260
  237. data/vendor/sass/lib/sass/tree/visitors/cssize.rb +0 -175
  238. data/vendor/sass/lib/sass/tree/visitors/deep_copy.rb +0 -87
  239. data/vendor/sass/lib/sass/tree/visitors/perform.rb +0 -332
  240. data/vendor/sass/lib/sass/tree/visitors/set_options.rb +0 -97
  241. data/vendor/sass/lib/sass/tree/visitors/to_css.rb +0 -210
  242. data/vendor/sass/lib/sass/tree/warn_node.rb +0 -18
  243. data/vendor/sass/lib/sass/tree/while_node.rb +0 -18
  244. data/vendor/sass/lib/sass/util.rb +0 -721
  245. data/vendor/sass/lib/sass/util/subset_map.rb +0 -101
  246. data/vendor/sass/lib/sass/version.rb +0 -112
  247. data/vendor/sass/rails/init.rb +0 -1
  248. data/vendor/sass/sass.gemspec +0 -33
  249. data/vendor/sass/test/Gemfile +0 -4
  250. data/vendor/sass/test/Gemfile.lock +0 -19
  251. data/vendor/sass/test/sass/cache_test.rb +0 -89
  252. data/vendor/sass/test/sass/callbacks_test.rb +0 -61
  253. data/vendor/sass/test/sass/conversion_test.rb +0 -1199
  254. data/vendor/sass/test/sass/css2sass_test.rb +0 -373
  255. data/vendor/sass/test/sass/data/hsl-rgb.txt +0 -319
  256. data/vendor/sass/test/sass/engine_test.rb +0 -2567
  257. data/vendor/sass/test/sass/extend_test.rb +0 -1348
  258. data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  259. data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  260. data/vendor/sass/test/sass/functions_test.rb +0 -1038
  261. data/vendor/sass/test/sass/importer_test.rb +0 -192
  262. data/vendor/sass/test/sass/less_conversion_test.rb +0 -653
  263. data/vendor/sass/test/sass/logger_test.rb +0 -58
  264. data/vendor/sass/test/sass/mock_importer.rb +0 -49
  265. data/vendor/sass/test/sass/more_results/more1.css +0 -9
  266. data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +0 -26
  267. data/vendor/sass/test/sass/more_results/more_import.css +0 -29
  268. data/vendor/sass/test/sass/more_templates/_more_partial.sass +0 -2
  269. data/vendor/sass/test/sass/more_templates/more1.sass +0 -23
  270. data/vendor/sass/test/sass/more_templates/more_import.sass +0 -11
  271. data/vendor/sass/test/sass/plugin_test.rb +0 -472
  272. data/vendor/sass/test/sass/results/alt.css +0 -4
  273. data/vendor/sass/test/sass/results/basic.css +0 -9
  274. data/vendor/sass/test/sass/results/compact.css +0 -5
  275. data/vendor/sass/test/sass/results/complex.css +0 -86
  276. data/vendor/sass/test/sass/results/compressed.css +0 -1
  277. data/vendor/sass/test/sass/results/expanded.css +0 -19
  278. data/vendor/sass/test/sass/results/if.css +0 -3
  279. data/vendor/sass/test/sass/results/import.css +0 -31
  280. data/vendor/sass/test/sass/results/import_charset.css +0 -4
  281. data/vendor/sass/test/sass/results/import_charset_1_8.css +0 -4
  282. data/vendor/sass/test/sass/results/import_charset_ibm866.css +0 -4
  283. data/vendor/sass/test/sass/results/line_numbers.css +0 -49
  284. data/vendor/sass/test/sass/results/mixins.css +0 -95
  285. data/vendor/sass/test/sass/results/multiline.css +0 -24
  286. data/vendor/sass/test/sass/results/nested.css +0 -22
  287. data/vendor/sass/test/sass/results/options.css +0 -1
  288. data/vendor/sass/test/sass/results/parent_ref.css +0 -13
  289. data/vendor/sass/test/sass/results/script.css +0 -16
  290. data/vendor/sass/test/sass/results/scss_import.css +0 -31
  291. data/vendor/sass/test/sass/results/scss_importee.css +0 -2
  292. data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  293. data/vendor/sass/test/sass/results/subdir/subdir.css +0 -3
  294. data/vendor/sass/test/sass/results/units.css +0 -11
  295. data/vendor/sass/test/sass/results/warn.css +0 -0
  296. data/vendor/sass/test/sass/results/warn_imported.css +0 -0
  297. data/vendor/sass/test/sass/script_conversion_test.rb +0 -285
  298. data/vendor/sass/test/sass/script_test.rb +0 -514
  299. data/vendor/sass/test/sass/scss/css_test.rb +0 -922
  300. data/vendor/sass/test/sass/scss/rx_test.rb +0 -156
  301. data/vendor/sass/test/sass/scss/scss_test.rb +0 -1273
  302. data/vendor/sass/test/sass/scss/test_helper.rb +0 -37
  303. data/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  304. data/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +0 -4
  305. data/vendor/sass/test/sass/templates/_partial.sass +0 -2
  306. data/vendor/sass/test/sass/templates/alt.sass +0 -16
  307. data/vendor/sass/test/sass/templates/basic.sass +0 -23
  308. data/vendor/sass/test/sass/templates/bork1.sass +0 -2
  309. data/vendor/sass/test/sass/templates/bork2.sass +0 -2
  310. data/vendor/sass/test/sass/templates/bork3.sass +0 -2
  311. data/vendor/sass/test/sass/templates/bork4.sass +0 -2
  312. data/vendor/sass/test/sass/templates/bork5.sass +0 -3
  313. data/vendor/sass/test/sass/templates/compact.sass +0 -17
  314. data/vendor/sass/test/sass/templates/complex.sass +0 -305
  315. data/vendor/sass/test/sass/templates/compressed.sass +0 -15
  316. data/vendor/sass/test/sass/templates/expanded.sass +0 -17
  317. data/vendor/sass/test/sass/templates/if.sass +0 -11
  318. data/vendor/sass/test/sass/templates/import.sass +0 -12
  319. data/vendor/sass/test/sass/templates/import_charset.sass +0 -7
  320. data/vendor/sass/test/sass/templates/import_charset_1_8.sass +0 -4
  321. data/vendor/sass/test/sass/templates/import_charset_ibm866.sass +0 -9
  322. data/vendor/sass/test/sass/templates/importee.less +0 -2
  323. data/vendor/sass/test/sass/templates/importee.sass +0 -19
  324. data/vendor/sass/test/sass/templates/line_numbers.sass +0 -13
  325. data/vendor/sass/test/sass/templates/mixin_bork.sass +0 -5
  326. data/vendor/sass/test/sass/templates/mixins.sass +0 -76
  327. data/vendor/sass/test/sass/templates/multiline.sass +0 -20
  328. data/vendor/sass/test/sass/templates/nested.sass +0 -25
  329. data/vendor/sass/test/sass/templates/nested_bork1.sass +0 -2
  330. data/vendor/sass/test/sass/templates/nested_bork2.sass +0 -2
  331. data/vendor/sass/test/sass/templates/nested_bork3.sass +0 -2
  332. data/vendor/sass/test/sass/templates/nested_bork4.sass +0 -2
  333. data/vendor/sass/test/sass/templates/nested_bork5.sass +0 -2
  334. data/vendor/sass/test/sass/templates/nested_import.sass +0 -2
  335. data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +0 -6
  336. data/vendor/sass/test/sass/templates/options.sass +0 -2
  337. data/vendor/sass/test/sass/templates/parent_ref.sass +0 -25
  338. data/vendor/sass/test/sass/templates/script.sass +0 -101
  339. data/vendor/sass/test/sass/templates/scss_import.scss +0 -11
  340. data/vendor/sass/test/sass/templates/scss_importee.scss +0 -1
  341. data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  342. data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  343. data/vendor/sass/test/sass/templates/subdir/subdir.sass +0 -6
  344. data/vendor/sass/test/sass/templates/units.sass +0 -11
  345. data/vendor/sass/test/sass/templates/warn.sass +0 -3
  346. data/vendor/sass/test/sass/templates/warn_imported.sass +0 -4
  347. data/vendor/sass/test/sass/test_helper.rb +0 -8
  348. data/vendor/sass/test/sass/util/subset_map_test.rb +0 -91
  349. data/vendor/sass/test/sass/util_test.rb +0 -266
  350. data/vendor/sass/test/test_helper.rb +0 -69
  351. data/vendor/sass/vendor/fssm/Gemfile +0 -3
  352. data/vendor/sass/vendor/fssm/LICENSE +0 -20
  353. data/vendor/sass/vendor/fssm/README.markdown +0 -83
  354. data/vendor/sass/vendor/fssm/Rakefile +0 -11
  355. data/vendor/sass/vendor/fssm/example.rb +0 -12
  356. data/vendor/sass/vendor/fssm/fssm.gemspec +0 -24
  357. data/vendor/sass/vendor/fssm/lib/fssm.rb +0 -37
  358. data/vendor/sass/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  359. data/vendor/sass/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  360. data/vendor/sass/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  361. data/vendor/sass/vendor/fssm/lib/fssm/backends/rbfsevent.rb +0 -42
  362. data/vendor/sass/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  363. data/vendor/sass/vendor/fssm/lib/fssm/monitor.rb +0 -36
  364. data/vendor/sass/vendor/fssm/lib/fssm/path.rb +0 -94
  365. data/vendor/sass/vendor/fssm/lib/fssm/pathname.rb +0 -36
  366. data/vendor/sass/vendor/fssm/lib/fssm/state/directory.rb +0 -75
  367. data/vendor/sass/vendor/fssm/lib/fssm/state/file.rb +0 -24
  368. data/vendor/sass/vendor/fssm/lib/fssm/support.rb +0 -92
  369. data/vendor/sass/vendor/fssm/lib/fssm/tree.rb +0 -176
  370. data/vendor/sass/vendor/fssm/lib/fssm/version.rb +0 -3
  371. data/vendor/sass/vendor/fssm/profile/prof-cache.rb +0 -40
  372. data/vendor/sass/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  373. data/vendor/sass/vendor/fssm/profile/prof-pathname-rubinius.rb +0 -35
  374. data/vendor/sass/vendor/fssm/profile/prof-pathname.rb +0 -68
  375. data/vendor/sass/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  376. data/vendor/sass/vendor/fssm/profile/prof.html +0 -2379
  377. data/vendor/sass/vendor/fssm/spec/count_down_latch.rb +0 -151
  378. data/vendor/sass/vendor/fssm/spec/monitor_spec.rb +0 -202
  379. data/vendor/sass/vendor/fssm/spec/path_spec.rb +0 -96
  380. data/vendor/sass/vendor/fssm/spec/root/duck/quack.txt +0 -0
  381. data/vendor/sass/vendor/fssm/spec/root/file.css +0 -0
  382. data/vendor/sass/vendor/fssm/spec/root/file.rb +0 -0
  383. data/vendor/sass/vendor/fssm/spec/root/file.yml +0 -0
  384. data/vendor/sass/vendor/fssm/spec/root/moo/cow.txt +0 -0
  385. data/vendor/sass/vendor/fssm/spec/spec_helper.rb +0 -14
  386. data/vendor/sass/yard/callbacks.rb +0 -29
  387. data/vendor/sass/yard/default/fulldoc/html/css/common.sass +0 -26
  388. data/vendor/sass/yard/default/layout/html/footer.erb +0 -12
  389. data/vendor/sass/yard/inherited_hash.rb +0 -41
@@ -1,22 +0,0 @@
1
- module Sass
2
- # Sass importers are in charge of taking paths passed to `@import`
3
- # and finding the appropriate Sass code for those paths.
4
- # By default, this code is always loaded from the filesystem,
5
- # but importers could be added to load from a database or over HTTP.
6
- #
7
- # Each importer is in charge of a single load path
8
- # (or whatever the corresponding notion is for the backend).
9
- # Importers can be placed in the {file:SASS_REFERENCE.md#load_paths-option `:load_paths` array}
10
- # alongside normal filesystem paths.
11
- #
12
- # When resolving an `@import`, Sass will go through the load paths
13
- # looking for an importer that successfully imports the path.
14
- # Once one is found, the imported file is used.
15
- #
16
- # User-created importers must inherit from {Importers::Base}.
17
- module Importers
18
- end
19
- end
20
-
21
- require 'sass/importers/base'
22
- require 'sass/importers/filesystem'
@@ -1,139 +0,0 @@
1
- module Sass
2
- module Importers
3
- # The abstract base class for Sass importers.
4
- # All importers should inherit from this.
5
- #
6
- # At the most basic level, an importer is given a string
7
- # and must return a {Sass::Engine} containing some Sass code.
8
- # This string can be interpreted however the importer wants;
9
- # however, subclasses are encouraged to use the URI format
10
- # for pathnames.
11
- #
12
- # Importers that have some notion of "relative imports"
13
- # should take a single load path in their constructor,
14
- # and interpret paths as relative to that.
15
- # They should also implement the \{#find\_relative} method.
16
- #
17
- # Importers should be serializable via `Marshal.dump`.
18
- # In addition to the standard `_dump` and `_load` methods,
19
- # importers can define `_before_dump`, `_after_dump`, `_around_dump`,
20
- # and `_after_load` methods as per {Sass::Util#dump} and {Sass::Util#load}.
21
- #
22
- # @abstract
23
- class Base
24
-
25
- # Find a Sass file relative to another file.
26
- # Importers without a notion of "relative paths"
27
- # should just return nil here.
28
- #
29
- # If the importer does have a notion of "relative paths",
30
- # it should ignore its load path during this method.
31
- #
32
- # See \{#find} for important information on how this method should behave.
33
- #
34
- # The `:filename` option passed to the returned {Sass::Engine}
35
- # should be of a format that could be passed to \{#find}.
36
- #
37
- # @param uri [String] The URI to import. This is not necessarily relative,
38
- # but this method should only return true if it is.
39
- # @param base [String] The base filename. If `uri` is relative,
40
- # it should be interpreted as relative to `base`.
41
- # `base` is guaranteed to be in a format importable by this importer.
42
- # @param options [{Symbol => Object}] Options for the Sass file
43
- # containing the `@import` that's currently being resolved.
44
- # @return [Sass::Engine, nil] An Engine containing the imported file,
45
- # or nil if it couldn't be found or was in the wrong format.
46
- def find_relative(uri, base, options)
47
- Sass::Util.abstract(self)
48
- end
49
-
50
- # Find a Sass file, if it exists.
51
- #
52
- # This is the primary entry point of the Importer.
53
- # It corresponds directly to an `@import` statement in Sass.
54
- # It should do three basic things:
55
- #
56
- # * Determine if the URI is in this importer's format.
57
- # If not, return nil.
58
- # * Determine if the file indicated by the URI actually exists and is readable.
59
- # If not, return nil.
60
- # * Read the file and place the contents in a {Sass::Engine}.
61
- # Return that engine.
62
- #
63
- # If this importer's format allows for file extensions,
64
- # it should treat them the same way as the default {Filesystem} importer.
65
- # If the URI explicitly has a `.sass` or `.scss` filename,
66
- # the importer should look for that exact file
67
- # and import it as the syntax indicated.
68
- # If it doesn't exist, the importer should return nil.
69
- #
70
- # If the URI doesn't have either of these extensions,
71
- # the importer should look for files with the extensions.
72
- # If no such files exist, it should return nil.
73
- #
74
- # The {Sass::Engine} to be returned should be passed `options`,
75
- # with a few modifications. `:syntax` should be set appropriately,
76
- # `:filename` should be set to `uri`,
77
- # and `:importer` should be set to this importer.
78
- #
79
- # @param uri [String] The URI to import.
80
- # @param options [{Symbol => Object}] Options for the Sass file
81
- # containing the `@import` that's currently being resolved.
82
- # This is safe for subclasses to modify destructively.
83
- # Callers should only pass in a value they don't mind being destructively modified.
84
- # @return [Sass::Engine, nil] An Engine containing the imported file,
85
- # or nil if it couldn't be found or was in the wrong format.
86
- def find(uri, options)
87
- Sass::Util.abstract(self)
88
- end
89
-
90
- # Returns the time the given Sass file was last modified.
91
- #
92
- # If the given file has been deleted or the time can't be accessed
93
- # for some other reason, this should return nil.
94
- #
95
- # @param uri [String] The URI of the file to check.
96
- # Comes from a `:filename` option set on an engine returned by this importer.
97
- # @param options [{Symbol => Objet}] Options for the Sass file
98
- # containing the `@import` currently being checked.
99
- # @return [Time, nil]
100
- def mtime(uri, options)
101
- Sass::Util.abstract(self)
102
- end
103
-
104
- # Get the cache key pair for the given Sass URI.
105
- # The URI need not be checked for validity.
106
- #
107
- # The only strict requirement is that the returned pair of strings
108
- # uniquely identify the file at the given URI.
109
- # However, the first component generally corresponds roughly to the directory,
110
- # and the second to the basename, of the URI.
111
- #
112
- # Note that keys must be unique *across importers*.
113
- # Thus it's probably a good idea to include the importer name
114
- # at the beginning of the first component.
115
- #
116
- # @param uri [String] A URI known to be valid for this importer.
117
- # @param options [{Symbol => Object}] Options for the Sass file
118
- # containing the `@import` currently being checked.
119
- # @return [(String, String)] The key pair which uniquely identifies
120
- # the file at the given URI.
121
- def key(uri, options)
122
- Sass::Util.abstract(self)
123
- end
124
-
125
- # A string representation of the importer.
126
- # Should be overridden by subclasses.
127
- #
128
- # This is used to help debugging,
129
- # and should usually just show the load path encapsulated by this importer.
130
- #
131
- # @return [String]
132
- def to_s
133
- Sass::Util.abstract(self)
134
- end
135
- end
136
- end
137
- end
138
-
139
-
@@ -1,149 +0,0 @@
1
- require 'pathname'
2
-
3
- module Sass
4
- module Importers
5
- # The default importer, used for any strings found in the load path.
6
- # Simply loads Sass files from the filesystem using the default logic.
7
- class Filesystem < Base
8
-
9
- attr_accessor :root
10
-
11
- # Creates a new filesystem importer that imports files relative to a given path.
12
- #
13
- # @param root [String] The root path.
14
- # This importer will import files relative to this path.
15
- def initialize(root)
16
- @root = File.expand_path(root)
17
- end
18
-
19
- # @see Base#find_relative
20
- def find_relative(name, base, options)
21
- _find(File.dirname(base), name, options)
22
- end
23
-
24
- # @see Base#find
25
- def find(name, options)
26
- _find(@root, name, options)
27
- end
28
-
29
- # @see Base#mtime
30
- def mtime(name, options)
31
- file, s = find_real_file(@root, name)
32
- File.mtime(file) if file
33
- rescue Errno::ENOENT
34
- nil
35
- end
36
-
37
- # @see Base#key
38
- def key(name, options)
39
- [self.class.name + ":" + File.dirname(File.expand_path(name)),
40
- File.basename(name)]
41
- end
42
-
43
- # @see Base#to_s
44
- def to_s
45
- @root
46
- end
47
-
48
- def hash
49
- @root.hash
50
- end
51
-
52
- def eql?(other)
53
- root.eql?(other.root)
54
- end
55
-
56
- protected
57
-
58
- # If a full uri is passed, this removes the root from it
59
- # otherwise returns the name unchanged
60
- def remove_root(name)
61
- if name.index(@root + "/") == 0
62
- name[(@root.length + 1)..-1]
63
- else
64
- name
65
- end
66
- end
67
-
68
- # A hash from file extensions to the syntaxes for those extensions.
69
- # The syntaxes must be `:sass` or `:scss`.
70
- #
71
- # This can be overridden by subclasses that want normal filesystem importing
72
- # with unusual extensions.
73
- #
74
- # @return [{String => Symbol}]
75
- def extensions
76
- {'sass' => :sass, 'scss' => :scss}
77
- end
78
-
79
- # Given an `@import`ed path, returns an array of possible
80
- # on-disk filenames and their corresponding syntaxes for that path.
81
- #
82
- # @param name [String] The filename.
83
- # @return [Array(String, Symbol)] An array of pairs.
84
- # The first element of each pair is a filename to look for;
85
- # the second element is the syntax that file would be in (`:sass` or `:scss`).
86
- def possible_files(name)
87
- name = escape_glob_characters(name)
88
- dirname, basename, extname = split(name)
89
- sorted_exts = extensions.sort
90
- syntax = extensions[extname]
91
-
92
- return [["#{dirname}/{_,}#{basename}.#{extensions.invert[syntax]}", syntax]] if syntax
93
- sorted_exts.map {|ext, syn| ["#{dirname}/{_,}#{basename}.#{ext}", syn]}
94
- end
95
-
96
- def escape_glob_characters(name)
97
- name.gsub(/[\*\[\]\{\}\?]/) do |char|
98
- "\\#{char}"
99
- end
100
- end
101
-
102
- REDUNDANT_DIRECTORY = %r{#{Regexp.escape(File::SEPARATOR)}\.#{Regexp.escape(File::SEPARATOR)}}
103
- # Given a base directory and an `@import`ed name,
104
- # finds an existant file that matches the name.
105
- #
106
- # @param dir [String] The directory relative to which to search.
107
- # @param name [String] The filename to search for.
108
- # @return [(String, Symbol)] A filename-syntax pair.
109
- def find_real_file(dir, name)
110
- for (f,s) in possible_files(remove_root(name))
111
- path = (dir == "." || Pathname.new(f).absolute?) ? f : "#{dir}/#{f}"
112
- if full_path = Dir[path].first
113
- full_path.gsub!(REDUNDANT_DIRECTORY,File::SEPARATOR)
114
- return full_path, s
115
- end
116
- end
117
- nil
118
- end
119
-
120
- # Splits a filename into three parts, a directory part, a basename, and an extension
121
- # Only the known extensions returned from the extensions method will be recognized as such.
122
- def split(name)
123
- extension = nil
124
- dirname, basename = File.dirname(name), File.basename(name)
125
- if basename =~ /^(.*)\.(#{extensions.keys.map{|e| Regexp.escape(e)}.join('|')})$/
126
- basename = $1
127
- extension = $2
128
- end
129
- [dirname, basename, extension]
130
- end
131
-
132
- private
133
-
134
- def _find(dir, name, options)
135
- full_filename, syntax = find_real_file(dir, name)
136
- return unless full_filename && File.readable?(full_filename)
137
-
138
- options[:syntax] = syntax
139
- options[:filename] = full_filename
140
- options[:importer] = self
141
- Sass::Engine.new(File.read(full_filename), options)
142
- end
143
-
144
- def join(base, path)
145
- Pathname.new(base).join(path).to_s
146
- end
147
- end
148
- end
149
- end
@@ -1,382 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'less'
4
-
5
- module Less
6
- # This is the class that Treetop defines for parsing Less files.
7
- # Since not everything gets parsed into the AST but is instead resolved at parse-time,
8
- # we need to override some of it so that it can be converted into Sass.
9
- module StyleSheet
10
- # Selector mixins that don't have arguments.
11
- # This depends only on the syntax at the call site;
12
- # if it doesn't use parens, it hits this production,
13
- # regardless of whether the mixin being called has arguments or not.
14
- module Mixin4
15
- def build_with_sass(env)
16
- selectors.build(env, :mixin).each do |path|
17
- el = path.inject(env.root) do |current, node|
18
- current.descend(node.selector, node) or raise MixinNameError, "#{selectors.text_value} in #{env}"
19
- end
20
- if el.is_a?(Node::Mixin::Def)
21
- # Calling a mixin with arguments, which gets compiled to a Sass mixin
22
- env << Node::Mixin::Call.new(el, [], env)
23
- else
24
- # Calling a mixin without arguments, which gets compiled to @extend
25
- sel = selector_str(path)
26
- base = selector_str(selector_base(path))
27
- if base == sel
28
- env << Node::SassNode.new(Sass::Tree::ExtendNode.new([sel]))
29
- else
30
- Sass::Util.sass_warn <<WARNING
31
- WARNING: Sass doesn't support mixing in selector sequences.
32
- Replacing "#{sel}" with "@extend #{base}"
33
- WARNING
34
- env << Node::SassNode.new(Sass::Tree::CommentNode.new(["// #{sel};"], true, false))
35
- env << Node::SassNode.new(Sass::Tree::ExtendNode.new([base]))
36
- end
37
- end
38
- end
39
- end
40
- alias_method :build_without_sass, :build
41
- alias_method :build, :build_with_sass
42
-
43
- def selector_base(path)
44
- el, i = Sass::Util.enum_with_index(path).to_a.reverse.find {|e, i| e.selector !~ /^:{1,2}$/} ||
45
- [path.first, 0]
46
- sel = (el.selector =~ /^:{0,2}$/ ? el.selector : "")
47
- [Node::Element.new(el.name, sel)] + path[i+1..-1]
48
- end
49
-
50
- def selector_str(path)
51
- path.map {|e| e.sass_selector_str}.join(' ').gsub(' :', ':')
52
- end
53
- end
54
-
55
- # Property and variable declarations.
56
- # We want to keep track of the line number
57
- # so we don't space out the variables too much in the generated Sass.
58
- module Declaration3
59
- def build_with_sass(env)
60
- build_without_sass(env)
61
- env.rules.last.src_line = input.line_of(interval.first)
62
- end
63
- alias_method :build_without_sass, :build
64
- alias_method :build, :build_with_sass
65
- end
66
-
67
- # Comma-separated selectors.
68
- # Less breaks these into completely separate nodes.
69
- # Since we don't want this duplication in the Sass,
70
- # we modify the production to keep track of the original group
71
- # so we can reconstruct it later on.
72
- module Selectors2
73
- def build_with_sass(env, method)
74
- arr = build_without_sass(env, method)
75
- return arr if method == :mixin
76
- rarr = arr.map {|e| e.top(env)}
77
- rarr.each {|e| e.group = rarr}
78
- arr
79
- end
80
- alias_method :build_without_sass, :build
81
- alias_method :build, :build_with_sass
82
- end
83
-
84
- # Attribute accessors.
85
- # Sass just flat-out doesn't support these,
86
- # so we print a warning to that effect and compile them to comments.
87
- module Accessor1
88
- def build(env)
89
- Sass::Util.sass_warn <<WARNING
90
- WARNING: Sass doesn't support attribute accessors.
91
- Ignoring #{text_value}
92
- WARNING
93
- Node::Anonymous.new("/* #{text_value} */")
94
- end
95
- end
96
-
97
- # @import statements.
98
- # Less handles these during parse-time,
99
- # so we want to wrap them up as a node in the tree.
100
- # We also include the nodes, though,
101
- # since we want to have access to the mixins
102
- # so we can tell if they take arguments or not.
103
- # The included nodes are hidden so they don't appear in the output.
104
- module Import1
105
- def build_with_sass(env)
106
- line = input.line_of(interval.first)
107
- import = Sass::Tree::ImportNode.new(url.value.gsub(/\.less$/, ''))
108
- import.line = input.line_of(interval.first)
109
- env << Node::SassNode.new(import)
110
- old_rules = env.rules.dup
111
- build_without_sass env
112
- (env.rules - old_rules).each {|r| r.hide_in_sass = true}
113
- rescue ImportError => e
114
- raise Sass::SyntaxError.new("File to import #{url.text_value} not found or unreadable", :line => line)
115
- end
116
- alias_method :build_without_sass, :build
117
- alias_method :build, :build_with_sass
118
- end
119
-
120
- # The IE-specific `alpha(opacity=@var)`.
121
- # Less manually resolves the variable here at parse-time.
122
- # We want to keep the variable around,
123
- # so we compile this to a function.
124
- # Less doesn't actually have an `=` operator,
125
- # but that's okay since it's just getting compiled to Sass anyway.
126
- module Entity::Alpha1
127
- def build(env)
128
- Node::Function.new("alpha",
129
- [Node::Expression.new([
130
- Node::Keyword.new("opacity"),
131
- Node::Operator.new("="),
132
- variable.build])])
133
- end
134
- end
135
- end
136
-
137
- # The Less AST classes for the document,
138
- # including both stylesheet-level nodes and expression-level nodes.
139
- # The main purpose of overriding these is to add `#to_sass_tree` functions
140
- # for converting to Sass.
141
- module Node
142
- module Entity
143
- attr_accessor :hide_in_sass
144
- attr_accessor :src_line
145
- end
146
-
147
- class Element
148
- attr_accessor :group
149
-
150
- def top(env)
151
- return self if parent.equal?(env)
152
- return parent.top(env)
153
- end
154
-
155
- def to_sass_tree
156
- if root?
157
- root = Sass::Tree::RootNode.new("")
158
- rules.each {|r| root << r.to_sass_tree}
159
- return root
160
- end
161
- return if hide_in_sass
162
- return if !self.equal?(group.first)
163
-
164
- last_el = nil
165
- sel = group.map do |el|
166
- comma_sel = []
167
- loop do
168
- comma_sel << el.sass_selector_str
169
- break unless el.rules.size == 1 && el.rules.first.is_a?(Element)
170
- el = el.rules.first
171
- end
172
- last_el = el
173
- comma_sel = comma_sel.join(' ').gsub(' :', ':')
174
- comma_sel.gsub!(/^:/, '&:') unless parent.root?
175
- comma_sel
176
- end.join(', ')
177
-
178
- rule = Sass::Tree::RuleNode.new([sel])
179
- last_el.rules.each {|r| rule << r.to_sass_tree}
180
- return rule
181
- end
182
-
183
- def sass_selector_str
184
- case @selector
185
- when /[+>~]/; "#{@selector} #{@name}"
186
- else @selector + @name
187
- end
188
- end
189
- end
190
-
191
- module Mixin
192
- class Call
193
- def to_sass_tree
194
- return if hide_in_sass
195
- Sass::Tree::MixinNode.new(@mixin.name.gsub(/^\./, ''), @params.map {|v| v.to_sass_tree}, {})
196
- end
197
- end
198
-
199
- class Def
200
- def to_sass_tree
201
- return if hide_in_sass
202
- mixin = Sass::Tree::MixinDefNode.new(name, @params.map do |v|
203
- v.value.flatten!
204
- [Sass::Script::Variable.new(v), v.value.to_sass_tree]
205
- end)
206
- rules.each {|r| mixin << r.to_sass_tree}
207
- mixin
208
- end
209
- end
210
- end
211
-
212
- class SassNode
213
- include Entity
214
-
215
- def initialize(node)
216
- @node = node
217
- end
218
-
219
- def to_sass_tree
220
- return if hide_in_sass
221
- @node
222
- end
223
- end
224
-
225
- class Property
226
- def to_sass_tree
227
- return if hide_in_sass
228
- Sass::Tree::PropNode.new([self], @value.to_sass_tree, :new)
229
- end
230
- end
231
-
232
- class Expression
233
- def to_sass_tree
234
- if first.is_a?(Array)
235
- val = map {|e| _to_sass_tree(e)}.inject(nil) do |e, i|
236
- next i unless e
237
- Sass::Script::Operation.new(e, i, :comma)
238
- end
239
- else
240
- val = _to_sass_tree(self)
241
- end
242
- val.options = {}
243
- val
244
- end
245
-
246
- private
247
-
248
- LESS_TO_SASS_OPERATORS = {"-" => :minus, "+" => :plus, "*" => :times, "/" => :div, "=" => :single_eq}
249
-
250
- def _to_sass_tree(arr)
251
- e, rest = _to_sass_tree_plus_minus_eq(arr)
252
- until rest.empty?
253
- e2, rest = _to_sass_tree_plus_minus_eq(rest)
254
- e = Sass::Script::Operation.new(e, e2, :space)
255
- end
256
- return e
257
- end
258
-
259
- def _to_sass_tree_plus_minus_eq(arr)
260
- e, rest = _to_sass_tree_times_div(arr)
261
- while rest[0] && rest[0].is_a?(Operator) && %w[+ - =].include?(rest[0])
262
- op = LESS_TO_SASS_OPERATORS[rest[0]]
263
- e2, rest = _to_sass_tree_times_div(rest[1..-1])
264
- e = Sass::Script::Operation.new(e, e2, op)
265
- end
266
- return e, rest
267
- end
268
-
269
- def _to_sass_tree_times_div(arr)
270
- e, rest = _to_sass_tree_unary(arr)
271
- while rest[0] && rest[0].is_a?(Operator) && %w[* /].include?(rest[0])
272
- op = LESS_TO_SASS_OPERATORS[rest[0]]
273
- e2, rest = _to_sass_tree_unary(rest[1..-1])
274
- e = Sass::Script::Operation.new(e, e2, op)
275
- end
276
- return e, rest
277
- end
278
-
279
- def _to_sass_tree_unary(arr)
280
- if arr[0] == "-"
281
- first, rest = _sass_split(arr[1..-1])
282
- return Sass::Script::UnaryOperation.new(first, :minus), rest
283
- else
284
- return _sass_split(arr[0..-1])
285
- end
286
- end
287
-
288
- def _sass_split(arr)
289
- return arr[0].to_sass_tree, arr[1..-1] unless arr[0] == "("
290
- parens = 1
291
- i = arr[1..-1].each_with_index do |e, i|
292
- parens += 1 if e == "("
293
- parens -= 1 if e == ")"
294
- break i if parens == 0
295
- end
296
-
297
- return _to_sass_tree(arr[1...i+1]), arr[i+2..-1]
298
- end
299
- end
300
-
301
- class Color
302
- def to_sass_tree
303
- Sass::Script::Color.new(:red => r, :green => g, :blue => b, :alpha => a)
304
- end
305
- end
306
-
307
- class Number
308
- def to_sass_tree
309
- Sass::Script::Number.new(self, [self.unit])
310
- end
311
- end
312
-
313
- class Variable
314
- def to_sass_tree
315
- if @declaration
316
- return if hide_in_sass
317
- node = Sass::Tree::VariableNode.new(self, @value.to_sass_tree, false)
318
- node.line = self.src_line
319
- node
320
- else
321
- Sass::Script::Variable.new(self)
322
- end
323
- end
324
- end
325
-
326
- class Function
327
- def to_sass_tree
328
- Sass::Script::Funcall.new(self, @args.map {|a| a.to_sass_tree}, {})
329
- end
330
- end
331
-
332
- class Keyword
333
- def to_sass_tree
334
- Sass::Script::String.new(self)
335
- end
336
- end
337
-
338
- class Anonymous
339
- def to_sass_tree
340
- Sass::Script::String.new(self)
341
- end
342
- end
343
-
344
- class Quoted
345
- def to_sass_tree
346
- Sass::Script::String.new(self, true)
347
- end
348
- end
349
-
350
- class FontFamily
351
- def to_sass_tree
352
- @family.map {|f| f.to_sass_tree}.inject(nil) do |e, f|
353
- next f unless e
354
- Sass::Script::Operation.new(e, f, :comma)
355
- end
356
- end
357
- end
358
- end
359
-
360
- # The entry point to Less.
361
- # By default Less doesn't preserve the filename of the file being parsed,
362
- # which is unpleasant for error reporting.
363
- # Our monkeypatch keeps it around.
364
- class Engine
365
- def initialize_with_sass(obj, opts = {})
366
- initialize_without_sass(obj, opts)
367
- @filename = obj.path if obj.is_a?(File)
368
- end
369
- alias_method :initialize_without_sass, :initialize
370
- alias_method :initialize, :initialize_with_sass
371
-
372
- def parse_with_sass
373
- parse_without_sass
374
- rescue Sass::SyntaxError => e
375
- e.modify_backtrace(:filename => @filename)
376
- raise e
377
- end
378
- alias_method :parse_without_sass, :parse
379
- alias_method :parse, :parse_with_sass
380
- alias_method :to_tree, :parse
381
- end
382
- end