* Makefile: Build the make-map.exe in Mono.Unix.Native; add /nowarn:0618 to
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms.RTF / test.cs
1 using System;
2 using System.Drawing;
3 using System.Drawing.Imaging;
4 using System.Drawing.Text;
5 using System.Windows.Forms;
6 using System.Text;
7 using System.Threading;
8 using System.Windows.Forms.RTF;
9 using System.IO;
10
11 namespace TextTestClass {
12         public class Test {
13                 static Test     test;
14                 int             skip_width;
15                 int             skip_count;
16                 private string rtf_string = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs17 testing 123testiong\\par\r\n}";
17                 private string rtf_string2 =    "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fcharset0 Arial;}{\\f1\\fmodern\\fprq1\\fcharset0 Courier;}{\\f2\\fswiss\\fprq2\\fcharset0 Arial;}}\r\n" + 
18                         "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue0;}\r\n" + 
19                         "{\\*\\generator Msftedit 5.41.15.1507;}\\viewkind4\\uc1\\pard\\f0\\fs20 I am in Arial 10pt\\par\r\n" + 
20                         "\\fs24 I am in Arial 12pt\\par\r\n" +
21                         "\\f1 I am in Courier 12pt\\par\r\n" + 
22                         "\\cf1 I am in Courier 12pt Red\\par\r\n" + 
23                         "\\cf2\\f2\\fs20 I am in Arial 10pt\\par\r\n" +
24                         "\\b I am in Arial 10pt Italic\\cf0\\b0\\f0\\par\r\n" +
25                         "}";
26                 private string rtf_string3 = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fcharset0 Arial;}{" + 
27                         "\\f1\\fmodern\\fprq1\\fcharset0 Courier;}{\\f2\\fswiss\\fprq2\\fcharset0 Arial;}{\\f3\\fni" +
28                         "l\\fcharset0 Impact;}{\\f4\\fnil\\fcharset0 Arial Unicode MS;}{\\f5\\fnil\\fcharset136 Arial Unicode MS;}{\\f6\\fnil\\fcharset0 MS" +
29                         " Shell Dlg;}}" +
30                         "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue0;}" +
31                         "{\\*\\generator Msftedit 5.41.15.1507;}\\viewkind4\\uc1\\pard\\f0\\fs20 I am in Arial 1" +
32                         "0pt\\par" +
33                         "\\fs24 I am in Arial 12pt\\par" +
34                         "\\f1 I am in Courier 12pt\\par" +
35                         "\\cf1 I am in Courier 12pt Red\\par" +
36                         "\\cf2\\f2\\fs20 I am in Arial 10pt\\par" +
37                         "\\b I am in Arial 10pt Bold\\par" +
38                         "\\i I am in Arial 10pt Bold Italic\\par" +
39                         "\\ul I am in Arial 10pt Bold Italic Underline\\par" +
40                         "\\ulnone\\b0\\i0\\strike I am in Arial 10pt Strikethrough\\par" +
41                         "\\cf0\\strike0\\f3\\fs23 Some cyrilic character: \\u1034?\\par" +
42                         "And 5 CJK characters: \\f4\\fs21\\u23854?\\u23854?\\u23854?\\u23854?\\u23854?\\f5\\fs17\\par" + 
43                         "Some special chars:\\par" +
44                         "\\tab Tilde: ~\\par" +
45                         "\\tab Questionmark:?\\par" +
46                         "\\tab Yen: \\f5\\u165?\\f6\\fs17\\par" +
47                         "\\tab Umlaut: \\'e4\\par" +
48                         "\\f0\\fs20\\par" +
49                         "}";
50
51                 TextMap text;
52
53                 public Test() {
54                         MemoryStream    stream;
55                         RTF             rtf;
56                         byte[]          buffer;
57
58                         text = new TextMap();
59                         TextMap.SetupStandardTable(text.Table);
60
61                         buffer = new byte[rtf_string.Length];
62                         for (int i = 0; i < buffer.Length; i++) {
63                                 buffer[i] = (byte)rtf_string[i];
64                         }
65                         stream = new MemoryStream(buffer);
66                         rtf = new RTF(stream);
67
68                         skip_width = 0;
69                         skip_count = 0;
70
71                         rtf.ClassCallback[TokenClass.Text] = new ClassDelegate(HandleText);
72                         rtf.ClassCallback[TokenClass.Control] = new ClassDelegate(HandleControl);
73
74                         rtf.Read();
75
76                         stream.Close();
77                 }
78
79                 void HandleControl(RTF rtf) {
80                         switch(rtf.Major) {
81                                 case Major.Unicode: {
82                                         switch(rtf.Minor) {
83                                                 case Minor.UnicodeCharBytes: {
84                                                         skip_width = rtf.Param;
85                                                         break;
86                                                 }
87
88                                                 case Minor.UnicodeChar: {
89                                                         Console.Write("[Unicode {0:X4}]", rtf.Param);
90                                                         skip_count += skip_width;
91                                                         break;
92                                                 }
93                                         }
94                                         break;
95                                 }
96
97                                 case Major.Destination: {
98                                         Console.Write("[Got Destination control {0}]", rtf.Minor);
99                                         rtf.SkipGroup();
100                                         break;
101                                 }
102
103                                 case Major.CharAttr: {
104                                         switch(rtf.Minor) {
105                                                 case Minor.ForeColor: {
106                                                         System.Windows.Forms.RTF.Color  color;
107                                                         int     num;
108
109                                                         color = System.Windows.Forms.RTF.Color.GetColor(rtf, rtf.Param);
110                                                         if (color != null) {
111                                                                 if (color.Red == -1 && color.Green == -1 && color.Blue == -1) {
112                                                                         Console.Write("[Default Color]");
113                                                                 } else {
114                                                                         Console.Write("[Color {0} [{1:X2}{2:X2}{3:X}]]", rtf.Param, color.Red, color.Green, color.Blue);
115                                                                 }
116                                                         }
117                                                         break;
118                                                 }
119
120                                                 case Minor.FontSize: {
121                                                         Console.Write("[Fontsize {0}]", rtf.Param);
122                                                         break;
123                                                 }
124
125                                                 case Minor.FontNum: {
126                                                         System.Windows.Forms.RTF.Font   font;
127
128                                                         font = System.Windows.Forms.RTF.Font.GetFont(rtf, rtf.Param);
129                                                         if (font != null) {
130                                                                 Console.Write("[Font {0} [{1}]]", rtf.Param, font.Name);
131                                                         }
132                                                         break;
133                                                 }
134
135                                                 case Minor.Plain: {
136                                                         Console.Write("[Normal]");
137                                                         break;
138                                                 }
139
140                                                 case Minor.Bold: {
141                                                         if (rtf.Param == RTF.NoParam) {
142                                                                 Console.Write("[Bold]");
143                                                         } else {
144                                                                 Console.Write("[NoBold]");
145                                                         }
146                                                         break;
147                                                 }
148
149                                                 case Minor.Italic: {
150                                                         if (rtf.Param == RTF.NoParam) {
151                                                                 Console.Write("[Italic]");
152                                                         } else {
153                                                                 Console.Write("[NoItalic]");
154                                                         }
155                                                         break;
156                                                 }
157
158                                                 case Minor.StrikeThru: {
159                                                         if (rtf.Param == RTF.NoParam) {
160                                                                 Console.Write("[StrikeThru]");
161                                                         } else {
162                                                                 Console.Write("[NoStrikeThru]");
163                                                         }
164                                                         break;
165                                                 }
166
167                                                 case Minor.Underline: {
168                                                         if (rtf.Param == RTF.NoParam) {
169                                                                 Console.Write("[Underline]");
170                                                         } else {
171                                                                 Console.Write("[NoUnderline]");
172                                                         }
173                                                         break;
174                                                 }
175
176                                                 case Minor.NoUnderline: {
177                                                         Console.Write("[NoUnderline]");
178                                                         break;
179                                                 }
180                                         }
181                                         break;
182                                 }
183
184                                 case Major.SpecialChar: {
185                                         Console.Write("[Got SpecialChar control {0}]", rtf.Minor);
186                                         SpecialChar(rtf);
187                                         break;
188                                 }
189                         }
190                 }
191
192                 void SpecialChar(RTF rtf) {
193                         switch(rtf.Minor) {
194                                 case Minor.Page:
195                                 case Minor.Sect:
196                                 case Minor.Row:
197                                 case Minor.Line:
198                                 case Minor.Par: {
199                                         Console.Write("\n");
200                                         break;
201                                 }
202
203                                 case Minor.Cell: {
204                                         Console.Write(" ");
205                                         break;
206                                 }
207
208                                 case Minor.NoBrkSpace: {
209                                         Console.Write(" ");
210                                         break;
211                                 }
212
213                                 case Minor.Tab: {
214                                         Console.Write("\t");
215                                         break;
216                                 }
217
218                                 case Minor.NoBrkHyphen: {
219                                         Console.Write("-");
220                                         break;
221                                 }
222
223                                 case Minor.Bullet: {
224                                         Console.Write("*");
225                                         break;
226                                 }
227
228                                 case Minor.EmDash: {
229                                         Console.Write("\97");
230                                         break;
231                                 }
232
233                                 case Minor.EnDash: {
234                                         Console.Write("\96");
235                                         break;
236                                 }
237
238                                 case Minor.LQuote: {
239                                         Console.Write("\91");
240                                         break;
241                                 }
242
243                                 case Minor.RQuote: {
244                                         Console.Write("\92");
245                                         break;
246                                 }
247
248                                 case Minor.LDblQuote: {
249                                         Console.Write("\93");
250                                         break;
251                                 }
252
253                                 case Minor.RDblQuote: {
254                                         Console.Write("\94");
255                                         break;
256                                 }
257
258                                 default: {
259                                         rtf.SkipGroup();
260                                         break;
261                                 }
262                         }
263                 }
264
265
266                 void HandleText(RTF rtf) {
267                         if (skip_count > 0) {
268                                 skip_count--;
269                                 return;
270                         }
271                         if ((StandardCharCode)rtf.Minor != StandardCharCode.nothing) {
272                                 Console.Write("{0}", text[(StandardCharCode)rtf.Minor]);
273                         } else {
274                                 if ((int)rtf.Major > 31 && (int)rtf.Major < 128) {
275                                         Console.Write("{0}", (char)rtf.Major);
276                                 } else {
277                                         Console.Write("[Literal:0x{0:X2}]", (int)rtf.Major);
278                                 }
279                         }
280                 }
281
282                 public static void Main() {
283                         test = new Test();
284                 }
285         }
286 }