faml 0.2.13 → 0.2.14

Sign up to get free protection for your applications and to get access to all the features.
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
+