Class: Mail::Encodings::QuotedPrintable

Inherits:
SevenBit show all
Defined in:
lib/mail/encodings/quoted_printable.rb

Constant Summary collapse

NAME =
'quoted-printable'
PRIORITY =
2

Class Method Summary collapse

Methods inherited from TransferEncoding

can_transport?, lowest_cost, negotiate, renegotiate, to_s

Class Method Details

.can_encode?(enc) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/mail/encodings/quoted_printable.rb', line 12

def self.can_encode?(enc)
  EightBit.can_encode? enc
end

.compatible_input?(str) ⇒ Boolean

QP inserts newlines automatically and cannot violate the SMTP spec.

Returns:

  • (Boolean)


36
37
38
# File 'lib/mail/encodings/quoted_printable.rb', line 36

def self.compatible_input?(str)
  true
end

.cost(str) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/mail/encodings/quoted_printable.rb', line 26

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

.decode(str) ⇒ Object

Decode the string from Quoted-Printable. Cope with hard line breaks that were incorrectly encoded as hex instead of literal CRLF.



18
19
20
# File 'lib/mail/encodings/quoted_printable.rb', line 18

def self.decode(str)
  ::Mail::Utilities.to_lf ::Mail::Utilities.to_crlf(str).gsub(/(?:=0D=0A|=0D|=0A)\r\n/, "\r\n").unpack("M*").first
end

.encode(str) ⇒ Object



22
23
24
# File 'lib/mail/encodings/quoted_printable.rb', line 22

def self.encode(str)
  ::Mail::Utilities.to_crlf [::Mail::Utilities.to_lf(str)].pack("M")
end