| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #pragma once |
| |
| #include "cmConfigure.h" // IWYU pragma: keep |
| |
| #include <bitset> |
| #include <cstddef> |
| #include <iosfwd> |
| #include <string> |
| |
| #include <cm/string_view> |
| |
| class cmSlnData; |
| |
| class cmVisualStudioSlnParser |
| { |
| public: |
| enum ParseResult |
| { |
| ResultOK = 0, |
| |
| ResultInternalError = -1, |
| ResultExternalError = 1, |
| |
| ResultErrorOpeningInput = ResultExternalError, |
| ResultErrorReadingInput, |
| ResultErrorInputStructure, |
| ResultErrorInputData, |
| |
| ResultErrorBadInternalState = ResultInternalError, |
| ResultErrorUnsupportedDataGroup = ResultInternalError - 1 |
| }; |
| |
| enum DataGroup |
| { |
| DataGroupProjectsBit, |
| DataGroupProjectDependenciesBit, |
| DataGroupSolutionConfigurationsBit, |
| DataGroupProjectConfigurationsBit, |
| DataGroupSolutionFiltersBit, |
| DataGroupGenericGlobalSectionsBit, |
| DataGroupCount |
| }; |
| |
| using DataGroupSet = std::bitset<DataGroupCount>; |
| |
| static const DataGroupSet DataGroupProjects; |
| static const DataGroupSet DataGroupProjectDependencies; |
| static const DataGroupSet DataGroupSolutionConfigurations; |
| static const DataGroupSet DataGroupProjectConfigurations; |
| static const DataGroupSet DataGroupSolutionFilters; |
| static const DataGroupSet DataGroupGenericGlobalSections; |
| static const DataGroupSet DataGroupAll; |
| |
| bool Parse(std::istream& input, cmSlnData& output, |
| DataGroupSet dataGroups = DataGroupAll); |
| |
| bool ParseFile(const std::string& file, cmSlnData& output, |
| DataGroupSet dataGroups = DataGroupAll); |
| |
| ParseResult GetParseResult() const; |
| |
| size_t GetParseResultLine() const; |
| |
| bool GetParseHadBOM() const; |
| |
| protected: |
| class State; |
| |
| friend class State; |
| class ParsedLine; |
| |
| struct ResultData |
| { |
| ParseResult Result = ResultOK; |
| size_t ResultLine = 0; |
| bool HadBOM; |
| |
| ResultData(); |
| void Clear(); |
| void SetError(ParseResult error, size_t line); |
| } LastResult; |
| |
| bool IsDataGroupSetSupported(DataGroupSet dataGroups) const; |
| |
| bool ParseImpl(std::istream& input, cmSlnData& output, State& state); |
| |
| bool ParseBOM(std::istream& input, std::string& line, State& state); |
| |
| bool ParseMultiValueTag(const std::string& line, ParsedLine& parsedLine, |
| State& state); |
| |
| bool ParseSingleValueTag(const std::string& line, ParsedLine& parsedLine, |
| State& state); |
| |
| bool ParseKeyValuePair(const std::string& line, ParsedLine& parsedLine, |
| State& state); |
| |
| bool ParseTag(cm::string_view fullTag, ParsedLine& parsedLine, State& state); |
| |
| bool ParseValue(const std::string& value, ParsedLine& parsedLine); |
| }; |