From 0617145a89917ae7735fe1c9538688ab9a577df5 Mon Sep 17 00:00:00 2001 From: Kristian Monsen Date: Fri, 30 Jul 2010 10:46:49 +0100 Subject: Merge WebKit at r64264 : Initial merge by git. Change-Id: Ic42bef02efef8217a0f84c47176a9c617c28d1f1 --- WebCore/platform/text/transcoder/FontTranscoder.cpp | 17 +++++++++-------- WebCore/platform/text/transcoder/FontTranscoder.h | 7 ++++--- 2 files changed, 13 insertions(+), 11 deletions(-) (limited to 'WebCore/platform/text/transcoder') 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::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; } diff --git a/WebCore/platform/text/transcoder/FontTranscoder.h b/WebCore/platform/text/transcoder/FontTranscoder.h index f013453..1fdc936 100644 --- a/WebCore/platform/text/transcoder/FontTranscoder.h +++ b/WebCore/platform/text/transcoder/FontTranscoder.h @@ -37,12 +37,13 @@ namespace WebCore { +class FontDescription; class TextEncoding; class FontTranscoder : public Noncopyable { public: - void convert(String& text, const AtomicString& fontFamily, const TextEncoding* = 0) const; - bool needsTranscoding(const AtomicString& fontFamily, const TextEncoding* = 0) const; + void convert(String& text, const FontDescription&, const TextEncoding* = 0) const; + bool needsTranscoding(const FontDescription&, const TextEncoding* = 0) const; private: FontTranscoder(); @@ -52,7 +53,7 @@ private: NoConversion, BackslashToYenSign, }; - ConverterType converterType(const AtomicString& fontFamily, const TextEncoding*) const; + ConverterType converterType(const FontDescription&, const TextEncoding*) const; HashMap m_converterTypes; -- cgit v1.1