haml_ejs 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. data/.yardopts +11 -0
  2. data/CONTRIBUTING +3 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +68 -0
  5. data/Rakefile +419 -0
  6. data/VERSION +1 -0
  7. data/VERSION_NAME +1 -0
  8. data/bin/haml +9 -0
  9. data/bin/html2haml +7 -0
  10. data/extra/update_watch.rb +13 -0
  11. data/init.rb +18 -0
  12. data/lib/haml.rb +49 -0
  13. data/lib/haml/buffer.rb +297 -0
  14. data/lib/haml/compiler.rb +486 -0
  15. data/lib/haml/engine.rb +312 -0
  16. data/lib/haml/error.rb +22 -0
  17. data/lib/haml/exec.rb +362 -0
  18. data/lib/haml/filters.rb +388 -0
  19. data/lib/haml/haml_ejs.rb +57 -0
  20. data/lib/haml/helpers.rb +608 -0
  21. data/lib/haml/helpers/action_view_extensions.rb +57 -0
  22. data/lib/haml/helpers/action_view_mods.rb +257 -0
  23. data/lib/haml/helpers/xss_mods.rb +165 -0
  24. data/lib/haml/html.rb +412 -0
  25. data/lib/haml/html/erb.rb +141 -0
  26. data/lib/haml/parser.rb +760 -0
  27. data/lib/haml/railtie.rb +19 -0
  28. data/lib/haml/root.rb +7 -0
  29. data/lib/haml/shared.rb +78 -0
  30. data/lib/haml/template.rb +99 -0
  31. data/lib/haml/template/options.rb +16 -0
  32. data/lib/haml/template/patch.rb +58 -0
  33. data/lib/haml/template/plugin.rb +123 -0
  34. data/lib/haml/util.rb +842 -0
  35. data/lib/haml/version.rb +109 -0
  36. data/lib/sass.rb +8 -0
  37. data/lib/sass/plugin.rb +10 -0
  38. data/lib/sass/rails2_shim.rb +9 -0
  39. data/lib/sass/rails3_shim.rb +16 -0
  40. data/rails/init.rb +1 -0
  41. data/test/benchmark.rb +91 -0
  42. data/test/gemfiles/Gemfile.rails-2.0.x +8 -0
  43. data/test/gemfiles/Gemfile.rails-2.0.x.lock +38 -0
  44. data/test/gemfiles/Gemfile.rails-2.1.x +8 -0
  45. data/test/gemfiles/Gemfile.rails-2.1.x.lock +38 -0
  46. data/test/gemfiles/Gemfile.rails-2.2.x +8 -0
  47. data/test/gemfiles/Gemfile.rails-2.2.x.lock +38 -0
  48. data/test/gemfiles/Gemfile.rails-2.3.x +8 -0
  49. data/test/gemfiles/Gemfile.rails-2.3.x.lock +40 -0
  50. data/test/gemfiles/Gemfile.rails-3.0.x +8 -0
  51. data/test/gemfiles/Gemfile.rails-3.0.x.lock +85 -0
  52. data/test/gemfiles/Gemfile.rails-3.1.x +8 -0
  53. data/test/gemfiles/Gemfile.rails-3.1.x.lock +98 -0
  54. data/test/gemfiles/Gemfile.rails-xss-2.3.x +9 -0
  55. data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +42 -0
  56. data/test/haml-ejs/haml-ejs_test.rb +22 -0
  57. data/test/haml-ejs/templates/conditional.input +3 -0
  58. data/test/haml-ejs/templates/conditional.output +3 -0
  59. data/test/haml-ejs/templates/conditional_and_interpolation.input +2 -0
  60. data/test/haml-ejs/templates/conditional_and_interpolation.output +3 -0
  61. data/test/haml-ejs/templates/conditional_else.input +5 -0
  62. data/test/haml-ejs/templates/conditional_else.output +5 -0
  63. data/test/haml-ejs/templates/conditional_else_elsif.input +7 -0
  64. data/test/haml-ejs/templates/conditional_else_elsif.output +7 -0
  65. data/test/haml-ejs/templates/conditional_elsif.input +5 -0
  66. data/test/haml-ejs/templates/conditional_elsif.output +5 -0
  67. data/test/haml-ejs/templates/conditional_unless.input +3 -0
  68. data/test/haml-ejs/templates/conditional_unless.output +3 -0
  69. data/test/haml-ejs/templates/conditional_unless_else.input +5 -0
  70. data/test/haml-ejs/templates/conditional_unless_else.output +5 -0
  71. data/test/haml-ejs/templates/conditional_unless_elsif_else.input +5 -0
  72. data/test/haml-ejs/templates/conditional_unless_elsif_else.output +5 -0
  73. data/test/haml-ejs/templates/interpolation.input +2 -0
  74. data/test/haml-ejs/templates/interpolation.output +1 -0
  75. data/test/haml-ejs/templates/iteration.input +2 -0
  76. data/test/haml-ejs/templates/iteration.output +3 -0
  77. data/test/haml-ejs/templates/suite.input +26 -0
  78. data/test/haml-ejs/templates/suite.output +27 -0
  79. data/test/haml/engine_test.rb +1925 -0
  80. data/test/haml/erb/_av_partial_1.erb +12 -0
  81. data/test/haml/erb/_av_partial_2.erb +8 -0
  82. data/test/haml/erb/action_view.erb +62 -0
  83. data/test/haml/erb/standard.erb +55 -0
  84. data/test/haml/helper_test.rb +454 -0
  85. data/test/haml/html2haml/erb_tests.rb +440 -0
  86. data/test/haml/html2haml_test.rb +336 -0
  87. data/test/haml/markaby/standard.mab +52 -0
  88. data/test/haml/mocks/article.rb +6 -0
  89. data/test/haml/results/content_for_layout.xhtml +12 -0
  90. data/test/haml/results/eval_suppressed.xhtml +9 -0
  91. data/test/haml/results/filters.xhtml +62 -0
  92. data/test/haml/results/helpers.xhtml +70 -0
  93. data/test/haml/results/helpful.xhtml +10 -0
  94. data/test/haml/results/just_stuff.xhtml +70 -0
  95. data/test/haml/results/list.xhtml +12 -0
  96. data/test/haml/results/nuke_inner_whitespace.xhtml +40 -0
  97. data/test/haml/results/nuke_outer_whitespace.xhtml +148 -0
  98. data/test/haml/results/original_engine.xhtml +20 -0
  99. data/test/haml/results/partial_layout.xhtml +5 -0
  100. data/test/haml/results/partials.xhtml +21 -0
  101. data/test/haml/results/render_layout.xhtml +3 -0
  102. data/test/haml/results/silent_script.xhtml +74 -0
  103. data/test/haml/results/standard.xhtml +162 -0
  104. data/test/haml/results/tag_parsing.xhtml +23 -0
  105. data/test/haml/results/very_basic.xhtml +5 -0
  106. data/test/haml/results/whitespace_handling.xhtml +89 -0
  107. data/test/haml/spec/README.md +97 -0
  108. data/test/haml/spec/lua_haml_spec.lua +30 -0
  109. data/test/haml/spec/ruby_haml_test.rb +19 -0
  110. data/test/haml/spec/tests.json +534 -0
  111. data/test/haml/spec_test.rb +44 -0
  112. data/test/haml/template_test.rb +419 -0
  113. data/test/haml/templates/_av_partial_1.haml +9 -0
  114. data/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  115. data/test/haml/templates/_av_partial_2.haml +5 -0
  116. data/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  117. data/test/haml/templates/_layout.erb +3 -0
  118. data/test/haml/templates/_layout_for_partial.haml +3 -0
  119. data/test/haml/templates/_partial.haml +8 -0
  120. data/test/haml/templates/_text_area.haml +3 -0
  121. data/test/haml/templates/action_view.haml +47 -0
  122. data/test/haml/templates/action_view_ugly.haml +47 -0
  123. data/test/haml/templates/breakage.haml +8 -0
  124. data/test/haml/templates/content_for_layout.haml +8 -0
  125. data/test/haml/templates/eval_suppressed.haml +11 -0
  126. data/test/haml/templates/filters.haml +66 -0
  127. data/test/haml/templates/helpers.haml +55 -0
  128. data/test/haml/templates/helpful.haml +11 -0
  129. data/test/haml/templates/just_stuff.haml +85 -0
  130. data/test/haml/templates/list.haml +12 -0
  131. data/test/haml/templates/nuke_inner_whitespace.haml +32 -0
  132. data/test/haml/templates/nuke_outer_whitespace.haml +144 -0
  133. data/test/haml/templates/original_engine.haml +17 -0
  134. data/test/haml/templates/partial_layout.haml +10 -0
  135. data/test/haml/templates/partialize.haml +1 -0
  136. data/test/haml/templates/partials.haml +12 -0
  137. data/test/haml/templates/render_layout.haml +2 -0
  138. data/test/haml/templates/silent_script.haml +40 -0
  139. data/test/haml/templates/standard.haml +43 -0
  140. data/test/haml/templates/standard_ugly.haml +43 -0
  141. data/test/haml/templates/tag_parsing.haml +21 -0
  142. data/test/haml/templates/very_basic.haml +4 -0
  143. data/test/haml/templates/whitespace_handling.haml +87 -0
  144. data/test/haml/util_test.rb +300 -0
  145. data/test/linked_rails.rb +42 -0
  146. data/test/test_helper.rb +75 -0
  147. data/vendor/sass/CONTRIBUTING +3 -0
  148. data/vendor/sass/MIT-LICENSE +20 -0
  149. data/vendor/sass/README.md +201 -0
  150. data/vendor/sass/Rakefile +339 -0
  151. data/vendor/sass/TODO +39 -0
  152. data/vendor/sass/VERSION +1 -0
  153. data/vendor/sass/VERSION_NAME +1 -0
  154. data/vendor/sass/bin/sass +8 -0
  155. data/vendor/sass/bin/sass-convert +7 -0
  156. data/vendor/sass/bin/scss +8 -0
  157. data/vendor/sass/doc-src/FAQ.md +35 -0
  158. data/vendor/sass/doc-src/INDENTED_SYNTAX.md +210 -0
  159. data/vendor/sass/doc-src/SASS_CHANGELOG.md +2214 -0
  160. data/vendor/sass/doc-src/SASS_REFERENCE.md +1957 -0
  161. data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +155 -0
  162. data/vendor/sass/ext/extconf.rb +10 -0
  163. data/vendor/sass/extra/update_watch.rb +13 -0
  164. data/vendor/sass/init.rb +18 -0
  165. data/vendor/sass/lib/sass.rb +72 -0
  166. data/vendor/sass/lib/sass/cache_stores.rb +15 -0
  167. data/vendor/sass/lib/sass/cache_stores/base.rb +84 -0
  168. data/vendor/sass/lib/sass/cache_stores/chain.rb +33 -0
  169. data/vendor/sass/lib/sass/cache_stores/filesystem.rb +58 -0
  170. data/vendor/sass/lib/sass/cache_stores/memory.rb +47 -0
  171. data/vendor/sass/lib/sass/cache_stores/null.rb +25 -0
  172. data/vendor/sass/lib/sass/callbacks.rb +66 -0
  173. data/vendor/sass/lib/sass/css.rb +294 -0
  174. data/vendor/sass/lib/sass/engine.rb +862 -0
  175. data/vendor/sass/lib/sass/environment.rb +155 -0
  176. data/vendor/sass/lib/sass/error.rb +201 -0
  177. data/vendor/sass/lib/sass/exec.rb +659 -0
  178. data/vendor/sass/lib/sass/importers.rb +22 -0
  179. data/vendor/sass/lib/sass/importers/base.rb +138 -0
  180. data/vendor/sass/lib/sass/importers/filesystem.rb +144 -0
  181. data/vendor/sass/lib/sass/less.rb +382 -0
  182. data/vendor/sass/lib/sass/plugin.rb +136 -0
  183. data/vendor/sass/lib/sass/plugin/compiler.rb +358 -0
  184. data/vendor/sass/lib/sass/plugin/configuration.rb +125 -0
  185. data/vendor/sass/lib/sass/plugin/generic.rb +15 -0
  186. data/vendor/sass/lib/sass/plugin/merb.rb +48 -0
  187. data/vendor/sass/lib/sass/plugin/rack.rb +60 -0
  188. data/vendor/sass/lib/sass/plugin/rails.rb +47 -0
  189. data/vendor/sass/lib/sass/plugin/staleness_checker.rb +173 -0
  190. data/vendor/sass/lib/sass/railtie.rb +9 -0
  191. data/vendor/sass/lib/sass/repl.rb +58 -0
  192. data/vendor/sass/lib/sass/root.rb +7 -0
  193. data/vendor/sass/lib/sass/script.rb +40 -0
  194. data/vendor/sass/lib/sass/script/bool.rb +18 -0
  195. data/vendor/sass/lib/sass/script/color.rb +480 -0
  196. data/vendor/sass/lib/sass/script/css_lexer.rb +29 -0
  197. data/vendor/sass/lib/sass/script/css_parser.rb +31 -0
  198. data/vendor/sass/lib/sass/script/funcall.rb +162 -0
  199. data/vendor/sass/lib/sass/script/functions.rb +1343 -0
  200. data/vendor/sass/lib/sass/script/interpolation.rb +70 -0
  201. data/vendor/sass/lib/sass/script/lexer.rb +334 -0
  202. data/vendor/sass/lib/sass/script/list.rb +76 -0
  203. data/vendor/sass/lib/sass/script/literal.rb +245 -0
  204. data/vendor/sass/lib/sass/script/node.rb +91 -0
  205. data/vendor/sass/lib/sass/script/number.rb +429 -0
  206. data/vendor/sass/lib/sass/script/operation.rb +91 -0
  207. data/vendor/sass/lib/sass/script/parser.rb +467 -0
  208. data/vendor/sass/lib/sass/script/string.rb +51 -0
  209. data/vendor/sass/lib/sass/script/string_interpolation.rb +94 -0
  210. data/vendor/sass/lib/sass/script/unary_operation.rb +57 -0
  211. data/vendor/sass/lib/sass/script/variable.rb +54 -0
  212. data/vendor/sass/lib/sass/scss.rb +17 -0
  213. data/vendor/sass/lib/sass/scss/css_parser.rb +46 -0
  214. data/vendor/sass/lib/sass/scss/parser.rb +920 -0
  215. data/vendor/sass/lib/sass/scss/rx.rb +127 -0
  216. data/vendor/sass/lib/sass/scss/sass_parser.rb +11 -0
  217. data/vendor/sass/lib/sass/scss/script_lexer.rb +15 -0
  218. data/vendor/sass/lib/sass/scss/script_parser.rb +25 -0
  219. data/vendor/sass/lib/sass/scss/static_parser.rb +40 -0
  220. data/vendor/sass/lib/sass/selector.rb +361 -0
  221. data/vendor/sass/lib/sass/selector/abstract_sequence.rb +62 -0
  222. data/vendor/sass/lib/sass/selector/comma_sequence.rb +81 -0
  223. data/vendor/sass/lib/sass/selector/sequence.rb +233 -0
  224. data/vendor/sass/lib/sass/selector/simple.rb +113 -0
  225. data/vendor/sass/lib/sass/selector/simple_sequence.rb +134 -0
  226. data/vendor/sass/lib/sass/shared.rb +78 -0
  227. data/vendor/sass/lib/sass/tree/charset_node.rb +22 -0
  228. data/vendor/sass/lib/sass/tree/comment_node.rb +77 -0
  229. data/vendor/sass/lib/sass/tree/debug_node.rb +18 -0
  230. data/vendor/sass/lib/sass/tree/directive_node.rb +23 -0
  231. data/vendor/sass/lib/sass/tree/each_node.rb +24 -0
  232. data/vendor/sass/lib/sass/tree/extend_node.rb +29 -0
  233. data/vendor/sass/lib/sass/tree/for_node.rb +36 -0
  234. data/vendor/sass/lib/sass/tree/function_node.rb +27 -0
  235. data/vendor/sass/lib/sass/tree/if_node.rb +65 -0
  236. data/vendor/sass/lib/sass/tree/import_node.rb +68 -0
  237. data/vendor/sass/lib/sass/tree/media_node.rb +32 -0
  238. data/vendor/sass/lib/sass/tree/mixin_def_node.rb +27 -0
  239. data/vendor/sass/lib/sass/tree/mixin_node.rb +32 -0
  240. data/vendor/sass/lib/sass/tree/node.rb +204 -0
  241. data/vendor/sass/lib/sass/tree/prop_node.rb +155 -0
  242. data/vendor/sass/lib/sass/tree/return_node.rb +18 -0
  243. data/vendor/sass/lib/sass/tree/root_node.rb +28 -0
  244. data/vendor/sass/lib/sass/tree/rule_node.rb +129 -0
  245. data/vendor/sass/lib/sass/tree/variable_node.rb +30 -0
  246. data/vendor/sass/lib/sass/tree/visitors/base.rb +75 -0
  247. data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +134 -0
  248. data/vendor/sass/lib/sass/tree/visitors/convert.rb +255 -0
  249. data/vendor/sass/lib/sass/tree/visitors/cssize.rb +175 -0
  250. data/vendor/sass/lib/sass/tree/visitors/perform.rb +301 -0
  251. data/vendor/sass/lib/sass/tree/visitors/to_css.rb +216 -0
  252. data/vendor/sass/lib/sass/tree/warn_node.rb +18 -0
  253. data/vendor/sass/lib/sass/tree/while_node.rb +18 -0
  254. data/vendor/sass/lib/sass/util.rb +669 -0
  255. data/vendor/sass/lib/sass/util/subset_map.rb +101 -0
  256. data/vendor/sass/lib/sass/version.rb +112 -0
  257. data/vendor/sass/rails/init.rb +1 -0
  258. data/vendor/sass/sass.gemspec +32 -0
  259. data/vendor/sass/test/sass/cache_test.rb +74 -0
  260. data/vendor/sass/test/sass/callbacks_test.rb +61 -0
  261. data/vendor/sass/test/sass/conversion_test.rb +1203 -0
  262. data/vendor/sass/test/sass/css2sass_test.rb +364 -0
  263. data/vendor/sass/test/sass/data/hsl-rgb.txt +319 -0
  264. data/vendor/sass/test/sass/engine_test.rb +2469 -0
  265. data/vendor/sass/test/sass/extend_test.rb +1348 -0
  266. data/vendor/sass/test/sass/functions_test.rb +1025 -0
  267. data/vendor/sass/test/sass/importer_test.rb +82 -0
  268. data/vendor/sass/test/sass/less_conversion_test.rb +653 -0
  269. data/vendor/sass/test/sass/mock_importer.rb +49 -0
  270. data/vendor/sass/test/sass/more_results/more1.css +9 -0
  271. data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +26 -0
  272. data/vendor/sass/test/sass/more_results/more_import.css +29 -0
  273. data/vendor/sass/test/sass/more_templates/_more_partial.sass +2 -0
  274. data/vendor/sass/test/sass/more_templates/more1.sass +23 -0
  275. data/vendor/sass/test/sass/more_templates/more_import.sass +11 -0
  276. data/vendor/sass/test/sass/plugin_test.rb +469 -0
  277. data/vendor/sass/test/sass/results/alt.css +4 -0
  278. data/vendor/sass/test/sass/results/basic.css +9 -0
  279. data/vendor/sass/test/sass/results/compact.css +5 -0
  280. data/vendor/sass/test/sass/results/complex.css +86 -0
  281. data/vendor/sass/test/sass/results/compressed.css +1 -0
  282. data/vendor/sass/test/sass/results/expanded.css +19 -0
  283. data/vendor/sass/test/sass/results/if.css +3 -0
  284. data/vendor/sass/test/sass/results/import.css +31 -0
  285. data/vendor/sass/test/sass/results/import_charset.css +4 -0
  286. data/vendor/sass/test/sass/results/import_charset_1_8.css +4 -0
  287. data/vendor/sass/test/sass/results/import_charset_ibm866.css +4 -0
  288. data/vendor/sass/test/sass/results/line_numbers.css +49 -0
  289. data/vendor/sass/test/sass/results/mixins.css +95 -0
  290. data/vendor/sass/test/sass/results/multiline.css +24 -0
  291. data/vendor/sass/test/sass/results/nested.css +22 -0
  292. data/vendor/sass/test/sass/results/options.css +1 -0
  293. data/vendor/sass/test/sass/results/parent_ref.css +13 -0
  294. data/vendor/sass/test/sass/results/script.css +16 -0
  295. data/vendor/sass/test/sass/results/scss_import.css +31 -0
  296. data/vendor/sass/test/sass/results/scss_importee.css +2 -0
  297. data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  298. data/vendor/sass/test/sass/results/subdir/subdir.css +3 -0
  299. data/vendor/sass/test/sass/results/units.css +11 -0
  300. data/vendor/sass/test/sass/results/warn.css +0 -0
  301. data/vendor/sass/test/sass/results/warn_imported.css +0 -0
  302. data/vendor/sass/test/sass/script_conversion_test.rb +283 -0
  303. data/vendor/sass/test/sass/script_test.rb +496 -0
  304. data/vendor/sass/test/sass/scss/css_test.rb +916 -0
  305. data/vendor/sass/test/sass/scss/rx_test.rb +156 -0
  306. data/vendor/sass/test/sass/scss/scss_test.rb +1249 -0
  307. data/vendor/sass/test/sass/scss/test_helper.rb +37 -0
  308. data/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  309. data/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +4 -0
  310. data/vendor/sass/test/sass/templates/_partial.sass +2 -0
  311. data/vendor/sass/test/sass/templates/alt.sass +16 -0
  312. data/vendor/sass/test/sass/templates/basic.sass +23 -0
  313. data/vendor/sass/test/sass/templates/bork1.sass +2 -0
  314. data/vendor/sass/test/sass/templates/bork2.sass +2 -0
  315. data/vendor/sass/test/sass/templates/bork3.sass +2 -0
  316. data/vendor/sass/test/sass/templates/bork4.sass +2 -0
  317. data/vendor/sass/test/sass/templates/compact.sass +17 -0
  318. data/vendor/sass/test/sass/templates/complex.sass +305 -0
  319. data/vendor/sass/test/sass/templates/compressed.sass +15 -0
  320. data/vendor/sass/test/sass/templates/expanded.sass +17 -0
  321. data/vendor/sass/test/sass/templates/if.sass +11 -0
  322. data/vendor/sass/test/sass/templates/import.sass +12 -0
  323. data/vendor/sass/test/sass/templates/import_charset.sass +7 -0
  324. data/vendor/sass/test/sass/templates/import_charset_1_8.sass +4 -0
  325. data/vendor/sass/test/sass/templates/import_charset_ibm866.sass +9 -0
  326. data/vendor/sass/test/sass/templates/importee.less +2 -0
  327. data/vendor/sass/test/sass/templates/importee.sass +19 -0
  328. data/vendor/sass/test/sass/templates/line_numbers.sass +13 -0
  329. data/vendor/sass/test/sass/templates/mixin_bork.sass +5 -0
  330. data/vendor/sass/test/sass/templates/mixins.sass +76 -0
  331. data/vendor/sass/test/sass/templates/multiline.sass +20 -0
  332. data/vendor/sass/test/sass/templates/nested.sass +25 -0
  333. data/vendor/sass/test/sass/templates/nested_bork1.sass +2 -0
  334. data/vendor/sass/test/sass/templates/nested_bork2.sass +2 -0
  335. data/vendor/sass/test/sass/templates/nested_bork3.sass +2 -0
  336. data/vendor/sass/test/sass/templates/nested_bork4.sass +2 -0
  337. data/vendor/sass/test/sass/templates/nested_import.sass +2 -0
  338. data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +6 -0
  339. data/vendor/sass/test/sass/templates/options.sass +2 -0
  340. data/vendor/sass/test/sass/templates/parent_ref.sass +25 -0
  341. data/vendor/sass/test/sass/templates/script.sass +101 -0
  342. data/vendor/sass/test/sass/templates/scss_import.scss +11 -0
  343. data/vendor/sass/test/sass/templates/scss_importee.scss +1 -0
  344. data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  345. data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  346. data/vendor/sass/test/sass/templates/subdir/subdir.sass +6 -0
  347. data/vendor/sass/test/sass/templates/units.sass +11 -0
  348. data/vendor/sass/test/sass/templates/warn.sass +3 -0
  349. data/vendor/sass/test/sass/templates/warn_imported.sass +4 -0
  350. data/vendor/sass/test/sass/test_helper.rb +8 -0
  351. data/vendor/sass/test/sass/util/subset_map_test.rb +91 -0
  352. data/vendor/sass/test/sass/util_test.rb +254 -0
  353. data/vendor/sass/test/test_helper.rb +69 -0
  354. data/vendor/sass/yard/callbacks.rb +29 -0
  355. data/vendor/sass/yard/default/fulldoc/html/css/common.sass +26 -0
  356. data/vendor/sass/yard/default/layout/html/footer.erb +12 -0
  357. data/vendor/sass/yard/inherited_hash.rb +41 -0
  358. metadata +458 -0
