# File lib/wikicloth/wiki_buffer/var.rb, line 110
  def default_functions(name,params)
    case name
    when "#if"
      params.first.blank? ? params[2] : params[1]
    when "#switch"
      match = params.first
      default = nil
      for p in params[1..-1]
        temp = p.split("=")
        if p !~ /=/ && temp.length == 1 && p == params.last
          return p
        elsif temp.instance_of?(Array) && temp.length > 0
          test = temp.first.strip
          default = temp[1..-1].join("=").strip if test == "#default"
          return temp[1..-1].join("=").strip if test == match || (test == "none" && match.blank?)
        end
      end
      default.nil? ? "" : default
    when "#expr"
      begin
        ExpressionParser::Parser.new.parse(params.first)
      rescue RuntimeError
        I18n.t('expression error', :error => $!)
      end
    when "#ifexpr"
      val = false
      begin
        val = ExpressionParser::Parser.new.parse(params.first)
      rescue RuntimeError
      end
      if val
        params[1]
      else
        params[2]
      end
    when "#ifeq"
      if params[0] =~ /^[0-9A-Fa-f]+$/ && params[1] =~ /^[0-9A-Fa-f]+$/
        params[0].to_i == params[1].to_i ? params[2] : params[3]
      else
        params[0] == params[1] ? params[2] : params[3]
      end
    when "#len"
      params.first.length
    when "#sub"
      params.first[params[1].to_i,params[2].to_i]
    when "#pad"
      case params[3]
      when "right"
        params[0].ljust(params[1].to_i,params[2])
      when "center"
        params[0].center(params[1].to_i,params[2])
      else
        params[0].rjust(params[1].to_i,params[2])
      end
    when "#iferror"
      params.first =~ /error/ ? params[1] : params[2]
    when "#capture"
      @options[:params][params.first] = params[1]
      ""
    when "urlencode"
      URI.escape(params.first, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
    when "lc"
      params.first.downcase
    when "uc"
      params.first.upcase
    when "ucfirst"
      params.first.capitalize
    when "lcfirst"
      params.first[0,1].downcase + params.first[1..-1].to_s
    when "anchorencode"
      params.first.gsub(/\s+/,'_')
    when "plural"
      begin
        expr_value = ExpressionParser::Parser.new.parse(params.first)
        expr_value.to_i == 1 ? params[1] : params[2]
      rescue RuntimeError
        I18n.t('expression error', :error => $!)
      end
    when "ns"
      values = {
        "" => "", "0" => "",
        "1" => localise_ns("Talk"), "talk" => localise_ns("Talk"),
        "6" => localise_ns("File"), "file" => localise_ns("File"), "image" => localise_ns("File"),
        "10" => localise_ns("Template"), "template" => localise_ns("Template"),
        "14" => localise_ns("Category"), "category" => localise_ns("Category"),
        "-1" => localise_ns("Special"), "special" => localise_ns("Special"),
        "12" => localise_ns("Help"), "help" => localise_ns("Help"),
        "-2" => localise_ns("Media"), "media" => localise_ns("Media") }

      values[localise_ns(params.first,:en).gsub(/\s+/,'_').downcase]
    when "#language"
      WikiNamespaces.language_name(params.first)
    when "#tag"
      return "" if params.empty?
      elem = Builder::XmlMarkup.new
      return elem.tag!(params.first) if params.length == 1
      return elem.tag!(params.first) { |e| e << params.last } if params.length == 2
      tag_attrs = {}
      params[1..-2].each do |attr|
        tag_attrs[$1] = $2 if attr =~ /^\s*([\w]+)\s*=\s*"(.*)"\s*$/
      end
      elem.tag!(params.first,tag_attrs) { |e| e << params.last }
    when "debug"
      ret = nil
      case params.first
      when "param"
        @options[:buffer].buffers.reverse.each do |b|
          if b.instance_of?(WikiBuffer::HTMLElement) && b.element_name == "template"
             ret = b.get_param(params[1])
          end
        end
        ret
      when "buffer"
        ret = "<pre>"
        buffer = @options[:buffer].buffers
        buffer.each do |b|
          ret += " --- #{b.class}"
          ret += b.instance_of?(WikiBuffer::HTMLElement) ? " -- #{b.element_name}\n" : " -- #{b.data}\n"
        end
        "#{ret}</pre>"
      end
    end
  end