hamlit 1.7.2 → 2.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 (283) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -3
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +25 -37
  5. data/CHANGELOG.md +18 -0
  6. data/Gemfile +16 -0
  7. data/LICENSE.txt +23 -2
  8. data/README.md +106 -48
  9. data/REFERENCE.md +222 -0
  10. data/Rakefile +77 -19
  11. data/benchmark/boolean_attribute.haml +6 -0
  12. data/benchmark/class_attribute.haml +5 -0
  13. data/benchmark/common_attribute.haml +3 -0
  14. data/benchmark/data_attribute.haml +4 -0
  15. data/benchmark/dynamic_attributes/boolean_attribute.haml +4 -0
  16. data/benchmark/dynamic_attributes/class_attribute.haml +4 -0
  17. data/benchmark/dynamic_attributes/common_attribute.haml +2 -0
  18. data/benchmark/dynamic_attributes/data_attribute.haml +2 -0
  19. data/benchmark/dynamic_attributes/id_attribute.haml +2 -0
  20. data/benchmark/etc/attribute_builder.haml +5 -0
  21. data/benchmark/etc/real_sample.haml +888 -0
  22. data/benchmark/etc/real_sample.rb +11 -0
  23. data/benchmark/etc/static_analyzer.haml +1 -0
  24. data/benchmark/etc/tags.haml +3 -0
  25. data/benchmark/ext/build_data.rb +15 -0
  26. data/benchmark/ext/build_id.rb +13 -0
  27. data/benchmark/id_attribute.haml +3 -0
  28. data/benchmark/plain.haml +4 -0
  29. data/benchmark/script.haml +4 -0
  30. data/benchmark/slim/LICENSE +21 -0
  31. data/{benchmarks → benchmark/slim}/context.rb +2 -4
  32. data/benchmark/slim/run-benchmarks.rb +94 -0
  33. data/{benchmarks → benchmark/slim}/view.erb +3 -3
  34. data/{benchmarks → benchmark/slim}/view.haml +0 -0
  35. data/{benchmarks/view.escaped.slim → benchmark/slim/view.slim} +1 -1
  36. data/benchmark/string_interpolation.haml +2 -0
  37. data/benchmark/utils/benchmark_ips_extension.rb +43 -0
  38. data/bin/bench +85 -0
  39. data/bin/clone +14 -0
  40. data/bin/console +11 -0
  41. data/bin/lineprof +48 -0
  42. data/bin/ruby +3 -0
  43. data/bin/setup +7 -0
  44. data/bin/stackprof +27 -0
  45. data/{test → bin/test} +6 -10
  46. data/{bin → exe}/hamlit +0 -0
  47. data/ext/hamlit/extconf.rb +14 -0
  48. data/ext/hamlit/hamlit.c +512 -0
  49. data/ext/hamlit/houdini/.gitignore +3 -0
  50. data/ext/hamlit/houdini/COPYING +7 -0
  51. data/ext/hamlit/houdini/Makefile +79 -0
  52. data/ext/hamlit/houdini/README.md +59 -0
  53. data/ext/hamlit/houdini/buffer.c +249 -0
  54. data/ext/hamlit/houdini/buffer.h +113 -0
  55. data/ext/hamlit/houdini/houdini.h +46 -0
  56. data/ext/hamlit/houdini/houdini_href_e.c +115 -0
  57. data/ext/hamlit/houdini/houdini_html_e.c +90 -0
  58. data/ext/hamlit/houdini/houdini_html_u.c +122 -0
  59. data/ext/hamlit/houdini/houdini_js_e.c +90 -0
  60. data/ext/hamlit/houdini/houdini_js_u.c +60 -0
  61. data/ext/hamlit/houdini/houdini_uri_e.c +107 -0
  62. data/ext/hamlit/houdini/houdini_uri_u.c +68 -0
  63. data/ext/hamlit/houdini/houdini_xml_e.c +136 -0
  64. data/ext/hamlit/houdini/html_unescape.gperf +258 -0
  65. data/ext/hamlit/houdini/html_unescape.h +754 -0
  66. data/ext/hamlit/houdini/tools/build_table.py +13 -0
  67. data/ext/hamlit/houdini/tools/build_tables.c +51 -0
  68. data/ext/hamlit/houdini/tools/wikipedia_table.txt +2025 -0
  69. data/hamlit.gemspec +30 -31
  70. data/lib/hamlit.rb +3 -1
  71. data/lib/hamlit/attribute_builder.rb +12 -0
  72. data/lib/hamlit/cli.rb +44 -43
  73. data/lib/hamlit/compiler.rb +92 -16
  74. data/lib/hamlit/compiler/attribute_compiler.rb +148 -0
  75. data/lib/hamlit/compiler/children_compiler.rb +111 -0
  76. data/lib/hamlit/compiler/comment_compiler.rb +36 -0
  77. data/lib/hamlit/compiler/doctype_compiler.rb +45 -0
  78. data/lib/hamlit/compiler/script_compiler.rb +97 -0
  79. data/lib/hamlit/compiler/silent_script_compiler.rb +24 -0
  80. data/lib/hamlit/compiler/tag_compiler.rb +69 -0
  81. data/lib/hamlit/engine.rb +12 -7
  82. data/lib/hamlit/error.rb +14 -0
  83. data/lib/hamlit/escapable.rb +12 -0
  84. data/lib/hamlit/filters.rb +65 -0
  85. data/lib/hamlit/filters/base.rb +4 -62
  86. data/lib/hamlit/filters/coffee.rb +9 -7
  87. data/lib/hamlit/filters/css.rb +25 -8
  88. data/lib/hamlit/filters/erb.rb +4 -6
  89. data/lib/hamlit/filters/escaped.rb +11 -9
  90. data/lib/hamlit/filters/javascript.rb +25 -8
  91. data/lib/hamlit/filters/less.rb +9 -7
  92. data/lib/hamlit/filters/markdown.rb +5 -6
  93. data/lib/hamlit/filters/plain.rb +11 -15
  94. data/lib/hamlit/filters/preserve.rb +15 -5
  95. data/lib/hamlit/filters/ruby.rb +3 -5
  96. data/lib/hamlit/filters/sass.rb +9 -7
  97. data/lib/hamlit/filters/scss.rb +9 -7
  98. data/lib/hamlit/filters/text_base.rb +24 -0
  99. data/lib/hamlit/filters/tilt_base.rb +47 -0
  100. data/lib/hamlit/hash_parser.rb +107 -0
  101. data/lib/hamlit/html.rb +9 -6
  102. data/lib/hamlit/identity.rb +12 -0
  103. data/lib/hamlit/object_ref.rb +29 -0
  104. data/lib/hamlit/parser.rb +25 -142
  105. data/lib/hamlit/parser/MIT-LICENSE +20 -0
  106. data/lib/hamlit/parser/README.md +28 -0
  107. data/lib/hamlit/parser/haml_buffer.rb +348 -0
  108. data/lib/hamlit/parser/haml_compiler.rb +553 -0
  109. data/lib/hamlit/parser/haml_error.rb +61 -0
  110. data/lib/hamlit/parser/haml_helpers.rb +727 -0
  111. data/lib/hamlit/parser/haml_options.rb +286 -0
  112. data/lib/hamlit/parser/haml_parser.rb +801 -0
  113. data/lib/hamlit/parser/haml_util.rb +283 -0
  114. data/lib/hamlit/parser/haml_xss_mods.rb +109 -0
  115. data/lib/hamlit/{helpers.rb → rails_helpers.rb} +2 -7
  116. data/lib/hamlit/rails_template.rb +30 -0
  117. data/lib/hamlit/railtie.rb +1 -12
  118. data/lib/hamlit/ruby_expression.rb +31 -0
  119. data/lib/hamlit/static_analyzer.rb +49 -0
  120. data/lib/hamlit/string_interpolation.rb +69 -0
  121. data/lib/hamlit/template.rb +8 -0
  122. data/lib/hamlit/utils.rb +9 -0
  123. data/lib/hamlit/version.rb +1 -1
  124. metadata +116 -324
  125. data/.rspec +0 -2
  126. data/benchmarks/benchmark.rb +0 -110
  127. data/benchmarks/view.slim +0 -17
  128. data/doc/README.md +0 -19
  129. data/doc/engine/indent.md +0 -48
  130. data/doc/engine/new_attribute.md +0 -77
  131. data/doc/engine/old_attributes.md +0 -198
  132. data/doc/engine/silent_script.md +0 -97
  133. data/doc/engine/tag.md +0 -48
  134. data/doc/engine/text.md +0 -64
  135. data/doc/faml/README.md +0 -16
  136. data/doc/faml/engine/indent.md +0 -48
  137. data/doc/faml/engine/old_attributes.md +0 -111
  138. data/doc/faml/engine/silent_script.md +0 -97
  139. data/doc/faml/engine/text.md +0 -59
  140. data/doc/faml/filters/erb.md +0 -24
  141. data/doc/faml/filters/javascript.md +0 -27
  142. data/doc/faml/filters/less.md +0 -57
  143. data/doc/faml/filters/plain.md +0 -25
  144. data/doc/filters/erb.md +0 -31
  145. data/doc/filters/javascript.md +0 -83
  146. data/doc/filters/less.md +0 -57
  147. data/doc/filters/markdown.md +0 -31
  148. data/doc/filters/plain.md +0 -25
  149. data/doc/haml/README.md +0 -15
  150. data/doc/haml/engine/new_attribute.md +0 -77
  151. data/doc/haml/engine/old_attributes.md +0 -142
  152. data/doc/haml/engine/tag.md +0 -48
  153. data/doc/haml/engine/text.md +0 -29
  154. data/doc/haml/filters/erb.md +0 -26
  155. data/doc/haml/filters/javascript.md +0 -76
  156. data/doc/haml/filters/markdown.md +0 -31
  157. data/lib/hamlit/attribute.rb +0 -78
  158. data/lib/hamlit/compilers/attributes.rb +0 -108
  159. data/lib/hamlit/compilers/comment.rb +0 -13
  160. data/lib/hamlit/compilers/doctype.rb +0 -39
  161. data/lib/hamlit/compilers/filter.rb +0 -53
  162. data/lib/hamlit/compilers/new_attribute.rb +0 -115
  163. data/lib/hamlit/compilers/old_attribute.rb +0 -241
  164. data/lib/hamlit/compilers/runtime_attribute.rb +0 -58
  165. data/lib/hamlit/compilers/script.rb +0 -31
  166. data/lib/hamlit/compilers/strip.rb +0 -19
  167. data/lib/hamlit/compilers/text.rb +0 -111
  168. data/lib/hamlit/concerns/attribute_builder.rb +0 -22
  169. data/lib/hamlit/concerns/balanceable.rb +0 -68
  170. data/lib/hamlit/concerns/deprecation.rb +0 -20
  171. data/lib/hamlit/concerns/error.rb +0 -31
  172. data/lib/hamlit/concerns/escapable.rb +0 -17
  173. data/lib/hamlit/concerns/included.rb +0 -28
  174. data/lib/hamlit/concerns/indentable.rb +0 -117
  175. data/lib/hamlit/concerns/lexable.rb +0 -32
  176. data/lib/hamlit/concerns/line_reader.rb +0 -62
  177. data/lib/hamlit/concerns/registerable.rb +0 -24
  178. data/lib/hamlit/concerns/string_interpolation.rb +0 -48
  179. data/lib/hamlit/concerns/whitespace.rb +0 -91
  180. data/lib/hamlit/filters/tilt.rb +0 -41
  181. data/lib/hamlit/parsers/attribute.rb +0 -71
  182. data/lib/hamlit/parsers/comment.rb +0 -30
  183. data/lib/hamlit/parsers/doctype.rb +0 -18
  184. data/lib/hamlit/parsers/filter.rb +0 -18
  185. data/lib/hamlit/parsers/multiline.rb +0 -58
  186. data/lib/hamlit/parsers/script.rb +0 -126
  187. data/lib/hamlit/parsers/tag.rb +0 -83
  188. data/lib/hamlit/parsers/text.rb +0 -28
  189. data/lib/hamlit/temple.rb +0 -9
  190. data/release +0 -6
  191. data/spec/Rakefile +0 -72
  192. data/spec/hamlit/engine/comment_spec.rb +0 -56
  193. data/spec/hamlit/engine/doctype_spec.rb +0 -19
  194. data/spec/hamlit/engine/error_spec.rb +0 -135
  195. data/spec/hamlit/engine/indent_spec.rb +0 -42
  196. data/spec/hamlit/engine/multiline_spec.rb +0 -44
  197. data/spec/hamlit/engine/new_attribute_spec.rb +0 -110
  198. data/spec/hamlit/engine/old_attributes_spec.rb +0 -404
  199. data/spec/hamlit/engine/script_spec.rb +0 -116
  200. data/spec/hamlit/engine/silent_script_spec.rb +0 -213
  201. data/spec/hamlit/engine/tag_spec.rb +0 -295
  202. data/spec/hamlit/engine/text_spec.rb +0 -239
  203. data/spec/hamlit/engine_spec.rb +0 -58
  204. data/spec/hamlit/filters/coffee_spec.rb +0 -60
  205. data/spec/hamlit/filters/css_spec.rb +0 -33
  206. data/spec/hamlit/filters/erb_spec.rb +0 -16
  207. data/spec/hamlit/filters/javascript_spec.rb +0 -82
  208. data/spec/hamlit/filters/less_spec.rb +0 -37
  209. data/spec/hamlit/filters/markdown_spec.rb +0 -30
  210. data/spec/hamlit/filters/plain_spec.rb +0 -15
  211. data/spec/hamlit/filters/ruby_spec.rb +0 -24
  212. data/spec/hamlit/filters/sass_spec.rb +0 -33
  213. data/spec/hamlit/filters/scss_spec.rb +0 -37
  214. data/spec/hamlit/haml_spec.rb +0 -910
  215. data/spec/rails/.gitignore +0 -18
  216. data/spec/rails/.rspec +0 -2
  217. data/spec/rails/Gemfile +0 -19
  218. data/spec/rails/README.rdoc +0 -28
  219. data/spec/rails/Rakefile +0 -6
  220. data/spec/rails/app/assets/images/.keep +0 -0
  221. data/spec/rails/app/assets/javascripts/application.js +0 -15
  222. data/spec/rails/app/assets/stylesheets/application.css +0 -15
  223. data/spec/rails/app/controllers/application_controller.rb +0 -8
  224. data/spec/rails/app/controllers/concerns/.keep +0 -0
  225. data/spec/rails/app/controllers/users_controller.rb +0 -23
  226. data/spec/rails/app/helpers/application_helper.rb +0 -2
  227. data/spec/rails/app/mailers/.keep +0 -0
  228. data/spec/rails/app/models/.keep +0 -0
  229. data/spec/rails/app/models/concerns/.keep +0 -0
  230. data/spec/rails/app/views/application/index.html.haml +0 -18
  231. data/spec/rails/app/views/layouts/application.html.haml +0 -12
  232. data/spec/rails/app/views/users/capture.html.haml +0 -5
  233. data/spec/rails/app/views/users/capture_haml.html.haml +0 -5
  234. data/spec/rails/app/views/users/form.html.haml +0 -2
  235. data/spec/rails/app/views/users/helpers.html.haml +0 -10
  236. data/spec/rails/app/views/users/index.html.haml +0 -9
  237. data/spec/rails/app/views/users/inline.html.haml +0 -6
  238. data/spec/rails/app/views/users/old_attributes.html.haml +0 -5
  239. data/spec/rails/app/views/users/safe_buffer.html.haml +0 -4
  240. data/spec/rails/app/views/users/whitespace.html.haml +0 -4
  241. data/spec/rails/bin/bundle +0 -3
  242. data/spec/rails/bin/rails +0 -8
  243. data/spec/rails/bin/rake +0 -8
  244. data/spec/rails/bin/setup +0 -29
  245. data/spec/rails/bin/spring +0 -15
  246. data/spec/rails/config.ru +0 -4
  247. data/spec/rails/config/application.rb +0 -34
  248. data/spec/rails/config/boot.rb +0 -3
  249. data/spec/rails/config/database.yml +0 -25
  250. data/spec/rails/config/environment.rb +0 -5
  251. data/spec/rails/config/environments/development.rb +0 -41
  252. data/spec/rails/config/environments/production.rb +0 -79
  253. data/spec/rails/config/environments/test.rb +0 -42
  254. data/spec/rails/config/initializers/assets.rb +0 -11
  255. data/spec/rails/config/initializers/backtrace_silencers.rb +0 -7
  256. data/spec/rails/config/initializers/cookies_serializer.rb +0 -3
  257. data/spec/rails/config/initializers/filter_parameter_logging.rb +0 -4
  258. data/spec/rails/config/initializers/inflections.rb +0 -16
  259. data/spec/rails/config/initializers/mime_types.rb +0 -4
  260. data/spec/rails/config/initializers/session_store.rb +0 -3
  261. data/spec/rails/config/initializers/wrap_parameters.rb +0 -14
  262. data/spec/rails/config/locales/en.yml +0 -24
  263. data/spec/rails/config/routes.rb +0 -16
  264. data/spec/rails/config/secrets.yml +0 -22
  265. data/spec/rails/db/schema.rb +0 -16
  266. data/spec/rails/db/seeds.rb +0 -7
  267. data/spec/rails/lib/assets/.keep +0 -0
  268. data/spec/rails/lib/tasks/.keep +0 -0
  269. data/spec/rails/log/.keep +0 -0
  270. data/spec/rails/public/404.html +0 -67
  271. data/spec/rails/public/422.html +0 -67
  272. data/spec/rails/public/500.html +0 -66
  273. data/spec/rails/public/favicon.ico +0 -0
  274. data/spec/rails/public/robots.txt +0 -5
  275. data/spec/rails/spec/hamlit_spec.rb +0 -123
  276. data/spec/rails/spec/rails_helper.rb +0 -56
  277. data/spec/rails/spec/spec_helper.rb +0 -91
  278. data/spec/rails/vendor/assets/javascripts/.keep +0 -0
  279. data/spec/rails/vendor/assets/stylesheets/.keep +0 -0
  280. data/spec/spec_helper.rb +0 -36
  281. data/spec/spec_helper/document_generator.rb +0 -93
  282. data/spec/spec_helper/render_helper.rb +0 -120
  283. data/spec/spec_helper/test_case.rb +0 -55
