#include "config.h"
#include "FontCache.h"
#include "Font.h"
#include "FontPlatformData.h"
#include "NotImplemented.h"
#include "SimpleFontData.h"
namespace WebCore {
void FontCache::platformInit()
{
}
const SimpleFontData* FontCache::getFontDataForCharacters(const Font& font, const UChar* characters, int length)
{
SimpleFontData* fontData = 0;
fontData = getCachedFontData(font.fontDescription(), font.family().family(), false, false);
if (!fontData->containsCharacters(characters, length))
fontData = getSimilarFontPlatformData(font);
if (!fontData->containsCharacters(characters, length))
fontData = getLastResortFallbackFont(font.fontDescription());
ASSERT(fontData);
return fontData;
}
SimpleFontData* FontCache::getSimilarFontPlatformData(const Font& font)
{
SimpleFontData* simpleFontData = 0;
#if OS(DARWIN)
const FontFamily* currFamily = &font.fontDescription().family();
while (currFamily && !simpleFontData) {
if (currFamily->family().length()) {
static String* matchWords[3] = { new String("Arabic"), new String("Pashto"), new String("Urdu") };
DEFINE_STATIC_LOCAL(AtomicString, geezaStr, ("Geeza Pro"));
for (int j = 0; j < 3 && !simpleFontData; ++j)
if (currFamily->family().contains(*matchWords[j], false))
simpleFontData = getCachedFontData(font.fontDescription(), geezaStr);
}
currFamily = currFamily->next();
}
#endif
if (!simpleFontData)
simpleFontData = getCachedFontData(font.fontDescription(), font.family().family());
return simpleFontData;
}
SimpleFontData* FontCache::getLastResortFallbackFont(const FontDescription& fontDescription)
{
SimpleFontData* fallback = 0;
#if OS(WINDOWS)
static AtomicString fallbackName("Arial Unicode MS");
#else
static AtomicString fallbackName("Times New Roman");
#endif
fallback = getCachedFontData(fontDescription, fallbackName);
ASSERT(fallback);
return fallback;
}
FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family)
{
return new FontPlatformData(fontDescription,family);
}
void FontCache::getTraitsInFamily(const AtomicString& familyName, Vector<unsigned>& traitsMasks)
{
notImplemented();
}
}