1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
|
/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC core/sys/windows/_richedit.d)
*/
module core.sys.windows.richedit;
version (Windows):
version (ANSI) {} else version = Unicode;
import core.sys.windows.windef, core.sys.windows.winuser;
import core.sys.windows.wingdi; // for LF_FACESIZE
align(4):
version (Unicode) {
const wchar[] RICHEDIT_CLASS = "RichEdit20W";
} else {
const char[] RICHEDIT_CLASS = "RichEdit20A";
}
enum RICHEDIT_CLASS10A = "RICHEDIT";
const TCHAR[]
CF_RTF = "Rich Text Format",
CF_RTFNOOBJS = "Rich Text Format Without Objects",
CF_RETEXTOBJ = "RichEdit Text and Objects";
enum DWORD
CFM_BOLD = 1,
CFM_ITALIC = 2,
CFM_UNDERLINE = 4,
CFM_STRIKEOUT = 8,
CFM_PROTECTED = 16,
CFM_LINK = 32,
CFM_SIZE = 0x80000000,
CFM_COLOR = 0x40000000,
CFM_FACE = 0x20000000,
CFM_OFFSET = 0x10000000,
CFM_CHARSET = 0x08000000,
CFM_SUBSCRIPT = 0x00030000,
CFM_SUPERSCRIPT = 0x00030000;
enum DWORD
CFE_BOLD = 1,
CFE_ITALIC = 2,
CFE_UNDERLINE = 4,
CFE_STRIKEOUT = 8,
CFE_PROTECTED = 16,
CFE_SUBSCRIPT = 0x00010000,
CFE_SUPERSCRIPT = 0x00020000,
CFE_AUTOCOLOR = 0x40000000;
enum CFM_EFFECTS = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR
| CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK;
// flags for EM_SETIMEOPTIONS
enum LPARAM
IMF_FORCENONE = 1,
IMF_FORCEENABLE = 2,
IMF_FORCEDISABLE = 4,
IMF_CLOSESTATUSWINDOW = 8,
IMF_VERTICAL = 32,
IMF_FORCEACTIVE = 64,
IMF_FORCEINACTIVE = 128,
IMF_FORCEREMEMBER = 256;
enum SEL_EMPTY=0;
enum SEL_TEXT=1;
enum SEL_OBJECT=2;
enum SEL_MULTICHAR=4;
enum SEL_MULTIOBJECT=8;
enum MAX_TAB_STOPS=32;
enum PFM_ALIGNMENT=8;
enum PFM_NUMBERING=32;
enum PFM_OFFSET=4;
enum PFM_OFFSETINDENT=0x80000000;
enum PFM_RIGHTINDENT=2;
enum PFM_STARTINDENT=1;
enum PFM_TABSTOPS=16;
enum PFM_BORDER=2048;
enum PFM_LINESPACING=256;
enum PFM_NUMBERINGSTART=32768;
enum PFM_NUMBERINGSTYLE=8192;
enum PFM_NUMBERINGTAB=16384;
enum PFM_SHADING=4096;
enum PFM_SPACEAFTER=128;
enum PFM_SPACEBEFORE=64;
enum PFM_STYLE=1024;
enum PFM_DONOTHYPHEN=4194304;
enum PFM_KEEP=131072;
enum PFM_KEEPNEXT=262144;
enum PFM_NOLINENUMBER=1048576;
enum PFM_NOWIDOWCONTROL=2097152;
enum PFM_PAGEBREAKBEFORE=524288;
enum PFM_RTLPARA=65536;
enum PFM_SIDEBYSIDE=8388608;
enum PFM_TABLE=1073741824;
enum PFN_BULLET=1;
enum PFE_DONOTHYPHEN=64;
enum PFE_KEEP=2;
enum PFE_KEEPNEXT=4;
enum PFE_NOLINENUMBER=16;
enum PFE_NOWIDOWCONTROL=32;
enum PFE_PAGEBREAKBEFORE=8;
enum PFE_RTLPARA=1;
enum PFE_SIDEBYSIDE=128;
enum PFE_TABLE=16384;
enum PFA_LEFT=1;
enum PFA_RIGHT=2;
enum PFA_CENTER=3;
enum PFA_JUSTIFY=4;
enum PFA_FULL_INTERWORD=4;
enum SF_TEXT=1;
enum SF_RTF=2;
enum SF_RTFNOOBJS=3;
enum SF_TEXTIZED=4;
enum SF_UNICODE=16;
enum SF_USECODEPAGE=32;
enum SF_NCRFORNONASCII=64;
enum SF_RTFVAL=0x0700;
enum SFF_PWD=0x0800;
enum SFF_KEEPDOCINFO=0x1000;
enum SFF_PERSISTVIEWSCALE=0x2000;
enum SFF_PLAINRTF=0x4000;
enum SFF_SELECTION=0x8000;
enum WB_CLASSIFY = 3;
enum WB_MOVEWORDLEFT = 4;
enum WB_MOVEWORDRIGHT = 5;
enum WB_LEFTBREAK = 6;
enum WB_RIGHTBREAK = 7;
enum WB_MOVEWORDPREV = 4;
enum WB_MOVEWORDNEXT = 5;
enum WB_PREVBREAK = 6;
enum WB_NEXTBREAK = 7;
enum WBF_WORDWRAP = 16;
enum WBF_WORDBREAK = 32;
enum WBF_OVERFLOW = 64;
enum WBF_LEVEL1 = 128;
enum WBF_LEVEL2 = 256;
enum WBF_CUSTOM = 512;
enum ES_DISABLENOSCROLL = 8192;
enum ES_SUNKEN = 16384;
enum ES_SAVESEL = 32768;
enum ES_EX_NOCALLOLEINIT = 16777216;
enum ES_NOIME = 524288;
enum ES_NOOLEDRAGDROP = 8;
enum ES_SELECTIONBAR = 16777216;
enum ES_SELFIME = 262144;
enum ES_VERTICAL = 4194304;
enum EM_CANPASTE = WM_USER+50;
enum EM_DISPLAYBAND = WM_USER+51;
enum EM_EXGETSEL = WM_USER+52;
enum EM_EXLIMITTEXT = WM_USER+53;
enum EM_EXLINEFROMCHAR = WM_USER+54;
enum EM_EXSETSEL = WM_USER+55;
enum EM_FINDTEXT = WM_USER+56;
enum EM_FORMATRANGE = WM_USER+57;
enum EM_GETCHARFORMAT = WM_USER+58;
enum EM_GETEVENTMASK = WM_USER+59;
enum EM_GETOLEINTERFACE = WM_USER+60;
enum EM_GETPARAFORMAT = WM_USER+61;
enum EM_GETSELTEXT = WM_USER+62;
enum EM_HIDESELECTION = WM_USER+63;
enum EM_PASTESPECIAL = WM_USER+64;
enum EM_REQUESTRESIZE = WM_USER+65;
enum EM_SELECTIONTYPE = WM_USER+66;
enum EM_SETBKGNDCOLOR = WM_USER+67;
enum EM_SETCHARFORMAT = WM_USER+68;
enum EM_SETEVENTMASK = WM_USER+69;
enum EM_SETOLECALLBACK = WM_USER+70;
enum EM_SETPARAFORMAT = WM_USER+71;
enum EM_SETTARGETDEVICE = WM_USER+72;
enum EM_STREAMIN = WM_USER+73;
enum EM_STREAMOUT = WM_USER+74;
enum EM_GETTEXTRANGE = WM_USER+75;
enum EM_FINDWORDBREAK = WM_USER+76;
enum EM_SETOPTIONS = WM_USER+77;
enum EM_GETOPTIONS = WM_USER+78;
enum EM_FINDTEXTEX = WM_USER+79;
enum EM_GETWORDBREAKPROCEX = WM_USER+80;
enum EM_SETWORDBREAKPROCEX = WM_USER+81;
/* RichEdit 2.0 messages */
enum EM_SETUNDOLIMIT = WM_USER+82;
enum EM_REDO = WM_USER+84;
enum EM_CANREDO = WM_USER+85;
enum EM_GETUNDONAME = WM_USER+86;
enum EM_GETREDONAME = WM_USER+87;
enum EM_STOPGROUPTYPING = WM_USER+88;
enum EM_SETTEXTMODE = WM_USER+89;
enum EM_GETTEXTMODE = WM_USER+90;
enum EM_AUTOURLDETECT = WM_USER+91;
enum EM_GETAUTOURLDETECT = WM_USER + 92;
enum EM_SETPALETTE = WM_USER + 93;
enum EM_GETTEXTEX = WM_USER+94;
enum EM_GETTEXTLENGTHEX = WM_USER+95;
enum EM_SHOWSCROLLBAR = WM_USER+96;
enum EM_SETTEXTEX = WM_USER + 97;
enum EM_SETPUNCTUATION = WM_USER + 100;
enum EM_GETPUNCTUATION = WM_USER + 101;
enum EM_SETWORDWRAPMODE = WM_USER + 102;
enum EM_GETWORDWRAPMODE = WM_USER + 103;
enum EM_SETIMECOLOR = WM_USER + 104;
enum EM_GETIMECOLOR = WM_USER + 105;
enum EM_SETIMEOPTIONS = WM_USER + 106;
enum EM_GETIMEOPTIONS = WM_USER + 107;
enum EM_SETLANGOPTIONS = WM_USER+120;
enum EM_GETLANGOPTIONS = WM_USER+121;
enum EM_GETIMECOMPMODE = WM_USER+122;
enum EM_FINDTEXTW = WM_USER + 123;
enum EM_FINDTEXTEXW = WM_USER + 124;
enum EM_RECONVERSION = WM_USER + 125;
enum EM_SETBIDIOPTIONS = WM_USER + 200;
enum EM_GETBIDIOPTIONS = WM_USER + 201;
enum EM_SETTYPOGRAPHYOPTIONS = WM_USER+202;
enum EM_GETTYPOGRAPHYOPTIONS = WM_USER+203;
enum EM_SETEDITSTYLE = WM_USER + 204;
enum EM_GETEDITSTYLE = WM_USER + 205;
enum EM_GETSCROLLPOS = WM_USER+221;
enum EM_SETSCROLLPOS = WM_USER+222;
enum EM_SETFONTSIZE = WM_USER+223;
enum EM_GETZOOM = WM_USER+224;
enum EM_SETZOOM = WM_USER+225;
enum EN_MSGFILTER = 1792;
enum EN_REQUESTRESIZE = 1793;
enum EN_SELCHANGE = 1794;
enum EN_DROPFILES = 1795;
enum EN_PROTECTED = 1796;
enum EN_CORRECTTEXT = 1797;
enum EN_STOPNOUNDO = 1798;
enum EN_IMECHANGE = 1799;
enum EN_SAVECLIPBOARD = 1800;
enum EN_OLEOPFAILED = 1801;
enum EN_LINK = 1803;
enum ENM_NONE = 0;
enum ENM_CHANGE = 1;
enum ENM_UPDATE = 2;
enum ENM_SCROLL = 4;
enum ENM_SCROLLEVENTS = 8;
enum ENM_DRAGDROPDONE = 16;
enum ENM_KEYEVENTS = 65536;
enum ENM_MOUSEEVENTS = 131072;
enum ENM_REQUESTRESIZE = 262144;
enum ENM_SELCHANGE = 524288;
enum ENM_DROPFILES = 1048576;
enum ENM_PROTECTED = 2097152;
enum ENM_CORRECTTEXT = 4194304;
enum ENM_IMECHANGE = 8388608;
enum ENM_LANGCHANGE = 16777216;
enum ENM_OBJECTPOSITIONS = 33554432;
enum ENM_LINK = 67108864;
enum ECO_AUTOWORDSELECTION=1;
enum ECO_AUTOVSCROLL=64;
enum ECO_AUTOHSCROLL=128;
enum ECO_NOHIDESEL=256;
enum ECO_READONLY=2048;
enum ECO_WANTRETURN=4096;
enum ECO_SAVESEL=0x8000;
enum ECO_SELECTIONBAR=0x1000000;
enum ECO_VERTICAL=0x400000;
enum {
ECOOP_SET = 1,
ECOOP_OR,
ECOOP_AND,
ECOOP_XOR
}
enum SCF_DEFAULT = 0;
enum SCF_SELECTION = 1;
enum SCF_WORD = 2;
enum SCF_ALL = 4;
enum SCF_USEUIRULES = 8;
alias DWORD TEXTMODE;
enum TM_PLAINTEXT=1;
enum TM_RICHTEXT=2;
enum TM_SINGLELEVELUNDO=4;
enum TM_MULTILEVELUNDO=8;
enum TM_SINGLECODEPAGE=16;
enum TM_MULTICODEPAGE=32;
enum GT_DEFAULT=0;
enum GT_USECRLF=1;
enum yHeightCharPtsMost=1638;
enum lDefaultTab=720;
alias DWORD UNDONAMEID;
enum UID_UNKNOWN = 0;
enum UID_TYPING = 1;
enum UID_DELETE = 2;
enum UID_DRAGDROP = 3;
enum UID_CUT = 4;
enum UID_PASTE = 5;
struct CHARFORMATA {
UINT cbSize = this.sizeof;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
char[LF_FACESIZE] szFaceName = 0;
}
struct CHARFORMATW {
UINT cbSize = this.sizeof;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
WCHAR[LF_FACESIZE] szFaceName = 0;
}
struct CHARFORMAT2A {
UINT cbSize = this.sizeof;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
char[LF_FACESIZE] szFaceName = 0;
WORD wWeight;
SHORT sSpacing;
COLORREF crBackColor;
LCID lcid;
DWORD dwReserved;
SHORT sStyle;
WORD wKerning;
BYTE bUnderlineType;
BYTE bAnimation;
BYTE bRevAuthor;
}
struct CHARFORMAT2W {
UINT cbSize = this.sizeof;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
WCHAR[LF_FACESIZE] szFaceName = 0;
WORD wWeight;
SHORT sSpacing;
COLORREF crBackColor;
LCID lcid;
DWORD dwReserved;
SHORT sStyle;
WORD wKerning;
BYTE bUnderlineType;
BYTE bAnimation;
BYTE bRevAuthor;
}
struct CHARRANGE {
LONG cpMin;
LONG cpMax;
}
struct COMPCOLOR {
COLORREF crText;
COLORREF crBackground;
DWORD dwEffects;
}
extern (Windows) {
alias DWORD function(DWORD_PTR,PBYTE,LONG,LONG*) EDITSTREAMCALLBACK;
}
struct EDITSTREAM {
align(4):
DWORD_PTR dwCookie;
DWORD dwError;
EDITSTREAMCALLBACK pfnCallback;
}
struct ENCORRECTTEXT {
align(4):
NMHDR nmhdr;
CHARRANGE chrg;
WORD seltyp;
}
struct ENDROPFILES {
align(4):
NMHDR nmhdr;
HANDLE hDrop;
LONG cp;
BOOL fProtected;
}
struct ENLINK {
align(4):
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
CHARRANGE chrg;
}
struct ENOLEOPFAILED {
align(4):
NMHDR nmhdr;
LONG iob;
LONG lOper;
HRESULT hr;
}
struct ENPROTECTED {
align(4):
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
CHARRANGE chrg;
}
alias ENPROTECTED* LPENPROTECTED;
struct ENSAVECLIPBOARD {
align(4):
NMHDR nmhdr;
LONG cObjectCount;
LONG cch;
}
struct FINDTEXTA {
CHARRANGE chrg;
LPSTR lpstrText;
}
struct FINDTEXTW {
CHARRANGE chrg;
LPWSTR lpstrText;
}
struct FINDTEXTEXA {
CHARRANGE chrg;
LPSTR lpstrText;
CHARRANGE chrgText;
}
struct FINDTEXTEXW {
CHARRANGE chrg;
LPWSTR lpstrText;
CHARRANGE chrgText;
}
struct FORMATRANGE {
HDC hdc;
HDC hdcTarget;
RECT rc;
RECT rcPage;
CHARRANGE chrg;
}
struct MSGFILTER {
align(4):
NMHDR nmhdr;
UINT msg;
WPARAM wParam;
LPARAM lParam;
}
struct PARAFORMAT {
UINT cbSize = this.sizeof;
DWORD dwMask;
WORD wNumbering;
WORD wReserved;
LONG dxStartIndent;
LONG dxRightIndent;
LONG dxOffset;
WORD wAlignment;
SHORT cTabCount;
LONG[MAX_TAB_STOPS] rgxTabs;
}
struct PARAFORMAT2 {
UINT cbSize = this.sizeof;
DWORD dwMask;
WORD wNumbering;
WORD wEffects;
LONG dxStartIndent;
LONG dxRightIndent;
LONG dxOffset;
WORD wAlignment;
SHORT cTabCount;
LONG[MAX_TAB_STOPS] rgxTabs;
LONG dySpaceBefore;
LONG dySpaceAfter;
LONG dyLineSpacing;
SHORT sStype;
BYTE bLineSpacingRule;
BYTE bOutlineLevel;
WORD wShadingWeight;
WORD wShadingStyle;
WORD wNumberingStart;
WORD wNumberingStyle;
WORD wNumberingTab;
WORD wBorderSpace;
WORD wBorderWidth;
WORD wBorders;
}
struct SELCHANGE {
NMHDR nmhdr;
CHARRANGE chrg;
WORD seltyp;
}
struct TEXTRANGEA {
CHARRANGE chrg;
LPSTR lpstrText;
}
struct TEXTRANGEW {
CHARRANGE chrg;
LPWSTR lpstrText;
}
struct REQRESIZE {
NMHDR nmhdr;
RECT rc;
}
struct REPASTESPECIAL {
align(4):
DWORD dwAspect;
DWORD_PTR dwParam;
}
struct PUNCTUATION {
align(4):
UINT iSize;
LPSTR szPunctuation;
}
struct GETTEXTEX {
align(4):
DWORD cb;
DWORD flags;
UINT codepage;
LPCSTR lpDefaultChar;
LPBOOL lpUsedDefChar;
}
extern (Windows) {
alias LONG function(char*,LONG,BYTE,INT) EDITWORDBREAKPROCEX;
}
/* Defines for EM_SETTYPOGRAPHYOPTIONS */
enum TO_ADVANCEDTYPOGRAPHY = 1;
enum TO_SIMPLELINEBREAK = 2;
/* Defines for GETTEXTLENGTHEX */
enum GTL_DEFAULT = 0;
enum GTL_USECRLF = 1;
enum GTL_PRECISE = 2;
enum GTL_CLOSE = 4;
enum GTL_NUMCHARS = 8;
enum GTL_NUMBYTES = 16;
struct GETTEXTLENGTHEX {
align(4):
DWORD flags;
UINT codepage;
}
version (Unicode) {
alias CHARFORMATW CHARFORMAT;
alias CHARFORMAT2W CHARFORMAT2;
alias FINDTEXTW FINDTEXT;
alias FINDTEXTEXW FINDTEXTEX;
alias TEXTRANGEW TEXTRANGE;
} else {
alias CHARFORMATA CHARFORMAT;
alias CHARFORMAT2A CHARFORMAT2;
alias FINDTEXTA FINDTEXT;
alias FINDTEXTEXA FINDTEXTEX;
alias TEXTRANGEA TEXTRANGE;
}
|