hamlet 0.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@ require 'date'
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'hamlet'
7
- s.version = 0.2
7
+ s.version = '0.2.1'
8
8
  s.date = Date.today.to_s
9
9
  s.authors = ['Greg Weber']
10
10
  s.email = ['greg@gregweber.info']
@@ -189,6 +189,12 @@ module ForkedSlim
189
189
  # Slim comment
190
190
  parse_comment_block
191
191
  end
192
+ when /\A([\|'])( ?)(.*)\Z/
193
+ # Found a text block.
194
+ trailing_ws = $1 == "'"
195
+ @stacks.last << [:slim, :interpolate, $3] unless $3.empty?
196
+ parse_text_block($3.empty? ? nil : @indents.last + $2.size + 1)
197
+ @stacks.last << [:static, ' '] if trailing_ws
192
198
  when /\A-/
193
199
  # Found a code block.
194
200
  # We expect the line to be broken or the next line to be indented.
@@ -205,7 +211,7 @@ module ForkedSlim
205
211
  @stacks.last << [:slim, :output, $1.empty?, parse_broken_line, block]
206
212
  @stacks.last << [:static, ' '] unless $2.empty?
207
213
  @stacks << block
208
- when /\A<(\w+):\s*\Z/
214
+ when /\A(\w+):\s*\Z/
209
215
  # Embedded template detected. It is treated as block.
210
216
  block = [:multi]
211
217
  @stacks.last << [:newline] << [:slim, :embedded, $1, block]
@@ -215,15 +221,9 @@ module ForkedSlim
215
221
  when /\Adoctype\s+/i
216
222
  # Found doctype declaration
217
223
  @stacks.last << [:html, :doctype, $'.strip]
218
- when /\A<([#\.]|\w[:\w-]*)/
224
+ when /\A([#\.]|\w[:\w-]*)/
219
225
  # Found a HTML tag.
220
- parse_tag($1)
221
- when /\A(> *)?(.*)?\Z/
222
- # Found a text block.
223
- trailing_ws = !$1
224
- @stacks.last << [:slim, :interpolate, $2] unless $2.empty?
225
- parse_text_block($2.empty? ? nil : @indents.last + $1.to_s.size)
226
- @stacks.last << [:static, ' '] if trailing_ws
226
+ parse_tag($&)
227
227
  else
228
228
  syntax_error! 'Unknown line indicator'
229
229
  end
@@ -282,7 +282,6 @@ module ForkedSlim
282
282
  end
283
283
 
284
284
  def parse_tag(tag)
285
- @line.slice!(0,1) # get rid of leading '<'
286
285
  if tag == '#' || tag == '.'
287
286
  tag = options[:default_tag]
288
287
  else
@@ -293,7 +292,7 @@ module ForkedSlim
293
292
  @stacks.last << tag
294
293
 
295
294
  case @line
296
- when /\A\s*>?=(=?)('?)/
295
+ when /\A\s*=(=?)('?)/
297
296
  # Handle output code
298
297
  block = [:multi]
299
298
  @line = $'
@@ -303,12 +302,12 @@ module ForkedSlim
303
302
  @stacks << block
304
303
  when /\A\s*\//
305
304
  # Closed tag. Do nothing
306
- when /\A\s*>?\s*\Z/
305
+ when /\A\s*\Z/
307
306
  # Empty content
308
307
  content = [:multi]
309
308
  tag << content
310
309
  @stacks << content
311
- when /\A( ?)>?(.*)\Z/
310
+ when /\A( ?)(.*)\Z/
312
311
  # Text content
313
312
  content = [:multi, [:slim, :interpolate, $2]]
314
313
  tag << content
@@ -381,6 +380,7 @@ module ForkedSlim
381
380
  attributes
382
381
  end
383
382
 
383
+ =begin
384
384
  def parse_ruby_attribute(outer_delimiter)
385
385
  value, count, delimiter, close_delimiter = '', 0, nil, nil
386
386
 
@@ -411,6 +411,7 @@ module ForkedSlim
411
411
 
412
412
  value
413
413
  end
414
+ =end
414
415
 
415
416
  def parse_quoted_attribute(quote)
416
417
  value, count = '', 0
@@ -54,25 +54,16 @@ module Hamlet
54
54
  when /\A<([#\.]|\w[:\w-]*)/
55
55
  # Found a HTML tag.
56
56
  parse_tag($1)
57
- when /\A(> *)?(.*)?\Z/
57
+ when /\A(?:>( *))?(.*)?\Z/
58
58
  # Found a text block.
59
- trailing_ws = !$1
60
- @stacks.last << [:slim, :interpolate, $2] unless $2.empty?
59
+ @stacks.last << [:slim, :interpolate, $1 ? $1 << $2 : $2] unless $2.empty?
61
60
  parse_text_block($2.empty? ? nil : @indents.last + $1.to_s.size)
62
- @stacks.last << [:static, ' '] if trailing_ws
63
61
  else
64
62
  syntax_error! 'Unknown line indicator'
65
63
  end
66
64
  @stacks.last << [:newline]
67
65
  end
68
66
 
69
- def parse_comment_block
70
- while !@lines.empty? && (@lines.first =~ /\A\s*\Z/ || get_indent(@lines.first) > @indents.last)
71
- next_line
72
- @stacks.last << [:newline]
73
- end
74
- end
75
-
76
67
  def parse_text_block(text_indent = nil)
77
68
  empty_lines = 0
78
69
  until @lines.empty?
@@ -143,5 +134,68 @@ module Hamlet
143
134
  parse_text_block(@orig_line.size - @line.size + $1.size)
144
135
  end
145
136
  end
137
+
138
+ def parse_attributes
139
+ attributes = [:html, :attrs]
140
+
141
+ # Find any literal class/id attributes
142
+ while @line =~ CLASS_ID_REGEX
143
+ # The class/id attribute is :static instead of :slim :text,
144
+ # because we don't want text interpolation in .class or #id shortcut
145
+ attributes << [:html, :attr, ATTR_SHORTCUT[$1], [:static, $2]]
146
+ @line = $'
147
+ end
148
+
149
+ # Check to see if there is a delimiter right after the tag name
150
+ delimiter = nil
151
+ if @line =~ DELIMITER_REGEX
152
+ delimiter = DELIMITERS[$&]
153
+ @line.slice!(0)
154
+ end
155
+
156
+ orig_line = @orig_line
157
+ lineno = @lineno
158
+ while true
159
+ # Parse attributes
160
+ attr_regex = delimiter ? /#{ATTR_NAME_REGEX}(=|\s|(?=#{Regexp.escape delimiter}))/ : /#{ATTR_NAME_REGEX}=/
161
+ while @line =~ attr_regex
162
+ @line = $'
163
+ name = $1
164
+ if delimiter && $2 != '='
165
+ attributes << [:slim, :attr, name, false, 'true']
166
+ elsif @line =~ /\A["']/
167
+ # Value is quoted (static)
168
+ @line = $'
169
+ attributes << [:html, :attr, name, [:slim, :interpolate, parse_quoted_attribute($&)]]
170
+ else
171
+ @line =~ /[^ >]+/
172
+ @line = $'
173
+ attributes << [:html, :attr, name, [:slim, :interpolate, $&]]
174
+ end
175
+ end
176
+
177
+ # No ending delimiter, attribute end
178
+ break unless delimiter
179
+
180
+ # Find ending delimiter
181
+ if @line =~ /\A\s*#{Regexp.escape delimiter}/
182
+ @line = $'
183
+ break
184
+ end
185
+
186
+ # Found something where an attribute should be
187
+ @line.lstrip!
188
+ syntax_error!('Expected attribute') unless @line.empty?
189
+
190
+ # Attributes span multiple lines
191
+ @stacks.last << [:newline]
192
+ next_line || syntax_error!("Expected closing delimiter #{delimiter}",
193
+ :orig_line => orig_line,
194
+ :lineno => lineno,
195
+ :column => orig_line.size)
196
+ end
197
+
198
+ attributes
199
+ end
146
200
  end
147
201
  end
@@ -4,11 +4,11 @@ class TestSlimHtmlStructure < TestSlim
4
4
  def test_simple_render
5
5
  # Keep the trailing space behind "body "!
6
6
  source = %q{
7
- html
8
- head
9
- title Simple Test Title
10
- body
11
- p Hello World, meet Slim.
7
+ <html
8
+ <head
9
+ <title Simple Test Title
10
+ <body
11
+ <p Hello World, meet Slim.
12
12
  }
13
13
 
14
14
  assert_html '<html><head><title>Simple Test Title</title></head><body><p>Hello World, meet Slim.</p></body></html>', source
@@ -17,9 +17,9 @@ html
17
17
  def test_html_tag_with_text_and_empty_line
18
18
  # Keep the trailing space behind "body "!
19
19
  source = %q{
20
- p Hello
20
+ <p Hello
21
21
 
22
- p World
22
+ <p World
23
23
  }
24
24
 
25
25
  assert_html "<p>Hello</p><p>World</p>", source
@@ -27,7 +27,7 @@ p World
27
27
 
28
28
  def test_html_namespaces
29
29
  source = %q{
30
- html:body
30
+ <html:body
31
31
  html:p html:id="test" Text
32
32
  }
33
33
 
@@ -37,7 +37,7 @@ html:body
37
37
  def test_doctype
38
38
  source = %q{
39
39
  doctype 1.1
40
- html
40
+ <html
41
41
  }
42
42
 
43
43
  assert_html '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html></html>', source, :format => :xhtml
@@ -46,7 +46,7 @@ html
46
46
  def test_doctype_new_syntax
47
47
  source = %q{
48
48
  doctype 5
49
- html
49
+ <html
50
50
  }
51
51
 
52
52
  assert_html '<!DOCTYPE html><html></html>', source, :format => :xhtml
@@ -55,7 +55,7 @@ html
55
55
  def test_doctype_new_syntax_html5
56
56
  source = %q{
57
57
  doctype html
58
- html
58
+ <html
59
59
  }
60
60
 
61
61
  assert_html '<!DOCTYPE html><html></html>', source, :format => :xhtml
@@ -63,8 +63,8 @@ html
63
63
 
64
64
  def test_render_with_shortcut_attributes
65
65
  source = %q{
66
- h1#title This is my title
67
- #notice.hello.world
66
+ <h1#title This is my title
67
+ <#notice.hello.world
68
68
  = hello_world
69
69
  }
70
70
 
@@ -73,7 +73,7 @@ h1#title This is my title
73
73
 
74
74
  def test_render_with_overwritten_default_tag
75
75
  source = %q{
76
- #notice.hello.world
76
+ <section #notice.hello.world
77
77
  = hello_world
78
78
  }
79
79
 
@@ -82,8 +82,7 @@ h1#title This is my title
82
82
 
83
83
  def test_render_with_text_block
84
84
  source = %q{
85
- p
86
- |
85
+ <p
87
86
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
88
87
  }
89
88
 
@@ -92,10 +91,9 @@ p
92
91
 
93
92
  def test_render_with_text_block_with_subsequent_markup
94
93
  source = %q{
95
- p
96
- |
94
+ <p
97
95
  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
98
- p Some more markup
96
+ <p Some more markup
99
97
  }
100
98
 
101
99
  assert_html '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p><p>Some more markup</p>', source
@@ -105,7 +103,7 @@ p Some more markup
105
103
  source = %q{
106
104
  ' this is
107
105
  a link to
108
- a href="link" page
106
+ <a href="link" page
109
107
  }
110
108
 
111
109
  assert_html "this is\na link to <a href=\"link\">page</a>", source
@@ -113,13 +111,12 @@ a href="link" page
113
111
 
114
112
  def test_nested_text
115
113
  source = %q{
116
- p
117
- |
114
+ <p
118
115
  This is line one.
119
116
  This is line two.
120
117
  This is line three.
121
118
  This is line four.
122
- p This is a new paragraph.
119
+ <p This is a new paragraph.
123
120
  }
124
121
 
125
122
  assert_html "<p>This is line one.\n This is line two.\n This is line three.\n This is line four.</p><p>This is a new paragraph.</p>", source
@@ -127,11 +124,11 @@ p This is a new paragraph.
127
124
 
128
125
  def test_nested_text_with_nested_html_one_same_line
129
126
  source = %q{
130
- p
131
- | This is line one.
132
- This is line two.
127
+ <p
128
+ This is line one.
129
+ > This is line two.
133
130
  span.bold This is a bold line in the paragraph.
134
- | This is more content.
131
+ > This is more content.
135
132
  }
136
133
 
137
134
  assert_html "<p>This is line one.\n This is line two.<span class=\"bold\">This is a bold line in the paragraph.</span> This is more content.</p>", source
@@ -139,7 +136,7 @@ p
139
136
 
140
137
  def test_nested_text_with_nested_html_one_same_line2
141
138
  source = %q{
142
- p
139
+ <p
143
140
  |This is line one.
144
141
  This is line two.
145
142
  span.bold This is a bold line in the paragraph.
@@ -151,7 +148,7 @@ p
151
148
 
152
149
  def test_nested_text_with_nested_html
153
150
  source = %q{
154
- p
151
+ <p
155
152
  |
156
153
  This is line one.
157
154
  This is line two.
@@ -166,7 +163,7 @@ p
166
163
 
167
164
  def test_simple_paragraph_with_padding
168
165
  source = %q{
169
- p There will be 3 spaces in front of this line.
166
+ <p There will be 3 spaces in front of this line.
170
167
  }
171
168
 
172
169
  assert_html '<p> There will be 3 spaces in front of this line.</p>', source
@@ -174,7 +171,7 @@ p There will be 3 spaces in front of this line.
174
171
 
175
172
  def test_paragraph_with_nested_text
176
173
  source = %q{
177
- p This is line one.
174
+ <p This is line one.
178
175
  This is line two.
179
176
  }
180
177
 
@@ -183,7 +180,7 @@ p This is line one.
183
180
 
184
181
  def test_paragraph_with_padded_nested_text
185
182
  source = %q{
186
- p This is line one.
183
+ <p This is line one.
187
184
  This is line two.
188
185
  }
189
186
 
@@ -192,7 +189,7 @@ p This is line one.
192
189
 
193
190
  def test_paragraph_with_attributes_and_nested_text
194
191
  source = %q{
195
- p#test class="paragraph" This is line one.
192
+ <p#test class="paragraph">This is line one.
196
193
  This is line two.
197
194
  }
198
195
 
@@ -201,9 +198,9 @@ p#test class="paragraph" This is line one.
201
198
 
202
199
  def test_output_code_with_leading_spaces
203
200
  source = %q{
204
- p= hello_world
205
- p = hello_world
206
- p = hello_world
201
+ <p= hello_world
202
+ <p = hello_world
203
+ <p = hello_world
207
204
  }
208
205
 
209
206
  assert_html '<p>Hello World from @env</p><p>Hello World from @env</p><p>Hello World from @env</p>', source
@@ -211,7 +208,7 @@ p = hello_world
211
208
 
212
209
  def test_single_quoted_attributes
213
210
  source = %q{
214
- p class='underscored_class_name' = output_number
211
+ <p class='underscored_class_name'>= output_number
215
212
  }
216
213
 
217
214
  assert_html '<p class="underscored_class_name">1337</p>', source
@@ -219,7 +216,7 @@ p class='underscored_class_name' = output_number
219
216
 
220
217
  def test_nonstandard_attributes
221
218
  source = %q{
222
- p id="dashed-id" class="underscored_class_name" = output_number
219
+ <p id="dashed-id" class="underscored_class_name">= output_number
223
220
  }
224
221
 
225
222
  assert_html '<p class="underscored_class_name" id="dashed-id">1337</p>', source
@@ -227,7 +224,7 @@ p id="dashed-id" class="underscored_class_name" = output_number
227
224
 
228
225
  def test_nonstandard_shortcut_attributes
229
226
  source = %q{
230
- p#dashed-id.underscored_class_name = output_number
227
+ <p#dashed-id.underscored_class_name>= output_number
231
228
  }
232
229
 
233
230
  assert_html '<p class="underscored_class_name" id="dashed-id">1337</p>', source
@@ -235,7 +232,7 @@ p#dashed-id.underscored_class_name = output_number
235
232
 
236
233
  def test_dashed_attributes
237
234
  source = %q{
238
- p data-info="Illudium Q-36" = output_number
235
+ <p data-info="Illudium Q-36">= output_number
239
236
  }
240
237
 
241
238
  assert_html '<p data-info="Illudium Q-36">1337</p>', source
@@ -243,7 +240,7 @@ p data-info="Illudium Q-36" = output_number
243
240
 
244
241
  def test_dashed_attributes_with_shortcuts
245
242
  source = %q{
246
- p#marvin.martian data-info="Illudium Q-36" = output_number
243
+ <p#marvin.martian data-info="Illudium Q-36">= output_number
247
244
  }
248
245
 
249
246
  assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">1337</p>', source
@@ -251,15 +248,15 @@ p#marvin.martian data-info="Illudium Q-36" = output_number
251
248
 
252
249
  def test_parens_around_attributes
253
250
  source = %q{
254
- p(id="marvin" class="martian" data-info="Illudium Q-36") = output_number
251
+ <p id="marvin" class="martian" data-info="Illudium Q-36"> = output_number
255
252
  }
256
253
 
257
- assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">1337</p>', source
254
+ assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin"> = output_number</p>', source
258
255
  end
259
256
 
260
257
  def test_square_brackets_around_attributes
261
258
  source = %q{
262
- p[id="marvin" class="martian" data-info="Illudium Q-36"] = output_number
259
+ <p id="marvin" class="martian" data-info="Illudium Q-36"> = output_number
263
260
  }
264
261
 
265
262
  assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">1337</p>', source
@@ -267,7 +264,7 @@ p[id="marvin" class="martian" data-info="Illudium Q-36"] = output_number
267
264
 
268
265
  def test_parens_around_attributes_with_equal_sign_snug_to_right_paren
269
266
  source = %q{
270
- p(id="marvin" class="martian" data-info="Illudium Q-36")= output_number
267
+ <p id="marvin" class="martian" data-info="Illudium Q-36">= output_number
271
268
  }
272
269
 
273
270
  assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">1337</p>', source
@@ -275,7 +272,7 @@ p(id="marvin" class="martian" data-info="Illudium Q-36")= output_number
275
272
 
276
273
  def test_static_empty_attribute
277
274
  source = %q{
278
- p(id="marvin" class="" data-info="Illudium Q-36")= output_number
275
+ <p id="marvin" class="" data-info="Illudium Q-36">= output_number
279
276
  }
280
277
 
281
278
  assert_html '<p class="" data-info="Illudium Q-36" id="marvin">1337</p>', source
@@ -283,7 +280,7 @@ p(id="marvin" class="" data-info="Illudium Q-36")= output_number
283
280
 
284
281
  def test_dynamic_empty_attribute
285
282
  source = %q{
286
- p(id="marvin" class=nil other_empty=("".to_s) data-info="Illudium Q-36")= output_number
283
+ <p id="marvin" class=nil other_empty=#{"".to_s} data-info="Illudium Q-36">= output_number
287
284
  }
288
285
 
289
286
  assert_html '<p data-info="Illudium Q-36" id="marvin">1337</p>', source
@@ -291,24 +288,24 @@ p(id="marvin" class=nil other_empty=("".to_s) data-info="Illudium Q-36")= output
291
288
 
292
289
  def test_closed_tag
293
290
  source = %q{
294
- closed/
291
+ <closed/
295
292
  }
296
293
 
297
294
  assert_html '<closed />', source, :format => :xhtml
298
295
  end
299
296
 
300
297
  def test_attributs_with_parens_and_spaces
301
- source = %q{label{ for='filter' }= hello_world}
298
+ source = %q{<label for=filter>= hello_world}
302
299
  assert_html '<label for="filter">Hello World from @env</label>', source
303
300
  end
304
301
 
305
302
  def test_attributs_with_parens_and_spaces2
306
- source = %q{label{ for='filter' } = hello_world}
303
+ source = %q{<label for=filter>= hello_world}
307
304
  assert_html '<label for="filter">Hello World from @env</label>', source
308
305
  end
309
306
 
310
307
  def test_attributs_with_multiple_spaces
311
- source = %q{label for='filter' class="test" = hello_world}
308
+ source = %q{<label for=filter class="test">= hello_world}
312
309
  assert_html '<label class="test" for="filter">Hello World from @env</label>', source
313
310
  end
314
311
 
@@ -322,7 +319,7 @@ closed id="test" /
322
319
 
323
320
  def test_closed_tag_with_attributes_and_parens
324
321
  source = %q{
325
- closed(id="test")/
322
+ <closed id="test">/
326
323
  }
327
324
 
328
325
  assert_html '<closed id="test" />', source, :format => :xhtml
@@ -330,11 +327,11 @@ closed(id="test")/
330
327
 
331
328
  def test_render_with_html_comments
332
329
  source = %q{
333
- p Hello
330
+ <p Hello
334
331
  /! This is a comment
335
332
 
336
333
  Another comment
337
- p World
334
+ <p World
338
335
  }
339
336
 
340
337
  assert_html "<p>Hello</p><!--This is a comment\n\nAnother comment--><p>World</p>", source
@@ -358,81 +355,65 @@ p World
358
355
  assert_html "<!--[if IE]>hello<![endif]-->", source
359
356
  end
360
357
 
358
+ =begin
361
359
  def test_multiline_attributes_with_method
362
- source = %q{
363
- p<id="marvin"
360
+ str = %q{
361
+ <p id="marvin"
364
362
  class="martian"
365
363
  data-info="Illudium Q-36"> = output_number
366
364
  }
367
- Slim::Parser::DELIMITERS.each do |k,v|
368
- str = source.sub('<',k).sub('>',v)
369
- assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">1337</p>', str
370
- end
365
+ assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">1337</p>', str
371
366
  end
372
367
 
373
368
  def test_multiline_attributes_with_text_on_same_line
374
- source = %q{
375
- p<id="marvin"
369
+ str = %q{
370
+ <p id="marvin"
376
371
  class="martian"
377
372
  data-info="Illudium Q-36"> THE space modulator
378
373
  }
379
- Slim::Parser::DELIMITERS.each do |k,v|
380
- str = source.sub('<',k).sub('>',v)
381
- assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">THE space modulator</p>', str
382
- end
374
+ assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">THE space modulator</p>', str
383
375
  end
384
376
 
385
377
  def test_multiline_attributes_with_nested_text
386
- source = %q{
387
- p<id="marvin"
378
+ str = %q{
379
+ <p id="marvin"
388
380
  class="martian"
389
381
  data-info="Illudium Q-36">
390
- | THE space modulator
382
+ THE space modulator
391
383
  }
392
- Slim::Parser::DELIMITERS.each do |k,v|
393
- str = source.sub('<',k).sub('>',v)
394
- assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">THE space modulator</p>', str
395
- end
384
+ assert_html '<p class="martian" data-info="Illudium Q-36" id="marvin">THE space modulator</p>', str
396
385
  end
397
386
 
398
387
  def test_multiline_attributes_with_dynamic_attr
399
388
  source = %q{
400
- p<id=id_helper
389
+ <p id=id_helper
401
390
  class="martian"
402
391
  data-info="Illudium Q-36">
403
- | THE space modulator
392
+ THE space modulator
404
393
  }
405
- Slim::Parser::DELIMITERS.each do |k,v|
406
- str = source.sub('<',k).sub('>',v)
407
- assert_html '<p class="martian" data-info="Illudium Q-36" id="notice">THE space modulator</p>', str
408
- end
394
+ assert_html '<p class="martian" data-info="Illudium Q-36" id="notice">THE space modulator</p>', str
409
395
  end
410
396
 
411
397
  def test_multiline_attributes_with_nested_tag
412
398
  source = %q{
413
- p<id=id_helper
399
+ <p id=id_helper
414
400
  class="martian"
415
401
  data-info="Illudium Q-36">
416
402
  span.emphasis THE
417
- | space modulator
403
+ > space modulator
418
404
  }
419
- Slim::Parser::DELIMITERS.each do |k,v|
420
- str = source.sub('<',k).sub('>',v)
421
- assert_html '<p class="martian" data-info="Illudium Q-36" id="notice"><span class="emphasis">THE</span> space modulator</p>', str
422
- end
405
+ assert_html '<p class="martian" data-info="Illudium Q-36" id="notice"><span class="emphasis">THE</span> space modulator</p>', source
423
406
  end
424
407
 
425
408
  def test_multiline_attributes_with_nested_text_and_extra_indentation
426
409
  source = %q{
427
- li< id="myid"
410
+ <li id="myid"
428
411
  class="myclass"
429
412
  data-info="myinfo">
430
- a href="link" My Link
413
+ <a href="link" My Link
431
414
  }
432
- Slim::Parser::DELIMITERS.each do |k,v|
433
- str = source.sub('<',k).sub('>',v)
434
- assert_html '<li class="myclass" data-info="myinfo" id="myid"><a href="link">My Link</a></li>', str
435
- end
415
+ assert_html '<li class="myclass" data-info="myinfo" id="myid"><a href="link">My Link</a></li>', str
436
416
  end
417
+ =end
437
418
 
438
419
  end
@@ -3,8 +3,8 @@ require 'helper'
3
3
  class TestSlimRubyErrors < TestSlim
4
4
  def test_multline_attribute
5
5
  source = %q{
6
- <p(data-1=1
7
- data2-=1)
6
+ <p data-1=1
7
+ data2-=1>
8
8
  <p
9
9
  = unknown_ruby_method
10
10
  }
@@ -150,7 +150,7 @@ data2-=1)
150
150
 
151
151
  def test_invalid_nested_output
152
152
  source = %q{
153
- p
153
+ <p
154
154
  = "Hello Ruby!"
155
155
  = "Hello from within a block! "
156
156
  }
@@ -160,7 +160,7 @@ p
160
160
  def test_invalid_embedded_engine
161
161
  source = %q{
162
162
  <p
163
- embed_unknown:
163
+ <embed_unknown:
164
164
  1+1
165
165
  }
166
166
 
@@ -180,7 +180,7 @@ p
180
180
 
181
181
  def test_id_attribute_merging2
182
182
  source = %{
183
- #alpha id="beta" Test it
183
+ <#alpha id="beta" Test it
184
184
  }
185
185
  assert_runtime_error 'Multiple id attributes specified', source
186
186
  end
@@ -11,9 +11,9 @@ class TestSlimLogicLess < TestSlim
11
11
 
12
12
  def test_sections
13
13
  source = %q{
14
- p
14
+ <p
15
15
  - person
16
- .name = name
16
+ <.name = name
17
17
  }
18
18
 
19
19
  hash = {
@@ -28,9 +28,9 @@ p
28
28
 
29
29
  def test_sections_string_access
30
30
  source = %q{
31
- p
31
+ <p
32
32
  - person
33
- .name = name
33
+ <.name = name
34
34
  }
35
35
 
36
36
  hash = {
@@ -45,12 +45,12 @@ p
45
45
 
46
46
  def test_flag_section
47
47
  source = %q{
48
- p
48
+ <p
49
49
  - show_person
50
50
  - person
51
- .name = name
51
+ <.name = name
52
52
  - show_person
53
- | shown
53
+ shown
54
54
  }
55
55
 
56
56
  hash = {
@@ -66,13 +66,13 @@ p
66
66
 
67
67
  def test_inverted_section
68
68
  source = %q{
69
- p
69
+ <p
70
70
  - person
71
- .name = name
71
+ <.name = name
72
72
  -! person
73
- | No person
73
+ No person
74
74
  - !person
75
- | No person 2
75
+ > No person 2
76
76
  }
77
77
 
78
78
  hash = {}
@@ -82,7 +82,7 @@ p
82
82
 
83
83
  def test_output_with_content
84
84
  source = %{
85
- p = method_with_block do
85
+ <p = method_with_block do
86
86
  block
87
87
  }
88
88
  assert_runtime_error 'Output statements with content are forbidden in sections mode', source, :sections => true
@@ -83,8 +83,7 @@ class TestSlimTemplate < TestSlim
83
83
  end
84
84
 
85
85
  def test_backtrace_file_and_line_reporting_without_locals
86
- data = File.read(__FILE__).split("\n__END__\n").last
87
- fail unless data[0] == ?h
86
+ data = load_file_data
88
87
  template = Hamlet::Template.new('test.slim', 10) { data }
89
88
  begin
90
89
  template.render(Scope.new)
@@ -95,9 +94,14 @@ class TestSlimTemplate < TestSlim
95
94
  end
96
95
  end
97
96
 
98
- def test_backtrace_file_and_line_reporting_with_locals
97
+ def load_file_data
99
98
  data = File.read(__FILE__).split("\n__END__\n").last
100
- fail unless data[0] == ?h
99
+ fail unless data[0] == ?<
100
+ data
101
+ end
102
+
103
+ def test_backtrace_file_and_line_reporting_with_locals
104
+ data = load_file_data
101
105
  template = Hamlet::Template.new('test.slim') { data }
102
106
  begin
103
107
  res = template.render(Scope.new, :name => 'Joe', :foo => 'bar')
@@ -109,8 +113,8 @@ class TestSlimTemplate < TestSlim
109
113
  end
110
114
 
111
115
  __END__
112
- html
113
- body
116
+ <html>
117
+ <body>
114
118
  <h1>= "Hey #{name}"
115
119
 
116
120
  = raise MockError
@@ -20,7 +20,7 @@ class TestSlimTextInterpolation < TestSlim
20
20
  def test_interpolation_in_text
21
21
  source = %q{
22
22
  <p
23
- > #{hello_world} with "quotes"
23
+ #{hello_world} with "quotes"
24
24
  <p
25
25
 
26
26
  >A message from the compiler: #{hello_world}
@@ -55,7 +55,7 @@ class TestSlimTextInterpolation < TestSlim
55
55
 
56
56
  def test_interpolation_with_escaping
57
57
  source = %q{
58
- > #{evil_method}
58
+ #{evil_method}
59
59
  }
60
60
 
61
61
  assert_html '&lt;script&gt;do_something_evil();&lt;&#47;script&gt;', source
@@ -63,7 +63,7 @@ class TestSlimTextInterpolation < TestSlim
63
63
 
64
64
  def test_interpolation_without_escaping
65
65
  source = %q{
66
- > #{{evil_method}}
66
+ #{{evil_method}}
67
67
  }
68
68
 
69
69
  assert_html '<script>do_something_evil();</script>', source
@@ -71,7 +71,7 @@ class TestSlimTextInterpolation < TestSlim
71
71
 
72
72
  def test_interpolation_with_escaping_and_delimiter
73
73
  source = %q{
74
- > #{(evil_method)}
74
+ #{(evil_method)}
75
75
  }
76
76
  assert_html '&lt;script&gt;do_something_evil();&lt;&#47;script&gt;', source
77
77
  end
@@ -14,7 +14,7 @@ class TestSlimWrapper < TestSlim
14
14
  source = %q{
15
15
  <p
16
16
  - person
17
- <.name = name
17
+ <.name>= name
18
18
  }
19
19
  assert_html '<p><div class="name">Joe</div><div class="name">Jack</div></p>', source, :sections => true
20
20
  end
@@ -31,9 +31,9 @@ class TestSlimWrapper < TestSlim
31
31
 
32
32
  def test_method
33
33
  source = %q{
34
- <a href=output_number Link
34
+ <a href=output_number>Link
35
35
  }
36
- assert_html '<a href="1337">Link</a>', source, :sections => true
36
+ assert_html '<a href="output_number">Link</a>', source, :sections => true
37
37
  end
38
38
 
39
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamlet
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: slim
16
- requirement: &3486700 !ruby/object:Gem::Requirement
16
+ requirement: &3779800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *3486700
24
+ version_requirements: *3779800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &3485880 !ruby/object:Gem::Requirement
27
+ requirement: &3778760 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.8.7
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *3485880
35
+ version_requirements: *3778760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sass
38
- requirement: &3484300 !ruby/object:Gem::Requirement
38
+ requirement: &3777880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 3.1.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *3484300
46
+ version_requirements: *3777880
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: minitest
49
- requirement: &3482000 !ruby/object:Gem::Requirement
49
+ requirement: &3777100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *3482000
57
+ version_requirements: *3777100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: kramdown
60
- requirement: &3481000 !ruby/object:Gem::Requirement
60
+ requirement: &3776500 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *3481000
68
+ version_requirements: *3776500
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
- requirement: &3442840 !ruby/object:Gem::Requirement
71
+ requirement: &3775820 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *3442840
79
+ version_requirements: *3775820
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: creole
82
- requirement: &3441240 !ruby/object:Gem::Requirement
82
+ requirement: &3775060 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *3441240
90
+ version_requirements: *3775060
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: builder
93
- requirement: &3440020 !ruby/object:Gem::Requirement
93
+ requirement: &3774140 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *3440020
101
+ version_requirements: *3774140
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: pry
104
- requirement: &3438600 !ruby/object:Gem::Requirement
104
+ requirement: &3773380 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *3438600
112
+ version_requirements: *3773380
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rcov
115
- requirement: &3435800 !ruby/object:Gem::Requirement
115
+ requirement: &3720320 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *3435800
123
+ version_requirements: *3720320
124
124
  description: Hamlet is a template language whose goal is reduce HTML syntax to the
125
125
  essential parts.
126
126
  email: