def Encodings.value_decode(str)
return str unless str =~ /\=\?[^?]+\?[QB]\?[^?]+?\?\=/xmi
lines = collapse_adjacent_encodings(str)
lines.map do |line|
line.split(/([ \t])/).map do |text|
if text.index('=?').nil?
text
else
text.scan(/( # Group around entire regex to include it in matches
\=\?[^?]+\?([QB])\?[^?]+?\?\= # Quoted String with subgroup for encoding method
| # or
.+?(?=\=\?|$) # Plain String
)/xmi).map do |matches|
string, method = *matches
if method == 'b' || method == 'B'
b_value_decode(string)
elsif method == 'q' || method == 'Q'
q_value_decode(string)
else
string
end
end
end
end
end.flatten.join("")
end