changeset 361:4bffbf81e2d6

redirect direct prints to DwtLogger
author Frank Benoit <benoit@tionex.de>
date Fri, 20 Mar 2009 21:00:06 +0100
parents ee1dd551f5b1
children 5f6d9bb33a53
files dwt/DWTError.d dwt/DWTException.d dwt/accessibility/AccessibleFactory.d dwt/accessibility/AccessibleObject.d dwt/browser/Browser.d dwt/browser/Mozilla.d dwt/dwthelper/InflaterInputStream.d dwt/dwthelper/ResourceBundle.d dwt/dwthelper/utils.d dwt/dwthelper/utils.d.orig dwt/graphics/Device.d dwt/graphics/FontData.d dwt/internal/c/glx.d dwt/internal/c/gtk.d dwt/internal/c/gtk_unix_print_2_0.d dwt/internal/c/pango.d dwt/internal/gtk/OS.d dwt/printing/Printer.d dwt/program/Program.d dwt/widgets/Button.d dwt/widgets/Composite.d dwt/widgets/Control.d dwt/widgets/Display.d dwt/widgets/ProgressBar.d dwt/widgets/Widget.d
diffstat 25 files changed, 155 insertions(+), 1211 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/DWTError.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/DWTError.d	Fri Mar 20 21:00:06 2009 +0100
@@ -17,7 +17,6 @@
 import dwt.DWT;
 
 import tango.core.Exception;
-import tango.io.Stdout;
 
 /**
  * This error is thrown whenever an unrecoverable error
@@ -150,14 +149,14 @@
  * </p>
  */
 public void printStackTrace () {
-    Stderr.formatln( "stacktrace follows (if feature compiled in)" );
+    getDwtLogger().error( "stacktrace follows (if feature compiled in)" );
     foreach( msg; info ){
-        Stderr.formatln( "{}", msg );
+        getDwtLogger().error( "{}", msg );
     }
     if ( throwable !is null) {
-        Stderr.formatln ("*** Stack trace of contained error ***"); //$NON-NLS-1$
+        getDwtLogger().error ("*** Stack trace of contained error ***"); //$NON-NLS-1$
         foreach( msg; throwable.info ){
-            Stderr.formatln( "{}", msg );
+            getDwtLogger().error( "{}", msg );
         }
     }
 }
--- a/dwt/DWTException.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/DWTException.d	Fri Mar 20 21:00:06 2009 +0100
@@ -17,7 +17,6 @@
 import dwt.DWT;
 
 import tango.core.Exception;
-import tango.io.Stdout;
 
 /**
  * This runtime exception is thrown whenever a recoverable error
@@ -141,14 +140,14 @@
  * </p>
  */
 public void printStackTrace () {
-    Stderr.formatln( "stacktrace follows (if feature compiled in)" );
+    getDwtLogger().error( "stacktrace follows (if feature compiled in)" );
     foreach( msg; info ){
-        Stderr.formatln( "{}", msg );
+        getDwtLogger().error( "{}", msg );
     }
     if ( throwable !is null) {
-        Stderr.formatln ("*** Stack trace of contained exception ***"); //$NON-NLS-1$
+        getDwtLogger().error ("*** Stack trace of contained exception ***"); //$NON-NLS-1$
         foreach( msg; throwable.info ){
-            Stderr.formatln( "{}", msg );
+            getDwtLogger().error( "{}", msg );
         }
     }
 }
--- a/dwt/accessibility/AccessibleFactory.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/accessibility/AccessibleFactory.d	Fri Mar 20 21:00:06 2009 +0100
@@ -25,8 +25,6 @@
 
 import dwt.DWT;
 
-import tango.io.Stdout;
-
 class AccessibleFactory {
     AtkObjectFactory * handle;
     uint objectParentType;
@@ -147,7 +145,7 @@
             }
         }
         else{
-            Stdout.formatln( "AccessibleFactory.atkObjectFactoryCB_create_accessible cannot find factory instance" );
+            getDwtLogger().info( "AccessibleFactory.atkObjectFactoryCB_create_accessible cannot find factory instance" );
         }
     }
 
--- a/dwt/accessibility/AccessibleObject.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/accessibility/AccessibleObject.d	Fri Mar 20 21:00:06 2009 +0100
@@ -25,7 +25,6 @@
 import dwt.accessibility.AccessibleFactory;
 import dwt.widgets.Display;
 import dwt.dwthelper.utils;
-import tango.io.Stdout;
 import tango.text.Util;
 import Math = tango.math.Math;
 
@@ -73,7 +72,7 @@
         this.accessible = accessible;
         this.isLightweight = isLightweight;
         AccessibleObjects[handle] = this;
-        if (DEBUG) Stdout.formatln("new AccessibleObject: {}", handle);
+        if (DEBUG) getDwtLogger().info("new AccessibleObject: {}", handle);
     }
 
     void addChild (AccessibleObject child) {
@@ -83,7 +82,7 @@
 
     package static extern(C) char* atkAction_get_keybinding (void* obj, int index) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkAction_get_keybinding");
+        if (DEBUG) getDwtLogger().info ("-->atkAction_get_keybinding");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         char* parentResult;
@@ -116,7 +115,7 @@
 
     package static extern(C) char* atkAction_get_name (void* obj, int index) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkAction_get_name");
+        if (DEBUG) getDwtLogger().info ("-->atkAction_get_name");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         char* parentResult;
@@ -149,7 +148,7 @@
 
     package static extern(C) void atkComponent_get_extents (void* obj, int* x, int* y, int* width, int* height, int coord_type) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkComponent_get_extents");
+        if (DEBUG) getDwtLogger().info ("-->atkComponent_get_extents");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         *x = 0;
@@ -203,7 +202,7 @@
 
     package static extern(C) void atkComponent_get_position (void* obj, int* x, int* y, int coord_type) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkComponent_get_position, object: {} x:{} y:{} coord:{}", atkObject, x, y, coord_type);
+        if (DEBUG) getDwtLogger().info ("-->atkComponent_get_position, object: {} x:{} y:{} coord:{}", atkObject, x, y, coord_type);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         *x=0;
@@ -255,7 +254,7 @@
     //package static extern(C) void atkComponent_get_size (void* obj, int* width, int* height, int coord_type) {
     package static extern(C) void atkComponent_get_size (void* obj, int* width, int* height) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkComponent_get_size");
+        if (DEBUG) getDwtLogger().info ("-->atkComponent_get_size");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         *width=0;
@@ -286,7 +285,7 @@
 
     package static extern(C) AtkObject* atkComponent_ref_accessible_at_point (void* obj, int x, int y, int coord_type) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkComponent_ref_accessible_at_point");
+        if (DEBUG) getDwtLogger().info ("-->atkComponent_ref_accessible_at_point");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         AtkObject* parentResult;
@@ -327,24 +326,24 @@
 
     package static extern(C) AtkHyperlink* atkHypertext_get_link (void* obj, int link_index) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkHypertext_get_link");
+        if (DEBUG) getDwtLogger().info ("-->atkHypertext_get_link");
         return null;
     }
 
     package static extern(C) int atkHypertext_get_n_links (void* obj) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkHypertext_get_n_links");
+        if (DEBUG) getDwtLogger().info ("-->atkHypertext_get_n_links");
         return 0;   /* read hyperlink's name */
     }
 
     package static extern(C) int atkHypertext_get_link_index (void* obj, int char_index) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkHypertext_get_link_index");
