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.
 
 
 
 
 
 

164 lines
3.9 KiB

// ========================================================================
//
// Module: langtocpid.h
//
// Copyright Microsoft Corporation 1997, All Rights Reserved.
//
// Description: This file is used provide the support for HTTP_DAV
// to make a best guess code page based on the Accept-
// Language header. The code page is used to decode
// non-UTF8 chanracters in URLs coming from Office/Rosebud
// This file contains the static mapping of header values
// to code pages as well as a cache to provide fast
// retrieval of code pages.
//
// ========================================================================
#ifndef _LANGTOCPID_H_
#define _LANGTOCPID_H_
#include <ex\gencache.h>
#include <singlton.h>
struct ACCEPTLANGTOCPID_ENTRY { LPCSTR pszLang; UINT cpid; };
// A static mapping of Accept-Language header values to the
// corresponding CPIDs. This mapping comes from the DAV
// implementation doc
// http://exchange/doc/specs/Platinum/Future%20Protocols/ms-implementation/dav-codepage-support.doc
//
DEC_CONST ACCEPTLANGTOCPID_ENTRY gc_rgAcceptLangToCPIDTable[] =
{
{"ar", 1256},
{"ar-sa", 1256},
{"ar-iq", 1256},
{"ar-eg", 1256},
{"ar-ly", 1256},
{"ar-dz", 1256},
{"ar-ma", 1256},
{"ar-tn", 1256},
{"ar-om", 1256},
{"ar-ye", 1256},
{"ar-sy", 1256},
{"ar-jo", 1256},
{"ar-lb", 1256},
{"ar-kw", 1256},
{"ar-ae", 1256},
{"ar-bh", 1256},
{"ar-qa", 1256},
{"zh", 950},
{"zh-tw", 950},
{"zh-cn", 936},
{"zh-hk", 950},
{"zh-sg", 936},
{"ja", 932},
{"en-us", 1252},
{"en-gb", 1252},
{"en-au", 1252},
{"en-ca", 1252},
{"en-nz", 1252},
{"en-ie", 1252},
{"en-za", 1252},
{"en-jm", 1252},
{"en-bz", 1252},
{"en-tt", 1252},
{"fr", 1252},
{"fr-be", 1252},
{"fr-ca", 1252},
{"fr-ch", 1252},
{"fr-lu", 1252},
{"de", 1252},
{"de-ch", 1252},
{"de-at", 1252},
{"de-lu", 1252},
{"de-li", 1252},
{"el", 1253},
{"he", 1255},
{"it", 1252},
{"it-ch", 1252},
{"lt", 1257},
{"ko", 949},
{"es", 1252},
{"es-mx", 1252},
{"es-gt", 1252},
{"es-cr", 1252},
{"es-pa", 1252},
{"es-do", 1252},
{"es-ve", 1252},
{"es-co", 1252},
{"es-pe", 1252},
{"es-ar", 1252},
{"es-ec", 1252},
{"es-cl", 1252},
{"es-uy", 1252},
{"es-py", 1252},
{"es-bo", 1252},
{"es-sv", 1252},
{"es-hn", 1252},
{"es-ni", 1252},
{"es-pr", 1252},
{"ru", 1251},
{"th", 874},
{"tr", 1254},
{"vi", 1258}
};
// The size of the table
//
const DWORD gc_cAcceptLangToCPIDTable = CElems(gc_rgAcceptLangToCPIDTable);
// ========================================================================
//
// Singleton class CLangToCpidCache
//
// A cache to provide fast retrieval of code pages based on values in the
// Accept-Language header.
//
//
class CLangToCpidCache : private Singleton<CLangToCpidCache>
{
private:
//
// Friend declarations required by Singleton template
//
friend class Singleton<CLangToCpidCache>;
// The cache mapping accept language strings to code pages.
//
CCache<CRCSzi, UINT> m_cacheAcceptLangToCPID;
// CONSTRUCTORS
//
// Declared private to ensure that arbitrary instances
// of this class cannot be created. The Singleton
// template (declared as a friend above) controls
// the sole instance of this class.
//
CLangToCpidCache() {};
// NOT IMPLEMENTED
//
CLangToCpidCache (const CLangToCpidCache&);
CLangToCpidCache& operator= (const CLangToCpidCache&);
public:
// STATICS
//
//
// Instance creating/destroying routines provided
// by the Singleton template.
//
using Singleton<CLangToCpidCache>::DestroyInstance;
// Initialization. Wraps CreateInstance().
// This function hashes all the supported language strings
// to give us quick lookup by language string.
//
static BOOL FCreateInstance();
// Find the CPID from language string
//
static BOOL FFindCpid(IN LPCSTR pszLang, OUT UINT * puiCpid);
};
#endif // _LANGTOCPID_H_