/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include #include #include #include struct cmPkgConfigValueElement { cmPkgConfigValueElement() = default; cmPkgConfigValueElement(bool isVariable, cm::string_view data); bool IsVariable; cm::string_view Data; }; struct cmPkgConfigEntry { cmPkgConfigEntry() = default; cmPkgConfigEntry(bool isVariable, cm::string_view key); bool IsVariable; cm::string_view Key; std::vector Val; }; class cmPkgConfigParser : llpkgc_t { public: cmPkgConfigParser(); llpkgc_errno_t Parse(char* buf, std::size_t len); llpkgc_errno_t Finish(); llpkgc_errno_t Finish(char* buf, std::size_t len); std::vector& Data() { return Data_; } private: int OnSpanNext(const char*, std::size_t len); static int OnSpanNextTr(llpkgc_t* parser, const char* at, std::size_t len); int OnKey(const char* at, std::size_t len); static int OnKeyTr(llpkgc_t* parser, const char* at, std::size_t len); int OnKeywordComplete(); static int OnKeywordCompleteTr(llpkgc_t* parser); int OnVariableComplete(); static int OnVariableCompleteTr(llpkgc_t* parser); int OnValueLiteral(const char* at, std::size_t len); static int OnValueLiteralTr(llpkgc_t* parser, const char* at, std::size_t len); int OnValueLiteralComplete(); static int OnValueLiteralCompleteTr(llpkgc_t* parser); int OnValueVariable(const char* at, std::size_t len); static int OnValueVariableTr(llpkgc_t* parser, const char* at, std::size_t len); int OnValueVariableComplete(); static int OnValueVariableCompleteTr(llpkgc_t* parser); llpkgc_settings_t Settings_{ OnKeyTr, OnValueLiteralTr, OnValueVariableTr, nullptr, // on_line_begin OnKeywordCompleteTr, OnVariableCompleteTr, OnValueLiteralCompleteTr, OnValueVariableCompleteTr, nullptr, // on_value_complete nullptr, // on_pkgc_complete }; const char* Ptr_; std::size_t Len_; std::vector Data_; };