First cut of custom exception support
diff --git a/internal/catch_interfaces_exception.h b/internal/catch_interfaces_exception.h
new file mode 100644
index 0000000..b7edc01
--- /dev/null
+++ b/internal/catch_interfaces_exception.h
@@ -0,0 +1,67 @@
+/*
+ * catch_exception_interfaces.h
+ * Catch
+ *
+ * Created by Phil on 20/04/2011.
+ * Copyright 2011 Two Blue Cubes Ltd. All rights reserved.
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ *
+ */
+#ifndef TWOBLUECUBES_CATCH_INTERFACES_EXCEPTIONS_H_INCLUDED
+#define TWOBLUECUBES_CATCH_INTERFACES_EXCEPTIONS_H_INCLUDED
+
+#include <string>
+
+namespace Catch
+{
+ typedef std::string(*exceptionTranslateFunction)();
+
+ struct IExceptionTranslator
+ {
+ virtual ~IExceptionTranslator(){}
+ virtual std::string translate() const = 0;
+ };
+
+ struct IExceptionTranslatorRegistry
+ {
+ virtual ~IExceptionTranslatorRegistry
+ ()
+ {}
+
+ virtual void registerTranslator
+ ( IExceptionTranslator* translator
+ ) = 0;
+ virtual std::string translateActiveException
+ () const = 0;
+
+ };
+
+ template<typename T>
+ class ExceptionTranslator : public IExceptionTranslator
+ {
+ public:
+ ExceptionTranslator()
+ {
+ Catch::Hub::getExceptionTranslatorRegistry().registerTranslator( this );
+ }
+
+ virtual std::string translate() const
+ {
+ try
+ {
+ throw;
+ }
+ catch( T& ex )
+ {
+ return translate( ex );
+ }
+ }
+
+ protected:
+ std::string translate( T& ex ) const;
+ };
+}
+
+#endif // TWOBLUECUBES_CATCH_INTERFACES_EXCEPTIONS_H_INCLUDED