@@ -0,0 +1,65 @@
1
+ require 'hamlit/filters/base'
2
+ require 'hamlit/filters/text_base'
3
+ require 'hamlit/filters/tilt_base'
4
+ require 'hamlit/filters/coffee'
5
+ require 'hamlit/filters/css'
6
+ require 'hamlit/filters/erb'
7
+ require 'hamlit/filters/escaped'
8
+ require 'hamlit/filters/javascript'
9
+ require 'hamlit/filters/less'
10
+ require 'hamlit/filters/markdown'
11
+ require 'hamlit/filters/plain'
12
+ require 'hamlit/filters/preserve'
13
+ require 'hamlit/filters/ruby'
14
+ require 'hamlit/filters/sass'
15
+ require 'hamlit/filters/scss'
16
+
17
+ module Hamlit
18
+ class Filters
19
+ @registered = {}
20
+
21
+ class << self
22
+ attr_reader :registered
23
+
24
+ private
25
+
26
+ def register(name, compiler)
27
+ registered[name] = compiler
28
+ end
29
+ end
30
+
31
+ register :coffee, Coffee
32
+ register :coffeescript, Coffee
33
+ register :css, Css
34
+ register :erb, Erb
35
+ register :escaped, Escaped
36
+ register :javascript, Javascript
37
+ register :less, Less
38
+ register :markdown, Markdown
39
+ register :plain, Plain
40
+ register :preserve, Preserve
41
+ register :ruby, Ruby
42
+ register :sass, Sass
43
+ register :scss, Scss
44
+
45
+ def initialize(options = {})
46
+ @options = options
47
+ @compilers = {}
48
+ end
49
+
50
+ def compile(node)
51
+ node.value[:text] ||= ''
52
+ find_compiler(node).compile(node)
53
+ end
54
+
55
+ private
56
+
57
+ def find_compiler(node)
58
+ name = node.value[:name].to_sym
59
+ compiler = Filters.registered[name]
60
+ raise FilterNotFound.new("FilterCompiler for '#{name}' was not found", node.line.to_i - 1) unless compiler
61
+
62
+ @compilers[name] ||= compiler.new(@options)
63
+ end
64
+ end
65
+ end
@@ -1,68 +1,10 @@
1
+ require 'hamlit/parser/haml_util'
2
+
1
3
  module Hamlit
