// -*- coding: utf-8 -*- // // AddonMetadataParser.hxx --- Parser for FlightGear add-on metadata files // Copyright (C) 2018 Florent Rougon // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. #ifndef FG_ADDON_METADATA_PARSER_HXX #define FG_ADDON_METADATA_PARSER_HXX #include #include #include #include #include "addon_fwd.hxx" #include "Addon.hxx" #include "AddonVersion.hxx" #include "contacts.hxx" class SGPropertyNode; namespace flightgear { namespace addons { class Addon::Metadata { public: // Comments about these fields can be found in Addon.hxx std::string id; std::string name; AddonVersion version; std::vector authors; std::vector maintainers; std::string shortDescription; std::string longDescription; std::string licenseDesignation; SGPath licenseFile; std::string licenseUrl; std::vector tags; std::string minFGVersionRequired; std::string maxFGVersionRequired; std::string homePage; std::string downloadUrl; std::string supportUrl; std::string codeRepositoryUrl; }; class Addon::MetadataParser { public: // “Compute” a path to the metadata file from the add-on base path static SGPath getMetadataFile(const SGPath& addonPath); // Parse the add-on metadata file inside 'addonPath' (as defined by // getMetadataFile()) and return the corresponding Addon::Metadata instance. static Addon::Metadata parseMetadataFile(const SGPath& addonPath); private: static std::tuple parseLicenseNode(const SGPath& addonPath, SGPropertyNode* addonNode); // Parse an addon-metadata.xml node such as or . // Return the corresponding vector or vector. If // the 'mainNode' argument is nullptr, return an empty vector. template static std::vector::strong_ref> parseContactsNode(const SGPath& metadataFile, SGPropertyNode* mainNode); }; } // of namespace addons } // of namespace flightgear #endif // of FG_ADDON_METADATA_PARSER_HXX