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

Здесь выкладываются готовые к использованию макросы и скрипты.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

Latest post of the previous page:

В редакторе открыт файл в одну строку 128К символов, кодовая страница 65001 (utf8), текущий вариант красит её 44сек, но если получать и обрабатывать строку в utf-16LE, , то время раскраски составит менее секунды. Что-то в фаре не так, иначе откуда такая катастрофическая разница?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

AleXH wrote:Что-то в фаре не так, иначе откуда такая катастрофическая разница?
Если хотите, чтоб я посмотрел, приложите оба варианта скрипта и обрабатываемый файл - всего 3 файла.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

1.xml - подопытный файл, slow.moon - 44 сек, fast.moon - 1 сек.
Attachments
TEMP.7z
(20.05 KiB) Downloaded 91 times
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

очевидно, что очень много конвертаций utf8<->ucs16.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

да, это очевидно, но вот чтобы настолько деградировала производительность... может код конвертаций не оптимален?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

Возможно, там постоянно пересчитывается индекс символа между UTF8/UCS16. Чем длиннее строка - тем это дольше...
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

zg wrote:очевидно, что очень много конвертаций utf8<->ucs16.
Max Rusov wrote:Возможно, там постоянно пересчитывается индекс символа между UTF8/UCS16. Чем длиннее строка - тем это дольше...
Да, и то, и другое.

Code: Select all

while true
  lbegin,lend,curr=word\find line,posl
Здесь производятся конвертации и пересчитываются индексы при поиске каждого слова. То-есть вся 128-килобайтная строка, содержащая 20000 слов будет преобразована из UTF-8 в UTF-16LE 20000 раз, по разу на каждое слово.

Если бы фаровские регекспы имели фичу "positional captures", то можно было бы не делать цикл find, а использовать gmatch, - тогда преобразование было бы однократное.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Shmuel wrote:Если бы фаровские регекспы имели фичу "positional captures"
5.4.1 – Patterns wrote:As a special case, the empty capture () captures the current string position (a number). For instance, if we apply the pattern "()aa()" on the string "flaaap", there will be two captures: 3 and 5.
Движок у фара собственный, можно было бы и реализовать?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:Движок у фара собственный, можно было бы и реализовать?
Всё можно, при наличии времени и желания.
Однако существующие ф-ции editor.GetStringW и regex.findW позволяют эти проблемы избежать, что и сделал AleXH.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

Имхо в сабже вместо

Code: Select all

word=regex.new "/\\b(\\i+)\\b/" и match:regex.new "/[а-яёА-ЯЁ]*([a-zA-Z]+[а-яёА-ЯЁ]+)+[a-zA-Z]*/"
должнo быть

Code: Select all

word=regex.new "/\\b(\\w+?)\\b/" и match:regex.new "/((?<=[a-zA-Z0-9])[а-яёА-ЯЁ]+|[а-яёА-ЯЁ]+(?=[a-zA-Z0-9]))/"
, если же нужно подсветить только кириллицу мимикрирующую под латиницу, то дополнительно вместо

Code: Select all

find:regex.new "/([а-яёА-ЯЁ]+)/"
, пишем

Code: Select all

find:regex.new "/([аеорсхуАВЕЗКМНОРСТХ]+)/"
.
Last edited by AleXH on Fri 31 Oct, 2014 15:46, edited 3 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

AleXH wrote:Смысл сабжа в том, чтобы подсветить все смешанные слова, а не только те, которые начинаются на латиницу.
Полагаю вы правы.
И стоит перевести скрипт на использование W-функций.

Не знаю будет ли zg поддерживать скрипт (тему создал я).
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

А что их поддерживать? - Если у кого-то есть дополнительные идеи, оптимизации воплощённые в код, то пусть предлагают - поправим. Скрипты, в том числе и подсветки кириллицы и пробельных символов, благодаря moon легки для восприятия, по организации просты и легко поддаются модификации - поправить под себя не сложно.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

AleXH wrote:Если у кого-то есть дополнительные идеи, оптимизации воплощённые в код, то пусть предлагают - поправим.
Вот это и называется поддерживать. Кто-то должен править первый пост.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

Поскольку оба скрипта близнецы, то передайте сабж мне, поправлю. Думаю маловероятно, что кто-нибудь будет досаждать предложениями с улучшениями - тот, кто умеет, тот и гораздо круче себе наваяет, а кто не умеет, тот будет пользоваться готовым и жужжать не будет.
User avatar
Zeroes
Мультикопипастер Броадкастер
Posts: 569
Joined: Wed 16 Mar, 2005 20:53
Location: Gomel \ Belarus
Has thanked: 1 time
Been thanked: 3 times
Contact:

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

Post by Zeroes »

А есть последний рабочий вариант какой то?
Last edited by Zeroes on Tue 09 Jan, 2024 00:07, edited 1 time in total.
--- Zeroes & Ones ---
Post Reply

Return to “Полезные макросы и скрипты”