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