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
@@ -1,77 +0,0 @@
1
- # [new\_attribute\_spec.rb:19](/spec/hamlit/engine/new_attribute_spec.rb#L19)
2
- ## Input
3
- ```haml
4
- %span(a=__LINE__
5
- b=__LINE__)
6
- = __LINE__
7
-
8
- ```
9
-
10
- ## Output
11
- ### Haml
12
- ```html
13
- <span a='1' b='1'></span>
14
- 3
15
-
16
- ```
17
-
18
- ### Hamlit
19
- ```html
20
- <span a='1' b='2'></span>
21
- 3
22
-
23
- ```
24
-
25
-
26
- # [new\_attribute\_spec.rb:47](/spec/hamlit/engine/new_attribute_spec.rb#L47)
27
- ## Input
28
- ```haml
29
- %a(title="'")
30
- %a(title = "'\"")
31
- %a(href='/search?foo=bar&hoge=<fuga>')
32
-
33
- ```
34
-
35
- ## Output
36
- ### Haml
37
- ```html
38
- <a title="'"></a>
39
- <a title='&#x0027;"'></a>
40
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
41
-
42
- ```
43
-
44
- ### Hamlit
45
- ```html
46
- <a title='&#39;'></a>
47
- <a title='&#39;&quot;'></a>
48
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
49
-
50
- ```
51
-
52
-
53
- # [new\_attribute\_spec.rb:59](/spec/hamlit/engine/new_attribute_spec.rb#L59)
54
- ## Input
55
- ```haml
56
- - title = "'\""
57
- - href = '/search?foo=bar&hoge=<fuga>'
58
- %a(title=title)
59
- %a(href=href)
60
-
61
- ```
62
-
63
- ## Output
64
- ### Haml
65
- ```html
66
- <a title='&#x0027;"'></a>
67
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
68
-
69
- ```
70
-
71
- ### Hamlit
72
- ```html
73
- <a title='&#39;&quot;'></a>
74
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
75
-
76
- ```
77
-
@@ -1,142 +0,0 @@
1
- # [old\_attributes\_spec.rb:43](/spec/hamlit/engine/old_attributes_spec.rb#L43)
2
- ## Input
3
- ```haml
4
- %span{ class: '}}}', id: '{}}' } }{
5
-
6
- ```
7
-
8
- ## Output
9
- ### Haml
10
- ```html
11
- Haml::SyntaxError: (haml):1: syntax error, unexpected tSTRING_DEND, expecting ')'
12
- ...l, class: ')}>}}', id: '{}}' } }{</span>\n";;_erbout
13
- ... ^
14
- (haml):1: unterminated regexp meets end of file
15
- ```
16
-
17
- ### Hamlit
18
- ```html
19
- <span class='}}}' id='{}}'>}{</span>
20
-
21
- ```
22
-
23
-
24
- # [old\_attributes\_spec.rb:211](/spec/hamlit/engine/old_attributes_spec.rb#L211)
25
- ## Input
26
- ```haml
27
- / wontfix: Non-boolean attributes are not escaped for optimization.
28
- - val = false
29
- %a{ href: val }
30
- - val = nil
31
- %a{ href: val }
32
-
33
- / Boolean attributes are escaped correctly.
34
- - val = false
35
- %a{ disabled: val }
36
- - val = nil
37
- %a{ disabled: val }
38
-
39
- ```
40
-
41
- ## Output
42
- ### Haml
43
- ```html
44
- <!-- wontfix: Non-boolean attributes are not escaped for optimization. -->
45
- <a></a>
46
- <a></a>
47
- <!-- Boolean attributes are escaped correctly. -->
48
- <a></a>
49
- <a></a>
50
-
51
- ```
52
-
53
- ### Hamlit
54
- ```html
55
- <!-- wontfix: Non-boolean attributes are not escaped for optimization. -->
56
- <a href='false'></a>
57
- <a href=''></a>
58
- <!-- Boolean attributes are escaped correctly. -->
59
- <a></a>
60
- <a></a>
61
-
62
- ```
63
-
64
-
65
- # [old\_attributes\_spec.rb:236](/spec/hamlit/engine/old_attributes_spec.rb#L236)
66
- ## Input
67
- ```haml
68
- %a{title: "'"}
69
- %a{title: "'\""}
70
- %a{href: '/search?foo=bar&hoge=<fuga>'}
71
-
72
- ```
73
-
74
- ## Output
75
- ### Haml
76
- ```html
77
- <a title="'"></a>
78
- <a title='&#x0027;"'></a>
79
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
80
-
81
- ```
82
-
83
- ### Hamlit
84
- ```html
85
- <a title='&#39;'></a>
86
- <a title='&#39;&quot;'></a>
87
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
88
-
89
- ```
90
-
91
-
92
- # [old\_attributes\_spec.rb:248](/spec/hamlit/engine/old_attributes_spec.rb#L248)
93
- ## Input
94
- ```haml
95
- - title = "'\""
96
- - href = '/search?foo=bar&hoge=<fuga>'
97
- %a{title: title}
98
- %a{href: href}
99
-
100
- ```
101
-
102
- ## Output
103
- ### Haml
104
- ```html
105
- <a title='&#x0027;"'></a>
106
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
107
-
108
- ```
109
-
110
- ### Hamlit
111
- ```html
112
- <a title='&#39;&quot;'></a>
113
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
114
-
115
- ```
116
-
117
-
118
- # [old\_attributes\_spec.rb:260](/spec/hamlit/engine/old_attributes_spec.rb#L260)
119
- ## Input
120
- ```haml
121
- - title = { title: "'\"" }
122
- - href = { href: '/search?foo=bar&hoge=<fuga>' }
123
- %a{ title }
124
- %a{ href }
125
-
126
- ```
127
-
128
- ## Output
129
- ### Haml
130
- ```html
131
- <a title='&#x0027;"'></a>
132
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
133
-
134
- ```
135
-
136
- ### Hamlit
137
- ```html
138
- <a title='&#39;&quot;'></a>
139
- <a href='/search?foo=bar&amp;hoge=&lt;fuga&gt;'></a>
140
-
141
- ```
142
-
@@ -1,48 +0,0 @@
1
- # [tag\_spec.rb:271](/spec/hamlit/engine/tag_spec.rb#L271)
2
- ## Input
3
- ```haml
4
- %div<
5
- #{'hello'}
6
- world
7
-
8
- ```
9
-
10
- ## Output
11
- ### Haml
12
- ```html
13
- <div>helloworld</div>
14
-
15
- ```
16
-
17
- ### Hamlit
18
- ```html
19
- <div>hello
20
- world</div>
21
-
22
- ```
23
-
24
-
25
- # [tag\_spec.rb:282](/spec/hamlit/engine/tag_spec.rb#L282)
26
- ## Input
27
- ```haml
28
- .bar<
29
- - 1.times do
30
- = '1'
31
- = '2'
32
-
33
- ```
34
-
35
- ## Output
36
- ### Haml
37
- ```html
38
- <div class='bar'>12</div>
39
-
40
- ```
41
-
42
- ### Hamlit
43
- ```html
44
- <div class='bar'>1
45
- 2</div>
46
-
47
- ```
48
-
@@ -1,29 +0,0 @@
1
- # [text\_spec.rb:15](/spec/hamlit/engine/text_spec.rb#L15)
2
- ## Input
3
- ```haml
4
- .
5
- .*
6
- ..
7
- #
8
- #+
9
- ##
10
-
11
- ```
12
-
13
- ## Output
14
- ### Haml
15
- ```html
16
- Haml::SyntaxError: Illegal element: classes and ids must have values.
17
- ```
18
-
19
- ### Hamlit
20
- ```html
21
- .
22
- .*
23
- ..
24
- #
25
- #+
26
- ##
27
-
28
- ```
29
-
@@ -1,26 +0,0 @@
1
- # [erb\_spec.rb:3](/spec/hamlit/filters/erb_spec.rb#L3)
2
- ## Input
3
- ```haml
4
- :erb
5
- <% if true %>
6
- ok
7
- <% else %>
8
- ng
9
- <% end %>
10
-
11
- ```
12
-
13
- ## Output
14
- ### Haml
15
- ```html
16
- ok
17
-
18
-
19
- ```
20
-
21
- ### Hamlit
22
- ```html
23
- ok
24
-
25
- ```
26
-
@@ -1,76 +0,0 @@
1
- # [javascript\_spec.rb:3](/spec/hamlit/filters/javascript_spec.rb#L3)
2
- ## Input
3
- ```haml
4
- before
5
- :javascript
6
- after
7
-
8
- ```
9
-
10
- ## Output
11
- ### Haml
12
- ```html
13
- before
14
- <script>
15
-
16
- </script>
17
- after
18
-
19
- ```
20
-
21
- ### Hamlit
22
- ```html
23
- before
24
- <script>
25
-
26
- </script>
27
- after
28
-
29
- ```
30
-
31
-
32
- # [javascript\_spec.rb:32](/spec/hamlit/filters/javascript_spec.rb#L32)
33
- ## Input
34
- ```haml
35
- :javascript
36
- if {
37
- alert('hello');
38
- }
39
- :javascript
40
- if {
41
- alert('hello');
42
- }
43
-
44
- ```
45
-
46
- ## Output
47
- ### Haml
48
- ```html
49
- <script>
50
- if {
51
- alert('hello');
52
- }
53
- </script>
54
- <script>
55
- if {
56
- alert('hello');
57
- }
58
- </script>
59
-
60
- ```
61
-
62
- ### Hamlit
63
- ```html
64
- <script>
65
- if {
66
- alert('hello');
67
- }
68
- </script>
69
- <script>
70
- if {
71
- alert('hello');
72
- }
73
- </script>
74
-
75
- ```
76
-
@@ -1,31 +0,0 @@
1
- # [markdown\_spec.rb:15](/spec/hamlit/filters/markdown_spec.rb#L15)
2
- ## Input
3
- ```haml
4
- - project = '<Hamlit>'
5
- :markdown
6
- # #{project}
7
- #{'<&>'}
8
- Yet another haml implementation
9
-
10
- ```
11
-
12
- ## Output
13
- ### Haml
14
- ```html
15
- <h1><Hamlit></h1>
16
-
17
- <p>&lt;&amp;&gt;
18
- Yet another haml implementation</p>
19
-
20
-
21
- ```
22
-
23
- ### Hamlit
24
- ```html
25
- <h1><Hamlit></h1>
26
-
27
- <p>&lt;&amp;&gt;
28
- Yet another haml implementation</p>
29
-
30
- ```
31
-
@@ -1,78 +0,0 @@
1
- require 'hamlit/concerns/attribute_builder'
2
- require 'temple/utils'
3
-
4
- # Hamlit::Attribute is a module to compile old-style attributes which
5
- # can be compiled only on runtime. If you write old-style attributes
6
- # which is not valid as Ruby hash, the attributes are compiled on runtime.
7
- #
8
- # Note that you should avoid writing such a template for performance.
9
- module Hamlit
10
- class Attribute
11
- include Concerns::AttributeBuilder
12
-
13
- def self.build(quote, *args)
14
- builder = self.new(quote)
15
- builder.build(*args)
16
- end
17
-
18
- def initialize(quote)
19
- @quote = quote
20
- end
21
-
22
- def build(*args)
23
- result = ''
24
- attributes = args.inject({}) do |attrs, arg|
25
- merge_attributes(attrs, arg)
26
- end
27
-
28
- attributes.each do |key, value|
29
- if value == true
30
- result += " #{key}"
31
- next
32
- end
33
-
34
- value = refine_joinable_value(key, value) if value.is_a?(Array)
35
- escaped = Temple::Utils.escape_html(value)
36
- result += " #{key}=#{@quote}#{escaped}#{@quote}"
37
- end
38
- result
39
- end
40
-
41
- private
42
-
43
- def refine_joinable_value(key, value)
44
- case key
45
- when :id
46
- value = value.join('_')
47
- when :class
48
- value = value.join(' ')
49
- else
50
- value
51
- end
52
- end
53
-
54
- def merge_attributes(base, target)
55
- result = {}
56
- base = flatten_attributes(base)
57
- target = flatten_attributes(target)
58
-
59
- (base.keys | target.keys).each do |key|
60
- result[key] = merge_attribute_value(base, target, key)
61
- end
62
- result
63
- end
64
-
65
- def merge_attribute_value(base, target, key)
66
- return target[key] unless base[key]
67
- return base[key] unless target[key]
68
-
69
- values = [base[key], target[key]].flatten.compact
70
- case key
71
- when :id
72
- values.join('_')
73
- when :class
74
- values.map(&:to_s).sort.uniq.join(' ')
75
- end
76
- end
77
- end
78
- end