/// <summary>
 /// Stores the content of the Colorizer object (language definitions and styles) in an XML file
 /// </summary>
 /// <param name="filePath">The complete file path where the file will be located at</param>
 /// <param name="colorizer">The Colorizer object to be serialized</param>
 public static void Serialize(string filePath, Colorizer colorizer)
 {
     XmlTextWriter writer = null;
     FileStream file = null;
     try
     {
         /* TODO: reference loops can still cause problems, like when a LanguageElement has a Sublanguage that is also stored by the Colorizer
            the object appears multiple times in the XML file, yet after deserialization .NET seems to recognize that they are the same */
         DataContractSerializer serializer = new DataContractSerializer(typeof(Colorizer), null, int.MaxValue, true, false, null);
         file = File.Create(filePath);
         writer = new XmlTextWriter(file, Encoding.UTF8);
         writer.Formatting = Formatting.Indented;
         serializer.WriteObject(writer, colorizer);
     }
     catch (Exception exception)
     {
         MessageBox.Show("Couldn't save the file: \n" + filePath);
     }
     finally
     {
         if (writer != null)
             writer.Close();
         if (filePath != null)
             file.Close();
     }
 }
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            if (Directory.Exists(directoryPath))
            {
                colorizer = ColorizerSerializer.Deserialize(directoryPath + @"\default.xml");
                formatter = WordFormatterSerializer.Deserialize(directoryPath + @"\basicformat.xml");
                formatter.Initialize(colorizer, this.Application);
            }
            else // if it's the first starting of this version of the Add-In with this user
            {
                Directory.CreateDirectory(directoryPath);

                colorizer = new Colorizer();
                colorizer.LoadPredefinedLanguages();
                colorizer.Initialize();

                formatter = new WordFormatter();
                formatter.Initialize(colorizer, this.Application);
                formatter.SetToDefault();
            }

            indentFixer = new WordIndentFixer(this.Application);
            codecleaner = new CodeCleaner(this.Application);

            Globals.Ribbons.WordCodeEditorToolsRibbon.InitializeAddIn(this);
        }
        /// <summary>
        /// Loads the content of Colorizer object (language definitions and styles) from an XML file.
        /// If the deserializatoin is unsuccessful, then a Colorizer object with the default languages and styles is returned.
        /// </summary>
        /// <param name="filePath">The complete file path where the file will be located at</param>
        /// <returns>The Colorizer object filled with the contents of the file</returns>
        public static Colorizer Deserialize(string filePath)
        {
            Colorizer colorizer;
            FileStream fs = null;
            XmlDictionaryReader reader = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Open);
                reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
                DataContractSerializer ser = new DataContractSerializer(typeof(Colorizer));
                colorizer = (Colorizer)ser.ReadObject(reader, true);

                colorizer.Initialize();
            }
            catch (Exception exception)
            {
                MessageBox.Show("Couldn't load the language database file at: \n"
                    + filePath
                    + "\nonly the predefined styles and languages will be avaliable.");
                colorizer = new Colorizer();
                colorizer.LoadPredefinedLanguages();
                colorizer.Initialize();
            }
            finally
            {
                if (reader != null)
                    reader.Close();
                if (fs != null)
                    fs.Close();
            }
            return colorizer;
        }
        /// <summary>
        /// Stores the content of the Colorizer object (language definitions and styles) in an XML file
        /// </summary>
        /// <param name="filePath">The complete file path where the file will be located at</param>
        /// <param name="colorizer">The Colorizer object to be serialized</param>
        public static void Serialize(string filePath, Colorizer colorizer)
        {
            XmlTextWriter writer = null;
            FileStream    file   = null;

            try
            {
                /* TODO: reference loops can still cause problems, like when a LanguageElement has a Sublanguage that is also stored by the Colorizer
                 * the object appears multiple times in the XML file, yet after deserialization .NET seems to recognize that they are the same */
                DataContractSerializer serializer = new DataContractSerializer(typeof(Colorizer), null, int.MaxValue, true, false, null);
                file              = File.Create(filePath);
                writer            = new XmlTextWriter(file, Encoding.UTF8);
                writer.Formatting = Formatting.Indented;
                serializer.WriteObject(writer, colorizer);
            }
            catch (Exception exception)
            {
                MessageBox.Show("Couldn't save the file: \n" + filePath);
            }
            finally
            {
                if (writer != null)
                {
                    writer.Close();
                }
                if (filePath != null)
                {
                    file.Close();
                }
            }
        }
        public LanguageStyleForm(Colorizer colorizer_)
        {
            InitializeComponent();

            colorizer = colorizer_;
            InitializeLanguageList();
        }
        /// <summary>
        /// Loads the content of Colorizer object (language definitions and styles) from an XML file.
        /// If the deserializatoin is unsuccessful, then a Colorizer object with the default languages and styles is returned.
        /// </summary>
        /// <param name="filePath">The complete file path where the file will be located at</param>
        /// <returns>The Colorizer object filled with the contents of the file</returns>
        public static Colorizer Deserialize(string filePath)
        {
            Colorizer           colorizer;
            FileStream          fs     = null;
            XmlDictionaryReader reader = null;

            try
            {
                fs     = new FileStream(filePath, FileMode.Open);
                reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
                DataContractSerializer ser = new DataContractSerializer(typeof(Colorizer));
                colorizer = (Colorizer)ser.ReadObject(reader, true);

                colorizer.Initialize();
            }
            catch (Exception exception)
            {
                MessageBox.Show("Couldn't load the language database file at: \n"
                                + filePath
                                + "\nonly the predefined styles and languages will be avaliable.");
                colorizer = new Colorizer();
                colorizer.LoadPredefinedLanguages();
                colorizer.Initialize();
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (fs != null)
                {
                    fs.Close();
                }
            }
            return(colorizer);
        }
 /// <summary>
 /// The formatter needs an application (or more precisely its active document) to format, and a colorizer, to determine what colors to use for the formatting. These references must be initialized before any real work can be done.
 /// </summary>
 /// <param name="colorizer_"></param>
 /// <param name="application_"></param>
 public void Initialize(Colorizer colorizer_, Word.Application application_)
 {
     colorizer = colorizer_;
     wordApp = application_;
 }
        // Change whole language database
        private void button_LoadFile_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Do you want to save the current language database, before you load the new one?", "Syntax Highlighter", MessageBoxButtons.YesNoCancel);
            if (result == DialogResult.Yes)
            {
                button_SaveFile_Click(sender, EventArgs.Empty);
            }
            else if (result != DialogResult.Cancel)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.InitialDirectory = @"c:\";
                openFileDialog.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
                openFileDialog.FilterIndex = 2;
                openFileDialog.RestoreDirectory = true;

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    colorizer = ColorizerSerializer.Deserialize(openFileDialog.FileName);
                    this.InitializeLanguageList();
                    languageListChanged = true;
                    colorizerReassigned = true;
                }
            }
        }