diff --git a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp index 847b15485..40b8f4c2b 100644 --- a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp +++ b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp @@ -546,11 +546,28 @@ bool SyntaxDefinitionManager::loadFromStream( IOStream& stream, buffer.resize( stream.getSize() ); stream.read( buffer.data(), buffer.size() ); - nlohmann::json j = nlohmann::json::parse( buffer, nullptr, false, true ); + try { + auto j = nlohmann::json::parse( buffer, nullptr, true, true ); - if ( j.is_array() ) { - for ( const auto& lang : j ) { - auto res = loadLanguage( lang ); + if ( j.is_array() ) { + for ( const auto& lang : j ) { + auto res = loadLanguage( lang ); + if ( !res.getLanguageName().empty() ) { + auto pos = getLanguageIndex( res.getLanguageName() ); + if ( pos.has_value() ) { + if ( addedLangs ) + addedLangs->push_back( res.getLanguageName() ); + mDefinitions[pos.value()] = std::move( res ); + } else { + if ( addedLangs ) + addedLangs->push_back( res.getLanguageName() ); + res.mLanguageIndex = mDefinitions.size(); + mDefinitions.emplace_back( std::move( res ) ); + } + } + } + } else { + auto res = loadLanguage( j ); if ( !res.getLanguageName().empty() ) { auto pos = getLanguageIndex( res.getLanguageName() ); if ( pos.has_value() ) { @@ -565,21 +582,9 @@ bool SyntaxDefinitionManager::loadFromStream( IOStream& stream, } } } - } else { - auto res = loadLanguage( j ); - if ( !res.getLanguageName().empty() ) { - auto pos = getLanguageIndex( res.getLanguageName() ); - if ( pos.has_value() ) { - if ( addedLangs ) - addedLangs->push_back( res.getLanguageName() ); - mDefinitions[pos.value()] = std::move( res ); - } else { - if ( addedLangs ) - addedLangs->push_back( res.getLanguageName() ); - res.mLanguageIndex = mDefinitions.size(); - mDefinitions.emplace_back( std::move( res ) ); - } - } + } catch ( const nlohmann::json::exception& e ) { + Log::error( "SyntaxDefinition load failed:\n%s", e.what() ); + return false; } return true; diff --git a/src/tools/ecode/universallocator.cpp b/src/tools/ecode/universallocator.cpp index 13ac01c23..9fe452168 100644 --- a/src/tools/ecode/universallocator.cpp +++ b/src/tools/ecode/universallocator.cpp @@ -936,6 +936,8 @@ UniversalLocator::openFileTypeModel( const std::string& pattern ) { std::vector fileTypeNames; fileTypeNames.reserve( defs.size() ); for ( const auto& def : defs ) { + if ( !def.isVisible() ) + continue; if ( pattern.empty() || String::startsWith( String::toLower( def.getLanguageName() ), String::toLower( pattern ) ) ) fileTypeNames.push_back( def.getLanguageName() );