void RefreshMarkers()
        {
            TypeReferencesResult res = null;

            try
            {
                var ParseCache = DCodeCompletionSupport.EnumAvailableModules(Document);

                res = TypeReferenceFinder.Scan(SyntaxTree, ParseCache);

                RemoveMarkers(false);

                var txtDoc = Document.Editor.Document;

                DocumentLine curLine = null;
                int          ln      = -1;
                int          len     = 0;
                foreach (var id in res.TypeMatches)
                {
                    var loc = DeepASTVisitor.ExtractIdLocation(id, out len);
                    if (ln != loc.Line)
                    {
                        curLine = Document.Editor.GetLine(ln = loc.Line);
                    }

                    var m = new HighlightMarker(txtDoc, curLine, "keyword.semantic.type", loc.Column, TypeReferenceFinder.ExtractId(id));
                    txtDoc.AddMarker(curLine, m);
                    markers.Add(m);
                }
            }
            catch
            {
            }
        }
		void RefreshMarkers()
		{
			TypeReferencesResult res=null;
			try
			{
				var ParseCache = DCodeCompletionSupport.EnumAvailableModules(Document);

				res = TypeReferenceFinder.Scan(SyntaxTree, ParseCache);

				RemoveMarkers(false);

				var txtDoc = Document.Editor.Document;

				DocumentLine curLine=null;
				int ln=-1;
				int len = 0;
				foreach (var id in res.TypeMatches)
				{
					var loc = DeepASTVisitor.ExtractIdLocation(id, out len);
					if(ln!=loc.Line)
						curLine = Document.Editor.GetLine(ln = loc.Line);

					var m = new HighlightMarker(txtDoc, curLine, "keyword.semantic.type", loc.Column, TypeReferenceFinder.ExtractId(id));
					txtDoc.AddMarker(curLine, m);
					markers.Add(m);
				}
			}
			catch
			{
				
			}
		}
