Поделиться через


раскраска синтаксиса (MPF)

Выделение цветом синтаксиса функция, которая вызывает другие элементы языка программирования отображаться в файле источника в разных цветах и стилях. Чтобы поддержать эту функцию, необходимо предоставить анализатор и средство чтения, могут указывать типы словарных элементов и маркеров в файле. Многие языки отличающие ключевые слова, разделители (например скобки или фигурные скобки) и комментарии, colorizing они по-разному.

Реализация

Для поддержки колоризацию управляемые границы пакетов (MPF): Colorizer класс, который реализует IVsColorizer интерфейс. Этот класс работает с IScanner определение токена и цвета. Дополнительные сведения о средствах чтения см. в разделе Средство анализа языковой службы и сканер (MPF). Colorizer класс затем помечает каждый символ токена с данными о цвете и возвращает эти сведения в редактор, указывающий исходный файл.

Данные о цвете, возвращаемые в редактор индекс цветного элементов в списке. Каждый элемент определяет цветного значение цвета и набор атрибутов шрифта, например полужирный или зачеркивания. Редактор предоставляет набор по умолчанию цветного элементов, которые служба языка может использовать. Все необходимо внести соответствующие Цветовые определить индексы для каждого типа токена. Однако можно создать набор пользовательских цветного элементов и индекса необходимо указать для маркеров и ссылка на собственный список элементов цветного по умолчанию списка. Также следует задать RequestStockColors запись реестра до 0 (или не указывайте RequestStockColors запись на всех) для поддержки дополнительных цветов. Можно задать эту запись реестра с именованным параметром к ProvideLanguageServiceAttribute определяемый пользователем атрибут. Дополнительные сведения о регистрации языковую службу и установить его параметров см. в разделе Регистрация службы языка (MPF).

Пользовательские цветного элементы

