16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-19 13:29:18 +02:00

Random includes only for mmd files

This commit is contained in:
Królik Uszasty
2022-09-16 22:47:31 +02:00
committed by Milek7
parent 027f7c69e9
commit d191d9e5e7
4 changed files with 9 additions and 2 deletions

View File

@@ -4970,6 +4970,7 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co
+ " end",
cParser::buffer_TEXT,
asBaseDir );
parser.allowRandomIncludes = true;
std::string token;
do {
token = "";

View File

@@ -8671,6 +8671,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName)
std::string cabstr("cab" + std::to_string(cabindex) + "definition:");
cParser parser( asFileName, cParser::buffer_FILE, DynamicObject->asBaseDir );
parser.allowRandomIncludes = true;
// NOTE: yaml-style comments are disabled until conflict in use of # is resolved
// parser.addCommentStyle( "#", "\n" );
std::string token;

View File

@@ -245,7 +245,7 @@ std::string cParser::readToken( bool ToLower, const char *Break ) {
// launch child parser if include directive found.
// NOTE: parameter collecting uses default set of token separators.
if( expandIncludes && token == "include" ) {
std::string includefile = deserialize_random_set(*this); //readToken(ToLower); // nazwa pliku
std::string includefile = allowRandomIncludes ? deserialize_random_set(*this) : readToken(ToLower); // nazwa pliku
replace_slashes(includefile);
if( ( true == LoadTraction )
|| ( ( false == contains( includefile, "tr/" ) )
@@ -253,6 +253,7 @@ std::string cParser::readToken( bool ToLower, const char *Break ) {
if (Global.ParserLogIncludes)
WriteLog("including: " + includefile);
mIncludeParser = std::make_shared<cParser>( includefile, buffer_FILE, mPath, LoadTraction, readParameters( *this ) );
mIncludeParser->allowRandomIncludes = allowRandomIncludes;
mIncludeParser->autoclear( m_autoclear );
if( mIncludeParser->mSize <= 0 ) {
ErrorLog( "Bad include: can't open file \"" + includefile + "\"" );
@@ -268,7 +269,8 @@ std::string cParser::readToken( bool ToLower, const char *Break ) {
else if( ( std::strcmp( Break, "\n\r" ) == 0 ) && ( token.compare( 0, 7, "include" ) == 0 ) ) {
// HACK: if the parser reads full lines we expect this line to contain entire include directive, to make parsing easier
cParser includeparser( token.substr( 7 ) );
std::string includefile = deserialize_random_set(includeparser);//includeparser.readToken( ToLower ); // nazwa pliku
includeparser.allowRandomIncludes = allowRandomIncludes;
std::string includefile = allowRandomIncludes ? deserialize_random_set( includeparser ) : includeparser.readToken( ToLower ); // nazwa pliku
replace_slashes(includefile);
if( ( true == LoadTraction )
|| ( ( false == contains( includefile, "tr/" ) )
@@ -276,6 +278,7 @@ std::string cParser::readToken( bool ToLower, const char *Break ) {
if (Global.ParserLogIncludes)
WriteLog("including: " + includefile);
mIncludeParser = std::make_shared<cParser>( includefile, buffer_FILE, mPath, LoadTraction, readParameters( includeparser ) );
mIncludeParser->allowRandomIncludes = allowRandomIncludes;
mIncludeParser->autoclear( m_autoclear );
if( mIncludeParser->mSize <= 0 ) {
ErrorLog( "Bad include: can't open file \"" + includefile + "\"" );
@@ -382,6 +385,7 @@ void cParser::injectString(const std::string &str)
}
else {
mIncludeParser = std::make_shared<cParser>( str, buffer_TEXT, "", LoadTraction );
mIncludeParser->allowRandomIncludes = allowRandomIncludes;
mIncludeParser->autoclear( m_autoclear );
}
}

View File

@@ -91,6 +91,7 @@ class cParser //: public std::stringstream
// returns number of currently processed line in main file, -1 if inside include
int LineMain() const;
bool expandIncludes = true;
bool allowRandomIncludes = false;
private:
// methods: