summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h
blob: 3a846b639a6cd2ee51b20d95d08bed0849ab1ce3 (plain)
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
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
/*
 * Copyright (C) 2000 Jean-Claude Batista
 * Copyright (C) 2002 Andriy Palamarchuk
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

/*
 * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
 * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
 * a choice of LGPL license versions is made available with the language indicating
 * that LGPLv2 or any later version may be used, or where a choice of which version
 * of the LGPL is applied is otherwise unspecified.
 */

#ifndef __WINE_RICHEDIT_H
#define __WINE_RICHEDIT_H

#include <pshpack4.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _RICHEDIT_VER
#define _RICHEDIT_VER   0x0210
#endif /* _RICHEDIT_VER */

#define cchTextLimitDefault 0x7fff

#if defined(__GNUC__)
# define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 }
#elif defined(_MSC_VER)
# define MSFTEDIT_CLASS L"RichEdit50W"
#else
static const WCHAR MSFTEDIT_CLASS[] = { 'R','i','c','h','E','d','i','t','5','0','W',0 };
#endif

#define RICHEDIT_CLASS20A	"RichEdit20A"
#if defined(__GNUC__)
# define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 }
#elif defined(_MSC_VER)
# define RICHEDIT_CLASS20W      L"RichEdit20W"
#else
static const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 };
#endif
#define RICHEDIT_CLASS10A	"RICHEDIT"

#if (_RICHEDIT_VER >= 0x0200 )
#define RICHEDIT_CLASS		WINELIB_NAME_AW(RICHEDIT_CLASS20)
#else
#define RICHEDIT_CLASS		RICHEDIT_CLASS10A
#endif

#ifndef WM_NOTIFY
#define WM_NOTIFY               0x004e
#endif
#ifndef WM_CONTEXTMENU
#define WM_CONTEXTMENU          0x007b
#endif
#ifndef WM_UNICHAR
#define WM_UNICHAR              0x0109
#endif
#ifndef WM_PRINTCLIENT
#define WM_PRINTCLIENT          0x0318
#endif

#ifndef EM_GETLIMITTEXT
#define EM_GETLIMITTEXT         (WM_USER + 37)
#endif
#ifndef EM_POSFROMCHAR
#define EM_POSFROMCHAR          (WM_USER + 38)
#define EM_CHARFROMPOS          (WM_USER + 39)
#endif
#ifndef EM_SCROLLCARET
#define EM_SCROLLCARET		(WM_USER + 49)
#endif
#define EM_CANPASTE		(WM_USER + 50)
#define EM_DISPLAYBAND		(WM_USER + 51)
#define EM_EXGETSEL		(WM_USER + 52)
#define EM_EXLIMITTEXT		(WM_USER + 53)
#define EM_EXLINEFROMCHAR	(WM_USER + 54)
#define EM_EXSETSEL		(WM_USER + 55)
#define EM_FINDTEXT		(WM_USER + 56)
#define EM_FORMATRANGE		(WM_USER + 57)
#define EM_GETCHARFORMAT	(WM_USER + 58)
#define EM_GETEVENTMASK		(WM_USER + 59)
#define EM_GETOLEINTERFACE	(WM_USER + 60)
#define EM_GETPARAFORMAT	(WM_USER + 61)
#define EM_GETSELTEXT		(WM_USER + 62)
#define EM_HIDESELECTION	(WM_USER + 63)
#define EM_PASTESPECIAL		(WM_USER + 64)
#define EM_REQUESTRESIZE	(WM_USER + 65)
#define EM_SELECTIONTYPE	(WM_USER + 66)
#define EM_SETBKGNDCOLOR	(WM_USER + 67)
#define EM_SETCHARFORMAT	(WM_USER + 68)
#define EM_SETEVENTMASK		(WM_USER + 69)
#define EM_SETOLECALLBACK	(WM_USER + 70)
#define EM_SETPARAFORMAT	(WM_USER + 71)
#define EM_SETTARGETDEVICE	(WM_USER + 72)
#define EM_STREAMIN		(WM_USER + 73)
#define EM_STREAMOUT		(WM_USER + 74)
#define EM_GETTEXTRANGE		(WM_USER + 75)
#define EM_FINDWORDBREAK	(WM_USER + 76)
#define EM_SETOPTIONS		(WM_USER + 77)
#define EM_GETOPTIONS		(WM_USER + 78)
#define EM_FINDTEXTEX		(WM_USER + 79)
#define EM_GETWORDBREAKPROCEX	(WM_USER + 80)
#define EM_SETWORDBREAKPROCEX	(WM_USER + 81)

#define EM_SETUNDOLIMIT		(WM_USER + 82)
#define EM_REDO			(WM_USER + 84)
#define EM_CANREDO		(WM_USER + 85)
#define EM_GETUNDONAME		(WM_USER + 86)
#define EM_GETREDONAME		(WM_USER + 87)
#define EM_STOPGROUPTYPING	(WM_USER + 88)

#define EM_SETTEXTMODE		(WM_USER + 89)
#define EM_GETTEXTMODE		(WM_USER + 90)
#define EM_AUTOURLDETECT	(WM_USER + 91)
#define EM_GETAUTOURLDETECT	(WM_USER + 92)
#define EM_SETPALETTE		(WM_USER + 93)
#define EM_GETTEXTEX		(WM_USER + 94)
#define EM_GETTEXTLENGTHEX	(WM_USER + 95)
#define EM_SHOWSCROLLBAR	(WM_USER + 96)
#define EM_SETTEXTEX		(WM_USER + 97)

