CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmVisualStudioSlnParser.h
blob0cac1408053fd015331e104fd9c326ed4428d49d
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #pragma once
5 #include "cmConfigure.h" // IWYU pragma: keep
7 #include <bitset>
8 #include <cstddef>
9 #include <iosfwd>
10 #include <string>
12 #include <cm/string_view>
14 class cmSlnData;
16 class cmVisualStudioSlnParser
18 public:
19 enum ParseResult
21 ResultOK = 0,
23 ResultInternalError = -1,
24 ResultExternalError = 1,
26 ResultErrorOpeningInput = ResultExternalError,
27 ResultErrorReadingInput,
28 ResultErrorInputStructure,
29 ResultErrorInputData,
31 ResultErrorBadInternalState = ResultInternalError,
32 ResultErrorUnsupportedDataGroup = ResultInternalError - 1
35 enum DataGroup
37 DataGroupProjectsBit,
38 DataGroupProjectDependenciesBit,
39 DataGroupSolutionConfigurationsBit,
40 DataGroupProjectConfigurationsBit,
41 DataGroupSolutionFiltersBit,
42 DataGroupGenericGlobalSectionsBit,
43 DataGroupCount
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;
68 protected:
69 class State;
71 friend class State;
72 class ParsedLine;
74 struct ResultData
76 ParseResult Result = ResultOK;
77 size_t ResultLine = 0;
78 bool HadBOM;
80 ResultData();
81 void Clear();
82 void SetError(ParseResult error, size_t line);
83 } LastResult;
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,
92 State& state);
94 bool ParseSingleValueTag(const std::string& line, ParsedLine& parsedLine,
95 State& state);
97 bool ParseKeyValuePair(const std::string& line, ParsedLine& parsedLine,
98 State& state);
100 bool ParseTag(cm::string_view fullTag, ParsedLine& parsedLine, State& state);
102 bool ParseValue(const std::string& value, ParsedLine& parsedLine);