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

Разработка Far.
Post Reply
Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 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: 5618
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 times

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

Post by DrKnS »

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

При желании всё можно.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

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

Post by Shmuel »

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

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

Update: "ничего не происходит" - это кажется реакция поиска в редакторе на любой невалидный шаблон.

User avatar
DrKnS
Posts: 5618
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 times

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

Post by DrKnS »

4112.
Фича включена на уровне библиотеки.
Для работы с ней также необходим клиентский код, если есть желание написать его - welcome.
Вместо "ничего не происходит" будут показываться разнообразные ошибки.
Текст ошибок не локализован, если есть желание перевести его - тоже welcome.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

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

Post by Shmuel »

Не могу собрать с VC2010.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 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: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

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

Post by Shmuel »

DrKnS wrote:4112.
Фича включена на уровне библиотеки.
Для работы с ней также необходим клиентский код, если есть желание написать его - welcome.
Что имеется в виду под клиентским кодом - расширение API RegExpControl ?

User avatar
DrKnS
Posts: 5618
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 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: 5833
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 151 times
Contact:

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

Post by zg »

там есть void* Reserved.

User avatar
DrKnS
Posts: 5618
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 times

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

Post by DrKnS »

А если потом ещё что-то понадобится?

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

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

Post by zg »

DrKnS wrote:А если потом ещё что-то понадобится?
понадобиться — будем думать.

User avatar
DrKnS
Posts: 5618
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 300 times

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

Post by DrKnS »

Добавил сабж в редактор.

Shmuel
Posts: 6138
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 317 times

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

Post by Shmuel »

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

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

Post Reply

Return to “Development”