1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
# encoding: utf-8
# frozen_string_literal: true
require 'mail/encodings/7bit'
module Mail
module Encodings
class QuotedPrintable < SevenBit
NAME='quoted-printable'
PRIORITY = 2
def self.can_encode?(str)
EightBit.can_encode? str
end
# Decode the string from Quoted-Printable. Cope with hard line breaks
# that were incorrectly encoded as hex instead of literal CRLF.
def self.decode(str)
::Mail::Utilities.to_lf str.gsub(/(?:=0D=0A|=0D|=0A)\r\n/, "\r\n").unpack("M*").first
end
def self.encode(str)
::Mail::Utilities.to_crlf([::Mail::Utilities.to_lf(str)].pack("M"))
end
def self.cost(str)
# These bytes probably do not need encoding
c = str.count("\x9\xA\xD\x20-\x3C\x3E-\x7E")
# Everything else turns into =XX where XX is a
# two digit hex number (taking 3 bytes)
total = (str.bytesize - c)*3 + c
total.to_f/str.bytesize
end
# QP inserts newlines automatically and cannot violate the SMTP spec.
def self.compatible_input?(str)
true
end
private
Encodings.register(NAME, self)
end
end
end
|