2
- module Filters
4
+ class Filters
3
5
  class Base
4
- attr_reader :options
5
-
6
- def self.indent_source(source, indent_width: 0)
7
- lines = source.split("\n")
8
- self.new.compile_lines(lines, indent_width: indent_width)
9
- end
10
-
11
6
  def initialize(options = {})
12
- @options = options
13
- end
14
-
15
- def compile(lines)
16
- raise NotImplementedError
17
- end
18
-
19
- def compile_lines(lines, indent_width: 0)
20
- base = (lines.first || '').index(/[^\s]/) || 0
21
- width = indent_width - base
22
- width = 0 if width < 0
23
-
24
- lines = strip_last(lines).map do |line|
25
- ' ' * width + line
26
- end
27
-
28
- text = lines.join("\n") + "\n"
29
- text
30
- end
31
-
32
- private
33
-
34
- # NOTE: empty line is reserved for preserve filter.
35
- def strip_last(lines)
36
- lines = lines.dup
37
- while lines.last && lines.last.length == 0
38
- lines.delete_at(-1)
39
- end
40
- lines
41
- end
42
-
43
- def compile_html(tag, lines)
44
- ast = [:haml, :text, compile_lines(lines, indent_width: 2), false]
45
- ast = [:multi, [:static, "\n"], ast]
46
- ast = [:html, :tag, tag, [:html, :attrs], ast]
47
- ast
48
- end
49
-
50
- def compile_xhtml(tag, type, lines)
51
- attr = [:html, :attr, 'type', [:static, type]]
52
- attrs = [:html, :attrs, attr]
53
-
54
- content = [:haml, :text, compile_lines(lines, indent_width: 4)]
55
- multi = [:multi, [:static, "\n"], *cdata_for(type, content)]
56
- [:html, :tag, tag, attrs, multi]
57
- end
58
-
59
- def cdata_for(type, ast)
60
- case type
61
- when 'text/javascript'
62
- [[:static, " //<![CDATA[\n"], ast, [:static, " //]]>\n"]]
63
- when 'text/css'
64
- [[:static, " /*<![CDATA[*/\n"], ast, [:static, " /*]]>*/\n"]]
65
- end
7
+ @format = options[:format]
66
8
  end
