41 std::vector<std::string> mExtensions;
42 std::string mDescription;
45 constexpr FileFormat(
const char* extension, std::string description =
"") :
46 mExtensions {extension}, mDescription(description)
48 clearExtension(mExtensions[0]);
52 const std::string& extension,
53 std::string description =
"") :
58 constexpr FileFormat(
Range auto extensions, std::string description =
"") :
59 mExtensions(extensions), mDescription(description)
61 for (
auto&
ext : mExtensions) {
67 std::sort(mExtensions.begin(), mExtensions.end());
70 const std::string& description()
const {
return mDescription; }
72 const std::vector<std::string>& extensions()
const {
return mExtensions; }
74 bool matchExtension(std::string extension)
const
76 clearExtension(extension);
77 for (
const auto&
ext : mExtensions) {
78 if (
ext == extension) {
98 for (
const auto&
ext : mExtensions) {
100 return std::strong_ordering::equal;
104 return mExtensions[0] <=>
other.mExtensions[0];
113 static constexpr void clearExtension(std::string& extension)
115 if (!extension.empty() && extension.front() ==
'.') {
116 extension.erase(0, 1);
118 extension = toLower(extension);