diff --git a/src/resource/common/expected_locale_keys b/src/resource/common/expected_locale_keys index 77e1cd70..04634a70 100644 --- a/src/resource/common/expected_locale_keys +++ b/src/resource/common/expected_locale_keys @@ -1,6 +1,6 @@ # This file contains the keys expected to be in MSE locales # It was automatically generated by tools/locale/locale.pl -# Generated on Sun Jan 11 17:40:25 2009 +# Generated on Mon Aug 2 23:18:19 2010 action: add control point: 0 @@ -84,10 +84,10 @@ button: select all: 0 select cards: 0 select none: 0 - spellcheck enabled: 0 show: 0 show editing hints: 0 show lines: 0 + spellcheck enabled: 0 symbol gallery: optional, 0 upgrade group: optional, 0 upgrade package: 0 @@ -137,7 +137,7 @@ error: successful install: optional, 2 unable to open output file: 0 unable to store file: 0 - unrecognized value: 1 + unrecognized value: 2 unsupported field type: 1 unsupported fill type: 1 unsupported format: 1 diff --git a/src/util/io/reader.cpp b/src/util/io/reader.cpp index 82f1584f..a19b2f25 100644 --- a/src/util/io/reader.cpp +++ b/src/util/io/reader.cpp @@ -429,14 +429,20 @@ template <> void Reader::handle(FileName& f) { // ----------------------------------------------------------------------------- : EnumReader +String EnumReader::notDoneErrorMessage() const { + if (!first) throw InternalError(_("No first value in EnumReader")); + return _ERROR_2_("unrecognized value", read, first); +} + void EnumReader::warnIfNotDone(Reader* errors_to) { if (!done) { // warning: unknown value - errors_to->warning(_ERROR_1_("unrecognized value", read)); + errors_to->warning(notDoneErrorMessage()); } } + void EnumReader::errorIfNotDone() { if (!done) { - throw ParseError(_ERROR_1_("unrecognized value", read)); + throw ParseError(notDoneErrorMessage()); } } diff --git a/src/util/io/reader.hpp b/src/util/io/reader.hpp index 096d1bde..6b9f58b5 100644 --- a/src/util/io/reader.hpp +++ b/src/util/io/reader.hpp @@ -268,18 +268,19 @@ void Reader::handle(IndexMap& m) { class EnumReader { public: inline EnumReader(String read) - : read(read), first(true), done(false) {} + : read(read), first(nullptr), done(false) {} /// Handle a possible value for the enum, if the name matches the name in the input template inline void handle(const Char* name, Enum value, Enum& enum_) { - if (!done && read == name) { - done = true; - first = false; - enum_ = value; - } else if (first) { - first = false; - enum_ = value; + if (!done) { + if (read == name) { + done = true; + enum_ = value; + } else if (!first) { + first = name; + enum_ = value; + } } } @@ -288,9 +289,11 @@ class EnumReader { void errorIfNotDone(); private: - String read; ///< The string to match to a value name - bool first; ///< Has the first (default) value been matched? - bool done; ///< Was anything matched? + String read; ///< The string to match to a value name + Char const* first; ///< Has the first (default) value been handled? If so, what is its name. + bool done; ///< Was anything matched? + + String notDoneErrorMessage() const; }; // ----------------------------------------------------------------------------- : EOF