Class | TMail::Unquoter
In: | lib/tmail/quoting.rb
Parent: | Object

### Methods

convert_to convert_to convert_to_with_fallback_on_iso_8859_1 unquote_and_convert_to unquote_base64_and_convert_to unquote_quoted_printable_and_convert_to

### External Aliases

convert_to | -> | convert_to_without_fallback_on_iso_8859_1
convert_to_with_fallback_on_iso_8859_1 | -> | convert_to

### Public Class methods

convert_to(text, to, from)

Not providing quoting support

[Source]

    # File lib/tmail/quoting.rb, line 153
            def convert_to(text, to, from)
              warn "Action Mailer: iconv not loaded; ignoring conversion from #{from} to #{to} (#{__FILE__}:#{__LINE__})"
              text
            end

convert_to(text, to, from)

[Source]

    # File lib/tmail/quoting.rb, line 139
            def convert_to(text, to, from)
              return text unless to && from
              text ? Iconv.iconv(to, from, text).first : ""
            rescue Iconv::IllegalSequence, Iconv::InvalidEncoding, Errno::EINVAL
              # the 'from' parameter specifies a charset other than what the text
              # actually is...not much we can do in this case but just return the
              # unconverted text.
              #
              # Ditto if either parameter represents an unknown charset, like
              # X-UNKNOWN.
              text
            end

convert_to_with_fallback_on_iso_8859_1(text, to, from)

[Source]

    # File lib/tmail/quoting.rb, line 104
          def convert_to_with_fallback_on_iso_8859_1(text, to, from)
            return text if to == 'utf-8' and text.isutf8

            if from.blank? and !text.is_binary_data?
              from = CharDet.detect(text)['encoding']

              # Chardet ususally detects iso-8859-2 (aka windows-1250), but the text is
              # iso-8859-1 (aka windows-1252 and Latin1). http://en.wikipedia.org/wiki/ISO/IEC_8859-2
              # This can cause unwanted characters, like ŕ instead of à.
              # (I know, could be a very bad decision...)
              from = 'iso-8859-1' if from =~ /iso-8859-2/i
            end

            begin
              convert_to_without_fallback_on_iso_8859_1(text, to, from)
            rescue Iconv::InvalidCharacter
              unless from == 'iso-8859-1'
                from = 'iso-8859-1'
                retry
              end
            end
          end

unquote_and_convert_to(text, to_charset, from_charset = "iso-8859-1", preserve_underscores=false)

[Source]

    # File lib/tmail/quoting.rb, line 79
          def unquote_and_convert_to(text, to_charset, from_charset = "iso-8859-1", preserve_underscores=false)
            return "" if text.nil?
            text.gsub!(/\?=(\s*)=\?/, '?==?') # Remove whitespaces between 'encoded-word's
            text.gsub(/(.*?)(?:(?:=\?(.*?)\?(.)\?(.*?)\?=)|$)/) do
              before = $1
              from_charset = $2
              quoting_method = $3
              text = $4

              before = convert_to(before, to_charset, from_charset) if before.length > 0
              before + case quoting_method
                  when "q", "Q" then
                    unquote_quoted_printable_and_convert_to(text, to_charset, from_charset, preserve_underscores)
                  when "b", "B" then
                    unquote_base64_and_convert_to(text, to_charset, from_charset)
                  when nil then
                    # will be nil at the end of the string, due to the nature of
                    # the regex used.
                    ""
                  else
                    raise "unknown quoting method #{quoting_method.inspect}"
                end
            end
          end

unquote_base64_and_convert_to(text, to, from)

[Source]

    # File lib/tmail/quoting.rb, line 133
          def unquote_base64_and_convert_to(text, to, from)
            convert_to(Base64.decode(text), to, from)
          end

unquote_quoted_printable_and_convert_to(text, to, from, preserve_underscores=false)

[Source]

    # File lib/tmail/quoting.rb, line 127
          def unquote_quoted_printable_and_convert_to(text, to, from, preserve_underscores=false)
            text = text.gsub(/_/, " ") unless preserve_underscores
            text = text.gsub(/\r\n|\r/, "\n") # normalize newlines
            convert_to(text.unpack("M*").first, to, from)
          end

[Validate]