1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
5 #include "cmConfigure.h" // IWYU pragma: keep
12 #include <cm/string_view>
16 class cmVisualStudioSlnParser
23 ResultInternalError = -1,
24 ResultExternalError = 1,
26 ResultErrorOpeningInput = ResultExternalError,
27 ResultErrorReadingInput,
28 ResultErrorInputStructure,
31 ResultErrorBadInternalState = ResultInternalError,
32 ResultErrorUnsupportedDataGroup = ResultInternalError - 1
38 DataGroupProjectDependenciesBit,
39 DataGroupSolutionConfigurationsBit,
40 DataGroupProjectConfigurationsBit,
41 DataGroupSolutionFiltersBit,
42 DataGroupGenericGlobalSectionsBit,
46 using DataGroupSet = std::bitset<DataGroupCount>;
48 static const DataGroupSet DataGroupProjects;
49 static const DataGroupSet DataGroupProjectDependencies;
50 static const DataGroupSet DataGroupSolutionConfigurations;
51 static const DataGroupSet DataGroupProjectConfigurations;
52 static const DataGroupSet DataGroupSolutionFilters;
53 static const DataGroupSet DataGroupGenericGlobalSections;
54 static const DataGroupSet DataGroupAll;
56 bool Parse(std::istream& input, cmSlnData& output,
57 DataGroupSet dataGroups = DataGroupAll);
59 bool ParseFile(const std::string& file, cmSlnData& output,
60 DataGroupSet dataGroups = DataGroupAll);
62 ParseResult GetParseResult() const;
64 size_t GetParseResultLine() const;
66 bool GetParseHadBOM() const;
82 void SetError(ParseResult error, size_t line);
85 bool IsDataGroupSetSupported(DataGroupSet dataGroups) const;
87 bool ParseImpl(std::istream& input, cmSlnData& output, State& state);
89 bool ParseBOM(std::istream& input, std::string& line, State& state);
91 bool ParseMultiValueTag(const std::string& line, ParsedLine& parsedLine,
94 bool ParseSingleValueTag(const std::string& line, ParsedLine& parsedLine,
97 bool ParseKeyValuePair(const std::string& line, ParsedLine& parsedLine,
100 bool ParseTag(cm::string_view fullTag, ParsedLine& parsedLine, State& state);
102 bool ParseValue(const std::string& value, ParsedLine& parsedLine);