class TaskJuggler::TextParser::MacroTable
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.
Public Class Methods
new()
click to toggle source
# File lib/taskjuggler/TextParser/MacroTable.rb, line 34 def initialize @macros = {} end
Public Instance Methods
add(macro)
click to toggle source
Add a new macro definition to the table or replace an existing one.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 39 def add(macro) @macros[macro.name] = macro end
clear()
click to toggle source
Remove all definitions from the table.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 44 def clear @macros = [] end
include?(name)
click to toggle source
Returns true only if a macro named name is defined in the table.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 49 def include?(name) @macros.include?(name) end
resolve(args, sourceFileInfo)
click to toggle source
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.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 58 def resolve(args, sourceFileInfo) name = args[0] # If the first character of the macro name is a '?', the macro may be # undefined and is silently ignored. if name[0] == ?? # Remove the '?' from the name. name = name[1..-1] return [ nil, '' ] unless @macros[name] end return nil unless @macros[name] resolved = @macros[name].value.dup i = 0 args.each do |arg| resolved.gsub!(Regexp.new("(([^$]|^))\\$\\{#{i}\\}"), "\\1#{arg}") i += 1 end # Remove the escape character from all the escaped '${...}'. resolved.gsub!('$${', '${') [ @macros[name], resolved ] end