Как добавить новое определение языка для подсветки синтаксиса в Gedit?

Я попытался создать новый файл .lang, чтобы Gedit распознал язык программирования Julia . Я прочитал учебник , справочный документ и вики-страницу Gedit / NewLanguage , и я считаю, что файл правильный. Однако после перезапуска gedit после копирования нового файла julia.lang в /usr/share/gtksourceview-3.0/language-specs/, файл .jl действительно распознается, и меню подсветки синтаксиса установлено на julia, но фактическое выделение не происходит.

Думая, что я мог сделать что-то не так, я попытался вместо этого использовать существующий языковой файл для аналогичного языка ( Matlab ) и изменил только метаданные заголовка на:

<language id="julia" _name="Julia" version="2.0" _section="Scientific">
  <metadata>
    <property name="mimetypes">text/x-julia;application/x-julia</property>
    <property name="globs">*.jl</property>
    <property name="line-comment-start">#</property>
  </metadata>
[ 1127] Все остальное было сохранено точно как есть, и я сохранил файл как julia.lang. Тем не менее, при повторном открытии Gedit возникает та же проблема. Более того, если я выберу запись Matlab в меню подсветки синтаксиса, форматирование будет выполнено правильно (в соответствии с правилами Matlab), даже несмотря на то, что оба matlab.lang и julia.lang имеют абсолютно одинаковые определения синтаксиса!

Что я могу делать не так? У этого парня , казалось, была та же самая проблема, но в этой ветке никогда не было показано, как он решил ее (если он когда-либо делал). Есть идеи?


Обновление : моя ошибка действительно не заключалась в изменении идентификатора контекста, на что указывал @carandraug в своем ответе. У меня, однако, были другие проблемы, которые я здесь отмечу, если они кому-нибудь пригодятся:

  1. Я повторно использовал определение «shell-like-comment» из def.lang для Джулии. однострочные комментарии, но это доставляло мне много ошибок. Оказывается, когда используется ссылочный контекст , атрибут id не может быть установлен. При изменении с <context id="comment" ref="def:shell-like-comment" /> на <context ref="def:shell-like-comment" /> ошибки исчезли. Я думаю, что справочный документ (и учебник также) должен упомянуть это предостережение. Я отредактировал вики-страницу , чтобы указать на это.
  2. Прежде чем я понял проблему с контекстом комментариев, я закомментировал его определение, но затем я начал получать «стиль» def: строка «не определено» . Когда я раскомментировал определение, эта ошибка исчезла. Я не уверен, что вызвало это в первую очередь (учитывая, что действительно <style id="string"> было определено в def.lang). Любые разъяснения по этому поводу приветствуются в комментариях: -)

Последнее предложение для тех, кто разрабатывает новые определения основных языков для gedit: не забудьте запустить gedit из командной строки и посмотреть на консоль выход!

4
задан 23 February 2015 в 13:00

1 ответ

Я не знаю, почему ваш оригинальный файл julia.lang не работает, так как вы не показываете источник, но тот, который вы основали на matlab.lang, не будет работать, потому что внутри <definitions> нет контекста с тем же id вы упомянули для <language>.

По сути, вы говорите, что id этого языка - julia, но нет контекста с этим определением id. Так что найдите <context id="matlab" ( строка 149 текущей HEAD ) и измените его на julia.

Файл lang обычно организован как набор отдельных контекстов для выделяемых языковых функций, которые затем сгруппированы в конце в основной блок с тем же id языком и ссылками на другие контексты.

0
ответ дан 23 February 2015 в 13:00

Другие вопросы по тегам:

Похожие вопросы: