diff --git a/src/include/Parser.h b/src/include/Parser.h new file mode 100644 index 0000000..0f0d826 --- /dev/null +++ b/src/include/Parser.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2022-2023 Jordan Bancino <@jordan:bancino.net> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#ifndef TELODENDRIA_PARSER_H +#define TELODENDRIA_PARSER_H + +/*** + * @Nm Parser + * @Nd Functions for dealing with simple grammars. + * @Dd November 24 2023 + * @Xr User + * + * The + * .Nm + * API provides a simple parsing interface for basic parsers. + */ + +/** + * A lot of functions here use this opaque structure. + */ +typedef struct Parser Parser; + +/** + * Create a new parser with an input string. + */ +extern Parser * ParserCreate(char *); + +/** + * Returns true if the character at the current position in + * the parsing process is the one given in, and advances by + * one character eitherway. + */ +extern int ParserExcept(Parser *, char); + +/** + * Starts a clipping session. This stores an index into the + * parser, until + * .Fn ParserEndCopy + * is called. + */ +extern void ParserStartCopy(Parser *); +/** + * Ends a clipping station created by + * .Fn ParserStartCopy + * if it was called beforehand into a new buffer to be freed + * with + * .Fn Free . + */ +extern char * ParserEndCopy(Parser *); + +/** + * Frees a parser created with + * .Fn ParserCreate . + */ +extern void ParserEnd(Parser *); +#endif /* TELODENDRIA_PARSER_H */