Class: Inversion::Template::CodeTag::TokenPattern

Inherits:
Ripper::TokenPattern
  • Object
show all
Extended by:
Loggability
Defined in:
lib/inversion/template/codetag.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#sourceObject (readonly)

Expose the source attribute



50
51
52
# File 'lib/inversion/template/codetag.rb', line 50

def source
  @source
end

Instance Method Details

#compile(pattern) ⇒ Object

Overloaded to generate a bound regex.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/inversion/template/codetag.rb', line 54

def compile( pattern )
  self.log.debug "Compiling token pattern from: %p" % [ pattern ]

  if m = /[^\w\s$()\[\]{}?*+\.]/.match( pattern )
    raise Ripper::TokenPattern::CompileError, "invalid char in pattern: #{m[0].inspect}"
  end

  buf = +'\\A'
  pattern.scan(/(?:\w+|\$\(|[()\[\]\{\}?*+\.]+)/) do |tok|
    case tok
    when /\w/
      buf.concat( map_token(tok) )
    when '$('
      buf.concat( '(' )
    when '('
      buf.concat( '(?:' )
    when /[?*\[\])\.]/
      buf.concat( tok )
    else
      raise 'must not happen'
    end
  end
  buf.concat( '\z' )

  self.log.debug "  resulting token pattern is: %p" % [ buf ]
  return Regexp.compile( buf )

rescue RegexpError => err
  raise Ripper::TokenPattern::CompileError, err.message
end