// Copyright (c) Microsoft Corporation // All rights reserved using System; using System.Collections.Generic; using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Tagging; using Microsoft.VisualStudio.Utilities; using VSMerlin32.Coloring.Data; namespace VSMerlin32.Coloring { [Export(typeof(ITaggerProvider))] [ContentType("Merlin32")] [TagType(typeof(Merlin32TokenTag))] internal sealed class Merlin32TokenTagProvider : ITaggerProvider { public ITagger CreateTagger(ITextBuffer buffer) where T : ITag { return new Merlin32TokenTagger(buffer) as ITagger; } } public class Merlin32TokenTag : ITag { public Merlin32TokenTypes Tokentype { get; private set; } public Merlin32TokenTag(Merlin32TokenTypes type) { this.Tokentype = type; } } internal sealed class Merlin32TokenTagger : ITagger { ITextBuffer _buffer; IDictionary _Merlin32Types; internal Merlin32TokenTagger(ITextBuffer buffer) { _buffer = buffer; _Merlin32Types = new Dictionary(); foreach (Merlin32TokenTypes token in Enum.GetValues(typeof(Merlin32TokenTypes))) _Merlin32Types.Add(token.ToString(), token); } public event EventHandler TagsChanged { add { } remove { } } // OG !!! public IEnumerable> GetTags(NormalizedSnapshotSpanCollection spans) { foreach (SnapshotSpan curSpan in spans) { ITextSnapshotLine containingLine = curSpan.Start.GetContainingLine(); int curLoc = containingLine.Start.Position; string formattedLine = containingLine.GetText(); foreach (SnapshotHelper item in Merlin32CodeHelper.GetTokens(curSpan)) { if (item.Snapshot.IntersectsWith(curSpan)) yield return new TagSpan(item.Snapshot, new Merlin32TokenTag(item.TokenType)); } //add an extra char location because of the space curLoc += formattedLine.Length + 1; } } } }