changeset 162:1a5b8f8129df

...
author Frank Benoit <benoit@tionex.de>
date Mon, 08 Sep 2008 00:51:37 +0200
parents f8d52b926852
children e5dd0081ccba
files dwtx/core/runtime/ILog.d dwtx/core/runtime/Platform.d dwtx/core/runtime/jobs/package.html dwtx/dwtxhelper/BufferedReader.d dwtx/dwtxhelper/Collection.d dwtx/dwtxhelper/Date.d dwtx/dwtxhelper/PushbackReader.d dwtx/dwtxhelper/StringReader.d dwtx/dwtxhelper/StringTokenizer.d dwtx/dwtxhelper/URL.d dwtx/dwtxhelper/mangoicu/UBreakIterator.d dwtx/dwtxhelper/regex.d dwtx/jface/internal/text/InformationControlReplacer.d dwtx/jface/internal/text/StickyHoverManager.d dwtx/jface/internal/text/TableOwnerDrawSupport.d dwtx/jface/internal/text/html/BrowserInformationControl.d dwtx/jface/internal/text/html/HTML2TextReader.d dwtx/jface/internal/text/html/HTMLMessages.properties dwtx/jface/internal/text/html/HTMLPrinter.d dwtx/jface/internal/text/html/HTMLTextPresenter.d dwtx/jface/internal/text/html/SingleCharReader.d dwtx/jface/internal/text/html/SubstitutionTextReader.d dwtx/jface/internal/text/link/contentassist/AdditionalInfoController2.d dwtx/jface/internal/text/link/contentassist/CompletionProposalPopup2.d dwtx/jface/internal/text/link/contentassist/ContentAssistMessages.properties dwtx/jface/internal/text/link/contentassist/ContentAssistant2.d dwtx/jface/internal/text/link/contentassist/ContextInformationPopup2.d dwtx/jface/internal/text/link/contentassist/LineBreakingReader.d dwtx/jface/internal/text/link/contentassist/PopupCloser2.d dwtx/jface/internal/text/link/contentassist/package.html dwtx/jface/internal/text/revisions/ChangeRegion.d dwtx/jface/internal/text/revisions/Colors.d dwtx/jface/internal/text/revisions/Hunk.d dwtx/jface/internal/text/revisions/LineIndexOutOfBoundsException.d dwtx/jface/internal/text/revisions/Range.d dwtx/jface/internal/text/revisions/RevisionPainter.d dwtx/jface/internal/text/revisions/RevisionSelectionProvider.d dwtx/jface/internal/text/revisions/package.html dwtx/jface/internal/text/source/DiffPainter.d dwtx/jface/internal/text/source/package.html dwtx/jface/text/AbstractDocument.d dwtx/jface/text/AbstractHoverInformationControlManager.d dwtx/jface/text/AbstractInformationControlManager.d dwtx/jface/text/AbstractLineTracker.d dwtx/jface/text/AbstractReusableInformationControlCreator.d dwtx/jface/text/Assert.d dwtx/jface/text/BadLocationException.d dwtx/jface/text/BadPositionCategoryException.d dwtx/jface/text/ConfigurableLineTracker.d dwtx/jface/text/CopyOnWriteTextStore.d dwtx/jface/text/CursorLinePainter.d dwtx/jface/text/DefaultDocumentAdapter.d dwtx/jface/text/DefaultInformationControl.d dwtx/jface/text/DefaultTextDoubleClickStrategy.d dwtx/jface/text/DefaultUndoManager.d dwtx/jface/text/DocumentClone.d dwtx/jface/text/DocumentCommand.d dwtx/jface/text/DocumentEvent.d dwtx/jface/text/DocumentPartitioningChangedEvent.d dwtx/jface/text/DocumentRewriteSession.d dwtx/jface/text/DocumentRewriteSessionEvent.d dwtx/jface/text/DocumentRewriteSessionType.d dwtx/jface/text/FindReplaceDocumentAdapter.d dwtx/jface/text/GapTextStore.d dwtx/jface/text/IDocumentExtension.d dwtx/jface/text/ITextOperationTarget.d dwtx/jface/text/JFaceTextMessages.d dwtx/jface/text/JFaceTextMessages.properties dwtx/jface/text/ListLineTracker.d dwtx/jface/text/PaintManager.d dwtx/jface/text/Position.d dwtx/jface/text/RegExMessages.properties dwtx/jface/text/Region.d dwtx/jface/text/SequentialRewriteTextStore.d dwtx/jface/text/TextAttribute.d dwtx/jface/text/TextEvent.d dwtx/jface/text/TextMessages.properties dwtx/jface/text/TextPresentation.d dwtx/jface/text/TextSelection.d dwtx/jface/text/TextViewer.d dwtx/jface/text/TextViewerHoverManager.d dwtx/jface/text/TextViewerUndoManager.d dwtx/jface/text/TreeLineTracker.d dwtx/jface/text/TypedPosition.d dwtx/jface/text/TypedRegion.d dwtx/jface/text/WhitespaceCharacterPainter.d dwtx/jface/text/contentassist/AdditionalInfoController.d dwtx/jface/text/contentassist/CompletionProposalPopup.d dwtx/jface/text/contentassist/ContentAssistSubjectControlAdapter.d dwtx/jface/text/contentassist/ContentAssistant.d dwtx/jface/text/contentassist/ContextInformation.d dwtx/jface/text/contentassist/ContextInformationPopup.d dwtx/jface/text/contentassist/ContextInformationValidator.d dwtx/jface/text/contentassist/JFaceTextMessages.properties dwtx/jface/text/contentassist/PopupCloser.d dwtx/jface/text/contentassist/package.html dwtx/jface/text/formatter/ContentFormatter.d dwtx/jface/text/formatter/ContextBasedFormattingStrategy.d dwtx/jface/text/formatter/FormattingContext.d dwtx/jface/text/formatter/MultiPassContentFormatter.d dwtx/jface/text/formatter/package.html dwtx/jface/text/hyperlink/DefaultHyperlinkPresenter.d dwtx/jface/text/hyperlink/HyperlinkManager.d dwtx/jface/text/hyperlink/HyperlinkMessages.d dwtx/jface/text/hyperlink/HyperlinkMessages.properties dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d dwtx/jface/text/hyperlink/URLHyperlink.d dwtx/jface/text/hyperlink/package.html dwtx/jface/text/information/InformationPresenter.d dwtx/jface/text/information/package.html dwtx/jface/text/link/ILinkedModeListener.d dwtx/jface/text/link/LinkedModeManager.d dwtx/jface/text/link/LinkedModeModel.d dwtx/jface/text/link/LinkedModeUI.d dwtx/jface/text/link/LinkedPosition.d dwtx/jface/text/link/LinkedPositionAnnotations.d dwtx/jface/text/link/LinkedPositionGroup.d dwtx/jface/text/link/ProposalPosition.d dwtx/jface/text/link/TabStopIterator.d dwtx/jface/text/link/package.html dwtx/jface/text/package.html dwtx/jface/text/presentation/package.html dwtx/jface/text/projection/FragmentUpdater.d dwtx/jface/text/projection/ProjectionDocument.d dwtx/jface/text/projection/ProjectionDocumentEvent.d dwtx/jface/text/projection/ProjectionDocumentManager.d dwtx/jface/text/projection/ProjectionMapping.d dwtx/jface/text/projection/ProjectionTextStore.d dwtx/jface/text/projection/SegmentUpdater.d dwtx/jface/text/projection/package.html dwtx/jface/text/quickassist/QuickAssistAssistant.d dwtx/jface/text/quickassist/package.html dwtx/jface/text/reconciler/AbstractReconcileStep.d dwtx/jface/text/reconciler/AbstractReconciler.d dwtx/jface/text/reconciler/DirtyRegion.d dwtx/jface/text/reconciler/DirtyRegionQueue.d dwtx/jface/text/reconciler/MonoReconciler.d dwtx/jface/text/reconciler/Reconciler.d dwtx/jface/text/reconciler/package.html dwtx/jface/text/revisions/IRevisionRulerColumnExtension.d dwtx/jface/text/revisions/Revision.d dwtx/jface/text/revisions/RevisionRange.d dwtx/jface/text/revisions/package.html dwtx/jface/text/rules/BufferedRuleBasedScanner.d dwtx/jface/text/rules/DefaultDamagerRepairer.d dwtx/jface/text/rules/DefaultPartitioner.d dwtx/jface/text/rules/FastPartitioner.d dwtx/jface/text/rules/NumberRule.d dwtx/jface/text/rules/PatternRule.d dwtx/jface/text/rules/RuleBasedPartitionScanner.d dwtx/jface/text/rules/RuleBasedPartitioner.d dwtx/jface/text/rules/RuleBasedScanner.d dwtx/jface/text/rules/Token.d dwtx/jface/text/rules/WhitespaceRule.d dwtx/jface/text/rules/WordPatternRule.d dwtx/jface/text/rules/WordRule.d dwtx/jface/text/rules/package.html dwtx/jface/text/source/AnnotationBarHoverManager.d dwtx/jface/text/source/AnnotationMap.d dwtx/jface/text/source/AnnotationModel.d dwtx/jface/text/source/AnnotationModelEvent.d dwtx/jface/text/source/AnnotationPainter.d dwtx/jface/text/source/AnnotationRulerColumn.d dwtx/jface/text/source/ChangeRulerColumn.d dwtx/jface/text/source/CompositeRuler.d dwtx/jface/text/source/DefaultAnnotationHover.d dwtx/jface/text/source/IAnnotationAccessExtension.d dwtx/jface/text/source/IAnnotationPresentation.d dwtx/jface/text/source/ILineDiffInfo.d dwtx/jface/text/source/ISourceViewer.d dwtx/jface/text/source/LineChangeHover.d dwtx/jface/text/source/LineNumberChangeRulerColumn.d dwtx/jface/text/source/LineNumberRulerColumn.d dwtx/jface/text/source/MatchingCharacterPainter.d dwtx/jface/text/source/OverviewRuler.d dwtx/jface/text/source/SourceViewer.d dwtx/jface/text/source/SourceViewerConfiguration.d dwtx/jface/text/source/package.html dwtx/jface/text/source/projection/ProjectionAnnotation.d dwtx/jface/text/source/projection/ProjectionAnnotationHover.d dwtx/jface/text/source/projection/ProjectionAnnotationModel.d dwtx/jface/text/source/projection/ProjectionRulerColumn.d dwtx/jface/text/source/projection/ProjectionSummary.d dwtx/jface/text/source/projection/ProjectionSupport.d dwtx/jface/text/source/projection/ProjectionViewer.d dwtx/jface/text/source/projection/SourceViewerInformationControl.d dwtx/jface/text/source/projection/package.html dwtx/jface/text/templates/ContextTypeRegistry.d dwtx/jface/text/templates/DocumentTemplateContext.d dwtx/jface/text/templates/GlobalTemplateVariables.d dwtx/jface/text/templates/JFaceTextTemplateMessages.properties dwtx/jface/text/templates/Template.d dwtx/jface/text/templates/TemplateBuffer.d dwtx/jface/text/templates/TemplateCompletionProcessor.d dwtx/jface/text/templates/TemplateContext.d dwtx/jface/text/templates/TemplateContextType.d dwtx/jface/text/templates/TemplateException.d dwtx/jface/text/templates/TemplateProposal.d dwtx/jface/text/templates/TemplateTranslator.d dwtx/jface/text/templates/TemplateVariableResolver.d dwtx/jface/text/templates/TemplateVariableType.d dwtx/jface/text/templates/TextTemplateMessages.properties dwtx/jface/text/templates/package.html dwtx/jface/text/templates/persistence/TemplateReaderWriter.d dwtx/jface/text/templates/persistence/TemplateStore.d dwtx/jface/text/templates/persistence/package.html dwtx/org/osgi/framework/Bundle.d dwtx/text/edits/package.html dwtx/text/undo/package.html res/dwtx.jface.internal.text.html.HTMLMessages.properties res/dwtx.jface.internal.text.link.contentassist.ContentAssistMessages.properties res/dwtx.jface.text.JFaceTextMessages.properties res/dwtx.jface.text.RegExMessages.properties res/dwtx.jface.text.TextMessages.properties res/dwtx.jface.text.contentassist.JFaceTextMessages.properties res/dwtx.jface.text.hyperlink.HyperlinkMessages.properties res/dwtx.jface.text.source.projection.collapsed.gif res/dwtx.jface.text.source.projection.expanded.gif res/dwtx.jface.text.templates.JFaceTextTemplateMessages.properties res/dwtx.jface.text.templates.TextTemplateMessages.properties
diffstat 220 files changed, 4284 insertions(+), 3069 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/core/runtime/ILog.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/core/runtime/ILog.d	Mon Sep 08 00:51:37 2008 +0200
@@ -16,7 +16,7 @@
 import dwtx.core.runtime.ILogListener;
 import dwtx.core.runtime.IStatus;
 
-// import org.osgi.framework.Bundle;
+import dwtx.org.osgi.framework.Bundle;
 
 /**
  * A log to which status events can be written.  Logs appear on individual
@@ -46,8 +46,7 @@
      * @return the plug-in with which this log is associated
      * @since 3.0
      */
-//     public Bundle getBundle();
-// DWT FIXME: Bundle not yet included
+    public Bundle getBundle();
 
     /**
      * Logs the given status.  The status is distributed to the log listeners
--- a/dwtx/core/runtime/Platform.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/core/runtime/Platform.d	Mon Sep 08 00:51:37 2008 +0200
@@ -14,6 +14,8 @@
 
 import dwt.dwthelper.utils;
 
+import dwtx.core.runtime.IPath;
+import dwtx.core.runtime.ILog;
 // import java.io.IOException;
 // import java.lang.reflect.Method;
 // import java.net.URL;
@@ -22,7 +24,7 @@
 // import java.util.MissingResourceException;
 // import java.util.ResourceBundle;
 //
-// import org.osgi.framework.Bundle;
+import dwtx.org.osgi.framework.Bundle;
 // import org.osgi.service.packageadmin.PackageAdmin;
 //
 // import dwtx.core.internal.runtime.CompatibilityHelper;
@@ -716,29 +718,31 @@
 //     public static IPath getLocation() throws IllegalStateException {
 //         return InternalPlatform.getDefault().getLocation();
 //     }
-//
-//     /**
-//      * Returns the location of the platform log file.  This file may contain information
-//      * about errors that have previously occurred during this invocation of the Platform.
-//      * <p>
-//      * It is recommended not to keep this value, as the log location may vary when an instance
-//      * location is being set.</p>
-//      * <p>
-//      * Note: it is very important that users of this method do not leave the log
-//      * file open for extended periods of time.  Doing so may prevent others
-//      * from writing to the log file, which could result in important error messages
-//      * being lost.  It is strongly recommended that clients wanting to read the
-//      * log file for extended periods should copy the log file contents elsewhere,
-//      * and immediately close the original file.</p>
-//      * @return the path of the log file on disk.
-//      *
-//      * XXX  consider making an ILogger interface that listeners can implements and it allows
-//      * us to implement Platform.getLogLocation()
-//      */
-//     public static IPath getLogFileLocation() {
-//         return InternalPlatform.getDefault().getMetaArea().getLogLocation();
-//     }
-//
+
+    /**
+     * Returns the location of the platform log file.  This file may contain information
+     * about errors that have previously occurred during this invocation of the Platform.
+     * <p>
+     * It is recommended not to keep this value, as the log location may vary when an instance
+     * location is being set.</p>
+     * <p>
+     * Note: it is very important that users of this method do not leave the log
+     * file open for extended periods of time.  Doing so may prevent others
+     * from writing to the log file, which could result in important error messages
+     * being lost.  It is strongly recommended that clients wanting to read the
+     * log file for extended periods should copy the log file contents elsewhere,
+     * and immediately close the original file.</p>
+     * @return the path of the log file on disk.
+     *
+     * XXX  consider making an ILogger interface that listeners can implements and it allows
+     * us to implement Platform.getLogLocation()
+     */
+    public static IPath getLogFileLocation() {
+        implMissing(__FILE__,__LINE__);
+        return null;
+        //return InternalPlatform.getDefault().getMetaArea().getLogLocation();
+    }
+
 //     /**
 //      * Returns the plug-in runtime object for the identified plug-in
 //      * or <code>null</code> if no such plug-in can be found.  If
@@ -1027,22 +1031,24 @@
 //     public static long getStateStamp() {
 //         return InternalPlatform.getDefault().getStateTimeStamp();
 //     }
-//
-//     /**
-//      * Returns the log for the given bundle.  If no such log exists, one is created.
-//      *
-//      * @param bundle the bundle whose log is returned
-//      * @return the log for the given bundle
-//      * @since 3.0
-//      * XXX change this into a LogMgr service that would keep track of the map. See if it can be a service factory.
-//      * It would contain all the methods that are here.
-//      * Relate to RuntimeLog if appropriate.
-//      * The system log listener needs to be optional: turned on or off. What about a system property? :-)
-//      */
-//     public static ILog getLog(Bundle bundle) {
-//         return InternalPlatform.getDefault().getLog(bundle);
-//     }
-//
+
+    /**
+     * Returns the log for the given bundle.  If no such log exists, one is created.
+     *
+     * @param bundle the bundle whose log is returned
+     * @return the log for the given bundle
+     * @since 3.0
+     * XXX change this into a LogMgr service that would keep track of the map. See if it can be a service factory.
+     * It would contain all the methods that are here.
+     * Relate to RuntimeLog if appropriate.
+     * The system log listener needs to be optional: turned on or off. What about a system property? :-)
+     */
+    public static ILog getLog(Bundle bundle) {
+        implMissing(__FILE__,__LINE__);
+        return null;
+        //return InternalPlatform.getDefault().getLog(bundle);
+    }
+
 //     /**
 //      * Returns the given bundle's resource bundle for the current locale.
 //      * <p>
@@ -1395,26 +1401,28 @@
 //         return InternalPlatform.getDefault().getFragments(bundle);
 //     }
 //
-//     /**
-//      * Returns the resolved bundle with the specified symbolic name that has the
-//      * highest version.  If no resolved bundles are installed that have the
-//      * specified symbolic name then null is returned.
-//      * <p>
-//      * Clients are also able to acquire the {@link PackageAdmin} service and query
-//      * it for the bundle with the specified symbolic name. Clients can ask the
-//      * service for all bundles with that particular name and then determine the
-//      * one with the highest version. Note that clients may want to filter
-//      * the results based on the state of the bundles.
-//      * </p>
-//      * @param symbolicName the symbolic name of the bundle to be returned.
-//      * @return the bundle that has the specified symbolic name with the
-//      * highest version, or <tt>null</tt> if no bundle is found.
-//      * @since 3.0
-//      */
-//     public static Bundle getBundle(String symbolicName) {
-//         return InternalPlatform.getDefault().getBundle(symbolicName);
-//     }
-//
+    /**
+     * Returns the resolved bundle with the specified symbolic name that has the
+     * highest version.  If no resolved bundles are installed that have the
+     * specified symbolic name then null is returned.
+     * <p>
+     * Clients are also able to acquire the {@link PackageAdmin} service and query
+     * it for the bundle with the specified symbolic name. Clients can ask the
+     * service for all bundles with that particular name and then determine the
+     * one with the highest version. Note that clients may want to filter
+     * the results based on the state of the bundles.
+     * </p>
+     * @param symbolicName the symbolic name of the bundle to be returned.
+     * @return the bundle that has the specified symbolic name with the
+     * highest version, or <tt>null</tt> if no bundle is found.
+     * @since 3.0
+     */
+    public static Bundle getBundle(String symbolicName) {
+        implMissing(__FILE__, __LINE__ );
+        return null;
+        //return InternalPlatform.getDefault().getBundle(symbolicName);
+    }
+
 //     /**
 //      * Returns all bundles with the specified symbolic name.  If no resolved bundles
 //      * with the specified symbolic name can be found, <tt>null</tt> is returned.
--- a/dwtx/core/runtime/jobs/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides core support for scheduling and interacting with background activity.
-<h2>
-Package Specification</h2>
-<p>
-This package specifies API for scheduling background tasks, or jobs.  Jobs can be
-scheduled for immediate execution, or for execution after a specified delay.  Once
-scheduled, jobs can be queried, canceled, or suspended.  Rules can be attached to
-jobs to indicate when they can run, and whether they can run simultaneously with other
-jobs.  This package also includes a generic locking facility that includes support for 
-detecting and responding to deadlock.
-<p>
-@since 3.0
-<p>
-</body>
-</html>
--- a/dwtx/dwtxhelper/BufferedReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/BufferedReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -2,7 +2,21 @@
 
 import dwt.dwthelper.utils;
 
-class BufferedReader {
+class BufferedReader : Reader {
+    this(Reader reader){
+        implMissing(__FILE__,__LINE__);
+    }
+    public override int read(char[] cbuf, int off, int len){
+        implMissing(__FILE__,__LINE__);
+        return 0;
+    }
+    public override void  close(){
+        implMissing(__FILE__,__LINE__);
+    }
+    public String  readLine() {
+        implMissing(__FILE__,__LINE__);
+        return null;
+    }
 }
 
 
--- a/dwtx/dwtxhelper/Collection.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/Collection.d	Mon Sep 08 00:51:37 2008 +0200
@@ -119,6 +119,7 @@
     public bool     addAll(int index, Collection c);
     public void     clear();
     public bool     contains(Object o);
+    public bool     contains(String o);
     public bool     containsAll(Collection c);
     public int      opEquals(Object o);
     public Object   get(int index);
@@ -1115,6 +1116,9 @@
     public abstract bool        addAll(int index, Collection c);
     public abstract void   clear();
     public abstract bool     contains(Object o);
+    public bool contains(String str){
+        return contains(stringcast(str));
+    }
     public abstract bool     containsAll(Collection c);
     public abstract int  opEquals(Object o);
     public abstract  Object        get(int index);
@@ -1331,6 +1335,9 @@
         implMissing( __FILE__, __LINE__ );
         return false;
     }
+    public bool    contains(String str){
+        return contains(stringcast(str));
+    }
     public bool    containsAll(Collection c){
         implMissing( __FILE__, __LINE__ );
         return false;
@@ -1741,6 +1748,9 @@
     bool    contains(Object elem){
         return list.contains(elem);
     }
+    bool    contains(String elem){
+        return contains(stringcast(elem));
+    }
     bool    containsAll(Collection c){
         foreach(o; c){
             if( !list.contains(o)) return false;
@@ -1771,6 +1781,12 @@
     Object     get(int index){
         return list.get(index);
     }
+    Object     getFirst(){
+        return list.get(0);
+    }
+    Object     getLast(){
+        return list.get(list.size()-1);
+    }
     hash_t    toHash(){
         implMissing( __FILE__, __LINE__ );
         return 0;
@@ -1949,6 +1965,9 @@
         }
         return false;
     }
+    bool    contains(String o){
+        return contains(stringcast(o));
+    }
     bool    containsAll(Collection c){
         implMissing( __FILE__, __LINE__ );
         return false;
@@ -2100,7 +2119,7 @@
 }
 
 class Arrays {
-    public static bool equals(Object[] a, Object[] b){
+    public static bool equals(T)(T[] a, T[] b){
         if( a.length !is b.length ){
             return false;
         }
@@ -2115,6 +2134,34 @@
         }
         return true;
     }
+/+    public static bool equals(Object[] a, Object[] b){
+        if( a.length !is b.length ){
+            return false;
+        }
+        for( int i = 0; i < a.length; i++ ){
+            if( a[i] is null && b[i] is null ){
+                continue;
+            }
+            if( a[i] !is null && b[i] !is null && a[i] == b[i] ){
+                continue;
+            }
+            return false;
+        }
+        return true;
+    }
++/
+    static void sort( T )( T[] a, Comparator c ){
+        bool isLess( T o1, T o2 ){
+            return c.compare( cast(Object)o1, cast(Object)o2 ) < 0;
+        }
+        tango.core.Array.sort( a, &isLess );
+    }
+    static void sort( T : char[] )( T[] a, Comparator c ){
+        bool isLess( T o1, T o2 ){
+            return c.compare( stringcast(o1), stringcast(o2) ) < 0;
+        }
+        tango.core.Array.sort( a, &isLess );
+    }
     static List    asList(Object[] a) {
         if( a.length is 0 ) return Collections.EMPTY_LIST;
         ArrayList res = new ArrayList( a.length );
@@ -2123,6 +2170,9 @@
         }
         return res;
     }
+    public static void fill( String str, char c ){
+        str[] = c;
+    }
 }
 
 class Collections {
@@ -2228,4 +2278,8 @@
     }
 }
 
-
+class LinkedHashMap : HashMap {
+    static this(){
+        implMissing( __FILE__, __LINE__ );
+    }
+}
\ No newline at end of file
--- a/dwtx/dwtxhelper/Date.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/Date.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1,6 +1,12 @@
 module dwtx.dwtxhelper.Date;
 
+import dwt.dwthelper.utils;
+
 class Date {
+    long getTime(){
+        implMissing(__FILE__,__LINE__);
+        return 0;
+    }
 }
 
 
--- a/dwtx/dwtxhelper/PushbackReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/PushbackReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1,5 +1,11 @@
 module dwtx.dwtxhelper.PushbackReader;
 
-class PushbackReader{
+import dwt.dwthelper.utils;
+
+class PushbackReader : Reader {
+    this( Reader reader ){
+    }
+    void unread( char c ){
+    }
 }
 
--- a/dwtx/dwtxhelper/StringReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/StringReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1,5 +1,19 @@
 module dwtx.dwtxhelper.StringReader;
 
-class StringReader {
+import dwt.dwthelper.utils;
+
+class StringReader : Reader {
+    String str;
+    this( String str ){
+        implMissing(__FILE__,__LINE__);
+        this.str = str;
+    }
+    public override int read(char[] cbuf, int off, int len){
+        cbuf[ off .. off+len ] = str[ 0 .. len ];
+        str = str[ len .. $ ];
+        return len;
+    }
+    public override void  close(){
+    }
 }
 
--- a/dwtx/dwtxhelper/StringTokenizer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/StringTokenizer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1,4 +1,48 @@
 module dwtx.dwtxhelper.StringTokenizer;
 
+import dwt.dwthelper.utils;
+
 class StringTokenizer {
+
+    this(String){
+        implMissing(__FILE__,__LINE__);
+    }
+
+    this(String,String){
+        implMissing(__FILE__,__LINE__);
+    }
+
+    this(String,String,bool){
+        implMissing(__FILE__,__LINE__);
+    }
+
+    bool hasMoreTokens(){
+        implMissing(__FILE__,__LINE__);
+        return false;
+    }
+
+    String nextToken(){
+        implMissing(__FILE__,__LINE__);
+        return null;
+    }
+
+    String nextToken(String delim){
+        implMissing(__FILE__,__LINE__);
+        return null;
+    }
+
+    bool hasMoreElements(){
+        implMissing(__FILE__,__LINE__);
+        return false;
+    }
+
+    Object nextElement(){
+        implMissing(__FILE__,__LINE__);
+        return null;
+    }
+
+    int countTokens(){
+        implMissing(__FILE__,__LINE__);
+        return 0;
+    }
 }
--- a/dwtx/dwtxhelper/URL.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/URL.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1,5 +1,10 @@
 module dwtx.dwtxhelper.URL;
 
+import dwt.dwthelper.utils;
+
 class URL {
+    this(String){
+        implMissing(__FILE__,__LINE__);
+    }
 }
 
--- a/dwtx/dwtxhelper/mangoicu/UBreakIterator.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/mangoicu/UBreakIterator.d	Mon Sep 08 00:51:37 2008 +0200
@@ -312,6 +312,7 @@
 
         // this is returned by next(), previous() etc ...
         const uint Done = uint.max;
+        alias Done DONE;
 
         /***********************************************************************
 
@@ -454,7 +455,7 @@
                     return ubrk_next (handle);
                 return ubrk_following (handle, offset);
         }
-
+        alias next following;
         /***********************************************************************
 
                 Determine the text boundary preceding the current text
--- a/dwtx/dwtxhelper/regex.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/dwtxhelper/regex.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1,11 +1,76 @@
 module dwtx.dwtxhelper.regex;
 
+import dwt.dwthelper.utils;
+
 class Matcher {
+    public Pattern pattern(){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public String    group(){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public String    group(int n){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public  String replaceFirst(String replacement) {
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public int start(){
+        implMissing( __FILE__, __LINE__ );
+        return 0;
+    }
+    public int end(){
+        implMissing( __FILE__, __LINE__ );
+        return 0;
+    }
+    public bool find(){
+        implMissing( __FILE__, __LINE__ );
+        return false;
+    }
+    public bool find(int start){
+        implMissing( __FILE__, __LINE__ );
+        return false;
+    }
 }
 
 class Pattern {
+    public static const int MULTILINE;
+    public static const int CASE_INSENSITIVE ;
+    public static const int UNICODE_CASE ;
+
+    public String pattern(){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public int flags(){
+        implMissing( __FILE__, __LINE__ );
+        return 0;
+    }
+    public static Pattern compile(String regex){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public static Pattern compile(String regex, int flags){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public Matcher matcher(CharSequence input){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
+    public Matcher matcher(String input){
+        implMissing( __FILE__, __LINE__ );
+        return null;
+    }
 }
 
-class PatternSyntaxException {
+class PatternSyntaxException : IllegalArgumentException {
+    this(String desc, String regex, int index) {
+        super(desc);
+    }
 }
 
--- a/dwtx/jface/internal/text/InformationControlReplacer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/InformationControlReplacer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -44,7 +44,7 @@
  * @since 3.4
  */
 public class InformationControlReplacer : AbstractInformationControlManager {
-
+    alias AbstractInformationControlManager.showInformationControl showInformationControl;
     /**
      * Minimal width in pixels.
      */
--- a/dwtx/jface/internal/text/StickyHoverManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/StickyHoverManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -18,10 +18,8 @@
 import dwtx.jface.internal.text.TableOwnerDrawSupport; // packageimport
 import dwtx.jface.internal.text.DelayedInputChangeListener; // packageimport
 
-
 import dwt.dwthelper.utils;
-
-
+import tango.text.convert.Format;
 
 import dwt.DWT;
 import dwt.events.ControlEvent;
@@ -48,7 +46,6 @@
 import dwtx.jface.text.TextViewer;
 import dwtx.jface.util.Geometry;
 
-
 /**
  * Implements a sticky hover control, i.e. a control that replaces a hover
  * with an enriched and focusable control.
@@ -230,7 +227,7 @@
          * @see dwt.events.FocusListener#focusLost(dwt.events.FocusEvent)
          */
         public void focusLost(FocusEvent e) {
-            if (DEBUG) System.out_.println("StickyHoverManager.Closer.focusLost(): " + e); //$NON-NLS-1$
+            if (DEBUG) System.out_.println(Format("StickyHoverManager.Closer.focusLost(): {}", e)); //$NON-NLS-1$
             Display d= fSubjectControl.getDisplay();
             d.asyncExec(new class()  Runnable {
                 // Without the asyncExec, mouse clicks to the workbench window are swallowed.
@@ -272,7 +269,7 @@
                 }
 
             } else if (event.type is DWT.FocusOut) {
-                if (DEBUG) System.out_.println("StickyHoverManager.Closer.handleEvent(): focusOut: " + event); //$NON-NLS-1$
+                if (DEBUG) System.out_.println(Format("StickyHoverManager.Closer.handleEvent(): focusOut: {}", event)); //$NON-NLS-1$
                 IInformationControl iControl= getCurrentInformationControl2();
                 if (iControl !is null && ! iControl.isFocusControl())
                     hideInformationControl();
--- a/dwtx/jface/internal/text/TableOwnerDrawSupport.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/TableOwnerDrawSupport.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,7 @@
      * @param ranges the styled ranges or <code>null</code> to remove them
      */
     public static void storeStyleRanges(TableItem item, int column, StyleRange[] ranges) {
-        item.setData(STYLED_RANGES_KEY + column, ranges);
+        item.setData(STYLED_RANGES_KEY ~ Integer.toString(column), new ArrayWrapperObject(arraycast!(Object)(ranges)));
     }
 
     /**
@@ -72,7 +72,7 @@
      * @return the styled ranges
      */
     private static StyleRange[] getStyledRanges(TableItem item, int column) {
-        return arraycast!(StyleRange)(item.getData(STYLED_RANGES_KEY + column));
+        return arrayFromObject!(StyleRange)(item.getData(STYLED_RANGES_KEY ~ Integer.toString(column)));
     }
 
     private this(Table table) {
--- a/dwtx/jface/internal/text/html/BrowserInformationControl.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/html/BrowserInformationControl.d	Mon Sep 08 00:51:37 2008 +0200
@@ -21,9 +21,30 @@
 import dwtx.jface.internal.text.html.BrowserInformationControlInput; // packageimport
 import dwtx.jface.internal.text.html.HTMLMessages; // packageimport
 
+import dwt.dwthelper.utils;
+
+import dwt.widgets.Shell;
+import dwt.widgets.Composite;
+import dwtx.jface.text.AbstractInformationControl;
+import dwtx.jface.text.IInformationControlExtension2;
+import dwtx.jface.text.IDelayedInputChangeProvider;
+import dwtx.jface.text.IInputChangedListener;
+
+class BrowserInformationControl : AbstractInformationControl , IInformationControlExtension2, IDelayedInputChangeProvider {
+    public this(Shell parent, String symbolicFontName, bool resizable){}
+    public static bool isAvailable(Composite parent){}
+    public void setInformation(String content) {}
+    protected void createContent(Composite parent) {
+    }
+    public void setInput(Object input) {}
+    public void setDelayedInputChangeListener(IInputChangedListener inputChangeListener) {}
+    public bool hasContents() {
+        return false;
+    }
+}
+
 // FIXME needs Browser :/
 /++
-import dwt.dwthelper.utils;
 
 import dwtx.dwtxhelper.StringReader;
 import dwtx.dwtxhelper.Collection;
--- a/dwtx/jface/internal/text/html/HTML2TextReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTML2TextReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -24,6 +24,7 @@
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.PushbackReader;
 import dwtx.dwtxhelper.Collection;
+static import tango.text.convert.Utf;
 
 import dwt.DWT;
 import dwt.custom.StyleRange;
@@ -190,7 +191,7 @@
 
         if ("li".equals(html)) //$NON-NLS-1$
             // FIXME: this hard-coded prefix does not work for RTL languages, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=91682
-            return LINE_DELIM + HTMLMessages.getString("HTML2TextReader.listItemPrefix"); //$NON-NLS-1$
+            return LINE_DELIM ~ HTMLMessages.getString("HTML2TextReader.listItemPrefix"); //$NON-NLS-1$
 
         if ("/b".equals(html)) { //$NON-NLS-1$
             stopBold();
@@ -242,22 +243,22 @@
         int ch;
         do {
 
-            ch= nextChar();
+            ch= nextDChar();
 
             while (ch !is -1 && ch !is '>') {
-                buf.append(Character.toLowerCase(cast(wchar) ch));
-                ch= nextChar();
+                buf.append(dcharToString(Character.toLowerCase(cast(dchar) ch)));
+                ch= nextDChar();
                 if (ch is '"'){
-                    buf.append(Character.toLowerCase(cast(wchar) ch));
-                    ch= nextChar();
+                    buf.append(dcharToString(Character.toLowerCase(cast(dchar) ch)));
+                    ch= nextDChar();
                     while (ch !is -1 && ch !is '"'){
-                        buf.append(Character.toLowerCase(cast(wchar) ch));
-                        ch= nextChar();
+                        buf.append(dcharToString(Character.toLowerCase(cast(dchar) ch)));
+                        ch= nextDChar();
                     }
                 }
                 if (ch is '<' && !isInComment(buf)) {
-                    unread(ch);
-                    return '<' + buf.toString();
+                    unreadDChar(ch);
+                    return '<' ~ buf.toString();
                 }
             }
 
@@ -268,19 +269,19 @@
                 break;
             }
             // unfinished comment
-            buf.append(cast(wchar) ch);
+            buf.append(dcharToString(cast(dchar) ch));
         } while (true);
 
         return html2Text(buf.toString());
     }
 
     private static bool isInComment(StringBuffer buf) {
-        return buf.length() >= 3 && "!--".equals(buf.substring(0, 3)); //$NON-NLS-1$
+        return buf.length() >= 3 && "!--".equals(buf.slice().substring(0, 3)); //$NON-NLS-1$
     }
 
     private static bool isCommentEnd(StringBuffer buf) {
         int tagLen= buf.length();
-        return tagLen >= 5 && "--".equals(buf.substring(tagLen - 2)); //$NON-NLS-1$
+        return tagLen >= 5 && "--".equals(buf.slice().substring(tagLen - 2)); //$NON-NLS-1$
     }
 
     private String processPreformattedText(int c) {
@@ -290,8 +291,13 @@
     }
 
 
-    private void unread(int ch)  {
-        (cast(PushbackReader) getReader()).unread(ch);
+    private void unreadDChar(dchar ch)  {
+        char[4] buf;
+        dchar[1] ibuf;
+        ibuf[0] = ch;
+        foreach( char c; tango.text.convert.Utf.toString( ibuf[], buf[] )){
+            (cast(PushbackReader) getReader()).unread(c);
+        }
     }
 
     protected String entity2Text(String symbol) {
@@ -303,16 +309,16 @@
                 } else {
                     ch= Integer.parseInt(symbol.substring(1), 10);
                 }
-                return EMPTY_STRING + cast(wchar)ch;
+                return dcharToString( cast(dchar)ch);
             } catch (NumberFormatException e) {
             }
         } else {
-            String str= cast(String) fgEntityLookup.get(symbol);
+            String str= stringcast( fgEntityLookup.get(symbol));
             if (str !is null) {
                 return str;
             }
         }
-        return "&" + symbol; // not found //$NON-NLS-1$
+        return "&" ~ symbol; // not found //$NON-NLS-1$
     }
 
     /*
@@ -320,18 +326,19 @@
      */
     private String processEntity()  {
         StringBuffer buf= new StringBuffer();
-        int ch= nextChar();
-        while (Character.isLetterOrDigit(cast(wchar)ch) || ch is '#') {
-            buf.append(cast(wchar) ch);
-            ch= nextChar();
+        int ch= nextDChar();
+        while (Character.isLetterOrDigit(cast(dchar)ch) || ch is '#') {
+            buf.append(dcharToString(cast(dchar) ch));
+            ch= nextDChar();
         }
 
         if (ch is ';')
             return entity2Text(buf.toString());
 
-        buf.insert(0, '&');
+        buf.select(0, 0);
+        buf.prepend("&");
         if (ch !is -1)
-            buf.append(cast(wchar) ch);
+            buf.append(dcharToString(cast(dchar) ch));
         return buf.toString();
     }
 }
--- a/dwtx/jface/internal/text/html/HTMLMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-
-HTMLTextPresenter.ellipse= ...
-
-# The following property value must end with a space
-HTML2TextReader.listItemPrefix=\t-\ 
--- a/dwtx/jface/internal/text/html/HTMLPrinter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTMLPrinter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -39,24 +39,33 @@
  */
 public class HTMLPrinter {
 
-    private static RGB BG_COLOR_RGB= new RGB(255, 255, 225); // RGB value of info bg color on WindowsXP
-    private static RGB FG_COLOR_RGB= new RGB(0, 0, 0); // RGB value of info fg color on WindowsXP
-
+    private static RGB BG_COLOR_RGB_;
+    private static RGB FG_COLOR_RGB_;
 
-    static this() {
-        implMissing( __FILE__, __LINE__ ); // lazy init needed for Display
-        final Display display= Display.getDefault();
+    private static RGB BG_COLOR_RGB(){
+        COLOR_RGB_init();
+        return BG_COLOR_RGB_;
+    }
+    private static RGB FG_COLOR_RGB(){
+        COLOR_RGB_init();
+        return FG_COLOR_RGB_;
+    }
+
+    private static bool COLOR_RGB_init_complete = false;
+    private static void COLOR_RGB_init() {
+        if( COLOR_RGB_init_complete ){
+            return;
+        }
+        COLOR_RGB_init_complete = true;
+        BG_COLOR_RGB_= new RGB(255, 255, 225); // RGB value of info bg color on WindowsXP
+        FG_COLOR_RGB_= new RGB(0, 0, 0); // RGB value of info fg color on WindowsXP
+        Display display= Display.getDefault();
         if (display !is null && !display.isDisposed()) {
             try {
-                display.asyncExec(new class()  Runnable {
-                    /*
-                     * @see java.lang.Runnable#run()
-                     */
-                    public void run() {
-                        BG_COLOR_RGB= display.getSystemColor(DWT.COLOR_INFO_BACKGROUND).getRGB();
-                        FG_COLOR_RGB= display.getSystemColor(DWT.COLOR_INFO_FOREGROUND).getRGB();
-                    }
-                });
+                display.asyncExec( dgRunnable( (Display display_){
+                    BG_COLOR_RGB_= display_.getSystemColor(DWT.COLOR_INFO_BACKGROUND).getRGB();
+                    FG_COLOR_RGB_= display_.getSystemColor(DWT.COLOR_INFO_FOREGROUND).getRGB();
+                }, display ));
             } catch (DWTError err) {
                 // see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=45294
                 if (err.code !is DWT.ERROR_DEVICE_DISPOSED)
@@ -103,7 +112,7 @@
         try {
             int n= rd.read(readBuffer);
             while (n > 0) {
-                buffer.append(readBuffer, 0, n);
+                buffer.append(readBuffer[ 0 .. n ]);
                 n= rd.read(readBuffer);
             }
             return buffer.toString();
@@ -127,7 +136,8 @@
 
         appendColors(pageProlog, fgRGB, bgRGB);
 
-        buffer.insert(position,  pageProlog.toString());
+        buffer.select(position,0);
+        buffer.replace(pageProlog.toString());
     }
 
     private static void appendColors(StringBuffer pageProlog, RGB fgRGB, RGB bgRGB) {
@@ -165,17 +175,20 @@
 
         // Find insertion index
         // a) within existing body tag with trailing space
-        int index= buffer.indexOf("<body "); //$NON-NLS-1$
+        int index= buffer.slice().indexOf("<body "); //$NON-NLS-1$
         if (index !is -1) {
-            buffer.insert(index+5, styleBuf);
+            buffer.select(index+5, 0);
+            buffer.replace(styleBuf);
             return;
         }
 
         // b) within existing body tag without attributes
-        index= buffer.indexOf("<body>"); //$NON-NLS-1$
+        index= buffer.slice().indexOf("<body>"); //$NON-NLS-1$
         if (index !is -1) {
-            buffer.insert(index+5, ' ');
-            buffer.insert(index+6, styleBuf);
+            buffer.select(index+5, 0);
+            buffer.replace( " " );
+            buffer.select(index+6, 0);
+            buffer.replace(styleBuf);
             return;
         }
     }
@@ -206,7 +219,8 @@
         StringBuffer pageProlog= new StringBuffer(60);
         pageProlog.append("<html>"); //$NON-NLS-1$
         appendColors(pageProlog, FG_COLOR_RGB, BG_COLOR_RGB);
-        buffer.insert(position,  pageProlog.toString());
+        buffer.select(position, 0);
+        buffer.replace(pageProlog.toString());
     }
 
     public static void insertPageProlog(StringBuffer buffer, int position, URL styleSheetURL) {
@@ -214,7 +228,8 @@
         pageProlog.append("<html>"); //$NON-NLS-1$
         appendStyleSheetURL(pageProlog, styleSheetURL);
         appendColors(pageProlog, FG_COLOR_RGB, BG_COLOR_RGB);
-        buffer.insert(position,  pageProlog.toString());
+        buffer.select(position, 0);
+        buffer.replace(pageProlog.toString());
     }
 
     public static void insertPageProlog(StringBuffer buffer, int position, String styleSheet) {
@@ -290,13 +305,13 @@
         bool italic= (fontData.getStyle() & DWT.ITALIC) !is 0;
 
         // See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=155993
-        String size= Integer.toString(fontData.getHeight()) + ("carbon".equals(DWT.getPlatform()) ? "px" : "pt"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        String size= Integer.toString(fontData.getHeight()) ~ ("carbon".equals(DWT.getPlatform()) ? "px" : "pt"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
-        String family= "'" + fontData.getName() + "',sans-serif"; //$NON-NLS-1$ //$NON-NLS-2$
-        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-size:\\s*)\\d+pt(\\;?.*\\})", "$1" + size + "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-weight:\\s*)\\w+(\\;?.*\\})", "$1" + (bold ? "bold" : "normal") + "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-style:\\s*)\\w+(\\;?.*\\})", "$1" + (italic ? "italic" : "normal") + "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-family:\\s*).+?(;.*\\})", "$1" + family + "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        String family= "'" ~ fontData.getName() ~ "',sans-serif"; //$NON-NLS-1$ //$NON-NLS-2$
+        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-size:\\s*)\\d+pt(\\;?.*\\})", "$1" ~ size ~ "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-weight:\\s*)\\w+(\\;?.*\\})", "$1" ~ (bold ? "bold" : "normal") ~ "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-style:\\s*)\\w+(\\;?.*\\})", "$1" ~ (italic ? "italic" : "normal") ~ "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+        styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-family:\\s*).+?(;.*\\})", "$1" ~ family ~ "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         return styles;
     }
 }
--- a/dwtx/jface/internal/text/html/HTMLTextPresenter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTMLTextPresenter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -24,6 +24,7 @@
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
+import dwtx.dwtxhelper.StringReader;
 
 import dwt.custom.StyleRange;
 import dwt.graphics.Drawable;
@@ -53,7 +54,7 @@
     private bool fEnforceUpperLineLimit;
 
     public this(bool enforceUpperLineLimit) {
-        super();
+//         super();
         fEnforceUpperLineLimit= enforceUpperLineLimit;
     }
 
@@ -105,9 +106,10 @@
         int length= line.length();
 
         int i= 0;
-        while (i < length && Character.isWhitespace(line.charAt(i))) ++i;
+        while (i < length && Character.isWhitespace(line.getRelativeCodePoint(i,0)))
+            i += line.getRelativeCodePointOffset(i,1);
 
-        return (i is length ? line : line.substring(0, i)) + " "; //$NON-NLS-1$
+        return (i is length ? line : line.substring(0, i)) ~ " "; //$NON-NLS-1$
     }
 
     /**
@@ -133,7 +135,7 @@
         try {
 
             StringBuffer buffer= new StringBuffer();
-            int maxNumberOfLines= Math.round(maxHeight / gc.getFontMetrics().getHeight());
+            int maxNumberOfLines= cast(int) Math.round(maxHeight / gc.getFontMetrics().getHeight());
 
             fCounter= 0;
             LineBreakingReader reader= new LineBreakingReader(createReader(hoverInfo, presentation), gc, maxWidth);
@@ -197,22 +199,24 @@
         int length= buffer.length();
 
         int end= length -1;
-        while (end >= 0 && Character.isWhitespace(buffer.charAt(end)))
-            -- end;
 
-        if (end is -1)
+        while (end >= 0 && Character.isWhitespace(buffer.slice().getRelativeCodePoint( end, -1 )))
+            end += buffer.slice().getRelativeCodePointOffset( end, -1 );
+
+        if (end <= -1)
             return ""; //$NON-NLS-1$
 
-        if (end < length -1)
-            buffer.delete_(end + 1, length);
+        if (end < buffer.slice().getAbsoluteCodePointOffset( length, -1 ))
+            buffer.truncate(buffer.slice().getAbsoluteCodePointOffset( end, 1));
         else
             end= length;
 
         int start= 0;
-        while (start < end && Character.isWhitespace(buffer.charAt(start)))
-            ++ start;
+        while (start < end && Character.isWhitespace(buffer.slice().getRelativeCodePoint(start, 0)))
+            start += buffer.slice().getRelativeCodePointOffset( start, 1 );
 
-        buffer.delete_(0, start);
+        buffer.select(0, start);
+        buffer.remove();
         presentation.setResultWindow(new Region(start, buffer.length()));
         return buffer.toString();
     }
--- a/dwtx/jface/internal/text/html/SingleCharReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/html/SingleCharReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -47,7 +47,7 @@
                     return -1;
                 return i - off;
             }
-            cbuf[i]= cast(wchar)ch;
+            cbuf[i]= cast(char)ch;
         }
         return len;
     }
@@ -68,7 +68,7 @@
         StringBuffer buf= new StringBuffer();
         int ch;
         while ((ch= read()) !is -1) {
-            buf.append(cast(wchar)ch);
+            buf.append(cast(char)ch);
         }
         return buf.toString();
     }
--- a/dwtx/jface/internal/text/html/SubstitutionTextReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/html/SubstitutionTextReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -21,8 +21,8 @@
 import dwtx.jface.internal.text.html.BrowserInformationControlInput; // packageimport
 import dwtx.jface.internal.text.html.HTMLMessages; // packageimport
 
-
 import dwt.dwthelper.utils;
+import tango.core.Exception;
 
 /**
  * Reads the text contents from a reader and computes for each character
@@ -92,9 +92,9 @@
     protected int nextChar()  {
         fReadFromBuffer= (fBuffer.length() > 0);
         if (fReadFromBuffer) {
-            char ch= fBuffer.charAt(fIndex++);
+            char ch= fBuffer.slice().charAt(fIndex++);
             if (fIndex >= fBuffer.length()) {
-                fBuffer.setLength(0);
+                fBuffer.truncate(0);
                 fIndex= 0;
             }
             return ch;
@@ -104,10 +104,10 @@
         if (ch is -1) {
             ch= fReader.read();
         }
-        if (fSkipWhiteSpace && Character.isWhitespace(cast(wchar)ch)) {
+        if (fSkipWhiteSpace && Character.isWhitespace(cast(char)ch)) {
             do {
                 ch= fReader.read();
-            } while (Character.isWhitespace(cast(wchar)ch));
+            } while (Character.isWhitespace(cast(char)ch));
             if (ch !is -1) {
                 fCharAfterWhiteSpace= ch;
                 return ' ';
@@ -118,6 +118,46 @@
         return ch;
     }
 
+    /// DWT
+    protected int nextDChar()  {
+        char[4] buf = void;
+        int ch1 = nextChar();
+        if( ch1 is -1 ) return -1;
+        buf[0] = cast(char)ch1;
+        if(( ch1 & 0x80 ) is 0x00 ){
+            return ch1;
+        }
+        else if(( ch1 & 0xE0 ) is 0xC0 ){
+            int ch2 = nextChar();
+            if( ch2 is -1 ) throw new UnicodeException(__FILE__,__LINE__);
+            buf[1] = cast(char)ch2;
+        }
+        else if(( ch1 & 0xF0 ) is 0xE0 ){
+            int ch2 = nextChar();
+            if( ch1 is -1 ) throw new UnicodeException(__FILE__,__LINE__);
+            buf[1] = cast(char)ch2;
+            int ch3 = nextChar();
+            if( ch3 is -1 ) throw new UnicodeException(__FILE__,__LINE__);
+            buf[2] = cast(char)ch3;
+        }
+        else if(( ch1 & 0xF8 ) is 0xF0 ){
+            int ch2 = nextChar();
+            if( ch1 is -1 ) throw new UnicodeException(__FILE__,__LINE__);
+            buf[1] = cast(char)ch2;
+            int ch3 = nextChar();
+            if( ch3 is -1 ) throw new UnicodeException(__FILE__,__LINE__);
+            buf[2] = cast(char)ch3;
+            int ch4 = nextChar();
+            if( ch4 is -1 ) throw new UnicodeException(__FILE__,__LINE__);
+            buf[3] = cast(char)ch4;
+        }
+        else {
+            throw new UnicodeException(__FILE__,__LINE__);
+        }
+        uint ate;
+        return tango.text.convert.Utf.decode( buf, ate );
+    }
+
     /**
      * @see Reader#read()
      */
@@ -130,8 +170,10 @@
                 String s= computeSubstitution(c);
                 if (s is null)
                     break;
-                if (s.length() > 0)
-                    fBuffer.insert(0, s);
+                if (s.length() > 0){
+                    fBuffer.select(0, 0);
+                    fBuffer.replace(s);
+                }
                 c= nextChar();
             }
 
@@ -161,7 +203,7 @@
         fReader.reset();
         fWasWhiteSpace= true;
         fCharAfterWhiteSpace= -1;
-        fBuffer.setLength(0);
+        fBuffer.truncate(0);
         fIndex= 0;
     }
 
--- a/dwtx/jface/internal/text/link/contentassist/AdditionalInfoController2.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/AdditionalInfoController2.d	Mon Sep 08 00:51:37 2008 +0200
@@ -116,7 +116,7 @@
 
         super.install(control);
 
-        Assert.isTrue( cast(Table)control );
+        Assert.isTrue( null !is cast(Table)control );
         fProposalTable= cast(Table) control;
         fProposalTable.addSelectionListener(fSelectionListener);
         synchronized (fThreadAccess) {
--- a/dwtx/jface/internal/text/link/contentassist/CompletionProposalPopup2.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/CompletionProposalPopup2.d	Mon Sep 08 00:51:37 2008 +0200
@@ -90,7 +90,7 @@
     /** The used additional info controller */
     private AdditionalInfoController2 fAdditionalInfoController;
     /** The closing strategy for this completion proposal popup */
-    private PopupCloser2 fPopupCloser= new PopupCloser2();
+    private PopupCloser2 fPopupCloser;
     /** The popup shell */
     private Shell fProposalShell;
     /** The proposal table */
@@ -100,7 +100,7 @@
     /** The key listener to control navigation */
     private KeyListener fKeyListener;
     /** List of document events used for filtering proposals */
-    private List fDocumentEvents= new ArrayList();
+    private List fDocumentEvents;
     /** Listener filling the document event queue */
     private IDocumentListener fDocumentListener;
     /** Reentrance count for <code>filterProposals</code> */
@@ -168,6 +168,8 @@
      * @since 2.0
      */
     public this(ContentAssistant2 contentAssistant, ITextViewer viewer, AdditionalInfoController2 infoController) {
+        fPopupCloser= new PopupCloser2();
+        fDocumentEvents= new ArrayList();
 
         fModificationEditingSupport_init();
         fFocusEditingSupport_init();
@@ -521,7 +523,7 @@
 
         fFilteredProposals= null;
 
-        fContentAssistant.possibleCompletionsClosed();
+        fContentAssistant.possibleCompletionsClosed_package();
     }
 
     /**
@@ -579,7 +581,7 @@
                 if (fIsColoredLabelsSupportEnabled)
                     TableOwnerDrawSupport.storeStyleRanges(item, 0, styleRanges);
 
-                item.setData(p);
+                item.setData(cast(Object)p);
 
                 if (validate && validateProposal(document, p, endOffset, null)) {
                     selectionIndex= i;
@@ -623,7 +625,7 @@
      * @return the height hint for <code>table</code>
      */
     private int getTableHeightHint(Table table, int rows) {
-        if (table.getFont().equals(JFaceResources.getDefaultFont()))
+        if (table.getFont().opEquals(JFaceResources.getDefaultFont()))
             table.setFont(JFaceResources.getDialogFont());
         int result= table.getItemHeight() * rows;
         if (table.getLinesVisible())
@@ -876,31 +878,29 @@
     private void filterProposals() {
         ++ fInvocationCounter;
         Control control= fViewer.getTextWidget();
-        control.getDisplay().asyncExec(new class()  Runnable {
-            long fCounter= fInvocationCounter;
-            public void run() {
+        control.getDisplay().asyncExec(dgRunnable( (long fInvocationCounter_) {
+            long fCounter= fInvocationCounter_;
 
-                if (fCounter !is fInvocationCounter) return;
+            if (fCounter !is fInvocationCounter) return;
 
-                int offset= fViewer.getSelectedRange().x;
-                ICompletionProposal[] proposals= null;
-                try  {
-                    if (offset > -1) {
-                        DocumentEvent event= TextUtilities.mergeProcessedDocumentEvents(fDocumentEvents);
-                        proposals= computeFilteredProposals(offset, event);
-                    }
-                } catch (BadLocationException x)  {
-                } finally  {
-                    fDocumentEvents.clear();
+            int offset= fViewer.getSelectedRange().x;
+            ICompletionProposal[] proposals= null;
+            try  {
+                if (offset > -1) {
+                    DocumentEvent event= TextUtilities.mergeProcessedDocumentEvents(fDocumentEvents);
+                    proposals= computeFilteredProposals(offset, event);
                 }
-                fFilterOffset= offset;
+            } catch (BadLocationException x)  {
+            } finally  {
+                fDocumentEvents.clear();
+            }
+            fFilterOffset= offset;
 
-                if (proposals !is null && proposals.length > 0)
-                    setProposals(proposals);
-                else
-                    hide();
-            }
-        });
+            if (proposals !is null && proposals.length > 0)
+                setProposals(proposals);
+            else
+                hide();
+        }, fInvocationCounter));
     }
 
     /**
@@ -937,13 +937,13 @@
 
                 ICompletionProposalExtension2 p= cast(ICompletionProposalExtension2) proposals[i];
                 if (p.validate(document, offset, event))
-                    filtered.add(p);
+                    filtered.add(cast(Object)p);
 
             } else if (cast(ICompletionProposalExtension)proposals[i] ) {
 
                 ICompletionProposalExtension p= cast(ICompletionProposalExtension) proposals[i];
                 if (p.isValidFor(document, offset))
-                    filtered.add(p);
+                    filtered.add(cast(Object)p);
 
             } else {
                 // restore original behavior
@@ -953,9 +953,7 @@
             }
         }
 
-        ICompletionProposal[] p= new ICompletionProposal[filtered.size()];
-        filtered.toArray(p);
-        return p;
+        return arraycast!(ICompletionProposal)(filtered.toArray());
     }
 
     /**
--- a/dwtx/jface/internal/text/link/contentassist/ContentAssistMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-
-InfoPopup.info_delay_timer_name=AdditionalInfo Delay
-
-ContentAssistant.assist_delay_timer_name=AutoAssist Delay
-
-HTMLTextPresenter.ellipse= ...
-
-# The following property value must end with a space
-HTML2TextReader.listItemPrefix=\t-\ 
--- a/dwtx/jface/internal/text/link/contentassist/ContentAssistant2.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/ContentAssistant2.d	Mon Sep 08 00:51:37 2008 +0200
@@ -1292,6 +1292,9 @@
         if (fContextInfoPopup !is null)
             fContextInfoPopup.hide();
     }
+    package void hide_package() {
+        hide();
+    }
 
     /**
      * Callback to signal this content assistant that the presentation of the possible completions has been stopped.
@@ -1299,7 +1302,9 @@
      */
     protected void possibleCompletionsClosed() {
     }
-
+    package void possibleCompletionsClosed_package(){
+        possibleCompletionsClosed();
+    }
     /*
      * @see IContentAssist#showContextInformation
      */
@@ -1314,6 +1319,9 @@
      */
     protected void contextInformationClosed() {
     }
+    package void contextInformationClosed_package() {
+        contextInformationClosed();
+    }
 
     /**
      * Requests that the specified context information to be shown.
--- a/dwtx/jface/internal/text/link/contentassist/ContextInformationPopup2.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/ContextInformationPopup2.d	Mon Sep 08 00:51:37 2008 +0200
@@ -88,7 +88,7 @@
     private ITextViewer fViewer;
     private ContentAssistant2 fContentAssistant;
 
-    private PopupCloser2 fPopupCloser= new PopupCloser2();
+    private PopupCloser2 fPopupCloser;
     private Shell fContextSelectorShell;
     private Table fContextSelectorTable;
     private IContextInformation[] fContextSelectorInput;
@@ -98,7 +98,7 @@
     private StyledText fContextInfoText;
     private TextPresentation fTextPresentation;
 
-    private Stack fContextFrameStack= new Stack();
+    private Stack fContextFrameStack;
 
 
     /**
@@ -108,6 +108,8 @@
      * @param viewer the viewer on top of which the context information is shown
      */
     public this(ContentAssistant2 contentAssistant, ITextViewer viewer) {
+        fPopupCloser= new PopupCloser2();
+        fContextFrameStack= new Stack();
         fContentAssistant= contentAssistant;
         fViewer= viewer;
     }
@@ -319,7 +321,7 @@
         }
 
         if (fContextInfoPopup is null)
-            fContentAssistant.contextInformationClosed();
+            fContentAssistant.contextInformationClosed_package();
     }
 
     /**
@@ -438,7 +440,7 @@
         }
 
         if (!Helper2.okToUse(fContextInfoPopup))
-            fContentAssistant.contextInformationClosed();
+            fContentAssistant.contextInformationClosed_package();
     }
 
     /**
@@ -627,21 +629,19 @@
          * Otherwise, we'd validate the context information based on the
          * pre-key-stroke state.
          */
-        fContextInfoPopup.getDisplay().asyncExec(new class()  Runnable {
+        fContextInfoPopup.getDisplay().asyncExec(dgRunnable( (ContextFrame fFrame_) {
 
-            private ContextFrame fFrame= cast(ContextFrame) fContextFrameStack.peek();
+            ContextFrame fFrame= fFrame_;
 
-            public void run() {
-                if (Helper2.okToUse(fContextInfoPopup) && fFrame is fContextFrameStack.peek()) {
-                    int offset= fViewer.getSelectedRange().x;
-                    if (fFrame.fValidator is null || !fFrame.fValidator.isContextInformationValid(offset)) {
-                        hideContextInfoPopup();
-                    } else if (fFrame.fPresenter !is null && fFrame.fPresenter.updatePresentation(offset, fTextPresentation)) {
-                        TextPresentation.applyTextPresentation(fTextPresentation, fContextInfoText);
-                        resize();
-                    }
+            if (Helper2.okToUse(fContextInfoPopup) && fFrame is fContextFrameStack.peek()) {
+                int offset= fViewer.getSelectedRange().x;
+                if (fFrame.fValidator is null || !fFrame.fValidator.isContextInformationValid(offset)) {
+                    hideContextInfoPopup();
+                } else if (fFrame.fPresenter !is null && fFrame.fPresenter.updatePresentation(offset, fTextPresentation)) {
+                    TextPresentation.applyTextPresentation(fTextPresentation, fContextInfoText);
+                    resize();
                 }
             }
-        });
+        }, cast(ContextFrame) fContextFrameStack.peek()));
     }
 }
--- a/dwtx/jface/internal/text/link/contentassist/LineBreakingReader.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/LineBreakingReader.d	Mon Sep 08 00:51:37 2008 +0200
@@ -57,7 +57,7 @@
         fMaxWidth= maxLineWidth;
         fOffset= 0;
         fLine= null;
-        fLineBreakIterator= UBreakIterator.getLineInstance();
+        fLineBreakIterator= UBreakIterator.openLineIterator( ULocale.Default);
         fBreakWords= true;
     }
 
--- a/dwtx/jface/internal/text/link/contentassist/PopupCloser2.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/PopupCloser2.d	Mon Sep 08 00:51:37 2008 +0200
@@ -132,7 +132,7 @@
      */
     public void shellDeactivated(ShellEvent e) {
         if (fContentAssistant !is null)
-            fContentAssistant.hide();
+            fContentAssistant.hide_package();
     }
 
 
@@ -142,6 +142,6 @@
      */
     public void shellClosed(ShellEvent e) {
         if (fContentAssistant !is null)
-            fContentAssistant.hide();
+            fContentAssistant.hide_package();
     }
 }
--- a/dwtx/jface/internal/text/link/contentassist/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author" name="GENERATOR">
-  <title>Linked Position Infrastructure - Internal Copy of Content Assistant</title>
-</head>
-<body>
-This package is a modified copy of <code>org.eclipse.jface.text.contentassist</code> that supports the linked mode proposals.
-This package is internal and may disappear if the changes are merged with the API content assist package. Subject to change without notice.
-</body>
-</html>
--- a/dwtx/jface/internal/text/revisions/ChangeRegion.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/ChangeRegion.d	Mon Sep 08 00:51:37 2008 +0200
@@ -20,12 +20,9 @@
 import dwtx.jface.internal.text.revisions.RevisionPainter; // packageimport
 import dwtx.jface.internal.text.revisions.RevisionSelectionProvider; // packageimport
 
-
 import dwt.dwthelper.utils;
-
 import dwtx.dwtxhelper.Collection;
-
-
+import tango.text.convert.Format;
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.revisions.Revision;
@@ -36,32 +33,33 @@
  * A change region describes a contiguous range of lines that was changed in the same revision of a
  * document. Once it is adjusted to diff information, the originally contiguous range may be split
  * into several ranges or even be empty.
- * 
+ *
  * @since 3.2
  */
 public final class ChangeRegion {
     private const Revision fRevision;
     private const ILineRange fLines;
-    private const List fAdjusted= new LinkedList();
-    
+    private const List fAdjusted;
+
     /**
      * Creates a new change region for the given revision and line range.
-     * 
+     *
      * @param revision the revision of the new region
      * @param lines the line range of the new region
      * @throws IndexOutOfBoundsException if the line range is not well-formed
      */
     public this(Revision revision, ILineRange lines)  {
+        fAdjusted= new LinkedList();
         Assert.isLegal(revision !is null);
         Assert.isLegal(lines !is null);
         fLines= Range.copy(lines);
         fRevision=revision;
         clearDiff();
     }
-    
+
     /**
      * Returns the revision that this region belongs to.
-     * 
+     *
      * @return the revision that this region belongs to
      */
     public Revision getRevision() {
@@ -70,7 +68,7 @@
 
     /**
      * Returns the original (before applying diff information) line range of this change region.
-     * 
+     *
      * @return the original (before applying diff information) line range of this change region
      */
     public ILineRange getOriginalRange() {
@@ -80,28 +78,28 @@
     /**
      * Returns the list of {@link ILineRange}s of this change region for which the revision
      * information is still valid.
-     * 
+     *
      * @return the list of adjusted line ranges
      */
     public List getAdjustedRanges() {
         return fAdjusted;
     }
-    
+
     /**
      * Returns the line coverage of the adjusted ranges, an empty range if the coverage is empty.
-     * 
+     *
      * @return the line coverage of the adjusted ranges
      */
     public ILineRange getAdjustedCoverage() {
         if (fAdjusted.isEmpty())
             return new LineRange(fLines.getStartLine(), 0);
-        
+
         Range first= cast(Range) fAdjusted.get(0);
         Range last= cast(Range) fAdjusted.get(fAdjusted.size() - 1);
-        
+
         return Range.createAbsolute(first.start(), last.end());
     }
-    
+
     /**
      * Clears any adjusted ranges, restoring the original range.
      */
@@ -109,16 +107,16 @@
         fAdjusted.clear();
         fAdjusted.add(Range.copy(fLines));
     }
-    
+
     /**
      * Adjusts this change region to a diff hunk. This will change the adjusted ranges.
-     * 
+     *
      * @param hunk the diff hunk to adjust to
      */
     public void adjustTo(Hunk hunk) {
         for (ListIterator it= fAdjusted.listIterator(); it.hasNext();) {
             Range range= cast(Range) it.next();
-            
+
             // do we need a split?
             int unchanged= getUnchanged(hunk, range.start());
             if (unchanged > 0) {
@@ -128,40 +126,40 @@
                 it.add(range);
                 it.previous(); it.next(); // needed so we can remove below
             }
-            
+
             int line= range.start();
             Assert.isTrue(hunk.line <= line);
-            
+
             // by how much do we shrink?
             int overlap= getOverlap(hunk, line);
             if (overlap >= range.length()) {
                 it.remove();
                 continue;
             }
-            
+
             // by how much do we move?
             range.moveBy(hunk.delta + overlap);
             range.resizeBy(-overlap);
         }
-        
+
     }
-    
+
     private int getUnchanged(Hunk hunk, int line) {
         return Math.max(0, hunk.line - line);
     }
 
     /*
-     * Returns the number of lines after line that the hunk reports as changed. 
+     * Returns the number of lines after line that the hunk reports as changed.
      */
     private int getOverlap(Hunk hunk, int line) {
-        
+
         int deltaLine= hunk.line + hunk.changed;
         if (hunk.delta >= 0) {
             if (deltaLine <= line)
                 return 0;
             return deltaLine - line;
         }
-        
+
         // hunk.delta < 0
         int hunkEnd= deltaLine - hunk.delta;
         int cutCount= hunkEnd - line;
@@ -172,6 +170,6 @@
      * @see java.lang.Object#toString()
      */
     public override String toString() {
-        return "ChangeRegion [" + fRevision.toString() + ", [" + fLines.getStartLine() + "+" + fLines.getNumberOfLines() + ")]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+        return Format("ChangeRegion [{},[{}+{})]", fRevision.toString(), fLines.getStartLine(), fLines.getNumberOfLines() ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
     }
 }
--- a/dwtx/jface/internal/text/revisions/Colors.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/Colors.d	Mon Sep 08 00:51:37 2008 +0200
@@ -62,9 +62,9 @@
      * @return a normalized version of <code>color</code>
      * @see #brightness(RGB)
      */
-    public static RGB adjustBrightness(RGB color, float brightness) {
+    public static RGB adjustBrightness(RGB color, float brightness_) {
         float[] hsi= toHSI(color);
-        float psychoFactor= brightness - brightness(color);
+        float psychoFactor= brightness_ - brightness(color);
         float weight= 0.5f; // found by trial and error
         hsi[2]= Math.max(0, Math.min(1.0f, hsi[2] + psychoFactor * weight));
         color= fromHSI(hsi);
--- a/dwtx/jface/internal/text/revisions/Hunk.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/Hunk.d	Mon Sep 08 00:51:37 2008 +0200
@@ -20,15 +20,15 @@
 import dwtx.jface.internal.text.revisions.RevisionPainter; // packageimport
 import dwtx.jface.internal.text.revisions.RevisionSelectionProvider; // packageimport
 
-
 import dwt.dwthelper.utils;
+import tango.text.convert.Format;
 
 import dwtx.core.runtime.Assert;
 
 /**
  * A hunk describes a contiguous range of changed, added or deleted lines. <code>Hunk</code>s are separated by
  * one or more unchanged lines.
- * 
+ *
  * @since 3.3
  */
 public final class Hunk {
@@ -48,7 +48,7 @@
 
     /**
      * Creates a new hunk.
-     * 
+     *
      * @param line the line at which the hunk starts, must be &gt;= 0
      * @param delta the difference in lines compared to the original
      * @param changed the number of changed lines in this hunk, must be &gt;= 0
@@ -65,9 +65,9 @@
      * @see java.lang.Object#toString()
      */
     public override String toString() {
-        return "Hunk [" + line + ">" + changed + (delta < 0 ? "-" : "+") + Math.abs(delta) + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+        return Format("Hunk [{}>{}{}{}]", line, changed, delta < 0 ? "-" : "+", Math.abs(delta) ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
     }
-    
+
     /*
      * @see java.lang.Object#hashCode()
      */
@@ -83,11 +83,10 @@
     /*
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public bool equals(Object obj) {
+    public override int opEquals(Object obj) {
         if (obj is this)
             return true;
-        if ( cast(Hunk)obj ) {
-            Hunk other= cast(Hunk) obj;
+        if ( Hunk other= cast(Hunk)obj ) {
             return other.line is this.line && other.delta is this.delta && other.changed is this.changed;
         }
         return false;
--- a/dwtx/jface/internal/text/revisions/LineIndexOutOfBoundsException.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/LineIndexOutOfBoundsException.d	Mon Sep 08 00:51:37 2008 +0200
@@ -27,7 +27,7 @@
  * Thrown to indicate that an attempt to create or modify a {@link Range} failed because it would
  * have resulted in an illegal range. A range is illegal if its length is &lt;= 0 or if its start
  * line is &lt; 0.
- * 
+ *
  * @since 3.2
  */
 public final class LineIndexOutOfBoundsException : IndexOutOfBoundsException {
@@ -42,20 +42,20 @@
 
     /**
      * Constructs an <code>LineIndexOutOfBoundsException</code> with the specified detail message.
-     * 
+     *
      * @param s the detail message.
      */
     public this(String s) {
         super(s);
     }
-    
+
     /**
-     * Constructs a new <code>LineIndexOutOfBoundsException</code> 
-     * object with an argument indicating the illegal index. 
+     * Constructs a new <code>LineIndexOutOfBoundsException</code>
+     * object with an argument indicating the illegal index.
      *
      * @param index the illegal index.
      */
     public this(int index) {
-        super("Line index out of range: " + index); //$NON-NLS-1$
+        super("Line index out of range: " ~ Integer.toString(index)); //$NON-NLS-1$
     }
 }
--- a/dwtx/jface/internal/text/revisions/Range.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/Range.d	Mon Sep 08 00:51:37 2008 +0200
@@ -20,8 +20,8 @@
 import dwtx.jface.internal.text.revisions.RevisionPainter; // packageimport
 import dwtx.jface.internal.text.revisions.RevisionSelectionProvider; // packageimport
 
-
 import dwt.dwthelper.utils;
+import tango.text.convert.Format;
 
 import dwtx.jface.text.source.ILineRange;
 
@@ -36,13 +36,13 @@
  * result in a {@link LineIndexOutOfBoundsException} being
  * thrown.
  * </p>
- * 
+ *
  * @since 3.2
  */
 public final class Range : ILineRange, Cloneable {
     /**
      * Creates a new range with the same start and length as the passed line range.
-     * 
+     *
      * @param range the range to copy
      * @return a <code>Range</code> with the same start and length as <code>range</code>
      * @throws LineIndexOutOfBoundsException if the passed {@link ILineRange} does not adhere to the
@@ -51,20 +51,20 @@
     public static Range copy(ILineRange range)  {
         return createRelative(range.getStartLine(), range.getNumberOfLines());
     }
-    
+
     /**
      * Creates a new range equal to the passed line range.
-     * 
+     *
      * @param range the range to copy
      * @return a <code>Range</code> equal to <code>range</code>
      */
     public static Range copy(Range range) {
         return createRelative(range.start(), range.length());
     }
-    
+
     /**
      * Creates a new range with the given start offset and length.
-     * 
+     *
      * @param start the first line of the new range, must be &gt;= 0
      * @param length the number of lines included in the new range, must be &gt; 0
      * @return a <code>Range</code> with the given start and length
@@ -77,7 +77,7 @@
 
     /**
      * Creates a new range with the given start and end offsets.
-     * 
+     *
      * @param start the first line of the new range, must be &gt;= 0
      * @param end the first line not in the range any more (exclusive), must be &gt; <code>start</code>
      * @return a <code>Range</code> with the given start and end offsets
@@ -98,7 +98,7 @@
         moveTo(start);
         setLength(length);
     }
-    
+
     /*
      * @see dwtx.jface.text.source.ILineRange#getStartLine()
      */
@@ -112,154 +112,154 @@
     public int getNumberOfLines() {
         return length();
     }
-    
+
     /**
      * Returns the first line contained in this range. Short equivalent of {@link #getStartLine()}.
-     * 
+     *
      * @return the first line contained in this range
      */
     public int start() {
         return fStart;
     }
-    
+
     /**
      * Returns the number of lines contained in this range. Short equivalent of {@link #getNumberOfLines()}.
-     * 
+     *
      * @return the number of lines contained in this range
      */
     public int length() {
         return fLength;
     }
-    
+
     /**
      * Returns the first line after this range. Equivalent to {@linkplain #start() start} + {@linkplain #length() length}.
-     * 
+     *
      * @return the first line after this range
      */
     public int end() {
         return start() + length();
     }
-    
+
     /**
      * Moves the receiver to <code>start</code>, keeping {@link #length()} constant.
-     * 
+     *
      * @param start the new start, must be &gt;= 0
      * @throws LineIndexOutOfBoundsException if <code>start</code> &lt; 0
      */
     public void moveTo(int start)  {
         if (!(start >= 0))
-            throw new LineIndexOutOfBoundsException("Cannot set a negative start: " + start); //$NON-NLS-1$
+            throw new LineIndexOutOfBoundsException(Format("Cannot set a negative start: {}", start)); //$NON-NLS-1$
         fStart= start;
     }
-    
+
     /**
      * Moves this range such that the {@link #end()} is at <code>end</code>, keeping
      * {@link #length()} constant.
-     * 
+     *
      * @param end the new end
      * @throws LineIndexOutOfBoundsException if <code>end</code> &lt;= {@link #start()}
      */
     public void moveEndTo(int end)  {
         moveTo(end - length());
     }
-    
+
     /**
      * Moves the range by <code>delta</code> lines, keeping {@link #length()} constant. The
      * resulting start line must be &gt;= 0.
-     * 
+     *
      * @param delta the number of lines to shift the range
      * @throws LineIndexOutOfBoundsException if <code>-delta</code> &gt; {@link #start()}
      */
     public void moveBy(int delta)  {
         moveTo(start() + delta);
     }
-    
+
     /**
      * Moves the start offset to <code>start</code>, keeping {@link #end()} constant.
-     * 
+     *
      * @param start the new start, must be &gt;= 0 and &lt; {@link #end()}
      * @throws LineIndexOutOfBoundsException if <code>start</code> &lt; 0 or &gt;= {@link #end()}
      */
     public void setStart(int start)  {
         int end= end();
         if (!(start >= 0 && start < end))
-            throw new LineIndexOutOfBoundsException("Cannot set a negative start: " + start); //$NON-NLS-1$
+            throw new LineIndexOutOfBoundsException(Format("Cannot set a negative start: {}", start)); //$NON-NLS-1$
         moveTo(start);
         setEnd(end);
     }
-    
+
     /**
      * Sets the end of this range, keeping {@link #start()} constant.
-     * 
+     *
      * @param end the new end, must be &gt; {@link #start()}
      * @throws LineIndexOutOfBoundsException if <code>end</code> &lt;= {@link #start()}
      */
     public void setEnd(int end)  {
         setLength(end - start());
     }
-    
+
     /**
      * Sets the length of this range, keeping {@link #start()} constant.
-     * 
+     *
      * @param length the new length, must be &gt; 0
      * @throws LineIndexOutOfBoundsException if <code>length</code> &lt;= 0
      */
     public void setLength(int length)  {
         if (!(length > 0))
-            throw new LineIndexOutOfBoundsException("Cannot set length <= 0: " + length); //$NON-NLS-1$
+            throw new LineIndexOutOfBoundsException(Format("Cannot set length <= 0: {}", length)); //$NON-NLS-1$
         fLength= length;
     }
-    
+
     /**
      * Sets the length of this range, keeping {@link #end()} constant.
-     * 
+     *
      * @param length the new length, must be &gt; 0 and &lt;= {@link #end()}
      * @throws LineIndexOutOfBoundsException if <code>length</code> &lt;= 0
      */
     public void setLengthAndMove(int length)  {
         setStart(end() - length);
     }
-    
+
     /**
      * Resizes the range by <code>delta</code> lines, keeping {@link #start()} constant.
-     * 
+     *
      * @param delta the number of lines to resize the range
-     * @throws LineIndexOutOfBoundsException if <code>-delta</code> &gt;= {@link #length()} 
+     * @throws LineIndexOutOfBoundsException if <code>-delta</code> &gt;= {@link #length()}
      */
     public void resizeBy(int delta)  {
         setLength(length() + delta);
     }
-    
+
     /**
      * Resizes the range by <code>delta</code> lines by moving the start offset, {@link #end()} remains unchanged.
-     * 
+     *
      * @param delta the number of lines to resize the range
-     * @throws LineIndexOutOfBoundsException if <code>-delta</code> &gt;= {@link #length()} 
+     * @throws LineIndexOutOfBoundsException if <code>-delta</code> &gt;= {@link #length()}
      */
     public void resizeAndMoveBy(int delta)  {
         setStart(start() + delta);
     }
-    
+
     /**
      * Splits a range off the end of the receiver. The receiver is shortened to only include
      * <code>remaining</code> lines after the split.
-     * 
+     *
      * @param remaining the number of lines to remain in the receiver, must be in [1, {@link #length() length})
      * @return the split off range
      * @throws LineIndexOutOfBoundsException if <code>remaining</code>&gt;= {@link #length()} or <code>remaining</code>&ltt;= 0
      */
     public Range split(int remaining)  {
         if (!(remaining < length())) // assert before modification
-            throw new LineIndexOutOfBoundsException("Remaining must be less than length: " + length()); //$NON-NLS-1$
+            throw new LineIndexOutOfBoundsException(Format("Remaining must be less than length: {}", length())); //$NON-NLS-1$
 
         int splitLength= length() - remaining;
         setLength(remaining);
         return new Range(end(), splitLength);
     }
-    
+
     /**
      * Returns <code>true</code> if the passed range has the same offset and length as the receiver.
-     * 
+     *
      * @param range another line range to compare the receiver to
      * @return <code>true</code> if <code>range</code> has the same offset and length as the receiver
      */
@@ -270,7 +270,7 @@
             return false;
         return range.getStartLine() is start() && range.getNumberOfLines() is length();
     }
-    
+
     /*
      * @see java.lang.Object#clone()
      */
--- a/dwtx/jface/internal/text/revisions/RevisionPainter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/RevisionPainter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -22,6 +22,7 @@
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
+import tango.text.convert.Format;
 
 import dwt.DWT;
 import dwt.custom.StyledText;
@@ -104,8 +105,28 @@
     }
 
     // RGBs provided by UI Designer
-    private static const RGB BY_DATE_START_COLOR= new RGB(199, 134, 57);
-    private static const RGB BY_DATE_END_COLOR= new RGB(241, 225, 206);
+    private static RGB BY_DATE_START_COLOR_;
+    private static RGB BY_DATE_START_COLOR(){
+        if( BY_DATE_START_COLOR_ is null ){
+            synchronized(RevisionPainter.classinfo){
+                if( BY_DATE_START_COLOR_ is null ){
+                    BY_DATE_START_COLOR_ = new RGB(199, 134, 57);
+                }
+            }
+        }
+        return BY_DATE_START_COLOR_;
+    }
+    private static RGB BY_DATE_END_COLOR_;
+    private static RGB BY_DATE_END_COLOR(){
+        if( BY_DATE_END_COLOR_ is null ){
+            synchronized(RevisionPainter.classinfo){
+                if( BY_DATE_END_COLOR_ is null ){
+                    BY_DATE_END_COLOR_ = new RGB(241, 225, 206);
+                }
+            }
+        }
+        return BY_DATE_END_COLOR_;
+    }
 
 
     /**
@@ -150,12 +171,16 @@
         /**
          * The stored shaded colors.
          */
-        private const Map fColors= new HashMap();
+        private const Map fColors;
         /**
          * The stored focus colors.
          */
-        private const Map fFocusColors= new HashMap();
+        private const Map fFocusColors;
 
+        this(){
+            fColors= new HashMap();
+            fFocusColors= new HashMap();
+        }
         /**
          * Sets the revision information, which is needed to compute the relative age of a revision.
          *
@@ -180,7 +205,7 @@
         private RGB adaptColor(Revision revision, bool focus) {
             RGB rgb;
             float scale;
-            if (fRenderingMode is IRevisionRulerColumnExtension.AGE) {
+            if (fRenderingMode is IRevisionRulerColumnExtension_AGE) {
                 int index= computeAgeIndex(revision);
                 if (index is -1 || fRevisions.size() is 0) {
                     rgb= getBackground().getRGB();
@@ -190,11 +215,11 @@
                     rgb= gradient[gradient.length - index - 1];
                 }
                 scale= 0.99f;
-            } else if (fRenderingMode is IRevisionRulerColumnExtension.AUTHOR) {
+            } else if (fRenderingMode is IRevisionRulerColumnExtension_AUTHOR) {
                 rgb= revision.getColor();
                 rgb= Colors.adjustBrightness(rgb, AVERAGE_INTENSITY);
                 scale= 0.6f;
-            } else if (fRenderingMode is IRevisionRulerColumnExtension.AUTHOR_SHADED_BY_AGE) {
+            } else if (fRenderingMode is IRevisionRulerColumnExtension_AUTHOR_SHADED_BY_AGE) {
                 rgb= revision.getColor();
                 rgb= Colors.adjustBrightness(rgb, AVERAGE_INTENSITY);
                 int index= computeAgeIndex(revision);
@@ -375,6 +400,9 @@
         protected IInformationControl doCreateInformationControl(Shell parent) {
             if (BrowserInformationControl.isAvailable(parent)) {
                 return new class(parent, JFaceResources.DIALOG_FONT, fIsFocusable)  BrowserInformationControl {
+                    public this(Shell parent, String symbolicFontName, bool resizable){
+                        super(parent, symbolicFontName,resizable);
+                    }
                     /*
                      * @see dwtx.jface.internal.text.html.BrowserInformationControl#setInformation(java.lang.String)
                      * @since 3.3
@@ -413,41 +441,41 @@
          * @see dwtx.jface.text.AbstractReusableInformationControlCreator#canReplace(dwtx.jface.text.IInformationControlCreator)
          */
         public bool canReplace(IInformationControlCreator creator) {
-            return creator.getClass() is getClass()
+            return creator.classinfo is this.classinfo
                     && (cast(HoverInformationControlCreator) creator).fIsFocusable is fIsFocusable;
         }
     }
 
-    private static final String fgStyleSheet= "/* Font definitions */\n" + //$NON-NLS-1$
-        "body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-family: sans-serif; font-size: 9pt }\n" + //$NON-NLS-1$
-        "pre                { font-family: monospace; font-size: 9pt }\n" + //$NON-NLS-1$
-        "\n" + //$NON-NLS-1$
-        "/* Margins */\n" + //$NON-NLS-1$
-        "body        { overflow: auto; margin-top: 0; margin-bottom: 4; margin-left: 3; margin-right: 0 }\n" + //$NON-NLS-1$
-        "h1           { margin-top: 5; margin-bottom: 1 }   \n" + //$NON-NLS-1$
-        "h2           { margin-top: 25; margin-bottom: 3 }\n" + //$NON-NLS-1$
-        "h3           { margin-top: 20; margin-bottom: 3 }\n" + //$NON-NLS-1$
-        "h4           { margin-top: 20; margin-bottom: 3 }\n" + //$NON-NLS-1$
-        "h5           { margin-top: 0; margin-bottom: 0 }\n" + //$NON-NLS-1$
-        "p            { margin-top: 10px; margin-bottom: 10px }\n" + //$NON-NLS-1$
-        "pre             { margin-left: 6 }\n" + //$NON-NLS-1$
-        "ul          { margin-top: 0; margin-bottom: 10 }\n" + //$NON-NLS-1$
-        "li          { margin-top: 0; margin-bottom: 0 } \n" + //$NON-NLS-1$
-        "li p        { margin-top: 0; margin-bottom: 0 } \n" + //$NON-NLS-1$
-        "ol          { margin-top: 0; margin-bottom: 10 }\n" + //$NON-NLS-1$
-        "dl          { margin-top: 0; margin-bottom: 10 }\n" + //$NON-NLS-1$
-        "dt          { margin-top: 0; margin-bottom: 0; font-weight: bold }\n" + //$NON-NLS-1$
-        "dd          { margin-top: 0; margin-bottom: 0 }\n" + //$NON-NLS-1$
-        "\n" + //$NON-NLS-1$
-        "/* Styles and colors */\n" + //$NON-NLS-1$
-        "a:link      { color: #0000FF }\n" + //$NON-NLS-1$
-        "a:hover         { color: #000080 }\n" + //$NON-NLS-1$
-        "a:visited    { text-decoration: underline }\n" + //$NON-NLS-1$
-        "h4           { font-style: italic }\n" + //$NON-NLS-1$
-        "strong      { font-weight: bold }\n" + //$NON-NLS-1$
-        "em          { font-style: italic }\n" + //$NON-NLS-1$
-        "var             { font-style: italic }\n" + //$NON-NLS-1$
-        "th          { font-weight: bold }\n" + //$NON-NLS-1$
+    private static final String fgStyleSheet= "/* Font definitions */\n" ~ //$NON-NLS-1$
+        "body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-family: sans-serif; font-size: 9pt }\n" ~ //$NON-NLS-1$
+        "pre                { font-family: monospace; font-size: 9pt }\n" ~ //$NON-NLS-1$
+        "\n" ~ //$NON-NLS-1$
+        "/* Margins */\n" ~ //$NON-NLS-1$
+        "body        { overflow: auto; margin-top: 0; margin-bottom: 4; margin-left: 3; margin-right: 0 }\n" ~ //$NON-NLS-1$
+        "h1           { margin-top: 5; margin-bottom: 1 }   \n" ~ //$NON-NLS-1$
+        "h2           { margin-top: 25; margin-bottom: 3 }\n" ~ //$NON-NLS-1$
+        "h3           { margin-top: 20; margin-bottom: 3 }\n" ~ //$NON-NLS-1$
+        "h4           { margin-top: 20; margin-bottom: 3 }\n" ~ //$NON-NLS-1$
+        "h5           { margin-top: 0; margin-bottom: 0 }\n" ~ //$NON-NLS-1$
+        "p            { margin-top: 10px; margin-bottom: 10px }\n" ~ //$NON-NLS-1$
+        "pre             { margin-left: 6 }\n" ~ //$NON-NLS-1$
+        "ul          { margin-top: 0; margin-bottom: 10 }\n" ~ //$NON-NLS-1$
+        "li          { margin-top: 0; margin-bottom: 0 } \n" ~ //$NON-NLS-1$
+        "li p        { margin-top: 0; margin-bottom: 0 } \n" ~ //$NON-NLS-1$
+        "ol          { margin-top: 0; margin-bottom: 10 }\n" ~ //$NON-NLS-1$
+        "dl          { margin-top: 0; margin-bottom: 10 }\n" ~ //$NON-NLS-1$
+        "dt          { margin-top: 0; margin-bottom: 0; font-weight: bold }\n" ~ //$NON-NLS-1$
+        "dd          { margin-top: 0; margin-bottom: 0 }\n" ~ //$NON-NLS-1$
+        "\n" ~ //$NON-NLS-1$
+        "/* Styles and colors */\n" ~ //$NON-NLS-1$
+        "a:link      { color: #0000FF }\n" ~ //$NON-NLS-1$
+        "a:hover         { color: #000080 }\n" ~ //$NON-NLS-1$
+        "a:visited    { text-decoration: underline }\n" ~ //$NON-NLS-1$
+        "h4           { font-style: italic }\n" ~ //$NON-NLS-1$
+        "strong      { font-weight: bold }\n" ~ //$NON-NLS-1$
+        "em          { font-style: italic }\n" ~ //$NON-NLS-1$
+        "var             { font-style: italic }\n" ~ //$NON-NLS-1$
+        "th          { font-weight: bold }\n" ~ //$NON-NLS-1$
         ""; //$NON-NLS-1$
 
     /**
@@ -597,7 +625,7 @@
     /**
      * The revision rendering mode.
      */
-    private IRevisionRulerColumnExtension.RenderingMode fRenderingMode;
+    private IRevisionRulerColumnExtension_RenderingMode fRenderingMode;
     /**
      * The required with in characters.
      * @since 3.3
@@ -645,7 +673,7 @@
         fRevisionSelectionProvider= new RevisionSelectionProvider(this);
         fRevisionListeners= new ListenerList(ListenerList.IDENTITY);
         fAnnotations= new ArrayList();
-        fRenderingMode= IRevisionRulerColumnExtension.AUTHOR_SHADED_BY_AGE;
+        fRenderingMode= IRevisionRulerColumnExtension_AUTHOR_SHADED_BY_AGE;
 
         Assert.isLegal(column !is null);
         Assert.isLegal(sharedColors !is null);
@@ -678,7 +706,7 @@
      * @param renderingMode the rendering mode
      * @since 3.3
      */
-    public void setRenderingMode(IRevisionRulerColumnExtension.RenderingMode renderingMode) {
+    public void setRenderingMode(IRevisionRulerColumnExtension_RenderingMode renderingMode) {
         Assert.isLegal(renderingMode !is null);
         if (fRenderingMode !is renderingMode) {
             fRenderingMode= renderingMode;
@@ -730,7 +758,7 @@
                 string[0]= '.';
                 string[1]= ' ';
             }
-            fAuthorInset= gc.stringExtent(new String(string)).x;
+            fAuthorInset= gc.stringExtent(new_String(string)).x;
         }
 
         // recompute colors (show intense colors if ruler is narrow)
@@ -802,7 +830,7 @@
     public void setModel(IAnnotationModel model) {
         IAnnotationModel diffModel;
         if ( cast(IAnnotationModelExtension)model )
-            diffModel= (cast(IAnnotationModelExtension) model).getAnnotationModel(IChangeRulerColumn.QUICK_DIFF_MODEL_ID);
+            diffModel= (cast(IAnnotationModelExtension) model).getAnnotationModel(stringcast(IChangeRulerColumn.QUICK_DIFF_MODEL_ID));
         else
             diffModel= model;
 
@@ -827,7 +855,7 @@
      */
     private void setDiffer(IAnnotationModel differ) {
         if ( cast(ILineDiffer)differ  || differ is null) {
-            if (fLineDiffer !is differ) {
+            if ( cast(Object)fLineDiffer !is cast(Object)differ) {
                 if (fLineDiffer !is null)
                     (cast(IAnnotationModel) fLineDiffer).removeAnnotationModelListener(fAnnotationListener);
                 fLineDiffer= cast(ILineDiffer) differ;
@@ -977,14 +1005,14 @@
         List ranges= getRangeCache();
 
         // return the interesting subset
-        int end= end(lines);
+        int end_= end(lines);
         int first= -1, last= -1;
         for (int i= 0; i < ranges.size(); i++) {
             RevisionRange range= cast(RevisionRange) ranges.get(i);
             int rangeEnd= end(range);
             if (first is -1 && rangeEnd > lines.getStartLine())
                 first= i;
-            if (first !is -1 && rangeEnd > end) {
+            if (first !is -1 && rangeEnd > end_) {
                 last= i;
                 break;
             }
@@ -1080,7 +1108,7 @@
                 widgetStartLine= Math.max(0, range.getStartLine() - visibleStartLine);
                 widgetEndLine= Math.min(visibleEndLine, end(range) - 1);
             } catch (BadLocationException x) {
-                x.printStackTrace();
+                ExceptionPrintStackTrace(x);
                 // ignore and return null
             }
         }
@@ -1148,7 +1176,7 @@
             }
             if (added !is null) {
                 for (Iterator it= added.entrySet().iterator(); it.hasNext();) {
-                    Entry entry= cast(Entry) it.next();
+                    Map.Entry entry= cast(Map.Entry) it.next();
                     fAnnotationModel.addAnnotation(cast(Annotation) entry.getKey(), cast(Position) entry.getValue());
                 }
             }
@@ -1239,7 +1267,7 @@
      */
     private void onFocusLineChanged(int previousLine, int nextLine) {
         if (DEBUG)
-            System.out_.println("line: " ~ previousLine ~ " > " ~ nextLine); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println(Format("line: {} > {}", previousLine, nextLine)); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusLine= nextLine;
         RevisionRange region= getRange(nextLine);
         updateFocusRange(region);
@@ -1263,7 +1291,7 @@
      */
     private void onFocusRangeChanged(RevisionRange previousRange, RevisionRange nextRange) {
         if (DEBUG)
-            System.out_.println("range: " + previousRange + " > " + nextRange); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println(Format("range: {} > {}", previousRange, nextRange)); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusRange= nextRange;
         Revision revision= nextRange is null ? null : nextRange.getRevision();
         updateFocusRevision(revision);
@@ -1282,7 +1310,7 @@
      */
     private void onFocusRevisionChanged(Revision previousRevision, Revision nextRevision) {
         if (DEBUG)
-            System.out_.println("revision: " + previousRevision + " > " + nextRevision); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println(Format("revision: {} > {}", previousRevision, nextRevision)); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusRevision= nextRevision;
         uninstallWheelHandler();
         installWheelHandler();
@@ -1294,7 +1322,7 @@
      * Uninstalls the mouse wheel handler.
      */
     private void uninstallWheelHandler() {
-        fControl.removeListener(DWT.MouseWheel, fMouseHandler);
+        fControl.removeListener(DWT.MouseWheel, cast(Listener)fMouseHandler);
         fWheelHandlerInstalled= false;
     }
 
@@ -1547,7 +1575,7 @@
      * @since 3.3
      */
     public void addRevisionListener(IRevisionListener listener) {
-        fRevisionListeners.add(listener);
+        fRevisionListeners.add(cast(Object)listener);
     }
 
     /**
@@ -1557,7 +1585,7 @@
      * @since 3.3
      */
     public void removeRevisionListener(IRevisionListener listener) {
-        fRevisionListeners.remove(listener);
+        fRevisionListeners.remove(cast(Object)listener);
     }
 
     /**
--- a/dwtx/jface/internal/text/revisions/RevisionSelectionProvider.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/RevisionSelectionProvider.d	Mon Sep 08 00:51:37 2008 +0200
@@ -47,7 +47,7 @@
  * <p>
  * Calling {@link #setSelection(ISelection)} will set the current sticky revision on the ruler.
  * </p>
- * 
+ *
  * @since 3.2
  */
 public final class RevisionSelectionProvider : ISelectionProvider {
@@ -71,17 +71,17 @@
                 int offset= ts.getOffset();
                 setSelectedRevision(fPainter.getRevision(offset));
             }
-            
+
         }
-        
+
         public void dispose() {
             fPostProvider.removePostSelectionChangedListener(this);
         }
     }
 
     private const RevisionPainter fPainter;
-    private const ListenerList fListeners= new ListenerList();
-    
+    private const ListenerList fListeners;
+
     /**
      * The text viewer once we are installed, <code>null</code> if not installed.
      */
@@ -103,10 +103,11 @@
 
     /**
      * Creates a new selection provider.
-     * 
+     *
      * @param painter the painter that the created provider interacts with
      */
     this(RevisionPainter painter) {
+        fListeners= new ListenerList();
         fPainter= painter;
     }
 
@@ -114,16 +115,16 @@
      * @see dwtx.jface.viewers.ISelectionProvider#addSelectionChangedListener(dwtx.jface.viewers.ISelectionChangedListener)
      */
     public void addSelectionChangedListener(ISelectionChangedListener listener) {
-        fListeners.add(listener);
+        fListeners.add(cast(Object)listener);
     }
 
     /*
      * @see dwtx.jface.viewers.ISelectionProvider#removeSelectionChangedListener(dwtx.jface.viewers.ISelectionChangedListener)
      */
     public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-        fListeners.remove(listener);
+        fListeners.remove(cast(Object)listener);
     }
-    
+
     /*
      * @see dwtx.jface.viewers.ISelectionProvider#getSelection()
      */
@@ -143,8 +144,8 @@
             Object first= (cast(IStructuredSelection) selection).getFirstElement();
             if ( cast(Revision)first )
                 fPainter.handleRevisionSelected(cast(Revision) first);
-            else if ( cast(String)first )
-                fPainter.handleRevisionSelected(cast(String) first);
+            else if ( auto str = cast(ArrayWrapperString)first )
+                fPainter.handleRevisionSelected(str.array);
             else if (selection.isEmpty())
                 fPainter.handleRevisionSelected(cast(Revision) null);
         }
@@ -152,7 +153,7 @@
 
     /**
      * Installs the selection provider on the viewer.
-     * 
+     *
      * @param viewer the viewer on which we listen to for post selection events
      */
     void install(ITextViewer viewer) {
@@ -166,7 +167,7 @@
             }
         }
     }
-    
+
     /**
      * Uninstalls the selection provider.
      */
@@ -180,7 +181,7 @@
 
     /**
      * Private protocol used by {@link RevisionPainter} to signal selection of a revision.
-     * 
+     *
      * @param revision the selected revision, or <code>null</code> for none
      */
     void revisionSelected(Revision revision) {
@@ -189,7 +190,7 @@
 
     /**
      * Updates the currently selected revision and sends out an event if it changed.
-     * 
+     *
      * @param revision the newly selected revision or <code>null</code> for none
      */
     private void setSelectedRevision(Revision revision) {
--- a/dwtx/jface/internal/text/revisions/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author" name="GENERATOR">
-  <title>Revision model - Internal Classes</title>
-</head>
-<body>
-<p>
-Internal classes and helpers to implement the revision model and its UI presentation. See
-the <tt><a href="../../../text/revisions/package.html">org.eclipse.jface.text.revisions</a></tt>
-package for the API classes implementing the revision model.
-</p>
-Contains everything needed to:
-<ul>
-  <li>paint revision information in the vertical ruler</li>
-  <li>adapt the revision information to (quick) diff scripts</li>
-</ul>
-<p>
-This package is internal and may be subject to change without notice.
-</p>
-</body>
-</html>
--- a/dwtx/jface/internal/text/source/DiffPainter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/internal/text/source/DiffPainter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -343,7 +343,7 @@
     public void setModel(IAnnotationModel model) {
         IAnnotationModel newModel;
         if ( cast(IAnnotationModelExtension)model )
-            newModel= (cast(IAnnotationModelExtension) model).getAnnotationModel(IChangeRulerColumn.QUICK_DIFF_MODEL_ID);
+            newModel= (cast(IAnnotationModelExtension) model).getAnnotationModel(stringcast(IChangeRulerColumn.QUICK_DIFF_MODEL_ID));
         else
             newModel= model;
 
@@ -357,7 +357,7 @@
      */
     private void setDiffer(IAnnotationModel differ) {
         if ( cast(ILineDiffer)differ ) {
-            if (fLineDiffer !is differ) {
+            if ( cast(Object)fLineDiffer !is cast(Object)differ) {
                 if (fLineDiffer !is null)
                     (cast(IAnnotationModel) fLineDiffer).removeAnnotationModelListener(fAnnotationListener);
                 fLineDiffer= cast(ILineDiffer) differ;
--- a/dwtx/jface/internal/text/source/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author" name="GENERATOR">
-  <title>Revision model - Internal Classes</title>
-</head>
-<body>
-<p>
-Internal support classes and helpers for the <tt>org.eclipse.jface.text.source</tt> package.
-</body>
-</html>
--- a/dwtx/jface/text/AbstractDocument.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/AbstractDocument.d	Mon Sep 08 00:51:37 2008 +0200
@@ -63,7 +63,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -157,8 +156,8 @@
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
-
-// import java.util.regex.PatternSyntaxException;
+import dwtx.dwtxhelper.regex;
+import tango.text.convert.Format;
 
 import dwtx.core.runtime.Assert;
 import dwtx.core.runtime.ListenerList;
@@ -334,7 +333,7 @@
      * @return the document's text store
      */
     protected ITextStore getStore() {
-        Assert.isNotNull(fStore);
+        Assert.isNotNull(cast(Object)fStore);
         return fStore;
     }
 
@@ -345,7 +344,7 @@
      * @return the document's line tracker
      */
     protected ILineTracker getTracker() {
-        Assert.isNotNull(fTracker);
+        Assert.isNotNull(cast(Object)fTracker);
         return fTracker;
     }
 
@@ -440,48 +439,48 @@
      * @see dwtx.jface.text.IDocument#addDocumentListener(dwtx.jface.text.IDocumentListener)
      */
     public void addDocumentListener(IDocumentListener listener) {
-        Assert.isNotNull(listener);
-        fDocumentListeners.add(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fDocumentListeners.add(cast(Object)listener);
     }
 
     /*
      * @see dwtx.jface.text.IDocument#removeDocumentListener(dwtx.jface.text.IDocumentListener)
      */
     public void removeDocumentListener(IDocumentListener listener) {
-        Assert.isNotNull(listener);
-        fDocumentListeners.remove(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fDocumentListeners.remove(cast(Object)listener);
     }
 
     /*
      * @see dwtx.jface.text.IDocument#addPrenotifiedDocumentListener(dwtx.jface.text.IDocumentListener)
      */
     public void addPrenotifiedDocumentListener(IDocumentListener listener) {
-        Assert.isNotNull(listener);
-        fPrenotifiedDocumentListeners.add(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fPrenotifiedDocumentListeners.add(cast(Object)listener);
     }
 
     /*
      * @see dwtx.jface.text.IDocument#removePrenotifiedDocumentListener(dwtx.jface.text.IDocumentListener)
      */
     public void removePrenotifiedDocumentListener(IDocumentListener listener) {
-        Assert.isNotNull(listener);
-        fPrenotifiedDocumentListeners.remove(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fPrenotifiedDocumentListeners.remove(cast(Object)listener);
     }
 
     /*
      * @see dwtx.jface.text.IDocument#addDocumentPartitioningListener(dwtx.jface.text.IDocumentPartitioningListener)
      */
     public void addDocumentPartitioningListener(IDocumentPartitioningListener listener) {
-        Assert.isNotNull(listener);
-        fDocumentPartitioningListeners.add(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fDocumentPartitioningListeners.add(cast(Object)listener);
     }
 
     /*
      * @see dwtx.jface.text.IDocument#removeDocumentPartitioningListener(dwtx.jface.text.IDocumentPartitioningListener)
      */
     public void removeDocumentPartitioningListener(IDocumentPartitioningListener listener) {
-        Assert.isNotNull(listener);
-        fDocumentPartitioningListeners.remove(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fDocumentPartitioningListeners.remove(cast(Object)listener);
     }
 
     /*
@@ -798,7 +797,7 @@
             fDocumentPartitioningChangedEvent= new DocumentPartitioningChangedEvent(this);
             Iterator e= fDocumentPartitioners.keySet().iterator();
             while (e.hasNext()) {
-                String partitioning= cast(String) e.next();
+                String partitioning= stringcast( e.next() );
                 IDocumentPartitioner partitioner= cast(IDocumentPartitioner) fDocumentPartitioners.get(partitioning);
 
                 if ( cast(IDocumentPartitionerExtension3)partitioner ) {
@@ -920,7 +919,7 @@
         String contentType= null;
         try {
             contentType= getContentType(DEFAULT_PARTITIONING, offset, false);
-            Assert.isNotNull(contentType);
+            //Assert.isNotNull(contentType);
         } catch (BadPartitioningException e) {
             Assert.isTrue(false);
         }
@@ -934,7 +933,7 @@
         String[] contentTypes= null;
         try {
             contentTypes= getLegalContentTypes(DEFAULT_PARTITIONING);
-            Assert.isNotNull(contentTypes);
+            //Assert.isNotNull(contentTypes);
         } catch (BadPartitioningException e) {
             Assert.isTrue(false);
         }
@@ -1070,7 +1069,7 @@
         ITypedRegion partition= null;
         try {
             partition= getPartition(DEFAULT_PARTITIONING, offset, false);
-            Assert.isNotNull(partition);
+//             Assert.isNotNull(cast(Object)partition);
         } catch (BadPartitioningException e) {
             Assert.isTrue(false);
         }
@@ -1084,7 +1083,7 @@
         ITypedRegion[] partitioning= null;
         try {
             partitioning= computePartitioning(DEFAULT_PARTITIONING, offset, length, false);
-            Assert.isNotNull(partitioning);
+//             Assert.isNotNull(cast(Object)partitioning);
         } catch (BadPartitioningException e) {
             Assert.isTrue(false);
         }
@@ -1115,7 +1114,7 @@
         String[] categories= new String[fPositions.size()];
         Iterator keys= fPositions.keySet().iterator();
         for (int i= 0; i < categories.length; i++)
-            categories[i]= cast(String) keys.next();
+            categories[i]= stringcast( keys.next());
         return categories;
     }
 
@@ -1123,9 +1122,7 @@
      * @see dwtx.jface.text.IDocument#getPositionUpdaters()
      */
     public IPositionUpdater[] getPositionUpdaters() {
-        IPositionUpdater[] updaters= new IPositionUpdater[fPositionUpdaters.size()];
-        fPositionUpdaters.toArray(updaters);
-        return updaters;
+        return arraycast!(IPositionUpdater)(fPositionUpdaters.toArray());
     }
 
     /*
@@ -1151,14 +1148,14 @@
     public void insertPositionUpdater(IPositionUpdater updater, int index) {
 
         for (int i= fPositionUpdaters.size() - 1; i >= 0; i--) {
-            if (fPositionUpdaters.get(i) is updater)
+            if (fPositionUpdaters.get(i) is cast(Object)updater)
                 return;
         }
 
         if (index is fPositionUpdaters.size())
-            fPositionUpdaters.add(updater);
+            fPositionUpdaters.add(cast(Object)updater);
         else
-            fPositionUpdaters.add(index, updater);
+            fPositionUpdaters.add(index, cast(Object)updater);
     }
 
     /*
@@ -1252,7 +1249,7 @@
      */
     public void removePositionUpdater(IPositionUpdater updater) {
         for (int i= fPositionUpdaters.size() - 1; i >= 0; i--) {
-            if (fPositionUpdaters.get(i) is updater) {
+            if (fPositionUpdaters.get(i) is cast(Object)updater) {
                 fPositionUpdaters.remove(i);
                 return;
             }
@@ -1310,7 +1307,7 @@
      * @see dwtx.jface.text.IDocument#replace(int, int, java.lang.String)
      */
     public void replace(int pos, int length, String text)  {
-        if (length is 0 && (text is null || text.length() is 0))
+        if (length is 0 && (text is null || text.length is 0))
             replace(pos, length, text, getModificationStamp());
         else
             replace(pos, length, text, getNextModificationStamp());
@@ -1607,9 +1604,7 @@
     public String[] getPartitionings() {
         if (fDocumentPartitioners is null)
             return new String[0];
-        String[] partitionings= new String[fDocumentPartitioners.size()];
-        fDocumentPartitioners.keySet().toArray(partitionings);
-        return partitionings;
+        return stringcast(fDocumentPartitioners.keySet().toArray());
     }
 
     /*
@@ -1626,7 +1621,7 @@
         } else {
             if (fDocumentPartitioners is null)
                 fDocumentPartitioners= new HashMap();
-            fDocumentPartitioners.put(partitioning, partitioner);
+            fDocumentPartitioners.put(partitioning, cast(Object)partitioner);
         }
         DocumentPartitioningChangedEvent event= new DocumentPartitioningChangedEvent(this);
         event.setPartitionChange(partitioning, 0, getLength());
@@ -1677,7 +1672,7 @@
 
         fDocumentRewriteSession= new DocumentRewriteSession(sessionType);
         if (DEBUG)
-            System.out_.println("AbstractDocument: Starting rewrite session: " + fDocumentRewriteSession); //$NON-NLS-1$
+            System.out_.println(Format("AbstractDocument: Starting rewrite session: {}", fDocumentRewriteSession)); //$NON-NLS-1$
 
         fireRewriteSessionChanged(new DocumentRewriteSessionEvent(this, fDocumentRewriteSession, DocumentRewriteSessionEvent.SESSION_START));
 
@@ -1724,7 +1719,7 @@
         if (fDocumentRewriteSession is session) {
 
             if (DEBUG)
-                System.out_.println("AbstractDocument: Stopping rewrite session: " + session); //$NON-NLS-1$
+                System.out_.println(Format("AbstractDocument: Stopping rewrite session: {}", session)); //$NON-NLS-1$
 
             DocumentRewriteSessionType sessionType= session.getSessionType();
             if (DocumentRewriteSessionType.SEQUENTIAL is sessionType || DocumentRewriteSessionType.STRICTLY_SEQUENTIAL is sessionType)
@@ -1754,7 +1749,7 @@
             DocumentPartitioningChangedEvent event= new DocumentPartitioningChangedEvent(this);
             Iterator e= fDocumentPartitioners.keySet().iterator();
             while (e.hasNext()) {
-                String partitioning= cast(String) e.next();
+                String partitioning= stringcast( e.next());
                 IDocumentPartitioner partitioner= cast(IDocumentPartitioner) fDocumentPartitioners.get(partitioning);
                 if ( cast(IDocumentPartitionerExtension3)partitioner ) {
                     IDocumentPartitionerExtension3 extension= cast(IDocumentPartitionerExtension3) partitioner;
@@ -1772,9 +1767,9 @@
      * @since 3.1
      */
     public void addDocumentRewriteSessionListener(IDocumentRewriteSessionListener listener) {
-        Assert.isNotNull(listener);
-        if (! fDocumentRewriteSessionListeners.contains(listener))
-            fDocumentRewriteSessionListeners.add(listener);
+        Assert.isNotNull(cast(Object)listener);
+        if (! fDocumentRewriteSessionListeners.contains(cast(Object)listener))
+            fDocumentRewriteSessionListeners.add(cast(Object)listener);
     }
 
     /*
@@ -1782,8 +1777,8 @@
      * @since 3.1
      */
     public void removeDocumentRewriteSessionListener(IDocumentRewriteSessionListener listener) {
-        Assert.isNotNull(listener);
-        fDocumentRewriteSessionListeners.remove(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fDocumentRewriteSessionListeners.remove(cast(Object)listener);
     }
 
     /**
@@ -1804,7 +1799,7 @@
             extension.stopRewriteSession(session);
 
             if (DEBUG)
-                System.out_.println("AbstractDocument: Flushing rewrite session for partition type: " + partitioning); //$NON-NLS-1$
+                System.out_.println(Format("AbstractDocument: Flushing rewrite session for partition type: {}", partitioning)); //$NON-NLS-1$
 
             DocumentPartitioningChangedEvent event= new DocumentPartitioningChangedEvent(this);
             event.setPartitionChange(partitioning, 0, getLength());
--- a/dwtx/jface/text/AbstractHoverInformationControlManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/AbstractHoverInformationControlManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -153,11 +152,8 @@
 import dwtx.jface.text.ITextViewerExtension4; // packageimport
 import dwtx.jface.text.ITypedRegion; // packageimport
 
-
 import dwt.dwthelper.utils;
-
-
-
+import tango.text.convert.Format;
 
 import dwt.DWT;
 import dwt.events.ControlEvent;
@@ -640,7 +636,7 @@
             if (fIsComputing || fIsInRestartMode ||
                     (fSubjectControl !is null && !fSubjectControl.isDisposed() && fSubjectControl.getShell() !is fSubjectControl.getShell().getDisplay().getActiveShell())) {
                 if (DEBUG)
-                    System.out_.println("AbstractHoverInformationControlManager...mouseHover: @ " + event.x + "/" + event.y + " : hover cancelled: fIsComputing= " + fIsComputing + ", fIsInRestartMode= " + fIsInRestartMode); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+                    System.out_.println(Format("AbstractHoverInformationControlManager...mouseHover: @ {}/{} : hover cancelled: fIsComputing= {}, fIsInRestartMode= {}", event.x, event.y, fIsComputing, fIsInRestartMode)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
                 return;
             }
 
@@ -1092,6 +1088,9 @@
     protected Point getHoverEventLocation() {
         return fHoverEvent !is null ? new Point(fHoverEvent.x, fHoverEvent.y) : new Point(-1, -1);
     }
+    package Point getHoverEventLocation_package() {
+        return getHoverEventLocation();
+    }
 
     /**
      * Returns the most recent mouse hover event.
@@ -1123,11 +1122,17 @@
      * @nooverride This method is not intended to be re-implemented or extended by clients.
      */
     public InternalAccessor getInternalAccessor() {
-        return new class()  MyInternalAccessor {
+        return new MyInternalAccessor2(this);
+    }
+        static class MyInternalAccessor2 : MyInternalAccessor {
+            AbstractHoverInformationControlManager outer_;
+            this( AbstractHoverInformationControlManager a ){
+                outer_=a;
+                super(a);
+            }
             public void setHoverEnrichMode(ITextViewerExtension8_EnrichMode mode) {
-                this.outer.setHoverEnrichMode(mode);
+                outer_.setHoverEnrichMode(mode);
             }
-        };
-    }
+        }
 
 }
--- a/dwtx/jface/text/AbstractInformationControlManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/AbstractInformationControlManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -203,33 +203,37 @@
      *
      * @since 3.4
      */
-    class MyInternalAccessor : InternalAccessor {
+    public static class MyInternalAccessor : InternalAccessor {
+        AbstractInformationControlManager outer_;
+        this( AbstractInformationControlManager a ){
+            outer_=a;
+        }
         public IInformationControl getCurrentInformationControl() {
-            return this.outer.getCurrentInformationControl();
+            return outer_.getCurrentInformationControl();
         }
 
         public void setInformationControlReplacer(InformationControlReplacer replacer) {
-            this.outer.setInformationControlReplacer(replacer);
+            outer_.setInformationControlReplacer(replacer);
         }
 
         public InformationControlReplacer getInformationControlReplacer() {
-            return this.outer.getInformationControlReplacer();
+            return outer_.getInformationControlReplacer();
         }
 
         public bool canReplace(IInformationControl control) {
-            return this.outer.canReplace(control);
+            return outer_.canReplace(control);
         }
 
         public bool isReplaceInProgress() {
-            return this.outer.isReplaceInProgress();
+            return outer_.isReplaceInProgress();
         }
 
         public void replaceInformationControl(bool takeFocus) {
-            this.outer.replaceInformationControl(takeFocus);
+            outer_.replaceInformationControl(takeFocus);
         }
 
         public void cropToClosestMonitor(Rectangle bounds) {
-            this.outer.cropToClosestMonitor(bounds);
+            outer_.cropToClosestMonitor(bounds);
         }
 
         public void setHoverEnrichMode(EnrichMode mode) {
@@ -1592,6 +1596,6 @@
      * @nooverride This method is not intended to be re-implemented or extended by clients.
      */
     public InternalAccessor getInternalAccessor() {
-        return new MyInternalAccessor();
+        return new MyInternalAccessor(this);
     }
 }
--- a/dwtx/jface/text/AbstractLineTracker.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/AbstractLineTracker.d	Mon Sep 08 00:51:37 2008 +0200
@@ -155,6 +155,7 @@
 
 
 import dwt.dwthelper.utils;
+import tango.text.convert.Format;
 
 import dwtx.dwtxhelper.Collection;
 
@@ -375,6 +376,9 @@
         if (fNeedsConversion) {
             fNeedsConversion= false;
             fDelegate= new class(cast(ListLineTracker) fDelegate)  TreeLineTracker {
+                this(ListLineTracker arg){
+                    super(arg);
+                }
                 protected DelimiterInfo nextDelimiterInfo(String text, int offset) {
                     return this.outer.nextDelimiterInfo(text, offset);
                 }
@@ -438,7 +442,7 @@
      */
     protected final void flushRewriteSession()  {
         if (DEBUG)
-            System.out_.println("AbstractLineTracker: Flushing rewrite session: " + fActiveRewriteSession); //$NON-NLS-1$
+            System.out_.println(Format("AbstractLineTracker: Flushing rewrite session: {}", fActiveRewriteSession)); //$NON-NLS-1$
 
         Iterator e= fPendingRequests.iterator();
 
--- a/dwtx/jface/text/AbstractReusableInformationControlCreator.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/AbstractReusableInformationControlCreator.d	Mon Sep 08 00:51:37 2008 +0200
@@ -172,7 +172,7 @@
  */
 public abstract class AbstractReusableInformationControlCreator : IInformationControlCreator, IInformationControlCreatorExtension, DisposeListener {
 
-    private Map fInformationControls= new HashMap();
+    private Map fInformationControls;
 
     /**
      * Creates the control.
@@ -182,6 +182,10 @@
      */
     protected abstract IInformationControl doCreateInformationControl(Shell parent);
 
+    this(){
+        fInformationControls= new HashMap();
+    }
+
     /*
      * @see dwtx.jface.text.IInformationControlCreator#createInformationControl(dwt.widgets.Shell)
      */
@@ -190,7 +194,7 @@
         if (control is null) {
             control= doCreateInformationControl(parent);
             control.addDisposeListener(this);
-            fInformationControls.put(parent, control);
+            fInformationControls.put(parent, cast(Object)control);
         }
         return control;
     }
@@ -211,13 +215,13 @@
      * @see dwtx.jface.text.IInformationControlCreatorExtension#canReuse(dwtx.jface.text.IInformationControl)
      */
     public bool canReuse(IInformationControl control) {
-        return fInformationControls.containsValue(control);
+        return fInformationControls.containsValue(cast(Object)control);
     }
 
     /*
      * @see dwtx.jface.text.IInformationControlCreatorExtension#canReplace(dwtx.jface.text.IInformationControlCreator)
      */
     public bool canReplace(IInformationControlCreator creator) {
-        return creator.getClass() is getClass();
+        return creator.classinfo is this.classinfo;
     }
 }
--- a/dwtx/jface/text/Assert.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/Assert.d	Mon Sep 08 00:51:37 2008 +0200
@@ -173,7 +173,7 @@
  * Note that an <code>assert</code> statement is slated to be added to the
  * Java language in JDK 1.4, rending this class obsolete.
  * </p>
- * 
+ *
  * @deprecated As of 3.3, replaced by {@link dwtx.core.runtime.Assert}
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
@@ -254,7 +254,7 @@
      */
     public static bool isLegal(bool expression, String message) {
         if (!expression)
-            throw new IllegalArgumentException("assertion failed; " + message); //$NON-NLS-1$
+            throw new IllegalArgumentException("assertion failed; " ~ message); //$NON-NLS-1$
         return expression;
     }
 
@@ -304,7 +304,7 @@
      */
     public static void isNotNull(Object object, String message) {
         if (object is null)
-            throw new AssertionFailedException("null argument;" + message);//$NON-NLS-1$
+            throw new AssertionFailedException("null argument;" ~ message);//$NON-NLS-1$
     }
 
     /**
@@ -335,7 +335,7 @@
      */
     public static bool isTrue(bool expression, String message) {
         if (!expression)
-            throw new AssertionFailedException("Assertion failed: "+message);//$NON-NLS-1$
+            throw new AssertionFailedException("Assertion failed: "~message);//$NON-NLS-1$
         return expression;
     }
 }
--- a/dwtx/jface/text/BadLocationException.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/BadLocationException.d	Mon Sep 08 00:51:37 2008 +0200
@@ -180,7 +180,7 @@
      * Creates a new bad location exception.
      */
     public this() {
-        super();
+        super(null);
     }
 
     /**
--- a/dwtx/jface/text/BadPositionCategoryException.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/BadPositionCategoryException.d	Mon Sep 08 00:51:37 2008 +0200
@@ -182,7 +182,7 @@
      * Creates a new bad position category exception.
      */
     public this() {
-        super();
+        super( null );
     }
 
     /**
--- a/dwtx/jface/text/ConfigurableLineTracker.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/ConfigurableLineTracker.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -178,7 +177,7 @@
     /** The strings which are considered being the line delimiter */
     private String[] fDelimiters;
     /** A predefined delimiter information which is always reused as return value */
-    private AbstractLineTracker_DelimiterInfo fDelimiterInfo= new AbstractLineTracker_DelimiterInfo();
+    private AbstractLineTracker_DelimiterInfo fDelimiterInfo;
 
 
     /**
@@ -188,7 +187,8 @@
      *      may not be <code>null</code> and must be longer than 0
      */
     public this(String[] legalLineDelimiters) {
-        Assert.isTrue(legalLineDelimiters !is null && legalLineDelimiters.length > 0);
+        Assert.isTrue(legalLineDelimiters.length > 0);
+        fDelimiterInfo= new AbstractLineTracker_DelimiterInfo();
         fDelimiters= TextUtilities.copy(legalLineDelimiters);
     }
 
--- a/dwtx/jface/text/CopyOnWriteTextStore.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/CopyOnWriteTextStore.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -188,7 +187,7 @@
          * Create an empty text store.
          */
         private this() {
-            super();
+//             super();
         }
 
         /**
@@ -196,7 +195,7 @@
          * @param text  the initial content
          */
         private this(String text) {
-            super();
+//             super();
             set(text);
         }
 
@@ -239,7 +238,7 @@
     }
 
     /** The underlying "real" text store */
-    protected ITextStore fTextStore= new StringTextStore();
+    protected ITextStore fTextStore;
 
     /** A modifiable <code>ITextStore</code> instance */
     private const ITextStore fModifiableTextStore;
@@ -247,13 +246,14 @@
     /**
      * Creates an empty text store. The given text store will be used upon first
      * modification attempt.
-     * 
+     *
      * @param modifiableTextStore
      *            a modifiable <code>ITextStore</code> instance, may not be
      *            <code>null</code>
      */
     public this(ITextStore modifiableTextStore) {
-        Assert.isNotNull(modifiableTextStore);
+        Assert.isNotNull(cast(Object)modifiableTextStore);
+        fTextStore= new StringTextStore();
         fTextStore= new StringTextStore();
         fModifiableTextStore= modifiableTextStore;
     }
--- a/dwtx/jface/text/CursorLinePainter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/CursorLinePainter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -187,9 +187,9 @@
     private IPaintPositionManager fPositionManager;
 
     /** Keeps track of the line to be painted */
-    private Position fCurrentLine= new Position(0, 0);
+    private Position fCurrentLine;
     /** Keeps track of the line to be cleared */
-    private Position fLastLine= new Position(0, 0);
+    private Position fLastLine;
     /** Keeps track of the line number of the last painted line */
     private int fLastLineNumber= -1;
     /** Indicates whether this painter is active */
@@ -201,6 +201,8 @@
      * @param textViewer the source viewer for which to create a painter
      */
     public this(ITextViewer textViewer) {
+        fCurrentLine= new Position(0, 0);
+        fLastLine= new Position(0, 0);
         fViewer= textViewer;
     }
 
@@ -251,10 +253,10 @@
 
                 fLastLine.offset= fCurrentLine.offset;
                 fLastLine.length= fCurrentLine.length;
-                fLastLine.isDeleted= fCurrentLine.isDeleted;
+                fLastLine.isDeleted_= fCurrentLine.isDeleted_;
 
-                if (fCurrentLine.isDeleted) {
-                    fCurrentLine.isDeleted= false;
+                if (fCurrentLine.isDeleted_) {
+                    fCurrentLine.isDeleted_= false;
                     fPositionManager.managePosition(fCurrentLine);
                 }
 
--- a/dwtx/jface/text/DefaultDocumentAdapter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DefaultDocumentAdapter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -60,7 +60,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -185,7 +184,7 @@
     /** The original line delimiters */
     private String[] fOriginalLineDelimiters;
     /** The registered text change listeners */
-    private List fTextChangeListeners= new ArrayList(1);
+    private List fTextChangeListeners;
     /**
      * The remembered document event
      * @since 2.0
@@ -212,7 +211,7 @@
      * The data of the event at receipt of <code>documentAboutToBeChanged</code>
      * @since 2.1
      */
-    private  DocumentEvent fOriginalEvent= new DocumentEvent();
+    private  DocumentEvent fOriginalEvent;
 
 
     /**
@@ -220,6 +219,8 @@
      * any document.
      */
     public this() {
+        fTextChangeListeners= new ArrayList(1);
+        fOriginalEvent= new DocumentEvent();
     }
 
     /**
@@ -254,17 +255,17 @@
      * @see StyledTextContent#addTextChangeListener(TextChangeListener)
      */
     public void addTextChangeListener(TextChangeListener listener) {
-        Assert.isNotNull(listener);
-        if (!fTextChangeListeners.contains(listener))
-            fTextChangeListeners.add(listener);
+        Assert.isNotNull(cast(Object)listener);
+        if (!fTextChangeListeners.contains(cast(Object)listener))
+            fTextChangeListeners.add(cast(Object)listener);
     }
 
     /*
      * @see StyledTextContent#removeTextChangeListener(TextChangeListener)
      */
     public void removeTextChangeListener(TextChangeListener listener) {
-        Assert.isNotNull(listener);
-        fTextChangeListeners.remove(listener);
+        Assert.isNotNull(cast(Object)listener);
+        fTextChangeListeners.remove(cast(Object)listener);
     }
 
     /**
@@ -563,4 +564,12 @@
         fOriginalLineDelimiters= fDocument.getLegalLineDelimiters();
         fIsForwarding= false;
     }
+
+    /++
+     + DWT extension
+     +/
+    public int utf8AdjustOffset( int offset ){
+        implMissing(__FILE__,__LINE__);
+        return offset;
+    }
 }
--- a/dwtx/jface/text/DefaultInformationControl.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DefaultInformationControl.d	Mon Sep 08 00:51:37 2008 +0200
@@ -258,7 +258,7 @@
     /** The information presenter, or <code>null</code> if none. */
     private const IInformationPresenter fPresenter;
     /** A cached text presentation */
-    private const TextPresentation fPresentation= new TextPresentation();
+    private const TextPresentation fPresentation;
 
     /**
      * Additional styles to use for the text control.
@@ -275,6 +275,7 @@
      * @since 3.4
      */
     public this(Shell parent, bool isResizeable) {
+        fPresentation= new TextPresentation();
         super(parent, isResizeable);
         fAdditionalTextStyles= isResizeable ? DWT.V_SCROLL | DWT.H_SCROLL : DWT.NONE;
         fPresenter= new HTMLTextPresenter(!isResizeable);
@@ -304,6 +305,7 @@
      * @since 3.4
      */
     public this(Shell parent, String statusFieldText, IInformationPresenter presenter) {
+        fPresentation= new TextPresentation();
         super(parent, statusFieldText);
         fAdditionalTextStyles= DWT.NONE;
         fPresenter= presenter;
@@ -334,6 +336,7 @@
      * @since 3.4
      */
     public this(Shell parent, ToolBarManager toolBarManager, IInformationPresenter presenter) {
+        fPresentation= new TextPresentation();
         super(parent, toolBarManager);
         fAdditionalTextStyles= DWT.V_SCROLL | DWT.H_SCROLL;
         fPresenter= presenter;
@@ -393,6 +396,7 @@
      * @deprecated As of 3.4, replaced by simpler constructors
      */
     public this(Shell parentShell, int shellStyle, int style, IInformationPresenter presenter, String statusFieldText) {
+        fPresentation= new TextPresentation();
         super(parentShell, DWT.NO_FOCUS | DWT.ON_TOP | shellStyle, statusFieldText, null);
         fAdditionalTextStyles= style;
         fPresenter= presenter;
@@ -426,6 +430,7 @@
      * @deprecated As of 3.4, replaced by {@link #DefaultInformationControl(Shell, String, DefaultInformationControl.IInformationPresenter)}
      */
     public this(Shell parent, int textStyles, IInformationPresenter presenter, String statusFieldText) {
+        fPresentation= new TextPresentation();
         super(parent, statusFieldText);
         fAdditionalTextStyles= textStyles;
         fPresenter= presenter;
--- a/dwtx/jface/text/DefaultTextDoubleClickStrategy.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DefaultTextDoubleClickStrategy.d	Mon Sep 08 00:51:37 2008 +0200
@@ -321,7 +321,7 @@
      * Creates a new default text double click strategy.
      */
     public this() {
-        super();
+//         super();
     }
 
     /*
@@ -343,8 +343,7 @@
 
             fDocIter.setDocument(document, line);
 
-            UBreakIterator breakIter= UBreakIterator.getWordInstance();
-            breakIter.setText(fDocIter);
+            UBreakIterator breakIter= UBreakIterator.openWordIterator( ULocale.Default, fDocIter );
 
             int start= breakIter.preceding(position);
             if (start is UBreakIterator.DONE)
--- a/dwtx/jface/text/DefaultUndoManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DefaultUndoManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -167,6 +167,7 @@
 import dwt.events.KeyListener;
 import dwt.events.MouseEvent;
 import dwt.events.MouseListener;
+import dwt.widgets.Event;
 import dwt.widgets.Display;
 import dwt.widgets.Shell;
 import dwtx.core.commands.ExecutionException;
@@ -453,9 +454,9 @@
 
         protected void updateCommand() {
             fText= fTextBuffer.toString();
-            fTextBuffer.setLength(0);
+            fTextBuffer.truncate(0);
             fPreservedText= fPreservedTextBuffer.toString();
-            fPreservedTextBuffer.setLength(0);
+            fPreservedTextBuffer.truncate(0);
         }
 
         /**
@@ -535,7 +536,7 @@
             String delimiter= ", "; //$NON-NLS-1$
             StringBuffer text= new StringBuffer(super.toString());
             text.append("\n"); //$NON-NLS-1$
-            text.append(this.getClass().getName());
+            text.append(this.classinfo.name);
             text.append(" undo modification stamp: "); //$NON-NLS-1$
             text.append(fUndoModificationStamp);
             text.append(" redo modification stamp: "); //$NON-NLS-1$
@@ -584,7 +585,7 @@
     class CompoundTextCommand : TextCommand {
 
         /** The list of individual commands */
-        private List fCommands= new ArrayList();
+        private List fCommands;
 
         /**
          * Creates a new compound text command.
@@ -594,6 +595,7 @@
          */
         this(IUndoContext context) {
             super(context);
+            fCommands= new ArrayList();
         }
 
         /**
@@ -882,12 +884,12 @@
             case OperationHistoryEvent.ABOUT_TO_REDO:
                 // if this is one of our operations
                 if (event.getOperation().hasContext(fUndoContext)) {
-                    fTextViewer.getTextWidget().getDisplay().syncExec(dgRunnable((Event event_, int type_ ) {
+                    fTextViewer.getTextWidget().getDisplay().syncExec(dgRunnable((OperationHistoryEvent event_, int type_ ) {
                         // if we are undoing/redoing a command we generated, then ignore
                         // the document changes associated with this undo or redo.
-                        if (cast(TextCommand)event_.getOperation() ) {
+                        if (event_.getOperation() ) {
                             if ( cast(TextViewer)fTextViewer )
-                                (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies(true);
+                                (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies_package(true);
                             listenToTextChanges(false);
 
                             // in the undo case only, make sure compounds are closed
@@ -916,7 +918,7 @@
                             listenToTextChanges(true);
                             fOperation= null;
                             if ( cast(TextViewer)fTextViewer )
-                                (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies(false);
+                                (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies_package(false);
                          }
                     });
                 }
@@ -927,9 +929,9 @@
     }
 
     /** Text buffer to collect text which is inserted into the viewer */
-    private StringBuffer fTextBuffer= new StringBuffer();
+    private StringBuffer fTextBuffer;
     /** Text buffer to collect viewer content which has been replaced */
-    private StringBuffer fPreservedTextBuffer= new StringBuffer();
+    private StringBuffer fPreservedTextBuffer;
     /** The document modification stamp for undo. */
     protected long fPreservedUndoModificationStamp= IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP;
     /** The document modification stamp for redo. */
@@ -989,6 +991,9 @@
      * @param undoLevel the length of this manager's history
      */
     public this(int undoLevel) {
+        fTextBuffer= new StringBuffer();
+        fPreservedTextBuffer= new StringBuffer();
+
         fHistoryListener= new HistoryListener();
         fHistory= OperationHistoryFactory.getOperationHistory();
         setMaximalUndoLevel(undoLevel);
@@ -1157,7 +1162,7 @@
         if (index > -1) {
             char c;
             int length= text.length();
-            for (int i= delimiters[index].length(); i < length; i++) {
+            for (int i= delimiters[index].length; i < length; i++) {
                 c= text.charAt(i);
                 if (c !is ' ' && c !is '\t')
                     return false;
@@ -1220,7 +1225,7 @@
         } else {
             if (length is 0) {
                 // text will be deleted by backspace or DEL key or empty clipboard
-                length= replacedText.length();
+                length= replacedText.length;
                 String[] delimiters= fTextViewer.getDocument().getLegalLineDelimiters();
 
                 if ((length is 1) || TextUtilities.equals(delimiters, replacedText) > -1) {
@@ -1243,7 +1248,8 @@
                         // repeated backspace
 
                             // insert in buffer and extend command range
-                        fPreservedTextBuffer.insert(0, replacedText);
+                        fPreservedTextBuffer.select(0, 0);
+                        fPreservedTextBuffer.replace(replacedText);
                         fCurrent.fStart= modelStart;
 
                     } else {
@@ -1275,7 +1281,7 @@
                 // text will be replaced
 
                 if (length is 1) {
-                    length= replacedText.length();
+                    length= replacedText.length;
                     String[] delimiters= fTextViewer.getDocument().getLegalLineDelimiters();
 
                     if ((length is 1) || TextUtilities.equals(delimiters, replacedText) > -1) {
@@ -1328,7 +1334,7 @@
                 shell= st.getShell();
         }
         if (Display.getCurrent() !is null)
-            MessageDialog.openError(shell, title, ex.getLocalizedMessage());
+            MessageDialog.openError(shell, title, ex.msg/+getLocalizedMessage()+/);
         else {
             Display display;
             Shell finalShell= shell;
@@ -1337,7 +1343,7 @@
             else
                 display= Display.getDefault();
             display.syncExec(dgRunnable( {
-                MessageDialog.openError(finalShell, title, ex.getLocalizedMessage());
+                MessageDialog.openError(finalShell, title, ex.msg/+getLocalizedMessage()+/);
             }));
         }
     }
@@ -1384,8 +1390,8 @@
             fCurrent= null;
             fTextViewer= null;
             disposeCommandStack();
-            fTextBuffer= null;
-            fPreservedTextBuffer= null;
+            fTextBuffer.clear();
+            fPreservedTextBuffer.clear();
             fUndoContext= null;
         }
     }
@@ -1400,8 +1406,8 @@
             fFoldingIntoCompoundChange= false;
             fInserting= false;
             fOverwriting= false;
-            fTextBuffer.setLength(0);
-            fPreservedTextBuffer.setLength(0);
+            fTextBuffer.truncate(0);
+            fPreservedTextBuffer.truncate(0);
             fPreservedUndoModificationStamp= IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP;
             fPreservedRedoModificationStamp= IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP;
         }
--- a/dwtx/jface/text/DocumentClone.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentClone.d	Mon Sep 08 00:51:37 2008 +0200
@@ -176,7 +176,7 @@
          * @param content the content
          */
         public this(String content) {
-            Assert.isNotNull(content);
+            //Assert.isNotNull(content);
             fContent= content;
         }
 
--- a/dwtx/jface/text/DocumentCommand.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentCommand.d	Mon Sep 08 00:51:37 2008 +0200
@@ -18,9 +18,14 @@
 import dwtx.jface.text.IRegion; // packageimport
 import dwtx.jface.text.IDocumentListener; // packageimport
 import dwtx.jface.text.IDocument; // packageimport
+import dwtx.jface.text.BadLocationException; // packageimport
+import dwtx.jface.text.DefaultPositionUpdater; // packageimport
+import dwtx.jface.text.Position; // packageimport
+import dwtx.jface.text.BadPositionCategoryException; // packageimport
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
+import tango.core.Exception;
 
 import dwt.events.VerifyEvent;
 import dwtx.core.runtime.Assert;
@@ -62,7 +67,7 @@
          */
         public this(int offset, int length, String text, IDocumentListener owner) {
             if (offset < 0 || length < 0)
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
             fOffset= offset;
             fLength= length;
             fText= text;
@@ -75,7 +80,7 @@
          * @return the length delta for this command
          */
         public int getDeltaLength() {
-            return (fText is null ? 0 : fText.length()) - fLength;
+            return (fText is null ? 0 : fText.length) - fLength;
         }
 
         /**
@@ -141,7 +146,7 @@
          */
         public this(ListIterator listIterator) {
             if (listIterator is null)
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
             fListIterator= listIterator;
         }
 
@@ -190,7 +195,7 @@
          */
         public this(List commands, Command command, bool forward) {
             if (commands is null || command is null)
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
             fIterator= forward ? commands.iterator() : new ReverseListIterator(commands.listIterator(commands.size()));
             fCommand= command;
             fForward= forward;
@@ -209,7 +214,7 @@
         public Object next() {
 
             if (!hasNext())
-                throw new NoSuchElementException();
+                throw new NoSuchElementException(null);
 
             if (fCommand is null)
                 return fIterator.next();
@@ -232,7 +237,7 @@
                 return tempCommand;
 
             } else {
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
             }
         }
 
@@ -266,7 +271,7 @@
      * Additional document commands.
      * @since 2.1
      */
-    private const List fCommands= new ArrayList();
+    private const List fCommands;
     /**
      * Indicates whether the caret should be shifted by this command.
      * @since 3.0
@@ -277,7 +282,8 @@
     /**
      * Creates a new document command.
      */
-    protected this() {
+    /+protected+/ this() {
+        fCommands= new ArrayList();
     }
 
     /**
@@ -435,6 +441,7 @@
         } catch (BadPositionCategoryException e) {
             // ignore
         } finally {
+            delegate(){
             if (updateCaret()) {
                 document.removePositionUpdater(updater);
                 try {
@@ -444,6 +451,7 @@
                 }
                 caretOffset= caretPosition.getOffset();
             }
+            }();
         }
     }
 
--- a/dwtx/jface/text/DocumentEvent.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentEvent.d	Mon Sep 08 00:51:37 2008 +0200
@@ -211,7 +211,7 @@
      */
     public this(IDocument doc, int offset, int length, String text) {
 
-        Assert.isNotNull(doc);
+        Assert.isNotNull(cast(Object)doc);
         Assert.isTrue(offset >= 0);
         Assert.isTrue(length >= 0);
 
--- a/dwtx/jface/text/DocumentPartitioningChangedEvent.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentPartitioningChangedEvent.d	Mon Sep 08 00:51:37 2008 +0200
@@ -173,7 +173,7 @@
     /** The document whose partitionings changed */
     private const IDocument fDocument;
     /** The map of partitionings to changed regions. */
-    private const Map fMap= new HashMap();
+    private const Map fMap;
 
 
     /**
@@ -183,6 +183,7 @@
      * @param document the changed document
      */
     public this(IDocument document) {
+        fMap= new HashMap();
         fDocument= document;
     }
 
@@ -212,9 +213,7 @@
      * @return the set of changed partitionings
      */
     public String[] getChangedPartitionings() {
-        String[] partitionings= new String[fMap.size()];
-        fMap.keySet().toArray(partitionings);
-        return partitionings;
+        return stringcast(fMap.keySet().toArray());
     }
 
     /**
@@ -225,7 +224,7 @@
      * @param length the region length
      */
     public void setPartitionChange(String partitioning, int offset, int length) {
-        Assert.isNotNull(partitioning);
+        //Assert.isNotNull(partitioning);
         fMap.put(partitioning, new Region(offset, length));
     }
 
--- a/dwtx/jface/text/DocumentRewriteSession.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentRewriteSession.d	Mon Sep 08 00:51:37 2008 +0200
@@ -174,7 +174,7 @@
      *
      * @param sessionType the type of this session
      */
-    protected this(DocumentRewriteSessionType sessionType) {
+    /+protected+/ this(DocumentRewriteSessionType sessionType) {
         fSessionType= sessionType;
     }
 
@@ -191,6 +191,7 @@
      * @see java.lang.Object#toString()
      */
     public override String toString() {
-        return (new StringBuffer()).append(toHash()).toString();
+        static assert( hash_t.sizeof is 4 );
+        return (new StringBuffer()).append(Integer.toString(toHash())).toString();
     }
 }
--- a/dwtx/jface/text/DocumentRewriteSessionEvent.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentRewriteSessionEvent.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -169,8 +168,28 @@
  */
 public class DocumentRewriteSessionEvent {
 
-    public const static Object SESSION_START= new Object();
-    public const static Object SESSION_STOP= new Object();
+    private static Object SESSION_START_;
+    public static Object SESSION_START(){
+        if( SESSION_START_ is null ){
+            synchronized(DocumentRewriteSessionEvent.classinfo){
+                if( SESSION_START_ is null ){
+                    SESSION_START_ = new Object();
+                }
+            }
+        }
+        return SESSION_START_;
+    }
+    private static Object SESSION_STOP_;
+    public static Object SESSION_STOP(){
+        if( SESSION_STOP_ is null ){
+            synchronized(DocumentRewriteSessionEvent.classinfo){
+                if( SESSION_STOP_ is null ){
+                    SESSION_STOP_ = new Object();
+                }
+            }
+        }
+        return SESSION_STOP_;
+    }
 
     /** The changed document */
     public IDocument fDocument;
@@ -189,7 +208,7 @@
      *            {@link DocumentRewriteSessionEvent#SESSION_STOP}.
      */
     public this(IDocument doc, DocumentRewriteSession session, Object changeType) {
-        Assert.isNotNull(doc);
+        Assert.isNotNull(cast(Object)doc);
         Assert.isNotNull(session);
 
         fDocument= doc;
--- a/dwtx/jface/text/DocumentRewriteSessionType.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/DocumentRewriteSessionType.d	Mon Sep 08 00:51:37 2008 +0200
@@ -12,151 +12,8 @@
  *******************************************************************************/
 module dwtx.jface.text.DocumentRewriteSessionType;
 
-import dwtx.jface.text.IDocumentPartitioningListener; // packageimport
-import dwtx.jface.text.DefaultTextHover; // packageimport
-import dwtx.jface.text.AbstractInformationControl; // packageimport
-import dwtx.jface.text.TextUtilities; // packageimport
-import dwtx.jface.text.IInformationControlCreatorExtension; // packageimport
-import dwtx.jface.text.AbstractInformationControlManager; // packageimport
-import dwtx.jface.text.ITextViewerExtension2; // packageimport
-import dwtx.jface.text.IDocumentPartitioner; // packageimport
-import dwtx.jface.text.DefaultIndentLineAutoEditStrategy; // packageimport
-import dwtx.jface.text.ITextSelection; // packageimport
-import dwtx.jface.text.Document; // packageimport
-import dwtx.jface.text.FindReplaceDocumentAdapterContentProposalProvider; // packageimport
-import dwtx.jface.text.ITextListener; // packageimport
-import dwtx.jface.text.BadPartitioningException; // packageimport
-import dwtx.jface.text.ITextViewerExtension5; // packageimport
-import dwtx.jface.text.IDocumentPartitionerExtension3; // packageimport
-import dwtx.jface.text.IUndoManager; // packageimport
-import dwtx.jface.text.ITextHoverExtension2; // packageimport
-import dwtx.jface.text.IRepairableDocument; // packageimport
-import dwtx.jface.text.IRewriteTarget; // packageimport
-import dwtx.jface.text.DefaultPositionUpdater; // packageimport
-import dwtx.jface.text.RewriteSessionEditProcessor; // packageimport
-import dwtx.jface.text.TextViewerHoverManager; // packageimport
-import dwtx.jface.text.DocumentRewriteSession; // packageimport
-import dwtx.jface.text.TextViewer; // packageimport
-import dwtx.jface.text.ITextViewerExtension8; // packageimport
-import dwtx.jface.text.RegExMessages; // packageimport
-import dwtx.jface.text.IDelayedInputChangeProvider; // packageimport
-import dwtx.jface.text.ITextOperationTargetExtension; // packageimport
-import dwtx.jface.text.IWidgetTokenOwner; // packageimport
-import dwtx.jface.text.IViewportListener; // packageimport
-import dwtx.jface.text.GapTextStore; // packageimport
-import dwtx.jface.text.MarkSelection; // packageimport
-import dwtx.jface.text.IDocumentPartitioningListenerExtension; // packageimport
-import dwtx.jface.text.IDocumentAdapterExtension; // packageimport
-import dwtx.jface.text.IInformationControlExtension; // packageimport
-import dwtx.jface.text.IDocumentPartitioningListenerExtension2; // packageimport
-import dwtx.jface.text.DefaultDocumentAdapter; // packageimport
-import dwtx.jface.text.ITextViewerExtension3; // packageimport
-import dwtx.jface.text.IInformationControlCreator; // packageimport
-import dwtx.jface.text.TypedRegion; // packageimport
-import dwtx.jface.text.ISynchronizable; // packageimport
-import dwtx.jface.text.IMarkRegionTarget; // packageimport
-import dwtx.jface.text.TextViewerUndoManager; // packageimport
-import dwtx.jface.text.IRegion; // packageimport
-import dwtx.jface.text.IInformationControlExtension2; // packageimport
-import dwtx.jface.text.IDocumentExtension4; // packageimport
-import dwtx.jface.text.IDocumentExtension2; // packageimport
-import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
-import dwtx.jface.text.DefaultInformationControl; // packageimport
-import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
-import dwtx.jface.text.DocumentClone; // packageimport
-import dwtx.jface.text.DefaultUndoManager; // packageimport
-import dwtx.jface.text.IFindReplaceTarget; // packageimport
-import dwtx.jface.text.IAutoEditStrategy; // packageimport
-import dwtx.jface.text.ILineTrackerExtension; // packageimport
-import dwtx.jface.text.IUndoManagerExtension; // packageimport
-import dwtx.jface.text.TextSelection; // packageimport
-import dwtx.jface.text.DefaultAutoIndentStrategy; // packageimport
-import dwtx.jface.text.IAutoIndentStrategy; // packageimport
-import dwtx.jface.text.IPainter; // packageimport
-import dwtx.jface.text.IInformationControl; // packageimport
-import dwtx.jface.text.IInformationControlExtension3; // packageimport
-import dwtx.jface.text.ITextViewerExtension6; // packageimport
-import dwtx.jface.text.IInformationControlExtension4; // packageimport
-import dwtx.jface.text.DefaultLineTracker; // packageimport
-import dwtx.jface.text.IDocumentInformationMappingExtension; // packageimport
-import dwtx.jface.text.IRepairableDocumentExtension; // packageimport
-import dwtx.jface.text.ITextHover; // packageimport
-import dwtx.jface.text.FindReplaceDocumentAdapter; // packageimport
-import dwtx.jface.text.ILineTracker; // packageimport
-import dwtx.jface.text.Line; // packageimport
-import dwtx.jface.text.ITextViewerExtension; // packageimport
-import dwtx.jface.text.IDocumentAdapter; // packageimport
-import dwtx.jface.text.TextEvent; // packageimport
-import dwtx.jface.text.BadLocationException; // packageimport
-import dwtx.jface.text.AbstractDocument; // packageimport
-import dwtx.jface.text.AbstractLineTracker; // packageimport
-import dwtx.jface.text.TreeLineTracker; // packageimport
-import dwtx.jface.text.ITextPresentationListener; // packageimport
-import dwtx.jface.text.Region; // packageimport
-import dwtx.jface.text.ITextViewer; // packageimport
-import dwtx.jface.text.IDocumentInformationMapping; // packageimport
-import dwtx.jface.text.MarginPainter; // packageimport
-import dwtx.jface.text.IPaintPositionManager; // packageimport
-import dwtx.jface.text.TextPresentation; // packageimport
-import dwtx.jface.text.IFindReplaceTargetExtension; // packageimport
-import dwtx.jface.text.ISlaveDocumentManagerExtension; // packageimport
-import dwtx.jface.text.ISelectionValidator; // packageimport
-import dwtx.jface.text.IDocumentExtension; // packageimport
-import dwtx.jface.text.PropagatingFontFieldEditor; // packageimport
-import dwtx.jface.text.ConfigurableLineTracker; // packageimport
-import dwtx.jface.text.SlaveDocumentEvent; // packageimport
-import dwtx.jface.text.IDocumentListener; // packageimport
-import dwtx.jface.text.PaintManager; // packageimport
-import dwtx.jface.text.IFindReplaceTargetExtension3; // packageimport
-import dwtx.jface.text.ITextDoubleClickStrategy; // packageimport
-import dwtx.jface.text.IDocumentExtension3; // packageimport
-import dwtx.jface.text.Position; // packageimport
-import dwtx.jface.text.TextMessages; // packageimport
-import dwtx.jface.text.CopyOnWriteTextStore; // packageimport
-import dwtx.jface.text.WhitespaceCharacterPainter; // packageimport
-import dwtx.jface.text.IPositionUpdater; // packageimport
-import dwtx.jface.text.DefaultTextDoubleClickStrategy; // packageimport
-import dwtx.jface.text.ListLineTracker; // packageimport
-import dwtx.jface.text.ITextInputListener; // packageimport
-import dwtx.jface.text.BadPositionCategoryException; // packageimport
-import dwtx.jface.text.IWidgetTokenKeeperExtension; // packageimport
-import dwtx.jface.text.IInputChangedListener; // packageimport
-import dwtx.jface.text.ITextOperationTarget; // packageimport
-import dwtx.jface.text.IDocumentInformationMappingExtension2; // packageimport
-import dwtx.jface.text.ITextViewerExtension7; // packageimport
-import dwtx.jface.text.IInformationControlExtension5; // packageimport
-import dwtx.jface.text.IDocumentRewriteSessionListener; // packageimport
-import dwtx.jface.text.JFaceTextUtil; // packageimport
-import dwtx.jface.text.AbstractReusableInformationControlCreator; // packageimport
-import dwtx.jface.text.TabsToSpacesConverter; // packageimport
-import dwtx.jface.text.CursorLinePainter; // packageimport
-import dwtx.jface.text.ITextHoverExtension; // packageimport
-import dwtx.jface.text.IEventConsumer; // packageimport
-import dwtx.jface.text.IDocument; // packageimport
-import dwtx.jface.text.IWidgetTokenKeeper; // packageimport
-import dwtx.jface.text.DocumentCommand; // packageimport
-import dwtx.jface.text.TypedPosition; // packageimport
-import dwtx.jface.text.IEditingSupportRegistry; // packageimport
-import dwtx.jface.text.IDocumentPartitionerExtension; // packageimport
-import dwtx.jface.text.AbstractHoverInformationControlManager; // packageimport
-import dwtx.jface.text.IEditingSupport; // packageimport
-import dwtx.jface.text.IMarkSelection; // packageimport
-import dwtx.jface.text.ISlaveDocumentManager; // packageimport
-import dwtx.jface.text.DocumentEvent; // packageimport
-import dwtx.jface.text.DocumentPartitioningChangedEvent; // packageimport
-import dwtx.jface.text.ITextStore; // packageimport
-import dwtx.jface.text.JFaceTextMessages; // packageimport
-import dwtx.jface.text.DocumentRewriteSessionEvent; // packageimport
-import dwtx.jface.text.SequentialRewriteTextStore; // packageimport
-import dwtx.jface.text.TextAttribute; // packageimport
-import dwtx.jface.text.ITextViewerExtension4; // packageimport
-import dwtx.jface.text.ITypedRegion; // packageimport
-
-
 import dwt.dwthelper.utils;
 
-
 /**
  * A document rewrite session type.
  * <p>
@@ -176,29 +33,36 @@
  */
 public class DocumentRewriteSessionType {
 
+    static this(){
+        UNRESTRICTED= new DocumentRewriteSessionType();
+        UNRESTRICTED_SMALL= new DocumentRewriteSessionType();
+        SEQUENTIAL= new DocumentRewriteSessionType();
+        STRICTLY_SEQUENTIAL= new DocumentRewriteSessionType();
+    }
+
     /**
      * An unrestricted rewrite session is a sequence of unrestricted replace operations. This
      * session type should only be used for <em>large</em> operations that touch more than about
      * fifty lines. Use {@link #UNRESTRICTED_SMALL} for small operations.
      */
-    public const static DocumentRewriteSessionType UNRESTRICTED= new DocumentRewriteSessionType();
+    public const static DocumentRewriteSessionType UNRESTRICTED;
     /**
      * An small unrestricted rewrite session is a short sequence of unrestricted replace operations.
      * This should be used for changes that touch less than about fifty lines.
-     * 
+     *
      * @since 3.3
      */
-    public const static DocumentRewriteSessionType UNRESTRICTED_SMALL= new DocumentRewriteSessionType();
+    public const static DocumentRewriteSessionType UNRESTRICTED_SMALL;
     /**
      * A sequential rewrite session is a sequence of non-overlapping replace
      * operations starting at an arbitrary document offset.
      */
-    public const static DocumentRewriteSessionType SEQUENTIAL= new DocumentRewriteSessionType();
+    public const static DocumentRewriteSessionType SEQUENTIAL;
     /**
      * A strictly sequential rewrite session is a sequence of non-overlapping
      * replace operations from the start of the document to its end.
      */
-    public const static DocumentRewriteSessionType STRICTLY_SEQUENTIAL= new DocumentRewriteSessionType();
+    public const static DocumentRewriteSessionType STRICTLY_SEQUENTIAL;
 
 
     /**
--- a/dwtx/jface/text/FindReplaceDocumentAdapter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/FindReplaceDocumentAdapter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -63,7 +63,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -179,10 +178,51 @@
     }
 
     // Find/replace operation codes.
-    private static const FindReplaceOperationCode FIND_FIRST= new FindReplaceOperationCode();
-    private static const FindReplaceOperationCode FIND_NEXT= new FindReplaceOperationCode();
-    private static const FindReplaceOperationCode REPLACE= new FindReplaceOperationCode();
-    private static const FindReplaceOperationCode REPLACE_FIND_NEXT= new FindReplaceOperationCode();
+    private static FindReplaceOperationCode FIND_FIRST_;
+    private static FindReplaceOperationCode FIND_FIRST(){
+        if( FIND_FIRST_ is null ){
+            synchronized( FindReplaceDocumentAdapter.classinfo ){
+                if( FIND_FIRST_ is null ){
+                    FIND_FIRST_ = new FindReplaceOperationCode();
+                }
+            }
+        }
+        return FIND_FIRST_;
+    }
+
+    private static FindReplaceOperationCode FIND_NEXT_;
+    private static FindReplaceOperationCode FIND_NEXT(){
+        if( FIND_NEXT_ is null ){
+            synchronized( FindReplaceDocumentAdapter.classinfo ){
+                if( FIND_NEXT_ is null ){
+                    FIND_NEXT_ = new FindReplaceOperationCode();
+                }
+            }
+        }
+        return FIND_NEXT_;
+    }
+    private static FindReplaceOperationCode REPLACE_;
+    private static FindReplaceOperationCode REPLACE(){
+        if( REPLACE_ is null ){
+            synchronized( FindReplaceDocumentAdapter.classinfo ){
+                if( REPLACE_ is null ){
+                    REPLACE_ = new FindReplaceOperationCode();
+                }
+            }
+        }
+        return REPLACE_;
+    }
+    private static FindReplaceOperationCode REPLACE_FIND_NEXT_;
+    private static FindReplaceOperationCode REPLACE_FIND_NEXT(){
+        if( REPLACE_FIND_NEXT_ is null ){
+            synchronized( FindReplaceDocumentAdapter.classinfo ){
+                if( REPLACE_FIND_NEXT_ is null ){
+                    REPLACE_FIND_NEXT_ = new FindReplaceOperationCode();
+                }
+            }
+        }
+        return REPLACE_FIND_NEXT_;
+    }
 
     /**
      * Retain case mode constants.
@@ -225,7 +265,7 @@
      * @param document the adapted document
      */
     public this(IDocument document) {
-        Assert.isNotNull(document);
+        Assert.isNotNull(cast(Object)document);
         fDocument= document;
     }
 
@@ -291,7 +331,7 @@
         if (operationCode is FIND_FIRST) {
             // Reset
 
-            if (findString is null || findString.length() is 0)
+            if (findString is null || findString.length is 0)
                 return null;
 
             // Validate start offset
@@ -309,7 +349,7 @@
                 patternFlags |= Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE;
 
             if (wholeWord)
-                findString= "\\b" + findString + "\\b"; //$NON-NLS-1$ //$NON-NLS-2$
+                findString= "\\b" ~ findString ~ "\\b"; //$NON-NLS-1$ //$NON-NLS-2$
 
             if (!regExSearch && !wholeWord)
                 findString= asRegPattern(findString);
@@ -339,12 +379,12 @@
                     Matcher replaceTextMatcher= pattern.matcher(prevMatch);
                     replaceText= replaceTextMatcher.replaceFirst(replaceText);
                 } catch (IndexOutOfBoundsException ex) {
-                    throw new PatternSyntaxException(ex.getLocalizedMessage(), replaceText, -1);
+                    throw new PatternSyntaxException(ex.msg/+getLocalizedMessage()+/, replaceText, -1);
                 }
             }
 
             int offset= fFindReplaceMatcher.start();
-            int length= fFindReplaceMatcher.group().length();
+            int length= fFindReplaceMatcher.group().length;
 
             if (cast(IRepairableDocumentExtension)fDocument
                     && (cast(IRepairableDocumentExtension)fDocument).isLineInformationRepairNeeded(offset, length, replaceText)) {
@@ -355,7 +395,7 @@
             fDocument.replace(offset, length, replaceText);
 
             if (operationCode is REPLACE) {
-                return new Region(offset, replaceText.length());
+                return new Region(offset, replaceText.length);
             }
         }
 
@@ -371,8 +411,8 @@
                 if (operationCode is REPLACE_FIND_NEXT)
                     fFindReplaceState= FIND_NEXT;
 
-                if (found && fFindReplaceMatcher.group().length() > 0)
-                    return new Region(fFindReplaceMatcher.start(), fFindReplaceMatcher.group().length());
+                if (found && fFindReplaceMatcher.group().length > 0)
+                    return new Region(fFindReplaceMatcher.start(), fFindReplaceMatcher.group().length);
                 return null;
             }
 
@@ -380,9 +420,9 @@
             bool found= fFindReplaceMatcher.find(0);
             int index= -1;
             int length= -1;
-            while (found && fFindReplaceMatcher.start() + fFindReplaceMatcher.group().length() <= fFindReplaceMatchOffset + 1) {
+            while (found && fFindReplaceMatcher.start() + fFindReplaceMatcher.group().length <= fFindReplaceMatchOffset + 1) {
                 index= fFindReplaceMatcher.start();
-                length= fFindReplaceMatcher.group().length();
+                length= fFindReplaceMatcher.group().length;
                 found= fFindReplaceMatcher.find(index + 1);
             }
             fFindReplaceMatchOffset= index;
@@ -406,14 +446,14 @@
      * @since 3.4
      */
     private String substituteLinebreak(String findString)  {
-        int length= findString.length();
+        int length= findString.length;
         StringBuffer buf= new StringBuffer(length);
 
         int inCharGroup= 0;
         int inBraces= 0;
         bool inQuote= false;
         for (int i= 0; i < length; i++) {
-            char ch= findString.charAt(i);
+            char ch= .charAt(findString, i);
             switch (ch) {
                 case '[':
                     buf.append(ch);
@@ -441,7 +481,7 @@
 
                 case '\\':
                     if (i + 1 < length) {
-                        char ch1= findString.charAt(i + 1);
+                        char ch1= .charAt(findString, i + 1);
                         if (inQuote) {
                             if (ch1 is 'E')
                                 inQuote= false;
@@ -485,16 +525,16 @@
      * @param ch the character to process
      * @since 3.4
      */
-    private void interpretRetainCase(StringBuffer buf, char ch) {
+    private void interpretRetainCase(StringBuffer buf, dchar ch) {
         if (fRetainCaseMode is RC_UPPER)
-            buf.append(Character.toUpperCase(ch));
+            buf.append(dcharToString(Character.toUpperCase(ch)));
         else if (fRetainCaseMode is RC_LOWER)
-            buf.append(Character.toLowerCase(ch));
+            buf.append(dcharToString(Character.toLowerCase(ch)));
         else if (fRetainCaseMode is RC_FIRSTUPPER) {
-            buf.append(Character.toUpperCase(ch));
+            buf.append(dcharToString(Character.toUpperCase(ch)));
             fRetainCaseMode= RC_MIXED;
         } else
-            buf.append(ch);
+            buf.append(dcharToString(ch));
     }
 
     /**
@@ -506,7 +546,7 @@
      * @since 3.4
      */
     private String interpretReplaceEscapes(String replaceText, String foundText) {
-        int length= replaceText.length();
+        int length= replaceText.length;
         bool inEscape= false;
         StringBuffer buf= new StringBuffer(length);
 
@@ -516,7 +556,7 @@
         fRetainCaseMode= RC_MIXED;
 
         for (int i= 0; i < length; i++) {
-            final char ch= replaceText.charAt(i);
+            char ch= .charAt(replaceText, i);
             if (inEscape) {
                 i= interpretReplaceEscape(ch, i, buf, replaceText, foundText);
                 inEscape= false;
@@ -538,8 +578,8 @@
                  * \01 and $01 as $0\1, etc.
                  */
                 if (i + 2 < length) {
-                    char ch1= replaceText.charAt(i + 1);
-                    char ch2= replaceText.charAt(i + 2);
+                    char ch1= .charAt(replaceText, i + 1);
+                    char ch2= .charAt(replaceText, i + 2);
                     if (ch1 is '0' && '0' <= ch2 && ch2 <= '9') {
                         buf.append("0\\"); //$NON-NLS-1$
                         i++; // consume the 0
@@ -570,7 +610,7 @@
      * @since 3.4
      */
     private int interpretReplaceEscape(char ch, int i, StringBuffer buf, String replaceText, String foundText) {
-        int length= replaceText.length();
+        int length= replaceText.length;
         switch (ch) {
             case 'r':
                 buf.append('\r');
@@ -585,10 +625,10 @@
                 buf.append('\f');
                 break;
             case 'a':
-                buf.append('\u0007');
+                buf.append("\u0007"c);
                 break;
             case 'e':
-                buf.append('\u001B');
+                buf.append("\u001B"c);
                 break;
             case 'R': //see http://www.unicode.org/unicode/reports/tr18/#Line_Boundaries
                 buf.append(TextUtilities.getDefaultLineDelimiter(fDocument));
@@ -604,7 +644,7 @@
                  * in interpretReplaceEscape(String) above.
                  */
                 if (i + 1 < length) {
-                    char ch1= replaceText.charAt(i + 1);
+                    char ch1= .charAt(replaceText, i + 1);
                     if ('0' <= ch1 && ch1 <= '9') {
                         buf.append('\\');
                     }
@@ -625,11 +665,11 @@
 
             case 'c':
                 if (i + 1 < length) {
-                    char ch1= replaceText.charAt(i + 1);
+                    char ch1= .charAt(replaceText, i + 1);
                     interpretRetainCase(buf, cast(wchar)(ch1 ^ 64));
                     i++;
                 } else {
-                    String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalControlEscape", "\\c"); //$NON-NLS-1$ //$NON-NLS-2$
+                    String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalControlEscape", stringcast("\\c")); //$NON-NLS-1$ //$NON-NLS-2$
                     throw new PatternSyntaxException(msg, replaceText, i);
                 }
                 break;
@@ -640,15 +680,15 @@
                     try {
                         parsedInt= Integer.parseInt(replaceText.substring(i + 1, i + 3), 16);
                         if (parsedInt < 0)
-                            throw new NumberFormatException();
+                            throw new NumberFormatException("");
                     } catch (NumberFormatException e) {
-                        String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalHexEscape", replaceText.substring(i - 1, i + 3)); //$NON-NLS-1$
+                        String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalHexEscape", stringcast(replaceText.substring(i - 1, i + 3))); //$NON-NLS-1$
                         throw new PatternSyntaxException(msg, replaceText, i);
                     }
                     interpretRetainCase(buf, cast(wchar) parsedInt);
                     i+= 2;
                 } else {
-                    String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalHexEscape", replaceText.substring(i - 1, length)); //$NON-NLS-1$
+                    String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalHexEscape", stringcast(replaceText.substring(i - 1, length))); //$NON-NLS-1$
                     throw new PatternSyntaxException(msg, replaceText, i);
                 }
                 break;
@@ -659,15 +699,15 @@
                     try {
                         parsedInt= Integer.parseInt(replaceText.substring(i + 1, i + 5), 16);
                         if (parsedInt < 0)
-                            throw new NumberFormatException();
+                            throw new NumberFormatException("");
                     } catch (NumberFormatException e) {
-                        String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalUnicodeEscape", replaceText.substring(i - 1, i + 5)); //$NON-NLS-1$
+                        String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalUnicodeEscape", stringcast(replaceText.substring(i - 1, i + 5))); //$NON-NLS-1$
                         throw new PatternSyntaxException(msg, replaceText, i);
                     }
                     interpretRetainCase(buf, cast(wchar) parsedInt);
                     i+= 4;
                 } else {
-                    String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalUnicodeEscape", replaceText.substring(i - 1, length)); //$NON-NLS-1$
+                    String msg= TextMessages.getFormattedString("FindReplaceDocumentAdapter.illegalUnicodeEscape", stringcast(replaceText.substring(i - 1, length))); //$NON-NLS-1$
                     throw new PatternSyntaxException(msg, replaceText, i);
                 }
                 break;
@@ -677,7 +717,7 @@
                     fRetainCaseMode= RC_UPPER;
                 else if (foundText.toLowerCase().equals(foundText)) // is whole match lower-case?
                     fRetainCaseMode= RC_LOWER;
-                else if(Character.isUpperCase(foundText.charAt(0))) // is first character upper-case?
+                else if(Character.isUpperCase(.charAt(foundText,0))) // is first character upper-case?
                     fRetainCaseMode= RC_FIRSTUPPER;
                 else
                     fRetainCaseMode= RC_MIXED;
@@ -699,11 +739,11 @@
      * @return the string converted to a regex pattern
      */
     private String asRegPattern(String string) {
-        StringBuffer out_= new StringBuffer(string.length());
+        StringBuffer out_= new StringBuffer(string.length);
         bool quoting= false;
 
-        for (int i= 0, length= string.length(); i < length; i++) {
-            char ch= string.charAt(i);
+        for (int i= 0, length= string.length; i < length; i++) {
+            char ch= .charAt(string, i);
             if (ch is '\\') {
                 if (quoting) {
                     out_.append("\\E"); //$NON-NLS-1$
@@ -754,7 +794,7 @@
     /*
      * @see java.lang.CharSequence#charAt(int)
      */
-    public override wchar charAt(int index) {
+    public override char charAt(int index) {
         try {
             return fDocument.getChar(index);
         } catch (BadLocationException e) {
@@ -767,7 +807,7 @@
      */
     public CharSequence subSequence(int start, int end) {
         try {
-            return fDocument.get(start, end - start);
+            return new StringCharSequence(fDocument.get(start, end - start));
         } catch (BadLocationException e) {
             throw new IndexOutOfBoundsException();
         }
--- a/dwtx/jface/text/GapTextStore.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/GapTextStore.d	Mon Sep 08 00:51:37 2008 +0200
@@ -60,7 +60,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -202,7 +201,7 @@
     private const float fSizeMultiplier;
 
     /** The store's content */
-    private char[] fContent= new char[0];
+    private char[] fContent;
     /** Starting index of the gap */
     private int fGapStart= 0;
     /** End index of the gap */
@@ -298,16 +297,16 @@
      */
     public final String get(int offset, int length) {
         if (fGapStart <= offset)
-            return new String(fContent, offset + gapSize() , length);
+            return new_String(fContent, offset + gapSize() , length);
 
         final int end= offset + length;
 
         if (end <= fGapStart)
-            return new String(fContent, offset, length);
+            return new_String(fContent, offset, length);
 
         StringBuffer buf= new StringBuffer(length);
-        buf.append(fContent, offset, fGapStart - offset);
-        buf.append(fContent, fGapEnd, end - fGapStart);
+        buf.append(fContent[ offset .. fGapStart ]);
+        buf.append(fContent[ fGapEnd .. end - fGapStart + fGapEnd ]);
         return buf.toString();
     }
 
@@ -338,7 +337,7 @@
         if (text is null) {
             adjustGap(offset, length, 0);
         } else {
-            int textLength= text.length();
+            int textLength= text.length;
             adjustGap(offset, length, textLength);
             if (textLength !is 0)
                 text.getChars(0, textLength, fContent, offset);
@@ -361,7 +360,7 @@
         final bool reuseArray= 0 <= newGapSize && newGapSize <= fThreshold;
 
         final int newGapStart= offset + add;
-        final int newGapEnd;
+        int newGapEnd;
 
         if (reuseArray)
             newGapEnd= moveGap(offset, remove, oldGapSize, newGapSize, newGapStart);
@@ -512,7 +511,7 @@
      * @return a copy of the content of this text store
      */
     protected String getContentAsString() {
-        return new String(fContent);
+        return new_String(fContent);
     }
 
     /**
--- a/dwtx/jface/text/IDocumentExtension.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/IDocumentExtension.d	Mon Sep 08 00:51:37 2008 +0200
@@ -101,7 +101,6 @@
 import dwtx.jface.text.MarginPainter; // packageimport
 import dwtx.jface.text.IPaintPositionManager; // packageimport
 import dwtx.jface.text.TextPresentation; // packageimport
-import dwtx.jface.text.IFindReplaceTargetExtension; // packageimport
 import dwtx.jface.text.ISlaveDocumentManagerExtension; // packageimport
 import dwtx.jface.text.ISelectionValidator; // packageimport
 import dwtx.jface.text.PropagatingFontFieldEditor; // packageimport
--- a/dwtx/jface/text/ITextOperationTarget.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/ITextOperationTarget.d	Mon Sep 08 00:51:37 2008 +0200
@@ -179,64 +179,64 @@
     /**
      * Text operation code for undoing the last edit command.
      */
-    static const int UNDO= 1;
+    public static const int UNDO= 1;
 
     /**
      * Text operation code for redoing the last undone edit command.
      */
-    static const int REDO= 2;
+    public static const int REDO= 2;
 
     /**
      * Text operation code for moving the selected text to the clipboard.
      */
-    static const int CUT= 3;
+    public static const int CUT= 3;
 
     /**
      * Text operation code for copying the selected text to the clipboard.
      */
-    static const int COPY= 4;
+    public static const int COPY= 4;
 
     /**
      * Text operation code for inserting the clipboard content at the
      * current position.
      */
-    static const int PASTE= 5;
+    public static const int PASTE= 5;
 
     /**
      * Text operation code for deleting the selected text or if selection
      * is empty the character  at the right of the current position.
      */
-    static const int DELETE= 6;
+    public static const int DELETE= 6;
 
     /**
      * Text operation code for selecting the complete text.
      */
-    static const int SELECT_ALL= 7;
+    public static const int SELECT_ALL= 7;
 
     /**
      * Text operation code for shifting the selected text block to the right.
      */
-    static const int SHIFT_RIGHT= 8;
+    public static const int SHIFT_RIGHT= 8;
 
     /**
      * Text operation code for shifting the selected text block to the left.
      */
-    static const int SHIFT_LEFT= 9;
+    public static const int SHIFT_LEFT= 9;
 
     /**
      * Text operation code for printing the complete text.
      */
-    static const int PRINT= 10;
+    public static const int PRINT= 10;
 
     /**
      * Text operation code for prefixing the selected text block.
      */
-    static const int PREFIX= 11;
+    public static const int PREFIX= 11;
 
     /**
      * Text operation code for removing the prefix from the selected text block.
      */
-    static const int STRIP_PREFIX= 12;
+    public static const int STRIP_PREFIX= 12;
 
 
     /**
--- a/dwtx/jface/text/JFaceTextMessages.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/JFaceTextMessages.d	Mon Sep 08 00:51:37 2008 +0200
@@ -176,7 +176,7 @@
         try {
             return fgResourceBundle.getString(key);
         } catch (MissingResourceException e) {
-            return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
+            return "!" ~ key ~ "!";//$NON-NLS-2$ //$NON-NLS-1$
         }
     }
 }
--- a/dwtx/jface/text/JFaceTextMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2007 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-
-TextViewer.error.bad_location.WidgetCommand.setEvent= TextViewer.WidgetCommand.setEvent: BadLocationException
-TextViewer.error.bad_location.findAndSelect= TextViewer.findAndSelect: BadLocationException
-TextViewer.error.bad_location.getBottomIndex= TextViewer.getBottomIndex: BadLocationException
-TextViewer.error.bad_location.getBottomIndexEndOffset= TextViewer.getBottomIndexEndOffset: BadLocationException
-TextViewer.error.bad_location.getFirstCompleteLineOfRegion= TextViewer.getFirstCompleteLineOfRegion: BadLocationException
-TextViewer.error.bad_location.getTopIndex= TextViewer.getTopIndex: BadLocationException
-TextViewer.error.bad_location.getTopIndexStartOffset= TextViewer.getTopIndexStartOffset: BadLocationException
-TextViewer.error.bad_location.selectContentTypePlugin= TextViewer.selectContentTypePlugin: BadLocationException
-TextViewer.error.bad_location.setTopIndex_1= TextViewer.setTopIndex: BadLocationException
-TextViewer.error.bad_location.setTopIndex_2= TextViewer.setTopIndex: BadLocationException
-TextViewer.error.bad_location.shift_1= TextViewer.shift: BadLocationException
-TextViewer.error.bad_location.shift_2= TextViewer.shift: BadLocationException
-TextViewer.error.bad_location.verifyText= TextViewer.verifyText: BadLocationException
-TextViewer.error.invalid_range= Invalid range argument
-TextViewer.error.invalid_visible_region_1= Invalid visible region argument
-TextViewer.error.invalid_visible_region_2= Invalid visible region argument
-
-AbstractHoverInformationControlManager.hover.restarter= Hover Restart Delay
-
-# The first parameter is the annotation type label and the second is the number of annotations
-OverviewRulerHeader.toolTipTextEntry= {0}: {1}
-
-DefaultUndoManager.operationLabel= Typing
-DefaultUndoManager.error.undoFailed.title= Undo Failed
-DefaultUndoManager.error.redoFailed.title= Redo Failed
-
-DefaultAnnotationHover.multipleMarkers= Multiple markers at this line
-# The parameter is the text of the list item
-DefaultAnnotationHover.listItem= - {0}
-
-# The parameter is the line number
-DefaultAnnotationHover.lineNumber=Line: {0}
-
--- a/dwtx/jface/text/ListLineTracker.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/ListLineTracker.d	Mon Sep 08 00:51:37 2008 +0200
@@ -177,7 +177,7 @@
 abstract class ListLineTracker : ILineTracker {
 
     /** The line information */
-    private const List fLines= new ArrayList();
+    private const List fLines;
     /** The length of the tracked text */
     private int fTextLength;
 
@@ -185,6 +185,7 @@
      * Creates a new line tracker.
      */
     protected this() {
+        fLines= new ArrayList();
     }
 
     /**
--- a/dwtx/jface/text/PaintManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/PaintManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -243,7 +243,7 @@
          * position category using its class name and its hash value.
          */
         public this() {
-            fCategory= getClass().getName() + toHash();
+            fCategory= this.classinfo.name ~ Integer.toString(toHash());
             fPositionUpdater= new PaintPositionUpdater(fCategory);
         }
 
@@ -314,7 +314,7 @@
 
 
     /** The painters managed by this paint manager. */
-    private List fPainters= new ArrayList(2);
+    private List fPainters;
     /** The position manager used by this paint manager */
     private PositionManager fManager;
     /** The associated text viewer */
@@ -326,6 +326,7 @@
      * @param textViewer the text viewer associated to this newly created paint manager
      */
     public this(ITextViewer textViewer) {
+        fPainters= new ArrayList(2);
         fTextViewer= textViewer;
     }
 
@@ -338,8 +339,8 @@
      * @param painter the painter to be added
      */
     public void addPainter(IPainter painter) {
-        if (!fPainters.contains(painter)) {
-            fPainters.add(painter);
+        if (!fPainters.contains(cast(Object)painter)) {
+            fPainters.add(cast(Object)painter);
             if (fPainters.size() is 1)
                 install();
             painter.setPositionManager(fManager);
@@ -355,7 +356,7 @@
      * @param painter the painter to be removed
      */
     public void removePainter(IPainter painter) {
-        if (fPainters.remove(painter)) {
+        if (fPainters.remove(cast(Object)painter)) {
             painter.deactivate(true);
             painter.setPositionManager(null);
         }
--- a/dwtx/jface/text/Position.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/Position.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -244,12 +243,11 @@
     /*
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public bool equals(Object other) {
-        if ( cast(Position)other ) {
-            Position rp= cast(Position) other;
+    public override int opEquals(Object other) {
+        if ( auto rp = cast(Position)other ) {
             return (rp.offset is offset) && (rp.length is length);
         }
-        return super.equals(other);
+        return super.opEquals(other);
     }
 
     /**
--- a/dwtx/jface/text/RegExMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,535 +0,0 @@
-###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-#     Cagatay Calli <ccalli@gmail.com> - [find/replace] retain caps when replacing - https://bugs.eclipse.org/bugs/show_bug.cgi?id=28949
-#     Cagatay Calli <ccalli@gmail.com> - [find/replace] define & fix behavior of retain caps with other escapes and text before \C - https://bugs.eclipse.org/bugs/show_bug.cgi?id=217061
-###############################################################################
-
-## Content Assist for regular expressions ##
-# use \\\u0075 for a backslash-u
-displayString_bs_bs= \\\\ - Backslash
-additionalInfo_bs_bs= Backslash
-displayString_bs_0= \\0nnn - Octal character code
-additionalInfo_bs_0= Octal character code\n\nExamples:\n\\011 (tabulator)\n\\0112 (character J)
-displayString_bs_x= \\xhh - Hex character code
-additionalInfo_bs_x= Hexadecimal character code\n\nExamples:\n\\x09 (tabulator)\n\\x4A or \\x4a (character J)
-displayString_bs_u= \\\u0075hhhh - Hex code for Unicode character
-additionalInfo_bs_u= Hexadecimal code for Unicode character\n\nExamples:\n\\\u0075004A (character J)\n\\\u007503B2 (lowercase Greek letter beta: \u03B2)
-displayString_bs_t= \\t - Tab
-additionalInfo_bs_t= Tabulator (\\x09, decimal: 9)
-displayString_bs_R= \\R - Line delimiter (platform independent)
-additionalInfo_bs_R= Line delimiter (platform independent)\n\n\
-This pattern matches any form of line delimiter, i.e.\n\
-- Windows (\\r\\n)\n\
-- Unix (\\n)\n\
-- Mac OS 9 (\\r)\n\n\
-Note that this pattern does not work inside [].
-displayString_bs_n= \\n - Newline
-additionalInfo_bs_n= Newline (\\x0A, decimal: 10)\n\n\
-WARNING: \\n only finds newline characters. \
-This can lead to unexpected results when the actual document uses different line delimiters.\n\n\
-RECOMMENDATION: use \\R to find a line delimiter.
-displayString_bs_r= \\r - CR
-additionalInfo_bs_r= Carriage Return (\\x0D, decimal: 13)\n\n\
-WARNING: \\r only finds carriage return characters. \
-This can lead to unexpected results when the actual document uses different line delimiters.\n\n\
-RECOMMENDATION: use \\R to find a line delimiter.
-displayString_bs_f= \\f - FF
-additionalInfo_bs_f= Form Feed (\\x0C, decimal: 12)
-displayString_bs_a= \\a - Beep
-additionalInfo_bs_a= Beep, Bell, Alert (\\x07, decimal: 7)
-displayString_bs_e= \\e - Esc
-additionalInfo_bs_e= Escape (\\x1B, decimal: 27)
-displayString_bs_c= \\cC - Control character
-additionalInfo_bs_c= Control character for C\n\nExample:\n\\cC (Ctrl+C, \\x03, decimal: 3)
-
-displayString_dot= . - Any character
-additionalInfo_dot= The dot matches any character except line terminators.\n\n\
-To make the dot match line terminators as well, \n\
-start the expression with the embedded flag expression \n\
-"(?s)" (without quotes).
-displayString_bs_d= \\d - A digit
-additionalInfo_bs_d= A digit: [0-9]
-displayString_bs_D= \\D - Not a digit
-additionalInfo_bs_D= Not a digit: [^0-9]
-displayString_bs_s= \\s - A whitespace
-additionalInfo_bs_s= A whitespace: [ \\t\\n\\x0B\\f\\r]
-displayString_bs_S= \\S - Not a whitespace
-additionalInfo_bs_S= Not a whitespace: [^\\s]
-displayString_bs_w= \\w - An alphanumeric (word character)
-additionalInfo_bs_w= An alphanumeric (a word character): [a-zA-Z_0-9]
-displayString_bs_W= \\W - Not an alphanumeric
-additionalInfo_bs_W= Not an alphanumeric (not a word character): [^\\w]
-
-displayString_start= ^ - Line start
-additionalInfo_start= Line start (positional match)\n\nExample:\n\
-The expression "^Eclipse" matches the term "Eclipse"\n\
-only on the second line of text\n\
-"The Eclipse Project\n\
-Eclipse Platform".
-displayString_end= $ - Line end
-additionalInfo_end= Line end (positional match)\n\nExample:\n\
-The expression "Eclipse$" matches the term "Eclipse"\n\
-only on the second line of text\n\
-"- Install the Eclipse Platform\n\
-- Run Eclipse".
-displayString_bs_b= \\b- Word beginning or end
-additionalInfo_bs_b= Word beginning or end (positional match)\n\nExample:\n\
-The expression "s\\b" matches only the last "s" of "glasses" in text\n\
-"I lost my glasses."
-displayString_bs_B= \\B - Not a word beginning or end
-additionalInfo_bs_B= Not a word beginning or end (positional match)\n\nExample:\n\
-The expression "\\BS" matches only "S" of "printString" in text\n\
-"void print(String printString)".
-displayString_bs_A= \\A - Start of input
-additionalInfo_bs_A= Start of input (positional match)\n\nExample:\n\
-The expression "\\ABC" matches only "BC" of "BCD" in text\n\
-"BCD ABC\n\
-BCDEF".
-displayString_bs_G= \\G - Previous match's end
-additionalInfo_bs_G= Previous match's end (positional match)\n\nExample:\n\
-The expression "\\Ga" matches the first and then the second "a" in text\n\
-"aardvark" (when starting from the beginning).
-displayString_bs_Z= \\Z - End of input, does not consider last line terminator
-additionalInfo_bs_Z= End of input, does not consider last line terminator (positional match)\n\n\
-The expression matches at the end of the file, except for when the\n\
-file ends in a line terminator, in which case it matches before that\n\
-line terminator.\n\nExample:\n\
-The expression "ing\\Z" matches "ing" in text\n\
-"testing", as well as in text\n\
-"testing\n\
-", but doesn't match in text\n\
-"testing\n\
-\n\
-"
-displayString_bs_z= \\z - End of input
-additionalInfo_bs_z= End of input (positional match)\n\nExample:\n\
-The expression "ing\\z" matches "ing" in text\n\
-"testing", but doesn't match in text\n\
-"testing\n\
-"
-
-### repetition quantifiers ###
-displayString_quest= ? - Greedy match 0 or 1 times
-additionalInfo_quest= Greedy match 0 or 1 times.\n\n\
-First tries to match the preceding token.\n\
-Falls back to not matching if this choice made a full match impossible.\n\nExample:\n\
-The expression "fo?" matches "f", "fo", and "fo" in text\n\
-"f fo foo".
-displayString_star= * - Greedy match 0 or more times
-additionalInfo_star= Greedy match 0 or more times.\n\n\
-First tries to match the preceding token as many times as possible.\n\
-Falls back to matching it less often if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo*" matches "f", "fo", and "foo" in text\n\
-"f fo foo".\n\
-- The expression "fo*o\\d" matches all three words in text\n\
-"fo1 foo2 fooo3".\n\
-- The expression "<.*>" matches the whole text\n\
-"<p><b>bold</b>".
-displayString_plus= + - Greedy match 1 or more times
-additionalInfo_plus= Greedy match 1 or more times\n\n\
-First tries to match the preceding token as many times as possible.\n\
-Falls back to matching it less often if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo+" matches "fo" and "foo" in text\n\
-"f fo foo".\n\
-- The expression "fo+o\\d" matches "foo2" and "fooo3" in text\n\
-"fo1 foo2 fooo3".\n\
-- The expression "<.+>" matches the whole text\n\
-"<p><b>bold</b>", but does not match anywhere in "<>".
-displayString_exact= {n} - Greedy match exactly n times
-additionalInfo_exact= Greedy match exactly n times.\n\nExamples:\n\
-- The expression "\\\\0[0-3][0-7]{2}" matches all three-digit octal character tokens.\n\
-- The expression "\\b\\w{4}\\b" matches all four-letter-words\n\
-such as "Java", "cool", or "food" (but not "dog").
-displayString_least= {n,} - Greedy match >= n times
-additionalInfo_least= Greedy match >= n times.\n\n\
-First tries to match the preceding token as many times as possible.\n\
-Falls back to matching it less often (but at least n times),\n\
-if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo{2,}" matches "foo" and "fooo" in text\n\
-"f fo foo fooo".\n\
-- The expression "fo{2,}o\\d" matches "fooo3" and "foooo4" in text\n\
-"fo1 foo2 fooo3 foooo4".\n\
-- The expression "10{3,}[^0]" matches all powers of ten that are larger than one thousand.\n\n\
-Note: The expressions "{0,}" and "*" are equivalent;\n\
-likewise, "{1,}" is equivalent to "+".
-displayString_count= {n,m} - Greedy match >= n times but <= m times
-additionalInfo_count= Greedy match >= n times but <= m times.\n\n\
-First tries to match the preceding token m times.\n\
-Falls back to matching it less often (but at least n times),\n\
-if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo{1,2}" matches "fo", "foo", and "foo" in text\n\
-"f fo foo fooo".\n\
-- The expression "fo{1,2}o\\d" matches "foo2" and "fooo3" in text\n\
-"fo1 foo2 fooo3 foooo4".\n\
-- The expression "^.{70,80}$" matches all the lines that contain\n\
-between 70 and 80 characters (inclusive).
-
-displayString_questLazy= ?? - Lazy match 0 or 1 times
-additionalInfo_questLazy= Lazy match 0 or 1 times.\n\n\
-First tries to not match the preceding token.\n\
-Falls back to matching it if this choice made a full match impossible.\n\nExample:\n\
-The expression "fo??" matches "f", "f", and "f" in text\n\
-"f fo foo".
-displayString_starLazy= *? - Lazy match 0 or more times
-additionalInfo_starLazy= Lazy match 0 or more times.\n\n\
-First tries to not match the preceding token.\n\
-Falls back to matching it more often if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo*?" matches "f", "f", and "f" in text\n\
-"f fo foo".\n\
-- The expression "fo*?o\\d" matches all three words in text\n\
-"fo1 foo2 fooo3".\n\
-- The expression "<.*?>" matches "<p>", "<b>", and "</b>" in text\n\
-"<p><b>bold</b>". Note: a more performant expression for finding\n\
-xml tags is "<[^>]*>", which avoids backtracking.
-displayString_plusLazy= +? - Lazy match 1 or more times
-additionalInfo_plusLazy= Lazy match 1 or more times\n\n\
-First tries to match the preceding token once.\n\
-Falls back to matching it more often if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo+?" matches "fo" and "fo" in text\n\
-"f fo foo".\n\
-- The expression "fo+?o\\d" matches "foo2" and "fooo3" in text\n\
-"fo1 foo2 fooo3".\n\
-- The expression "<.+?>" matches "<p>", "<b>", and "</b>" in text\n\
-"<p><b>bold</b>". Note: a more performant expression for finding\n\
-xml tags is "<[^>]*>", which avoids backtracking.
-displayString_exactLazy= {n}? - Lazy match exactly n times
-additionalInfo_exactLazy= Lazy match exactly n times.\n\n\
-This expression is equivalent to the expression\n\
-{n} - Greedy match exactly n times.
-displayString_leastLazy= {n,}? - Lazy match >= n times
-additionalInfo_leastLazy= Lazy match >= n times.\n\n\
-First tries to match the preceding token n times. Falls back to\n\
-matching it more often, if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo{2,}?" matches "foo" and "foo" in text\n\
-"f fo foo fooo".\n\
-- The expression "fo{2,}?o\\d" matches "fooo3" and "foooo4" in text\n\
-"fo1 foo2 fooo3 foooo4".\n\
-- The expression "10{3,}?[^0]" matches all powers of ten that are larger than one thousand.\n\n\
-Note: The expressions "{0,}?" and "*?" are equivalent;\n\
-likewise, "{1,}?" is equivalent to "+?".
-displayString_countLazy= {n,m}? - Lazy match >= n times but <= m times
-additionalInfo_countLazy= Lazy match >= n times but <= m times.\n\n\
-First tries to match the preceding token n times.\n\
-Falls back to matching it more often (but at most m times),\n\
-if this choice made a full match impossible.\n\nExamples:\n\
-- The expression "fo{1,2}?" matches "fo", "fo", and "fo" in text\n\
-"f fo foo fooo".\n\
-- The expression "fo{1,2}?o\\d" matches "foo2" and "fooo3" in text\n\
-"fo1 foo2 fooo3 foooo4".\n\
-
-displayString_questPoss= ?+ - Possessive match 0 or 1 times (no backtracking)
-additionalInfo_questPoss= Possessive match 0 or 1 times.\n\n\
-Matches the preceding token if possible. Never backtracks,\n\
-even if this choice renders a full match impossible.\n\nExample:\n\
-The expression "fo?+o\\d" matches the first, but not the second line in text\n\
-"foo1\n\
-fo1".
-displayString_starPoss= *+ Possessive match 0 or more times (no backtracking)
-additionalInfo_starPoss= Possessive match 0 or more times.\n\n\
-Tries to match the preceding token as many times as possible. Never backtracks,\n\
-even if this choice renders a full match impossible.\n\nExamples:\n\
-- The expression "fo*+" matches "f", "fo" and "foo" in text\n\
-"f fo foo".\n\
-- The expression "fo*+o\\d" matches nowhere in text\n\
-"fo1 foo2 fooo3".\n\
-- The expression "<.*+>" matches nowhere in text\n\
-"<p><b>bold</b>".
-displayString_plusPoss= ++ - Possessive match 1 or more times (no backtracking)
-additionalInfo_plusPoss= Possessive match 1 or more times.\n\n\
-Tries to match the preceding token as many times as possible. Never backtracks,\n\
-even if this choice renders a full match impossible.\n\nExamples:\n\
-- The expression "fo++" matches "fo" and "foo" in text\n\
-"f fo foo".\n\
-- The expression "fo++o\\d" matches nowhere in text\n\
-"fo1 foo2 fooo3".\n\
-- The expression "<.++>" matches nowhere in text\n\
-"<p><b>bold</b>".
-
-displayString_exactPoss= {n}+ - Possessive match exactly n times (no backtracking)
-additionalInfo_exactPoss= Possessive match exactly n times.\n\n\
-This expression is equivalent to the expression\n\
-{n} - Greedy match exactly n times.
-displayString_leastPoss= {n,}+ - Possessive match >= n times (no backtracking)
-additionalInfo_leastPoss= Possessive match >= n times.\n\n\
-Tries to match the preceding token as many times as possible, but at least n times.\n\
-Never backtracks, even if this choice renders a full match impossible.\n\nExamples:\n\
-- The expression "fo{2,}+" matches "foo" and "fooo" in text\n\
-"f fo foo fooo".\n\
-- The expression "fo{2,}?o\\d" matches nowhere in text\n\
-"fo1 foo2 fooo3 foooo4".\n\
-Note: The expressions "{0,}?" and "*?" are equivalent;\n\
-likewise, "{1,}?" is equivalent to "+?".
-
-displayString_countPoss= {n,m}+ - Possessive match >= n times but <= m times (no backtracking)
-additionalInfo_countPoss= Possessive match >= n times but <= m times.\n\n\
-Tries to match the preceding token as many times as possible, \n\
-at least n times and at most m times.\n\
-Never backtracks, even if this choice renders a full match impossible.\n\nExamples:\n\
-- The expression "fo{1,2}+" matches "fo", "foo", and "foo" in text\n\
-"f fo foo fooo".\n\
-- The expression "fo{1,2}+o\\d" matches only "fooo3" in text\n\
-"fo1 foo2 fooo3 foooo4".\n\
-- The expression "^.{70,80}+$" matches all the lines that contain\n\
-between 70 and 80 characters (inclusive).
-
-displayString_alt= U|V - Alternation: U or V
-additionalInfo_alt= Alternation.\n\n\
-First tries to match subexpression U. Falls back and tries to match V if U didn't match.\n\nExamples:\n\
-- The expression "A|B" applied to text "BA" first matches "B", then "A".\n\
-- The expression "AB|BC|CD" applied to text "ABC BC DAB" matches, in sequence:\n\
-"AB" in the first word, the second word "BC", "AB" at the very end.
-displayString_group= (Expr) - Mark Expr as capturing group
-additionalInfo_group= Mark Expr as capturing group.\n\n\
-Capturing groups are numbered by counting their opening parentheses from left to right.\n\
-In the expression "((A)(B(C)))", for example, there are four such groups:\n\
-1   ((A)(B(C)))\n\
-2   (A)\n\
-3   (B(C))\n\
-4   (C)\n\
-\n\
-Group zero always stands for the entire expression. During a match,\n\
-each subsequence of the input sequence that matches such a group is saved.\n\
-The captured subsequence i may be used later in the expression, via a back reference "\\i",\n\
-and may also be used in the replace string via "$i".\n\
-\n\
-Note: Groups beginning with (? are pure, non-capturing groups that\n\
-do not capture text and do not count towards the group total.
-
-displayString_bs_i= \\i - Match of the capturing group i
-additionalInfo_bs_i= Match of the capturing group i.\n\n\
-\\i matches the subsequence that has already been saved as capturing group i.\n\
-\\0 is not a valid group number in the regular expression.\n\nExample:\n\
-The expression "(\\d+)\\+\\1" matches "10+10" in text "9+10+10+11".\n\
-\n\
-Note: in the replace string, $i stands for the capturing group i. 
-
-displayString_bs= \\ - Quote next character
-additionalInfo_bs= Quote next character\n\nExample:\n\
-The expression "\\{\\n\\}" matches the text "{n}".
-
-displayString_bs_Q= \\Q - Start quoting
-additionalInfo_bs_Q= Start quoting\n\n\
-All characters between \\Q and the next \\E are taken literally and are not interpreted.\n\nExample:\n\
-The expression "\\Qnew int[] {42}\\E;" matches text "new int[] {42}".
-displayString_bs_E= \\E - End quoting
-additionalInfo_bs_E= End quoting\n\n\
-All characters between \\Q and the next \\E are taken literally and are not interpreted.\n\nExample:\n\
-The expression "\\Qnew int[] {42}\\E;" matches text "new int[] {42}".
-
-displayString_set= [ecl] - Character set
-additionalInfo_set= Character set\n\n\
-Matches a single character out of the set.\n\nExample:\n\
-The expression "[ecl]" matches "c" and "l" in text "cold".
-displayString_setExcl= [^ecl] - Excluded character set
-additionalInfo_setExcl= Excluded character set\n\n\
-Matches a single character that is not one of the excluded characters.\n\nExamples:\n\
-The expression "[^ecl]" matches "o" and "d" in text "cold".\n\
-The expression "[a-z&&[^ecl]]" matches any character from a to z, excluding e, c, and l.
-displayString_setRange= [c-l] - Character range
-additionalInfo_setRange= Character range\n\n\
-Matches a single character out of the range from 'c' to 'l'.\n\nExamples:\n\
-The expression "[c-l]" matches "c", "l", and "d" in text "cold".\n\
-The expression "[a-z&&[^ecl]]" matches any character from a to z, excluding e, c, and l.
-displayString_setInter= && - Intersection of character sets
-additionalInfo_setInter= Intersection of character sets\n\n\
-Matches a character that is in both of the given sets.\n\nExample:\n\
-The expression "[a-z&&[^ecl]]" matches any character from a to z, excluding e, c, and l.
-
-displayString_posix= \\p{Class} - POSIX or Unicode character class
-additionalInfo_posix= POSIX or Unicode character class\n\n\
-Matches a character from the given character class 'Class'.\n\
-Valid classes are:\n\
-\n\
-- POSIX character classes (US-ASCII only):\n\
-\    Lower, Upper, ASCII, Alpha, Digit, Alnum, Punct,\n\
-\    Graph, Print, Blank, Cntrl, XDigit, and Space.\n\
-\n\
-- Unicode blocks (with the prefix 'In'), e.g.:\n\
-\    InBasicLatin\n\
-\    InLatin-1Supplement\n\
-\    InGreek\n\
-\n\
-- Unicode categories, e.g.:\n\
-\    Lu: Uppercase Letter\n\
-\    Ll: Lowercase Letter\n\
-\    L:  Letter\n\
-\    N:  Number\n\
-\    Z:  Separator\n\
-\    LD: Letter or Digit\n\
-\    L1: Latin-1
-
-displayString_posixNot= \\P{Class} - Excluded POSIX or Unicode character class
-additionalInfo_posixNot= Excluded POSIX or Unicode character class\n\n\
-Negation of character set \\p{Class}. Example:\n\
-\\P{ASCII} is equivalent to [^\\p{ASCII}] and matches all non-ASCII characters.\n\n\
-Valid classes are:\n\
-\n\
-- POSIX character classes (US-ASCII only):\n\
-\    Lower, Upper, ASCII, Alpha, Digit, Alnum, Punct,\n\
-\    Graph, Print, Blank, Cntrl, XDigit, and Space.\n\
-\n\
-- Unicode blocks (with the prefix 'In'), e.g.:\n\
-\    InBasicLatin\n\
-\    InLatin-1Supplement\n\
-\    InGreek\n\
-\n\
-- Unicode categories, e.g.:\n\
-\    Lu: Uppercase Letter\n\
-\    Ll: Lowercase Letter\n\
-\    L:  Letter\n\
-\    N:  Number\n\
-\    Z:  Separator\n\
-\    LD: Letter or Digit\n\
-\    L1: Latin-1
-
-
-#Flags:
-displayString_flag= (?ismd-ismd) - Turn flags on or off
-additionalInfo_flag= Turn flags on and off for the rest of the matching process.\n\n\
-Flags before the dash are turned on; those after the dash are turned off.\n\
-The following flags are supported:\n\
-- i: case-insensitive matching\n\
-\n\
-- s: single-line, or dotall matching mode:\n\
-\        The expression . matches any character, including a line terminator.\n\
-\n\
-- m: multiline matching mode:\n\
-\        The expressions ^ and $ match just after or just before,\n\
-\        respectively, a line terminator or the end of the input sequence.\n\
-\        When multiline matching is turned off, these expressions only\n\
-\        match at the beginning and the end of the entire input sequence.\n\
-\        This flag is ON by default.\n\
-\n\
-- d: Unix lines matching mode:\n\
-\        Only the '\\n' line terminator\n\
-\        is recognized in the behavior of ., ^, and $
-# - u: unicode-aware case folding:\n\
-#        Case-insensitive matching, when enabled, is done in a manner consistent\n\
-#        with the Unicode Standard. By default, case-insensitive matching\n\
-#        assumes that only characters in the US-ASCII charset are being matched.
-# - c: canonical equivalence\n\
-#        Two characters will be considered to match if, and only if, their full\n\
-#        canonical decompositions match. The expression "a\\\u0075030A", for example,\n\
-#        will match the string "a\u030A" when this flag is specified.\n\
-#        By default, matching does not take canonical equivalence into account.
-# - x: comments mode\n\
-#        Whitespace is ignored, and embedded comments starting with\n\
-#        # are ignored until the end of a line.\n\
-
-displayString_flagExpr= (?ismd-ismd:Expr) - Turn flags on or off in Expr
-additionalInfo_flagExpr= Turn flags on and off in Expr.\n\n\
-Flags before the dash are turned on; those after the dash are turned off.\n\
-The following flags are supported:\n\
-- i: case-insensitive matching\n\
-\n\
-- s: single-line, or dotall matching mode:\n\
-\        The expression . matches any character, including a line terminator.\n\
-\n\
-- m: multiline matching mode:\n\
-\        The expressions ^ and $ match just after or just before,\n\
-\        respectively, a line terminator or the end of the input sequence.\n\
-\        When multiline matching is turned off, these expressions only\n\
-\        match at the beginning and the end of the entire input sequence.\n\
-\        This flag is ON by default.\n\
-\n\
-- d: Unix lines matching mode:\n\
-\        Only the '\\n' line terminator\n\
-\        is recognized in the behavior of ., ^, and $
-
-
-#Noncapturing groups:
-displayString_nonCap= (?:Expr) - Non-capturing group
-additionalInfo_nonCap= Non-capturing group of regular expression Expr.\n\n\
-The group is not saved in a back reference.\n\nExample:\n\
-The expression "(?:\\w+) (\\d+)" matches "bug 42" in text "It's bug 42.".\n\
-A back reference "$1" in the replace string will be replaced by "42".
-
-displayString_atomicCap= (?>Expr) - Non-capturing atomic group
-additionalInfo_atomicCap= Non-capturing atomic group of regular expression Expr.\n\n\
-Matches the regular expression Expr once, but does not backtrack into the expression\n\
-again if the first match did not prove to be successful later on.\n\
-The group is not saved in a back reference.
-
-#Lookaround:
-displayString_posLookahead= (?=Expr) - Zero-width positive lookahead
-additionalInfo_posLookahead= Expr, via zero-width positive lookahead.\n\n\
-Matches a position (zero-width: does not consume the matched characters),\n\
-where the next characters (-> lookahead)\n\
-do match (-> positive) the embedded expression Expr.\n\nExamples:\n\
-- The expression "var(?==)" matches only the first "var" in text "var=17; other=var;".\n\
-- The expression "\\b(?=\\w{7}\\b)\\w*clip\\w*\\b" matches any\n\
-seven-letter-word that contains "clip". It matches "Eclipse", but not "paperclip".
-
-displayString_negLookahead= (?!Expr) - Zero-width negative lookahead
-additionalInfo_negLookahead= Expr, via zero-width negative lookahead.\n\n\
-Matches a position (zero-width: does not consume the matched characters),\n\
-where the next characters (-> lookahead)\n\
-do not match (-> negative) the embedded expression Expr.\n\nExamples:\n\
-- The expression "var(?!=)" matches only the second "var" in text "var=17; other=var;".\n\
-- The expression "\\b(?!\\w{5,7}\\b)\\w*clip\\w*\\b" matches any\n\
-word that contains "clip" and consists of less than 5 or more than 7 characters.\n\
-It matches "clip" and "paperclip", but not "Eclipse".
-
-displayString_posLookbehind= (?<=Expr) - Zero-width positive lookbehind
-additionalInfo_posLookbehind= Expr, via zero-width positive lookbehind.\n\n\
-Matches a position (zero-width: does not consume the matched characters),\n\
-where the previous characters (-> lookbehind)\n\
-do match (-> positive) the embedded expression Expr.\n\nExample:\n\
-- The expression "\\w{5,}+(?<=as)\\b" matches "alias" and "bananas",\n\
-but does not match "peas", "apples", or "Alaska".
-
-displayString_negLookbehind= (?<!Expr) - Zero-width negative lookbehind
-additionalInfo_negLookbehind= Expr, via zero-width negative lookbehind.\n\n\
-Matches a position (zero-width: does not consume the matched characters),\n\
-where the previous characters (-> lookbehind)\n\
-do not match (-> negative) the embedded expression Expr.\n\nExample:\n\
-- The expression "\\w{5,}+(?<!as)\\b" matches "Eclipse" and "apples",\n\
-but does not match "peas" or "bananas".
-
-#Replace string:
-displayString_dollar= $i - Match of the capturing group i
-additionalInfo_dollar= Match of the capturing group i.\n\n\
-$i is the string that has been saved as capturing group i.\n\
-$0 is the subsequence matched by the entire expression.\n\
-\n\
-Note: in the find expression, \\i stands for the capturing group i. 
-displayString_replace_cap= \\i - Match of the capturing group i
-additionalInfo_replace_cap= Match of the capturing group i.\n\n\
-\\i is the string that has been saved as capturing group i.\n\
-\\0 is the subsequence matched by the entire expression.\n\
-\n\
-Note: \\i is equivalent to $i 
-displayString_replace_bs= \\ - Quote next character
-additionalInfo_replace_bs= Quote next character\n\nExamples:\n\
-"\\$" will be replaced by "$".\n\
-"\\q" will be replaced by "q".\n\
-"\\\\" will be replaced by "\\".
-displayString_replace_bs_n= \\n - Newline
-additionalInfo_replace_bs_n= Newline (\\x0A, decimal: 10)\n\n\
-Note that \\n always inserts the newline character,\n\
-even if the document uses different line delimiters.\n\n\
-To insert the document line delimiter, use \\R.
-displayString_replace_bs_r= \\r - CR
-additionalInfo_replace_bs_r= Carriage Return (\\x0D, decimal: 13)\n\n\
-Note that \\r always inserts the carriage return character,\n\
-even if the document uses different line delimiters.\n\n\
-To insert the document line delimiter, use \\R.
-displayString_replace_bs_R= \\R - Line delimiter
-additionalInfo_replace_bs_R= Line delimiter\n\n\
-Inserts the default line delimiter of the document.
-displayString_replace_bs_C=\\C - Retain case
-additionalInfo_replace_bs_C=\\C - Retain casing of match (all lower case, all upper case, capitalized)\n\
-when replacing expression after \\C.\n\nExamples:\n\
-Find: "foo" Replace: "my\\Cbar\\CFar"\n\
-"foo" will be replaced by "mybarfar".\n\
-"FOO" will be replaced by "myBARFAR".\n\
-"Foo" will be replaced by "myBarFar".\n\n\
-Note that the content of a group ($i, \\i) is currently inserted unmodified.
-
--- a/dwtx/jface/text/Region.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/Region.d	Mon Sep 08 00:51:37 2008 +0200
@@ -155,6 +155,7 @@
 
 
 import dwt.dwthelper.utils;
+import tango.text.convert.Format;
 
 
 /**
@@ -209,11 +210,11 @@
     public override hash_t toHash() {
         return (fOffset << 24) | (fLength << 16);
     }
-    
+
     /*
      * @see java.lang.Object#toString()
      */
     public override String toString() {
-        return "[" + fOffset + '+' + fLength + ']'; //$NON-NLS-1$
+        return Format("[{}+{}]", fOffset, fLength ); //$NON-NLS-1$
     }
 }
--- a/dwtx/jface/text/SequentialRewriteTextStore.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/SequentialRewriteTextStore.d	Mon Sep 08 00:51:37 2008 +0200
@@ -233,7 +233,7 @@
 
             // backward
             if (offset + length <= firstReplace.newOffset) {
-                int delta= text.length() - length;
+                int delta= text.length - length;
                 if (delta !is 0) {
                     for (Iterator i= fReplaceList.iterator(); i.hasNext(); ) {
                         Replace replace= cast(Replace) i.next();
@@ -244,12 +244,12 @@
                 fReplaceList.addFirst(new Replace(offset, offset, length, text));
 
             // forward
-            } else if (offset >= lastReplace.newOffset + lastReplace.text.length()) {
+            } else if (offset >= lastReplace.newOffset + lastReplace.text.length) {
                 int delta= getDelta(lastReplace);
                 fReplaceList.add(new Replace(offset - delta, offset, length, text));
 
             } else if (ASSERT_SEQUENTIALITY) {
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
 
             } else {
                 commit();
@@ -283,12 +283,12 @@
             return fSource.get(offset, length);
 
             // after
-        } else if (offset >= lastReplace.newOffset + lastReplace.text.length()) {
+        } else if (offset >= lastReplace.newOffset + lastReplace.text.length) {
             int delta= getDelta(lastReplace);
             return fSource.get(offset - delta, length);
 
         } else if (ASSERT_SEQUENTIALITY) {
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException(null);
 
         } else {
 
@@ -299,10 +299,10 @@
                 if (offset + length < replace.newOffset) {
                     return fSource.get(offset - delta, length);
 
-                } else if (offset >= replace.newOffset && offset + length <= replace.newOffset + replace.text.length()) {
+                } else if (offset >= replace.newOffset && offset + length <= replace.newOffset + replace.text.length) {
                     return replace.text.substring(offset - replace.newOffset, offset - replace.newOffset + length);
 
-                } else if (offset >= replace.newOffset + replace.text.length()) {
+                } else if (offset >= replace.newOffset + replace.text.length) {
                     delta= getDelta(replace);
                     continue;
 
@@ -348,7 +348,7 @@
             return fSource.get(offset - delta);
 
         } else if (ASSERT_SEQUENTIALITY) {
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException(null);
 
         } else {
 
--- a/dwtx/jface/text/TextAttribute.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextAttribute.d	Mon Sep 08 00:51:37 2008 +0200
@@ -193,7 +193,7 @@
 
     /** The text style */
     private int style;
-    
+
     /**
      * The text font.
      * @since 3.3
@@ -218,7 +218,7 @@
         this.background= background;
         this.style= style;
     }
-    
+
     /**
      * Creates a text attribute with the given colors and style.
      *
@@ -256,7 +256,7 @@
         if (!( cast(TextAttribute)object ))
             return false;
         TextAttribute a= cast(TextAttribute)object;
-        
+
         return (a.style is style && equals(a.foreground, foreground) && equals(a.background, background) && equals(a.font, font));
     }
 
@@ -270,7 +270,7 @@
      */
     private bool equals(Object o1, Object o2) {
         if (o1 !is null)
-            return o1.equals(o2);
+            return cast(bool) o1.opEquals(o2);
         return (o2 is null);
     }
 
@@ -315,7 +315,7 @@
     public int getStyle() {
         return style;
     }
-    
+
     /**
      * Returns the attribute's font.
      *
--- a/dwtx/jface/text/TextEvent.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextEvent.d	Mon Sep 08 00:51:37 2008 +0200
@@ -204,7 +204,7 @@
      * @param event the associated document event or <code>null</code> if none
      * @param viewerRedrawState the redraw state of the viewer
      */
-    protected this(int offset, int length, String text, String replacedText, DocumentEvent event, bool viewerRedrawState) {
+    /+protected+/ this(int offset, int length, String text, String replacedText, DocumentEvent event, bool viewerRedrawState) {
         fOffset= offset;
         fLength= length;
         fText= text;
--- a/dwtx/jface/text/TextMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-FindReplaceDocumentAdapter.illegalControlEscape= Illegal control escape sequence {0}
-FindReplaceDocumentAdapter.illegalHexEscape= Illegal hexadecimal escape sequence {0}
-FindReplaceDocumentAdapter.illegalLinebreak=Illegal position for \\R
-FindReplaceDocumentAdapter.illegalUnicodeEscape= Illegal Unicode escape sequence {0}
-FindReplaceDocumentAdapter.incompatibleLineDelimiter= Incompatible line delimiter
--- a/dwtx/jface/text/TextPresentation.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextPresentation.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -155,6 +154,7 @@
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
+import tango.core.Exception;
 
 import dwt.DWT;
 import dwt.custom.StyleRange;
@@ -239,7 +239,7 @@
                 StyleRange r= cast(StyleRange) fRanges.get(fIndex++);
                 return createWindowRelativeRange(fWindow, r);
             } catch (ArrayIndexOutOfBoundsException x) {
-                throw new NoSuchElementException();
+                throw new NoSuchElementException(null);
             } finally {
                 if (fSkipDefaults)
                     computeIndex();
@@ -321,7 +321,7 @@
      */
     public this(IRegion extent, int sizeHint) {
         this(sizeHint);
-        Assert.isNotNull(extent);
+        Assert.isNotNull(cast(Object)extent);
         fExtent= extent;
     }
 
@@ -630,7 +630,7 @@
     private void checkConsistency(StyleRange range) {
 
         if (range is null)
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException(null);
 
         if (fDefaultRange !is null) {
 
--- a/dwtx/jface/text/TextSelection.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextSelection.d	Mon Sep 08 00:51:37 2008 +0200
@@ -167,7 +167,17 @@
 public class TextSelection : ITextSelection {
 
     /** Internal empty text selection */
-    private const static ITextSelection NULL= new TextSelection();
+    private static ITextSelection NULL_;
+    private static ITextSelection NULL(){
+        if( NULL_ is null ){
+            synchronized( TextSelection.classinfo ){
+                if( NULL_ is null ){
+                    NULL_= new TextSelection();
+                }
+            }
+        }
+        return NULL_;
+    }
 
     /**
      * Returns a shared instance of an empty text selection.
@@ -295,11 +305,11 @@
     /*
      * @see java.lang.Object#equals(Object)
      */
-    public bool equals(Object obj) {
+    public override int opEquals(Object obj) {
         if (obj is this)
             return true;
 
-        if (obj is null || getClass() !is obj.getClass())
+        if (obj is null || this.classinfo !is obj.classinfo)
             return false;
 
         TextSelection s= cast(TextSelection) obj;
@@ -314,7 +324,7 @@
             try {
                 String sContent= s.fDocument.get(fOffset, fLength);
                 String content= fDocument.get(fOffset, fLength);
-                return sContent.equals(content);
+                return sContent==/+eq+/content;
             } catch (BadLocationException x) {
             }
         }
@@ -326,7 +336,7 @@
      * @see java.lang.Object#hashCode()
      */
     public override hash_t toHash() {
-        int low= fDocument !is null ? fDocument.toHash() : 0;
+        int low= fDocument !is null ? (cast(Object)fDocument).toHash() : 0;
         return (fOffset << 24) | (fLength << 16) | low;
     }
 }
--- a/dwtx/jface/text/TextViewer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextViewer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -60,7 +60,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -157,6 +156,7 @@
 import dwtx.dwtxhelper.Collection;
 import dwtx.dwtxhelper.regex;
 import tango.text.convert.Format;
+import tango.core.Thread;
 
 import dwt.DWT;
 import dwt.custom.LineBackgroundEvent;
@@ -240,6 +240,8 @@
                     IEditingSupportRegistry, ITextOperationTarget, ITextOperationTargetExtension,
                     IWidgetTokenOwner, IWidgetTokenOwnerExtension, IPostSelectionProvider {
 
+    alias Viewer.fireSelectionChanged fireSelectionChanged;
+
     /** Internal flag to indicate the debug state. */
     public static const bool TRACE_ERRORS= false;
     /** Internal flag to indicate the debug state. */
@@ -367,7 +369,7 @@
                     fDoubleClickSelection= textWidget.getSelection();
                     event.newOffset= fDoubleClickSelection.x;
                     if (TRACE_DOUBLE_CLICK)
-                        System.out_.println("- setting selection: x= " + fDoubleClickSelection.x + ", y= " + fDoubleClickSelection.y); //$NON-NLS-1$ //$NON-NLS-2$
+                        System.out_.println(Format("- setting selection: x= {}, y= {}", fDoubleClickSelection.x, fDoubleClickSelection.y)); //$NON-NLS-1$ //$NON-NLS-2$
                 }
             } else {
                 if (fDoubleClickSelection.x <= event.offset && event.offset <= fDoubleClickSelection.y)
@@ -383,11 +385,11 @@
      * @since 3.3
      */
     private void print(MovementEvent e) {
-        System.out_.println("line offset: " + e.lineOffset); //$NON-NLS-1$
-        System.out_.println("line: " + e.lineText); //$NON-NLS-1$
-        System.out_.println("type: " + e.movement); //$NON-NLS-1$
-        System.out_.println("offset: " +  e.offset); //$NON-NLS-1$
-        System.out_.println("newOffset: " + e.newOffset); //$NON-NLS-1$
+        System.out_.println(Format("line offset: {}", e.lineOffset)); //$NON-NLS-1$
+        System.out_.println(Format("line: {}", e.lineText)); //$NON-NLS-1$
+        System.out_.println(Format("type: {}", e.movement)); //$NON-NLS-1$
+        System.out_.println(Format("offset: {}",  e.offset)); //$NON-NLS-1$
+        System.out_.println(Format("newOffset: {}", e.newOffset)); //$NON-NLS-1$
     }
 
     /**
@@ -589,12 +591,17 @@
         }
 
         /** List of registered verify key listeners. */
-        private List fListeners= new ArrayList();
+        private List fListeners;
         /** List of pending batches. */
-        private List fBatched= new ArrayList();
+        private List fBatched;
         /** The reentrance count. */
         private int fReentranceCount= 0;
 
+        this(){
+            fListeners= new ArrayList();
+            fBatched= new ArrayList();
+        }
+
         /*
          * @see VerifyKeyListener#verifyKey(VerifyEvent)
          */
@@ -663,7 +670,7 @@
                     // find index based on identity
                     int size= fListeners.size();
                     for (int i= 0; i < size; i++) {
-                        if (listener is fListeners.get(i)) {
+                        if (cast(Object)listener is fListeners.get(i)) {
                             idx= i;
                             break;
                         }
@@ -676,9 +683,9 @@
                             fListeners.remove(idx);
 
                         if (index > fListeners.size())
-                            fListeners.add(listener);
+                            fListeners.add(cast(Object)listener);
                         else
-                            fListeners.add(index, listener);
+                            fListeners.add(index, cast(Object)listener);
                     }
 
                     if (size is 0)  // checking old size, i.e. current size is size + 1
@@ -704,7 +711,7 @@
 
                 int size= fListeners.size();
                 for (int i= 0; i < size; i++) {
-                    if (listener is fListeners.get(i)) {
+                    if (cast(Object)listener is fListeners.get(i)) {
                         fListeners.remove(i);
                         if (size is 1)  // checking old size, i.e. current size is size - 1
                             uninstall();
@@ -892,7 +899,7 @@
         public void update(DocumentEvent event) {
             int offset= event.getOffset();
             int length= event.getLength();
-            int delta= event.getText().length() - length;
+            int delta= event.getText().length - length;
 
             if (offset < fPosition.getOffset())
                 fPosition.setOffset(fPosition.getOffset() + delta);
@@ -1208,7 +1215,7 @@
          * @param stateMask the state mask
          */
         protected this(String contentType, int stateMask) {
-            Assert.isNotNull(contentType);
+            //Assert.isNotNull(contentType);
             fContentType= contentType;
             fStateMask= stateMask;
         }
@@ -1216,8 +1223,8 @@
         /*
          * @see java.lang.Object#equals(java.lang.Object)
          */
-        public bool equals(Object obj) {
-            if (obj is null || obj.getClass() !is getClass())
+        public override int opEquals(Object obj) {
+            if (obj is null || obj.classinfo !is this.classinfo )
                 return false;
             TextHoverKey textHoverKey= cast(TextHoverKey)obj;
             return textHoverKey.fContentType.equals(fContentType) && textHoverKey.fStateMask is fStateMask;
@@ -1227,7 +1234,7 @@
          * @see java.lang.Object#hashCode()
          */
         public override hash_t toHash() {
-            return fStateMask << 16 | fContentType.toHash();
+            return fStateMask << 16 | .toHash(fContentType);
         }
 
         /**
@@ -1363,7 +1370,7 @@
             Assert.isLegal(!isConnected());
             fUpdaterDocument= document;
             try {
-                fUpdaterCategory= SELECTION_POSITION_CATEGORY + toHash();
+                fUpdaterCategory= SELECTION_POSITION_CATEGORY ~ Integer.toString(toHash());
                 fUpdater= new NonDeletingPositionUpdater(fUpdaterCategory);
                 fUpdaterDocument.addPositionCategory(fUpdaterCategory);
                 fUpdaterDocument.addPositionUpdater(fUpdater);
@@ -1410,7 +1417,7 @@
             position.setOffset(offset);
             position.setLength(length);
             // http://bugs.eclipse.org/bugs/show_bug.cgi?id=32795
-            position.isDeleted= false;
+            position.isDeleted_= false;
         }
 
         /**
@@ -1642,12 +1649,12 @@
      * The mark position category.
      * @since 2.0
      */
-    private const String MARK_POSITION_CATEGORY;
+    private /+const+/ String MARK_POSITION_CATEGORY;
     /**
      * The mark position updater
      * @since 2.0
      */
-    private const IPositionUpdater fMarkPositionUpdater;
+    private /+const+/ IPositionUpdater fMarkPositionUpdater;
     /**
      * The flag indicating the redraw behavior
      * @since 2.0
@@ -1677,7 +1684,7 @@
      * Queued post selection changed events count.
      * @since 3.0
      */
-    private const int[] fNumberOfPostSelectionChangedEvents= new int[1];
+    private /+const+/ int[] fNumberOfPostSelectionChangedEvents;
     /**
      * Last selection range sent to post selection change listeners.
      * @since 3.0
@@ -1687,7 +1694,7 @@
      * The set of registered editor helpers.
      * @since 3.1
      */
-    private Set fEditorHelpers= new HashSet();
+    private Set fEditorHelpers;
     /**
      * The internal rewrite session listener.
      * @since 3.1
@@ -1795,6 +1802,8 @@
         MARK_POSITION_CATEGORY=Format("__mark_category_{}", toHash()); //$NON-NLS-1$
         fMarkPositionUpdater= new DefaultPositionUpdater(MARK_POSITION_CATEGORY);
         fDocumentRewriteSessionListener= new DocumentRewriteSessionListener();
+        fNumberOfPostSelectionChangedEvents= new int[1];
+        fEditorHelpers= new HashSet();
     }
     /**
      * Internal use only
@@ -2108,16 +2117,16 @@
             if (autoEditStrategies is null)
                 return;
 
-            fAutoIndentStrategies.put(contentType, null);
+            fAutoIndentStrategies.put(contentType, cast(Object)null);
 
         } else {
             if (autoEditStrategies is null) {
                 autoEditStrategies= new ArrayList();
-                fAutoIndentStrategies.put(contentType, autoEditStrategies);
+                fAutoIndentStrategies.put(contentType, cast(Object)autoEditStrategies);
             }
 
             autoEditStrategies.clear();
-            autoEditStrategies.addAll(Arrays.asList(strategies));
+            autoEditStrategies.addAll(Arrays.asList(arraycast!(Object)(strategies)));
         }
     }
 
@@ -2128,7 +2137,7 @@
     public void prependAutoEditStrategy(IAutoEditStrategy strategy, String contentType) {
 
         if (strategy is null || contentType is null)
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException("");
 
         if (fAutoIndentStrategies is null)
             fAutoIndentStrategies= new HashMap();
@@ -2136,10 +2145,10 @@
         List autoEditStrategies= cast(List) fAutoIndentStrategies.get(contentType);
         if (autoEditStrategies is null) {
             autoEditStrategies= new ArrayList();
-            fAutoIndentStrategies.put(contentType, autoEditStrategies);
-        }
-
-        autoEditStrategies.add(0, strategy);
+            fAutoIndentStrategies.put(contentType,cast(Object) autoEditStrategies);
+        }
+
+        autoEditStrategies.add(0, cast(Object)strategy);
     }
 
     /*
@@ -2155,14 +2164,14 @@
             return;
 
         for (final Iterator iterator= autoEditStrategies.iterator(); iterator.hasNext(); ) {
-            if (iterator.next().equals(strategy)) {
+            if (iterator.next().opEquals(cast(Object)strategy)) {
                 iterator.remove();
                 break;
             }
         }
 
         if (autoEditStrategies.isEmpty())
-            fAutoIndentStrategies.put(contentType, null);
+            fAutoIndentStrategies.put(contentType, cast(Object)null);
     }
 
     /*
@@ -2187,7 +2196,7 @@
             if (fIndentChars is null)
                 fIndentChars= new HashMap();
 
-            fIndentChars.put(contentType, indentPrefixes);
+            fIndentChars.put(contentType, new ArrayWrapperObject( stringcast(indentPrefixes)));
 
         } else if (fIndentChars !is null)
             fIndentChars.remove(contentType);
@@ -2226,7 +2235,7 @@
         if (defaultPrefixes !is null && defaultPrefixes.length > 0) {
             if (fDefaultPrefixChars is null)
                 fDefaultPrefixChars= new HashMap();
-            fDefaultPrefixChars.put(contentType, defaultPrefixes);
+            fDefaultPrefixChars.put(contentType, new ArrayWrapperObject( stringcast(defaultPrefixes)));
         } else if (fDefaultPrefixChars !is null)
             fDefaultPrefixChars.remove(contentType);
     }
@@ -2263,7 +2272,7 @@
             if (fTextHovers is null) {
                 fTextHovers= new HashMap();
             }
-            fTextHovers.put(key, hover);
+            fTextHovers.put(key, cast(Object)hover);
         } else if (fTextHovers !is null)
             fTextHovers.remove(key);
 
@@ -2528,7 +2537,7 @@
                 offset= lineEnd;
                 String delimiter= document.getLineDelimiter(lineNumber);
                 if (delimiter !is null)
-                    offset += delimiter.length();
+                    offset += delimiter.length;
             }
 
             int end= offset + length;
@@ -2591,13 +2600,13 @@
      */
     public void addPostSelectionChangedListener(ISelectionChangedListener listener)  {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fPostSelectionChangedListeners is null)
             fPostSelectionChangedListeners= new ArrayList();
 
-        if (!fPostSelectionChangedListeners.contains(listener))
-            fPostSelectionChangedListeners.add(listener);
+        if (!fPostSelectionChangedListeners.contains(cast(Object)listener))
+            fPostSelectionChangedListeners.add(cast(Object)listener);
     }
 
     /*
@@ -2606,10 +2615,10 @@
      */
     public void removePostSelectionChangedListener(ISelectionChangedListener listener)  {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fPostSelectionChangedListeners !is null)  {
-            fPostSelectionChangedListeners.remove(listener);
+            fPostSelectionChangedListeners.remove(cast(Object)listener);
             if (fPostSelectionChangedListeners.size() is 0)
                 fPostSelectionChangedListeners= null;
         }
@@ -2645,7 +2654,10 @@
 
         fNumberOfPostSelectionChangedEvents[0]++;
         display.timerExec(getEmptySelectionChangedEventDelay(), new class()  Runnable {
-            final int id= fNumberOfPostSelectionChangedEvents[0];
+            const int id;
+            this(){
+                id = fNumberOfPostSelectionChangedEvents[0];
+            }
             public void run() {
                 if (id is fNumberOfPostSelectionChangedEvents[0]) {
                     // Check again because this is executed after the delay
@@ -2653,7 +2665,7 @@
                         Point selection= fTextWidget.getSelectionRange();
                         if (selection !is null) {
                             IRegion r= widgetRange2ModelRange(new Region(selection.x, selection.y));
-                            if (fireEqualSelection || (r !is null && !r.equals(fLastSentPostSelectionChange)) || r is null)  {
+                            if (fireEqualSelection || (r !is null && !(cast(Object)r).opEquals(cast(Object)fLastSentPostSelectionChange)) || r is null)  {
                                 fLastSentPostSelectionChange= r;
                                 firePostSelectionChanged(selection.x, selection.y);
                             }
@@ -2703,7 +2715,7 @@
     protected void fireSelectionChanged(int offset, int length) {
         if (redraws()) {
             IRegion r= widgetRange2ModelRange(new Region(offset, length));
-            if ((r !is null && !r.equals(fLastSentSelectionChange)) || r is null)  {
+            if ((r !is null && !(cast(Object)r).opEquals(cast(Object)fLastSentSelectionChange)) || r is null)  {
                 fLastSentSelectionChange= r;
                 ISelection selection= r !is null ? new TextSelection(getDocument(), r.getOffset(), r.getLength()) : TextSelection.emptySelection();
                 SelectionChangedEvent event= new SelectionChangedEvent(this, selection);
@@ -2759,13 +2771,13 @@
      */
     public void addTextListener(ITextListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fTextListeners is null)
             fTextListeners= new ArrayList();
 
-        if (!fTextListeners.contains(listener))
-            fTextListeners.add(listener);
+        if (!fTextListeners.contains(cast(Object)listener))
+            fTextListeners.add(cast(Object)listener);
     }
 
     /*
@@ -2773,10 +2785,10 @@
      */
     public void removeTextListener(ITextListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fTextListeners !is null) {
-            fTextListeners.remove(listener);
+            fTextListeners.remove(cast(Object)listener);
             if (fTextListeners.size() is 0)
                 fTextListeners= null;
         }
@@ -2811,13 +2823,13 @@
      */
     public void addTextInputListener(ITextInputListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fTextInputListeners is null)
             fTextInputListeners= new ArrayList();
 
-        if (!fTextInputListeners.contains(listener))
-            fTextInputListeners.add(listener);
+        if (!fTextInputListeners.contains(cast(Object)listener))
+            fTextInputListeners.add(cast(Object)listener);
     }
 
     /*
@@ -2825,10 +2837,10 @@
      */
     public void removeTextInputListener(ITextInputListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fTextInputListeners !is null) {
-            fTextInputListeners.remove(listener);
+            fTextInputListeners.remove(cast(Object)listener);
             if (fTextInputListeners.size() is 0)
                 fTextInputListeners= null;
         }
@@ -2874,7 +2886,7 @@
      * @see Viewer#getInput()
      */
     public Object getInput() {
-        return getDocument();
+        return cast(Object)getDocument();
     }
 
     /*
@@ -2910,7 +2922,7 @@
         setVisibleDocument(fDocument);
 
         resetPlugins();
-        inputChanged(fDocument, oldDocument);
+        inputChanged(cast(Object)fDocument, cast(Object)oldDocument);
 
         fireInputDocumentChanged(oldDocument, fDocument);
         fLastSentSelectionChange= null;
@@ -2939,7 +2951,7 @@
         }
 
         resetPlugins();
-        inputChanged(fDocument, oldDocument);
+        inputChanged(cast(Object)fDocument, cast(Object)oldDocument);
 
         fireInputDocumentChanged(oldDocument, fDocument);
         fLastSentSelectionChange= null;
@@ -3062,8 +3074,8 @@
             initializeViewportUpdate();
         }
 
-        if (!fViewportListeners.contains(listener))
-            fViewportListeners.add(listener);
+        if (!fViewportListeners.contains(cast(Object)listener))
+            fViewportListeners.add(cast(Object)listener);
     }
 
     /*
@@ -3071,7 +3083,7 @@
      */
     public void removeViewportListener(IViewportListener listener) {
         if (fViewportListeners !is null)
-            fViewportListeners.remove(listener);
+            fViewportListeners.remove(cast(Object)listener);
     }
 
     /**
@@ -3311,7 +3323,7 @@
 
                     float index= (cast(float)newOffset) / (cast(float)getAverageCharWidth());
 
-                    fTextWidget.setHorizontalIndex(Math.round(index));
+                    fTextWidget.setHorizontalIndex(cast(int)Math.round(index));
                 }
 
             }
@@ -3570,6 +3582,9 @@
 
         return 0;
     }
+    package int _getVisibleRegionOffset_package() {
+        return _getVisibleRegionOffset();
+    }
 
     /*
      * @see ITextViewer#getVisibleRegion()
@@ -3651,7 +3666,7 @@
         if (strategy !is null) {
             if (fDoubleClickStrategies is null)
                 fDoubleClickStrategies= new HashMap();
-            fDoubleClickStrategies.put(contentType, strategy);
+            fDoubleClickStrategies.put(stringcast(contentType), cast(Object)strategy);
         } else if (fDoubleClickStrategies !is null)
             fDoubleClickStrategies.remove(contentType);
     }
@@ -3950,6 +3965,9 @@
                 extension.acceptPostNotificationReplaces();
         }
     }
+    package void ignoreAutoEditStrategies_package(bool ignore) {
+        return ignoreAutoEditStrategies(ignore);
+    }
 
     /**
      * Returns whether this viewer ignores the registered auto edit strategies.
@@ -4410,8 +4428,8 @@
                 char startChar= adapter.charAt(widgetPos);
                 char endChar= adapter.charAt(widgetPos+length-1);
                 bool borderHasLineDelimiter= startChar is '\n' || startChar is '\r' || endChar is '\n' || endChar is '\r';
-                bool redraws= redraws();
-                if (borderHasLineDelimiter && redraws)
+                bool redraws_= redraws();
+                if (borderHasLineDelimiter && redraws_)
                     setRedraw(false);
 
                 if (redraws()) {
@@ -4420,7 +4438,7 @@
                     selectionChanged(widgetPos, length);
                 } else {
                     setSelectedRange(widgetOffset2ModelOffset(widgetPos), length);
-                    if (redraws)
+                    if (redraws_)
                         setRedraw(true);
                 }
 
@@ -4487,8 +4505,8 @@
                 char startChar= adapter.charAt(widgetPos);
                 char endChar= adapter.charAt(widgetPos+length-1);
                 bool borderHasLineDelimiter= startChar is '\n' || startChar is '\r' || endChar is '\n' || endChar is '\r';
-                bool redraws= redraws();
-                if (borderHasLineDelimiter && redraws)
+                bool redraws_= redraws();
+                if (borderHasLineDelimiter && redraws_)
                     setRedraw(false);
 
                 if (redraws()) {
@@ -4497,7 +4515,7 @@
                     selectionChanged(widgetPos, length);
                 } else {
                     setSelectedRange(modelPos, length);
-                    if (redraws)
+                    if (redraws_)
                         setRedraw(true);
                 }
 
@@ -4994,7 +5012,7 @@
     public ITextHover getCurrentTextHover() {
         if (fTextHoverManager is null)
             return null;
-        return fTextHoverManager.getCurrentTextHover();
+        return fTextHoverManager.getCurrentTextHover_package();
     }
 
     /*
@@ -5003,7 +5021,7 @@
     public Point getHoverEventLocation() {
         if (fTextHoverManager is null)
             return null;
-        return fTextHoverManager.getHoverEventLocation();
+        return fTextHoverManager.getHoverEventLocation_package();
     }
 
     /**
@@ -5404,13 +5422,13 @@
      */
     public void addTextPresentationListener(ITextPresentationListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fTextPresentationListeners is null)
             fTextPresentationListeners= new ArrayList();
 
-        if (!fTextPresentationListeners.contains(listener))
-            fTextPresentationListeners.add(listener);
+        if (!fTextPresentationListeners.contains(cast(Object)listener))
+            fTextPresentationListeners.add(cast(Object)listener);
     }
 
     /*
@@ -5419,10 +5437,10 @@
      */
     public void removeTextPresentationListener(ITextPresentationListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fTextPresentationListeners !is null) {
-            fTextPresentationListeners.remove(listener);
+            fTextPresentationListeners.remove(cast(Object)listener);
             if (fTextPresentationListeners.size() is 0)
                 fTextPresentationListeners= null;
         }
@@ -5434,7 +5452,7 @@
      */
     public void register(IEditingSupport helper) {
         Assert.isLegal(helper !is null);
-        fEditorHelpers.add(helper);
+        fEditorHelpers.add(cast(Object)helper);
     }
 
     /*
@@ -5442,7 +5460,7 @@
      * @since 3.1
      */
     public void unregister(IEditingSupport helper) {
-        fEditorHelpers.remove(helper);
+        fEditorHelpers.remove(cast(Object)helper);
     }
 
     /*
--- a/dwtx/jface/text/TextViewerHoverManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextViewerHoverManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -196,7 +196,7 @@
     /** The stopper of the computation thread */
     private ITextListener fStopper;
     /** Internal monitor */
-    private Object fMutex= new Object();
+    private Object fMutex;
     /** The currently shown text hover. */
     private /+volatile+/ ITextHover fTextHover;
     /**
@@ -225,6 +225,7 @@
      * @param creator the information control creator
      */
     public this(TextViewer textViewer, IInformationControlCreator creator) {
+        fMutex= new Object();
         super(creator);
         fTextViewer= textViewer;
         fStopper= new class() ITextListener {
@@ -351,7 +352,7 @@
         fThread.name = "Text Viewer Hover Presenter"; //$NON-NLS-1$
 
         fThread.isDaemon(true);
-        fThread.setPriority(Thread.MIN_PRIORITY);
+        fThread.priority(Thread.PRIORITY_MIN);
         synchronized (fMutex) {
             fTextViewer.addTextListener(fStopper);
             fThread.start();
@@ -414,7 +415,7 @@
                 return extension.widgetOffset2ModelOffset(widgetOffset);
             }
 
-            return widgetOffset + fTextViewer._getVisibleRegionOffset();
+            return widgetOffset + fTextViewer._getVisibleRegionOffset_package();
 
         } catch (IllegalArgumentException e) {
             return -1;
@@ -517,6 +518,9 @@
     protected ITextHover getCurrentTextHover() {
         return fTextHover;
     }
+    package ITextHover getCurrentTextHover_package() {
+        return getCurrentTextHover();
+    }
 
     /*
      * @see dwtx.jface.text.AbstractHoverInformationControlManager#dispose()
--- a/dwtx/jface/text/TextViewerUndoManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TextViewerUndoManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -301,7 +301,7 @@
                 fTextViewer.getTextWidget().getDisplay().syncExec(new class()  Runnable {
                     public void run() {
                         if ( cast(TextViewer)fTextViewer )
-                            (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies(true);
+                            (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies_package(true);
                     }
                 });
 
@@ -309,7 +309,7 @@
                 fTextViewer.getTextWidget().getDisplay().syncExec(new class()  Runnable {
                     public void run() {
                         if ( cast(TextViewer)fTextViewer )
-                            (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies(false);
+                            (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies_package(false);
                     }
                 });
                 if (event.isCompound()) {
@@ -436,7 +436,7 @@
                 shell= st.getShell();
         }
         if (Display.getCurrent() !is null)
-            MessageDialog.openError(shell, title, ex.getLocalizedMessage());
+            MessageDialog.openError(shell, title, ex.msg/+getLocalizedMessage()+/);
         else {
             Display display;
             Shell finalShell= shell;
@@ -445,7 +445,7 @@
             else
                 display= Display.getDefault();
             display.syncExec(dgRunnable((Shell finalShell_, String title_, Exception ex_ ) {
-                MessageDialog.openError(finalShell_, title_, ex_.getLocalizedMessage());
+                MessageDialog.openError(finalShell_, title_, ex_.msg/+getLocalizedMessage()+/);
             },finalShell, title, ex ));
         }
     }
--- a/dwtx/jface/text/TreeLineTracker.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TreeLineTracker.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,6 @@
 import dwtx.jface.text.IDocumentExtension4; // packageimport
 import dwtx.jface.text.IDocumentExtension2; // packageimport
 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
-import dwtx.jface.text.Assert; // packageimport
 import dwtx.jface.text.DefaultInformationControl; // packageimport
 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
 import dwtx.jface.text.DocumentClone; // packageimport
@@ -155,6 +154,8 @@
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
+import tango.text.convert.Format;
+import tango.core.Exception;
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.AbstractLineTracker;
@@ -282,7 +283,7 @@
                 default:
                     bal= Byte.toString(balance);
             }
-            return "[" + offset + "+" + pureLength() + "+" + delimiter.length() + "|" + line + "|" + bal + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+            return Format("[{}+{}+{}|{}|{}]", offset, pureLength(), delimiter.length, line, bal ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
         }
 
         /**
@@ -291,19 +292,20 @@
          * @return the pure line length
          */
         int pureLength() {
-            return length - delimiter.length();
+            return length - delimiter.length;
         }
     }
 
     /**
      * The root node of the tree, never <code>null</code>.
      */
-    private Node fRoot= new Node(0, NO_DELIM);
+    private Node fRoot;
 
     /**
      * Creates a new line tracker.
      */
     protected this() {
+        fRoot= new Node(0, NO_DELIM);
     }
 
     /**
@@ -312,6 +314,7 @@
      * @param tracker
      */
     this(ListLineTracker tracker) {
+        fRoot= new Node(0, NO_DELIM);
         final List lines= tracker.getLines();
         final int n= lines.size();
         if (n is 0)
@@ -748,7 +751,7 @@
         // Inlined nodeByOffset as we need both node and offset
         int remaining= offset;
         Node first= fRoot;
-        final int firstNodeOffset;
+        int firstNodeOffset;
 
         while (true) {
             if (first is null)
@@ -802,7 +805,7 @@
 
         if (info is null || info.delimiter is null) {
             // a) trivial case: insert into a single node, no line mangling
-            int added= text is null ? 0 : text.length();
+            int added= text is null ? 0 : text.length;
             updateLength(node, added - length);
         } else {
             // b) more lines to add between two chunks of the first node
@@ -827,7 +830,7 @@
             // Inline addlines end
 
             // add remaining chunk merged with last (incomplete) additional line
-            insertAfter(node, remainder + text.length() - consumed, remDelim);
+            insertAfter(node, remainder + text.length - consumed, remDelim);
         }
     }
 
@@ -847,18 +850,18 @@
         // delete intermediate nodes
         // TODO could be further optimized: replace intermediate lines with intermediate added lines
         // to reduce re-balancing
-        Node successor= successor(node);
-        while (successor !is last) {
-            length -= successor.length;
-            Node toDelete= successor;
-            successor= successor(successor);
+        Node successor_= successor(node);
+        while (successor_ !is last) {
+            length -= successor_.length;
+            Node toDelete= successor_;
+            successor_= successor(successor_);
             updateLength(toDelete, -toDelete.length);
         }
 
         AbstractLineTracker_DelimiterInfo info= text is null ? null : nextDelimiterInfo(text, 0);
 
         if (info is null || info.delimiter is null) {
-            int added= text is null ? 0 : text.length();
+            int added= text is null ? 0 : text.length;
 
             // join the two lines if there are no lines added
             join(node, last, added - length);
@@ -881,7 +884,7 @@
             }
             // Inline addLines end
 
-            updateLength(last, text.length() - consumed - length);
+            updateLength(last, text.length - consumed - length);
         }
     }
 
@@ -914,7 +917,7 @@
         node.length += delta;
 
         // check deletion
-        final int lineDelta;
+        int lineDelta;
         bool delete__= node.length is 0 && node.delimiter !is NO_DELIM;
         if (delete__)
             lineDelta= -1;
@@ -1010,39 +1013,39 @@
 //          lostLeftChild= true;
         } else {
             // 3) hard case - replace node with its successor
-            Node successor= successor(node);
+            Node successor_= successor(node);
 
             // successor exists (otherwise node would not have right child, case 1)
-            if (ASSERT) Assert.isNotNull(successor);
+            if (ASSERT) Assert.isNotNull(successor_);
             // successor has no left child (a left child would be the real successor of node)
-            if (ASSERT) Assert.isTrue(successor.left is null);
-            if (ASSERT) Assert.isTrue(successor.line is 0);
+            if (ASSERT) Assert.isTrue(successor_.left is null);
+            if (ASSERT) Assert.isTrue(successor_.line is 0);
             // successor is the left child of its parent (otherwise parent would be smaller and
             // hence the real successor)
-            if (ASSERT) Assert.isTrue(successor is successor.parent.left);
+            if (ASSERT) Assert.isTrue(successor_ is successor_.parent.left);
             // successor is not a child of node (would have been covered by 2a)
-            if (ASSERT) Assert.isTrue(successor.parent !is node);
+            if (ASSERT) Assert.isTrue(successor_.parent !is node);
 
-            toUpdate= successor.parent;
+            toUpdate= successor_.parent;
             lostLeftChild= true;
 
             // update relative indices
-            updateParentChain(successor, node, -successor.length, -1);
+            updateParentChain(successor_, node, -successor_.length, -1);
 
             // delete successor from its current place - like 1)
-            setChild(toUpdate, successor.right, true);
+            setChild(toUpdate, successor_.right, true);
 
             // move node's subtrees to its successor
-            setChild(successor, node.right, false);
-            setChild(successor, node.left, true);
+            setChild(successor_, node.right, false);
+            setChild(successor_, node.left, true);
 
             // replace node by successor in its parent
-            setChild(parent, successor, isLeftChild);
+            setChild(parent, successor_, isLeftChild);
 
             // update the successor
-            successor.line= node.line;
-            successor.offset= node.offset;
-            successor.balance= node.balance;
+            successor_.line= node.line;
+            successor_.offset= node.offset;
+            successor_.balance= node.balance;
         }
 
         updateParentBalanceAfterDeletion(toUpdate, lostLeftChild);
@@ -1291,7 +1294,7 @@
         // Inline nodeByOffset start as we need both node and offset
         int remaining= offset;
         Node node= fRoot;
-        final int lineOffset;
+        int lineOffset;
 
         while (true) {
             if (node is null)
@@ -1388,7 +1391,7 @@
         try {
             replace(0, 0, text);
         } catch (BadLocationException x) {
-            throw new InternalError();
+            throw new AssertException(__FILE__,__LINE__);
         }
     }
 
@@ -1398,7 +1401,7 @@
     public override String toString() {
         int depth= computeDepth(fRoot);
         int WIDTH= 30;
-        int leaves= cast(int) Math.pow(2, depth - 1);
+        int leaves= cast(int) Math.pow( cast(real)2, cast(uint) depth - 1);
         int width= WIDTH * leaves;
         String empty= "."; //$NON-NLS-1$
 
@@ -1416,13 +1419,13 @@
             // print nodes
             for (ListIterator it= roots.listIterator(); it.hasNext();) {
                 // pad before
-                buf.append(space, 0, spaces);
+                buf.append(space[ 0 .. spaces]);
 
                 Node node= cast(Node) it.next();
                 String box;
                 // replace the node with its children
                 if (node is null) {
-                    it.add(null);
+                    it.add(cast(Object)null);
                     box= empty;
                 } else {
                     it.set(node.left);
@@ -1433,12 +1436,12 @@
                 // draw the node, pad to WIDTH
                 int pad_left= (WIDTH - box.length() + 1) / 2;
                 int pad_right= WIDTH - box.length() - pad_left;
-                buf.append(space, 0, pad_left);
+                buf.append(space[ 0 .. pad_left]);
                 buf.append(box);
-                buf.append(space, 0, pad_right);
+                buf.append(space[ 0 .. pad_right]);
 
                 // pad after
-                buf.append(space, 0, spaces);
+                buf.append(space[ 0 .. spaces]);
             }
 
             buf.append('\n');
@@ -1470,7 +1473,7 @@
         try {
             checkTreeOffsets(nodeByOffset(0), [0, 0], null);
         } catch (BadLocationException x) {
-            throw new AssertionError();
+            throw new AssertException(__FILE__,__LINE__);
         }
     }
 
--- a/dwtx/jface/text/TypedPosition.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TypedPosition.d	Mon Sep 08 00:51:37 2008 +0200
@@ -204,9 +204,9 @@
     /*
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public bool equals(Object o) {
+    public override int opEquals(Object o) {
         if ( cast(TypedPosition)o ) {
-            if (super.equals(o)) {
+            if (super.opEquals(o)) {
                 TypedPosition p= cast(TypedPosition) o;
                 return (fType is null && p.getType() is null) || fType.equals(p.getType());
             }
@@ -218,7 +218,7 @@
      * @see java.lang.Object#hashCode()
      */
     public override hash_t toHash() {
-        int type= fType is null ? 0 : fType.toHash();
+        int type= fType is null ? 0 : .toHash(fType);
         return super.toHash() | type;
      }
 }
--- a/dwtx/jface/text/TypedRegion.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/TypedRegion.d	Mon Sep 08 00:51:37 2008 +0200
@@ -188,10 +188,10 @@
     /*
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public bool equals(Object o) {
+    public override int opEquals(Object o) {
         if ( cast(TypedRegion)o ) {
             TypedRegion r= cast(TypedRegion) o;
-            return super.equals(r) && ((fType is null && r.getType() is null) || fType.equals(r.getType()));
+            return super.opEquals(r) && ((fType is null && r.getType() is null) || fType ==/+eq+/r.getType());
         }
         return false;
     }
@@ -200,7 +200,7 @@
      * @see java.lang.Object#hashCode()
      */
     public override hash_t toHash() {
-        int type= fType is null ? 0 : fType.toHash();
+        int type= fType is null ? 0 : .toHash(fType);
         return super.toHash() | type;
      }
 }
--- a/dwtx/jface/text/WhitespaceCharacterPainter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/WhitespaceCharacterPainter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -170,9 +170,9 @@
 
 
 /**
- * A painter for drawing visible characters for (invisible) whitespace 
+ * A painter for drawing visible characters for (invisible) whitespace
  * characters.
- * 
+ *
  * @since 3.3
  */
 public class WhitespaceCharacterPainter : IPainter, PaintListener {
@@ -182,7 +182,7 @@
     private static const char TAB_SIGN= '\u00bb';
     private static const char CARRIAGE_RETURN_SIGN= '\u00a4';
     private static const char LINE_FEED_SIGN= '\u00b6';
-    
+
     /** Indicates whether this painter is active. */
     private bool fIsActive= false;
     /** The source viewer this painter is attached to. */
@@ -194,11 +194,11 @@
 
     /**
      * Creates a new painter for the given text viewer.
-     * 
+     *
      * @param textViewer  the text viewer the painter should be attached to
      */
     public this(ITextViewer textViewer) {
-        super();
+//         super();
         fTextViewer= textViewer;
         fTextWidget= textViewer.getTextWidget();
         GC gc= new GC(fTextWidget);
@@ -278,7 +278,7 @@
 
     /**
      * Draw characters in view range.
-     * 
+     *
      * @param gc
      * @param x
      * @param y
@@ -301,7 +301,7 @@
 
     /**
      * Draw the given line range.
-     * 
+     *
      * @param gc
      * @param startLine  first line number
      * @param endLine  last line number (inclusive)
@@ -370,7 +370,7 @@
 
     /**
      * Draw characters of content range.
-     * 
+     *
      * @param gc the GC
      * @param startOffset inclusive start index
      * @param endOffset exclusive end index
@@ -434,14 +434,14 @@
                     }
                     draw(gc, widgetOffset, visibleChar.toString(), fg);
                 }
-                visibleChar.delete_(0, visibleChar.length());
+                visibleChar.truncate(0);
             }
         }
     }
 
     /**
      * Check if the given widget line is a folded line.
-     * 
+     *
      * @param widgetLine  the widget line number
      * @return <code>true</code> if the line is folded
      */
@@ -464,7 +464,7 @@
 
     /**
      * Draw string at widget offset.
-     * 
+     *
      * @param gc
      * @param offset the widget offset
      * @param s the string to be drawn
@@ -476,7 +476,7 @@
         FontMetrics fontMetrics= gc.getFontMetrics();
         int fontBaseline= fontMetrics.getAscent() + fontMetrics.getLeading();
         int baslineDelta= baseline - fontBaseline;
-        
+
         Point pos= fTextWidget.getLocationAtOffset(offset);
         gc.setForeground(fg);
         gc.drawString(s, pos.x, pos.y + baslineDelta, true);
@@ -484,7 +484,7 @@
 
     /**
      * Convert a document offset to the corresponding widget offset.
-     * 
+     *
      * @param documentOffset
      * @return widget offset
      */
@@ -503,7 +503,7 @@
 
     /**
      * Convert a widget offset to the corresponding document offset.
-     * 
+     *
      * @param widgetOffset
      * @return document offset
      */
--- a/dwtx/jface/text/contentassist/AdditionalInfoController.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/AdditionalInfoController.d	Mon Sep 08 00:51:37 2008 +0200
@@ -90,7 +90,7 @@
          * elapsed after it was scheduled without a {@link #reset(ICompletionProposal) reset}
          * to occur.
          */
-        private abstract class Task : Runnable {
+        private static abstract class Task : Runnable {
             /**
              * @return the delay in milliseconds before this task should be run
              */
@@ -211,7 +211,7 @@
                             public void run() {
                                 synchronized (this.outer) {
                                     if (proposal is getCurrentProposal()) {
-                                        Object info= proposal.getAdditionalProposalInfo();
+                                        Object info= stringcast(proposal.getAdditionalProposalInfo());
                                         showInformation(proposal, info);
                                     }
                                 }
@@ -643,6 +643,9 @@
     protected void hideInformationControl() {
         super.hideInformationControl();
     }
+    package void hideInformationControl_package() {
+        this.hideInformationControl();
+    }
 
     /**
      * @return the current information control, or <code>null</code> if none available
--- a/dwtx/jface/text/contentassist/CompletionProposalPopup.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/CompletionProposalPopup.d	Mon Sep 08 00:51:37 2008 +0200
@@ -312,7 +312,7 @@
 
             int accelerator= SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
             KeySequence sequence= KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
-            if (sequence.equals(fCommandSequence))
+            if (sequence==/++/fCommandSequence)
                 if (fContentAssistant.isPrefixCompletionEnabled())
                     incrementalComplete();
                 else
@@ -658,14 +658,14 @@
 
         GridData data= new GridData(GridData.FILL_BOTH);
 
-        Point size= fContentAssistant.restoreCompletionProposalPopupSize();
+        Point size= fContentAssistant.restoreCompletionProposalPopupSize_package();
         if (size !is null) {
             fProposalTable.setLayoutData(data);
             fProposalShell.setSize(size);
         } else {
             int height= fProposalTable.getItemHeight() * 10;
             // use golden ratio as default aspect ratio
-            final double aspectRatio= (1 + Math.sqrt(5)) / 2;
+            double aspectRatio= (1 + Math.sqrt(5.0f)) / 2;
             int width= cast(int) (height * aspectRatio);
             Rectangle trim= fProposalTable.computeTrim(0, 0, width, height);
             data.heightHint= trim.height;
@@ -842,7 +842,7 @@
             fMessageText= new Label(fProposalShell, DWT.RIGHT);
             GridData textData= new GridData(DWT.FILL, DWT.BOTTOM, true, false);
             fMessageText.setLayoutData(textData);
-            fMessageText.setText(fContentAssistant.getStatusMessage() + " "); //$NON-NLS-1$
+            fMessageText.setText(fContentAssistant.getStatusMessage() ~ " "); //$NON-NLS-1$
             if (fMessageTextFont is null) {
                 Font font= fMessageText.getFont();
                 Display display= fProposalShell.getDisplay();
@@ -895,7 +895,7 @@
                 TableOwnerDrawSupport.storeStyleRanges(item, 0, styleRanges);
 
             item.setImage(current.getImage());
-            item.setData(current);
+            item.setData(cast(Object)current);
         } else {
             // this should not happen, but does on win32
         }
@@ -1129,7 +1129,7 @@
         fFilteredProposals= null;
         fComputedProposals= null;
 
-        fContentAssistant.possibleCompletionsClosed();
+        fContentAssistant.possibleCompletionsClosed_package();
     }
 
     /**
@@ -1178,7 +1178,7 @@
                     ICompletionProposal proposal= proposals[i];
                     item.setText(proposal.getDisplayString());
                     item.setImage(proposal.getImage());
-                    item.setData(proposal);
+                    item.setData(cast(Object)proposal);
                 }
                 fProposalTable.setRedraw(true);
             }
@@ -1199,7 +1199,7 @@
      */
     private Point getLocation() {
         int caret= fContentAssistSubjectControlAdapter.getCaretOffset();
-        Rectangle location= fContentAssistant.getLayoutManager().computeBoundsBelowAbove(fProposalShell, fSize is null ? fProposalShell.getSize() : fSize, caret, this);
+        Rectangle location= fContentAssistant.getLayoutManager().computeBoundsBelowAbove_package(fProposalShell, fSize is null ? fProposalShell.getSize() : fSize, caret, this);
         return Geometry.getLocation(location);
     }
 
@@ -1519,13 +1519,13 @@
 
                 ICompletionProposalExtension2 p= cast(ICompletionProposalExtension2) proposals[i];
                 if (p.validate(document, offset, event))
-                    filtered.add(p);
+                    filtered.add(cast(Object)p);
 
             } else if (cast(ICompletionProposalExtension)proposals[i] ) {
 
                 ICompletionProposalExtension p= cast(ICompletionProposalExtension) proposals[i];
                 if (p.isValidFor(document, offset))
-                    filtered.add(p);
+                    filtered.add(cast(Object)p);
 
             } else {
                 // restore original behavior
@@ -1653,7 +1653,7 @@
         IDocument document= fContentAssistSubjectControlAdapter.getDocument();
 
         // contains the common postfix in the case that there are any proposals matching our LHS
-        StringBuffer rightCasePostfix= null;
+        StringBuffer rightCasePostfix;
         List rightCase= new ArrayList();
 
         bool isWrongCaseMatch= false;
@@ -1663,7 +1663,7 @@
         CharSequence wrongCasePrefix= null;
         int wrongCasePrefixStart= 0;
         // contains the common postfix of all case-insensitive matches
-        StringBuffer wrongCasePostfix= null;
+        StringBuffer wrongCasePostfix;
         List wrongCase= new ArrayList();
 
         for (int i= 0; i < fFilteredProposals.length; i++) {
@@ -1675,14 +1675,14 @@
             int start= (cast(ICompletionProposalExtension3)proposal).getPrefixCompletionStart(fContentAssistSubjectControlAdapter.getDocument(), fFilterOffset);
             CharSequence insertion= (cast(ICompletionProposalExtension3)proposal).getPrefixCompletionText(fContentAssistSubjectControlAdapter.getDocument(), fFilterOffset);
             if (insertion is null)
-                insertion= proposal.getDisplayString();
+                insertion= new StringCharSequence(proposal.getDisplayString());
             try {
                 int prefixLength= fFilterOffset - start;
                 int relativeCompletionOffset= Math.min(insertion.length(), prefixLength);
                 String prefix= document.get(start, prefixLength);
                 if (!isWrongCaseMatch && insertion.toString().startsWith(prefix)) {
                     isWrongCaseMatch= false;
-                    rightCase.add(proposal);
+                    rightCase.add(cast(Object)proposal);
                     CharSequence newPostfix= insertion.subSequence(relativeCompletionOffset, insertion.length());
                     if (rightCasePostfix is null)
                         rightCasePostfix= new StringBuffer(newPostfix.toString());
@@ -1699,7 +1699,7 @@
                             wrongCasePostfix= new StringBuffer(newPostfix.toString());
                         else
                             truncatePostfix(wrongCasePostfix, newPostfix);
-                        wrongCase.add(proposal);
+                        wrongCase.add(cast(Object)proposal);
                     } else {
                         return false;
                     }
@@ -1740,13 +1740,13 @@
         if (isWrongCaseMatch)
             prefix= wrongCasePrefix;
         else
-            prefix= "";  //$NON-NLS-1$
+            prefix= new StringCharSequence("");  //$NON-NLS-1$
 
         CharSequence postfix;
         if (isWrongCaseMatch)
-            postfix= wrongCasePostfix;
+            postfix= new StringCharSequence(wrongCasePostfix.toString);
         else
-            postfix= rightCasePostfix;
+            postfix= new StringCharSequence(rightCasePostfix.toString);
 
         if (prefix is null || postfix is null)
             return false;
@@ -1758,7 +1758,7 @@
             truncatePostfix(inDocument, postfix);
 
             // 5: replace and reveal
-            document.replace(fFilterOffset - prefix.length(), prefix.length() + inDocument.length(), prefix.toString() + postfix.toString());
+            document.replace(fFilterOffset - prefix.length(), prefix.length() + inDocument.length(), prefix.toString() ~ postfix.toString());
 
             fContentAssistSubjectControlAdapter.setSelectedRange(fFilterOffset + postfix.length(), 0);
             fContentAssistSubjectControlAdapter.revealRange(fFilterOffset + postfix.length(), 0);
@@ -1783,8 +1783,8 @@
         int oneEnd= oneOffset + oneSequence.length();
         int twoEnd= twoOffset + twoSequence.length();
 
-        String one= document.get(oneOffset, min - oneOffset) + oneSequence + document.get(oneEnd, Math.min(fFilterOffset, fFilterOffset - oneEnd));
-        String two= document.get(twoOffset, min - twoOffset) + twoSequence + document.get(twoEnd, Math.min(fFilterOffset, fFilterOffset - twoEnd));
+        String one= document.get(oneOffset, min - oneOffset) ~ oneSequence.toString ~ document.get(oneEnd, Math.min(fFilterOffset, fFilterOffset - oneEnd));
+        String two= document.get(twoOffset, min - twoOffset) ~ twoSequence.toString ~ document.get(twoEnd, Math.min(fFilterOffset, fFilterOffset - twoEnd));
 
         return one.equals(two);
     }
@@ -1800,14 +1800,14 @@
         // find common prefix
         int min= Math.min(buffer.length(), sequence.length());
         for (int c= 0; c < min; c++) {
-            if (sequence.charAt(c) !is buffer.charAt(c)) {
-                buffer.delete_(c, buffer.length());
+            if (sequence.charAt(c) !is buffer.slice()[c]) {
+                buffer.truncate(c);
                 return;
             }
         }
 
         // all equal up to minimum
-        buffer.delete_(min, buffer.length());
+        buffer.truncate(min);
     }
 
     /**
@@ -1820,7 +1820,7 @@
     void setMessage(String message) {
         Assert.isNotNull(message);
         if (isActive() && fMessageText !is null)
-            fMessageText.setText(message + " "); //$NON-NLS-1$
+            fMessageText.setText(message ~ " "); //$NON-NLS-1$
     }
 
     /**
--- a/dwtx/jface/text/contentassist/ContentAssistSubjectControlAdapter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContentAssistSubjectControlAdapter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -93,7 +93,7 @@
      * @param contentAssistSubjectControl the content assist subject control
      */
     this(IContentAssistSubjectControl contentAssistSubjectControl) {
-        Assert.isNotNull(contentAssistSubjectControl);
+        Assert.isNotNull(cast(Object)contentAssistSubjectControl);
         fContentAssistSubjectControl= contentAssistSubjectControl;
     }
 
@@ -103,7 +103,7 @@
      * @param viewer the text viewer
      */
     public this(ITextViewer viewer) {
-        Assert.isNotNull(viewer);
+        Assert.isNotNull(cast(Object)viewer);
         fViewer= viewer;
     }
 
--- a/dwtx/jface/text/contentassist/ContentAssistant.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContentAssistant.d	Mon Sep 08 00:51:37 2008 +0200
@@ -688,6 +688,9 @@
 
             return constrainHorizontally(rect, bounds);
         }
+        package Rectangle computeBoundsAboveBelow_package(Shell shell, Point preferred, int offset) {
+            return computeBoundsAboveBelow(shell, preferred, offset);
+        }
 
         /**
          * Returns the display bounds for <code>shell</code> such that it appears right below
@@ -735,6 +738,9 @@
 
             return constrainHorizontally(rect, bounds);
         }
+        package Rectangle computeBoundsBelowAbove_package(Shell shell, Point preferred, int offset, CompletionProposalPopup popup) {
+            return computeBoundsBelowAbove(shell, preferred, offset, popup );
+        }
 
         private Rectangle getCaretRectangle(int offset) {
             Point location= fContentAssistSubjectControlAdapter.getLocationAtOffset(offset);
@@ -924,7 +930,7 @@
      * @since 3.0
      */
     private bool fVerifyKeyListenerHooked= false;
-    private IContentAssistListener[] fListeners= new IContentAssistListener[4];
+    private IContentAssistListener[] fListeners;
     /**
      * The content assist subject control.
      *
@@ -966,7 +972,7 @@
      *
      * @since 3.2
      */
-    private ListenerList fCompletionListeners= new ListenerList(ListenerList.IDENTITY);
+    private ListenerList fCompletionListeners;
     /**
      * The message to display at the bottom of the proposal popup.
      *
@@ -1027,6 +1033,8 @@
      * milliseconds delay. It uses the default partitioning.
      */
     public this() {
+        fListeners= new IContentAssistListener[4];
+        fCompletionListeners= new ListenerList(ListenerList.IDENTITY);
         fPartitioning= IDocumentExtension3.DEFAULT_PARTITIONING;
     }
 
@@ -1734,6 +1742,9 @@
         fLastAutoActivation= Long.MIN_VALUE;
         storeCompletionProposalPopupSize();
     }
+    package void possibleCompletionsClosed_package() {
+        possibleCompletionsClosed();
+    }
 
     /*
      * @see IContentAssist#showContextInformation
@@ -1753,6 +1764,9 @@
      */
     protected void contextInformationClosed() {
     }
+    package void contextInformationClosed_package() {
+        contextInformationClosed();
+    }
 
     /**
      * Requests that the specified context information to be shown.
@@ -2091,6 +2105,9 @@
         if (fContextInfoPopup !is null)
             fContextInfoPopup.hide();
     }
+    package void hide_package() {
+        hide();
+    }
 
     // ------ control's size handling dialog settings ------
 
@@ -2183,6 +2200,9 @@
 
         return size;
     }
+    package Point restoreCompletionProposalPopupSize_package() {
+        return restoreCompletionProposalPopupSize();
+    }
 
     /**
      * Sets the prefix completion property. If enabled, content assist delegates completion to
--- a/dwtx/jface/text/contentassist/ContextInformation.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContextInformation.d	Mon Sep 08 00:51:37 2008 +0200
@@ -112,8 +112,8 @@
      * @since 3.1
      */
     public override hash_t toHash() {
-        int low= fContextDisplayString !is null ? fContextDisplayString.toHash() : 0;
-        return (fInformationDisplayString.toHash() << 16) | low;
+        int low= fContextDisplayString !is null ? .toHash(fContextDisplayString) : 0;
+        return (.toHash(fInformationDisplayString) << 16) | low;
     }
 
     /*
--- a/dwtx/jface/text/contentassist/ContextInformationPopup.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContextInformationPopup.d	Mon Sep 08 00:51:37 2008 +0200
@@ -102,12 +102,12 @@
          * @see java.lang.Object#equals(java.lang.Object)
          * @since 3.0
          */
-        public bool equals(Object obj) {
+        public override int opEquals(Object obj) {
             if ( cast(ContextFrame)obj ) {
                 ContextFrame frame= cast(ContextFrame) obj;
-                return fInformation.equals(frame.fInformation) && fBeginOffset is frame.fBeginOffset;
+                return fInformation==/++/frame.fInformation && fBeginOffset is frame.fBeginOffset;
             }
-            return super.equals(obj);
+            return super.opEquals(obj);
         }
 
         /*
@@ -115,7 +115,7 @@
          * @since 3.1
          */
         public override hash_t toHash() {
-            return (fInformation.toHash() << 16) | fBeginOffset;
+            return ((cast(Object)fInformation).toHash() << 16) | fBeginOffset;
         }
     }
 
@@ -142,7 +142,7 @@
     private ITextViewer fViewer;
     private ContentAssistant fContentAssistant;
 
-    private PopupCloser fPopupCloser= new PopupCloser();
+    private PopupCloser fPopupCloser;
     private Shell fContextSelectorShell;
     private Table fContextSelectorTable;
     private IContextInformation[] fContextSelectorInput;
@@ -152,7 +152,7 @@
     private StyledText fContextInfoText;
     private TextPresentation fTextPresentation;
 
-    private Stack fContextFrameStack= new Stack();
+    private Stack fContextFrameStack;
     /**
      * The content assist subject control.
      *
@@ -189,6 +189,9 @@
      * @param viewer the viewer on top of which the context information is shown
      */
     public this(ContentAssistant contentAssistant, ITextViewer viewer) {
+        fPopupCloser= new PopupCloser();
+        fContextFrameStack= new Stack();
+
         fContentAssistant= contentAssistant;
         fViewer= viewer;
         fContentAssistSubjectControlAdapter= new ContentAssistSubjectControlAdapter(fViewer);
@@ -202,6 +205,9 @@
      * @since 3.0
      */
     public this(ContentAssistant contentAssistant, IContentAssistSubjectControl contentAssistSubjectControl) {
+        fPopupCloser= new PopupCloser();
+        fContextFrameStack= new Stack();
+
         fContentAssistant= contentAssistant;
         fContentAssistSubjectControl= contentAssistSubjectControl;
         fContentAssistSubjectControlAdapter= new ContentAssistSubjectControlAdapter(fContentAssistSubjectControl);
@@ -252,7 +258,7 @@
                     // also check all other contexts
                     for (Iterator it= fContextFrameStack.iterator(); it.hasNext(); ) {
                         ContextFrame stackFrame= cast(ContextFrame) it.next();
-                        if (stackFrame.equals(frame)) {
+                        if (stackFrame==/++/frame) {
                             validateContextInformation();
                             return;
                         }
@@ -283,7 +289,7 @@
      */
     public void showContextInformation(IContextInformation info, int offset) {
         Control control= fContentAssistSubjectControlAdapter.getControl();
-        BusyIndicator.showWhile(control.getDisplay(), dgRunnable( {
+        BusyIndicator.showWhile(control.getDisplay(), dgRunnable( (IContextInformation info_, int offset_){
             if (info_ is null)
                 validateContextInformation();
             else {
@@ -350,7 +356,7 @@
             return false;
         // stack not empty
         ContextFrame top= cast(ContextFrame) fContextFrameStack.peek();
-        return frame.equals(top);
+        return cast(bool) frame.opEquals(top);
     }
 
     /**
@@ -362,7 +368,7 @@
      * @since 3.0
      */
     private bool isLastFrame(ContextFrame frame) {
-        return frame !is null && frame.equals(fLastContext);
+        return frame !is null && frame.opEquals(fLastContext);
     }
 
     /**
@@ -468,7 +474,7 @@
         final int BORDER_PAD= 2;
         final int PAD= TEXT_PAD + BORDER_PAD;
         size.x += PAD;
-        Rectangle bounds= fContentAssistant.getLayoutManager().computeBoundsAboveBelow(fContextInfoPopup, size, offset);
+        Rectangle bounds= fContentAssistant.getLayoutManager().computeBoundsAboveBelow_package(fContextInfoPopup, size, offset);
         if (bounds.width < size.x)
             // we don't fit on the screen - try again and wrap
             size= fContextInfoText.computeSize(bounds.width - PAD, DWT.DEFAULT, true);
@@ -517,7 +523,7 @@
         }
 
         if (fContextInfoPopup is null)
-            fContentAssistant.contextInformationClosed();
+            fContentAssistant.contextInformationClosed_package();
     }
 
     /**
@@ -653,7 +659,7 @@
         }
 
         if (!Helper.okToUse(fContextInfoPopup))
-            fContentAssistant.contextInformationClosed();
+            fContentAssistant.contextInformationClosed_package();
     }
 
     /**
@@ -849,7 +855,11 @@
 
         fContextInfoPopup.getDisplay().asyncExec(new class()  Runnable {
 
-            private ContextFrame fFrame= cast(ContextFrame) fContextFrameStack.peek();
+            private ContextFrame fFrame;
+
+            this() {
+                fFrame= cast(ContextFrame) fContextFrameStack.peek();
+            }
 
             public void run() {
                 // only do this if no other frames have been added in between
--- a/dwtx/jface/text/contentassist/ContextInformationValidator.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContextInformationValidator.d	Mon Sep 08 00:51:37 2008 +0200
@@ -91,7 +91,7 @@
         IContextInformation[] infos= fProcessor.computeContextInformation(fViewer, offset);
         if (infos !is null && infos.length > 0) {
             for (int i= 0; i < infos.length; i++)
-                if (fContextInformation.equals(infos[i]))
+                if (fContextInformation==/+eq+/infos[i])
                     return true;
         }
         return false;
--- a/dwtx/jface/text/contentassist/JFaceTextMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-
-InfoPopup.info_delay_timer_name=Additional info timer
-AdditionalInfoController.job_name=Computing additional info
-
-ContentAssistant.assist_delay_timer_name=AutoAssist Delay
-CompletionProposalPopup.no_proposals=no proposals
--- a/dwtx/jface/text/contentassist/PopupCloser.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/contentassist/PopupCloser.d	Mon Sep 08 00:51:37 2008 +0200
@@ -205,7 +205,7 @@
      */
     public void shellDeactivated(ShellEvent e) {
         if (fContentAssistant !is null && ! fContentAssistant.hasProposalPopupFocus())
-            fContentAssistant.hide();
+            fContentAssistant.hide_package();
     }
 
 
@@ -215,7 +215,7 @@
      */
     public void shellClosed(ShellEvent e) {
         if (fContentAssistant !is null)
-            fContentAssistant.hide();
+            fContentAssistant.hide_package();
     }
 
     /*
@@ -232,7 +232,7 @@
                     return;
 
                 if (fAdditionalInfoController.getInternalAccessor().getInformationControlReplacer() is null)
-                    fAdditionalInfoController.hideInformationControl();
+                    fAdditionalInfoController.hideInformationControl_package();
                 else if (!fAdditionalInfoController.getInternalAccessor().isReplaceInProgress()) {
                     IInformationControl infoControl= fAdditionalInfoController.getCurrentInformationControl2();
                     // During isReplaceInProgress(), events can come from the replacing information control
@@ -240,7 +240,7 @@
                         Control control= cast(Control) event.widget;
                         IInformationControlExtension5 iControl5= cast(IInformationControlExtension5) infoControl;
                         if (!(iControl5.containsControl(control)))
-                            fAdditionalInfoController.hideInformationControl();
+                            fAdditionalInfoController.hideInformationControl_package();
                         else if (event.type is DWT.MouseWheel)
                             fAdditionalInfoController.getInternalAccessor().replaceInformationControl(false);
                     } else if (infoControl !is null && infoControl.isFocusControl()) {
@@ -294,7 +294,7 @@
                             control.getDisplay().asyncExec(new class()  Runnable {
                                 public void run() {
                                     if (fContentAssistant !is null && ! fContentAssistant.hasProposalPopupFocus())
-                                        fContentAssistant.hide();
+                                        fContentAssistant.hide_package();
                                 }
                             });
                         }
--- a/dwtx/jface/text/contentassist/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.51 [en] (WinNT; I) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides a content assist add-on for an <tt>ITextViewer</tt>.
-Content assist supports the user in writing&nbsp; by proposing context
-sensitive completions at a given document position. A completion can also
-be a incomplete in itself and content assist provides means to deal with
-nested completions.
-<h2>
-Package Specification</h2>
-<tt>IContentAssistant</tt> defines the concept of the content assist add-on.
-It collaborates with content type specific completion processors (<tt>IContentAssistProcessor</tt>)
-in order to generate completion proposals (<tt>ICompletionProposal</tt>)
-valid at the current document position. The package provides a default
-implementation <tt>ContentAssistant</tt> which completely defines and implements
-the UI and the control flow for content assist.
-<br>&nbsp;
-</body>
-</html>
--- a/dwtx/jface/text/formatter/ContentFormatter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/formatter/ContentFormatter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -333,7 +333,7 @@
         if (strategy is null)
             fStrategies.remove(contentType);
         else
-            fStrategies.put(contentType, strategy);
+            fStrategies.put(contentType, cast(Object)strategy);
     }
 
     /**
--- a/dwtx/jface/text/formatter/ContextBasedFormattingStrategy.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/formatter/ContextBasedFormattingStrategy.d	Mon Sep 08 00:51:37 2008 +0200
@@ -43,7 +43,11 @@
     private Map fCurrentPreferences= null;
 
     /** The list of preferences for initiated the formatting steps */
-    private const LinkedList fPreferences= new LinkedList();
+    private const LinkedList fPreferences;
+
+    this(){
+        fPreferences= new LinkedList();
+    }
 
     /*
      * @see dwtx.jface.text.formatter.IFormattingStrategyExtension#format()
@@ -63,7 +67,7 @@
      * @see dwtx.jface.text.formatter.IFormattingStrategyExtension#formatterStarts(dwtx.jface.text.formatter.IFormattingContext)
      */
     public void formatterStarts(IFormattingContext context) {
-        fPreferences.addLast(context.getProperty(FormattingContextProperties.CONTEXT_PREFERENCES));
+        fPreferences.addLast(context.getProperty(stringcast(FormattingContextProperties.CONTEXT_PREFERENCES)));
     }
 
     /*
--- a/dwtx/jface/text/formatter/FormattingContext.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/formatter/FormattingContext.d	Mon Sep 08 00:51:37 2008 +0200
@@ -39,7 +39,11 @@
 public class FormattingContext : IFormattingContext {
 
     /** Map to store the properties */
-    private const Map fMap= new HashMap();
+    private const Map fMap;
+
+    this(){
+        fMap= new HashMap();
+    }
 
     /*
      * @see dwtx.jface.text.formatter.IFormattingContext#dispose()
@@ -117,7 +121,7 @@
         for (int index= 0; index < preferences.length; index++) {
 
             preference= preferences[index];
-            result= cast(String)map.get(preference);
+            result= stringcast(map.get(preference));
 
             if (result !is null) {
 
@@ -164,15 +168,15 @@
             if (isBooleanPreference(preference)) {
                 map.put(preference, (useDefault ? store.getDefaultBoolean(preference) : store.getBoolean(preference)) ? IPreferenceStore.TRUE : IPreferenceStore.FALSE);
             } else if (isIntegerPreference(preference)) {
-                map.put(preference, String.valueOf(useDefault ? store.getDefaultInt(preference) : store.getInt(preference)));
+                map.put(preference, String_valueOf(useDefault ? store.getDefaultInt(preference) : store.getInt(preference)));
             } else if (isStringPreference(preference)) {
                 map.put(preference, useDefault ? store.getDefaultString(preference) : store.getString(preference));
             } else if (isDoublePreference(preference)) {
-                map.put(preference, String.valueOf(useDefault ? store.getDefaultDouble(preference) : store.getDouble(preference)));
+                map.put(preference, String_valueOf(useDefault ? store.getDefaultDouble(preference) : store.getDouble(preference)));
             } else if (isFloatPreference(preference)) {
-                map.put(preference, String.valueOf(useDefault ? store.getDefaultFloat(preference) : store.getFloat(preference)));
+                map.put(preference, String_valueOf(useDefault ? store.getDefaultFloat(preference) : store.getFloat(preference)));
             } else if (isLongPreference(preference)) {
-                map.put(preference, String.valueOf(useDefault ? store.getDefaultLong(preference) : store.getLong(preference)));
+                map.put(preference, String_valueOf(useDefault ? store.getDefaultLong(preference) : store.getLong(preference)));
             }
         }
     }
--- a/dwtx/jface/text/formatter/MultiPassContentFormatter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/formatter/MultiPassContentFormatter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -116,7 +116,7 @@
     /** The partitioning of this content formatter */
     private const String fPartitioning;
     /** The slave formatting strategies */
-    private const Map fSlaves= new HashMap();
+    private const Map fSlaves;
     /** The default content type */
     private const String fType;
 
@@ -127,6 +127,8 @@
      * @param type the default content type
      */
     public this(String partitioning, String type) {
+        fSlaves= new HashMap();
+
         fPartitioning= partitioning;
         fType= type;
     }
@@ -136,12 +138,12 @@
      */
     public final void format(IDocument medium, IFormattingContext context) {
 
-        context.setProperty(FormattingContextProperties.CONTEXT_MEDIUM, medium);
+        context.setProperty(stringcast(FormattingContextProperties.CONTEXT_MEDIUM), cast(Object)medium);
 
-        final Boolean document= cast(Boolean)context.getProperty(FormattingContextProperties.CONTEXT_DOCUMENT);
+        final Boolean document= cast(Boolean)context.getProperty(stringcast(FormattingContextProperties.CONTEXT_DOCUMENT));
         if (document is null || !document.booleanValue()) {
 
-            final IRegion region= cast(IRegion)context.getProperty(FormattingContextProperties.CONTEXT_REGION);
+            final IRegion region= cast(IRegion)context.getProperty(stringcast(FormattingContextProperties.CONTEXT_REGION));
             if (region !is null) {
                 try {
                     formatMaster(context, medium, region.getOffset(), region.getLength());
@@ -165,8 +167,8 @@
 
         final FormattingContext context= new FormattingContext();
 
-        context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.FALSE);
-        context.setProperty(FormattingContextProperties.CONTEXT_REGION, region);
+        context.setProperty(stringcast(FormattingContextProperties.CONTEXT_DOCUMENT), Boolean.FALSE);
+        context.setProperty(stringcast(FormattingContextProperties.CONTEXT_REGION), cast(Object)region);
 
         format(medium, context);
     }
@@ -199,7 +201,7 @@
 
         if (fMaster !is null) {
 
-            context.setProperty(FormattingContextProperties.CONTEXT_PARTITION, new TypedPosition(offset, length, fType));
+            context.setProperty(stringcast(FormattingContextProperties.CONTEXT_PARTITION), new TypedPosition(offset, length, fType));
 
             fMaster.formatterStarts(context);
             fMaster.format();
@@ -227,7 +229,7 @@
         final IFormattingStrategyExtension strategy= cast(IFormattingStrategyExtension)fSlaves.get(type);
         if (strategy !is null) {
 
-            context.setProperty(FormattingContextProperties.CONTEXT_PARTITION, new TypedPosition(offset, length, type));
+            context.setProperty(stringcast(FormattingContextProperties.CONTEXT_PARTITION), new TypedPosition(offset, length, type));
 
             strategy.formatterStarts(context);
             strategy.format();
@@ -306,7 +308,7 @@
      *  {@link IFormattingStrategyExtension}
      */
     public final void setMasterStrategy(IFormattingStrategy strategy) {
-        Assert.isTrue( cast(IFormattingStrategyExtension)strategy );
+        Assert.isTrue( null !is cast(IFormattingStrategyExtension)strategy );
         fMaster= cast(IFormattingStrategyExtension) strategy;
     }
 
@@ -324,8 +326,8 @@
      *  must implement {@link IFormattingStrategyExtension}
      */
     public final void setSlaveStrategy(IFormattingStrategy strategy, String type) {
-        Assert.isTrue( cast(IFormattingStrategyExtension)strategy );
+        Assert.isTrue( null !is cast(IFormattingStrategyExtension)strategy );
         if (!fType.equals(type))
-            fSlaves.put(type, strategy);
+            fSlaves.put(type, cast(Object)strategy);
     }
 }
--- a/dwtx/jface/text/formatter/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1"
- http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides a content formatter add-on for an <tt>ITextViewer</tt>.
-A content formatter changes the formatting of a document region while
-preserving and correctly updating the positions of the document.
-<h2>Package Specification</h2>
-<tt>IContentFormatter</tt> defines the concept of a text formatter. It
-collaborates with content type specific formatting stratgies (<tt>IFormattingStrategy</tt>)
-which for a given document region format the subregion with the
-matching
-content type. The package contains a default implementation of <tt>IContentFormatter</tt>
-(<tt>ContentFormatter</tt>).<br>
-Additionally, an implementation of <tt>IContentFormatterExtension</tt>
-is provided
-for text edit based formatting strategies. This implementation only
-accepts formatting strategies
-implementing the extension interface <tt>IFormattingStrategyExtension</tt>.
-These formatting strategies are required to handle the position
-updating of the document. To facilitate the work with these text edit
-based formatting strategies, a default implementation called <tt>ContextBasedFormattingStrategy</tt>
-is provided. Formatting strategies inheriting from this class are text
-edit based and behave context dependent. Depending on the formatting
-context that is passed
-to the content formatter, different preferences and modes can be used
-to format different parts of a document.
-<p>To set up a proper working text edit based content formatter, the
-following steps are needed:
-</p>
-<ul>
-  <li>Create an instance of <tt>IFormattingContext</tt>. The default
-implementation <tt>FormattingContext</tt> already
-provides support for the conversion of preferences from a preference
-store to a map and vice versa. The method <tt>getPreferenceKeys</tt>
-usually has to be overridden to return the appropriate keys of the
-preferences used during the formatting process. Then register a map of
-preferences
-with the formatting context by calling <tt>setProperty(String, Object)</tt>
-with the property identifier <tt>FormattingContextProperties.CONTEXT_PREFERENCES</tt>.</li>
-  <li>Create an instance of the text edit based content formatter class
-    <tt>MultiPassContentFormatter</tt>. The document partitioning and
-its associated
-default content type have to be passed to the constructor. This
-information is needed since the content formatter is able to format
-documents
-according to arbitrary partitionings and default content types.</li>
-  <li>Register the formatting strategies for the content types that
-have to be formatted. If a formatting strategy is
-registered as master strategy, it is automatically associated with the
-default content type of the specified partitioning.
-If the formatting strategy is registered as slave strategy, it is
-associated with the indicated content type during the registration.
-Note that the master strategy can also be registered as a slave
-strategy for a content type other than the default content type.</li>
-  <li>Specify the proper formatting mode (see
-FormattingContextProperties):
-    <ul>
-      <li>For whole document formatting set the property <tt>CONTEXT_DOCUMENT</tt>
-of the created formatting context to <tt>true</tt>. This is
-equivalent to setting <code>CONTEXT_REGION</code> with a region
-spanning the whole document.</li>
-      <li>For multiple region formatting set the property <code>CONTEXT_REGION</code>
-of the formatting context. Note that the content formatter
-automatically aligns the offset of a region to a line start for the
-master formatting strategy, it also completes eventual partitions
-covered only partially by the region for the slave formatting
-strategies.</li>
-      <li>For explicit formatting of a partition with the formatting
-strategy registered for a certain content type use the
-property <tt>CONTEXT_PARTITION</tt>. Note that the region denoted by
-this property must correspond to a partition relative to the specified
-partitioning in the document to be formatted. The content type of this
-property overrides the content type of the partition
-in the document.</li>
-    </ul>
-  </li>
-  <li>Call the method <tt>MultiPassContentFormatter#format(IDocument,
-IFormattingContext)</tt> with the created formatting context
-and the document to be formatted.</li>
-</ul>
-<p></p>
-</body>
-</html>
--- a/dwtx/jface/text/hyperlink/DefaultHyperlinkPresenter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/hyperlink/DefaultHyperlinkPresenter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -67,7 +67,7 @@
  * It can only be used together with the {@link HyperlinkManager#FIRST}
  * or the {@link HyperlinkManager#LONGEST_REGION_FIRST} hyperlink strategy.
  * </p>
- * 
+ *
  * @since 3.1
  */
 public class DefaultHyperlinkPresenter : IHyperlinkPresenter, IHyperlinkPresenterExtension, ITextPresentationListener, ITextInputListener, IDocumentListener, IPropertyChangeListener {
@@ -152,7 +152,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public bool canHideHyperlinks() {
@@ -171,7 +171,7 @@
      * @see dwtx.jdt.internal.ui.javaeditor.IHyperlinkControl#install(dwtx.jface.text.ITextViewer)
      */
     public void install(ITextViewer textViewer) {
-        Assert.isNotNull(textViewer);
+        Assert.isNotNull(cast(Object)textViewer);
         fTextViewer= textViewer;
         fTextViewer.addTextInputListener(this);
         if ( cast(ITextViewerExtension4)fTextViewer )
@@ -218,7 +218,7 @@
     }
 
     public void setColor(Color color) {
-        Assert.isNotNull(fTextViewer);
+        Assert.isNotNull(cast(Object)fTextViewer);
         fColor= color;
     }
 
@@ -238,7 +238,7 @@
 
     private void highlightRegion(IRegion region) {
 
-        if (region.equals(fActiveRegion))
+        if ((cast(Object)region).opEquals(cast(Object)fActiveRegion))
             return;
 
         repairRepresentation();
@@ -321,7 +321,7 @@
                 fActiveRegion= new Region(event.getOffset(), event.getLength());
             }
             fRememberedPosition= null;
-            
+
             StyledText widget= fTextViewer.getTextWidget();
             if (widget !is null && !widget.isDisposed()) {
                 widget.getDisplay().asyncExec(new class()  Runnable {
--- a/dwtx/jface/text/hyperlink/HyperlinkManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/hyperlink/HyperlinkManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -85,7 +85,17 @@
      * hyperlink presenter and no further detector
      * is consulted.
      */
-    public static const DETECTION_STRATEGY FIRST= new DETECTION_STRATEGY("first"); //$NON-NLS-1$
+    private static DETECTION_STRATEGY FIRST_;
+    public static DETECTION_STRATEGY FIRST(){
+        if( FIRST_ is null ){
+            synchronized( HyperlinkManager.classinfo ){
+                if( FIRST_ is null ){
+                    FIRST_ = new DETECTION_STRATEGY("first"); //$NON-NLS-1$
+                }
+            }
+        }
+        return FIRST_;
+    }
 
     /**
      * All detected hyperlinks from all detectors are collected
@@ -95,7 +105,17 @@
      * returns <code>true</code>.
      * </p>
      */
-    public static const DETECTION_STRATEGY ALL= new DETECTION_STRATEGY("all"); //$NON-NLS-1$
+    private static DETECTION_STRATEGY ALL_;
+    public static DETECTION_STRATEGY ALL(){
+        if( ALL_ is null ){
+            synchronized( HyperlinkManager.classinfo ){
+                if( ALL_ is null ){
+                    ALL_ = new DETECTION_STRATEGY("all"); //$NON-NLS-1$
+                }
+            }
+        }
+        return ALL_;
+    }
 
     /**
      * All detected hyperlinks from all detectors are collected
@@ -106,14 +126,34 @@
      * returns <code>true</code>.
      * </p>
      */
-    public static const DETECTION_STRATEGY LONGEST_REGION_ALL= new DETECTION_STRATEGY("all with same longest region"); //$NON-NLS-1$
+    private static DETECTION_STRATEGY LONGEST_REGION_ALL_;
+    public static DETECTION_STRATEGY LONGEST_REGION_ALL(){
+        if( LONGEST_REGION_ALL_ is null ){
+            synchronized( HyperlinkManager.classinfo ){
+                if( LONGEST_REGION_ALL_ is null ){
+                    LONGEST_REGION_ALL_ = new DETECTION_STRATEGY("all with same longest region"); //$NON-NLS-1$
+                }
+            }
+        }
+        return LONGEST_REGION_ALL_;
+    }
 
     /**
      * All detected hyperlinks from all detectors are collected
      * and form all those with the longest region only the first
      * one is passed to the hyperlink presenter.
      */
-    public static const DETECTION_STRATEGY LONGEST_REGION_FIRST= new DETECTION_STRATEGY("first with longest region"); //$NON-NLS-1$
+    private static DETECTION_STRATEGY LONGEST_REGION_FIRST_;
+    public static DETECTION_STRATEGY LONGEST_REGION_FIRST(){
+        if( LONGEST_REGION_FIRST_ is null ){
+            synchronized( HyperlinkManager.classinfo ){
+                if( LONGEST_REGION_FIRST_ is null ){
+                    LONGEST_REGION_FIRST_ = new DETECTION_STRATEGY("first with longest region"); //$NON-NLS-1$
+                }
+            }
+        }
+        return LONGEST_REGION_FIRST_;
+    }
 
 
     /** The text viewer on which this hyperlink manager works. */
@@ -156,8 +196,8 @@
      * @param eventStateMask the DWT event state mask to activate hyperlink mode
      */
     public void install(ITextViewer textViewer, IHyperlinkPresenter hyperlinkPresenter, IHyperlinkDetector[] hyperlinkDetectors, int eventStateMask) {
-        Assert.isNotNull(textViewer);
-        Assert.isNotNull(hyperlinkPresenter);
+        Assert.isNotNull(cast(Object)textViewer);
+        Assert.isNotNull(cast(Object)hyperlinkPresenter);
         fTextViewer= textViewer;
         fHyperlinkPresenter= hyperlinkPresenter;
         Assert.isLegal(fHyperlinkPresenter.canShowMultipleHyperlinks() || fDetectionStrategy is FIRST || fDetectionStrategy is LONGEST_REGION_FIRST);
@@ -191,10 +231,11 @@
      */
     public void setHyperlinkDetectors(IHyperlinkDetector[] hyperlinkDetectors) {
         Assert.isTrue(hyperlinkDetectors !is null && hyperlinkDetectors.length > 0);
-        if (fHyperlinkDetectors is null)
+        if (fHyperlinkDetectors is null){
             fHyperlinkDetectors= hyperlinkDetectors;
+        }
         else {
-            synchronized (fHyperlinkDetectors) {
+            synchronized (/+fHyperlinkDetectors+/this) {
                 fHyperlinkDetectors= hyperlinkDetectors;
             }
         }
@@ -259,7 +300,7 @@
         bool canShowMultipleHyperlinks= fHyperlinkPresenter.canShowMultipleHyperlinks();
         IRegion region= new Region(offset, 0);
         List allHyperlinks= new ArrayList(fHyperlinkDetectors.length * 2);
-        synchronized (fHyperlinkDetectors) {
+        synchronized (/+fHyperlinkDetectors+/this) {
             for (int i= 0, length= fHyperlinkDetectors.length; i < length; i++) {
                 IHyperlinkDetector detector= fHyperlinkDetectors[i];
                 if (detector is null)
@@ -285,7 +326,7 @@
                         return hyperlinks;
                     return [hyperlinks[0]];
                 }
-                allHyperlinks.addAll(Arrays.asList(hyperlinks));
+                allHyperlinks.addAll(Arrays.asList(arraycast!(Object)(hyperlinks)));
             }
         }
 
@@ -298,7 +339,7 @@
             while (iter.hasNext()) {
                 IHyperlink hyperlink= cast(IHyperlink)iter.next();
                 if (hyperlink.getHyperlinkRegion().getLength() < maxLength)
-                    allHyperlinks.remove(hyperlink);
+                    allHyperlinks.remove(cast(Object)hyperlink);
             }
         }
 
@@ -496,7 +537,7 @@
         if (stateMask is fHyperlinkStateMask)
             return true;
 
-        synchronized (fHyperlinkDetectors) {
+        synchronized (/+fHyperlinkDetectors+/this) {
             for (int i= 0; i < fHyperlinkDetectors.length; i++) {
                 if (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i] ) {
                     if (stateMask is (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i]).getStateMask())
--- a/dwtx/jface/text/hyperlink/HyperlinkMessages.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/hyperlink/HyperlinkMessages.d	Mon Sep 08 00:51:37 2008 +0200
@@ -43,7 +43,7 @@
 
     static this() {
         RESOURCE_BUNDLE = ResourceBundle.getBundle(
-            getImportData!("dwtx.jface.text.HyperlinkMessages.properties"));
+            getImportData!("dwtx.jface.text.hyperlink.HyperlinkMessages.properties"));
     }
 
     private this() {
--- a/dwtx/jface/text/hyperlink/HyperlinkMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2008 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-LinkListInformationControl.unknownLink= Unknown Hyperlink
-
-MultipleHyperlinkPresenter.clickLinkAfordance =Click link to open
-
-URLHyperlink.hyperlinkText= Open ''{0}'' in a browser
--- a/dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -223,7 +223,7 @@
             final TableViewer viewer= new TableViewer(fTable);
             viewer.setContentProvider(new LinkContentProvider());
             viewer.setLabelProvider(new LinkLabelProvider());
-            viewer.setInput(fInput);
+            viewer.setInput(new ArrayWrapperObject( arraycast!(Object)(fInput)));
             fTable.setSelection(0);
 
             registerTableListeners();
@@ -249,11 +249,11 @@
                 TableItem fLastItem= null;
 
                 public void mouseMove(MouseEvent e) {
-                    if (fTable.equals(e.getSource())) {
+                    if (fTable.opEquals(e.getSource())) {
                         Object o= fTable.getItem(new Point(e.x, e.y));
                         if ( cast(TableItem)o ) {
                             TableItem item= cast(TableItem) o;
-                            if (!o.equals(fLastItem)) {
+                            if (!o.opEquals(fLastItem)) {
                                 fLastItem= cast(TableItem) o;
                                 fTable.setSelection([ fLastItem ]);
                             } else if (e.y < fTable.getItemHeight() / 4) {
@@ -290,10 +290,10 @@
                     if (e.button !is 1)
                         return;
 
-                    if (fTable.equals(e.getSource())) {
+                    if (fTable.opEquals(e.getSource())) {
                         Object o= fTable.getItem(new Point(e.x, e.y));
                         TableItem selection= fTable.getSelection()[0];
-                        if (selection.equals(o))
+                        if (selection.opEquals(o))
                             openSelectedLink();
                     }
                 }
@@ -346,7 +346,7 @@
          * @see dwtx.jface.text.ITextHoverExtension2#getHoverInfo2(dwtx.jface.text.ITextViewer, dwtx.jface.text.IRegion)
          */
         public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
-            return fHyperlinks;
+            return new ArrayWrapperObject( arraycast!(Object)(fHyperlinks));
         }
 
         /*
@@ -540,13 +540,13 @@
         protected void computeInformation() {
             IRegion region= fHover.getHoverRegion(fTextViewer, -1);
             if (region is null) {
-                setInformation(null, null);
+                setInformation(cast(Object)null, cast(Rectangle)null);
                 return;
             }
 
             Rectangle area= JFaceTextUtil.computeArea(region, fTextViewer);
             if (area is null || area.isEmpty()) {
-                setInformation(null, null);
+                setInformation(cast(Object)null, cast(Rectangle)null);
                 return;
             }
 
--- a/dwtx/jface/text/hyperlink/URLHyperlink.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/hyperlink/URLHyperlink.d	Mon Sep 08 00:51:37 2008 +0200
@@ -55,7 +55,7 @@
      */
     public this(IRegion region, String urlString) {
         Assert.isNotNull(urlString);
-        Assert.isNotNull(region);
+        Assert.isNotNull(cast(Object)region);
 
         fRegion= region;
         fURLString= urlString;
@@ -90,7 +90,7 @@
      * @see dwtx.jdt.internal.ui.javaeditor.IHyperlink#getHyperlinkText()
      */
     public String getHyperlinkText() {
-        return MessageFormat.format(HyperlinkMessages.getString("URLHyperlink.hyperlinkText"), fURLString ); //$NON-NLS-1$
+        return MessageFormat.format(HyperlinkMessages.getString("URLHyperlink.hyperlinkText"), stringcast(fURLString) ); //$NON-NLS-1$
     }
 
     /**
--- a/dwtx/jface/text/hyperlink/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Eclipse">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides support for detecting and displaying hyperlinks in <tt>ISourceViewer</tt>s.
-<p>
-<tt>SourceViewer</tt> supports hyperlinked text regions inline in the displayed text. It delegates 
-the detection and presentation of hyperlinks to <tt>IHyperlinkDetector</tt> and <tt>IHyperlinkPresenter</tt>, respectively.
-</p>
-<p>
-Override the following methods in <tt>SourceViewerConfiguration</tt> to customize the hyperlink behavior of a source viewer:
-<ul>
-  <li><tt>getHyperlinkDetectors()</tt> to specify the set of hyperlink detectors used by the viewer</li>
-  <li><tt>getHyperlinkPresenter()</tt> to specify the set of hyperlink presenters used by the viewer</li>
-  <li><tt>getHyperlinkStateMask()</tt> to specify when hyperlinks are activated</li>
-</ul>
-</p>
-
-</body>
-</html>
--- a/dwtx/jface/text/information/InformationPresenter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/information/InformationPresenter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -71,6 +71,10 @@
  */
 public class InformationPresenter : AbstractInformationControlManager , IInformationPresenter, IInformationPresenterExtension, IWidgetTokenKeeper, IWidgetTokenKeeperExtension {
 
+    alias AbstractInformationControlManager.install install;
+    public override void showInformation(){
+        super.showInformation();
+    }
 
     /**
      * Priority of the info controls managed by this information presenter.
@@ -298,7 +302,7 @@
         if (provider is null)
             fProviders.remove(contentType);
         else
-            fProviders.put(contentType, provider);
+            fProviders.put(contentType, cast(Object)provider);
     }
 
     /*
@@ -351,9 +355,9 @@
             info= extension.getInformation2(fTextViewer, subject);
         } else {
             // backward compatibility code
-            info= provider.getInformation(fTextViewer, subject);
+            info= stringcast(provider.getInformation(fTextViewer, subject));
         }
-        
+
         if ( cast(IInformationProviderExtension2)provider )
             setCustomInformationControlCreator((cast(IInformationProviderExtension2) provider).getInformationPresenterControlCreator());
         else
@@ -378,7 +382,7 @@
             start= widgetRegion.getOffset();
             end= widgetRegion.getOffset() + widgetRegion.getLength();
         }
-        
+
         StyledText styledText= fTextViewer.getTextWidget();
         Rectangle bounds;
         if (end > 0 && start < end)
@@ -387,7 +391,7 @@
             Point loc= styledText.getLocationAtOffset(start);
             bounds= new Rectangle(loc.x, loc.y, 0, styledText.getLineHeight(start));
         }
-        
+
         return bounds;
     }
 
--- a/dwtx/jface/text/information/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides an information provider add-on for an <tt>ITextViewer</tt>.
-An information provider presents information for a certain subject in a
-specific information control. An information control usually is a floating
-window.
-<h2>
-Package Specification</h2>
-<tt>IInformationPresenter</tt> defines the concept of an information provider.
-It collaborates with content type specific information providers (<tt>IInformationProvider</tt>)
-which determine for a certain offset in a text viewer an information subject
-and the information available about this subject.. The package contains
-a default implementation of <tt>IInformationPresenter</tt> (<tt>InformationPresenter</tt>).
-</body>
-</html>
--- a/dwtx/jface/text/link/ILinkedModeListener.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/ILinkedModeListener.d	Mon Sep 08 00:51:37 2008 +0200
@@ -38,27 +38,27 @@
 public interface ILinkedModeListener {
 
     /** Flag to <code>leave</code> specifying no special action. */
-    int NONE= 0;
+    static const int NONE= 0;
     /**
      * Flag to <code>leave</code> specifying that all nested modes should
      * exit.
      */
-    int EXIT_ALL= 1 << 0;
+    static const int EXIT_ALL= 1 << 0;
     /**
      * Flag to <code>leave</code> specifying that the caret should be moved to
      * the exit position.
      */
-    int UPDATE_CARET= 1 << 1;
+    static const int UPDATE_CARET= 1 << 1;
     /**
      * Flag to <code>leave</code> specifying that a UI of a parent mode should
      * select the current position.
      */
-    int SELECT= 1 << 2;
+    static const int SELECT= 1 << 2;
     /**
      * Flag to <code>leave</code> specifying that document content outside of
      * a linked position was modified.
      */
-    int EXTERNAL_MODIFICATION= 1 << 3;
+    static const int EXTERNAL_MODIFICATION= 1 << 3;
 
     /**
      * The leave event occurs when linked is left.
--- a/dwtx/jface/text/link/LinkedModeManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -75,8 +75,17 @@
     }
 
     /** Global map from documents to managers. */
-    private static Map fgManagers= new HashMap();
-
+    private static Map fgManagers_;
+    private static Map fgManagers(){
+        if( fgManagers_ is null ){
+            synchronized( LinkedModeManager.classinfo ){
+                if( fgManagers_ is null ){
+                    fgManagers_= new HashMap();
+                }
+            }
+        }
+        return fgManagers_;
+    }
     /**
      * Returns whether there exists a <code>LinkedModeManager</code> on <code>document</code>.
      *
@@ -84,7 +93,7 @@
      * @return <code>true</code> if there exists a <code>LinkedModeManager</code> on <code>document</code>, <code>false</code> otherwise
      */
     public static bool hasManager(IDocument document) {
-        return fgManagers.get(document) !is null;
+        return fgManagers.get(cast(Object)document) !is null;
     }
 
     /**
@@ -117,7 +126,7 @@
         Set mgrs= new HashSet();
         LinkedModeManager mgr= null;
         for (int i= 0; i < documents.length; i++) {
-            mgr= cast(LinkedModeManager) fgManagers.get(documents[i]);
+            mgr= cast(LinkedModeManager) fgManagers.get(cast(Object)documents[i]);
             if (mgr !is null)
                 mgrs.add(mgr);
         }
@@ -135,7 +144,7 @@
             mgr= new LinkedModeManager();
 
         for (int i= 0; i < documents.length; i++)
-            fgManagers.put(documents[i], mgr);
+            fgManagers.put(cast(Object)documents[i], mgr);
 
         return mgr;
     }
@@ -146,14 +155,19 @@
      * @param document the document whose <code>LinkedModeManager</code> should be canceled
      */
     public static void cancelManager(IDocument document) {
-        LinkedModeManager mgr= cast(LinkedModeManager) fgManagers.get(document);
+        LinkedModeManager mgr= cast(LinkedModeManager) fgManagers.get(cast(Object)document);
         if (mgr !is null)
             mgr.closeAllEnvironments();
     }
 
     /** The hierarchy of environments managed by this manager. */
-    private Stack fEnvironments= new Stack();
-    private Listener fListener= new Listener();
+    private Stack fEnvironments;
+    private Listener fListener;
+
+    this(){
+        fEnvironments= new Stack();
+        fListener= new Listener();
+    }
 
     /**
      * Notify the manager about a leaving model.
@@ -189,7 +203,7 @@
     private void removeManager() {
         for (Iterator it= fgManagers.keySet().iterator(); it.hasNext();) {
             IDocument doc= cast(IDocument) it.next();
-            if (fgManagers.get(doc) is this)
+            if (fgManagers.get(cast(Object)doc) is this)
                 it.remove();
         }
     }
--- a/dwtx/jface/text/link/LinkedModeModel.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeModel.d	Mon Sep 08 00:51:37 2008 +0200
@@ -24,15 +24,8 @@
 
 
 import dwt.dwthelper.utils;
-
 import dwtx.dwtxhelper.Collection;
 
-
-
-
-
-
-
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.BadLocationException;
 import dwtx.jface.text.BadPositionCategoryException;
@@ -42,7 +35,7 @@
 import dwtx.jface.text.IDocumentListener;
 import dwtx.jface.text.IPositionUpdater;
 import dwtx.jface.text.Position;
-import dwtx.jface.text.IDocumentExtension.IReplace;
+import dwtx.jface.text.IDocumentExtension;
 import dwtx.text.edits.MalformedTreeException;
 import dwtx.text.edits.TextEdit;
 
@@ -142,7 +135,7 @@
      * Encapsulates the edition triggered by a change to a linking position. Can
      * be applied to a document as a whole.
      */
-    private class Replace : IReplace {
+    private class Replace : IDocumentExtension.IReplace {
 
         /** The edition to apply on a document. */
         private TextEdit fEdit;
@@ -240,7 +233,7 @@
                 // edit all documents
                 for (Iterator it2= result.keySet().iterator(); it2.hasNext(); ) {
                     IDocument doc= cast(IDocument) it2.next();
-                    TextEdit edit= cast(TextEdit) result.get(doc);
+                    TextEdit edit= cast(TextEdit) result.get(cast(Object)doc);
                     Replace replace= new Replace(edit);
 
                     // apply the edition, either as post notification replace
@@ -262,13 +255,13 @@
     }
 
     /** The set of linked position groups. */
-    private const List fGroups= new ArrayList();
+    private const List fGroups;
     /** The set of documents spanned by this group. */
-    private const Set fDocuments= new HashSet();
+    private const Set fDocuments;
     /** The position updater for linked positions. */
-    private const IPositionUpdater fUpdater= new InclusivePositionUpdater(getCategory());
+    private const IPositionUpdater fUpdater;
     /** The document listener on the documents affected by this model. */
-    private const DocumentListener fDocumentListener= new DocumentListener();
+    private const DocumentListener fDocumentListener;
     /** The parent model for a hierarchical set up, or <code>null</code>. */
     private LinkedModeModel fParentEnvironment;
     /**
@@ -285,14 +278,14 @@
     /** <code>true</code> when this model is changing documents. */
     private bool fIsChanging= false;
     /** The linked listeners. */
-    private const List fListeners= new ArrayList();
+    private const List fListeners;
     /** Flag telling whether we have exited: */
     private bool fIsActive= true;
     /**
      * The sequence of document positions as we are going to iterate through
      * them.
      */
-    private List fPositionSequence= new ArrayList();
+    private List fPositionSequence;
 
     /**
      * Whether we are in the process of editing documents (set by <code>Replace</code>,
@@ -379,8 +372,8 @@
      * @param document the new document
      */
     private void manageDocument(IDocument document) {
-        if (!fDocuments.contains(document)) {
-            fDocuments.add(document);
+        if (!fDocuments.contains(cast(Object)document)) {
+            fDocuments.add(cast(Object)document);
             document.addPositionCategory(getCategory());
             document.addPositionUpdater(fUpdater);
             document.addDocumentListener(fDocumentListener);
@@ -438,6 +431,14 @@
      * @since 3.1
      */
     public this() {
+        // DWT inst init
+        fGroups= new ArrayList();
+        fDocuments= new HashSet();
+        fUpdater= new InclusivePositionUpdater(getCategory());
+        fDocumentListener= new DocumentListener();
+        fListeners= new ArrayList();
+        fPositionSequence= new ArrayList();
+
     }
 
     /**
@@ -556,9 +557,9 @@
         Set docs= new HashSet();
         for (Iterator it= fGroups.iterator(); it.hasNext(); ) {
             LinkedPositionGroup group= cast(LinkedPositionGroup) it.next();
-            docs.addAll(Arrays.asList(group.getDocuments()));
+            docs.addAll(Arrays.asList(arraycast!(Object)(group.getDocuments())));
         }
-        return (IDocument[]) docs.toArray(new IDocument[docs.size()]);
+        return arraycast!(IDocument)( docs.toArray());
     }
 
     /**
@@ -652,9 +653,9 @@
      * @param listener the new listener
      */
     public void addLinkingListener(ILinkedModeListener listener) {
-        Assert.isNotNull(listener);
-        if (!fListeners.contains(listener))
-            fListeners.add(listener);
+        Assert.isNotNull(cast(Object)listener);
+        if (!fListeners.contains(cast(Object)listener))
+            fListeners.add(cast(Object)listener);
     }
 
     /**
@@ -664,7 +665,7 @@
      * @param listener the new listener
      */
     public void removeLinkingListener(ILinkedModeListener listener) {
-        fListeners.remove(listener);
+        fListeners.remove(cast(Object)listener);
     }
 
     /**
--- a/dwtx/jface/text/link/LinkedModeUI.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeUI.d	Mon Sep 08 00:51:37 2008 +0200
@@ -100,17 +100,47 @@
      * Constant indicating that this UI should never cycle from the last
      * position to the first and vice versa.
      */
-    public static const Object CYCLE_NEVER= new Object();
+    public static Object CYCLE_NEVER_;
+    public static Object CYCLE_NEVER(){
+        if( CYCLE_NEVER_ is null ){
+            synchronized( LinkedModeUI.classinfo ){
+                if( CYCLE_NEVER_ is null ){
+                    CYCLE_NEVER_ = new Object();
+                }
+            }
+        }
+        return CYCLE_NEVER_;
+    }
     /**
      * Constant indicating that this UI should always cycle from the last
      * position to the first and vice versa.
      */
-    public static const Object CYCLE_ALWAYS= new Object();
+    public static Object CYCLE_ALWAYS_;
+    public static Object CYCLE_ALWAYS(){
+        if( CYCLE_ALWAYS_ is null ){
+            synchronized( LinkedModeUI.classinfo ){
+                if( CYCLE_ALWAYS_ is null ){
+                    CYCLE_ALWAYS_ = new Object();
+                }
+            }
+        }
+        return CYCLE_ALWAYS_;
+    }
     /**
      * Constant indicating that this UI should cycle from the last position to
      * the first and vice versa if its model is not nested.
      */
-    public static const Object CYCLE_WHEN_NO_PARENT= new Object();
+    public static Object CYCLE_WHEN_NO_PARENT_;
+    public static Object CYCLE_WHEN_NO_PARENT(){
+        if( CYCLE_WHEN_NO_PARENT_ is null ){
+            synchronized( LinkedModeUI.classinfo ){
+                if( CYCLE_WHEN_NO_PARENT_ is null ){
+                    CYCLE_WHEN_NO_PARENT_ = new Object();
+                }
+            }
+        }
+        return CYCLE_WHEN_NO_PARENT_;
+    }
 
     /**
      * Listener that gets notified when the linked mode UI switches its focus position.
@@ -192,7 +222,7 @@
          * @param viewer the viewer
          */
         public this(ITextViewer viewer) {
-            Assert.isNotNull(viewer);
+            Assert.isNotNull(cast(Object)viewer);
             fTextViewer= viewer;
         }
 
@@ -332,7 +362,7 @@
             // focus away.
 
             StyledText text;
-            final ITextViewer viewer;
+            ITextViewer viewer;
             Display display;
 
             if (fCurrentTarget is null || (text= fCurrentTarget.fWidget) is null
@@ -345,21 +375,19 @@
             else
             {
                 // Post in UI thread since the assistant popup will only get the focus after we lose it.
-                display.asyncExec(new class()  Runnable {
-                    public void run() {
-                        if (fIsActive && cast(IEditingSupportRegistry)viewer ) {
-                            IEditingSupport[] helpers= (cast(IEditingSupportRegistry) viewer).getRegisteredSupports();
-                            for (int i= 0; i < helpers.length; i++) {
-                                if (helpers[i].ownsFocusShell())
-                                    return;
-                            }
+                display.asyncExec(dgRunnable( (ITextViewer viewer_) {
+                    if (fIsActive && cast(IEditingSupportRegistry)viewer_ ) {
+                        IEditingSupport[] helpers= (cast(IEditingSupportRegistry) viewer_).getRegisteredSupports();
+                        for (int i= 0; i < helpers.length; i++) {
+                            if (helpers[i].ownsFocusShell())
+                                return;
                         }
+                    }
 
-                        // else
-                        leave(ILinkedModeListener.EXIT_ALL);
+                    // else
+                    leave(ILinkedModeListener.EXIT_ALL);
 
-                    }
-                });
+                }, viewer ));
             }
         }
 
@@ -587,23 +615,23 @@
 
     /* Our team of event listeners */
     /** The shell listener. */
-    private Closer fCloser= new Closer();
+    private Closer fCloser;
     /** The linked mode listener. */
-    private ILinkedModeListener fLinkedListener= new ExitListener();
+    private ILinkedModeListener fLinkedListener;
     /** The selection listener. */
-    private MySelectionListener fSelectionListener= new MySelectionListener();
+    private MySelectionListener fSelectionListener;
     /** The content assist listener. */
-    private ProposalListener fProposalListener= new ProposalListener();
+    private ProposalListener fProposalListener;
     /**
      * The document listener.
      * @since 3.1
      */
-    private IDocumentListener fDocumentListener= new DocumentListener();
+    private IDocumentListener fDocumentListener;
 
     /** The last caret position, used by fCaretListener. */
-    private const Position fCaretPosition= new Position(0, 0);
+    private const Position fCaretPosition;
     /** The exit policy to control custom exit behavior */
-    private IExitPolicy fExitPolicy= new NullExitPolicy();
+    private IExitPolicy fExitPolicy;
     /** The current frame position shown in the UI, or <code>null</code>. */
     private LinkedPosition fFramePosition;
     /** The last visited position, used for undo / redo. */
@@ -615,28 +643,29 @@
     /** State indicator to prevent multiple invocation of leave. */
     private bool fIsActive= false;
     /** The position updater for the exit position. */
-    private IPositionUpdater fPositionUpdater= new DefaultPositionUpdater(getCategory());
+    private IPositionUpdater fPositionUpdater;
     /** Whether to show context info. */
     private bool fDoContextInfo= false;
     /** Whether we have begun a compound change, but not yet closed. */
     private bool fHasOpenCompoundChange= false;
     /** The position listener. */
-    private ILinkedModeUIFocusListener fPositionListener= new EmtpyFocusListener();
-    private IAutoEditStrategy fAutoEditVetoer= new class()  IAutoEditStrategy {
+    private ILinkedModeUIFocusListener fPositionListener;
+    private IAutoEditStrategy fAutoEditVetoer;
+    private void fAutoEditVetoer_init(){
+        fAutoEditVetoer = new class()  IAutoEditStrategy {
+            /*
+            * @see dwtx.jface.text.IAutoEditStrategy#customizeDocumentCommand(dwtx.jface.text.IDocument, dwtx.jface.text.DocumentCommand)
+            */
+            public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
+                // invalidate the change to ensure that the change is performed on the document only.
+                if (fModel.anyPositionContains(command.offset)) {
+                    command.doit= false;
+                    command.caretOffset= command.offset + command.length;
+                }
 
-        /*
-         * @see dwtx.jface.text.IAutoEditStrategy#customizeDocumentCommand(dwtx.jface.text.IDocument, dwtx.jface.text.DocumentCommand)
-         */
-        public void customizeDocumentCommand(IDocument document, DocumentCommand command) {
-            // invalidate the change to ensure that the change is performed on the document only.
-            if (fModel.anyPositionContains(command.offset)) {
-                command.doit= false;
-                command.caretOffset= command.offset + command.length;
             }
-
-        }
-    };
-
+        };
+    }
 
     /** Whether this UI is in simple highlighting mode or not. */
     private bool fSimple;
@@ -647,6 +676,19 @@
      */
     private bool fIsColoredLabelsSupportEnabled= false;
 
+    private this(){
+        fCloser= new Closer();
+        fLinkedListener= new ExitListener();
+        fSelectionListener= new MySelectionListener();
+        fProposalListener= new ProposalListener();
+        fDocumentListener= new DocumentListener();
+        fCaretPosition= new Position(0, 0);
+        fExitPolicy= new NullExitPolicy();
+        fPositionUpdater= new DefaultPositionUpdater(getCategory());
+        fPositionListener= new EmtpyFocusListener();
+        fAutoEditVetoer_init();
+    }
+
     /**
      * Creates a new UI on the given model and the set of viewers. The model
      * must provide a tab stop sequence with a non-empty list of tab stops.
@@ -656,6 +698,7 @@
      *        UI should act
      */
     public this(LinkedModeModel model, LinkedModeUITarget[] targets) {
+        this();
         constructor(model, targets);
     }
 
@@ -666,6 +709,7 @@
      * @param viewer the viewer upon which the linked mode UI should act
      */
     public this(LinkedModeModel model, ITextViewer viewer) {
+        this();
         constructor(model, [new EmptyTarget(viewer)]);
     }
 
@@ -677,6 +721,7 @@
      *        UI should act
      */
     public this(LinkedModeModel model, ITextViewer[] viewers) {
+        this();
         LinkedModeUITarget[] array= new LinkedModeUITarget[viewers.length];
         for (int i= 0; i < array.length; i++) {
             array[i]= new EmptyTarget(viewers[i]);
@@ -691,6 +736,7 @@
      * @param target the target upon which the linked mode UI should act
      */
     public this(LinkedModeModel model, LinkedModeUITarget target) {
+        this();
         constructor(model, [target]);
     }
 
@@ -703,7 +749,7 @@
      */
     private void constructor(LinkedModeModel model, LinkedModeUITarget[] targets) {
         Assert.isNotNull(model);
-        Assert.isNotNull(targets);
+        //Assert.isNotNull(targets);
         Assert.isTrue(targets.length > 0);
         Assert.isTrue(model.getTabStopSequence().size() > 0);
 
@@ -799,7 +845,7 @@
      */
     public void setCyclingMode(Object mode) {
         if (mode !is CYCLE_ALWAYS && mode !is CYCLE_NEVER && mode !is CYCLE_WHEN_NO_PARENT)
-            throw new IllegalArgumentException();
+            throw new IllegalArgumentException(null);
 
         if (mode is CYCLE_ALWAYS || mode is CYCLE_WHEN_NO_PARENT && !fModel.isNested())
             fIterator.setCycling(true);
@@ -847,7 +893,7 @@
         fAssistant.hidePossibleCompletions();
     }
 
-    private void switchPosition(LinkedPosition pos, bool select, bool showProposals) {
+    private void switchPosition(LinkedPosition pos, bool select_, bool showProposals) {
         Assert.isNotNull(pos);
         if (pos.equals(fFramePosition))
             return;
@@ -865,7 +911,7 @@
         switchViewer(oldDoc, newDoc, pos);
         fFramePosition= pos;
 
-        if (select)
+        if (select_)
             select();
         if (fFramePosition is fExitPosition && !fIterator.isCycling())
             leave(ILinkedModeListener.NONE);
@@ -892,9 +938,9 @@
                 IAnnotationModel model= sv.getAnnotationModel();
                 if ( cast(IAnnotationModelExtension)model ) {
                     IAnnotationModelExtension ext= cast(IAnnotationModelExtension) model;
-                    IAnnotationModel ourModel= ext.getAnnotationModel(getUniqueKey());
+                    IAnnotationModel ourModel= ext.getAnnotationModel(stringcast(getUniqueKey()));
                     if (ourModel is null) {
-                        ext.addAnnotationModel(getUniqueKey(), lpa);
+                        ext.addAnnotationModel(stringcast(getUniqueKey()), lpa);
                     }
                 }
             }
@@ -908,7 +954,7 @@
             IAnnotationModel model= sv.getAnnotationModel();
             if ( cast(IAnnotationModelExtension)model ) {
                 IAnnotationModelExtension ext= cast(IAnnotationModelExtension) model;
-                ext.removeAnnotationModel(getUniqueKey());
+                ext.removeAnnotationModel(stringcast(getUniqueKey()));
             }
         }
     }
@@ -959,7 +1005,7 @@
     private void connect() {
         Assert.isNotNull(fCurrentTarget);
         ITextViewer viewer= fCurrentTarget.getViewer();
-        Assert.isNotNull(viewer);
+        Assert.isNotNull(cast(Object)viewer);
         fCurrentTarget.fWidget= viewer.getTextWidget();
         if (fCurrentTarget.fWidget is null)
             leave(ILinkedModeListener.EXIT_ALL);
@@ -1072,10 +1118,10 @@
             String[] partitionings= ext.getPartitionings();
             Set contentTypes= new HashSet(20);
             for (int i= 0; i < partitionings.length; i++) {
-                contentTypes.addAll(Arrays.asList(ext.getLegalContentTypes(partitionings[i])));
+                contentTypes.addAll(Arrays.asList(stringcast(ext.getLegalContentTypes(partitionings[i]))));
             }
             contentTypes.add(IDocument.DEFAULT_CONTENT_TYPE);
-            return (String[]) contentTypes.toArray(new String[contentTypes.size()]);
+            return stringcast( contentTypes.toArray());
         }
         return document.getLegalContentTypes();
     }
@@ -1097,13 +1143,13 @@
     }
 
     private String getUniqueKey() {
-        return "linked.annotationmodelkey."+toString(); //$NON-NLS-1$
+        return "linked.annotationmodelkey."~toString(); //$NON-NLS-1$
     }
 
     private void disconnect() {
         Assert.isNotNull(fCurrentTarget);
         ITextViewer viewer= fCurrentTarget.getViewer();
-        Assert.isNotNull(viewer);
+        Assert.isNotNull(cast(Object)viewer);
 
         viewer.getDocument().removeDocumentListener(fDocumentListener);
 
@@ -1135,7 +1181,7 @@
         redraw();
     }
 
-    void leave(final int flags) {
+    void leave(int flags) {
         if (!fIsActive)
             return;
         fIsActive= false;
@@ -1180,37 +1226,35 @@
         for (int i= 0; i < fTargets.length; i++) {
             IDocument doc= fTargets[i].getViewer().getDocument();
             if (doc !is null)
-                docs.add(doc);
+                docs.add(cast(Object)doc);
         }
 
         fModel.stopForwarding(flags);
 
-        Runnable runnable= new class()  Runnable {
-            public void run() {
-                if (fExitPosition !is null)
-                    fExitPosition.getDocument().removePosition(fExitPosition);
+        Runnable runnable= dgRunnable( (int flags_){
+            if (fExitPosition !is null)
+                fExitPosition.getDocument().removePosition(fExitPosition);
 
-                for (Iterator iter = docs.iterator(); iter.hasNext(); ) {
-                    IDocument doc= cast(IDocument) iter.next();
-                    doc.removePositionUpdater(fPositionUpdater);
-                    bool uninstallCat= false;
-                    String[] cats= doc.getPositionCategories();
-                    for (int j= 0; j < cats.length; j++) {
-                        if (getCategory().equals(cats[j])) {
-                            uninstallCat= true;
-                            break;
-                        }
+            for (Iterator iter = docs.iterator(); iter.hasNext(); ) {
+                IDocument doc= cast(IDocument) iter.next();
+                doc.removePositionUpdater(fPositionUpdater);
+                bool uninstallCat= false;
+                String[] cats= doc.getPositionCategories();
+                for (int j= 0; j < cats.length; j++) {
+                    if (getCategory().equals(cats[j])) {
+                        uninstallCat= true;
+                        break;
                     }
-                    if (uninstallCat)
-                        try {
-                            doc.removePositionCategory(getCategory());
-                        } catch (BadPositionCategoryException e) {
-                            // ignore
-                        }
                 }
-                fModel.exit(flags);
+                if (uninstallCat)
+                    try {
+                        doc.removePositionCategory(getCategory());
+                    } catch (BadPositionCategoryException e) {
+                        // ignore
+                    }
             }
-        };
+            fModel.exit(flags_);
+        }, flags );
 
         // remove positions (both exit positions AND linked positions in the
         // model) asynchronously to make sure that the annotation painter
@@ -1278,7 +1322,7 @@
      * @param listener the new listener, never <code>null</code>.
      */
     protected void setPositionListener(ILinkedModeUIFocusListener listener) {
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
         fPositionListener= listener;
     }
 
--- a/dwtx/jface/text/link/LinkedPosition.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/LinkedPosition.d	Mon Sep 08 00:51:37 2008 +0200
@@ -41,7 +41,7 @@
  * @since 3.0
  */
 public class LinkedPosition : Position {
-
+    alias Position.overlapsWith overlapsWith;
     /** The document this position belongs to. */
     private IDocument fDocument;
     private int fSequenceNumber;
@@ -56,7 +56,7 @@
      */
     public this(IDocument document, int offset, int length, int sequence) {
         super(offset, length);
-        Assert.isNotNull(document);
+        Assert.isNotNull(cast(Object)document);
         fDocument= document;
         fSequenceNumber= sequence;
     }
@@ -188,6 +188,7 @@
      * @see dwtx.jface.text.Position#hashCode()
      */
     public override hash_t toHash() {
-        return fDocument.toHash() | super.toHash() | fSequenceNumber;
+        alias .toHash toHash;
+        return (cast(Object)fDocument).toHash() | super.toHash() | fSequenceNumber;
     }
 }
--- a/dwtx/jface/text/link/LinkedPositionAnnotations.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/LinkedPositionAnnotations.d	Mon Sep 08 00:51:37 2008 +0200
@@ -60,11 +60,16 @@
 
     private Annotation fFocusAnnotation= null;
     private Annotation fExitAnnotation= null;
-    private const Map fGroupAnnotations= new HashMap();
-    private const Map fTargetAnnotations= new HashMap();
-    private Position[] fTargets= new Position[0];
+    private const Map fGroupAnnotations;
+    private const Map fTargetAnnotations;
+    private Position[] fTargets;
     private LinkedPosition fExitPosition= null;
 
+    public this(){
+        fGroupAnnotations= new HashMap();
+        fTargetAnnotations= new HashMap();
+    }
+
     /**
      * Sets the position that should be highlighted as the focus position, i.e.
      * as the position whose changes are propagated to all its linked positions
@@ -134,7 +139,7 @@
         }
         fGroupAnnotations.values().removeAll(toRemove);
 
-        replaceAnnotations((Annotation[]) toRemove.toArray(new Annotation[0]), toAdd, false);
+        replaceAnnotations(arraycast!(Annotation)( toRemove.toArray()), toAdd, false);
     }
 
     /**
@@ -168,7 +173,7 @@
         }
         fTargetAnnotations.values().removeAll(toRemove);
 
-        replaceAnnotations((Annotation[]) toRemove.toArray(new Annotation[0]), toAdd, false);
+        replaceAnnotations(arraycast!(Annotation)( toRemove.toArray()), toAdd, false);
     }
 
     /**
@@ -199,12 +204,12 @@
         else
             group= new ArrayList();
 
-        if (position is null || !fDocument.equals(position.getDocument()))
+        if (position is null || !(cast(Object)fDocument).opEquals(cast(Object)position.getDocument()))
             // position is not valid if not in this document
             position= null;
 
         LinkedPosition exit= fExitPosition;
-        if (exit is null || !fDocument.equals(exit.getDocument()))
+        if (exit is null || !(cast(Object)fDocument).opEquals(cast(Object)exit.getDocument()))
             // position is not valid if not in this document
             exit= null;
 
@@ -243,7 +248,7 @@
     private void prune(List list) {
         for (Iterator iter= list.iterator(); iter.hasNext();) {
             LinkedPosition pos= cast(LinkedPosition) iter.next();
-            if (!pos.getDocument().equals(fDocument))
+            if (!(cast(Object)pos.getDocument()).opEquals(cast(Object)fDocument))
                 iter.remove();
         }
     }
--- a/dwtx/jface/text/link/LinkedPositionGroup.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/LinkedPositionGroup.d	Mon Sep 08 00:51:37 2008 +0200
@@ -22,15 +22,9 @@
 import dwtx.jface.text.link.LinkedPositionAnnotations; // packageimport
 import dwtx.jface.text.link.ProposalPosition; // packageimport
 
-
 import dwt.dwthelper.utils;
-
 import dwtx.dwtxhelper.Collection;
-
-
-
-
-
+import tango.text.convert.Format;
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.BadLocationException;
@@ -44,7 +38,6 @@
 import dwtx.text.edits.ReplaceEdit;
 import dwtx.text.edits.TextEdit;
 
-
 /**
  * A group of positions in multiple documents that are simultaneously modified -
  * if one gets edited, all other positions in a group are edited the same way.
@@ -71,7 +64,7 @@
     /* members */
 
     /** The linked positions of this group. */
-    private const List fPositions= new LinkedList();
+    private const List fPositions;
     /** Whether we are sealed or not. */
     private bool fIsSealed= false;
     /**
@@ -91,6 +84,10 @@
      */
     private IRegion fLastRegion;
 
+    this(){
+        fPositions= new LinkedList();
+    }
+
     /**
      * Adds a position to this group. The document region defined by the
      * position must contain the same content (and thus have the same length) as
@@ -142,9 +139,9 @@
             String groupContent= groupPosition.getContent();
             String positionContent= position.getContent();
             if (!groupContent.equals(positionContent))
-                throw new BadLocationException(
-                        "First position: '" + groupContent + "' at " + groupPosition.getOffset() + //$NON-NLS-1$ //$NON-NLS-2$
-                        ", this position: '" + positionContent + "' at " + position.getOffset()); //$NON-NLS-1$ //$NON-NLS-2$
+                throw new BadLocationException(Format( "First position: '{}' at {}, this position: '{}' at {}",
+                        groupContent, groupPosition.getOffset(), //$NON-NLS-1$ //$NON-NLS-2$
+                        positionContent, position.getOffset())); //$NON-NLS-1$ //$NON-NLS-2$
         }
     }
 
@@ -216,7 +213,7 @@
      * @since 3.1
      */
     private bool overlapsOrTouches(LinkedPosition position, DocumentEvent event) {
-        return position.getDocument().equals(event.getDocument()) && position.getOffset() <= event.getOffset() + event.getLength() && position.getOffset() + position.getLength() >= event.getOffset();
+        return (cast(Object)position.getDocument()).opEquals(cast(Object)event.getDocument()) && position.getOffset() <= event.getOffset() + event.getLength() && position.getOffset() + position.getLength() >= event.getOffset();
     }
 
     /**
@@ -257,10 +254,10 @@
                 if (p is fLastPosition || p.isDeleted())
                     continue; // don't re-update the origin of the change
 
-                List edits= cast(List) map.get(p.getDocument());
+                List edits= cast(List) map.get(cast(Object)p.getDocument());
                 if (edits is null) {
                     edits= new ArrayList();
-                    map.put(p.getDocument(), edits);
+                    map.put(cast(Object)p.getDocument(), cast(Object)edits);
                 }
 
                 edits.add(new ReplaceEdit(p.getOffset() + relativeOffset, length, text));
@@ -270,13 +267,13 @@
                 for (Iterator it= map.keySet().iterator(); it.hasNext();) {
                     IDocument d= cast(IDocument) it.next();
                     TextEdit edit= new MultiTextEdit(0, d.getLength());
-                    edit.addChildren((TextEdit[]) (cast(List) map.get(d)).toArray(new TextEdit[0]));
-                    map.put(d, edit);
+                    edit.addChildren(arraycast!(TextEdit)( (cast(List) map.get(cast(Object)d)).toArray()));
+                    map.put(cast(Object)d, edit);
                 }
 
                 return map;
             } catch (MalformedTreeException x) {
-                // may happen during undo, as LinkedModeModel does not know 
+                // may happen during undo, as LinkedModeModel does not know
                 // that the changes technically originate from a parent environment
                 // if this happens, post notification changes are not accepted anyway and
                 // we can simply return null - any changes will be undone by the undo
@@ -393,7 +390,7 @@
     public bool isEmpty() {
         return fPositions.size() is 0;
     }
-    
+
     /**
      * Returns whether this group contains any positions.
      *
@@ -412,7 +409,7 @@
      * @return the positions of this group in no particular order
      */
     public LinkedPosition[] getPositions() {
-        return (LinkedPosition[]) fPositions.toArray(new LinkedPosition[0]);
+        return arraycast!(LinkedPosition) (fPositions.toArray());
     }
 
     /**
@@ -424,7 +421,7 @@
     bool contains(Position position) {
         for (Iterator it= fPositions.iterator(); it.hasNext(); ) {
             LinkedPosition p= cast(LinkedPosition) it.next();
-            if (position.equals(p))
+            if (position.opEquals(p))
                 return true;
         }
         return false;
--- a/dwtx/jface/text/link/ProposalPosition.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/ProposalPosition.d	Mon Sep 08 00:51:37 2008 +0200
@@ -78,7 +78,7 @@
     private ICompletionProposal[] copy(ICompletionProposal[] proposals) {
         if (proposals !is null) {
             ICompletionProposal[] copy= new ICompletionProposal[proposals.length];
-            System.arraycopy(proposals, 0, copy, 0, proposals.length);
+            SimpleType!(ICompletionProposal).arraycopy(proposals, 0, copy, 0, proposals.length);
             return copy;
         }
         return null;
@@ -87,9 +87,9 @@
     /*
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public bool equals(Object o) {
+    public override int opEquals(Object o) {
         if ( cast(ProposalPosition)o ) {
-            if (super.equals(o)) {
+            if (super.opEquals(o)) {
                 return Arrays.equals(fProposals, (cast(ProposalPosition)o).fProposals);
             }
         }
@@ -111,6 +111,6 @@
      * @see dwtx.jdt.internal.ui.text.link.LinkedPosition#hashCode()
      */
     public override hash_t toHash() {
-        return super.toHash() | (fProposals is null ? 0 : fProposals.toHash());
+        return super.toHash() | (fProposals is null ? 0 : (cast(hash_t)fProposals.ptr)/+.toHash()+/);
     }
 }
--- a/dwtx/jface/text/link/TabStopIterator.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/link/TabStopIterator.d	Mon Sep 08 00:51:37 2008 +0200
@@ -24,13 +24,8 @@
 
 
 import dwt.dwthelper.utils;
-
 import dwtx.dwtxhelper.Collection;
-
-
-
-
-import java.util.NoSuchElementException;
+import tango.core.Exception;
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.Position;
@@ -70,7 +65,17 @@
     }
 
     /** The comparator to sort the list of positions. */
-    private static const Comparator fComparator= new SequenceComparator();
+    private static Comparator fComparator_;
+    private static Comparator fComparator(){
+        if( fComparator_ is null ){
+            synchronized( TabStopIterator.classinfo ){
+                if( fComparator_ is null ){
+                    fComparator_ = new SequenceComparator();
+                }
+            }
+        }
+        return fComparator_;
+    }
 
     /** The iteration sequence. */
     private const ArrayList fList;
@@ -82,7 +87,7 @@
     private bool fIsCycling= false;
 
     this(List positionSequence) {
-        Assert.isNotNull(positionSequence);
+        Assert.isNotNull(cast(Object)positionSequence);
         fList= new ArrayList(positionSequence);
         Collections.sort(fList, fComparator);
         fSize= fList.size();
@@ -192,13 +197,13 @@
 
     LinkedPosition next(LinkedPosition current) {
         if (!hasNext(current))
-            throw new NoSuchElementException();
+            throw new NoSuchElementException(null);
         return cast(LinkedPosition) fList.get(fIndex= getNextIndex(current));
     }
 
     LinkedPosition previous(LinkedPosition current) {
         if (!hasPrevious(current))
-            throw new NoSuchElementException();
+            throw new NoSuchElementException(null);
         return cast(LinkedPosition) fList.get(fIndex= getPreviousIndex(current));
     }
 
@@ -224,6 +229,6 @@
     }
 
     LinkedPosition[] getPositions() {
-        return (LinkedPosition[]) fList.toArray(new LinkedPosition[fSize]);
+        return arraycast!(LinkedPosition)( fList.toArray());
     }
 }
--- a/dwtx/jface/text/link/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1"
- http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]"
- name="GENERATOR">
-  <title>Linked Position Infrastructure</title>
-</head>
-<body>
-Application programming interfaces for interaction
-with the Eclipse text editor's linked position support.
-<h2>Linked Position Infrastructure</h2>
-<h3>package <code>org.eclipse.jface.text.link</code></h3>
-The Linked Position Infrastructure lets one set up a mode in an editor
-in which regions in a document (or several documents) are <em>linked</em>,
-i.e. editions
-of one linked position will be reflected in the others.
-<h4>Classes</h4>
-<ul>
-  <li><code>LinkedPositionGroup</code>: a set of linked positions. Add
-positions to a group using the <code>addPosition</code> method. See <code>LinkedPosition</code> and <code>ProposalPosition</code> 
-for a position type that lets one attach <code>ICompletionProposal</code>s to
-be shown when the position is hit.</li>
-  <li><code>LinkedModeModel</code>: umbrellas several <code>LinkedPositionGroup</code>s,
-e.g. in a template that has several groups of linked positions. Handles
-the forwarding of updates received via an <code>IDocumentListener</code>. Add <code>LinkedPositionGroup</code>s
-to
-an model using the <code>addGroup</code> method. Existence of a <code>LinkedModeModel </code>can be
-tested by one of the static methods.<br>
-  </li>
-  <li><code>LinkedModeUI</code>: The UI for linked mode (for one
-model, to be precise). Monitors key etc. activity, monitors exit
-conditions, creates a painter etc. <br>
-Properties:
-    <ul>
-      <li><b>cycling mode</b> (whether to jump to the first position
-after the last): either of <code>CYCLE_ALWAYS</code>, <code>CYCLE_NEVER</code>
-and <code>CYCLE_WHEN_NO_PARENT</code> (default).</li>
-      <li><b>exit position</b>: where to jump upon leaving the linked
-mode (e.g. using Enter, or Tab from the last position when not
-cycling). Set <code>isTabStop</code> to <code>true</code> if tabbing
-should stop over when cycling.</li>
-      <li><span style="font-weight: bold;">position listener</span>:
-extending classes may register a position listener which will get
-notified whenever
-the focus position changes. An example is <code>org.eclipse.ui.texteditor.link.EditorLinkedModeUI.EditorHistoryUpdater</code>
-which will store the edit location in the editor navigation history.</li>
-    </ul>
-  </li>
-
-</ul>
-<h4>Example</h4>
-<pre>
-	IDocument doc1, doc2;
-	ITextViewer viewer1, viewer2;
-
-	/* create groups - this step is independent of the linked mode */
-	LinkedPositionGroup group1= new LinkedPositionGroup();
-	group1.addPosition(new LinkedPosition(doc1, 3, 4));
-	group1.addPosition(new LinkedPosition(doc1, 7, 8));
-
-	LinkedPositionGroup group2= new LinkedPositionGroup();
-	group2.addPosition(new LinkedPosition(doc1, 15, 25));
-	group2.addPosition(new LinkedPosition(doc2, 0, 10));
-
-	/* set up linked mode */
-	LinkedModeModel model= new LinkedModeModel();
-	model.addGroup(group1);
-	model.addGroup(group2);
-	model.forceInstall();
-
-	/* create UI */
-	LinkedModeUI ui= new LinkedModeUI(model, new ITextViewer[] { viewer1, viewer2 });
-	ui.enter();
-</pre>
-</body>
-</html>
--- a/dwtx/jface/text/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html><head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]" name="GENERATOR"><title>text infrastructure</title></head>
-
-<body>
-<p>Provides a framework for creating and manipulating text documents.</p>
-<h3>Package Specification</h3>
-<p><tt>IDocument</tt> is the major text 
-  model abstraction. It provides content management, position management using 
-  position categories, document partition management, and change notification. 
-  In order to be notified about document changes, an object must implements <tt>IDocumentListener 
-  </tt>and must be registered with the document. <tt>Position</tt> 
-  updating in responds to a document change is performed by implementers of <tt>IDocumentPositionUpdater</tt>. 
-  Partition updating in responds to a document change is performed by implements 
-  of <tt>IDocumentPartitioner</tt>. In order 
-  to be notified about document partition changes, objects must implement <tt>IDocumentParititoningListener</tt> 
-  and must be registered with the document.</p>
-<p>The package contains default implementations for document position updaters 
-  and for documents. <tt>AbstractDocument</tt> 
-  uses <tt>ITextStorage</tt> for storing 
-  and managing its content and <tt>ILineTracker</tt> 
-  to maintain a line structure of its content. As defaults a gap text implementation 
-  of <tt>ITextStore</tt> is provided, together 
-  with a line tracker understanding the three standard line delimiters (&quot;\r&quot;, 
-  &quot;\n&quot;, &quot;\r\n&quot;) and a line tracker which can be freely configured 
-  to consider any given set of strings as valid line delimiters. </p>
-<p></p>
-</body></html>
\ No newline at end of file
--- a/dwtx/jface/text/presentation/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.51 [en] (WinNT; I) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides a presentation reconciler add-on for an <tt>ITextViewer</tt>.
-A presentation reconciler keep the presentation (styles and colors) in
-sync with the content of the document serving as the <tt>ITextViewer</tt>'s
-input.
-<h2>
-Package Specification</h2>
-<tt>IPresentationReconciler</tt> defines the concept of a presentation
-reconciler. It collaborates with content type specific presentation damagers
-(<tt>IPresentationDamager</tt>) which for a given document change determine
-the region of the presentation which must be rebuild, and content type
-specific presentation repairers (<tt>IPresentationRepairer</tt>) which
-construct for a given damage region the document presentation. The package
-contains a default implementation of <tt>IPresentationReconciler </tt>(<tt>PresentationReconciler</tt>).
-</body>
-</html>
--- a/dwtx/jface/text/projection/FragmentUpdater.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/FragmentUpdater.d	Mon Sep 08 00:51:37 2008 +0200
@@ -54,7 +54,7 @@
      *
      * @param fragmentCategory the position category used for managing the fragments of a document
      */
-    protected this(String fragmentCategory) {
+    /+protected+/ this(String fragmentCategory) {
         super(fragmentCategory);
     }
 
@@ -119,7 +119,7 @@
      * Returns whether this updater considers any position affected by the given document event. A
      * position is affected if <code>event</code> {@link Position#overlapsWith(int, int) overlaps}
      * with it but not if the position is only shifted.
-     * 
+     *
      * @param event the event
      * @return <code>true</code> if there is any affected position, <code>false</code> otherwise
      */
--- a/dwtx/jface/text/projection/ProjectionDocument.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionDocument.d	Mon Sep 08 00:51:37 2008 +0200
@@ -132,7 +132,7 @@
             fMasterDocumentExtension= cast(IDocumentExtension) fMasterDocument;
 
         fSegmentsCategory= SEGMENTS_CATEGORY;
-        fFragmentsCategory= FRAGMENTS_CATEGORY_PREFIX + toHash();
+        fFragmentsCategory= FRAGMENTS_CATEGORY_PREFIX ~ Integer.toString(toHash());
         fMasterDocument.addPositionCategory(fFragmentsCategory);
         fFragmentsUpdater= new FragmentUpdater(fFragmentsCategory);
         fMasterDocument.addPositionUpdater(fFragmentsUpdater);
@@ -410,11 +410,11 @@
 
             IRegion imageRegion= fMapping.toExactImageRegion(new Region(offsetInMaster, lengthInMaster));
             if (imageRegion is null)
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
 
             Fragment fragment= findFragment(offsetInMaster, lengthInMaster);
             if (fragment is null)
-                throw new IllegalArgumentException();
+                throw new IllegalArgumentException(null);
 
             ProjectionDocumentEvent event= new ProjectionDocumentEvent(this, imageRegion.getOffset(), imageRegion.getLength(), "", offsetInMaster, lengthInMaster); //$NON-NLS-1$
             super.fireDocumentAboutToBeChanged(event);
@@ -500,9 +500,7 @@
         if (leftEnd < rightEnd)
             gaps.add(new Region(leftEnd, rightEnd - leftEnd));
 
-        IRegion[] result= new IRegion[gaps.size()];
-        gaps.toArray(result);
-        return result;
+        return arraycast!(IRegion)(gaps.toArray());
     }
 
     /**
--- a/dwtx/jface/text/projection/ProjectionDocumentEvent.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionDocumentEvent.d	Mon Sep 08 00:51:37 2008 +0200
@@ -52,9 +52,29 @@
 public class ProjectionDocumentEvent : SlaveDocumentEvent {
 
     /** The change type indicating a projection change */
-    public const static Object PROJECTION_CHANGE= new Object();
+    private static Object PROJECTION_CHANGE_;
+    public static Object PROJECTION_CHANGE(){
+        if( PROJECTION_CHANGE_ is null ) {
+            synchronized( ProjectionDocumentEvent.classinfo ) {
+                if( PROJECTION_CHANGE_ is null ) {
+                    PROJECTION_CHANGE_ = new Object();
+                }
+            }
+        }
+        return PROJECTION_CHANGE_;
+    }
     /** The change type indicating a content change */
-    public const static Object CONTENT_CHANGE= new Object();
+    private static Object CONTENT_CHANGE_;
+    public static Object CONTENT_CHANGE(){
+        if( CONTENT_CHANGE_ is null ) {
+            synchronized( ProjectionDocumentEvent.classinfo ) {
+                if( CONTENT_CHANGE_ is null ) {
+                    CONTENT_CHANGE_ = new Object();
+                }
+            }
+        }
+        return CONTENT_CHANGE_;
+    }
 
     /** The change type */
     private Object fChangeType;
--- a/dwtx/jface/text/projection/ProjectionDocumentManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionDocumentManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -64,7 +64,11 @@
 public class ProjectionDocumentManager : IDocumentListener, ISlaveDocumentManager, ISlaveDocumentManagerExtension {
 
     /** Registry for master documents and their projection documents. */
-    private Map fProjectionRegistry= new HashMap();
+    private Map fProjectionRegistry;
+
+    this(){
+        fProjectionRegistry= new HashMap();
+    }
 
     /**
      * Registers the given projection document for the given master document.
@@ -73,10 +77,10 @@
      * @param projection the projection document
      */
     private void add(IDocument master, ProjectionDocument projection) {
-        List list= cast(List) fProjectionRegistry.get(master);
+        List list= cast(List) fProjectionRegistry.get(cast(Object)master);
         if (list is null) {
             list= new ArrayList(1);
-            fProjectionRegistry.put(master, list);
+            fProjectionRegistry.put(cast(Object)master, cast(Object)list);
         }
         list.add(projection);
     }
@@ -88,11 +92,11 @@
      * @param projection the projection document
      */
     private void remove(IDocument master, ProjectionDocument projection) {
-        List list= cast(List) fProjectionRegistry.get(master);
+        List list= cast(List) fProjectionRegistry.get(cast(Object)master);
         if (list !is null) {
             list.remove(projection);
             if (list.size() is 0)
-                fProjectionRegistry.remove(master);
+                fProjectionRegistry.remove(cast(Object)master);
         }
     }
 
@@ -103,7 +107,7 @@
      * @return <code>true</code> if the given document is a master document known to this manager
      */
     private bool hasProjection(IDocument master) {
-        return (cast(List)fProjectionRegistry.get(master) );
+        return ( null !is cast(List)fProjectionRegistry.get(cast(Object)master) );
     }
 
     /**
@@ -114,7 +118,7 @@
      * @return an iterator for all registered projection documents or <code>null</code>
      */
     private Iterator getProjectionsIterator(IDocument master) {
-        List list= cast(List) fProjectionRegistry.get(master);
+        List list= cast(List) fProjectionRegistry.get(cast(Object)master);
         if (list !is null)
             return list.iterator();
         return null;
@@ -214,7 +218,7 @@
      * @see dwtx.jface.text.ISlaveDocumentManager#isSlaveDocument(dwtx.jface.text.IDocument)
      */
     public bool isSlaveDocument(IDocument document) {
-        return ( cast(ProjectionDocument)document );
+        return ( null !is cast(ProjectionDocument)document );
     }
 
     /*
@@ -229,11 +233,9 @@
      * @see dwtx.jface.text.ISlaveDocumentManagerExtension#getSlaveDocuments(dwtx.jface.text.IDocument)
      */
     public IDocument[] getSlaveDocuments(IDocument master) {
-        List list= cast(List) fProjectionRegistry.get(master);
+        List list= cast(List) fProjectionRegistry.get(cast(Object)master);
         if (list !is null) {
-            IDocument[] result= new IDocument[list.size()];
-            list.toArray(result);
-            return result;
+            return arraycast!(IDocument)(list.toArray());
         }
         return null;
     }
--- a/dwtx/jface/text/projection/ProjectionMapping.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionMapping.d	Mon Sep 08 00:51:37 2008 +0200
@@ -320,7 +320,7 @@
         if (!takeClosestImage && startFragmentIdx > endFragmentIdx || endFragmentIdx is -1)
             return null;
 
-        Fragment[] result= {cast(Fragment) fragments[startFragmentIdx], cast(Fragment) fragments[endFragmentIdx]};
+        Fragment[] result= [cast(Fragment) fragments[startFragmentIdx], cast(Fragment) fragments[endFragmentIdx]];
         return result;
     }
 
@@ -602,7 +602,7 @@
         int offset= originRegion.getOffset();
         if (originRegion.getLength() is 0) {
             int imageOffset= toImageOffset(offset);
-            return imageOffset > -1 ? [ new Region(imageOffset, 0) ] : null;
+            return imageOffset > -1 ? [ cast(IRegion) new Region(imageOffset, 0) ] : null;
         }
 
         int endOffset= exclusiveEnd(originRegion);
@@ -649,7 +649,7 @@
 
         if (originLength is 0) {
             int imageOffset= toImageOffset(originOffset);
-            return imageOffset > -1 ? [ new Region(originOffset, 0) ] : null;
+            return imageOffset > -1 ? [ cast(IRegion)new Region(originOffset, 0) ] : null;
         }
 
         int endOffset= originOffset + originLength;
--- a/dwtx/jface/text/projection/ProjectionTextStore.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionTextStore.d	Mon Sep 08 00:51:37 2008 +0200
@@ -83,7 +83,7 @@
     /** The document information mapping */
     private IMinimalMapping fMapping;
     /** Internal region used for querying the mapping. */
-    private ReusableRegion fReusableRegion= new ReusableRegion();
+    private ReusableRegion fReusableRegion;
 
 
     /**
@@ -94,6 +94,7 @@
      * @param mapping the document information mapping
      */
     public this(IDocument masterDocument, IMinimalMapping mapping) {
+        fReusableRegion= new ReusableRegion();
         fMasterDocument= masterDocument;
         fMapping= mapping;
     }
--- a/dwtx/jface/text/projection/SegmentUpdater.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/projection/SegmentUpdater.d	Mon Sep 08 00:51:37 2008 +0200
@@ -55,7 +55,7 @@
      *
      * @param segmentCategory the position category used for managing the segments of a projection document
      */
-    protected this(String segmentCategory) {
+    /+protected+/ this(String segmentCategory) {
         super(segmentCategory);
     }
 
@@ -64,7 +64,7 @@
      */
     public void update(DocumentEvent event) {
 
-        Assert.isTrue( cast(ProjectionDocumentEvent)event );
+        Assert.isTrue( null !is cast(ProjectionDocumentEvent)event );
         fIsProjectionChange= (cast(ProjectionDocumentEvent) event).getChangeType() is ProjectionDocumentEvent.PROJECTION_CHANGE;
 
         try {
@@ -79,7 +79,7 @@
             for (int i= 0; i < category.length; i++) {
 
                 fPosition= category[i];
-                Assert.isTrue( cast(Segment)fPosition );
+                Assert.isTrue( null !is cast(Segment)fPosition );
 
                 if (i < category.length - 1)
                     fNextSegment= cast(Segment) category[i + 1];
--- a/dwtx/jface/text/projection/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html><head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]" name="GENERATOR"><title>projections</title></head>
-
-<body>
-<p>This package provides an implementation of projection documents. Projection 
-  is a specific master/slave mapping. Non-overlapping fragments if a master document 
-  form the segments of a slave document. The slave document is completely built 
-  out of segments, i.e. there are no gaps between two neighboring segments. The 
-  segments have exactly the same sequence in which they apprear as fragments in 
-  the master document.</p>
-<h3>Package Specification</h3>
-<p><tt>ProjectionDocument</tt> is custom 
-  <tt>IDocument</tt> implementation that 
-  uses a <tt>ProjectionTextStore. </tt>The 
-  content of the <tt>ProjectionDocument</tt> 
-  is defined by the <tt>ProjectionMapping. 
-  </tt>The<tt> ProjectionDocumentManager</tt> 
-  manages the life cycle of <tt>ProjectionDocuments</tt> 
-  and their relation to their master documents.</p>
-</body></html>
\ No newline at end of file
--- a/dwtx/jface/text/quickassist/QuickAssistAssistant.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/quickassist/QuickAssistAssistant.d	Mon Sep 08 00:51:37 2008 +0200
@@ -42,12 +42,12 @@
 
 /**
  * Default implementation of <code>IQuickAssistAssistant</code>.
- * 
+ *
  * @since 3.2
  */
 public class QuickAssistAssistant : IQuickAssistAssistant, IQuickAssistAssistantExtension {
-    
-    
+
+
     private static final class QuickAssistAssistantImpl : ContentAssistant {
         /*
          * @see dwtx.jface.text.contentassist.ContentAssistant#possibleCompletionsClosed()
@@ -55,7 +55,7 @@
         public void possibleCompletionsClosed() {
             super.possibleCompletionsClosed();
         }
-        
+
         /*
          * @see dwtx.jface.text.contentassist.ContentAssistant#hide()
          * @since 3.4
@@ -65,7 +65,7 @@
         }
     }
 
-    
+
     private static final class ContentAssistProcessor : IContentAssistProcessor {
 
         private IQuickAssistProcessor fQuickAssistProcessor;
@@ -73,7 +73,7 @@
         this(IQuickAssistProcessor processor) {
             fQuickAssistProcessor= processor;
         }
-        
+
         /*
          * @see dwtx.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(dwtx.jface.text.ITextViewer, int)
          */
@@ -81,7 +81,7 @@
             // panic code - should not happen
             if (!( cast(ISourceViewer)viewer ))
                 return null;
-            
+
             return fQuickAssistProcessor.computeQuickAssistProposals(new TextInvocationContext(cast(ISourceViewer)viewer, offset, -1));
         }
 
@@ -119,12 +119,12 @@
         public IContextInformationValidator getContextInformationValidator() {
             return null;
         }
-        
+
     }
-    
+
     private QuickAssistAssistantImpl fQuickAssistAssistantImpl;
     private IQuickAssistProcessor fQuickAssistProcessor;
-    
+
     public this() {
         fQuickAssistAssistantImpl= new QuickAssistAssistantImpl();
         fQuickAssistAssistantImpl.enableAutoActivation(false);
@@ -150,7 +150,7 @@
      */
     public void setQuickAssistProcessor(IQuickAssistProcessor processor) {
         fQuickAssistProcessor= processor;
-        fQuickAssistAssistantImpl.setDocumentPartitioning("__" + getClass().getName() + "_partitioning"); //$NON-NLS-1$ //$NON-NLS-2$
+        fQuickAssistAssistantImpl.setDocumentPartitioning("__" ~ this.classinfo.name ~ "_partitioning"); //$NON-NLS-1$ //$NON-NLS-2$
         fQuickAssistAssistantImpl.setContentAssistProcessor(new ContentAssistProcessor(processor), IDocument.DEFAULT_CONTENT_TYPE);
     }
 
@@ -181,21 +181,21 @@
     public void setInformationControlCreator(IInformationControlCreator creator) {
         fQuickAssistAssistantImpl.setInformationControlCreator(creator);
     }
-    
+
     /*
      * @see dwtx.jface.text.quickassist.IQuickAssistAssistant#uninstall()
      */
     public void uninstall() {
         fQuickAssistAssistantImpl.uninstall();
     }
-    
+
     /*
      * @see dwtx.jface.text.quickassist.IQuickAssistAssistant#setProposalSelectorBackground(dwt.graphics.Color)
      */
     public void setProposalSelectorBackground(Color background) {
         fQuickAssistAssistantImpl.setProposalSelectorBackground(background);
     }
-    
+
     /*
      * @see dwtx.jface.text.quickassist.IQuickAssistAssistant#setProposalSelectorForeground(dwt.graphics.Color)
      */
@@ -230,7 +230,7 @@
      */
     public void setStatusLineVisible(bool show) {
         fQuickAssistAssistantImpl.setStatusLineVisible(show);
-        
+
     }
 
     /*
@@ -239,10 +239,10 @@
     public void setStatusMessage(String message) {
         fQuickAssistAssistantImpl.setStatusMessage(message);
     }
-    
+
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public final IHandler getHandler(String commandId) {
@@ -260,7 +260,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public void enableColoredLabels(bool isEnabled) {
--- a/dwtx/jface/text/quickassist/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.51 [en] (WinNT; I) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-This package provides the quick assist assistant add-on for an <tt>ISourceViewer</tt>.
-The quick assist assistant's purpose is to propose, display, and insert quick assists and quick fixes
-available at the current source viewer's quick assist invocation context.
-<p>
-A quick fix is a completion that can correct a problem reported and visible through an <tt>Annotation</tt>
-while a quick assist is not related to a problem or <tt>Annotation</tt>. Since quick assists can be proposed
-where appropriate they are normally not visible in the viewer. The quick assist assistant implementation in
-this package can show the quick assists that are available on the current line.
-</p>
-
-<h2>
-Package Specification</h2>
-<tt>IQuickAssistAssistant</tt> defines the concept of the quick assist assistant add-on.
-It collaborates with a quick assist processor (<tt>IQuickAssistProcessor</tt>)
-in order to generate quick fix and quick assist completion proposals (<tt>ICompletionProposal</tt>)
-available at the current quick assist invocation context (<tt>IQuickAssistInvocationContext</tt>).
-The package provides a default implementation <tt>QuickAssistAssistant</tt> which completely defines
-and implements the UI and the control flow for a quick assist assistant.
-<br>&nbsp;
-</body>
-</html>
--- a/dwtx/jface/text/reconciler/AbstractReconcileStep.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/reconciler/AbstractReconcileStep.d	Mon Sep 08 00:51:37 2008 +0200
@@ -56,7 +56,7 @@
      * @param step the reconcile step
      */
     public this(IReconcileStep step) {
-        Assert.isNotNull(step);
+        Assert.isNotNull(cast(Object)step);
         fNextStep= step;
         fNextStep.setPreviousStep(this);
     }
@@ -155,8 +155,8 @@
             return results1;
 
         // XXX: not yet performance optimized
-        Collection collection= new ArrayList(Arrays.asList(results1));
-        collection.addAll(Arrays.asList(results2));
+        Collection collection= new ArrayList(Arrays.asList(arraycast!(Object)(results1)));
+        collection.addAll(Arrays.asList(arraycast!(Object)(results2)));
         return arraycast!(IReconcileResult)(collection.toArray());
     }
 
@@ -171,7 +171,7 @@
      * @see IReconcileStep#setPreviousStep(IReconcileStep)
      */
     public void setPreviousStep(IReconcileStep step) {
-        Assert.isNotNull(step);
+        Assert.isNotNull(cast(Object)step);
         Assert.isTrue(fPreviousStep is null);
         fPreviousStep= step;
     }
--- a/dwtx/jface/text/reconciler/AbstractReconciler.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/reconciler/AbstractReconciler.d	Mon Sep 08 00:51:37 2008 +0200
@@ -89,14 +89,19 @@
         public this(String name) {
             thread = new Thread( &run );
             thread.name = name;
-            thread.priority = Thread.MIN_PRIORITY;
+            thread.priority = Thread.PRIORITY_MIN;
             thread.isDaemon(true);
         }
 
         public void start(){
             thread.start();
         }
-
+        public bool isAlive(){
+            return thread.isRunning();
+        }
+        public Thread getThread(){
+            return thread;
+        }
         /**
          * Returns whether a reconciling strategy is active right now.
          *
@@ -260,7 +265,7 @@
         public void documentChanged(DocumentEvent e) {
 
             if (!fThread.isDirty() && fThread.isAlive()) {
-                if (!fIsAllowedToModifyDocument && Thread.currentThread() is fThread)
+                if (!fIsAllowedToModifyDocument && Thread.getThis() is fThread.getThread())
                     throw new UnsupportedOperationException("The reconciler thread is not allowed to modify the document"); //$NON-NLS-1$
                 aboutToBeReconciled();
             }
@@ -474,13 +479,13 @@
      */
     public void install(ITextViewer textViewer) {
 
-        Assert.isNotNull(textViewer);
+        Assert.isNotNull(cast(Object)textViewer);
         fViewer= textViewer;
 
         synchronized (this) {
             if (fThread !is null)
                 return;
-            fThread= new BackgroundThread(getClass().getName());
+            fThread= new BackgroundThread(this.classinfo.name);
         }
 
         fDirtyRegionQueue= new DirtyRegionQueue();
@@ -597,14 +602,15 @@
             return;
 
         if (!fThread.isAlive()) {
-            try {
+// DWT
+//             try {
                 fThread.start();
-            } catch (IllegalThreadStateException e) {
+//             } catch (IllegalThreadStateException e) {
                 // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=40549
                 // This is the only instance where the thread is started; since
                 // we checked that it is not alive, it must be dead already due
                 // to a run-time exception or error. Exit.
-            }
+//             }
         } else {
             fThread.reset();
         }
@@ -624,6 +630,6 @@
      * @since 3.4
      */
     protected bool isRunningInReconcilerThread() {
-        return Thread.currentThread() is fThread;
+        return Thread.getThis() is fThread.getThread();
     }
 }
--- a/dwtx/jface/text/reconciler/DirtyRegion.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/reconciler/DirtyRegion.d	Mon Sep 08 00:51:37 2008 +0200
@@ -125,6 +125,6 @@
         int end= Math.max(fOffset + fLength, dr.fOffset + dr.fLength);
         fOffset= start;
         fLength= end - start;
-        fText= (dr.fText is null ? fText : (fText is null) ? dr.fText : fText + dr.fText);
+        fText= (dr.fText is null ? fText : (fText is null) ? dr.fText : fText ~ dr.fText);
     }
 }
--- a/dwtx/jface/text/reconciler/DirtyRegionQueue.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/reconciler/DirtyRegionQueue.d	Mon Sep 08 00:51:37 2008 +0200
@@ -30,7 +30,8 @@
 
 import dwtx.dwtxhelper.Collection;
 
-
+import tango.core.sync.Mutex;
+import tango.core.sync.Condition;
 
 /**
  * Queue used by {@link dwtx.jface.text.reconciler.AbstractReconciler} to manage
@@ -40,16 +41,28 @@
  * @see dwtx.jface.text.reconciler.AbstractReconciler
  * @see dwtx.jface.text.reconciler.DirtyRegion
  */
-class DirtyRegionQueue {
+class DirtyRegionQueue : Mutex {
 
     /** The list of dirty regions. */
-    private List fDirtyRegions= new ArrayList();
-
+    private List fDirtyRegions;
+    private Condition cond;
     /**
      * Creates a new empty dirty region.
      */
     public this() {
-        super();
+        //super();
+        fDirtyRegions= new ArrayList();
+        cond = new Condition(this);
+    }
+
+    public void wait(){
+        cond.wait();
+    }
+    public void wait(int delay){
+        cond.wait(delay/1000.0);
+    }
+    public void notifyAll(){
+        cond.notifyAll();
     }
 
     /**
--- a/dwtx/jface/text/reconciler/MonoReconciler.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/reconciler/MonoReconciler.d	Mon Sep 08 00:51:37 2008 +0200
@@ -64,7 +64,7 @@
      * @param isIncremental the indication whether strategy is incremental or not
      */
     public this(IReconcilingStrategy strategy, bool isIncremental) {
-        Assert.isNotNull(strategy);
+        Assert.isNotNull(cast(Object)strategy);
         fStrategy= strategy;
         if ( cast(IReconcilingStrategyExtension)fStrategy ) {
             IReconcilingStrategyExtension extension= cast(IReconcilingStrategyExtension)fStrategy;
--- a/dwtx/jface/text/reconciler/Reconciler.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/reconciler/Reconciler.d	Mon Sep 08 00:51:37 2008 +0200
@@ -117,7 +117,7 @@
         if (strategy is null)
             fStrategies.remove(contentType);
         else {
-            fStrategies.put(contentType, strategy);
+            fStrategies.put(contentType, cast(Object)strategy);
             if (cast(IReconcilingStrategyExtension )strategy && getProgressMonitor() !is null) {
                 IReconcilingStrategyExtension extension= cast(IReconcilingStrategyExtension) strategy;
                 extension.setProgressMonitor(getProgressMonitor());
@@ -236,7 +236,7 @@
         try {
             regions= TextUtilities.computePartitioning(getDocument(), getDocumentPartitioning(), offset, length, false);
         } catch (BadLocationException x) {
-            regions= new TypedRegion[0];
+            regions= new ITypedRegion[0];
         }
         return regions;
     }
--- a/dwtx/jface/text/reconciler/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides a reconciler add-on for an <tt>ITextViewer</tt>.
-A&nbsp; reconciler provides generic synchronization support&nbsp; with
-the content of the document serving as the <tt>ITextViewer</tt>'s input.
-There is no explicit model of what is synchronized.
-<h2>
-Package Specification</h2>
-<tt>IReconciler</tt> defines the concept of a reconciler. It collaborates
-with content type specific reconciling strategies (<tt>IReconcilingStrategy</tt>)
-which perform the synchronization for a given dirty region. The package
-contains a default implementation of <tt>IReconciler</tt> (<tt>Reconciler</tt>).
-
-<tt>Reconciler</tt> and <tt>MonoReconciler</tt> implements reconciling
-as a periodic background activity and folds co-located changes while being
-inactive.
-</body>
-</html>
--- a/dwtx/jface/text/revisions/IRevisionRulerColumnExtension.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/revisions/IRevisionRulerColumnExtension.d	Mon Sep 08 00:51:37 2008 +0200
@@ -27,23 +27,11 @@
 import dwtx.jface.viewers.ISelectionProvider;
 
     static this(){
-        IRevisionRulerColumnExtension.AUTHOR= new IRevisionRulerColumnExtension.RenderingMode("Author"); //$NON-NLS-1$
-        IRevisionRulerColumnExtension.AGE= new IRevisionRulerColumnExtension.RenderingMode("Age"); //$NON-NLS-1$
-        IRevisionRulerColumnExtension.AUTHOR_SHADED_BY_AGE= new IRevisionRulerColumnExtension.RenderingMode("Both"); //$NON-NLS-1$
+        IRevisionRulerColumnExtension_AUTHOR= new IRevisionRulerColumnExtension_RenderingMode("Author"); //$NON-NLS-1$
+        IRevisionRulerColumnExtension_AGE= new IRevisionRulerColumnExtension_RenderingMode("Age"); //$NON-NLS-1$
+        IRevisionRulerColumnExtension_AUTHOR_SHADED_BY_AGE= new IRevisionRulerColumnExtension_RenderingMode("Both"); //$NON-NLS-1$
     }
 
-/**
- * Extension interface for {@link IRevisionRulerColumn}.
- * <p>
- * Introduces the ability to register a selection listener on revisions and configurable rendering
- * modes.
- * </p>
- *
- * @see IRevisionRulerColumn
- * @since 3.3
- */
-public interface IRevisionRulerColumnExtension {
-
     /**
      * Rendering mode type-safe enum.
      */
@@ -61,11 +49,13 @@
             return fName;
         }
     }
+    alias RenderingMode IRevisionRulerColumnExtension_RenderingMode;
+
 
     /**
      * Rendering mode that assigns a unique color to each revision author.
      */
-    static const RenderingMode AUTHOR;
+    static const RenderingMode IRevisionRulerColumnExtension_AUTHOR;
     /**
      * Rendering mode that assigns colors to revisions by their age.
      * <p>
@@ -73,7 +63,7 @@
      * The coloring scheme can change in future releases.
      * </p>
      */
-    static const RenderingMode AGE;
+    static const RenderingMode IRevisionRulerColumnExtension_AGE;
     /**
      * Rendering mode that assigns unique colors per revision author and
      * uses different color intensity depending on the age.
@@ -83,7 +73,19 @@
      * The coloring scheme can change in future releases.
      * </p>
      */
-    static const RenderingMode AUTHOR_SHADED_BY_AGE;
+    static const RenderingMode IRevisionRulerColumnExtension_AUTHOR_SHADED_BY_AGE;
+
+/**
+ * Extension interface for {@link IRevisionRulerColumn}.
+ * <p>
+ * Introduces the ability to register a selection listener on revisions and configurable rendering
+ * modes.
+ * </p>
+ *
+ * @see IRevisionRulerColumn
+ * @since 3.3
+ */
+public interface IRevisionRulerColumnExtension {
 
     /**
      * Changes the rendering mode and triggers redrawing if needed.
--- a/dwtx/jface/text/revisions/Revision.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/revisions/Revision.d	Mon Sep 08 00:51:37 2008 +0200
@@ -40,7 +40,7 @@
  */
 public abstract class Revision {
     /** The original list of change regions, element type: {@link ChangeRegion}. */
-    private const List fChangeRegions= new ArrayList();
+    private const List fChangeRegions;
     /**
      * The cached list of adjusted ranges, element type: {@link RevisionRange}. <code>null</code>
      * if the list must be re-computed. Unmodifiable.
@@ -53,6 +53,7 @@
      * Creates a new revision.
      */
     protected this() {
+        fChangeRegions= new ArrayList();
     }
 
     /**
@@ -151,7 +152,7 @@
      * @see java.lang.Object#toString()
      */
     public override String toString() {
-        return "Revision " + getId(); //$NON-NLS-1$
+        return "Revision " ~ getId(); //$NON-NLS-1$
     }
 
     /**
--- a/dwtx/jface/text/revisions/RevisionRange.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/revisions/RevisionRange.d	Mon Sep 08 00:51:37 2008 +0200
@@ -21,7 +21,7 @@
 
 
 import dwt.dwthelper.utils;
-
+import tango.text.convert.Format;
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.source.ILineRange;
@@ -29,7 +29,7 @@
 
 /**
  * An unmodifiable line range that belongs to a {@link Revision}.
- * 
+ *
  * @since 3.3
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
@@ -47,7 +47,7 @@
 
     /**
      * Returns the revision that this range belongs to.
-     * 
+     *
      * @return the revision that this range belongs to
      */
     public Revision getRevision() {
@@ -72,6 +72,6 @@
      * @see java.lang.Object#toString()
      */
     public override String toString() {
-        return "RevisionRange [" + fRevision.toString() + ", [" + getStartLine() + "+" + getNumberOfLines() + ")]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+        return Format("RevisionRange [{}, [{}+{})]", fRevision.toString(), getStartLine(), getNumberOfLines()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
     }
 }
--- a/dwtx/jface/text/revisions/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides a revision model and a protocol to display revision information in a vertical ruler column.
-<h2>Package Specification</h2>
-<tt>IRevisionRulerColumn</tt> is the protocol that a team provider can use to display line based revision control information to a document.
-<tt>RevisionInformation</tt> defines the revision model, which contains a list of <tt>Revision</tt>s, which in turn contain <tt>RevisionRange</tt>s.
-</body>
-</html>
--- a/dwtx/jface/text/rules/BufferedRuleBasedScanner.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/BufferedRuleBasedScanner.d	Mon Sep 08 00:51:37 2008 +0200
@@ -58,7 +58,7 @@
     /** The actual size of the buffer. Initially set to <code>DEFAULT_BUFFER_SIZE</code> */
     private int fBufferSize= DEFAULT_BUFFER_SIZE;
     /** The buffer */
-    private char[] fBuffer= new char[DEFAULT_BUFFER_SIZE];
+    private char[] fBuffer;
     /** The offset of the document at which the buffer starts */
     private int fStart;
     /** The offset of the document at which the buffer ends */
@@ -73,6 +73,8 @@
      */
     protected this() {
         super();
+        fBuffer= new char[DEFAULT_BUFFER_SIZE];
+        fBuffer[] = 0;
     }
 
     /**
@@ -84,6 +86,8 @@
      */
     public this(int size) {
         super();
+        fBuffer= new char[DEFAULT_BUFFER_SIZE];
+        fBuffer[] = 0;
         setBufferSize(size);
     }
 
@@ -96,6 +100,7 @@
         Assert.isTrue(size > 0);
         fBufferSize= size;
         fBuffer= new char[size];
+        fBuffer[] = 0;
     }
 
     /**
--- a/dwtx/jface/text/rules/DefaultDamagerRepairer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/DefaultDamagerRepairer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -106,7 +106,7 @@
      */
     public this(ITokenScanner scanner) {
 
-        Assert.isNotNull(scanner);
+        Assert.isNotNull(cast(Object)scanner);
 
         fScanner= scanner;
         fDefaultTextAttribute= new TextAttribute(null);
--- a/dwtx/jface/text/rules/DefaultPartitioner.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/DefaultPartitioner.d	Mon Sep 08 00:51:37 2008 +0200
@@ -128,7 +128,7 @@
     public this(IPartitionTokenScanner scanner, String[] legalContentTypes) {
         fScanner= scanner;
         fLegalContentTypes= TextUtilities.copy(legalContentTypes);
-        fPositionCategory= CONTENT_TYPES_CATEGORY + toHash();
+        fPositionCategory= CONTENT_TYPES_CATEGORY ~ Integer.toString(toHash());
         fPositionUpdater= new DefaultPositionUpdater(fPositionCategory);
     }
 
@@ -152,7 +152,7 @@
      * @since 3.1
      */
     public void connect(IDocument document, bool delayInitialization) {
-        Assert.isNotNull(document);
+        Assert.isNotNull(cast(Object)document);
         Assert.isTrue(!document.containsPositionCategory(fPositionCategory));
 
         fDocument= document;
@@ -558,8 +558,8 @@
      */
     protected String getTokenContentType(IToken token) {
         Object data= token.getData();
-        if ( cast(String)data )
-            return cast(String) data;
+        if ( auto str = cast(ArrayWrapperString)data )
+            return str.array;
         return null;
     }
 
@@ -653,9 +653,7 @@
         } catch (BadPositionCategoryException x) {
         }
 
-        TypedRegion[] result= new TypedRegion[list.size()];
-        list.toArray(result);
-        return result;
+        return arraycast!(ITypedRegion)(list.toArray());
     }
 
     /**
--- a/dwtx/jface/text/rules/FastPartitioner.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/FastPartitioner.d	Mon Sep 08 00:51:37 2008 +0200
@@ -37,12 +37,9 @@
 import dwtx.jface.text.rules.BufferedRuleBasedScanner; // packageimport
 import dwtx.jface.text.rules.IWhitespaceDetector; // packageimport
 
-
 import dwt.dwthelper.utils;
-
-
 import dwtx.dwtxhelper.Collection;
-
+import tango.text.convert.Format;
 
 import dwtx.core.runtime.Assert;
 import dwtx.core.runtime.Platform;
@@ -124,7 +121,19 @@
      */
     private Position[] fCachedPositions= null;
     /** Debug option for cache consistency checking. */
-    private static const bool CHECK_CACHE_CONSISTENCY= "true".equalsIgnoreCase(Platform.getDebugOption("dwtx.jface.text/debug/FastPartitioner/PositionCache"));  //$NON-NLS-1$//$NON-NLS-2$;
+    private static bool CHECK_CACHE_CONSISTENCY_;
+    private static bool CHECK_CACHE_CONSISTENCY_init;
+    private static bool CHECK_CACHE_CONSISTENCY(){
+        if( !CHECK_CACHE_CONSISTENCY_init ){
+            synchronized(FastPartitioner.classinfo ){
+                if( !CHECK_CACHE_CONSISTENCY_init ){
+                    CHECK_CACHE_CONSISTENCY_init = true;
+                    CHECK_CACHE_CONSISTENCY_ = "true".equalsIgnoreCase(Platform.getDebugOption("dwtx.jface.text/debug/FastPartitioner/PositionCache"));  //$NON-NLS-1$//$NON-NLS-2$;
+                }
+            }
+        }
+        return CHECK_CACHE_CONSISTENCY_;
+    }
 
     /**
      * Creates a new partitioner that uses the given scanner and may return
@@ -136,7 +145,7 @@
     public this(IPartitionTokenScanner scanner, String[] legalContentTypes) {
         fScanner= scanner;
         fLegalContentTypes= TextUtilities.copy(legalContentTypes);
-        fPositionCategory= CONTENT_TYPES_CATEGORY + toHash();
+        fPositionCategory= CONTENT_TYPES_CATEGORY ~ Integer.toString(toHash());
         fPositionUpdater= new DefaultPositionUpdater(fPositionCategory);
     }
 
@@ -161,7 +170,7 @@
      * </p>
      */
     public void connect(IDocument document, bool delayInitialization) {
-        Assert.isNotNull(document);
+        Assert.isNotNull(cast(Object)document);
         Assert.isTrue(!document.containsPositionCategory(fPositionCategory));
 
         fDocument= document;
@@ -594,8 +603,8 @@
      */
     protected String getTokenContentType(IToken token) {
         Object data= token.getData();
-        if ( cast(String)data )
-            return cast(String) data;
+        if ( auto str = cast(ArrayWrapperString)data )
+            return str.array;
         return null;
     }
 
@@ -701,9 +710,7 @@
             throw ex;
         }
 
-        TypedRegion[] result= new TypedRegion[list.size()];
-        list.toArray(result);
-        return result;
+        return arraycast!(ITypedRegion)(list.toArray());
     }
 
     /**
@@ -828,13 +835,13 @@
             Position[] positions= fDocument.getPositions(fPositionCategory);
             int len= Math.min(positions.length, fCachedPositions.length);
             for (int i= 0; i < len; i++) {
-                if (!positions[i].equals(fCachedPositions[i]))
-                    System.err.println("FastPartitioner.getPositions(): cached position is not up to date: from document: " + toString(positions[i]) + " in cache: " + toString(fCachedPositions[i])); //$NON-NLS-1$ //$NON-NLS-2$
+                if (!positions[i].opEquals(fCachedPositions[i]))
+                    System.err.println(Format("FastPartitioner.getPositions(): cached position is not up to date: from document: {} in cache: {}", toString(positions[i]), toString(fCachedPositions[i]))); //$NON-NLS-1$ //$NON-NLS-2$
             }
             for (int i= len; i < positions.length; i++)
-                System.err.println("FastPartitioner.getPositions(): new position in document: " + toString(positions[i])); //$NON-NLS-1$
+                System.err.println(Format("FastPartitioner.getPositions(): new position in document: {}", toString(positions[i]))); //$NON-NLS-1$
             for (int i= len; i < fCachedPositions.length; i++)
-                System.err.println("FastPartitioner.getPositions(): stale position in cache: " + toString(fCachedPositions[i])); //$NON-NLS-1$
+                System.err.println(Format("FastPartitioner.getPositions(): stale position in cache: {}", toString(fCachedPositions[i]))); //$NON-NLS-1$
         }
         return fCachedPositions;
     }
@@ -846,6 +853,6 @@
      * @return a formatted string
      */
     private override String toString(Position position) {
-        return "P[" + position.getOffset() + "+" + position.getLength() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+        return Format("P[{}+{}]", position.getOffset(), position.getLength() ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 }
--- a/dwtx/jface/text/rules/NumberRule.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/NumberRule.d	Mon Sep 08 00:51:37 2008 +0200
@@ -50,7 +50,7 @@
 public class NumberRule : IRule {
 
     /** Internal setting for the un-initialized column constraint */
-    protected static final int UNDEFINED= -1;
+    protected static const int UNDEFINED= -1;
     /** The token to be returned when this rule is successful */
     protected IToken fToken;
     /** The column constraint */
@@ -63,7 +63,7 @@
      * @param token the token to be returned
      */
     public this(IToken token) {
-        Assert.isNotNull(token);
+        Assert.isNotNull(cast(Object)token);
         fToken= token;
     }
 
@@ -86,11 +86,11 @@
      */
     public IToken evaluate(ICharacterScanner scanner) {
         int c= scanner.read();
-        if (Character.isDigit(cast(wchar)c)) {
+        if (Character.isDigit(cast(char)c)) {
             if (fColumn is UNDEFINED || (fColumn is scanner.getColumn() - 1)) {
                 do {
                     c= scanner.read();
-                } while (Character.isDigit(cast(wchar) c));
+                } while (Character.isDigit(cast(char) c));
                 scanner.unread();
                 return fToken;
             }
--- a/dwtx/jface/text/rules/PatternRule.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/PatternRule.d	Mon Sep 08 00:51:37 2008 +0200
@@ -69,7 +69,7 @@
      */
     private static class DecreasingCharArrayLengthComparator : Comparator {
         public int compare(Object o1, Object o2) {
-            return ((char[]) o2).length - ((char[]) o1).length;
+            return stringcast( o2).length - stringcast( o1).length;
         }
     }
 
@@ -83,7 +83,7 @@
     /** The pattern's end sequence */
     protected char[] fEndSequence;
     /** The pattern's column constrain */
-    protected int fColumn= UNDEFINED;
+    protected int fColumn;
     /** The pattern's escape character */
     protected char fEscapeCharacter;
     /**
@@ -100,7 +100,7 @@
      * Line delimiter comparator which orders according to decreasing delimiter length.
      * @since 3.1
      */
-    private Comparator fLineDelimiterComparator= new DecreasingCharArrayLengthComparator();
+    private Comparator fLineDelimiterComparator;
     /**
      * Cached line delimiters.
      * @since 3.1
@@ -125,9 +125,12 @@
      * @param breaksOnEOL indicates whether the end of the line also terminates the pattern
      */
     public this(String startSequence, String endSequence, IToken token, char escapeCharacter, bool breaksOnEOL) {
+        fColumn= UNDEFINED;
+        fLineDelimiterComparator= new DecreasingCharArrayLengthComparator();
+
         Assert.isTrue(startSequence !is null && startSequence.length() > 0);
         Assert.isTrue(endSequence !is null || breaksOnEOL);
-        Assert.isNotNull(token);
+        Assert.isNotNull(cast(Object)token);
 
         fStartSequence= startSequence.toCharArray();
         fEndSequence= (endSequence is null ? new char[0] : endSequence.toCharArray());
@@ -256,7 +259,7 @@
         char[][] originalDelimiters= scanner.getLegalLineDelimiters();
         int count= originalDelimiters.length;
         if (fLineDelimiters is null || originalDelimiters.length !is count) {
-            fSortedLineDelimiters= new char[count][];
+            fSortedLineDelimiters= new char[][](count);
         } else {
             while (count > 0 && fLineDelimiters[count-1] is originalDelimiters[count-1])
                 count--;
@@ -294,7 +297,7 @@
             }
             readCount++;
         }
-        
+
         if (fBreaksOnEOF)
             return true;
 
--- a/dwtx/jface/text/rules/RuleBasedPartitionScanner.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/RuleBasedPartitionScanner.d	Mon Sep 08 00:51:37 2008 +0200
@@ -60,7 +60,7 @@
     /**
      * Disallow setting the rules since this scanner
      * exclusively uses predicate rules.
-     * 
+     *
      * @param rules the sequence of rules controlling this scanner
      */
     public void setRules(IRule[] rules) {
@@ -121,7 +121,7 @@
         for (int i= 0; i < fRules.length; i++) {
             rule= cast(IPredicateRule) fRules[i];
             token= rule.getSuccessToken();
-            if (fContentType.equals(token.getData())) {
+            if (fContentType.equals(stringcast(token.getData()))) {
                 token= rule.evaluate(this, resume);
                 if (!token.isUndefined()) {
                     fContentType= null;
--- a/dwtx/jface/text/rules/RuleBasedPartitioner.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/RuleBasedPartitioner.d	Mon Sep 08 00:51:37 2008 +0200
@@ -119,7 +119,7 @@
     public this(RuleBasedScanner scanner, String[] legalContentTypes) {
         fScanner= scanner;
         fLegalContentTypes= TextUtilities.copy(legalContentTypes);
-        fPositionCategory= CONTENT_TYPES_CATEGORY + toHash();
+        fPositionCategory= CONTENT_TYPES_CATEGORY ~ Integer.toString(toHash());
         fPositionUpdater= new DefaultPositionUpdater(fPositionCategory);
     }
 
@@ -135,7 +135,7 @@
      * @see IDocumentPartitioner#connect
      */
     public void connect(IDocument document) {
-        Assert.isNotNull(document);
+        Assert.isNotNull(cast(Object)document);
         Assert.isTrue(!document.containsPositionCategory(fPositionCategory));
 
         fDocument= document;
@@ -523,8 +523,8 @@
      */
     protected String getTokenContentType(IToken token) {
         Object data= token.getData();
-        if ( cast(String)data )
-            return cast(String) data;
+        if ( auto str = cast(ArrayWrapperString)data )
+            return str.array;
         return null;
     }
 
@@ -611,8 +611,6 @@
         } catch (BadPositionCategoryException x) {
         }
 
-        TypedRegion[] result= new TypedRegion[list.size()];
-        list.toArray(result);
-        return result;
+        return arraycast!(ITypedRegion)(list.toArray());
     }
 }
--- a/dwtx/jface/text/rules/RuleBasedScanner.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/RuleBasedScanner.d	Mon Sep 08 00:51:37 2008 +0200
@@ -95,7 +95,7 @@
     public void setRules(IRule[] rules) {
         if (rules !is null) {
             fRules= new IRule[rules.length];
-            System.arraycopy(rules, 0, fRules, 0, rules.length);
+            SimpleType!(IRule).arraycopy(rules, 0, fRules, 0, rules.length);
         } else
             fRules= null;
     }
@@ -116,7 +116,7 @@
     /*
      * @see ITokenScanner#setRange(IDocument, int, int)
      */
-    public void setRange(final IDocument document, int offset, int length) {
+    public void setRange(IDocument document, int offset, int length) {
         Assert.isLegal(document !is null);
         final int documentLength= document.getLength();
         checkRange(offset, length, documentLength);
@@ -127,7 +127,7 @@
         fRangeEnd= offset + length;
 
         String[] delimiters= fDocument.getLegalLineDelimiters();
-        fDelimiters= new char[delimiters.length][];
+        fDelimiters= new char[][](delimiters.length);
         for (int i= 0; i < delimiters.length; i++)
             fDelimiters[i]= delimiters[i].toCharArray();
 
@@ -138,7 +138,7 @@
     /**
      * Checks that the given range is valid.
      * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=69292
-     * 
+     *
      * @param offset the offset of the document range to scan
      * @param length the length of the document range to scan
      * @param documentLength the document's length
--- a/dwtx/jface/text/rules/Token.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/Token.d	Mon Sep 08 00:51:37 2008 +0200
@@ -62,21 +62,61 @@
     /**
      * Standard token: Undefined.
      */
-    public static const IToken UNDEFINED= new Token(T_UNDEFINED);
+    public static IToken UNDEFINED_;
+    public static IToken UNDEFINED(){
+        if( UNDEFINED_ is null ){
+            synchronized( Token.classinfo ){
+                if( UNDEFINED_ is null ){
+                    UNDEFINED_ = new Token(T_UNDEFINED);
+                }
+            }
+        }
+        return UNDEFINED_;
+    }
     /**
      * Standard token: End Of File.
      */
-    public static const IToken EOF= new Token(T_EOF);
+    public static IToken EOF_;
+    public static IToken EOF(){
+        if( EOF_ is null ){
+            synchronized( Token.classinfo ){
+                if( EOF_ is null ){
+                    EOF_ = new Token(T_EOF);
+                }
+            }
+        }
+        return EOF_;
+    }
     /**
      * Standard token: Whitespace.
      */
-    public static const IToken WHITESPACE= new Token(T_WHITESPACE);
+    public static IToken WHITESPACE_;
+    public static IToken WHITESPACE(){
+        if( WHITESPACE_ is null ){
+            synchronized( Token.classinfo ){
+                if( WHITESPACE_ is null ){
+                    WHITESPACE_ = new Token(T_WHITESPACE);
+                }
+            }
+        }
+        return WHITESPACE_;
+    }
 
     /**
      * Standard token: Neither {@link #UNDEFINED}, {@link #WHITESPACE}, nor {@link #EOF}.
      * @deprecated will be removed
      */
-    public static const IToken OTHER= new Token(T_OTHER);
+    public static IToken OTHER_;
+    public static IToken OTHER(){
+        if( OTHER_ is null ){
+            synchronized( Token.classinfo ){
+                if( OTHER_ is null ){
+                    OTHER_ = new Token(T_OTHER);
+                }
+            }
+        }
+        return OTHER_;
+    }
 
     /** The type of this token */
     private int fType;
--- a/dwtx/jface/text/rules/WhitespaceRule.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/WhitespaceRule.d	Mon Sep 08 00:51:37 2008 +0200
@@ -65,7 +65,7 @@
      * @param detector the rule's whitespace detector, may not be <code>null</code>
      */
     public this(IWhitespaceDetector detector) {
-        Assert.isNotNull(detector);
+        Assert.isNotNull(cast(Object)detector);
         fDetector= detector;
     }
 
@@ -74,10 +74,10 @@
      */
     public IToken evaluate(ICharacterScanner scanner) {
         int c= scanner.read();
-        if (fDetector.isWhitespace(cast(wchar) c)) {
+        if (fDetector.isWhitespace(cast(char) c)) {
             do {
                 c= scanner.read();
-            } while (fDetector.isWhitespace(cast(wchar) c));
+            } while (fDetector.isWhitespace(cast(char) c));
             scanner.unread();
             return Token.WHITESPACE;
         }
--- a/dwtx/jface/text/rules/WordPatternRule.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/WordPatternRule.d	Mon Sep 08 00:51:37 2008 +0200
@@ -56,7 +56,7 @@
     /** The word detector used by this rule */
     protected IWordDetector fDetector;
     /** The internal buffer used for pattern detection */
-    private StringBuffer fBuffer= new StringBuffer();
+    private StringBuffer fBuffer;
 
     /**
      * Creates a rule for the given starting and ending word
@@ -86,8 +86,9 @@
      * @param escapeCharacter the escape character
      */
     public this(IWordDetector detector, String startSequence, String endSequence, IToken token, char escapeCharacter) {
+        fBuffer= new StringBuffer();
         super(startSequence, endSequence, token, escapeCharacter);
-        Assert.isNotNull(detector);
+        Assert.isNotNull(cast(Object)detector);
         fDetector= detector;
     }
 
@@ -101,17 +102,17 @@
      * @return <code>true</code> if the word ends on the given end sequence
      */
     protected bool endSequenceDetected(ICharacterScanner scanner) {
-        fBuffer.setLength(0);
+        fBuffer.truncate(0);
         int c= scanner.read();
-        while (fDetector.isWordPart(cast(wchar) c)) {
-            fBuffer.append(cast(wchar) c);
+        while (fDetector.isWordPart(cast(char) c)) {
+            fBuffer.append(cast(char) c);
             c= scanner.read();
         }
         scanner.unread();
 
         if (fBuffer.length() >= fEndSequence.length) {
             for (int i=fEndSequence.length - 1, j= fBuffer.length() - 1; i >= 0; i--, j--) {
-                if (fEndSequence[i] !is fBuffer.charAt(j)) {
+                if (fEndSequence[i] !is fBuffer.slice()[j]) {
                     unreadBuffer(scanner);
                     return false;
                 }
@@ -131,7 +132,8 @@
      * @param scanner the scanner to be used
      */
     protected void unreadBuffer(ICharacterScanner scanner) {
-        fBuffer.insert(0, fStartSequence);
+        fBuffer.select(0, 0 );
+        fBuffer.replace(fStartSequence);
         for (int i= fBuffer.length() - 1; i > 0; i--)
             scanner.unread();
     }
--- a/dwtx/jface/text/rules/WordRule.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/rules/WordRule.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,7 @@
 public class WordRule : IRule {
 
     /** Internal setting for the un-initialized column constraint. */
-    protected static final int UNDEFINED= -1;
+    protected static const int UNDEFINED= -1;
 
     /** The word detector used by this rule. */
     protected IWordDetector fDetector;
@@ -70,9 +70,9 @@
     /** The column constraint. */
     protected int fColumn= UNDEFINED;
     /** The table of predefined words and token for this rule. */
-    protected Map fWords= new HashMap();
+    protected Map fWords;
     /** Buffer used for pattern detection. */
-    private StringBuffer fBuffer= new StringBuffer();
+    private StringBuffer fBuffer;
     /**
      * Tells whether this rule is case sensitive.
      * @since 3.3
@@ -119,8 +119,11 @@
      * @since 3.3
      */
     public this(IWordDetector detector, IToken defaultToken, bool ignoreCase) {
-        Assert.isNotNull(detector);
-        Assert.isNotNull(defaultToken);
+        fWords= new HashMap();
+        fBuffer= new StringBuffer();
+
+        Assert.isNotNull(cast(Object)detector);
+        Assert.isNotNull(cast(Object)defaultToken);
 
         fDetector= detector;
         fDefaultToken= defaultToken;
@@ -134,10 +137,10 @@
      * @param token the token to be returned if the word has been found, may not be <code>null</code>
      */
     public void addWord(String word, IToken token) {
-        Assert.isNotNull(word);
-        Assert.isNotNull(token);
+        //Assert.isNotNull(word);
+        Assert.isNotNull(cast(Object)token);
 
-        fWords.put(word, token);
+        fWords.put(word, cast(Object)token);
     }
 
     /**
@@ -159,23 +162,23 @@
      */
     public IToken evaluate(ICharacterScanner scanner) {
         int c= scanner.read();
-        if (c !is ICharacterScanner.EOF && fDetector.isWordStart(cast(wchar) c)) {
+        if (c !is ICharacterScanner.EOF && fDetector.isWordStart(cast(char) c)) {
             if (fColumn is UNDEFINED || (fColumn is scanner.getColumn() - 1)) {
 
-                fBuffer.setLength(0);
+                fBuffer.truncate(0);
                 do {
-                    fBuffer.append(cast(wchar) c);
+                    fBuffer.append(cast(char) c);
                     c= scanner.read();
-                } while (c !is ICharacterScanner.EOF && fDetector.isWordPart(cast(wchar) c));
+                } while (c !is ICharacterScanner.EOF && fDetector.isWordPart(cast(char) c));
                 scanner.unread();
 
                 String buffer= fBuffer.toString();
                 IToken token= cast(IToken)fWords.get(buffer);
-                
+
                 if(fIgnoreCase) {
                     Iterator iter= fWords.keySet().iterator();
                     while (iter.hasNext()) {
-                        String key= cast(String)iter.next();
+                        String key= stringcast(iter.next());
                         if(buffer.equalsIgnoreCase(key)) {
                             token= cast(IToken)fWords.get(key);
                             break;
@@ -183,7 +186,7 @@
                     }
                 } else
                     token= cast(IToken)fWords.get(buffer);
-                
+
                 if (token !is null)
                     return token;
 
--- a/dwtx/jface/text/rules/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.51 [en] (WinNT; I) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Provides a framework for rule based text scanning
-and uses the framework to provide rule-driven default implementations of
-<tt>IPresentationDamager</tt>, <tt>IPresentationRepairer</tt> and <tt>IDocumentPartitioner</tt>.
-<h2>
-Package Specification</h2>
-<tt>RuleBasedScanner</tt> is a document-based scanner controlled by <tt>IRule</tt>
-objects. When evaluated an <tt>IRule</tt> always returns an <tt>IToken</tt>.
-The package provides a set of rules whereby <tt>PatternRule</tt> is the
-most important one. <tt>PatternRule</tt> defines a pattern-configurable
-rule.
-</body>
-</html>
--- a/dwtx/jface/text/source/AnnotationBarHoverManager.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationBarHoverManager.d	Mon Sep 08 00:51:37 2008 +0200
@@ -400,7 +400,7 @@
     public this(IVerticalRulerInfo rulerInfo, ISourceViewer sourceViewer, IAnnotationHover annotationHover, IInformationControlCreator creator) {
         super(creator);
 
-        Assert.isNotNull(sourceViewer);
+        Assert.isNotNull(cast(Object)sourceViewer);
 
         fSourceViewer= sourceViewer;
         fVerticalRulerInfo= rulerInfo;
@@ -419,7 +419,7 @@
         MouseEvent event= getHoverEvent();
         IAnnotationHover hover= getHover(event);
         if (hover is null) {
-            setInformation(null, null);
+            setInformation(cast(Object)null, null);
             return;
         }
 
@@ -433,7 +433,7 @@
             if (range !is null)
                 setInformation(extension.getHoverInfo(fSourceViewer, range, computeNumberOfVisibleLines()), computeArea(range));
             else
-                setInformation(null, null);
+                setInformation(cast(Object)null, null);
 
         } else {
             setCustomInformationControlCreator(null);
@@ -815,35 +815,35 @@
     public InternalAccessor getInternalAccessor() {
         return new class()  InternalAccessor {
             public IInformationControl getCurrentInformationControl() {
-                return outer.superGetInternalAccessor().getCurrentInformationControl();
+                return this.outer.superGetInternalAccessor().getCurrentInformationControl();
             }
 
             public void setInformationControlReplacer(InformationControlReplacer replacer) {
-                outer.superGetInternalAccessor().setInformationControlReplacer(replacer);
+                this.outer.superGetInternalAccessor().setInformationControlReplacer(replacer);
             }
 
             public InformationControlReplacer getInformationControlReplacer() {
-                return outer.superGetInternalAccessor().getInformationControlReplacer();
+                return this.outer.superGetInternalAccessor().getInformationControlReplacer();
             }
 
             public bool canReplace(IInformationControl control) {
-                return outer.superGetInternalAccessor().canReplace(control);
+                return this.outer.superGetInternalAccessor().canReplace(control);
             }
 
             public bool isReplaceInProgress() {
-                return outer.superGetInternalAccessor().isReplaceInProgress();
+                return this.outer.superGetInternalAccessor().isReplaceInProgress();
             }
 
             public void replaceInformationControl(bool takeFocus) {
-                outer.superGetInternalAccessor().replaceInformationControl(takeFocus);
+                this.outer.superGetInternalAccessor().replaceInformationControl(takeFocus);
             }
 
             public void cropToClosestMonitor(Rectangle bounds) {
-                outer.superGetInternalAccessor().cropToClosestMonitor(bounds);
+                this.outer.superGetInternalAccessor().cropToClosestMonitor(bounds);
             }
 
             public void setHoverEnrichMode(ITextViewerExtension8_EnrichMode mode) {
-                outer.superGetInternalAccessor().setHoverEnrichMode(mode);
+                this.outer.superGetInternalAccessor().setHoverEnrichMode(mode);
             }
 
             public bool getAllowMouseExit() {
--- a/dwtx/jface/text/source/AnnotationMap.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationMap.d	Mon Sep 08 00:51:37 2008 +0200
@@ -102,7 +102,7 @@
      * The internal lock object used if <code>fLockObject</code> is <code>null</code>.
      * @since 3.2
      */
-    private const Object fInternalLockObject= new Object();
+    private const Object fInternalLockObject;
 
     /** The map holding the annotations */
     private Map fInternalMap;
@@ -113,6 +113,7 @@
      * @param capacity the capacity
      */
     public this(int capacity) {
+        fInternalLockObject= new Object();
         fInternalMap= new HashMap(capacity);
     }
 
@@ -257,4 +258,34 @@
             return fInternalMap.values();
         }
     }
+
+    /// DWT extension of Collection interfaces
+
+    public bool containsKey(String key) {
+        return containsKey(stringcast(key));
+    }
+    public Object get(String key) {
+        return get(stringcast(key));
+    }
+    public Object put(String key, String value) {
+        return put(stringcast(key), stringcast(value));
+    }
+    public Object put(Object key, String value) {
+        return put(key, stringcast(value));
+    }
+    public Object put(String key, Object value) {
+        return put(stringcast(key), value);
+    }
+    public Object remove(String key) {
+        return remove(stringcast(key));
+    }
+    public int opApply (int delegate(ref Object value) dg){
+        implMissing(__FILE__,__LINE__);
+        return 0;
+    }
+    public int opApply (int delegate(ref Object key, ref Object value) dg){
+        implMissing(__FILE__,__LINE__);
+        return 0;
+    }
+
 }
--- a/dwtx/jface/text/source/AnnotationModel.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationModel.d	Mon Sep 08 00:51:37 2008 +0200
@@ -76,6 +76,8 @@
 
 import dwt.dwthelper.utils;
 import dwtx.dwtxhelper.Collection;
+import tango.core.Exception;
+import tango.core.Thread;
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.AbstractDocument;
@@ -151,7 +153,7 @@
          */
         public Object next() {
             if (!hasNext())
-                throw new NoSuchElementException();
+                throw new NoSuchElementException(null);
 
             Object result= fNext;
             fNext= findNext();
@@ -289,7 +291,7 @@
 
         public Object next() {
             if (!hasNext())
-                throw new NoSuchElementException();
+                throw new NoSuchElementException(null);
 
             Object element= fCurrentElement;
             fCurrentElement= null;
@@ -344,7 +346,7 @@
      * The model's attachment.
      * @since 3.0
      */
-    private Map fAttachments= new HashMap();
+    private Map fAttachments;
     /**
      * The annotation model listener on attached sub-models.
      * @since 3.0
@@ -365,6 +367,7 @@
      * manage any annotations and is not connected to any document.
      */
     public this() {
+        fAttachments= new HashMap();
         fModelListener= new InternalModelListener();
         fModificationStamp= new Object();
         fAnnotations= new AnnotationMap(10);
@@ -460,7 +463,7 @@
      *             invalid position
      * @since 3.0
      */
-    protected void replaceAnnotations(Annotation[] annotationsToRemove, Map annotationsToAdd, bool fireModelChanged)  {
+    protected void replaceAnnotations(Annotation[] annotationsToRemove, Map annotationsToAdd, bool fireModelChanged_)  {
 
         if (annotationsToRemove !is null) {
             for (int i= 0, length= annotationsToRemove.length; i < length; i++)
@@ -477,7 +480,7 @@
             }
         }
 
-        if (fireModelChanged)
+        if (fireModelChanged_)
             fireModelChanged();
     }
 
@@ -492,7 +495,7 @@
      * @param fireModelChanged indicates whether to notify all model listeners
      * @throws BadLocationException if the position is not a valid document position
      */
-    protected void addAnnotation(Annotation annotation, Position position, bool fireModelChanged)  {
+    protected void addAnnotation(Annotation annotation, Position position, bool fireModelChanged_)  {
         if (!fAnnotations.containsKey(annotation)) {
 
             addPosition(fDocument, position);
@@ -502,7 +505,7 @@
                 getAnnotationModelEvent().annotationAdded(annotation);
             }
 
-            if (fireModelChanged)
+            if (fireModelChanged_)
                 fireModelChanged();
         }
     }
@@ -511,8 +514,8 @@
      * @see dwtx.jface.text.source.IAnnotationModel#addAnnotationModelListener(dwtx.jface.text.source.IAnnotationModelListener)
      */
     public void addAnnotationModelListener(IAnnotationModelListener listener) {
-        if (!fAnnotationModelListeners.contains(listener)) {
-            fAnnotationModelListeners.add(listener);
+        if (!fAnnotationModelListeners.contains(cast(Object)listener)) {
+            fAnnotationModelListeners.add(cast(Object)listener);
             if ( cast(IAnnotationModelListenerExtension)listener ) {
                 IAnnotationModelListenerExtension extension= cast(IAnnotationModelListenerExtension) listener;
                 AnnotationModelEvent event= createAnnotationModelEvent();
@@ -686,13 +689,13 @@
      * @param fireModelChanged indicates whether to notify all model listeners
      * @param modelInitiated indicates whether this changes has been initiated by this model
      */
-    protected void removeAnnotations(List annotations, bool fireModelChanged, bool modelInitiated) {
+    protected void removeAnnotations(List annotations, bool fireModelChanged_, bool modelInitiated) {
         if (annotations.size() > 0) {
             Iterator e= annotations.iterator();
             while (e.hasNext())
                 removeAnnotation(cast(Annotation) e.next(), false);
 
-            if (fireModelChanged)
+            if (fireModelChanged_)
                 fireModelChanged();
         }
     }
@@ -703,8 +706,8 @@
      *
      * @param fireModelChanged indicates whether to notify all model listeners
      */
-    protected void cleanup(bool fireModelChanged) {
-        cleanup(fireModelChanged, true);
+    protected void cleanup(bool fireModelChanged_) {
+        cleanup(fireModelChanged_, true);
     }
 
     /**
@@ -716,7 +719,7 @@
      * @param forkNotification <code>true</code> iff notification should be done in a new thread
      * @since 3.0
      */
-    private void cleanup(bool fireModelChanged, bool forkNotification) {
+    private void cleanup(bool fireModelChanged_, bool forkNotification) {
         if (fDocumentChanged) {
             fDocumentChanged= false;
 
@@ -729,14 +732,14 @@
                     deleted.add(a);
             }
 
-            if (fireModelChanged && forkNotification) {
+            if (fireModelChanged_ && forkNotification) {
                 removeAnnotations(deleted, false, false);
                 synchronized (getLockObject()) {
                     if (fModelEvent !is null)
-                        (new Thread ( &fireModelChanged() )).start();
+                        (new Thread ( &fireModelChanged )).start();
                 }
             } else
-                removeAnnotations(deleted, fireModelChanged, false);
+                removeAnnotations(deleted, fireModelChanged_, false);
         }
     }
 
@@ -759,12 +762,12 @@
             return regionIterator;
 
         List iterators= new ArrayList(fAttachments.size() + 1);
-        iterators.add(regionIterator);
+        iterators.add(cast(Object)regionIterator);
         Iterator it= fAttachments.keySet().iterator();
         while (it.hasNext()) {
             IAnnotationModel attachment= cast(IAnnotationModel) fAttachments.get(it.next());
             if ( cast(IAnnotationModelExtension2)attachment )
-                iterators.add((cast(IAnnotationModelExtension2) attachment).getAnnotationIterator(offset, length, canStartBefore, canEndAfter));
+                iterators.add(cast(Object)(cast(IAnnotationModelExtension2) attachment).getAnnotationIterator(offset, length, canStartBefore, canEndAfter));
             else
                 iterators.add(new RegionIterator(attachment.getAnnotationIterator(), attachment, offset, length, canStartBefore, canEndAfter));
         }
@@ -817,10 +820,10 @@
             return iter;
 
         List iterators= new ArrayList(fAttachments.size() + 1);
-        iterators.add(iter);
+        iterators.add(cast(Object)iter);
         Iterator it= fAttachments.keySet().iterator();
         while (it.hasNext())
-            iterators.add((cast(IAnnotationModel) fAttachments.get(it.next())).getAnnotationIterator());
+            iterators.add(cast(Object)(cast(IAnnotationModel) fAttachments.get(it.next())).getAnnotationIterator());
 
         return new MetaIterator(iterators.iterator());
     }
@@ -833,8 +836,8 @@
      * @param cleanup indicates whether annotations with deleted associated positions are removed
      * @return all annotations managed by this model
      */
-    protected Iterator getAnnotationIterator(bool cleanup) {
-        if (cleanup)
+    protected Iterator getAnnotationIterator(bool cleanup_) {
+        if (cleanup_)
             cleanup(true);
 
         return getAnnotationMap().keySetIterator();
@@ -868,7 +871,7 @@
      *
      * @param fireModelChanged indicates whether to notify all model listeners
      */
-    protected void removeAllAnnotations(bool fireModelChanged) {
+    protected void removeAllAnnotations(bool fireModelChanged_) {
 
         if (fDocument !is null) {
             Iterator e= getAnnotationMap().keySetIterator();
@@ -886,7 +889,7 @@
         fAnnotations.clear();
         fPositions.clear();
 
-        if (fireModelChanged)
+        if (fireModelChanged_)
             fireModelChanged();
     }
 
@@ -904,7 +907,7 @@
      * @param annotation the annotation to be removed
      * @param fireModelChanged indicates whether to notify all model listeners
      */
-    protected void removeAnnotation(Annotation annotation, bool fireModelChanged) {
+    protected void removeAnnotation(Annotation annotation, bool fireModelChanged_) {
         if (fAnnotations.containsKey(annotation)) {
 
             Position p= null;
@@ -920,7 +923,7 @@
                 getAnnotationModelEvent().annotationRemoved(annotation, p);
             }
 
-            if (fireModelChanged)
+            if (fireModelChanged_)
                 fireModelChanged();
         }
     }
@@ -949,9 +952,9 @@
      * @param fireModelChanged indicates whether to notify all model listeners
      * @since 3.0
      */
-    protected void modifyAnnotationPosition(Annotation annotation, Position position, bool fireModelChanged) {
+    protected void modifyAnnotationPosition(Annotation annotation, Position position, bool fireModelChanged_) {
         if (position is null) {
-            removeAnnotation(annotation, fireModelChanged);
+            removeAnnotation(annotation, fireModelChanged_);
         } else {
             Position p= cast(Position) fAnnotations.get(annotation);
             if (p !is null) {
@@ -969,12 +972,12 @@
                 synchronized (getLockObject()) {
                     getAnnotationModelEvent().annotationChanged(annotation);
                 }
-                if (fireModelChanged)
+                if (fireModelChanged_)
                     fireModelChanged();
 
             } else {
                 try {
-                    addAnnotation(annotation, position, fireModelChanged);
+                    addAnnotation(annotation, position, fireModelChanged_);
                 } catch (BadLocationException x) {
                     // ignore invalid position
                 }
@@ -993,12 +996,12 @@
      * @param fireModelChanged indicates whether to notify all model listeners
      * @since 3.0
      */
-    protected void modifyAnnotation(Annotation annotation, bool fireModelChanged) {
+    protected void modifyAnnotation(Annotation annotation, bool fireModelChanged_) {
         if (fAnnotations.containsKey(annotation)) {
             synchronized (getLockObject()) {
                 getAnnotationModelEvent().annotationChanged(annotation);
             }
-            if (fireModelChanged)
+            if (fireModelChanged_)
                 fireModelChanged();
         }
     }
@@ -1007,7 +1010,7 @@
      * @see IAnnotationModel#removeAnnotationModelListener(IAnnotationModelListener)
      */
     public void removeAnnotationModelListener(IAnnotationModelListener listener) {
-        fAnnotationModelListeners.remove(listener);
+        fAnnotationModelListeners.remove(cast(Object)listener);
     }
 
     /*
@@ -1015,9 +1018,9 @@
      * @since 3.0
      */
     public void addAnnotationModel(Object key, IAnnotationModel attachment) {
-        Assert.isNotNull(attachment);
-        if (!fAttachments.containsValue(attachment)) {
-            fAttachments.put(key, attachment);
+        Assert.isNotNull(cast(Object)attachment);
+        if (!fAttachments.containsValue(cast(Object)attachment)) {
+            fAttachments.put(key, cast(Object)attachment);
             for (int i= 0; i < fOpenConnections; i++)
                 attachment.connect(fDocument);
             attachment.addAnnotationModelListener(fModelListener);
--- a/dwtx/jface/text/source/AnnotationModelEvent.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationModelEvent.d	Mon Sep 08 00:51:37 2008 +0200
@@ -106,17 +106,17 @@
      * The added annotations.
      * @since 3.0
      */
-    private Set fAddedAnnotations= new HashSet();
+    private Set fAddedAnnotations;
     /**
      * The removed annotations.
      * @since 3.0
      */
-    private Map fRemovedAnnotations= new HashMap();
+    private Map fRemovedAnnotations;
     /**
      * The changed annotations.
      * @since 3.0
      */
-    private Set fChangedAnnotations= new HashSet();
+    private Set fChangedAnnotations;
     /**
      * Indicates that this event does not contain detailed information.
      * @since 3.0
@@ -145,6 +145,10 @@
      * @since 3.0
      */
     public this(IAnnotationModel model, bool isWorldChange) {
+        fAddedAnnotations= new HashSet();
+        fRemovedAnnotations= new HashMap();
+        fChangedAnnotations= new HashSet();
+
         fAnnotationModel= model;
         fIsWorldChange= isWorldChange;
     }
--- a/dwtx/jface/text/source/AnnotationPainter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationPainter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -74,20 +74,10 @@
 import dwtx.jface.text.source.OverviewRuler; // packageimport
 import dwtx.jface.text.source.OverviewRulerHoverManager; // packageimport
 
-
 import dwt.dwthelper.utils;
-
-
 import dwtx.dwtxhelper.Collection;
-
-
-
-
-
-
-
-
-
+import tango.text.convert.Format;
+import tango.io.Stdout;
 
 import dwt.DWT;
 import dwt.DWTException;
@@ -222,11 +212,11 @@
             int leftX= left.x;
 
             // compute (number of point) * 2
-            int length= ((2 * peaks) + 1) * 2;
-            if (length < 0)
+            int length_= ((2 * peaks) + 1) * 2;
+            if (length_ < 0)
                 return new int[0];
 
-            int[] coordinates= new int[length];
+            int[] coordinates= new int[length_];
 
             // cache peeks' y-coordinates
             int top= left.y + Math.min(baseline + 1, lineHeight - HEIGHT - 1);
@@ -242,8 +232,8 @@
             }
 
             // the last down flank is missing
-            coordinates[length-2]= Math.min(Math.max(0, right.x - 1), left.x + (WIDTH * peaks));
-            coordinates[length-1]= bottom;
+            coordinates[length_-2]= Math.min(Math.max(0, right.x - 1), left.x + (WIDTH * peaks));
+            coordinates[length_-1]= bottom;
 
             return coordinates;
         }
@@ -342,7 +332,14 @@
      * Implementation of <code>IRegion</code> that can be reused
      * by setting the offset and the length.
      */
-    private static class ReusableRegion : Position , IRegion {}
+    private static class ReusableRegion : Position , IRegion {
+        public override int getOffset(){
+            return super.getOffset();
+        }
+        public override int getLength(){
+            return super.getLength();
+        }
+    }
 
     /**
      * Tells whether this class is in debug mode.
@@ -362,7 +359,18 @@
      * The squiggly painter strategy.
      * @since 3.0
      */
-    private static const IDrawingStrategy SQUIGGLES_STRATEGY= new SquigglesStrategy();
+    private static IDrawingStrategy SQUIGGLES_STRATEGY_;
+    private static IDrawingStrategy SQUIGGLES_STRATEGY(){
+        if( SQUIGGLES_STRATEGY_ is null ){
+            synchronized( AnnotationPainter.classinfo ){
+                if( SQUIGGLES_STRATEGY_ is null ){
+                    SQUIGGLES_STRATEGY_ = new SquigglesStrategy();
+                }
+            }
+        }
+        return SQUIGGLES_STRATEGY_;
+    }
+
 
     /**
      * This strategy is used to mark the <code>null</code> value in the chache
@@ -370,25 +378,65 @@
      *
      * @since 3.4
      */
-    private static const IDrawingStrategy NULL_STRATEGY= new NullStrategy();
+    private static IDrawingStrategy NULL_STRATEGY_;
+    private static IDrawingStrategy NULL_STRATEGY(){
+        if( NULL_STRATEGY_ is null ){
+            synchronized( AnnotationPainter.classinfo ){
+                if( NULL_STRATEGY_ is null ){
+                    NULL_STRATEGY_= new NullStrategy();
+                }
+            }
+        }
+        return NULL_STRATEGY_;
+    }
     /**
      * The squiggles painter id.
      * @since 3.0
      */
-    private static const Object SQUIGGLES= new Object();
+    private static Object SQUIGGLES_;
+    private static Object SQUIGGLES(){
+        if( SQUIGGLES_ is null ){
+            synchronized( AnnotationPainter.classinfo ){
+                if( SQUIGGLES_ is null ){
+                    SQUIGGLES_= new Object();
+                }
+            }
+        }
+        return SQUIGGLES_;
+    }
     /**
      * The squiggly painter strategy.
      *
      * @since 3.4
      */
-    private static const ITextStyleStrategy HIGHLIGHTING_STRATEGY= new HighlightingStrategy();
+    private static ITextStyleStrategy HIGHLIGHTING_STRATEGY_;
+    private static ITextStyleStrategy HIGHLIGHTING_STRATEGY(){
+        if( HIGHLIGHTING_STRATEGY_ is null ){
+            synchronized( AnnotationPainter.classinfo ){
+                if( HIGHLIGHTING_STRATEGY_ is null ){
+                    HIGHLIGHTING_STRATEGY_= new HighlightingStrategy();
+                }
+            }
+        }
+        return HIGHLIGHTING_STRATEGY_;
+    }
 
     /**
      * The highlighting text style strategy id.
      *
      * @since 3.4
      */
-    private static const Object HIGHLIGHTING= new Object();
+    private static Object HIGHLIGHTING_;
+    private static Object HIGHLIGHTING(){
+        if( HIGHLIGHTING_ is null ){
+            synchronized( AnnotationPainter.classinfo ){
+                if( HIGHLIGHTING_ is null ){
+                    HIGHLIGHTING_= new Object();
+                }
+            }
+        }
+        return HIGHLIGHTING_;
+    }
 
     /**
      * The presentation information (decoration) for an annotation.  Each such
@@ -431,34 +479,34 @@
      * The map with decorations
      * @since 3.0
      */
-    private Map fDecorationsMap= new HashMap(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=50767
+    private Map fDecorationsMap; // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=50767
     /**
      * The map with of highlighted decorations.
      * @since 3.0
      */
-    private Map fHighlightedDecorationsMap= new HashMap(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=50767
+    private Map fHighlightedDecorationsMap;
     /**
      * Mutex for highlighted decorations map.
      * @since 3.0
      */
-    private Object fDecorationMapLock= new Object();
+    private Object fDecorationMapLock;
     /**
      * Mutex for for decorations map.
      * @since 3.0
      */
-    private Object fHighlightedDecorationsMapLock= new Object();
+    private Object fHighlightedDecorationsMapLock;
     /**
      * Maps an annotation type to its registered color.
      *
      * @see #setAnnotationTypeColor(Object, Color)
      */
-    private Map fAnnotationType2Color= new HashMap();
+    private Map fAnnotationType2Color;
 
     /**
      * Cache that maps the annotation type to its color.
      * @since 3.4
      */
-    private Map fCachedAnnotationType2Color= new HashMap();
+    private Map fCachedAnnotationType2Color;
     /**
      * The range in which the current highlight annotations can be found.
      * @since 3.0
@@ -497,25 +545,25 @@
      * @see #addAnnotationType(Object, Object)
      * @since 3.0
      */
-    private Map fAnnotationType2PaintingStrategyId= new HashMap();
+    private Map fAnnotationType2PaintingStrategyId;
     /**
      * Maps annotation types to painting strategy identifiers.
      * @since 3.4
      */
-    private Map fCachedAnnotationType2PaintingStrategy= new HashMap();
+    private Map fCachedAnnotationType2PaintingStrategy;
 
     /**
      * Maps painting strategy identifiers to painting strategies.
      *
      * @since 3.0
      */
-    private Map fPaintingStrategyId2PaintingStrategy= new HashMap();
+    private Map fPaintingStrategyId2PaintingStrategy;
 
     /**
      * Reuse this region for performance reasons.
      * @since 3.3
      */
-    private ReusableRegion fReusableRegion= new ReusableRegion();
+    private ReusableRegion fReusableRegion;
 
     /**
      * Creates a new annotation painter for the given source viewer and with the
@@ -526,13 +574,24 @@
      * @param access the annotation access for this painter
      */
     public this(ISourceViewer sourceViewer, IAnnotationAccess access) {
+        fDecorationsMap= new HashMap(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=50767
+        fHighlightedDecorationsMap= new HashMap(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=50767
+        fDecorationMapLock= new Object();
+        fHighlightedDecorationsMapLock= new Object();
+        fAnnotationType2Color= new HashMap();
+        fCachedAnnotationType2Color= new HashMap();
+        fReusableRegion= new ReusableRegion();
+        fAnnotationType2PaintingStrategyId= new HashMap();
+        fCachedAnnotationType2PaintingStrategy= new HashMap();
+        fPaintingStrategyId2PaintingStrategy= new HashMap();
+
         fSourceViewer= sourceViewer;
         fAnnotationAccess= access;
         fTextWidget= sourceViewer.getTextWidget();
 
         // default drawing strategies: squiggles were the only decoration style before version 3.0
-        fPaintingStrategyId2PaintingStrategy.put(SQUIGGLES, SQUIGGLES_STRATEGY);
-        fPaintingStrategyId2PaintingStrategy.put(HIGHLIGHTING, HIGHLIGHTING_STRATEGY);
+        fPaintingStrategyId2PaintingStrategy.put(SQUIGGLES, cast(Object)SQUIGGLES_STRATEGY);
+        fPaintingStrategyId2PaintingStrategy.put(HIGHLIGHTING, cast(Object)HIGHLIGHTING_STRATEGY);
     }
 
     /**
@@ -909,7 +968,7 @@
         if (paintingStrategy is null || cast(NullStrategy)paintingStrategy )
             return null;
 
-        Color color= getColor(type);
+        Color color= getColor(stringcast(type));
         if (color is null)
             return null;
 
@@ -954,7 +1013,7 @@
 
         if ( cast(IAnnotationAccessExtension)fAnnotationAccess ) {
             IAnnotationAccessExtension ext = cast(IAnnotationAccessExtension) fAnnotationAccess;
-            Object[] sts = ext.getSupertypes(type);
+            Object[] sts = ext.getSupertypes(stringcast(type));
             for (int i= 0; i < sts.length; i++) {
                 strategy= fPaintingStrategyId2PaintingStrategy.get(fAnnotationType2PaintingStrategyId.get(sts[i]));
                 if (strategy !is null) {
@@ -964,7 +1023,7 @@
             }
         }
 
-        fCachedAnnotationType2PaintingStrategy.put(type, NULL_STRATEGY);
+        fCachedAnnotationType2PaintingStrategy.put(type, cast(Object)NULL_STRATEGY);
         return null;
 
     }
@@ -1032,7 +1091,7 @@
 
         if ( cast(ITextViewerExtension2)fSourceViewer ) {
             if (DEBUG)
-                System.out_.println("AP: invalidating offset: " + r.getOffset() + ", length= " + r.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
+                System.out_.println(Format("AP: invalidating offset: {}, length= {}", r.getOffset(), r.getLength())); //$NON-NLS-1$ //$NON-NLS-2$
 
             (cast(ITextViewerExtension2)fSourceViewer).invalidateTextPresentation(r.getOffset(), r.getLength());
 
@@ -1058,7 +1117,7 @@
         IRegion region= tp.getExtent();
 
         if (DEBUG)
-            System.out_.println("AP: applying text presentation offset: " + region.getOffset() + ", length= " + region.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println(Format("AP: applying text presentation offset: {}, length= {}", region.getOffset(), region.getLength())); //$NON-NLS-1$ //$NON-NLS-2$
 
         for (int layer= 0, maxLayer= 1; layer < maxLayer; layer++) {
 
@@ -1146,7 +1205,7 @@
             // changes any more. If the document gets modified between
             // now and running the posted runnable, the position information
             // is not accurate any longer.
-            textWidgetDisplay.asyncExec( dgRunnable( (Event event_){
+            textWidgetDisplay.asyncExec( dgRunnable( (AnnotationModelEvent event_){
                 if (fTextWidget !is null && !fTextWidget.isDisposed())
                     updatePainting(event_);
             }, event ));
@@ -1227,8 +1286,8 @@
         // don't permit null as null is used to signal that an annotation type is not
         // registered with a specific strategy, and that its annotation hierarchy should be searched
         if (id is null)
-            throw new IllegalArgumentException();
-        fPaintingStrategyId2PaintingStrategy.put(id, strategy);
+            throw new IllegalArgumentException(null);
+        fPaintingStrategyId2PaintingStrategy.put(id, cast(Object)strategy);
         fCachedAnnotationType2PaintingStrategy.clear();
     }
 
@@ -1249,8 +1308,8 @@
         // don't permit null as null is used to signal that an annotation type is not
         // registered with a specific strategy, and that its annotation hierarchy should be searched
         if (id is null)
-            throw new IllegalArgumentException();
-        fPaintingStrategyId2PaintingStrategy.put(id, strategy);
+            throw new IllegalArgumentException(null);
+        fPaintingStrategyId2PaintingStrategy.put(id, cast(Object)strategy);
         fCachedAnnotationType2PaintingStrategy.clear();
     }
 
@@ -1450,7 +1509,7 @@
                 // ensure sized appropriately
                 for (int i= toBeDrawn.size(); i <= pp.fLayer; i++)
                     toBeDrawn.add(new LinkedList());
-                (cast(List) toBeDrawn.get(pp.fLayer)).add(entry);
+                (cast(List) toBeDrawn.get(pp.fLayer)).add(cast(Object)entry);
             }
         }
         IDocument document= fSourceViewer.getDocument();
--- a/dwtx/jface/text/source/AnnotationRulerColumn.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationRulerColumn.d	Mon Sep 08 00:51:37 2008 +0200
@@ -163,7 +163,14 @@
      * Implementation of <code>IRegion</code> that can be reused
      * by setting the offset and the length.
      */
-    private static class ReusableRegion : Position , IRegion {}
+    private static class ReusableRegion : Position , IRegion {
+        public override int getLength(){
+            return super.getLength();
+        }
+        public override int getOffset(){
+            return super.getOffset();
+        }
+    }
 
     /**
      * Pair of an annotation and their associated position. Used inside the paint method
@@ -423,6 +430,9 @@
      */
     private Canvas createCanvas(Composite parent) {
         return new class(parent, DWT.NO_BACKGROUND | DWT.NO_FOCUS)  Canvas {
+            this( Composite p, int s ){
+                super(p,s);
+            }
             /*
              * @see dwt.widgets.Control#addMouseListener(dwt.events.MouseListener)
              * @since 3.0
@@ -967,7 +977,7 @@
      * @since 3.0
      */
     private bool skip(Annotation annotation) {
-        Object annotationType= annotation.getType();
+        Object annotationType= stringcast(annotation.getType());
         Boolean allowed= cast(Boolean) fAllowedAnnotationTypes.get(annotationType);
         if (allowed !is null)
             return !allowed.booleanValue();
--- a/dwtx/jface/text/source/ChangeRulerColumn.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/ChangeRulerColumn.d	Mon Sep 08 00:51:37 2008 +0200
@@ -186,12 +186,12 @@
     /**
      * The view(port) listener.
      */
-    private const InternalListener fInternalListener;
+    private /+const+/ InternalListener fInternalListener;
     /**
      * The mouse handler.
      * @since 3.2
      */
-    private const MouseHandler fMouseHandler;
+    private /+const+/ MouseHandler fMouseHandler;
     /**
      * The revision painter.
      * @since 3.2
@@ -248,7 +248,7 @@
      */
     public this(ISharedTextColors sharedColors) {
         instanceInit();
-        Assert.isNotNull(sharedColors);
+        Assert.isNotNull(cast(Object)sharedColors);
         fRevisionPainter= new RevisionPainter(this, sharedColors);
         fDiffPainter= new DiffPainter(this, null); // no shading
     }
@@ -603,7 +603,7 @@
             if (lastLine < bottomLine || bottomLine is -1)
                 bottomLine= lastLine;
         } catch (BadLocationException x) {
-            x.printStackTrace();
+            ExceptionPrintStackTrace(x);
             return null;
         }
 
--- a/dwtx/jface/text/source/CompositeRuler.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/CompositeRuler.d	Mon Sep 08 00:51:37 2008 +0200
@@ -187,7 +187,7 @@
         }
 
         /** The list of listeners added to this canvas. */
-        private List fCachedListeners= new ArrayList();
+        private List fCachedListeners;
         /**
          * Internal listener for opening the context menu.
          * @since 3.0
@@ -201,6 +201,8 @@
          * @param style the DWT styles
          */
         public this(Composite parent, int style) {
+            fCachedListeners= new ArrayList();
+
             super(parent, style);
             fMenuDetectListener= new class()  Listener {
                 public void handleEvent(Event event) {
@@ -356,7 +358,7 @@
             int length= fCachedListeners.size();
             for (int i= 0; i < length; i++) {
                 ListenerInfo info= cast(ListenerInfo) fCachedListeners.get(i);
-                if (listener is info.fListener && clazz.equals(info.fClass)) {
+                if (listener is info.fListener && clazz.opEquals(info.fClass)) {
                     fCachedListeners.remove(i);
                     break;
                 }
@@ -569,9 +571,9 @@
     /** The ruler's annotation model */
     private IAnnotationModel fModel;
     /** The list of columns */
-    private List fDecorators= new ArrayList(2);
+    private List fDecorators;
     /** The cached location of the last mouse button activity */
-    private Point fLocation= new Point(-1, -1);
+    private Point fLocation;
     /** The cached line of the list mouse button activity */
     private int fLastMouseButtonActivityLine= -1;
     /** The gap between the individual columns of this composite ruler */
@@ -580,7 +582,7 @@
      * The set of annotation listeners.
      * @since 3.0
      */
-    private Set fAnnotationListeners= new HashSet();
+    private Set fAnnotationListeners;
 
 
     /**
@@ -596,6 +598,10 @@
      * @param gap
      */
     public this(int gap) {
+        fDecorators= new ArrayList(2);
+        fLocation= new Point(-1, -1);
+        fAnnotationListeners= new HashSet();
+
         fGap= gap;
     }
 
@@ -610,9 +616,9 @@
         rulerColumn.setModel(getModel());
 
         if (index > fDecorators.size())
-            fDecorators.add(rulerColumn);
+            fDecorators.add(cast(Object)rulerColumn);
         else
-            fDecorators.add(index, rulerColumn);
+            fDecorators.add(index, cast(Object)rulerColumn);
 
         if (fComposite !is null && !fComposite.isDisposed()) {
             rulerColumn.createControl(this, fComposite);
@@ -638,7 +644,7 @@
      * @since 3.0
      */
     public void removeDecorator(IVerticalRulerColumn rulerColumn) {
-        fDecorators.remove(rulerColumn);
+        fDecorators.remove(cast(Object)rulerColumn);
         if (rulerColumn !is null) {
             Control cc= rulerColumn.getControl();
             if (cc !is null && !cc.isDisposed()) {
@@ -848,7 +854,7 @@
      * @since 3.0
      */
     public Iterator getDecoratorIterator() {
-        Assert.isNotNull(fDecorators, "fDecorators must be initialized"); //$NON-NLS-1$
+        Assert.isNotNull(cast(Object)fDecorators, "fDecorators must be initialized"); //$NON-NLS-1$
         return fDecorators.iterator();
     }
 
@@ -865,7 +871,7 @@
      * @since 3.0
      */
     public void addVerticalRulerListener(IVerticalRulerListener listener) {
-        fAnnotationListeners.add(listener);
+        fAnnotationListeners.add(cast(Object)listener);
     }
 
     /*
@@ -873,7 +879,7 @@
      * @since 3.0
      */
     public void removeVerticalRulerListener(IVerticalRulerListener listener) {
-        fAnnotationListeners.remove(listener);
+        fAnnotationListeners.remove(cast(Object)listener);
     }
 
     /**
--- a/dwtx/jface/text/source/DefaultAnnotationHover.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/DefaultAnnotationHover.d	Mon Sep 08 00:51:37 2008 +0200
@@ -151,7 +151,7 @@
                 }
 
                 if (messages.size() is 1)
-                    return formatSingleMessage(cast(String)messages.get(0));
+                    return formatSingleMessage(stringcast(messages.get(0)));
 
                 if (messages.size() > 1)
                     return formatMultipleMessages(messages);
@@ -159,7 +159,7 @@
         }
 
         if (fShowLineNumber && lineNumber > -1)
-            return JFaceTextMessages.getFormattedString("DefaultAnnotationHover.lineNumber", Integer.toString(lineNumber + 1) ); //$NON-NLS-1$
+            return JFaceTextMessages.getFormattedString("DefaultAnnotationHover.lineNumber", stringcast(Integer.toString(lineNumber + 1)) ); //$NON-NLS-1$
 
         return null;
     }
@@ -206,8 +206,8 @@
         Iterator e= messages.iterator();
         while (e.hasNext()) {
             buffer.append('\n');
-            String listItemText= cast(String) e.next();
-            buffer.append(JFaceTextMessages.getFormattedString("DefaultAnnotationHover.listItem", listItemText )); //$NON-NLS-1$
+            String listItemText= stringcast( e.next());
+            buffer.append(JFaceTextMessages.getFormattedString("DefaultAnnotationHover.listItem", stringcast(listItemText ))); //$NON-NLS-1$
         }
         return buffer.toString();
     }
@@ -233,7 +233,7 @@
     private bool isDuplicateAnnotation(Map messagesAtPosition, Position position, String message) {
         if (messagesAtPosition.containsKey(position)) {
             Object value= messagesAtPosition.get(position);
-            if (message.equals(value))
+            if (message==/++/stringcast(value))
                 return true;
 
             if ( cast(List)value ) {
--- a/dwtx/jface/text/source/IAnnotationAccessExtension.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/IAnnotationAccessExtension.d	Mon Sep 08 00:51:37 2008 +0200
@@ -100,7 +100,7 @@
     /**
      * The default annotation layer.
      */
-    static final int DEFAULT_LAYER= IAnnotationPresentation.DEFAULT_LAYER;
+    static const int DEFAULT_LAYER= IAnnotationPresentation.DEFAULT_LAYER;
 
     /**
      * Returns the label for the given annotation's type.
--- a/dwtx/jface/text/source/IAnnotationPresentation.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/IAnnotationPresentation.d	Mon Sep 08 00:51:37 2008 +0200
@@ -91,7 +91,7 @@
     /**
      * The default annotation layer.
      */
-    static final int DEFAULT_LAYER= 0;
+    static const int DEFAULT_LAYER= 0;
 
 
     /**
--- a/dwtx/jface/text/source/ILineDiffInfo.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/ILineDiffInfo.d	Mon Sep 08 00:51:37 2008 +0200
@@ -91,13 +91,13 @@
 public interface ILineDiffInfo {
 
     /** Denotes an unchanged line. */
-    static final int UNCHANGED= 0;
+    static const int UNCHANGED= 0;
 
     /** Denotes an added line. */
-    static final int ADDED= 1;
+    static const int ADDED= 1;
 
     /** Denotes a changed line. */
-    static final int CHANGED= 2;
+    static const int CHANGED= 2;
 
     /**
      * Returns the number of deleted lines after this line.
--- a/dwtx/jface/text/source/ISourceViewer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/ISourceViewer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -148,7 +148,7 @@
      * Text operation code for requesting information at the current insertion position.
      * @since 2.0
      */
-    static const int INFORMATION= ITextOperationTarget.STRIP_PREFIX + 4;
+    static const int INFORMATION = ITextOperationTarget.STRIP_PREFIX + 4;
 
     /*
      * XXX: Cannot continue numbering due to operation codes used in ProjectionViewer
--- a/dwtx/jface/text/source/LineChangeHover.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/LineChangeHover.d	Mon Sep 08 00:51:37 2008 +0200
@@ -118,8 +118,10 @@
             StringBuffer sb= new StringBuffer(content);
             final String tabReplacement= getTabReplacement();
             for (int pos= 0; pos < sb.length(); pos++) {
-                if (sb.charAt(pos) is '\t')
-                    sb.replace(pos, pos + 1, tabReplacement);
+                if (sb.slice()[pos] is '\t'){
+                    sb.select( pos, pos + 1);
+                    sb.replace(tabReplacement);
+                }
             }
             return sb.toString();
         }
@@ -159,7 +161,7 @@
         for (int l= first; l <= last; l++) {
             ILineDiffInfo info= differ.getLineInfo(l);
             if (info !is null)
-                lines.add(info);
+                lines.add(cast(Object)info);
         }
 
         return decorateText(lines, maxLines);
@@ -192,7 +194,7 @@
             if (type is ILineDiffInfo.ADDED)
                 added++;
             else if (type is ILineDiffInfo.CHANGED) {
-                text += "> " + (original.length > 0 ? original[i++] : ""); //$NON-NLS-1$ //$NON-NLS-2$
+                text ~= "> " ~ (original.length > 0 ? original[i++] : ""); //$NON-NLS-1$ //$NON-NLS-2$
                 maxLines--;
             } else if (type is ILineDiffInfo.UNCHANGED) {
                 maxLines++;
@@ -200,7 +202,7 @@
             if (maxLines is 0)
                 return trimTrailing(text);
             for (; i < original.length; i++) {
-                text += "- " + original[i]; //$NON-NLS-1$
+                text ~= "- " ~ original[i]; //$NON-NLS-1$
                 added--;
                 if (--maxLines is 0)
                     return trimTrailing(text);
@@ -208,9 +210,9 @@
         }
         text= text.trim();
         if (text.length() is 0 && added-- > 0 && maxLines-- > 0)
-            text += "+ "; //$NON-NLS-1$
+            text ~= "+ "; //$NON-NLS-1$
         while (added-- > 0 && maxLines-- > 0)
-            text += "\n+ "; //$NON-NLS-1$
+            text ~= "\n+ "; //$NON-NLS-1$
         return text;
     }
 
@@ -240,7 +242,7 @@
             return null;
 
         if ( cast(IAnnotationModelExtension)model ) {
-            IAnnotationModel diffModel= (cast(IAnnotationModelExtension)model).getAnnotationModel(IChangeRulerColumn.QUICK_DIFF_MODEL_ID);
+            IAnnotationModel diffModel= (cast(IAnnotationModelExtension)model).getAnnotationModel(cast(Object)IChangeRulerColumn.QUICK_DIFF_MODEL_ID);
             if (diffModel !is null)
                 model= diffModel;
         }
@@ -312,7 +314,7 @@
         int first= adaptFirstLine(sourceViewer, lineRange.getStartLine());
         int last= adaptLastLine(sourceViewer, lineRange.getStartLine() + lineRange.getNumberOfLines() - 1);
         String content= computeContent(sourceViewer, first, last, visibleLines);
-        return formatSource(content);
+        return stringcast(formatSource(content));
     }
 
     /**
--- a/dwtx/jface/text/source/LineNumberChangeRulerColumn.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/LineNumberChangeRulerColumn.d	Mon Sep 08 00:51:37 2008 +0200
@@ -101,19 +101,24 @@
  * @since 3.0
  */
 public final class LineNumberChangeRulerColumn : LineNumberRulerColumn , IVerticalRulerInfo, IVerticalRulerInfoExtension, IChangeRulerColumn, IRevisionRulerColumn, IRevisionRulerColumnExtension {
+
+    public Control getControl() {
+        return super.getControl();
+    }
+
     /** The ruler's annotation model. */
     private IAnnotationModel fAnnotationModel;
     /** <code>true</code> if changes should be displayed using character indications instead of background colors. */
     private bool fCharacterDisplay;
     /**
      * The revision painter strategy.
-     * 
+     *
      * @since 3.2
      */
     private const RevisionPainter fRevisionPainter;
-    /** 
+    /**
      * The diff information painter strategy.
-     * 
+     *
      * @since 3.2
      */
     private const DiffPainter fDiffPainter;
@@ -129,11 +134,11 @@
      * @param sharedColors the shared colors provider to use
      */
     public this(ISharedTextColors sharedColors) {
-        Assert.isNotNull(sharedColors);
+        Assert.isNotNull(cast(Object)sharedColors);
         fRevisionPainter= new RevisionPainter(this, sharedColors);
         fDiffPainter= new DiffPainter(this, sharedColors);
     }
-    
+
     /*
      * @see dwtx.jface.text.source.LineNumberRulerColumn#createControl(dwtx.jface.text.source.CompositeRuler, dwt.widgets.Composite)
      */
@@ -143,7 +148,7 @@
         fDiffPainter.setParentRuler(parentRuler);
         return control;
     }
-    
+
     /*
      * @see dwtx.jface.text.source.IVerticalRulerInfo#getLineOfLastMouseButtonActivity()
      */
@@ -170,7 +175,7 @@
         layout(true);
         postRedraw();
     }
-    
+
     private void setAnnotationModel(IAnnotationModel model) {
         if (fAnnotationModel !is model)
             fAnnotationModel= model;
@@ -245,7 +250,7 @@
     public void removeVerticalRulerListener(IVerticalRulerListener listener) {
         throw new UnsupportedOperationException();
     }
-    
+
     /*
      * @see dwtx.jface.text.source.LineNumberRulerColumn#doPaint(dwt.graphics.GC)
      */
@@ -261,7 +266,7 @@
         if (fShowNumbers || fCharacterDisplay)
             super.doPaint(gc, visibleLines);
     }
-    
+
     /*
      * @see dwtx.jface.text.source.IVerticalRulerInfoExtension#getHover()
      */
@@ -311,7 +316,7 @@
     public void setDeletedColor(Color deletedColor) {
         fDiffPainter.setDeletedColor(deletedColor);
     }
-    
+
     /*
      * @see dwtx.jface.text.revisions.IRevisionRulerColumn#setRevisionInformation(dwtx.jface.text.revisions.RevisionInformation)
      */
@@ -341,7 +346,7 @@
 
     /**
      * Sets the line number display mode.
-     * 
+     *
      * @param showNumbers <code>true</code> to show numbers, <code>false</code> to only show
      *        diff / revision info.
      * @since 3.3
@@ -367,7 +372,7 @@
     /**
      * Returns <code>true</code> if the ruler is showing line numbers, <code>false</code>
      * otherwise
-     * 
+     *
      * @return <code>true</code> if line numbers are shown, <code>false</code> otherwise
      * @since 3.3
      */
@@ -378,7 +383,7 @@
     /**
      * Returns <code>true</code> if the ruler is showing revision information, <code>false</code>
      * otherwise
-     * 
+     *
      * @return <code>true</code> if revision information is shown, <code>false</code> otherwise
      * @since 3.3
      */
@@ -389,7 +394,7 @@
     /**
      * Returns <code>true</code> if the ruler is showing change information, <code>false</code>
      * otherwise
-     * 
+     *
      * @return <code>true</code> if change information is shown, <code>false</code> otherwise
      * @since 3.3
      */
@@ -436,7 +441,7 @@
     public void removeRevisionListener(IRevisionListener listener) {
         fRevisionPainter.removeRevisionListener(listener);
     }
-    
+
     /*
      * @see dwtx.jface.text.source.LineNumberRulerColumn#handleDispose()
      * @since 3.3
--- a/dwtx/jface/text/source/LineNumberRulerColumn.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/LineNumberRulerColumn.d	Mon Sep 08 00:51:37 2008 +0200
@@ -583,7 +583,7 @@
         int lines= document is null ? 0 : document.getNumberOfLines();
 
         int digits= 2;
-        while (lines > Math.pow(10, digits) -1) {
+        while (lines > Math.pow(cast(real)10.0, cast(uint)digits) -1) {
             ++digits;
         }
         return digits;
@@ -629,7 +629,7 @@
 
             char[] nines= new char[fCachedNumberOfDigits];
             Arrays.fill(nines, '9');
-            String nineString= new String(nines);
+            String nineString= new_String(nines);
             Point p= gc.stringExtent(nineString);
             fIndentation[0]= p.x;
 
@@ -653,6 +653,9 @@
         fCachedTextWidget= fCachedTextViewer.getTextWidget();
 
         fCanvas= new class(parentControl, DWT.NO_FOCUS )  Canvas {
+            this(Composite c, int s ){
+                super(c,s);
+            }
             /*
              * @see dwt.widgets.Control#addMouseListener(dwt.events.MouseListener)
              * @since 3.4
@@ -877,7 +880,7 @@
         int widgetLine= JFaceTextUtil.modelLineToWidgetLine(fCachedTextViewer, line);
 
         String s= createDisplayString(line);
-        int indentation= fIndentation[s.length()];
+        int indentation= fIndentation[s.length];
         int baselineBias= getBaselineBias(gc, widgetLine);
         gc.drawString(s, indentation, y + baselineBias, true);
     }
--- a/dwtx/jface/text/source/MatchingCharacterPainter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/MatchingCharacterPainter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -120,7 +120,7 @@
     /** The strategy for finding matching characters */
     private ICharacterPairMatcher fMatcher;
     /** The position tracking the matching characters */
-    private Position fPairPosition= new Position(0, 0);
+    private Position fPairPosition;
     /** The anchor indicating whether the character is left or right of the caret */
     private int fAnchor;
 
@@ -135,6 +135,7 @@
      * @param matcher
      */
     public this(ISourceViewer sourceViewer, ICharacterPairMatcher matcher) {
+        fPairPosition= new Position(0, 0);
         fSourceViewer= sourceViewer;
         fMatcher= matcher;
         fTextWidget= sourceViewer.getTextWidget();
@@ -244,7 +245,7 @@
         if (gc !is null) {
 
             gc.setForeground(fColor);
-            
+
             Rectangle bounds;
             if (length > 0)
                 bounds= fTextWidget.getTextBounds(offset, offset + length - 1);
@@ -252,7 +253,7 @@
                 Point loc= fTextWidget.getLocationAtOffset(offset);
                 bounds= new Rectangle(loc.x, loc.y, 1, fTextWidget.getLineHeight(offset));
             }
-            
+
             // draw box around line segment
             gc.drawRectangle(bounds.x, bounds.y, bounds.width - 1, bounds.height - 1);
 
@@ -308,7 +309,7 @@
                 // remove old highlighting
                 handleDrawRequest(null);
                 // update position
-                fPairPosition.isDeleted= false;
+                fPairPosition.isDeleted_= false;
                 fPairPosition.offset= pair.getOffset();
                 fPairPosition.length= pair.getLength();
                 fAnchor= fMatcher.getAnchor();
@@ -320,7 +321,7 @@
 
             fIsActive= true;
 
-            fPairPosition.isDeleted= false;
+            fPairPosition.isDeleted_= false;
             fPairPosition.offset= pair.getOffset();
             fPairPosition.length= pair.getLength();
             fAnchor= fMatcher.getAnchor();
--- a/dwtx/jface/text/source/OverviewRuler.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/OverviewRuler.d	Mon Sep 08 00:51:37 2008 +0200
@@ -255,8 +255,8 @@
                     continue;
 
                 fNext= next;
-                Object annotationType= next.getType();
-                if (fType is null || fType.equals(annotationType) || !fConfiguredAnnotationTypes.contains(annotationType) && isSubtype(annotationType)) {
+                Object annotationType= stringcast(next.getType());
+                if (fType is null || fType.opEquals(annotationType) || !fConfiguredAnnotationTypes.contains(annotationType) && isSubtype(annotationType)) {
                     if (temp && pers) return;
                     if (pers && next.isPersistent()) return;
                     if (temp && !next.isPersistent()) return;
@@ -270,7 +270,7 @@
                 IAnnotationAccessExtension extension= cast(IAnnotationAccessExtension) fAnnotationAccess;
                 return extension.isSubtype(annotationType, fType);
             }
-            return fType.equals(annotationType);
+            return cast(bool) fType.opEquals(annotationType);
         }
 
         /*
@@ -1112,6 +1112,9 @@
     private bool skip(Object annotationType) {
         return !contains(annotationType, fAllowedAnnotationTypes, fConfiguredAnnotationTypes);
     }
+    private bool skip(String annotationType) {
+        return !contains(stringcast(annotationType), fAllowedAnnotationTypes, fConfiguredAnnotationTypes);
+    }
 
     /**
      * Returns whether the given annotation type should be skipped by the drawing routine of the header.
@@ -1428,8 +1431,8 @@
 
             if (annotationTypeLabel !is null) {
                 if (overview.length() > 0)
-                    overview += "\n"; //$NON-NLS-1$
-                overview += JFaceTextMessages.getFormattedString("OverviewRulerHeader.toolTipTextEntry", annotationTypeLabel, new Integer(count) ); //$NON-NLS-1$
+                    overview ~= "\n"; //$NON-NLS-1$
+                overview ~= JFaceTextMessages.getFormattedString("OverviewRulerHeader.toolTipTextEntry", stringcast(annotationTypeLabel), new Integer(count) ); //$NON-NLS-1$
             }
         }
 
--- a/dwtx/jface/text/source/SourceViewer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/SourceViewer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -229,7 +229,17 @@
      * Key of the model annotation model inside the visual annotation model.
      * @since 3.0
      */
-    protected final static Object MODEL_ANNOTATION_MODEL= new Object();
+    private static Object MODEL_ANNOTATION_MODEL_;
+    protected static Object MODEL_ANNOTATION_MODEL(){
+        if( MODEL_ANNOTATION_MODEL_ is null ){
+            synchronized(SourceViewer.classinfo ){
+                if( MODEL_ANNOTATION_MODEL_ is null ){
+                    MODEL_ANNOTATION_MODEL_ = new Object();
+                }
+            }
+        }
+        return MODEL_ANNOTATION_MODEL_;
+    }
 
     /** The viewer's content assistant */
     protected IContentAssistant fContentAssistant;
@@ -265,7 +275,7 @@
      * Stack of saved selections in the underlying document
      * @since 3.0
      */
-    protected final Stack fSelections= new Stack();
+    protected const Stack fSelections;
     /**
      * Position updater for saved selections
      * @since 3.0
@@ -344,6 +354,7 @@
      * @since 2.1
      */
     public this(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler, bool showAnnotationsOverview, int styles) {
+        fSelections= new Stack();
         super();
 
         fVerticalRuler= verticalRuler;
@@ -794,7 +805,7 @@
         final IDocument document= getDocument();
 
         if (fSelections.isEmpty()) {
-            fSelectionCategory= _SELECTION_POSITION_CATEGORY + toHash();
+            fSelectionCategory= _SELECTION_POSITION_CATEGORY ~ Integer.toString(toHash());
             fSelectionUpdater= new NonDeletingPositionUpdater(fSelectionCategory);
             document.addPositionCategory(fSelectionCategory);
             document.addPositionUpdater(fSelectionUpdater);
@@ -910,10 +921,10 @@
                                 final IContentFormatterExtension extension= cast(IContentFormatterExtension) fContentFormatter;
                                 context= createFormattingContext();
                                 if (selection.y is 0) {
-                                    context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.TRUE);
+                                    context.setProperty(stringcast(FormattingContextProperties.CONTEXT_DOCUMENT), Boolean.TRUE);
                                 } else {
-                                    context.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.FALSE);
-                                    context.setProperty(FormattingContextProperties.CONTEXT_REGION, new Region(selection.x, selection.y));
+                                    context.setProperty(stringcast(FormattingContextProperties.CONTEXT_DOCUMENT), Boolean.FALSE);
+                                    context.setProperty(stringcast(FormattingContextProperties.CONTEXT_REGION), new Region(selection.x, selection.y));
                                 }
                                 extension.format(document, context);
                             } else {
--- a/dwtx/jface/text/source/SourceViewerConfiguration.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/SourceViewerConfiguration.d	Mon Sep 08 00:51:37 2008 +0200
@@ -134,7 +134,7 @@
      * specification of this class' methods.
      */
     public this() {
-        super();
+//         super();
     }
 
     /**
@@ -303,11 +303,11 @@
         for (int i= 0; i <= tabWidth; i++) {
             char[] spaceChars= new char[i];
             Arrays.fill(spaceChars, ' ');
-            String spaces= new String(spaceChars);
+            String spaces= new_String(spaceChars);
             if (i < tabWidth)
-                indentPrefixes[i]= spaces + '\t';
+                indentPrefixes[i]= spaces ~ '\t';
             else
-                indentPrefixes[i]= new String(spaces);
+                indentPrefixes[i]= new_String(spaces);
         }
         indentPrefixes[tabWidth + 1]= ""; //$NON-NLS-1$
         return indentPrefixes;
--- a/dwtx/jface/text/source/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html><head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]" name="GENERATOR"><title>annotation models</title></head>
-
-<body>
-<p>Provides a support for managing annotations attached to a document.</p>
-<h3>Package Specification</h3>
-<p><tt>IAnnotationModels</tt> manage <tt>Annotations</tt>. 
-  When an annotation model is connected to an <tt>IDocument</tt>, 
-  any change to the document is reflected in the position of the managed annotations. 
-  Implementers of <tt>IAnnotationModelListener</tt> 
-  registered with an <tt>IAnnotationModel</tt> 
-  object get informed about changes of the model in respect to annotations.</p>
-</body></html>
\ No newline at end of file
--- a/dwtx/jface/text/source/projection/ProjectionAnnotation.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionAnnotation.d	Mon Sep 08 00:51:37 2008 +0200
@@ -157,10 +157,9 @@
 
     private void initializeImages(Display display) {
         if (fgCollapsedImage is null) {
-
-            ImageDescriptor descriptor= ImageDescriptor.createFromFile( getImportData!("images/collapsed.gif")); //$NON-NLS-1$
+            ImageDescriptor descriptor= ImageDescriptor.createFromFile( getImportData!("dwtx.jface.text.source.projection.collapsed.gif")); //$NON-NLS-1$
             fgCollapsedImage= descriptor.createImage(display);
-            descriptor= ImageDescriptor.createFromFile( getImportData!( "images/expanded.gif")); //$NON-NLS-1$
+            descriptor= ImageDescriptor.createFromFile( getImportData!( "dwtx.jface.text.source.projection.expanded.gif")); //$NON-NLS-1$
             fgExpandedImage= descriptor.createImage(display);
 
             display.disposeExec(new DisplayDisposeRunnable());
--- a/dwtx/jface/text/source/projection/ProjectionAnnotationHover.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionAnnotationHover.d	Mon Sep 08 00:51:37 2008 +0200
@@ -52,8 +52,8 @@
  * @since 3.0
  */
 class ProjectionAnnotationHover : IAnnotationHover, IAnnotationHoverExtension, IInformationProviderExtension2 {
-    
-    
+
+
     private IInformationControlCreator fInformationControlCreator;
     private IInformationControlCreator fInformationPresenterControlCreator;
 
@@ -65,7 +65,7 @@
     public void setHoverControlCreator(IInformationControlCreator creator) {
         fInformationControlCreator= creator;
     }
-    
+
     /**
      * Sets the information presenter control creator for this projection annotation hover.
      *
@@ -156,7 +156,7 @@
      * @see dwtx.jface.text.source.IAnnotationHoverExtension#getHoverInfo(dwtx.jface.text.source.ISourceViewer, dwtx.jface.text.source.ILineRange, int)
      */
     public Object getHoverInfo(ISourceViewer sourceViewer, ILineRange lineRange, int visibleLines) {
-        return getProjectionTextAtLine(sourceViewer, lineRange.getStartLine(), visibleLines);
+        return stringcast(getProjectionTextAtLine(sourceViewer, lineRange.getStartLine(), visibleLines));
     }
 
     /*
--- a/dwtx/jface/text/source/projection/ProjectionAnnotationModel.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionAnnotationModel.d	Mon Sep 08 00:51:37 2008 +0200
@@ -118,7 +118,7 @@
 
     /**
      * Collapses all annotations that overlap with the given range and are collapsed.
-     * 
+     *
      * @param offset the range offset
      * @param length the range length
      * @return <code>true</code> if any annotation has been collapse, <code>false</code>
@@ -147,7 +147,7 @@
 
         return collapsing;
     }
-    
+
     /**
      * Expands all annotations that overlap with the given range and are collapsed. Fires a model change event if
      * requested.
@@ -158,7 +158,7 @@
      *            should be fired, <code>false</code> otherwise
      * @return <code>true</code> if any annotation has been expanded, <code>false</code> otherwise
      */
-    protected bool expandAll(int offset, int length, bool fireModelChanged) {
+    protected bool expandAll(int offset, int length, bool fireModelChanged_) {
 
         bool expanding= false;
 
@@ -175,7 +175,7 @@
             }
         }
 
-        if (expanding && fireModelChanged)
+        if (expanding && fireModelChanged_)
             fireModelChanged();
 
         return expanding;
--- a/dwtx/jface/text/source/projection/ProjectionRulerColumn.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionRulerColumn.d	Mon Sep 08 00:51:37 2008 +0200
@@ -202,20 +202,20 @@
         // install mouse move listener
         control.addMouseMoveListener(new class()  MouseMoveListener {
             public void mouseMove(MouseEvent e) {
-                bool redraw= false;
+                bool redraw_= false;
                 ProjectionAnnotation annotation= findAnnotation(toDocumentLineNumber(e.y), false);
                 if (annotation !is fCurrentAnnotation) {
                     if (fCurrentAnnotation !is null) {
                         fCurrentAnnotation.setRangeIndication(false);
-                        redraw= true;
+                        redraw_= true;
                     }
                     fCurrentAnnotation= annotation;
                     if (fCurrentAnnotation !is null && !fCurrentAnnotation.isCollapsed()) {
                         fCurrentAnnotation.setRangeIndication(true);
-                        redraw= true;
+                        redraw_= true;
                     }
                 }
-                if (redraw)
+                if (redraw_)
                     redraw();
             }
         });
--- a/dwtx/jface/text/source/projection/ProjectionSummary.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionSummary.d	Mon Sep 08 00:51:37 2008 +0200
@@ -104,7 +104,7 @@
     private IAnnotationAccess fAnnotationAccess;
     private List fConfiguredAnnotationTypes;
 
-    private Object fLock= new Object();
+    private Object fLock;
     private IProgressMonitor fProgressMonitor;
     private /+volatile+/ Summarizer fSummarizer;
 
@@ -115,7 +115,9 @@
      * @param annotationAccess the annotation access
      */
     public this(ProjectionViewer projectionViewer, IAnnotationAccess annotationAccess) {
-        super();
+//         super();
+        fLock= new Object();
+
         fProjectionViewer= projectionViewer;
         fAnnotationAccess= annotationAccess;
     }
@@ -290,7 +292,7 @@
                 size= fConfiguredAnnotationTypes.size();
                 map= new HashMap();
                 for (int i= 0; i < size; i++) {
-                    String type= cast(String) fConfiguredAnnotationTypes.get(i);
+                    String type= stringcast( fConfiguredAnnotationTypes.get(i));
                     map.put(type, new AnnotationBag(type));
                 }
             }
@@ -324,7 +326,7 @@
         AnnotationBag bag= cast(AnnotationBag) bagMap.get(annotationType);
         if (bag is null && cast(IAnnotationAccessExtension)fAnnotationAccess ) {
             IAnnotationAccessExtension extension= cast(IAnnotationAccessExtension) fAnnotationAccess;
-            Object[] superTypes= extension.getSupertypes(annotationType);
+            Object[] superTypes= extension.getSupertypes(stringcast(annotationType));
             for (int i= 0; i < superTypes.length && bag is null; i++) {
                 bag= cast(AnnotationBag) bagMap.get(superTypes[i]);
             }
--- a/dwtx/jface/text/source/projection/ProjectionSupport.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionSupport.d	Mon Sep 08 00:51:37 2008 +0200
@@ -61,7 +61,17 @@
      * Key of the projection annotation model inside the visual annotation
      * model. Also internally used as key for the projection drawing strategy.
      */
-    public const static Object PROJECTION= new Object();
+    private static Object PROJECTION_;
+    public static Object PROJECTION(){
+        if( PROJECTION_ is null ){
+            synchronized(ProjectionSupport.classinfo){
+                if( PROJECTION_ is null ){
+                    PROJECTION_ = new Object();
+                }
+            }
+        }
+        return PROJECTION_;
+    }
 
     private static class ProjectionAnnotationsPainter : AnnotationPainter {
 
@@ -112,7 +122,7 @@
                         int line= content.getLineAtOffset(offset);
                         int lineStart= content.getOffsetAtLine(line);
                         String text= content.getLine(line);
-                        int lineLength= text is null ? 0 : text.length();
+                        int lineLength= text is null ? 0 : text.length;
                         int lineEnd= lineStart + lineLength;
                         Point p= textWidget.getLocationAtOffset(lineEnd);
 
@@ -313,14 +323,14 @@
         if (fPainter is null) {
             fPainter= new ProjectionAnnotationsPainter(fViewer, fAnnotationAccess);
             fPainter.addDrawingStrategy(PROJECTION, getDrawingStrategy());
-            fPainter.addAnnotationType(ProjectionAnnotation.TYPE, PROJECTION);
-            fPainter.setAnnotationTypeColor(ProjectionAnnotation.TYPE, fSharedTextColors.getColor(getColor()));
+            fPainter.addAnnotationType(stringcast(ProjectionAnnotation.TYPE), PROJECTION);
+            fPainter.setAnnotationTypeColor(stringcast(ProjectionAnnotation.TYPE), fSharedTextColors.getColor(getColor()));
             fViewer.addPainter(fPainter);
         }
 
         if (fColumn is null) {
             fColumn= new ProjectionRulerColumn(9, fAnnotationAccess);
-            fColumn.addAnnotationType(ProjectionAnnotation.TYPE);
+            fColumn.addAnnotationType(stringcast(ProjectionAnnotation.TYPE));
             fColumn.setHover(createProjectionAnnotationHover());
             fViewer.addVerticalRulerColumn(fColumn);
         }
@@ -350,7 +360,7 @@
         if (fSummarizableTypes !is null) {
             int size= fSummarizableTypes.size();
             for (int i= 0; i < size; i++)
-                summary.addAnnotationType(cast(String) fSummarizableTypes.get(i));
+                summary.addAnnotationType(stringcast(fSummarizableTypes.get(i)));
         }
         return summary;
     }
--- a/dwtx/jface/text/source/projection/ProjectionViewer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/ProjectionViewer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -25,8 +25,8 @@
 
 
 import dwt.dwthelper.utils;
-
 import dwtx.dwtxhelper.Collection;
+import tango.core.Exception;
 
 
 
@@ -87,6 +87,34 @@
  */
 public class ProjectionViewer : SourceViewer , ITextViewerExtension5 {
 
+    public override IRegion getModelCoverage() {
+        return super.getModelCoverage();
+    }
+    public override int modelLine2WidgetLine(int modelLine) {
+        return super.modelLine2WidgetLine(modelLine);
+    }
+    public override int modelOffset2WidgetOffset(int modelOffset) {
+        return super.modelOffset2WidgetOffset(modelOffset);
+    }
+    public override IRegion modelRange2WidgetRange(IRegion modelRange) {
+        return super.modelRange2WidgetRange(modelRange);
+    }
+    protected override IRegion modelRange2WidgetRange(Position modelPosition) {
+        return super.modelRange2WidgetRange(modelPosition);
+    }
+    public override int widgetOffset2ModelOffset(int widgetOffset) {
+        return super.widgetOffset2ModelOffset(widgetOffset);
+    }
+    public override IRegion widgetRange2ModelRange(IRegion widgetRange) {
+        return super.widgetRange2ModelRange(widgetRange);
+    }
+    public int widgetLine2ModelLine(int widgetLine) {
+        return super.widgetLine2ModelLine(widgetLine);
+    }
+    public int widgetLineOfWidgetOffset(int widgetOffset) {
+        return super.widgetLineOfWidgetOffset(widgetOffset);
+    }
+
     private static const int BASE= INFORMATION; // see ISourceViewer.INFORMATION
 
     /** Operation constant for the expand operation. */
@@ -186,9 +214,9 @@
      */
     private static class ProjectionCommand {
 
-        final static int ADD= 0;
-        final static int REMOVE= 1;
-        final static int INVALIDATE_PRESENTATION= 2;
+        const static int ADD= 0;
+        const static int REMOVE= 1;
+        const static int INVALIDATE_PRESENTATION= 2;
 
         ProjectionDocument fProjection;
         int fType;
@@ -240,9 +268,12 @@
         final static int REDRAW_COSTS= 15;
         final static int INVALIDATION_COSTS= 10;
 
-        List fList= new ArrayList(15);
+        List fList;
         int fExpectedExecutionCosts= -1;
 
+        this(){
+            fList= new ArrayList(15);
+        }
 
         void add(ProjectionCommand command) {
             fList.add(command);
@@ -460,13 +491,13 @@
      */
     public void addProjectionListener(IProjectionListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fProjectionListeners is null)
             fProjectionListeners= new ArrayList();
 
-        if (!fProjectionListeners.contains(listener))
-            fProjectionListeners.add(listener);
+        if (!fProjectionListeners.contains(cast(Object)listener))
+            fProjectionListeners.add(cast(Object)listener);
     }
 
     /**
@@ -478,10 +509,10 @@
      */
     public void removeProjectionListener(IProjectionListener listener) {
 
-        Assert.isNotNull(listener);
+        Assert.isNotNull(cast(Object)listener);
 
         if (fProjectionListeners !is null) {
-            fProjectionListeners.remove(listener);
+            fProjectionListeners.remove(cast(Object)listener);
             if (fProjectionListeners.size() is 0)
                 fProjectionListeners= null;
         }
@@ -888,7 +919,7 @@
                 try {
                     catchupWithProjectionAnnotationModel(event);
                 } catch (BadLocationException x) {
-                    throw new IllegalArgumentException();
+                    throw new IllegalArgumentException(null);
                 }
 
             } else
@@ -927,7 +958,7 @@
                                     try {
                                         catchupWithProjectionAnnotationModel(null);
                                     } catch (BadLocationException x1) {
-                                        throw new IllegalArgumentException();
+                                        throw new IllegalArgumentException(null);
                                     } finally {
                                         synchronized (fLock) {
                                             fPendingRequests.clear();
@@ -1548,7 +1579,7 @@
         IDocument document= getDocument();
         int length= document is null ? 0 : document.getLength();
         IRegion visible= getModelCoverage();
-        bool isSegmented= visible !is null && !visible.equals(new Region(0, length));
+        bool isSegmented= visible !is null && !(cast(Object)visible).opEquals(new Region(0, length));
         return isSegmented;
     }
 
--- a/dwtx/jface/text/source/projection/SourceViewerInformationControl.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/source/projection/SourceViewerInformationControl.d	Mon Sep 08 00:51:37 2008 +0200
@@ -95,7 +95,7 @@
      * styles are applied to the created shell. The given styles are applied to the created styled
      * text widget. The text widget will be initialized with the given font. The status field will
      * contain the given text or be hidden.
-     * 
+     *
      * @param parent the parent shell
      * @param isResizable <code>true</code> if resizable
      * @param symbolicFontName the symbolic font name
@@ -189,8 +189,8 @@
      * @param input the input object
      */
     public void setInput(Object input) {
-        if ( cast(String)input )
-            setInformation(cast(String)input);
+        if ( cast(ArrayWrapperString)input )
+            setInformation(stringcast(input));
         else
             setInformation(null);
     }
@@ -205,7 +205,7 @@
         }
 
         IDocument doc= new Document(content);
-        fViewer.setInput(doc);
+        fViewer.setInput(cast(Object)doc);
     }
 
     /*
@@ -353,7 +353,7 @@
     public bool hasContents() {
         return fText.getCharCount() > 0;
     }
-    
+
     /*
      * @see dwtx.jface.text.IInformationControlExtension3#computeTrim()
      * @since 3.4
@@ -366,7 +366,7 @@
 
     /**
      * Adds the internal trimmings to the given trim of the shell.
-     * 
+     *
      * @param trim the shell's trim, will be updated
      * @since 3.4
      */
@@ -435,7 +435,7 @@
     public bool isVisible() {
         return fShell !is null && !fShell.isDisposed() && fShell.isVisible();
     }
-    
+
     /*
      * @see dwtx.jface.text.IInformationControlExtension5#computeSizeConstraints(int, int)
      */
--- a/dwtx/jface/text/source/projection/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html><head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]" name="GENERATOR"><title>projections</title></head>
-
-<body>
-<p>This package provides the UI part for projection documents of which the most important part is the projection viewer. A projection  viewer
-is a text viewer that allows to expand and collapse folded regions defined by a projection document. This package also introduces a projection
-annotation model, projection annotations. The projection viewer offers support to show a summary for a folded region.
-</p>
-<h3>Package Specification</h3>
-<p><tt>ProjectionViewer</tt> is a specialized <tt>SourceViewer</tt> that can display line-based folding based on a <tt>ProjectionDocument</tt>. To
-do this it uses supporting classes like <tt>IProjectionListener</tt>, <tt>IProjectionPosition</tt>, <tt>ProjectionAnnotation</tt> and others.
-</p>
-</body></html>
\ No newline at end of file
--- a/dwtx/jface/text/templates/ContextTypeRegistry.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/ContextTypeRegistry.d	Mon Sep 08 00:51:37 2008 +0200
@@ -51,8 +51,11 @@
 public class ContextTypeRegistry {
 
     /** all known context types */
-    private const Map fContextTypes= new LinkedHashMap();
+    private const Map fContextTypes;
 
+    this(){
+        fContextTypes= new LinkedHashMap();
+    }
     /**
      * Adds a context type to the registry. If there already is a context type
      * with the same ID registered, it is replaced.
--- a/dwtx/jface/text/templates/DocumentTemplateContext.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/DocumentTemplateContext.d	Mon Sep 08 00:51:37 2008 +0200
@@ -99,7 +99,7 @@
     public this(TemplateContextType type, IDocument document, Position position) {
         super(type);
 
-        Assert.isNotNull(document);
+        Assert.isNotNull(cast(Object)document);
         Assert.isNotNull(position);
         Assert.isTrue(position.getOffset() <= document.getLength());
 
--- a/dwtx/jface/text/templates/GlobalTemplateVariables.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/GlobalTemplateVariables.d	Mon Sep 08 00:51:37 2008 +0200
@@ -35,8 +35,8 @@
 
 import dwt.dwthelper.utils;
 
-import com.ibm.icu.text.DateFormat;
-import com.ibm.icu.util.Calendar;
+// import com.ibm.icu.text.DateFormat;
+// import com.ibm.icu.util.Calendar;
 
 /**
  * Global variables which are available in any context.
@@ -138,7 +138,9 @@
             super("date", TextTemplateMessages.getString("GlobalVariables.variable.description.date")); //$NON-NLS-1$ //$NON-NLS-2$
         }
         protected String resolve(TemplateContext context) {
-            return DateFormat.getDateInstance().format(new java.util.Date());
+            implMissing(__FILE__,__LINE__);
+            return null;
+            //return DateFormat.getDateInstance().format(new java.util.Date());
         }
     }
 
@@ -153,7 +155,9 @@
             super("year", TextTemplateMessages.getString("GlobalVariables.variable.description.year")); //$NON-NLS-1$ //$NON-NLS-2$
         }
         protected String resolve(TemplateContext context) {
-            return Integer.toString(Calendar.getInstance().get(Calendar.YEAR));
+            implMissing(__FILE__,__LINE__);
+            return null;
+            //return Integer.toString(Calendar.getInstance().get(Calendar.YEAR));
         }
     }
 
@@ -172,7 +176,9 @@
          * {@inheritDoc}
          */
         protected String resolve(TemplateContext context) {
-            return DateFormat.getTimeInstance().format(new java.util.Date());
+            implMissing(__FILE__,__LINE__);
+            return null;
+            //return DateFormat.getTimeInstance().format(new java.util.Date());
         }
     }
 
--- a/dwtx/jface/text/templates/JFaceTextTemplateMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2005 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-# template proposal
-TemplateProposal.displayString= {0} - {1}
-TemplateProposal.errorDialog.title=Template Evaluation Error
--- a/dwtx/jface/text/templates/Template.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/Template.d	Mon Sep 08 00:51:37 2008 +0200
@@ -47,6 +47,9 @@
  */
 public class Template {
 
+    private alias .toHash toHash;
+    private alias .equals equals;
+
     /** The name of this template */
     private /*final*/ String fName;
     /** A description of this template */
@@ -56,7 +59,7 @@
     /** The template pattern. */
     private /*final*/ String fPattern;
     /**
-     * The auto insertable property. 
+     * The auto insertable property.
      * @since 3.1
      */
     private const bool fIsAutoInsertable;
@@ -228,7 +231,7 @@
 
     /**
      * Returns the auto insertable property of the template.
-     * 
+     *
      * @return the auto insertable property of the template
      * @since 3.1
      */
--- a/dwtx/jface/text/templates/TemplateBuffer.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateBuffer.d	Mon Sep 08 00:51:37 2008 +0200
@@ -69,7 +69,7 @@
      */
     public final void setContent(String string, TemplateVariable[] variables) {
         Assert.isNotNull(string);
-        Assert.isNotNull(variables);
+//         Assert.isNotNull(variables);
 
         // XXX assert non-overlapping variable properties
 
--- a/dwtx/jface/text/templates/TemplateCompletionProcessor.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateCompletionProcessor.d	Mon Sep 08 00:51:37 2008 +0200
@@ -67,7 +67,17 @@
         }
     }
 
-    private static const Comparator fgProposalComparator= new ProposalComparator();
+    private static Comparator fgProposalComparator_;
+    private static Comparator fgProposalComparator(){
+        if(fgProposalComparator_ is null ) {
+            synchronized( TemplateCompletionProcessor.classinfo ){
+                if(fgProposalComparator_ is null ) {
+                    fgProposalComparator_ = new ProposalComparator();
+                }
+            }
+        }
+        return fgProposalComparator_;
+    }
 
     /*
      * @see dwtx.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(dwtx.jface.text.ITextViewer,
@@ -100,12 +110,12 @@
                 continue;
             }
             if (template_.matches(prefix, context.getContextType().getId()))
-                matches.add(createProposal(template_, context, cast(IRegion) region, getRelevance(template_, prefix)));
+                matches.add( cast(Object) createProposal(template_, context, cast(IRegion) region, getRelevance(template_, prefix)));
         }
 
         Collections.sort(matches, fgProposalComparator);
 
-        return (ICompletionProposal[]) matches.toArray(new ICompletionProposal[matches.size()]);
+        return arraycast!(ICompletionProposal)( matches.toArray());
     }
 
     /**
--- a/dwtx/jface/text/templates/TemplateContext.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateContext.d	Mon Sep 08 00:51:37 2008 +0200
@@ -53,7 +53,7 @@
     /** The context type of this context */
     private const TemplateContextType fContextType;
     /** Additional variables. */
-    private const Map fVariables= new HashMap();
+    private const Map fVariables;
     /** A flag to indicate that the context should not be modified. */
     private bool fReadOnly;
 
@@ -63,6 +63,7 @@
      * @param contextType the context type of this context
      */
     protected this(TemplateContextType contextType) {
+        fVariables= new HashMap();
         fContextType= contextType;
         fReadOnly= true;
     }
@@ -111,7 +112,7 @@
      * @return returns the value of the variable, <code>null</code> if the variable was not defined
      */
     public String getVariable(String name) {
-        return cast(String) fVariables.get(name);
+        return stringcast( fVariables.get(name));
     }
 
     /**
--- a/dwtx/jface/text/templates/TemplateContextType.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateContextType.d	Mon Sep 08 00:51:37 2008 +0200
@@ -70,7 +70,7 @@
     private /* final */ String fId= null;
 
     /** Variable resolvers used by this content type. */
-    private const Map fResolvers= new HashMap();
+    private const Map fResolvers;
 
     /** The name of the context type. */
     private String fName= null;
@@ -92,6 +92,8 @@
      * @param name the name of the context type
      */
     public this(String id, String name) {
+        fResolvers= new HashMap();
+
         Assert.isNotNull(id);
         Assert.isNotNull(name);
         fId= id;
@@ -100,7 +102,7 @@
 
     /**
      * Returns the id of the context type.
-     * 
+     *
      * @return the id of the receiver
      */
     public String getId() {
@@ -127,6 +129,7 @@
      * </p>
      */
     public this() {
+        fResolvers= new HashMap();
     }
 
     /**
@@ -271,8 +274,8 @@
 
         IDocument document= new Document(buffer.getString());
         MultiTextEdit edit= new MultiTextEdit(0, document.getLength());
-        edit.addChildren((TextEdit[]) positions.toArray(new TextEdit[positions.size()]));
-        edit.addChildren((TextEdit[]) edits.toArray(new TextEdit[edits.size()]));
+        edit.addChildren(arraycast!(TextEdit)( positions.toArray()));
+        edit.addChildren(arraycast!(TextEdit)( edits.toArray()));
         edit.apply(document, TextEdit.UPDATE_REGIONS);
 
         positionsToVariables(positions, variables);
@@ -282,7 +285,7 @@
 
     /**
      * Resolves a single variable in a context. Resolving is delegated to the registered resolver.
-     * 
+     *
      * @param variable the variable to resolve
      * @param context the context in which to resolve the variable
      * @since 3.3
--- a/dwtx/jface/text/templates/TemplateException.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateException.d	Mon Sep 08 00:51:37 2008 +0200
@@ -62,7 +62,7 @@
      * Creates a new template exception.
      */
     public this() {
-        super();
+        super(null);
     }
 
     /**
@@ -80,7 +80,7 @@
      * @param message the message describing the problem that arose
      * @param cause the original exception
      */
-    public this(String message, Throwable cause) {
+    public this(String message, Exception cause) {
         super(message, cause);
     }
 
@@ -89,7 +89,7 @@
      *
      * @param cause the original exception
      */
-    public this(Throwable cause) {
-        super(cause);
+    public this(Exception cause) {
+        super(null, cause);
     }
 }
--- a/dwtx/jface/text/templates/TemplateProposal.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateProposal.d	Mon Sep 08 00:51:37 2008 +0200
@@ -106,7 +106,7 @@
     public this(Template template_, TemplateContext context, IRegion region, Image image, int relevance) {
         Assert.isNotNull(template_);
         Assert.isNotNull(context);
-        Assert.isNotNull(region);
+        Assert.isNotNull(cast(Object)region);
 
         fTemplate= template_;
         fContext= context;
@@ -256,19 +256,22 @@
 
     }
 
-    private void ensurePositionCategoryInstalled(final IDocument document, LinkedModeModel model) {
+    private void ensurePositionCategoryInstalled(IDocument document, LinkedModeModel model) {
         if (!document.containsPositionCategory(getCategory())) {
             document.addPositionCategory(getCategory());
             fUpdater= new InclusivePositionUpdater(getCategory());
             document.addPositionUpdater(fUpdater);
 
-            model.addLinkingListener(new class()  ILinkedModeListener {
-
+            model.addLinkingListener(new class(document)  ILinkedModeListener {
+                IDocument document_;
+                this( IDocument a ){
+                    document_=a;
+                }
                 /*
                  * @see dwtx.jface.text.link.ILinkedModeListener#left(dwtx.jface.text.link.LinkedModeModel, int)
                  */
                 public void left(LinkedModeModel environment, int flags) {
-                    ensurePositionCategoryRemoved(document);
+                    ensurePositionCategoryRemoved(document_);
                 }
 
                 public void suspend(LinkedModeModel environment) {}
@@ -289,7 +292,7 @@
     }
 
     private String getCategory() {
-        return "TemplateProposalCategory_" + toString(); //$NON-NLS-1$
+        return "TemplateProposalCategory_" ~ toString(); //$NON-NLS-1$
     }
 
     private int getCaretOffset(TemplateBuffer buffer) {
@@ -375,7 +378,7 @@
     public String getDisplayString() {
         if (fDisplayString is null) {
             String[] arguments= [ fTemplate.getName(), fTemplate.getDescription() ];
-            fDisplayString= JFaceTextTemplateMessages.getFormattedString("TemplateProposal.displayString", arguments); //$NON-NLS-1$
+            fDisplayString= JFaceTextTemplateMessages.getFormattedString("TemplateProposal.displayString", stringcast(arguments)); //$NON-NLS-1$
         }
         return fDisplayString;
     }
@@ -395,7 +398,7 @@
     }
 
     private void openErrorDialog(Shell shell, Exception e) {
-        MessageDialog.openError(shell, JFaceTextTemplateMessages.getString("TemplateProposal.errorDialog.title"), e.getMessage()); //$NON-NLS-1$
+        MessageDialog.openError(shell, JFaceTextTemplateMessages.getString("TemplateProposal.errorDialog.title"), e.msg); //$NON-NLS-1$
     }
 
     /**
@@ -446,7 +449,7 @@
      * @see dwtx.jface.text.contentassist.ICompletionProposalExtension3#getPrefixCompletionText(dwtx.jface.text.IDocument, int)
      */
     public CharSequence getPrefixCompletionText(IDocument document, int completionOffset) {
-        return fTemplate.getName();
+        return new StringCharSequence( fTemplate.getName() );
     }
 
     /*
--- a/dwtx/jface/text/templates/TemplateTranslator.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateTranslator.d	Mon Sep 08 00:51:37 2008 +0200
@@ -31,16 +31,9 @@
 import dwtx.jface.text.templates.TemplateVariableType; // packageimport
 import dwtx.jface.text.templates.TemplateVariableResolver; // packageimport
 
-
 import dwt.dwthelper.utils;
-
 import dwtx.dwtxhelper.Collection;
-
-
-
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import dwtx.dwtxhelper.regex;
 
 /**
  * The template translator translates a string into a template buffer. Regions marked as variables
@@ -63,7 +56,7 @@
  * <p>
  * Clients may only replace the <code>createVariable</code> method of this class.
  * </p>
- * 
+ *
  * @since 3.0
  */
 public class TemplateTranslator {
@@ -83,35 +76,56 @@
      * Regex pattern for argument
      * @since 3.4
      */
-    private static const String ARGUMENT= "(?:" + QUALIFIED_NAME + ")|(?:" + ARGUMENT_TEXT + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    private static const String ARGUMENT= "(?:" ~ QUALIFIED_NAME ~ ")|(?:" ~ ARGUMENT_TEXT ~ ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
     /**
      * Precompiled regex pattern for qualified names.
      * @since 3.3
      */
-    private static const Pattern PARAM_PATTERN= Pattern.compile(ARGUMENT);
+    private static Pattern PARAM_PATTERN_;
+    private static Pattern PARAM_PATTERN(){
+        if( PARAM_PATTERN_ is null ){
+            synchronized( TemplateTranslator.classinfo ){
+                if( PARAM_PATTERN_ is null ){
+                    PARAM_PATTERN_ = Pattern.compile(ARGUMENT);
+                }
+            }
+        }
+        return PARAM_PATTERN_;
+    }
     /**
      * Precompiled regex pattern for valid dollar escapes (dollar literals and variables) and
      * (invalid) single dollars.
      * @since 3.3
      */
-    private static final Pattern ESCAPE_PATTERN= Pattern.compile(
-            "\\$\\$|\\$\\{\\s*+" + // $$|${                                                         //$NON-NLS-1$
-            "(\\w*+)" + // variable id group (1)                                                    //$NON-NLS-1$
-            "\\s*+(?::\\s*+" + // :                                                                 //$NON-NLS-1$
-            "(" + QUALIFIED_NAME + ")" + // variable type group (2)                                 //$NON-NLS-1$ //$NON-NLS-2$
-            "\\s*+(?:\\(\\s*+" + // (                                                               //$NON-NLS-1$
-            "((?:(?:" + ARGUMENT + ")\\s*+,\\s*+)*(?:" + ARGUMENT + "))" + // arguments group (3)   //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-            "\\s*+\\))?\\s*+)?\\}|\\$"); // )}|$                                                    //$NON-NLS-1$
+    private static Pattern ESCAPE_PATTERN_;
+    private static Pattern ESCAPE_PATTERN(){
+        if( ESCAPE_PATTERN_ is null ){
+            synchronized( TemplateTranslator.classinfo ){
+                if( ESCAPE_PATTERN_ is null ){
+                    ESCAPE_PATTERN_ = Pattern.compile(
+                        "\\$\\$|\\$\\{\\s*+" ~ // $$|${                                                         //$NON-NLS-1$
+                        "(\\w*+)" ~ // variable id group (1)                                                    //$NON-NLS-1$
+                        "\\s*+(?::\\s*+" ~ // :                                                                 //$NON-NLS-1$
+                        "(" ~ QUALIFIED_NAME ~ ")" ~ // variable type group (2)                                 //$NON-NLS-1$ //$NON-NLS-2$
+                        "\\s*+(?:\\(\\s*+" ~ // (                                                               //$NON-NLS-1$
+                        "((?:(?:" ~ ARGUMENT ~ ")\\s*+,\\s*+)*(?:" ~ ARGUMENT ~ "))" ~ // arguments group (3)   //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+                        "\\s*+\\))?\\s*+)?\\}|\\$"); // )}|$                                                    //$NON-NLS-1$
+                }
+            }
+        }
+        return ESCAPE_PATTERN_;
+    }
     /**
      * @since 3.3
      */
     private final class VariableDescription {
-        final List fOffsets= new ArrayList(5);
-        final String fName;
+        const List fOffsets;
+        const String fName;
         TemplateVariableType fType;
 
         this(String name, TemplateVariableType type) {
+            fOffsets= new ArrayList(5);
             fName= name;
             fType= type;
         }
@@ -122,7 +136,7 @@
             if (fType is null)
                 fType= type;
             if (!type.equals(fType))
-                fail(TextTemplateMessages.getFormattedString("TemplateTranslator.error.incompatible.type", fName)); //$NON-NLS-1$
+                fail(TextTemplateMessages.getFormattedString("TemplateTranslator.error.incompatible.type", stringcast(fName))); //$NON-NLS-1$
         }
     }
 
@@ -138,7 +152,7 @@
     /**
      * Returns an error message if an error occurred for the last translation, <code>null</code>
      * otherwise.
-     * 
+     *
      * @return the error message if an error occurred during the most recent translation,
      *         <code>null</code> otherwise
      */
@@ -149,7 +163,7 @@
     /**
      * Translates a template to a <code>TemplateBuffer</code>. <code>null</code> is returned if
      * there was an error. <code>getErrorMessage()</code> retrieves the associated error message.
-     * 
+     *
      * @param template the template to translate.
      * @return returns the template buffer corresponding to the string
      * @see #getErrorMessage()
@@ -163,7 +177,7 @@
      * Translates a template string to <code>TemplateBuffer</code>. <code>null</code> is
      * returned if there was an error. <code>getErrorMessage()</code> retrieves the associated
      * error message.
-     * 
+     *
      * @param string the string to translate.
      * @return returns the template buffer corresponding to the string
      * @see #getErrorMessage()
@@ -175,18 +189,18 @@
 
     /**
      * Internal parser.
-     * 
+     *
      * @param string the string to parse
      * @return the parsed <code>TemplateBuffer</code>
      * @throws TemplateException if the string does not conform to the template format
      */
     private TemplateBuffer parse(String string)  {
-        
+
         fErrorMessage= null;
         final StringBuffer buffer= new StringBuffer(string.length());
         final Matcher matcher= ESCAPE_PATTERN.matcher(string);
         final Map variables= new LinkedHashMap();
-        
+
         int complete= 0;
         while (matcher.find()) {
             // append any verbatim text
@@ -204,9 +218,9 @@
                 String typeName= matcher.group(2);
                 String params= matcher.group(3);
                 TemplateVariableType type= createType(typeName, params);
-                
+
                 updateOrCreateVariable(variables, name, type, buffer.length());
-                
+
                 buffer.append(name);
             }
             complete= matcher.end();
@@ -237,7 +251,7 @@
             params.add(argument);
         }
 
-        return new TemplateVariableType(typeName, (String[]) params.toArray(new String[params.size()]));
+        return new TemplateVariableType(typeName, stringcast( params.toArray()));
     }
 
     private void fail(String message)  {
@@ -249,7 +263,7 @@
      * If there is no variable named <code>name</code>, a new variable with the given type, name
      * and offset is created. If one exists, the offset is added to the variable and the type is
      * merged with the existing type.
-     * 
+     *
      * @param variables the variables by variable name
      * @param name the name of the variable
      * @param type the variable type, <code>null</code> for not defined
@@ -270,7 +284,7 @@
 
     /**
      * Creates proper {@link TemplateVariable}s from the variable descriptions.
-     * 
+     *
      * @param variables the variable descriptions by variable name
      * @return the corresponding variables
      * @since 3.3
@@ -298,14 +312,14 @@
         fCurrentType= null; // avoid dangling reference
         return result;
     }
-    
+
     /**
      * Hook method to create new variables. Subclasses may override to supply their custom variable
      * type.
      * <p>
      * Clients may replace this method.
      * </p>
-     * 
+     *
      * @param type the type of the new variable.
      * @param name the name of the new variable.
      * @param offsets the offsets where the variable occurs in the template
@@ -315,14 +329,14 @@
     protected TemplateVariable createVariable(String type, String name, int[] offsets) {
         return createVariable(fCurrentType, name, offsets);
     }
-    
+
     /**
      * Hook method to create new variables. Subclasses may override to supply their custom variable
      * type.
      * <p>
      * Clients may replace this method.
      * </p>
-     * 
+     *
      * @param type the type of the new variable.
      * @param name the name of the new variable.
      * @param offsets the offsets where the variable occurs in the template
--- a/dwtx/jface/text/templates/TemplateVariableResolver.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateVariableResolver.d	Mon Sep 08 00:51:37 2008 +0200
@@ -60,7 +60,7 @@
      * @param type the name of the type
      * @param description the description for the type
      */
-    protected this(String type, String description) {
+    /+protected+/ this(String type, String description) {
         setType(type);
         setDescription(description);
     }
--- a/dwtx/jface/text/templates/TemplateVariableType.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateVariableType.d	Mon Sep 08 00:51:37 2008 +0200
@@ -45,7 +45,7 @@
 /**
  * Value object that represents the type of a template variable. A type is defined by its name and
  * may have parameters.
- * 
+ *
  * @since 3.3
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
@@ -64,12 +64,12 @@
         Assert.isLegal(name !is null);
         Assert.isLegal(params !is null);
         fName= name;
-        fParams= Collections.unmodifiableList(new ArrayList(Arrays.asList(params)));
+        fParams= Collections.unmodifiableList(new ArrayList(Arrays.asList(stringcast(params))));
     }
 
     /**
      * Returns the type name of this variable type.
-     * 
+     *
      * @return the type name of this variable type
      */
     public String getName() {
@@ -78,7 +78,7 @@
 
     /**
      * Returns the unmodifiable and possibly empty list of parameters (element type: {@link String})
-     * 
+     *
      * @return the list of parameters
      */
     public List getParams() {
@@ -88,10 +88,10 @@
     /*
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    public bool equals(Object obj) {
+    public override int opEquals(Object obj) {
         if ( cast(TemplateVariableType)obj ) {
             TemplateVariableType other= cast(TemplateVariableType) obj;
-            return other.fName.equals(fName) && other.fParams.equals(fParams);
+            return other.fName.equals(fName) && other.fParams.opEquals(cast(Object)fParams);
         }
         return false;
     }
@@ -100,14 +100,14 @@
      * @see java.lang.Object#hashCode()
      */
     public override hash_t toHash() {
+        alias .toHash toHash;
         return fName.toHash() + fParams.toHash();
     }
-
     /*
      * @see java.lang.Object#toString()
      * @since 3.3
      */
     public override String toString() {
-        return fName + fParams.toString();
+        return fName ~ (cast(Object)fParams).toString();
     }
 }
--- a/dwtx/jface/text/templates/TextTemplateMessages.properties	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-# template translator
-TemplateTranslator.error.incomplete.variable=Template has incomplete variables. Type '$$' if to enter the dollar character.
-TemplateTranslator.error.invalid.identifier=Template has invalid variable identifiers.
-TemplateTranslator.error.incompatible.type=Template variable ''{0}'' has incompatible types
-
-# global variables
-GlobalVariables.variable.description.cursor=The cursor position after editing template variables
-GlobalVariables.variable.description.dollar=The dollar symbol
-GlobalVariables.variable.description.date=Current date
-GlobalVariables.variable.description.year=Current year
-GlobalVariables.variable.description.time=Current time
-GlobalVariables.variable.description.user=User name
-GlobalVariables.variable.description.selectedWord= The selected word
-GlobalVariables.variable.description.selectedLines= The selected lines
--- a/dwtx/jface/text/templates/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1"
- http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <title>Templates</title>
-  <meta content="Template Infrastructure package description"
- name="description">
-</head>
-<body>
-Application programming interfaces for interaction
-with the Eclipse text editor template support.
-<h2>Templates</h2>
-<h3>Packages</h3>
-<ul>
-  <li><tt><big><strong>org.eclipse.jface.text.templates</strong></big></tt></li>
-  <li><tt><big><strong>org.eclipse.ui.workbench.texteditor.templates</strong></big></tt></li>
-  <li><tt><big><strong>org.eclipse.ui.editors.templates</strong></big></tt></li>
-</ul>
-<h3>Introduction</h3>
-Templates are shortcuts for frequently used fragments of text such as
-code patterns or complex text entities. They may contain variables
-which are only resolved at the time when the template is inserted
-within a context. Together with linked mode, inserting a template can
-create a on-the-fly edit mask within a text viewer.<br>
-<br>
-Templates are specified as text, variables are defined using the <tt>${variable}</tt>
-notation known from
-Ant, for example. The following snippet shows an example template for
-an instance check in Java:<br>
-<pre>if (${name} instanceof ${type}) {
-&nbsp;&nbsp;&nbsp; ${type} ${new_name} = (${type})${name};
-&nbsp;&nbsp;&nbsp; ${cursor}
-}
-</pre>
-In this template, the variables (<tt>name,type, ...</tt>) are resolved
-when inserted into java source and changing one variable instance will
-also change the other. When leaving linked mode, the caret is placed at
-the <tt>cursor</tt> variable.<br>
-<br>
-Template functionality can be added to a custom text editor by offering
-<tt>TemplateProposal</tt>s as content assist choices, which is
-simplified by using a subclass of <tt>TemplateCompletionProcessor</tt>. User template management can be
-offered by including a <tt>TemplatePreferencePage</tt> which uses a <tt>TemplateStore</tt> and <tt>ContextTypeRegistry</tt> as the
-underlying model to store templates. The <tt>org.eclipse.ui.editors.templates</tt>
-extension point can be used to allow other plug-ins to contribute
-templates to an editor. This is accomplished by using the <tt>ContributionTemplateStore</tt> and <tt>ContributionContextTypeRegistry</tt>
-subclasses of the above types.<br>
-<br>
-Template variables are resolved by a <tt>TemplateVariableResolver.</tt> <tt>GlobalTemplateVariables</tt> offers
-some default variables such as date, user, and selection, but advanced
-features such as resolving to language constructs can be performed in
-subclasses.<br>
-<h4>Classes</h4>
-<ul>
-  <li><tt>Template</tt> a template consists of name, context
-type identifier, and a pattern.</li>
-  <li><tt>TemplateTranslator</tt> and <tt>TemplateBuffer</tt> are used to
-parse the template grammar and don't need to be used usually.</li>
-  <li>A <tt>TemplateProposal </tt>can be
-offered in content assist, possibly created by a subclass of <tt>TemplateCompletionProcessor.</tt></li>
-  <li><tt>TemplateStore</tt> and <tt>ContextTypeRegistry</tt> manage a
-set of templates within a plug-in and offer ways to store them in the
-preferences or externally in XML streams via a <tt>TemplateReaderWriter</tt>.<br></li>
-  <li><tt>ContributionTemplateStore</tt> and <tt>ContributionContextTypeRegistry</tt>
-add awareness for the  <tt>org.eclipse.ui.editors.templates</tt>
-extension point.</li>
-  <li><tt>TemplatePreferencePage</tt> allows
-the user to access the templates within a <tt>TemplateStore.</tt></li>
-</ul>
-<ul>
-</ul>
-<h4>Example</h4>
-See the Template Editor Example in the <strong>org.eclipse.ui.examples.javaeditor</strong> project.<br>
-</body>
-</html>
--- a/dwtx/jface/text/templates/persistence/TemplateReaderWriter.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/persistence/TemplateReaderWriter.d	Mon Sep 08 00:51:37 2008 +0200
@@ -18,18 +18,11 @@
 
 
 import dwt.dwthelper.utils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
+import dwt.dwthelper.InputStream;
 import dwtx.dwtxhelper.Collection;
-
-
 import dwt.dwthelper.ResourceBundle;
 
-
+/+
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -48,6 +41,7 @@
 import org.w3c.dom.Text;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
++/
 
 import dwtx.core.runtime.Assert;
 import dwtx.jface.text.templates.Template;
@@ -209,7 +203,7 @@
                     break;
             }
 
-            return (TemplatePersistenceData[]) templates.toArray(new TemplatePersistenceData[templates.size()]);
+            return arraycast!(TemplatePersistenceData)( templates.toArray());
 
         } catch (ParserConfigurationException e) {
             Assert.isTrue(false);
--- a/dwtx/jface/text/templates/persistence/TemplateStore.d	Wed Aug 27 14:49:30 2008 +0200
+++ b/dwtx/jface/text/templates/persistence/TemplateStore.d	Mon Sep 08 00:51:37 2008 +0200
@@ -16,17 +16,9 @@
 import dwtx.jface.text.templates.persistence.TemplateReaderWriter; // packageimport
 import dwtx.jface.text.templates.persistence.TemplatePersistenceMessages; // packageimport
 
-
 import dwt.dwthelper.utils;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
 import dwtx.dwtxhelper.Collection;
 
-
-
 import dwtx.core.runtime.Assert;
 import dwtx.jface.preference.IPersistentPreferenceStore;
 import dwtx.jface.preference.IPreferenceStore;
@@ -215,7 +207,7 @@
 
         StringWriter output= new StringWriter();
         TemplateReaderWriter writer= new TemplateReaderWriter();
-        writer.save((TemplatePersistenceData[]) custom.toArray(new TemplatePersistenceData[custom.size()]), output);
+        writer.save(arraycast!(TemplatePersistenceData)( custom.toArray()), output);
 
         fIgnorePreferenceStoreChanges= true;
         try {
@@ -322,7 +314,7 @@
                 templates.add(data.getTemplate());
         }
 
-        return (Template[]) templates.toArray(new Template[templates.size()]);
+        return arraycast!(Template)( templates.toArray());
     }
 
     /**
@@ -386,7 +378,7 @@
                 datas.add(data);
         }
 
-        return (TemplatePersistenceData[]) datas.toArray(new TemplatePersistenceData[datas.size()]);
+        return arraycast!(TemplatePersistenceData)( datas.toArray());
     }
 
     /**
--- a/dwtx/jface/text/templates/persistence/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-  <meta content="text/html; charset=iso-8859-1"
- http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <title>Templates</title>
-  <meta content="Template Infrastructure package description"
- name="description">
-</head>
-<body>
-Provides persistence support for templates.
-<h3>Packages</h3>
-<ul>
-  <li><tt><big><strong>org.eclipse.jface.text.templates</strong></big></tt></li>
-  <li><tt><big><strong>org.eclipse.ui.workbench.texteditor.templates</strong></big></tt></li>
-  <li><tt><big><strong>org.eclipse.ui.editors.templates</strong></big></tt></li>
-</ul>
-<h3>Introduction</h3>
-Templates are shortcuts for frequently used fragments of text such as
-code patterns or complex text entities. They may contain variables
-which are only resolved at the time when the template is inserted
-within a context. Together with linked mode, inserting a template can
-create a on-the-fly edit mask within a text viewer.<br>
-<br>
-Templates are specified as text, variables are defined using the <tt>${variable}</tt>
-notation known from
-Ant, for example. The following snippet shows an example template for
-an instance check in Java:<br>
-<pre>if (${name} instanceof ${type}) {
-&nbsp;&nbsp;&nbsp; ${type} ${new_name} = (${type})${name};
-&nbsp;&nbsp;&nbsp; ${cursor}
-}
-</pre>
-In this template, the variables (<tt>name,type, ...</tt>) are resolved
-when inserted into java source and changing one variable instance will
-also change the other. When leaving linked mode, the caret is placed at
-the <tt>cursor</tt> variable.<br>
-<br>
-Template functionality can be added to a custom text editor by offering
-<tt>TemplateProposal</tt>s as content assist choices, which is
-simplified by using a subclass of <tt>TemplateCompletionProcessor</tt>. User template management can be
-offered by including a <tt>TemplatePreferencePage</tt> which uses a <tt>TemplateStore</tt> and <tt>ContextTypeRegistry</tt> as the
-underlying model to store templates. The <tt>org.eclipse.ui.editors.templates</tt>
-extension point can be used to allow other plug-ins to contribute
-templates to an editor. This is accomplished by using the <tt>ContributionTemplateStore</tt> and <tt>ContributionContextTypeRegistry</tt>
-subclasses of the above types.<br>
-<br>
-Template variables are resolved by a <tt>TemplateVariableResolver.</tt> <tt>GlobalTemplateVariables</tt> offers
-some default variables such as date, user, and selection, but advanced
-features such as resolving to language constructs can be performed in
-subclasses.<br>
-<h4>Classes</h4>
-<ul>
-  <li><tt>Template</tt> a template consists of name, context
-type identifier, and a pattern.</li>
-  <li><tt>TemplateTranslator</tt> and <tt>TemplateBuffer</tt> are used to
-parse the template grammar and don't need to be used usually.</li>
-  <li>A <tt>TemplateProposal </tt>can be
-offered in content assist, possibly created by a subclass of <tt>TemplateCompletionProcessor.</tt></li>
-  <li><tt>TemplateStore</tt> and <tt>ContextTypeRegistry</tt> manage a
-set of templates within a plug-in and offer ways to store them in the
-preferences or externally in XML streams via a <tt>TemplateReaderWriter</tt>.<br></li>
-  <li><tt>ContributionTemplateStore</tt> and <tt>ContributionContextTypeRegistry</tt>
-add awareness for the  <tt>org.eclipse.ui.editors.templates</tt>
-extension point.</li>
-  <li><tt>TemplatePreferencePage</tt> allows
-the user to access the templates within a <tt>TemplateStore.</tt></li>
-</ul>
-<ul>
-</ul>
-<h4>Example</h4>
-See the Template Editor Example in the <strong>org.eclipse.ui.examples.javaeditor</strong> project.<br>
-</body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dwtx/org/osgi/framework/Bundle.d	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,1122 @@
+/*
+ * $Header: /cvshome/build/org.osgi.framework/src/org/osgi/framework/Bundle.java,v 1.54 2007/02/21 16:49:05 hargrave Exp $
+ *
+ * Copyright (c) OSGi Alliance (2000, 2007). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+module dwtx.org.osgi.framework.Bundle;
+
+import dwt.dwthelper.utils;
+
+// import java.io.IOException;
+// import java.io.InputStream;
+// import java.net.URL;
+// import java.util.Dictionary;
+// import java.util.Enumeration;
+
+/**
+ * An installed bundle in the Framework.
+ *
+ * <p>
+ * A <code>Bundle</code> object is the access point to define the lifecycle of
+ * an installed bundle. Each bundle installed in the OSGi environment must have
+ * an associated <code>Bundle</code> object.
+ *
+ * <p>
+ * A bundle must have a unique identity, a <code>long</code>, chosen by the
+ * Framework. This identity must not change during the lifecycle of a bundle,
+ * even when the bundle is updated. Uninstalling and then reinstalling the
+ * bundle must create a new unique identity.
+ *
+ * <p>
+ * A bundle can be in one of six states:
+ * <ul>
+ * <li>{@link #UNINSTALLED}
+ * <li>{@link #INSTALLED}
+ * <li>{@link #RESOLVED}
+ * <li>{@link #STARTING}
+ * <li>{@link #STOPPING}
+ * <li>{@link #ACTIVE}
+ * </ul>
+ * <p>
+ * Values assigned to these states have no specified ordering; they represent
+ * bit values that may be ORed together to determine if a bundle is in one of
+ * the valid states.
+ *
+ * <p>
+ * A bundle should only execute code when its state is one of
+ * <code>STARTING</code>,<code>ACTIVE</code>, or <code>STOPPING</code>.
+ * An <code>UNINSTALLED</code> bundle can not be set to another state; it is a
+ * zombie and can only be reached because references are kept somewhere.
+ *
+ * <p>
+ * The Framework is the only entity that is allowed to create
+ * <code>Bundle</code> objects, and these objects are only valid within the
+ * Framework that created them.
+ *
+ * @ThreadSafe
+ * @version $Revision: 1.54 $
+ */
+public interface Bundle {
+    /**
+     * The bundle is uninstalled and may not be used.
+     *
+     * <p>
+     * The <code>UNINSTALLED</code> state is only visible after a bundle is
+     * uninstalled; the bundle is in an unusable state but references to the
+     * <code>Bundle</code> object may still be available and used for
+     * introspection.
+     * <p>
+     * The value of <code>UNINSTALLED</code> is 0x00000001.
+     */
+    public static const int UNINSTALLED             = 0x00000001;
+
+    /**
+     * The bundle is installed but not yet resolved.
+     *
+     * <p>
+     * A bundle is in the <code>INSTALLED</code> state when it has been
+     * installed in the Framework but is not or cannot be resolved.
+     * <p>
+     * This state is visible if the bundle's code dependencies are not resolved.
+     * The Framework may attempt to resolve an <code>INSTALLED</code> bundle's
+     * code dependencies and move the bundle to the <code>RESOLVED</code>
+     * state.
+     * <p>
+     * The value of <code>INSTALLED</code> is 0x00000002.
+     */
+    public static const int INSTALLED               = 0x00000002;
+
+    /**
+     * The bundle is resolved and is able to be started.
+     *
+     * <p>
+     * A bundle is in the <code>RESOLVED</code> state when the Framework has
+     * successfully resolved the bundle's code dependencies. These dependencies
+     * include:
+     * <ul>
+     * <li>The bundle's class path from its {@link Constants#BUNDLE_CLASSPATH}
+     * Manifest header.
+     * <li>The bundle's package dependencies from its
+     * {@link Constants#EXPORT_PACKAGE} and {@link Constants#IMPORT_PACKAGE}
+     * Manifest headers.
+     * <li>The bundle's required bundle dependencies from its
+     * {@link Constants#REQUIRE_BUNDLE} Manifest header.
+     * <li>A fragment bundle's host dependency from its
+     * {@link Constants#FRAGMENT_HOST} Manifest header.
+     * </ul>
+     * <p>
+     * Note that the bundle is not active yet. A bundle must be put in the
+     * <code>RESOLVED</code> state before it can be started. The Framework may
+     * attempt to resolve a bundle at any time.
+     * <p>
+     * The value of <code>RESOLVED</code> is 0x00000004.
+     */
+    public static const int RESOLVED                = 0x00000004;
+
+    /**
+     * The bundle is in the process of starting.
+     *
+     * <p>
+     * A bundle is in the <code>STARTING</code> state when its
+     * {@link #start(int) start} method is active. A bundle must be in this
+     * state when the bundle's {@link BundleActivator#start} is called. If the
+     * <code>BundleActivator.start</code> method completes without exception,
+     * then the bundle has successfully started and must move to the
+     * <code>ACTIVE</code> state.
+     * <p>
+     * If the bundle has a
+     * {@link Constants#ACTIVATION_LAZY lazy activation policy}, then the
+     * bundle may remain in this state for some time until the activation is
+     * triggered.
+     * <p>
+     * The value of <code>STARTING</code> is 0x00000008.
+     */
+    public static const int STARTING                = 0x00000008;
+
+    /**
+     * The bundle is in the process of stopping.
+     *
+     * <p>
+     * A bundle is in the <code>STOPPING</code> state when its
+     * {@link #stop(int) stop} method is active. A bundle must be in this state
+     * when the bundle's {@link BundleActivator#stop} method is called. When the
+     * <code>BundleActivator.stop</code> method completes the bundle is
+     * stopped and must move to the <code>RESOLVED</code> state.
+     * <p>
+     * The value of <code>STOPPING</code> is 0x00000010.
+     */
+    public static const int STOPPING                = 0x00000010;
+
+    /**
+     * The bundle is now running.
+     *
+     * <p>
+     * A bundle is in the <code>ACTIVE</code> state when it has been
+     * successfully started and activated.
+     * <p>
+     * The value of <code>ACTIVE</code> is 0x00000020.
+     */
+    public static const int ACTIVE                  = 0x00000020;
+
+    /**
+     * The bundle start operation is transient and the persistent autostart
+     * setting of the bundle is not modified.
+     *
+     * <p>
+     * This bit may be set when calling {@link #start(int)} to notify the
+     * framework that the autostart setting of the bundle must not be modified.
+     * If this bit is not set, then the autostart setting of the bundle is
+     * modified.
+     *
+     * @since 1.4
+     * @see #start(int)
+     */
+    public static const int START_TRANSIENT         = 0x00000001;
+
+    /**
+     * The bundle start operation must activate the bundle according to the
+     * bundle's declared
+     * {@link Constants#BUNDLE_ACTIVATIONPOLICY activation policy}.
+     *
+     * <p>
+     * This bit may be set when calling {@link #start(int)} to notify the
+     * framework that the bundle must be activated using the bundle's declared
+     * activation policy.
+     *
+     * @since 1.4
+     * @see Constants#BUNDLE_ACTIVATIONPOLICY
+     * @see #start(int)
+     */
+    public static const int START_ACTIVATION_POLICY = 0x00000002;
+
+    /**
+     * The bundle stop is transient and the persistent autostart setting of the
+     * bundle is not modified.
+     *
+     * <p>
+     * This bit may be set when calling {@link #stop(int)} to notify the
+     * framework that the autostart setting of the bundle must not be modified.
+     * If this bit is not set, then the autostart setting of the bundle is
+     * modified.
+     *
+     * @since 1.4
+     * @see #stop(int)
+     */
+    public static final int STOP_TRANSIENT          = 0x00000001;
+
+    /**
+     * Returns this bundle's current state.
+     *
+     * <p>
+     * A bundle can be in only one state at any time.
+     *
+     * @return An element of <code>UNINSTALLED</code>,<code>INSTALLED</code>,
+     *         <code>RESOLVED</code>,<code>STARTING</code>,
+     *         <code>STOPPING</code>,<code>ACTIVE</code>.
+     */
+    public int getState();
+
+    /**
+     * Starts this bundle.
+     *
+     * <p>
+     * If this bundle's state is <code>UNINSTALLED</code> then an
+     * <code>IllegalStateException</code> is thrown.
+     * <p>
+     * If the Framework implements the optional Start Level service and the
+     * current start level is less than this bundle's start level:
+     * <ul>
+     * <li>If the {@link #START_TRANSIENT} option is set, then a
+     * <code>BundleException</code> is thrown indicating this bundle cannot be
+     * started due to the Framework's current start level.
+     *
+     * <li>Otherwise, the Framework must set this bundle's persistent autostart
+     * setting to <em>Started with declared activation</em> if the
+     * {@link #START_ACTIVATION_POLICY} option is set or
+     * <em>Started with eager activation</em> if not set.
+     * </ul>
+     * <p>
+     * When the Framework's current start level becomes equal to or more than
+     * this bundle's start level, this bundle will be started.
+     * <p>
+     * Otherwise, the following steps are required to start this bundle:
+     * <ol>
+     * <li>If this bundle is in the process of being activated or deactivated
+     * then this method must wait for activation or deactivation to complete
+     * before continuing. If this does not occur in a reasonable time, a
+     * <code>BundleException</code> is thrown to indicate this bundle was
+     * unable to be started.
+     *
+     * <li>If this bundle's state is <code>ACTIVE</code> then this method
+     * returns immediately.
+     *
+     * <li>If the {@link #START_TRANSIENT} option is not set then set this
+     * bundle's autostart setting to <em>Started with declared activation</em>
+     * if the {@link #START_ACTIVATION_POLICY} option is set or
+     * <em>Started with eager activation</em> if not set. When the Framework
+     * is restarted and this bundle's autostart setting is not <em>Stopped</em>,
+     * this bundle must be automatically started.
+     *
+     * <li>If this bundle's state is not <code>RESOLVED</code>, an attempt
+     * is made to resolve this bundle. If the Framework cannot resolve this
+     * bundle, a <code>BundleException</code> is thrown.
+     *
+     * <li>If the {@link #START_ACTIVATION_POLICY} option is set and this
+     * bundle's declared activation policy is
+     * {@link Constants#ACTIVATION_LAZY lazy} then:
+     * <ul>
+     * <li>If this bundle's state is <code>STARTING</code> then this method
+     * returns immediately.
+     * <li>This bundle's state is set to <code>STARTING</code>.
+     * <li>A bundle event of type {@link BundleEvent#LAZY_ACTIVATION} is fired.
+     * <li>This method returns immediately and the remaining steps will be
+     * followed when this bundle's activation is later triggered.
+     * </ul>
+     * <i></i>
+     * <li>This bundle's state is set to <code>STARTING</code>.
+     *
+     * <li>A bundle event of type {@link BundleEvent#STARTING} is fired.
+     *
+     * <li>The {@link BundleActivator#start} method of this bundle's
+     * <code>BundleActivator</code>, if one is specified, is called. If the
+     * <code>BundleActivator</code> is invalid or throws an exception then:
+     * <ul>
+     * <li>This bundle's state is set to <code>STOPPING</code>.
+     * <li>A bundle event of type {@link BundleEvent#STOPPING} is fired.
+     * <li>Any services registered by this bundle must be unregistered.
+     * <li>Any services used by this bundle must be released.
+     * <li>Any listeners registered by this bundle must be removed.
+     * <li>This bundle's state is set to <code>RESOLVED</code>.
+     * <li>A bundle event of type {@link BundleEvent#STOPPED} is fired.
+     * <li>A <code>BundleException</code> is then thrown.
+     * </ul>
+     * <i></i>
+     * <li>If this bundle's state is <code>UNINSTALLED</code>, because this
+     * bundle was uninstalled while the <code>BundleActivator.start</code>
+     * method was running, a <code>BundleException</code> is thrown.
+     *
+     * <li>This bundle's state is set to <code>ACTIVE</code>.
+     *
+     * <li>A bundle event of type {@link BundleEvent#STARTED} is fired.
+     * </ol>
+     *
+     * <b>Preconditions </b>
+     * <ul>
+     * <li><code>getState()</code> in {<code>INSTALLED</code>,
+     * <code>RESOLVED</code>} or {<code>INSTALLED</code>,
+     * <code>RESOLVED</code>, <code>STARTING</code>} if this bundle has a
+     * lazy activation policy.
+     * </ul>
+     * <b>Postconditions, no exceptions thrown </b>
+     * <ul>
+     * <li>Bundle autostart setting is modified unless the
+     * {@link #START_TRANSIENT} option was set.
+     * <li><code>getState()</code> in {<code>ACTIVE</code>} unless the
+     * lazy activation policy was used.
+     * <li><code>BundleActivator.start()</code> has been called and did not
+     * throw an exception unless the lazy activation policy was used.
+     * </ul>
+     * <b>Postconditions, when an exception is thrown </b>
+     * <ul>
+     * <li>Depending on when the exception occurred, bundle autostart setting
+     * is modified unless the {@link #START_TRANSIENT} option was set.
+     * <li><code>getState()</code> not in {<code>STARTING</code>,
+     * <code>ACTIVE</code>}.
+     * </ul>
+     *
+     * @param options The options for starting this bundle. See
+     *        {@link #START_TRANSIENT} and {@link #START_ACTIVATION_POLICY}.
+     *        The Framework must ignore unrecognized options.
+     * @throws BundleException If this bundle could not be started. This could
+     *         be because a code dependency could not be resolved or the
+     *         specified <code>BundleActivator</code> could not be loaded or
+     *         threw an exception or this bundle is a fragment.
+     * @throws java.lang.IllegalStateException If this bundle has been
+     *         uninstalled or this bundle tries to change its own state.
+     * @throws java.lang.SecurityException If the caller does not have the
+     *         appropriate <code>AdminPermission[this,EXECUTE]</code>, and
+     *         the Java Runtime Environment supports permissions.
+     * @since 1.4
+     */
+    public void start(int options);
+
+    /**
+     * Starts this bundle with no options.
+     *
+     * <p>
+     * This method calls <code>start(0)</code>.
+     *
+     * @throws BundleException If this bundle could not be started. This could
+     *         be because a code dependency could not be resolved or the
+     *         specified <code>BundleActivator</code> could not be loaded or
+     *         threw an exception or this bundle is a fragment.
+     * @throws java.lang.IllegalStateException If this bundle has been
+     *         uninstalled or this bundle tries to change its own state.
+     * @throws java.lang.SecurityException If the caller does not have the
+     *         appropriate <code>AdminPermission[this,EXECUTE]</code>, and
+     *         the Java Runtime Environment supports permissions.
+     * @see #start(int)
+     */
+    public void start();
+
+    /**
+     * Stops this bundle.
+     *
+     * <p>
+     * The following steps are required to stop a bundle:
+     * <ol>
+     * <li>If this bundle's state is <code>UNINSTALLED</code> then an
+     * <code>IllegalStateException</code> is thrown.
+     *
+     * <li>If this bundle is in the process of being activated or deactivated
+     * then this method must wait for activation or deactivation to complete
+     * before continuing. If this does not occur in a reasonable time, a
+     * <code>BundleException</code> is thrown to indicate this bundle was
+     * unable to be stopped.
+     * <li>If the {@link #STOP_TRANSIENT} option is not set then then set this
+     * bundle's persistent autostart setting to to <em>Stopped</em>. When the
+     * Framework is restarted and this bundle's autostart setting is
+     * <em>Stopped</em>, this bundle must not be automatically started.
+     *
+     * <li>If this bundle's state is not <code>ACTIVE</code> then this method
+     * returns immediately.
+     *
+     * <li>This bundle's state is set to <code>STOPPING</code>.
+     *
+     * <li>A bundle event of type {@link BundleEvent#STOPPING} is fired.
+     *
+     * <li>The {@link BundleActivator#stop} method of this bundle's
+     * <code>BundleActivator</code>, if one is specified, is called. If that
+     * method throws an exception, this method must continue to stop this
+     * bundle. A <code>BundleException</code> must be thrown after completion
+     * of the remaining steps.
+     *
+     * <li>Any services registered by this bundle must be unregistered.
+     * <li>Any services used by this bundle must be released.
+     * <li>Any listeners registered by this bundle must be removed.
+     *
+     * <li>If this bundle's state is <code>UNINSTALLED</code>, because this
+     * bundle was uninstalled while the <code>BundleActivator.stop</code>
+     * method was running, a <code>BundleException</code> must be thrown.
+     *
+     * <li>This bundle's state is set to <code>RESOLVED</code>.
+     *
+     * <li>A bundle event of type {@link BundleEvent#STOPPED} is fired.
+     * </ol>
+     *
+     * <b>Preconditions </b>
+     * <ul>
+     * <li><code>getState()</code> in {<code>ACTIVE</code>}.
+     * </ul>
+     * <b>Postconditions, no exceptions thrown </b>
+     * <ul>
+     * <li>Bundle autostart setting is modified unless the
+     * {@link #STOP_TRANSIENT} option was set.
+     * <li><code>getState()</code> not in {<code>ACTIVE</code>,
+     * <code>STOPPING</code>}.
+     * <li><code>BundleActivator.stop</code> has been called and did not
+     * throw an exception.
+     * </ul>
+     * <b>Postconditions, when an exception is thrown </b>
+     * <ul>
+     * <li>Bundle autostart setting is modified unless the
+     * {@link #STOP_TRANSIENT} option was set.
+     * </ul>
+     *
+     * @param options The options for stoping this bundle. See
+     *        {@link #STOP_TRANSIENT}. The Framework must ignore unrecognized
+     *        options.
+     * @throws BundleException If this bundle's <code>BundleActivator</code>
+     *         threw an exception or this bundle is a fragment.
+     * @throws java.lang.IllegalStateException If this bundle has been
+     *         uninstalled or this bundle tries to change its own state.
+     * @throws java.lang.SecurityException If the caller does not have the
+     *         appropriate <code>AdminPermission[this,EXECUTE]</code>, and
+     *         the Java Runtime Environment supports permissions.
+     * @since 1.4
+     */
+    public void stop(int options);
+
+    /**
+     * Stops this bundle with no options.
+     *
+     * <p>
+     * This method calls <code>stop(0)</code>.
+     *
+     * @throws BundleException If this bundle's <code>BundleActivator</code>
+     *         threw an exception or this bundle is a fragment.
+     * @throws java.lang.IllegalStateException If this bundle has been
+     *         uninstalled or this bundle tries to change its own state.
+     * @throws java.lang.SecurityException If the caller does not have the
+     *         appropriate <code>AdminPermission[this,EXECUTE]</code>, and
+     *         the Java Runtime Environment supports permissions.
+     * @see #start(int)
+     */
+    public void stop();
+
+    /**
+     * Updates this bundle.
+     *
+     * <p>
+     * If this bundle's state is <code>ACTIVE</code>, it must be stopped
+     * before the update and started after the update successfully completes.
+     *
+     * <p>
+     * If this bundle has exported any packages, these packages must not be
+     * updated. Instead, the previous package version must remain exported until
+     * the <code>PackageAdmin.refreshPackages</code> method has been has been
+     * called or the Framework is relaunched.
+     *
+     * <p>
+     * The following steps are required to update a bundle:
+     * <ol>
+     * <li>If this bundle's state is <code>UNINSTALLED</code> then an
+     * <code>IllegalStateException</code> is thrown.
+     *
+     * <li>If this bundle's state is <code>ACTIVE</code>,
+     * <code>STARTING</code> or <code>STOPPING</code>, this bundle is
+     * stopped as described in the <code>Bundle.stop</code> method. If
+     * <code>Bundle.stop</code> throws an exception, the exception is rethrown
+     * terminating the update.
+     *
+     * <li>The download location of the new version of this bundle is
+     * determined from either this bundle's
+     * {@link Constants#BUNDLE_UPDATELOCATION} Manifest header (if available) or
+     * this bundle's original location.
+     *
+     * <li>The location is interpreted in an implementation dependent manner,
+     * typically as a URL, and the new version of this bundle is obtained from
+     * this location.
+     *
+     * <li>The new version of this bundle is installed. If the Framework is
+     * unable to install the new version of this bundle, the original version of
+     * this bundle must be restored and a <code>BundleException</code> must be
+     * thrown after completion of the remaining steps.
+     *
+     * <li>If this bundle has declared an Bundle-RequiredExecutionEnvironment
+     * header, then the listed execution environments must be verified against
+     * the installed execution environments. If they do not all match, the
+     * original version of this bundle must be restored and a
+     * <code>BundleException</code> must be thrown after completion of the
+     * remaining steps.
+     *
+     * <li>This bundle's state is set to <code>INSTALLED</code>.
+     *
+     * <li>If the new version of this bundle was successfully installed, a
+     * bundle event of type {@link BundleEvent#UPDATED} is fired.
+     *
+     * <li>If this bundle's state was originally <code>ACTIVE</code>, the
+     * updated bundle is started as described in the <code>Bundle.start</code>
+     * method. If <code>Bundle.start</code> throws an exception, a Framework
+     * event of type {@link FrameworkEvent#ERROR} is fired containing the
+     * exception.
+     * </ol>
+     *
+     * <b>Preconditions </b>
+     * <ul>
+     * <li><code>getState()</code> not in {<code>UNINSTALLED</code>}.
+     * </ul>
+     * <b>Postconditions, no exceptions thrown </b>
+     * <ul>
+     * <li><code>getState()</code> in {<code>INSTALLED</code>,
+     * <code>RESOLVED</code>,<code>ACTIVE</code>}.
+     * <li>This bundle has been updated.
+     * </ul>
+     * <b>Postconditions, when an exception is thrown </b>
+     * <ul>
+     * <li><code>getState()</code> in {<code>INSTALLED</code>,
+     * <code>RESOLVED</code>,<code>ACTIVE</code>}.
+     * <li>Original bundle is still used; no update occurred.
+     * </ul>
+     *
+     * @throws BundleException If the update fails.
+     * @throws java.lang.IllegalStateException If this bundle has been
+     *         uninstalled or this bundle tries to change its own state.
+     * @throws java.lang.SecurityException If the caller does not have the
+     *         appropriate <code>AdminPermission[this,LIFECYCLE]</code> for
+     *         both the current bundle and the updated bundle, and the Java
+     *         Runtime Environment supports permissions.
+     * @see #stop()
+     * @see #start()
+     */
+    public void update();
+
+//     /**
+//      * Updates this bundle from an <code>InputStream</code>.
+//      *
+//      * <p>
+//      * This method performs all the steps listed in <code>Bundle.update()</code>,
+//      * except the new version of this bundle must be read from the supplied
+//      * <code>InputStream</code>, rather than a <code>URL</code>.
+//      * <p>
+//      * This method must always close the <code>InputStream</code> when it is
+//      * done, even if an exception is thrown.
+//      *
+//      * @param in The <code>InputStream</code> from which to read the new
+//      *        bundle.
+//      * @throws BundleException If the provided stream cannot be read or the
+//      *         update fails.
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled or this bundle tries to change its own state.
+//      * @throws java.lang.SecurityException If the caller does not have the
+//      *         appropriate <code>AdminPermission[this,LIFECYCLE]</code> for
+//      *         both the current bundle and the updated bundle, and the Java
+//      *         Runtime Environment supports permissions.
+//      * @see #update()
+//      */
+//     public void update(InputStream in_);
+//
+//     /**
+//      * Uninstalls this bundle.
+//      *
+//      * <p>
+//      * This method causes the Framework to notify other bundles that this bundle
+//      * is being uninstalled, and then puts this bundle into the
+//      * <code>UNINSTALLED</code> state. The Framework must remove any resources
+//      * related to this bundle that it is able to remove.
+//      *
+//      * <p>
+//      * If this bundle has exported any packages, the Framework must continue to
+//      * make these packages available to their importing bundles until the
+//      * <code>PackageAdmin.refreshPackages</code> method has been called or the
+//      * Framework is relaunched.
+//      *
+//      * <p>
+//      * The following steps are required to uninstall a bundle:
+//      * <ol>
+//      * <li>If this bundle's state is <code>UNINSTALLED</code> then an
+//      * <code>IllegalStateException</code> is thrown.
+//      *
+//      * <li>If this bundle's state is <code>ACTIVE</code>,
+//      * <code>STARTING</code> or <code>STOPPING</code>, this bundle is
+//      * stopped as described in the <code>Bundle.stop</code> method. If
+//      * <code>Bundle.stop</code> throws an exception, a Framework event of type
+//      * {@link FrameworkEvent#ERROR} is fired containing the exception.
+//      *
+//      * <li>This bundle's state is set to <code>UNINSTALLED</code>.
+//      *
+//      * <li>A bundle event of type {@link BundleEvent#UNINSTALLED} is fired.
+//      *
+//      * <li>This bundle and any persistent storage area provided for this bundle
+//      * by the Framework are removed.
+//      * </ol>
+//      *
+//      * <b>Preconditions </b>
+//      * <ul>
+//      * <li><code>getState()</code> not in {<code>UNINSTALLED</code>}.
+//      * </ul>
+//      * <b>Postconditions, no exceptions thrown </b>
+//      * <ul>
+//      * <li><code>getState()</code> in {<code>UNINSTALLED</code>}.
+//      * <li>This bundle has been uninstalled.
+//      * </ul>
+//      * <b>Postconditions, when an exception is thrown </b>
+//      * <ul>
+//      * <li><code>getState()</code> not in {<code>UNINSTALLED</code>}.
+//      * <li>This Bundle has not been uninstalled.
+//      * </ul>
+//      *
+//      * @throws BundleException If the uninstall failed. This can occur if
+//      *         another thread is attempting to change this bundle's state and
+//      *         does not complete in a timely manner.
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled or this bundle tries to change its own state.
+//      * @throws java.lang.SecurityException If the caller does not have the
+//      *         appropriate <code>AdminPermission[this,LIFECYCLE]</code>, and
+//      *         the Java Runtime Environment supports permissions.
+//      * @see #stop()
+//      */
+//     public void uninstall();
+//
+//     /**
+//      * Returns this bundle's Manifest headers and values. This method returns
+//      * all the Manifest headers and values from the main section of this
+//      * bundle's Manifest file; that is, all lines prior to the first blank line.
+//      *
+//      * <p>
+//      * Manifest header names are case-insensitive. The methods of the returned
+//      * <code>Dictionary</code> object must operate on header names in a
+//      * case-insensitive manner.
+//      *
+//      * If a Manifest header value starts with &quot;%&quot;, it must be
+//      * localized according to the default locale.
+//      *
+//      * <p>
+//      * For example, the following Manifest headers and values are included if
+//      * they are present in the Manifest file:
+//      *
+//      * <pre>
+//      *     Bundle-Name
+//      *     Bundle-Vendor
+//      *     Bundle-Version
+//      *     Bundle-Description
+//      *     Bundle-DocURL
+//      *     Bundle-ContactAddress
+//      * </pre>
+//      *
+//      * <p>
+//      * This method must continue to return Manifest header information while
+//      * this bundle is in the <code>UNINSTALLED</code> state.
+//      *
+//      * @return A <code>Dictionary</code> object containing this bundle's
+//      *         Manifest headers and values.
+//      *
+//      * @throws java.lang.SecurityException If the caller does not have the
+//      *         appropriate <code>AdminPermission[this,METADATA]</code>, and
+//      *         the Java Runtime Environment supports permissions.
+//      *
+//      * @see Constants#BUNDLE_LOCALIZATION
+//      */
+//     public Dictionary getHeaders();
+//
+//     /**
+//      * Returns this bundle's unique identifier. This bundle is assigned a unique
+//      * identifier by the Framework when it was installed in the OSGi
+//      * environment.
+//      *
+//      * <p>
+//      * A bundle's unique identifier has the following attributes:
+//      * <ul>
+//      * <li>Is unique and persistent.
+//      * <li>Is a <code>long</code>.
+//      * <li>Its value is not reused for another bundle, even after a bundle is
+//      * uninstalled.
+//      * <li>Does not change while a bundle remains installed.
+//      * <li>Does not change when a bundle is updated.
+//      * </ul>
+//      *
+//      * <p>
+//      * This method must continue to return this bundle's unique identifier while
+//      * this bundle is in the <code>UNINSTALLED</code> state.
+//      *
+//      * @return The unique identifier of this bundle.
+//      */
+//     public long getBundleId();
+//
+//     /**
+//      * Returns this bundle's location identifier.
+//      *
+//      * <p>
+//      * The location identifier is the location passed to
+//      * <code>BundleContext.installBundle</code> when a bundle is installed.
+//      * The location identifier does not change while this bundle remains
+//      * installed, even if this bundle is updated.
+//      *
+//      * <p>
+//      * This method must continue to return this bundle's location identifier
+//      * while this bundle is in the <code>UNINSTALLED</code> state.
+//      *
+//      * @return The string representation of this bundle's location identifier.
+//      * @throws java.lang.SecurityException If the caller does not have the
+//      *         appropriate <code>AdminPermission[this,METADATA]</code>, and
+//      *         the Java Runtime Environment supports permissions.
+//      */
+//     public String getLocation();
+//
+//     /**
+//      * Returns this bundle's <code>ServiceReference</code> list for all
+//      * services it has registered or <code>null</code> if this bundle has no
+//      * registered services.
+//      *
+//      * <p>
+//      * If the Java runtime supports permissions, a <code>ServiceReference</code>
+//      * object to a service is included in the returned list only if the caller
+//      * has the <code>ServicePermission</code> to get the service using at
+//      * least one of the named classes the service was registered under.
+//      *
+//      * <p>
+//      * The list is valid at the time of the call to this method, however, as the
+//      * Framework is a very dynamic environment, services can be modified or
+//      * unregistered at anytime.
+//      *
+//      * @return An array of <code>ServiceReference</code> objects or
+//      *         <code>null</code>.
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @see ServiceRegistration
+//      * @see ServiceReference
+//      * @see ServicePermission
+//      */
+//     public ServiceReference[] getRegisteredServices();
+//
+//     /**
+//      * Returns this bundle's <code>ServiceReference</code> list for all
+//      * services it is using or returns <code>null</code> if this bundle is not
+//      * using any services. A bundle is considered to be using a service if its
+//      * use count for that service is greater than zero.
+//      *
+//      * <p>
+//      * If the Java Runtime Environment supports permissions, a
+//      * <code>ServiceReference</code> object to a service is included in the
+//      * returned list only if the caller has the <code>ServicePermission</code>
+//      * to get the service using at least one of the named classes the service
+//      * was registered under.
+//      * <p>
+//      * The list is valid at the time of the call to this method, however, as the
+//      * Framework is a very dynamic environment, services can be modified or
+//      * unregistered at anytime.
+//      *
+//      * @return An array of <code>ServiceReference</code> objects or
+//      *         <code>null</code>.
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @see ServiceReference
+//      * @see ServicePermission
+//      */
+//     public ServiceReference[] getServicesInUse();
+//
+//     /**
+//      * Determines if this bundle has the specified permissions.
+//      *
+//      * <p>
+//      * If the Java Runtime Environment does not support permissions, this method
+//      * always returns <code>true</code>.
+//      * <p>
+//      * <code>permission</code> is of type <code>Object</code> to avoid
+//      * referencing the <code>java.security.Permission</code> class directly.
+//      * This is to allow the Framework to be implemented in Java environments
+//      * which do not support permissions.
+//      *
+//      * <p>
+//      * If the Java Runtime Environment does support permissions, this bundle and
+//      * all its resources including embedded JAR files, belong to the same
+//      * <code>java.security.ProtectionDomain</code>; that is, they must share
+//      * the same set of permissions.
+//      *
+//      * @param permission The permission to verify.
+//      *
+//      * @return <code>true</code> if this bundle has the specified permission
+//      *         or the permissions possessed by this bundle imply the specified
+//      *         permission; <code>false</code> if this bundle does not have the
+//      *         specified permission or <code>permission</code> is not an
+//      *         <code>instanceof</code> <code>java.security.Permission</code>.
+//      *
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      */
+//     public bool hasPermission(Object permission);
+//
+//     /**
+//      * Find the specified resource from this bundle.
+//      *
+//      * This bundle's class loader is called to search for the specified
+//      * resource. If this bundle's state is <code>INSTALLED</code>, this
+//      * method must attempt to resolve this bundle before attempting to get the
+//      * specified resource. If this bundle cannot be resolved, then only this
+//      * bundle must be searched for the specified resource. Imported packages
+//      * cannot be searched when this bundle has not been resolved. If this bundle
+//      * is a fragment bundle then <code>null</code> is returned.
+//      *
+//      * @param name The name of the resource. See
+//      *        <code>java.lang.ClassLoader.getResource</code> for a description
+//      *        of the format of a resource name.
+//      * @return A URL to the named resource, or <code>null</code> if the
+//      *         resource could not be found or if this bundle is a fragment
+//      *         bundle or if the caller does not have the appropriate
+//      *         <code>AdminPermission[this,RESOURCE]</code>, and the Java
+//      *         Runtime Environment supports permissions.
+//      *
+//      * @since 1.1
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @see #getEntry
+//      * @see #findEntries
+//      */
+//     public URL getResource(String name);
+//
+//     /**
+//      * Returns this bundle's Manifest headers and values localized to the
+//      * specified locale.
+//      *
+//      * <p>
+//      * This method performs the same function as
+//      * <code>Bundle.getHeaders()</code> except the manifest header values are
+//      * localized to the specified locale.
+//      *
+//      * <p>
+//      * If a Manifest header value starts with &quot;%&quot;, it must be
+//      * localized according to the specified locale. If a locale is specified and
+//      * cannot be found, then the header values must be returned using the
+//      * default locale. Localizations are searched for in the following order:
+//      *
+//      * <pre>
+//      *   bn + "_" + Ls + "_" + Cs + "_" + Vs
+//      *   bn + "_" + Ls + "_" + Cs
+//      *   bn + "_" + Ls
+//      *   bn + "_" + Ld + "_" + Cd + "_" + Vd
+//      *   bn + "_" + Ld + "_" + Cd
+//      *   bn + "_" + Ld
+//      *     bn
+//      * </pre>
+//      *
+//      * Where <code>bn</code> is this bundle's localization basename,
+//      * <code>Ls</code>, <code>Cs</code> and <code>Vs</code> are the
+//      * specified locale (language, country, variant) and <code>Ld</code>,
+//      * <code>Cd</code> and <code>Vd</code> are the default locale (language,
+//      * country, variant).
+//      *
+//      * If <code>null</code> is specified as the locale string, the header
+//      * values must be localized using the default locale. If the empty string
+//      * (&quot;&quot;) is specified as the locale string, the header values must
+//      * not be localized and the raw (unlocalized) header values, including any
+//      * leading &quot;%&quot;, must be returned.
+//      *
+//      * <p>
+//      * This method must continue to return Manifest header information while
+//      * this bundle is in the <code>UNINSTALLED</code> state, however the
+//      * header values must only be available in the raw and default locale
+//      * values.
+//      *
+//      * @param locale The locale name into which the header values are to be
+//      *        localized. If the specified locale is <code>null</code> then the
+//      *        locale returned by <code>java.util.Locale.getDefault</code> is
+//      *        used. If the specified locale is the empty string, this method
+//      *        will return the raw (unlocalized) manifest headers including any
+//      *        leading &quot;%&quot;.
+//      * @return A <code>Dictionary</code> object containing this bundle's
+//      *         Manifest headers and values.
+//      *
+//      * @throws java.lang.SecurityException If the caller does not have the
+//      *         appropriate <code>AdminPermission[this,METADATA]</code>, and
+//      *         the Java Runtime Environment supports permissions.
+//      *
+//      * @see #getHeaders()
+//      * @see Constants#BUNDLE_LOCALIZATION
+//      * @since 1.3
+//      */
+//     public Dictionary getHeaders(String locale);
+//
+//     /**
+//      * Returns the symbolic name of this bundle as specified by its
+//      * <code>Bundle-SymbolicName</code> manifest header. The name must be
+//      * unique, it is recommended to use a reverse domain name naming convention
+//      * like that used for java packages. If this bundle does not have a
+//      * specified symbolic name then <code>null</code> is returned.
+//      *
+//      * <p>
+//      * This method must continue to return this bundle's symbolic name while
+//      * this bundle is in the <code>UNINSTALLED</code> state.
+//      *
+//      * @return The symbolic name of this bundle.
+//      * @since 1.3
+//      */
+//     public String getSymbolicName();
+//
+//     /**
+//      * Loads the specified class using this bundle's classloader.
+//      *
+//      * <p>
+//      * If this bundle is a fragment bundle then this method must throw a
+//      * <code>ClassNotFoundException</code>.
+//      *
+//      * <p>
+//      * If this bundle's state is <code>INSTALLED</code>, this method must
+//      * attempt to resolve this bundle before attempting to load the class.
+//      *
+//      * <p>
+//      * If this bundle cannot be resolved, a Framework event of type
+//      * {@link FrameworkEvent#ERROR} is fired containing a
+//      * <code>BundleException</code> with details of the reason this bundle
+//      * could not be resolved. This method must then throw a
+//      * <code>ClassNotFoundException</code>.
+//      *
+//      * <p>
+//      * If this bundle's state is <code>UNINSTALLED</code>, then an
+//      * <code>IllegalStateException</code> is thrown.
+//      *
+//      * @param name The name of the class to load.
+//      * @return The Class object for the requested class.
+//      * @throws java.lang.ClassNotFoundException If no such class can be found or
+//      *         if this bundle is a fragment bundle or if the caller does not
+//      *         have the appropriate <code>AdminPermission[this,CLASS]</code>,
+//      *         and the Java Runtime Environment supports permissions.
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @since 1.3
+//      */
+//     public Class loadClass(String name) throws ClassNotFoundException;
+//
+//     /**
+//      * Find the specified resources from this bundle.
+//      *
+//      * This bundle's class loader is called to search for the specified
+//      * resources. If this bundle's state is <code>INSTALLED</code>, this
+//      * method must attempt to resolve this bundle before attempting to get the
+//      * specified resources. If this bundle cannot be resolved, then only this
+//      * bundle must be searched for the specified resources. Imported packages
+//      * cannot be searched when a bundle has not been resolved. If this bundle is
+//      * a fragment bundle then <code>null</code> is returned.
+//      *
+//      * @param name The name of the resource. See
+//      *        <code>java.lang.ClassLoader.getResources</code> for a
+//      *        description of the format of a resource name.
+//      * @return An enumeration of URLs to the named resources, or
+//      *         <code>null</code> if the resource could not be found or if this
+//      *         bundle is a fragment bundle or if the caller does not have the
+//      *         appropriate <code>AdminPermission[this,RESOURCE]</code>, and
+//      *         the Java Runtime Environment supports permissions.
+//      *
+//      * @since 1.3
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @throws java.io.IOException If there is an I/O error.
+//      */
+//     public Enumeration getResources(String name) throws IOException;
+//
+//     /**
+//      * Returns an Enumeration of all the paths (<code>String</code> objects)
+//      * to entries within this bundle whose longest sub-path matches the
+//      * specified path. This bundle's classloader is not used to search for
+//      * entries. Only the contents of this bundle are searched.
+//      * <p>
+//      * The specified path is always relative to the root of this bundle and may
+//      * begin with a &quot;/&quot;. A path value of &quot;/&quot; indicates the
+//      * root of this bundle.
+//      * <p>
+//      * Returned paths indicating subdirectory paths end with a &quot;/&quot;.
+//      * The returned paths are all relative to the root of this bundle and must
+//      * not begin with &quot;/&quot;.
+//      *
+//      * @param path The path name for which to return entry paths.
+//      * @return An Enumeration of the entry paths (<code>String</code>
+//      *         objects) or <code>null</code> if no entry could be found or if
+//      *         the caller does not have the appropriate
+//      *         <code>AdminPermission[this,RESOURCE]</code> and the Java
+//      *         Runtime Environment supports permissions.
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @since 1.3
+//      */
+//     public Enumeration getEntryPaths(String path);
+//
+//     /**
+//      * Returns a URL to the entry at the specified path in this bundle. This
+//      * bundle's classloader is not used to search for the entry. Only the
+//      * contents of this bundle are searched for the entry.
+//      * <p>
+//      * The specified path is always relative to the root of this bundle and may
+//      * begin with &quot;/&quot;. A path value of &quot;/&quot; indicates the
+//      * root of this bundle.
+//      *
+//      * @param path The path name of the entry.
+//      * @return A URL to the entry, or <code>null</code> if no entry could be
+//      *         found or if the caller does not have the appropriate
+//      *         <code>AdminPermission[this,RESOURCE]</code> and the Java
+//      *         Runtime Environment supports permissions.
+//      *
+//      * @throws java.lang.IllegalStateException If this bundle has been
+//      *         uninstalled.
+//      * @since 1.3
+//      */
+//     public URL getEntry(String path);
+//
+//     /**
+//      * Returns the time when this bundle was last modified. A bundle is
+//      * considered to be modified when it is installed, updated or uninstalled.
+//      *
+//      * <p>
+//      * The time value is the number of milliseconds since January 1, 1970,
+//      * 00:00:00 GMT.
+//      *
+//      * @return The time when this bundle was last modified.
+//      * @since 1.3
+//      */
+//     public long getLastModified();
+//
+//     /**
+//      * Returns entries in this bundle and its attached fragments. This bundle's
+//      * classloader is not used to search for entries. Only the contents of this
+//      * bundle and its attached fragments are searched for the specified entries.
+//      *
+//      * If this bundle's state is <code>INSTALLED</code>, this method must
+//      * attempt to resolve this bundle before attempting to find entries.
+//      *
+//      * <p>
+//      * This method is intended to be used to obtain configuration, setup,
+//      * localization and other information from this bundle. This method takes
+//      * into account that the &quot;contents&quot; of this bundle can be extended
+//      * with fragments. This &quot;bundle space&quot; is not a namespace with
+//      * unique members; the same entry name can be present multiple times. This
+//      * method therefore returns an enumeration of URL objects. These URLs can
+//      * come from different JARs but have the same path name. This method can
+//      * either return only entries in the specified path or recurse into
+//      * subdirectories returning entries in the directory tree beginning at the
+//      * specified path. Fragments can be attached after this bundle is resolved,
+//      * possibly changing the set of URLs returned by this method. If this bundle
+//      * is not resolved, only the entries in the JAR file of this bundle are
+//      * returned.
+//      * <p>
+//      * Examples:
+//      *
+//      * <pre>
+//      * // List all XML files in the OSGI-INF directory and below
+//      * Enumeration e = b.findEntries(&quot;OSGI-INF&quot;, &quot;*.xml&quot;, true);
+//      *
+//      * // Find a specific localization file
+//      * Enumeration e = b.findEntries(&quot;OSGI-INF/l10n&quot;,
+//      *                               &quot;bundle_nl_DU.properties&quot;,
+//      *                               false);
+//      * if (e.hasMoreElements())
+//      *  return (URL) e.nextElement();
+//      * </pre>
+//      *
+//      * @param path The path name in which to look. The path is always relative
+//      *        to the root of this bundle and may begin with &quot;/&quot;. A
+//      *        path value of &quot;/&quot; indicates the root of this bundle.
+//      * @param filePattern The file name pattern for selecting entries in the
+//      *        specified path. The pattern is only matched against the last
+//      *        element of the entry path and it supports substring matching, as
+//      *        specified in the Filter specification, using the wildcard
+//      *        character (&quot;*&quot;). If null is specified, this is
+//      *        equivalent to &quot;*&quot; and matches all files.
+//      * @param recurse If <code>true</code>, recurse into subdirectories.
+//      *        Otherwise only return entries from the specified path.
+//      * @return An enumeration of URL objects for each matching entry, or
+//      *         <code>null</code> if an entry could not be found or if the
+//      *         caller does not have the appropriate
+//      *         <code>AdminPermission[this,RESOURCE]</code>, and the Java
+//      *         Runtime Environment supports permissions. The URLs are sorted
+//      *         such that entries from this bundle are returned first followed by
+//      *         the entries from attached fragments in ascending bundle id order.
+//      *         If this bundle is a fragment, then only matching entries in this
+//      *         fragment are returned.
+//      * @since 1.3
+//      */
+//     public Enumeration findEntries(String path, String filePattern,
+//             bool recurse);
+//
+//     /**
+//      * Returns this bundle's {@link BundleContext}. The returned
+//      * <code>BundleContext</code> can be used by the caller to act on behalf
+//      * of this bundle.
+//      *
+//      * <p>
+//      * If this bundle is not in the {@link #STARTING}, {@link #ACTIVE}, or
+//      * {@link #STOPPING} states or this bundle is a fragment bundle, then this
+//      * bundle has no valid <code>BundleContext</code>. This method will
+//      * return <code>null</code> if this bundle has no valid
+//      * <code>BundleContext</code>.
+//      *
+//      * @return A <code>BundleContext</code> for this bundle or
+//      *         <code>null</code> if this bundle has no valid
+//      *         <code>BundleContext</code>.
+//      * @throws java.lang.SecurityException If the caller does not have the
+//      *         appropriate <code>AdminPermission[this,CONTEXT]</code>, and
+//      *         the Java Runtime Environment supports permissions.
+//      * @since 1.4
+//      */
+//     public BundleContext getBundleContext();
+}
--- a/dwtx/text/edits/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 transitional//EN">
-<html><head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Eclipse Text Editor" name="GENERATOR">
-  <title>Text Edits</title>
-</head>
-
-<body>
-Provides support for describing and applying textual document editions.
-<p>
-A complex textual edition can be described by a tree of <tt>TextEdit</tt>s. An edit
-can be applied to an <tt>IDocument</tt> by calling <tt>TextEdit.apply</tt> or by 
-using a <tt>TextEditProcessor</tt>. Applying a text edit can record a reverse edit
-description that can be used to undo the edition.
-</p>
-Use the standard edit kinds to describe the basic document editing operations:
-<ul>
-  <li><em>replace</em> a document range: <tt>ReplaceEdit</tt></li>
-  <li><em>delete</em> a document range: <tt>DeleteEdit</tt></li>
-  <li><em>insert</em> text: <tt>InsertEdit</tt></li>
-  <li><em>track</em> a range while the document is being modified: <tt>RangeMarker</tt></li>
-</ul>
-<p>
-Other subclasses of <tt>TextEdit</tt> exist for specialized tasks. Use <tt>MultiTextEdit</tt> to
-compose a complex edit tree, or subclass it to provide a custom edit.
-</p>
-</body></html>
\ No newline at end of file
--- a/dwtx/text/undo/package.html	Wed Aug 27 14:49:30 2008 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html><head>
-  <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
-  <meta content="IBM" name="Author">
-  <meta content="Mozilla/4.75 [en] (Windows NT 5.0; U) [Netscape]" name="GENERATOR"><title>Document Undo Support</title></head>
-
-<body>
-<p>Provides undo and redo support for a document.</p>
-<h3>Package Specification</h3>
-<p>When an <tt>IDocumentUndoManager</tt> is connected to an <tt>IDocument</tt>, 
-  any change to the document is recorded and can then be undone and redone later. 
-  Clients which are interested in undo/redo events can register an <tt>IDocumentUndoistener</tt>
-  with the <tt>IDocumentUndoManager</tt>.</p>
-</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.internal.text.html.HTMLMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+
+HTMLTextPresenter.ellipse= ...
+
+# The following property value must end with a space
+HTML2TextReader.listItemPrefix=\t-\ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.internal.text.link.contentassist.ContentAssistMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+
+InfoPopup.info_delay_timer_name=AdditionalInfo Delay
+
+ContentAssistant.assist_delay_timer_name=AutoAssist Delay
+
+HTMLTextPresenter.ellipse= ...
+
+# The following property value must end with a space
+HTML2TextReader.listItemPrefix=\t-\ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.JFaceTextMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,45 @@
+###############################################################################
+# Copyright (c) 2000, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+
+TextViewer.error.bad_location.WidgetCommand.setEvent= TextViewer.WidgetCommand.setEvent: BadLocationException
+TextViewer.error.bad_location.findAndSelect= TextViewer.findAndSelect: BadLocationException
+TextViewer.error.bad_location.getBottomIndex= TextViewer.getBottomIndex: BadLocationException
+TextViewer.error.bad_location.getBottomIndexEndOffset= TextViewer.getBottomIndexEndOffset: BadLocationException
+TextViewer.error.bad_location.getFirstCompleteLineOfRegion= TextViewer.getFirstCompleteLineOfRegion: BadLocationException
+TextViewer.error.bad_location.getTopIndex= TextViewer.getTopIndex: BadLocationException
+TextViewer.error.bad_location.getTopIndexStartOffset= TextViewer.getTopIndexStartOffset: BadLocationException
+TextViewer.error.bad_location.selectContentTypePlugin= TextViewer.selectContentTypePlugin: BadLocationException
+TextViewer.error.bad_location.setTopIndex_1= TextViewer.setTopIndex: BadLocationException
+TextViewer.error.bad_location.setTopIndex_2= TextViewer.setTopIndex: BadLocationException
+TextViewer.error.bad_location.shift_1= TextViewer.shift: BadLocationException
+TextViewer.error.bad_location.shift_2= TextViewer.shift: BadLocationException
+TextViewer.error.bad_location.verifyText= TextViewer.verifyText: BadLocationException
+TextViewer.error.invalid_range= Invalid range argument
+TextViewer.error.invalid_visible_region_1= Invalid visible region argument
+TextViewer.error.invalid_visible_region_2= Invalid visible region argument
+
+AbstractHoverInformationControlManager.hover.restarter= Hover Restart Delay
+
+# The first parameter is the annotation type label and the second is the number of annotations
+OverviewRulerHeader.toolTipTextEntry= {0}: {1}
+
+DefaultUndoManager.operationLabel= Typing
+DefaultUndoManager.error.undoFailed.title= Undo Failed
+DefaultUndoManager.error.redoFailed.title= Redo Failed
+
+DefaultAnnotationHover.multipleMarkers= Multiple markers at this line
+# The parameter is the text of the list item
+DefaultAnnotationHover.listItem= - {0}
+
+# The parameter is the line number
+DefaultAnnotationHover.lineNumber=Line: {0}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.RegExMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,535 @@
+###############################################################################
+# Copyright (c) 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+#     Cagatay Calli <ccalli@gmail.com> - [find/replace] retain caps when replacing - https://bugs.eclipse.org/bugs/show_bug.cgi?id=28949
+#     Cagatay Calli <ccalli@gmail.com> - [find/replace] define & fix behavior of retain caps with other escapes and text before \C - https://bugs.eclipse.org/bugs/show_bug.cgi?id=217061
+###############################################################################
+
+## Content Assist for regular expressions ##
+# use \\\u0075 for a backslash-u
+displayString_bs_bs= \\\\ - Backslash
+additionalInfo_bs_bs= Backslash
+displayString_bs_0= \\0nnn - Octal character code
+additionalInfo_bs_0= Octal character code\n\nExamples:\n\\011 (tabulator)\n\\0112 (character J)
+displayString_bs_x= \\xhh - Hex character code
+additionalInfo_bs_x= Hexadecimal character code\n\nExamples:\n\\x09 (tabulator)\n\\x4A or \\x4a (character J)
+displayString_bs_u= \\\u0075hhhh - Hex code for Unicode character
+additionalInfo_bs_u= Hexadecimal code for Unicode character\n\nExamples:\n\\\u0075004A (character J)\n\\\u007503B2 (lowercase Greek letter beta: \u03B2)
+displayString_bs_t= \\t - Tab
+additionalInfo_bs_t= Tabulator (\\x09, decimal: 9)
+displayString_bs_R= \\R - Line delimiter (platform independent)
+additionalInfo_bs_R= Line delimiter (platform independent)\n\n\
+This pattern matches any form of line delimiter, i.e.\n\
+- Windows (\\r\\n)\n\
+- Unix (\\n)\n\
+- Mac OS 9 (\\r)\n\n\
+Note that this pattern does not work inside [].
+displayString_bs_n= \\n - Newline
+additionalInfo_bs_n= Newline (\\x0A, decimal: 10)\n\n\
+WARNING: \\n only finds newline characters. \
+This can lead to unexpected results when the actual document uses different line delimiters.\n\n\
+RECOMMENDATION: use \\R to find a line delimiter.
+displayString_bs_r= \\r - CR
+additionalInfo_bs_r= Carriage Return (\\x0D, decimal: 13)\n\n\
+WARNING: \\r only finds carriage return characters. \
+This can lead to unexpected results when the actual document uses different line delimiters.\n\n\
+RECOMMENDATION: use \\R to find a line delimiter.
+displayString_bs_f= \\f - FF
+additionalInfo_bs_f= Form Feed (\\x0C, decimal: 12)
+displayString_bs_a= \\a - Beep
+additionalInfo_bs_a= Beep, Bell, Alert (\\x07, decimal: 7)
+displayString_bs_e= \\e - Esc
+additionalInfo_bs_e= Escape (\\x1B, decimal: 27)
+displayString_bs_c= \\cC - Control character
+additionalInfo_bs_c= Control character for C\n\nExample:\n\\cC (Ctrl+C, \\x03, decimal: 3)
+
+displayString_dot= . - Any character
+additionalInfo_dot= The dot matches any character except line terminators.\n\n\
+To make the dot match line terminators as well, \n\
+start the expression with the embedded flag expression \n\
+"(?s)" (without quotes).
+displayString_bs_d= \\d - A digit
+additionalInfo_bs_d= A digit: [0-9]
+displayString_bs_D= \\D - Not a digit
+additionalInfo_bs_D= Not a digit: [^0-9]
+displayString_bs_s= \\s - A whitespace
+additionalInfo_bs_s= A whitespace: [ \\t\\n\\x0B\\f\\r]
+displayString_bs_S= \\S - Not a whitespace
+additionalInfo_bs_S= Not a whitespace: [^\\s]
+displayString_bs_w= \\w - An alphanumeric (word character)
+additionalInfo_bs_w= An alphanumeric (a word character): [a-zA-Z_0-9]
+displayString_bs_W= \\W - Not an alphanumeric
+additionalInfo_bs_W= Not an alphanumeric (not a word character): [^\\w]
+
+displayString_start= ^ - Line start
+additionalInfo_start= Line start (positional match)\n\nExample:\n\
+The expression "^Eclipse" matches the term "Eclipse"\n\
+only on the second line of text\n\
+"The Eclipse Project\n\
+Eclipse Platform".
+displayString_end= $ - Line end
+additionalInfo_end= Line end (positional match)\n\nExample:\n\
+The expression "Eclipse$" matches the term "Eclipse"\n\
+only on the second line of text\n\
+"- Install the Eclipse Platform\n\
+- Run Eclipse".
+displayString_bs_b= \\b- Word beginning or end
+additionalInfo_bs_b= Word beginning or end (positional match)\n\nExample:\n\
+The expression "s\\b" matches only the last "s" of "glasses" in text\n\
+"I lost my glasses."
+displayString_bs_B= \\B - Not a word beginning or end
+additionalInfo_bs_B= Not a word beginning or end (positional match)\n\nExample:\n\
+The expression "\\BS" matches only "S" of "printString" in text\n\
+"void print(String printString)".
+displayString_bs_A= \\A - Start of input
+additionalInfo_bs_A= Start of input (positional match)\n\nExample:\n\
+The expression "\\ABC" matches only "BC" of "BCD" in text\n\
+"BCD ABC\n\
+BCDEF".
+displayString_bs_G= \\G - Previous match's end
+additionalInfo_bs_G= Previous match's end (positional match)\n\nExample:\n\
+The expression "\\Ga" matches the first and then the second "a" in text\n\
+"aardvark" (when starting from the beginning).
+displayString_bs_Z= \\Z - End of input, does not consider last line terminator
+additionalInfo_bs_Z= End of input, does not consider last line terminator (positional match)\n\n\
+The expression matches at the end of the file, except for when the\n\
+file ends in a line terminator, in which case it matches before that\n\
+line terminator.\n\nExample:\n\
+The expression "ing\\Z" matches "ing" in text\n\
+"testing", as well as in text\n\
+"testing\n\
+", but doesn't match in text\n\
+"testing\n\
+\n\
+"
+displayString_bs_z= \\z - End of input
+additionalInfo_bs_z= End of input (positional match)\n\nExample:\n\
+The expression "ing\\z" matches "ing" in text\n\
+"testing", but doesn't match in text\n\
+"testing\n\
+"
+
+### repetition quantifiers ###
+displayString_quest= ? - Greedy match 0 or 1 times
+additionalInfo_quest= Greedy match 0 or 1 times.\n\n\
+First tries to match the preceding token.\n\
+Falls back to not matching if this choice made a full match impossible.\n\nExample:\n\
+The expression "fo?" matches "f", "fo", and "fo" in text\n\
+"f fo foo".
+displayString_star= * - Greedy match 0 or more times
+additionalInfo_star= Greedy match 0 or more times.\n\n\
+First tries to match the preceding token as many times as possible.\n\
+Falls back to matching it less often if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo*" matches "f", "fo", and "foo" in text\n\
+"f fo foo".\n\
+- The expression "fo*o\\d" matches all three words in text\n\
+"fo1 foo2 fooo3".\n\
+- The expression "<.*>" matches the whole text\n\
+"<p><b>bold</b>".
+displayString_plus= + - Greedy match 1 or more times
+additionalInfo_plus= Greedy match 1 or more times\n\n\
+First tries to match the preceding token as many times as possible.\n\
+Falls back to matching it less often if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo+" matches "fo" and "foo" in text\n\
+"f fo foo".\n\
+- The expression "fo+o\\d" matches "foo2" and "fooo3" in text\n\
+"fo1 foo2 fooo3".\n\
+- The expression "<.+>" matches the whole text\n\
+"<p><b>bold</b>", but does not match anywhere in "<>".
+displayString_exact= {n} - Greedy match exactly n times
+additionalInfo_exact= Greedy match exactly n times.\n\nExamples:\n\
+- The expression "\\\\0[0-3][0-7]{2}" matches all three-digit octal character tokens.\n\
+- The expression "\\b\\w{4}\\b" matches all four-letter-words\n\
+such as "Java", "cool", or "food" (but not "dog").
+displayString_least= {n,} - Greedy match >= n times
+additionalInfo_least= Greedy match >= n times.\n\n\
+First tries to match the preceding token as many times as possible.\n\
+Falls back to matching it less often (but at least n times),\n\
+if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo{2,}" matches "foo" and "fooo" in text\n\
+"f fo foo fooo".\n\
+- The expression "fo{2,}o\\d" matches "fooo3" and "foooo4" in text\n\
+"fo1 foo2 fooo3 foooo4".\n\
+- The expression "10{3,}[^0]" matches all powers of ten that are larger than one thousand.\n\n\
+Note: The expressions "{0,}" and "*" are equivalent;\n\
+likewise, "{1,}" is equivalent to "+".
+displayString_count= {n,m} - Greedy match >= n times but <= m times
+additionalInfo_count= Greedy match >= n times but <= m times.\n\n\
+First tries to match the preceding token m times.\n\
+Falls back to matching it less often (but at least n times),\n\
+if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo{1,2}" matches "fo", "foo", and "foo" in text\n\
+"f fo foo fooo".\n\
+- The expression "fo{1,2}o\\d" matches "foo2" and "fooo3" in text\n\
+"fo1 foo2 fooo3 foooo4".\n\
+- The expression "^.{70,80}$" matches all the lines that contain\n\
+between 70 and 80 characters (inclusive).
+
+displayString_questLazy= ?? - Lazy match 0 or 1 times
+additionalInfo_questLazy= Lazy match 0 or 1 times.\n\n\
+First tries to not match the preceding token.\n\
+Falls back to matching it if this choice made a full match impossible.\n\nExample:\n\
+The expression "fo??" matches "f", "f", and "f" in text\n\
+"f fo foo".
+displayString_starLazy= *? - Lazy match 0 or more times
+additionalInfo_starLazy= Lazy match 0 or more times.\n\n\
+First tries to not match the preceding token.\n\
+Falls back to matching it more often if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo*?" matches "f", "f", and "f" in text\n\
+"f fo foo".\n\
+- The expression "fo*?o\\d" matches all three words in text\n\
+"fo1 foo2 fooo3".\n\
+- The expression "<.*?>" matches "<p>", "<b>", and "</b>" in text\n\
+"<p><b>bold</b>". Note: a more performant expression for finding\n\
+xml tags is "<[^>]*>", which avoids backtracking.
+displayString_plusLazy= +? - Lazy match 1 or more times
+additionalInfo_plusLazy= Lazy match 1 or more times\n\n\
+First tries to match the preceding token once.\n\
+Falls back to matching it more often if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo+?" matches "fo" and "fo" in text\n\
+"f fo foo".\n\
+- The expression "fo+?o\\d" matches "foo2" and "fooo3" in text\n\
+"fo1 foo2 fooo3".\n\
+- The expression "<.+?>" matches "<p>", "<b>", and "</b>" in text\n\
+"<p><b>bold</b>". Note: a more performant expression for finding\n\
+xml tags is "<[^>]*>", which avoids backtracking.
+displayString_exactLazy= {n}? - Lazy match exactly n times
+additionalInfo_exactLazy= Lazy match exactly n times.\n\n\
+This expression is equivalent to the expression\n\
+{n} - Greedy match exactly n times.
+displayString_leastLazy= {n,}? - Lazy match >= n times
+additionalInfo_leastLazy= Lazy match >= n times.\n\n\
+First tries to match the preceding token n times. Falls back to\n\
+matching it more often, if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo{2,}?" matches "foo" and "foo" in text\n\
+"f fo foo fooo".\n\
+- The expression "fo{2,}?o\\d" matches "fooo3" and "foooo4" in text\n\
+"fo1 foo2 fooo3 foooo4".\n\
+- The expression "10{3,}?[^0]" matches all powers of ten that are larger than one thousand.\n\n\
+Note: The expressions "{0,}?" and "*?" are equivalent;\n\
+likewise, "{1,}?" is equivalent to "+?".
+displayString_countLazy= {n,m}? - Lazy match >= n times but <= m times
+additionalInfo_countLazy= Lazy match >= n times but <= m times.\n\n\
+First tries to match the preceding token n times.\n\
+Falls back to matching it more often (but at most m times),\n\
+if this choice made a full match impossible.\n\nExamples:\n\
+- The expression "fo{1,2}?" matches "fo", "fo", and "fo" in text\n\
+"f fo foo fooo".\n\
+- The expression "fo{1,2}?o\\d" matches "foo2" and "fooo3" in text\n\
+"fo1 foo2 fooo3 foooo4".\n\
+
+displayString_questPoss= ?+ - Possessive match 0 or 1 times (no backtracking)
+additionalInfo_questPoss= Possessive match 0 or 1 times.\n\n\
+Matches the preceding token if possible. Never backtracks,\n\
+even if this choice renders a full match impossible.\n\nExample:\n\
+The expression "fo?+o\\d" matches the first, but not the second line in text\n\
+"foo1\n\
+fo1".
+displayString_starPoss= *+ Possessive match 0 or more times (no backtracking)
+additionalInfo_starPoss= Possessive match 0 or more times.\n\n\
+Tries to match the preceding token as many times as possible. Never backtracks,\n\
+even if this choice renders a full match impossible.\n\nExamples:\n\
+- The expression "fo*+" matches "f", "fo" and "foo" in text\n\
+"f fo foo".\n\
+- The expression "fo*+o\\d" matches nowhere in text\n\
+"fo1 foo2 fooo3".\n\
+- The expression "<.*+>" matches nowhere in text\n\
+"<p><b>bold</b>".
+displayString_plusPoss= ++ - Possessive match 1 or more times (no backtracking)
+additionalInfo_plusPoss= Possessive match 1 or more times.\n\n\
+Tries to match the preceding token as many times as possible. Never backtracks,\n\
+even if this choice renders a full match impossible.\n\nExamples:\n\
+- The expression "fo++" matches "fo" and "foo" in text\n\
+"f fo foo".\n\
+- The expression "fo++o\\d" matches nowhere in text\n\
+"fo1 foo2 fooo3".\n\
+- The expression "<.++>" matches nowhere in text\n\
+"<p><b>bold</b>".
+
+displayString_exactPoss= {n}+ - Possessive match exactly n times (no backtracking)
+additionalInfo_exactPoss= Possessive match exactly n times.\n\n\
+This expression is equivalent to the expression\n\
+{n} - Greedy match exactly n times.
+displayString_leastPoss= {n,}+ - Possessive match >= n times (no backtracking)
+additionalInfo_leastPoss= Possessive match >= n times.\n\n\
+Tries to match the preceding token as many times as possible, but at least n times.\n\
+Never backtracks, even if this choice renders a full match impossible.\n\nExamples:\n\
+- The expression "fo{2,}+" matches "foo" and "fooo" in text\n\
+"f fo foo fooo".\n\
+- The expression "fo{2,}?o\\d" matches nowhere in text\n\
+"fo1 foo2 fooo3 foooo4".\n\
+Note: The expressions "{0,}?" and "*?" are equivalent;\n\
+likewise, "{1,}?" is equivalent to "+?".
+
+displayString_countPoss= {n,m}+ - Possessive match >= n times but <= m times (no backtracking)
+additionalInfo_countPoss= Possessive match >= n times but <= m times.\n\n\
+Tries to match the preceding token as many times as possible, \n\
+at least n times and at most m times.\n\
+Never backtracks, even if this choice renders a full match impossible.\n\nExamples:\n\
+- The expression "fo{1,2}+" matches "fo", "foo", and "foo" in text\n\
+"f fo foo fooo".\n\
+- The expression "fo{1,2}+o\\d" matches only "fooo3" in text\n\
+"fo1 foo2 fooo3 foooo4".\n\
+- The expression "^.{70,80}+$" matches all the lines that contain\n\
+between 70 and 80 characters (inclusive).
+
+displayString_alt= U|V - Alternation: U or V
+additionalInfo_alt= Alternation.\n\n\
+First tries to match subexpression U. Falls back and tries to match V if U didn't match.\n\nExamples:\n\
+- The expression "A|B" applied to text "BA" first matches "B", then "A".\n\
+- The expression "AB|BC|CD" applied to text "ABC BC DAB" matches, in sequence:\n\
+"AB" in the first word, the second word "BC", "AB" at the very end.
+displayString_group= (Expr) - Mark Expr as capturing group
+additionalInfo_group= Mark Expr as capturing group.\n\n\
+Capturing groups are numbered by counting their opening parentheses from left to right.\n\
+In the expression "((A)(B(C)))", for example, there are four such groups:\n\
+1   ((A)(B(C)))\n\
+2   (A)\n\
+3   (B(C))\n\
+4   (C)\n\
+\n\
+Group zero always stands for the entire expression. During a match,\n\
+each subsequence of the input sequence that matches such a group is saved.\n\
+The captured subsequence i may be used later in the expression, via a back reference "\\i",\n\
+and may also be used in the replace string via "$i".\n\
+\n\
+Note: Groups beginning with (? are pure, non-capturing groups that\n\
+do not capture text and do not count towards the group total.
+
+displayString_bs_i= \\i - Match of the capturing group i
+additionalInfo_bs_i= Match of the capturing group i.\n\n\
+\\i matches the subsequence that has already been saved as capturing group i.\n\
+\\0 is not a valid group number in the regular expression.\n\nExample:\n\
+The expression "(\\d+)\\+\\1" matches "10+10" in text "9+10+10+11".\n\
+\n\
+Note: in the replace string, $i stands for the capturing group i. 
+
+displayString_bs= \\ - Quote next character
+additionalInfo_bs= Quote next character\n\nExample:\n\
+The expression "\\{\\n\\}" matches the text "{n}".
+
+displayString_bs_Q= \\Q - Start quoting
+additionalInfo_bs_Q= Start quoting\n\n\
+All characters between \\Q and the next \\E are taken literally and are not interpreted.\n\nExample:\n\
+The expression "\\Qnew int[] {42}\\E;" matches text "new int[] {42}".
+displayString_bs_E= \\E - End quoting
+additionalInfo_bs_E= End quoting\n\n\
+All characters between \\Q and the next \\E are taken literally and are not interpreted.\n\nExample:\n\
+The expression "\\Qnew int[] {42}\\E;" matches text "new int[] {42}".
+
+displayString_set= [ecl] - Character set
+additionalInfo_set= Character set\n\n\
+Matches a single character out of the set.\n\nExample:\n\
+The expression "[ecl]" matches "c" and "l" in text "cold".
+displayString_setExcl= [^ecl] - Excluded character set
+additionalInfo_setExcl= Excluded character set\n\n\
+Matches a single character that is not one of the excluded characters.\n\nExamples:\n\
+The expression "[^ecl]" matches "o" and "d" in text "cold".\n\
+The expression "[a-z&&[^ecl]]" matches any character from a to z, excluding e, c, and l.
+displayString_setRange= [c-l] - Character range
+additionalInfo_setRange= Character range\n\n\
+Matches a single character out of the range from 'c' to 'l'.\n\nExamples:\n\
+The expression "[c-l]" matches "c", "l", and "d" in text "cold".\n\
+The expression "[a-z&&[^ecl]]" matches any character from a to z, excluding e, c, and l.
+displayString_setInter= && - Intersection of character sets
+additionalInfo_setInter= Intersection of character sets\n\n\
+Matches a character that is in both of the given sets.\n\nExample:\n\
+The expression "[a-z&&[^ecl]]" matches any character from a to z, excluding e, c, and l.
+
+displayString_posix= \\p{Class} - POSIX or Unicode character class
+additionalInfo_posix= POSIX or Unicode character class\n\n\
+Matches a character from the given character class 'Class'.\n\
+Valid classes are:\n\
+\n\
+- POSIX character classes (US-ASCII only):\n\
+\    Lower, Upper, ASCII, Alpha, Digit, Alnum, Punct,\n\
+\    Graph, Print, Blank, Cntrl, XDigit, and Space.\n\
+\n\
+- Unicode blocks (with the prefix 'In'), e.g.:\n\
+\    InBasicLatin\n\
+\    InLatin-1Supplement\n\
+\    InGreek\n\
+\n\
+- Unicode categories, e.g.:\n\
+\    Lu: Uppercase Letter\n\
+\    Ll: Lowercase Letter\n\
+\    L:  Letter\n\
+\    N:  Number\n\
+\    Z:  Separator\n\
+\    LD: Letter or Digit\n\
+\    L1: Latin-1
+
+displayString_posixNot= \\P{Class} - Excluded POSIX or Unicode character class
+additionalInfo_posixNot= Excluded POSIX or Unicode character class\n\n\
+Negation of character set \\p{Class}. Example:\n\
+\\P{ASCII} is equivalent to [^\\p{ASCII}] and matches all non-ASCII characters.\n\n\
+Valid classes are:\n\
+\n\
+- POSIX character classes (US-ASCII only):\n\
+\    Lower, Upper, ASCII, Alpha, Digit, Alnum, Punct,\n\
+\    Graph, Print, Blank, Cntrl, XDigit, and Space.\n\
+\n\
+- Unicode blocks (with the prefix 'In'), e.g.:\n\
+\    InBasicLatin\n\
+\    InLatin-1Supplement\n\
+\    InGreek\n\
+\n\
+- Unicode categories, e.g.:\n\
+\    Lu: Uppercase Letter\n\
+\    Ll: Lowercase Letter\n\
+\    L:  Letter\n\
+\    N:  Number\n\
+\    Z:  Separator\n\
+\    LD: Letter or Digit\n\
+\    L1: Latin-1
+
+
+#Flags:
+displayString_flag= (?ismd-ismd) - Turn flags on or off
+additionalInfo_flag= Turn flags on and off for the rest of the matching process.\n\n\
+Flags before the dash are turned on; those after the dash are turned off.\n\
+The following flags are supported:\n\
+- i: case-insensitive matching\n\
+\n\
+- s: single-line, or dotall matching mode:\n\
+\        The expression . matches any character, including a line terminator.\n\
+\n\
+- m: multiline matching mode:\n\
+\        The expressions ^ and $ match just after or just before,\n\
+\        respectively, a line terminator or the end of the input sequence.\n\
+\        When multiline matching is turned off, these expressions only\n\
+\        match at the beginning and the end of the entire input sequence.\n\
+\        This flag is ON by default.\n\
+\n\
+- d: Unix lines matching mode:\n\
+\        Only the '\\n' line terminator\n\
+\        is recognized in the behavior of ., ^, and $
+# - u: unicode-aware case folding:\n\
+#        Case-insensitive matching, when enabled, is done in a manner consistent\n\
+#        with the Unicode Standard. By default, case-insensitive matching\n\
+#        assumes that only characters in the US-ASCII charset are being matched.
+# - c: canonical equivalence\n\
+#        Two characters will be considered to match if, and only if, their full\n\
+#        canonical decompositions match. The expression "a\\\u0075030A", for example,\n\
+#        will match the string "a\u030A" when this flag is specified.\n\
+#        By default, matching does not take canonical equivalence into account.
+# - x: comments mode\n\
+#        Whitespace is ignored, and embedded comments starting with\n\
+#        # are ignored until the end of a line.\n\
+
+displayString_flagExpr= (?ismd-ismd:Expr) - Turn flags on or off in Expr
+additionalInfo_flagExpr= Turn flags on and off in Expr.\n\n\
+Flags before the dash are turned on; those after the dash are turned off.\n\
+The following flags are supported:\n\
+- i: case-insensitive matching\n\
+\n\
+- s: single-line, or dotall matching mode:\n\
+\        The expression . matches any character, including a line terminator.\n\
+\n\
+- m: multiline matching mode:\n\
+\        The expressions ^ and $ match just after or just before,\n\
+\        respectively, a line terminator or the end of the input sequence.\n\
+\        When multiline matching is turned off, these expressions only\n\
+\        match at the beginning and the end of the entire input sequence.\n\
+\        This flag is ON by default.\n\
+\n\
+- d: Unix lines matching mode:\n\
+\        Only the '\\n' line terminator\n\
+\        is recognized in the behavior of ., ^, and $
+
+
+#Noncapturing groups:
+displayString_nonCap= (?:Expr) - Non-capturing group
+additionalInfo_nonCap= Non-capturing group of regular expression Expr.\n\n\
+The group is not saved in a back reference.\n\nExample:\n\
+The expression "(?:\\w+) (\\d+)" matches "bug 42" in text "It's bug 42.".\n\
+A back reference "$1" in the replace string will be replaced by "42".
+
+displayString_atomicCap= (?>Expr) - Non-capturing atomic group
+additionalInfo_atomicCap= Non-capturing atomic group of regular expression Expr.\n\n\
+Matches the regular expression Expr once, but does not backtrack into the expression\n\
+again if the first match did not prove to be successful later on.\n\
+The group is not saved in a back reference.
+
+#Lookaround:
+displayString_posLookahead= (?=Expr) - Zero-width positive lookahead
+additionalInfo_posLookahead= Expr, via zero-width positive lookahead.\n\n\
+Matches a position (zero-width: does not consume the matched characters),\n\
+where the next characters (-> lookahead)\n\
+do match (-> positive) the embedded expression Expr.\n\nExamples:\n\
+- The expression "var(?==)" matches only the first "var" in text "var=17; other=var;".\n\
+- The expression "\\b(?=\\w{7}\\b)\\w*clip\\w*\\b" matches any\n\
+seven-letter-word that contains "clip". It matches "Eclipse", but not "paperclip".
+
+displayString_negLookahead= (?!Expr) - Zero-width negative lookahead
+additionalInfo_negLookahead= Expr, via zero-width negative lookahead.\n\n\
+Matches a position (zero-width: does not consume the matched characters),\n\
+where the next characters (-> lookahead)\n\
+do not match (-> negative) the embedded expression Expr.\n\nExamples:\n\
+- The expression "var(?!=)" matches only the second "var" in text "var=17; other=var;".\n\
+- The expression "\\b(?!\\w{5,7}\\b)\\w*clip\\w*\\b" matches any\n\
+word that contains "clip" and consists of less than 5 or more than 7 characters.\n\
+It matches "clip" and "paperclip", but not "Eclipse".
+
+displayString_posLookbehind= (?<=Expr) - Zero-width positive lookbehind
+additionalInfo_posLookbehind= Expr, via zero-width positive lookbehind.\n\n\
+Matches a position (zero-width: does not consume the matched characters),\n\
+where the previous characters (-> lookbehind)\n\
+do match (-> positive) the embedded expression Expr.\n\nExample:\n\
+- The expression "\\w{5,}+(?<=as)\\b" matches "alias" and "bananas",\n\
+but does not match "peas", "apples", or "Alaska".
+
+displayString_negLookbehind= (?<!Expr) - Zero-width negative lookbehind
+additionalInfo_negLookbehind= Expr, via zero-width negative lookbehind.\n\n\
+Matches a position (zero-width: does not consume the matched characters),\n\
+where the previous characters (-> lookbehind)\n\
+do not match (-> negative) the embedded expression Expr.\n\nExample:\n\
+- The expression "\\w{5,}+(?<!as)\\b" matches "Eclipse" and "apples",\n\
+but does not match "peas" or "bananas".
+
+#Replace string:
+displayString_dollar= $i - Match of the capturing group i
+additionalInfo_dollar= Match of the capturing group i.\n\n\
+$i is the string that has been saved as capturing group i.\n\
+$0 is the subsequence matched by the entire expression.\n\
+\n\
+Note: in the find expression, \\i stands for the capturing group i. 
+displayString_replace_cap= \\i - Match of the capturing group i
+additionalInfo_replace_cap= Match of the capturing group i.\n\n\
+\\i is the string that has been saved as capturing group i.\n\
+\\0 is the subsequence matched by the entire expression.\n\
+\n\
+Note: \\i is equivalent to $i 
+displayString_replace_bs= \\ - Quote next character
+additionalInfo_replace_bs= Quote next character\n\nExamples:\n\
+"\\$" will be replaced by "$".\n\
+"\\q" will be replaced by "q".\n\
+"\\\\" will be replaced by "\\".
+displayString_replace_bs_n= \\n - Newline
+additionalInfo_replace_bs_n= Newline (\\x0A, decimal: 10)\n\n\
+Note that \\n always inserts the newline character,\n\
+even if the document uses different line delimiters.\n\n\
+To insert the document line delimiter, use \\R.
+displayString_replace_bs_r= \\r - CR
+additionalInfo_replace_bs_r= Carriage Return (\\x0D, decimal: 13)\n\n\
+Note that \\r always inserts the carriage return character,\n\
+even if the document uses different line delimiters.\n\n\
+To insert the document line delimiter, use \\R.
+displayString_replace_bs_R= \\R - Line delimiter
+additionalInfo_replace_bs_R= Line delimiter\n\n\
+Inserts the default line delimiter of the document.
+displayString_replace_bs_C=\\C - Retain case
+additionalInfo_replace_bs_C=\\C - Retain casing of match (all lower case, all upper case, capitalized)\n\
+when replacing expression after \\C.\n\nExamples:\n\
+Find: "foo" Replace: "my\\Cbar\\CFar"\n\
+"foo" will be replaced by "mybarfar".\n\
+"FOO" will be replaced by "myBARFAR".\n\
+"Foo" will be replaced by "myBarFar".\n\n\
+Note that the content of a group ($i, \\i) is currently inserted unmodified.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.TextMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+FindReplaceDocumentAdapter.illegalControlEscape= Illegal control escape sequence {0}
+FindReplaceDocumentAdapter.illegalHexEscape= Illegal hexadecimal escape sequence {0}
+FindReplaceDocumentAdapter.illegalLinebreak=Illegal position for \\R
+FindReplaceDocumentAdapter.illegalUnicodeEscape= Illegal Unicode escape sequence {0}
+FindReplaceDocumentAdapter.incompatibleLineDelimiter= Incompatible line delimiter
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.contentassist.JFaceTextMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2000, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+
+InfoPopup.info_delay_timer_name=Additional info timer
+AdditionalInfoController.job_name=Computing additional info
+
+ContentAssistant.assist_delay_timer_name=AutoAssist Delay
+CompletionProposalPopup.no_proposals=no proposals
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.hyperlink.HyperlinkMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,16 @@
+###############################################################################
+# Copyright (c) 2008 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+LinkListInformationControl.unknownLink= Unknown Hyperlink
+
+MultipleHyperlinkPresenter.clickLinkAfordance =Click link to open
+
+URLHyperlink.hyperlinkText= Open ''{0}'' in a browser
Binary file res/dwtx.jface.text.source.projection.collapsed.gif has changed
Binary file res/dwtx.jface.text.source.projection.expanded.gif has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.templates.JFaceTextTemplateMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+# template proposal
+TemplateProposal.displayString= {0} - {1}
+TemplateProposal.errorDialog.title=Template Evaluation Error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/res/dwtx.jface.text.templates.TextTemplateMessages.properties	Mon Sep 08 00:51:37 2008 +0200
@@ -0,0 +1,25 @@
+###############################################################################
+# Copyright (c) 2000, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+# template translator
+TemplateTranslator.error.incomplete.variable=Template has incomplete variables. Type '$$' if to enter the dollar character.
+TemplateTranslator.error.invalid.identifier=Template has invalid variable identifiers.
+TemplateTranslator.error.incompatible.type=Template variable ''{0}'' has incompatible types
+
+# global variables
+GlobalVariables.variable.description.cursor=The cursor position after editing template variables
+GlobalVariables.variable.description.dollar=The dollar symbol
+GlobalVariables.variable.description.date=Current date
+GlobalVariables.variable.description.year=Current year
+GlobalVariables.variable.description.time=Current time
+GlobalVariables.variable.description.user=User name
+GlobalVariables.variable.description.selectedWord= The selected word
+GlobalVariables.variable.description.selectedLines= The selected lines