RU

Синтаксис QSP для Sublime text, Notepad++

GarniZone #1027 21.01.2014 00:04 19 comments 21858 views

Пытаюсь выбрать текстовый редактор для сабжа. Чтобы не разрабатывать год удобства (подсветку синтаксиса, сворачивание).

Помучился с Sublime, вроде неплохо выглядит. Если у кого есть желание возьмите, доделайте. У меня пока нет сил.
<<удалил. ниже обновление>>тут файл языка и небольшая переделка цветовой схемы.
Выглядит так:

Spoiler

Но только я подумал, что готово и расслабился, так дошло, что про сворачивание забыл.
Там 2 файла, оба xml, 1 цветовая схема, цвета меняются по хтмл коду, а второй переделка подсветки синтаксиса lisp под qsp. я конвертировал в json, в нем понятнее. (там не все операторы, но можно добавить и 3 цветовые группы сделать)

А с notepad++ вроде проще, но не все хорошо. Особенно со сворачиванием и комментариями. И я увидел в sublime всякие интересные функции и решил заморочиться. Хотел чтоб ACT и IF нормально сворачивались, и игнорировались однострочные, но пока увы. Локации тоже никто толком не сворачивает, путают - в конце локации и - как знак.

Есть какие-то удобные наработки?

PS:почему-то в QGen у меня вообще не пишется, не могу когда весь код сразу не вижу. Отдельный код действий и по посещению бесит. Хотя может оно удобнее и стоит попробовать.

Update: Изменил подсветку комментариев с [!] на [!!], чтобы неравно не воспринималось как начало комментария.
Сворачивание работает при проставлении отступов.
Цветовую схему убрал, т.к. цветовых схем много на любой вкус в интернете, и также легко переделать под себя.
http://yadi.sk/d/sDdLSIbEGTPJi

Edited at 21.01.2014 10:24 (12 years ago)

Для Notepad++ я когда-то делал подсветку, но уже давно потерял.

В QGen можно просто не пользоваться базовыми действиями и базовым описанием, писать всё в коде “выполнить при посещении”. Опытные авторы, как правило, так и делают.

Nex:

В QGen можно просто не пользоваться базовыми действиями и базовым описанием, писать всё в коде “выполнить при посещении”. Опытные авторы, как правило, так и делают.

Может вообще убрать это из QGen5 от греха подальше?