#define EM_SETPUNCTUATION	(WM_USER + 100)
#define EM_GETPUNCTUATION	(WM_USER + 101)
#define EM_SETWORDWRAPMODE	(WM_USER + 102)
#define EM_GETWORDWRAPMODE	(WM_USER + 103)
#define EM_SETIMECOLOR		(WM_USER + 104)
#define EM_GETIMECOLOR		(WM_USER + 105)
#define EM_SETIMEOPTIONS	(WM_USER + 106)
#define EM_GETIMEOPTIONS	(WM_USER + 107)
#define EM_CONVPOSITION		(WM_USER + 108)

#define EM_SETLANGOPTIONS	(WM_USER + 120)
#define EM_GETLANGOPTIONS	(WM_USER + 121)
#define EM_GETIMECOMPMODE	(WM_USER + 122)

#define EM_FINDTEXTW		(WM_USER + 123)
#define EM_FINDTEXTEXW		(WM_USER + 124)

#define EM_RECONVERSION		(WM_USER + 125)
#define EM_SETIMEMODEBIAS	(WM_USER + 126)
#define EM_GETIMEMODEBIAS	(WM_USER + 127)

#define EM_SETBIDIOPTIONS	(WM_USER + 200)
#define EM_GETBIDIOPTIONS	(WM_USER + 201)

#define EM_SETTYPOGRAPHYOPTIONS (WM_USER + 202)
#define EM_GETTYPOGRAPHYOPTIONS (WM_USER + 203)

#define EM_SETEDITSTYLE		(WM_USER + 204)
#define EM_GETEDITSTYLE		(WM_USER + 205)

#define EM_OUTLINE              (WM_USER + 220)

#define EM_GETSCROLLPOS         (WM_USER + 221)
#define EM_SETSCROLLPOS         (WM_USER + 222)

#define EM_SETFONTSIZE          (WM_USER + 223)
#define EM_GETZOOM		(WM_USER + 224)
#define EM_SETZOOM		(WM_USER + 225)
#define EM_GETVIEWKIND          (WM_USER + 226)
#define EM_SETVIEWKIND          (WM_USER + 227)

#define EM_GETPAGE              (WM_USER + 228)
#define EM_SETPAGE              (WM_USER + 229)
#define EM_GETHYPHENATEINFO     (WM_USER + 230)
#define EM_SETHYPHENATEINFO     (WM_USER + 231)
#define EM_GETPAGEROTATE        (WM_USER + 235)
#define EM_SETPAGEROTATE        (WM_USER + 236)
#define EM_GETCTFMODEBIAS       (WM_USER + 237)
#define EM_SETCTFMODEBIAS       (WM_USER + 238)
#define EM_GETCTFOPENSTATUS     (WM_USER + 240)
#define EM_SETCTFOPENSTATUS     (WM_USER + 241)
#define EM_GETIMECOMPTEXT       (WM_USER + 242)
#define EM_ISIME                (WM_USER + 243)
#define EM_GETIMEPROPERTY       (WM_USER + 244)
#define EM_GETQUERYRTFOBJ       (WM_USER + 269)
#define EM_SETQUERYRTFOBJ       (WM_USER + 270)

/* New notifications */
#define EN_MSGFILTER                    0x0700
#define EN_REQUESTRESIZE                0x0701
#define EN_SELCHANGE                    0x0702
#define EN_DROPFILES                    0x0703
#define EN_PROTECTED                    0x0704
#define EN_CORRECTTEXT                  0x0705
#define EN_STOPNOUNDO                   0x0706
#define EN_IMECHANGE                    0x0707
#define EN_SAVECLIPBOARD                0x0708
#define EN_OLEOPFAILED                  0x0709
#define EN_OBJECTPOSITIONS              0x070a
#define EN_LINK				0x070b
#define EN_DRAGDROPDONE                 0x070c
#define EN_PARAGRAPHEXPANDED		0x070d
#define EN_PAGECHANGE                   0x070e
#define EN_LOWFIRTF                     0x070f
#define EN_ALIGNLTR			0x0710
#define EN_ALIGNRTL			0x0711


typedef DWORD (CALLBACK * EDITSTREAMCALLBACK)( DWORD_PTR, LPBYTE, LONG, LONG * );


#define yHeightCharPtsMost    1638
#define lDefaultTab           720

/* tab stops number limit */
#define MAX_TAB_STOPS         0x00000020

#define MAX_TABLE_CELLS       63

/* Rich edit control styles */
#define ES_NOOLEDRAGDROP      0x00000008
#define ES_DISABLENOSCROLL    0x00002000
#define ES_SUNKEN             0x00004000
#define ES_SAVESEL            0x00008000
#define ES_SELFIME            0x00040000
#define ES_NOIME              0x00080000
#define ES_VERTICAL           0x00400000
#define ES_SELECTIONBAR       0x01000000
#define ES_EX_NOCALLOLEINIT   0x01000000

/* the character formatting options */
#define SCF_DEFAULT           0x00000000
#define SCF_SELECTION         0x00000001
#define SCF_WORD              0x00000002
#define SCF_ALL               0x00000004
#define SCF_USEUIRULES        0x00000008
#define SCF_ASSOCIATEFONT     0x00000010
#define SCF_NOKBUPDATE        0x00000020
#define SCF_ASSOCIATEFONT2    0x00000040

