init 0.5.0
All checks were successful
Build / Build project (push) Successful in 26s

This commit is contained in:
Alexander Zhirov 2025-09-18 03:12:25 +03:00
parent b8e5fd35ca
commit 0b3baedbee
Signed by: alexander
GPG key ID: C8D8BE544A27C511
5 changed files with 103 additions and 0 deletions

49
README.md Normal file
View 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` для включения расширенного синтаксиса.