/* ************************************************************************ * * lib11sht.h, v1.0 * * Fuzzy comparison library: public API * * * * Copyright (C) 2025 by Ruben Carlo Benante * * GNU GPL version 2 or later. * * ************************************************************************ */ #ifndef LIB11SHT_H #define LIB11SHT_H #define LEVN_SBUFF 256 /* min size for s1/s2 buffers and bounded input */ /* Compare similarity between two strings (after asciify + trim + lowercase). * Symmetric in shape with fequal(a, b, delta). * Returns: * 0 if equal or similar above the lratio threshold * -1 if a < b alphabetically (after normalization) * +1 if a > b alphabetically (after normalization) * On error: sets errno = EINVAL and returns 0; comparison result is undefined. * Caller must reset errno = 0 before the call to detect errors. * * Parameters: * a, b input strings (NUL-terminated, may contain UTF-8 accented Latin chars) * shold Levenshtein similarity threshold 0.0..1.0; matches above this count as equal */ int sequal(char *a, char *b, float shold); /* Full variant of sequal: same comparison but also returns diagnostics. * Used by callers that need the computed ratio or the normalized strings * (e.g. cmp11sht CLI's -o / -n flags). * * Extra parameters: * ratio out: Levenshtein similarity 0.0..1.0 (1.0 on exact-after-normalize) * s1, s2 out: caller-provided buffers (>= LEVN_SBUFF) filled with the * normalized inputs */ int sequal_full(char *a, char *b, float shold, float *ratio, char *s1, char *s2); /* Compare two floats within ±delta. * Returns: * 0 if |a - b| <= delta * -1 if a < b - delta * +1 if a > b + delta */ int fequal(float a, float b, float delta); #endif /* LIB11SHT_H */