summaryrefslogtreecommitdiffstats
path: root/libksieve/shared/error.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libksieve/shared/error.cpp')
-rw-r--r--libksieve/shared/error.cpp247
1 files changed, 247 insertions, 0 deletions
diff --git a/libksieve/shared/error.cpp b/libksieve/shared/error.cpp
new file mode 100644
index 000000000..e53b0c252
--- /dev/null
+++ b/libksieve/shared/error.cpp
@@ -0,0 +1,247 @@
+/* -*- c++ -*-
+ error.cpp
+
+ This file is part of KSieve,
+ the KDE internet mail/usenet news message filtering library.
+ Copyright (c) 2002-2003 Marc Mutz <mutz@kde.org>
+
+ KSieve is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License, version 2, as
+ published by the Free Software Foundation.
+
+ KSieve is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of this program with any edition of
+ the Qt library by Trolltech AS, Norway (or with modified versions
+ of Qt that use the same license as Qt), and distribute linked
+ combinations including the two. You must obey the GNU General
+ Public License in all respects for all of the code used other than
+ Qt. If you modify this file, you may extend this exception to
+ your version of the file, but you are not obligated to do so. If
+ you do not wish to do so, delete this exception statement from
+ your version.
+*/
+
+#include <config.h>
+
+#include <ksieve/error.h>
+
+#include <klocale.h> // i18n
+
+#include <climits> // UINT_MAX
+
+namespace KSieve {
+
+ const char * Error::typeToString( Type t ) {
+ switch ( t ) {
+#define CASE(x) case x: return #x
+ CASE( None );
+ CASE( Custom );
+
+ CASE( CRWithoutLF );
+ CASE( SlashWithoutAsterisk );
+ CASE( IllegalCharacter );
+ CASE( UnexpectedCharacter );
+ CASE( NoLeadingDigits );
+ CASE( NonCWSAfterTextColon );
+
+ CASE( NumberOutOfRange );
+ CASE( InvalidUTF8 );
+
+ CASE( UnfinishedBracketComment );
+ CASE( PrematureEndOfMultiLine );
+ CASE( PrematureEndOfQuotedString );
+ CASE( PrematureEndOfStringList );
+ CASE( PrematureEndOfTestList );
+ CASE( PrematureEndOfBlock );
+ CASE( MissingWhitespace );
+ CASE( MissingSemicolonOrBlock );
+
+ CASE( ExpectedBlockOrSemicolon );
+ CASE( ExpectedCommand );
+ CASE( ConsecutiveCommasInStringList );
+ CASE( ConsecutiveCommasInTestList );
+ CASE( MissingCommaInTestList );
+ CASE( MissingCommaInStringList );
+ CASE( NonStringInStringList );
+ CASE( NonCommandInCommandList );
+ CASE( NonTestInTestList );
+
+ CASE( RequireNotFirst );
+ CASE( RequireMissingForCommand );
+ CASE( RequireMissingForTest );
+ CASE( RequireMissingForComparator );
+ CASE( UnsupportedCommand );
+ CASE( UnsupportedTest );
+ CASE( UnsupportedComparator );
+ CASE( TestNestingTooDeep );
+ CASE( BlockNestingTooDeep );
+ CASE( InvalidArgument );
+ CASE( ConflictingArguments );
+ CASE( ArgumentsRepeated );
+ CASE( CommandOrderingConstraintViolation );
+
+ CASE( IncompatibleActionsRequested );
+ CASE( MailLoopDetected );
+ CASE( TooManyActions );
+#undef CASE
+ default:
+ return "<unknown>";
+ }
+ }
+
+ QString Error::asString() const {
+
+ QString err;
+ switch( type() ) {
+ case None:
+ return QString::null;
+ case Custom:
+ return mStringOne;
+
+ // Parse errors:
+ case CRWithoutLF:
+ err = i18n("Parse error: Carriage Return (CR) without Line Feed (LF)");
+ break;
+ case SlashWithoutAsterisk:
+ err = i18n("Parse error: Unquoted Slash ('/') without Asterisk ('*'). "
+ "Broken Comment?");
+ break;
+ case IllegalCharacter:
+ err = i18n("Parse error: Illegal Character");
+ break;
+ case UnexpectedCharacter:
+ err = i18n("Parse error: Unexpected Character, probably a missing space?");
+ break;
+ case NoLeadingDigits:
+ err = i18n("Parse error: Tag Name has leading Digits");
+ break;
+ case NonCWSAfterTextColon:
+ err = i18n("Parse error: Only whitespace and #comments may "
+ "follow \"text:\" on the same line");
+ break;
+ case NumberOutOfRange:
+ err = i18n("Parse error: Number out of Range (must be smaller than %1)").arg(UINT_MAX);
+ break;
+ case InvalidUTF8:
+ err = i18n("Parse error: Invalid UTF-8 sequence");
+ break;
+ case PrematureEndOfMultiLine:
+ err = i18n("Parse error: Premature end of Multiline String (did you forget the '.'?)");
+ break;
+ case PrematureEndOfQuotedString:
+ err = i18n("Parse error: Premature end of Quoted String (missing closing '\"')");
+ break;
+ case PrematureEndOfStringList:
+ err = i18n("Parse error: Premature end of String List (missing closing ']')");
+ break;
+ case PrematureEndOfTestList:
+ err = i18n("Parse error: Premature end of Test List (missing closing ')')");
+ break;
+ case PrematureEndOfBlock:
+ err = i18n("Parse error: Premature end of Block (missing closing '}')");
+ break;
+ case MissingWhitespace:
+ err = i18n("Parse error: Missing Whitespace");
+ break;
+ case MissingSemicolonOrBlock:
+ err = i18n("Parse error: Missing ';' or Block");
+ break;
+ case ExpectedBlockOrSemicolon:
+ err = i18n("Parse error: Expected ';' or '{', got something else");
+ break;
+ case ExpectedCommand:
+ err = i18n("Parse error: Expected Command, got something else");
+ break;
+ case ConsecutiveCommasInStringList:
+ err = i18n("Parse error: Trailing, Leading or Duplicate Commas in String List");
+ break;
+ case ConsecutiveCommasInTestList:
+ err = i18n("Parse error: Trailing, Leading or Duplicate Commas in Test List");
+ break;
+ case MissingCommaInStringList:
+ err = i18n("Parse error: Missing ',' between Strings in String List");
+ break;
+ case MissingCommaInTestList:
+ err = i18n("Parse error: Missing ',' between Tests in Test List");
+ break;
+ case NonCommandInCommandList:
+ err = i18n("Parse error: Expected Command, got something else");
+ break;
+ case NonStringInStringList:
+ err = i18n("Parse error: Only Strings allowed in String Lists");
+ break;
+ case NonTestInTestList:
+ err = i18n("Parse error: Only Tests allowed in Test Lists");
+ break;
+
+ // validity errors:
+ case RequireNotFirst:
+ err = i18n("\"require\" must be first command");
+ break;
+ case RequireMissingForCommand:
+ err = i18n("\"require\" missing for command \"%1\"").arg(mStringOne);
+ break;
+ case RequireMissingForTest:
+ err = i18n("\"require\" missing for test \"%1\"").arg(mStringOne);
+ break;
+ case RequireMissingForComparator:
+ err = i18n("\"require\" missing for comparator \"%1\"").arg(mStringOne);
+ break;
+ case UnsupportedCommand:
+ err = i18n("Command \"%1\" not supported").arg(mStringOne);
+ break;
+ case UnsupportedTest:
+ err = i18n("Test \"%1\" not supported").arg(mStringOne);
+ break;
+ case UnsupportedComparator:
+ err = i18n("Comparator \"%1\" not supported").arg(mStringOne);
+ break;
+ case TestNestingTooDeep:
+ err = i18n("Site Policy Limit Violation: Test nesting too deep (max. %1)").arg( mStringOne.toUInt() );
+ break;
+ case BlockNestingTooDeep:
+ err = i18n("Site Policy Limit Violation: Block nesting too deep (max. %1)").arg( mStringOne.toUInt() );
+ break;
+ case InvalidArgument:
+ err = i18n("Invalid Argument \"%1\" to \"%2\"").arg(mStringOne).arg(mStringTwo);
+ break;
+ case ConflictingArguments:
+ err = i18n("Conflicting Arguments: \"%1\" and \"%2\"").arg(mStringOne).arg(mStringTwo);
+ break;
+ case ArgumentsRepeated:
+ err = i18n("Argument \"%1\" Repeated").arg(mStringOne);
+ break;
+ case CommandOrderingConstraintViolation:
+ err = i18n("Command \"%1\" violates command ordering constraints").arg(mStringOne);
+ break;
+
+ // runtime errors:
+ case IncompatibleActionsRequested:
+ err = i18n("Incompatible Actions \"%1\" and \"%2\" requested").arg(mStringOne).arg(mStringTwo);
+ break;
+ case MailLoopDetected:
+ err = i18n("Mail Loop detected");
+ break;
+ case TooManyActions:
+ err = i18n("Site Policy Limit Violation: Too many Actions requested (max. %1)").arg( mStringOne.toUInt() );
+ break;
+ default:
+ err = i18n("Unknown error");
+ break;
+ }
+
+ return err;
+ }
+
+
+} // namespace KSieve
+