@@ -0,0 +1,155 @@
1
+ module Sass::Tree
2
+ # A static node reprenting a CSS property.
3
+ #
4
+ # @see Sass::Tree
5
+ class PropNode < Node
6
+ # The name of the property,
7
+ # interspersed with {Sass::Script::Node}s
8
+ # representing `#{}`-interpolation.
9
+ # Any adjacent strings will be merged together.
10
+ #
11
+ # @return [Array<String, Sass::Script::Node>]
12
+ attr_accessor :name
13
+
14
+ # The name of the property
15
+ # after any interpolated SassScript has been resolved.
16
+ # Only set once \{Tree::Visitors::Perform} has been run.
17
+ #
18
+ # @return [String]
19
+ attr_accessor :resolved_name
20
+
21
+ # The value of the property.
22
+ #
23
+ # @return [Sass::Script::Node]
24
+ attr_accessor :value
25
+
26
+ # Whether the property was marked as !important.
27
+ #
28
+ # @return [Boolean]
29
+ attr_accessor :important
30
+
31
+ # The value of the property
32
+ # after any interpolated SassScript has been resolved.
33
+ # Only set once \{Tree::Visitors::Perform} has been run.
34
+ #
35
+ # @return [String]
36
+ attr_accessor :resolved_value
37
+
38
+ # How deep this property is indented
39
+ # relative to a normal property.
40
+ # This is only greater than 0 in the case that:
41
+ #
42
+ # * This node is in a CSS tree
43
+ # * The style is :nested
44
+ # * This is a child property of another property
45
+ # * The parent property has a value, and thus will be rendered
46
+ #
47
+ # @return [Fixnum]
48
+ attr_accessor :tabs
49
+
50
+ # @param name [Array<String, Sass::Script::Node>] See \{#name}
51
+ # @param value [Sass::Script::Node] See \{#value}
52
+ # @param important [Boolean] whether this is an !important property
53
+ # @param prop_syntax [Symbol] `:new` if this property uses `a: b`-style syntax,
54
+ # `:old` if it uses `:a b`-style syntax
55
+ def initialize(name, value, important, prop_syntax)
56
+ @name = Sass::Util.strip_string_array(
57
+ Sass::Util.merge_adjacent_strings(name))
58
+ @value = value
59
+ @tabs = 0
60
+ @prop_syntax = prop_syntax
61
+ @important = important
62
+ super()
63
+ end
64
+
65
+ # Compares the names and values of two properties.
66
+ #
67
+ # @param other [Object] The object to compare with
68
+ # @return [Boolean] Whether or not this node and the other object
69
+ # are the same
70
+ def ==(other)
71
+ self.class == other.class && name == other.name && value == other.value && super
72
+ end
73
+
74
+ # Returns a appropriate message indicating how to escape pseudo-class selectors.
75
+ # This only applies for old-style properties with no value,
76
+ # so returns the empty string if this is new-style.
77
+ #
78
+ # @return [String] The message
79
+ def pseudo_class_selector_message
80
+ return "" if @prop_syntax == :new || !value.is_a?(Sass::Script::String) || !value.value.empty?
81
+ "\nIf #{declaration.dump} should be a selector, use \"\\#{declaration}\" instead."
82
+ end
83
+
84
+ # Computes the Sass or SCSS code for the variable declaration.
85
+ # This is like \{#to\_scss} or \{#to\_sass},
86
+ # except it doesn't print any child properties or a trailing semicolon.
87
+ #
88
+ # @param opts [{Symbol => Object}] The options hash for the tree.
89
+ # @param fmt [Symbol] `:scss` or `:sass`.
90
+ def declaration(opts = {:old => @prop_syntax == :old}, fmt = :sass)
91
+ name = self.name.map {|n| n.is_a?(String) ? n : "\#{#{n.to_sass(opts)}}"}.join
92
+ if name[0] == ?:
93
+ raise Sass::SyntaxError.new("The \"#{name}: #{self.class.val_to_sass(value, opts)}\" hack is not allowed in the Sass indented syntax")
94
+ end
95
+
96
+ old = opts[:old] && fmt == :sass
97
+ initial = old ? ':' : ''
98
+ mid = old ? '' : ':'
99
+ "#{initial}#{name}#{mid} #{self.class.val_to_sass(value, opts)}#{' !important' if important}".rstrip
100
+ end
101
+
102
+ private
103
+
104
+ def check!
105
+ if @options[:property_syntax] && @options[:property_syntax] != @prop_syntax
106
+ raise Sass::SyntaxError.new(
107
+ "Illegal property syntax: can't use #{@prop_syntax} syntax when :property_syntax => #{@options[:property_syntax].inspect} is set.")
108
+ elsif resolved_value.empty?
109
+ raise Sass::SyntaxError.new("Invalid property: #{declaration.dump} (no value)." +
110
+ pseudo_class_selector_message)
111
+ end
112
+ end
113
+
114
+ class << self
115
+ # @private
116
+ def val_to_sass(value, opts)
117
+ val_to_sass_comma(value, opts).to_sass(opts)
118
+ end
119
+
120
+ private
121
+
122
+ def val_to_sass_comma(node, opts)
123
+ return node unless node.is_a?(Sass::Script::Operation)
124
+ return val_to_sass_concat(node, opts) unless node.operator == :comma
125
+
126
+ Sass::Script::Operation.new(
127
+ val_to_sass_concat(node.operand1, opts),
128
+ val_to_sass_comma(node.operand2, opts),
129
+ node.operator)
130
+ end
131
+
132
+ def val_to_sass_concat(node, opts)
133
+ return node unless node.is_a?(Sass::Script::Operation)
134
+ return val_to_sass_div(node, opts) unless node.operator == :space
135
+
136
+ Sass::Script::Operation.new(
137
+ val_to_sass_div(node.operand1, opts),
138
+ val_to_sass_concat(node.operand2, opts),
139
+ node.operator)
140
+ end
141
+
142
+ def val_to_sass_div(node, opts)
143
+ unless node.is_a?(Sass::Script::Operation) && node.operator == :div &&
144
+ node.operand1.is_a?(Sass::Script::Number) &&
145
+ node.operand2.is_a?(Sass::Script::Number) &&
146
+ (!node.operand1.original || !node.operand2.original)
147
+ return node
148
+ end
149
+
150
+ Sass::Script::String.new("(#{node.to_sass(opts)})")
151
+ end
152
+
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,18 @@
1
+ module Sass
2
+ module Tree
3
+ # A dynamic node representing returning from a function.
4
+ #
5
+ # @see Sass::Tree
6
+ class ReturnNode < Node
7
+ # The expression to return.
8
+ # @type [Script::Node]
9
+ attr_reader :expr
10
+
11
+ # @param expr [Script::Node] The expression to return
12
+ def initialize(expr)
13
+ @expr = expr
14
+ super()
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ module Sass
2
+ module Tree
3
+ # A static node that is the root node of the Sass document.
4
+ class RootNode < Node
5
+ # The Sass template from which this node was created
6
+ #
7
+ # @param template [String]
8
+ attr_reader :template
9
+
10
+ # @param template [String] The Sass template from which this node was created
11
+ def initialize(template)
12
+ super()
13
+ @template = template
14
+ end
15
+
16
+ # Runs the dynamic Sass code *and* computes the CSS for the tree.
17
+ # @see #to_s
18
+ def render
19
+ Visitors::CheckNesting.visit(self)
20
+ result = Visitors::Perform.visit(self)
21
+ Visitors::CheckNesting.visit(result) # Check again to validate mixins
22
+ result, extends = Visitors::Cssize.visit(result)
23
+ result = result.do_extend(extends) unless extends.empty?
24
+ result.to_s
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,129 @@
1
+ require 'pathname'
2
+ require 'uri'
3
+
4
+ module Sass::Tree
5
+ # A static node reprenting a CSS rule.
6
+ #
7
+ # @see Sass::Tree
8
+ class RuleNode < Node
9
+ # The character used to include the parent selector
10
+ PARENT = '&'
11
+
12
+ # The CSS selector for this rule,
13
+ # interspersed with {Sass::Script::Node}s
14
+ # representing `#{}`-interpolation.
15
+ # Any adjacent strings will be merged together.
16
+ #
17
+ # @return [Array<String, Sass::Script::Node>]
18
+ attr_accessor :rule
19
+
20
+ # The CSS selector for this rule,
21
+ # without any unresolved interpolation
22
+ # but with parent references still intact.
23
+ # It's only set once {Tree::Node#perform} has been called.
24
+ #
25
+ # @return [Selector::CommaSequence]
26
+ attr_accessor :parsed_rules
27
+
28
+ # The CSS selector for this rule,
29
+ # without any unresolved interpolation or parent references.
30
+ # It's only set once {Tree::Visitors::Cssize} has been run.
31
+ #
32
+ # @return [Selector::CommaSequence]
33
+ attr_accessor :resolved_rules
34
+
35
+ # How deep this rule is indented
36
+ # relative to a base-level rule.
37
+ # This is only greater than 0 in the case that:
38
+ #
39
+ # * This node is in a CSS tree
40
+ # * The style is :nested
41
+ # * This is a child rule of another rule
42
+ # * The parent rule has properties, and thus will be rendered
43
+ #
44
+ # @return [Fixnum]
45
+ attr_accessor :tabs
46
+
47
+ # Whether or not this rule is the last rule in a nested group.
48
+ # This is only set in a CSS tree.
49
+ #
50
+ # @return [Boolean]
51
+ attr_accessor :group_end
52
+
53
+ # @param rule [Array<String, Sass::Script::Node>]
54
+ # The CSS rule. See \{#rule}
55
+ def initialize(rule)
56
+ merged = Sass::Util.merge_adjacent_strings(rule)
57
+ @rule = Sass::Util.strip_string_array(merged)
58
+ @tabs = 0
59
+ try_to_parse_non_interpolated_rules
60
+ super()
61
+ end
62
+
63
+ # If we've precached the parsed selector, set the line on it, too.
64
+ def line=(line)
65
+ @parsed_rules.line = line if @parsed_rules
66
+ super
67
+ end
68
+
69
+ # If we've precached the parsed selector, set the filename on it, too.
70
+ def filename=(filename)
71
+ @parsed_rules.filename = filename if @parsed_rules
72
+ super
73
+ end
74
+
75
+ # Compares the contents of two rules.
76
+ #
77
+ # @param other [Object] The object to compare with
78
+ # @return [Boolean] Whether or not this node and the other object
79
+ # are the same
80
+ def ==(other)
81
+ self.class == other.class && rule == other.rule && super
82
+ end
83
+
84
+ # Adds another {RuleNode}'s rules to this one's.
85
+ #
86
+ # @param node [RuleNode] The other node
87
+ def add_rules(node)
88
+ @rule = Sass::Util.strip_string_array(
89
+ Sass::Util.merge_adjacent_strings(@rule + ["\n"] + node.rule))
90
+ try_to_parse_non_interpolated_rules
91
+ end
92
+
93
+ # @return [Boolean] Whether or not this rule is continued on the next line
94
+ def continued?
95
+ last = @rule.last
96
+ last.is_a?(String) && last[-1] == ?,
97
+ end
98
+
99
+ # Extends this Rule's selector with the given `extends`.
100
+ #
101
+ # @see Node#do_extend
102
+ def do_extend(extends)
103
+ node = dup
104
+ node.resolved_rules = resolved_rules.do_extend(extends)
105
+ node
106
+ end
107
+
108
+ # A hash that will be associated with this rule in the CSS document
109
+ # if the {file:SASS_REFERENCE.md#debug_info-option `:debug_info` option} is enabled.
110
+ # This data is used by e.g. [the FireSass Firebug extension](https://addons.mozilla.org/en-US/firefox/addon/103988).
111
+ #
112
+ # @return [{#to_s => #to_s}]
113
+ def debug_info
114
+ {:filename => filename && ("file://" + URI.escape(File.expand_path(filename))),
115
+ :line => self.line}
116
+ end
117
+
118
+ private
119
+
120
+ def try_to_parse_non_interpolated_rules
121
+ if @rule.all? {|t| t.kind_of?(String)}
122
+ # We don't use real filename/line info because we don't have it yet.
123
+ # When we get it, we'll set it on the parsed rules if possible.
124
+ parser = Sass::SCSS::StaticParser.new(@rule.join.strip, 1)
125
+ @parsed_rules = parser.parse_selector('') rescue nil
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,30 @@
1
+ module Sass
2
+ module Tree
3
+ # A dynamic node representing a variable definition.
4
+ #
5
+ # @see Sass::Tree
6
+ class VariableNode < Node
7
+ # The name of the variable.
8
+ # @return [String]
9
+ attr_reader :name
10
+
11
+ # The parse tree for the variable value.
12
+ # @return [Script::Node]
13
+ attr_reader :expr
14
+
15
+ # Whether this is a guarded variable assignment (`!default`).
16
+ # @return [Boolean]
17
+ attr_reader :guarded
18
+
19
+ # @param name [String] The name of the variable
20
+ # @param expr [Script::Node] See \{#expr}
21
+ # @param guarded [Boolean] See \{#guarded}
22
+ def initialize(name, expr, guarded)
23
+ @name = name
24
+ @expr = expr
25
+ @guarded = guarded
26
+ super()
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,75 @@
1
+ # Visitors are used to traverse the Sass parse tree.
2
+ # Visitors should extend {Visitors::Base},
3
+ # which provides a small amount of scaffolding for traversal.
4
+ module Sass::Tree::Visitors
5
+ # The abstract base class for Sass visitors.
6
+ # Visitors should extend this class,
7
+ # then implement `visit_*` methods for each node they care about
8
+ # (e.g. `visit_rule` for {RuleNode} or `visit_for` for {ForNode}).
9
+ # These methods take the node in question as argument.
10
+ # They may `yield` to visit the child nodes of the current node.
11
+ #
12
+ # *Note*: due to the unusual nature of {Sass::Tree::IfNode},
13
+ # special care must be taken to ensure that it is properly handled.
14
+ # In particular, there is no built-in scaffolding
15
+ # for dealing with the return value of `@else` nodes.
16
+ #
17
+ # @abstract
18
+ class Base
19
+ # Runs the visitor on a tree.
20
+ #
21
+ # @param root [Tree::Node] The root node of the Sass tree.
22
+ # @return [Object] The return value of \{#visit} for the root node.
23
+ def self.visit(root)
24
+ new.send(:visit, root)
25
+ end
26
+
27
+ protected
28
+
29
+ # Runs the visitor on the given node.
30
+ # This can be overridden by subclasses that need to do something for each node.
31
+ #
32
+ # @param node [Tree::Node] The node to visit.
33
+ # @return [Object] The return value of the `visit_*` method for this node.
34
+ def visit(node)
35
+ method = "visit_#{node_name node}"
36
+ if self.respond_to?(method)
37
+ self.send(method, node) {visit_children(node)}
38
+ else
39
+ visit_children(node)
40
+ end
41
+ end
42
+
43
+ # Visit the child nodes for a given node.
44
+ # This can be overridden by subclasses that need to do something
45
+ # with the child nodes' return values.
46
+ #
47
+ # This method is run when `visit_*` methods `yield`,
48
+ # and its return value is returned from the `yield`.
49
+ #
50
+ # @param parent [Tree::Node] The parent node of the children to visit.
51
+ # @return [Array<Object>] The return values of the `visit_*` methods for the children.
52
+ def visit_children(parent)
53
+ parent.children.map {|c| visit(c)}
54
+ end
55
+
56
+ NODE_NAME_RE = /.*::(.*?)Node$/
57
+
58
+ # Returns the name of a node as used in the `visit_*` method.
59
+ #
60
+ # @param [Tree::Node] node The node.
61
+ # @return [String] The name.
62
+ def node_name(node)
63
+ @@node_names ||= {}
64
+ @@node_names[node.class.name] ||= node.class.name.gsub(NODE_NAME_RE, '\\1').downcase
65
+ end
66
+
67
+ # `yield`s, then runs the visitor on the `@else` clause if the node has one.
68
+ # This exists to ensure that the contents of the `@else` clause get visited.
69
+ def visit_if(node)
70
+ yield
71
+ visit(node.else) if node.else
72
+ node
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,134 @@
1
+ # A visitor for checking that all nodes are properly nested.
2
+ class Sass::Tree::Visitors::CheckNesting < Sass::Tree::Visitors::Base
3
+ protected
4
+
5
+ def visit(node)
6
+ if error = (@parent && (
7
+ try_send("invalid_#{node_name @parent}_child?", @parent, node) ||
8
+ try_send("invalid_#{node_name node}_parent?", @parent, node))) ||
9
+ (@real_parent && (
10
+ try_send("invalid_#{node_name @real_parent}_real_child?", @real_parent, node) ||
11
+ try_send("invalid_#{node_name node}_real_parent?", @real_parent, node)))
12
+ raise Sass::SyntaxError.new(error)
13
+ end
14
+ super
15
+ rescue Sass::SyntaxError => e
16
+ e.modify_backtrace(:filename => node.filename, :line => node.line)
17
+ raise e
18
+ end
19
+
20
+ PARENT_CLASSES = [ Sass::Tree::EachNode, Sass::Tree::ForNode, Sass::Tree::IfNode,
21
+ Sass::Tree::ImportNode, Sass::Tree::MixinNode, Sass::Tree::WhileNode]
22
+ def visit_children(parent)
23
+ old_parent = @parent
24
+ @parent = parent unless is_any_of?(parent, PARENT_CLASSES)
25
+ old_real_parent, @real_parent = @real_parent, parent
26
+ super
27
+ ensure
28
+ @parent = old_parent
29
+ @real_parent = old_real_parent
30
+ end
31
+
32
+ def visit_root(node)
33
+ yield
34
+ rescue Sass::SyntaxError => e
35
+ e.sass_template ||= node.template
36
+ raise e
37
+ end
38
+
39
+ def visit_import(node)
40
+ yield
41
+ rescue Sass::SyntaxError => e
42
+ e.modify_backtrace(:filename => node.children.first.filename)
43
+ e.add_backtrace(:filename => node.filename, :line => node.line)
44
+ raise e
45
+ end
46
+
47
+ def invalid_charset_parent?(parent, child)
48
+ "@charset may only be used at the root of a document." unless parent.is_a?(Sass::Tree::RootNode)
49
+ end
50
+
51
+ INVALID_EXTEND_PARENTS = [Sass::Tree::RuleNode, Sass::Tree::MixinDefNode]
52
+ def invalid_extend_parent?(parent, child)
53
+ unless is_any_of?(parent, INVALID_EXTEND_PARENTS)
54
+ "Extend directives may only be used within rules."
55
+ end
56
+ end
57
+
58
+ def invalid_function_parent?(parent, child)
59
+ "Functions may only be defined at the root of a document." unless parent.is_a?(Sass::Tree::RootNode)
60
+ end
61
+
62
+ INVALID_FUNCTION_CHILDREN = [
63
+ Sass::Tree::CommentNode, Sass::Tree::DebugNode, Sass::Tree::EachNode,
64
+ Sass::Tree::ForNode, Sass::Tree::IfNode, Sass::Tree::ReturnNode,
65
+ Sass::Tree::VariableNode, Sass::Tree::WarnNode, Sass::Tree::WhileNode
66
+ ]
67
+ def invalid_function_child?(parent, child)
68
+ unless is_any_of?(child, INVALID_FUNCTION_CHILDREN)
69
+ "Functions can only contain variable declarations and control directives."
70
+ end
71
+ end
72
+
73
+ INVALID_IMPORT_PARENTS = [
74
+ Sass::Tree::IfNode, Sass::Tree::ForNode, Sass::Tree::WhileNode,
75
+ Sass::Tree::EachNode, Sass::Tree::MixinDefNode
76
+ ]
77
+ def invalid_import_parent?(parent, child)
78
+ if is_any_of?(@real_parent, INVALID_IMPORT_PARENTS)
79
+ return "Import directives may not be used within control directives or mixins."
80
+ end
81
+ return if parent.is_a?(Sass::Tree::RootNode)
82
+ return "CSS import directives may only be used at the root of a document." if child.css_import?
83
+ # If this is a nested @import, we need to make sure it doesn't have anything
84
+ # that's legal at top-level but not in the current context (e.g. mixin defs).
85
+ child.imported_file.to_tree.children.each {|c| visit(c)}
86
+ nil
87
+ rescue Sass::SyntaxError => e
88
+ e.modify_backtrace(:filename => child.imported_file.options[:filename])
89
+ e.add_backtrace(:filename => child.filename, :line => child.line)
90
+ raise e
91
+ end
92
+
93
+ def invalid_import_real_parent?(parent, child)
94
+
95
+ end
96
+
97
+ def invalid_mixindef_parent?(parent, child)
98
+ "Mixins may only be defined at the root of a document." unless parent.is_a?(Sass::Tree::RootNode)
99
+ end
100
+
101
+ INVALID_PROP_CHILDREN = [Sass::Tree::CommentNode, Sass::Tree::PropNode]
102
+ def invalid_prop_child?(parent, child)
103
+ unless is_any_of?(child, INVALID_PROP_CHILDREN)
104
+ "Illegal nesting: Only properties may be nested beneath properties."
105
+ end
106
+ end
107
+
108
+ INVALID_PROP_PARENTS = [Sass::Tree::RuleNode, Sass::Tree::PropNode,
109
+ Sass::Tree::MixinDefNode, Sass::Tree::DirectiveNode]
110
+ def invalid_prop_parent?(parent, child)
111
+ unless is_any_of?(parent, INVALID_PROP_PARENTS)
112
+ "Properties are only allowed within rules, directives, or other properties." + child.pseudo_class_selector_message
113
+ end
114
+ end
115
+
116
+ def invalid_return_parent?(parent, child)
117
+ "@return may only be used within a function." unless parent.is_a?(Sass::Tree::FunctionNode)
118
+ end
119
+
120
+ private
121
+
122
+ def is_any_of?(val, classes)
123
+ for c in classes
124
+ return true if val.is_a?(c)
125
+ end
126
+ return false
127
+ end
128
+
129
+ def try_send(method, *args, &block)
130
+ return unless respond_to?(method)
131
+ send(method, *args, &block)
132
+ end
133
+ end
134
+