Beispiel #1
0
        /// <summary>
        /// Корректировка парных тегов Стихов
        /// </summary>
        /// <returns>Откорректированную строку типа string </returns>
        public string correct()
        {
            if (_xmlText.IndexOf(_startTag, StringComparison.CurrentCulture) == -1)
            {
                return(_xmlText);
            }

            // преобработка (удаление стартовых пробелов ДО тегов и удаление завершающих пробелов ПОСЛЕ тегов и символов переноса строк)
            if (_preProcess)
            {
                _xmlText = FB2CleanCode.preProcessing(_xmlText);
            }

            /**********************************
            * Предварительная обработка poem *
            **********************************/
            // Удаление структур <poem><stanza /></poem>
            try {
                _xmlText = Regex.Replace(
                    _xmlText, @"<poem>\s*?<stanza ?/>\s*?</poem>",
                    "", RegexOptions.IgnoreCase | RegexOptions.Multiline
                    );
            } catch (RegexMatchTimeoutException /*ex*/) {}
            catch (Exception ex) {
                Debug.DebugMessage(
                    _FilePath, ex, "PoemCorrector:\r\nУдаление структур <poem><stanza /></poem>."
                    );
            }

            // Удаление структур <poem><stanza><empty-line /></stanza></poem>
            try {
                _xmlText = Regex.Replace(
                    _xmlText, @"<poem>\s*?<stanza>\s*?<empty-line ?/>\s*?</stanza>\s*?</poem>",
                    "", RegexOptions.IgnoreCase | RegexOptions.Multiline
                    );
            } catch (RegexMatchTimeoutException /*ex*/) {}
            catch (Exception ex) {
                Debug.DebugMessage(
                    _FilePath, ex, "PoemCorrector:\r\nУдаление структур <poem><stanza><empty-line /></stanza></poem>."
                    );
            }

            // вставка <text-author> внутрь <poem> </poem>
            try {
                _xmlText = Regex.Replace(
                    _xmlText, @"(?'_poem'</poem>)(?'ws'\s*)(?'textauthor'<text-author>\s*.+?\s*</text-author>)",
                    "${textauthor}${ws}${_poem}", RegexOptions.IgnoreCase | RegexOptions.Multiline
                    );
            } catch (RegexMatchTimeoutException /*ex*/) {}
            catch (Exception ex) {
                Debug.DebugMessage(
                    _FilePath, ex, "PoemCorrector:\r\nВставка <text-author> внутрь <poem> </poem>."
                    );
            }

            // обработка найденных парных тэгов
            IWorker   worker    = new PoemCorrectorWorker();
            TagWorker tagWorker = new TagWorker(_FilePath, ref _xmlText, _startTag, _endTag, ref worker);

            _xmlText = tagWorker.Work();

            // постобработка (разбиение на теги (смежные теги) )
            if (_postProcess)
            {
                _xmlText = FB2CleanCode.postProcessing(_xmlText);
            }

            return(_xmlText);
        }
Beispiel #2
0
        /// <summary>
        /// Корректировка парных тегов Стихов
        /// </summary>
        /// <returns>Откорректированную строку типа string </returns>
        public string correct()
        {
            if (_xmlText.IndexOf(_startTag, StringComparison.CurrentCulture) == -1)
            {
                return(_xmlText);
            }

            // преобработка (удаление стартовых пробелов ДО тегов и удаление завершающих пробелов ПОСЛЕ тегов и символов переноса строк)
            if (_preProcess)
            {
                _xmlText = FB2CleanCode.preProcessing(_xmlText);
            }

            /**********************************
            * Предварительная обработка poem *
            **********************************/
            // Удаление структур <poem><stanza /></poem>
            try {
                _xmlText = Regex.Replace(
                    _xmlText, @"<poem>\s*?<stanza ?/>\s*?</poem>",
                    "", RegexOptions.IgnoreCase | RegexOptions.Multiline
                    );
            } catch (RegexMatchTimeoutException /*ex*/) {}
            catch (Exception ex) {
                if (Settings.Settings.ShowDebugMessage)
                {
                    // Показывать сообщения об ошибках при падении работы алгоритмов
                    MessageBox.Show(
                        string.Format("PoemCorrector:\r\nУдаление структур <poem><stanza /></poem>.\r\nОшибка:\r\n{0}", ex.Message), _MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Error
                        );
                }
            }

            // Удаление структур <poem><stanza><empty-line /></stanza></poem>
            try {
                _xmlText = Regex.Replace(
                    _xmlText, @"<poem>\s*?<stanza>\s*?<empty-line ?/>\s*?</stanza>\s*?</poem>",
                    "", RegexOptions.IgnoreCase | RegexOptions.Multiline
                    );
            } catch (RegexMatchTimeoutException /*ex*/) {}
            catch (Exception ex) {
                if (Settings.Settings.ShowDebugMessage)
                {
                    // Показывать сообщения об ошибках при падении работы алгоритмов
                    MessageBox.Show(
                        string.Format("PoemCorrector:\r\nУдаление структур <poem><stanza><empty-line /></stanza></poem>.\r\nОшибка:\r\n{0}", ex.Message), _MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Error
                        );
                }
            }

            // вставка <text-author> внутрь <poem> </poem>
            try {
                _xmlText = Regex.Replace(
                    _xmlText, @"(?'_poem'</poem>)(?'ws'\s*)(?'textauthor'<text-author>\s*.+?\s*</text-author>)",
                    "${textauthor}${ws}${_poem}", RegexOptions.IgnoreCase | RegexOptions.Multiline
                    );
            } catch (RegexMatchTimeoutException /*ex*/) {}
            catch (Exception ex) {
                if (Settings.Settings.ShowDebugMessage)
                {
                    // Показывать сообщения об ошибках при падении работы алгоритмов
                    MessageBox.Show(
                        string.Format("PoemCorrector:\r\nВставка <text-author> внутрь <poem> </poem>.\r\nОшибка:\r\n{0}", ex.Message), _MessageTitle, MessageBoxButtons.OK, MessageBoxIcon.Error
                        );
                }
            }

            // обработка найденных парных тэгов
            IWorker   worker    = new PoemCorrectorWorker();
            TagWorker tagWorker = new TagWorker(ref _xmlText, _startTag, _endTag, ref worker);

            _xmlText = tagWorker.Work();

            // постобработка (разбиение на теги (смежные теги) )
            if (_postProcess)
            {
                _xmlText = FB2CleanCode.postProcessing(_xmlText);
            }

            return(_xmlText);
        }