# File lib/PageTemplate/parser.rb, line 54
    def get(val,clean_rescue=true)
      args = parser.args
      @values ||= {}
      @object ||= nil

      clean_rescue = !args['raise_on_error'] if clean_rescue

      val.gsub!(/[#{Regexp.escape(parser.method_separators)}]/,'.')

      key, rest = val.split(/\./, 2)

      value = case
      when @values.has_key?(key)
        @values[key]
      when @values.has_key?(key.to_sym)
        @values[key.to_sym]
      when !@object
        if @parent
          @parent.get(val)
        else
          nil
        end
      when @object.respond_to?(:has_key?)
        if @object.has_key?(key)
          @values[key] = @object[key]
        else
          return @parent.get(val) if @parent
          nil
        end
      when @object.respond_to?(sym = key.to_sym)
        @values[key] = @object.send(sym)
      when key == '__ITEM__'
        @object
      when @parent
        return @parent.get(val)
      else
        nil
      end

      if rest
        names = [key]
        rest.split(/\./).each do |i|
          names << i
          name = names.join('.')
          begin
            value = if @values.has_key?(name)
              @values[name]
            else
              @values[name] = value = case
              when @values.has_key?(name)
                @values[name]
              when value.respond_to?(:has_key?) # Hash
                value[i]
              when value.respond_to?(:[]) && i =~ /^\d+$/ # Array
                value[i.to_i]
              when value.respond_to?(i) # Just a method
                value.send(i)
              else
                nil
              end
            end
          rescue NoMethodError => er
            return nil
          end
        end
      end
      value
    rescue Exception => e
      if clean_rescue
        "[ Error: #{e.message} ]"
      else
        raise e
      end
    end