class ANTLR3::Template::Group
Constants
- Lexer
- Parser
Public Class Methods
load( group_file, options = {} )
click to toggle source
# File lib/antlr3/template.rb, line 104 def self.load( group_file, options = {} ) unless( File.file?( group_file ) ) dir = $LOAD_PATH.find do | d | File.file?( File.join( dir, group_file ) ) end or raise( LoadError, "no such template group file to load %s" % group_file ) group_file = File.join( dir, group_file ) end namespace = options.fetch( :namespace, ::Object ) input = ANTLR3::FileStream.new( group_file, options ) lexer = Lexer.new( input, options ) parser = Parser.new( lexer, options ) return( parser.group( namespace ) ) end
new( &block )
click to toggle source
Calls superclass method
# File lib/antlr3/template.rb, line 118 def self.new( &block ) super do const_set( :TEMPLATES, {} ) block_given? and module_eval( &block ) end end
parse( source, options = {} )
click to toggle source
# File lib/antlr3/template.rb, line 97 def self.parse( source, options = {} ) namespace = options.fetch( :namespace, ::Object ) lexer = Lexer.new( source, options ) parser = Parser.new( lexer, options ) return( parser.group( namespace ) ) end
Public Instance Methods
alias_template( new_name, old_name )
click to toggle source
# File lib/antlr3/template.rb, line 157 def alias_template( new_name, old_name ) new_name, old_name = new_name.to_s.dup.freeze, old_name.to_s context = self::TEMPLATES.fetch( old_name.to_s ) do raise( NameError, "undefined template `%s' for template group %p" % [ old_name, self ] ) end context.define_alias( new_name ) do | tclass | self::TEMPLATES[ new_name ] = tclass define_template_methods( tclass ) end return( self ) end
define_template( name, source, parameters = nil, &block )
click to toggle source
# File lib/antlr3/template.rb, line 146 def define_template( name, source, parameters = nil, &block ) name = name.to_s.dup.freeze Context.define( self, name, parameters ) do | tclass | self::TEMPLATES[ name ] = tclass ERB.new( source, nil, '%' ).def_method( tclass, 'to_s' ) define_template_methods( tclass ) end return( self ) end
fetch( name, values = {} )
click to toggle source
# File lib/antlr3/template.rb, line 134 def fetch( name, values = {} ) self::TEMPLATES.fetch( name.to_s ).new( values ) end
new( source, values = {} )
click to toggle source
# File lib/antlr3/template.rb, line 125 def new( source, values = {} ) erb = ERB.new( source, nil, '%' ) template = Context.new( values ) template.extend( self ) sclass = class << template; self; end erb.def_method( sclass, 'to_s' ) return( template ) end
template_defined?( name )
click to toggle source
# File lib/antlr3/template.rb, line 142 def template_defined?( name ) self::TEMPLATES.has_key?( name.to_s ) end
templates()
click to toggle source
# File lib/antlr3/template.rb, line 138 def templates self::TEMPLATES end
Private Instance Methods
define_template_methods( context )
click to toggle source
# File lib/antlr3/template.rb, line 173 def define_template_methods( context ) name = context.name if params = context.parameters init = params.names.map do | param | "___[ #{ param.inspect } ] = #{ param }" end.join( "\n" ) module_eval( <<-END ) module_function def #{ name }( #{ params } ) TEMPLATES[ #{ name.inspect } ].new do | ___ | #{ init } end end def #{ name }!( #{ params } ) TEMPLATES[ #{ name.inspect } ].new do | ___ | #{ init } end.to_s end END else module_eval( <<-END ) module_function def #{ name }( values = {} ) TEMPLATES[ #{ name.inspect } ].new( values ) end def #{ name }!( values = {} ) TEMPLATES[ #{ name.inspect } ].new( values ).to_s end END end end