diff --git a/.markdown-link-check.json b/.markdown-link-check.json index d6db4650..b1eb32a8 100644 --- a/.markdown-link-check.json +++ b/.markdown-link-check.json @@ -5,6 +5,7 @@ "ignorePatterns": [ { "pattern": "go-cart\\.io" }, { "pattern": "pnas\\.org/content/115/10/E2156" }, - { "pattern": "doi\\.org/10\\.1073/pnas\\.0400280101" } + { "pattern": "doi\\.org/10\\.1073/pnas\\.0400280101" }, + { "pattern": "gnu\\.org/licenses/agpl-3\\.0" } ] } diff --git a/include/constants.hpp b/include/constants.hpp index 16bd81d4..bd1f63c2 100644 --- a/include/constants.hpp +++ b/include/constants.hpp @@ -65,4 +65,7 @@ constexpr double xi_sq = 4.0; // ly constexpr unsigned int plotted_cell_length = 8; +// Version +const std::string version = "25.10"; + #endif // CONST_HPP_ diff --git a/src/cartogram_info/write_geojson.cpp b/src/cartogram_info/write_geojson.cpp index 6128f538..f489698a 100644 --- a/src/cartogram_info/write_geojson.cpp +++ b/src/cartogram_info/write_geojson.cpp @@ -1,5 +1,6 @@ #include "cartogram_info.hpp" #include "constants.hpp" +#include // Function that returns coordinates of the end points of a "divider" line // segment used to separate between different insets @@ -192,9 +193,10 @@ void CartogramInfo::json_to_geojson( add_dividers_to_geojson(container[(container.size() - 1)]); } - new_json["properties"]["note"] = - "Created using cartogram-cpp / go-cart.io with custom projection, not in " - "EPSG:4326"; + new_json["properties"]["note"] = std::format( + "Created with cartogram-cpp v{}. Coordinates are in a custom projection, " + "not EPSG:4326.", + version); // Write that the map is projected new_json["properties"]["projected"] = true; diff --git a/src/main.cpp b/src/main.cpp index 702efd87..8208a308 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,18 @@ #include "cartogram_info.hpp" +#include "constants.hpp" #include "parse_arguments.hpp" #include "progress_tracker.hpp" +#include +#include +#include +#include + +static void print_version_and_command_line(const int, const char *[]); int main(const int argc, const char *argv[]) { + print_version_and_command_line(argc, argv); + // Parse command-line arguments Arguments args = parse_arguments(argc, argv); @@ -79,3 +88,17 @@ int main(const int argc, const char *argv[]) return EXIT_FAILURE; return EXIT_SUCCESS; } + +static void print_version_and_command_line(const int argc, const char *argv[]) +{ + std::cerr << std::format("Version {}\n", version); + + std::span raw_args{argv, static_cast(argc)}; + if (!raw_args.empty()) { + std::cerr << "Command: " << std::quoted(raw_args.front()); + std::ranges::for_each(raw_args | std::views::drop(1), [](const char *s) { + std::cerr << ' ' << std::quoted(s); + }); + std::cerr << '\n'; + } +} diff --git a/src/misc/parse_arguments.cpp b/src/misc/parse_arguments.cpp index cf78e3dd..edab6600 100644 --- a/src/misc/parse_arguments.cpp +++ b/src/misc/parse_arguments.cpp @@ -8,7 +8,7 @@ Arguments parse_arguments(const int argc, const char *argv[]) // Create parser for arguments using argparse. // From https://github.com/p-ranav/argparse - argparse::ArgumentParser arguments("./cartogram", "25.9"); + argparse::ArgumentParser arguments("./cartogram", version); // Positional argument accepting geometry file (GeoJSON, JSON) as input arguments.add_argument("geometry_file")