Sha256: 1bc0ec4141307ced8b85e25325d152378b598ffc8e1f2712b7a7511b1b488f31
Contents?: true
Size: 1.93 KB
Versions: 7
Compression:
Stored size: 1.93 KB
Contents
#!/usr/bin/env ruby -w # encoding: UTF-8 # # = MacroTable.rb -- The TaskJuggler III Project Management Software # # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011 # by Chris Schlaeger <chris@linux.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. # class TaskJuggler::TextParser class Macro attr_reader :name, :value, :sourceFileInfo def initialize(name, value, sourceFileInfo) @name = name @value = value @sourceFileInfo = sourceFileInfo end end # The MacroTable is used by the TextScanner to store defined macros and # resolve them on request later on. A macro is a text pattern that has a name. # The pattern may contain variable parts that are replaced by arguments passed # during the macro call. class MacroTable def initialize @macros = {} end # Add a new macro definition to the table or replace an existing one. def add(macro) @macros[macro.name] = macro end # Remove all definitions from the table. def clear @macros = [] end # Returns true only if a macro named _name_ is defined in the table. def include?(name) @macros.include?(name) end # Returns the definition of the macro specified by name as first entry of # _args_. The other entries of _args_ are parameters that are replacing the # ${n} tokens in the macro definition. In case the macro call has less # arguments than the macro definition uses, the ${n} tokens remain # unchanged. No error is generated. def resolve(args, sourceFileInfo) name = args[0] return nil unless @macros[name] resolved = @macros[name].value.dup i = 0 args.each do |arg| resolved.gsub!("${#{i}}", arg) i += 1 end [ @macros[name], resolved ] end end end
Version data entries
7 entries across 7 versions & 1 rubygems