#ifndef WM_NOTIFY
typedef struct _nmhdr
{
    HWND       hwndFrom;
    UINT       idFrom;
    UINT       code;
} NMHDR;
#endif

/* CHARFORMAT structure */
typedef struct _charformat
{
    UINT       cbSize;
    DWORD      dwMask;
    DWORD      dwEffects;
    LONG       yHeight;
    LONG       yOffset;
    COLORREF   crTextColor;
    BYTE       bCharSet;
    BYTE       bPitchAndFamily;
    char       szFaceName[LF_FACESIZE];
} CHARFORMATA;

typedef struct _charformatw
{
    UINT       cbSize;
    DWORD      dwMask;
    DWORD      dwEffects;
    LONG       yHeight;
    LONG       yOffset;
    COLORREF   crTextColor;
    BYTE       bCharSet;
    BYTE       bPitchAndFamily;
    WCHAR      szFaceName[LF_FACESIZE];
} CHARFORMATW;

DECL_WINELIB_TYPE_AW(CHARFORMAT)

typedef struct _charformat2a {
    UINT       cbSize;
    DWORD      dwMask;
    DWORD      dwEffects;
    LONG       yHeight;
    LONG       yOffset;
    COLORREF   crTextColor;
    BYTE       bCharSet;
    BYTE       bPitchAndFamily;
    char       szFaceName[LF_FACESIZE];
    WORD       wWeight;
    SHORT      sSpacing;
    COLORREF   crBackColor;
    LCID       lcid;
    DWORD      dwReserved;
    SHORT      sStyle;
    WORD       wKerning;
    BYTE       bUnderlineType;
    BYTE       bAnimation;
    BYTE       bRevAuthor;
} CHARFORMAT2A;

typedef struct _charformat2w {
    UINT       cbSize;
    DWORD      dwMask;
    DWORD      dwEffects;
    LONG       yHeight;
    LONG       yOffset;
    COLORREF   crTextColor;
    BYTE       bCharSet;
    BYTE       bPitchAndFamily;
    WCHAR      szFaceName[LF_FACESIZE];
    WORD       wWeight;
    SHORT      sSpacing;
    COLORREF   crBackColor;
    LCID       lcid;
    DWORD      dwReserved;
    SHORT      sStyle;
    WORD       wKerning;
    BYTE       bUnderlineType;
    BYTE       bAnimation;
    BYTE       bRevAuthor;
} CHARFORMAT2W;

DECL_WINELIB_TYPE_AW(CHARFORMAT2)

#define CHARFORMATDELTA       (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))

/* CHARFORMAT masks */
#define CFM_BOLD              0x00000001
#define CFM_ITALIC            0x00000002
#define CFM_UNDERLINE         0x00000004
#define CFM_STRIKEOUT         0x00000008
#define CFM_PROTECTED         0x00000010
#define CFM_LINK              0x00000020
#define CFM_SMALLCAPS         0x00000040
#define CFM_ALLCAPS           0x00000080
#define CFM_HIDDEN            0x00000100
#define CFM_OUTLINE           0x00000200
#define CFM_SHADOW            0x00000400
#define CFM_EMBOSS            0x00000800
#define CFM_IMPRINT           0x00001000
#define CFM_DISABLED          0x00002000
#define CFM_REVISED           0x00004000
#define CFM_REVAUTHOR         0x00008000
#define CFM_SUBSCRIPT         0x00030000
#define CFM_SUPERSCRIPT       0x00030000
#define CFM_ANIMATION         0x00040000
#define CFM_STYLE             0x00080000
#define CFM_KERNING           0x00100000
#define CFM_SPACING           0x00200000
#define CFM_WEIGHT            0x00400000
#define CFM_UNDERLINETYPE     0x00800000
#define CFM_LCID              0x02000000
#define CFM_BACKCOLOR         0x04000000
#define CFM_CHARSET           0x08000000
#define CFM_OFFSET            0x10000000
#define CFM_FACE              0x20000000
#define CFM_COLOR             0x40000000
#define CFM_SIZE              0x80000000

#define CFM_EFFECTS           (CFM_BOLD | \
                               CFM_ITALIC | \
                               CFM_UNDERLINE | \
                               CFM_COLOR | \
                               CFM_STRIKEOUT | \
                               CFE_PROTECTED | \
                               CFM_LINK)

#define CFM_EFFECTS2          (CFM_EFFECTS | \
                               CFM_DISABLED | \
                               CFM_SMALLCAPS | \
                               CFM_ALLCAPS | \
                               CFM_HIDDEN | \
                               CFM_OUTLINE | \
                               CFM_SHADOW | \
                               CFM_EMBOSS | \
                               CFM_IMPRINT | \
                               CFM_DISABLED | \
                               CFM_REVISED | \
                               CFM_SUBSCRIPT | \
                               CFM_SUPERSCRIPT | \
                               CFM_BACKCOLOR)

#define CFM_ALL               (CFM_EFFECTS | \
                               CFM_SIZE | \
                               CFM_FACE | \
                               CFM_OFFSET | \
                               CFM_CHARSET)

#define CFM_ALL2              (CFM_ALL | \
                               CFM_EFFECTS2 | \
                               CFM_BACKCOLOR | \
                               CFM_LCID | \
                               CFM_UNDERLINETYPE | \
                               CFM_WEIGHT | \
                               CFM_REVAUTHOR | \
                               CFM_SPACING | \
                               CFM_KERNING | \
                               CFM_STYLE | \
                               CFM_ANIMATION)

