2 // Copyright (c) 2007 Novell, Inc.
5 // Jackson Harper (jackson@ximian.com)
11 using System.Windows.Forms;
12 using System.Windows.Forms.RTF;
14 using NUnit.Framework;
16 namespace MonoTests.System.Windows.Forms
21 // class that converts chunks of RTF into HTML
22 internal class RtfToHtml {
25 private StringBuilder text_buffer;
27 public RtfToHtml (RTF parser)
31 parser.ClassCallback [TokenClass.Text] = new ClassDelegate (HandleText);
32 parser.ClassCallback [TokenClass.Control] = new ClassDelegate (HandleControl);
34 text_buffer = new StringBuilder ();
42 public string GetText ()
44 return text_buffer.ToString ();
47 private void HandleText (RTF rtf)
49 text_buffer.Append (rtf.EncodedText);
52 private void HandleControl (RTF rtf)
58 text_buffer.Append (rtf.Param == RTF.NoParam ? "<b>" : "</b>");
61 text_buffer.Append (rtf.Param == RTF.NoParam ? "<i>" : "</i>");
63 case Minor.StrikeThru:
64 text_buffer.Append (rtf.Param == RTF.NoParam ? "<s>" : "</s>");
68 case Major.SpecialChar:
71 text_buffer.Append ("<p>");
80 public void TestEmptyDoc ()
82 RTF parser = new RTF (TextStream ("{\\rtf1}"));
83 RtfToHtml r = new RtfToHtml (parser);
87 Assert.AreEqual (String.Empty, r.GetText (), "emptydoc-1");
91 public void TestSimpleDoc1 ()
93 Assert.AreEqual ("text", ParsedText ("{\\rtf1 text}"), "simpledoc1-1");
94 Assert.AreEqual ("text", ParsedText ("{\\rtf1\ntext}"), "simpledoc1-2");
95 Assert.AreEqual ("text", ParsedText ("\\rtf1\ntext\n}"), "simpledoc1-3");
96 Assert.AreEqual ("text", ParsedText ("\\rtf1\n text}"), "simpledoc1-4");
97 Assert.AreEqual ("text ", ParsedText ("\\rtf1\n text \n}"), "simpledoc1-5");
98 Assert.AreEqual ("text ", ParsedText ("\\rtf1\r\n text \r\n}"), "simpledoc1-6");
99 Assert.AreEqual ("text ", ParsedText ("\\rtf1\n\n\n text \n\n\n}"), "simpledoc1-7");
103 public void TestSimpleParagraphs ()
105 Assert.AreEqual ("<p>", ParsedText ("\\rtf1\\par}"), "simplepar-1");
106 Assert.AreEqual ("<p><p>", ParsedText ("\\rtf1\\par\\par}"), "simplepar-2");
107 Assert.AreEqual (String.Empty, ParsedText ("\\rtf1 \\partext}"), "simplepar-3");
108 Assert.AreEqual ("<p>text", ParsedText ("\\rtf1 \\par text}"), "simplepar-4");
109 Assert.AreEqual ("<p>text<p>", ParsedText ("\\rtf1 \\par text\\par}"), "simplepar-5");
113 public void TestSimpleBold ()
115 Assert.AreEqual ("<b>text", ParsedText ("{\\rtf1 {\\b text}}"), "simplebold-1");
116 Assert.AreEqual ("<b>text</b>", ParsedText ("{\\rtf1 \\b text\\b0}"), "simplebold-2");
117 Assert.AreEqual ("<b>text</b>", ParsedText ("{\\rtf1 \\b text\\b0}"), "simplebold-3");
118 Assert.AreEqual ("<b>text </b>", ParsedText ("{\\rtf1 \\b text \\b0}"), "simplebold-4");
119 Assert.AreEqual ("<b><b>text", ParsedText ("{\\rtf1 \\b\\b text}"), "simplebold-5");
120 Assert.AreEqual ("<b><b>text</b></b>", ParsedText ("{\\rtf1 \\b\\b text\\b0\\b0}"), "simplebold-6");
124 public void TestSimpleItalic ()
126 Assert.AreEqual ("<i>text", ParsedText ("{\\rtf1 {\\i text}}"), "simpleitalic-1");
127 Assert.AreEqual ("<i>text</i>", ParsedText ("{\\rtf1 \\i text\\i0}"), "simpleitalic-2");
128 Assert.AreEqual ("<i>text</i>", ParsedText ("{\\rtf1 \\i text\\i0}"), "simpleitalic-3");
129 Assert.AreEqual ("<i>text </i>", ParsedText ("{\\rtf1 \\i text \\i0}"), "simpleitalic-4");
130 Assert.AreEqual ("<i><i>text", ParsedText ("{\\rtf1 \\i\\i text}"), "simpleitalic-5");
131 Assert.AreEqual ("<i><i>text</i></i>", ParsedText ("{\\rtf1 \\i\\i text\\i0\\i0}"), "simpleitalic-6");
135 public void TestSimpleStrikeThru ()
137 Assert.AreEqual ("<s>text", ParsedText ("{\\rtf1 {\\strike text}}"), "simplestrike-1");
138 Assert.AreEqual ("<s>text</s>", ParsedText ("{\\rtf1 \\strike text\\strike0}"), "simplestrike-2");
139 Assert.AreEqual ("<s>text</s>", ParsedText ("{\\rtf1 \\strike text\\strike0}"), "simplestrike-3");
140 Assert.AreEqual ("<s>text </s>", ParsedText ("{\\rtf1 \\strike text \\strike0}"), "simplestrike-4");
141 Assert.AreEqual ("<s><s>text", ParsedText ("{\\rtf1 \\strike\\strike text}"), "simplestrike-5");
142 Assert.AreEqual ("<s><s>text</s></s>", ParsedText ("{\\rtf1 \\strike\\strike text\\strike0\\strike0}"), "simplestrike-6");
145 private string ParsedText (string text)
147 RTF parser = new RTF (TextStream (text));
148 RtfToHtml r = new RtfToHtml (parser);
155 private MemoryStream TextStream (string text)
157 MemoryStream res = new MemoryStream ();
158 StreamWriter writer = new StreamWriter (res);
163 res.Seek (0, SeekOrigin.Begin);