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

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

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

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

Aleks Versus
воздвигатель башни
useravatar
Offline
1478 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

Вот подсветка к 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

 Спойлер Show Spoiler Hide 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|[\\+-=&lt;&gt;'"&amp;#])+</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|&amp;|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? Просто предпочтение, люблю весь код видеть.

GarniZone
useravatar
Offline
20 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

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

Aleks Versus
воздвигатель башни
useravatar
Offline
1478 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

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
 Спойлер Show Spoiler Hide 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? Просто предпочтение, люблю весь код видеть.

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

bkz
useravatar
Offline
67 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

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

bkz
useravatar
Offline
67 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Синтаксис QSP для Sublime text, 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.

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

GarniZone
useravatar
Offline
20 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

Спасибо за объяснение.

bkz
useravatar
Offline
67 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

На основе подсветки GarniZone запилил свою подсветку для sublime text. Добавлены почти все функции и операторы, подсветка обучена распознавать и корректно подсвечивать комментарии. Остались мелкие проблемы вроде некорректной подсветки текста после оператора неравенства !, но если вы используете <> проблем не возникнет.

QSP.zip

У скачанного zip архива меняем расширение на .sublime-packages и кидаем в папку "C:\Program Files\Sublime Text 3\Packages". В меню Sublime Text подсветка будет доступна из раздела view > syntax.

Корректно работает с любыми цветовыми схемами, но я ориентировался на Monokai.

Aleks Versus
воздвигатель башни
useravatar
Offline
1478 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

А для Notepad++ есть?

Oliver
Magni nominis umbra
useravatar
Offline
562 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

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

Сделал скрипт для расстановки отступов в Notepad++
поставляется в составе https://github.com/KOLANICH/jN-npp-scripts
требует https://github.com/sieukrem/jn-npp-plugin
Скрипт грязный и некорректный, но он работает, не буду же я городить полноценный парсер.
Можно элементарно портануть для всех остальных редакторов с js (и не только) плагинами.

KOLANICH
useravatar
Offline
92 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
970
Всего опросов:
14
Всего сообщений:
16790545
Сообщений на этой неделе:
10
Пользователи форума:
 
Всего пользователей:
2346
Последним зарегистрировался:
Rizrael