Page 1 of 3

[MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Sun 11 May, 2014 02:09
by zg
AleXH wrote:Так, так , так... Пожалуйста, развейте тему - подсветить в смешанном тексте всю кириллицу. Без колорера, а скриптом.
как-то так.
(utf-8)

Re: Colorer: как выделить неск-ко слов

Posted: Sun 11 May, 2014 04:47
by NightRoman
Понравилось, полезно. Набросал подобный скрипт для PowerShellFar
  1. $guid = '6c877327-0f38-4735-a6d2-176f065d9a23'
  2.  
  3. $drawer = $Far.GetModuleAction($guid)
  4.  
  5. if ($drawer) {
  6.  
  7.     $drawer.Unregister()
  8.  
  9.     Show-FarMessage 'Unregistered'
  10.  
  11.     return
  12.  
  13. }
  14.  
  15.  
  16.  
  17. $null = $Psf.Manager.RegisterModuleDrawer(
  18.  
  19.     $guid,
  20.  
  21.     (New-Object FarNet.ModuleDrawerAttribute -Property @{Name = 'Cyrillic'; Mask = ''; Priority = 1}),
  22.  
  23.     {&{
  24.  
  25.         foreach($line in $_.Lines) {
  26.  
  27.             foreach($m in [regex]::Matches($line.Text, '(?<=[a-zA-Z])[а-яёА-ЯЁ]+|[а-яёА-ЯЁ]+(?=[a-zA-Z])')) {
  28.  
  29.                 $_.Colors.Add((New-Object FarNet.EditorColor $line.Index, $m.Index, ($m.Index + $m.Length), 'Red', 'Yellow'));
  30.  
  31.             }
  32.  
  33.         }
  34.  
  35.     }}
  36.  
  37. )
  38.  
  39. Show-FarMessage 'Registered, use F11 \ FarNet \ Drawers \ Cyrillic'

Re: Редактор: как выделить цветом неск-ко слов

Posted: Sun 11 May, 2014 14:12
by AleXH
zg, спасибо, сам бы такой скрипт не одолел. Может у вас ещё есть и вариант с подсветкой всей кириллицы в тексте, независимо от латиницы? - Чтобы "национальность" отдельно стоящих букв ACEHTOPKXBM можно было увидеть по шоркату.

Re: Colorer: как выделить неск-ко слов

Posted: Sun 11 May, 2014 15:48
by John Doe
zg wrote:как-то так.
17 скачиваний, и только у меня одного не работает?
Функция ProcessCrest не определена.
Видимо надо исправить на ProcessColors.

Re: Редактор: как выделить цветом неск-ко слов

Posted: Sun 11 May, 2014 16:12
by John Doe
AleXH wrote:zg, спасибо, сам бы такой скрипт не одолел. Может у вас ещё есть и вариант с подсветкой всей кириллицы в тексте, независимо от латиницы? - Чтобы "национальность" отдельно стоящих букв ACEHTOPKXBM можно было увидеть по шоркату.
Так доработайте. В обычный lua переводится легко http://moonscript.org/compiler/

Re: Colorer: как выделить неск-ко слов

Posted: Sun 11 May, 2014 17:25
by zg
John Doe wrote:
zg wrote:как-то так.
17 скачиваний, и только у меня одного не работает?
видимо больше никто постоянно не делает macro:load при хотя бы одном открытом редакторе.
перезалил.

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 13:50
by AleXH
Модификация скрипта zg - включение/отключение подсветки всех кириллических символов в редакторе по F3. Скрипт работает, вместе с тем он не оптимален, так как перерисовывает экран и при отключенной подсветке.

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 13:53
by John Doe
Почему же не сделано оптимально?

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 13:56
by AleXH
John Doe, знаний не хватает :) Но zg огромное спасибо - очень удобно. Возможно имело бы смысл раскрашивать не во всех окнах редактора, а только в инициированном, но победить не смогу.

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 13:58
by John Doe
А какие тут знания нужны? Достаточно условие поставить в обработчике.
Вот кстати мой вариант, я по совпадению тоже баловался:


Насколько я помню, всё что потребовалось, это ввести переменную active, и добавить её в условие в обработчике: if active and event==F.EE_REDRAW then.
Плюс макрос на CtrlF1

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 14:11
by AleXH
Спасибо, не хватило здоровья уже дожать. Я подсвечиваю абсолютно все кириллические символы в тексте. Вот думаю, оптимальны ли такие регэкспы?:

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 14:14
by John Doe
Для вашего случая можно упростить логику (достаточно одного регэкспа).

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 14:30
by John Doe
AleXH wrote:Возможно имело бы смысл раскрашивать не во всех окнах редактора, а только в инициированном, но победить не смогу.
Если менять минимально, то можно в обработчике EE_READ сбрасывать флаг.
Но в идеале чуть иначе: действие EE_READ перенести в макрос, а качестве флага использовать саму таблицу editors (+маленько оптимизировать):

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Wed 21 May, 2014 14:39
by AleXH
Кстати, регэсп не матчит случаи с лидирующей кириллицей, типа йййqqqq.

Универсальный вариант. Подсветка всей кириллицы, либо только смешанной с латиницей.

Re: [MoonScript] Подсветить в смешанном тексте всю кириллицу

Posted: Tue 03 Jun, 2014 06:25
by AleXH
В редакторе открыт файл в одну строку 128К символов, кодовая страница 65001 (utf8), текущий вариант красит её 44сек, но если получать и обрабатывать строку в utf-16LE, , то время раскраски составит менее секунды. Что-то в фаре не так, иначе откуда такая катастрофическая разница?