Bug 468387 - disable synthetic faces for downloadable fonts on Windows already specified as bold/italic. r=vlad

This commit is contained in:
John Daggett 2009-04-02 10:35:59 +09:00
Родитель c5b3074722
Коммит ae7f73220e
10 изменённых файлов: 1796 добавлений и 101 удалений

Просмотреть файл

@ -290,6 +290,8 @@ public:
nsTArray< nsAutoPtr<Block> > mBlocks;
};
#define TRUETYPE_TAG(a, b, c, d) ((a) << 24 | (b) << 16 | (c) << 8 | (d))
class THEBES_API gfxFontUtils {
public:
@ -328,7 +330,7 @@ public:
static nsresult
ReadCMAP(PRUint8 *aBuf, PRUint32 aBufLength, gfxSparseBitSet& aCharacterMap,
PRPackedBool& aUnicodeFont, PRPackedBool& aSymbolFont);
#ifdef XP_WIN
// given a TrueType/OpenType data file, produce a EOT-format header
// for use with Windows T2Embed API AddFontResource type API's
@ -352,6 +354,36 @@ public:
RenameFont(const nsAString& aName, const PRUint8 *aFontData,
PRUint32 aFontDataLength, nsTArray<PRUint8> *aNewFont);
// constansts used with name table read methods
enum {
PLATFORM_ALL = -1,
PLATFORM_UNICODE = 0,
PLATFORM_MACINTOSH = 1,
PLATFORM_MICROSOFT = 3,
NAME_LANG_ALL = -1,
// name record id's
NAME_ID_FAMILY = 1,
NAME_ID_STYLE = 2,
NAME_ID_UNIQUE = 3,
NAME_ID_FULL = 4, // used as key to GDI CreateFontIndirect
NAME_ID_VERSION = 5,
NAME_ID_POSTSCRIPT = 6,
NAME_ID_PREFERRED_FAMILY = 16
};
// read all names matching aNameID, returning in aNames array
static nsresult
ReadNames(nsTArray<PRUint8>& aNameTable, PRUint32 aNameID,
PRInt32 aPlatformID, nsTArray<nsString>& aNames);
// reads English or first name matching aNameID, returning in aName
// platform based on OS
static nsresult
ReadCanonicalName(nsTArray<PRUint8>& aNameTable, PRUint32 aNameID,
nsString& aName);
static inline bool IsJoiner(PRUint32 ch) {
return (ch == 0x200C ||
ch == 0x200D ||
@ -371,6 +403,11 @@ public:
// generate a unique font name
static nsresult MakeUniqueUserFontName(nsAString& aName);
protected:
static nsresult
ReadNames(nsTArray<PRUint8>& aNameTable, PRUint32 aNameID,
PRInt32 aLangID, PRInt32 aPlatformID, nsTArray<nsString>& aNames);
};
// helper class for loading in font info spaced out at regular intervals

Просмотреть файл

@ -110,13 +110,18 @@ private:
class FontEntry : public gfxFontEntry
{
public:
FontEntry(const nsAString& aFaceName) :
gfxFontEntry(aFaceName), mFontType(GFX_FONT_TYPE_UNKNOWN),
FontEntry(const nsAString& aFaceName, gfxWindowsFontType aFontType,
PRBool aItalic, PRUint16 aWeight, gfxUserFontData *aUserFontData) :
gfxFontEntry(aFaceName), mFontType(aFontType),
mForceGDI(PR_FALSE), mUnknownCMAP(PR_FALSE),
mUnicodeFont(PR_FALSE), mSymbolFont(PR_FALSE),
mUnicodeFont(PR_FALSE), mSymbolFont(PR_FALSE), mUserFont(PR_FALSE),
mCharset(0), mUnicodeRanges(0)
{
mUserFontData = aUserFontData;
mItalic = aItalic;
mWeight = aWeight;
if (IsType1())
mForceGDI = PR_TRUE;
}
FontEntry(const FontEntry& aFontEntry) :
@ -128,6 +133,7 @@ public:
mUnknownCMAP(aFontEntry.mUnknownCMAP),
mUnicodeFont(aFontEntry.mUnicodeFont),
mSymbolFont(aFontEntry.mSymbolFont),
mUserFont(aFontEntry.mUserFont),
mCharset(aFontEntry.mCharset),
mUnicodeRanges(aFontEntry.mUnicodeRanges)
{
@ -135,16 +141,29 @@ public:
}
static void InitializeFontEmbeddingProcs();
static FontEntry* CreateFontEntry(const gfxProxyFontEntry &aProxyEntry,
nsISupports *aLoader,
const PRUint8 *aFontData,
PRUint32 aLength);
static FontEntry* CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType, PRBool aItalic, PRUint16 aWeight, gfxUserFontData* aUserFontData, HDC hdc = 0, LOGFONTW *aLogFont = nsnull);
// create a font entry from downloaded font data
static FontEntry* LoadFont(const gfxProxyFontEntry &aProxyEntry,
nsISupports *aLoader,
const PRUint8 *aFontData,
PRUint32 aLength);
static void FillLogFont(LOGFONTW *aLogFont, FontEntry *aFontEntry, gfxFloat aSize, PRBool aItalic);
// create a font entry for a font with a given name
static FontEntry* CreateFontEntry(const nsAString& aName,
gfxWindowsFontType aFontType,
PRBool aItalic, PRUint16 aWeight,
gfxUserFontData* aUserFontData,
HDC hdc = 0, LOGFONTW *aLogFont = nsnull);
static gfxWindowsFontType DetermineFontType(const NEWTEXTMETRICW& metrics, DWORD fontType)
// create a font entry for a font referenced by its fullname
static FontEntry* LoadLocalFont(const gfxProxyFontEntry &aProxyEntry,
const nsAString& aFullname);
static void FillLogFont(LOGFONTW *aLogFont, const nsAString& aName,
gfxWindowsFontType aFontType, PRBool aItalic,
PRUint16 aWeight, gfxFloat aSize);
static gfxWindowsFontType DetermineFontType(const NEWTEXTMETRICW& metrics,
DWORD fontType)
{
gfxWindowsFontType feType;
if (metrics.ntmFlags & NTM_TYPE1)
@ -274,6 +293,7 @@ public:
PRPackedBool mUnknownCMAP : 1;
PRPackedBool mUnicodeFont : 1;
PRPackedBool mSymbolFont : 1;
PRPackedBool mUserFont : 1;
std::bitset<256> mCharset;
std::bitset<128> mUnicodeRanges;

Просмотреть файл

@ -491,7 +491,7 @@ gfxAtsuiFont::HasMirroringInfo()
ByteCount size;
// 361695 - if the font has a 'prop' table, assume that ATSUI will handle glyph mirroring
status = ATSFontGetTable(GetATSFontRef(), 'prop', 0, 0, 0, &size);
status = ATSFontGetTable(GetATSFontRef(), TRUETYPE_TAG('p','r','o','p'), 0, 0, 0, &size);
mHasMirroring = (status == noErr);
mHasMirroringLookedUp = PR_TRUE;
}

Просмотреть файл

@ -51,6 +51,9 @@
#include "plbase64.h"
#ifdef XP_MACOSX
#include <CoreFoundation/CoreFoundation.h>
#endif
#define NO_RANGE_FOUND 126 // bit 126 in the font unicode ranges is required to be 0
@ -331,19 +334,19 @@ gfxFontUtils::ReadCMAPTableFormat4(PRUint8 *aBuf, PRUint32 aLength, gfxSparseBit
// For fonts with two format-4 tables, the first one (Unicode platform) is preferred on the Mac.
#if defined(XP_MACOSX)
#define acceptablePlatform(p) ((p) == PlatformIDUnicode || (p) == PlatformIDMicrosoft)
#define acceptableFormat4(p,e,k) ( ((p) == PlatformIDMicrosoft && (e) == EncodingIDMicrosoft && (k) != 4) || \
((p) == PlatformIDUnicode) )
#define isSymbol(p,e) ((p) == PlatformIDMicrosoft && (e) == EncodingIDSymbol)
#define acceptablePlatform(p) ((p) == PLATFORM_UNICODE || (p) == PLATFORM_MICROSOFT)
#define acceptableFormat4(p,e,k) ( ((p) == PLATFORM_MICROSOFT && (e) == EncodingIDMicrosoft && (k) != 4) || \
((p) == PLATFORM_UNICODE) )
#define isSymbol(p,e) ((p) == PLATFORM_MICROSOFT && (e) == EncodingIDSymbol)
#else
#define acceptablePlatform(p) ((p) == PlatformIDMicrosoft)
#define acceptablePlatform(p) ((p) == PLATFORM_MICROSOFT)
#define acceptableFormat4(p,e,k) ((e) == EncodingIDMicrosoft)
#define isSymbol(p,e) ((e) == EncodingIDSymbol)
#endif
#define acceptableUCS4Encoding(p, e) \
((platformID == PlatformIDMicrosoft && encodingID == EncodingIDUCS4ForMicrosoftPlatform) || \
(platformID == PlatformIDUnicode && encodingID == EncodingIDUCS4ForUnicodePlatform))
((platformID == PLATFORM_MICROSOFT && encodingID == EncodingIDUCS4ForMicrosoftPlatform) || \
(platformID == PLATFORM_UNICODE && encodingID == EncodingIDUCS4ForUnicodePlatform))
nsresult
gfxFontUtils::ReadCMAP(PRUint8 *aBuf, PRUint32 aBufLength, gfxSparseBitSet& aCharacterMap,
@ -361,10 +364,6 @@ gfxFontUtils::ReadCMAP(PRUint8 *aBuf, PRUint32 aBufLength, gfxSparseBitSet& aCha
SubtableOffsetFormat = 0
};
enum {
PlatformIDUnicode = 0,
PlatformIDMicrosoft = 3
};
enum {
EncodingIDSymbol = 0,
EncodingIDMicrosoft = 1,
@ -600,16 +599,9 @@ struct NameRecord {
AutoSwap_PRUint16 offset; // String offset from start of storage area (in bytes).
enum {
NAME_ID_FAMILY = 1,
NAME_ID_STYLE = 2,
NAME_ID_UNIQUE = 3,
NAME_ID_FULL = 4,
NAME_ID_VERSION = 5,
NAME_ID_POSTSCRIPT = 6,
PLATFORM_ID_UNICODE = 0, // Mac OS uses this typically
PLATFORM_ID_MICROSOFT = 3,
ENCODING_ID_MICROSOFT_UNICODEBMP = 1, // with Microsoft platformID, BMP-only Unicode encoding
LANG_ID_MICROSOFT_EN_US = 0x0409 // with Microsoft platformID, EN US lang code
LANG_ID_MICROSOFT_EN_US = 0x0409, // with Microsoft platformID, EN US lang code
LANG_ID_MACINTOSH_EN = 0
};
};
@ -667,7 +659,7 @@ IsValidSFNTVersion(PRUint32 version)
{
// normally 0x00010000, CFF-style OT fonts == 'OTTO' and Apple TT fonts = 'true'
// 'typ1' is also possible for old Type 1 fonts in a SFNT container but not supported
return version == 0x10000 || version == 'OTTO' || version == 'true';
return version == 0x10000 || version == TRUETYPE_TAG('O','T','T','O') || version == TRUETYPE_TAG('t','r','u','e');
}
// copy and swap UTF-16 values, assume no surrogate pairs, can be in place
@ -706,7 +698,7 @@ gfxFontUtils::ValidateSFNTHeaders(const PRUint8 *aFontData,
}
if (aIsCFF)
*aIsCFF = (sfntVersion == 'OTTO');
*aIsCFF = (sfntVersion == TRUETYPE_TAG('O','T','T','O'));
// iterate through the table headers to find the head, name and OS/2 tables
PRBool foundHead = PR_FALSE, foundOS2 = PR_FALSE, foundName = PR_FALSE;
@ -747,7 +739,7 @@ gfxFontUtils::ValidateSFNTHeaders(const PRUint8 *aFontData,
switch (dirEntry->tag) {
case 'head':
case TRUETYPE_TAG('h','e','a','d'):
foundHead = PR_TRUE;
headOffset = dirEntry->offset;
headLen = dirEntry->length;
@ -757,21 +749,21 @@ gfxFontUtils::ValidateSFNTHeaders(const PRUint8 *aFontData,
}
break;
case 'name':
case TRUETYPE_TAG('n','a','m','e'):
foundName = PR_TRUE;
nameOffset = dirEntry->offset;
nameLen = dirEntry->length;
break;
case 'OS/2':
case TRUETYPE_TAG('O','S','/','2'):
foundOS2 = PR_TRUE;
break;
case 'glyf': // TrueType-style quadratic glyph table
case TRUETYPE_TAG('g','l','y','f'): // TrueType-style quadratic glyph table
foundGlyphs = PR_TRUE;
break;
case 'CFF ': // PS-style cubic glyph table
case TRUETYPE_TAG('C','F','F',' '): // PS-style cubic glyph table
foundCFF = PR_TRUE;
break;
@ -811,7 +803,7 @@ gfxFontUtils::ValidateSFNTHeaders(const PRUint8 *aFontData,
}
// need glyf or CFF table based on sfnt version
if (sfntVersion == 'OTTO') {
if (sfntVersion == TRUETYPE_TAG('O','T','T','O')) {
if (!foundCFF) {
NS_WARNING("invalid font (missing CFF table)");
return PR_FALSE;
@ -861,11 +853,11 @@ gfxFontUtils::RenameFont(const nsAString& aName, const PRUint8 *aFontData,
PRUint64 dataLength(aFontDataLength);
// new name table
static const PRUint32 neededNameIDs[] = {NameRecord::NAME_ID_FAMILY,
NameRecord::NAME_ID_STYLE,
NameRecord::NAME_ID_UNIQUE,
NameRecord::NAME_ID_FULL,
NameRecord::NAME_ID_POSTSCRIPT};
static const PRUint32 neededNameIDs[] = {gfxFontUtils::NAME_ID_FAMILY,
gfxFontUtils::NAME_ID_STYLE,
gfxFontUtils::NAME_ID_UNIQUE,
gfxFontUtils::NAME_ID_FULL,
gfxFontUtils::NAME_ID_POSTSCRIPT};
// calculate new name table size
PRUint16 nameCount = NS_ARRAY_LENGTH(neededNameIDs);
@ -909,7 +901,7 @@ gfxFontUtils::RenameFont(const nsAString& aName, const PRUint8 *aFontData,
NameRecord *nameRecord = reinterpret_cast<NameRecord*>(nameHeader + 1);
for (i = 0; i < nameCount; i++, nameRecord++) {
nameRecord->platformID = NameRecord::PLATFORM_ID_MICROSOFT;
nameRecord->platformID = gfxFontUtils::PLATFORM_MICROSOFT;
nameRecord->encodingID = NameRecord::ENCODING_ID_MICROSOFT_UNICODEBMP;
nameRecord->languageID = NameRecord::LANG_ID_MICROSOFT_EN_US;
nameRecord->nameID = neededNameIDs[i];
@ -939,7 +931,7 @@ gfxFontUtils::RenameFont(const nsAString& aName, const PRUint8 *aFontData,
PRBool foundName = PR_FALSE;
for (i = 0; i < numTables; i++, dirEntry++) {
if (dirEntry->tag == 'name') {
if (dirEntry->tag == TRUETYPE_TAG('n','a','m','e')) {
foundName = PR_TRUE;
break;
}
@ -980,7 +972,7 @@ gfxFontUtils::RenameFont(const nsAString& aName, const PRUint8 *aFontData,
dirEntry = reinterpret_cast<TableDirEntry*>(newFontData + sizeof(SFNTHeader));
for (i = 0; i < numTables; i++, dirEntry++) {
if (dirEntry->tag == 'head') {
if (dirEntry->tag == TRUETYPE_TAG('h','e','a','d')) {
headOffset = dirEntry->offset;
}
checksum += dirEntry->checkSum;
@ -995,6 +987,216 @@ gfxFontUtils::RenameFont(const nsAString& aName, const PRUint8 *aFontData,
return NS_OK;
}
enum {
#if defined(XP_MACOSX)
CANONICAL_LANG_ID = NameRecord::LANG_ID_MACINTOSH_EN,
PLATFORM_ID = gfxFontUtils::PLATFORM_MACINTOSH
#else
CANONICAL_LANG_ID = NameRecord::LANG_ID_MICROSOFT_EN_US,
PLATFORM_ID = gfxFontUtils::PLATFORM_MICROSOFT
#endif
};
nsresult
gfxFontUtils::ReadNames(nsTArray<PRUint8>& aNameTable, PRUint32 aNameID,
PRInt32 aPlatformID, nsTArray<nsString>& aNames)
{
return ReadNames(aNameTable, aNameID, NAME_LANG_ALL, aPlatformID, aNames);
}
nsresult
gfxFontUtils::ReadCanonicalName(nsTArray<PRUint8>& aNameTable, PRUint32 aNameID,
nsString& aName)
{
nsresult rv;
nsTArray<nsString> names;
// first, look for the English name (this will succeed 99% of the time)
rv = ReadNames(aNameTable, aNameID, CANONICAL_LANG_ID, PLATFORM_ID, names);
NS_ENSURE_SUCCESS(rv, rv);
// otherwise, grab names for all languages
if (names.Length() == 0) {
rv = ReadNames(aNameTable, aNameID, NAME_LANG_ALL, PLATFORM_ID, names);
NS_ENSURE_SUCCESS(rv, rv);
}
#if defined(XP_MACOSX)
// may be dealing with font that only has Microsoft name entries
if (names.Length() == 0) {
rv = ReadNames(aNameTable, aNameID, NameRecord::LANG_ID_MICROSOFT_EN_US,
gfxFontUtils::PLATFORM_MICROSOFT, names);
NS_ENSURE_SUCCESS(rv, rv);
// getting really desperate now, take anything!
if (names.Length() == 0) {
rv = ReadNames(aNameTable, aNameID, NAME_LANG_ALL,
gfxFontUtils::PLATFORM_MICROSOFT, names);
NS_ENSURE_SUCCESS(rv, rv);
}
}
#endif
// return the first name (99.9% of the time names will
// contain a single English name)
if (names.Length()) {
aName.Assign(names[0]);
return NS_OK;
}
return NS_ERROR_FAILURE;
}
nsresult
DecodeName(PRUint8 *aNameData, PRUint32 aByteLen, PRInt32 aPlatform,
PRUint32 aEncoding, nsAString& aName)
{
NS_ASSERTION(aPlatform != gfxFontUtils::PLATFORM_ALL, "need a defined platform to decode string");
#if defined(XP_MACOSX)
CFStringRef name = NULL;
if (aPlatform == gfxFontUtils::PLATFORM_MACINTOSH) {
name = CFStringCreateWithBytes(kCFAllocatorDefault, aNameData, aByteLen,
(CFStringEncoding) aEncoding, false);
} else if (aPlatform == gfxFontUtils::PLATFORM_UNICODE
|| aPlatform == gfxFontUtils::PLATFORM_MICROSOFT)
{
name = CFStringCreateWithBytes(kCFAllocatorDefault, aNameData, aByteLen,
kCFStringEncodingUTF16BE, false);
}
if (!name)
return NS_ERROR_FAILURE;
CFIndex len = CFStringGetLength(name);
aName.SetLength(len);
CFStringGetCharacters(name, CFRangeMake(0, len), aName.BeginWriting());
CFRelease(name);
#else
// skip non-MS platforms and non-Unicode encodings
if (aPlatform != gfxFontUtils::PLATFORM_MICROSOFT
|| aEncoding != NameRecord::ENCODING_ID_MICROSOFT_UNICODEBMP)
return NS_ERROR_FAILURE;
PRUint32 strLen = aByteLen/2;
PRUnichar *str;
#ifdef IS_LITTLE_ENDIAN
nsAutoTArray<PRUnichar,256> swapBuf;
if (!swapBuf.AppendElements(strLen))
NS_ERROR_FAILURE;
str = (PRUnichar*) (swapBuf.Elements());
PRUnichar *ch, *end = (PRUnichar*)(aNameData + aByteLen);
for (ch = (PRUnichar*) aNameData; ch < end; ch++) {
*str++ = NS_SWAP16(*ch);
}
str = (PRUnichar*) (swapBuf.Elements());
#else
str = (PRUnichar*) aNameData;
#endif
aName.Assign(str, strLen);
#endif
return NS_OK;
}
nsresult
gfxFontUtils::ReadNames(nsTArray<PRUint8>& aNameTable, PRUint32 aNameID,
PRInt32 aLangID, PRInt32 aPlatformID,
nsTArray<nsString>& aNames)
{
PRUint32 nameTableLen = aNameTable.Length();
NS_ASSERTION(nameTableLen != 0, "null name table");
if (nameTableLen == 0)
return NS_ERROR_FAILURE;
PRUint8 *nameTable = aNameTable.Elements();
// -- name table data
const NameHeader *nameHeader = reinterpret_cast<const NameHeader*>(nameTable);
PRUint32 nameCount = nameHeader->count;
// -- sanity check the number of name records
if (PRUint64(nameCount) * sizeof(NameRecord) > nameTableLen) {
NS_WARNING("invalid font (name table data)");
return NS_ERROR_FAILURE;
}
// -- iterate through name records
const NameRecord *nameRecord
= reinterpret_cast<const NameRecord*>(nameTable + sizeof(NameHeader));
PRUint64 nameStringsBase = PRUint64(nameHeader->stringOffset);
PRUint32 i;
for (i = 0; i < nameCount; i++, nameRecord++) {
PRUint32 platformID;
// skip over unwanted nameID's
if (PRUint32(nameRecord->nameID) != aNameID)
continue;
// skip over unwanted platform data
platformID = nameRecord->platformID;
if (aPlatformID != PLATFORM_ALL
&& PRUint32(nameRecord->platformID) != PLATFORM_ID)
continue;
// skip over unwanted languages
if (aLangID != NAME_LANG_ALL
&& PRUint32(nameRecord->languageID) != PRUint32(aLangID))
continue;
// add name to names array
// -- calculate string location
PRUint32 namelen = nameRecord->length;
PRUint32 nameoff = nameRecord->offset; // offset from base of string storage
if (nameStringsBase + PRUint64(nameoff) + PRUint64(namelen)
> nameTableLen) {
NS_WARNING("invalid font (name table strings)");
return NS_ERROR_FAILURE;
}
// -- decode if necessary and make nsString
nsAutoString name;
nsresult rv;
rv = DecodeName(nameTable + nameStringsBase + nameoff, namelen,
platformID, PRUint32(nameRecord->encodingID), name);
if (NS_FAILED(rv))
continue;
PRUint32 k, numNames;
PRBool foundName = PR_FALSE;
numNames = aNames.Length();
for (k = 0; k < numNames; k++) {
if (name.Equals(aNames[k])) {
foundName = PR_TRUE;
break;
}
}
if (!foundName)
aNames.AppendElement(name);
}
return NS_OK;
}
// Embedded OpenType (EOT) handling
// needed for dealing with downloadable fonts on Windows
//
@ -1142,7 +1344,7 @@ gfxFontUtils::MakeEOTHeader(const PRUint8 *aFontData, PRUint32 aFontDataLength,
switch (dirEntry->tag) {
case 'head':
case TRUETYPE_TAG('h','e','a','d'):
foundHead = PR_TRUE;
headOffset = dirEntry->offset;
headLen = dirEntry->length;
@ -1150,23 +1352,23 @@ gfxFontUtils::MakeEOTHeader(const PRUint8 *aFontData, PRUint32 aFontDataLength,
return NS_ERROR_FAILURE;
break;
case 'name':
case TRUETYPE_TAG('n','a','m','e'):
foundName = PR_TRUE;
nameOffset = dirEntry->offset;
nameLen = dirEntry->length;
break;
case 'OS/2':
case TRUETYPE_TAG('O','S','/','2'):
foundOS2 = PR_TRUE;
os2Offset = dirEntry->offset;
os2Len = dirEntry->length;
break;
case 'glyf': // TrueType-style quadratic glyph table
case TRUETYPE_TAG('g','l','y','f'): // TrueType-style quadratic glyph table
foundGlyphs = PR_TRUE;
break;
case 'CFF ': // PS-style cubic glyph table
case TRUETYPE_TAG('C','F','F',' '): // PS-style cubic glyph table
foundGlyphs = PR_TRUE;
break;
@ -1217,32 +1419,32 @@ gfxFontUtils::MakeEOTHeader(const PRUint8 *aFontData, PRUint32 aFontDataLength,
for (i = 0; i < nameCount; i++, nameRecord++) {
// looking for Microsoft English US name strings, skip others
if (PRUint32(nameRecord->platformID) != NameRecord::PLATFORM_ID_MICROSOFT ||
if (PRUint32(nameRecord->platformID) != gfxFontUtils::PLATFORM_MICROSOFT ||
PRUint32(nameRecord->encodingID) != NameRecord::ENCODING_ID_MICROSOFT_UNICODEBMP ||
PRUint32(nameRecord->languageID) != NameRecord::LANG_ID_MICROSOFT_EN_US)
continue;
switch ((PRUint32)nameRecord->nameID) {
case NameRecord::NAME_ID_FAMILY:
case gfxFontUtils::NAME_ID_FAMILY:
names[EOTFixedHeader::EOT_FAMILY_NAME_INDEX].offset = nameRecord->offset;
names[EOTFixedHeader::EOT_FAMILY_NAME_INDEX].length = nameRecord->length;
needNames &= ~(1 << EOTFixedHeader::EOT_FAMILY_NAME_INDEX);
break;
case NameRecord::NAME_ID_STYLE:
case gfxFontUtils::NAME_ID_STYLE:
names[EOTFixedHeader::EOT_STYLE_NAME_INDEX].offset = nameRecord->offset;
names[EOTFixedHeader::EOT_STYLE_NAME_INDEX].length = nameRecord->length;
needNames &= ~(1 << EOTFixedHeader::EOT_STYLE_NAME_INDEX);
break;
case NameRecord::NAME_ID_FULL:
case gfxFontUtils::NAME_ID_FULL:
names[EOTFixedHeader::EOT_FULL_NAME_INDEX].offset = nameRecord->offset;
names[EOTFixedHeader::EOT_FULL_NAME_INDEX].length = nameRecord->length;
needNames &= ~(1 << EOTFixedHeader::EOT_FULL_NAME_INDEX);
break;
case NameRecord::NAME_ID_VERSION:
case gfxFontUtils::NAME_ID_VERSION:
names[EOTFixedHeader::EOT_VERSION_NAME_INDEX].offset = nameRecord->offset;
names[EOTFixedHeader::EOT_VERSION_NAME_INDEX].length = nameRecord->length;
needNames &= ~(1 << EOTFixedHeader::EOT_VERSION_NAME_INDEX);

Просмотреть файл

@ -195,7 +195,9 @@ MacOSFontEntry::ReadCMAP()
// attempt this once, if errors occur leave a blank cmap
mCmapInitialized = PR_TRUE;
status = ATSFontGetTable(fontRef, 'cmap', 0, 0, 0, &size);
PRUint32 kCMAP = TRUETYPE_TAG('c','m','a','p');
status = ATSFontGetTable(fontRef, kCMAP, 0, 0, 0, &size);
cmapSize = size;
//printf( "cmap size: %s %d", NS_ConvertUTF16toUTF8(mName).get(), size );
#if DEBUG
@ -212,7 +214,7 @@ MacOSFontEntry::ReadCMAP()
return NS_ERROR_OUT_OF_MEMORY;
PRUint8 *cmap = buffer.Elements();
status = ATSFontGetTable(fontRef, 'cmap', 0, size, cmap, &size);
status = ATSFontGetTable(fontRef, kCMAP, 0, size, cmap, &size);
NS_ENSURE_TRUE(status == noErr, NS_ERROR_FAILURE);
nsresult rv = NS_ERROR_FAILURE;
@ -232,13 +234,13 @@ MacOSFontEntry::ReadCMAP()
// check for mort/morx table, if haven't already
if (!checkedForMorphTable) {
status = ATSFontGetTable(fontRef, 'morx', 0, 0, 0, &size);
status = ATSFontGetTable(fontRef, TRUETYPE_TAG('m','o','r','x'), 0, 0, 0, &size);
if (status == noErr) {
checkedForMorphTable = PR_TRUE;
hasMorphTable = PR_TRUE;
} else {
// check for a mort table
status = ATSFontGetTable(fontRef, 'mort', 0, 0, 0, &size);
status = ATSFontGetTable(fontRef, TRUETYPE_TAG('m','o','r','t'), 0, 0, 0, &size);
checkedForMorphTable = PR_TRUE;
if (status == noErr) {
hasMorphTable = PR_TRUE;

Просмотреть файл

@ -64,6 +64,7 @@
#include "nsIPrefService.h"
#include "nsIPrefLocalizedString.h"
#include "nsServiceManagerUtils.h"
#include "nsIStreamBufferAccess.h"
#include "nsCRT.h"
@ -147,7 +148,7 @@ struct DCFromContext {
static nsresult
ReadCMAP(HDC hdc, FontEntry *aFontEntry)
{
const PRUint32 kCMAP = (('c') | ('m' << 8) | ('a' << 16) | ('p' << 24));
const PRUint32 kCMAP = NS_SWAP32(TRUETYPE_TAG('c','m','a','p'));
DWORD len = GetFontData(hdc, kCMAP, 0, nsnull, 0);
if (len == GDI_ERROR || len == 0) // not a truetype font --
@ -494,9 +495,9 @@ public:
/* static */
FontEntry*
FontEntry::CreateFontEntry(const gfxProxyFontEntry &aProxyEntry,
nsISupports *aLoader,const PRUint8 *aFontData,
PRUint32 aLength) {
FontEntry::LoadFont(const gfxProxyFontEntry &aProxyEntry,
nsISupports *aLoader,const PRUint8 *aFontData,
PRUint32 aLength) {
// if calls aren't available, bail
if (!TTLoadEmbeddedFontPtr || !TTDeleteEmbeddedFontPtr)
return nsnull;
@ -579,13 +580,45 @@ FontEntry::CreateFontEntry(const gfxProxyFontEntry &aProxyEntry,
PRUint32(aProxyEntry.mItalic ? FONT_STYLE_ITALIC : FONT_STYLE_NORMAL),
w, winUserFontData);
if (fe && isCFF)
if (!fe)
return fe;
fe->mUserFont = PR_TRUE;
if (isCFF)
fe->mForceGDI = PR_TRUE;
return fe;
}
class AutoReleaseDC {
public:
AutoReleaseDC(HDC hdc) : mDC(hdc) {
SetGraphicsMode(hdc, GM_ADVANCED);
}
~AutoReleaseDC() { ReleaseDC(nsnull, mDC); }
HDC mDC;
};
class AutoPushPopFont {
public:
AutoPushPopFont(HDC hdc, HFONT aFont) : mDC(hdc), mFont(aFont) {
mOldFont = (HFONT)SelectObject(mDC, mFont);
}
~AutoPushPopFont() {
SelectObject(mDC, mOldFont);
DeleteObject(mFont);
}
HDC mDC;
HFONT mFont;
HFONT mOldFont;
};
/* static */
FontEntry*
FontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType, PRBool aItalic, PRUint16 aWeight, gfxUserFontData* aUserFontData, HDC hdc, LOGFONTW *aLogFont)
FontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType,
PRBool aItalic, PRUint16 aWeight,
gfxUserFontData* aUserFontData,
HDC hdc, LOGFONTW *aLogFont)
{
LOGFONTW logFont;
PRBool needRelease = PR_FALSE;
@ -594,19 +627,11 @@ FontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType,
FontEntry *fe;
fe = new FontEntry(aName);
fe->mFontType = aFontType;
fe->mUserFontData = aUserFontData;
fe->mItalic = aItalic;
fe->mWeight = aWeight;
if (fe->IsType1())
fe->mForceGDI = PR_TRUE;
fe = new FontEntry(aName, aFontType, aItalic, aWeight, aUserFontData);
if (!aLogFont) {
aLogFont = &logFont;
FontEntry::FillLogFont(aLogFont, fe, 0, aItalic);
FontEntry::FillLogFont(aLogFont, aName, aFontType, aItalic, aWeight, 0);
}
if (!hdc) {
@ -614,11 +639,11 @@ FontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType,
SetGraphicsMode(hdc, GM_ADVANCED);
needRelease = PR_TRUE;
}
HFONT font = CreateFontIndirectW(aLogFont);
if (font) {
HFONT oldFont = (HFONT)SelectObject(hdc, font);
AutoPushPopFont fontCleanup(hdc, font);
// ReadCMAP may change the values of mUnicodeFont and mSymbolFont
if (NS_FAILED(::ReadCMAP(hdc, fe))) {
@ -634,9 +659,6 @@ FontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType,
fe->mUnknownCMAP = PR_TRUE;
}
SelectObject(hdc, oldFont);
DeleteObject(font);
}
if (needRelease)
@ -645,9 +667,82 @@ FontEntry::CreateFontEntry(const nsAString& aName, gfxWindowsFontType aFontType,
return fe;
}
/* static */
FontEntry*
FontEntry::LoadLocalFont(const gfxProxyFontEntry &aProxyEntry,
const nsAString& aFullname)
{
// lookup name with CreateFontIndirect
HDC hdc = GetDC(nsnull);
AutoReleaseDC dcCleanup(hdc);
SetGraphicsMode(hdc, GM_ADVANCED);
LOGFONTW logFont;
memset(&logFont, 0, sizeof(LOGFONTW));
logFont.lfCharSet = DEFAULT_CHARSET;
PRUint32 namelen = PR_MIN(aFullname.Length(), LF_FACESIZE - 1);
memcpy(logFont.lfFaceName,
nsPromiseFlatString(aFullname).get(),
namelen * sizeof(PRUnichar));
logFont.lfFaceName[namelen] = 0;
HFONT font = CreateFontIndirectW(&logFont);
if (!font)
return nsnull;
// fetch fullname from name table (Windows takes swapped tag order)
const PRUint32 kNameTag = NS_SWAP32(TRUETYPE_TAG('n','a','m','e'));
nsAutoString fullName;
{
AutoPushPopFont fontCleanup(hdc, font);
DWORD len = GetFontData(hdc, kNameTag, 0, nsnull, 0);
if (len == GDI_ERROR || len == 0) // not a truetype font --
return nsnull; // so just ignore
nsAutoTArray<PRUint8,1024> nameData;
if (!nameData.AppendElements(len))
return nsnull;
PRUint8 *nameTable = nameData.Elements();
DWORD newLen = GetFontData(hdc, kNameTag, 0, nameTable, len);
if (newLen != len)
return nsnull;
nsresult rv;
rv = gfxFontUtils::ReadCanonicalName(nameData,
gfxFontUtils::NAME_ID_FULL,
fullName);
if (NS_FAILED(rv))
return nsnull;
}
// reject if different from canonical fullname
if (!aFullname.Equals(fullName))
return nsnull;
// create a new font entry
PRUint16 w = (aProxyEntry.mWeight == 0 ? 400 : aProxyEntry.mWeight);
PRBool isCFF = PR_FALSE; // jtdfix -- need to determine this
FontEntry *fe = FontEntry::CreateFontEntry(aFullname,
gfxWindowsFontType(isCFF ? GFX_FONT_TYPE_PS_OPENTYPE : GFX_FONT_TYPE_TRUETYPE) /*type*/,
PRUint32(aProxyEntry.mItalic ? FONT_STYLE_ITALIC : FONT_STYLE_NORMAL),
w, nsnull);
if (!fe)
return fe;
fe->mUserFont = PR_TRUE;
return fe;
}
void
FontEntry::FillLogFont(LOGFONTW *aLogFont, FontEntry *aFontEntry, gfxFloat aSize, PRBool aItalic)
FontEntry::FillLogFont(LOGFONTW *aLogFont, const nsAString& aName,
gfxWindowsFontType aFontType, PRBool aItalic,
PRUint16 aWeight, gfxFloat aSize)
{
#define CLIP_TURNOFF_FONTASSOCIATION 0x40
@ -663,7 +758,7 @@ FontEntry::FillLogFont(LOGFONTW *aLogFont, FontEntry *aFontEntry, gfxFloat aSize
aLogFont->lfUnderline = FALSE;
aLogFont->lfStrikeOut = FALSE;
aLogFont->lfCharSet = DEFAULT_CHARSET;
aLogFont->lfOutPrecision = FontTypeToOutPrecision(aFontEntry->mFontType);
aLogFont->lfOutPrecision = FontTypeToOutPrecision(aFontType);
aLogFont->lfClipPrecision = CLIP_TURNOFF_FONTASSOCIATION;
aLogFont->lfQuality = DEFAULT_QUALITY;
aLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
@ -672,10 +767,10 @@ FontEntry::FillLogFont(LOGFONTW *aLogFont, FontEntry *aFontEntry, gfxFloat aSize
// it may give us a regular one based on weight. Windows should
// do fake italic for us in that case.
aLogFont->lfItalic = aItalic;
aLogFont->lfWeight = aFontEntry->mWeight;
aLogFont->lfWeight = aWeight;
int len = PR_MIN(aFontEntry->Name().Length(), LF_FACESIZE - 1);
memcpy(aLogFont->lfFaceName, nsPromiseFlatString(aFontEntry->Name()).get(), len * 2);
int len = PR_MIN(aName.Length(), LF_FACESIZE - 1);
memcpy(aLogFont->lfFaceName, nsPromiseFlatString(aName).get(), len * 2);
aLogFont->lfFaceName[len] = '\0';
}
@ -961,7 +1056,23 @@ gfxWindowsFont::ComputeMetrics()
void
gfxWindowsFont::FillLogFont(gfxFloat aSize)
{
FontEntry::FillLogFont(&mLogFont, GetFontEntry(), aSize, (GetStyle()->style & (FONT_STYLE_ITALIC | FONT_STYLE_OBLIQUE)));
FontEntry *fe = GetFontEntry();
PRBool isItalic;
isItalic = (GetStyle()->style & (FONT_STYLE_ITALIC | FONT_STYLE_OBLIQUE));
PRUint16 weight = fe->Weight();
// if user font, disable italics/bold if defined to be italics/bold face
// this avoids unwanted synthetic italics/bold
if (fe->mUserFont) {
if (fe->IsItalic())
isItalic = PR_FALSE; // avoid synthetic italic
if (fe->IsBold())
weight = 400; // avoid synthetic bold
}
FontEntry::FillLogFont(&mLogFont, fe->Name(), fe->mFontType, isItalic,
weight, aSize);
}

Просмотреть файл

@ -754,6 +754,7 @@ gfxFontEntry*
gfxWindowsPlatform::LookupLocalFont(const gfxProxyFontEntry *aProxyEntry,
const nsAString& aFontName)
{
#ifdef MOZ_FT2_FONTS
// walk over list of names
FullFontNameSearch data(aFontName);
@ -764,6 +765,9 @@ gfxWindowsPlatform::LookupLocalFont(const gfxProxyFontEntry *aProxyEntry,
ReleaseDC(nsnull, data.mDC);
return data.mFontEntry;
#else
return FontEntry::LoadLocalFont(*aProxyEntry, aFontName);
#endif
}
gfxFontEntry*
@ -771,8 +775,7 @@ gfxWindowsPlatform::MakePlatformFont(const gfxProxyFontEntry *aProxyEntry,
nsISupports *aLoader,
const PRUint8 *aFontData, PRUint32 aLength)
{
return FontEntry::CreateFontEntry(*aProxyEntry, aLoader,
aFontData, aLength);
return FontEntry::LoadFont(*aProxyEntry, aLoader, aFontData, aLength);
}
PRBool

Просмотреть файл

@ -25,15 +25,18 @@ HTTP(..) == src-list-format-4.html src-list-format-1-ref.html
HTTP(..) == src-list-format-5.html src-list-format-2-ref.html
HTTP(..) == src-list-format-6.html src-list-format-3-ref.html
# assumes AAT fonts are only supported on MacOS
skip-if(MOZ_WIDGET_TOOLKIT=="cocoa") HTTP(..) == src-list-format-7.html src-list-format-2-ref.html
skip-if(MOZ_WIDGET_TOOLKIT!="cocoa") HTTP(..) == src-list-format-7.html src-list-format-3-ref.html
skip-if(MOZ_WIDGET_TOOLKIT=="windows") == src-list-local-full.html src-list-local-full-ref.html # bug 468387 (windows)
skip-if(MOZ_WIDGET_TOOLKIT=="windows") == src-list-local-full-quotes.html src-list-local-full-ref.html # bug 468387 (windows)
random-if(MOZ_WIDGET_TOOLKIT=="cocoa") HTTP(..) == src-list-format-7.html src-list-format-2-ref.html
random-if(MOZ_WIDGET_TOOLKIT!="cocoa") HTTP(..) == src-list-format-7.html src-list-format-3-ref.html
== src-list-local-full.html src-list-local-full-ref.html
== src-list-local-full-quotes.html src-list-local-full-ref.html
HTTP(..) == src-list-local-fallback.html src-list-local-fallback-ref.html
# localized full fontnames should *not* match, only English ones (need locale-invariant key)
random-if(MOZ_WIDGET_TOOLKIT=="gtk2") HTTP(..) == src-list-local-localized.html src-list-local-localized-ref.html
# Postscript name lookup only supported on MacOS currently
skip-if(MOZ_WIDGET_TOOLKIT!="cocoa") == src-list-local-ps.html src-list-local-full-ref.html
skip-if(MOZ_WIDGET_TOOLKIT!="cocoa") == helveticaneue-ultra.html helveticaneue-ultra-ref.html
random-if(MOZ_WIDGET_TOOLKIT!="cocoa") == src-list-local-ps.html src-list-local-full-ref.html
random-if(MOZ_WIDGET_TOOLKIT!="cocoa") == helveticaneue-ultra.html helveticaneue-ultra-ref.html
# Arabic support requires AAT fonts under Mac OS, OpenType otherwise
random-if(MOZ_WIDGET_TOOLKIT!="cocoa") HTTP(..) == src-format-arabic.html src-format-arabic-aat-ref.html
@ -80,5 +83,5 @@ HTTP(..) == ahem-metrics-1.html ahem-metrics-1-ref.html
HTTP(..) == ex-unit-1.html ex-unit-1-ref.html
HTTP(..) == ex-unit-1-dynamic.html ex-unit-1-ref.html
fails-if(MOZ_WIDGET_TOOLKIT=="windows") == local-1.html local-1-ref.html # bug 468387
fails-if(MOZ_WIDGET_TOOLKIT=="windows") HTTP(..) == synthetic-weight-style.html synthetic-weight-style-ref.html # bug 468387
== local-1.html local-1-ref.html
HTTP(..) == synthetic-weight-style.html synthetic-weight-style-ref.html

Просмотреть файл

@ -0,0 +1,378 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Localized fullnames</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
@font-face {
font-family: testbackup;
src: url(../fonts/markA.ttf);
}
body {
margin: 50px;
font-size: 18px;
font-family: Futura, Helvetica, Calibri, Verdana, sans-serif;
}
table {
font-family: testbackup, serif;
border-collapse: collapse;
margin-left: 1em;
}
td + td {
padding-left: 1em;
}
</style>
</head>
<body>
<h4>The letter A should not appear below independent of locale:</h4>
<p>(Mouse over to see local name used)</p>
<table>
<tr>
<td class="test0">AA</td>
<td class="test1">AA</td>
<td class="test2">AA</td>
<td class="test3">AA</td>
<td class="test4">AA</td>
<td class="test5">AA</td>
<td class="test6">AA</td>
<td class="test7">AA</td>
<td class="test8">AA</td>
<td class="test9">AA</td>
</tr>
<tr>
<td class="test10">AA</td>
<td class="test11">AA</td>
<td class="test12">AA</td>
<td class="test13">AA</td>
<td class="test14">AA</td>
<td class="test15">AA</td>
<td class="test16">AA</td>
<td class="test17">AA</td>
<td class="test18">AA</td>
<td class="test19">AA</td>
</tr>
<tr>
<td class="test20">AA</td>
<td class="test21">AA</td>
<td class="test22">AA</td>
<td class="test23">AA</td>
<td class="test24">AA</td>
<td class="test25">AA</td>
<td class="test26">AA</td>
<td class="test27">AA</td>
<td class="test28">AA</td>
<td class="test29">AA</td>
</tr>
<tr>
<td class="test30">AA</td>
<td class="test31">AA</td>
<td class="test32">AA</td>
<td class="test33">AA</td>
<td class="test34">AA</td>
<td class="test35">AA</td>
<td class="test36">AA</td>
<td class="test37">AA</td>
<td class="test38">AA</td>
<td class="test39">AA</td>
</tr>
<tr>
<td class="test40">AA</td>
<td class="test41">AA</td>
<td class="test42">AA</td>
<td class="test43">AA</td>
<td class="test44">AA</td>
<td class="test45">AA</td>
<td class="test46">AA</td>
<td class="test47">AA</td>
<td class="test48">AA</td>
<td class="test49">AA</td>
</tr>
<tr>
<td class="test50">AA</td>
<td class="test51">AA</td>
<td class="test52">AA</td>
<td class="test53">AA</td>
<td class="test54">AA</td>
<td class="test55">AA</td>
<td class="test56">AA</td>
<td class="test57">AA</td>
<td class="test58">AA</td>
<td class="test59">AA</td>
</tr>
<tr>
<td class="test60">AA</td>
<td class="test61">AA</td>
<td class="test62">AA</td>
<td class="test63">AA</td>
<td class="test64">AA</td>
<td class="test65">AA</td>
<td class="test66">AA</td>
<td class="test67">AA</td>
<td class="test68">AA</td>
<td class="test69">AA</td>
</tr>
<tr>
<td class="test70">AA</td>
<td class="test71">AA</td>
<td class="test72">AA</td>
<td class="test73">AA</td>
<td class="test74">AA</td>
<td class="test75">AA</td>
<td class="test76">AA</td>
<td class="test77">AA</td>
<td class="test78">AA</td>
<td class="test79">AA</td>
</tr>
<tr>
<td class="test80">AA</td>
<td class="test81">AA</td>
<td class="test82">AA</td>
<td class="test83">AA</td>
<td class="test84">AA</td>
<td class="test85">AA</td>
<td class="test86">AA</td>
<td class="test87">AA</td>
<td class="test88">AA</td>
<td class="test89">AA</td>
</tr>
<tr>
<td class="test90">AA</td>
<td class="test91">AA</td>
<td class="test92">AA</td>
<td class="test93">AA</td>
<td class="test94">AA</td>
<td class="test95">AA</td>
<td class="test96">AA</td>
<td class="test97">AA</td>
<td class="test98">AA</td>
<td class="test99">AA</td>
</tr>
<tr>
<td class="test100">AA</td>
<td class="test101">AA</td>
<td class="test102">AA</td>
<td class="test103">AA</td>
<td class="test104">AA</td>
<td class="test105">AA</td>
<td class="test106">AA</td>
<td class="test107">AA</td>
<td class="test108">AA</td>
<td class="test109">AA</td>
</tr>
<tr>
<td class="test110">AA</td>
<td class="test111">AA</td>
<td class="test112">AA</td>
<td class="test113">AA</td>
<td class="test114">AA</td>
<td class="test115">AA</td>
<td class="test116">AA</td>
<td class="test117">AA</td>
<td class="test118">AA</td>
<td class="test119">AA</td>
</tr>
<tr>
<td class="test120">AA</td>
<td class="test121">AA</td>
<td class="test122">AA</td>
<td class="test123">AA</td>
<td class="test124">AA</td>
<td class="test125">AA</td>
<td class="test126">AA</td>
<td class="test127">AA</td>
<td class="test128">AA</td>
<td class="test129">AA</td>
</tr>
<tr>
<td class="test130">AA</td>
<td class="test131">AA</td>
<td class="test132">AA</td>
<td class="test133">AA</td>
<td class="test134">AA</td>
<td class="test135">AA</td>
<td class="test136">AA</td>
<td class="test137">AA</td>
<td class="test138">AA</td>
<td class="test139">AA</td>
</tr>
<tr>
<td class="test140">AA</td>
<td class="test141">AA</td>
<td class="test142">AA</td>
<td class="test143">AA</td>
<td class="test144">AA</td>
<td class="test145">AA</td>
<td class="test146">AA</td>
<td class="test147">AA</td>
<td class="test148">AA</td>
<td class="test149">AA</td>
</tr>
<tr>
<td class="test150">AA</td>
<td class="test151">AA</td>
<td class="test152">AA</td>
<td class="test153">AA</td>
<td class="test154">AA</td>
<td class="test155">AA</td>
<td class="test156">AA</td>
<td class="test157">AA</td>
<td class="test158">AA</td>
<td class="test159">AA</td>
</tr>
<tr>
<td class="test160">AA</td>
<td class="test161">AA</td>
<td class="test162">AA</td>
<td class="test163">AA</td>
<td class="test164">AA</td>
<td class="test165">AA</td>
<td class="test166">AA</td>
<td class="test167">AA</td>
<td class="test168">AA</td>
<td class="test169">AA</td>
</tr>
<tr>
<td class="test170">AA</td>
<td class="test171">AA</td>
<td class="test172">AA</td>
<td class="test173">AA</td>
<td class="test174">AA</td>
<td class="test175">AA</td>
<td class="test176">AA</td>
<td class="test177">AA</td>
<td class="test178">AA</td>
<td class="test179">AA</td>
</tr>
<tr>
<td class="test180">AA</td>
<td class="test181">AA</td>
<td class="test182">AA</td>
<td class="test183">AA</td>
<td class="test184">AA</td>
<td class="test185">AA</td>
<td class="test186">AA</td>
<td class="test187">AA</td>
<td class="test188">AA</td>
<td class="test189">AA</td>
</tr>
<tr>
<td class="test190">AA</td>
<td class="test191">AA</td>
<td class="test192">AA</td>
<td class="test193">AA</td>
<td class="test194">AA</td>
<td class="test195">AA</td>
<td class="test196">AA</td>
<td class="test197">AA</td>
<td class="test198">AA</td>
<td class="test199">AA</td>
</tr>
<tr>
<td class="test200">AA</td>
<td class="test201">AA</td>
<td class="test202">AA</td>
<td class="test203">AA</td>
<td class="test204">AA</td>
<td class="test205">AA</td>
<td class="test206">AA</td>
<td class="test207">AA</td>
<td class="test208">AA</td>
<td class="test209">AA</td>
</tr>
<tr>
<td class="test210">AA</td>
<td class="test211">AA</td>
<td class="test212">AA</td>
<td class="test213">AA</td>
<td class="test214">AA</td>
<td class="test215">AA</td>
<td class="test216">AA</td>
<td class="test217">AA</td>
<td class="test218">AA</td>
<td class="test219">AA</td>
</tr>
<tr>
<td class="test220">AA</td>
<td class="test221">AA</td>
<td class="test222">AA</td>
<td class="test223">AA</td>
<td class="test224">AA</td>
<td class="test225">AA</td>
<td class="test226">AA</td>
<td class="test227">AA</td>
<td class="test228">AA</td>
<td class="test229">AA</td>
</tr>
<tr>
<td class="test230">AA</td>
<td class="test231">AA</td>
<td class="test232">AA</td>
<td class="test233">AA</td>
<td class="test234">AA</td>
<td class="test235">AA</td>
<td class="test236">AA</td>
<td class="test237">AA</td>
<td class="test238">AA</td>
<td class="test239">AA</td>
</tr>
<tr>
<td class="test240">AA</td>
<td class="test241">AA</td>
<td class="test242">AA</td>
<td class="test243">AA</td>
<td class="test244">AA</td>
<td class="test245">AA</td>
<td class="test246">AA</td>
<td class="test247">AA</td>
<td class="test248">AA</td>
<td class="test249">AA</td>
</tr>
<tr>
<td class="test250">AA</td>
<td class="test251">AA</td>
<td class="test252">AA</td>
<td class="test253">AA</td>
<td class="test254">AA</td>
<td class="test255">AA</td>
<td class="test256">AA</td>
<td class="test257">AA</td>
<td class="test258">AA</td>
<td class="test259">AA</td>
</tr>
<tr>
<td class="test260">AA</td>
<td class="test261">AA</td>
<td class="test262">AA</td>
<td class="test263">AA</td>
<td class="test264">AA</td>
<td class="test265">AA</td>
<td class="test266">AA</td>
<td class="test267">AA</td>
<td class="test268">AA</td>
<td class="test269">AA</td>
</tr>
<tr>
<td class="test270">AA</td>
<td class="test271">AA</td>
<td class="test272">AA</td>
<td class="test273">AA</td>
<td class="test274">AA</td>
<td class="test275">AA</td>
<td class="test276">AA</td>
<td class="test277">AA</td>
<td class="test278">AA</td>
</tr>
</table>
</body>
</html>

Просмотреть файл

@ -0,0 +1,939 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Localized fullnames</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
@font-face {
font-family: testbackup;
src: url(../fonts/markA.ttf);
}
body {
margin: 50px;
font-size: 18px;
font-family: Futura, Helvetica, Calibri, Verdana, sans-serif;
}
table {
font-family: testbackup, serif;
border-collapse: collapse;
margin-left: 1em;
}
td + td {
padding-left: 1em;
}
</style>
<style type="text/css">
@font-face { font-family: test0; src: local("#궁서체 일반체"); }
.test0 { font-family: test0, testbackup; }
@font-face { font-family: test1; src: local("#헤드라인A 일반체"); }
.test1 { font-family: test1, testbackup; }
@font-face { font-family: test2; src: local("AppleGothic 일반체"); }
.test2 { font-family: test2, testbackup; }
@font-face { font-family: test3; src: local("Arial Black Normal"); }
.test3 { font-family: test3, testbackup; }
@font-face { font-family: test4; src: local("Arial Black Standard"); }
.test4 { font-family: test4, testbackup; }
@font-face { font-family: test5; src: local("Arial Black normal"); }
.test5 { font-family: test5, testbackup; }
@font-face { font-family: test6; src: local("Arial Black obyčejné"); }
.test6 { font-family: test6, testbackup; }
@font-face { font-family: test7; src: local("Arial Black Обычный"); }
.test7 { font-family: test7, testbackup; }
@font-face { font-family: test8; src: local("Arial Black Κανονικά"); }
.test8 { font-family: test8, testbackup; }
@font-face { font-family: test9; src: local("Arial Corsivo"); }
.test9 { font-family: test9, testbackup; }
@font-face { font-family: test10; src: local("Arial Cursief"); }
.test10 { font-family: test10, testbackup; }
@font-face { font-family: test11; src: local("Arial Cursiva"); }
.test11 { font-family: test11, testbackup; }
@font-face { font-family: test12; src: local("Arial Dőlt"); }
.test12 { font-family: test12, testbackup; }
@font-face { font-family: test13; src: local("Arial Etzana"); }
.test13 { font-family: test13, testbackup; }
@font-face { font-family: test14; src: local("Arial Fet Kursiv"); }
.test14 { font-family: test14, testbackup; }
@font-face { font-family: test15; src: local("Arial Fet"); }
.test15 { font-family: test15, testbackup; }
@font-face { font-family: test16; src: local("Arial Fett Kursiv"); }
.test16 { font-family: test16, testbackup; }
@font-face { font-family: test17; src: local("Arial Fett"); }
.test17 { font-family: test17, testbackup; }
@font-face { font-family: test18; src: local("Arial Félkövér dőlt"); }
.test18 { font-family: test18, testbackup; }
@font-face { font-family: test19; src: local("Arial Félkövér"); }
.test19 { font-family: test19, testbackup; }
@font-face { font-family: test20; src: local("Arial Gras Italique"); }
.test20 { font-family: test20, testbackup; }
@font-face { font-family: test21; src: local("Arial Gras"); }
.test21 { font-family: test21, testbackup; }
@font-face { font-family: test22; src: local("Arial Grassetto Corsivo"); }
.test22 { font-family: test22, testbackup; }
@font-face { font-family: test23; src: local("Arial Grassetto"); }
.test23 { font-family: test23, testbackup; }
@font-face { font-family: test24; src: local("Arial Halvfet Kursiv"); }
.test24 { font-family: test24, testbackup; }
@font-face { font-family: test25; src: local("Arial Halvfet"); }
.test25 { font-family: test25, testbackup; }
@font-face { font-family: test26; src: local("Arial Italique"); }
.test26 { font-family: test26, testbackup; }
@font-face { font-family: test27; src: local("Arial Itálico"); }
.test27 { font-family: test27, testbackup; }
@font-face { font-family: test28; src: local("Arial Kalın İtalik"); }
.test28 { font-family: test28, testbackup; }
@font-face { font-family: test29; src: local("Arial Kalın"); }
.test29 { font-family: test29, testbackup; }
@font-face { font-family: test30; src: local("Arial Krepko poševno"); }
.test30 { font-family: test30, testbackup; }
@font-face { font-family: test31; src: local("Arial Krepko"); }
.test31 { font-family: test31, testbackup; }
@font-face { font-family: test32; src: local("Arial Kursiv"); }
.test32 { font-family: test32, testbackup; }
@font-face { font-family: test33; src: local("Arial Kursivoitu"); }
.test33 { font-family: test33, testbackup; }
@font-face { font-family: test34; src: local("Arial Kursywa"); }
.test34 { font-family: test34, testbackup; }
@font-face { font-family: test35; src: local("Arial Kurzíva"); }
.test35 { font-family: test35, testbackup; }
@font-face { font-family: test36; src: local("Arial Lihavoitu Kursivoi"); }
.test36 { font-family: test36, testbackup; }
@font-face { font-family: test37; src: local("Arial Lihavoitu"); }
.test37 { font-family: test37, testbackup; }
@font-face { font-family: test38; src: local("Arial Lodi etzana"); }
.test38 { font-family: test38, testbackup; }
@font-face { font-family: test39; src: local("Arial Lodia"); }
.test39 { font-family: test39, testbackup; }
@font-face { font-family: test40; src: local("Arial Negreta"); }
.test40 { font-family: test40, testbackup; }
@font-face { font-family: test41; src: local("Arial Negrita Cursiva"); }
.test41 { font-family: test41, testbackup; }
@font-face { font-family: test42; src: local("Arial Negrita"); }
.test42 { font-family: test42, testbackup; }
@font-face { font-family: test43; src: local("Arial Negrito Itálico"); }
.test43 { font-family: test43, testbackup; }
@font-face { font-family: test44; src: local("Arial Negrito"); }
.test44 { font-family: test44, testbackup; }
@font-face { font-family: test45; src: local("Arial Pogrubiona kursywa"); }
.test45 { font-family: test45, testbackup; }
@font-face { font-family: test46; src: local("Arial Pogrubiony"); }
.test46 { font-family: test46, testbackup; }
@font-face { font-family: test47; src: local("Arial Poševno"); }
.test47 { font-family: test47, testbackup; }
@font-face { font-family: test48; src: local("Arial Tučná kurzíva"); }
.test48 { font-family: test48, testbackup; }
@font-face { font-family: test49; src: local("Arial Tučné"); }
.test49 { font-family: test49, testbackup; }
@font-face { font-family: test50; src: local("Arial Vet Cursief"); }
.test50 { font-family: test50, testbackup; }
@font-face { font-family: test51; src: local("Arial Vet"); }
.test51 { font-family: test51, testbackup; }
@font-face { font-family: test52; src: local("Arial fed kursiv"); }
.test52 { font-family: test52, testbackup; }
@font-face { font-family: test53; src: local("Arial fed"); }
.test53 { font-family: test53, testbackup; }
@font-face { font-family: test54; src: local("Arial kursiv"); }
.test54 { font-family: test54, testbackup; }
@font-face { font-family: test55; src: local("Arial kurzíva"); }
.test55 { font-family: test55, testbackup; }
@font-face { font-family: test56; src: local("Arial nghiêng đậm"); }
.test56 { font-family: test56, testbackup; }
@font-face { font-family: test57; src: local("Arial nghiêng"); }
.test57 { font-family: test57, testbackup; }
@font-face { font-family: test58; src: local("Arial tučné kurzíva"); }
.test58 { font-family: test58, testbackup; }
@font-face { font-family: test59; src: local("Arial tučné"); }
.test59 { font-family: test59, testbackup; }
@font-face { font-family: test60; src: local("Arial İtalik"); }
.test60 { font-family: test60, testbackup; }
@font-face { font-family: test61; src: local("Arial đậm"); }
.test61 { font-family: test61, testbackup; }
@font-face { font-family: test62; src: local("Arial Έντονα Πλάγια"); }
.test62 { font-family: test62, testbackup; }
@font-face { font-family: test63; src: local("Arial Έντονα"); }
.test63 { font-family: test63, testbackup; }
@font-face { font-family: test64; src: local("Arial Πλάγια"); }
.test64 { font-family: test64, testbackup; }
@font-face { font-family: test65; src: local("Arial Курсив"); }
.test65 { font-family: test65, testbackup; }
@font-face { font-family: test66; src: local("Arial Полужирный Курсив"); }
.test66 { font-family: test66, testbackup; }
@font-face { font-family: test67; src: local("Arial Полужирный"); }
.test67 { font-family: test67, testbackup; }
@font-face { font-family: test68; src: local("Brush Script MT Πλάγια"); }
.test68 { font-family: test68, testbackup; }
@font-face { font-family: test69; src: local("Brush Script MT Курсив"); }
.test69 { font-family: test69, testbackup; }
@font-face { font-family: test70; src: local("Century Gothic Halvfet"); }
.test70 { font-family: test70, testbackup; }
@font-face { font-family: test71; src: local("Century Gothic Italique"); }
.test71 { font-family: test71, testbackup; }
@font-face { font-family: test72; src: local("Century Gothic Kalın"); }
.test72 { font-family: test72, testbackup; }
@font-face { font-family: test73; src: local("Century Gothic Krepko poševno"); }
.test73 { font-family: test73, testbackup; }
@font-face { font-family: test74; src: local("Century Gothic Krepko"); }
.test74 { font-family: test74, testbackup; }
@font-face { font-family: test75; src: local("Century Gothic Kursiv"); }
.test75 { font-family: test75, testbackup; }
@font-face { font-family: test76; src: local("Comic Sans MS Negreta"); }
.test76 { font-family: test76, testbackup; }
@font-face { font-family: test77; src: local("Comic Sans MS Έντονα"); }
.test77 { font-family: test77, testbackup; }
@font-face { font-family: test78; src: local("Courier Carregado"); }
.test78 { font-family: test78, testbackup; }
@font-face { font-family: test79; src: local("Courier Fet"); }
.test79 { font-family: test79, testbackup; }
@font-face { font-family: test80; src: local("Courier Fett"); }
.test80 { font-family: test80, testbackup; }
@font-face { font-family: test81; src: local("Courier Gras"); }
.test81 { font-family: test81, testbackup; }
@font-face { font-family: test82; src: local("Courier lihava"); }
.test82 { font-family: test82, testbackup; }
@font-face { font-family: test83; src: local("Courier vet"); }
.test83 { font-family: test83, testbackup; }
@font-face { font-family: test84; src: local("Courier ‬עבה"); }
.test84 { font-family: test84, testbackup; }
@font-face { font-family: test85; src: local("Courier ‬أسود"); }
.test85 { font-family: test85, testbackup; }
@font-face { font-family: test86; src: local("Courier ‬برجسته"); }
.test86 { font-family: test86, testbackup; }
@font-face { font-family: test87; src: local("EucrosiaUPC Полужирный"); }
.test87 { font-family: test87, testbackup; }
@font-face { font-family: test88; src: local("Franklin Gothic Medium Kursiv"); }
.test88 { font-family: test88, testbackup; }
@font-face { font-family: test89; src: local("Garamond Kursywa"); }
.test89 { font-family: test89, testbackup; }
@font-face { font-family: test90; src: local("Garamond Kurzíva"); }
.test90 { font-family: test90, testbackup; }
@font-face { font-family: test91; src: local("Georgia Italique"); }
.test91 { font-family: test91, testbackup; }
@font-face { font-family: test92; src: local("Georgia Itálico"); }
.test92 { font-family: test92, testbackup; }
@font-face { font-family: test93; src: local("Georgia Kalın İtalik"); }
.test93 { font-family: test93, testbackup; }
@font-face { font-family: test94; src: local("HGP明朝B"); }
.test94 { font-family: test94, testbackup; }
@font-face { font-family: test95; src: local("HGP明朝E"); }
.test95 { font-family: test95, testbackup; }
@font-face { font-family: test96; src: local("HGPゴシックE"); }
.test96 { font-family: test96, testbackup; }
@font-face { font-family: test97; src: local("HGPゴシックM"); }
.test97 { font-family: test97, testbackup; }
@font-face { font-family: test98; src: local("HGP創英角ゴシックUB"); }
.test98 { font-family: test98, testbackup; }
@font-face { font-family: test99; src: local("HGS明朝B"); }
.test99 { font-family: test99, testbackup; }
@font-face { font-family: test100; src: local("HGS明朝E"); }
.test100 { font-family: test100, testbackup; }
@font-face { font-family: test101; src: local("HGS行書体"); }
.test101 { font-family: test101, testbackup; }
@font-face { font-family: test102; src: local("HGS教科書体"); }
.test102 { font-family: test102, testbackup; }
@font-face { font-family: test103; src: local("HGSゴシックE"); }
.test103 { font-family: test103, testbackup; }
@font-face { font-family: test104; src: local("HGSゴシックM"); }
.test104 { font-family: test104, testbackup; }
@font-face { font-family: test105; src: local("HGS創英プレゼンスEB"); }
.test105 { font-family: test105, testbackup; }
@font-face { font-family: test106; src: local("HG明朝B"); }
.test106 { font-family: test106, testbackup; }
@font-face { font-family: test107; src: local("HG正楷書体-PRO"); }
.test107 { font-family: test107, testbackup; }
@font-face { font-family: test108; src: local("HGゴシックE"); }
.test108 { font-family: test108, testbackup; }
@font-face { font-family: test109; src: local("HGゴシックM"); }
.test109 { font-family: test109, testbackup; }
@font-face { font-family: test110; src: local("HG丸ゴシックM-PRO"); }
.test110 { font-family: test110, testbackup; }
@font-face { font-family: test111; src: local("HG創英プレゼンスEB"); }
.test111 { font-family: test111, testbackup; }
@font-face { font-family: test112; src: local("Helvetica Carregado"); }
.test112 { font-family: test112, testbackup; }
@font-face { font-family: test113; src: local("Helvetica ‬עבה"); }
.test113 { font-family: test113, testbackup; }
@font-face { font-family: test114; src: local("Helvetica ‬أسود"); }
.test114 { font-family: test114, testbackup; }
@font-face { font-family: test115; src: local("Helvetica ‬برجسته"); }
.test115 { font-family: test115, testbackup; }
@font-face { font-family: test116; src: local("Osaka等幅"); }
.test116 { font-family: test116, testbackup; }
@font-face { font-family: test117; src: local("Thonburi Carregado"); }
.test117 { font-family: test117, testbackup; }
@font-face { font-family: test118; src: local("Thonburi Gras"); }
.test118 { font-family: test118, testbackup; }
@font-face { font-family: test119; src: local("Thonburi vet"); }
.test119 { font-family: test119, testbackup; }
@font-face { font-family: test120; src: local("Times Cursiva"); }
.test120 { font-family: test120, testbackup; }
@font-face { font-family: test121; src: local("Times Gras"); }
.test121 { font-family: test121, testbackup; }
@font-face { font-family: test122; src: local("Times Negrita"); }
.test122 { font-family: test122, testbackup; }
@font-face { font-family: test123; src: local("Times New Roman Corsivo"); }
.test123 { font-family: test123, testbackup; }
@font-face { font-family: test124; src: local("Times New Roman Cursief"); }
.test124 { font-family: test124, testbackup; }
@font-face { font-family: test125; src: local("Times New Roman Cursiva"); }
.test125 { font-family: test125, testbackup; }
@font-face { font-family: test126; src: local("Times New Roman Dőlt"); }
.test126 { font-family: test126, testbackup; }
@font-face { font-family: test127; src: local("Times New Roman Etzana"); }
.test127 { font-family: test127, testbackup; }
@font-face { font-family: test128; src: local("Times New Roman Fet Kursiv"); }
.test128 { font-family: test128, testbackup; }
@font-face { font-family: test129; src: local("Times New Roman Fet"); }
.test129 { font-family: test129, testbackup; }
@font-face { font-family: test130; src: local("Times New Roman Fett Kursiv"); }
.test130 { font-family: test130, testbackup; }
@font-face { font-family: test131; src: local("Times New Roman Fett"); }
.test131 { font-family: test131, testbackup; }
@font-face { font-family: test132; src: local("Times New Roman Félkövér dőlt"); }
.test132 { font-family: test132, testbackup; }
@font-face { font-family: test133; src: local("Times New Roman Félkövér"); }
.test133 { font-family: test133, testbackup; }
@font-face { font-family: test134; src: local("Times New Roman Gras Italique"); }
.test134 { font-family: test134, testbackup; }
@font-face { font-family: test135; src: local("Times New Roman Gras"); }
.test135 { font-family: test135, testbackup; }
@font-face { font-family: test136; src: local("Times New Roman Grassetto Corsivo"); }
.test136 { font-family: test136, testbackup; }
@font-face { font-family: test137; src: local("Times New Roman Grassetto"); }
.test137 { font-family: test137, testbackup; }
@font-face { font-family: test138; src: local("Times New Roman Halvfet Kursiv"); }
.test138 { font-family: test138, testbackup; }
@font-face { font-family: test139; src: local("Times New Roman Halvfet"); }
.test139 { font-family: test139, testbackup; }
@font-face { font-family: test140; src: local("Times New Roman Italique"); }
.test140 { font-family: test140, testbackup; }
@font-face { font-family: test141; src: local("Times New Roman Itálico"); }
.test141 { font-family: test141, testbackup; }
@font-face { font-family: test142; src: local("Times New Roman Kalın İtalik"); }
.test142 { font-family: test142, testbackup; }
@font-face { font-family: test143; src: local("Times New Roman Kalın"); }
.test143 { font-family: test143, testbackup; }
@font-face { font-family: test144; src: local("Times New Roman Krepko poševno"); }
.test144 { font-family: test144, testbackup; }
@font-face { font-family: test145; src: local("Times New Roman Krepko"); }
.test145 { font-family: test145, testbackup; }
@font-face { font-family: test146; src: local("Times New Roman Kursiv"); }
.test146 { font-family: test146, testbackup; }
@font-face { font-family: test147; src: local("Times New Roman Kursivoitu"); }
.test147 { font-family: test147, testbackup; }
@font-face { font-family: test148; src: local("Times New Roman Kurzíva"); }
.test148 { font-family: test148, testbackup; }
@font-face { font-family: test149; src: local("Times New Roman Lihavoitu Kursivoi"); }
.test149 { font-family: test149, testbackup; }
@font-face { font-family: test150; src: local("Times New Roman Lihavoitu"); }
.test150 { font-family: test150, testbackup; }
@font-face { font-family: test151; src: local("Times New Roman Lodi etzana"); }
.test151 { font-family: test151, testbackup; }
@font-face { font-family: test152; src: local("Times New Roman Lodia"); }
.test152 { font-family: test152, testbackup; }
@font-face { font-family: test153; src: local("Times New Roman Negreta cursiva"); }
.test153 { font-family: test153, testbackup; }
@font-face { font-family: test154; src: local("Times New Roman Negreta"); }
.test154 { font-family: test154, testbackup; }
@font-face { font-family: test155; src: local("Times New Roman Negrita Cursiva"); }
.test155 { font-family: test155, testbackup; }
@font-face { font-family: test156; src: local("Times New Roman Negrita"); }
.test156 { font-family: test156, testbackup; }
@font-face { font-family: test157; src: local("Times New Roman Negrito Itálico"); }
.test157 { font-family: test157, testbackup; }
@font-face { font-family: test158; src: local("Times New Roman Negrito"); }
.test158 { font-family: test158, testbackup; }
@font-face { font-family: test159; src: local("Times New Roman Pogrubiona kursywa"); }
.test159 { font-family: test159, testbackup; }
@font-face { font-family: test160; src: local("Times New Roman Pogrubiona"); }
.test160 { font-family: test160, testbackup; }
@font-face { font-family: test161; src: local("Times New Roman Poševno"); }
.test161 { font-family: test161, testbackup; }
@font-face { font-family: test162; src: local("Times New Roman Tučná kurzíva"); }
.test162 { font-family: test162, testbackup; }
@font-face { font-family: test163; src: local("Times New Roman Tučné"); }
.test163 { font-family: test163, testbackup; }
@font-face { font-family: test164; src: local("Times New Roman Vet Cursief"); }
.test164 { font-family: test164, testbackup; }
@font-face { font-family: test165; src: local("Times New Roman Vet"); }
.test165 { font-family: test165, testbackup; }
@font-face { font-family: test166; src: local("Times New Roman cursiva"); }
.test166 { font-family: test166, testbackup; }
@font-face { font-family: test167; src: local("Times New Roman fed kursiv"); }
.test167 { font-family: test167, testbackup; }
@font-face { font-family: test168; src: local("Times New Roman fed"); }
.test168 { font-family: test168, testbackup; }
@font-face { font-family: test169; src: local("Times New Roman kursiv"); }
.test169 { font-family: test169, testbackup; }
@font-face { font-family: test170; src: local("Times New Roman kursywa"); }
.test170 { font-family: test170, testbackup; }
@font-face { font-family: test171; src: local("Times New Roman kurzíva"); }
.test171 { font-family: test171, testbackup; }
@font-face { font-family: test172; src: local("Times New Roman nghiêng đậm"); }
.test172 { font-family: test172, testbackup; }
@font-face { font-family: test173; src: local("Times New Roman nghiêng"); }
.test173 { font-family: test173, testbackup; }
@font-face { font-family: test174; src: local("Times New Roman tučné kurzíva"); }
.test174 { font-family: test174, testbackup; }
@font-face { font-family: test175; src: local("Times New Roman tučné"); }
.test175 { font-family: test175, testbackup; }
@font-face { font-family: test176; src: local("Times New Roman İtalik"); }
.test176 { font-family: test176, testbackup; }
@font-face { font-family: test177; src: local("Times New Roman đậm"); }
.test177 { font-family: test177, testbackup; }
@font-face { font-family: test178; src: local("Times New Roman Έντονα Πλάγια"); }
.test178 { font-family: test178, testbackup; }
@font-face { font-family: test179; src: local("Times New Roman Έντονα"); }
.test179 { font-family: test179, testbackup; }
@font-face { font-family: test180; src: local("Times New Roman Πλάγια"); }
.test180 { font-family: test180, testbackup; }
@font-face { font-family: test181; src: local("Times New Roman Курсив"); }
.test181 { font-family: test181, testbackup; }
@font-face { font-family: test182; src: local("Times New Roman Полужирный Курсив"); }
.test182 { font-family: test182, testbackup; }
@font-face { font-family: test183; src: local("Times New Roman Полужирный"); }
.test183 { font-family: test183, testbackup; }
@font-face { font-family: test184; src: local("Times grassetto"); }
.test184 { font-family: test184, testbackup; }
@font-face { font-family: test185; src: local("Verdana Corsivo"); }
.test185 { font-family: test185, testbackup; }
@font-face { font-family: test186; src: local("Verdana Cursief"); }
.test186 { font-family: test186, testbackup; }
@font-face { font-family: test187; src: local("Verdana Cursiva"); }
.test187 { font-family: test187, testbackup; }
@font-face { font-family: test188; src: local("Verdana Dőlt"); }
.test188 { font-family: test188, testbackup; }
@font-face { font-family: test189; src: local("Verdana Etzana"); }
.test189 { font-family: test189, testbackup; }
@font-face { font-family: test190; src: local("Verdana Fet Kursiv"); }
.test190 { font-family: test190, testbackup; }
@font-face { font-family: test191; src: local("Verdana Fet"); }
.test191 { font-family: test191, testbackup; }
@font-face { font-family: test192; src: local("Verdana Fett Kursiv"); }
.test192 { font-family: test192, testbackup; }
@font-face { font-family: test193; src: local("Verdana Fett"); }
.test193 { font-family: test193, testbackup; }
@font-face { font-family: test194; src: local("Verdana Félkövér dőlt"); }
.test194 { font-family: test194, testbackup; }
@font-face { font-family: test195; src: local("Verdana Félkövér"); }
.test195 { font-family: test195, testbackup; }
@font-face { font-family: test196; src: local("Verdana Gras Italique"); }
.test196 { font-family: test196, testbackup; }
@font-face { font-family: test197; src: local("Verdana Gras"); }
.test197 { font-family: test197, testbackup; }
@font-face { font-family: test198; src: local("Verdana Grassetto Corsivo"); }
.test198 { font-family: test198, testbackup; }
@font-face { font-family: test199; src: local("Verdana Grassetto"); }
.test199 { font-family: test199, testbackup; }
@font-face { font-family: test200; src: local("Verdana Halvfet Kursiv"); }
.test200 { font-family: test200, testbackup; }
@font-face { font-family: test201; src: local("Verdana Halvfet"); }
.test201 { font-family: test201, testbackup; }
@font-face { font-family: test202; src: local("Verdana Italique"); }
.test202 { font-family: test202, testbackup; }
@font-face { font-family: test203; src: local("Verdana Itálico"); }
.test203 { font-family: test203, testbackup; }
@font-face { font-family: test204; src: local("Verdana Kalın İtalik"); }
.test204 { font-family: test204, testbackup; }
@font-face { font-family: test205; src: local("Verdana Kalın"); }
.test205 { font-family: test205, testbackup; }
@font-face { font-family: test206; src: local("Verdana Krepko poševno"); }
.test206 { font-family: test206, testbackup; }
@font-face { font-family: test207; src: local("Verdana Krepko"); }
.test207 { font-family: test207, testbackup; }
@font-face { font-family: test208; src: local("Verdana Kursiv"); }
.test208 { font-family: test208, testbackup; }
@font-face { font-family: test209; src: local("Verdana Kursivoitu"); }
.test209 { font-family: test209, testbackup; }
@font-face { font-family: test210; src: local("Verdana Kursywa"); }
.test210 { font-family: test210, testbackup; }
@font-face { font-family: test211; src: local("Verdana Kurzíva"); }
.test211 { font-family: test211, testbackup; }
@font-face { font-family: test212; src: local("Verdana Lihavoitu Kursivoi"); }
.test212 { font-family: test212, testbackup; }
@font-face { font-family: test213; src: local("Verdana Lihavoitu"); }
.test213 { font-family: test213, testbackup; }
@font-face { font-family: test214; src: local("Verdana Lodi etzana"); }
.test214 { font-family: test214, testbackup; }
@font-face { font-family: test215; src: local("Verdana Lodia"); }
.test215 { font-family: test215, testbackup; }
@font-face { font-family: test216; src: local("Verdana Negreta cursiva"); }
.test216 { font-family: test216, testbackup; }
@font-face { font-family: test217; src: local("Verdana Negreta"); }
.test217 { font-family: test217, testbackup; }
@font-face { font-family: test218; src: local("Verdana Negrita Cursiva"); }
.test218 { font-family: test218, testbackup; }
@font-face { font-family: test219; src: local("Verdana Negrita"); }
.test219 { font-family: test219, testbackup; }
@font-face { font-family: test220; src: local("Verdana Negrito Itálico"); }
.test220 { font-family: test220, testbackup; }
@font-face { font-family: test221; src: local("Verdana Negrito"); }
.test221 { font-family: test221, testbackup; }
@font-face { font-family: test222; src: local("Verdana Pogrubiona kursywa"); }
.test222 { font-family: test222, testbackup; }
@font-face { font-family: test223; src: local("Verdana Pogrubiony"); }
.test223 { font-family: test223, testbackup; }
@font-face { font-family: test224; src: local("Verdana Poševno"); }
.test224 { font-family: test224, testbackup; }
@font-face { font-family: test225; src: local("Verdana Tučná kurzíva"); }
.test225 { font-family: test225, testbackup; }
@font-face { font-family: test226; src: local("Verdana Tučné"); }
.test226 { font-family: test226, testbackup; }
@font-face { font-family: test227; src: local("Verdana Vet Cursief"); }
.test227 { font-family: test227, testbackup; }
@font-face { font-family: test228; src: local("Verdana Vet"); }
.test228 { font-family: test228, testbackup; }
@font-face { font-family: test229; src: local("Verdana fed kursiv"); }
.test229 { font-family: test229, testbackup; }
@font-face { font-family: test230; src: local("Verdana fed"); }
.test230 { font-family: test230, testbackup; }
@font-face { font-family: test231; src: local("Verdana kursiv"); }
.test231 { font-family: test231, testbackup; }
@font-face { font-family: test232; src: local("Verdana kurzíva"); }
.test232 { font-family: test232, testbackup; }
@font-face { font-family: test233; src: local("Verdana tučné kurzíva"); }
.test233 { font-family: test233, testbackup; }
@font-face { font-family: test234; src: local("Verdana tučné"); }
.test234 { font-family: test234, testbackup; }
@font-face { font-family: test235; src: local("Verdana İtalik"); }
.test235 { font-family: test235, testbackup; }
@font-face { font-family: test236; src: local("Verdana Έντονα Πλάγια"); }
.test236 { font-family: test236, testbackup; }
@font-face { font-family: test237; src: local("Verdana Έντονα"); }
.test237 { font-family: test237, testbackup; }
@font-face { font-family: test238; src: local("Verdana Πλάγια"); }
.test238 { font-family: test238, testbackup; }
@font-face { font-family: test239; src: local("Verdana Курсив"); }
.test239 { font-family: test239, testbackup; }
@font-face { font-family: test240; src: local("Verdana Полужирный Курсив"); }
.test240 { font-family: test240, testbackup; }
@font-face { font-family: test241; src: local("Verdana Полужирный"); }
.test241 { font-family: test241, testbackup; }
@font-face { font-family: test242; src: local("儷宋 Pro"); }
.test242 { font-family: test242, testbackup; }
@font-face { font-family: test243; src: local("儷黑 Pro"); }
.test243 { font-family: test243, testbackup; }
@font-face { font-family: test244; src: local(" 明朝"); }
.test244 { font-family: test244, testbackup; }
@font-face { font-family: test245; src: local(" P明朝"); }
.test245 { font-family: test245, testbackup; }
@font-face { font-family: test246; src: local(" ゴシック"); }
.test246 { font-family: test246, testbackup; }
@font-face { font-family: test247; src: local(" Pゴシック"); }
.test247 { font-family: test247, testbackup; }
@font-face { font-family: test248; src: local("仿宋"); }
.test248 { font-family: test248, testbackup; }
@font-face { font-family: test249; src: local("楷体"); }
.test249 { font-family: test249, testbackup; }
@font-face { font-family: test250; src: local("굴림"); }
.test250 { font-family: test250, testbackup; }
@font-face { font-family: test251; src: local("궁서"); }
.test251 { font-family: test251, testbackup; }
@font-face { font-family: test252; src: local("돋움"); }
.test252 { font-family: test252, testbackup; }
@font-face { font-family: test253; src: local("바탕"); }
.test253 { font-family: test253, testbackup; }
@font-face { font-family: test254; src: local("標楷體"); }
.test254 { font-family: test254, testbackup; }
@font-face { font-family: test255; src: local("細明體"); }
.test255 { font-family: test255, testbackup; }
@font-face { font-family: test256; src: local("굴림체"); }
.test256 { font-family: test256, testbackup; }
@font-face { font-family: test257; src: local("바탕체"); }
.test257 { font-family: test257, testbackup; }
@font-face { font-family: test258; src: local("細明體-ExtB"); }
.test258 { font-family: test258, testbackup; }
@font-face { font-family: test259; src: local("細明體_HKSCS"); }
.test259 { font-family: test259, testbackup; }
@font-face { font-family: test260; src: local("メイリオ ボールド イタリック"); }
.test260 { font-family: test260, testbackup; }
@font-face { font-family: test261; src: local("メイリオ ボールド"); }
.test261 { font-family: test261, testbackup; }
@font-face { font-family: test262; src: local("メイリオ"); }
.test262 { font-family: test262, testbackup; }
@font-face { font-family: test263; src: local("华文仿宋"); }
.test263 { font-family: test263, testbackup; }
@font-face { font-family: test264; src: local("华文细黑"); }
.test264 { font-family: test264, testbackup; }
@font-face { font-family: test265; src: local("华文黑体"); }
.test265 { font-family: test265, testbackup; }
@font-face { font-family: test266; src: local("微软雅黑"); }
.test266 { font-family: test266, testbackup; }
@font-face { font-family: test267; src: local("新細明體"); }
.test267 { font-family: test267, testbackup; }
@font-face { font-family: test268; src: local("新細明體-ExtB"); }
.test268 { font-family: test268, testbackup; }
@font-face { font-family: test269; src: local("微軟正黑體 Bold"); }
.test269 { font-family: test269, testbackup; }
@font-face { font-family: test270; src: local("רעננה"); }
.test270 { font-family: test270, testbackup; }
@font-face { font-family: test271; src: local("微軟正黑體"); }
.test271 { font-family: test271, testbackup; }
@font-face { font-family: test272; src: local("蘋果儷中黑"); }
.test272 { font-family: test272, testbackup; }
@font-face { font-family: test273; src: local("蘋果儷細宋"); }
.test273 { font-family: test273, testbackup; }
@font-face { font-family: test274; src: local("ヒラギノ角ゴ Pro W3"); }
.test274 { font-family: test274, testbackup; }
@font-face { font-family: test275; src: local("ヒラギノ丸ゴ Pro W4"); }
.test275 { font-family: test275, testbackup; }
@font-face { font-family: test276; src: local("ヒラギノ明朝 Pro W6"); }
.test276 { font-family: test276, testbackup; }
@font-face { font-family: test277; src: local("ヒラギノ丸ゴ ProN W4"); }
.test277 { font-family: test277, testbackup; }
@font-face { font-family: test278; src: local("רעננה‭ Bold"); }
.test278 { font-family: test278, testbackup; }
</style>
</head>
<body>
<h4>The letter A should not appear below independent of locale:</h4>
<p>(Mouse over to see local name used)</p>
<table>
<tr>
<td class="test0" title="#궁서체 일반체">AA</td>
<td class="test1" title="#헤드라인A 일반체">AA</td>
<td class="test2" title="AppleGothic 일반체">AA</td>
<td class="test3" title="Arial Black Normal">AA</td>
<td class="test4" title="Arial Black Standard">AA</td>
<td class="test5" title="Arial Black normal">AA</td>
<td class="test6" title="Arial Black obyčejné">AA</td>
<td class="test7" title="Arial Black Обычный">AA</td>
<td class="test8" title="Arial Black Κανονικά">AA</td>
<td class="test9" title="Arial Corsivo">AA</td>
</tr>
<tr>
<td class="test10" title="Arial Cursief">AA</td>
<td class="test11" title="Arial Cursiva">AA</td>
<td class="test12" title="Arial Dőlt">AA</td>
<td class="test13" title="Arial Etzana">AA</td>
<td class="test14" title="Arial Fet Kursiv">AA</td>
<td class="test15" title="Arial Fet">AA</td>
<td class="test16" title="Arial Fett Kursiv">AA</td>
<td class="test17" title="Arial Fett">AA</td>
<td class="test18" title="Arial Félkövér dőlt">AA</td>
<td class="test19" title="Arial Félkövér">AA</td>
</tr>
<tr>
<td class="test20" title="Arial Gras Italique">AA</td>
<td class="test21" title="Arial Gras">AA</td>
<td class="test22" title="Arial Grassetto Corsivo">AA</td>
<td class="test23" title="Arial Grassetto">AA</td>
<td class="test24" title="Arial Halvfet Kursiv">AA</td>
<td class="test25" title="Arial Halvfet">AA</td>
<td class="test26" title="Arial Italique">AA</td>
<td class="test27" title="Arial Itálico">AA</td>
<td class="test28" title="Arial Kalın İtalik">AA</td>
<td class="test29" title="Arial Kalın">AA</td>
</tr>
<tr>
<td class="test30" title="Arial Krepko poševno">AA</td>
<td class="test31" title="Arial Krepko">AA</td>
<td class="test32" title="Arial Kursiv">AA</td>
<td class="test33" title="Arial Kursivoitu">AA</td>
<td class="test34" title="Arial Kursywa">AA</td>
<td class="test35" title="Arial Kurzíva">AA</td>
<td class="test36" title="Arial Lihavoitu Kursivoi">AA</td>
<td class="test37" title="Arial Lihavoitu">AA</td>
<td class="test38" title="Arial Lodi etzana">AA</td>
<td class="test39" title="Arial Lodia">AA</td>
</tr>
<tr>
<td class="test40" title="Arial Negreta">AA</td>
<td class="test41" title="Arial Negrita Cursiva">AA</td>
<td class="test42" title="Arial Negrita">AA</td>
<td class="test43" title="Arial Negrito Itálico">AA</td>
<td class="test44" title="Arial Negrito">AA</td>
<td class="test45" title="Arial Pogrubiona kursywa">AA</td>
<td class="test46" title="Arial Pogrubiony">AA</td>
<td class="test47" title="Arial Poševno">AA</td>
<td class="test48" title="Arial Tučná kurzíva">AA</td>
<td class="test49" title="Arial Tučné">AA</td>
</tr>
<tr>
<td class="test50" title="Arial Vet Cursief">AA</td>
<td class="test51" title="Arial Vet">AA</td>
<td class="test52" title="Arial fed kursiv">AA</td>
<td class="test53" title="Arial fed">AA</td>
<td class="test54" title="Arial kursiv">AA</td>
<td class="test55" title="Arial kurzíva">AA</td>
<td class="test56" title="Arial nghiêng đậm">AA</td>
<td class="test57" title="Arial nghiêng">AA</td>
<td class="test58" title="Arial tučné kurzíva">AA</td>
<td class="test59" title="Arial tučné">AA</td>
</tr>
<tr>
<td class="test60" title="Arial İtalik">AA</td>
<td class="test61" title="Arial đậm">AA</td>
<td class="test62" title="Arial Έντονα Πλάγια">AA</td>
<td class="test63" title="Arial Έντονα">AA</td>
<td class="test64" title="Arial Πλάγια">AA</td>
<td class="test65" title="Arial Курсив">AA</td>
<td class="test66" title="Arial Полужирный Курсив">AA</td>
<td class="test67" title="Arial Полужирный">AA</td>
<td class="test68" title="Brush Script MT Πλάγια">AA</td>
<td class="test69" title="Brush Script MT Курсив">AA</td>
</tr>
<tr>
<td class="test70" title="Century Gothic Halvfet">AA</td>
<td class="test71" title="Century Gothic Italique">AA</td>
<td class="test72" title="Century Gothic Kalın">AA</td>
<td class="test73" title="Century Gothic Krepko poševno">AA</td>
<td class="test74" title="Century Gothic Krepko">AA</td>
<td class="test75" title="Century Gothic Kursiv">AA</td>
<td class="test76" title="Comic Sans MS Negreta">AA</td>
<td class="test77" title="Comic Sans MS Έντονα">AA</td>
<td class="test78" title="Courier Carregado">AA</td>
<td class="test79" title="Courier Fet">AA</td>
</tr>
<tr>
<td class="test80" title="Courier Fett">AA</td>
<td class="test81" title="Courier Gras">AA</td>
<td class="test82" title="Courier lihava">AA</td>
<td class="test83" title="Courier vet">AA</td>
<td class="test84" title="Courier ‬עבה">AA</td>
<td class="test85" title="Courier ‬أسود">AA</td>
<td class="test86" title="Courier ‬برجسته">AA</td>
<td class="test87" title="EucrosiaUPC Полужирный">AA</td>
<td class="test88" title="Franklin Gothic Medium Kursiv">AA</td>
<td class="test89" title="Garamond Kursywa">AA</td>
</tr>
<tr>
<td class="test90" title="Garamond Kurzíva">AA</td>
<td class="test91" title="Georgia Italique">AA</td>
<td class="test92" title="Georgia Itálico">AA</td>
<td class="test93" title="Georgia Kalın İtalik">AA</td>
<td class="test94" title="HGP明朝B">AA</td>
<td class="test95" title="HGP明朝E">AA</td>
<td class="test96" title="HGPゴシックE">AA</td>
<td class="test97" title="HGPゴシックM">AA</td>
<td class="test98" title="HGP創英角ゴシックUB">AA</td>
<td class="test99" title="HGS明朝B">AA</td>
</tr>
<tr>
<td class="test100" title="HGS明朝E">AA</td>
<td class="test101" title="HGS行書体">AA</td>
<td class="test102" title="HGS教科書体">AA</td>
<td class="test103" title="HGSゴシックE">AA</td>
<td class="test104" title="HGSゴシックM">AA</td>
<td class="test105" title="HGS創英プレゼンスEB">AA</td>
<td class="test106" title="HG明朝B">AA</td>
<td class="test107" title="HG正楷書体-PRO">AA</td>
<td class="test108" title="HGゴシックE">AA</td>
<td class="test109" title="HGゴシックM">AA</td>
</tr>
<tr>
<td class="test110" title="HG丸ゴシックM-PRO">AA</td>
<td class="test111" title="HG創英プレゼンスEB">AA</td>
<td class="test112" title="Helvetica Carregado">AA</td>
<td class="test113" title="Helvetica ‬עבה">AA</td>
<td class="test114" title="Helvetica ‬أسود">AA</td>
<td class="test115" title="Helvetica ‬برجسته">AA</td>
<td class="test116" title="Osaka等幅">AA</td>
<td class="test117" title="Thonburi Carregado">AA</td>
<td class="test118" title="Thonburi Gras">AA</td>
<td class="test119" title="Thonburi vet">AA</td>
</tr>
<tr>
<td class="test120" title="Times Cursiva">AA</td>
<td class="test121" title="Times Gras">AA</td>
<td class="test122" title="Times Negrita">AA</td>
<td class="test123" title="Times New Roman Corsivo">AA</td>
<td class="test124" title="Times New Roman Cursief">AA</td>
<td class="test125" title="Times New Roman Cursiva">AA</td>
<td class="test126" title="Times New Roman Dőlt">AA</td>
<td class="test127" title="Times New Roman Etzana">AA</td>
<td class="test128" title="Times New Roman Fet Kursiv">AA</td>
<td class="test129" title="Times New Roman Fet">AA</td>
</tr>
<tr>
<td class="test130" title="Times New Roman Fett Kursiv">AA</td>
<td class="test131" title="Times New Roman Fett">AA</td>
<td class="test132" title="Times New Roman Félkövér dőlt">AA</td>
<td class="test133" title="Times New Roman Félkövér">AA</td>
<td class="test134" title="Times New Roman Gras Italique">AA</td>
<td class="test135" title="Times New Roman Gras">AA</td>
<td class="test136" title="Times New Roman Grassetto Corsivo">AA</td>
<td class="test137" title="Times New Roman Grassetto">AA</td>
<td class="test138" title="Times New Roman Halvfet Kursiv">AA</td>
<td class="test139" title="Times New Roman Halvfet">AA</td>
</tr>
<tr>
<td class="test140" title="Times New Roman Italique">AA</td>
<td class="test141" title="Times New Roman Itálico">AA</td>
<td class="test142" title="Times New Roman Kalın İtalik">AA</td>
<td class="test143" title="Times New Roman Kalın">AA</td>
<td class="test144" title="Times New Roman Krepko poševno">AA</td>
<td class="test145" title="Times New Roman Krepko">AA</td>
<td class="test146" title="Times New Roman Kursiv">AA</td>
<td class="test147" title="Times New Roman Kursivoitu">AA</td>
<td class="test148" title="Times New Roman Kurzíva">AA</td>
<td class="test149" title="Times New Roman Lihavoitu Kursivoi">AA</td>
</tr>
<tr>
<td class="test150" title="Times New Roman Lihavoitu">AA</td>
<td class="test151" title="Times New Roman Lodi etzana">AA</td>
<td class="test152" title="Times New Roman Lodia">AA</td>
<td class="test153" title="Times New Roman Negreta cursiva">AA</td>
<td class="test154" title="Times New Roman Negreta">AA</td>
<td class="test155" title="Times New Roman Negrita Cursiva">AA</td>
<td class="test156" title="Times New Roman Negrita">AA</td>
<td class="test157" title="Times New Roman Negrito Itálico">AA</td>
<td class="test158" title="Times New Roman Negrito">AA</td>
<td class="test159" title="Times New Roman Pogrubiona kursywa">AA</td>
</tr>
<tr>
<td class="test160" title="Times New Roman Pogrubiona">AA</td>
<td class="test161" title="Times New Roman Poševno">AA</td>
<td class="test162" title="Times New Roman Tučná kurzíva">AA</td>
<td class="test163" title="Times New Roman Tučné">AA</td>
<td class="test164" title="Times New Roman Vet Cursief">AA</td>
<td class="test165" title="Times New Roman Vet">AA</td>
<td class="test166" title="Times New Roman cursiva">AA</td>
<td class="test167" title="Times New Roman fed kursiv">AA</td>
<td class="test168" title="Times New Roman fed">AA</td>
<td class="test169" title="Times New Roman kursiv">AA</td>
</tr>
<tr>
<td class="test170" title="Times New Roman kursywa">AA</td>
<td class="test171" title="Times New Roman kurzíva">AA</td>
<td class="test172" title="Times New Roman nghiêng đậm">AA</td>
<td class="test173" title="Times New Roman nghiêng">AA</td>
<td class="test174" title="Times New Roman tučné kurzíva">AA</td>
<td class="test175" title="Times New Roman tučné">AA</td>
<td class="test176" title="Times New Roman İtalik">AA</td>
<td class="test177" title="Times New Roman đậm">AA</td>
<td class="test178" title="Times New Roman Έντονα Πλάγια">AA</td>
<td class="test179" title="Times New Roman Έντονα">AA</td>
</tr>
<tr>
<td class="test180" title="Times New Roman Πλάγια">AA</td>
<td class="test181" title="Times New Roman Курсив">AA</td>
<td class="test182" title="Times New Roman Полужирный Курсив">AA</td>
<td class="test183" title="Times New Roman Полужирный">AA</td>
<td class="test184" title="Times grassetto">AA</td>
<td class="test185" title="Verdana Corsivo">AA</td>
<td class="test186" title="Verdana Cursief">AA</td>
<td class="test187" title="Verdana Cursiva">AA</td>
<td class="test188" title="Verdana Dőlt">AA</td>
<td class="test189" title="Verdana Etzana">AA</td>
</tr>
<tr>
<td class="test190" title="Verdana Fet Kursiv">AA</td>
<td class="test191" title="Verdana Fet">AA</td>
<td class="test192" title="Verdana Fett Kursiv">AA</td>
<td class="test193" title="Verdana Fett">AA</td>
<td class="test194" title="Verdana Félkövér dőlt">AA</td>
<td class="test195" title="Verdana Félkövér">AA</td>
<td class="test196" title="Verdana Gras Italique">AA</td>
<td class="test197" title="Verdana Gras">AA</td>
<td class="test198" title="Verdana Grassetto Corsivo">AA</td>
<td class="test199" title="Verdana Grassetto">AA</td>
</tr>
<tr>
<td class="test200" title="Verdana Halvfet Kursiv">AA</td>
<td class="test201" title="Verdana Halvfet">AA</td>
<td class="test202" title="Verdana Italique">AA</td>
<td class="test203" title="Verdana Itálico">AA</td>
<td class="test204" title="Verdana Kalın İtalik">AA</td>
<td class="test205" title="Verdana Kalın">AA</td>
<td class="test206" title="Verdana Krepko poševno">AA</td>
<td class="test207" title="Verdana Krepko">AA</td>
<td class="test208" title="Verdana Kursiv">AA</td>
<td class="test209" title="Verdana Kursivoitu">AA</td>
</tr>
<tr>
<td class="test210" title="Verdana Kursywa">AA</td>
<td class="test211" title="Verdana Kurzíva">AA</td>
<td class="test212" title="Verdana Lihavoitu Kursivoi">AA</td>
<td class="test213" title="Verdana Lihavoitu">AA</td>
<td class="test214" title="Verdana Lodi etzana">AA</td>
<td class="test215" title="Verdana Lodia">AA</td>
<td class="test216" title="Verdana Negreta cursiva">AA</td>
<td class="test217" title="Verdana Negreta">AA</td>
<td class="test218" title="Verdana Negrita Cursiva">AA</td>
<td class="test219" title="Verdana Negrita">AA</td>
</tr>
<tr>
<td class="test220" title="Verdana Negrito Itálico">AA</td>
<td class="test221" title="Verdana Negrito">AA</td>
<td class="test222" title="Verdana Pogrubiona kursywa">AA</td>
<td class="test223" title="Verdana Pogrubiony">AA</td>
<td class="test224" title="Verdana Poševno">AA</td>
<td class="test225" title="Verdana Tučná kurzíva">AA</td>
<td class="test226" title="Verdana Tučné">AA</td>
<td class="test227" title="Verdana Vet Cursief">AA</td>
<td class="test228" title="Verdana Vet">AA</td>
<td class="test229" title="Verdana fed kursiv">AA</td>
</tr>
<tr>
<td class="test230" title="Verdana fed">AA</td>
<td class="test231" title="Verdana kursiv">AA</td>
<td class="test232" title="Verdana kurzíva">AA</td>
<td class="test233" title="Verdana tučné kurzíva">AA</td>
<td class="test234" title="Verdana tučné">AA</td>
<td class="test235" title="Verdana İtalik">AA</td>
<td class="test236" title="Verdana Έντονα Πλάγια">AA</td>
<td class="test237" title="Verdana Έντονα">AA</td>
<td class="test238" title="Verdana Πλάγια">AA</td>
<td class="test239" title="Verdana Курсив">AA</td>
</tr>
<tr>
<td class="test240" title="Verdana Полужирный Курсив">AA</td>
<td class="test241" title="Verdana Полужирный">AA</td>
<td class="test242" title="儷宋 Pro">AA</td>
<td class="test243" title="儷黑 Pro">AA</td>
<td class="test244" title=" 明朝">AA</td>
<td class="test245" title=" P明朝">AA</td>
<td class="test246" title=" ゴシック">AA</td>
<td class="test247" title=" Pゴシック">AA</td>
<td class="test248" title="仿宋">AA</td>
<td class="test249" title="楷体">AA</td>
</tr>
<tr>
<td class="test250" title="굴림">AA</td>
<td class="test251" title="궁서">AA</td>
<td class="test252" title="돋움">AA</td>
<td class="test253" title="바탕">AA</td>
<td class="test254" title="標楷體">AA</td>
<td class="test255" title="細明體">AA</td>
<td class="test256" title="굴림체">AA</td>
<td class="test257" title="바탕체">AA</td>
<td class="test258" title="細明體-ExtB">AA</td>
<td class="test259" title="細明體_HKSCS">AA</td>
</tr>
<tr>
<td class="test260" title="メイリオ ボールド イタリック">AA</td>
<td class="test261" title="メイリオ ボールド">AA</td>
<td class="test262" title="メイリオ">AA</td>
<td class="test263" title="华文仿宋">AA</td>
<td class="test264" title="华文细黑">AA</td>
<td class="test265" title="华文黑体">AA</td>
<td class="test266" title="微软雅黑">AA</td>
<td class="test267" title="新細明體">AA</td>
<td class="test268" title="新細明體-ExtB">AA</td>
<td class="test269" title="微軟正黑體 Bold">AA</td>
</tr>
<tr>
<td class="test270" title="רעננה">AA</td>
<td class="test271" title="微軟正黑體">AA</td>
<td class="test272" title="蘋果儷中黑">AA</td>
<td class="test273" title="蘋果儷細宋">AA</td>
<td class="test274" title="ヒラギノ角ゴ Pro W3">AA</td>
<td class="test275" title="ヒラギノ丸ゴ Pro W4">AA</td>
<td class="test276" title="ヒラギノ明朝 Pro W6">AA</td>
<td class="test277" title="ヒラギノ丸ゴ ProN W4">AA</td>
<td class="test278" title="רעננה‭ Bold">AA</td>
</tr>
</table>
</body>
</html>