+        if (DEBUG) getDwtLogger().info ("-->atkHypertext_get_link_index");
         return 0;
     }
 
     package static extern(C) char* atkObject_get_description (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_get_description");
+        if (DEBUG) getDwtLogger().info ("-->atkObject_get_description");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         char* parentResult;
@@ -372,7 +371,7 @@
         return descriptionPtr.ptr;  }
 
     package static extern(C) char* atkObject_get_name (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_get_name: {}", atkObject);
+        if (DEBUG) getDwtLogger().info ("-->atkObject_get_name: {}", atkObject);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         char* parentResult;
@@ -400,7 +399,7 @@
     }
 
     package static extern(C) int atkObject_get_n_children (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_get_n_children: {}", atkObject);
+        if (DEBUG) getDwtLogger().info ("-->atkObject_get_n_children: {}", atkObject);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         int /*long*/ parentResult = 0;
@@ -421,7 +420,7 @@
     }
 
     package static extern(C) int atkObject_get_index_in_parent (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObjectCB_get_index_in_parent.  ");
+        if (DEBUG) getDwtLogger().info ("-->atkObjectCB_get_index_in_parent.  ");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         if (object.index !is -1) return object.index;
@@ -431,7 +430,7 @@
     }
 
     package static extern(C) AtkObject* atkObject_get_parent (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_get_parent: {}", atkObject);
+        if (DEBUG) getDwtLogger().info ("-->atkObject_get_parent: {}", atkObject);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         if (object.parent !is null) return object.parent.handle;
@@ -441,7 +440,7 @@
     }
 
     package static extern(C) int atkObject_get_role (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_get_role: {}", atkObject);
+        if (DEBUG) getDwtLogger().info ("-->atkObject_get_role: {}", atkObject);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         if (object.getAccessibleListeners ().length !is 0) {
@@ -494,7 +493,7 @@
     }
 
     package static extern(C) AtkObject* atkObject_ref_child (AtkObject* atkObject, int /*long*/ index) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_ref_child: {} of: {}", index, atkObject);
+        if (DEBUG) getDwtLogger().info ("-->atkObject_ref_child: {} of: {}", index, atkObject);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         object.updateChildren ();
@@ -509,7 +508,7 @@
     }
 
     package static extern(C) AtkStateSet * atkObject_ref_state_set (AtkObject* atkObject) {
-        if (DEBUG) Stdout.formatln ("-->atkObject_ref_state_set");
+        if (DEBUG) getDwtLogger().info ("-->atkObject_ref_state_set");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         AtkStateSet* parentResult;
@@ -551,7 +550,7 @@
 
     package static extern(C) int atkSelection_is_child_selected (void* obj, int index) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkSelection_is_child_selected");
+        if (DEBUG) getDwtLogger().info ("-->atkSelection_is_child_selected");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         int /*long*/ parentResult = 0;
@@ -578,7 +577,7 @@
 
     package static extern(C) AtkObject* atkSelection_ref_selection (void* obj, int index) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkSelection_ref_selection");
+        if (DEBUG) getDwtLogger().info ("-->atkSelection_ref_selection");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         AtkObject* parentResult;
@@ -607,7 +606,7 @@
 
     package static extern(C) int atkText_get_caret_offset (void* obj) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_caret_offset");
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_caret_offset");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         int /*long*/ parentResult = 0;
@@ -631,7 +630,7 @@
 
     package static extern(C) uint atkText_get_character_at_offset (void* obj, int offset) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_character_at_offset");
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_character_at_offset");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         String text = object.getText ();
@@ -647,7 +646,7 @@
 
     package static extern(C) int atkText_get_character_count (void* obj) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_character_count");
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_character_count");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         String text = object.getText ();
@@ -663,7 +662,7 @@
 
     package static extern(C) int atkText_get_n_selections (void* obj) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln("-->atkText_get_n_selections");
+        if (DEBUG) getDwtLogger().info("-->atkText_get_n_selections");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return 0;
         int /*long*/ parentResult = 0;
@@ -686,7 +685,7 @@
 
     package static extern(C) char* atkText_get_selection (void* obj, int selection_num, int* start_offset, int* end_offset) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_selection");
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_selection");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         *start_offset=0;
@@ -718,7 +717,7 @@
 
     package static extern(C) char* atkText_get_text (void* obj, int start_offset, int end_offset) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_text: {},{}", start_offset, end_offset);
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_text: {},{}", start_offset, end_offset);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         String text = object.getText ();
@@ -740,7 +739,7 @@
 
     package static extern(C) char* atkText_get_text_after_offset (void* obj, int offset_value, int boundary_type, int* start_offset, int* end_offset) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_text_after_offset");
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_text_after_offset");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         int offset = cast(int)/*64*/offset_value;
@@ -917,7 +916,7 @@
 
     package static extern(C) char* atkText_get_text_at_offset (void* obj, int offset_value, int boundary_type, int* start_offset, int* end_offset) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_text_at_offset: {} start: {} end: {}", offset_value, start_offset, end_offset);
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_text_at_offset: {} start: {} end: {}", offset_value, start_offset, end_offset);
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         int offset = offset_value;
@@ -1035,7 +1034,7 @@
 
     package static extern(C) char* atkText_get_text_before_offset (void* obj, int offset_value, int boundary_type, int* start_offset, int* end_offset) {
         auto atkObject = cast(AtkObject*)obj;
-        if (DEBUG) Stdout.formatln ("-->atkText_get_text_before_offset");
+        if (DEBUG) getDwtLogger().info ("-->atkText_get_text_before_offset");
         AccessibleObject object = getAccessibleObject (atkObject);
         if (object is null) return null;
         int offset = offset_value;
@@ -1280,7 +1279,7 @@
     }
 
     void release () {
-        if (DEBUG) Stdout.formatln("AccessibleObject.release: {}", handle);
+        if (DEBUG) getDwtLogger().info("AccessibleObject.release: {}", handle);
         accessible = null;
         foreach( child; children ){
             if (child.isLightweight) OS.g_object_unref (child.handle);
--- a/dwt/browser/Browser.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/browser/Browser.d	Fri Mar 20 21:00:06 2009 +0100
@@ -15,7 +15,6 @@
 import dwt.dwthelper.utils;
 
 import tango.core.Thread;
-import tango.io.Stdout;
 
 import dwt.DWT;
 import dwt.DWTError;
@@ -372,7 +371,7 @@
     name = name.substring(0, name.lastIndexOf('.'));
     int index = name.lastIndexOf('.');
     if (!name.substring (0, index + 1).equals (PACKAGE_PREFIX)) {
-        Stdout ("name: ")(name.substring(0, index + 1))(" == " )(PACKAGE_PREFIX).newline;
+        getDwtLogger().info("name: {} == {}", name.substring(0, index + 1), PACKAGE_PREFIX);
         DWT.error (DWT.ERROR_INVALID_SUBCLASS);
     }
 }
--- a/dwt/browser/Mozilla.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/browser/Mozilla.d	Fri Mar 20 21:00:06 2009 +0100
@@ -15,7 +15,6 @@
 import dwt.dwthelper.utils;
 
 import tango.text.locale.Core;
-import tango.io.Stdout;
 import tango.text.convert.Format;
 import tango.io.Console;
 import tango.sys.Environment;
@@ -1442,7 +1441,7 @@
 
 extern(D)
 static String error (int code, char[] file, int line) {
-    Stdout ("File: ")(file)("  Line: ")(line).newline;
+    getDwtLogger().info( "File: {}  Line: {}", file, line);
     throw new DWTError ("XPCOM error " ~ Integer.toString(code)); //$NON-NLS-1$
 }
 
--- a/dwt/dwthelper/InflaterInputStream.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/dwthelper/InflaterInputStream.d	Fri Mar 20 21:00:06 2009 +0100
@@ -5,7 +5,6 @@
 
 public import dwt.dwthelper.InputStream;
 import dwt.dwthelper.utils;
-import tango.io.Stdout;
 import tango.io.compress.ZlibStream;
 version(Windows){
     version(build){
--- a/dwt/dwthelper/ResourceBundle.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/dwthelper/ResourceBundle.d	Fri Mar 20 21:00:06 2009 +0100
@@ -4,7 +4,6 @@
 module dwt.dwthelper.ResourceBundle;
 
 import tango.text.Util;
-import tango.io.Stdout;
 
 import dwt.DWT;
 import dwt.dwthelper.utils;
@@ -52,7 +51,6 @@
         String line;
         int dataIndex;
 
-        //tango.io.Stdout.Stdout.formatln( "properties put ..." );
         void readLine(){
             line.length = 0;
             char i = data[ dataIndex++ ];
@@ -62,22 +60,18 @@
             }
         }
 
-        //tango.io.Stdout.Stdout.formatln( "properties put {}", __LINE__ );
         bool linecontinue = false;
         bool iskeypart = true;
         String key;
         String value;
 nextline:
         while( dataIndex < data.length ){
-            //tango.io.Stdout.Stdout.formatln( "properties put {} startline", __LINE__ );
             readLine();
             line = dwt.dwthelper.utils.trim(line);
             if( line.length is 0 ){
-                //tango.io.Stdout.Stdout.formatln( "properties put {} was 0 length", __LINE__ );
                 continue;
             }
             if( line[0] == '#' ){
-                //tango.io.Stdout.Stdout.formatln( "properties put {} was comment", __LINE__ );
                 continue;
             }
             int pos = 0;
@@ -138,10 +132,8 @@
             }
             key = dwt.dwthelper.utils.trim(key);
             value = dwt.dwthelper.utils.trim(value);
-            //tango.io.Stdout.Stdout.formatln( "properties put {}=>{}", key, value );
 
             map[ key.dup ] = value.dup;
-            //tango.io.Stdout.Stdout.formatln( "properties put {}", __LINE__ );
         }
     }
 
--- a/dwt/dwthelper/utils.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/dwthelper/utils.d	Fri Mar 20 21:00:06 2009 +0100
@@ -10,13 +10,7 @@
 public import tango.core.Exception : IllegalArgumentException, IOException;
 
 import tango.io.Stdout;
-version(TANGOSVN) {
-    import tango.io.stream.Format;
-    alias FormatOutput Print;
-}
-else
-    import tango.io.Print;
-
+import tango.io.stream.Format;
 static import tango.stdc.stringz;
 static import tango.text.Util;
 static import tango.text.Text;
@@ -26,17 +20,21 @@
 import tango.core.Exception;
 import tango.stdc.stdlib : exit;
 
-import tango.util.log.Trace;
+import tango.util.log.Log;
 import tango.text.UnicodeData;
 
+Logger getDwtLogger(){
+    return Log.lookup( "dwt" );
+}
+
 alias char[] String;
 alias tango.text.Text.Text!(char) StringBuffer;
 
 alias ArrayBoundsException ArrayIndexOutOfBoundsException;
 
 void implMissing( String file, uint line ){
-    Stderr.formatln( "implementation missing in file {} line {}", file, line );
-    Stderr.formatln( "exiting ..." );
+    getDwtLogger().fatal( "implementation missing in file {} line {}", file, line );
+    getDwtLogger().fatal( "exiting ..." );
     exit(1);
 }
 
@@ -59,6 +57,11 @@
     public override hash_t toHash(){
         return (typeid(T[])).getHash(&array);
     }
+    static if( is( T == char )){
+        public override char[] toString(){
+            return array;
+        }
+    }
 }
 
 class ValueWrapperT(T) : ValueWrapper {
@@ -449,7 +452,7 @@
     dchar[] res = str.toString32( buf, &ate );
     consumed = ate;
     if( ate is 0 || res.length is 0 ){
-        Trace.formatln( "dwthelper.utils {}: str.length={} str={:X2}", __LINE__, str.length, cast(ubyte[])str );
+        getDwtLogger().trace( "dwthelper.utils {}: str.length={} str={:X2}", __LINE__, str.length, cast(ubyte[])str );
     }
     assert( ate > 0 );
     assert( res.length is 1 );
@@ -461,7 +464,7 @@
     dchar[] res = str.toString32( buf, &ate );
     consumed = ate;
     if( ate is 0 || res.length is 0 ){
-        Trace.formatln( "dwthelper.utils {}: str.length={} str={:X2}", __LINE__, str.length, cast(ubyte[])str );
+        getDwtLogger().trace( "dwthelper.utils {}: str.length={} str={:X2}", __LINE__, str.length, cast(ubyte[])str );
     }
     assert( ate > 0 );
     assert( res.length is 1 );
@@ -485,17 +488,54 @@
 alias tango.text.convert.Utf.toString16 toString16;
 alias tango.text.convert.Utf.toString toString;
 
+int toAbsoluteCodePointStartOffset( String str, int index ){
+    //getDwtLogger().trace( "str={}, str.length={}, index={}", str, str.length, index );
+    //Trace.memory( str );
+    if( str.length is index ){
+        return index;
+    }
+    if( ( str[index] & 0x80 ) is 0x00 ) {
+        return index;
+    }
+    else{
+        int steps = 0;
+        while(( str[index] & 0xC0 ) is 0x80 ){
+            index--;
+            steps++;
+            if( steps > 3 || index < 0 ){
+                break;
+            }
+        }
+        if((( str[index] & 0xE0 ) is 0xC0) && ( steps <= 1 )){
+            // ok
+        }
+        else if((( str[index] & 0xF0 ) is 0xE0) && ( steps <= 2 )){
+            // ok
+        }
+        else if((( str[index] & 0xF8 ) is 0xF0) && ( steps <= 3 )){
+            // ok
+        }
+        else{
+            tango.text.convert.Utf.onUnicodeError( "invalid utf8 input to toAbsoluteCodePointStartOffset" );
+        }
+        return index;
+    }
+}
 int getRelativeCodePointOffset( String str, int startIndex, int searchRelCp ){
     return getAbsoluteCodePointOffset( str, startIndex, searchRelCp ) - startIndex;
 }
 int getAbsoluteCodePointOffset( String str, int startIndex, int searchRelCp ){
+
+    //getDwtLogger().trace( "str={}, str.length={}, startIndex={}, searchRelCp={}", str, str.length, startIndex, searchRelCp );
+    //Trace.memory( str );
+
     int ignore;
     int i = startIndex;
     if( searchRelCp > 0 ){
         while( searchRelCp !is 0 ){
 
             if( ( i < str.length )
-                && ( str[i] & 0x80 ) is 0x00 )
+            && (( str[i] & 0x80 ) is 0x00 ))
             {
                 i+=1;
             }
@@ -521,7 +561,7 @@
                 i+=4;
             }
             else{
-                Trace.formatln( "invalid utf8 characters:  {:X2}", cast(ubyte[]) str );
+                getDwtLogger().trace( "getAbsoluteCodePointOffset invalid utf8 characters:  {:X2}", cast(ubyte[]) str );
                 tango.text.convert.Utf.onUnicodeError( "invalid utf8 input", i );
             }
             searchRelCp--;
@@ -533,8 +573,6 @@
                 i--;
                 if( i < 0 ){
                     return startIndex-1;
-                    //Trace.formatln( "dwthelper.utils getRelativeCodePointOffset {}: str={}, startIndex={}, searchRelCp={}", __LINE__, str, startIndex, searchRelCp );
-                    //tango.text.convert.Utf.onUnicodeError( "invalid utf8 input", i );
                 }
             } while(( str[i] & 0xC0 ) is 0x80 );
             searchRelCp++;
@@ -560,8 +598,8 @@
                 i+=2;
             }
             else{
-                Trace.formatln( "invalid utf8 characters:  {:X2}", cast(ubyte[]) str );
-                tango.text.convert.Utf.onUnicodeError( "invalid utf8 input", i );
+                getDwtLogger().trace( "invalid utf16 characters:  {:X2}", cast(ubyte[]) str );
+                tango.text.convert.Utf.onUnicodeError( "invalid utf16 input", i );
             }
             searchRelCp--;
         }
