Module: Hamlit::Concerns::Whitespace

Included in:
Hamlit::Compilers::Strip, Parsers::Tag
Defined in:
lib/hamlit/concerns/whitespace.rb

Instance Method Summary collapse

Instance Method Details

#parse_whitespace_removal(scanner) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/hamlit/concerns/whitespace.rb', line 10

def parse_whitespace_removal(scanner)
  if scanner.match?(/</)
    inner_removal = parse_inner_removal(scanner)
    parse_outer_removal(scanner)
  else
    parse_outer_removal(scanner)
    inner_removal = parse_inner_removal(scanner)
  end
  inner_removal
end

#remove_first_space!(exps) ⇒ Object

‘<` removes spaces inside script or silent script recursively.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/hamlit/concerns/whitespace.rb', line 22

def remove_first_space!(exps)
  deleted = false

  exps.delete_if do |exp|
    name, *args = exp
    case name
    when :static
      break if args != ["\n"]
      deleted = true
      next true
    when :code
      next false
    when :newline
      next false
    when :haml
      # recursive call for script
      remove_last_space!(exp) if args.first == :script
    when :multi
      break if exp == :multi
      # to flatten multi
      remove_last_space!(exp)
    end
    break
  end

  # recursive call for silent script
  remove_last_space!(exps) if deleted
end

#remove_last_space!(exps) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/hamlit/concerns/whitespace.rb', line 51

def remove_last_space!(exps)
  exps.reverse!
  remove_first_space!(exps)
ensure
  exps.reverse!
  exps
end