lib/stringex/localization/converter.rb
# encoding: UTF-8
require 'stringex/localization/conversion_expressions'
module Stringex
module Localization
class Converter
include ConversionExpressions
attr_reader :ending_whitespace, :options, :starting_whitespace, :string
def initialize(string, options = {})
@string = string.dup
@options = Stringex::Configuration::StringExtensions.default_settings.merge(options)
string =~ /^(\s+)/
@starting_whitespace = $1 unless $1 == ''
string =~ /(\s+)$/
@ending_whitespace = $1 unless $1 == ''
end
def cleanup_accented_html_entities!
string.gsub! expressions.accented_html_entity, '\1'
end
def cleanup_characters!
string.gsub! expressions.cleanup_characters, ' '
end
def cleanup_html_entities!
string.gsub! expressions.cleanup_html_entities, ''
end
def cleanup_smart_punctuation!
expressions.smart_punctuation.each do |expression, replacement|
string.gsub! expression, replacement
end
end
def normalize_currency!
string.gsub!(/(\d+),(\d+)/, '\1\2')
end
def smart_strip!
string.strip!
@string = "#{starting_whitespace}#{string}#{ending_whitespace}"
end
def strip!
string.strip!
end
def strip_html_tags!
string.gsub! expressions.html_tag, ''
end
def translate!(*conversions)
conversions.each do |conversion|
send conversion
end
end
protected
def unreadable_control_characters
string.gsub! expressions.unreadable_control_characters, ''
end
def abbreviations
string.gsub! expressions.abbreviation do |x|
x.gsub '.', ''
end
end
def apostrophes
string.gsub! expressions.apostrophe, '\1\2'
end
def characters
expressions.characters.each do |key, expression|
next if key == :slash && options[:allow_slash]
replacement = translate(key)
replacement = " #{replacement} " unless replacement == '' || key == :dot
string.gsub! expression, replacement
end
end
def currencies
if has_currencies?
[:currencies_complex, :currencies_simple].each do |type|
expressions.send(type).each do |key, expression|
string.gsub! expression, " #{translate(key, :currencies)} "
end
end
end
end
def ellipses
string.gsub! expressions.characters[:ellipsis], " #{translate(:ellipsis)} "
end
def html_entities
expressions.html_entities.each do |key, expression|
string.gsub! expression, translate(key, :html_entities)
end
string.squeeze! ' '
end
def vulgar_fractions
expressions.vulgar_fractions.each do |key, expression|
string.gsub! expression, translate(key, :vulgar_fractions)
end
end
private
def expressions
ConversionExpressions
end
def has_currencies?
string =~ CURRENCIES_SUPPORTED
end
def translate(key, scope = :characters)
Localization.translate scope, key
end
end
end
end