mirror of https://github.com/UberGames/rpgxEF.git
...
This commit is contained in:
parent
3b23bfa353
commit
d4dbfaec23
|
@ -91,17 +91,20 @@ typedef enum {
|
||||||
LMT_IGNORE
|
LMT_IGNORE
|
||||||
} bgLexMorphemType;
|
} bgLexMorphemType;
|
||||||
|
|
||||||
typedef struct bgLexMorphem_s bgLexMorphem;
|
typedef struct bgLexMorphemData_s bgLexMorphemData;
|
||||||
struct bgLexMorphem_s {
|
struct bgLexMorphemData_s {
|
||||||
bgLexMorphemType type;
|
char str[BIG_INFO_STRING];
|
||||||
union {
|
|
||||||
char* string;
|
|
||||||
bgLexSymbol symbol;
|
bgLexSymbol symbol;
|
||||||
int numInteger;
|
int numInteger;
|
||||||
double numDouble;
|
double numDouble;
|
||||||
vec3_t vector3;
|
vec3_t vector3;
|
||||||
vec4_t vector4;
|
vec4_t vector4;
|
||||||
} data;
|
};
|
||||||
|
|
||||||
|
typedef struct bgLexMorphem_s bgLexMorphem;
|
||||||
|
struct bgLexMorphem_s {
|
||||||
|
bgLexMorphemType type;
|
||||||
|
bgLexMorphemData data;
|
||||||
int line;
|
int line;
|
||||||
int column;
|
int column;
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,7 +17,7 @@ KEYWORD [a-zA-Z]+[a-zA-Z0-9]*
|
||||||
%%
|
%%
|
||||||
\"[^\"]*\" {
|
\"[^\"]*\" {
|
||||||
yyextra->type = LMT_STRING;
|
yyextra->type = LMT_STRING;
|
||||||
yyextra->data.string = yytext;
|
strncpy(yyextra->data.str, yytext, BIG_INFO_STRING);
|
||||||
yyextra->column += strlen(yytext);
|
yyextra->column += strlen(yytext);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -852,7 +852,7 @@ YY_RULE_SETUP
|
||||||
#line 18 "bg_lex.lex"
|
#line 18 "bg_lex.lex"
|
||||||
{
|
{
|
||||||
yyextra->type = LMT_STRING;
|
yyextra->type = LMT_STRING;
|
||||||
yyextra->data.string = yytext;
|
strncpy(yyextra->data.str, yytext, BIG_INFO_STRING);
|
||||||
yyextra->column += strlen(yytext);
|
yyextra->column += strlen(yytext);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "g_local.h"
|
#include "g_local.h"
|
||||||
#include "g_groups.h"
|
#include "g_groups.h"
|
||||||
|
#include "bg_lex.h"
|
||||||
|
|
||||||
extern void BG_LoadItemNames(void);
|
extern void BG_LoadItemNames(void);
|
||||||
extern qboolean BG_ParseRankNames ( char* fileName, rankNames_t rankNames[] );
|
extern qboolean BG_ParseRankNames ( char* fileName, rankNames_t rankNames[] );
|
||||||
|
@ -910,11 +911,10 @@ void SP_target_location (gentity_t *ent);
|
||||||
|
|
||||||
static void G_LoadTimedMessages(void) {
|
static void G_LoadTimedMessages(void) {
|
||||||
fileHandle_t f;
|
fileHandle_t f;
|
||||||
|
bgLex* lexer;
|
||||||
char* buffer;
|
char* buffer;
|
||||||
char* textPtr;
|
|
||||||
char* token;
|
|
||||||
int len;
|
int len;
|
||||||
int i;
|
int i = 0;
|
||||||
|
|
||||||
len = trap_FS_FOpenFile("timedmessages.cfg", &f, FS_READ);
|
len = trap_FS_FOpenFile("timedmessages.cfg", &f, FS_READ);
|
||||||
if(!len) return;
|
if(!len) return;
|
||||||
|
@ -935,43 +935,23 @@ static void G_LoadTimedMessages(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_FS_Read(buffer, len, f);
|
trap_FS_Read(buffer, len, f);
|
||||||
|
|
||||||
|
lexer = bgLex_create(buffer);
|
||||||
|
|
||||||
textPtr = buffer;
|
while(bgLex_lex(lexer)) {
|
||||||
COM_BeginParseSession();
|
if(lexer->morphem.type == LMT_STRING) {
|
||||||
token = COM_Parse(&textPtr);
|
char tmp[BIG_INFO_STRING];
|
||||||
if(token[0] != '{') {
|
Com_sprintf(tmp, BIG_INFO_STRING, "%s\0", lexer->morphem.data.str);
|
||||||
G_Printf("G_LoadTimedMessages - timedmessages.cfg not beginning with '{'\n");
|
G_Printf("%s --> len = %d\n", tmp, strlen(tmp));
|
||||||
trap_FS_FCloseFile(f);
|
level.timedMessages->append(level.timedMessages, tmp, LT_STRING, strlen(tmp));
|
||||||
free(buffer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < 10; i++) {
|
|
||||||
token = COM_Parse(&textPtr);
|
|
||||||
|
|
||||||
if(!token[0]) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!strcmp(token, "message")) {
|
if(lexer->morphem.type == LMT_SYMBOL) {
|
||||||
if(COM_ParseString(&textPtr, &token)) {
|
G_Printf(S_COLOR_MAGENTA "Symbol: %d\n", lexer->morphem.data.symbol);
|
||||||
G_Printf("G_LoadTimedMessages - invalid value '%s'\n", token);
|
|
||||||
SkipRestOfLine(&textPtr);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
level.timedMessages->append(level.timedMessages, token, LT_STRING, strlen(token)+1);
|
|
||||||
} else {
|
|
||||||
if(token[0] == '}') {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_Printf("G_LoadTimedMessages - invalid token '%s'\n", token);
|
|
||||||
SkipRestOfLine(&textPtr);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bgLex_destroy(lexer);
|
||||||
trap_FS_FCloseFile(f);
|
trap_FS_FCloseFile(f);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue