1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2000-2013 Kitware, Inc., Insight Software Consortium
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
8 This software is distributed WITHOUT ANY WARRANTY; without even the
9 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License for more information.
11 ============================================================================*/
12 #ifndef cmVisualStudioSlnParser_h
13 #define cmVisualStudioSlnParser_h
15 #include "cmStandardIncludes.h"
23 class cmVisualStudioSlnParser
30 ResultInternalError = -1,
31 ResultExternalError = 1,
33 ResultErrorOpeningInput = ResultExternalError,
34 ResultErrorReadingInput,
35 ResultErrorInputStructure,
38 ResultErrorBadInternalState = ResultInternalError,
39 ResultErrorUnsupportedDataGroup = ResultInternalError - 1
45 DataGroupProjectDependenciesBit,
46 DataGroupSolutionConfigurationsBit,
47 DataGroupProjectConfigurationsBit,
48 DataGroupSolutionFiltersBit,
49 DataGroupGenericGlobalSectionsBit,
53 typedef std::bitset<DataGroupCount> DataGroupSet;
55 static const DataGroupSet DataGroupProjects;
56 static const DataGroupSet DataGroupProjectDependencies;
57 static const DataGroupSet DataGroupSolutionConfigurations;
58 static const DataGroupSet DataGroupProjectConfigurations;
59 static const DataGroupSet DataGroupSolutionFilters;
60 static const DataGroupSet DataGroupGenericGlobalSections;
61 static const DataGroupSet DataGroupAll;
63 bool Parse(std::istream& input,
65 DataGroupSet dataGroups = DataGroupAll);
67 bool ParseFile(const std::string& file,
69 DataGroupSet dataGroups = DataGroupAll);
71 ParseResult GetParseResult() const;
73 size_t GetParseResultLine() const;
75 bool GetParseHadBOM() const;
90 void SetError(ParseResult error, size_t line);
93 bool IsDataGroupSetSupported(DataGroupSet dataGroups) const;
95 bool ParseImpl(std::istream& input, cmSlnData& output, State& state);
97 bool ParseBOM(std::istream& input, std::string& line, State& state);
99 bool ParseMultiValueTag(const std::string& line,
100 ParsedLine& parsedLine,
103 bool ParseSingleValueTag(const std::string& line,
104 ParsedLine& parsedLine,
107 bool ParseKeyValuePair(const std::string& line,
108 ParsedLine& parsedLine,
111 bool ParseTag(const std::string& fullTag,
112 ParsedLine& parsedLine,
115 bool ParseValue(const std::string& value, ParsedLine& parsedLine);