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

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

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

Post by ctapmex » Wed 04 May, 2005 14:45

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 (старые версии доступны тут)



Что не разжёвано в документации плагина:
  • Как подключить собственные цветовые стили *.hrd
  • Как подключить собственную схему:
    • используя пользовательский файл прототипов:
    • используя папку auto:
    • через пользовательский catalog.xml:
  • Как переопределить существующую схему
  • Как правильно "удалить" какую-либо стандартную схему
  • Как использовать относительные пути и переменные окружения
  • Если раскраска неправильна:
  • Неочевидные настройки: maxlinelength (в теме)
  • Тонкая настройка подсветки для отдельной схемы: в теме.

kobri
Posts: 15
Joined: Fri 15 Nov, 2013 14:42
Been thanked: 1 time

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

Post by kobri » Fri 25 Jan, 2019 19:35

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 » Fri 25 Jan, 2019 23:50

безусловно, вы знаете как работает фар и колорер больше меня. и наверняка можете предложить вариант на порядок лучше.
спасибо за пояснение.
я, прежде чем написать, опробовал некоторые изменения.
во-первых, попробовал убрать изменение 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 » Sat 26 Jan, 2019 23:26

еще патч для 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: 1010
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 4 times
Contact:

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

Post by ctapmex » Sun 27 Jan, 2019 08:45

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

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

User avatar
HaRT
Moderator
Posts: 8714
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 81 times
Been thanked: 147 times

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

Post by HaRT » Sun 27 Jan, 2019 11:38

ctapmex wrote:
Sun 27 Jan, 2019 08:45
эти цифры очень зависят от типа файла и процессора. похоже надо в параметры выносить
Раз зависят от типа файла, получается, что добавлять надо в параметры схемы.
И вновь прошу: пусть настройка будет выражена в максимально понятных не-программисту терминах. Я готов поучаствовать в их выработке.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
Sim
Posts: 387
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 2 times
Been thanked: 1 time
Contact:

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

Post by Sim » Sun 27 Jan, 2019 12:00

ctapmex, если в файле с длинными строками разбить эти длинные строки переносами на отдельные более короткие строки то раскраска происходит быстро, может действительно сделать разбивку на подстроки по 500 символов например, внося переносы после ; и } например, в зависимости от типа файла, конечно, маркерные символы для разбивки будут разные.
Случайности не случайны.

BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

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

Post by BioSpb » Sun 27 Jan, 2019 12:05

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

User avatar
Sim
Posts: 387
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 2 times
Been thanked: 1 time
Contact:

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

Post by Sim » Sun 27 Jan, 2019 12:13

BioSpb wrote:
Sun 27 Jan, 2019 12:05
и искать парные элементы по всей длине не нужно
без поиска парных элементов теряется смысл раскраски синтаксиса.
А как происходит поиск парных элементов если файл разбит на строки и парные элементы в разных строках находятся? почему это быстрее чем когда все в одну строку? если так работает алгоритм поиска и его не получится легко переделать, то надо делать разбивку на подстроки в памяти.
Случайности не случайны.

User avatar
zg
zero-gravity
Posts: 5542
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

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

Post by zg » Sun 27 Jan, 2019 19:17

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 » Sun 27 Jan, 2019 20:02

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 » Sun 27 Jan, 2019 20:17

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

но вообще, наверное, стоит подумать над более общим решением. например, парсить не строками, а килобайтами.

User avatar
zg
zero-gravity
Posts: 5542
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

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

Post by zg » Sun 27 Jan, 2019 20:26

BioSpb wrote:
Sun 27 Jan, 2019 20:02
а если перейти в конец этой строки? все равно нужно ее отпарсить целиком.
а причём тут парсинг строки? строку в любом случае надо парсить целиком, иначе контекст потеряется. речь о раскраске. читайте внимательно.

Garrett
Posts: 145
Joined: Mon 01 Aug, 2005 10:23

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

Post by Garrett » Mon 28 Jan, 2019 07:41

BioSpb, пожалуйста, выложите свою патченную colorer.dll x64. Потестирую.


Garrett
Posts: 145
Joined: Mon 01 Aug, 2005 10:23

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

Post by Garrett » Tue 29 Jan, 2019 06:20

BioSpb, а что означают номера? Какой вариант быстрее в вашем понимании?

BioSpb
Posts: 13
Joined: Thu 13 Jan, 2011 22:18
Has thanked: 2 times

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

Post by BioSpb » Tue 29 Jan, 2019 11:36

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

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

User avatar
Sim
Posts: 387
Joined: Fri 12 Jun, 2009 09:43
Has thanked: 2 times
Been thanked: 1 time
Contact:

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

Post by Sim » Tue 29 Jan, 2019 12:40

BioSpb, а x86 вариант плагина есть? а то я до сих пор использую x86 Far ради нескольких старых плагинов, которые все еще работают в нем.
Случайности не случайны.

Post Reply

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