Сворачивание в Sublime text переделать не смог, не знаю как реализовать сворачивание [#locationname] - [-]. Если знаете похожее сворачивание в каком-нибудь языке - сообщите. Но обнаружил, что сворачивание отлично работает при разных отступах.
Сделать категорию для строковых переменных $text не получилось, хотя взятая из лиспа подсветка констант #text работает нормально.
Пока переделал 3 типа подсветки операторов, подсветку цифр, текста в одинарных кавычках, комментарии по !!

Там такой синтаксис “интересный”. Подскажите, если в курсе, что за язык

(?x)^(?![^{]*?//|[^{]*?/\\*(?!.*?\\*/.*?\\{)).*?\\{\\s*($|//|/\\*(?!.*?\\*/.*\\S))\n\t

(?x)\n    \t\t\t\t(?:  ^ # begin-of-line\n    \t\t\t\t  |  (?: (?<!else|new|=) ) #  or word + space before name\n    \t\t\t\t)\n    \t\t\t\t((?:[A-Za-z_][A-Za-z0-9_]*::)*+~[A-Za-z_][A-Za-z0-9_]*) # actual name\n    \t\t\t\t \\s*(\\()                           # start bracket or end-of-line\n    \t\t\t

это не plist и не json, и там и там подобные штуки взяты как string текст

В принципе sublime с такими переделками устраивает, остаюсь на нем.

А всё-таки - чем QGen не угодил-то? Всю локацию в одном окне (по посещению) там можно сделать (большинство нормальных авторов так и делает). Неужели проблема в том, что в кугене код разбит по локациям, а не в виде длинной простыни текста?

P.S. Цитата с виду на регулярное выражение похожа.

newsash,
убирать нельзя, так как наличие базовых действий определяется форматом файла. Полноценный редактор обязан уметь работать с базовыми действиями и описанием.

К тому же, их наличие упрощает освоение для тех, кто слабо знаком либо вообще не знаком с программированием.

Но, проблема некоторого неудобства для опытных авторов существует, поэтому в QGen5 давно запланировано два режима работы - “Обычный”, для начинающих, и “Краткий”, для опытных авторов.

В кратком режиме окна базового описания и действий будут появляться, только если они не пустые. Таким образом, ничего не ускользнёт от взгляда автора, при этом будет удобно тем, кто привык всё набирать в коде локации.

Привет! Можете перезалить подсведку для Sublime хотя бы? На ЯД файла уже нет.

Поддерживаю! Уважаемый, GarniZone, пожалуйста, выложите файл для Sublime заново.

newsash:

Nex:

В QGen можно просто не пользоваться базовыми действиями и базовым описанием, писать всё в коде “выполнить при посещении”. Опытные авторы, как правило, так и делают.

Может вообще убрать это из QGen5 от греха подальше?

Ни за что!!!!!!

SneakBug8,
не переживай, так как эта фича встроена в формат файлов QSP, никто её убирать из редактора не станет.

Aleks Versus Moderator 06.08.2014 19:50 (11 years ago)

Поковырял я Акелпад и запилил подсветку для него. Удалось добиться адекватной подсветки операторов и функций и системных переменных. Удалось добиться сворачивания локаций. Многострочные “строки” подсвечиваются, их тоже можно сворачивать, но не всегда верно подсвечиваются открывающий и закрывающий апострофы при установке на них каретки.
Многострочные комментарии оказались тяжким испытанием. Адекватно подсвечиваются только комментарии, которые начинаются с совершенно определённых наборов символов: восклицательный знак, пробел|табуляция|нет символа, апостроф|двойной апостроф|фигурная скобка. Между & и восклицательным знаком обязателен пробел или символ табуляции.
Научить акелпад сворачивать конструкции if elseif act не удалось, и скорее всего не удастся. Научить адекватно подсвечивать переменные, в названиях которых присутствуют цифры тоже не получилось.
Подсветка максимально отвязана от тем оформления, в комментариях указано, какой цвет чему соответствует.
Подсветка включается автоматически для файлов оканчивающихся на “.qsp.txt”.

Нашёл Sublime Text весьма приятным и интересным текстовым редактором. В ближайший месяц попробую сделать подсветку и для него.

Вот подсветка к Sublime text кому нужно https://yadi.sk/d/xv57P6MJidnMs
https://cloud.mail.ru/public/9SkD/jRZmZdCA7

Содержимое файла QSP.tmLanguage если вдруг снова пропадет с обменника.
В Sublime text 3 QSP.tmLanguage нужно заархивировать в архив zip и переименовать в QSP.sublime-package и положить в папку Packages

Spoiler

<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version=“1.0”>
<dict>
<key>fileTypes</key>
<array>
<string>txt</string>
</array>
<key>foldingStartMarker</key>
<string>(#)(#)</string>
<key>foldingStopMarker</key>
<string>(’)(’)(-)</string>
<key>name</key>
<string>QSP</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(!)(!).*$\n?</string>
<key>name</key>
<string>comment.line.semicolon.LISP</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.type.function-type.lisp</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>entity.name.function.lisp</string>
</dict>
</dict>
<key>match</key>
<string>(\b(?i:(curloc|addobj|selobj|onobjsel))\b)(\s+)((\w|-|!|?)*)</string>
<key>name</key>
<string>meta.function.lisp</string>
</dict>
<dict>
<key>match</key>
<string>(#)(\w|[\+-=<>’”&#])+</string>
<key>name</key>
<string>constant.character.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:act|if|else|elseif|iif|end|when)\b</string>
<key>name</key>
<string>keyword.control.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:no|&|and|mod|obj|loc|or)\b</string>
<key>name</key>
<string>keyword.operator.logical.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+.?[0-9]*)|(.[0-9]+))((e|E)(+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string>
<key>name</key>
<string>constant.numeric.lisp</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:arrpos|arrsize|arrcomp|copyarr)\b</string>
<key>name</key>
<string>constant.language.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:killvar|cla|clr|clear|max|args|min|rand|rnd|gs|xgt|gt|goto|gosub|xgoto)\b</string>
<key>name</key>
<string>support.function.LISP</string>
</dict>
<dict>
<key>begin</key>
<string>’</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.lisp</string>
</dict>
</dict>
<key>end</key>
<string>’</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.lisp</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.double.lisp</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\.</string>
<key>name</key>
<string>constant.character.escape.lisp</string>
</dict>
</array>
</dict>
</array>
<key>scopeName</key>
<string>source.LISP</string>
<key>uuid</key>
<string>00D451C9-6B1D-11D9-8DFA-000D93589AF6</string>
</dict>
</plist>

Цветовые схемы, как я уже говорил, можно подобрать из программы или откорректировать под себя.
Почему не QGen? Просто предпочтение, люблю весь код видеть.

Aleks Versus Moderator 29.08.2015 06:36 (10 years ago)

GarniZone,
спасибо! спасибо! спасибо!
А мои кривые руки до этого дела так и не дошли… :lol: И слава богу, я думаю! :lol:

GarniZone:

Вот подсветка к Sublime text кому нужно https://yadi.sk/d/xv57P6MJidnMs
https://cloud.mail.ru/public/9SkD/jRZmZdCA7

Содержимое файла QSP.tmLanguage если вдруг снова пропадет с обменника.
В Sublime text 3 QSP.tmLanguage нужно заархивировать в архив zip и переименовать в QSP.sublime-package и положить в папку Packages

Spoiler

<?xml version=“1.0” encoding=“UTF-8”?> <!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version=“1.0”>
<dict>
<key>fileTypes</key>
<array>
<string>txt</string>
</array>
<key>foldingStartMarker</key>
<string>(#)(#)</string>
<key>foldingStopMarker</key>
<string>(’)(’)(-)</string>
<key>name</key>
<string>QSP</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(!)(!).*$\n?</string>
<key>name</key>
<string>comment.line.semicolon.LISP</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>2</key>
<dict>
<key>name</key>
<string>storage.type.function-type.lisp</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>entity.name.function.lisp</string>
</dict>
</dict>
<key>match</key>
<string>(\b(?i:(curloc|addobj|selobj|onobjsel))\b)(\s+)((\w|-|!|?)*)</string>
<key>name</key>
<string>meta.function.lisp</string>
</dict>
<dict>
<key>match</key>
<string>(#)(\w|[\+-=<>’”&#])+</string>
<key>name</key>
<string>constant.character.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:act|if|else|elseif|iif|end|when)\b</string>
<key>name</key>
<string>keyword.control.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:no|&|and|mod|obj|loc|or)\b</string>
<key>name</key>
<string>keyword.operator.logical.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+.?[0-9]*)|(.[0-9]+))((e|E)(+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string>
<key>name</key>
<string>constant.numeric.lisp</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:arrpos|arrsize|arrcomp|copyarr)\b</string>
<key>name</key>
<string>constant.language.LISP</string>
</dict>
<dict>
<key>match</key>
<string>\b(?i:killvar|cla|clr|clear|max|args|min|rand|rnd|gs|xgt|gt|goto|gosub|xgoto)\b</string>
<key>name</key>
<string>support.function.LISP</string>
</dict>
<dict>
<key>begin</key>
<string>’</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.lisp</string>
</dict>
</dict>
<key>end</key>
<string>’</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.lisp</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.double.lisp</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\.</string>
<key>name</key>
<string>constant.character.escape.lisp</string>
</dict>
</array>
</dict>
</array>
<key>scopeName</key>
<string>source.LISP</string>
<key>uuid</key>
<string>00D451C9-6B1D-11D9-8DFA-000D93589AF6</string>
</dict>
</plist>

Цветовые схемы, как я уже говорил, можно подобрать из программы или откорректировать под себя.
Почему не QGen? Просто предпочтение, люблю весь код видеть.

Все круто работает только вот цвет : поменять бы на более яркий. Или подскажите на какой строке, что подправить..
.

Народ поделитесь своими батниками и макросами на Sublime и Notepad (Родина вас не забудет)

Aleks Versus:

GarniZone,
спасибо! спасибо! спасибо!
А мои кривые руки до этого дела так и не дошли… :lol: И слава богу, я думаю! :lol:

Не за что! Пользуйтесь на здоровье.

bkz:

Все круто работает только вот цвет : поменять бы на более яркий. Или подскажите на какой строке, что подправить..
.

Разбираю содержимое моего файла и как пользоваться:
- Взял файл языка Lisp, препарировал его, заменил Лисповские выражения на выражения из QSP.
- Поменял называние на QSP.
- В файле все выражения поделены на группы:
(curloc|addobj|selobj|onobjsel) (act|if|else|elseif|iif|end|when) (killvar|cla|clr|clear|max|args|min|rand|rnd|gs|xgt|gt|goto|gosub|xgoto) (and|mod|obj|loc|or) и тд.
там их видно. Они отличаются по подсветке (цвет, яркость).
Вы можете перетасовать их как угодно, но количество групп там ограниченно. Либо нужно препарировать другой язык, найти там выражения и заменить их выражениями QSP.

Теперь, что касательно цветов, яркости и тд.
Это задается в Sublime text отдельно и не зависит от языка.
Чтобы их препарировать нужно редактировать приглянувшуюся Color Scheme, допилить под себя и сохранить под новым именем (в самом файле тоже указать новое название). Я там находил цвет, который не нравится, менял его на свой. Цветовую схему потерял, к сожалению, пользуюсь Monokai.

Если кто сделает приличную темную (ночную), выложите, пожалуйста. Свою если сделаю - выложу.

Log in or Register to post comments.