Cuprum wrote: ↑Sat Dec 30, 2023 12:21 pm
Задумал сделать подсветку Котлина.
Можете ли дать файл подсветки для проверки?
У вас внутри кавычек подсвечена переменная. То есть получилось что кавычка не закончена. Внутри кавычек как я понимаю текст, а текст не должен быть подсвечен как будто это код. Или текст или код. Кавычка не закрыта, если так задано регулярным выражением, то будет путаница в открывающих и закрывающих кавычках. Жадность регулируется знаком "?", с ним регвыр не жадный, останавливаясь на минимальной длине совпадения.
AZJIO wrote: ↑Wed Feb 05, 2025 3:10 am
Можете ли дать файл подсветки для проверки?
К сожалению нет, я долго ковырялся с своим кодер-файлом для Котлина, сейчас глянул, там в файле какая-то билиберда . Видимо, плюнул на это дело.
Кодер файл от Java не подойдет, хотя концептуально языки близки, синтаксис у Котлина другой, похитрее.
очевидно, что \101 - это подмаска из начального регекспа. Но это не работает. Насколько понимаю, сделать подсветку типа heredoc можно только в секции "Fold:" с флагами допускающими регекспы. "<<<(\w+)$" "^\s*\101" - не работает как и \1 и $1. Это возможно в принципе?
sha
Насколько я понимаю здесь два независимых регулярных выражения, одно для начала, второе для конца. В справке есть пример показывающий что ссылки на группы работают.
AlexeyB wrote: ↑Fri Mar 25, 2022 4:56 pm3. В комментариях к синтаксическим файлам говорится, что в шаблоне конца блока можно использовать обратную ссылку \101 для доступа к значению группы 1 начала блока, \102 - группы 2 и т.д. В секции Folds это не работает:
;===========================================================================
;Flags Font Color Color Fold Fold Deli Parent Rule Rule
; style text bkgrnd start end miters ID ID file
;===========================================================================
3145728 0 #080 0 "<(\d)" "\101>" "" 0 0
sha wrote: ↑Sun Mar 02, 2025 12:37 pmкак в "Fold end" отловить подмаску из регекспа в "Fold start"? Ни \1 или $1 не ловят.
Добавлено: обратная ссылка для начала блока в конце блока при использовании флага 2097152. Обратная ссылка \101 соответствует \1 в начале блока, \102 соответствует \2 и т. д. (секции "Folds:" и "Skips:"). Исправлено: ошибка при выходе из программы с разделённым окном.
Added: backreference for fold start in fold end when 2097152 flag is used. Backreference \101 matches \1 in fold start, \102 matches \2 and so on ("Folds:" and "Skips:" sections). Fixed: error when exiting program with a split window.
Looks like this variable either is not present or has been removed from the current Color Theme in AkelPad.
It may happen with a custom Color theme that has been incorrectly updated.
А… offset по символам, а не по байтам, LOL… but it is "by design"! Open "Plugs\Coder.dll" in AkelPad @CP_1200 (UTF-16LE) and look at this piece of s… offset 105264 (Row=1503)…
Я вообще хочу выкинуть все "встроенные темы" из .dll`ки, чтоб не путались под рукой — ни одна меня не устраивает, too high contrast, см. topic.php?p=36835
Зачем вообще существует переменные, конфликтующие с настройкой View — Colors… (где, к тому же, так же нельзя указать системные цвета)?
Применительно к вопросам/замечаниям по подсветке bat-файлов (https://github.com/Infocatcher/AkelPad_ ... 3152554105) возникло пожелание добавить какое-нибудь условное включение/выключение правил в coder-файле – чтобы можно было через глобальные переменные повлиять на логику работы (а не делать, например, несколько альтернативных coder-файлов, их синхронно править муторно).
Func SwitchColors(lParam)
...
EndFunc
If lParam = 1 And IsPressed(0x5B) Then
SwitchColors(1)
Return
EndIf
Func DateDiff(DateTime1, DateTime2, Unit)
...
Switch Unit
Case "M"
Return Floor(Diff / 60)
Case "H"
Return Floor(Diff / 3600)
Else
Return Diff
EndSwitch
EndFunc
Switch Unit работает корректно. А SwitchColors(1) сворачивает (поглощает) всю оставшуюся часть файла. Получается, что плагин не проверяет разделитель справа от Switch? Хотя пробел в Delimiters есть. Должен же, вроде, разделитель справа проверяться, иначе бы не имел смысла флаг 16384 («не проверять разделители справа от начала блока»).
Можно, конечно, регуляркой (с флагом 1048576) начало блока уточнить. Я пока добавил пробел перед закр. кавычкой "Switch ", и подсветка заработала так, как ожидалось. Но всё же хотелось бы понять, справедливо ли я засомневался или недопонял чего?
Да, действительно недопонял. У Folds свои разделители, и Delimiters из другого раздела (Highlight), здесь не учитываются. Добавил пробел в Folds->Delimiters, и правило заработало, как ожидалось. А я почему-то подумал, что в этом месте Delimiters перечисляются только для флага 131072 (разделители запрещены) Но, спасибо Cuprum — помог разобраться.