/* * This file is part of Beastie * SPDX-FileCopyrightText: 2023 Norman Gray * SPDX-License-Identifier: BSD-2-Clause */ #ifndef PARSE_MDINLINE_H #define PARSE_MDINLINE_H 1 #include // for FILE* #include "beastie.h" // for YYSTYPE and s7_pointer #include "yycommon.h" // for YYLTYPE typedef enum { st_none, st_link, st_em_star, st_em_uscore, st_strong_star, st_strong_uscore } state_stack_t; // the following should be big enough -- if we overflow, we just discard state #define MDINLINE_LEXER_STACK_SIZE 8 struct mdinline_extra_s { state_stack_t state_stack[MDINLINE_LEXER_STACK_SIZE]; int stack_depth; const char* input_source; int initial_line_number; void* yyscanbuf; // cast from YY_BUFFER_STATE }; typedef struct mdinline_extra_s* mdinline_extra_t; // defined in parse-mdinline.lex yyscan_t parse_mdinline_setup_string(mdinline_extra_t extra, const char* input_source, const int initial_line_number, const char*); void parse_mdinline_finish(mdinline_extra_t, yyscan_t); int mdinlinelex(YYSTYPE* lvalp, YYLTYPE* ignored, yyscan_t scanner); // defined in parse-mdinline.y int mdinlineparse(mdinline_extra_t, s7_pointer* parse_result, s7_pointer metadata, yyscan_t scanner); #endif /* PARSE_MDINLINE_H */