aboutsummaryrefslogtreecommitdiffstats
path: root/src/wordEncoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wordEncoder.cpp')
-rw-r--r--src/wordEncoder.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/wordEncoder.cpp b/src/wordEncoder.cpp
index 32e46df1..82a74cff 100644
--- a/src/wordEncoder.cpp
+++ b/src/wordEncoder.cpp
@@ -168,7 +168,7 @@ const string wordEncoder::getNextChunk(const string::size_type maxLength)
// Fully RFC-compliant encoding
else
{
- charsetConverter conv(charsets::UTF_8, m_charset);
+ ref <charsetConverter> conv = charsetConverter::create(charsets::UTF_8, m_charset);
string::size_type inputCount = 0;
string::size_type outputCount = 0;
@@ -185,7 +185,7 @@ const string wordEncoder::getNextChunk(const string::size_type maxLength)
// Convert back to original encoding
string encodeBytes;
- conv.convert(inputChar, encodeBytes);
+ conv->convert(inputChar, encodeBytes);
encodeBuffer += encodeBytes;
@@ -225,23 +225,31 @@ wordEncoder::Encoding wordEncoder::getEncoding() const
// static
-bool wordEncoder::isEncodingNeeded(const string& buffer, const charset& charset)
+bool wordEncoder::isEncodingNeeded
+ (const generationContext& ctx, const string& buffer, const charset& charset)
{
- // Charset-specific encoding
- encoding recEncoding;
+ if (!ctx.getInternationalizedEmailSupport())
+ {
+ // Charset-specific encoding
+ encoding recEncoding;
- if (charset.getRecommendedEncoding(recEncoding))
- return true;
+ if (charset.getRecommendedEncoding(recEncoding))
+ return true;
- // No encoding is needed if the buffer only contains ASCII chars
- if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos)
- return true;
+ // No encoding is needed if the buffer only contains ASCII chars
+ if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos)
+ return true;
+ }
// Force encoding when there are only ASCII chars, but there is
// also at least one of '\n' or '\r' (header fields)
if (buffer.find_first_of("\n\r") != string::npos)
return true;
+ // If any RFC-2047 sequence is found in the buffer, encode it
+ if (buffer.find("=?") != string::npos)
+ return true;
+
return false;
}