/* CHARFORMAT effects */
#define CFE_BOLD              0x00000001
#define CFE_ITALIC            0x00000002
#define CFE_UNDERLINE         0x00000004
#define CFE_STRIKEOUT         0x00000008
#define CFE_PROTECTED         0x00000010
#define CFE_LINK              0x00000020
#define CFE_SUBSCRIPT         0x00010000
#define CFE_SUPERSCRIPT       0x00020000
#define CFE_AUTOCOLOR         0x40000000

#define CFE_SMALLCAPS         CFM_SMALLCAPS
#define CFE_ALLCAPS           CFM_ALLCAPS
#define CFE_HIDDEN            CFM_HIDDEN
#define CFE_OUTLINE           CFM_OUTLINE
#define CFE_SHADOW            CFM_SHADOW
#define CFE_EMBOSS            CFM_EMBOSS
#define CFE_IMPRINT           CFM_IMPRINT
#define CFE_DISABLED          CFM_DISABLED
#define CFE_REVISED           CFM_REVISED
#define CFE_AUTOBACKCOLOR     CFM_BACKCOLOR

#define CFU_UNDERLINENONE             0x00
#define CFU_UNDERLINE                 0x01
#define CFU_UNDERLINEWORD             0x02
#define CFU_UNDERLINEDOUBLE           0x03
#define CFU_UNDERLINEDOTTED           0x04
#define CFU_UNDERLINEDASH             0x05
#define CFU_UNDERLINEDASHDOT          0x06
#define CFU_UNDERLINEDASHDOTDOT       0x07
#define CFU_UNDERLINEWAVE             0x08
#define CFU_UNDERLINETHICK            0x09
#define CFU_UNDERLINEHAIRLINE         0x0a
#define CFU_UNDERLINEDOUBLEWAVE       0x0b
#define CFU_UNDERLINEHEAVYWAVE        0x0c
#define CFU_UNDERLINELONGDASH         0x0d
#define CFU_UNDERLINETHICKDASH        0x0e
#define CFU_UNDERLINETHICKDASHDOT     0x0f
#define CFU_UNDERLINETHICKDASHDOTDOT  0x10
#define CFU_UNDERLINETHICKDOTTED      0x11
#define CFU_UNDERLINETHICKLONGDASH    0x12
#define CFU_INVERT                    0xFE
#define CFU_CF1UNDERLINE              0xFF

/* ECO operations */
#define ECOOP_SET             0x0001
#define ECOOP_OR              0x0002
#define ECOOP_AND             0x0003
#define ECOOP_XOR             0x0004

/* edit control options */
#define ECO_AUTOWORDSELECTION 0x00000001
#define ECO_AUTOVSCROLL       0x00000040
#define ECO_AUTOHSCROLL       0x00000080
#define ECO_NOHIDESEL         0x00000100
#define ECO_READONLY          0x00000800
#define ECO_WANTRETURN        0x00001000
#define ECO_SAVESEL           0x00008000
#define ECO_SELECTIONBAR      0x01000000
#define ECO_VERTICAL          0x00400000

/* Event notification masks */
#define ENM_NONE              0x00000000
#define ENM_CHANGE            0x00000001
#define ENM_UPDATE            0x00000002
#define ENM_SCROLL            0x00000004
#define ENM_SCROLLEVENTS      0x00000008
#define ENM_DRAGDROPDONE      0x00000010
#define ENM_PARAGRAPHEXPANDED 0x00000020
#define ENM_PAGECHANGE        0x00000040
#define ENM_KEYEVENTS         0x00010000
#define ENM_MOUSEEVENTS       0x00020000
#define ENM_REQUESTRESIZE     0x00040000
#define ENM_SELCHANGE         0x00080000
#define ENM_DROPFILES         0x00100000
#define ENM_PROTECTED         0x00200000
#define ENM_CORRECTTEXT       0x00400000
#define ENM_IMECHANGE         0x00800000
#define ENM_LANGCHANGE        0x01000000
#define ENM_OBJECTPOSITIONS   0x02000000
#define ENM_LINK              0x04000000
#define ENM_LOWFIRTF          0x08000000

typedef struct _bidioptions
{
    UINT    cbSize;
    WORD    wMask;
    WORD    wEffects;
} BIDIOPTIONS;

#ifndef __RICHEDIT_CHARRANGE_DEFINED
#define __RICHEDIT_CHARRANGE_DEFINED

typedef struct _charrange
{
    LONG    cpMin;
    LONG    cpMax;
} CHARRANGE;

#endif /* __RICHEDIT_CHARRANGE_DEFINED */

typedef struct _textrange
{
    CHARRANGE chrg;
    LPSTR     lpstrText;
} TEXTRANGEA;

typedef struct _textrangew
{
    CHARRANGE chrg;
    LPWSTR     lpstrText;
} TEXTRANGEW;

DECL_WINELIB_TYPE_AW(TEXTRANGE)

typedef struct _editstream
{
    DWORD_PTR		dwCookie;
    DWORD		dwError;
    EDITSTREAMCALLBACK	pfnCallback;
} EDITSTREAM;

typedef struct _compcolor {
    COLORREF   crText;
    COLORREF   crBackground;
    DWORD      dwEffects;
} COMPCOLOR;