@@ -572,8 +610,8 @@
                 i--;
                 if( i < 0 ){
                     return startIndex-1;
-                    //Trace.formatln( "dwthelper.utils getRelativeCodePointOffset {}: str={}, startIndex={}, searchRelCp={}", __LINE__, str, startIndex, searchRelCp );
-                    //tango.text.convert.Utf.onUnicodeError( "invalid utf8 input", i );
+                    //getDwtLogger().trace( "dwthelper.utils getRelativeCodePointOffset {}: str={}, startIndex={}, searchRelCp={}", __LINE__, str, startIndex, searchRelCp );
+                    //tango.text.convert.Utf.onUnicodeError( "invalid utf16 input", i );
                 }
             } while(( str[i] & 0xDC00 ) is 0xDC00 );
             searchRelCp++;
@@ -622,8 +660,8 @@
         res--;
         assert( tries-- > 0 );
     }
-    Trace.formatln( "utf8OffsetDecr {}->{}", offset, res );
-    Trace.memory( str );
+    getDwtLogger().trace( "utf8OffsetDecr {}->{}", offset, res );
+    //Trace.memory( str );
     return res;
 }
 
@@ -1040,7 +1078,7 @@
 void ExceptionPrintStackTrace( Exception e ){
     ExceptionPrintStackTrace( e, Stderr );
 }
