MiKTeX 23.10-next
A scalable TeX distribution
Loading...
Searching...
No Matches
Cfg.h
1/* miktex/Core/Cfg.h: -*- C++ -*-
2
3 Copyright (C) 1996-2021 Christian Schenk
4
5 This file is part of the MiKTeX Core Library.
6
7 The MiKTeX Core Library is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2, or
10 (at your option) any later version.
11
12 The MiKTeX Core Library is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
14 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with the MiKTeX Core Library; if not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
21
22#pragma once
23
24#if !defined(BD129D5E0E8B45CEAAF056C54F9E6806)
25#define BD129D5E0E8B45CEAAF056C54F9E6806
26
27#include <miktex/Core/config.h>
28
29#include <cstdio>
30
31#include <istream>
32#include <memory>
33#include <string>
34#include <vector>
35
36#include <miktex/Util/OptionSet>
37#include <miktex/Util/PathName>
38
39#include "MD5.h"
40
41MIKTEX_CORE_BEGIN_NAMESPACE;
42
44class MIKTEXNOVTABLE IPrivateKeyProvider
45{
48public:
49 virtual MiKTeX::Util::PathName MIKTEXTHISCALL GetPrivateKeyFile() = 0;
50
54public:
55 virtual bool MIKTEXTHISCALL GetPassphrase(std::string& passphrase) = 0;
56};
57
59class MIKTEXNOVTABLE Cfg
60{
62public:
63 class MIKTEXNOVTABLE Value
64 {
65 public:
66 virtual MIKTEXTHISCALL ~Value() noexcept = 0;
67 public:
68 virtual std::string MIKTEXTHISCALL GetName() const = 0;
69 public:
70 virtual std::string MIKTEXTHISCALL AsString() const = 0;
71 public:
72 virtual std::vector<std::string> AsStringVector() const = 0;
73 public:
74 virtual std::vector<std::string>::const_iterator MIKTEXTHISCALL begin() const = 0;
75 public:
76 virtual std::vector<std::string>::const_iterator MIKTEXTHISCALL end() const = 0;
77 public:
78 virtual std::string MIKTEXTHISCALL GetDocumentation() const = 0;
79 public:
80 virtual bool IsCommentedOut() const = 0;
81 };
82
84public:
86 {
87 public:
88 MIKTEXCOREEXPORT MIKTEXTHISCALL ValueIterator();
89 public:
90 ValueIterator(const ValueIterator& other) = delete;
91 public:
92 ValueIterator& operator=(const ValueIterator& other) = delete;
93 public:
94 MIKTEXCOREEXPORT MIKTEXTHISCALL ValueIterator(ValueIterator&& other);
95 public:
96 MIKTEXCORETHISAPI(ValueIterator&) operator=(ValueIterator&& other);
97 public:
98 virtual MIKTEXCOREEXPORT MIKTEXTHISCALL ~ValueIterator();
99 public:
100 MIKTEXCORETHISAPI(std::shared_ptr<Value>) operator*() const;
101 public:
102 MIKTEXCORETHISAPI(ValueIterator&) operator++();
103 public:
104 MIKTEXCORETHISAPI(bool) operator==(const ValueIterator& other);
105 public:
106 MIKTEXCORETHISAPI(bool) operator!=(const ValueIterator& other);
107 private:
108 class impl;
109 std::unique_ptr<impl> pimpl;
110 public:
111 impl& GetImpl()
112 {
113 return *pimpl;
114 }
115 };
116
118public:
119 class MIKTEXNOVTABLE Key
120 {
121 public:
122 virtual MIKTEXTHISCALL ~Key() noexcept = 0;
123 public:
124 virtual std::string MIKTEXTHISCALL GetName() const = 0;
125 public:
126 virtual std::shared_ptr<Value> MIKTEXTHISCALL GetValue(const std::string& valueName) const = 0;
127 public:
128 virtual ValueIterator MIKTEXTHISCALL begin() = 0;
129 public:
130 virtual ValueIterator MIKTEXTHISCALL end() = 0;
131 };
132
134public:
136 {
137 public:
138 MIKTEXCOREEXPORT MIKTEXTHISCALL KeyIterator();
139 public:
140 KeyIterator(const KeyIterator& other) = delete;
141 public:
142 KeyIterator& operator=(const KeyIterator& other) = delete;
143 public:
144 MIKTEXCOREEXPORT MIKTEXTHISCALL KeyIterator(KeyIterator&& other);
145 public:
146 MIKTEXCORETHISAPI(KeyIterator&) operator=(KeyIterator&& other);
147 public:
148 virtual MIKTEXCOREEXPORT MIKTEXTHISCALL ~KeyIterator();
149 public:
150 MIKTEXCORETHISAPI(std::shared_ptr<Key>) operator*() const;
151 public:
152 MIKTEXCORETHISAPI(KeyIterator&) operator++();
153 public:
154 MIKTEXCORETHISAPI(bool) operator==(const KeyIterator& other);
155 public:
156 MIKTEXCORETHISAPI(bool) operator!=(const KeyIterator& other);
157 private:
158 class impl;
159 std::unique_ptr<impl> pimpl;
160 public:
161 impl& GetImpl()
162 {
163 return *pimpl;
164 }
165 };
166
167public:
170 static MIKTEXCORECEEAPI(std::unique_ptr<Cfg>) Create();
171
172public:
173 virtual MIKTEXTHISCALL ~Cfg() noexcept = 0;
174
176public:
177 enum class Option
178 {
179 NoOverwriteKeys,
180 NoOverwriteValues
181 };
182
183public:
184 typedef MiKTeX::Util::OptionSet<Option> Options;
185
189public:
190 virtual Options MIKTEXTHISCALL GetOptions() const = 0;
191
195public:
196 virtual void MIKTEXTHISCALL SetOptions(Options options) = 0;
197
199public:
200 virtual bool MIKTEXTHISCALL Empty() const = 0;
201
204public:
205 virtual MD5 MIKTEXTHISCALL GetDigest() const = 0;
206
212public:
213 virtual std::shared_ptr<Value> MIKTEXTHISCALL GetValue(const std::string& keyName, const std::string& valueName) const = 0;
214
221public:
222 virtual bool MIKTEXTHISCALL TryGetValueAsString(const std::string& keyName, const std::string& valueName, std::string& value) const = 0;
223
230public:
231 virtual bool MIKTEXTHISCALL TryGetValueAsStringVector(const std::string& keyName, const std::string& valueName, std::vector<std::string>& value) const = 0;
232
235public:
236 virtual void MIKTEXTHISCALL SetModified(bool b) = 0;
237
239public:
240 virtual bool MIKTEXTHISCALL IsModified() const = 0;
241
248public:
249 virtual void MIKTEXTHISCALL PutValue(const std::string& keyName, const std::string& valueName, const std::string& value) = 0;
250
259public:
260 virtual void MIKTEXTHISCALL PutValue(const std::string& keyName, const std::string& valueName, const std::string& value, const std::string& documentation, bool commentedOut) = 0;
261
264public:
265 virtual void MIKTEXTHISCALL Read(const MiKTeX::Util::PathName& path) = 0;
266
269public:
270 virtual void MIKTEXTHISCALL Read(std::istream& reader) = 0;
271
275public:
276 virtual void MIKTEXTHISCALL Read(const MiKTeX::Util::PathName& path, bool mustBeSigned) = 0;
277
281public:
282 virtual void MIKTEXTHISCALL Read(std::istream& reader, bool mustBeSigned) = 0;
283
287public:
288 virtual void MIKTEXTHISCALL Read(const MiKTeX::Util::PathName& path, const MiKTeX::Util::PathName& publicKeyFile) = 0;
289
293public:
294 virtual void MIKTEXTHISCALL Read(std::istream& reader, const MiKTeX::Util::PathName& publicKeyFile) = 0;
295
298public:
299 virtual void MIKTEXTHISCALL Write(const MiKTeX::Util::PathName& path) = 0;
300
304public:
305 virtual void MIKTEXTHISCALL Write(const MiKTeX::Util::PathName& path, const std::string& header) = 0;
306
311public:
312 virtual void MIKTEXTHISCALL Write(const MiKTeX::Util::PathName& path, const std::string& header, IPrivateKeyProvider* privateKeyProvider) = 0;
313
317public:
318 virtual std::shared_ptr<Key> GetKey(const std::string& keyName) const = 0;
319
322public:
323 virtual void MIKTEXTHISCALL DeleteKey(const std::string& keyName) = 0;
324
328public:
329 virtual void MIKTEXTHISCALL DeleteValue(const std::string& keyName, const std::string& valueName) = 0;
330
334public:
335 virtual bool MIKTEXTHISCALL ClearValue(const std::string& keyName, const std::string& valueName) = 0;
336
339public:
340 virtual bool MIKTEXTHISCALL IsSigned() const = 0;
341
343public:
344 virtual KeyIterator MIKTEXTHISCALL begin() = 0;
345
347public:
348 virtual KeyIterator MIKTEXTHISCALL end() = 0;
349
352public:
353 virtual std::size_t GetSize() const = 0;
354};
355
356MIKTEX_CORE_END_NAMESPACE;
357
358#endif
An instance of this class provides the interface to an INI section.
Definition: Cfg.h:120
Implements an interator for INI sections.
Definition: Cfg.h:136
An instance of this class provides the interface to an INI value.
Definition: Cfg.h:64
Implements an interator for INI values.
Definition: Cfg.h:86
INI container.
Definition: Cfg.h:60
virtual bool ClearValue(const std::string &keyName, const std::string &valueName)=0
virtual void Read(std::istream &reader)=0
virtual void Write(const MiKTeX::Util::PathName &path)=0
virtual MD5 GetDigest() const =0
virtual void SetOptions(Options options)=0
Option
INI options.
Definition: Cfg.h:178
virtual bool TryGetValueAsString(const std::string &keyName, const std::string &valueName, std::string &value) const =0
virtual void Read(std::istream &reader, bool mustBeSigned)=0
virtual void Write(const MiKTeX::Util::PathName &path, const std::string &header, IPrivateKeyProvider *privateKeyProvider)=0
virtual Options GetOptions() const =0
virtual void DeleteValue(const std::string &keyName, const std::string &valueName)=0
virtual void Write(const MiKTeX::Util::PathName &path, const std::string &header)=0
virtual void Read(std::istream &reader, const MiKTeX::Util::PathName &publicKeyFile)=0
virtual KeyIterator end()=0
Gets an iterator referring to the past-the-end section.
virtual void PutValue(const std::string &keyName, const std::string &valueName, const std::string &value, const std::string &documentation, bool commentedOut)=0
virtual void Read(const MiKTeX::Util::PathName &path)=0
virtual bool IsModified() const =0
Tests whether this INI container has been modified.
virtual bool TryGetValueAsStringVector(const std::string &keyName, const std::string &valueName, std::vector< std::string > &value) const =0
virtual std::shared_ptr< Value > GetValue(const std::string &keyName, const std::string &valueName) const =0
virtual std::shared_ptr< Key > GetKey(const std::string &keyName) const =0
virtual void Read(const MiKTeX::Util::PathName &path, bool mustBeSigned)=0
virtual bool IsSigned() const =0
virtual KeyIterator begin()=0
Gets an iterator to the first container section.
virtual void SetModified(bool b)=0
virtual std::size_t GetSize() const =0
static std::unique_ptr< Cfg > Create()
virtual void DeleteKey(const std::string &keyName)=0
virtual void Read(const MiKTeX::Util::PathName &path, const MiKTeX::Util::PathName &publicKeyFile)=0
virtual void PutValue(const std::string &keyName, const std::string &valueName, const std::string &value)=0
virtual bool Empty() const =0
Tests whether this INI container is empty.
Access a private key file.
Definition: Cfg.h:45
virtual MiKTeX::Util::PathName GetPrivateKeyFile()=0
virtual bool GetPassphrase(std::string &passphrase)=0
Instances of this struct represent MD5 values.
Definition: MD5.h:46
Definition: OptionSet.h:37
Instances of this class can be used to store path names.
Definition: PathName.h:73
bool operator==(const VersionNumber &v1, const VersionNumber &v2)
Definition: VersionNumber.h:177