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

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

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

Post by Shmuel » Sat 20 Sep, 2014 06:43

Именованных групп в шаблонах фаровских регекспов вроде нет (в хелпе не упоминаются), но в плагине S&R 2.5 они есть и работают.
Справка S&R 2.5 wrote:Можно также создавать поименованные скобки: (?{name}pattern)
В качестве имени "name" может быть пустая строка (получается безымянная скобка, на которую нельзя сослаться) или последовательность из знаков слова (\w) и пробелов (\s).
В Фаре это не работает.
Как мне казалось, S&R 2.5 и Фар используют одну и ту же библиотеку К.Ступника.
Вопрос к тем, кто знает: куда девалась эта фича и можно ли её восстановить (я не имею в виду написание с нуля).

User avatar
DrKnS
Posts: 4530
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Sat 20 Sep, 2014 12:49

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

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

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Post by Shmuel » Sat 20 Sep, 2014 13:52

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

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

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

User avatar
DrKnS
Posts: 4530
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Sat 20 Sep, 2014 15:26

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

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Post by Shmuel » Sat 20 Sep, 2014 15:34

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

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Post by Shmuel » Sat 20 Sep, 2014 16:19

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

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

Code: Select all

╔═════════════ Error ═════════════╗
║ Expression contain syntax error ║
║ /txt$                           ║
║     ^                           ║
╟─────────────────────────────────╢
║             { OK }              ║
╚═════════════════════════════════╝
Кстати, позиция ошибки должна быть на 1 правее.
А также contains, а не contain.

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Post by Shmuel » Sat 20 Sep, 2014 17:57

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

User avatar
DrKnS
Posts: 4530
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Sat 20 Sep, 2014 19:41

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

В плане API - нужно расширение структуры RegExpSearch (что будет весело, т. к. никто не напрягся добавить туда StructSize во время ломания API) и изобретение какого-то аналога map на plain C.

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

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

Post by zg » Sat 20 Sep, 2014 20:02

там есть void* Reserved.

User avatar
DrKnS
Posts: 4530
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Sat 20 Sep, 2014 21:48

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

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

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

Post by zg » Sat 20 Sep, 2014 22:51

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

User avatar
DrKnS
Posts: 4530
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Sun 01 Feb, 2015 16:30

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

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

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

Post by Shmuel » Sun 01 Feb, 2015 17:11

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

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

Post Reply

Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest