2016-10-13 2 views
3

У меня есть ситуация, когда я заканчиваю кодирование большого количества LUA внутри XML-строк, and it looks quite ugly, to be honest. Было бы здорово иметь syntax highlighting for the LUA, since that's the main focus of the file; Я уверен, что это поддерживается (по-видимому, в некоторых случаях SQL выделяется внутри PHP), но я искал, как редактировать файлы синтаксиса, и я честно просто тупик. Некоторые из решений даже, кажется, предполагают, что мне нужно отредактировать файл .tmLanguage, но я не могу найти ни один из этих файлов, и ни один из файлов sublime-syntax не будет похож на тот же формат.Как получить подсветку синтаксиса LUA внутри XML-котировок в Sublime Text 3?

Если это делает ситуацию легче, строки, содержащие LUA всегда начинаются с "%function(self) и они всегда конца с end", и я только действительно хочу эту функцию, отметив в XML.

+1

пожалуйста, вы можете поделитесь примером XML-файла с интегрированным LUA, который я могу скопировать и вставить - у меня будет возможность обновить синтаксис defi а также подробные инструкции о том, как это сделать :) –

+0

[Здесь вы идете,] (http://hastebin.com/vawicezuxu.xml) большое спасибо! –

ответ

1

Первым шагом является открытие определения синтаксиса XML для редактирования. Я объясню, как это сделать. Все, что ссылается на файл tmLanguage (формат XML), устарело, Sublime Text 3 теперь использует файлы sublime-syntax (формат YAML) для всех его подсветки синтаксиса по умолчанию.

Я бы порекомендовал клонировать официальное сообщение git repo https://github.com/sublimehq/Packages (пожалуйста, следуйте инструкциям в readme репо, в котором подробно описано, как клонировать пакет таким образом, что Sublime Text выбирает его), чтобы вы могли включать любые будущие изменения, внесенные в официальную версию в вашу версию с использованием git (потому что мы переопределяем значение по умолчанию, которое автоматически обновляется с помощью ST с этой настраиваемой версией). (В принципе, вы хотите, XML папку из репозитория в вашей Блистательной Packages папки, которая доступна из ST, перейдя к пункту меню Preferences -> Browse Packages.)

Файл мы заинтересованы в том, XML/XML.sublime-syntax. Как вы можете видеть, он заполнен регулярными выражениями. Мы больше всего интересуемся тем, где он анализирует XML-атрибуты.

Поиск double-quoted-string:. Сразу под этой линии, вставьте следующее:

- match: '"(?=%function\(self\))' 
    scope: string.quoted.double.xml punctuation.definition.string.begin.xml 
    push: 
    - clear_scopes: true 
    - match: '"' 
     scope: string.quoted.double.xml punctuation.definition.string.end.xml 
     pop: true 
    - include: scope:source.lua 

Обратите внимание, что первый символ (- перед тем match) должны совпасть с оригинальным - match: '"', который был там.

Сохраните его. Вот и все!


В принципе, что мы делаем, это:

  • до проверки синтаксиса для простой двойной кавычки ("), он будет искать двойные кавычки, за которым следует буквенная строка %function(self). Он делает это с помощью lookahead, так что он может тогда include области source.lua, и имеет этот текст/код %function(self), выделенный как LUA (вместе с остальной частью кода LUA).
  • Обратите внимание, что он использует clear_scopes: true, чтобы убедиться, что код LUA не похож на XML-текст/атрибуты.
  • Затем он ищет закрывающую цитату из XML-атрибута (") и «выталкивает» контекст из стека, обратно к тому, чтобы быть внутри простого тега XML.(Я решил искать " без end перед этим, так что end все равно будет подбираться по определению синтаксиса LUA. В противном случае нам пришлось бы дублировать регулярное выражение и область действия для него в синтаксисе XML, что не является идеальным .)

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

lua inside xml

+0

Добро пожаловать. :) Я, вероятно, пропустил несколько соединительных точек, например, как я знал, например, использовать scope 'source.lua', поэтому, пожалуйста, не стесняйтесь просить о чем-нибудь здесь в комментариях :) –

 Смежные вопросы

  • Нет связанных вопросов^_^