127 lines
4.6 KiB
C
127 lines
4.6 KiB
C
|
/* BSD 3-Clause License
|
||
|
*
|
||
|
* Copyright © 2008-2022, Jice and the libtcod contributors.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are met:
|
||
|
*
|
||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer.
|
||
|
*
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
|
* this list of conditions and the following disclaimer in the documentation
|
||
|
* and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* 3. Neither the name of the copyright holder nor the names of its
|
||
|
* contributors may be used to endorse or promote products derived from
|
||
|
* this software without specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
/// This is a libtcod internal module.
|
||
|
/// Use at your own risk.
|
||
|
/// @cond INTERNAL
|
||
|
#ifndef TCOD_LEX_H_
|
||
|
#define TCOD_LEX_H_
|
||
|
|
||
|
#include "portability.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#define TCOD_LEX_FLAG_NOCASE 1
|
||
|
#define TCOD_LEX_FLAG_NESTING_COMMENT 2
|
||
|
#define TCOD_LEX_FLAG_TOKENIZE_COMMENTS 4
|
||
|
|
||
|
#define TCOD_LEX_ERROR -1
|
||
|
#define TCOD_LEX_UNKNOWN 0
|
||
|
#define TCOD_LEX_SYMBOL 1
|
||
|
#define TCOD_LEX_KEYWORD 2
|
||
|
#define TCOD_LEX_IDEN 3
|
||
|
#define TCOD_LEX_STRING 4
|
||
|
#define TCOD_LEX_INTEGER 5
|
||
|
#define TCOD_LEX_FLOAT 6
|
||
|
#define TCOD_LEX_CHAR 7
|
||
|
#define TCOD_LEX_EOF 8
|
||
|
#define TCOD_LEX_COMMENT 9
|
||
|
|
||
|
#define TCOD_LEX_MAX_SYMBOLS 100
|
||
|
#define TCOD_LEX_SYMBOL_SIZE 5
|
||
|
#define TCOD_LEX_MAX_KEYWORDS 100
|
||
|
#define TCOD_LEX_KEYWORD_SIZE 20
|
||
|
|
||
|
typedef struct TCOD_lex_t {
|
||
|
int file_line; // Current line number.
|
||
|
int token_type; // One of the TCOD_LEX_* values.
|
||
|
int token_int_val;
|
||
|
int token_idx;
|
||
|
float token_float_val;
|
||
|
char* tok;
|
||
|
int toklen;
|
||
|
char lastStringDelim;
|
||
|
char* pos;
|
||
|
char* buf;
|
||
|
char* filename;
|
||
|
char* last_javadoc_comment;
|
||
|
/* private stuff */
|
||
|
int nb_symbols; // Current number of symbols in `symbols` array.
|
||
|
int nb_keywords; // Current number of keywords in `keywords` array.
|
||
|
int flags;
|
||
|
char symbols[TCOD_LEX_MAX_SYMBOLS][TCOD_LEX_SYMBOL_SIZE];
|
||
|
char keywords[TCOD_LEX_MAX_KEYWORDS][TCOD_LEX_KEYWORD_SIZE];
|
||
|
const char* simple_comment;
|
||
|
const char* comment_start;
|
||
|
const char* comment_stop;
|
||
|
const char* javadoc_comment_start;
|
||
|
const char* stringDelim;
|
||
|
bool javadoc_read;
|
||
|
bool allocBuf; // True if `buf` is owned by this object.
|
||
|
bool is_savepoint; // is this object a savepoint (no free in destructor)
|
||
|
} TCOD_lex_t;
|
||
|
|
||
|
TCODLIB_API TCOD_lex_t* TCOD_lex_new_intern(void);
|
||
|
TCODLIB_API TCOD_lex_t* TCOD_lex_new(
|
||
|
const char* const* symbols,
|
||
|
const char* const* keywords,
|
||
|
const char* simpleComment,
|
||
|
const char* commentStart,
|
||
|
const char* commentStop,
|
||
|
const char* javadocCommentStart,
|
||
|
const char* stringDelim,
|
||
|
int flags);
|
||
|
TCODLIB_API void TCOD_lex_delete(TCOD_lex_t* lex);
|
||
|
|
||
|
TCODLIB_API void TCOD_lex_set_data_buffer(TCOD_lex_t* lex, char* dat);
|
||
|
TCODLIB_API bool TCOD_lex_set_data_file(TCOD_lex_t* lex, const char* filename);
|
||
|
|
||
|
TCODLIB_API int TCOD_lex_parse(TCOD_lex_t* lex);
|
||
|
TCODLIB_API int TCOD_lex_parse_until_token_type(TCOD_lex_t* lex, int token_type);
|
||
|
TCODLIB_API int TCOD_lex_parse_until_token_value(TCOD_lex_t* lex, const char* token_value);
|
||
|
|
||
|
TCODLIB_API bool TCOD_lex_expect_token_type(TCOD_lex_t* lex, int token_type);
|
||
|
TCODLIB_API bool TCOD_lex_expect_token_value(TCOD_lex_t* lex, int token_type, const char* token_value);
|
||
|
|
||
|
TCODLIB_API void TCOD_lex_savepoint(TCOD_lex_t* lex, TCOD_lex_t* savepoint);
|
||
|
TCODLIB_API void TCOD_lex_restore(TCOD_lex_t* lex, TCOD_lex_t* savepoint);
|
||
|
TCODLIB_API char* TCOD_lex_get_last_javadoc(TCOD_lex_t* lex);
|
||
|
TCODLIB_API const char* TCOD_lex_get_token_name(int token_type);
|
||
|
|
||
|
TCODLIB_API int TCOD_lex_hextoint(char c);
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif // TCOD_LEX_H_
|
||
|
/// @endcond
|