/* * _COMMON.H * * Purpose: * RICHEDIT private common definitions * * Copyright (c) 1995-1998, Microsoft Corporation. All rights reserved. */ #ifndef _COMMON_H #define _COMMON_H // REVIEW macro. // #define __LINE(l) #l #define __LINE_(l) __LINE(l) #define _LINE_ __LINE_(__LINE__) #define REVIEW __FILE__ "(" __LINE_(__LINE__) ") : " #pragma message ("Compiling Common.H") #ifdef NT #ifndef WINNT #define WINNT #endif #endif #define _UNICODE #ifndef STRICT #define STRICT #endif #define NOSHELLDEBUG //disables asserts in shell.h #include #if defined(DEBUG) && !defined(PEGASUS) #include #endif #define WINVER 0x0500 #include #include #include #ifndef MACPORT #include "imm.h" #else #include #include "wlmimm.h" #endif //MACPORT /* * Types */ #include // for the benefit of the outside world, richedit.h uses cpMax instead // of cpMost. I highly prefer cpMost #ifdef cpMax #error "cpMax hack won't work" #endif #define cpMax cpMost #include #include #undef cpMax #include "_debug.h" // Return TRUE if LF <= ch <= CR. NB: ch must be unsigned; // TCHAR and unsigned short give wrong results! #define IN_RANGE(n1, b, n2) ((unsigned)((b) - (n1)) <= unsigned((n2) - (n1))) #define IsASCIIDigit(b) IN_RANGE('0', b, '9') #define IsASCIIEOP(ch) IN_RANGE(LF, ch, CR) #define IsZerowidthCharacter(ch) IN_RANGE(ZWSP, ch, RTLMARK) // disable // 4710 : function not inlined // 4512 : assignment operator not generated // 4201 : nameless struct union // 4100 : unreferenced formal; // 4706 : assignment within conditional expression (oould be bad, but common) // 4127 : conditional expression is constant (if (1)) // 4242 : truncation warning // 4244 : truncation warning #pragma warning (disable : 4710 4512 4201 4100 4127 4706 4242 4244) #pragma warning(3:4121) // structure is sensitive to alignment #pragma warning(3:4130) // logical operation on address of string constant #pragma warning(3:4132) // const object should be initialized #pragma warning(3:4509) // use of SEH with destructor // Our Win32 wrapper class #include "_w32sys.h" #include "resource.h" // Use explicit ASCII values for LF and CR, since MAC compilers // interchange values of '\r' and '\n' #define LF 10 #define CR 13 #define FF 12 #define TAB TEXT('\t') //#define CELL 7 #define CELL TAB #define EURO 0x20AC #define VT TEXT('\v') #define PS 0x2029 #define SOFTHYPHEN 0xAD #define BOM 0xFEFF #define BULLET 0x2022 #define EMDASH 0x2014 #define EMSPACE 0x2003 #define ENDASH 0x2013 #define ENQUAD 0x2000 #define ENSPACE 0x2002 #define KASHIDA 0x0640 #define LDBLQUOTE 0x201c #define LQUOTE 0x2018 #define LTRMARK 0x200E #define RDBLQUOTE 0x201D #define RQUOTE 0x2019 #define RTLMARK 0x200F #define SOFTHYPHEN 0xAD #define UTF16 0xDC00 #define UTF16_LEAD 0xD800 #define UTF16_TRAIL 0xDC00 #define ZWSP 0x200B #define ZWJ 0x200D #define ZWNJ 0x200C /* * IsEOP(ch) * * @func * Used to determine if ch is an EOP char, i.e., CR, LF, VT, FF, PS, or * LS (Unicode paragraph/line separator). For speed, this function is * inlined. * * @rdesc * TRUE if ch is an end-of-paragraph char */ __inline BOOL IsEOP(unsigned ch) { return IN_RANGE(LF, ch, CR) || (ch | 1) == PS; } BOOL IsRTF(char *pstr); #include #define CP_INFINITE tomForward #include "zmouse.h" #include "stddef.h" #include "_util.h" #ifdef DEBUG #define EM_DBGPED (WM_USER + 150) #endif #define EM_GETCODEPAGE (WM_USER + 151) // MIN #ifdef min #undef min #endif #define __min(a,b) (((a) < (b)) ? (a) : (b)) inline int min(int v1, int v2) {return __min(v1, v2);} inline UINT min(UINT v1, UINT v2) {return __min(v1, v2);} inline float min(float v1, float v2) {return __min(v1, v2);} inline double min(double v1, double v2) {return __min(v1, v2);} inline __int64 min(__int64 v1, __int64 v2) {return __min(v1, v2);} // MAX #ifdef max #undef max #endif #define __max(a,b) (((a) > (b)) ? (a) : (b)) inline int max(int v1, int v2) {return __max(v1, v2);} inline UINT max(UINT v1, UINT v2) {return __max(v1, v2);} inline float max(float v1, float v2) {return __max(v1, v2);} inline double max(double v1, double v2) {return __max(v1, v2);} inline __int64 max(__int64 v1, __int64 v2) {return __max(v1, v2);} // ABS #ifdef abs #undef abs #endif #define __abs(a) (((a) < 0) ? 0 - (a) : (a)) #pragma function(abs) inline int __cdecl abs(int v) {return __abs(v);} // The abs val of a UINT is just that number. If we were to pass the value on to // the __abs macro we'd get a warning because (a) < 0 will always be false. This // fix allows us to compile cleanly *and* keep the same behavior as before. inline UINT abs(UINT v) {return v;} inline float abs(float v) {return __abs(v);} inline double abs(double v) {return __abs(v);} inline __int64 abs(__int64 v) {return __abs(v);} #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #include "_cfpf.h" // Interesting OS versions #define VERS4 4 // conversions between byte and character counts #define CbOfCch(_x) ((_x) * 2) #define CchOfCb(_x) ((_x) / 2) #define cKinsokuCategories 16 #define OLEstrcmp wcscmp #define OLEstrcpy wcscpy #define OLEsprintf wsprintf #define OLEstrlen wcslen // index (window long) of the PED #define ibPed 0 #define RETID_BGND_RECALC 0x01af #define RETID_AUTOSCROLL 0x01b0 #define RETID_SMOOTHSCROLL 0x01b1 #define RETID_DRAGDROP 0x01b2 #define RETID_MAGELLANTRACK 0x01b3 // Count of characters in CRLF marker #define cchCRLF 2 #define cchCR 1 // RichEdit 1.0 uses a CRLF for an EOD marker #define CCH_EOD_10 2 // RichEdit 2.0 uses a simple CR for the EOD marker #define CCH_EOD_20 1 extern const TCHAR szCRLF[]; extern const TCHAR szCR[]; extern HINSTANCE hinstRE; // DLL instance #include #ifndef MACPORT #ifdef DUAL_FORMATETC #undef DUAL_FORMATETC #endif #define DUAL_FORMATETC FORMATETC #endif #include "WIN2MAC.h" extern "C" { LRESULT CALLBACK RichEditWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK RichEditANSIWndProc(HWND, UINT, WPARAM, LPARAM); } // Multi-Threading support extern CRITICAL_SECTION g_CriticalSection; // a class to simplify critical section management class CLock { public: CLock() { EnterCriticalSection(&g_CriticalSection); } ~CLock() { LeaveCriticalSection(&g_CriticalSection); } }; enum HITTEST { HT_Undefined = 0, // Hit hasn't been determined HT_Nothing, HT_OutlineSymbol, HT_LeftOfText, HT_BulletArea, HT_RightOfText, HT_Text, // All hits are in text from HT_Text on so HT_Link, // if(hit >= HT_Text) identifies text of some kind HT_Italic, HT_Object }; #define ST_CHECKPROTECTION 0x8000 #define ST_10REPLACESEL 0x10000000 #define ST_10WM_SETTEXT 0x20000000 /* REListbox1.0 Window Class. */ // For Windows CE to avaoid possible conflicts on WIn95. #define CELISTBOX_CLASSA "REListBoxCEA" #define CELISTBOX_CLASSW L"REListBoxCEW" #ifndef MACPORT #define LISTBOX_CLASSW L"REListBox20W" #define COMBOBOX_CLASSW L"REComboBox20W" #else /*----------------------MACPORT */ #define LISTBOX_CLASSW TEXT("REListBox20W") /* MACPORT change */ #define COMBOBOX_CLASSW TEXT("REComboBox20W") /* MACPORT change */ #endif /* MACPORT */ #ifdef DEBUG //Debug api for dumping CTxtStory arrays. extern "C" { extern void DumpDoc(void *); } #endif #endif