-void ExceptionPrintStackTrace( Exception e, Print!(char) print ){
+void ExceptionPrintStackTrace( Exception e, FormatOutput!(char) print ){
     Exception exception = e;
     while( exception !is null ){
         print.formatln( "Exception in {}({}): {}", exception.file, exception.line, exception.msg );
@@ -1260,7 +1298,7 @@
     const start = 3;
     foreach( msg; e.info ){
         if( idx >= start && idx < start+deepth ) {
-            Trace.formatln( "{}: {}", prefix, msg );
+            getDwtLogger().trace( "{}: {}", prefix, msg );
         }
         idx++;
     }
--- a/dwt/dwthelper/utils.d.orig	Fri Mar 20 20:30:32 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1060 +0,0 @@
-/**
- * Authors: Frank Benoit <keinfarbton@googlemail.com>
- */
-module dwt.dwthelper.utils;
-
-public import dwt.dwthelper.System;
-public import Math = tango.math.Math;
-
-public import tango.core.Exception : IllegalArgumentException, IOException;
-
-import tango.io.Stdout;
-import tango.io.Print;
-static import tango.stdc.stringz;
-static import tango.text.Util;
-static import tango.text.Text;
-import tango.text.Unicode;
-import tango.text.convert.Utf;
-import tango.core.Exception;
-import tango.stdc.stdlib : exit;
-
-import tango.util.log.Trace;
-import tango.text.UnicodeData;
-static import tango.util.collection.model.Seq;
-
-alias char[] String;
-alias tango.text.Text.Text!(char) StringBuffer;
-
-void implMissing( String file, uint line ){
-    Stderr.formatln( "implementation missing in file {} line {}", file, line );
-    Stderr.formatln( "exiting ..." );
-    exit(1);
-}
-
-abstract class ArrayWrapper{
-}
-abstract class ValueWrapper{
-}
-
-class ArrayWrapperT(T) : ArrayWrapper {
-    public T[] array;
-    public this( T[] data ){
-        array = data;
-    }
-    public override int opEquals( Object o ){
-        if( auto other = cast(ArrayWrapperT!(T))o){
-            return array == other.array;
-        }
-        return false;
-    }
-    public override hash_t toHash(){
-        return (typeid(T[])).getHash(&array);
-    }
-}
-
-class ValueWrapperT(T) : ValueWrapper {
-    public T value;
-    public this( T data ){
-        value = data;
-    }
-    static if( is(T==class) || is(T==interface)){
-        public int opEquals( Object other ){
-            if( auto o = cast(ValueWrapperT!(T))other ){
-                return value == o.value;
-            }
-            if( auto o = cast(T)other ){
-                if( value is o ){
-                    return true;
-                }
-                if( value is null || o is null ){
-                    return false;
-                }
-                return value == o;
-            }
-            return false;
-        }
-    }
-    else{
-        public int opEquals( Object other ){
-            if( auto o = cast(ValueWrapperT!(T))other ){
-                return value == o.value;
-            }
-            return false;
-        }
-        public int opEquals( T other ){
-            return value == other;
-        }
-    }
-    public override hash_t toHash(){
-        return (typeid(T)).getHash(&value);
-    }
-}
-
-class Boolean : ValueWrapperT!(bool) {
-    public static Boolean TRUE;
-    public static Boolean FALSE;
-
-    static this(){
-        TRUE  = new Boolean(true);
-        FALSE = new Boolean(false);
-    }
-    public this( bool v ){
-        super(v);
-    }
-
-    alias ValueWrapperT!(bool).opEquals opEquals;
-    public int opEquals( int other ){
-        return value == ( other !is 0 );
-    }
-    public int opEquals( Object other ){
-        if( auto o = cast(Boolean)other ){
-            return value == o.value;
-        }
-        return false;
-    }
-    public bool booleanValue(){
-        return value;
-    }
-    public static Boolean valueOf( String s ){
-        if( s == "yes" || s == "true" ){
-            return TRUE;
-        }
-        return FALSE;
-    }
-    public static Boolean valueOf( bool b ){
-        return b ? TRUE : FALSE;
-    }
-}
-
-alias Boolean    ValueWrapperBool;
-
-
-class Byte : ValueWrapperT!(byte) {
-    public static byte parseByte( String s ){
-        try{
-            int res = tango.text.convert.Integer.parse( s );
-            if( res < byte.min || res > byte.max ){
-                throw new NumberFormatException( "out of range" );
-            }
-            return res;
-        }
-        catch( IllegalArgumentException e ){
-            throw new NumberFormatException( e );
-        }
-    }
-    this( byte value ){
-        super( value );
-    }
-}
-alias Byte ValueWrapperByte;
-
-
-class Integer : ValueWrapperT!(int) {
-
-    public static const int MIN_VALUE = 0x80000000;
-    public static const int MAX_VALUE = 0x7fffffff;
-    public static const int SIZE = 32;
-
-    public this ( int value ){
-        super( value );
-    }
-
-    public this ( String s ){
-        super(parseInt(s));
-    }
-
-    public static String toString( int i, int radix ){
-        switch( radix ){
-        case 2:
-            return toBinaryString(i);
-        case 8:
-            return toOctalString(i);
-        case 10:
-            return toString(i);
-        case 16:
-            return toHexString(i);
-        default:
-            implMissing( __FILE__, __LINE__ );
-            return null;
-        }
-    }
-
-    public static String toHexString( int i ){
-        return tango.text.convert.Integer.toString(i, "x" );
-    }
-
-    public static String toOctalString( int i ){
-        return tango.text.convert.Integer.toString(i, "o" );
-    }
-
-    public static String toBinaryString( int i ){
-        return tango.text.convert.Integer.toString(i, "b" );
-    }
-
-    public static String toString( int i ){
-        return tango.text.convert.Integer.toString(i);
-    }
-
-    public static int parseInt( String s, int radix ){
-        try{
-            return tango.text.convert.Integer.toLong( s, radix );
-        }
-        catch( IllegalArgumentException e ){
-            throw new NumberFormatException( e );
-        }
-    }
-
-    public static int parseInt( String s ){
-        try{
-            return tango.text.convert.Integer.toLong( s );
-        }
-        catch( IllegalArgumentException e ){
-            throw new NumberFormatException( e );
-        }
-    }
-
-    public static Integer valueOf( String s, int radix ){
-        implMissing( __FILE__, __LINE__ );
-        return null;
-    }
-
-    public static Integer valueOf( String s ){
-        return valueOf( parseInt(s));
-    }
-
-    public static Integer valueOf( int i ){
-        return new Integer(i);
-    }
-
-    public byte byteValue(){
-        return cast(byte)value;
-    }
-
-    public short shortValue(){
-        return cast(short)value;
-    }
-
-    public int intValue(){
-        return value;
-    }
-
-    public long longValue(){
-        return cast(long)value;
-    }
-
-    public float floatValue(){
-        return cast(float)value;
-    }
-
-    public double doubleValue(){
-        return cast(double)value;
-    }
-
-    public override  hash_t toHash(){
-        return intValue();
-    }
-
-    public override String toString(){
-        return tango.text.convert.Integer.toString( value );
-    }
-}
-alias Integer ValueWrapperInt;
-
-class Double : ValueWrapperT!(double) {
-    public static double MAX_VALUE = double.max;
-    public static double MIN_VALUE = double.min;
-    this( double value ){
-        super(value);
-    }
-    this( String str ){
-        implMissing( __FILE__, __LINE__ );
-        super(0.0);
-    }
-    public double doubleValue(){
-        return value;
-    }
-    public static String toString( double value ){
-        implMissing( __FILE__, __LINE__ );
-        return null;
-    }
-}
-
-class Float : ValueWrapperT!(float) {
-
-    public static float POSITIVE_INFINITY = (1.0f / 0.0f);
-    public static float NEGATIVE_INFINITY = ((-1.0f) / 0.0f);
-    public static float NaN = (0.0f / 0.0f);
-    public static float MAX_VALUE = 3.4028235e+38f;
-    public static float MIN_VALUE = 1.4e-45f;
-    public static int SIZE = 32;
-
-    this( float value ){
-        super(value);
-    }
-    this( String str ){
-        implMissing( __FILE__, __LINE__ );
-        super(0.0);
-    }
-    public float floatValue(){
-        return value;
-    }
-    public static String toString( float value ){
-        implMissing( __FILE__, __LINE__ );
-        return null;
-    }
-    public static float parseFloat( String s ){
-        try{
-            return tango.text.convert.Float.toFloat( s );
-        }
-        catch( IllegalArgumentException e ){
-            throw new NumberFormatException( e );
-        }
-    }
-
-}
-class Long : ValueWrapperT!(long) {
-    public static const long MIN_VALUE = long.min;
-    public static const long MAX_VALUE = long.max;
-    this( long value ){
-        super(value);
-    }
-    this( String str ){
-        implMissing( __FILE__, __LINE__ );
-        super(0);
-    }
-    public long longValue(){
-        return value;
-    }
-    public static long parseLong(String s){
-        implMissing( __FILE__, __LINE__ );
-        return 0;
-    }
-    public static String toString( double value ){
-        implMissing( __FILE__, __LINE__ );
-        return null;
-    }
-}
-alias Long ValueWrapperLong;
-
-
-// alias ValueWrapperT!(int)     ValueWrapperInt;
-
-alias ArrayWrapperT!(byte)    ArrayWrapperByte;
-alias ArrayWrapperT!(int)     ArrayWrapperInt;
-alias ArrayWrapperT!(Object)  ArrayWrapperObject;
-alias ArrayWrapperT!(char)    ArrayWrapperString;
-alias ArrayWrapperT!(String)  ArrayWrapperString2;
-
-Object[] StringArrayToObjectArray( String[] strs ){
-    Object[] res = new Object[strs.length];
-    foreach( idx, str; strs ){
-        res[idx] = new ArrayWrapperString(str);
-    }
-    return res;
-}
-int codepointIndexToIndex( String str, int cpIndex ){
-    int cps = cpIndex;
-    int res = 0;
-    while( cps > 0 ){
-        cps--;
-        if( str[res] < 0x80 ){
-            res+=1;
-        }
-        else if( str[res] < 0xE0 ){
-            res+=2;
-        }
-        else if( str[res] & 0xF0 ){
-            res+=3;
-        }
-        else{
-            res+=4;
-        }
-    }
-    return res;
-}
-
-/++
- +
- +/
-int indexToCodepointIndex( String str, int index ){
-    if( index < 0 ) return index;
-    int i = 0;
-    int res = 0;
-    while( i < index ){
-        if( i >= str.length ){
-            break;
-        }
-        if( str[i] < 0x80 ){
-            i+=1;
-        }
-        else if( str[i] < 0xE0 ){
-            i+=2;
-        }
-        else if( str[i] & 0xF0 ){
-            i+=3;
-        }
-        else{
-            i+=4;
-        }
-        res++;
-    }
-    return res;
-}
-
-/++
- + Get that String, that contains the next codepoint of a String.
- +/
-String firstCodePointStr( String str, out int consumed ){
-    dchar[1] buf;
-    uint ate;
-    dchar[] res = str.toString32( buf, &ate );
-    consumed = ate;
-    return str[ 0 .. ate ];
-}
-
-/++
- + Get first codepoint of a String. If an offset is needed, simply use a slice:
- + ---
- + dchar res = str[ offset .. $ ].firstCodePoint();
- + ---
- +/
-dchar firstCodePoint( String str ){
-    int dummy;
-    return firstCodePoint( str, dummy );
-}
-dchar firstCodePoint( String str, out int consumed ){
-    dchar[1] buf;
-    uint ate;
-    dchar[] res = str.toString32( buf, &ate );
-    consumed = ate;
-    if( ate is 0 || res.length is 0 ){
-        Trace.formatln( "dwthelper.utils {}: str.length={} str={:X2}", __LINE__, str.length, cast(ubyte[])str );
-    }
-    assert( ate > 0 );
-    assert( res.length is 1 );
-    return res[0];
-}
-
-String dcharToString( dchar key ){
-    dchar[1] buf;
-    buf[0] = key;
-    return tango.text.convert.Utf.toString( buf );
-}
-
-int codepointCount( String str ){
-    scope dchar[] buf = new dchar[]( str.length );
-    uint ate;
-    dchar[] res = tango.text.convert.Utf.toString32( str, buf, &ate );
-    assert( ate is str.length );
-    return res.length;
-}
-
-alias tango.text.convert.Utf.toString16 toString16;
-alias tango.text.convert.Utf.toString toString;
-
-int length( String str ){
-    return str.length;
-}
-
-int getRelativeCodePointOffset( String str, int startIndex, int searchRelCp ){
-    int ignore;
-    int i = startIndex;
-    if( searchRelCp > 0 ){
-        while( searchRelCp !is 0 ){
-
-            if( ( i < str.length )
-                && ( str[i] & 0x80 ) is 0x00 )
-            {
-                i+=1;
-            }
-            else if( ( i+1 < str.length )
-                && (( str[i+1] & 0xC0 ) is 0x80 )
-                && (( str[i  ] & 0xE0 ) is 0xC0 ))
-            {
-                i+=2;
-            }
-            else if( ( i+2 < str.length )
-                && (( str[i+2] & 0xC0 ) is 0x80 )
-                && (( str[i+1] & 0xC0 ) is 0x80 )
-                && (( str[i  ] & 0xF0 ) is 0xE0 ))
-            {
-                i+=3;
-            }
-            else if(( i+3 < str.length )
-                && (( str[i+3] & 0xC0 ) is 0x80 )
-                && (( str[i+2] & 0xC0 ) is 0x80 )
-                && (( str[i+1] & 0xC0 ) is 0x80 )
-                && (( str[i  ] & 0xF8 ) is 0xF0 ))
-            {
-                i+=4;
-            }
-            else{
-                Trace.formatln( "invalid utf8 characters:  {:X2}", cast(ubyte[]) str );
-                tango.text.convert.Utf.onUnicodeError( "invalid utf8 input", i );
-            }
-            searchRelCp--;
-        }
-    }
-    else if( searchRelCp < 0 ){
-        while( searchRelCp !is 0 ){
-            do{
-                i--;
-                if( i < 0 ){
-                    return -1;
-                    //Trace.formatln( "dwthelper.utils getRelativeCodePointOffset {}: str={}, startIndex={}, searchRelCp={}", __LINE__, str, startIndex, searchRelCp );
-                    //tango.text.convert.Utf.onUnicodeError( "invalid utf8 input", i );
-                }
-            } while(( str[i] & 0xC0 ) is 0x80 );
-            searchRelCp++;
-        }
-    }
-    return i - startIndex;
-}
-dchar getRelativeCodePoint( String str, int startIndex, int searchRelCp, out int relIndex ){
-    relIndex = getRelativeCodePointOffset( str, startIndex, searchRelCp );
-    int ignore;
-    return firstCodePoint( str[ startIndex+relIndex .. $ ], ignore );
-}
-
-int utf8AdjustOffset( String str, int offset ){
-    if( str.length <= offset || offset <= 0 ){
-        return offset;
-    }
-    while(( str[offset] & 0xC0 ) is 0x80 ){
-        offset--;
-    }
-    return offset;
-}
-int utf8OffsetIncr( String str, int offset ){
-    int res = offset +1;
-    if( str.length <= res || res <= 0 ){
-        return res;
-    }
-    int tries = 4;
-    while(( str[res] & 0xC0 ) is 0x80 ){
-        res++;
-        assert( tries-- > 0 );
-    }
-    return res;
-}
-int utf8OffsetDecr( String str, int offset ){
-    int res = offset-1;
-    if( str.length <= res || res <= 0 ){
-        return res;
-    }
-    int tries = 4;
-    while(( str[res] & 0xC0 ) is 0x80 ){
-        res--;
-        assert( tries-- > 0 );
-    }
-    Trace.formatln( "utf8OffsetDecr {}->{}", offset, res );
-    Trace.memory( str );
-    return res;
-}
-
-bool CharacterIsDefined( dchar ch ){
-    return (ch in tango.text.UnicodeData.unicodeData) !is null;
-}
-dchar CharacterFirstToLower( String str ){
-    int consumed;
-    return CharacterFirstToLower( str, consumed );
-}
-dchar CharacterFirstToLower( String str, out int consumed ){
-    dchar[1] buf;
-    buf[0] = firstCodePoint( str, consumed );
-    dchar[] r = tango.text.Unicode.toLower( buf );
-    return r[0];
-}
-
-dchar CharacterToLower( dchar c ){
-    dchar[] r = tango.text.Unicode.toLower( [c] );
-    return r[0];
-}
-dchar CharacterToUpper( dchar c ){
-    dchar[] r = tango.text.Unicode.toUpper( [c] );
-    return r[0];
-}
-bool CharacterIsWhitespace( dchar c ){
-    return tango.text.Unicode.isWhitespace( c );
-}
-bool CharacterIsDigit( dchar c ){
-    return tango.text.Unicode.isDigit( c );
-}
-bool CharacterIsLetter( dchar c ){
-    return tango.text.Unicode.isLetter( c );
-}
-public String toUpperCase( String str ){
-    return tango.text.Unicode.toUpper( str );
-}
-
-public int indexOf( String str, char searched ){
-    int res = tango.text.Util.locate( str, searched );
-    if( res is str.length ) res = -1;
-    return res;
-}
-
-public int indexOf( String str, char searched, int startpos ){
-    int res = tango.text.Util.locate( str, searched, startpos );
-    if( res is str.length ) res = -1;
-    return res;
-}
-
-public int indexOf(String str, String ch){
-    return indexOf( str, ch, 0 );
-}
-
-public int indexOf(String str, String ch, int start){
-    int res = tango.text.Util.locatePattern( str, ch, start );
-    if( res is str.length ) res = -1;
-    return res;
-}
-
-public int lastIndexOf(String str, char ch){
-    return lastIndexOf( str, ch, str.length );
-}
-public int lastIndexOf(String str, char ch, int formIndex){
-    int res = tango.text.Util.locatePrior( str, ch, formIndex );
-    if( res is str.length ) res = -1;
-    return res;
-}
-public int lastIndexOf(String str, String ch ){
-    return lastIndexOf( str, ch, str.length );
-}
-public int lastIndexOf(String str, String ch, int start ){
-    int res = tango.text.Util.locatePatternPrior( str, ch, start );
-    if( res is str.length ) res = -1;
-    return res;
-}
-
-public String replace( String str, char from, char to ){
-    return tango.text.Util.replace( str.dup, from, to );
-}
-
-public String substring( String str, int start ){
-    return str[ start .. $ ].dup;
-}
-
-public String substring( String str, int start, int end ){
-    return str[ start .. end ].dup;
-}
-
-public wchar[] substring( wchar[] str, int start ){
-    return str[ start .. $ ].dup;
-}
-
-public wchar[] substring( wchar[] str, int start, int end ){
-    return str[ start .. end ].dup;
-}
-
-public char charAt( String str, int pos ){
-    return str[ pos ];
-}
-
-public void getChars( String src, int srcBegin, int srcEnd, String dst, int dstBegin){
-    dst[ dstBegin .. dstBegin + srcEnd - srcBegin ] = src[ srcBegin .. srcEnd ];
-}
-
-public wchar[] toCharArray( String str ){
-    return toString16( str );
-}
-
-public bool endsWith( String src, String pattern ){
-    if( src.length < pattern.length ){
-        return false;
-    }
-    return src[ $-pattern.length .. $ ] == pattern;
-}
-
-public bool equals( String src, String other ){
-    return src == other;
-}
-
-public bool equalsIgnoreCase( String src, String other ){
-    return tango.text.Unicode.toFold(src) == tango.text.Unicode.toFold(other);
-}
-
-public int compareToIgnoreCase( String src, String other ){
-    return compareTo( tango.text.Unicode.toFold(src), tango.text.Unicode.toFold(other));
-}
-public int compareTo( String src, String other ){
-    return typeid(String).compare( cast(void*)&src, cast(void*)&other );
-}
-
-public bool startsWith( String src, String pattern ){
-    if( src.length < pattern.length ){
-        return false;
-    }
-    return src[ 0 .. pattern.length ] == pattern;
-}
-
-public String toLowerCase( String src ){
-    return tango.text.Unicode.toLower( src );
-}
-
-public hash_t toHash( String src ){
-    return typeid(String).getHash(&src);
-}
-
-public String trim( String str ){
-    return tango.text.Util.trim( str ).dup;
-}
-public String intern( String str ){
-    return str;
-}
-
-public char* toStringzValidPtr( String src ){
-    if( src ){
-        return src.toStringz();
-    }
-    else{
-        static const String nullPtr = "\0";
-        return nullPtr.ptr;
-    }
-}
-
-public alias tango.stdc.stringz.toStringz toStringz;
-public alias tango.stdc.stringz.toString16z toString16z;
-public alias tango.stdc.stringz.fromStringz fromStringz;
-public alias tango.stdc.stringz.fromString16z fromString16z;
-
-static String toHex(uint value, bool prefix = true, int radix = 8){
-    return tango.text.convert.Integer.toString(
-            value,
-            radix is 10 ? "d" :
-            radix is  8 ? "o" :
-            radix is 16 ? "x" :
-                          "d" );
-}
-
-class RuntimeException : Exception {
-    this( String e = null){
-        super(e);
-    }
-    this( Exception e ){
-        super(e.toString);
-        next = e;
-    }
-    public Exception getCause() {
-        return next;
-    }
-
-}
-class IndexOutOfBoundsException : Exception {
-    this( String e = null){
-        super(e);
-    }
-}
-
-class UnsupportedOperationException : RuntimeException {
-    this( String e = null){
-        super(e);
-    }
-    this( Exception e ){
-        super(e.toString);
-    }
-}
-class NumberFormatException : IllegalArgumentException {
-    this( String e ){
-        super(e);
-    }
-    this( Exception e ){
-        super(e.toString);
-    }
-}
-class NullPointerException : Exception {
-    this( String e = null ){
-        super(e);
-    }
-    this( Exception e ){
-        super(e.toString);
-    }
-}
-class IllegalStateException : Exception {
-    this( String e = null ){
-        super(e);
-    }
-    this( Exception e ){
-        super(e.toString);
-    }
-}
-class InterruptedException : Exception {
-    this( String e = null ){
-        super(e);
-    }
-    this( Exception e ){
-        super(e.toString);
-    }
-}
-class InvocationTargetException : Exception {
-    Exception cause;
-    this( Exception e = null, String msg = null ){
-        super(msg);
-        cause = e;
-    }
-
-    alias getCause getTargetException;
-    Exception getCause(){
-        return cause;
-    }
-}
-class MissingResourceException : Exception {
-    String classname;
-    String key;
-    this( String msg, String classname, String key ){
-        super(msg);
-        this.classname = classname;
-        this.key = key;
-    }
-}
-class ParseException : Exception {
-    this( String e = null ){
-        super(e);
-    }
-}
-
-interface Cloneable{
-}
-
-interface Comparable {
-    int compareTo(Object o);
-}
-interface Comparator {
-    int compare(Object o1, Object o2);
-}
-interface EventListener{
-}
-
-class EventObject {
-    protected Object source;
-
-    public this(Object source) {
-        if (source is null)
-        throw new IllegalArgumentException( "null arg" );
-        this.source = source;
-    }
-
-    public Object getSource() {
-        return source;
-    }
-
-    public override String toString() {
-        return this.classinfo.name ~ "[source=" ~ source.toString() ~ "]";
-    }
-}
-
-private struct GCStats {
-    size_t poolsize;        // total size of pool
-    size_t usedsize;        // bytes allocated
-    size_t freeblocks;      // number of blocks marked FREE
-    size_t freelistsize;    // total of memory on free lists
-    size_t pageblocks;      // number of blocks marked PAGE
-}
-private extern(C) GCStats gc_stats();
-
-size_t RuntimeTotalMemory(){
-    GCStats s = gc_stats();
-    return s.poolsize;
-}
-
-String ExceptionGetLocalizedMessage( Exception e ){
-    return e.msg;
-}
-
-void ExceptionPrintStackTrace( Exception e ){
-    ExceptionPrintStackTrace( e, Stderr );
-}
-void ExceptionPrintStackTrace( Exception e, Print!(char) print ){
-    Exception exception = e;
-    while( exception !is null ){
-        print.formatln( "Exception in {}({}): {}", exception.file, exception.line, exception.msg );
-        if( exception.info !is null ){
-            foreach( msg; exception.info ){
-                print.formatln( "trc {}", msg );
-            }
-        }
-        exception = exception.next;
-    }
-}
-
-interface Reader{
-}
-interface Writer{
-}
-
-
-class Collator : Comparator {
-    public static Collator getInstance(){
-        implMissing( __FILE__, __LINE__ );
-        return null;
-    }
-    private this(){
-    }
-    int compare(Object o1, Object o2){
-        implMissing( __FILE__, __LINE__ );
-        return 0;
-    }
-}
-
-template arraycast(T) {
-    T[] arraycast(U) (U[] u) {
-        static if (
-            (is (T == interface ) && is (U == interface )) ||
-            (is (T == class ) && is (U == class ))) {
-            return(cast(T[])u);
-        }
-        else {
-            int l = u.length;
-            T[] res;
-            res.length = l;
-            for (int i = 0; i < l; i++) {
-                res[i] = cast(T)u[i];
-            }
-            return(res);
-        }
-    }
-}
-
-String stringcast( Object o ){
-    if( auto str = cast(ArrayWrapperString) o ){
-        return str.array;
-    }
-    return null;
-}
-String[] stringcast( Object[] objs ){
-    String[] res = new String[](objs.length);
-    foreach( idx, obj; objs ){
-        res[idx] = stringcast(obj);
-    }
-    return res;
-}
-ArrayWrapperString stringcast( String str ){
-    return new ArrayWrapperString( str );
-}
-ArrayWrapperString[] stringcast( String[] strs ){
-    ArrayWrapperString[] res = new ArrayWrapperString[ strs.length ];
-    foreach( idx, str; strs ){
-        res[idx] = stringcast(str);
-    }
-    return res;
-}
-
-String[] stringArrayFromObject( Object obj ){
-    if( auto wrapper = cast(ArrayWrapperString2)obj ){
-        return wrapper.array;
-    }
-    if( auto wrapper = cast(ArrayWrapperObject)obj ){
-        String[] res = new String[ wrapper.array.length ];
-        foreach( idx, o; wrapper.array ){
-            if( auto swrapper = cast(ArrayWrapperString) o ){
-                res[idx] = swrapper.array;
-            }
-        }
-        return res;
-    }
-    assert( obj is null ); // if not null, it was the wrong type
-    return null;
-}
-
-T[] arrayFromObject(T)( Object obj ){
-    if( auto wrapper = cast(ArrayWrapperObject)obj ){
-        T[] res = new T[ wrapper.array.length ];
-        foreach( idx, o; wrapper.array ){
-            res[idx] = cast(T)o;
-        }
-        return res;
-    }
-    assert( obj is null ); // if not null, it was the wrong type
-    return null;
-}
-
-
-bool ArrayEquals(T)( T[] a, T[] b ){
-    if( a.length !is b.length ){
-        return false;
-    }
-    for( int i = 0; i < a.length; i++ ){
-        static if( is( T==class) || is(T==interface)){
-            if( a[i] !is null && b[i] !is null ){
-                if( a[i] != b[i] ){
-                    return false;
-                }
-            }
-            else if( a[i] is null && b[i] is null ){
-            }
-            else{
-                return false;
-            }
-        }
-        else{
-            if( a[i] != b[i] ){
-                return false;
-            }
-        }
-    }
-    return true;
-}
-
-int SeqIndexOf(T)( tango.util.collection.model.Seq.Seq!(T) s, T src ){
-    int idx;
-    foreach( e; s ){
-        if( e == src ){
-            return idx;
-        }
-        idx++;
-    }
-    return -1;
-}
-int arrayIndexOf(T)( T[] arr, T v ){
-    int res = -1;
-    int idx = 0;
-    foreach( p; arr ){
-        if( p == v){
-            res = idx;
-            break;
-        }
-        idx++;
-    }
-    return res;
-}
-
-int seqIndexOf( tango.util.collection.model.Seq.Seq!(Object) seq, Object v ){
-    int res = -1;
-    int idx = 0;
-    foreach( p; seq ){
-        if( p == v){
-            res = idx;
-            break;
-        }
-        idx++;
-    }
-    return res;
-}
-
-void PrintStackTrace( int deepth = 100, String prefix = "trc" ){
-    auto e = new Exception( null );
-    int idx = 0;
-    const start = 3;
-    foreach( msg; e.info ){
-        if( idx >= start && idx < start+deepth ) {
-            Trace.formatln( "{}: {}", prefix, msg );
-        }
-        idx++;
-    }
-}
-
-struct ImportData{
-    void[] data;
-    String name;
-
-    public static ImportData opCall( void[] data, String name ){
-        ImportData res;
-        res.data = data;
-        res.name = name;
-        return res;
-    }
-}
-
-template getImportData(String name ){
-    const ImportData getImportData = ImportData( import(name), name );
-}
-
--- a/dwt/graphics/Device.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/graphics/Device.d	Fri Mar 20 21:00:06 2009 +0100
@@ -28,7 +28,6 @@
 import dwt.dwthelper.utils;
 
 import tango.core.Exception;
-import tango.io.Stdout;
 
 /**
  * This class is the abstract superclass of all device objects,
@@ -841,7 +840,7 @@
         if (device.warningLevel is 0) {
             if (DEBUG || device.debugging) {
                 foreach( msg; (new Exception ("")).info ){
-                    Stderr.formatln( "trc {}", msg );
+                    getDwtLogger().error( "{}", msg );
                 }
             }
             //PORTING_FIXME ??
@@ -860,13 +859,13 @@
     if (device !is null) {
         if (DEBUG || device.debugging) {
             foreach( msg; (new Exception ("")).info ){
-                Stderr.formatln( "trc {}", msg );
+                getDwtLogger().error( "trc {}", msg );
             }
         }
     } else {
         if (DEBUG) {
             foreach( msg; (new Exception ("")).info ){
-                Stderr.formatln( "trc {}", msg );
+                getDwtLogger().error( "{}", msg );
             }
         }
     }
--- a/dwt/graphics/FontData.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/graphics/FontData.d	Fri Mar 20 21:00:06 2009 +0100
@@ -19,7 +19,6 @@
 import tango.text.Util : locate;
 import tango.util.Convert;
 import dwt.dwthelper.utils;
-import tango.util.log.Trace;
 
 /**
  * Instances of this class describe operating system fonts.
@@ -277,7 +276,7 @@
             result = result[0 .. $ - 1];
         }
     }
-Trace.formatln( "getLocal {}", result );
+getDwtLogger().trace( "getLocal {}", result );
     return result;
 }
 
@@ -364,7 +363,7 @@
  * @see java.util.Locale#toString
  */
 public void setLocale(String locale) {
-Trace.formatln( "setLocal {}", locale );
+getDwtLogger().trace( "setLocal {}", locale );
     lang = country = variant = null;
     if (locale !is null) {
         char sep = '_';
--- a/dwt/internal/c/glx.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/internal/c/glx.d	Fri Mar 20 21:00:06 2009 +0100
@@ -12,7 +12,6 @@
 
 version(DYNLINK){
     import tango.sys.SharedLib : SharedLib;
-    import tango.util.log.Trace;
     struct Symbol{
         String name;
         void** symbol;
@@ -35,11 +34,11 @@
                 }
                 catch(Exception e){}
                 if( *s.symbol is null ){
-                    Trace.formatln( "{}: Symbol '{}' not found", libname, s.name );
+                    getDwtLogger().trace( "{}: Symbol '{}' not found", libname, s.name );
                 }
             }
         } else {
-            Trace.formatln( "Could not load the library {}", libname );
+            getDwtLogger().trace( "Could not load the library {}", libname );
         }
     }
 }
--- a/dwt/internal/c/gtk.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/internal/c/gtk.d	Fri Mar 20 21:00:06 2009 +0100
@@ -27,7 +27,6 @@
 
 
     import tango.sys.SharedLib : SharedLib;
-    import tango.util.log.Trace;
     struct Symbol{
         String name;
         void** symbol;
@@ -50,14 +49,14 @@
                 }
                 catch(Exception e){}
                 if( *s.symbol is null ){
-                    //Trace.formatln( "{}: Symbol '{}' not found", libname, s.name );
+                    //getDwtLogger().trace( "{}: Symbol '{}' not found", libname, s.name );
                 }
                 else{
                     loaded++;
                 }
             }
         } else {
-            Trace.formatln( "Could not load the library {}", libname );
+            getDwtLogger().trace( "Could not load the library {}", libname );
         }
         assert( gtk_check_version !is null );
     }