67
9
  end
68
10
  end
@@ -1,11 +1,13 @@
1
- require 'hamlit/filters/tilt'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Coffee < Filters::Tilt
6
- def compile(lines)
7
- ast = [:html, :tag, 'script', [:html, :attrs]]
8
- compile_with_tilt('coffee', lines.join("\n"), ast)
2
+ class Filters
3
+ class Coffee < TiltBase
4
+ def compile(node)
5
+ require 'tilt/coffee' if explicit_require?
6
+ temple = [:multi]
7
+ temple << [:static, "<script>\n".freeze]
8
+ temple << compile_with_tilt(node, 'coffee', indent_width: 2)
9
+ temple << [:static, "</script>".freeze]
10
+ temple
9
11
  end
10
12
  end
11
13
  end
@@ -1,14 +1,31 @@
1
- require 'hamlit/filters/base'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Css < Base
6
- def compile(lines)
7
- if options[:format] == :xhtml
8
- return compile_xhtml('style', 'text/css', lines)
2
+ class Filters
3
+ class Css < TextBase
4
+ def compile(node)
5
+ case @format
6
+ when :xhtml
7
+ compile_xhtml(node)
8
+ else
9
+ compile_html(node)
9
10
  end
11
+ end
12
+
13
+ private
14
+
15
+ def compile_html(node)
16
+ temple = [:multi]
17
+ temple << [:static, "<style>\n".freeze]
18
+ compile_text!(temple, node, ' '.freeze)
19
+ temple << [:static, "\n</style>".freeze]
20
+ temple
21
+ end
10
22
 
