19 using System.Collections.Generic;
20 using System.ComponentModel.Composition;
22 using System.Runtime.InteropServices;
25 using Microsoft.VisualStudio;
26 using Microsoft.VisualStudio.Editor;
27 using Microsoft.VisualStudio.Package;
28 using Microsoft.VisualStudio.Shell;
29 using Microsoft.VisualStudio.Shell.Interop;
30 using Microsoft.VisualStudio.Text.Classification;
31 using Microsoft.VisualStudio.Text.Formatting;
32 using Microsoft.VisualStudio.TextManager.Interop;
33 using SiliconStudio.Paradox.VisualStudio.Classifiers;
40 private VisualStudioThemeEngine themeEngine;
43 private LanguagePreferences m_preferences;
52 private void EnsureInitialized()
55 if (m_colorableItems != null)
59 themeEngine =
new VisualStudioThemeEngine(Site);
60 themeEngine.OnThemeChanged += themeEngine_OnThemeChanged;
62 var currentTheme = themeEngine.GetCurrentTheme();
66 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Keyword",
"Paradox Shader Language - Keyword", COLORINDEX.CI_BLUE, COLORINDEX.CI_AQUAMARINE, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(86, 156, 214), Color.Empty, FONTFLAGS.FF_DEFAULT),
67 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Comment",
"Paradox Shader Language - Comment", COLORINDEX.CI_DARKGREEN, COLORINDEX.CI_GREEN, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(87, 166, 74), Color.Empty, FONTFLAGS.FF_DEFAULT),
68 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Identifier",
"Paradox Shader Language - Identifier", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK, FONTFLAGS.FF_DEFAULT),
69 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - String",
"Paradox Shader Language - String", COLORINDEX.CI_RED, COLORINDEX.CI_RED, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(214, 157, 133), Color.Empty, FONTFLAGS.FF_DEFAULT),
70 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Number",
"Paradox Shader Language - Number", COLORINDEX.CI_DARKBLUE, COLORINDEX.CI_BLUE, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(181, 206, 168), Color.Empty, FONTFLAGS.FF_DEFAULT),
71 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Intrinsic",
"Paradox Shader Language - Intrinsic", COLORINDEX.CI_MAROON, COLORINDEX.CI_CYAN, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(239, 242, 132), Color.Empty, FONTFLAGS.FF_BOLD),
72 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Special",
"Paradox Shader Language - Special", COLORINDEX.CI_AQUAMARINE, COLORINDEX.CI_MAGENTA, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(78, 201, 176), Color.Empty, FONTFLAGS.FF_DEFAULT),
73 new NShaderColorableItem(currentTheme,
"Paradox Shader Language - Preprocessor",
"Paradox Shader Language - Preprocessor", COLORINDEX.CI_DARKGRAY, COLORINDEX.CI_LIGHTGRAY, COLORINDEX.CI_USERTEXT_BK,
Color.Empty,
Color.FromArgb(155, 155, 155), Color.Empty, FONTFLAGS.FF_DEFAULT),
79 themeEngine.OnThemeChanged -= themeEngine_OnThemeChanged;
80 themeEngine.Dispose();
85 void themeEngine_OnThemeChanged(
object sender,
EventArgs e)
87 var colorUtilities = Site.GetService(typeof(SVsFontAndColorStorage)) as IVsFontAndColorUtilities;
88 var currentTheme = themeEngine.GetCurrentTheme();
90 var store = Package.GetGlobalService(typeof(SVsFontAndColorStorage)) as IVsFontAndColorStorage;
91 store.OpenCategory(DefGuidList.guidTextEditorFontCategory, (uint)(__FCSTORAGEFLAGS.FCSF_LOADDEFAULTS | __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS | __FCSTORAGEFLAGS.FCSF_PROPAGATECHANGES));
94 foreach (var colorableItem
in m_colorableItems)
98 colorableItem.GetDisplayName(out displayName);
101 var hiColor = currentTheme == VisualStudioTheme.Dark ? colorableItem.HiForeColorDark : colorableItem.HiForeColorLight;
102 var colorIndex = currentTheme == VisualStudioTheme.Dark ? colorableItem.ForeColorDark : colorableItem.ForeColorLight;
105 if (hiColor !=
Color.Empty)
106 color = hiColor.R | ((uint)hiColor.G << 8) | ((uint)hiColor.B << 16);
108 colorUtilities.EncodeIndexedColor(colorIndex, out color);
111 store.SetItem(displayName,
new[] {
new ColorableItemInfo { bForegroundValid = 1, crForeground = color } });
117 count = m_colorableItems.Length;
118 return VSConstants.S_OK;
125 throw new ArgumentOutOfRangeException(
"index");
128 item = m_colorableItems[index-1];
129 return VSConstants.S_OK;
134 if (m_preferences == null)
136 m_preferences =
new LanguagePreferences(this.Site,
139 m_preferences.Init();
141 return m_preferences;
146 string filePath = FilePathUtilities.GetFilePath(buffer);
148 return NShaderScannerFactory.GetShaderScanner(filePath);
162 IVsFontAndColorStorage storage;
163 Guid textMgrIID =
new Guid(
165 "{E0187991-B458-4F7E-8CA9-42C9A573B56C}"
170 if (null != (storage = GetService(typeof(IVsFontAndColorStorage)) as IVsFontAndColorStorage) &&
171 VSConstants.S_OK == storage.OpenCategory(ref textMgrIID, (uint)(__FCSTORAGEFLAGS.FCSF_READONLY | __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS)))
173 bool missingColor =
false;
176 ColorableItemInfo[] info =
new ColorableItemInfo[1];
177 for (
int i = 0; i < m_colorableItems.Length; ++i)
180 m_colorableItems[i].GetDisplayName(out colorName);
181 if (ErrorHandler.Failed(storage.GetItem(colorName, info)))
190 storage.CloseCategory();
196 Guid iid = typeof(IVsFontAndColorCacheManager).GUID;
197 Guid sid = typeof(SVsFontAndColorCacheManager).GUID;
198 IntPtr pCacheManager;
200 VSConstants.S_OK == oleProvider.QueryService(ref sid, ref iid, out pCacheManager) &&
201 pCacheManager != IntPtr.Zero)
205 IVsFontAndColorCacheManager cacheManager = (IVsFontAndColorCacheManager)Marshal.GetObjectForIUnknown(pCacheManager);
206 cacheManager.ClearCache(ref textMgrIID);
210 Marshal.Release(pCacheManager);
216 return base.GetColorizer(buffer);
222 return new TestAuthoringScope();
230 public override string Name
232 get {
return "Paradox Shader Language"; }
237 public override string GetDataTipText(
int line,
int col, out TextSpan span)
239 span =
new TextSpan();
243 public override Declarations GetDeclarations(IVsTextView view,
252 public override Methods GetMethods(
int line,
int col,
string name)
257 public override string Goto(VSConstants.VSStd97CmdID cmd, IVsTextView textView,
int line,
int col, out TextSpan span)
259 span =
new TextSpan();
override IScanner GetScanner(IVsTextLines buffer)
Microsoft.VisualStudio.OLE.Interop.IServiceProvider IOleServiceProvider
override int GetItemCount(out int count)
override AuthoringScope ParseSource(ParseRequest req)
override Colorizer GetColorizer(IVsTextLines buffer)
override string GetFormatFilterList()
SiliconStudio.Core.Mathematics.Color Color
override void Initialize()
override int GetColorableItem(int index, out IVsColorableItem item)
override Source CreateSource(IVsTextLines buffer)
override LanguagePreferences GetLanguagePreferences()