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,9 +0,0 @@
1
- # Rails 3.0.0.beta.2+, < 3.1
2
- if defined?(ActiveSupport) && Sass::Util.has?(:public_method, ActiveSupport, :on_load) &&
3
- !Sass::Util.ap_geq?('3.1.0.beta')
4
- require 'sass/plugin/configuration'
5
- ActiveSupport.on_load(:before_configuration) do
6
- require 'sass'
7
- require 'sass/plugin'
8
- end
9
- end
@@ -1,58 +0,0 @@
1
- require 'readline'
2
-
3
- module Sass
4
- # Runs a SassScript read-eval-print loop.
5
- # It presents a prompt on the terminal,
6
- # reads in SassScript expressions,
7
- # evaluates them,
8
- # and prints the result.
9
- class Repl
10
- # @param options [{Symbol => Object}] An options hash.
11
- def initialize(options = {})
12
- @options = options
13
- end
14
-
15
- # Starts the read-eval-print loop.
16
- def run
17
- environment = Environment.new
18
- environment.set_var('important', Script::String.new('!important'))
19
- @line = 0
20
- loop do
21
- @line += 1
22
- unless text = Readline.readline('>> ')
23
- puts
24
- return
25
- end
26
-
27
- Readline::HISTORY << text
28
- parse_input(environment, text)
29
- end
30
- end
31
-
32
- private
33
-
34
- def parse_input(environment, text)
35
- case text
36
- when Script::MATCH
37
- name = $1
38
- guarded = $3 == '||=' || $4
39
- val = Script::Parser.parse($3, @line, text.size - $3.size)
40
-
41
- unless guarded && environment.var(name)
42
- environment.set_var(name, val.perform(environment))
43
- end
44
-
45
- p environment.var(name)
46
- else
47
- p Script::Parser.parse(text, @line, 0).perform(environment)
48
- end
49
- rescue Sass::SyntaxError => e
50
- puts "SyntaxError: #{e.message}"
51
- if @options[:trace]
52
- e.backtrace.each do |e|
53
- puts "\tfrom #{e}"
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,7 +0,0 @@
1
- module Sass
2
- # The root directory of the Sass source tree.
3
- # This may be overridden by the package manager
4
- # if the lib directory is separated from the main source tree.
5
- # @api public
6
- ROOT_DIR = File.expand_path(File.join(__FILE__, "../../.."))
7
- end
@@ -1,40 +0,0 @@
1
- require 'strscan'
2
- require 'sass/script/node'
3
- require 'sass/script/variable'
4
- require 'sass/script/funcall'
5
- require 'sass/script/operation'
6
- require 'sass/script/literal'
7
- require 'sass/script/parser'
8
-
9
- module Sass
10
- # SassScript is code that's embedded in Sass documents
11
- # to allow for property values to be computed from variables.
12
- #
13
- # This module contains code that handles the parsing and evaluation of SassScript.
14
- module Script
15
- # The regular expression used to parse variables.
16
- MATCH = /^\$(#{Sass::SCSS::RX::IDENT})\s*:\s*(.+?)(!(?i:default))?$/
17
-
18
- # The regular expression used to validate variables without matching.
19
- VALIDATE = /^\$#{Sass::SCSS::RX::IDENT}$/
20
-
21
- # Parses a string of SassScript
22
- #
23
- # @param value [String] The SassScript
24
- # @param line [Fixnum] The number of the line on which the SassScript appeared.
25
- # Used for error reporting
26
- # @param offset [Fixnum] The number of characters in on `line` that the SassScript started.
27
- # Used for error reporting
28
- # @param options [{Symbol => Object}] An options hash;
29
- # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
30
- # @return [Script::Node] The root node of the parse tree
31
- def self.parse(value, line, offset, options = {})
32
- Parser.parse(value, line, offset, options)
33
- rescue Sass::SyntaxError => e
34
- e.message << ": #{value.inspect}." if e.message == "SassScript error"
35
- e.modify_backtrace(:line => line, :filename => options[:filename])
36
- raise e
37
- end
38
-
39
- end
40
- end
@@ -1,18 +0,0 @@
1
- require 'sass/script/literal'
2
-
3
- module Sass::Script
4
- # A SassScript object representing a boolean (true or false) value.
5
- class Bool < Literal
6
- # The Ruby value of the boolean.
7
- #
8
- # @return [Boolean]
9
- attr_reader :value
10
- alias_method :to_bool, :value
11
-
12
- # @return [String] "true" or "false"
13
- def to_s(opts = {})
14
- @value.to_s
15
- end
16
- alias_method :to_sass, :to_s
17
- end
18
- end
@@ -1,480 +0,0 @@
1
- require 'sass/script/literal'
2
-
3
- module Sass::Script
4
- # A SassScript object representing a CSS color.
5
- #
6
- # A color may be represented internally as RGBA, HSLA, or both.
7
- # It's originally represented as whatever its input is;
8
- # if it's created with RGB values, it's represented as RGBA,
9
- # and if it's created with HSL values, it's represented as HSLA.
10
- # Once a property is accessed that requires the other representation --
11
- # for example, \{#red} for an HSL color --
12
- # that component is calculated and cached.
13
- #
14
- # The alpha channel of a color is independent of its RGB or HSL representation.
15
- # It's always stored, as 1 if nothing else is specified.
16
- # If only the alpha channel is modified using \{#with},
17
- # the cached RGB and HSL values are retained.
18
- class Color < Literal
19
- class << self; include Sass::Util; end
20
-
21
- # A hash from color names to `[red, green, blue]` value arrays.
22
- HTML4_COLORS = map_vals({
23
- 'black' => 0x000000,
24
- 'silver' => 0xc0c0c0,
25
- 'gray' => 0x808080,
26
- 'white' => 0xffffff,
27
- 'maroon' => 0x800000,
28
- 'red' => 0xff0000,
29
- 'purple' => 0x800080,
30
- 'fuchsia' => 0xff00ff,
31
- 'green' => 0x008000,
32
- 'lime' => 0x00ff00,
33
- 'olive' => 0x808000,
34
- 'yellow' => 0xffff00,
35
- 'navy' => 0x000080,
36
- 'blue' => 0x0000ff,
37
- 'teal' => 0x008080,
38
- 'aqua' => 0x00ffff
39
- }) {|color| (0..2).map {|n| color >> (n << 3) & 0xff}.reverse}
40
- # A hash from `[red, green, blue]` value arrays to color names.
41
- HTML4_COLORS_REVERSE = map_hash(HTML4_COLORS) {|k, v| [v, k]}
42
-
43
- # Constructs an RGB or HSL color object,
44
- # optionally with an alpha channel.
45
- #
46
- # The RGB values must be between 0 and 255.
47
- # The saturation and lightness values must be between 0 and 100.
48
- # The alpha value must be between 0 and 1.
49
- #
50
- # @raise [Sass::SyntaxError] if any color value isn't in the specified range
51
- #
52
- # @overload initialize(attrs)
53
- # The attributes are specified as a hash.
54
- # This hash must contain either `:hue`, `:saturation`, and `:value` keys,
55
- # or `:red`, `:green`, and `:blue` keys.
56
- # It cannot contain both HSL and RGB keys.
57
- # It may also optionally contain an `:alpha` key.
58
- #
59
- # @param attrs [{Symbol => Numeric}] A hash of color attributes to values
60
- # @raise [ArgumentError] if not enough attributes are specified,
61
- # or both RGB and HSL attributes are specified
62
- #
63
- # @overload initialize(rgba)
64
- # The attributes are specified as an array.
65
- # This overload only supports RGB or RGBA colors.
66
- #
67
- # @param rgba [Array<Numeric>] A three- or four-element array
68
- # of the red, green, blue, and optionally alpha values (respectively)
69
- # of the color
70
- # @raise [ArgumentError] if not enough attributes are specified
71
- def initialize(attrs, allow_both_rgb_and_hsl = false)
72
- super(nil)
73
-
74
- if attrs.is_a?(Array)
75
- unless (3..4).include?(attrs.size)
76
- raise ArgumentError.new("Color.new(array) expects a three- or four-element array")
77
- end
78
-
79
- red, green, blue = attrs[0...3].map {|c| c.to_i}
80
- @attrs = {:red => red, :green => green, :blue => blue}
81
- @attrs[:alpha] = attrs[3] ? attrs[3].to_f : 1
82
- else
83
- attrs = attrs.reject {|k, v| v.nil?}
84
- hsl = [:hue, :saturation, :lightness] & attrs.keys
85
- rgb = [:red, :green, :blue] & attrs.keys
86
- if !allow_both_rgb_and_hsl && !hsl.empty? && !rgb.empty?
87
- raise ArgumentError.new("Color.new(hash) may not have both HSL and RGB keys specified")
88
- elsif hsl.empty? && rgb.empty?
89
- raise ArgumentError.new("Color.new(hash) must have either HSL or RGB keys specified")
90
- elsif !hsl.empty? && hsl.size != 3
91
- raise ArgumentError.new("Color.new(hash) must have all three HSL values specified")
92
- elsif !rgb.empty? && rgb.size != 3
93
- raise ArgumentError.new("Color.new(hash) must have all three RGB values specified")
94
- end
95
-
96
- @attrs = attrs
97
- @attrs[:hue] %= 360 if @attrs[:hue]
98
- @attrs[:alpha] ||= 1
99
- end
100
-
101
- [:red, :green, :blue].each do |k|
102
- next if @attrs[k].nil?
103
- @attrs[k] = @attrs[k].to_i
104
- next if (0..255).include?(@attrs[k])
105
- raise ArgumentError.new("#{k.to_s.capitalize} value must be between 0 and 255")
106
- end
107
-
108
- [:saturation, :lightness].each do |k|
109
- next if @attrs[k].nil?
110
- @attrs[k] = 0 if @attrs[k] < 0.00001 && @attrs[k] > -0.00001
111
- @attrs[k] = 100 if @attrs[k] - 100 < 0.00001 && @attrs[k] - 100 > -0.00001
112
- next if (0..100).include?(@attrs[k])
113
- raise ArgumentError.new("#{k.to_s.capitalize} must be between 0 and 100")
114
- end
115
-
116
- unless (0..1).include?(@attrs[:alpha])
117
- raise ArgumentError.new("Alpha channel must be between 0 and 1")
118
- end
119
- end
120
-
121
- # The red component of the color.
122
- #
123
- # @return [Fixnum]
124
- def red
125
- hsl_to_rgb!
126
- @attrs[:red]
127
- end
128
-
129
- # The green component of the color.
130
- #
131
- # @return [Fixnum]
132
- def green
133
- hsl_to_rgb!
134
- @attrs[:green]
135
- end
136
-
137
- # The blue component of the color.
138
- #
139
- # @return [Fixnum]
140
- def blue
141
- hsl_to_rgb!
142
- @attrs[:blue]
143
- end
144
-
145
- # The hue component of the color.
146
- #
147
- # @return [Numeric]
148
- def hue
149
- rgb_to_hsl!
150
- @attrs[:hue]
151
- end
152
-
153
- # The saturation component of the color.
154
- #
155
- # @return [Numeric]
156
- def saturation
157
- rgb_to_hsl!
158
- @attrs[:saturation]
159
- end
160
-
161
- # The lightness component of the color.
162
- #
163
- # @return [Numeric]
164
- def lightness
165
- rgb_to_hsl!
166
- @attrs[:lightness]
167
- end
168
-
169
- # The alpha channel (opacity) of the color.
170
- # This is 1 unless otherwise defined.
171
- #
172
- # @return [Fixnum]
173
- def alpha
174
- @attrs[:alpha]
175
- end
176
-
177
- # Returns whether this color object is translucent;
178
- # that is, whether the alpha channel is non-1.
179
- #
180
- # @return [Boolean]
181
- def alpha?
182
- alpha < 1
183
- end
184
-
185
- # Returns the red, green, and blue components of the color.
186
- #
187
- # @return [Array<Fixnum>] A frozen three-element array of the red, green, and blue
188
- # values (respectively) of the color
189
- def rgb
190
- [red, green, blue].freeze
191
- end
192
-
193
- # Returns the hue, saturation, and lightness components of the color.
194
- #
195
- # @return [Array<Fixnum>] A frozen three-element array of the
196
- # hue, saturation, and lightness values (respectively) of the color
197
- def hsl
198
- [hue, saturation, lightness].freeze
199
- end
200
-
201
- # The SassScript `==` operation.
202
- # **Note that this returns a {Sass::Script::Bool} object,
203
- # not a Ruby boolean**.
204
- #
205
- # @param other [Literal] The right-hand side of the operator
206
- # @return [Bool] True if this literal is the same as the other,
207
- # false otherwise
208
- def eq(other)
209
- Sass::Script::Bool.new(
210
- other.is_a?(Color) && rgb == other.rgb && alpha == other.alpha)
211
- end
212
-
213
- # Returns a copy of this color with one or more channels changed.
214
- # RGB or HSL colors may be changed, but not both at once.
215
- #
216
- # For example:
217
- #
218
- # Color.new([10, 20, 30]).with(:blue => 40)
219
- # #=> rgb(10, 40, 30)
220
- # Color.new([126, 126, 126]).with(:red => 0, :green => 255)
221
- # #=> rgb(0, 255, 126)
222
- # Color.new([255, 0, 127]).with(:saturation => 60)
223
- # #=> rgb(204, 51, 127)
224
- # Color.new([1, 2, 3]).with(:alpha => 0.4)
225
- # #=> rgba(1, 2, 3, 0.4)
226
- #
227
- # @param attrs [{Symbol => Numeric}]
228
- # A map of channel names (`:red`, `:green`, `:blue`,
229
- # `:hue`, `:saturation`, `:lightness`, or `:alpha`) to values
230
- # @return [Color] The new Color object
231
- # @raise [ArgumentError] if both RGB and HSL keys are specified
232
- def with(attrs)
233
- attrs = attrs.reject {|k, v| v.nil?}
234
- hsl = !([:hue, :saturation, :lightness] & attrs.keys).empty?
235
- rgb = !([:red, :green, :blue] & attrs.keys).empty?
236
- if hsl && rgb
237
- raise ArgumentError.new("Cannot specify HSL and RGB values for a color at the same time")
238
- end
239
-
240
- if hsl
241
- [:hue, :saturation, :lightness].each {|k| attrs[k] ||= send(k)}
242
- elsif rgb
243
- [:red, :green, :blue].each {|k| attrs[k] ||= send(k)}
244
- else
245
- # If we're just changing the alpha channel,
246
- # keep all the HSL/RGB stuff we've calculated
247
- attrs = @attrs.merge(attrs)
248
- end
249
- attrs[:alpha] ||= alpha
250
-
251
- Color.new(attrs, :allow_both_rgb_and_hsl)
252
- end
253
-
254
- # The SassScript `+` operation.
255
- # Its functionality depends on the type of its argument:
256
- #
257
- # {Number}
258
- # : Adds the number to each of the RGB color channels.
259
- #
260
- # {Color}
261
- # : Adds each of the RGB color channels together.
262
- #
263
- # {Literal}
264
- # : See {Literal#plus}.
265
- #
266
- # @param other [Literal] The right-hand side of the operator
267
- # @return [Color] The resulting color
268
- # @raise [Sass::SyntaxError] if `other` is a number with units
269
- def plus(other)
270
- if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
271
- piecewise(other, :+)
272
- else
273
- super
274
- end
275
- end
276
-
277
- # The SassScript `-` operation.
278
- # Its functionality depends on the type of its argument:
279
- #
280
- # {Number}
281
- # : Subtracts the number from each of the RGB color channels.
282
- #
283
- # {Color}
284
- # : Subtracts each of the other color's RGB color channels from this color's.
285
- #
286
- # {Literal}
287
- # : See {Literal#minus}.
288
- #
289
- # @param other [Literal] The right-hand side of the operator
290
- # @return [Color] The resulting color
291
- # @raise [Sass::SyntaxError] if `other` is a number with units
292
- def minus(other)
293
- if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
294
- piecewise(other, :-)
295
- else
296
- super
297
- end
298
- end
299
-
300
- # The SassScript `*` operation.
301
- # Its functionality depends on the type of its argument:
302
- #
303
- # {Number}
304
- # : Multiplies the number by each of the RGB color channels.
305
- #
306
- # {Color}
307
- # : Multiplies each of the RGB color channels together.
308
- #
309
- # @param other [Number, Color] The right-hand side of the operator
310
- # @return [Color] The resulting color
311
- # @raise [Sass::SyntaxError] if `other` is a number with units
312
- def times(other)
313
- if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
314
- piecewise(other, :*)
315
- else
316
- raise NoMethodError.new(nil, :times)
317
- end
318
- end
319
-
320
- # The SassScript `/` operation.
321
- # Its functionality depends on the type of its argument:
322
- #
323
- # {Number}
324
- # : Divides each of the RGB color channels by the number.
325
- #
326
- # {Color}
327
- # : Divides each of this color's RGB color channels by the other color's.
328
- #
329
- # {Literal}
330
- # : See {Literal#div}.
331
- #
332
- # @param other [Literal] The right-hand side of the operator
333
- # @return [Color] The resulting color
334
- # @raise [Sass::SyntaxError] if `other` is a number with units
335
- def div(other)
336
- if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
337
- piecewise(other, :/)
338
- else
339
- super
340
- end
341
- end
342
-
343
- # The SassScript `%` operation.
344
- # Its functionality depends on the type of its argument:
345
- #
346
- # {Number}
347
- # : Takes each of the RGB color channels module the number.
348
- #
349
- # {Color}
350
- # : Takes each of this color's RGB color channels modulo the other color's.
351
- #
352
- # @param other [Number, Color] The right-hand side of the operator
353
- # @return [Color] The resulting color
354
- # @raise [Sass::SyntaxError] if `other` is a number with units
355
- def mod(other)
356
- if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
357
- piecewise(other, :%)
358
- else
359
- raise NoMethodError.new(nil, :mod)
360
- end
361
- end
362
-
363
- # Returns a string representation of the color.
364
- # This is usually the color's hex value,
365
- # but if the color has a name that's used instead.
366
- #
367
- # @return [String] The string representation
368
- def to_s(opts = {})
369
- return rgba_str if alpha?
370
- return smallest if options[:style] == :compressed
371
- return HTML4_COLORS_REVERSE[rgb] if HTML4_COLORS_REVERSE[rgb]
372
- hex_str
373
- end
374
- alias_method :to_sass, :to_s
375
-
376
- # Returns a string representation of the color.
377
- #
378
- # @return [String] The hex value
379
- def inspect
380
- alpha? ? rgba_str : hex_str
381
- end
382
-
383
- private
384
-
385
- def smallest
386
- small_hex_str = hex_str.gsub(/^#(.)\1(.)\2(.)\3$/, '#\1\2\3')
387
- return small_hex_str unless (color = HTML4_COLORS_REVERSE[rgb]) &&
388
- color.size <= small_hex_str.size
389
- return color
390
- end
391
-
392
- def rgba_str
393
- split = options[:style] == :compressed ? ',' : ', '
394
- "rgba(#{rgb.join(split)}#{split}#{Number.round(alpha)})"
395
- end
396
-
397
- def hex_str
398
- red, green, blue = rgb.map { |num| num.to_s(16).rjust(2, '0') }
399
- "##{red}#{green}#{blue}"
400
- end
401
-
402
- def piecewise(other, operation)
403
- other_num = other.is_a? Number
404
- if other_num && !other.unitless?
405
- raise Sass::SyntaxError.new("Cannot add a number with units (#{other}) to a color (#{self}).")
406
- end
407
-
408
- result = []
409
- for i in (0...3)
410
- res = rgb[i].send(operation, other_num ? other.value : other.rgb[i])
411
- result[i] = [ [res, 255].min, 0 ].max
412
- end
413
-
414
- if !other_num && other.alpha != alpha
415
- raise Sass::SyntaxError.new("Alpha channels must be equal: #{self} #{operation} #{other}")
416
- end
417
-
418
- with(:red => result[0], :green => result[1], :blue => result[2])
419
- end
420
-
421
- def hsl_to_rgb!
422
- return if @attrs[:red] && @attrs[:blue] && @attrs[:green]
423
-
424
- h = @attrs[:hue] / 360.0
425
- s = @attrs[:saturation] / 100.0
426
- l = @attrs[:lightness] / 100.0
427
-
428
- # Algorithm from the CSS3 spec: http://www.w3.org/TR/css3-color/#hsl-color.
429
- m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s
430
- m1 = l * 2 - m2
431
- @attrs[:red], @attrs[:green], @attrs[:blue] = [
432
- hue_to_rgb(m1, m2, h + 1.0/3),
433
- hue_to_rgb(m1, m2, h),
434
- hue_to_rgb(m1, m2, h - 1.0/3)
435
- ].map {|c| (c * 0xff).round}
436
- end
437
-
438
- def hue_to_rgb(m1, m2, h)
439
- h += 1 if h < 0
440
- h -= 1 if h > 1
441
- return m1 + (m2 - m1) * h * 6 if h * 6 < 1
442
- return m2 if h * 2 < 1
443
- return m1 + (m2 - m1) * (2.0/3 - h) * 6 if h * 3 < 2
444
- return m1
445
- end
446
-
447
- def rgb_to_hsl!
448
- return if @attrs[:hue] && @attrs[:saturation] && @attrs[:lightness]
449
- r, g, b = [:red, :green, :blue].map {|k| @attrs[k] / 255.0}
450
-
451
- # Algorithm from http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
452
- max = [r, g, b].max
453
- min = [r, g, b].min
454
- d = max - min
455
-
456
- h =
457
- case max
458
- when min; 0
459
- when r; 60 * (g-b)/d
460
- when g; 60 * (b-r)/d + 120
461
- when b; 60 * (r-g)/d + 240
462
- end
463
-
464
- l = (max + min)/2.0
465
-
466
- s =
467
- if max == min
468
- 0
469
- elsif l < 0.5
470
- d/(2*l)
471
- else
472
- d/(2 - 2*l)
473
- end
474
-
475
- @attrs[:hue] = h % 360
476
- @attrs[:saturation] = s * 100
477
- @attrs[:lightness] = l * 100
478
- end
479
- end
480
- end