typedef struct _encorrecttext {
    NMHDR      nmhdr;
    CHARRANGE  chrg;
    WORD       seltyp;
} ENCORRECTTEXT;

typedef struct _endropfiles {
    NMHDR      nmhdr;
    HANDLE     hDrop;
    LONG       cp;
    BOOL       fProtected;
} ENDROPFILES;

typedef struct _enlink {
    NMHDR      nmhdr;
    UINT       msg;
    WPARAM     wParam;
    LPARAM     lParam;
    CHARRANGE  chrg;
} ENLINK;

typedef struct _enlowfirtf {
    NMHDR      nmhdr;
    char       *szControl;
} ENLOWFIRTF;

typedef struct {
    NMHDR      nmhdr;
    LONG       iob;
    LONG       lOper;
    HRESULT    hr;
} ENOLEOPFAILED;

typedef struct _enprotected {
    NMHDR      nmhdr;
    UINT       msg;
    WPARAM     wParam;
    LPARAM     lParam;
    CHARRANGE  chrg;
} ENPROTECTED, *LPENPROTECTED;

typedef struct _ensaveclipboard {
    NMHDR      nmhdr;
    LONG       cObjectCount;
    LONG       cch;
} ENSAVECLIPBOARD;

typedef struct _findtextA {
    CHARRANGE  chrg;
    LPCSTR     lpstrText;
} FINDTEXTA;

typedef struct _findtextW {
    CHARRANGE  chrg;
    LPCWSTR    lpstrText;
} FINDTEXTW;

DECL_WINELIB_TYPE_AW(FINDTEXT)

typedef struct _findtextexA {
    CHARRANGE  chrg;
    LPCSTR     lpstrText;
    CHARRANGE  chrgText;
} FINDTEXTEXA;

typedef struct _findtextexW {
    CHARRANGE  chrg;
    LPCWSTR    lpstrText;
    CHARRANGE  chrgText;
} FINDTEXTEXW;

DECL_WINELIB_TYPE_AW(FINDTEXTEX)

typedef struct _formatrange {
    HDC        hdc;
    HDC        hdcTarget;
    RECT       rc;
    RECT       rcPage;
    CHARRANGE  chrg;
} FORMATRANGE;

typedef enum tagKHYPH
{
    khyphNil           = 0,
    khyphNormal        = 1,
    khyphAddBefore     = 2,
    khyphChangeBefore  = 3,
    khyphDeleteBefore  = 4,
    khyphChangeAfter   = 5,
    khyphDelAndChange  = 6
} KHYPH;

typedef struct hyphresult
{
    KHYPH      khyph;
    LONG       ichHyph;
    WCHAR      chHyph;
} HYPHRESULT;

typedef struct tagHyphenateInfo
{
    SHORT      cbSize;
    SHORT      dxHyphenateZone;
    void       (WINAPI* pfnHyphenate)(WCHAR*, LANGID, LONG, HYPHRESULT*);
} HYPHENATEINFO;

typedef struct _msgfilter {
    NMHDR      nmhdr;
    UINT       msg;
    WPARAM     wParam;
    LPARAM     lParam;
} MSGFILTER;

typedef struct _objectpositions {
    NMHDR      nmhdr;
    LONG       cObjectCount;
    LONG       *pcpPositions;
} OBJECTPOSITIONS;

typedef struct _paraformat {
    UINT       cbSize;
    DWORD      dwMask;
    WORD       wNumbering;
    WORD       wReserved;
    LONG       dxStartIndent;
    LONG       dxRightIndent;
    LONG       dxOffset;
    WORD       wAlignment;
    SHORT      cTabCount;
    LONG       rgxTabs[MAX_TAB_STOPS];
} PARAFORMAT;

typedef struct _paraformat2 {
    UINT       cbSize;
    DWORD      dwMask;
    WORD       wNumbering;
    WORD       wEffects;
    LONG       dxStartIndent;
    LONG       dxRightIndent;
    LONG       dxOffset;
    WORD       wAlignment;
    SHORT      cTabCount;
    LONG       rgxTabs[MAX_TAB_STOPS];
    LONG       dySpaceBefore, dySpaceAfter, dyLineSpacing;
    SHORT      sStyle;
    BYTE       bLineSpacingRule, bOutlineLevel;
    WORD       wShadingWeight, wShadingStyle;
    WORD       wNumberingStart, wNumberingStyle, wNumberingTab;
    WORD       wBorderSpace, wBorderWidth, wBorders;
} PARAFORMAT2;

typedef struct _selchange {
    NMHDR      nmhdr;
    CHARRANGE  chrg;
    WORD       seltyp;
} SELCHANGE;

typedef struct _reqresize {
    NMHDR      nmhdr;
    RECT       rc;
} REQRESIZE;

typedef struct _repastespecial {
    DWORD      dwAspect;
    DWORD      dwParam;
} REPASTESPECIAL;

typedef struct _punctuation {
    UINT       iSize;
    LPSTR      szPunctuation;
} PUNCTUATION;

typedef struct _gettextex {
    DWORD      cb;
    DWORD      flags;
    UINT       codepage;
    LPCSTR     lpDefaultChar;
    LPBOOL     lpUsedDefChar;
} GETTEXTEX;

typedef struct _imecomptext {
    LONG       cb;
    DWORD      flags;
} IMECOMPTEXT;

void WINAPI HyphenateProc(WCHAR*, LANGID, LONG, HYPHRESULT*);

