blob: 310804612cfed32d08d3d1b9cf7912fbacba1b9a [file] [edit]
/* kwset.h - header declaring the keyword set library.
Copyright (C) 1989, 1998, 2005, 2007, 2009-2026 Free Software Foundation,
Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written August 1989 by Mike Haertel. */
#ifndef _KWSET_H
#define _KWSET_H
/* This file uses _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL. */
#if !_GL_CONFIG_H_INCLUDED
#error "Please include config.h first."
#endif
#include <stddef.h>
#include "arg-nonnull.h"
#include "idx.h"
#ifdef __cplusplus
extern "C" {
#endif
struct kwsmatch
{
idx_t index; /* Index number of matching keyword. */
idx_t offset; /* Offset of match. */
idx_t size; /* Length of match. */
};
struct kwset;
typedef struct kwset *kwset_t;
/* Return a newly allocated keyword set. A nonnull TRANS specifies a
table (indexed by 'unsigned char' values: 0..UCHAR_MAX+1) of character
translations to be applied to all pattern and search text. */
extern kwset_t kwsalloc (char const *trans)
_GL_ATTRIBUTE_RETURNS_NONNULL;
/* Add the given string to the contents of the keyword set. */
extern void kwsincr (kwset_t kwset, char const *text, idx_t len)
_GL_ARG_NONNULL ((1, 2));
/* Return the number of keywords in SET. */
extern idx_t kwswords (kwset_t kwset)
_GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_PURE;
/* Prepare a built keyword set for use. */
extern void kwsprep (kwset_t kwset)
_GL_ARG_NONNULL ((1));
/* Find the first instance of a KWSET member in TEXT, which has SIZE bytes.
Return the offset (into TEXT) of the first byte of the matching substring,
or -1 if no match is found.
Upon a match:
- Store details in *MATCH: index of matched keyword, start offset
(same as the return value), and length.
- If LONGEST, find the longest match that starts at this offset;
otherwise any match that starts at this offset will do.
NOTE! LONGEST does *not* mean to search for the longest KWSET member
across the entire string. */
extern ptrdiff_t kwsexec (kwset_t kwset, char const *text, idx_t size,
struct kwsmatch *match, bool longest)
_GL_ARG_NONNULL ((1, 2, 4));
/* Free the components of the given keyword set. */
extern void kwsfree (kwset_t kwset)
_GL_ARG_NONNULL ((1));
#ifdef __cplusplus
}
#endif
#endif /* _KWSET_H */