mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-22 11:22:18 -04:00
add U_GetString function (#1289)
Revert '-' in TK_Identifier. U_GetString accepts all data except whitespace.
This commit is contained in:
parent
2b8ae8f4e4
commit
286e0c3750
@ -75,7 +75,7 @@ void S_ParseMusInfo (const char *mapid)
|
|||||||
// Check number in range
|
// Check number in range
|
||||||
if (num > 0 && num < MAX_MUS_ENTRIES)
|
if (num > 0 && num < MAX_MUS_ENTRIES)
|
||||||
{
|
{
|
||||||
U_MustGetToken(s, TK_Identifier);
|
U_GetString(s);
|
||||||
lumpnum = W_CheckNumForName(s->string);
|
lumpnum = W_CheckNumForName(s->string);
|
||||||
if (lumpnum > 0)
|
if (lumpnum > 0)
|
||||||
{
|
{
|
||||||
|
@ -166,7 +166,7 @@ boolean U_CheckToken(u_scanner_t* s, char token)
|
|||||||
if(s->needNext)
|
if(s->needNext)
|
||||||
{
|
{
|
||||||
if(!U_GetNextToken(s, false))
|
if(!U_GetNextToken(s, false))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// An int can also be a float.
|
// An int can also be a float.
|
||||||
@ -216,6 +216,46 @@ static void U_RestoreState(u_scanner_t* s, u_scanner_t savedstate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean U_GetString(u_scanner_t* scanner)
|
||||||
|
{
|
||||||
|
unsigned int start;
|
||||||
|
char cur;
|
||||||
|
u_parserstate_t* nextState = &scanner->nextState;
|
||||||
|
|
||||||
|
if(!scanner->needNext)
|
||||||
|
{
|
||||||
|
scanner->needNext = true;
|
||||||
|
U_ExpandState(scanner);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
nextState->tokenLine = scanner->line;
|
||||||
|
nextState->tokenLinePosition = scanner->scanPos - scanner->lineStart;
|
||||||
|
nextState->token = TK_NoToken;
|
||||||
|
if(scanner->scanPos >= scanner->length)
|
||||||
|
{
|
||||||
|
U_ExpandState(scanner);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
start = scanner->scanPos;
|
||||||
|
cur = scanner->data[scanner->scanPos++];
|
||||||
|
|
||||||
|
while(scanner->scanPos < scanner->length)
|
||||||
|
{
|
||||||
|
cur = scanner->data[scanner->scanPos];
|
||||||
|
|
||||||
|
if(cur == ' ' || cur == '\t' || cur == '\n' || cur == '\r' || cur == 0)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
scanner->scanPos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
U_SetString(&(nextState->string), scanner->data + start, scanner->scanPos - start);
|
||||||
|
U_ExpandState(scanner);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
boolean U_GetNextToken(u_scanner_t* scanner, boolean expandState)
|
boolean U_GetNextToken(u_scanner_t* scanner, boolean expandState)
|
||||||
{
|
{
|
||||||
unsigned int start;
|
unsigned int start;
|
||||||
@ -250,7 +290,7 @@ boolean U_GetNextToken(u_scanner_t* scanner, boolean expandState)
|
|||||||
cur = scanner->data[scanner->scanPos++];
|
cur = scanner->data[scanner->scanPos++];
|
||||||
|
|
||||||
// Determine by first character
|
// Determine by first character
|
||||||
if(cur == '_' || cur == '-' || (cur >= 'A' && cur <= 'Z') || (cur >= 'a' && cur <= 'z'))
|
if(cur == '_' || (cur >= 'A' && cur <= 'Z') || (cur >= 'a' && cur <= 'z'))
|
||||||
nextState->token = TK_Identifier;
|
nextState->token = TK_Identifier;
|
||||||
else if(cur >= '0' && cur <= '9')
|
else if(cur >= '0' && cur <= '9')
|
||||||
{
|
{
|
||||||
@ -325,7 +365,7 @@ boolean U_GetNextToken(u_scanner_t* scanner, boolean expandState)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case TK_Identifier:
|
case TK_Identifier:
|
||||||
if(cur != '_' && cur != '-' && (cur < 'A' || cur > 'Z') && (cur < 'a' || cur > 'z') && (cur < '0' || cur > '9'))
|
if(cur != '_' && (cur < 'A' || cur > 'Z') && (cur < 'a' || cur > 'z') && (cur < '0' || cur > '9'))
|
||||||
end = scanner->scanPos;
|
end = scanner->scanPos;
|
||||||
break;
|
break;
|
||||||
case TK_IntConst:
|
case TK_IntConst:
|
||||||
@ -464,7 +504,6 @@ boolean U_GetNextLineToken(u_scanner_t* scanner)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void U_ErrorToken(u_scanner_t* s, int token)
|
void U_ErrorToken(u_scanner_t* s, int token)
|
||||||
{
|
{
|
||||||
if (token < TK_NumSpecialTokens && s->token >= TK_Identifier && s->token < TK_NumSpecialTokens)
|
if (token < TK_NumSpecialTokens && s->token >= TK_Identifier && s->token < TK_NumSpecialTokens)
|
||||||
|
@ -101,6 +101,7 @@ boolean U_CheckToken(u_scanner_t* scanner, char token);
|
|||||||
boolean U_CheckInteger(u_scanner_t* s);
|
boolean U_CheckInteger(u_scanner_t* s);
|
||||||
boolean U_CheckFloat(u_scanner_t* s);
|
boolean U_CheckFloat(u_scanner_t* s);
|
||||||
void U_Unget(u_scanner_t* s);
|
void U_Unget(u_scanner_t* s);
|
||||||
|
boolean U_GetString(u_scanner_t* s);
|
||||||
|
|
||||||
void PRINTF_ATTR(2, 0) U_Error(u_scanner_t* s, const char *msg, ...);
|
void PRINTF_ATTR(2, 0) U_Error(u_scanner_t* s, const char *msg, ...);
|
||||||
void U_ErrorToken(u_scanner_t* s, int token);
|
void U_ErrorToken(u_scanner_t* s, int token);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user