#define SF_TEXT		      0x00000001
#define SF_RTF		      0x00000002
#define SF_RTFNOOBJS	      0x00000003
#define SF_TEXTIZED	      0x00000004
#define SF_UNICODE            0x00000010
#define SF_USECODEPAGE        0x00000020
#define SF_NCRFORNONASCII     0x00000040
#define SF_RTFVAL             0x00000700

/* BIDIOPTIONS.wMask flag values */
#define BOM_DEFPARADIR        0x00000001
#define BOM_PLAINTEXT         0x00000002
#define BOM_NEUTRALOVERRIDE   0x00000004
#define BOM_CONTEXTREADING    0x00000008
#define BOM_CONTEXTALIGNMENT  0x00000010
#define BOM_LEGACYBIDICLASS   0x00000040

/* BIDIOPTIONS.wEffects flag values */
#define BOE_RTLDIR            0x00000001
#define BOE_PLAINTEXT         0x00000002
#define BOE_NEUTRALOVERRIDE   0x00000004
#define BOE_CONTEXTREADING    0x00000008
#define BOE_CONTEXTALIGNMENT  0x00000010
#define BOE_LEGACYBIDICLASS   0x00000040

/* Clipboard formats */
#define CF_RTF          TEXT("Rich Text Format")
#define CF_RTFNOOBJS    TEXT("Rich Text Format Without Objects")
#define CF_RETEXTOBJ    TEXT("RichEdit Text and Objects")

/* Mode bias wParam values for EM_SETCTFMODEBIAS message */
#define CTFMODEBIAS_DEFAULT                0x00000000
#define CTFMODEBIAS_FILENAME               0x00000001
#define CTFMODEBIAS_NAME                   0x00000002
#define CTFMODEBIAS_READING                0x00000003
#define CTFMODEBIAS_DATETIME               0x00000004
#define CTFMODEBIAS_CONVERSATION           0x00000005
#define CTFMODEBIAS_NUMERIC                0x00000006
#define CTFMODEBIAS_HIRAGANA               0x00000007
#define CTFMODEBIAS_KATAKANA               0x00000008
#define CTFMODEBIAS_HANGUL                 0x00000009
#define CTFMODEBIAS_HALFWIDTHKATAKANA      0x0000000a
#define CTFMODEBIAS_FULLWIDTHALPHANUMERIC  0x0000000b
#define CTFMODEBIAS_HALFWIDTHALPHANUMERIC  0x0000000c

#define EMO_EXIT              0x00000000
#define EMO_ENTER             0x00000001
#define EMO_PROMOTE           0x00000002
#define EMO_EXPAND            0x00000003
#define EMO_MOVESELECTION     0x00000004
#define EMO_GETVIEWMODE       0x00000005

#define EMO_EXPANDSELECTION   0x00000000
#define EMO_EXPANDDOCUMENT    0x00000001

/* Page Rotate values used in wParam of EM_SETPAGEROTATE message */
#define EPR_0                 0x00000000
#define EPR_270               0x00000001
#define EPR_180               0x00000002
#define EPR_90                0x00000003

/* Find flags for wParam of EM_FINDTEXT message */
#define FR_MATCHDIAC          0x20000000
#define FR_MATCHKASHIDA       0x40000000
#define FR_MATCHALEFHAMZA     0x80000000

/* IME Compatibility Mode return values for EM_GETIMECOMPMODE message */
#define ICM_NOTOPEN           0x00000000
#define ICM_LEVEL3            0x00000001
#define ICM_LEVEL2            0x00000002
#define ICM_LEVEL2_5          0x00000003
#define ICM_LEVEL2_SUI        0x00000004
#define ICM_CTF               0x00000005

/* Flags value for IMECOMPTEXT structure */
#define ICT_RESULTREADSTR     0x00000001

/* Input Method Flags used in EM_SETLANGOPTIONS message */
#define IMF_AUTOKEYBOARD        0x00000001
#define IMF_AUTOFONT            0x00000002
#define IMF_IMECANCELCOMPLETE   0x00000004
#define IMF_IMEALWAYSSENDNOTIFY 0x00000008
#define IMF_AUTOFONTSIZEADJUST  0x00000010
#define IMF_UIFONTS             0x00000020
#define IMF_DUALFONT            0x00000080

/* Parameters values for the EM_SETIMEMODEBIAS message */
#define IMF_SMODE_PLAURALCLAUSE 0x00000001
#define IMF_SMODE_NONE          0x00000002

/* Parameters of the EM_SETIMEOPTIONS message */
#define IMF_FORCENONE         0x00000001
#define IMF_FORCEENABLE       0x00000002
#define IMF_FORCEDISABLE      0x00000004
#define IMF_CLOSESTATUSWINDOW 0x00000008
#define IMF_VERTICAL          0x00000020
#define IMF_FORCEACTIVE       0x00000040
#define IMF_FORCEINACTIVE     0x00000080
#define IMF_FORCEREMEMBER     0x00000100
#define IMF_MULTIPLEEDIT      0x00000400

/* return values of the EM_SELECTION_TYPE message */
#define SEL_EMPTY             0x00000000
#define SEL_TEXT              0x00000001
#define SEL_OBJECT            0x00000002
#define SEL_MULTICHAR         0x00000004
#define SEL_MULTIOBJECT       0x00000008

