appease incompatible fgds loading: only show message window once, the rest of messages go to the log

report problem fgd line
parse block names case insensitively
#115
This commit is contained in:
Garux 2022-10-30 12:43:25 +03:00
parent 8565682f07
commit 62f06a9af3

View File

@ -88,11 +88,30 @@ void EntityClassFGD_forEach( EntityClassVisitor& visitor ){
} }
} }
#define PARSE_ERROR "error parsing fgd entity class definition at line " << tokeniser.getLine() << ':' << tokeniser.getColumn()
static bool s_fgd_warned = false;
inline bool EntityClassFGD_parseToken( Tokeniser& tokeniser, const char* token ){ inline bool EntityClassFGD_parseToken( Tokeniser& tokeniser, const char* token ){
return string_equal( tokeniser.getToken(), token ); const bool w = s_fgd_warned;
const bool ok = string_equal( tokeniser.getToken(), token );
if( !ok ){
globalErrorStream() << PARSE_ERROR << "\nExpected " << makeQuoted( token ) << '\n';
s_fgd_warned = true;
}
return w || ok;
} }
#define PARSE_ERROR "error parsing entity class definition" #define ERROR_FGD( message )\
do{\
if( s_fgd_warned )\
globalErrorStream() << message << '\n';\
else{\
ERROR_MESSAGE( message );\
s_fgd_warned = true;\
}\
}while( 0 )
void EntityClassFGD_parseSplitString( Tokeniser& tokeniser, CopiedString& string ){ void EntityClassFGD_parseSplitString( Tokeniser& tokeniser, CopiedString& string ){
StringOutputStream buffer( 256 ); StringOutputStream buffer( 256 );
@ -253,7 +272,7 @@ void EntityClassFGD_parseClass( Tokeniser& tokeniser, bool fixedsize, bool isBas
} }
else else
{ {
ERROR_MESSAGE( PARSE_ERROR ); ERROR_FGD( PARSE_ERROR );
} }
} }
@ -504,7 +523,7 @@ void EntityClassFGD_parseClass( Tokeniser& tokeniser, bool fixedsize, bool isBas
} }
else else
{ {
ERROR_MESSAGE( "unknown key type: " << makeQuoted( type ) ); ERROR_FGD( "unknown key type: " << makeQuoted( type ) );
} }
tokeniser.nextLine(); tokeniser.nextLine();
} }
@ -531,18 +550,18 @@ void EntityClassFGD_parse( TextInputStream& inputStream, const char* path ){
if ( blockType == 0 ) { if ( blockType == 0 ) {
break; break;
} }
if ( string_equal( blockType, "@SolidClass" ) ) { if ( string_equal_nocase( blockType, "@SolidClass" ) ) {
EntityClassFGD_parseClass( tokeniser, false, false ); EntityClassFGD_parseClass( tokeniser, false, false );
} }
else if ( string_equal( blockType, "@BaseClass" ) ) { else if ( string_equal_nocase( blockType, "@BaseClass" ) ) {
EntityClassFGD_parseClass( tokeniser, false, true ); EntityClassFGD_parseClass( tokeniser, false, true );
} }
else if ( string_equal( blockType, "@PointClass" ) else if ( string_equal_nocase( blockType, "@PointClass" )
// hl2 below // hl2 below
|| string_equal( blockType, "@KeyFrameClass" ) || string_equal_nocase( blockType, "@KeyFrameClass" )
|| string_equal( blockType, "@MoveClass" ) || string_equal_nocase( blockType, "@MoveClass" )
|| string_equal( blockType, "@FilterClass" ) || string_equal_nocase( blockType, "@FilterClass" )
|| string_equal( blockType, "@NPCClass" ) ) { || string_equal_nocase( blockType, "@NPCClass" ) ) {
EntityClassFGD_parseClass( tokeniser, true, false ); EntityClassFGD_parseClass( tokeniser, true, false );
} }
// hl2 below // hl2 below
@ -560,7 +579,7 @@ void EntityClassFGD_parse( TextInputStream& inputStream, const char* path ){
} }
else else
{ {
ERROR_MESSAGE( "unknown block type: " << makeQuoted( blockType ) ); ERROR_FGD( "unknown block type: " << makeQuoted( blockType ) );
} }
} }