]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/help.cpp
q3map2/light_bounce: prevent infinite loop on obscure bias compute
[xonotic/netradiant.git] / radiant / help.cpp
index 4ab85c38d2acf76731d4991486853d9a0b907703..0b6bf2974161f2eced040cfc619920c6a2264e21 100644 (file)
 /*!
    the urls to fire up in the game packs help menus
  */
-namespace {
-    std::list<CopiedString> mHelpURLs;
+namespace
+{
+std::list<CopiedString> mHelpURLs;
 }
 
 /*!
    needed for hooking in Gtk+
  */
-void HandleHelpCommand(CopiedString &str)
-{
-    OpenURL(str.c_str());
+void HandleHelpCommand( CopiedString& str ){
+       OpenURL( str.c_str() );
 }
 
-void process_xlink(const char *filename, const char *menu_name, const char *base_url, ui::Menu menu)
-{
-    if (file_exists(filename)) {
-        xmlDocPtr pDoc = xmlParseFile(filename);
-        if (pDoc) {
-            globalOutputStream() << "Processing .xlink file '" << filename << "'\n";
-            // create sub menu
-            auto menu_in_menu = create_sub_menu_with_mnemonic(menu, menu_name);
-            if (g_Layout_enableDetachableMenus.m_value) {
-                menu_tearoff(menu_in_menu);
-            }
-            // start walking the nodes, find the 'links' one
-            xmlNodePtr pNode = pDoc->children;
-            while (pNode && strcmp((const char *) pNode->name, "links")) {
-                pNode = pNode->next;
-            }
-            if (pNode) {
-                pNode = pNode->children;
-                while (pNode) {
-                    if (!strcmp((const char *) pNode->name, "item")) {
-                        // process the URL
-                        CopiedString url;
-
-                        xmlChar *prop = xmlGetProp(pNode, reinterpret_cast<const xmlChar *>( "url" ));
-                        ASSERT_NOTNULL(prop);
-                        if (strstr(reinterpret_cast<const char *>( prop ), "http://") ||
-                            strstr(reinterpret_cast<const char *>( prop ), "https://")) {
-                            // complete URL
-                            url = reinterpret_cast<const char *>( prop );
-                        } else {
-                            // relative URL
-                            StringOutputStream full(256);
-                            full << base_url << reinterpret_cast<const char *>( prop );
-                            url = full.c_str();
-                        }
-
-                        mHelpURLs.push_back(url);
-
-                        xmlFree(prop);
-
-                        prop = xmlGetProp(pNode, reinterpret_cast<const xmlChar *>( "name" ));
-                        ASSERT_NOTNULL(prop);
-                        create_menu_item_with_mnemonic(menu_in_menu, reinterpret_cast<const char *>( prop ),
-                                                       ReferenceCaller<CopiedString, void(), HandleHelpCommand>(
-                                                               mHelpURLs.back()));
-                        xmlFree(prop);
-                    }
-                    pNode = pNode->next;
-                }
-            }
-            xmlFreeDoc(pDoc);
-        } else {
-            globalOutputStream() << "'" << filename << "' parse failed\n";
-        }
-    } else {
-        globalOutputStream() << "'" << filename << "' not found\n";
-    }
+void process_xlink( const char* filename, const char *menu_name, const char *base_url, ui::Menu menu ){
+       if ( file_exists( filename ) ) {
+               xmlDocPtr pDoc = xmlParseFile( filename );
+               if ( pDoc ) {
+                       globalOutputStream() << "Processing .xlink file '" << filename << "'\n";
+                       // create sub menu
+                       auto menu_in_menu = create_sub_menu_with_mnemonic( menu, menu_name );
+                       if ( g_Layout_enableDetachableMenus.m_value ) {
+                               menu_tearoff( menu_in_menu );
+                       }
+                       // start walking the nodes, find the 'links' one
+                       xmlNodePtr pNode = pDoc->children;
+                       while ( pNode && strcmp( (const char*)pNode->name, "links" ) )
+                               pNode = pNode->next;
+                       if ( pNode ) {
+                               pNode = pNode->children;
+                               while ( pNode )
+                               {
+                                       if ( !strcmp( (const char*)pNode->name, "item" ) ) {
+                                               // process the URL
+                                               CopiedString url;
+
+                                               xmlChar* prop = xmlGetProp( pNode, reinterpret_cast<const xmlChar*>( "url" ) );
+                                               ASSERT_NOTNULL( prop );
+                                               if ( strstr( reinterpret_cast<const char*>( prop ), "http://" ) ||
+                                                       strstr( reinterpret_cast<const char*>( prop ), "https://" ) ) {
+                                                       // complete URL
+                                                       url = reinterpret_cast<const char*>( prop );
+                                               }
+                                               else
+                                               {
+                                                       // relative URL
+                                                       StringOutputStream full( 256 );
+                                                       full << base_url << reinterpret_cast<const char*>( prop );
+                                                       url = full.c_str();
+                                               }
+
+                                               mHelpURLs.push_back( url );
+
+                                               xmlFree( prop );
+
+                                               prop = xmlGetProp( pNode, reinterpret_cast<const xmlChar*>( "name" ) );
+                                               ASSERT_NOTNULL( prop );
+                                               create_menu_item_with_mnemonic( menu_in_menu, reinterpret_cast<const char*>( prop ), ReferenceCaller<CopiedString, void(), HandleHelpCommand>( mHelpURLs.back() ) );
+                                               xmlFree( prop );
+                                       }
+                                       pNode = pNode->next;
+                               }
+                       }
+                       xmlFreeDoc( pDoc );
+               }
+               else
+               {
+                       globalOutputStream() << "'" << filename << "' parse failed\n";
+               }
+       }
+       else
+       {
+               globalOutputStream() << "'" << filename << "' not found\n";
+       }
 }
 
-void create_game_help_menu(ui::Menu menu)
-{
-    StringOutputStream filename(256);
-    filename << AppPath_get() << "global.xlink";
-    process_xlink(filename.c_str(), "General", AppPath_get(), menu);
+void create_game_help_menu( ui::Menu menu ){
+       StringOutputStream filename( 256 );
+       filename << DataPath_get() << "global.xlink";
+       process_xlink(filename.c_str(), "General", DataPath_get(), menu);
 
 #if 1
-    filename.clear();
-    filename << g_pGameDescription->mGameToolsPath.c_str() << "game.xlink";
-    process_xlink(filename.c_str(), g_pGameDescription->getRequiredKeyValue("name"),
-                  g_pGameDescription->mGameToolsPath.c_str(), menu);
+       filename.clear();
+       filename << g_pGameDescription->mGameToolsPath.c_str() << "game.xlink";
+       process_xlink( filename.c_str(), g_pGameDescription->getRequiredKeyValue( "name" ), g_pGameDescription->mGameToolsPath.c_str(), menu );
 #else
-    for ( std::list<CGameDescription *>::iterator iGame = g_GamesDialog.mGames.begin(); iGame != g_GamesDialog.mGames.end(); ++iGame )
-    {
-        filename.clear();
-        filename << ( *iGame )->mGameToolsPath.c_str() << "game.xlink";
-        process_xlink( filename.c_str(), ( *iGame )->getRequiredKeyValue( "name" ), ( *iGame )->mGameToolsPath.c_str(), menu );
-    }
+       for ( std::list<CGameDescription *>::iterator iGame = g_GamesDialog.mGames.begin(); iGame != g_GamesDialog.mGames.end(); ++iGame )
+       {
+               filename.clear();
+               filename << ( *iGame )->mGameToolsPath.c_str() << "game.xlink";
+               process_xlink( filename.c_str(), ( *iGame )->getRequiredKeyValue( "name" ), ( *iGame )->mGameToolsPath.c_str(), menu );
+       }
 #endif
 }