102 lines
4.0 KiB
C
102 lines
4.0 KiB
C
|
/*
|
||
|
* libtcod 1.6.0
|
||
|
* Copyright (c) 2008,2009,2010,2012,2013 Jice & Mingos
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions are met:
|
||
|
* * Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
* * 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.
|
||
|
* * The name of Jice or Mingos may not be used to endorse or promote products
|
||
|
* derived from this software without specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY JICE AND MINGOS ``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 JICE OR MINGOS 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.
|
||
|
*/
|
||
|
|
||
|
#ifndef _TCOD_LEX_H
|
||
|
#define _TCOD_LEX_H
|
||
|
/*
|
||
|
* This is a libtcod internal module.
|
||
|
* Use at your own risks...
|
||
|
*/
|
||
|
|
||
|
#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 {
|
||
|
int file_line, token_type, token_int_val, 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, nb_keywords, flags;
|
||
|
char symbols[ TCOD_LEX_MAX_SYMBOLS][ TCOD_LEX_SYMBOL_SIZE ],
|
||
|
keywords[ TCOD_LEX_MAX_KEYWORDS ][ TCOD_LEX_KEYWORD_SIZE ];
|
||
|
const char *simpleCmt;
|
||
|
const char *cmtStart, *cmtStop, *javadocCmtStart;
|
||
|
const char *stringDelim;
|
||
|
bool javadoc_read;
|
||
|
bool allocBuf;
|
||
|
bool savept; /* is this object a savepoint (no free in destructor) */
|
||
|
} TCOD_lex_t;
|
||
|
|
||
|
TCODLIB_API TCOD_lex_t *TCOD_lex_new_intern();
|
||
|
TCODLIB_API TCOD_lex_t *TCOD_lex_new(const char **symbols, const char **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 *savept);
|
||
|
TCODLIB_API void TCOD_lex_restore(TCOD_lex_t *lex,TCOD_lex_t *savept);
|
||
|
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 char *TCOD_lex_get_last_error();
|
||
|
|
||
|
TCODLIB_API int TCOD_lex_hextoint(char c);
|
||
|
|
||
|
#endif
|