Esempio n. 1
0
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)
{
	TCOD_lex_t *lex=(TCOD_lex_t *)TCOD_lex_new_intern();
    lex->flags = _flags;
	lex->last_javadoc_comment = (char *)calloc(sizeof(char),MAX_JAVADOC_COMMENT_SIZE );
    if ( _symbols )
    {
		while ( _symbols[ lex->nb_symbols ] )
		{
			if ( strlen( _symbols[ lex->nb_symbols ] ) >= TCOD_LEX_SYMBOL_SIZE )
			{
				static char msg[255];
				sprintf (msg, "symbol '%s' too long (max size %d)",
				       _symbols[ lex->nb_symbols ], TCOD_LEX_SYMBOL_SIZE );
				TCOD_last_error=strdup(msg);
				return NULL;
			}
			strcpy(lex->symbols[ lex->nb_symbols ], _symbols[ lex->nb_symbols ] );
			lex->nb_symbols++;
		}
    }
    if ( _keywords )
    {
		while ( _keywords[ lex->nb_keywords ] )
		{
			if ( strlen( _keywords[ lex->nb_keywords ] ) >= TCOD_LEX_KEYWORD_SIZE )
			{
				static char msg[255];
				sprintf(msg,"keyword '%s' too long (max size %d)",
						   _keywords[ lex->nb_keywords ], TCOD_LEX_KEYWORD_SIZE);
				TCOD_last_error=strdup(msg);
				return NULL;
			}
			if ( lex->flags & TCOD_LEX_FLAG_NOCASE )
			{
				char *ptr = (char *)_keywords[ lex->nb_keywords ];
				while ( *ptr )
				{
					*ptr = (char)toupper( *ptr);
					ptr++;
				}
			}
			strcpy(lex->keywords[ lex->nb_keywords ], _keywords[ lex->nb_keywords ] );
			lex->nb_keywords++;
		}
	}
	lex->simpleCmt = simpleComment;
	lex->cmtStart = commentStart;
	lex->cmtStop = commentStop;
	lex->javadocCmtStart = javadocCommentStart;
	lex->stringDelim = _stringDelim;
	lex->lastStringDelim='\0';
	lex->tok = (char *)calloc(sizeof(char),256);
	lex->toklen=256;
	return (TCOD_lex_t *)lex;
}
Esempio n. 2
0
File: lex.cpp Progetto: AMouri/Rouge
TCODLex::TCODLex()
{
	data= (void *)TCOD_lex_new_intern();
}