--- a/dwt/internal/c/gtk_unix_print_2_0.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/internal/c/gtk_unix_print_2_0.d	Fri Mar 20 21:00:06 2009 +0100
@@ -10,7 +10,6 @@
 
 version(DYNLINK){
     import tango.sys.SharedLib : SharedLib;
-    import tango.util.log.Trace;
     struct Symbol{
         String name;
         void** symbol;
@@ -33,11 +32,11 @@
                 }
                 catch(Exception e){}
                 if( *s.symbol is null ){
-                    Trace.formatln( "{}: Symbol '{}' not found", libname, s.name );
+                    getDwtLogger().trace( "{}: Symbol '{}' not found", libname, s.name );
                 }
             }
         } else {
-            Trace.formatln( "Could not load the library {}", libname );
+            getDwtLogger().trace( "Could not load the library {}", libname );
         }
     }
 }
--- a/dwt/internal/c/pango.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/internal/c/pango.d	Fri Mar 20 21:00:06 2009 +0100
@@ -12,7 +12,6 @@
 
 version(DYNLINK){
     import tango.sys.SharedLib : SharedLib;
-    import tango.util.log.Trace;
     struct Symbol{
         String name;
         void** symbol;
@@ -35,14 +34,14 @@
                 }
                 catch(Exception e){}
                 if( *s.symbol is null ){
-                    Trace.formatln( "{}: Symbol '{}' not found", libname, s.name );
+                    getDwtLogger().trace( "{}: Symbol '{}' not found", libname, s.name );
                 }
                 else{
                     loaded++;
                 }
             }
         } else {
-            Trace.formatln( "Could not load the library {}", libname );
+            getDwtLogger().trace( "Could not load the library {}", libname );
         }
     }
 }
--- a/dwt/internal/gtk/OS.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/internal/gtk/OS.d	Fri Mar 20 21:00:06 2009 +0100
@@ -21,7 +21,6 @@
 import tango.core.Traits;
 import tango.stdc.locale;
 import tango.stdc.posix.stdlib : realpath;
-import tango.util.log.Trace;
 
 import  dwt.internal.c.gtk,
         dwt.internal.c.gdk,
--- a/dwt/printing/Printer.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/printing/Printer.d	Fri Mar 20 21:00:06 2009 +0100
@@ -28,7 +28,6 @@
 import dwt.printing.PrinterData;
 import dwt.dwthelper.utils;
 
-import tango.io.Stdout;
 import tango.util.Convert;
 
 
@@ -205,7 +204,7 @@
         char [] valueBuffer = new char [end - start];
         System.arraycopy (settingsData, start, valueBuffer, 0, valueBuffer.length);
         OS.gtk_print_settings_set(settings, keyBuffer.ptr, valueBuffer.ptr);
-        if (DEBUG) Stdout.formatln("{}: {}", keyBuffer, valueBuffer );
+        if (DEBUG) getDwtLogger().info("{}: {}", keyBuffer, valueBuffer );
     }
     end++; // skip extra null terminator
 
@@ -338,7 +337,7 @@
     char [] valueBuffer = new char [length_];
     System.arraycopy (settingsData, start, valueBuffer, 0, length_);
 
