Расширение языковых определений (для выделения кода) в notepad ++ - PullRequest
25 голосов
/ 20 декабря 2011

В последнее время я занимаюсь разработкой в ​​TWIG.Это HTML-шаблонизатор, который очень прост и надежен.

Я установил notepad ++ для автоматической обработки файлов .twig как html.Это нормально, но у меня нет подсветки синтаксиса в моих функциях ветки.

Синтаксис веточки невероятно прост (по замыслу) и его легко добавить в notepad ++.Проблема в том, что все, что я нахожу по этому вопросу, касается либо создания нового определения языка (и я не хочу заново изобретать определение html), либо изменения цвета для существующих синтаксических битов в языке.

IsЕсть ли способ скопировать определение языка, а затем изменить его в блокноте ++?Если нет, то есть ли в notepad ++ какой-либо способ добавить дополнительные синтаксические биты к существующему определению языка?

edit

TWIG - это язык / движок HTML-шаблонов.их синтаксис для него такой же, как и для html, с добавлением нескольких тегов открытия / закрытия (в частности, {%%}, {{}} и {# #}) для операторов управления.Вы можете прочитать больше об этом на сайте ветки

edit # 2

Основываясь на ответе Брайана Дерагона, я расследовал 3файлы.Вот что я выяснил / сделал до сих пор:

  • \ plugins \ APIs \ html.xml - похоже, для определения ключевых слов, для автозаполнения.Я сделал копию файла с именем twig.xml
  • langs.model.xml - опять же список ключевых слов со всеми языками в 1 XML-файле.Я скопировал объект HTML и заменил параметры name и ext на twig.
  • stylers.model.xml - содержит список различных элементов и информацию о стилях (цвет, цвет bg, шрифт и т. Д.) Для каждого.Я скопировал раздел HTML и изменил параметры name и desc на twig.

После внесения этих изменений я открыл файл twig в notepad ++, надеясь увидеть его в списке параметров языка.К сожалению, оно не появилось, что наводит меня на мысль, что некоторые из них жестко запрограммированы (и, следовательно, то, что я хочу, может оказаться невозможным).

Однако stylers.model.xml интересен.Каждая запись имеет несколько элементов, определенных следующим образом:

<LexerType name="twig" desc="TWIG" ext="">
    <WordsStyle name="DEFAULT" styleID="0" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
    <WordsStyle name="COMMENT" styleID="9" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
    <WordsStyle name="TAG" styleID="1" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
    <WordsStyle name="TAGEND" styleID="11" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
    ...
</LexerType>

Похоже, что именно там стили определены для различных элементов.Я не могу найти где-нибудь, где эти элементы определены, хотя.В langs.model.xml есть определение начала / конца комментария, но не для каких-либо других разделителей.что мне действительно нужно, так это место, где Notepad ++ должен трактоваться {} как разделитель, так же, как и сейчас <>.

edit # 3

Ятакже просматривая этот список пользовательских языков для notepad ++ http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=User_Defined_Language_Files Пользовательские языки используют другой движок, но я мог бы найти там такой, который достаточно похож на html, чтобы я мог его адаптировать.

Ответы [ 3 ]

15 голосов
/ 05 января 2012

Вы должны иметь возможность просто скопировать и отредактировать файл определения XML (html.xml); до тех пор, пока вам не понадобятся вещи, выходящие за рамки основ, такие как свертывание кода, расширенная раскраска на основе блоков обработки регистра или нескольких условных выражений, отдельное форматирование для ведущих символов, раскраска меток, комментирование на основе XML, смешивание языков (раскраска встроенные скрипты), поддержка раскраски утиных типов и т. д. Если вам нужно что-то «продвинутое», вам нужно написать свой собственный лексер, и в этом случае применимо большинство из нижеприведенного.

Тем не менее, шаблоны, которые я перечислил ниже, должны дать вам преимущество в вашем файле определения языка.


Насколько мне известно, Notepad ++ использует Scintilla Lexers для определения правил своего кода.

Вам придется создать свой собственный лексер, но ... HTML Scintilla Lexer уже включен в исходный код Scintilla .

Затем вы вставляете свой пользовательский лексер, используя плагин , такой как Плагин Lua Highlighter Гэри .

Ресурсы для создания пользовательского лексера:

При этом Geany очень похож на Notepad ++ (основан на том же движке, Scintilla), поэтому вы можете захотеть посмотреть, было ли это уже сделано для Geany, или есть открытый код проект для него в работах. Это, по крайней мере, даст вам преимущество.

Если это не поможет, есть интегрированные среды разработки и редакторы со встроенной поддержкой Twig, например:

GEdit опубликовал XML-определение языка здесь , которое может помочь в качестве справочного материала при создании собственного файла определения или лексера; есть еще один шаблон, опубликованный парнями из Twig здесь , который может помочь.

Вот лучшие Notepad ++ - специальные учебники для создания пользовательских лексеров / пользовательских языков, которые я могу найти:

Если вы хотите набраться смелости и создать свою собственную Scintilla dll, обратитесь к этим темам, чтобы увидеть парня, который его заработал, и чтобы показать его в списке языков (используйте предыдущее / следующее сообщение в теме, чтобы просмотреть ответы, или индекс потока, это список рассылки, поэтому его интерфейс не лучший)

Надеюсь, что это поможет или даст вам хотя бы больший старт!

10 голосов
/ 24 августа 2012

Я сделал для него маркер: https://github.com/Banane9/notepadplusplus-twig

0 голосов
/ 05 января 2012

Возможные копии этого поста: https://superuser.com/questions/40876/assigning-custom-extensions-to-a-languages-syntax-highlighting-in-notepad

Все, что вам нужно сделать, это добавить свое собственное расширение в Настройки-> Стиль Конфигуратор

Нажмите на HTML и добавьте свое расширение в поле User Ext.

РЕДАКТИРОВАТЬ: Если вы хотите добавить больше правил для вашего языка, вам, возможно, придется добавить еще один XML в notepad ++ -> plugins-> APIs Если вы думаете, что это как HTML, просто скопируйте html.xml и сохраните как twig.xml Добавить больше правил в этот XML-файл

...