| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- 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();
- }
- }
- }
|