11
- compile_html('style', lines)
23
+ def compile_xhtml(node)
24
+ temple = [:multi]
25
+ temple << [:static, "<style type='text/css'>\n /*<![CDATA[*/\n".freeze]
26
+ compile_text!(temple, node, ' '.freeze)
27
+ temple << [:static, "\n /*]]>*/\n</style>".freeze]
28
+ temple
12
29
  end
13
30
  end
14
31
  end
@@ -1,10 +1,8 @@
1
- require 'hamlit/filters/tilt'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Erb < Filters::Tilt
6
- def compile(lines)
7
- compile_with_tilt('erb', lines.join("\n"), [], indent_width: 0)
2
+ class Filters
3
+ class Erb < TiltBase
4
+ def compile(node)
5
+ compile_with_tilt(node, 'erb')
8
6
  end
9
7
  end
10
8
  end
@@ -1,18 +1,20 @@
1
- require 'hamlit/filters/base'
2
-
3
1
  module Hamlit
4
- module Filters
2
+ class Filters
5
3
  class Escaped < Base
6
- def compile(lines)
7
- ast = [:haml, :text, lines.join("\n")]
8
- ast = [:multi, escape_html(ast)]
9
- ast
4
+ def compile(node)
5
+ text = node.value[:text].rstrip
6
+ temple = compile_text(text)
7
+ [:escape, true, temple]
10
8
  end
