Именованные группы в шаблонах регекспов

Разработка Far.
Post Reply
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Именованные группы в шаблонах регекспов

Post by Shmuel »

Именованных групп в шаблонах фаровских регекспов вроде нет (в хелпе не упоминаются), но в плагине S&R 2.5 они есть и работают.
Справка S&R 2.5 wrote:Можно также создавать поименованные скобки: (?{name}pattern)
В качестве имени "name" может быть пустая строка (получается безымянная скобка, на которую нельзя сослаться) или последовательность из знаков слова (\w) и пробелов (\s).
В Фаре это не работает.
Как мне казалось, S&R 2.5 и Фар используют одну и ту же библиотеку К.Ступника.
Вопрос к тем, кто знает: куда девалась эта фича и можно ли её восстановить (я не имею в виду написание с нуля).
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Именованные группы в шаблонах регекспов

Post by DrKnS »

В библиотеке эта фича была опциональна и при импорте в Far подключена не была.

При желании всё можно.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Именованные группы в шаблонах регекспов

Post by Shmuel »

Было бы неплохо.

Отключена эта фича неудачно: до некоторого билда Фара выдавалось сообщение "could not find the string", а теперь как будто находит пустую строку в месте нахождения курсора (т.е. ничего не происходит). И то, и другое - неправильно: если фича отключена, значит шаблон этот - невалидный, о чём и должно сообщаться.

Update: "ничего не происходит" - это кажется реакция поиска в редакторе на любой невалидный шаблон.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Именованные группы в шаблонах регекспов

Post by DrKnS »

4112.
Фича включена на уровне библиотеки.
Для работы с ней также необходим клиентский код, если есть желание написать его - welcome.
Вместо "ничего не происходит" будут показываться разнообразные ошибки.
Текст ошибок не локализован, если есть желание перевести его - тоже welcome.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Именованные группы в шаблонах регекспов

Post by Shmuel »

Не могу собрать с VC2010.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Именованные группы в шаблонах регекспов

Post by Shmuel »

DrKnS wrote:4112.
[.....]
Вместо "ничего не происходит" будут показываться разнообразные ошибки.
Не считаю, что принудительный показ ошибки Фаром при вызове функций API плагином или макросом - это хорошо.

Пример: lua:mf.fmatch("txt","/txt$") выводит на экран

Code: Select all

╔═════════════ Error ═════════════╗
║ Expression contain syntax error ║
║ /txt$                           ║
║     ^                           ║
╟─────────────────────────────────╢
║             { OK }              ║
╚═════════════════════════════════╝
Кстати, позиция ошибки должна быть на 1 правее.
А также contains, а не contain.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: Именованные группы в шаблонах регекспов

Post by Shmuel »

DrKnS wrote:4112.
Фича включена на уровне библиотеки.
Для работы с ней также необходим клиентский код, если есть желание написать его - welcome.
Что имеется в виду под клиентским кодом - расширение API RegExpControl ?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Именованные группы в шаблонах регекспов

Post by DrKnS »

С вышеописанным согласен, 4114.
Под клиентским кодом имеется в виду то, что в Search/Match надо передавать словарь (std::unordered_map<std::wstring, RegExpMatch>) который будет заполнен парами "имя: координаты", ну и потом что-то с этой информацией делать.

В плане API - нужно расширение структуры RegExpSearch (что будет весело, т. к. никто не напрягся добавить туда StructSize во время ломания API) и изобретение какого-то аналога map на plain C.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Именованные группы в шаблонах регекспов

Post by zg »

там есть void* Reserved.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Именованные группы в шаблонах регекспов

Post by DrKnS »

А если потом ещё что-то понадобится?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Именованные группы в шаблонах регекспов

Post by zg »

DrKnS wrote:А если потом ещё что-то понадобится?
понадобиться — будем думать.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Именованные группы в шаблонах регекспов

Post by DrKnS »

Добавил сабж в редактор.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Именованные группы в шаблонах регекспов

Post by Shmuel »

1. Я бы предложил, пока ещё не привыкли к существующему синтаксису (в поиске), изменить его на более стандартный (как в Perl, PCRE, Oniguruma).
То-есть, вместо (?{name}...) сделать допустимыми (?<name>...) и (?'name'...)

2. А также, как в PCRE и Oniguruma, именованная группа должна получать и номер тоже. У нас она не получает, и это неправильно.
Post Reply

Return to “Development”