# File lib/money/money/formatting.rb, line 143
    def format(*rules)
      # support for old format parameters
      rules = normalize_formatting_rules(rules)
      rules = localize_formatting_rules(rules)

      if cents == 0
        if rules[:display_free].respond_to?(:to_str)
          return rules[:display_free]
        elsif rules[:display_free]
          return "free"
        end
      end

      symbol_value =
        if rules.has_key?(:symbol)
          if rules[:symbol] === true
            symbol
          elsif rules[:symbol]
            rules[:symbol]
          else
            ""
          end
        elsif rules[:html]
          currency.html_entity == '' ? currency.symbol : currency.html_entity
        else
          symbol
        end

      formatted = rules[:no_cents] ? "#{self.to_s.to_i}" : self.to_s

      if rules[:no_cents_if_whole] && cents % currency.subunit_to_unit == 0
        formatted = "#{self.to_s.to_i}"
      end

      symbol_position =
        if rules.has_key?(:symbol_position)
          rules[:symbol_position]
        elsif currency.symbol_first?
          :before
        else
          :after
        end

      if symbol_value && !symbol_value.empty?
        formatted = if symbol_position == :before 
          "#{symbol_value}#{formatted}"
        else
          symbol_space = rules[:symbol_after_without_space] ? "" : " "
          "#{formatted}#{symbol_space}#{symbol_value}"
        end
      end

      if rules.has_key?(:decimal_mark) and rules[:decimal_mark] and
        rules[:decimal_mark] != decimal_mark
        formatted.sub!(decimal_mark, rules[:decimal_mark])
      end

      thousands_separator_value = thousands_separator
      # Determine thousands_separator
      if rules.has_key?(:thousands_separator)
        thousands_separator_value = rules[:thousands_separator] || ''
      end

      # Apply thousands_separator
      regexp_decimal = Regexp.escape(decimal_mark)
      regexp_format  = if formatted =~ /#{regexp_decimal}/
           /(\d)(?=(?:\d{3})+(?:#{regexp_decimal}))/
         else
           /(\d)(?=(?:\d{3})+(?:[^\d]{1}|$))/
         end
      formatted.gsub!(regexp_format, "\\1#{thousands_separator_value}")

      if rules[:with_currency]
        formatted << " "
        formatted << '<span class="currency">' if rules[:html]
        formatted << currency.to_s
        formatted << '</span>' if rules[:html]
      end
      formatted
    end