Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

124 lines
3.0 KiB

/**************************************************************************\
*
* Copyright (c) 2000 Microsoft Corporation
*
* Abstract:
*
* Font linking class definition
*
* Revision History:
*
* 3/03/2000 Tarek Mahmoud Sayed
* Created it.
*
\**************************************************************************/
#ifndef GP_FONT_LINKING_HPP
#define GP_FONT_LINKING_HPP
struct AssociatedFamilies
{
GpFontFamily *family;
AssociatedFamilies *next;
};
struct FontLinkingFamily
{
GpFontFamily *family;
AssociatedFamilies *associatedFamilies;
FontLinkingFamily *next;
};
struct EUDCMAP
{
GpFontFamily *inputFamily;
GpFontFamily *eudcFamily;
EUDCMAP *next;
};
struct EUDC
{
GpFontFamily *defaultFamily;
EUDCMAP *eudcMapList;
};
struct PrivateLoadedFonts
{
GpPrivateFontCollection *fontCollection;
WCHAR FileName[MAX_PATH];
PrivateLoadedFonts *next;
};
struct FontSubstitutionEntry
{
WCHAR familyName[MAX_PATH];
INT familyNameLength;
GpFontFamily *family;
};
// definition of the Font linking class. it has an global object defined in the Global name space
// and created in the Font fallback class exist on the \Text\Uniscribe\shaping folder.
class GpFontLink
{
public:
GpFontLink();
~GpFontLink();
AssociatedFamilies* GetLinkedFonts(const GpFontFamily *family);
GpFontFamily *GetDefaultEUDCFamily();
GpFontFamily *GetMappedEUDCFamily(const GpFontFamily *family);
GpFontFamily *GetFamilySubstitution(const WCHAR* familyName) const;
const AssociatedFamilies *GetDefaultFamily();
private:
void GetFontLinkingDataFromRegistryW();
void GetEudcDataFromTheRegistryW();
void GetEudcDataFromTheRegistryA();
GpFontFamily* CheckAndLoadTheFile(WCHAR *fileName);
void CacheFontSubstitutionDataW();
void CacheFontSubstitutionDataA();
private:
FontLinkingFamily *linkedFonts;
EUDC *eudcCache;
PrivateLoadedFonts *privateFonts;
FontSubstitutionEntry *FontSubstitutionTable;
INT substitutionCount;
AssociatedFamilies *DefaultFamily;
AssociatedFamilies DefaultFamilyBuffer; // buffer for self-created linking font
};
// wrapper function to get the substitution Family from the FontLinkTable
// but first it make sure that the FontLinkTable is created.
inline void GetFamilySubstitution(const WCHAR* familyName, GpFontFamily **Family)
{
if (Globals::FontLinkTable == NULL)
{
// All APIs are bounded by critical section. we are sure we will not have
// multithreading problem.
Globals::FontLinkTable = new GpFontLink;
}
if (Globals::FontLinkTable != NULL)
{
*Family = Globals::FontLinkTable->GetFamilySubstitution(familyName);
}
return;
}
#endif // GP_FONT_LINKING_HPP