/* ENOLEOPFAILED.lOper value that indicates operation failure */
#define OLEOP_DOVERB          0x00000001

/* punctionation type values for wParam of EM_SETPUNCTUATION message */
#define PC_FOLLOWING          0x00000001
#define PC_LEADING            0x00000002
#define PC_OVERFLOW           0x00000003
#define PC_DELIMITER          0x00000004

/* mask values in the PARAFORMAT structure */
#define PFM_STARTINDENT       0x00000001
#define PFM_RIGHTINDENT       0x00000002
#define PFM_OFFSET            0x00000004
#define PFM_ALIGNMENT         0x00000008
#define PFM_TABSTOPS          0x00000010
#define PFM_NUMBERING         0x00000020
#define PFM_OFFSETINDENT      0x80000000

/* mask values in the PARAFORMAT2 structure */
#define PFM_SPACEBEFORE       0x00000040
#define PFM_SPACEAFTER        0x00000080
#define PFM_LINESPACING       0x00000100
#define PFM_STYLE             0x00000400
#define PFM_BORDER            0x00000800
#define PFM_SHADING           0x00001000
#define PFM_NUMBERINGSTYLE    0x00002000
#define PFM_NUMBERINGTAB      0x00004000
#define PFM_NUMBERINGSTART    0x00008000
#define PFM_RTLPARA           0x00010000
#define PFM_KEEP              0x00020000
#define PFM_KEEPNEXT          0x00040000
#define PFM_PAGEBREAKBEFORE   0x00080000
#define PFM_NOLINENUMBER      0x00100000
#define PFM_NOWIDOWCONTROL    0x00200000
#define PFM_DONOTHYPHEN       0x00400000
#define PFM_SIDEBYSIDE        0x00800000
#define PFM_COLLAPSED         0x01000000
#define PFM_OUTLINELEVEL      0x02000000
#define PFM_BOX               0x04000000
#define PFM_RESERVED2         0x08000000
#define PFM_TABLEROWDELIMITER 0x10000000
#define PFM_TEXTWRAPPINGBREAK 0x20000000
#define PFM_TABLE             0x40000000

#define PFM_ALL               (PFM_STARTINDENT | \
                               PFM_RIGHTINDENT | \
                               PFM_OFFSET | \
                               PFM_ALIGNMENT | \
                               PFM_TABSTOPS | \
                               PFM_NUMBERING | \
                               PFM_OFFSETINDENT | \
                               PFM_RTLPARA)

#define PFM_EFFECTS           (PFM_RTLPARA | \
                               PFM_KEEP | \
                               PFM_KEEPNEXT | \
                               PFM_PAGEBREAKBEFORE | \
                               PFM_NOLINENUMBER | \
                               PFM_NOWIDOWCONTROL | \
                               PFM_DONOTHYPHEN | \
                               PFM_SIDEBYSIDE | \
                               PFM_TABLEROWDELIMITER | \
                               PFM_TABLE)

#define PFM_ALL2              (PFM_ALL | \
                               PFM_EFFECTS | \
                               PFM_SPACEBEFORE | \
                               PFM_SPACEAFTER | \
                               PFM_LINESPACING | \
                               PFM_STYLE | \
                               PFM_BORDER | \
                               PFM_SHADING | \
                               PFM_NUMBERINGSTYLE | \
                               PFM_NUMBERINGTAB | \
                               PFM_NUMBERINGSTART)

/* numbering option */
#define PFN_BULLET            0x00000001
#define PFN_ARABIC            0x00000002
#define PFN_LCLETTER          0x00000003
#define PFN_UCLETTER          0x00000004
#define PFN_LCROMAN           0x00000005
#define PFN_UCROMAN           0x00000006

/* paragraph format numbering styles */
#define PFNS_PAREN            0x00000000
#define PFNS_PARENS           0x00000100
#define PFNS_PERIOD           0x00000200
#define PFNS_PLAIN            0x00000300
#define PFNS_NONUMBER         0x00000400
#define PFNS_NEWNUMBER        0x00008000

/* paragraph alignment */
#define PFA_LEFT              0x00000001
#define PFA_RIGHT             0x00000002
#define PFA_CENTER            0x00000003
#define PFA_JUSTIFY           0x00000004
#define PFA_FULL_INTERWORD    0x00000004
#define PFA_FULL_INTERLETTER  0x00000005
#define PFA_FULL_SCALED       0x00000006
#define PFA_FULL_GLYPHS       0x00000007
#define PFA_SNAP_GRID         0x00000008

/* paragraph effects */
#define PFE_RTLPARA           0x00000001
#define PFE_KEEP              0x00000002
#define PFE_KEEPNEXT          0x00000004
#define PFE_PAGEBREAKBEFORE   0x00000008
#define PFE_NOLINENUMBER      0x00000010
#define PFE_NOWIDOWCONTROL    0x00000020
#define PFE_DONOTHYPHEN       0x00000040
#define PFE_SIDEBYSIDE        0x00000080
#define PFE_COLLAPSED         0x00000100
#define PFE_BOX               0x00000400
#define PFE_TABLEROWDELIMITER 0x00001000
#define PFE_TEXTWRAPPINGBREAK 0x00002000
#define PFE_TABLE             0x00004000

