summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/text/transcoder/FontTranscoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/text/transcoder/FontTranscoder.cpp')
-rw-r--r--WebCore/platform/text/transcoder/FontTranscoder.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/WebCore/platform/text/transcoder/FontTranscoder.cpp b/WebCore/platform/text/transcoder/FontTranscoder.cpp
index 12678e8..8e2f33f 100644
--- a/WebCore/platform/text/transcoder/FontTranscoder.cpp
+++ b/WebCore/platform/text/transcoder/FontTranscoder.cpp
@@ -32,6 +32,7 @@
#include "FontTranscoder.h"
#include "CharacterNames.h"
+#include "FontDescription.h"
#include "TextEncoding.h"
namespace WebCore {
@@ -59,8 +60,9 @@ FontTranscoder::FontTranscoder()
m_converterTypes.add(AtomicString(unicodeNameMeiryo, sizeof(unicodeNameMeiryo) / sizeof(UChar)), BackslashToYenSign);
}
-FontTranscoder::ConverterType FontTranscoder::converterType(const AtomicString& fontFamily, const TextEncoding* encoding) const
+FontTranscoder::ConverterType FontTranscoder::converterType(const FontDescription& fontDescription, const TextEncoding* encoding) const
{
+ const AtomicString& fontFamily = fontDescription.family().family().string();
if (!fontFamily.isNull()) {
HashMap<AtomicString, ConverterType>::const_iterator found = m_converterTypes.find(fontFamily);
if (found != m_converterTypes.end())
@@ -68,17 +70,16 @@ FontTranscoder::ConverterType FontTranscoder::converterType(const AtomicString&
}
// IE's default fonts for Japanese encodings change backslashes into yen signs.
- // FIXME: We don't need transcoding when the document explicitly
- // specifies a font which doesn't change backslashes into yen signs.
- if (encoding && encoding->backslashAsCurrencySymbol() != '\\')
+ // We emulate this behavior only when no font is explicitly specified.
+ if (encoding && encoding->backslashAsCurrencySymbol() != '\\' && !fontDescription.isSpecifiedFont())
return BackslashToYenSign;
return NoConversion;
}
-void FontTranscoder::convert(String& text, const AtomicString& fontFamily, const TextEncoding* encoding) const
+void FontTranscoder::convert(String& text, const FontDescription& fontDescription, const TextEncoding* encoding) const
{
- switch (converterType(fontFamily, encoding)) {
+ switch (converterType(fontDescription, encoding)) {
case BackslashToYenSign: {
// FIXME: TextEncoding.h has similar code. We need to factor them out.
text.replace('\\', yenSign);
@@ -90,9 +91,9 @@ void FontTranscoder::convert(String& text, const AtomicString& fontFamily, const
}
}
-bool FontTranscoder::needsTranscoding(const AtomicString& fontFamily, const TextEncoding* encoding) const
+bool FontTranscoder::needsTranscoding(const FontDescription& fontDescription, const TextEncoding* encoding) const
{
- ConverterType type = converterType(fontFamily, encoding);
+ ConverterType type = converterType(fontDescription, encoding);
return type != NoConversion;
}