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

Здесь выкладываются готовые к использованию макросы и скрипты.
Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

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

Postby Shmuel » Tue 03 Jun, 2014 07:50

Latest post of the previous page:

AleXH wrote:Что-то в фаре не так, иначе откуда такая катастрофическая разница?

Если хотите, чтоб я посмотрел, приложите оба варианта скрипта и обрабатываемый файл - всего 3 файла.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Postby AleXH » Tue 03 Jun, 2014 08:12

1.xml - подопытный файл, slow.moon - 44 сек, fast.moon - 1 сек.
Attachments
TEMP.7z
(20.05 KiB) Downloaded 43 times

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

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

Postby zg » Tue 03 Jun, 2014 08:46

очевидно, что очень много конвертаций utf8<->ucs16.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Postby AleXH » Tue 03 Jun, 2014 08:54

да, это очевидно, но вот чтобы настолько деградировала производительность... может код конвертаций не оптимален?

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Tue 03 Jun, 2014 09:53

Возможно, там постоянно пересчитывается индекс символа между UTF8/UCS16. Чем длиннее строка - тем это дольше...

Shmuel
Posts: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

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

Postby Shmuel » Tue 03 Jun, 2014 10:34

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: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Tue 03 Jun, 2014 10:43

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: 4903
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 9 times
Been thanked: 118 times

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

Postby Shmuel » Tue 03 Jun, 2014 10:58

John Doe wrote:Движок у фара собственный, можно было бы и реализовать?
Всё можно, при наличии времени и желания.
Однако существующие ф-ции editor.GetStringW и regex.findW позволяют эти проблемы избежать, что и сделал AleXH.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Postby AleXH » Tue 03 Jun, 2014 15:07

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

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: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Tue 03 Jun, 2014 17:31

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

Не знаю будет ли zg поддерживать скрипт (тему создал я).

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Postby AleXH » Tue 03 Jun, 2014 18:00

А что их поддерживать? - Если у кого-то есть дополнительные идеи, оптимизации воплощённые в код, то пусть предлагают - поправим. Скрипты, в том числе и подсветки кириллицы и пробельных символов, благодаря moon легки для восприятия, по организации просты и легко поддаются модификации - поправить под себя не сложно.

User avatar
John Doe
Бюрократ
Posts: 11023
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

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

Postby John Doe » Tue 03 Jun, 2014 19:25

AleXH wrote:Если у кого-то есть дополнительные идеи, оптимизации воплощённые в код, то пусть предлагают - поправим.
Вот это и называется поддерживать. Кто-то должен править первый пост.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Postby AleXH » Tue 03 Jun, 2014 19:42

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


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

Who is online

Users browsing this forum: No registered users and 2 guests