default_functions

in config/initializers/wikicloth_ruby_3_patch.rb [113:238]


      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.empty?
              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.encode_www_form_component(params.first)
        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]
        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