Что Visual Studio передает на вызовы ITagger.GetTags? - PullRequest
4 голосов
/ 29 ноября 2010

Я пытаюсь создать подсветку синтаксиса в VS2010 для пользовательского формата файла. После кражи из Ook! Язык пример на msdn, я могу выделить ключевые слова в файле. Я счастлив с этим. Однако этот пример разбивает SnapshotSpans по Line. Я также хотел бы обработать многострочное выделение (например, комментарии).

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

1 Ответ

5 голосов
/ 01 декабря 2010

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

В большинстве случаев, гдепотребитель - IWpfTextView, вы можете ожидать, что эта коллекция будет состоять из одной строки за раз.Если однострочное изменение текста (например, ввод текста) повлияет на несколько строк, ваш теггер должен поднять TagsChanged над регионом, который необходимо обновить.

Общая модель немного описана в статья в блоге, которую я написал об основах редактора VS .Суть в том, что потребители меток информации будут спрашивать о том, что их волнует, и подписываться на события изменений из тегера, чтобы быть уверенными, что любая собранная ими информация актуальна.

...