@@ -5298,14 +5298,15 @@ QCString stripLeadingAndTrailingEmptyLines(const QCString &s,int &docLine)
52985298
52995299static std::unordered_map<std::string,SrcLangExt> g_extLookup;
53005300
5301- static struct Lang2ExtMap
5301+ struct Lang2ExtMap
53025302{
53035303 const char *langName;
53045304 const char *parserName;
53055305 SrcLangExt parserId;
53065306 const char *defExt;
5307- }
5308- g_lang2extMap[] =
5307+ };
5308+
5309+ static std::vector<Lang2ExtMap> g_lang2extMap =
53095310{
53105311// language parser parser option
53115312 { " idl" , " c" , SrcLangExt::IDL, " .idl" },
@@ -5327,36 +5328,31 @@ g_lang2extMap[] =
53275328 { " sql" , " sql" , SrcLangExt::SQL, " .sql" },
53285329 { " md" , " md" , SrcLangExt::Markdown, " .md" },
53295330 { " lex" , " lex" , SrcLangExt::Lex, " .l" },
5330- { 0 , 0 , static_cast <SrcLangExt>(0 ),0 }
53315331};
53325332
53335333bool updateLanguageMapping (const QCString &extension,const QCString &language)
53345334{
5335- const Lang2ExtMap *p = g_lang2extMap;
53365335 QCString langName = language.lower ();
5337- while (p->langName )
5338- {
5339- if (langName==p->langName ) break ;
5340- p++;
5341- }
5342- if (!p->langName ) return FALSE ;
5336+ auto it1 = std::find_if (g_lang2extMap.begin (),g_lang2extMap.end (),
5337+ [&langName](const auto &info) { return info.langName ==langName; });
5338+ if (it1 == g_lang2extMap.end ()) return false ;
53435339
53445340 // found the language
5345- SrcLangExt parserId = p ->parserId ;
5341+ SrcLangExt parserId = it1 ->parserId ;
53465342 QCString extName = extension.lower ();
53475343 if (extName.isEmpty ()) return FALSE ;
53485344 if (extName.at (0 )!=' .' ) extName.prepend (" ." );
5349- auto it = g_extLookup.find (extName.str ());
5350- if (it !=g_extLookup.end ())
5345+ auto it2 = g_extLookup.find (extName.str ());
5346+ if (it2 !=g_extLookup.end ())
53515347 {
5352- g_extLookup.erase (it ); // language was already register for this ext
5348+ g_extLookup.erase (it2 ); // language was already register for this ext
53535349 }
53545350 // printf("registering extension %s\n",qPrint(extName));
53555351 g_extLookup.insert (std::make_pair (extName.str (),parserId));
5356- if (!Doxygen::parserManager->registerExtension (extName,p ->parserName ))
5352+ if (!Doxygen::parserManager->registerExtension (extName,it1 ->parserName ))
53575353 {
53585354 err (" Failed to assign extension %s to parser %s for language %s\n " ,
5359- extName.data (),p ->parserName ,qPrint (language));
5355+ extName.data (),it1 ->parserName ,qPrint (language));
53605356 }
53615357 else
53625358 {
@@ -5460,25 +5456,20 @@ SrcLangExt getLanguageFromFileName(const QCString& fileName, SrcLangExt defLang)
54605456SrcLangExt getLanguageFromCodeLang (QCString &fileName)
54615457{
54625458 // try the extension
5463- SrcLangExt lang = getLanguageFromFileName (fileName, SrcLangExt::Unknown);
5459+ auto lang = getLanguageFromFileName (fileName, SrcLangExt::Unknown);
54645460 if (lang == SrcLangExt::Unknown)
54655461 {
54665462 // try the language names
5467- const Lang2ExtMap *p = g_lang2extMap;
54685463 QCString langName = fileName.lower ();
54695464 if (langName.at (0 )==' .' ) langName = langName.mid (1 );
5470- while (p->langName )
5465+ auto it = std::find_if (g_lang2extMap.begin (),g_lang2extMap.end (),
5466+ [&langName](const auto &info) { return info.langName ==langName; });
5467+ if (it != g_lang2extMap.end ())
54715468 {
5472- if (langName==p->langName )
5473- {
5474- // found the language
5475- lang = p->parserId ;
5476- fileName = p->defExt ;
5477- break ;
5478- }
5479- p++;
5469+ lang = it->parserId ;
5470+ fileName = it->defExt ;
54805471 }
5481- if (!p-> langName )
5472+ else // default to C++
54825473 {
54835474 return SrcLangExt::Cpp;
54845475 }
0 commit comments