/src/CMake/Source/cmPkgConfigParser.h
Line | Count | Source |
1 | | /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
2 | | file LICENSE.rst or https://cmake.org/licensing for details. */ |
3 | | |
4 | | #pragma once |
5 | | |
6 | | #include "cmConfigure.h" // IWYU pragma: keep |
7 | | |
8 | | #include <cstddef> |
9 | | #include <vector> |
10 | | |
11 | | #include <cm/string_view> |
12 | | |
13 | | #include <cmllpkgc/llpkgc.h> |
14 | | |
15 | | struct cmPkgConfigValueElement |
16 | | { |
17 | | |
18 | | cmPkgConfigValueElement() = default; |
19 | | |
20 | | cmPkgConfigValueElement(bool isVariable, cm::string_view data); |
21 | | |
22 | | bool IsVariable; |
23 | | cm::string_view Data; |
24 | | }; |
25 | | |
26 | | struct cmPkgConfigEntry |
27 | | { |
28 | | |
29 | | cmPkgConfigEntry() = default; |
30 | | |
31 | | cmPkgConfigEntry(bool isVariable, cm::string_view key); |
32 | | |
33 | | bool IsVariable; |
34 | | cm::string_view Key; |
35 | | std::vector<cmPkgConfigValueElement> Val; |
36 | | }; |
37 | | |
38 | | class cmPkgConfigParser : llpkgc_t |
39 | | { |
40 | | public: |
41 | | cmPkgConfigParser(); |
42 | | |
43 | | llpkgc_errno_t Parse(char* buf, std::size_t len); |
44 | | |
45 | | llpkgc_errno_t Finish(); |
46 | | llpkgc_errno_t Finish(char* buf, std::size_t len); |
47 | | |
48 | 483 | std::vector<cmPkgConfigEntry>& Data() { return Data_; } |
49 | | |
50 | | private: |
51 | | int OnSpanNext(char const*, std::size_t len); |
52 | | static int OnSpanNextTr(llpkgc_t* parser, char const* at, std::size_t len); |
53 | | |
54 | | int OnKey(char const* at, std::size_t len); |
55 | | static int OnKeyTr(llpkgc_t* parser, char const* at, std::size_t len); |
56 | | |
57 | | int OnKeywordComplete(); |
58 | | static int OnKeywordCompleteTr(llpkgc_t* parser); |
59 | | |
60 | | int OnVariableComplete(); |
61 | | static int OnVariableCompleteTr(llpkgc_t* parser); |
62 | | |
63 | | int OnValueLiteral(char const* at, std::size_t len); |
64 | | static int OnValueLiteralTr(llpkgc_t* parser, char const* at, |
65 | | std::size_t len); |
66 | | |
67 | | int OnValueLiteralComplete(); |
68 | | static int OnValueLiteralCompleteTr(llpkgc_t* parser); |
69 | | |
70 | | int OnValueVariable(char const* at, std::size_t len); |
71 | | static int OnValueVariableTr(llpkgc_t* parser, char const* at, |
72 | | std::size_t len); |
73 | | |
74 | | int OnValueVariableComplete(); |
75 | | static int OnValueVariableCompleteTr(llpkgc_t* parser); |
76 | | |
77 | | llpkgc_settings_t Settings_{ |
78 | | OnKeyTr, |
79 | | OnValueLiteralTr, |
80 | | OnValueVariableTr, |
81 | | nullptr, // on_line_begin |
82 | | OnKeywordCompleteTr, |
83 | | OnVariableCompleteTr, |
84 | | OnValueLiteralCompleteTr, |
85 | | OnValueVariableCompleteTr, |
86 | | nullptr, // on_value_complete |
87 | | nullptr, // on_pkgc_complete |
88 | | }; |
89 | | |
90 | | char const* Ptr_; |
91 | | std::size_t Len_; |
92 | | std::vector<cmPkgConfigEntry> Data_; |
93 | | }; |