www.pudn.com > ppc_edit-1.2-src.zip > RTF.cs
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;
using Settings;
namespace Modules
{
public static class RTF
{
private static void RTFExport(String Text,UserSettings s,String FileName,Font font)
{//returns RTF'ized "text"
//first - show saving window
ProgressForm rf = new ProgressForm(s,true);
//set RTFprogressForm progressBar maximum value to the length of text we are about to save
rf.saveBar.Maximum = Text.Length / 32 + 1;
rf.Show();
//now let's begin the writing stuff
string c;
StringBuilder buffer = new StringBuilder();
//String buffer;
//store header stuff and font name and size into buffer
buffer.Append("{\\rtf1\\ansi\\ansicpg1250\\deff0\\deflang1051{\\fonttbl{\\f0\\froman\\fprq2\\fcharset238{\\*f\\fname " + font.Name + ";}" + font.Name + ";}}");
buffer.Append("\\viewkind4\\uc1\\pard\\lang1051\\f0\\fs" + Convert.ToString(Convert.ToInt16(font.Size * 2)) + " ");
//write it out
//empty buffer, so we can store new things there
//now the body
//copy contents of text box into unicode character array
char[] CharArray = new char[Text.Length];
CharArray = Text.ToCharArray();
for (int i = 0; i < Text.Length; i++)
{//for each character in TextField: "convert" it if needed to RTF
switch (CharArray[i])
{
//TODO: add more filters for characters,
// for the characters from CharsForm
case 'á': c = "\\'e1";
break;
case 'ä': c = "\\'e4";
break;
case 'è': c = "\\'e8";
break;
case 'ï': c = "\\'ef";
break;
case 'é': c = "\\'e9";
break;
case 'ì': c = "\\'ec";
break;
case 'í': c = "\\'ed";
break;
case 'å': c = "\\'e5";
break;
case '¾': c = "\\'be";
break;
case 'ò': c = "\\'f2";
break;
case 'ó': c = "\\'f3";
break;
case 'ô': c = "\\'f4";
break;
case 'ö': c = "\\'f6";
break;
case 'õ': c = "\\'f5";
break;
case 'à': c = "\\'e0";
break;
case 'ø': c = "\\'f8";
break;
case 'š': c = "\\'9a";
break;
case '': c = "\\'9d";
break;
case 'ú': c = "\\'fa";
break;
case 'ù': c = "\\'f9";
break;
case 'ü': c = "\\'fc";
break;
case 'û': c = "\\'fb";
break;
case 'ý': c = "\\'fd";
break;
case 'ž': c = "\\'9e";
break;
case 'Á': c = "\\'c1";
break;
case 'È': c = "\\'c8";
break;
case 'Ï': c = "\\'cf";
break;
case 'É': c = "\\'c9";
break;
case 'Í': c = "\\'cd";
break;
case 'Å': c = "\\'c5";
break;
case '¼': c = "\\'bc";
break;
case 'Ò': c = "\\'d2";
break;
case 'Ó': c = "\\'d3";
break;
case 'Õ': c = "\\'d5";
break;
case 'Ö': c = "\\'d6";
break;
case 'À': c = "\\'c0";
break;
case 'Ø': c = "\\'d8";
break;
case 'Š': c = "\\'8a";
break;
case '': c = "\\'8d";
break;
case 'Ú': c = "\\'da";
break;
case 'Ü': c = "\\'dc";
break;
case 'Ý': c = "\\'dd";
break;
case 'Ž': c = "\\'8e";
break;
case '©': c = "\\'a9";
break;
case '€': c = "\\'80";
break;
case '§': c = "\\'a7";
break;
case '…': c = "\\'85";
break;
case '«': c = "\\'ab";
break;
case '`': c = "\\'";
break;
case '×': c = "\\'d7";
break;
case '»': c = "\\'bb";
break;
case '®': c = "\\'ae";
break;
case '{': c = "\\{";
break;
case '}': c = "\\}";
break;
case '\\': c = "\\\\";
break;
case '°': c = "\\'b0";
break;
case '\n': //line break = \par
c = "\\par\n";
break;
default: //nothing
c = CharArray[i].ToString();
break;
}
//store it into buffer
buffer.Append(c);
//buffer += CharacterToWrite;
//and update progress
if (i % 32 == 0)
rf.saveBar.Value++;
}
//write ending RTF tags and stuff into buffer
buffer.Append("\\lang1029\\par\n}");
StreamWriter sw = new StreamWriter(FileName);
//now write everything out
sw.Write(buffer);
//close stream
sw.Close();
//close our RTFprogressForm
rf.Close();
//inform user that file was saved successfully
Messages.displaySaveMsg(FileName, new Language(s.Language));
}
public static void Save(String Text,UserSettings s,Font font)
{ ///
///Handles file saving in RTF format.
///
SaveFileDialog SaveDialog = new SaveFileDialog();
SaveDialog.Filter = "RTF file (*.rtf)|*.rtf";
if (SaveDialog.ShowDialog() == DialogResult.OK)
{
RTFExport(Text, s, SaveDialog.FileName, font);
}
}
}
}