Colorer — гибкая раскраска синтаксиса в редакторе и др.

Здесь можно обсудить ваш любимый плагин.
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

Far Colorer — плагин подсветки синтаксиса в редакторе, основанный на Colorer Library Игоря Русских.
  • Изначальный автор плагина — Игорь Русских (lomecb, он же cail).
  • После того как плагин портирован на Far 2, поддержкой занимается Алексей Добрунов (ctapmex, он же на форуме ctapmex).
  • Официальная поддержка осуществляется через google-группу colorer_ru (на форуме бывает только ctapmex).
  • Актуальные версии основаны на Colorer Library версии take5.
GitHub | Анонс | Старые домашние страницы библиотеки Colorer и плагина для FAR

Плагин входит в дистрибутив Far Manager с v3.0.2948 (старые версии доступны тут)
Поддержка Windows XP
Начиная с версии FarColorer 1.4.0 в плагине прекращена поддержка Windows XP. Полностью поддерживается и тестируется на Windows 10. Несколько версий Windows назад - по запросу. Но кажется, что всегда должно работать начиная с Windows 2008.
Far Manager 3.0.5797 (2021.05.10) и более новые в дистрибутиве содержат FarColorer версии 1.4.
Поддержка Windows XP осталась только на FarColorer 1.3.x. В данной ветке будут выходить только критичные исправления. Скачать можно на GitHub странице плагина. Последняя версия 1.3.30



Что не разжёвано в документации плагина:
  • Как подключить собственные цветовые стили *.hrd
  • Как подключить собственную схему:
    • используя пользовательский файл прототипов:
    • используя папку auto:
    • через пользовательский catalog.xml:
  • Как переопределить существующую схему
  • Как правильно "удалить" какую-либо стандартную схему
  • Как использовать относительные пути и переменные окружения
  • Если раскраска неправильна:
  • Неочевидные настройки: maxlinelength (в теме)
  • Тонкая настройка подсветки для отдельной схемы: в теме.
Last edited by ctapmex on Mon 18 Oct, 2021 19:17, edited 5 times in total.
kobri
Posts: 19
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by kobri »

Latest post of the previous page:

Я когда-то уже предлагал другой вариант решения проблемы медленной раскраски - можно в самом колорере проверять, с помощью GetNumberOfConsoleInputEvents, активен ли в данный момент пользователь, и просто не отдавать управление фару пока нет никаких событий консоли. Тогда и настроек никаких не понадобится и раскраска будет идти на максимально возможной скорости, пока пользователь ничего не делает.
BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by BioSpb »

безусловно, вы знаете как работает фар и колорер больше меня. и наверняка можете предложить вариант на порядок лучше.
спасибо за пояснение.
я, прежде чем написать, опробовал некоторые изменения.
во-первых, попробовал убрать изменение idlecount, сделав его всегда равным 10. в итоге, раскраска changelog уменьшается совсем немного, но если делать активность в редакторе, то без этого - время полной раскраски становится больше минуты. изменение никакого дискомфорта не создает.
во-вторых, я попробовал уменьшить время таймера в 2 раза. скорость раскраски повысилась, но мне показалось это не правильным, и поиски того, как увеличить кол-во строк за один вызов привели меня в эти функции.
в-третьих, я попровал увеличить кол-во строк за раз до 3000.
и раскрашивание (changelog до конца) сократилось до 3 секунд, даже если что то делать в редакторе!

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

PS вот патчи для colorer.dll x64 от 25.01.19

Code: Select all

;уменьшение таймера примерно в 2 раза
000031B0: 01 00
000031B8: 01 00
;idlecount всегда равен 10
000075F2: 7E 90
000075F3: 08 90
; увеличение кол-ва строк для парсинга до примерно 3000 за один вызов
00007619: 64 00
0000761A: 00 02
0000761D: 3B 90
0000761E: C1 90
Last edited by BioSpb on Sat 26 Jan, 2019 23:27, edited 2 times in total.
BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by BioSpb »

еще патч для colorer.dll x64 от 25.01.19 - увеличивает кол-во раскрашиваемых строк в 6,4 раза с сохранением плавного набора скорости.

Code: Select all

; 140-500 -> 896-3200
0000000000007603: 8D 89
0000000000007604: 0C C1
0000000000007605: 80 C1
0000000000007606: 03 E1
0000000000007607: C9 06
0000000000007619: 64 80
000000000000761A: 00 02
User avatar
ctapmex
Posts: 1240
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by ctapmex »

все эти цифры очень зависят от типа файла и процессора. похоже надо в параметры выносить.

ну и только дошло -проблема длинных строк в том, что поиск регулярного сообщения по такой длинной строке работает дольше, может захватить больше. чем если бы это было разбито на меньшие строки. что с этим делать не понятно. даже если отдельным потоком разбирать это очень долго.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by HaRT »

