-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Markdown: раскрашивать fenced code blocks соответственно указанному типу #151
Comments
Сделать можно. Вопрос, какие схемы поддерживать. Разным разные захочется, а я не уверен, что в колорер схеме можно это как-то грамотно реализовать. Вопрос к разработчикам. Пример: так я подлючу 2 схемы, powershell и lua. И только эти две. А нельзя ли как-то параметризировать и сделать возможным более полезное и полное покрытие набора имеющихся схем? <block scheme="powershell:powershell" content-priority="low"
start="/(?{start}^%FenceMark;(?{FenceMark}powershell))\s*$/" end="/(?{end}^(?{FenceMark}\y{FenceMark})).*$/"/>
<block scheme="lua:lua" content-priority="low"
start="/(?{start}^%FenceMark;(?{FenceMark}lua))\s*$/" end="/(?{end}^(?{FenceMark}\y{FenceMark})).*$/"/> |
параметризировать нельзя. |
@ctapmex и реализовать это проблематично? |
мы стоим перед выбором
второе мне пока не нравится. |
А схемы разве не "лениво" грузятся? Просто вопрос для инфы, не критика. Перефразирую в практическом плане. Если в маркдаун схеме добавим 5 таких "фаворитных" языков, то их схемы все будут грузиться при открытии любого маркдауна, даже если он ничего из этих 5 не упомянул? |
Что если иначе подойти к задаче? Может ли схема сделать что-то типа "include" пользовательского файла/фрагмента, который может быть, где договорились, а может не быть. (Или можно ли так сделать в будущем, конечно) |
загрузка ленивая на уровне прототипов. Прототипы как список загружаем, не погружаясь внутрь. Но как только выбрали один из типов и хотим с ним работать, то загружается всё его описание и все типы, на которые он ссылается, и ссылаются эти типы.
а фрагмент это кусок hrc схемы ? вроде этого
|
Да. Тогда пользователи, те, кому реально надо, сами могли добавить, что им нужно. |
это можно сделать и сейчас. <inherit scheme="user:markdown" /> а далее через auto, настройки в farcolorer, указать путь до своих схем, в списке которых есть прототип user, с схемой markdown. И в ней уже все необходимые блоки. если такого файла нет, то блок будет игнорироваться |
Надо будет подумать над этим, да. Еще есть подобная идея с использованием ENTITY. Преимущество, может, в том, что это могут быть фрагменты, а не полностью оформленные схемы. Мой кастомный каталог как-то так делает: <?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE catalog PUBLIC "-//Cail Lomecb//DTD Colorer CATALOG take5//EN" "http://colorer.sf.net/2003/catalog.dtd"[
...
<!ENTITY catalog-console SYSTEM "jar:%FARHOME%/Plugins/FarColorer/base/common.zip!hrd/catalog-console.xml">
]>
<catalog xmlns="http://colorer.sf.net/2003/catalog">
...
<hrd-sets>
&catalog-console;
...
</hrd-sets>
</catalog> Только не знаю еще, что будет, если путь типа |
ENTITY тяжело направить на некий пользовательский файл . Пусть будет прибит жестко. |
Переменные окружения работают. Как в моем примере (он реальный, просто кусок). |
Что-то типа <!ENTITY custom-blah SYSTEM "%CUSTOM_BLAH%"> |
Сработало наполовину. А именно в схеме маркдауна объявляю энтити и использую ее <!DOCTYPE hrc PUBLIC "-//Cail Lomecb//DTD Colorer HRC take5//EN" "http://colorer.sf.net/2003/hrc.dtd"[
<!ENTITY COLORER_MARKDOWN_FENCE SYSTEM "%COLORER_MARKDOWN_FENCE%">
]>
...
<block scheme="def:empty" region="Code"
start="/(?{start}^ {4,}|\t+)\S.*/" end="/(?{end})\M%i3;\S/"/>
&COLORER_MARKDOWN_FENCE;
<block scheme="def:empty" region="Code"
start="/(?{start}^%FenceMark;).*$/" end="/(?{end}^(?{FenceMark}\y{FenceMark})).*$/"/>
... Работает, если %COLORER_MARKDOWN_FENCE% определена и указывает на файл типа такого (просто кусок xml, а не целая схема), "привлекательно и просто": <block scheme="powershell:powershell" content-priority="low"
start="/(?{start}^%FenceMark;(?{FenceMark}powershell))\s*$/" end="/(?{end}^(?{FenceMark}\y{FenceMark})).*$/"/>
<block scheme="lua:lua" content-priority="low"
start="/(?{start}^%FenceMark;(?{FenceMark}lua))\s*$/" end="/(?{end}^(?{FenceMark}\y{FenceMark})).*$/"/> Но если %COLORER_MARKDOWN_FENCE% не определена, то схема вообще не работает. Может тут колорер как-то помочь? Какие-то конвенции по разрешению ENTITY, чтобы некоторые уметь игнорировать? |
<inherit scheme="user:markdown" /> Такой вариант работает. И не так уж и страшно выглядит. И может иметь некоторые преимущества. |
можно изменить обработку ошибок. Сейчас в случае ошибки загрузки entity падает загрузка всего типа. А порой и тех, что пытались его по цепочке загрузить. Будет - нет файла, игнорируем, загрузка продолжается , но может красить не так как ожидалось - надо смотреть логи на ошибки загрузки.
примеров нет. Пришло на ум случайно. На самом деле в текущих схемах есть ошибки, и долгое время в логи шли сообщения об отсутствии отдельных схем (сейчас только для yml осталось). Но это не мешало работать (#114) . Как раз из принципа: нет схемы - игнорируем. |
План такой. Фантазии на имена у меня хватило на В схему markdown добавляю одну строку <inherit scheme="markdown2:markdown2" /> И кажется это все, что от меня надо. Далее пользователь может делать то, что я попробовал и сработало. Я делаю это в своем прото файле так
(тип файлов не указываю, ибо эта схема вызывается неявно из markdown) Пример markdown2.hrc с двумя дополнительными языками powershell, lua. <?xml version="1.0" encoding="UTF-8"?>
<hrc version="take5"
xmlns="http://colorer.sf.net/2003/hrc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://colorer.sf.net/2003/hrc http://colorer.sf.net/2003/hrc.xsd">
<type name="markdown2">
<import type='markdown'/>
<scheme name="markdown2">
<block scheme="powershell:powershell" content-priority="low"
start="/(?{start}^(%FenceMark;)(?{FenceMark}powershell))\s*$/" end="/(?{end}^(?{FenceMark}\y1))\s*$/"/>
<block scheme="lua:lua" content-priority="low"
start="/(?{start}^(%FenceMark;)(?{FenceMark}lua))\s*$/" end="/(?{end}^(?{FenceMark}\y1))\s*$/"/>
</scheme>
</type>
</hrc> |
Супер. Предлагаю для примера положить в auto файлик. Или закомментированный, или с одной какой-то схемой. |
Класть ли в авто и в каком виде, это @ctapmex лучше решить, наверное. Можно "закомментированный", либо с двумя предложенными схемами. Ибо lua - это язык автоматизации Фара и не только. И powershell - это язык автоматизации Фара и не только. |
Подожду еще комментов и идей и "посплю на этом". Завтра где-нибудь пул реквест оформлю. |
можно чуть усложнить
|
Душа не лежит к этому, так сказать. Забить схемы по умолчанию можно было уже в Непонятно, что забивать по умолчанию. Сколько языков? - у нас уже 3 предложения Многим, наверное, не нужна эта раскраска в некотором спорном наборе языков по Словом, начнем с простого добавления возможности расширения через markdown2. |
Пул реквест готов. |
Добавлю про параметры схем для кастомизации. Пробовал с ними играться. Смешанные чувства. В итоге стараюсь не использовать. Меня отпугивает относительное неудобство в UI, невозможность посмотреть все свои параметры по всем схемам (я же забываю где, какие, когда поставил). Колорер весь устроен на XML файлах. Наверное, мне бы больше понравилось, если бы и параметры схем задавались в некотором файле. И если бы UI и редактировал этот файл, вообще было бы хорошо. Не предлагаю ничего, так, мысли вслух. |
описание/пример добавлю позднее |
Кстати да. Т.е. параметры меняем в интерфейсе как сейчас, но есть кнопка, по которой экспортируется (или открывается в редакторе) файл, где в каком-либо формате собраны все наши изменения в параметрах. И таким же образом реализовать импорт. |
@nightroman Файл я поместил в auto, и прототип добавил в него же. |
Возможность этого обсуждалась на форуме: https://forum.farmanager.com/viewtopic.php?p=147413#p147413
Суть: если указан тип (
~~~lua
), и он соответствует какому-либо определённому в базе идентификатору, то было бы здорово подсвечивать синтаксис в этом блоке соответственно.@nightroman
The text was updated successfully, but these errors were encountered: