faml 0.2.13 → 0.2.14

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +2 -0
  4. data/faml.gemspec +2 -1
  5. data/incompatibilities/README.md +29 -0
  6. data/incompatibilities/spec/compiler_newline_spec.md +31 -0
  7. data/incompatibilities/spec/render/attribute_spec.md +587 -0
  8. data/incompatibilities/spec/render/comment_spec.md +42 -0
  9. data/incompatibilities/spec/render/doctype_spec.md +22 -0
  10. data/incompatibilities/spec/render/element_spec.md +95 -0
  11. data/incompatibilities/spec/render/filters/cdata_spec.md +25 -0
  12. data/incompatibilities/spec/render/filters/coffee_spec.md +88 -0
  13. data/incompatibilities/spec/render/filters/css_spec.md +38 -0
  14. data/incompatibilities/spec/render/filters/escaped_spec.md +33 -0
  15. data/incompatibilities/spec/render/filters/javascript_spec.md +38 -0
  16. data/incompatibilities/spec/render/filters/markdown_spec.md +24 -0
  17. data/incompatibilities/spec/render/filters/preserve_spec.md +29 -0
  18. data/incompatibilities/spec/render/filters/sass_spec.md +59 -0
  19. data/incompatibilities/spec/render/filters/scss_spec.md +65 -0
  20. data/incompatibilities/spec/render/helpers_spec.md +17 -0
  21. data/incompatibilities/spec/render/indent_spec.md +21 -0
  22. data/incompatibilities/spec/render/multiline_spec.md +55 -0
  23. data/incompatibilities/spec/render/newline_spec.md +91 -0
  24. data/incompatibilities/spec/render/plain_spec.md +19 -0
  25. data/incompatibilities/spec/render/sanitize_spec.md +36 -0
  26. data/incompatibilities/spec/render/silent_script_spec.md +31 -0
  27. data/incompatibilities/spec/render/unescape_spec.md +56 -0
  28. data/lib/faml/indent_tracker.rb +39 -3
  29. data/lib/faml/parser.rb +2 -0
  30. data/lib/faml/version.rb +1 -1
  31. data/spec/render/element_spec.rb +0 -9
  32. data/spec/render/indent_spec.rb +47 -0
  33. data/spec/spec_helper.rb +21 -2
  34. data/spec/support/incompatibilities_generator.rb +132 -0
  35. metadata +53 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13af244db12ca1e99e25c6f757a58390e966b37e
4
- data.tar.gz: 9528efe51e42a8d73fa0eee94e831509b4f46912
3
+ metadata.gz: ad03dfd0077214679b01a81f9f23e38681e5ba09
4
+ data.tar.gz: 4f845eab154e7fefc437be4a4b6e7e9d781e7e5f
5
5
  SHA512:
6
- metadata.gz: da4116520b13a085b7cebeb5ecc3a6a36787461db58fe5eb37cec1a3554de3a171494719e494eb64b9267e24fa765fa62311bbeceebb721d0ea745700d9e037f
7
- data.tar.gz: bf0d92f3dde0f11aba126fa2f592429e149de0445f82a662589df132b462bea2b75adb959143fb82759c5258165e8f8f13009efc02e2a15774ac6c5bd12cb9d1
6
+ metadata.gz: 03eb904bc291e05ab14219d83c940a51c7b44c91cd42cd6b6b5b78a7d4774a0df35e5dadc84dc5fc92a324006c65681de3ebe0f6ca4ee95bbc26babff5fae0d0
7
+ data.tar.gz: 9785e68c585d85301896f83e1b332d75423a6fa8b66194f2caa6384dccfe768ac52aa9860717776512ff3e933ce9a4f1c3e85c21dd0886007aa31cfea5923933
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.2.14 (2015-06-11)
2
+ - Check indent size consistency for compatibility with Haml
3
+ - Intentionally prohibit indentations with hard tabs
4
+
1
5
  ## 0.2.13 (2015-04-14)
2
6
  - Fix attribute rendering in non-html format when the value is true
3
7
  - Fix Faml::Engine constructor to allow user to set options via `Faml::Engine.options`