ctapmex wrote: Sun 27 Jan, 2019 08:45 эти цифры очень зависят от типа файла и процессора. похоже надо в параметры выносить
Раз зависят от типа файла, получается, что добавлять надо в параметры схемы.
И вновь прошу: пусть настройка будет выражена в максимально понятных не-программисту терминах. Я готов поучаствовать в их выработке.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Sim »

ctapmex, если в файле с длинными строками разбить эти длинные строки переносами на отдельные более короткие строки то раскраска происходит быстро, может действительно сделать разбивку на подстроки по 500 символов например, внося переносы после ; и } например, в зависимости от типа файла, конечно, маркерные символы для разбивки будут разные.
Случайности не случайны.
BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by BioSpb »

я пошел по пути наименьшего изменения. даже перекомпилировать не пришлось.
поскольку кол-во строк зависит от схемы, файла и процессора, еще раз повторюсь, в идеале - при разборе строк замерять время, и после какого то интервала (задаваемого в настройках), возвращать управление. (парсить по N строк, мерять время и если превысили лимит - выходить)
т.е. нужны два параметра - интервал времени парсинга перед открытием файла, и интервал времени парсинга в фоне.
плавное увеличение, наверное можно оставить, чтобы при бездействии быстрее раскрашивало.
с длинными строками можно попробовать сделать такую штуку. чаще всего это файлы без перевода строк, обычный код, и искать парные элементы по всей длине не нужно. хотя могут быть и исключения, типа json на несколько метров в одну строку.
User avatar
Sim
Posts: 435
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 11 times
Been thanked: 2 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Sim »

BioSpb wrote: Sun 27 Jan, 2019 12:05 и искать парные элементы по всей длине не нужно
без поиска парных элементов теряется смысл раскраски синтаксиса.
А как происходит поиск парных элементов если файл разбит на строки и парные элементы в разных строках находятся? почему это быстрее чем когда все в одну строку? если так работает алгоритм поиска и его не получится легко переделать, то надо делать разбивку на подстроки в памяти.
Случайности не случайны.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by zg »

ctapmex wrote: Sun 27 Jan, 2019 08:45ну и только дошло -проблема длинных строк в том, что поиск регулярного сообщения по такой длинной строке работает дольше, может захватить больше. чем если бы это было разбито на меньшие строки. что с этим делать не понятно. даже если отдельным потоком разбирать это очень долго.
если красить только видимую часть строки — работает быстрее.
BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by BioSpb »

zg wrote: Sun 27 Jan, 2019 19:17 если красить только видимую часть строки — работает быстрее.
а если перейти в конец этой строки? все равно нужно ее отпарсить целиком.

ctapmex, можете пояснить, потому так получается, что код, скажем на 1000 строк, парсится быстро. А то же самый код, собранный в одну строку - медленно? ведь колорер не оперирует одной строкой. он находит парные элементы расположенные в разных строках. правильно парсит мультистрочные конструкции и т.п.
BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by BioSpb »

Sim wrote: Sun 27 Jan, 2019 12:13 без поиска парных элементов теряется смысл раскраски синтаксиса.
я имел ввиду, что парные элементы находятся близко, и по всей длине строки искать их не нужно.
Sim wrote: Sun 27 Jan, 2019 12:00 может действительно сделать разбивку на подстроки по 500 символов например, внося переносы после ; и } например, в зависимости от типа файла, конечно, маркерные символы для разбивки будут разные.
да да, меня аналогичная мысль посещала. для json это может быть запятая вне ковычек, и т.п.

но вообще, наверное, стоит подумать над более общим решением. например, парсить не строками, а килобайтами.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by zg »

BioSpb wrote: Sun 27 Jan, 2019 20:02а если перейти в конец этой строки? все равно нужно ее отпарсить целиком.
а причём тут парсинг строки? строку в любом случае надо парсить целиком, иначе контекст потеряется. речь о раскраске. читайте внимательно.
Garrett
Posts: 240
Joined: Mon 01 Aug, 2005 10:23
Been thanked: 1 time

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Garrett »

BioSpb, пожалуйста, выложите свою патченную colorer.dll x64. Потестирую.
Garrett
Posts: 240
Joined: Mon 01 Aug, 2005 10:23
Been thanked: 1 time

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by Garrett »

BioSpb, а что означают номера? Какой вариант быстрее в вашем понимании?
BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

Colorer — гибкая раскраска синтаксиса в редакторе и др.

Post by BioSpb »

в первом случае фоновая раскраска всегда постоянная - по 2560 строк каждые полсекунды.
во втором случае - скорость раскраски с плавным изменением увеличена в 6.4 раза до 896-3200. в оригинальным варианте: 140-500. (увеличение происходит каждые полсекунды, если ничего не трогать в редакторе. всего 10 итераций)

имхо, второй вариант более комфортный.
Last edited by BioSpb on Tue 29 Jan, 2019 12:03, edited 1 time in total.
Post Reply

Return to “Обсуждение плагинов”