Собственная подсветка синтаксиса - PullRequest
2 голосов
/ 17 февраля 2011

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

Например:

/**
 * Some class
 *
 * @property-read $foo
 */
 class Test
 {
     private $foo;

     public function __construct()
     {
     }
 }

Теперь в моем решении просто выделены определенные ключевые слова (например, класс или переменные), но также и те, которые комментируются.

Есть ли какое-либо решение для этой проблемы?

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

Почему бы не использовать PHP tokenizer , чтобы сделать работу за вас? Таким образом, ваша подсветка синтаксиса будет анализировать код PHP точно так же, как это делает Zend Engine, что, вероятно, даст вам гораздо лучшие результаты, чем регулярное выражение.

1 голос
/ 17 февраля 2011

Почему бы не позаимствовать уроки из того, как vi или vim уже делают это? Я помню, что для какого-то собственного языка, основанного на тегах, мы хотели выделить подсветку синтаксиса в VI и VIM, то есть когда мы изменили несколько конфигурационных файлов .vi, где мы упоминали, все метаданные, например, какой цвет, какой тег какие теги возможны и т. д.

Более подробно о том, как vi, vim или любой текстовый редактор делают это, было бы более полезно!

0 голосов
/ 17 февраля 2011

Вы можете исключить закомментированные строки с помощью этой логики:

, если строка начинается с /** отключить выделение
, если следующая строка начинается с *, ничего не делать и проверить следующую строку
, если строканачинается с */ включаемая подсветка

Просто быстрое предположение и может быть определено более точно, но должно работать как логика.

...