cmake/Source/cmVisualStudioSlnParser.h

104 lines
2.7 KiB
C
Raw Normal View History

2016-10-30 18:24:19 +01:00
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
2021-09-14 00:13:48 +02:00
#pragma once
2013-11-03 12:27:13 +02:00
2018-01-26 17:06:56 +01:00
#include "cmConfigure.h" // IWYU pragma: keep
2016-10-30 18:24:19 +01:00
2013-11-03 12:27:13 +02:00
#include <bitset>
2022-03-29 21:10:50 +02:00
#include <cstddef>
2017-04-14 19:02:05 +02:00
#include <iosfwd>
#include <string>
2013-11-03 12:27:13 +02:00
2020-08-30 11:54:41 +02:00
#include <cm/string_view>
2013-11-03 12:27:13 +02:00
class cmSlnData;
class cmVisualStudioSlnParser
{
public:
enum ParseResult
{
ResultOK = 0,
ResultInternalError = -1,
ResultExternalError = 1,
ResultErrorOpeningInput = ResultExternalError,
ResultErrorReadingInput,
ResultErrorInputStructure,
ResultErrorInputData,
ResultErrorBadInternalState = ResultInternalError,
ResultErrorUnsupportedDataGroup = ResultInternalError - 1
};
enum DataGroup
{
DataGroupProjectsBit,
DataGroupProjectDependenciesBit,
DataGroupSolutionConfigurationsBit,
DataGroupProjectConfigurationsBit,
DataGroupSolutionFiltersBit,
DataGroupGenericGlobalSectionsBit,
DataGroupCount
};
2020-02-01 23:06:01 +01:00
using DataGroupSet = std::bitset<DataGroupCount>;
2013-11-03 12:27:13 +02:00
static const DataGroupSet DataGroupProjects;
static const DataGroupSet DataGroupProjectDependencies;
static const DataGroupSet DataGroupSolutionConfigurations;
static const DataGroupSet DataGroupProjectConfigurations;
static const DataGroupSet DataGroupSolutionFilters;
static const DataGroupSet DataGroupGenericGlobalSections;
static const DataGroupSet DataGroupAll;
2016-07-09 11:21:54 +02:00
bool Parse(std::istream& input, cmSlnData& output,
2013-11-03 12:27:13 +02:00
DataGroupSet dataGroups = DataGroupAll);
2016-07-09 11:21:54 +02:00
bool ParseFile(const std::string& file, cmSlnData& output,
2013-11-03 12:27:13 +02:00
DataGroupSet dataGroups = DataGroupAll);
ParseResult GetParseResult() const;
size_t GetParseResultLine() const;
bool GetParseHadBOM() const;
protected:
class State;
2017-04-14 19:02:05 +02:00
2013-11-03 12:27:13 +02:00
friend class State;
class ParsedLine;
struct ResultData
{
2023-05-23 16:38:00 +02:00
ParseResult Result = ResultOK;
size_t ResultLine = 0;
2013-11-03 12:27:13 +02:00
bool HadBOM;
ResultData();
void Clear();
void SetError(ParseResult error, size_t line);
} LastResult;
bool IsDataGroupSetSupported(DataGroupSet dataGroups) const;
bool ParseImpl(std::istream& input, cmSlnData& output, State& state);
bool ParseBOM(std::istream& input, std::string& line, State& state);
2016-07-09 11:21:54 +02:00
bool ParseMultiValueTag(const std::string& line, ParsedLine& parsedLine,
2013-11-03 12:27:13 +02:00
State& state);
2016-07-09 11:21:54 +02:00
bool ParseSingleValueTag(const std::string& line, ParsedLine& parsedLine,
2013-11-03 12:27:13 +02:00
State& state);
2016-07-09 11:21:54 +02:00
bool ParseKeyValuePair(const std::string& line, ParsedLine& parsedLine,
2013-11-03 12:27:13 +02:00
State& state);
2020-08-30 11:54:41 +02:00
bool ParseTag(cm::string_view fullTag, ParsedLine& parsedLine, State& state);
2013-11-03 12:27:13 +02:00
bool ParseValue(const std::string& value, ParsedLine& parsedLine);
};