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,70 @@
1
+ module Sass::Script
2
+ # A SassScript object representing `#{}` interpolation outside a string.
3
+ #
4
+ # @see StringInterpolation
5
+ class Interpolation < Node
6
+ # Interpolation in a property is of the form `before #{mid} after`.
7
+ #
8
+ # @param before [Node] The SassScript before the interpolation
9
+ # @param mid [Node] The SassScript within the interpolation
10
+ # @param after [Node] The SassScript after the interpolation
11
+ # @param wb [Boolean] Whether there was whitespace between `before` and `#{`
12
+ # @param wa [Boolean] Whether there was whitespace between `}` and `after`
13
+ # @param originally_text [Boolean]
14
+ # Whether the original format of the interpolation was plain text,
15
+ # not an interpolation.
16
+ # This is used when converting back to SassScript.
17
+ def initialize(before, mid, after, wb, wa, originally_text = false)
18
+ @before = before
19
+ @mid = mid
20
+ @after = after
21
+ @whitespace_before = wb
22
+ @whitespace_after = wa
23
+ @originally_text = originally_text
24
+ end
25
+
26
+ # @return [String] A human-readable s-expression representation of the interpolation
27
+ def inspect
28
+ "(interpolation #{@before.inspect} #{@mid.inspect} #{@after.inspect})"
29
+ end
30
+
31
+ # @see Node#to_sass
32
+ def to_sass(opts = {})
33
+ res = ""
34
+ res << @before.to_sass(opts) if @before
35
+ res << ' ' if @before && @whitespace_before
36
+ res << '#{' unless @originally_text
37
+ res << @mid.to_sass(opts)
38
+ res << '}' unless @originally_text
39
+ res << ' ' if @after && @whitespace_after
40
+ res << @after.to_sass(opts) if @after
41
+ res
42
+ end
43
+
44
+ # Returns the three components of the interpolation, `before`, `mid`, and `after`.
45
+ #
46
+ # @return [Array<Node>]
47
+ # @see #initialize
48
+ # @see Node#children
49
+ def children
50
+ [@before, @mid, @after].compact
51
+ end
52
+
53
+ protected
54
+
55
+ # Evaluates the interpolation.
56
+ #
57
+ # @param environment [Sass::Environment] The environment in which to evaluate the SassScript
58
+ # @return [Sass::Script::String] The SassScript string that is the value of the interpolation
59
+ def _perform(environment)
60
+ res = ""
61
+ res << @before.perform(environment).to_s if @before
62
+ res << " " if @before && @whitespace_before
63
+ val = @mid.perform(environment)
64
+ res << (val.is_a?(Sass::Script::String) ? val.value : val.to_s)
65
+ res << " " if @after && @whitespace_after
66
+ res << @after.perform(environment).to_s if @after
67
+ opts(Sass::Script::String.new(res))
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,334 @@
1
+ require 'sass/scss/rx'
2
+
3
+ require 'strscan'
4
+
5
+ module Sass
6
+ module Script
7
+ # The lexical analyzer for SassScript.
8
+ # It takes a raw string and converts it to individual tokens
9
+ # that are easier to parse.
10
+ class Lexer
11
+ include Sass::SCSS::RX
12
+
13
+ # A struct containing information about an individual token.
14
+ #
15
+ # `type`: \[`Symbol`\]
16
+ # : The type of token.
17
+ #
18
+ # `value`: \[`Object`\]
19
+ # : The Ruby object corresponding to the value of the token.
20
+ #
21
+ # `line`: \[`Fixnum`\]
22
+ # : The line of the source file on which the token appears.
23
+ #
24
+ # `offset`: \[`Fixnum`\]
25
+ # : The number of bytes into the line the SassScript token appeared.
26
+ #
27
+ # `pos`: \[`Fixnum`\]
28
+ # : The scanner position at which the SassScript token appeared.
29
+ Token = Struct.new(:type, :value, :line, :offset, :pos)
30
+
31
+ # The line number of the lexer's current position.
32
+ #
33
+ # @return [Fixnum]
34
+ attr_reader :line
35
+
36
+ # The number of bytes into the current line
37
+ # of the lexer's current position.
38
+ #
39
+ # @return [Fixnum]
40
+ attr_reader :offset
41
+
42
+ # A hash from operator strings to the corresponding token types.
43
+ OPERATORS = {
44
+ '+' => :plus,
45
+ '-' => :minus,
46
+ '*' => :times,
47
+ '/' => :div,
48
+ '%' => :mod,
49
+ '=' => :single_eq,
50
+ ':' => :colon,
51
+ '(' => :lparen,
52
+ ')' => :rparen,
53
+ ',' => :comma,
54
+ 'and' => :and,
55
+ 'or' => :or,
56
+ 'not' => :not,
57
+ '==' => :eq,
58
+ '!=' => :neq,
59
+ '>=' => :gte,
60
+ '<=' => :lte,
61
+ '>' => :gt,
62
+ '<' => :lt,
63
+ '#{' => :begin_interpolation,
64
+ '}' => :end_interpolation,
65
+ ';' => :semicolon,
66
+ '{' => :lcurly,
67
+ }
68
+
69
+ OPERATORS_REVERSE = Sass::Util.map_hash(OPERATORS) {|k, v| [v, k]}
70
+
71
+ TOKEN_NAMES = Sass::Util.map_hash(OPERATORS_REVERSE) {|k, v| [k, v.inspect]}.merge({
72
+ :const => "variable (e.g. $foo)",
73
+ :ident => "identifier (e.g. middle)",
74
+ :bool => "boolean (e.g. true, false)",
75
+ })
76
+
77
+ # A list of operator strings ordered with longer names first
78
+ # so that `>` and `<` don't clobber `>=` and `<=`.
79
+ OP_NAMES = OPERATORS.keys.sort_by {|o| -o.size}
80
+
81
+ # A sub-list of {OP_NAMES} that only includes operators
82
+ # with identifier names.
83
+ IDENT_OP_NAMES = OP_NAMES.select {|k, v| k =~ /^\w+/}
84
+
85
+ # A hash of regular expressions that are used for tokenizing.
86
+ REGULAR_EXPRESSIONS = {
87
+ :whitespace => /\s+/,
88
+ :comment => COMMENT,
89
+ :single_line_comment => SINGLE_LINE_COMMENT,
90
+ :variable => /(\$)(#{IDENT})/,
91
+ :ident => /(#{IDENT})(\()?/,
92
+ :number => /(-)?(?:(\d*\.\d+)|(\d+))([a-zA-Z%]+)?/,
93
+ :color => HEXCOLOR,
94
+ :bool => /(true|false)\b/,
95
+ :ident_op => %r{(#{Regexp.union(*IDENT_OP_NAMES.map{|s| Regexp.new(Regexp.escape(s) + "(?!#{NMCHAR}|\Z)")})})},
96
+ :op => %r{(#{Regexp.union(*OP_NAMES)})},
97
+ }
98
+
99
+ class << self
100
+ private
101
+ def string_re(open, close)
102
+ /#{open}((?:\\.|\#(?!\{)|[^#{close}\\#])*)(#{close}|#\{)/
103
+ end
104
+ end
105
+
106
+ # A hash of regular expressions that are used for tokenizing strings.
107
+ #
108
+ # The key is a `[Symbol, Boolean]` pair.
109
+ # The symbol represents which style of quotation to use,
110
+ # while the boolean represents whether or not the string
111
+ # is following an interpolated segment.
112
+ STRING_REGULAR_EXPRESSIONS = {
113
+ [:double, false] => string_re('"', '"'),
114
+ [:single, false] => string_re("'", "'"),
115
+ [:double, true] => string_re('', '"'),
116
+ [:single, true] => string_re('', "'"),
117
+ [:uri, false] => /url\(#{W}(#{URLCHAR}*?)(#{W}\)|#\{)/,
118
+ [:uri, true] => /(#{URLCHAR}*?)(#{W}\)|#\{)/,
119
+ }
120
+
121
+ # @param str [String, StringScanner] The source text to lex
122
+ # @param line [Fixnum] The line on which the SassScript appears.
123
+ # Used for error reporting
124
+ # @param offset [Fixnum] The number of characters in on which the SassScript appears.
125
+ # Used for error reporting
126
+ # @param options [{Symbol => Object}] An options hash;
127
+ # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
128
+ def initialize(str, line, offset, options)
129
+ @scanner = str.is_a?(StringScanner) ? str : StringScanner.new(str)
130
+ @line = line
131
+ @offset = offset
132
+ @options = options
133
+ @interpolation_stack = []
134
+ @prev = nil
135
+ end
136
+
137
+ # Moves the lexer forward one token.
138
+ #
139
+ # @return [Token] The token that was moved past
140
+ def next
141
+ @tok ||= read_token
142
+ @tok, tok = nil, @tok
143
+ @prev = tok
144
+ return tok
145
+ end
146
+
147
+ # Returns whether or not there's whitespace before the next token.
148
+ #
149
+ # @return [Boolean]
150
+ def whitespace?(tok = @tok)
151
+ if tok
152
+ @scanner.string[0...tok.pos] =~ /\s\Z/
153
+ else
154
+ @scanner.string[@scanner.pos, 1] =~ /^\s/ ||
155
+ @scanner.string[@scanner.pos - 1, 1] =~ /\s\Z/
156
+ end
157
+ end
158
+
159
+ # Returns the next token without moving the lexer forward.
160
+ #
161
+ # @return [Token] The next token
162
+ def peek
163
+ @tok ||= read_token
164
+ end
165
+
166
+ # Rewinds the underlying StringScanner
167
+ # to before the token returned by \{#peek}.
168
+ def unpeek!
169
+ @scanner.pos = @tok.pos if @tok
170
+ end
171
+
172
+ # @return [Boolean] Whether or not there's more source text to lex.
173
+ def done?
174
+ whitespace unless after_interpolation? && @interpolation_stack.last
175
+ @scanner.eos? && @tok.nil?
176
+ end
177
+
178
+ # @return [Boolean] Whether or not the last token lexed was `:end_interpolation`.
179
+ def after_interpolation?
180
+ @prev && @prev.type == :end_interpolation
181
+ end
182
+
183
+ # Raise an error to the effect that `name` was expected in the input stream
184
+ # and wasn't found.
185
+ #
186
+ # This calls \{#unpeek!} to rewind the scanner to immediately after
187
+ # the last returned token.
188
+ #
189
+ # @param name [String] The name of the entity that was expected but not found
190
+ # @raise [Sass::SyntaxError]
191
+ def expected!(name)
192
+ unpeek!
193
+ Sass::SCSS::Parser.expected(@scanner, name, @line)
194
+ end
195
+
196
+ # Records all non-comment text the lexer consumes within the block
197
+ # and returns it as a string.
198
+ #
199
+ # @yield A block in which text is recorded
200
+ # @return [String]
201
+ def str
202
+ old_pos = @tok ? @tok.pos : @scanner.pos
203
+ yield
204
+ new_pos = @tok ? @tok.pos : @scanner.pos
205
+ @scanner.string[old_pos...new_pos]
206
+ end
207
+
208
+ private
209
+
210
+ def read_token
211
+ return if done?
212
+ return unless value = token
213
+ type, val, size = value
214
+ size ||= @scanner.matched_size
215
+
216
+ val.line = @line if val.is_a?(Script::Node)
217
+ Token.new(type, val, @line,
218
+ current_position - size, @scanner.pos - size)
219
+ end
220
+
221
+ def whitespace
222
+ nil while scan(REGULAR_EXPRESSIONS[:whitespace]) ||
223
+ scan(REGULAR_EXPRESSIONS[:comment]) ||
224
+ scan(REGULAR_EXPRESSIONS[:single_line_comment])
225
+ end
226
+
227
+ def token
228
+ if after_interpolation? && (interp_type = @interpolation_stack.pop)
229
+ return string(interp_type, true)
230
+ end
231
+
232
+ variable || string(:double, false) || string(:single, false) || number ||
233
+ color || bool || string(:uri, false) || raw(UNICODERANGE) ||
234
+ special_fun || ident_op || ident || op
235
+ end
236
+
237
+ def variable
238
+ _variable(REGULAR_EXPRESSIONS[:variable])
239
+ end
240
+
241
+ def _variable(rx)
242
+ line = @line
243
+ offset = @offset
244
+ return unless scan(rx)
245
+
246
+ [:const, @scanner[2]]
247
+ end
248
+
249
+ def ident
250
+ return unless scan(REGULAR_EXPRESSIONS[:ident])
251
+ [@scanner[2] ? :funcall : :ident, @scanner[1]]
252
+ end
253
+
254
+ def string(re, open)
255
+ return unless scan(STRING_REGULAR_EXPRESSIONS[[re, open]])
256
+ if @scanner[2] == '#{' #'
257
+ @scanner.pos -= 2 # Don't actually consume the #{
258
+ @interpolation_stack << re
259
+ end
260
+ str =
261
+ if re == :uri
262
+ Script::String.new("#{'url(' unless open}#{@scanner[1]}#{')' unless @scanner[2] == '#{'}")
263
+ else
264
+ Script::String.new(@scanner[1].gsub(/\\(['"]|\#\{)/, '\1'), :string)
265
+ end
266
+ [:string, str]
267
+ end
268
+
269
+ def number
270
+ return unless scan(REGULAR_EXPRESSIONS[:number])
271
+ value = @scanner[2] ? @scanner[2].to_f : @scanner[3].to_i
272
+ value = -value if @scanner[1]
273
+ [:number, Script::Number.new(value, Array(@scanner[4]))]
274
+ end
275
+
276
+ def color
277
+ return unless s = scan(REGULAR_EXPRESSIONS[:color])
278
+ raise Sass::SyntaxError.new(<<MESSAGE.rstrip) unless s.size == 4 || s.size == 7
279
+ Colors must have either three or six digits: '#{s}'
280
+ MESSAGE
281
+ value = s.scan(/^#(..?)(..?)(..?)$/).first.
282
+ map {|num| num.ljust(2, num).to_i(16)}
283
+ [:color, Script::Color.new(value)]
284
+ end
285
+
286
+ def bool
287
+ return unless s = scan(REGULAR_EXPRESSIONS[:bool])
288
+ [:bool, Script::Bool.new(s == 'true')]
289
+ end
290
+
291
+ def special_fun
292
+ return unless str1 = scan(/((-[\w-]+-)?calc|expression|progid:[a-z\.]*)\(/i)
293
+ str2, _ = Sass::Shared.balance(@scanner, ?(, ?), 1)
294
+ c = str2.count("\n")
295
+ old_line = @line
296
+ old_offset = @offset
297
+ @line += c
298
+ @offset = (c == 0 ? @offset + str2.size : str2[/\n(.*)/, 1].size)
299
+ [:special_fun,
300
+ Sass::Util.merge_adjacent_strings(
301
+ [str1] + Sass::Engine.parse_interp(str2, old_line, old_offset, @options)),
302
+ str1.size + str2.size]
303
+ end
304
+
305
+ def ident_op
306
+ return unless op = scan(REGULAR_EXPRESSIONS[:ident_op])
307
+ [OPERATORS[op]]
308
+ end
309
+
310
+ def op
311
+ return unless op = scan(REGULAR_EXPRESSIONS[:op])
312
+ @interpolation_stack << nil if op == :begin_interpolation
313
+ [OPERATORS[op]]
314
+ end
315
+
316
+ def raw(rx)
317
+ return unless val = scan(rx)
318
+ [:raw, val]
319
+ end
320
+
321
+ def scan(re)
322
+ return unless str = @scanner.scan(re)
323
+ c = str.count("\n")
324
+ @line += c
325
+ @offset = (c == 0 ? @offset + str.size : str[/\n(.*)/, 1].size)
326
+ str
327
+ end
328
+
329
+ def current_position
330
+ @offset + 1
331
+ end
332
+ end
333
+ end
334
+ end
@@ -0,0 +1,76 @@
1
+ module Sass::Script
2
+ # A SassScript object representing a CSS list.
3
+ # This includes both comma-separated lists and space-separated lists.
4
+ class List < Literal
5
+ # The Ruby array containing the contents of the list.
6
+ #
7
+ # @return [Array<Literal>]
8
+ attr_reader :value
9
+ alias_method :children, :value
10
+ alias_method :to_a, :value
11
+
12
+ # The operator separating the values of the list.
13
+ # Either `:comma` or `:space`.
14
+ #
15
+ # @return [Symbol]
16
+ attr_reader :separator
17
+
18
+ # Creates a new list.
19
+ #
20
+ # @param value [Array<Literal>] See \{#value}
21
+ # @param separator [String] See \{#separator}
22
+ def initialize(value, separator)
23
+ super(value)
24
+ @separator = separator
25
+ end
26
+
27
+ # @see Node#eq
28
+ def eq(other)
29
+ Sass::Script::Bool.new(
30
+ self.class == other.class && self.value == other.value &&
31
+ self.separator == other.separator)
32
+ end
33
+
34
+ # @see Node#to_s
35
+ def to_s(opts = {})
36
+ raise Sass::SyntaxError.new("() isn't a valid CSS value.") if value.empty?
37
+ return value.reject {|e| e.is_a?(List) && e.value.empty?}.map {|e| e.to_s(opts)}.join(sep_str)
38
+ end
39
+
40
+ # @see Node#to_sass
41
+ def to_sass(opts = {})
42
+ precedence = Sass::Script::Parser.precedence_of(separator)
43
+ value.map do |v|
44
+ if v.is_a?(List) && Sass::Script::Parser.precedence_of(v.separator) <= precedence
45
+ "(#{v.to_sass(opts)})"
46
+ else
47
+ v.to_sass(opts)
48
+ end
49
+ end.join(sep_str(nil))
50
+ end
51
+
52
+ # @see Node#inspect
53
+ def inspect
54
+ "(#{to_sass})"
55
+ end
56
+
57
+ protected
58
+
59
+ # @see Node#_perform
60
+ def _perform(environment)
61
+ list = Sass::Script::List.new(
62
+ value.map {|e| e.perform(environment)},
63
+ separator)
64
+ list.options = self.options
65
+ list
66
+ end
67
+
68
+ private
69
+
70
+ def sep_str(opts = self.options)
71
+ return ' ' if separator == :space
72
+ return ',' if opts && opts[:style] == :compressed
73
+ return ', '
74
+ end
75
+ end
76
+ end