ReactOS 0.4.16-dev-320-g3bd9ddc
editstr.h
Go to the documentation of this file.
1/*
2 * RichEdit - structures and constant
3 *
4 * Copyright 2004 by Krzysztof Foltman
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#ifndef __EDITSTR_H
22#define __EDITSTR_H
23
24#include <assert.h>
25#include <stdarg.h>
26#include <stdio.h>
27#include <stdlib.h>
28#include <limits.h>
29
30#define COBJMACROS
31
32#include <windef.h>
33#include <winbase.h>
34#include <winnls.h>
35#include <winnt.h>
36#include <wingdi.h>
37#include <winuser.h>
38#include <richedit.h>
39#include <commctrl.h>
40#include <ole2.h>
41#include <richole.h>
42#include "imm.h"
43#include <textserv.h>
44#include "usp10.h"
45
46#include "wine/debug.h"
47#include "wine/heap.h"
48#include "wine/list.h"
49
50#if defined(__i386__) && !defined(__MINGW32__)
51extern const struct ITextHostVtbl itextHostStdcallVtbl DECLSPEC_HIDDEN;
52#endif /* __i386__ */
53
54typedef struct tagME_String
55{
58 void (*free)(struct tagME_String *);
60
61typedef struct tagME_FontCacheItem
62{
65 int nRefs;
66 int nAge;
68
69#define HFONT_CACHE_SIZE 10
70
71typedef struct tagME_Style
72{
74
75 ME_FontCacheItem *font_cache; /* cached font for the style */
76 TEXTMETRICW tm; /* cached font metrics for the style */
77 int nRefs; /* reference count */
79 struct list entry;
81
82typedef enum {
84 diTextStart, /* start of the text buffer */
85 diParagraph, /* paragraph start */
86 diCell, /* cell start */
87 diRun, /* run (sequence of chars with the same character format) */
88 diStartRow, /* start of the row (line of text on the screen) */
89 diTextEnd, /* end of the text buffer */
90
91 /********************* these below are meant for finding only *********************/
98} ME_DIType;
99
100#define SELECTIONBAR_WIDTH 8
101
102/******************************** run flags *************************/
103#define MERF_STYLEFLAGS 0x0FFF
104/* run contains non-text content, which has its own rules for wrapping, sizing etc */
105#define MERF_GRAPHICS 0x001
106/* run is a tab (or, in future, any kind of content whose size is dependent on run position) */
107#define MERF_TAB 0x002
108/* run is a cell boundary */
109#define MERF_ENDCELL 0x004 /* v4.1 */
110
111#define MERF_NONTEXT (MERF_GRAPHICS | MERF_TAB | MERF_ENDCELL)
112
113/* run is splittable (contains white spaces in the middle or end) */
114#define MERF_SPLITTABLE 0x001000
115/* run starts with whitespaces */
116#define MERF_STARTWHITE 0x002000
117/* run ends with whitespaces */
118#define MERF_ENDWHITE 0x004000
119/* run is completely made of whitespaces */
120#define MERF_WHITESPACE 0x008000
121/* the "end of paragraph" run, contains 1 character */
122#define MERF_ENDPARA 0x100000
123/* forcing the "end of row" run, contains 1 character */
124#define MERF_ENDROW 0x200000
125/* run is hidden */
126#define MERF_HIDDEN 0x400000
127/* start of a table row has an empty paragraph that should be skipped over. */
128#define MERF_TABLESTART 0x800000 /* v4.1 */
129
130/* runs with any of these flags set cannot be joined */
131#define MERF_NOJOIN (MERF_GRAPHICS|MERF_TAB|MERF_ENDPARA|MERF_ENDROW)
132/* runs that don't contain real text */
133#define MERF_NOTEXT (MERF_GRAPHICS|MERF_TAB|MERF_ENDPARA|MERF_ENDROW)
134
135/* those flags are kept when the row is split */
136#define MERF_SPLITMASK (~(0))
137
138/******************************** para flags *************************/
139
140/* this paragraph was already wrapped and hasn't changed, every change resets that flag */
141#define MEPF_REWRAP 0x01
142/* v4.1 */
143#define MEPF_CELL 0x04 /* The paragraph is nested in a cell */
144#define MEPF_ROWSTART 0x08 /* Hidden empty paragraph at the start of the row */
145#define MEPF_ROWEND 0x10 /* Visible empty paragraph at the end of the row */
146#define MEPF_COMPLEX 0x20 /* Use uniscribe */
147
148/******************************** structures *************************/
149
150struct tagME_DisplayItem;
151
153{
154 struct list entry;
156};
157
158typedef struct tagME_Run
159{
161 struct tagME_Paragraph *para; /* ptr to the run's paragraph */
162 int nCharOfs; /* relative to para's offset */
163 int len; /* length of run's text */
164 int nWidth; /* width of full run, width of leading&trailing ws */
166 int nAscent, nDescent; /* pixels above/below baseline */
167 POINT pt; /* relative to para's position */
168 struct re_object *reobj; /* FIXME: should be a union with strText (at least) */
169
179
180typedef struct tagME_Border
181{
182 int width;
185
186typedef struct tagME_BorderRect
187{
193
195{
200};
201
202typedef struct tagME_Paragraph
203{
206
207 struct tagME_DisplayItem *pCell; /* v4.1 */
209
214 int nRows;
216 ME_Run *eop_run; /* ptr to the end-of-para run */
220
221typedef struct tagME_Cell /* v4.1 */
222{
223 int nNestingLevel; /* 0 for normal cells, and greater for nested cells */
228 int yTextOffset; /* The text offset is caused by the largest top border. */
231
232typedef struct tagME_Row
233{
241
242/* the display item list layout is like this:
243 * - the document consists of paragraphs
244 * - each paragraph contains at least one run, the last run in the paragraph
245 * is an end-of-paragraph run
246 * - each formatted paragraph contains at least one row, which corresponds
247 * to a screen line (that's why there are no rows in an unformatted
248 * paragraph
249 * - the paragraphs contain "shortcut" pointers to the previous and the next
250 * paragraph, that makes iteration over paragraphs faster
251 * - the list starts with diTextStart and ends with diTextEnd
252 */
253
254typedef struct tagME_DisplayItem
255{
258 union {
265
266typedef struct tagME_TextBuffer
267{
272
273typedef struct tagME_Cursor
274{
279
280typedef enum {
286
288{
295 undo_end_transaction, /* marks the end of a group of changes for undo */
296 undo_potential_end_transaction /* allows grouping typed chars for undo */
298
300{
301 int pos, len;
305};
306
308{
309 int pos, len;
310};
311
313{
314 int pos;
315};
316
318{
319 int pos;
326};
327
329{
330 int pos;
333};
334
336{
337 int pos, len;
339};
340
342{
343 struct list entry;
345 union
346 {
353 } u;
354};
355
356typedef enum {
363
364typedef struct tagME_FontTableItem {
368
369
370#define STREAMIN_BUFFER_SIZE 4096 /* M$ compatibility */
371
377};
379
380typedef struct tagME_TextEditor
381{
383 ITextHost *texthost;
394 int nAvailWidth; /* 0 = wrap to client area, else wrap width in twips */
418 LPRICHEDITOLECALLBACK lpOleCallback;
419 /*TEXTMODE variable; contains only one of each of the following options:
420 *TM_RICHTEXT or TM_PLAINTEXT
421 *TM_SINGLELEVELUNDO or TM_MULTILEVELUNDO
422 *TM_SINGLECODEPAGE or TM_MULTICODEPAGE*/
423 int mode;
428 BOOL bDialogMode; /* Indicates that we are inside a dialog window */
429#ifndef __REACTOS__
430 /*for IME */
432#endif
433 DWORD selofs; /* The size of the selection bar on the left side of control */
436
437 /* Track previous notified selection */
439
440 /* Cache previously set scrollbar info */
442
450
451typedef struct tagME_Context
452{
460
461 /* those are valid inside ME_WrapTextParagraph and related */
464
465#endif
Definition: list.h:37
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
struct tagME_Context ME_Context
#define HFONT_CACHE_SIZE
Definition: editstr.h:69
struct tagME_FontCacheItem ME_FontCacheItem
struct tagME_TextEditor ME_TextEditor
struct tagME_Style ME_Style
struct tagME_Run ME_Run
struct tagME_TextBuffer ME_TextBuffer
struct tagME_Border ME_Border
struct tagME_FontTableItem ME_FontTableItem
struct tagME_Row ME_Row
ME_DIType
Definition: editstr.h:82
@ diStartRow
Definition: editstr.h:88
@ diTextEnd
Definition: editstr.h:89
@ diRunOrParagraphOrEnd
Definition: editstr.h:97
@ diCell
Definition: editstr.h:86
@ diInvalid
Definition: editstr.h:83
@ diParagraphOrEnd
Definition: editstr.h:96
@ diRun
Definition: editstr.h:87
@ diStartRowOrParagraphOrEnd
Definition: editstr.h:93
@ diRunOrParagraph
Definition: editstr.h:94
@ diTextStart
Definition: editstr.h:84
@ diRunOrStartRow
Definition: editstr.h:95
@ diStartRowOrParagraph
Definition: editstr.h:92
@ diParagraph
Definition: editstr.h:85
#define STREAMIN_BUFFER_SIZE
Definition: editstr.h:370
ME_UndoMode
Definition: editstr.h:280
@ umAddBackToUndo
Definition: editstr.h:284
@ umAddToUndo
Definition: editstr.h:281
@ umAddToRedo
Definition: editstr.h:282
@ umIgnore
Definition: editstr.h:283
struct tagME_DisplayItem ME_DisplayItem
struct tagME_Paragraph ME_Paragraph
struct tagME_Cursor ME_Cursor
struct tagME_BorderRect ME_BorderRect
struct tagME_Cell ME_Cell
ME_SelectionType
Definition: editstr.h:356
@ stWord
Definition: editstr.h:358
@ stParagraph
Definition: editstr.h:360
@ stPosition
Definition: editstr.h:357
@ stLine
Definition: editstr.h:359
@ stDocument
Definition: editstr.h:361
struct tagME_String ME_String
undo_type
Definition: editstr.h:288
@ undo_split_para
Definition: editstr.h:292
@ undo_join_paras
Definition: editstr.h:291
@ undo_set_char_fmt
Definition: editstr.h:294
@ undo_set_para_fmt
Definition: editstr.h:293
@ undo_end_transaction
Definition: editstr.h:295
@ undo_potential_end_transaction
Definition: editstr.h:296
@ undo_insert_run
Definition: editstr.h:289
@ undo_delete_run
Definition: editstr.h:290
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint buffer
Definition: glext.h:5915
static HDC
Definition: imagelist.c:88
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
ME_Style * style
Definition: editstr.h:303
WCHAR * str
Definition: editstr.h:302
POINT pt
Definition: editstr.h:199
ME_Style * style
Definition: editstr.h:196
ME_String * text
Definition: editstr.h:197
INT width
Definition: editstr.h:198
struct list entry
Definition: editstr.h:154
REOBJECT obj
Definition: editstr.h:155
CHARFORMAT2W fmt
Definition: editstr.h:338
ME_BorderRect border
Definition: editstr.h:332
PARAFORMAT2 fmt
Definition: editstr.h:331
int cell_right_boundary
Definition: editstr.h:325
ME_String * eol_str
Definition: editstr.h:322
ME_BorderRect cell_border
Definition: editstr.h:324
ME_BorderRect border
Definition: editstr.h:321
PARAFORMAT2 fmt
Definition: editstr.h:320
ME_Border bottom
Definition: editstr.h:190
ME_Border right
Definition: editstr.h:191
ME_Border left
Definition: editstr.h:189
ME_Border top
Definition: editstr.h:188
COLORREF colorRef
Definition: editstr.h:183
struct tagME_DisplayItem * prev_cell
Definition: editstr.h:229
POINT pt
Definition: editstr.h:226
int nHeight
Definition: editstr.h:227
int nRightBoundary
Definition: editstr.h:224
struct tagME_DisplayItem * parent_cell
Definition: editstr.h:229
struct tagME_DisplayItem * next_cell
Definition: editstr.h:229
ME_BorderRect border
Definition: editstr.h:225
int nNestingLevel
Definition: editstr.h:223
int yTextOffset
Definition: editstr.h:228
int nWidth
Definition: editstr.h:227
ME_Style * current_style
Definition: editstr.h:458
HFONT orig_font
Definition: editstr.h:459
RECT rcView
Definition: editstr.h:455
int nAvailWidth
Definition: editstr.h:457
POINT pt
Definition: editstr.h:454
ME_TextEditor * editor
Definition: editstr.h:462
ME_DisplayItem * pPara
Definition: editstr.h:275
int nOffset
Definition: editstr.h:277
ME_DisplayItem * pRun
Definition: editstr.h:276
union tagME_DisplayItem::@535 member
ME_DIType type
Definition: editstr.h:256
struct tagME_DisplayItem * prev
Definition: editstr.h:257
ME_Cell cell
Definition: editstr.h:261
struct tagME_DisplayItem * next
Definition: editstr.h:257
ME_Paragraph para
Definition: editstr.h:262
LOGFONTW lfSpecs
Definition: editstr.h:63
WCHAR * szFaceName
Definition: editstr.h:366
EDITSTREAM * editstream
Definition: editstr.h:373
DWORD dwUsed
Definition: editstr.h:375
DWORD dwSize
Definition: editstr.h:374
struct tagME_DisplayItem * next_para
Definition: editstr.h:217
ME_String * text
Definition: editstr.h:205
struct tagME_DisplayItem * next_marked
Definition: editstr.h:218
struct tagME_DisplayItem * prev_marked
Definition: editstr.h:218
ME_BorderRect border
Definition: editstr.h:208
struct tagME_DisplayItem * prev_para
Definition: editstr.h:217
PARAFORMAT2 fmt
Definition: editstr.h:204
struct tagME_DisplayItem * pCell
Definition: editstr.h:207
ME_Run * eop_run
Definition: editstr.h:216
int nWidth
Definition: editstr.h:236
int nRMargin
Definition: editstr.h:238
int nBaseline
Definition: editstr.h:235
POINT pt
Definition: editstr.h:239
int nLMargin
Definition: editstr.h:237
int nHeight
Definition: editstr.h:234
int nAscent
Definition: editstr.h:166
int num_glyphs
Definition: editstr.h:171
POINT pt
Definition: editstr.h:167
GOFFSET * offsets
Definition: editstr.h:175
int nCharOfs
Definition: editstr.h:162
int nDescent
Definition: editstr.h:166
SCRIPT_VISATTR * vis_attrs
Definition: editstr.h:173
int max_clusters
Definition: editstr.h:176
struct tagME_Paragraph * para
Definition: editstr.h:161
int * advances
Definition: editstr.h:174
WORD * glyphs
Definition: editstr.h:172
ME_Style * style
Definition: editstr.h:160
SCRIPT_ANALYSIS script_analysis
Definition: editstr.h:170
int nWidth
Definition: editstr.h:164
struct re_object * reobj
Definition: editstr.h:168
int max_glyphs
Definition: editstr.h:171
int nFlags
Definition: editstr.h:165
int len
Definition: editstr.h:163
WORD * clusters
Definition: editstr.h:177
WCHAR * szData
Definition: editstr.h:56
int nLen
Definition: editstr.h:57
int nBuffer
Definition: editstr.h:57
void(* free)(struct tagME_String *)
Definition: editstr.h:58
CHARFORMAT2W fmt
Definition: editstr.h:73
struct list entry
Definition: editstr.h:79
SCRIPT_CACHE script_cache
Definition: editstr.h:78
ME_FontCacheItem * font_cache
Definition: editstr.h:75
int nRefs
Definition: editstr.h:77
TEXTMETRICW tm
Definition: editstr.h:76
ME_DisplayItem * pFirst
Definition: editstr.h:268
ME_Style * pDefaultStyle
Definition: editstr.h:270
ME_Style * pCharStyle
Definition: editstr.h:269
ME_DisplayItem * pLast
Definition: editstr.h:268
WCHAR cPasswordMask
Definition: editstr.h:426
EDITWORDBREAKPROCW pfnWordBreak
Definition: editstr.h:417
ME_FontCacheItem pFontCache[HFONT_CACHE_SIZE]
Definition: editstr.h:410
COLORREF rgbBackColor
Definition: editstr.h:397
struct list redo_stack
Definition: editstr.h:403
int nZoomNumerator
Definition: editstr.h:411
BOOL bDefaultFormatRect
Definition: editstr.h:414
BOOL bDialogMode
Definition: editstr.h:428
ME_DisplayItem * pLastSelEndPara
Definition: editstr.h:409
DWORD styleFlags
Definition: editstr.h:388
ME_DisplayItem * pLastSelStartPara
Definition: editstr.h:409
SCROLLINFO vert_si
Definition: editstr.h:441
int nLastTotalWidth
Definition: editstr.h:393
int nUndoStackSize
Definition: editstr.h:404
ITextHost * texthost
Definition: editstr.h:383
ME_UndoMode nUndoMode
Definition: editstr.h:406
RECT prevClientRect
Definition: editstr.h:412
struct list reobj_list
Definition: editstr.h:448
ME_SelectionType nSelectionType
Definition: editstr.h:434
BOOL AutoURLDetect_bEnable
Definition: editstr.h:425
ME_Cursor * pCursors
Definition: editstr.h:387
IUnknown * reOle
Definition: editstr.h:384
LPRICHEDITOLECALLBACK lpOleCallback
Definition: editstr.h:418
ME_DisplayItem * first_marked_para
Definition: editstr.h:435
SCROLLINFO horz_si
Definition: editstr.h:441
ME_TextBuffer * pBuffer
Definition: editstr.h:386
int nZoomDenominator
Definition: editstr.h:411
HBRUSH hbrBackground
Definition: editstr.h:398
CHARRANGE notified_cr
Definition: editstr.h:438
BOOL bEmulateVersion10
Definition: editstr.h:385
struct list style_list
Definition: editstr.h:447
BOOL caret_hidden
Definition: editstr.h:444
BOOL bCaretAtEnd
Definition: editstr.h:399
BOOL bMouseCaptured
Definition: editstr.h:445
DWORD exStyleFlags
Definition: editstr.h:389
struct list undo_stack
Definition: editstr.h:402
int nLastTotalLength
Definition: editstr.h:392
BOOL bHideSelection
Definition: editstr.h:424
struct delete_run_item delete_run
Definition: editstr.h:348
struct set_para_fmt_item set_para_fmt
Definition: editstr.h:351
struct split_para_item split_para
Definition: editstr.h:350
struct list entry
Definition: editstr.h:343
struct join_paras_item join_paras
Definition: editstr.h:349
enum undo_type type
Definition: editstr.h:344
struct insert_run_item insert_run
Definition: editstr.h:347
struct set_char_fmt_item set_char_fmt
Definition: editstr.h:352
union undo_item::@536 u
int32_t INT
Definition: typedefs.h:58
DWORD COLORREF
Definition: windef.h:300
int(CALLBACK * EDITWORDBREAKPROCW)(LPWSTR, int, int, int)
Definition: winuser.h:2908
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char BYTE
Definition: xxhash.c:193