diff options
Diffstat (limited to 'mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/test.cs')
-rw-r--r-- | mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/test.cs | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/test.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/test.cs new file mode 100644 index 00000000000..c62cdb90c49 --- /dev/null +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms.RTF/test.cs @@ -0,0 +1,286 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Drawing.Text; +using System.Windows.Forms; +using System.Text; +using System.Threading; +using System.Windows.Forms.RTF; +using System.IO; + +namespace TextTestClass { + public class Test { + static Test test; + int skip_width; + int skip_count; + 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}"; + 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" + + "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue0;}\r\n" + + "{\\*\\generator Msftedit 5.41.15.1507;}\\viewkind4\\uc1\\pard\\f0\\fs20 I am in Arial 10pt\\par\r\n" + + "\\fs24 I am in Arial 12pt\\par\r\n" + + "\\f1 I am in Courier 12pt\\par\r\n" + + "\\cf1 I am in Courier 12pt Red\\par\r\n" + + "\\cf2\\f2\\fs20 I am in Arial 10pt\\par\r\n" + + "\\b I am in Arial 10pt Italic\\cf0\\b0\\f0\\par\r\n" + + "}"; + private string rtf_string3 = "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fcharset0 Arial;}{" + + "\\f1\\fmodern\\fprq1\\fcharset0 Courier;}{\\f2\\fswiss\\fprq2\\fcharset0 Arial;}{\\f3\\fni" + + "l\\fcharset0 Impact;}{\\f4\\fnil\\fcharset0 Arial Unicode MS;}{\\f5\\fnil\\fcharset136 Arial Unicode MS;}{\\f6\\fnil\\fcharset0 MS" + + " Shell Dlg;}}" + + "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue0;}" + + "{\\*\\generator Msftedit 5.41.15.1507;}\\viewkind4\\uc1\\pard\\f0\\fs20 I am in Arial 1" + + "0pt\\par" + + "\\fs24 I am in Arial 12pt\\par" + + "\\f1 I am in Courier 12pt\\par" + + "\\cf1 I am in Courier 12pt Red\\par" + + "\\cf2\\f2\\fs20 I am in Arial 10pt\\par" + + "\\b I am in Arial 10pt Bold\\par" + + "\\i I am in Arial 10pt Bold Italic\\par" + + "\\ul I am in Arial 10pt Bold Italic Underline\\par" + + "\\ulnone\\b0\\i0\\strike I am in Arial 10pt Strikethrough\\par" + + "\\cf0\\strike0\\f3\\fs23 Some cyrilic character: \\u1034?\\par" + + "And 5 CJK characters: \\f4\\fs21\\u23854?\\u23854?\\u23854?\\u23854?\\u23854?\\f5\\fs17\\par" + + "Some special chars:\\par" + + "\\tab Tilde: ~\\par" + + "\\tab Questionmark:?\\par" + + "\\tab Yen: \\f5\\u165?\\f6\\fs17\\par" + + "\\tab Umlaut: \\'e4\\par" + + "\\f0\\fs20\\par" + + "}"; + + TextMap text; + + public Test() { + MemoryStream stream; + RTF rtf; + byte[] buffer; + + text = new TextMap(); + TextMap.SetupStandardTable(text.Table); + + buffer = new byte[rtf_string.Length]; + for (int i = 0; i < buffer.Length; i++) { + buffer[i] = (byte)rtf_string[i]; + } + stream = new MemoryStream(buffer); + rtf = new RTF(stream); + + skip_width = 0; + skip_count = 0; + + rtf.ClassCallback[TokenClass.Text] = new ClassDelegate(HandleText); + rtf.ClassCallback[TokenClass.Control] = new ClassDelegate(HandleControl); + + rtf.Read(); + + stream.Close(); + } + + void HandleControl(RTF rtf) { + switch(rtf.Major) { + case Major.Unicode: { + switch(rtf.Minor) { + case Minor.UnicodeCharBytes: { + skip_width = rtf.Param; + break; + } + + case Minor.UnicodeChar: { + Console.Write("[Unicode {0:X4}]", rtf.Param); + skip_count += skip_width; + break; + } + } + break; + } + + case Major.Destination: { + Console.Write("[Got Destination control {0}]", rtf.Minor); + rtf.SkipGroup(); + break; + } + + case Major.CharAttr: { + switch(rtf.Minor) { + case Minor.ForeColor: { + System.Windows.Forms.RTF.Color color; + int num; + + color = System.Windows.Forms.RTF.Color.GetColor(rtf, rtf.Param); + if (color != null) { + if (color.Red == -1 && color.Green == -1 && color.Blue == -1) { + Console.Write("[Default Color]"); + } else { + Console.Write("[Color {0} [{1:X2}{2:X2}{3:X}]]", rtf.Param, color.Red, color.Green, color.Blue); + } + } + break; + } + + case Minor.FontSize: { + Console.Write("[Fontsize {0}]", rtf.Param); + break; + } + + case Minor.FontNum: { + System.Windows.Forms.RTF.Font font; + + font = System.Windows.Forms.RTF.Font.GetFont(rtf, rtf.Param); + if (font != null) { + Console.Write("[Font {0} [{1}]]", rtf.Param, font.Name); + } + break; + } + + case Minor.Plain: { + Console.Write("[Normal]"); + break; + } + + case Minor.Bold: { + if (rtf.Param == RTF.NoParam) { + Console.Write("[Bold]"); + } else { + Console.Write("[NoBold]"); + } + break; + } + + case Minor.Italic: { + if (rtf.Param == RTF.NoParam) { + Console.Write("[Italic]"); + } else { + Console.Write("[NoItalic]"); + } + break; + } + + case Minor.StrikeThru: { + if (rtf.Param == RTF.NoParam) { + Console.Write("[StrikeThru]"); + } else { + Console.Write("[NoStrikeThru]"); + } + break; + } + + case Minor.Underline: { + if (rtf.Param == RTF.NoParam) { + Console.Write("[Underline]"); + } else { + Console.Write("[NoUnderline]"); + } + break; + } + + case Minor.NoUnderline: { + Console.Write("[NoUnderline]"); + break; + } + } + break; + } + + case Major.SpecialChar: { + Console.Write("[Got SpecialChar control {0}]", rtf.Minor); + SpecialChar(rtf); + break; + } + } + } + + void SpecialChar(RTF rtf) { + switch(rtf.Minor) { + case Minor.Page: + case Minor.Sect: + case Minor.Row: + case Minor.Line: + case Minor.Par: { + Console.Write("\n"); + break; + } + + case Minor.Cell: { + Console.Write(" "); + break; + } + + case Minor.NoBrkSpace: { + Console.Write(" "); + break; + } + + case Minor.Tab: { + Console.Write("\t"); + break; + } + + case Minor.NoBrkHyphen: { + Console.Write("-"); + break; + } + + case Minor.Bullet: { + Console.Write("*"); + break; + } + + case Minor.EmDash: { + Console.Write("—"); + break; + } + + case Minor.EnDash: { + Console.Write("–"); + break; + } + + case Minor.LQuote: { + Console.Write("‘"); + break; + } + + case Minor.RQuote: { + Console.Write("’"); + break; + } + + case Minor.LDblQuote: { + Console.Write("“"); + break; + } + + case Minor.RDblQuote: { + Console.Write("”"); + break; + } + + default: { + rtf.SkipGroup(); + break; + } + } + } + + + void HandleText(RTF rtf) { + if (skip_count > 0) { + skip_count--; + return; + } + if ((StandardCharCode)rtf.Minor != StandardCharCode.nothing) { + Console.Write("{0}", text[(StandardCharCode)rtf.Minor]); + } else { + if ((int)rtf.Major > 31 && (int)rtf.Major < 128) { + Console.Write("{0}", (char)rtf.Major); + } else { + Console.Write("[Literal:0x{0:X2}]", (int)rtf.Major); + } + } + } + + public static void Main() { + test = new Test(); + } + } +} |