data/README.md CHANGED
@@ -49,6 +49,8 @@ If your framework uses tilt, you can use faml by replacing `gem 'haml'` with `ge
49
49
  ## Incompatibilities
50
50
  There are several incompatibilities.
51
51
 
52
+ See [incompatibilities](incompatibilities) for details generated by spec files.
53
+
52
54
  ### Hash attributes
53
55
  Hash attributes are only supported to "data" attributes.
54
56
 
data/faml.gemspec CHANGED
@@ -16,8 +16,9 @@ Gem::Specification.new do |spec|
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.extensions = ['ext/attribute_builder/extconf.rb']
19
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features|incompatibilities)/})
20
20
  spec.require_paths = ["lib"]
21
+ spec.required_ruby_version = ">= 2.0.0"
21
22
 
22
23
  spec.add_dependency "escape_utils"
23
24
  spec.add_dependency "parser"
@@ -0,0 +1,29 @@
1
+ # Incompatibilities
2
+ ## Versions
3
+ - Haml 4.0.6
4
+ - Faml 0.2.13
5
+ - Hamlit 1.6.0
6
+
7
+ ## Table of contents
8
+ - [spec/compiler_newline_spec.md](spec/compiler_newline_spec.md)
9
+ - [spec/render/attribute_spec.md](spec/render/attribute_spec.md)
10
+ - [spec/render/comment_spec.md](spec/render/comment_spec.md)
11
+ - [spec/render/doctype_spec.md](spec/render/doctype_spec.md)
12
+ - [spec/render/element_spec.md](spec/render/element_spec.md)
13
+ - [spec/render/filters/cdata_spec.md](spec/render/filters/cdata_spec.md)
14
+ - [spec/render/filters/coffee_spec.md](spec/render/filters/coffee_spec.md)
15
+ - [spec/render/filters/css_spec.md](spec/render/filters/css_spec.md)
16
+ - [spec/render/filters/escaped_spec.md](spec/render/filters/escaped_spec.md)
17
+ - [spec/render/filters/javascript_spec.md](spec/render/filters/javascript_spec.md)
18
+ - [spec/render/filters/markdown_spec.md](spec/render/filters/markdown_spec.md)
19
+ - [spec/render/filters/preserve_spec.md](spec/render/filters/preserve_spec.md)
20
+ - [spec/render/filters/sass_spec.md](spec/render/filters/sass_spec.md)
21
+ - [spec/render/filters/scss_spec.md](spec/render/filters/scss_spec.md)
22
+ - [spec/render/helpers_spec.md](spec/render/helpers_spec.md)
23
+ - [spec/render/indent_spec.md](spec/render/indent_spec.md)
24
+ - [spec/render/multiline_spec.md](spec/render/multiline_spec.md)
25
+ - [spec/render/newline_spec.md](spec/render/newline_spec.md)
26
+ - [spec/render/plain_spec.md](spec/render/plain_spec.md)
27
+ - [spec/render/sanitize_spec.md](spec/render/sanitize_spec.md)
28
+ - [spec/render/silent_script_spec.md](spec/render/silent_script_spec.md)
29
+ - [spec/render/unescape_spec.md](spec/render/unescape_spec.md)
@@ -0,0 +1,31 @@
1
+ # [./spec/compiler_newline_spec.rb:209](../../spec/compiler_newline_spec.rb#L209)
2
+ ## Input
3
+ ```haml
4
+ = [__LINE__,
5
+ __LINE__,
6
+ __LINE__].join(' ')
7
+ %span= __LINE__
8
+
9
+ ```
10
+
11
+ ## Faml
12
+ ```html
13
+ 1 2 3
14
+ <span>4</span>
15
+
16
+ ```
17
+
18
+ ## Haml
19
+ ```html
20
+ 1 1 1
21
+ <span>4</span>
22
+
23
+ ```
24
+
25
+ ## Hamlit
26
+ ```html
27
+ 1 1 1
28
+ <span>2</span>
29
+
30
+ ```
31
+
@@ -0,0 +1,587 @@
1
+ # [./spec/render/attribute_spec.rb:23](../../../spec/render/attribute_spec.rb#L23)
2
+ ## Input
3
+ ```haml
4
+ %span{"foo": 'bar'}
5
+ ```
6
+
7
+ ## Faml, Haml
8
+ ```html
9
+ <span foo='bar'></span>
10
+
11
+ ```
12
+
13
+ ## Hamlit (Error)
14
+ ```html
15
+ Hamlit::SyntaxError
16
+ ```
17
+
18
+ # [./spec/render/attribute_spec.rb:23](../../../spec/render/attribute_spec.rb#L23)
19
+ ## Input
20
+ ```haml
21
+ - x = 'bar'
22
+ %span{"foo": x}
23
+ ```
24
+
25
+ ## Faml, Haml
26
+ ```html
27
+ <span foo='bar'></span>
28
+
29
+ ```
30
+
31
+ ## Hamlit (Error)
32
+ ```html
33
+ Hamlit::SyntaxError
34
+ ```
35
+
36
+ # [./spec/render/attribute_spec.rb:23](../../../spec/render/attribute_spec.rb#L23)
37
+ ## Input
38
+ ```haml
39
+ %span{'foo': 'bar'}
40
+ ```
41
+
42
+ ## Faml, Haml
43
+ ```html
44
+ <span foo='bar'></span>
45
+
46
+ ```
47
+
48
+ ## Hamlit (Error)
49
+ ```html
50
+ Hamlit::SyntaxError
51
+ ```
52
+
53
+ # [./spec/render/attribute_spec.rb:23](../../../spec/render/attribute_spec.rb#L23)
54
+ ## Input
55
+ ```haml
56
+ - x = 'bar'
57
+ %span{'foo': x}
58
+ ```
59
+
60
+ ## Faml, Haml
61
+ ```html
62
+ <span foo='bar'></span>
63
+
64
+ ```
65
+
66
+ ## Hamlit (Error)
67
+ ```html
68
+ Hamlit::SyntaxError
69
+ ```
70
+
71
+ # [./spec/render/attribute_spec.rb:52](../../../spec/render/attribute_spec.rb#L52)
72
+ ## Input
73
+ ```haml
74
+ - h1 = {class: 'c1', id: ['id1', 'id3']}
75
+ - h2 = {class: [{}, 'c2'], id: 'id2'}
76
+ %span#main.content{h1, h2} hello
77
+
78
+ ```
79
+
80
+ ## Faml, Haml
81
+ ```html
82
+ <span class='c1 c2 content {}' id='main_id1_id3_id2'>hello</span>
83
+
84
+ ```
85
+
86
+ ## Hamlit
87
+ ```html
88
+ <span class='c1 content c2 {}' id='main_id1_id3_id2'>hello</span>
89
+
90
+ ```
91
+
92
+ # [./spec/render/attribute_spec.rb:65](../../../spec/render/attribute_spec.rb#L65)
93
+ ## Input
94
+ ```haml
95
+ %span.foo{class: :foo}
96
+ ```
97
+
98
+ ## Faml, Haml
99
+ ```html
100
+ <span class='foo'></span>
101
+
102
+ ```
103
+
104
+ ## Hamlit
105
+ ```html
106
+ <span class='foo foo'></span>
107
+
108
+ ```
109
+
110
+ # [./spec/render/attribute_spec.rb:65](../../../spec/render/attribute_spec.rb#L65)
111
+ ## Input
112
+ ```haml
113
+ %span.foo{class: "foo bar"}
114
+ ```
115
+
116
+ ## Faml, Haml
117
+ ```html
118
+ <span class='bar foo'></span>
119
+
120
+ ```
121
+
122
+ ## Hamlit
123
+ ```html
124
+ <span class='foo bar foo'></span>
125
+
126
+ ```
127
+
128
+ # [./spec/render/attribute_spec.rb:65](../../../spec/render/attribute_spec.rb#L65)
129
+ ## Input
130
+ ```haml
131
+ %span.foo{class: %w[foo bar]}
132
+ ```
133
+
134
+ ## Faml, Haml
135
+ ```html
136
+ <span class='bar foo'></span>
137
+
138
+ ```
139
+
140
+ ## Hamlit
141
+ ```html
142
+ <span class='bar foo foo'></span>
143
+
144
+ ```
145
+
146
+ # [./spec/render/attribute_spec.rb:71](../../../spec/render/attribute_spec.rb#L71)
147
+ ## Input
148
+ ```haml
149
+ %span.#foo{id: :bar} hello
150
+ ```
151
+
152
+ ## Faml
153
+ ```html
154
+ <span id='foo_bar'>hello</span>
155
+
156
+ ```
157
+
158
+ ## Haml (Error)
159
+ ```html
160
+ Illegal element: classes and ids must have values.
161
+ ```
162
+
163
+ ## Hamlit (Error)
164
+ ```html
165
+ Expected to scan (?-mix:[a-zA-Z0-9_-]+) but got nil
166
+ ```
167
+
168
+ # [./spec/render/attribute_spec.rb:75](../../../spec/render/attribute_spec.rb#L75)
169
+ ## Input
170
+ ```haml
171
+ %span{class: "x\"y'z"} hello
172
+ ```
173
+
174
+ ## Faml, Hamlit
175
+ ```html
176
+ <span class='x&quot;y&#39;z'>hello</span>
177
+
178
+ ```
179
+
180
+ ## Haml
181
+ ```html
182
+ <span class='x"y&#x0027;z'>hello</span>
183
+
184
+ ```
185
+
186
+ # [./spec/render/attribute_spec.rb:92](../../../spec/render/attribute_spec.rb#L92)
187
+ ## Input (with options={:format=>:xhtml})
188
+ ```haml
189
+ - foo = true
190
+ %span{foo: foo, bar: 1} hello
191
+ ```
192
+
193
+ ## Faml, Haml
194
+ ```html
195
+ <span bar='1' foo='foo'>hello</span>
196
+
197
+ ```
198
+
199
+ ## Hamlit
200
+ ```html
201
+ <span bar='1' foo='true'>hello</span>
202
+
203
+ ```
204
+
205
+ # [./spec/render/attribute_spec.rb:92](../../../spec/render/attribute_spec.rb#L92)
206
+ ## Input (with options={:format=>:xhtml})
207
+ ```haml
208
+ - h = {foo: true, bar: 1}
209
+ %span{h} hello
210
+ ```
211
+
212
+ ## Faml, Haml
213
+ ```html
214
+ <span bar='1' foo='foo'>hello</span>
215
+
216
+ ```
217
+
218
+ ## Hamlit
219
+ ```html
220
+ <span foo bar='1'>hello</span>
221
+
222
+ ```
223
+
224
+ # [./spec/render/attribute_spec.rb:99](../../../spec/render/attribute_spec.rb#L99)
225
+ ## Input
226
+ ```haml
227
+ %span{foo: {bar: 1+2}} hello
228
+ ```
229
+
230
+ ## Faml
231
+ ```html
232
+ <span foo='{:bar=&gt;3}'>hello</span>
233
+
234
+ ```
235
+
236
+ ## Haml, Hamlit
237
+ ```html
238
+ <span foo-bar='3'>hello</span>
239
+
240
+ ```
241
+
242
+ # [./spec/render/attribute_spec.rb:103](../../../spec/render/attribute_spec.rb#L103)
243
+ ## Input
244
+ ```haml
245
+ - attrs = { foo: 1, bar: { hoge: :fuga }, baz: true }
246
+ %span{attrs} hello
247
+
248
+ ```
249
+
250
+ ## Faml
251
+ ```html
252
+ <span bar='{:hoge=&gt;:fuga}' baz foo='1'>hello</span>
253
+
254
+ ```
255
+
256
+ ## Haml
257
+ ```html
258
+ <span bar-hoge='fuga' baz foo='1'>hello</span>
259
+
260
+ ```
261
+
262
+ ## Hamlit
263
+ ```html
264
+ <span foo='1' bar-hoge='fuga' baz>hello</span>
265
+
266
+ ```
267
+
268
+ # [./spec/render/attribute_spec.rb:117](../../../spec/render/attribute_spec.rb#L117)
269
+ ## Input
270
+ ```haml
271
+ - data = { foo: 1 }
272
+ %span{foo: {bar: "x#{1}y"}} hello
273
+
274
+ ```
275
+
276
+ ## Faml
277
+ ```html
278
+ <span foo='{:bar=&gt;&quot;x1y&quot;}'>hello</span>
279
+
280
+ ```
281
+
282
+ ## Haml, Hamlit
283
+ ```html
284
+ <span foo-bar='x1y'>hello</span>
285
+
286
+ ```
287
+
288
+ # [./spec/render/attribute_spec.rb:124](../../../spec/render/attribute_spec.rb#L124)
289
+ ## Input
290
+ ```haml
291
+ %span{foo: {bar: 1+2}} hello
292
+ ```
293
+
294
+ ## Faml
295
+ ```html
296
+ <span foo='{:bar=&gt;3}'>hello</span>
297
+
298
+ ```
299
+
300
+ ## Haml, Hamlit
301
+ ```html
302
+ <span foo-bar='3'>hello</span>
303
+
304
+ ```
305
+
306
+ # [./spec/render/attribute_spec.rb:157](../../../spec/render/attribute_spec.rb#L157)
307
+ ## Input
308
+ ```haml
309
+ %span{foo: 1
310
+ , bar: 2} hello
311
+
312
+ ```
313
+
314
+ ## Faml (Error)
315
+ ```html
316
+ Unmatched brace
317
+ ```
318
+
319
+ ## Haml (Error)
320
+ ```html
321
+ Unbalanced brackets.
322
+ ```
323
+
324
+ ## Hamlit
325
+ ```html
326
+ <span bar='2' foo='1'>hello</span>
327
+
328
+ ```
329
+
330
+ # [./spec/render/attribute_spec.rb:166](../../../spec/render/attribute_spec.rb#L166)
331
+ ## Input
332
+ ```haml
333
+ %span{data: {foo: 1, bar: 'baz', :hoge => :fuga, k1: { k2: 'v3' }}} hello
334
+ ```
335
+
336
+ ## Faml, Haml
337
+ ```html
338
+ <span data-bar='baz' data-foo='1' data-hoge='fuga' data-k1-k2='v3'>hello</span>
339
+
340
+ ```
341
+
342
+ ## Hamlit
343
+ ```html
344
+ <span data-foo='1' data-bar='baz' data-hoge='fuga' data-k1-k2='v3'>hello</span>
345
+
346
+ ```
347
+
348
+ # [./spec/render/attribute_spec.rb:174](../../../spec/render/attribute_spec.rb#L174)
349
+ ## Input
350
+ ```haml
351
+ %span{data: {foo: 1, bar: 2+3}} hello
352
+ ```
353
+
354
+ ## Faml, Haml
355
+ ```html
356
+ <span data-bar='5' data-foo='1'>hello</span>
357
+
358
+ ```
359
+
360
+ ## Hamlit
361
+ ```html
362
+ <span data-foo='1' data-bar='5'>hello</span>
363
+
364
+ ```
365
+
366
+ # [./spec/render/attribute_spec.rb:178](../../../spec/render/attribute_spec.rb#L178)
367
+ ## Input
368
+ ```haml
369
+ - data = { foo: 1, bar: 2 }
370
+ %span{data: data} hello
371
+
372
+ ```
373
+
374
+ ## Faml, Haml
375
+ ```html
376
+ <span data-bar='2' data-foo='1'>hello</span>
377
+
378
+ ```
379
+
380
+ ## Hamlit
381
+ ```html
382
+ <span data-foo='1' data-bar='2'>hello</span>
383
+
384
+ ```
385
+
386
+ # [./spec/render/attribute_spec.rb:186](../../../spec/render/attribute_spec.rb#L186)
387
+ ## Input
388
+ ```haml
389
+ %span{b: __LINE__,
390
+ a: __LINE__}
391
+
392
+ ```
393
+
394
+ ## Faml, Haml
395
+ ```html
396
+ <span a='2' b='1'></span>
397
+
398
+ ```
399
+
400
+ ## Hamlit
401
+ ```html
402
+ <span a='1' b='1'></span>
403
+
404
+ ```
405
+
406
+ # [./spec/render/attribute_spec.rb:212](../../../spec/render/attribute_spec.rb#L212)
407
+ ## Input
408
+ ```haml
409
+ %span{data: {foo: 1,
410
+ bar: 2}}
411
+ %span hello
412
+
413
+ ```
414
+
415
+ ## Faml, Haml
416
+ ```html
417
+ <span data-bar='2' data-foo='1'>
418
+ <span>hello</span>
419
+ </span>
420
+
421
+ ```
422
+
423
+ ## Hamlit
424
+ ```html
425
+ <span data-foo='1' data-bar='2'>
426
+ <span>hello</span>
427
+ </span>
428
+
429
+ ```
430
+
431
+ # [./spec/render/attribute_spec.rb:220](../../../spec/render/attribute_spec.rb#L220)
432
+ ## Input
433
+ ```haml
434
+ %span(foo=1
435
+
436
+ bar=3) hello
437
+
438
+ ```
439
+
440
+ ## Faml, Haml
441
+ ```html
442
+ <span bar='3' foo='1'>hello</span>
443
+
444
+ ```
445
+
446
+ ## Hamlit
447
+ ```html
448
+ <span foo='3'>hello</span>
449
+
450
+ ```
451
+
452
+ # [./spec/render/attribute_spec.rb:237](../../../spec/render/attribute_spec.rb#L237)
453
+ ## Input
454
+ ```haml
455
+ %span(foo bar=1) hello
456
+ ```
457
+
458
+ ## Faml, Haml
459
+ ```html
460
+ <span bar='1' foo>hello</span>
461
+
462
+ ```
463
+
464
+ ## Hamlit
465
+ ```html
466
+ <span = foo>hello</span>
467
+
468
+ ```
469
+
470
+ # [./spec/render/attribute_spec.rb:241](../../../spec/render/attribute_spec.rb#L241)
471
+ ## Input
472
+ ```haml
473
+ %span(foo=1 bar='baz#{1 + 2}') hello
474
+ ```
475
+
476
+ ## Faml, Haml
477
+ ```html
478
+ <span bar='baz3' foo='1'>hello</span>
479
+
480
+ ```
481
+
482
+ ## Hamlit
483
+ ```html
484
+ <span bar='baz#{1 + 2}' foo='1'>hello</span>
485
+
486
+ ```
487
+
488
+ # [./spec/render/attribute_spec.rb:246](../../../spec/render/attribute_spec.rb#L246)
489
+ ## Input
490
+ ```haml
491
+ %span(foo=1 bar="ba\"z") hello
492
+ ```
493
+
494
+ ## Faml, Hamlit
495
+ ```html
496
+ <span bar='ba&quot;z' foo='1'>hello</span>
497
+
498
+ ```
499
+
500
+ ## Haml
501
+ ```html
502
+ <span bar='ba"z' foo='1'>hello</span>
503
+
504
+ ```
505
+
506
+ # [./spec/render/attribute_spec.rb:246](../../../spec/render/attribute_spec.rb#L246)
507
+ ## Input
508
+ ```haml
509
+ %span(foo=1 bar='ba\'z') hello
510
+ ```
511
+
512
+ ## Faml, Hamlit
513
+ ```html
514
+ <span bar='ba&#39;z' foo='1'>hello</span>
515
+
516
+ ```
517
+
518
+ ## Haml
519
+ ```html
520
+ <span bar="ba'z" foo='1'>hello</span>
521
+
522
+ ```
523
+
524
+ # [./spec/render/attribute_spec.rb:255](../../../spec/render/attribute_spec.rb#L255)
525
+ ## Input
526
+ ```haml
527
+ %span(foo=1 3.14=3) hello
528
+ ```
529
+
530
+ ## Faml (Error)
531
+ ```html
532
+ Invalid attribute list (missing attributename)
533
+ ```
534
+
535
+ ## Haml (Error)
536
+ ```html
537
+ Invalid attribute list: "(foo=1 3.14=3)".
538
+ ```
539
+
540
+ ## Hamlit
541
+ ```html
542
+ <span 3.14 foo='1'>hello</span>
543
+
544
+ ```
545
+
546
+ # [./spec/render/attribute_spec.rb:259](../../../spec/render/attribute_spec.rb#L259)
547
+ ## Input
548
+ ```haml
549
+ %span(foo=1 bar=) hello
550
+ ```
551
+
552
+ ## Faml (Error)
553
+ ```html
554
+ Invalid attribute list (invalid variable name)
555
+ ```
556
+
557
+ ## Haml (Error)
558
+ ```html
559
+ Invalid attribute list: "(foo=1 bar=)".
560
+ ```
561
+
562
+ ## Hamlit
563
+ ```html
564
+ <span bar foo='1'>hello</span>
565
+
566
+ ```
567
+
568
+ # [./spec/render/attribute_spec.rb:271](../../../spec/render/attribute_spec.rb#L271)
569
+ ## Input
570
+ ```haml
571
+ %span(b=__LINE__
572
+ a=__LINE__)
573
+
574
+ ```
575
+
576
+ ## Faml
577
+ ```html
578
+ <span a='2' b='1'></span>
579
+
580
+ ```
581
+
582
+ ## Haml, Hamlit
583
+ ```html
584
+ <span a='1' b='1'></span>
585
+
586
+ ```
587
+