Imported Upstream version 2.8.12.2
[platform/upstream/cmake.git] / Source / cmVisualStudioSlnParser.h
1 /*============================================================================
2   CMake - Cross Platform Makefile Generator
3   Copyright 2000-2013 Kitware, Inc., Insight Software Consortium
4
5   Distributed under the OSI-approved BSD License (the "License");
6   see accompanying file Copyright.txt for details.
7
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
14
15 #include "cmStandardIncludes.h"
16
17 #include <bitset>
18
19
20 class cmSlnData;
21
22
23 class cmVisualStudioSlnParser
24 {
25 public:
26   enum ParseResult
27   {
28     ResultOK = 0,
29
30     ResultInternalError = -1,
31     ResultExternalError = 1,
32
33     ResultErrorOpeningInput = ResultExternalError,
34     ResultErrorReadingInput,
35     ResultErrorInputStructure,
36     ResultErrorInputData,
37
38     ResultErrorBadInternalState = ResultInternalError,
39     ResultErrorUnsupportedDataGroup = ResultInternalError - 1
40   };
41
42   enum DataGroup
43   {
44     DataGroupProjectsBit,
45     DataGroupProjectDependenciesBit,
46     DataGroupSolutionConfigurationsBit,
47     DataGroupProjectConfigurationsBit,
48     DataGroupSolutionFiltersBit,
49     DataGroupGenericGlobalSectionsBit,
50     DataGroupCount
51   };
52
53   typedef std::bitset<DataGroupCount> DataGroupSet;
54
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;
62
63   bool Parse(std::istream& input,
64              cmSlnData& output,
65              DataGroupSet dataGroups = DataGroupAll);
66
67   bool ParseFile(const std::string& file,
68                  cmSlnData& output,
69                  DataGroupSet dataGroups = DataGroupAll);
70
71   ParseResult GetParseResult() const;
72
73   size_t GetParseResultLine() const;
74
75   bool GetParseHadBOM() const;
76
77 protected:
78   class State;
79   friend class State;
80   class ParsedLine;
81
82   struct ResultData
83   {
84     ParseResult Result;
85     size_t ResultLine;
86     bool HadBOM;
87
88     ResultData();
89     void Clear();
90     void SetError(ParseResult error, size_t line);
91   } LastResult;
92
93   bool IsDataGroupSetSupported(DataGroupSet dataGroups) const;
94
95   bool ParseImpl(std::istream& input, cmSlnData& output, State& state);
96
97   bool ParseBOM(std::istream& input, std::string& line, State& state);
98
99   bool ParseMultiValueTag(const std::string& line,
100                           ParsedLine& parsedLine,
101                           State& state);
102
103   bool ParseSingleValueTag(const std::string& line,
104                            ParsedLine& parsedLine,
105                            State& state);
106
107   bool ParseKeyValuePair(const std::string& line,
108                          ParsedLine& parsedLine,
109                          State& state);
110
111   bool ParseTag(const std::string& fullTag,
112                 ParsedLine& parsedLine,
113                 State& state);
114
115   bool ParseValue(const std::string& value, ParsedLine& parsedLine);
116 };
117
118 #endif