Чтобы предоставить собственные пользовательские элементы необходимо переопределить цветного GetColorableItem и LanguageService метод GetItemCount класс. Первый метод возвращает количество пользовательских цветного элементов языка, а вторая получает пользовательский цветного элемента по индексу. По умолчанию создается список настраиваемых цветного элементов. В конструкторе службы языка, все необходимо сделать цветного указать каждый элемент с указанным именем. Visual Studio автоматически обрабатывает случай, когда пользователь выбирает другой набор цветного элементов. Это имя отображается в Шрифты и цвета страница свойств Параметры диалоговое окно (доступно из Visual Studio Сервис меню) и это имя определяют, цвет пользователь переопределил. Выбор пользователей хранятся в кэше в реестре и получить доступ по имени цвета. Шрифты и цвета страница свойств " перечисляются все имена цветов в алфавитном порядке, поэтому можно группировать пользовательские цвета, поставив перед каждое имя цвета с именем языка; например, "комментарий TestLanguage-"и"ключевое слово TestLanguage-". Или можно группировать цветного элементы типом "Комментарий) (TestLanguage"и"ключевое слово (TestLanguage)". Группирование именем языка, предпочитаемое.

Предупреждение

Настоятельно рекомендуется включать название языка цветного имени элемента, чтобы избежать конфликтов с существующими именами цветного элемента.

Примечание

Если изменить имя одного из собственных цветов во время разработки, необходимо сбросить кэш, который получил доступ Visual Studio создатьому впервые пользовательским цветам.Это можно сделать путем запуска Сбросить экспериментальном кусту команды из меню программ Visual Studio SDK.

Обратите внимание, что первый элемент в списке цветного элементов никогда не ссылаются. Visual Studio предоставляет всегда по умолчанию текстовые цвета и атрибутов этого элемента. Самый простой способ обработки этим предоставить прототип цветного элемента в качестве первого элемента.

Элемент высокого цвета цветного

Цветного элементы также могут поддерживать 24 бита или значения высокого цвета через IVsHiColorItem интерфейс. MPF ColorableItem класс поддерживает инфраструктуру IVsHiColorItem интерфейс и 24 бит цвета определены в конструкторе вместе с обычным цветами. См. ColorableItem класс дополнительные сведения. В приведенном ниже примере показано, как задать бит 24 цветов для ключевых слов и комментариев. 24 Разряда используются цвета, когда 24 цветов бита поддерживается на рабочем столе пользователя; в противном случае - обычные текстовые цвета используются.

Помните, что эти цвета по умолчанию для выбранного языка. пользователь может изменять эти цвета на все действия.

Пример

Этот пример показывает один из способов объявить и заполнить массив настраиваемых элементов с помощью цветного ColorableItem класс. Этот пример устанавливает цвета ключевого слова и комментария с помощью цвета 24 бит.

using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;

namespace TestLanguagePackage
{
    public class TestLanguageService : LanguageService
    {
        private ColorableItem[] m_colorableItems;

        TestLanguageService() : base()
        {
            m_colorableItems = new ColorableItem[] {
                new ColorableItem("TestLanguage – Text",
                                  "Text",
                                  COLORINDEX.CI_SYSPLAINTEXT_FG,
                                  COLORINDEX.CI_SYSPLAINTEXT_BK,
                                  System.Drawing.Color.Empty,
                                  System.Drawing.Color.Empty,
                                  FONTFLAGS.FF_DEFAULT),
                new ColorableItem("TestLanguage – Keyword",
                                  "Keyword",
                                  COLORINDEX.CI_MAROON,
                                  COLORINDEX.CI_SYSPLAINTEXT_BK,
                                  System.Drawing.Color.FromArgb(192,32,32),
                                  System.Drawing.Color.Empty,
                                  FONTFLAGS.FF_BOLD),
                new ColorableItem("TestLanguage – Comment",
                                  "Comment",
                                  COLORINDEX.CI_DARKGREEN,
                                  COLORINDEX.CI_LIGHTGRAY,
                                  System.Drawing.Color.FromArgb(32,128,32),
                                  System.Drawing.Color.Empty,
                                  FONTFLAGS.FF_DEFAULT)
                // ...
                // Add as many colorable items as you want to support.
            };
        }
    }
}

Класс Colorizer и средство чтения

Base GetColorizer класс имеет a Colorizer метод, instantiantes LanguageService класс. Средство чтения, возвращаемый GetScanner метод передается Colorizer конструктор класса.

Необходимо реализовать GetScanner метод в собственной версии LanguageService класс. Colorizer класс использует средство чтения, чтобы получить все данные цвета токена.

Читателю необходимо заполнить a TokenInfo структура для каждого токена он обнаруживает. Эта структура содержит сведения, что диапазон токен занимает, Цветовые индексы, какой тип маркер и маркер активировать (см. TokenTriggers). Только диапазон и Цветовые индексы необходимы для колоризации Colorizer класс.

Цветовые индексы, хранимые в TokenInfo обычно значение из структуры TokenColor перечисление, которое предоставляет несколько именованных индексов, соответствующие различным элементам языка как ключевые слова и операторов. Если пользовательские цветного элементы перечислены соответствия, то приведено на элементы TokenColor перечисление после этого можно просто использовать перечисление, как цвет каждого токена. Однако при наличии дополнительных цветного элементы или нет необходимости использовать существующие значения в другом порядке, то можно расположить пользовательский цветного список элементов в соответствии с своими потребностями необходим и возвращает соответствующий индекс в этот список. Просто точно приведен индекс к a TokenColor в TokenInfo структура; Visual Studio видит только индекс.

Пример

В следующем примере показано, как средство чтения может определить тип токена: 3 цифры, знаки препинания и идентификаторы (что-либо, не являющееся числом или знаки препинания). В этом примере для иллюстративных целях и не предоставляет полную реализацию средства синтаксического анализа и средства чтения. Он предполагает, a Lexer класс with a GetNextToken() метод, который возвращает строку.

using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;

namespace TestLanguagePackage
{
    private Lexer lex;

    public class TestScanner : IScanner
    {
        public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo,
                                                   ref int state)
        {
            bool foundToken = false;
            string token = lex.GetNextToken();
            if (token != null)
            {
                char firstChar = token[0];
                if (Char.IsPunctuation(firstChar))
                {
                    tokenInfo.Type = TokenType.Operator;
                    tokenInfo.Color = TokenColor.Keyword;
                }
                else if (Char.IsNumber)
                {
                    tokenInfo.Type = TokenType.Literal;
                    tokenInfo.Color = TokenColor.Number;
                }
                else
                {
                    tokenInfo.Type = TokenType.Identifier;
                    tokenInfo.Color = TokenColor.Identifier;
                }
            }
            return foundToken;
        }

См. также

Основные понятия

Средство анализа языковой службы и сканер (MPF)

Регистрация службы языка (MPF)

Другие ресурсы

Функции языка (службы MPF)