using a naive regex for now.legacy
@@ -0,0 +1,115 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel.Composition; | |||
using System.Windows.Media; | |||
using System.Text.RegularExpressions; | |||
using Microsoft.VisualStudio.Text; | |||
using Microsoft.VisualStudio.Text.Classification; | |||
using Microsoft.VisualStudio.Language.StandardClassification; | |||
using Microsoft.VisualStudio.Utilities; | |||
namespace Lol.VisualStudio.Plugin | |||
{ | |||
[Export(typeof(IClassifierProvider))] | |||
[ContentType("c/c++")] | |||
[ContentType("csharp")] | |||
[ContentType("lolfx")] | |||
internal class LolClassifierProvider : IClassifierProvider | |||
{ | |||
[Import] | |||
internal IClassificationTypeRegistryService m_class_registry = null; /* Set via MEF */ | |||
//[Import] | |||
//internal IClassificationFormatMapService m_lol = null; | |||
public IClassifier GetClassifier(ITextBuffer buffer) | |||
{ | |||
//var test = m_lol.GetClassificationFormatMap("Text Editor"); | |||
//string[] foo = { "Comment", "Keyword", "C/C++ User Keywords", "Call Return", "HTML Comment" }; | |||
//foreach (var s in foo) | |||
//{ | |||
// var type = m_class_registry.GetClassificationType(s); | |||
// if (type == null) | |||
// continue; | |||
// var prop = test.GetExplicitTextProperties(type); | |||
// if (prop == null) | |||
// continue; | |||
// var c1 = prop.ForegroundBrush as SolidColorBrush; | |||
// var c2 = prop.BackgroundBrush as SolidColorBrush; | |||
// Logger.Info("[" + s + "]: " + c1.ToString() + " " + c2.ToString() + "\n"); | |||
//} | |||
return buffer.Properties.GetOrCreateSingletonProperty<CppKeywordClassifier>(delegate { return new CppKeywordClassifier(m_class_registry, buffer.ContentType); }); | |||
} | |||
} | |||
class CppKeywordClassifier : IClassifier | |||
{ | |||
private IClassificationType m_customclass_type; | |||
private Regex m_regex; | |||
internal CppKeywordClassifier(IClassificationTypeRegistryService registry, | |||
IContentType type) | |||
{ | |||
m_customclass_type = registry.GetClassificationType("LolCustomClass"); | |||
string tmp = @"\b("; | |||
tmp += "void|int|unsigned|char|short|long|float|double|"; | |||
tmp += "class|struct|template|const|static|volatile|inline|namespace|"; | |||
if (type.IsOfType("lolfx")) | |||
tmp += "attribute|varying|uniform|in|out|"; | |||
if (type.IsOfType("csharp")) | |||
tmp += "var|string|internal|sealed|public|private|"; | |||
if (!type.IsOfType("csharp")) | |||
tmp += "vec2|vec3|vec4|quat|mat2|mat3|mat4|"; | |||
if (type.IsOfType("c/c++")) | |||
tmp += "real|half|"; | |||
tmp += @")\b"; | |||
m_regex = new Regex(tmp); | |||
} | |||
public IList<ClassificationSpan> GetClassificationSpans(SnapshotSpan span) | |||
{ | |||
List<ClassificationSpan> ret = new List<ClassificationSpan>(); | |||
string tmp = span.GetText(); | |||
var matches = m_regex.Matches(tmp); | |||
foreach (Match m in matches) | |||
{ | |||
Span newspan = new Span(span.Start.Position + m.Index, m.Length); | |||
SnapshotSpan newsnapshot = new SnapshotSpan(span.Snapshot, newspan); | |||
ret.Add(new ClassificationSpan(newsnapshot, m_customclass_type)); | |||
} | |||
return ret; | |||
} | |||
public event EventHandler<ClassificationChangedEventArgs> ClassificationChanged; | |||
} | |||
internal static class LolClassifierClassificationDefinition | |||
{ | |||
[Export(typeof(ClassificationTypeDefinition))] | |||
[Name(LolCppTypeFormat.m_name)] | |||
internal static ClassificationTypeDefinition LolCustomClassType = null; | |||
} | |||
[Export(typeof(EditorFormatDefinition))] | |||
[ClassificationType(ClassificationTypeNames = LolCppTypeFormat.m_name)] | |||
[Name(LolCppTypeFormat.m_name)] | |||
[UserVisible(true)] | |||
[Order(After = Priority.Default)] /* Override the Visual Studio classifiers */ | |||
internal sealed class LolCppTypeFormat : ClassificationFormatDefinition | |||
{ | |||
public const string m_name = "LolCustomClass"; | |||
public LolCppTypeFormat() | |||
{ | |||
this.DisplayName = "C/C++ Types and Qualifiers"; | |||
//this.BackgroundColor = Colors.BlueViolet; | |||
this.ForegroundColor = Colors.Lime; | |||
this.IsBold = true; | |||
//this.TextDecorations = System.Windows.TextDecorations.Underline; | |||
} | |||
} | |||
} |
@@ -20,5 +20,5 @@ using System.Runtime.InteropServices; | |||
// The following GUID is for the ID of the typelib if this project is exposed to COM | |||
[assembly: Guid("58968f91-edb8-4a4c-9f4f-ba39fdb4a21a")] | |||
[assembly: AssemblyVersion("1.0.0.3")] | |||
[assembly: AssemblyFileVersion("1.0.0.3")] | |||
[assembly: AssemblyVersion("1.0.0.4")] | |||
[assembly: AssemblyFileVersion("1.0.0.4")] |
@@ -92,29 +92,42 @@ namespace Lol.VisualStudio.Plugin | |||
if (Microsoft.VisualStudio.ErrorHandler.Failed(m_window.GetPane(ref guidBuild, out m_pane))) | |||
m_pane = null; | |||
} | |||
if (m_pane != null) | |||
m_pane.Activate(); | |||
} | |||
public static void Clear() | |||
{ | |||
OpenBuildPane(); | |||
if (m_pane != null) | |||
if (m_pane == null) | |||
{ | |||
m_pane.Activate(); | |||
m_pane.Clear(); | |||
m_backlog = ""; | |||
return; | |||
} | |||
m_pane.Clear(); | |||
} | |||
public static void Info(string s) | |||
{ | |||
OpenBuildPane(); | |||
if (m_pane != null) | |||
m_pane.OutputString(s); | |||
if (m_pane == null) | |||
{ | |||
m_backlog += s; | |||
return; | |||
} | |||
m_pane.OutputString(m_backlog); | |||
m_backlog = ""; | |||
m_pane.OutputString(s); | |||
} | |||
private static IVsOutputWindow m_window = null; | |||
private static IVsOutputWindowPane m_pane = null; | |||
private static string m_backlog = ""; | |||
} | |||
internal static class GuidsList | |||
@@ -54,27 +54,38 @@ | |||
<HintPath>..\..\..\..\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\PublicAssemblies\envdte.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Microsoft.CSharp" /> | |||
<Reference Include="Microsoft.VisualStudio.ComponentModelHost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.CoreUtility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.Language.StandardClassification, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.OLE.Interop" /> | |||
<Reference Include="Microsoft.VisualStudio.Package.LanguageService.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.Shell.Interop" /> | |||
<Reference Include="Microsoft.VisualStudio.Shell.Interop.8.0" /> | |||
<Reference Include="Microsoft.VisualStudio.Shell.Interop.9.0" /> | |||
<Reference Include="Microsoft.VisualStudio.Shell.Interop.10.0" /> | |||
<Reference Include="Microsoft.VisualStudio.Text.Data, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.Text.Logic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.Text.UI, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.Text.UI.Wpf, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> | |||
<Reference Include="Microsoft.VisualStudio.TextManager.Interop" /> | |||
<Reference Include="Microsoft.VisualStudio.Shell.10.0"> | |||
<Private>false</Private> | |||
</Reference> | |||
<Reference Include="Microsoft.VisualStudio.Shell.Immutable.10.0" /> | |||
<Reference Include="Microsoft.VisualStudio.TextManager.Interop.8.0, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> | |||
<Reference Include="PresentationCore" /> | |||
<Reference Include="System" /> | |||
<Reference Include="System.ComponentModel.Composition" /> | |||
<Reference Include="System.Core" /> | |||
<Reference Include="System.Data" /> | |||
<Reference Include="System.Design" /> | |||
<Reference Include="System.Drawing" /> | |||
<Reference Include="System.Windows.Forms" /> | |||
<Reference Include="System.Xml" /> | |||
<Reference Include="WindowsBase" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Compile Include="CppKeywordClassifier.cs" /> | |||
<Compile Include="LolFxLanguageService.cs" /> | |||
<Compile Include="MenuGenerateCompilers.cs" /> | |||
<Compile Include="GlobalSuppressions.cs" /> | |||
@@ -84,7 +95,7 @@ | |||
<DependentUpon>VsLol.resx</DependentUpon> | |||
</Compile> | |||
<Compile Include="VsLol.cs" /> | |||
<Compile Include="AssemblyInfo.cs" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<VSCTCompile Include="VsLol.vsct"> | |||
@@ -3,7 +3,7 @@ | |||
<Identifier Id="VsLol.Sample"> | |||
<Name>VsLol</Name> | |||
<Author>Lol</Author> | |||
<Version>1.0.0.3</Version> | |||
<Version>1.0.0.4</Version> | |||
<Description xml:space="preserve">Lol Engine Productivity Tools.</Description> | |||
<Locale>1033</Locale> | |||
<MoreInfoUrl>http://lol.zoy.org/</MoreInfoUrl> | |||
@@ -21,5 +21,6 @@ | |||
<References /> | |||
<Content> | |||
<VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage> | |||
<MefComponent>|%CurrentProject%|</MefComponent> | |||
</Content> | |||
</Vsix> |