Module: Liquidscript::Scanner::Base::Lexer

Included in:
Liquidscript::Scanner::Base
Defined in:
lib/liquidscript/scanner/base/lexer.rb

Instance Method Summary collapse

Instance Method Details

#error(scanner = @scanner) ⇒ Object

Raises:



41
42
43
44
# File 'lib/liquidscript/scanner/base/lexer.rb', line 41

def error(scanner = @scanner)
  raise SyntaxError, "Unexpected #{scanner.peek(2).inspect}" \
    " (line: #{line}, column: #{column})"
end

#lex(argument) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/liquidscript/scanner/base/lexer.rb', line 16

def lex(argument)
  context, body =
  if argument.is_a?(Hash)
    argument.to_a.first
  else
    argument
  end

  scanner = if body
    StringScanner.new(body)
  else
    @scanner
  end
  out = []

  context = find_context(context)
  instance_exec &context.init

  while scanner.rest? && out.last != EXIT
    out << perform_with_context(context, scanner)
  end

  out
end

#perform_with_context(context, scanner = @scanner) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/liquidscript/scanner/base/lexer.rb', line 6

def perform_with_context(context, scanner = @scanner)
  key, value = context.find_matcher(scanner)

  if value.nil? && scanner.rest?
    error scanner
  end

  normalize_action key, value, scanner if scanner.rest?
end