Implement TranslateCharsetInfo, change charset type to BYTE.

This commit is contained in:
Douglas Ridgway 1999-01-01 18:41:22 +00:00 committed by Alexandre Julliard
parent 311d329cb8
commit ab9e8bc9f7
3 changed files with 90 additions and 30 deletions

View File

@ -420,10 +420,9 @@ typedef struct
} CHARSETINFO,*LPCHARSETINFO;
/* Flags for TranslateCharsetInfo */
/* FIXME */
#define TCI_SRCCHARSET
#define TCI_SRCCODEPAGE
#define TCI_SRCFONTSIG
#define TCI_SRCCHARSET 1
#define TCI_SRCCODEPAGE 2
#define TCI_SRCFONTSIG 3
/* Flags for ModifyWorldTransform */
#define MWT_IDENTITY 1
@ -469,7 +468,7 @@ typedef struct
CHAR dfUnderline;
CHAR dfStrikeOut;
INT16 dfWeight;
CHAR dfCharSet;
BYTE dfCharSet;
INT16 dfPixWidth;
INT16 dfPixHeight;
CHAR dfPitchAndFamily;
@ -511,30 +510,33 @@ typedef struct
#define FW_BLACK 900
/* lfCharSet values */
#define ANSI_CHARSET (CHAR)0 /* CP1252, ansi-0, iso8859-{1,15} */
#define DEFAULT_CHARSET (CHAR)1
#define SYMBOL_CHARSET (CHAR)2
#define SHIFTJIS_CHARSET (CHAR)128
#define HANGEUL_CHARSET (CHAR)129 /* ksc5601.1987-0 */
#define GB2312_CHARSET (CHAR)134 /* gb2312.1980-0 */
#define CHINESEBIG5_CHARSET (CHAR)136 /* big5.et-0 */
#define GREEK_CHARSET (CHAR)161 /* CP1253 */
#define TURKISH_CHARSET (CHAR)162 /* CP1254, -iso8859-9 */
#define HEBREW_CHARSET (CHAR)177 /* CP1255, -iso8859-8 */
#define ARABIC_CHARSET (CHAR)178 /* CP1256, -iso8859-6 */
#define BALTIC_CHARSET (CHAR)186 /* CP1257, -iso8859-10 */
#define RUSSIAN_CHARSET (CHAR)204 /* CP1251, -iso8859-5 */
#define EE_CHARSET (CHAR)238 /* CP1250, -iso8859-2 */
#define OEM_CHARSET (CHAR)255
#define ANSI_CHARSET (BYTE)0 /* CP1252, ansi-0, iso8859-{1,15} */
#define DEFAULT_CHARSET (BYTE)1
#define SYMBOL_CHARSET (BYTE)2
#define SHIFTJIS_CHARSET (BYTE)128 /* CP932 */
#define HANGEUL_CHARSET (BYTE)129 /* CP949, ksc5601.1987-0 */
#define HANGUL_CHARSET HANGEUL_CHARSET
#define GB2312_CHARSET (BYTE)134 /* CP936, gb2312.1980-0 */
#define CHINESEBIG5_CHARSET (BYTE)136 /* CP950, big5.et-0 */
#define GREEK_CHARSET (BYTE)161 /* CP1253 */
#define TURKISH_CHARSET (BYTE)162 /* CP1254, -iso8859-9 */
#define HEBREW_CHARSET (BYTE)177 /* CP1255, -iso8859-8 */
#define ARABIC_CHARSET (BYTE)178 /* CP1256, -iso8859-6 */
#define BALTIC_CHARSET (BYTE)186 /* CP1257, -iso8859-10 */
#define RUSSIAN_CHARSET (BYTE)204 /* CP1251, -iso8859-5 */
#define EE_CHARSET (BYTE)238 /* CP1250, -iso8859-2 */
#define EASTEUROPE_CHARSET EE_CHARSET
#define THAI_CHARSET (BYTE)222 /* CP874, iso8859-11, tis620 */
#define JOHAB_CHARSET (BYTE)130 /* korean (johab) CP1361 */
#define OEM_CHARSET (BYTE)255
/* I don't know if the values of *_CHARSET macros are defined in Windows
* or if we can choose them as we want. -- srtxg
*/
#define THAI_CHARSET (CHAR)239 /* iso8859-11, tis620 */
#define VISCII_CHARSET (CHAR)240 /* viscii1.1-1 */
#define TCVN_CHARSET (CHAR)241 /* tcvn-0 */
#define KOI8_CHARSET (CHAR)242 /* koi8-{r,u,ru} */
#define ISO3_CHARSET (CHAR)243 /* iso8859-3 */
#define ISO4_CHARSET (CHAR)244 /* iso8859-4 */
#define VISCII_CHARSET (BYTE)240 /* viscii1.1-1 */
#define TCVN_CHARSET (BYTE)241 /* tcvn-0 */
#define KOI8_CHARSET (BYTE)242 /* koi8-{r,u,ru} */
#define ISO3_CHARSET (BYTE)243 /* iso8859-3 */
#define ISO4_CHARSET (BYTE)244 /* iso8859-4 */
/* lfOutPrecision values */
#define OUT_DEFAULT_PRECIS 0