11
9
 
12
10
  private
13
11
 
14
- def escape_html(ast)
15
- [:escape, true, ast]
12
+ def compile_text(text)
13
+ if ::Hamlit::HamlUtil.contains_interpolation?(text)
14
+ [:dynamic, ::Hamlit::HamlUtil.slow_unescape_interpolation(text)]
15
+ else
16
+ [:static, text]
17
+ end
16
18
  end
17
19
  end
18
20
  end
@@ -1,14 +1,31 @@
1
- require 'hamlit/filters/base'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Javascript < Base
6
- def compile(lines)
7
- if options[:format] == :xhtml
8
- return compile_xhtml('script', 'text/javascript', lines)
2
+ class Filters
3
+ class Javascript < TextBase
4
+ def compile(node)
5
+ case @format
6
+ when :xhtml
7
+ compile_xhtml(node)
8
+ else
9
+ compile_html(node)
9
10
  end
11
+ end
12
+
13
+ private
14
+
15
+ def compile_html(node)
16
+ temple = [:multi]
17
+ temple << [:static, "<script>\n".freeze]
18
+ compile_text!(temple, node, ' '.freeze)
19
+ temple << [:static, "\n</script>".freeze]
20
+ temple
21
+ end
10
22
 
11
- compile_html('script', lines)
23
+ def compile_xhtml(node)
24
+ temple = [:multi]
25
+ temple << [:static, "<script type='text/javascript'>\n //<![CDATA[\n".freeze]
26
+ compile_text!(temple, node, ' '.freeze)
27
+ temple << [:static, "\n //]]>\n</script>".freeze]
28
+ temple
12
29
  end
