///<summary>
        ///Procedimiento al que llamaremos para inciar el proceso de marcación
        ///</summary>
        public void startMarkup()
        {
            if (log.IsInfoEnabled) log.Info("Begin");
            /* Declaracion de variables */
            Boolean marked = false;
            Boolean parsed = false;
            String originalString = null;
            String fixedMarkedString = null;
            String issn = null;
            String pathXML = null;
            String clearTag = null;
            Word.Selection docSeleccion = null;
            this.xmlDoc = new XmlDocument();
            List<MarkupStruct> citas = null;
            RegexOptions options = RegexOptions.None;
            Regex objRegExp = new Regex(@"\[[^\]]+?\]", options);;
            Dictionary<String, String> altRule = new Dictionary<String, String>(){
                {"doc", "0000-0000"},
                {"article", "XXXX-XXXX"},
                {"text", "XXXX-XXXX"}
            };
            /*Definiendo directorios de los xml*/
            if (ApplicationDeployment.IsNetworkDeployed)
            {
                pathXML = Path.Combine(ApplicationDeployment.CurrentDeployment.DataDirectory, "regex.xml");
            }
            else {
                pathXML = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "regex.xml");
            }
            /*Verificamos si vamos a usar un archivo externo para las reglas*/
            if (Settings.Default.useExternalRegexFile) {
                pathXML = Settings.Default.externalRegexFile;
            }
            /* Inicializamos variables */
            ActiveDocument = Globals.ThisAddIn.Application.ActiveDocument;
            /* Leemos y verificamos que el issn exista */
            this.dtdType = "article";
            issn = utils.getAttrValueInTag("article", "issn");
            /* Verificamos la existencia de text */
            if (issn == null) {
                issn = utils.getAttrValueInTag("text", "issn");
                this.dtdType = "text";
            }

            /* Verificamos la existencia de doc */
            if (issn == null)
            {
                issn = utils.getAttrValueInTag("doc", "issn");
                this.dtdType = "doc";
            }

            if (log.IsDebugEnabled) log.Debug("issn: " + issn);
            if (issn == null) {
                MessageBox.Show(Resources.RegexMarkup_issnNotDefined, Resources.RegexMarkup_title);
            } else {
                /*Asignamos el numero de version de la DTD*/
                this.dtdVersion = utils.getAttrValueInTag(this.dtdType, "version");
                this.dtdVersion = this.dtdVersion == null ? "4.0" : this.dtdVersion;
                /* Cargamos el archivo xml donde se encuetran los patrones de las revistas */
                try
                {
                    this.xmlDoc.Load(pathXML);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                    return;
                }
                /* Leemos el nodo correspondiente al issn de la revista */
                this.serialNode = this.xmlDoc.SelectSingleNode("//*[@issn=\"" + issn + "\"]");
                /* Si no existe una regla para la revista cargamos una generica */
                this.serialNode = this.serialNode == null ? this.xmlDoc.SelectSingleNode("//*[@issn=\"" + altRule[this.dtdType] + "\"]") : this.serialNode;
                /* Asignamos el estilo de la citación */
                this.citationStyle = this.serialNode.SelectSingleNode("norm").InnerText.Trim();
                if (this.dtdType == "doc")
                    this.citationStyle = "refs";
                /* Verificamos que la seleccion sea del parrafo completo */
                Word.Range start = Globals.ThisAddIn.Application.Selection.Range;
                docSeleccion = Globals.ThisAddIn.Application.Selection;
                if (docSeleccion.Start != docSeleccion.Paragraphs.First.Range.Start || docSeleccion.End != docSeleccion.Paragraphs.Last.Range.End){
                    MessageBox.Show(Resources.RegexMarkup_selectCitationComplete, Resources.RegexMarkup_title);
                } else {
                    /* Asignamos el texto de la seleccion a subjectString */
                    if (log.IsInfoEnabled) log.Info("Select paragraphs");
                    /* Inicializando arratlist de citas */
                    citas = new List<MarkupStruct>();
                    /*Creamos una instancia del formulario*/
                    this.formValidate = ValidateMarkup.Instance;
                    this.formValidate.CitationStyle = this.citationStyle;
                    this.formValidate.DtdVersion = this.dtdVersion;
                    this.formValidate.DtdType = this.dtdType;
                    this.formValidate.updateDTDInfo();
                    /* Buscando parrafo por parrafo */
                    foreach (Word.Paragraph parrafo in docSeleccion.Paragraphs){
                        fixedMarkedString = null;
                        marked = false;
                        parsed = false;
                        /* Mandamos el texto de cada parrafo a una funcion que nos lo regresara marcado y quitamos el salto linea */
                        object parrafoStart = parrafo.Range.Start;
                        object parrafoEnd = (parrafo.Range.End - 1);
                        originalString = ActiveDocument.Range(ref parrafoStart, ref parrafoEnd).Text;
                        //MessageBox.Show(subjetcString, "Texto de parrafo");
                        if (originalString != null)
                        {
                            /*Verificamos si la cadena original ya esta marcada*/
                            if (originalString.IndexOf("[") == 0 && originalString.LastIndexOf("]") == originalString.Length - 1)
                            {
                                marked = true;
                                parsed = true;
                                fixedMarkedString = originalString;
                                clearTag = fixedMarkedString.Substring(1, fixedMarkedString.IndexOf("]") - 1);
                                /*Nos aseguramos de que la etiqueta no contenga algun atributo buscando un espacio*/
                                if(clearTag.IndexOf(" ") > 0){
                                    clearTag = clearTag.Substring(0, clearTag.IndexOf(" "));
                                }
                                /*Con la ayuda de la instancia del formulario limpiamos la cadena marcada*/
                                this.tags.getChilds(clearTag);
                                originalString = this.formValidate.clearTag(fixedMarkedString, clearTag);
                            }
                            citas.Add(new MarkupStruct(originalString, fixedMarkedString, ActiveDocument.Range(ref parrafoStart, ref parrafoEnd), marked, parsed));
                        }
                    }
                    /* Mandamos llamar al formulario para la validación de las citas*/
                    this.formValidate.startValidate(ref citas);

                    if (this.formValidate.ShowDialog() == DialogResult.OK)
                    {
                        /* Ocultamos la aplicacion durante los procesos de reemplazo y coloreado para hacer mas rapida la aplicacion */
                        Globals.ThisAddIn.Application.Visible = false;
                        waitForm = Waiting.Instance;
                        waitForm.Show();
                        /* Reemplzando texto original por el marcado */
                        /* Utilizando el rango de texto de la cita original y reemplzado el texto por el marcado */
                        int citaIndex = 0;
                        foreach (MarkupStruct cita in citas)
                        {
                            if (cita.Marked && cita.Colorized)
                            {
                                Clipboard.Clear();
                                cita.MarkedRtb.SelectAll();
                                Clipboard.SetText(cita.MarkedRtb.SelectedRtf, TextDataFormat.Rtf);
                                cita.RngCita.Paste();
                                cita.RngCita.Font.Size = 11;
                                Clipboard.Clear();
                            }
                            if (this.dtdType == "doc") {
                                if (citaIndex == 0)
                                    cita.RngCita.InsertBefore("[refs]");
                                if (citaIndex == (citas.Count - 1))
                                    cita.RngCita.InsertAfter("[/refs]");
                            }
                            citaIndex++;
                        }
                        /* Mostramos de nuevo la aplicacion */
                        waitForm.Hide();
                        Globals.ThisAddIn.Application.Visible = true;
                        /*Guardamos los cambios*/
                        if (!ActiveDocument.ReadOnly)
                        {
                            object FileName = Path.Combine(ActiveDocument.Path, ActiveDocument.Name);
                            object FileFormat = Word.WdSaveFormat.wdFormatFilteredHTML;
                            if (!ActiveDocument.Path.Contains(".htm"))
                                FileFormat = missing;
                            try
                            {
                                ActiveDocument.SaveAs(ref FileName, ref FileFormat, ref missing,
                                        ref missing, ref missing, ref missing,
                                        ref missing, ref missing,
                                        ref missing, ref missing,
                                        ref missing, ref missing, ref missing,
                                        ref missing, ref missing, ref missing);
                            }catch (Exception e)
                            {
                                if (log.IsErrorEnabled) log.Error(e.Message);
                            }
                        }
                        else
                        {
                            MessageBox.Show(Resources.RegexMarkup_messageOnlyRead);
                        }
                    }
                }
            }
            if (log.IsInfoEnabled) log.Info("End");
        }
 private void buttonSave_Click(object sender, EventArgs e)
 {
     Settings.Default.userName = this.textBoxName.Text;
     Settings.Default.userLastName = this.textBoxLastName.Text;
     Settings.Default.userEmail = this.textBoxEmail.Text;
     Settings.Default.Save();
     this.Close();
     /*Si hay un cambio en el idioma eliminamos las intancias de los formularios*/
     if (this.originalLanguage != Settings.Default.language)
     {
         this.Dispose();
         this.validateMarkup = ValidateMarkup.Instance;
         this.validateMarkup.Dispose();
         this.waitForm = Waiting.Instance;
         this.waitForm.Dispose();
         this.debugForm = Debug.Instance;
         this.debugForm.Dispose();
     }
 }