Ignore:
Timestamp:
Nov 26, 2012, 7:10:35 PM (8 years ago)
Author:
sam
Message:

vslol: add the skeleton for a real LolFx syntax highlighter.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/vslol/VsLol.cs

    r1932 r2118  
    1414    [PackageRegistration(UseManagedResourcesOnly = true)]
    1515
     16    /* LolFx syntax highlighting */
     17    [ProvideServiceAttribute(typeof(LolFxLanguageService),
     18                             ServiceName = "LolFx Service")]
     19    [ProvideLanguageServiceAttribute(typeof(LolFxLanguageService),
     20                                     "LolFx", 106 /* resource ID */,
     21                                     CodeSense = true,
     22                                     RequestStockColors = true,
     23                                     EnableCommenting = true,
     24                                     EnableAsyncCompletion = true)]
     25    [ProvideLanguageExtensionAttribute(typeof(LolFxLanguageService),
     26                                       ".lolfx")]
     27
    1628    [ProvideMenuResource(1000, 1)]
    1729    [Guid("f96f7ac5-16ac-4061-8b92-0a02bb455ae9")]
    1830    [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
    1931    [ComVisible(true)]
    20     [ProvideAutoLoad("f1536ef8-92ec-443c-9ed7-fdadf150da82")] // This is needed for the package to be autoloaded
     32
     33    /* Autoload package */
     34    [ProvideAutoLoad("f1536ef8-92ec-443c-9ed7-fdadf150da82")]
     35
    2136    public sealed class PluginPackage : Package
    2237    {
     
    3348            base.Initialize();
    3449
    35             // Ensure the "Build" output pane exists
    36             IVsOutputWindow outputWindow = GetService(typeof(SVsOutputWindow)) as IVsOutputWindow;
    37             if (null != outputWindow)
    38             {
    39                 Guid guidBuild = Microsoft.VisualStudio.VSConstants.OutputWindowPaneGuid.BuildOutputPane_guid;
    40                 outputWindow.CreatePane(guidBuild, "Build", 1, 0);
    41             }
     50            Logger.Initialize(GetService(typeof(SVsOutputWindow)) as IVsOutputWindow);
    4251
    43             // Register the "Generate Compilers" context menu
     52            /* Register the "Generate Compilers" context menu */
    4453            OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
    4554            if (null != mcs)
    4655            {
    47                 CommandID id = new CommandID(GuidsList.guidVsLolCmdSet, VsLolIDList.cmdidGenerateCompilers);
     56                CommandID id = new CommandID(GuidsList.guidVsLolCmdSet,
     57                                             VsLolIDList.cmdidGenerateCompilers);
    4858                OleMenuCommand command = new MenuGenerateCompilers(new ServiceProvider((IOleServiceProvider)this.GetService(typeof(IOleServiceProvider))), id);
    4959                mcs.AddCommand(command);
    5060            }
     61
     62            /* Register the LolFx language service */
     63            IServiceContainer serviceContainer = this as IServiceContainer;
     64            LolFxLanguageService lolfxserv = new LolFxLanguageService();
     65            lolfxserv.SetSite(this);
     66            serviceContainer.AddService(typeof(LolFxLanguageService),
     67                                        lolfxserv, true);
    5168        }
     69
     70    }
     71
     72    internal static class Logger
     73    {
     74        public static void Initialize(IVsOutputWindow window)
     75        {
     76            m_window = window;
     77
     78            OpenBuildPane();
     79
     80            if (m_pane == null)
     81                Trace.WriteLine("Failed to get a reference to the Output window Build pane");
     82        }
     83
     84        private static void OpenBuildPane()
     85        {
     86            /* Ensure the "Build" output pane exists */
     87            if (m_window != null)
     88            {
     89                Guid guidBuild = Microsoft.VisualStudio.VSConstants.OutputWindowPaneGuid.BuildOutputPane_guid;
     90                m_window.CreatePane(guidBuild, "Build", 1, 0);
     91
     92                if (Microsoft.VisualStudio.ErrorHandler.Failed(m_window.GetPane(ref guidBuild, out m_pane)))
     93                    m_pane = null;
     94            }
     95        }
     96
     97        public static void Clear()
     98        {
     99            OpenBuildPane();
     100
     101            if (m_pane != null)
     102            {
     103                m_pane.Activate();
     104                m_pane.Clear();
     105            }
     106        }
     107
     108        public static void Info(string s)
     109        {
     110            OpenBuildPane();
     111
     112            if (m_pane != null)
     113                m_pane.OutputString(s);
     114        }
     115
     116        private static IVsOutputWindow m_window = null;
     117        private static IVsOutputWindowPane m_pane = null;
    52118    }
    53119
     
    71137    }
    72138}
    73 
Note: See TracChangeset for help on using the changeset viewer.