This commit is contained in:
parent
b8e5fd35ca
commit
0b3baedbee
5 changed files with 103 additions and 0 deletions
49
README.md
Normal file
49
README.md
Normal file
|
@ -0,0 +1,49 @@
|
|||
# wildmatch
|
||||
|
||||
*wildmatch — это библиотека C/C++ под лицензией BSD для сопоставления шаблонов в стиле git/rsync.*
|
||||
|
||||
## СИНТАКСИС
|
||||
|
||||
```c
|
||||
/* C API */
|
||||
#include <wildmatch/wildmatch.h>
|
||||
|
||||
if (wildmatch("/a/**/z", "/a/b/c/d/z", WM_WILDSTAR) == WM_MATCH) {
|
||||
/* matched */
|
||||
}
|
||||
|
||||
/* C++ API */
|
||||
#include <wildmatch/wildmatch.hpp>
|
||||
|
||||
if (wild::match("/a/**/z", "/a/b/c/d/z")) {
|
||||
/* matched */
|
||||
}
|
||||
```
|
||||
|
||||
## ОПИСАНИЕ
|
||||
|
||||
**wildmatch** — это расширение функции `fnmatch(3)`, определённой в POSIX 1003.2-1992, раздел B.6.
|
||||
|
||||
Расширение wildmatch позволяет `**` сопоставлять символ `/`, когда установлен флаг `WM_PATHNAME`. Это даёт практическое преимущество: можно совпадать со всеми подкаталогами пути с помощью `**`, а одинарная звёздочка `*` при этом остается для сопоставления внутри компонентов пути.
|
||||
|
||||
C-API по умолчанию совместим с `fnmatch`. Расширение wildmatch включается передачей флага `WM_WILDSTAR` в `flags`. Задание `WM_WILDSTAR` неявно включает `WM_PATHNAME`.
|
||||
|
||||
В C++-API аргумент `flags` по умолчанию равен `wild::WILDSTAR`. Вызов `wild::match(...)` только с двумя аргументами будет по умолчанию использовать расширенный синтаксис.
|
||||
|
||||
Флаги `WM_` названы так же, как соответствующие им `FNM_` из `fnmatch`, и совпадают по поведению с `fnmatch(3)`, если `WM_WILDSTAR` не задан.
|
||||
|
||||
## КОД ВОЗВРАТА
|
||||
|
||||
C-API возвращает `WM_MATCH`, если строка совпала с шаблоном, и `WM_NOMATCH`, если не совпала. Эти значения определены как `#define` для 0 и 1 соответственно.
|
||||
|
||||
C++-API возвращает логическое значение: `true` (совпадение) или `false` (нет совпадения).
|
||||
|
||||
## ИСТОРИЯ
|
||||
|
||||
Расширенный синтаксис wildmatch разрабатывался, ориентируясь на [тесты wildmatch](https://github.com/git/git/blob/maint/t/t3070-wildmatch.sh) из проекта [Git](https://git-scm.com).
|
||||
|
||||
Название «wildmatch» взято из внутренней библиотеки в [rsync](https://rsync.samba.org/), используемой для сопоставления в стиле `fnmatch`. Реализация wildmatch в Git первоначально пришла из rsync. Изначальную реализацию wildmatch добавил в rsync Уэйн Дэвисон (Wayne Davison) в 2003 году.
|
||||
|
||||
Набор тестов для wildmatch позаимствован из Git, однако сама библиотека не имеет общего происхождения с реализациями wildmatch ни в Git, ни в rsync.
|
||||
|
||||
Изначально wildmatch основывался на реализации `fnmatch` из OpenBSD. Эта реализация была расширена обратно совместимым образом — путём введения нового флага `WM_WILDSTAR` для включения расширенного синтаксиса.
|
Loading…
Add table
Add a link
Reference in a new issue