13
30
  end
14
31
  end
@@ -1,11 +1,13 @@
1
- require 'hamlit/filters/tilt'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Less < Filters::Tilt
6
- def compile(lines)
7
- ast = [:html, :tag, 'style', [:html, :attrs]]
8
- compile_with_tilt('less', lines.join("\n"), ast)
2
+ class Filters
3
+ class Less < TiltBase
4
+ def compile(node)
5
+ require 'tilt/less' if explicit_require?
6
+ temple = [:multi]
7
+ temple << [:static, "<style>\n".freeze]
8
+ temple << compile_with_tilt(node, 'less', indent_width: 2)
9
+ temple << [:static, "</style>".freeze]
10
+ temple
9
11
  end
10
12
  end
11
13
  end
@@ -1,10 +1,9 @@
1
- require 'hamlit/filters/tilt'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Markdown < Filters::Tilt
6
- def compile(lines)
7
- compile_with_tilt('markdown', lines.join("\n"), [], indent_width: 0)
2
+ class Filters
3
+ class Markdown < TiltBase
4
+ def compile(node)
5
+ require 'tilt/redcarpet' if explicit_require?
6
+ compile_with_tilt(node, 'markdown')
8
7
  end
9
8
  end
10
9
  end
@@ -1,20 +1,16 @@
1
- require 'hamlit/filters/base'
2
-
3
1
  module Hamlit
4
- module Filters
2
+ class Filters
5
3
  class Plain < Base
6
- def compile(lines)
7
- ast = [:multi]
8
- text = compile_lines(lines)
9
- text.gsub!(/\n\Z/, '') unless string_interpolated?(text)
10
- ast << [:haml, :text, text]
11
- ast
12
- end
13
-
14
- private
15
-
16
- def string_interpolated?(text)
17
- text =~ /\#{[^\#{}]*}/
4
+ def compile(node)
5
+ text = node.value[:text].rstrip
6
+ if ::Hamlit::HamlUtil.contains_interpolation?(text)
7
+ # FIXME: Confirm whether this is correct or not
8
+ text << "\n".freeze
9
+ text = ::Hamlit::HamlUtil.slow_unescape_interpolation(text)
10
+ [:escape, true, [:dynamic, text]]
11
+ else
12
+ [:static, text]
13
+ end
18
14
  end
19
15
  end
20
16
  end
@@ -1,10 +1,20 @@
1
- require 'hamlit/filters/base'
2
-
3
1
  module Hamlit
4
- module Filters
2
+ class Filters
5
3
  class Preserve < Base
6
- def compile(lines)
7
- [:multi, [:haml, :text, lines.join('&#x000A;')]]
4
+ def compile(node)
5
+ text = node.value[:text].rstrip + "\n"
6
+ text = text.gsub("\n", '&#x000A;')
7
+ compile_text(text)
8
+ end
9
+
10
+ private
11
+
12
+ def compile_text(text)
13
+ if ::Hamlit::HamlUtil.contains_interpolation?(text)
14
+ [:dynamic, ::Hamlit::HamlUtil.slow_unescape_interpolation(text)]
15
+ else
16
+ [:static, text]
17
+ end
8
18
  end
9
19
  end
10
20
  end
@@ -1,10 +1,8 @@
1
- require 'hamlit/filters/base'
2
-
3
1
  module Hamlit
4
- module Filters
2
+ class Filters
5
3
  class Ruby < Base
6
- def compile(lines)
7
- [:multi, [:code, lines.join("\n")]]
4
+ def compile(node)
5
+ [:code, node.value[:text]]
8
6
  end
9
7
  end
10
8
  end
@@ -1,11 +1,13 @@
1
- require 'hamlit/filters/tilt'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Sass < Filters::Tilt
6
- def compile(lines)
7
- ast = [:html, :tag, 'style', [:html, :attrs]]
8
- compile_with_tilt('sass', lines.join("\n"), ast)
2
+ class Filters
3
+ class Sass < TiltBase
4
+ def compile(node)
5
+ require 'tilt/sass' if explicit_require?
6
+ temple = [:multi]
7
+ temple << [:static, "<style>\n".freeze]
8
+ temple << compile_with_tilt(node, 'sass', indent_width: 2)
9
+ temple << [:static, "</style>".freeze]
10
+ temple
9
11
  end
10
12
  end
11
13
  end
@@ -1,11 +1,13 @@
1
- require 'hamlit/filters/tilt'
2
-
3
1
  module Hamlit
4
- module Filters
5
- class Scss < Filters::Tilt
6
- def compile(lines)
7
- ast = [:html, :tag, 'style', [:html, :attrs]]
8
- compile_with_tilt('scss', lines.join("\n"), ast)
2
+ class Filters
3
+ class Scss < TiltBase
4
+ def compile(node)
5
+ require 'tilt/sass' if explicit_require?
6
+ temple = [:multi]
7
+ temple << [:static, "<style>\n".freeze]
8
+ temple << compile_with_tilt(node, 'scss', indent_width: 2)
9
+ temple << [:static, "</style>".freeze]
10
+ temple
9
11
  end
10
12
  end
11
13
  end