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;
76 ParseResult Result
= ResultOK
;
77 size_t ResultLine
= 0;
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
);