示例#1
0
        private void ParseText(string value)
        {
            if (value == null)
            {
                value = "";
            }

            if (_stackPanel == null)
            {
                return;
            }

            //System.Diagnostics.Debug.WriteLine("{0} ParseText", GetHashCode());
            // Clear previous TextBlocks
            _stackPanel.Children.Clear();

            var suppressParsing  = BrowserNavigationService.GetSuppressParsing(this);
            var message          = DataContext as TLMessageBase ?? BrowserNavigationService.GetMessage(this);
            var decryptedMessage = DataContext as TLDecryptedMessageBase;
            var fitIn2000Pixels  = CheckFitInMaxRenderHeight(value);

            if (fitIn2000Pixels)
            {
                var textBlock = GetTextBlock();
                BrowserNavigationService.SetSuppressParsing(textBlock, suppressParsing);
                BrowserNavigationService.SetMessage(textBlock, message);
                BrowserNavigationService.SetDecryptedMessage(textBlock, decryptedMessage);
                BrowserNavigationService.SetAddFooter(textBlock, true);
                BrowserNavigationService.SetText(textBlock, value);
                _stackPanel.Children.Add(textBlock);

                _footerRun = GetFooter(textBlock);
            }
            else
            {
                ParseLineExtended(value);
            }
        }
示例#2
0
        private void ParseLineExtended(string allText)
        {
            if (string.IsNullOrEmpty(allText))
            {
                return;
            }


            int cutIndex = MAX_STR_LENGTH;

            if (cutIndex >= allText.Length)
            {
                cutIndex = allText.Length - 1;
            }

            var endOfSentenceIndAfterCut = allText.IndexOf(".", cutIndex);

            if (endOfSentenceIndAfterCut >= 0 && endOfSentenceIndAfterCut - cutIndex < 200)
            {
                cutIndex = endOfSentenceIndAfterCut;
            }
            else
            {
                var whiteSpaceIndAfterCut = allText.IndexOf(' ', cutIndex);

                if (whiteSpaceIndAfterCut >= 0 && whiteSpaceIndAfterCut - cutIndex < 100)
                {
                    cutIndex = whiteSpaceIndAfterCut;
                }
            }

            // add all whitespaces before cut
            while (cutIndex + 1 < allText.Length &&
                   allText[cutIndex + 1] == ' ')
            {
                cutIndex++;
            }

            var suppressParsing  = BrowserNavigationService.GetSuppressParsing(this);
            var message          = DataContext as TLMessageBase;
            var decryptedMessage = DataContext as TLDecryptedMessageBase;

            var leftSide = allText.Substring(0, cutIndex + 1);

            allText = allText.Substring(cutIndex + 1);
            var isLastTextBlock = allText.Length <= 0;
            var textBlock       = GetTextBlock();

            BrowserNavigationService.SetSuppressParsing(textBlock, suppressParsing);
            BrowserNavigationService.SetMessage(textBlock, message);
            BrowserNavigationService.SetDecryptedMessage(textBlock, decryptedMessage);
            if (isLastTextBlock)
            {
                BrowserNavigationService.SetAddFooter(textBlock, true);
            }
            BrowserNavigationService.SetText(textBlock, leftSide);
            _stackPanel.Children.Add(textBlock);

            _footerRun = GetFooter(textBlock);

            if (!isLastTextBlock)
            {
                ParseLineExtended(allText);
            }
        }