v3.4.0
This commit is contained in:
parent
cc1962eac7
commit
30172438ce
@ -10,9 +10,6 @@ trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
max_line_length = 120
|
||||
|
||||
[*.{md,markdown}]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{gitattributes,yaml,yml,vcxproj,vcxproj.filters,sln,rc,clang-format,toml,py,cmake}]
|
||||
indent_style = space
|
||||
|
||||
|
@ -21,7 +21,7 @@ template:
|
||||
|
||||
-->
|
||||
|
||||
## Unreleased
|
||||
## v3.4.0
|
||||
|
||||
#### Fixes
|
||||
|
||||
@ -37,7 +37,7 @@ template:
|
||||
|
||||
#### Additions
|
||||
|
||||
- improved support for using enums with `value_or()`
|
||||
- added support for using enums with `value_or()`
|
||||
|
||||
#### Changes:
|
||||
|
||||
|
@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.14)
|
||||
|
||||
project(
|
||||
tomlplusplus
|
||||
VERSION 3.3.0
|
||||
VERSION 3.4.0
|
||||
DESCRIPTION "Header-only TOML config file parser and serializer for C++17"
|
||||
HOMEPAGE_URL "https://marzer.github.io/tomlplusplus/"
|
||||
LANGUAGES CXX
|
||||
|
@ -68,7 +68,7 @@ cd build-debug && ninja && ninja test \
|
||||
|
||||
## Testing with the [toml-test] suite
|
||||
|
||||
As an optional extra you may wish to test against the 'official' test TOML test suite, [BurntSushi/toml-test]. See the
|
||||
As an optional extra you may wish to test against the official test TOML test suite, [toml-test]. See the
|
||||
instructions at [toml-test/README](./toml-test/README.md). Note that the toml++ tests already consume tests from the
|
||||
offical suite via a C++ code-generation script so you are not expected to take this extra step as part of contributing
|
||||
to the library.
|
||||
@ -77,5 +77,4 @@ to the library.
|
||||
[test adapter for catch2]: https://marketplace.visualstudio.com/items?itemName=JohnnyHendriks.ext01
|
||||
[reporting issues]: https://github.com/marzer/tomlplusplus/issues
|
||||
[catch2]: https://github.com/catchorg/Catch2
|
||||
[toml-test]: https://github.com/BurntSushi/toml-test
|
||||
[burntsushi/toml-test]: https://github.com/BurntSushi/toml-test
|
||||
[toml-test]: https://github.com/toml-lang/toml-test
|
||||
|
@ -113,7 +113,7 @@ You'll find some more code examples in the `examples` directory, and plenty more
|
||||
|
||||
### Conan
|
||||
|
||||
Add `tomlplusplus/3.3.0` to your conanfile.
|
||||
Add `tomlplusplus/3.4.0` to your conanfile.
|
||||
|
||||
### DDS
|
||||
|
||||
@ -121,7 +121,7 @@ Add `tomlpp` to your `package.json5`, e.g.:
|
||||
|
||||
```plaintext
|
||||
depends: [
|
||||
'tomlpp^3.3.0',
|
||||
'tomlpp^3.4.0',
|
||||
]
|
||||
```
|
||||
|
||||
@ -166,7 +166,7 @@ include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
tomlplusplus
|
||||
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
|
||||
GIT_TAG v3.3.0
|
||||
GIT_TAG v3.4.0
|
||||
)
|
||||
FetchContent_MakeAvailable(tomlplusplus)
|
||||
```
|
||||
|
@ -38,26 +38,28 @@ Call toml::parse_file() and work with the toml::table you get back, or handle an
|
||||
#include <iostream>
|
||||
#include <toml++/toml.hpp>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
int main(int argc, char\*\* argv)
|
||||
{
|
||||
toml::table tbl;
|
||||
try
|
||||
{
|
||||
tbl = toml::parse_file(argv[1]);
|
||||
std::cout << tbl << "\n";
|
||||
}
|
||||
catch (const toml::parse_error& err)
|
||||
{
|
||||
std::cerr << "Parsing failed:\n" << err << "\n";
|
||||
return 1;
|
||||
}
|
||||
toml::table tbl;
|
||||
try
|
||||
{
|
||||
tbl = toml::parse_file(argv[1]);
|
||||
std::cout << tbl << "\n";
|
||||
}
|
||||
catch (const toml::parse_error& err)
|
||||
{
|
||||
std::cerr << "Parsing failed:\n" << err << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
@endcpp
|
||||
|
||||
@see
|
||||
|
||||
- toml::parse_file()
|
||||
- toml::table
|
||||
- toml::parse_error
|
||||
@ -78,35 +80,37 @@ using namespace std::string_view_literals;
|
||||
|
||||
int main()
|
||||
{
|
||||
static constexpr std::string_view some_toml = R"(
|
||||
[library]
|
||||
name = "toml++"
|
||||
authors = ["Mark Gillard <mark.gillard@outlook.com.au>"]
|
||||
cpp = 17
|
||||
)"sv;
|
||||
static constexpr std::string_view some_toml = R"(
|
||||
[library]
|
||||
name = "toml++"
|
||||
authors = ["Mark Gillard <mark.gillard@outlook.com.au>"]
|
||||
cpp = 17
|
||||
)"sv;
|
||||
|
||||
try
|
||||
{
|
||||
// parse directly from a string view:
|
||||
{
|
||||
toml::table tbl = toml::parse(some_toml);
|
||||
std::cout << tbl << "\n";
|
||||
}
|
||||
|
||||
// parse from a string stream:
|
||||
{
|
||||
std::stringstream ss{ std::string{ some_toml } };
|
||||
toml::table tbl = toml::parse(ss);
|
||||
std::cout << tbl << "\n";
|
||||
}
|
||||
}
|
||||
catch (const toml::parse_error& err)
|
||||
{
|
||||
std::cerr << "Parsing failed:\n" << err << "\n";
|
||||
return 1;
|
||||
}
|
||||
// parse directly from a string view:
|
||||
{
|
||||
toml::table tbl = toml::parse(some_toml);
|
||||
std::cout << tbl << "\n";
|
||||
}
|
||||
|
||||
// parse from a string stream:
|
||||
{
|
||||
std::stringstream ss{ std::string{ some_toml } };
|
||||
toml::table tbl = toml::parse(ss);
|
||||
std::cout << tbl << "\n";
|
||||
}
|
||||
}
|
||||
catch (const toml::parse_error& err)
|
||||
{
|
||||
std::cerr << "Parsing failed:\n" << err << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
@endcpp
|
||||
|
||||
@ -123,6 +127,7 @@ name = 'toml++'
|
||||
@endout
|
||||
|
||||
@see
|
||||
|
||||
- toml::parse_file()
|
||||
- toml::table
|
||||
- toml::parse_error
|
||||
@ -143,15 +148,16 @@ the parsing functions return a toml::parse_result instead of a toml::table:
|
||||
|
||||
int main()
|
||||
{
|
||||
toml::parse_result result = toml::parse_file("configuration.toml");
|
||||
if (!result)
|
||||
{
|
||||
std::cerr << "Parsing failed:\n" << result.error() << "\n";
|
||||
return 1;
|
||||
}
|
||||
toml::parse_result result = toml::parse_file("configuration.toml");
|
||||
if (!result)
|
||||
{
|
||||
std::cerr << "Parsing failed:\n" << result.error() << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
do_stuff_with_your_config(std::move(result).table()); // 'steal' the table from the result
|
||||
return 0;
|
||||
|
||||
}
|
||||
@endcpp
|
||||
|
||||
@ -162,7 +168,7 @@ int main()
|
||||
The examples above use an overloaded `operator<<` with ostreams to print basic error messages, and look like this:
|
||||
@out
|
||||
Error while parsing key: expected bare key starting character or string delimiter, saw '?'
|
||||
(error occurred at line 2, column 5)
|
||||
(error occurred at line 2, column 5)
|
||||
@endout
|
||||
|
||||
The library doesn't natively support error colouring in TTY environments, but instead provides the requisite information
|
||||
@ -173,19 +179,20 @@ and description() members:
|
||||
toml::table tbl;
|
||||
try
|
||||
{
|
||||
tbl = toml::parse_file("configuration.toml");
|
||||
tbl = toml::parse_file("configuration.toml");
|
||||
}
|
||||
catch (const toml::parse_error& err)
|
||||
{
|
||||
std::cerr
|
||||
<< "Error parsing file '" << *err.source().path
|
||||
<< "':\n" << err.description()
|
||||
<< "\n (" << err.source().begin << ")\n";
|
||||
return 1;
|
||||
std::cerr
|
||||
<< "Error parsing file '" << \*err.source().path
|
||||
<< "':\n" << err.description()
|
||||
<< "\n (" << err.source().begin << ")\n";
|
||||
return 1;
|
||||
}
|
||||
@endcpp
|
||||
|
||||
@see
|
||||
|
||||
- toml::parse_error
|
||||
- toml::source_region
|
||||
- toml::source_position
|
||||
@ -207,17 +214,17 @@ using namespace std::string_view_literals;
|
||||
|
||||
int main()
|
||||
{
|
||||
static constexpr auto source = R"(
|
||||
str = "hello world"
|
||||
static constexpr auto source = R"(
|
||||
str = "hello world"
|
||||
|
||||
numbers = [ 1, 2, 3, "four", 5.0 ]
|
||||
vegetables = [ "tomato", "onion", "mushroom", "lettuce" ]
|
||||
minerals = [ "quartz", "iron", "copper", "diamond" ]
|
||||
numbers = [ 1, 2, 3, "four", 5.0 ]
|
||||
vegetables = [ "tomato", "onion", "mushroom", "lettuce" ]
|
||||
minerals = [ "quartz", "iron", "copper", "diamond" ]
|
||||
|
||||
[animals]
|
||||
cats = [ "tiger", "lion", "puma" ]
|
||||
birds = [ "macaw", "pigeon", "canary" ]
|
||||
fish = [ "salmon", "trout", "carp" ]
|
||||
[animals]
|
||||
cats = [ "tiger", "lion", "puma" ]
|
||||
birds = [ "macaw", "pigeon", "canary" ]
|
||||
fish = [ "salmon", "trout", "carp" ]
|
||||
|
||||
)"sv;
|
||||
toml::table tbl = toml::parse(source);
|
||||
@ -251,11 +258,11 @@ int main()
|
||||
el = "five"sv;
|
||||
});
|
||||
|
||||
// arrays are very similar to std::vector
|
||||
arr->push_back(7);
|
||||
arr->emplace_back<toml::array>(8, 9);
|
||||
std::cout << "numbers: " << numbers << "\n";
|
||||
}
|
||||
// arrays are very similar to std::vector
|
||||
arr->push_back(7);
|
||||
arr->emplace_back<toml::array>(8, 9);
|
||||
std::cout << "numbers: " << numbers << "\n";
|
||||
}
|
||||
|
||||
// node-views can be chained to quickly query deeper
|
||||
std::cout << "cats: " << tbl["animals"]["cats"] << "\n";
|
||||
@ -269,6 +276,7 @@ int main()
|
||||
std::cout << "dinosaurs: " << tbl["animals"]["dinosaurs"] << "\n"; //no dinosaurs :(
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
@endcpp
|
||||
|
||||
@ -287,6 +295,7 @@ dinosaurs:
|
||||
@endout
|
||||
|
||||
@see
|
||||
|
||||
- toml::node
|
||||
- toml::node_view
|
||||
- toml::value
|
||||
@ -309,18 +318,18 @@ but via a toml::json_formatter and toml::yaml_formatter.
|
||||
|
||||
int main()
|
||||
{
|
||||
auto tbl = toml::table{
|
||||
{ "lib", "toml++" },
|
||||
{ "cpp", toml::array{ 17, 20, "and beyond" } },
|
||||
{ "toml", toml::array{ "1.0.0", "and beyond" } },
|
||||
{ "repo", "https://github.com/marzer/tomlplusplus/" },
|
||||
{ "author", toml::table{
|
||||
{ "name", "Mark Gillard" },
|
||||
{ "github", "https://github.com/marzer" },
|
||||
{ "twitter", "https://twitter.com/marzer8789" }
|
||||
}
|
||||
},
|
||||
};
|
||||
auto tbl = toml::table{
|
||||
{ "lib", "toml++" },
|
||||
{ "cpp", toml::array{ 17, 20, "and beyond" } },
|
||||
{ "toml", toml::array{ "1.0.0", "and beyond" } },
|
||||
{ "repo", "https://github.com/marzer/tomlplusplus/" },
|
||||
{ "author", toml::table{
|
||||
{ "name", "Mark Gillard" },
|
||||
{ "github", "https://github.com/marzer" },
|
||||
{ "twitter", "https://twitter.com/marzer8789" }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
// serializing as TOML
|
||||
std::cout << "###### TOML ######" << "\n\n";
|
||||
@ -335,11 +344,13 @@ int main()
|
||||
std::cout << toml::yaml_formatter{ tbl } << "\n\n";
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
@endcpp
|
||||
|
||||
@out
|
||||
###### TOML ######
|
||||
|
||||
###### TOML
|
||||
|
||||
cpp = [ 17, 20, 'and beyond' ]
|
||||
lib = 'toml++'
|
||||
@ -351,45 +362,47 @@ github = 'https://github.com/marzer'
|
||||
name = 'Mark Gillard'
|
||||
twitter = 'https://twitter.com/marzer8789'
|
||||
|
||||
###### JSON ######
|
||||
###### JSON
|
||||
|
||||
{
|
||||
"author" : {
|
||||
"github" : "https://github.com/marzer",
|
||||
"name" : "Mark Gillard",
|
||||
"twitter" : "https://twitter.com/marzer8789"
|
||||
},
|
||||
"cpp" : [
|
||||
17,
|
||||
20,
|
||||
"and beyond"
|
||||
],
|
||||
"lib" : "toml++",
|
||||
"repo" : "https://github.com/marzer/tomlplusplus/",
|
||||
"toml" : [
|
||||
"1.0.0",
|
||||
"and beyond"
|
||||
]
|
||||
"author" : {
|
||||
"github" : "https://github.com/marzer",
|
||||
"name" : "Mark Gillard",
|
||||
"twitter" : "https://twitter.com/marzer8789"
|
||||
},
|
||||
"cpp" : [
|
||||
17,
|
||||
20,
|
||||
"and beyond"
|
||||
],
|
||||
"lib" : "toml++",
|
||||
"repo" : "https://github.com/marzer/tomlplusplus/",
|
||||
"toml" : [
|
||||
"1.0.0",
|
||||
"and beyond"
|
||||
]
|
||||
}
|
||||
|
||||
###### YAML ######
|
||||
###### YAML
|
||||
|
||||
author:
|
||||
github: 'https://github.com/marzer'
|
||||
name: 'Mark Gillard'
|
||||
twitter: 'https://twitter.com/marzer8789'
|
||||
github: 'https://github.com/marzer'
|
||||
name: 'Mark Gillard'
|
||||
twitter: 'https://twitter.com/marzer8789'
|
||||
cpp:
|
||||
- 17
|
||||
- 20
|
||||
- 'and beyond'
|
||||
lib: 'toml++'
|
||||
repo: 'https://github.com/marzer/tomlplusplus/'
|
||||
toml:
|
||||
- '1.0.0'
|
||||
- 'and beyond'
|
||||
@endout
|
||||
|
||||
- 17
|
||||
- 20
|
||||
- 'and beyond'
|
||||
lib: 'toml++'
|
||||
repo: 'https://github.com/marzer/tomlplusplus/'
|
||||
toml:
|
||||
- '1.0.0'
|
||||
- 'and beyond'
|
||||
@endout
|
||||
|
||||
@see
|
||||
|
||||
- toml::toml_formatter
|
||||
- toml::json_formatter
|
||||
- toml::yaml_formatter
|
||||
@ -420,7 +433,7 @@ do it manually before including toml++ in some global header that's used everywh
|
||||
// some_code_file.cpp
|
||||
|
||||
#define TOML_IMPLEMENTATION
|
||||
#include "global_header_that_includes_toml++.h"
|
||||
#include "global_header_that_includes_toml++.hpp"
|
||||
@endcpp
|
||||
|
||||
<strong>Bonus Step: Disable any library features you don't need</strong>
|
||||
@ -454,12 +467,11 @@ and [emoji sundae] Regular. The API is the same for both.
|
||||
2. Add `tomlplusplus/include` to your include paths
|
||||
3. `#include <toml++/toml.hpp>`
|
||||
|
||||
|
||||
<!-- --------------------------------------------------------------------------------------------------------------- -->
|
||||
|
||||
@subsection mainpage-adding-lib-conan Conan
|
||||
|
||||
Add `tomlplusplus/3.3.0` to your conanfile.
|
||||
Add `tomlplusplus/3.4.0` to your conanfile.
|
||||
|
||||
<!-- --------------------------------------------------------------------------------------------------------------- -->
|
||||
|
||||
@ -467,7 +479,7 @@ Add `tomlplusplus/3.3.0` to your conanfile.
|
||||
Add `tomlpp` to your `package.json5`, e.g.:
|
||||
@json
|
||||
depends: [
|
||||
'tomlpp^3.3.0',
|
||||
'tomlpp^3.4.0',
|
||||
]
|
||||
@endjson
|
||||
|
||||
@ -498,7 +510,7 @@ You can also add it as a subproject directly.
|
||||
|
||||
@json
|
||||
{
|
||||
"marzer/tomlplusplus": { }
|
||||
"marzer/tomlplusplus": { }
|
||||
}
|
||||
@endjson
|
||||
|
||||
@ -510,7 +522,6 @@ You can also add it as a subproject directly.
|
||||
vcpkg install tomlplusplus
|
||||
@endshell
|
||||
|
||||
|
||||
<!-- --------------------------------------------------------------------------------------------------------------- -->
|
||||
|
||||
@subsection mainpage-adding-lib-cmake-fetch-content CMake FetchContent
|
||||
@ -518,9 +529,9 @@ vcpkg install tomlplusplus
|
||||
@cmake
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
tomlplusplus
|
||||
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
|
||||
GIT_TAG v3.3.0
|
||||
tomlplusplus
|
||||
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
|
||||
GIT_TAG v3.4.0
|
||||
)
|
||||
FetchContent_MakeAvailable(tomlplusplus)
|
||||
@endcmake
|
||||
@ -552,12 +563,12 @@ TOML libraries available for python, and thus one of the fastest options availab
|
||||
|
||||
@out
|
||||
Parsing data.toml 5000 times:
|
||||
pytomlpp: 0.694 s
|
||||
rtoml: 0.871 s ( 1.25x)
|
||||
tomli: 2.625 s ( 3.78x)
|
||||
toml: 5.642 s ( 8.12x)
|
||||
qtoml: 7.760 s (11.17x)
|
||||
tomlkit: 32.708 s (47.09x)
|
||||
pytomlpp: 0.694 s
|
||||
rtoml: 0.871 s ( 1.25x)
|
||||
tomli: 2.625 s ( 3.78x)
|
||||
toml: 5.642 s ( 8.12x)
|
||||
qtoml: 7.760 s (11.17x)
|
||||
tomlkit: 32.708 s (47.09x)
|
||||
@endout
|
||||
|
||||
Install it using `pip`:
|
||||
@ -606,6 +617,7 @@ it is embedded in the preamble at the top of the header.
|
||||
|
||||
For bug reports and feature requests please use the \github{marzer/tomlplusplus/issues, Github Issues}
|
||||
system. For anything else you're welcome to reach out via other means. In order of likely response speed:
|
||||
|
||||
- Twitter: [marzer8789](https://twitter.com/marzer8789)
|
||||
- Gitter: [marzer/tomlplusplus](https://gitter.im/marzer/tomlplusplus) ("Discord for repos")
|
||||
- Email: [mark.gillard@outlook.com.au](mailto:mark.gillard@outlook.com.au)
|
||||
|
@ -5,7 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#define TOML_LIB_MAJOR 3
|
||||
#define TOML_LIB_MINOR 3
|
||||
#define TOML_LIB_MINOR 4
|
||||
#define TOML_LIB_PATCH 0
|
||||
|
||||
#define TOML_LANG_MAJOR 1
|
||||
|
@ -7,7 +7,7 @@ project(
|
||||
'tomlplusplus',
|
||||
'cpp',
|
||||
license: 'MIT',
|
||||
version: '3.3.0',
|
||||
version: '3.4.0',
|
||||
meson_version: '>=0.61.0',
|
||||
default_options: [
|
||||
# https://mesonbuild.com/Builtin-options.html
|
||||
|
@ -47,6 +47,6 @@ ninja && toml-test ./toml-test/tt_decoder && toml-test ./toml-test/tt_encoder --
|
||||
> ℹ️ Pass `-Duse_vendored_libs=false` to meson if you wish to use the system-installed version
|
||||
> of nlohmann/json rather than the vendored one.
|
||||
|
||||
[toml-test]: https://github.com/BurntSushi/toml-test
|
||||
[contributing]: ../CONTRIBUTING.md
|
||||
[toml-test]: https://github.com/toml-lang/toml-test
|
||||
[contributing]: ./../CONTRIBUTING.md
|
||||
[meson]: https://mesonbuild.com/
|
||||
|
4
toml.hpp
4
toml.hpp
@ -1,6 +1,6 @@
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// toml++ v3.3.0
|
||||
// toml++ v3.4.0
|
||||
// https://github.com/marzer/tomlplusplus
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
@ -1152,7 +1152,7 @@ TOML_ENABLE_WARNINGS;
|
||||
//******** impl/version.hpp ******************************************************************************************
|
||||
|
||||
#define TOML_LIB_MAJOR 3
|
||||
#define TOML_LIB_MINOR 3
|
||||
#define TOML_LIB_MINOR 4
|
||||
#define TOML_LIB_PATCH 0
|
||||
|
||||
#define TOML_LANG_MAJOR 1
|
||||
|
@ -31,7 +31,7 @@ if __name__ == '__main__':
|
||||
args.add_argument(r'version', type=str)
|
||||
args = args.parse_args()
|
||||
|
||||
version = re.fullmatch(r'\s*([0-9]+)\s*[.,;]\s*([0-9]+)\s*[.,;]\s*([0-9]+)\s*', args.version)
|
||||
version = re.fullmatch(r'\s*[vV]?\s*([0-9]+)\s*[.,;]+\s*([0-9]+)\s*[.,;]+\s*([0-9]+)\s*', args.version)
|
||||
if not version:
|
||||
print(rf"Couldn't parse version triplet from '{args.version}'", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
@ -51,7 +51,7 @@ if __name__ == '__main__':
|
||||
text = re.sub(r'''(\s|^)VERSION\s+[0-9](?:[.][0-9]){2}''', rf"\1VERSION {version_str}", text, count=1, flags=re.I)
|
||||
write_text_file(path, text)
|
||||
|
||||
path = root / r'include/toml++/impl/version.h'
|
||||
for path in (root / r'include/toml++/impl/version.hpp', root / r'toml.hpp'):
|
||||
text = read_text_file(path)
|
||||
text = re.sub(r'''(\s*#\s*define\s+TOML_LIB_MAJOR)\s+[0-9]+''', rf"\1 {version[0]}", text)
|
||||
text = re.sub(r'''(\s*#\s*define\s+TOML_LIB_MINOR)\s+[0-9]+''', rf"\1 {version[1]}", text)
|
||||
@ -59,7 +59,7 @@ if __name__ == '__main__':
|
||||
write_text_file(path, text)
|
||||
|
||||
noop_sub = r'#$%^nbsp^%$#'
|
||||
for file in (r'README.md', r'docs/pages/main_page.dox'):
|
||||
for file in (r'README.md', r'docs/pages/main_page.md'):
|
||||
path = root / file
|
||||
text = read_text_file(path)
|
||||
text = re.sub(r'''(toml(?:plusplus|\+\+|pp)\s*[/:^]\s*)[0-9](?:[.][0-9]){2}''', rf"\1{noop_sub}{version_str}", text, flags=re.I)
|
||||
|
Loading…
Reference in New Issue
Block a user