Beispiel #3
0
        private static void OnTextPropertyChanged(BindableObject bindableObject /*, string oldValue, string newValue*/)
        {
            var label = bindableObject as Label;

            if (label == null)
            {
                return;
            }

            string fulltext        = GetFullText(label);
            string highlightedText = GetHighlightedText(label);

            if (string.IsNullOrEmpty(fulltext) || string.IsNullOrEmpty(highlightedText))
            {
                // Clear text highlighting
                label.Text = fulltext;
                return;
            }

            var foregroundColor = GetForeground(label);
            var backgroundColor = GetBackground(label);
            var fontAttributes  = GetFontAttributes(label);

            label.FormattedText = string.Empty;

            var highlightMarker = new HighlightMarker(fulltext, highlightedText);

            using (var enumerator = highlightMarker.GetEnumerator())
            {
                var formattedText = new FormattedString();

                while (enumerator.MoveNext())
                {
                    int  fromIndex     = enumerator.Current.FromIndex;
                    int  length        = enumerator.Current.Length;
                    bool isHighlighted = enumerator.Current.IsHighlighted;

                    var span = new Span {
                        Text = fulltext.Substring(fromIndex, length)
                    };
                    if (isHighlighted)
                    {
                        span.ForegroundColor = foregroundColor;
                        span.BackgroundColor = backgroundColor;
                        span.FontAttributes  = fontAttributes;
                    }

                    formattedText.Spans.Add(span);
                }

                label.FormattedText = formattedText;
            }
        }
        public void ShouldNotMarkIfSearchStringNotFound()
        {
            // Arrange.
            const string FullText        = "";
            const string SearchText      = "loremipsum";
            var          highlightMarker = new HighlightMarker(FullText, SearchText);

            // Act.
            var highlightList = highlightMarker.ToList();

            // Assert
            highlightList.Should().NotBeNull();
            highlightList.Should().HaveCount(1);

            AssertHighlightIndex(highlightList.ElementAt(0), fromIndex: 0, length: 0, isHighlighted: false);
        }
        public void ShouldNotMarkIfEmptyString()
        {
            // Arrange.
            const string FullText        = "full text for highlight marking";
            const string SearchText      = "";
            var          highlightMarker = new HighlightMarker(FullText, SearchText);

            // Act.
            var highlightList = highlightMarker.ToList();

            // Assert
            highlightList.Should().NotBeNull();
            highlightList.Should().HaveCount(1);

            AssertHighlightIndex(highlightList.ElementAt(0), fromIndex: 0, length: FullText.Length, isHighlighted: false);
        }
        public void ShouldMarkSingleWordInTheEnd()
        {
            // Arrange
            const string FullText        = "full text for highlight marking";
            const string SearchText      = "marking";
            var          highlightMarker = new HighlightMarker(FullText, SearchText);

            // Act
            var highlightList = highlightMarker.ToList();

            // Assert
            highlightList.Should().NotBeNull();
            highlightList.Should().HaveCount(2);

            AssertHighlightIndex(highlightList.ElementAt(0), fromIndex: 0, length: 24, isHighlighted: false);
            AssertHighlightIndex(highlightList.ElementAt(1), fromIndex: 24, length: 7, isHighlighted: true);
        }
        public void ShouldSplitWithCustomDelimiters()
        {
            // Arrange
            const string FullText        = "full text for highlight marking";
            const string SearchText      = "full, for;king";
            var          highlightMarker = new HighlightMarker(FullText, SearchText, highlightProcessor: null, searchTextDelimiters: new[] { ',', ';' });

            // Act
            var highlightList = highlightMarker.ToList();

            // Assert
            highlightList.Should().NotBeNull();
            highlightList.Should().HaveCount(5);

            AssertHighlightIndex(highlightList.ElementAt(0), fromIndex: 0, length: 4, isHighlighted: true);
            AssertHighlightIndex(highlightList.ElementAt(1), fromIndex: 4, length: 5, isHighlighted: false);
            AssertHighlightIndex(highlightList.ElementAt(2), fromIndex: 9, length: 4, isHighlighted: true);
            AssertHighlightIndex(highlightList.ElementAt(3), fromIndex: 13, length: 14, isHighlighted: false);
            AssertHighlightIndex(highlightList.ElementAt(4), fromIndex: 27, length: 4, isHighlighted: true);
        }
        public void ShouldSupportHighlightProcessor()
        {
            // Arrange
            const string FullText   = "ääääää";
            const string SearchText = "a";
            var          highlightMarkerWithoutProcessors = new HighlightMarker(FullText, SearchText);
            var          highlightMarkerWithTestProcessor = new HighlightMarker(FullText, SearchText, highlightProcessor: new TestHighlightProcessor("ä", "a"));

            // Act
            var highlightListWithoutProcessing = highlightMarkerWithoutProcessors.ToList();
            var highlightListWithProcessing    = highlightMarkerWithTestProcessor.ToList();

            // Assert
            highlightListWithoutProcessing.Should().NotBeNull();
            highlightListWithoutProcessing.Should().HaveCount(1);
            AssertHighlightIndex(highlightListWithoutProcessing.ElementAt(0), fromIndex: 0, length: 6, isHighlighted: false);

            highlightListWithProcessing.Should().NotBeNull();
            highlightListWithProcessing.Should().HaveCount(1);
            AssertHighlightIndex(highlightListWithProcessing.ElementAt(0), fromIndex: 0, length: 6, isHighlighted: true);
        }
        public void ShouldMarkSingleLetter()
        {
            // Arrange
            const string FullText        = "full text for highlight marking";
            const string SearchText      = "g";
            var          highlightMarker = new HighlightMarker(FullText, SearchText);

            // Act
            var highlightList = highlightMarker.ToList();

            // Assert
            highlightList.Should().NotBeNull();
            highlightList.Should().HaveCount(6);

            AssertHighlightIndex(highlightList.ElementAt(0), fromIndex: 0, length: 16, isHighlighted: false);
            AssertHighlightIndex(highlightList.ElementAt(1), fromIndex: 16, length: 1, isHighlighted: true);
            AssertHighlightIndex(highlightList.ElementAt(2), fromIndex: 17, length: 3, isHighlighted: false);
            AssertHighlightIndex(highlightList.ElementAt(3), fromIndex: 20, length: 1, isHighlighted: true);
            AssertHighlightIndex(highlightList.ElementAt(4), fromIndex: 21, length: 9, isHighlighted: false);
            AssertHighlightIndex(highlightList.ElementAt(5), fromIndex: 30, length: 1, isHighlighted: true);
        }