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.
Add a new macro definition to the table or replace an existing one.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 37 def add(macro) @macros[macro.name] = macro end
Remove all definitions from the table.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 42 def clear @macros = [] end
Returns true only if a macro named name is defined in the table.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 47 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.
# File lib/taskjuggler/TextParser/MacroTable.rb, line 56 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
Generated with the Darkfish Rdoc Generator 2.