Class TaskJuggler::TextParser::MacroTable
In: lib/taskjuggler/TextParser/MacroTable.rb
Parent: Object

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.

Methods

add   clear   include?   new   resolve  

Public Class methods

[Source]

# File lib/taskjuggler/TextParser/MacroTable.rb, line 34
    def initialize
      @macros = {}
    end

Public Instance methods

Add a new macro definition to the table or replace an existing one.

[Source]

# File lib/taskjuggler/TextParser/MacroTable.rb, line 39
    def add(macro)
      @macros[macro.name] = macro
    end

Remove all definitions from the table.

[Source]

# File lib/taskjuggler/TextParser/MacroTable.rb, line 44
    def clear
      @macros = []
    end

Returns true only if a macro named name is defined in the table.

[Source]

# File lib/taskjuggler/TextParser/MacroTable.rb, line 49
    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.

[Source]

# File lib/taskjuggler/TextParser/MacroTable.rb, line 58
    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!(Regexp.new("(([^$]|^))\\$\\{#{i}\\}"), "\\1#{arg}")
        i += 1
      end
      # Remove the escape character from all the escaped '${...}'.
      resolved.gsub!('$${', '${')
      [ @macros[name], resolved ]
    end

[Validate]