示例#1
0
        /// <summary>
        /// Анализ конца прямой речи.
        /// Если найдена открывающая кавычка, то будет создана прямая речь и в заданной строке она будет убрана
        /// </summary>
        /// <param name="builder">строка</param>
        /// <param name="directSpeechEnd">конец прямой речи</param>
        private void AnalyzeDirectSpeechEnd(StringBuilder builder, Match directSpeechEnd)
        {
            Group closeQuote = directSpeechEnd.Groups["quote"];

            #region [.defense.]
            if (closeQuote.Value.Length != 1)
            {
                throw new ArgumentException("very long quote");
            }
            #endregion

            string text  = builder.ToString();
            int    shift = _saver.GetRealPositionShift(directSpeechEnd.Index);

            QuoteText quoteText = QuoteText.Create(text, closeQuote.Value.First(), closeQuote.Index - shift,
                                                   directSpeechEnd.Index - shift, directSpeechEnd.Length);
            if (quoteText != null)
            {
                string replaceValue;
                if (TryCreateDirectSpeech(text, quoteText, out replaceValue))
                {
                    builder.Replace(quoteText.Content, replaceValue, quoteText.StartPosition, quoteText.Content.Length);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Создание прямой речи
        /// </summary>
        /// <param name="text">текст</param>
        /// <param name="quoteText">текст в кавычках</param>
        /// <param name="replaceValue">значение, которым необходимо заменить текст в кавычках</param>
        /// <returns>флаг удалось ли выделить прямую речь</returns>
        private bool CreateSimpleDirectSpeech(string text, QuoteText quoteText, out string replaceValue)
        {
            bool result = false;

            replaceValue = quoteText.Content;
            if (IsDirectSpeech(quoteText.Content))
            {
                result       = true;
                replaceValue = "";
                if (quoteText.NextNotEmpty.IsTire() && !Char.IsLetterOrDigit(quoteText.PreviousNotEmpty))
                {
                    SaveDirectSpeech(
                        quoteText.Content,
                        quoteText.StartPosition,
                        default(char), text.CharOrDefault(quoteText.EndPosition));
                }
                else if (quoteText.PreviousNotEmpty.Equals(':') && !QuoteText.OpenQuotes.Contains(quoteText.NextNotEmpty))
                {
                    SaveDirectSpeech(
                        quoteText.Content,
                        quoteText.StartPosition,
                        text.CharOrDefault(quoteText.StartPosition - 1), default(char));
                }
                else
                {
                    replaceValue = quoteText.Content;
                    result       = false;
                }
            }
            return(result);
        }
示例#3
0
        /// <summary>
        /// Создание прямой речи со словами автора
        /// </summary>
        /// <param name="quoteText">текст в кавычках</param>
        /// <param name="authorWords">границы слов автора</param>
        /// <returns>значение, которым необходимо заменить текст в кавычках</returns>
        private string CreateDirectSpeechWithAuthorWords(QuoteText quoteText, TextPart authorWords)
        {
            SaveDirectSpeech(
                quoteText.Content.Substring(0, authorWords.Start),
                quoteText.StartPosition,
                default(char), quoteText.Content[authorWords.Start]);

            SaveDirectSpeech(
                quoteText.Content.Substring(authorWords.End),
                quoteText.StartPosition + authorWords.End - authorWords.Start,
                quoteText.Content[authorWords.End - 1], default(char));

            return(quoteText.Content.Substring(authorWords.Start, authorWords.End - authorWords.Start));
        }
示例#4
0
        /// <summary>
        /// Создание прямой речи
        /// </summary>
        /// <param name="text">текст</param>
        /// <param name="quoteText">текст в кавычках</param>
        /// <param name="replaceValue">значение, которым необходимо заменить текст в кавычках</param>
        /// <returns>флаг удалось ли выделить прямую речь</returns>
        private bool TryCreateDirectSpeech(string text, QuoteText quoteText, out string replaceValue)
        {
            bool     result      = false;
            var      dashes      = GetDashes(quoteText.Content);
            TextPart authorWords = new TextPart();

            if (dashes.Length == 2)             /// необходима проверка на наличие слов автора
            {
                authorWords = GetAuthorWords(quoteText.Content, dashes);
            }
            if (authorWords.Success)
            {
                replaceValue = CreateDirectSpeechWithAuthorWords(quoteText, authorWords);
                result       = true;
            }
            else
            {
                result = CreateSimpleDirectSpeech(text, quoteText, out replaceValue);
            }
            return(result);
        }