View File

@ -27,7 +27,7 @@ typedef struct
CHAR dfUnderline;
CHAR dfStrikeOut;
INT16 dfWeight;
CHAR dfCharSet;
BYTE dfCharSet;
INT16 dfPixWidth;
INT16 dfPixHeight;
CHAR dfPitchAndFamily;

View File

@ -39,6 +39,51 @@ typedef struct
DWORD dwFlags;
} fontEnum32;
/*
* For TranslateCharsetInfo
*/
#define FS(x) {{0,0,0,0},{0x1<<(x),0}}
#define MAXTCIINDEX 32
static CHARSETINFO FONT_tci[MAXTCIINDEX] = {
/* ANSI */
{ ANSI_CHARSET, 1252, FS(0)},
{ EASTEUROPE_CHARSET, 1250, FS(1)},
{ RUSSIAN_CHARSET, 1251, FS(2)},
{ GREEK_CHARSET, 1253, FS(3)},
{ TURKISH_CHARSET, 1254, FS(4)},
{ HEBREW_CHARSET, 1255, FS(5)},
{ ARABIC_CHARSET, 1256, FS(6)},
{ BALTIC_CHARSET, 1257, FS(7)},
/* reserved by ANSI */
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
/* ANSI and OEM */
{ THAI_CHARSET, 874, FS(16)},
{ SHIFTJIS_CHARSET, 932, FS(17)},
{ GB2312_CHARSET, 936, FS(18)},
{ HANGEUL_CHARSET, 949, FS(19)},
{ CHINESEBIG5_CHARSET, 950, FS(20)},
{ JOHAB_CHARSET, 1361, FS(21)},
/* reserved for alternate ANSI and OEM */
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
/* reserved for system */
{ DEFAULT_CHARSET, 0, FS(0)},
{ DEFAULT_CHARSET, 0, FS(0)},
};
/***********************************************************************
* LOGFONT conversion functions.
*/
@ -1352,8 +1397,6 @@ DWORD WINAPI GetKerningPairs32W( HDC32 hDC, DWORD cPairs,
* RETURNS
* TRUE on success, FALSE on failure.
*
* BUGS
* Not implemented.
*/
BOOL32 WINAPI TranslateCharsetInfo(
LPDWORD lpSrc, /*
@ -1364,7 +1407,22 @@ BOOL32 WINAPI TranslateCharsetInfo(
LPCHARSETINFO lpCs, /* structure to receive charset information */
DWORD flags /* determines interpretation of lpSrc */
) {
FIXME(font,"(%p,%p,0x%08lx), stub.\n",lpSrc,lpCs, flags);
int index = 0;
switch (flags) {
case TCI_SRCFONTSIG:
while (!(*lpSrc>>index & 0x0001) && index<MAXTCIINDEX) index++;
break;
case TCI_SRCCODEPAGE:
while ((UINT32) (lpSrc) != FONT_tci[index].ciACP && index < MAXTCIINDEX) index++;
break;
case TCI_SRCCHARSET:
while ((UINT32) (lpSrc) != FONT_tci[index].ciCharset && index < MAXTCIINDEX) index++;
break;
default:
return FALSE;
}
if (index >= MAXTCIINDEX || FONT_tci[index].ciCharset == DEFAULT_CHARSET) return FALSE;
memcpy(lpCs, &FONT_tci[index], sizeof(CHARSETINFO));
return TRUE;
}