WindowsXP-SP1/enduser/stuff/itircl/inc/mvdbcs.h
2020-09-30 16:53:49 +02:00

199 lines
6.1 KiB
C

#ifdef __cplusplus
extern "C" {
#endif
/************************************************************************
*
* MVDBCS.H
*
* Copyright (c) Microsoft Corporation 1994
* All rights reserved.
*
*************************************************************************
*
* Module intent: Header file for the DBCS support.
*
*************************************************************************
*
* Current owner: DougO
*
************************************************************************/
#define LANGUAGE_ENGLISH 0x00
#define LANGUAGE_JAPANESE 0x01
#define LANGUAGE_TRAD_CHINESE 0x02 // Mapped to old LANGUAGE_CHINESE
#define LANGUAGE_KOREAN 0x03
#define LANGUAGE_ANSI 0x04
#define LANGUAGE_SIMP_CHINESE 0x05
#define SZ_LANGUAGE_ENGLISH L"English"
#define SZ_LANGUAGE_JAPANESE L"Japanese"
#define SZ_LANGUAGE_TRAD_CHINESE L"TradChinese"
#define SZ_LANGUAGE_KOREAN L"Korean"
#define SZ_LANGUAGE_ANSI L"ANSI"
#define SZ_LANGUAGE_SIMP_CHINESE L"SimpChinese"
#define CSZ_LANGUAGE_ENGLISH 7 // strlen (SZ_LANGUAGE_ENGLISH)
#define CSZ_LANGUAGE_JAPANESE 8 // strlen (SZ_LANGUAGE_JAPANESE)
#define CSZ_LANGUAGE_TRAD_CHINESE 11 // strlen (SZ_LANGUAGE_TRAD_CHINESE)
#define CSZ_LANGUAGE_KOREAN 6 // strlen (SZ_LANGUAGE_KOREAN)
#define CSZ_LANGUAGE_ANSI 4 // strlen (SZ_LANGUAGE_ANSI)
#define CSZ_LANGUAGE_SIMP_CHINESE 11 // strlen (SZ_LANGUAGE_SIMP_CHINESE)
#define IS_DBCS(qde) ((qde)->bCurLanguage != LANGUAGE_ANSI)
// for speed, the layout engine sometimes bypasses these macros by having
// two separate routines: DBCS and non-DBCS
#define PREVINDEX(qde, a,b) (IS_DBCS(qde) ? PchPrevDbcsIndex(qde, a,b) : (b) - 1)
#define NEXTINDEX(qde, a,b) (IS_DBCS(qde) ? PchNextDbcsIndex(qde, a,b) : (b) + 1)
#define FLINEBREAK(qde,qlin, a,b,c) (IS_DBCS(qde) ? FLineBreak(qde, (qlin)->kl.qbCommand, a,b,c) : 0)
#define CHARNEXT(qde, ch) (IS_DBCS(qde) ? ch=PchNextDbcs(qde, ch) : ch++)
//#ifdef _DBCS
#ifdef _32BIT
#include <winnls.h>
#else
#include <olenls.h>
#endif
BOOL FIsDbcsLeadByte(QDE, char);
BOOL FIsDbcsLeadByte2(QDE, char *, char *);
BOOL FLineBreak(QDE, LPBYTE lpbCom, char *psz, char *pch, BOOL);
char * PchPrevDbcs(QDE, char *, char *);
char * PchPrevDbcs2(QDE, char *, char *);
long PchPrevDbcsIndex(QDE, char *, long);
long PchNextDbcsIndex(QDE, char *, long);
char * PchNextDbcs(QDE, char *);
ERR InitDBCS(QDE qde, HANDLE hTitle);
void FreeDBCS(QDE qde);
extern BOOL bUseDBCBoundary;
//#define CHARNEXT(a) a=PchNextDbcs(a)
//#define ISDBCSLEADBYTE(a) FIsDbcsLeadByte(a)
//#define CHARPREV2(a,b) b=PchPrevDbcs2(a,b)
//#define NEXTCHAR(a) PchNextDbcs(a)
//#define PREVINDEX(a,b) PchPrevDbcsIndex(a,b)
//#define NEXTINDEX(a,b) PchNextDbcsIndex(a,b)
#define chKataMin 0xa1
#define chKataMac 0xe0
#define wchSpace 0x8140
#define lchSpace 0x4081
#define wchPlus 0x7b81
#define wchMinus 0x7c81
#define wchNum0 0x4f82
#define wchNum9 0x5882
#define wchUppA 0x6082
#define wchUppZ 0x7982
#define wchLowA 0x8182
#define wchLowZ 0x9a82
#define wchKanaMin 0x9f82
#define wchKanaMac 0x9783
#define wchKataMin 0x4083
#define wchHiraMin 0x9f82
#define wchHaveKDakuMin 0x4a83 /* Katakana */
#define wchHaveHDakuMin 0xa982 /* Hiragana */
#define wchHaveHDakuMac 0xdc82 /* Hiragana */
#define wchHaveDakuMac 0x7c83
#define wchHiraganaFirst 0x9f82
#define wchHiraganaLast 0xf182
#define wchKatakanaFirst 0x4083
#define wchKatakanaLast 0x9683
#define wchKanjiFirst 0x9f88
// list of leading punctuations: don't break line after these
#define chLeft0 0xa2
#define wchLeft0 0x6581
#define wchLeft1 0x6781
#define wchLeft2 0x6981
#define wchLeft3 0x6b81
#define wchLeft4 0x6d81
#define wchLeft5 0x6f81
#define wchLeft6 0x7181
#define wchLeft7 0x7381
#define wchLeft8 0x7581
#define wchLeft9 0x7781
#define wchLeftA 0x7981
// list of following punctuations: don't break line before these
#define chKuten 0xa1
#define chRight0 0xa3
#define chTouten 0xa4
#define chMidDot 0xa5
// small kata are also forbidden followers..0xa7 thru 0xaf
#define chChohon 0xb0
#define chDakuten 0xde
#define chHandaku 0xdf
#define wchTouten 0x4181
#define wchKuten 0x4281
#define wchComma 0x4381
#define wchPeriod 0x4481
#define wchMidDot 0x4581
#define wchColon 0x4681
#define wchSemiCol 0x4781
#define wchQuestion 0x4881
#define wchExclam 0x4981
#define wchDakuten 0x4a81
#define wchHandaku 0x4b81
#define wchChohon 0x5b81
#define wchRight0 0x6681
#define wchRight1 0x6881
#define wchRight2 0x6a81
#define wchRight3 0x6c81
#define wchRight4 0x6e81
#define wchRight5 0x7081
#define wchRight6 0x7281
#define wchRight7 0x7481
#define wchRight8 0x7681
#define wchRight9 0x7881
#define wchRightA 0x7a81
// other defines
#define chShade 0x7f
#define wchEqual 0x8181 /* '=' of DBC */
#define wchQuote 0x6881 /* '"' of DBC */
#define wchAt 0x9781 /* '@' of DBC */
#define wchLessThan 0x8381 /* '<' of DBC */
#define wchGrtThan 0x8481 /* '>' of DBC */
#define wchLParen 0x6981 /* '(' of DBC */
#define wchRParen 0x6a81 /* ')' of DBC */
#define wchAsterisk 0x9681 /* '*' of DBC */
#define wchSlash 0x5e81 /* '/' of DBC */
#define wchCircumflex 0x4f81 /* '^' of DBC */
#define wchAnd 0x9581 /* '&' of DBC */
#define wchOr 0x6281 /* '|' of DBC */
#define wchPercent 0x9381 /* '%' of DBC */
#define wchTilde 0x6081 /* '~' of DBC */
#define wchName 0x6681 /* pc's chName */
#define wchNameAlt 0x6881 /* pc's chNameAlt */
#define wchRow 0x7182 /* pc's chRow */
#define wchCol 0x6282 /* pc's chCol */
#define cwchLedPunct 15
#define cwchFlwPunct 39
// double width character end mark
#define wchDwidthMark 0x814e
//#else not DBCS
//
//#define CHARNEXT(a) (a++)
//#define NEXTCHAR(a) ((a)+1)
//#define CHARPREV2(a,b) (b--)
//#define PREVINDEX(a,b) (b-1)
//#define NEXTINDEX(a,b) (b+1)
//#endif
#ifdef __cplusplus
}
#endif