slim 0.8.4 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,15 +12,16 @@ module Slim
12
12
  block = [:multi]
13
13
  until string.empty?
14
14
  case string
15
- when /^\\\#\{/
15
+ when /^\\#\{/
16
16
  # Escaped interpolation
17
17
  block << [:static, '#{']
18
18
  string = $'
19
- when /^\#\{/
19
+ when /^#\{/
20
20
  # Interpolation
21
21
  string, code = parse_expression($')
22
- block << [:slim, :output, true, code, [:multi]]
23
- when /^([^\#]+|\#)/
22
+ escape = code !~ Parser::DELIMITER_REGEX || Parser::DELIMITERS[$&] != code[-1, 1]
23
+ block << [:slim, :output, escape, escape ? code : code[1..-2], [:multi]]
24
+ when /^([^#]+|#)/
24
25
  # Static text
25
26
  block << [:static, $&]
26
27
  string = $'
@@ -40,12 +41,12 @@ module Slim
40
41
  break
41
42
  elsif string =~ Parser::DELIMITER_REGEX
42
43
  # Delimiter found, push it on the stack
43
- stack << Parser::DELIMITERS[$1]
44
+ stack << Parser::DELIMITERS[$&]
44
45
  code << string.slice!(0)
45
46
  elsif string =~ Parser::CLOSE_DELIMITER_REGEX
46
47
  # Closing delimiter found, pop it from the stack if everything is ok
47
- raise "Text interpolation: Unexpected closing #{$1}" if stack.empty?
48
- raise "Text interpolation: Expected closing #{stack.last}" if stack.last != $1
48
+ raise "Text interpolation: Unexpected closing #{$&}" if stack.empty?
49
+ raise "Text interpolation: Expected closing #{stack.last}" if stack.last != $&
49
50
  code << string.slice!(0)
50
51
  stack.pop
51
52
  else
@@ -236,12 +236,12 @@ module Slim
236
236
  '[' => ']',
237
237
  '{' => '}',
238
238
  }.freeze
239
- DELIMITER_REGEX = /^([\(\[\{])/
240
- CLOSE_DELIMITER_REGEX = /^([\)\]\}])/
239
+ DELIMITER_REGEX = /^[\(\[\{]/
240
+ CLOSE_DELIMITER_REGEX = /^[\)\]\}]/
241
241
 
242
242
  private
243
243
 
244
- ATTR_REGEX = /^ (\w[:\w-]*)=/
244
+ ATTR_REGEX = /^\s+(\w[:\w-]*)=/
245
245
  QUOTED_VALUE_REGEX = /^("[^"]+"|'[^']+')/
246
246
  ATTR_SHORTHAND = {
247
247
  '#' => 'id',
@@ -258,7 +258,7 @@ module Slim
258
258
  orig_line = line
259
259
 
260
260
  case line
261
- when /^(#|\.)/
261
+ when /^[#\.]/
262
262
  tag = 'div'
263
263
  when /^\w[:\w-]*/
264
264
  tag = $&
@@ -281,7 +281,7 @@ module Slim
281
281
  # Check to see if there is a delimiter right after the tag name
282
282
  delimiter = ''
283
283
  if line =~ DELIMITER_REGEX
284
- delimiter = DELIMITERS[$1]
284
+ delimiter = DELIMITERS[$&]
285
285
  # Replace the delimiter with a space so we can continue parsing as normal.
286
286
  line[0] = ?\s
287
287
  end
@@ -303,8 +303,8 @@ module Slim
303
303
 
304
304
  # Find ending delimiter
305
305
  if !delimiter.empty?
306
- if line[0, 1] == delimiter
307
- line.slice!(0)
306
+ if line =~ /^\s*#{Regexp.escape delimiter}/
307
+ line = $'
308
308
  else
309
309
  syntax_error! "Expected closing delimiter #{delimiter}", orig_line, lineno, orig_line.size - line.size
310
310
  end
@@ -350,12 +350,12 @@ module Slim
350
350
  break
351
351
  elsif line =~ DELIMITER_REGEX
352
352
  # Delimiter found, push it on the stack
353
- stack << DELIMITERS[$1]
353
+ stack << DELIMITERS[$&]
354
354
  value << line.slice!(0)
355
355
  elsif line =~ CLOSE_DELIMITER_REGEX
356
356
  # Closing delimiter found, pop it from the stack if everything is ok
357
- syntax_error! "Unexpected closing #{$1}", orig_line, lineno if stack.empty?
358
- syntax_error! "Expected closing #{stack.last}", orig_line, lineno if stack.last != $1
357
+ syntax_error! "Unexpected closing #{$&}", orig_line, lineno if stack.empty?
358
+ syntax_error! "Expected closing #{stack.last}", orig_line, lineno if stack.last != $&
359
359
  value << line.slice!(0)
360
360
  stack.pop
361
361
  else
@@ -368,7 +368,7 @@ module Slim
368
368
 
369
369
  # Remove attribute wrapper which doesn't belong to the ruby code
370
370
  # e.g id=[hash[:a] + hash[:b]]
371
- value = value[1..-2] if value =~ DELIMITER_REGEX && DELIMITERS[value[0, 1]] == value[-1, 1]
371
+ value = value[1..-2] if value =~ DELIMITER_REGEX && DELIMITERS[$&] == value[-1, 1]
372
372
 
373
373
  return line, value
374
374
  end
@@ -5,7 +5,9 @@ Slim::Engine.default_options[:disable_capture] = true
5
5
 
6
6
  module ActionView
7
7
  module TemplateHandlers
8
- raise "Slim supports only Rails 3.x and greater, your Rails version is #{Rails::VERSION::STRING}" if Rails::VERSION::MAJOR < 3
8
+ if Rails::VERSION::MAJOR < 3
9
+ raise "Slim supports only Rails 3.x and greater, your Rails version is #{Rails::VERSION::STRING}"
10
+ end
9
11
 
10
12
  if Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR < 1
11
13
  # Slim handler for Rails 3.0
@@ -26,5 +28,5 @@ module ActionView
26
28
  end
27
29
  end
28
30
 
29
- Template.register_default_template_handler :slim, TemplateHandlers::SlimHandler
31
+ Template.register_template_handler :slim, TemplateHandlers::SlimHandler
30
32
  end
@@ -1,3 +1,3 @@
1
1
  module Slim
2
- VERSION = '0.8.4'
2
+ VERSION = '0.9.0'
3
3
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 8
8
- - 4
9
- version: 0.8.4
7
+ - 9
8
+ - 0
9
+ version: 0.9.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andrew Stone
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-01-26 00:00:00 -05:00
19
+ date: 2011-01-30 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency