mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
improved error reporting for the keyword editor
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@260 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -8,6 +8,8 @@
|
||||
|
||||
#include <util/error.hpp>
|
||||
|
||||
DECLARE_TYPEOF_COLLECTION(ScriptParseError);
|
||||
|
||||
// ----------------------------------------------------------------------------- : Error types
|
||||
|
||||
Error::Error(const String& message)
|
||||
@@ -20,6 +22,32 @@ String Error::what() const {
|
||||
return message;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Parse errors
|
||||
|
||||
ScriptParseError::ScriptParseError(size_t pos, const String& error)
|
||||
: start(pos), end(pos)
|
||||
, ParseError(error)
|
||||
{}
|
||||
ScriptParseError::ScriptParseError(size_t pos, const String& exp, const String& found)
|
||||
: start(pos), end(pos + found.size())
|
||||
, ParseError(_("Expected '") + exp + _("' instead of '") + found + _("'"))
|
||||
{}
|
||||
String ScriptParseError::what() const {
|
||||
return String(_("(")) << (int)start << _("): ") << Error::what();
|
||||
}
|
||||
|
||||
String concat(const vector<ScriptParseError>& errors) {
|
||||
String total;
|
||||
FOR_EACH_CONST(e, errors) {
|
||||
if (!total.empty()) total += _("\n");
|
||||
total += e.what();
|
||||
}
|
||||
return total;
|
||||
}
|
||||
ScriptParseErrors::ScriptParseErrors(const vector<ScriptParseError>& errors)
|
||||
: ParseError(concat(errors))
|
||||
{}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Error handling
|
||||
|
||||
// Errors for which a message box was already shown
|
||||
|
||||
+12
-3
@@ -75,9 +75,18 @@ class FileParseError : public ParseError {
|
||||
/// Parse error in a script
|
||||
class ScriptParseError : public ParseError {
|
||||
public:
|
||||
inline ScriptParseError(const String& str) : ParseError(str) {}
|
||||
inline ScriptParseError(const String& exp, const String& found)
|
||||
: ParseError(_("Expected '") + exp + _("' instead of '") + found + _("'")) {}
|
||||
ScriptParseError(size_t pos, const String& str);
|
||||
ScriptParseError(size_t pos, const String& expected, const String& found);
|
||||
/// Position of the error
|
||||
size_t start, end;
|
||||
/// Return the error message
|
||||
virtual String what() const;
|
||||
};
|
||||
|
||||
/// Multiple parse errors in a script
|
||||
class ScriptParseErrors : public ParseError {
|
||||
public:
|
||||
ScriptParseErrors(const vector<ScriptParseError>& errors);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : Script errors
|
||||
|
||||
Reference in New Issue
Block a user