/* Set Edit Style flags for EM_SETEDITSTYLE message */
#define SES_EMULATESYSEDIT      0x00000001
#define SES_BEEPONMAXTEXT       0x00000002
#define SES_EXTENDBACKCOLOR     0x00000004
#define SES_MAPCPS              0x00000008
#define SES_EMULATE10           0x00000010
#define SES_USECRLF             0x00000020
#define SES_NOXLTSYMBOLRANGE    0x00000020
#define SES_USEAIMM             0x00000040
#define SES_NOIME               0x00000080
#define SES_ALLOWBEEPS          0x00000100
#define SES_UPPERCASE           0x00000200
#define SES_LOWERCASE           0x00000400
#define SES_NOINPUTSEQUENCECHK  0x00000800
#define SES_BIDI                0x00001000
#define SES_SCROLLONKILLFOCUS   0x00002000
#define SES_XLTCRCRLFTOCR       0x00004000
#define SES_DRAFTMODE           0x00008000
#define SES_USECTF              0x00010000
#define SES_HIDEGRIDLINES       0x00020000
#define SES_USEATFONT           0x00040000
#define SES_CUSTOMLOOK          0x00080000
#define SES_LBSCROLLNOTIFY      0x00100000
#define SES_CTFALLOWEMBED       0x00200000
#define SES_CTFALLOWSMARTTAG    0x00400000
#define SES_CTFALLOWPROOFING    0x00800000

/* streaming flags */
#define SFF_WRITEXTRAPAR      0x00000080
#define SFF_PWD               0x00000800
#define SFF_KEEPDOCINFO       0x00001000
#define SFF_PERSISTVIEWSCALE  0x00002000
#define SFF_PLAINRTF          0x00004000
#define SFF_SELECTION         0x00008000

typedef enum _undonameid
{
    UID_UNKNOWN     = 0,
    UID_TYPING      = 1,
    UID_DELETE      = 2,
    UID_DRAGDROP    = 3,
    UID_CUT         = 4,
    UID_PASTE       = 5,
    UID_AUTOCORRECT = 6
} UNDONAMEID;

typedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT);

#define VM_OUTLINE            0x00000002
#define VM_NORMAL             0x00000004
#define VM_PAGE               0x00000009

/* options of the EM_FINDWORDBREAK message */
#define WB_CLASSIFY           0x00000003
#define WB_MOVEWORDLEFT       0x00000004
#define WB_MOVEWORDPREV       0x00000004
#define WB_MOVEWORDRIGHT      0x00000005
#define WB_MOVEWORDNEXT       0x00000005
#define WB_LEFTBREAK          0x00000006
#define WB_PREVBREAK          0x00000006
#define WB_RIGHTBREAK         0x00000007
#define WB_NEXTBREAK          0x00000007

/* options of the EM_SETWORDWRAPMODE message */
#define WBF_WORDWRAP          0x00000010
#define WBF_WORDBREAK         0x00000020
#define WBF_OVERFLOW          0x00000040
#define WBF_LEVEL1            0x00000080
#define WBF_LEVEL2            0x00000100
#define WBF_CUSTOM            0x00000200

#define WBF_CLASS             ((BYTE) 0x0F)
#define WBF_ISWHITE           ((BYTE) 0x10)
#define WBF_BREAKLINE         ((BYTE) 0x20)
#define WBF_BREAKAFTER        ((BYTE) 0x40)

/* Placeholder unicode character for an embedded object */
#ifndef WCH_EMBEDDING
#define WCH_EMBEDDING         (WCHAR)0xFFFC
#endif

/* options of the EM_SETTEXTMODE message */
#define TM_PLAINTEXT          0x00000001
#define TM_RICHTEXT           0x00000002
#define TM_SINGLELEVELUNDO    0x00000004
#define TM_MULTILEVELUNDO     0x00000008
#define TM_SINGLECODEPAGE     0x00000010
#define TM_MULTICODEPAGE      0x00000020

/* GETTEXTEX structure flags */
#define GT_DEFAULT            0x00000000
#define GT_USECRLF            0x00000001
#define GT_SELECTION          0x00000002
#define GT_RAWTEXT            0x00000004
#define GT_NOHIDDENTEXT       0x00000008

/* Options of the EM_SETTYPOGRAPHYOPTIONS message */
#define TO_ADVANCEDTYPOGRAPHY   0x00000001
#define TO_SIMPLELINEBREAK      0x00000002
#define TO_DISABLECUSTOMTEXTOUT 0x00000004
#define TO_ADVANCEDLAYOUT       0x00000008

typedef struct _gettextlengthex {
    DWORD      flags;
    UINT       codepage;
} GETTEXTLENGTHEX;

/* Flags of the GETTEXTLENGTHEX structure */
#define GTL_DEFAULT           0x00000000
#define GTL_USECRLF           0x00000001
#define GTL_PRECISE           0x00000002
#define GTL_CLOSE             0x00000004
#define GTL_NUMCHARS          0x00000008
#define GTL_NUMBYTES          0x00000010

#define GCM_RIGHTMOUSEDROP    0x8000

/* Options of the EM_SETTEXTEX message */
typedef struct _settextex {
    DWORD	flags;
    UINT	codepage;
} SETTEXTEX;

/* Flags of the EM_SETTEXTEX message */
#define ST_DEFAULT	      0x00000000	
#define ST_KEEPUNDO           0x00000001
#define ST_SELECTION          0x00000002
#define ST_NEWCHARS           0x00000004
#define ST_UNICODE            0x00000008

#ifdef __cplusplus
}
#endif

#include <poppack.h>

#endif /* __WINE_RICHEDIT_H */