Module: Haml::Shared

Extended by:
Shared
Included in:
Shared
Defined in:
lib/haml/shared.rb

Overview

This module contains functionality that’s shared across Haml and Sass.

Instance Method Summary collapse

Instance Method Details

#balance(scanner, start, finish, count = 0) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/haml/shared.rb', line 15

def balance(scanner, start, finish, count = 0)
  str = ''
  scanner = StringScanner.new(scanner) unless scanner.is_a? StringScanner
  regexp = Regexp.new("(.*?)[\\#{start.chr}\\#{finish.chr}]", Regexp::MULTILINE)
  while scanner.scan(regexp)
    str << scanner.matched
    count += 1 if scanner.matched[-1] == start
    count -= 1 if scanner.matched[-1] == finish
    return [str.strip, scanner.rest] if count == 0
  end
end

#handle_interpolation(str) ⇒ Object



9
10
11
12
13
# File 'lib/haml/shared.rb', line 9

def handle_interpolation(str)
  scan = StringScanner.new(str)
  yield scan while scan.scan(/(.*?)(\\*)\#\{/)
  scan.rest
end

#human_indentation(indentation, was = false) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/haml/shared.rb', line 27

def human_indentation(indentation, was = false)
  if !indentation.include?(?\t)
    noun = 'space'
  elsif !indentation.include?(?\s)
    noun = 'tab'
  else
    return indentation.inspect + (was ? ' was' : '')
  end

  singular = indentation.length == 1
  if was
    was = singular ? ' was' : ' were'
  else
    was = ''
  end

  "#{indentation.length} #{noun}#{'s' unless singular}#{was}"
end