-    if (DEBUG) tango.io.Stdout.Stdout.formatln( "{}: {}", keyBuffer, valueBuffer );
+    if (DEBUG) getDwtLogger().info( "{}: {}", keyBuffer, valueBuffer );
 
     return valueBuffer;
 }
@@ -604,7 +603,7 @@
 public override Point getDPI() {
     checkDevice();
     int resolution = OS.gtk_print_settings_get_resolution(settings);
-    if (DEBUG) tango.io.Stdout.Stdout.formatln("print_settings.resolution={}", resolution);
+    if (DEBUG) getDwtLogger().info("print_settings.resolution={}", resolution);
     //TODO: Return 72 (1/72 inch = 1 point) until gtk bug 346245 is fixed
     //TODO: Fix this: gtk_print_settings_get_resolution returns 0? (see gtk bug 346252)
     if (true || resolution is 0) return new Point(72, 72);
--- a/dwt/program/Program.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/program/Program.d	Fri Mar 20 21:00:06 2009 +0100
@@ -32,7 +32,7 @@
 } else {
 import tango.io.FileConduit;
 }
-import tango.text.stream.LineIterator;
+import tango.io.stream.Lines;
 
 version( build ){
     pragma(link, "gnomeui-2" );
@@ -602,7 +602,7 @@
         scope file = new tango.io.device.File.File ("/usr/share/mime/globs");
     else
         scope file = new FileConduit ("/usr/share/mime/globs");
-    scope it = new LineIterator!(char)(file);
+    scope it = new Lines!(char)(file);
     // process file one line at a time
     String[][ String ] mimeInfo;
     foreach (line; it ){
--- a/dwt/widgets/Button.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/widgets/Button.d	Fri Mar 20 21:00:06 2009 +0100
@@ -26,7 +26,6 @@
 import dwt.widgets.TypedListener;
 import dwt.widgets.Decorations;
 
-import tango.io.Stdout;
 
 /**
  * Instances of this class represent a selectable user interface object that
--- a/dwt/widgets/Composite.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/widgets/Composite.d	Fri Mar 20 21:00:06 2009 +0100
@@ -33,8 +33,6 @@
 import dwt.graphics.Rectangle;
 import dwt.dwthelper.utils;
 
-import tango.io.Stdout;
-
 /**
  * Instances of this class are controls which are capable
  * of containing other controls.
--- a/dwt/widgets/Control.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/widgets/Control.d	Fri Mar 20 21:00:06 2009 +0100
@@ -58,7 +58,6 @@
 
 import Math = tango.math.Math;
 import tango.core.Thread;
-import tango.io.Stdout;
 
 
 /**
--- a/dwt/widgets/Display.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/widgets/Display.d	Fri Mar 20 21:00:06 2009 +0100
@@ -48,7 +48,6 @@
 import dwt.dwthelper.Runnable;
 
 import tango.core.Thread;
-import tango.io.Stdout;
 
 /**
  * Instances of this class are responsible for managing the
@@ -614,7 +613,7 @@
     OS.gtk_container_forall (cast(GtkContainer*)widget, cast(GtkCallback)&allChildrenProcFunc, &allChildrenProcCallbackData);
 }
 private static extern(C) int /*long*/ allChildrenProcFunc (GtkWidget* handle, void* user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)user_data;
     return cbdata.display.allChildrenProc( cast(GtkWidget*)handle, cast(int)cbdata.data );
 }
@@ -746,7 +745,7 @@
     GtkTreeIter *iter,
     void* data)
 {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)data;
     return cbdata.display.cellDataProc( tree_column, cell, tree_model, iter, cbdata.data );
 }
@@ -781,7 +780,7 @@
 }
 
 private static extern(C) int checkIfEventProcFunc (void* display, XEvent* xEvent, char* userData) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto disp = cast(Display)userData;
     return disp.checkIfEventProcMeth( display, xEvent );
 }
@@ -916,7 +915,7 @@
 }
 
 private static extern(C) int XErrorHandler( void*, XErrorEvent* ){
-    Stdout.formatln ("*** XError" );
+    getDwtLogger().error ("*** XError" );
     byte* p;
     *p = 3;
     return 0;
@@ -940,10 +939,10 @@
     char* ptr = OS.gtk_check_version (MAJOR, MINOR, MICRO);
     if (ptr !is null) {
         char [] buffer = fromStringz(ptr);
-        Stdout.formatln ("***WARNING: {}", buffer );
-        Stdout.formatln ("***WARNING: DWT requires GTK {}.{}.{}", MAJOR, MINOR, MICRO );
+        getDwtLogger().warn ("***WARNING: {}", buffer );
+        getDwtLogger().warn ("***WARNING: DWT requires GTK {}.{}.{}", MAJOR, MINOR, MICRO );
         int major = OS.gtk_major_version (), minor = OS.gtk_minor_version (), micro = OS.gtk_micro_version ();
-        Stdout.formatln ("***WARNING: Detected: {}.{}.{}", major, minor, micro);
+        getDwtLogger().warn ("***WARNING: Detected: {}.{}.{}", major, minor, micro);
     }
     if (fixed_type is 0) {
         GTypeInfo* fixed_info = new GTypeInfo ();
@@ -1205,7 +1204,7 @@
 }
 
 private static extern(C) void eventProcFunc (GdkEvent* event, void* data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     Display disp = cast(Display)data;
     disp.eventProcMeth(event);
 }
@@ -1320,7 +1319,7 @@
 }
 
 private static extern(C) void fixedClassInitProcFunc (void* g_class, void* class_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     GtkWidgetClass* klass = cast(GtkWidgetClass*)g_class;
     klass.map = &fixedMapProcFunc;
     oldFixedSizeAllocateProc = klass.size_allocate;
@@ -1328,7 +1327,7 @@
 }
 
 private static extern(C)  void fixedMapProcFunc (GtkWidget * handle) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     Display display = getCurrent ();
     Widget widget = display.getWidget (handle);
     if (widget !is null) widget.fixedMapProc (handle);
@@ -1342,7 +1341,7 @@
 }
 
 private static extern(C) void rendererClassInitProcFunc (void* g_class, void* class_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     GtkCellRendererClass* klass = cast(GtkCellRendererClass*)g_class;
     klass.render = &rendererRenderProcFunc;
     klass.get_size = &rendererGetSizeProcFunc;
@@ -1357,13 +1356,13 @@
     int                  *width,
     int                  *height)
 {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     Display display = getCurrent ();
     Widget widget = display.getWidget (handle);
     if (widget !is null) widget.rendererGetSizeProc (cell, handle, cell_area, x_offset, y_offset, width, height);
 }
 private static extern(C) void rendererRenderProcFunc(GtkCellRenderer * cell, GdkDrawable * window, GtkWidget * handle, GdkRectangle *background_area, GdkRectangle *cell_area, GdkRectangle *expose_area, int flags){
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     Display display = getCurrent ();
     Widget widget = display.getWidget (handle);
     if (widget !is null) widget.rendererRenderProc (cell, window, handle, background_area, cell_area, expose_area, flags);
@@ -1516,7 +1515,7 @@
 }
 
 private static extern(C) int filterProcFunc (GdkXEvent* xEvent, GdkEvent* gdkEvent, void* data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto callbackdata = cast(CallbackData*)data;
     auto disp = callbackdata.display;
     if( disp is null ) return 0;
@@ -2355,7 +2354,7 @@
 }
 
 private static extern(C) int idleProcFunc (void* data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto dbdata = cast(CallbackData*)data;
     return dbdata.display.idleProc();
 }
@@ -2797,7 +2796,7 @@
 }
 
 private static extern(C) void menuPositionProcFunc (GtkMenu* menu, int* x, int* y, int* push_in, void* user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto display = cast(Display)user_data;
     display.menuPositionProc( menu, x, y, push_in, null );
 }
@@ -2876,7 +2875,7 @@
 }
 
 private static extern(C) int /*long*/ mouseHoverProcFunc ( void* user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)user_data;
     return cbdata.display.mouseHoverProc( cast(GtkWidget*)cbdata.data );
 }
@@ -3650,7 +3649,7 @@
 }
 
 package static extern(C) int /*long*/ setDirectionProcFunc (GtkWidget* widget, void* data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)data;
     return cbdata.display.setDirectionProc( widget, cast(int)cbdata.data );
 }
@@ -3899,7 +3898,7 @@
 
 
 private static extern(C) int timerProcFunc ( void * data ) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast( CallbackData* ) data;
     return cbdata.display.timerProc( cast(int) cbdata.data );
 }
@@ -3917,7 +3916,7 @@
 }
 
 private static extern(C) int caretProcFunc ( void * data ) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast( CallbackData* ) data;
     return cbdata.display.caretProc( cast(int) cbdata.data );
 }
@@ -3946,7 +3945,7 @@
 }
 
 private static extern(C) void sizeAllocateProcFunc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto cbdata = cast(CallbackData*)user_data;
     cbdata.display.sizeAllocateProc( cast(GtkWidget*)handle, arg0, cast(int)cbdata.data );
 }
@@ -3965,7 +3964,7 @@
 }
 
 private static extern(C) void  sizeRequestProcFunc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto cbdata = cast(CallbackData*)user_data;
     cbdata.display.sizeRequestProcMeth( cast(GtkWidget*)handle, arg0, cast(int)cbdata.data );
 }
@@ -3983,7 +3982,7 @@
 }
 
 private static extern(C) void  treeSelectionProcFunc (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, void* data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto cbdata = cast(CallbackData*)data;
     cbdata.display.treeSelectionProcMeth( model, path, iter, cbdata.data );
 }
@@ -4049,7 +4048,7 @@
 }
 
 private static extern(C) int /*long*/ shellMapProcFunc (int /*long*/ handle, int /*long*/ arg0, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto cbdata = cast(CallbackData*)user_data;
     return cbdata.display.shellMapProc( cast(GtkWidget*)handle, arg0, cast(int)cbdata.data );
 }
@@ -4061,7 +4060,7 @@
 }
 
 private static extern(C) int /*long*/ styleSetProcFunc (int /*long*/ gobject, int /*long*/ arg1, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     auto cbdata = cast(CallbackData*)user_data;
     return cbdata.display.styleSetProcMeth( gobject, arg1, cast(int)cbdata.data );
 }
@@ -4178,7 +4177,7 @@
 }
 
 private static extern(C) int /*long*/ windowProcFunc2 (GtkWidget* handle, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)user_data;
     return cbdata.display.windowProc( handle, cast(int)cbdata.data );
 }
@@ -4189,7 +4188,7 @@
 }
 
 private static extern(C) int /*long*/ windowProcFunc3 (int /*long*/ handle, int /*long*/ arg0, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)user_data;
     return cbdata.display.windowProc( cast(GtkWidget*)handle, arg0, cast(int)cbdata.data );
 }
@@ -4200,7 +4199,7 @@
 }
 
 private static extern(C) int /*long*/ windowProcFunc4 (int /*long*/ handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)user_data;
     return cbdata.display.windowProc( cast(GtkWidget*)handle, arg0, arg1, cast(int)cbdata.data );
 }
@@ -4211,7 +4210,7 @@
 }
 
 private static extern(C) int /*long*/ windowProcFunc5 (int /*long*/ handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     CallbackData* cbdata = cast(CallbackData*)user_data;
     return cbdata.display.windowProc( cast(GtkWidget*)handle, arg0, arg1, arg2, cast(int)cbdata.data );
 }
@@ -4226,7 +4225,7 @@
     return OS.gtk_timeout_add (delay, &windowTimerProcFunc, widget);
 }
 private static extern(C) int /*long*/ windowTimerProcFunc (void* user_data) {
-    version(LOG) Stderr.formatln( "Display {}:", __LINE__ ).flush;
+    version(LOG) getDwtLogger().error( "Display {}:", __LINE__ ).flush;
     Display d = cast(Display) OS.g_object_get_data(cast(GObject*)user_data, Display.classinfo.name.ptr );
     return d.windowTimerProc( cast(GtkWidget*)user_data );
 }
--- a/dwt/widgets/ProgressBar.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/widgets/ProgressBar.d	Fri Mar 20 21:00:06 2009 +0100
@@ -23,7 +23,6 @@
 import dwt.widgets.Display;
 
 import Math = tango.math.Math;
-import tango.io.Stdout;
 
 /**
  * Instances of the receiver represent an unselectable
--- a/dwt/widgets/Widget.d	Fri Mar 20 20:30:32 2009 +0100
+++ b/dwt/widgets/Widget.d	Fri Mar 20 21:00:06 2009 +0100
@@ -28,10 +28,6 @@
 import tango.stdc.string;
 import tango.core.Thread;
 
-//version=LOG;
-version(LOG){
-    import tango.io.Stdout;
-}
 
 /**
  * This class is the abstract superclass of all user interface objects.
@@ -1625,7 +1621,7 @@
 
 int /*long*/ windowProc (GtkWidget* handle, int /*long*/ user_data) {
     void trace( String str ){
-        version(LOG) Stderr.formatln( "Widget windowProc {}", str ).flush;
+        version(LOG) getDwtLogger().error( "Widget windowProc {}", str ).flush;
     }
 
     switch (cast(int)/*64*/user_data) {
@@ -1688,7 +1684,7 @@
 
 int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ user_data) {
     void trace( String str ){
-        version(LOG) Stderr.formatln( "Widget windowProc1 {}", str ).flush;
+        version(LOG) getDwtLogger().error( "Widget windowProc1 {}", str ).flush;
     }
 
     switch (cast(int)/*64*/user_data) {
@@ -1801,7 +1797,7 @@
 
 int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ user_data) {
     void trace( String str ){
-        version(LOG) Stderr.formatln( "Widget windowProc2 {}", str ).flush;
+        version(LOG) getDwtLogger().error( "Widget windowProc2 {}", str ).flush;
     }
 
     switch (cast(int)/*64*/user_data) {
@@ -1835,7 +1831,7 @@
 
 int /*long*/ windowProc (GtkWidget* handle, int /*long*/ arg0, int /*long*/ arg1, int /*long*/ arg2, int /*long*/ user_data) {
     void trace( String str ){
-        version(LOG) Stderr.formatln( "Widget windowProc3 {}", str ).flush;
+        version(LOG) getDwtLogger().error( "Widget windowProc3 {}", str ).flush;
     }
 
     switch (cast(int)/*64*/user_data) {