changeset 140:26688fec6d23

Following dsss compile errors
author Frank Benoit <benoit@tionex.de>
date Sun, 24 Aug 2008 03:23:46 +0200
parents 93a6ec48fd28
children ea8dd2e11034
files dwtx/jface/internal/text/InformationControlReplacer.d dwtx/jface/internal/text/StickyHoverManager.d dwtx/jface/internal/text/html/HTMLTextPresenter.d dwtx/jface/internal/text/revisions/RevisionPainter.d dwtx/jface/text/AbstractDocument.d dwtx/jface/text/AbstractHoverInformationControlManager.d dwtx/jface/text/AbstractLineTracker.d dwtx/jface/text/DefaultDocumentAdapter.d dwtx/jface/text/DefaultPositionUpdater.d dwtx/jface/text/DefaultUndoManager.d dwtx/jface/text/DocumentRewriteSession.d dwtx/jface/text/FindReplaceDocumentAdapter.d dwtx/jface/text/Position.d dwtx/jface/text/RegExMessages.d dwtx/jface/text/RewriteSessionEditProcessor.d dwtx/jface/text/TextMessages.d dwtx/jface/text/TextPresentation.d dwtx/jface/text/TextViewer.d dwtx/jface/text/TextViewerHoverManager.d dwtx/jface/text/TreeLineTracker.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/JFaceTextMessages.d dwtx/jface/text/contentassist/PopupCloser.d dwtx/jface/text/hyperlink/AbstractHyperlinkDetector.d dwtx/jface/text/hyperlink/HyperlinkManager.d dwtx/jface/text/hyperlink/HyperlinkMessages.d dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d dwtx/jface/text/hyperlink/URLHyperlink.d dwtx/jface/text/hyperlink/URLHyperlinkDetector.d dwtx/jface/text/link/InclusivePositionUpdater.d dwtx/jface/text/link/LinkedModeModel.d dwtx/jface/text/link/LinkedModeUI.d dwtx/jface/text/projection/ProjectionDocument.d dwtx/jface/text/projection/ProjectionDocumentManager.d dwtx/jface/text/projection/ProjectionMapping.d dwtx/jface/text/reconciler/Reconciler.d dwtx/jface/text/source/AnnotationModel.d dwtx/jface/text/source/AnnotationPainter.d dwtx/jface/text/templates/DocumentTemplateContext.d dwtx/jface/text/templates/InclusivePositionUpdater.d dwtx/jface/text/templates/TemplateContextType.d dwtx/text/edits/EditDocument.d dwtx/text/edits/TextEdit.d dwtx/text/edits/TextEditProcessor.d
diffstat 48 files changed, 845 insertions(+), 826 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/jface/internal/text/InformationControlReplacer.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/internal/text/InformationControlReplacer.d	Sun Aug 24 03:23:46 2008 +0200
@@ -124,7 +124,7 @@
         }
         
         if cast(DEBUG)
-            System.out.println("InformationControlReplacer: no active replaceable"); //$NON-NLS-1$
+            System.out_.println("InformationControlReplacer: no active replaceable"); //$NON-NLS-1$
     }
 
     /**
--- a/dwtx/jface/internal/text/StickyHoverManager.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/internal/text/StickyHoverManager.d	Sun Aug 24 03:23:46 2008 +0200
@@ -230,7 +230,7 @@
          * @see dwt.events.FocusListener#focusLost(dwt.events.FocusEvent)
          */
         public void focusLost(FocusEvent e) {
-            if cast(DEBUG) System.out.println("StickyHoverManager.Closer.focusLost(): " + e); //$NON-NLS-1$
+            if cast(DEBUG) System.out_.println("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.
@@ -250,7 +250,7 @@
                 
                 IInformationControl infoControl= getCurrentInformationControl2();
                 if (infoControl !is null && !infoControl.isFocusControl() && infoControl instanceof IInformationControlExtension3) {
-//                  if cast(DEBUG) System.out.println("StickyHoverManager.Closer.handleEvent(): activeShell= " + fDisplay.getActiveShell()); //$NON-NLS-1$
+//                  if cast(DEBUG) System.out_.println("StickyHoverManager.Closer.handleEvent(): activeShell= " + fDisplay.getActiveShell()); //$NON-NLS-1$
                     IInformationControlExtension3 iControl3= cast(IInformationControlExtension3) infoControl;
                     Rectangle controlBounds= iControl3.getBounds();
                     if (controlBounds !is null) {
@@ -272,7 +272,7 @@
                 }
                 
             } else if (event.type is DWT.FocusOut) {
-                if cast(DEBUG) System.out.println("StickyHoverManager.Closer.handleEvent(): focusOut: " + event); //$NON-NLS-1$
+                if cast(DEBUG) System.out_.println("StickyHoverManager.Closer.handleEvent(): focusOut: " + event); //$NON-NLS-1$
                 IInformationControl iControl= getCurrentInformationControl2();
                 if (iControl !is null && ! iControl.isFocusControl())
                     hideInformationControl();
@@ -306,7 +306,7 @@
             super.showInformationControl(subjectArea);
         else
             if cast(DEBUG)
-                System.out.println("cancelled StickyHoverManager.showInformationControl(..): did not get widget token (with prio)"); //$NON-NLS-1$
+                System.out_.println("cancelled StickyHoverManager.showInformationControl(..): did not get widget token (with prio)"); //$NON-NLS-1$
     }
 
     /*
@@ -339,7 +339,7 @@
     public bool requestWidgetToken(IWidgetTokenOwner owner) {
         hideInformationControl();
         if cast(DEBUG)
-            System.out.println("StickyHoverManager gave up widget token (no prio)"); //$NON-NLS-1$
+            System.out_.println("StickyHoverManager gave up widget token (no prio)"); //$NON-NLS-1$
         return true;
     }
 
@@ -350,21 +350,21 @@
         if (getCurrentInformationControl2() !is null) {
             if (getCurrentInformationControl2().isFocusControl()) {
                 if cast(DEBUG)
-                    System.out.println("StickyHoverManager kept widget token (focused)"); //$NON-NLS-1$
+                    System.out_.println("StickyHoverManager kept widget token (focused)"); //$NON-NLS-1$
                 return false;
             } else if (priority > WIDGET_PRIORITY) {
                 hideInformationControl();
                 if cast(DEBUG)
-                    System.out.println("StickyHoverManager gave up widget token (prio)"); //$NON-NLS-1$
+                    System.out_.println("StickyHoverManager gave up widget token (prio)"); //$NON-NLS-1$
                 return true;
             } else {
                 if cast(DEBUG)
-                    System.out.println("StickyHoverManager kept widget token (prio)"); //$NON-NLS-1$
+                    System.out_.println("StickyHoverManager kept widget token (prio)"); //$NON-NLS-1$
                 return false;
             }
         }
         if cast(DEBUG)
-            System.out.println("StickyHoverManager gave up widget token (no iControl)"); //$NON-NLS-1$
+            System.out_.println("StickyHoverManager gave up widget token (no iControl)"); //$NON-NLS-1$
         return true;
     }
 
--- a/dwtx/jface/internal/text/html/HTMLTextPresenter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTMLTextPresenter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -202,7 +202,7 @@
             return ""; //$NON-NLS-1$
 
         if (end < length -1)
-            buffer.delete(end + 1, length);
+            buffer.delete_(end + 1, length);
         else
             end= length;
 
@@ -210,7 +210,7 @@
         while (start < end && Character.isWhitespace(buffer.charAt(start)))
             ++ start;
 
-        buffer.delete(0, start);
+        buffer.delete_(0, start);
         presentation.setResultWindow(new Region(start, buffer.length()));
         return buffer.toString();
     }
--- a/dwtx/jface/internal/text/revisions/RevisionPainter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/RevisionPainter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -1231,7 +1231,7 @@
      */
     private void onFocusLineChanged(int previousLine, int nextLine) {
         if cast(DEBUG)
-            System.out.println("line: " + previousLine + " > " + nextLine); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println("line: " + previousLine + " > " + nextLine); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusLine= nextLine;
         RevisionRange region= getRange(nextLine);
         updateFocusRange(region);
@@ -1255,7 +1255,7 @@
      */
     private void onFocusRangeChanged(RevisionRange previousRange, RevisionRange nextRange) {
         if cast(DEBUG)
-            System.out.println("range: " + previousRange + " > " + nextRange); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println("range: " + previousRange + " > " + nextRange); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusRange= nextRange;
         Revision revision= nextRange is null ? null : nextRange.getRevision();
         updateFocusRevision(revision);
@@ -1274,7 +1274,7 @@
      */
     private void onFocusRevisionChanged(Revision previousRevision, Revision nextRevision) {
         if cast(DEBUG)
-            System.out.println("revision: " + previousRevision + " > " + nextRevision); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println("revision: " + previousRevision + " > " + nextRevision); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusRevision= nextRevision;
         uninstallWheelHandler();
         installWheelHandler();
--- a/dwtx/jface/text/AbstractDocument.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/AbstractDocument.d	Sun Aug 24 03:23:46 2008 +0200
@@ -493,7 +493,7 @@
     /*
      * @see dwtx.jface.text.IDocument#addPosition(java.lang.String, dwtx.jface.text.Position)
      */
-    public void addPosition(String category, Position position) throws BadLocationException, BadPositionCategoryException  {
+    public void addPosition(String category, Position position)  {
 
         if ((0 > position.offset) || (0 > position.length) || (position.offset + position.length > getLength()))
             throw new BadLocationException();
@@ -505,7 +505,7 @@
         if (list is null)
             throw new BadPositionCategoryException();
         list.add(computeIndexInPositionList(list, position.offset), position);
-        
+
         List endPositions= cast(List) fEndPositions.get(category);
         if (endPositions is null)
             throw new BadPositionCategoryException();
@@ -598,7 +598,7 @@
     protected int computeIndexInPositionList(List positions, int offset) {
         return computeIndexInPositionList(positions, offset, true);
     }
-    
+
     /**
      * Computes the index in the list of positions at which a position with the given
      * position would be inserted. The position to insert is supposed to become the first
@@ -676,7 +676,7 @@
     /*
      * @see dwtx.jface.text.IDocument#computeIndexInCategory(java.lang.String, int)
      */
-    public int computeIndexInCategory(String category, int offset) throws BadLocationException, BadPositionCategoryException {
+    public int computeIndexInCategory(String category, int offset)  {
 
         if (0 > offset || offset > getLength())
             throw new BadLocationException();
@@ -697,7 +697,7 @@
     protected void fireDocumentPartitioningChanged() {
         if (fDocumentPartitioningListeners is null)
             return;
-        
+
         Object[] listeners= fDocumentPartitioningListeners.getListeners();
         for (int i= 0; i < listeners.length; i++)
             (cast(IDocumentPartitioningListener)listeners[i]).documentPartitioningChanged(this);
@@ -718,7 +718,7 @@
     protected void fireDocumentPartitioningChanged(IRegion region) {
         if (fDocumentPartitioningListeners is null)
             return;
-        
+
         Object[] listeners= fDocumentPartitioningListeners.getListeners();
         for (int i= 0; i < listeners.length; i++) {
             IDocumentPartitioningListener l= cast(IDocumentPartitioningListener)listeners[i];
@@ -785,7 +785,7 @@
         Object[] listeners= fPrenotifiedDocumentListeners.getListeners();
         for (int i= 0; i < listeners.length; i++)
             (cast(IDocumentListener)listeners[i]).documentAboutToBeChanged(event);
-        
+
         listeners= fDocumentListeners.getListeners();
         for (int i= 0; i < listeners.length; i++)
             (cast(IDocumentListener)listeners[i]).documentAboutToBeChanged(event);
@@ -967,20 +967,20 @@
     public String[] getLegalLineDelimiters() {
         return getTracker().getLegalLineDelimiters();
     }
-    
+
     /*
      * @see dwtx.jface.text.IDocumentExtension4#getDefaultLineDelimiter()
      * @since 3.1
      */
     public String getDefaultLineDelimiter() {
-        
+
         String lineDelimiter= null;
-        
+
         try {
             lineDelimiter= getLineDelimiter(0);
         } catch (BadLocationException x) {
         }
-    
+
         if (lineDelimiter !is null)
             return lineDelimiter;
 
@@ -996,14 +996,14 @@
                 break;
             }
         }
-        
+
         if (lineDelimiter is null)
             lineDelimiter= delimiters[0];
-    
+
         return lineDelimiter;
-        
+
     }
-    
+
     /*
      * @see dwtx.jface.text.IDocumentExtension4#setInitialLineDelimiter(java.lang.String)
      * @since 3.1
@@ -1182,7 +1182,7 @@
         if (c is null)
             throw new BadPositionCategoryException();
         removeFromPositionsList(c, position, true);
-        
+
         List endPositions= cast(List) fEndPositions.get(category);
         if (endPositions is null)
             throw new BadPositionCategoryException();
@@ -1199,14 +1199,14 @@
      */
     private void removeFromPositionsList(List positions, Position position, bool orderedByOffset) {
         int size= positions.size();
-        
+
         //Assume position is somewhere near it was before
         int index= computeIndexInPositionList(positions, orderedByOffset ? position.offset : position.offset + position.length - 1, orderedByOffset);
         if (index < size && positions.get(index) is position) {
             positions.remove(index);
             return;
         }
-        
+
         int back= index - 1;
         int forth= index + 1;
         while (back >= 0 || forth < size) {
@@ -1217,7 +1217,7 @@
                 }
                 back--;
             }
-            
+
             if (forth < size) {
                 if (position is positions.get(forth)) {
                     positions.remove(forth);
@@ -1305,7 +1305,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public bool isLineInformationRepairNeeded(int offset, int length, String text)  {
@@ -1328,7 +1328,7 @@
     public void set(String text) {
         set(text, getNextModificationStamp());
     }
-    
+
     /*
      * @see dwtx.jface.text.IDocumentExtension4#set(java.lang.String, long)
      * @since 3.1
@@ -1523,7 +1523,7 @@
      * @see dwtx.jface.text.IDocumentExtension3#computeZeroLengthPartitioning(java.lang.String, int, int)
      * @since 3.0
      */
-    public ITypedRegion[] computePartitioning(String partitioning, int offset, int length, bool includeZeroLengthPartitions) throws BadLocationException, BadPartitioningException {
+    public ITypedRegion[] computePartitioning(String partitioning, int offset, int length, bool includeZeroLengthPartitions)  {
         if ((0 > offset) || (0 > length) || (offset + length > getLength()))
             throw new BadLocationException();
 
@@ -1536,7 +1536,7 @@
             checkStateOfPartitioner(partitioner, partitioning);
             return partitioner.computePartitioning(offset, length);
         } else if (DEFAULT_PARTITIONING.equals(partitioning))
-            return new TypedRegion[] { new TypedRegion(offset, length, DEFAULT_CONTENT_TYPE) };
+            return [ new TypedRegion(offset, length, DEFAULT_CONTENT_TYPE) ];
         else
             throw new BadPartitioningException();
     }
@@ -1545,7 +1545,7 @@
      * @see dwtx.jface.text.IDocumentExtension3#getZeroLengthContentType(java.lang.String, int)
      * @since 3.0
      */
-    public String getContentType(String partitioning, int offset, bool preferOpenPartitions) throws BadLocationException, BadPartitioningException {
+    public String getContentType(String partitioning, int offset, bool preferOpenPartitions)  {
         if ((0 > offset) || (offset > getLength()))
             throw new BadLocationException();
 
@@ -1580,7 +1580,7 @@
         if (partitioner !is null)
             return partitioner.getLegalContentTypes();
         if (DEFAULT_PARTITIONING.equals(partitioning))
-            return new String[] { DEFAULT_CONTENT_TYPE };
+            return [ DEFAULT_CONTENT_TYPE ];
         throw new BadPartitioningException();
     }
 
@@ -1588,7 +1588,7 @@
      * @see dwtx.jface.text.IDocumentExtension3#getZeroLengthPartition(java.lang.String, int)
      * @since 3.0
      */
-    public ITypedRegion getPartition(String partitioning, int offset, bool preferOpenPartitions) throws BadLocationException, BadPartitioningException {
+    public ITypedRegion getPartition(String partitioning, int offset, bool preferOpenPartitions)  {
         if ((0 > offset) || (offset > getLength()))
             throw new BadLocationException();
 
@@ -1682,8 +1682,8 @@
 
 
         fDocumentRewriteSession= new DocumentRewriteSession(sessionType);
-        if cast(DEBUG)
-            System.out.println("AbstractDocument: Starting rewrite session: " + fDocumentRewriteSession); //$NON-NLS-1$
+        if (DEBUG)
+            System.out_.println("AbstractDocument: Starting rewrite session: " + fDocumentRewriteSession); //$NON-NLS-1$
 
         fireRewriteSessionChanged(new DocumentRewriteSessionEvent(this, fDocumentRewriteSession, DocumentRewriteSessionEvent.SESSION_START));
 
@@ -1729,8 +1729,8 @@
     public void stopRewriteSession(DocumentRewriteSession session) {
         if (fDocumentRewriteSession is session) {
 
-            if cast(DEBUG)
-                System.out.println("AbstractDocument: Stopping rewrite session: " + session); //$NON-NLS-1$
+            if (DEBUG)
+                System.out_.println("AbstractDocument: Stopping rewrite session: " + session); //$NON-NLS-1$
 
             DocumentRewriteSessionType sessionType= session.getSessionType();
             if (DocumentRewriteSessionType.SEQUENTIAL is sessionType || DocumentRewriteSessionType.STRICTLY_SEQUENTIAL is sessionType)
@@ -1809,18 +1809,18 @@
         if (session !is null) {
             extension.stopRewriteSession(session);
 
-            if cast(DEBUG)
-                System.out.println("AbstractDocument: Flushing rewrite session for partition type: " + partitioning); //$NON-NLS-1$
+            if (DEBUG)
+                System.out_.println("AbstractDocument: Flushing rewrite session for partition type: " + partitioning); //$NON-NLS-1$
 
             DocumentPartitioningChangedEvent event= new DocumentPartitioningChangedEvent(this);
             event.setPartitionChange(partitioning, 0, getLength());
             fireDocumentPartitioningChanged(event);
         }
     }
-    
+
     /**
      * Returns all positions of the given category that are inside the given region.
-     * 
+     *
      * @param category the position category
      * @param offset the start position of the region, must be >= 0
      * @param length the length of the region, must be >= 0
@@ -1844,18 +1844,18 @@
             } else {
                 documentPositions= getStartingPositions(category, offset, length);
             }
-            
+
             ArrayList list= new ArrayList(documentPositions.size());
-            
+
             Position region= new Position(offset, length);
-            
+
             for (Iterator iterator= documentPositions.iterator(); iterator.hasNext();) {
                 Position position= cast(Position) iterator.next();
                 if (isWithinRegion(region, position, canStartBefore, canEndAfter)) {
                     list.add(position);
                 }
             }
-            
+
             Position[] positions= new Position[list.size()];
             list.toArray(positions);
             return positions;
@@ -1866,14 +1866,14 @@
             return positions;
         } else {
             Assert.isLegal(canEndAfter && !canStartBefore);
-            
+
             List list= getStartingPositions(category, offset, length);
             Position[] positions= new Position[list.size()];
             list.toArray(positions);
             return positions;
         }
     }
-    
+
     /*
      * @since 3.4
      */
@@ -1889,11 +1889,11 @@
             return region.includes(start) && region.includes(start + position.getLength() - 1);
         }
     }
-    
+
     /**
      * A list of positions in the given category with an offset inside the given
      * region. The order of the positions is arbitrary.
-     * 
+     *
      * @param category the position category
      * @param offset the offset of the region
      * @param length the length of the region
@@ -1905,17 +1905,17 @@
         List positions= cast(List) fPositions.get(category);
         if (positions is null)
             throw new BadPositionCategoryException();
-        
+
         int indexStart= computeIndexInPositionList(positions, offset, true);
         int indexEnd= computeIndexInPositionList(positions, offset + length, true);
-        
+
         return positions.subList(indexStart, indexEnd);
     }
 
     /**
      * A list of positions in the given category with an end position inside
      * the given region. The order of the positions is arbitrary.
-     * 
+     *
      * @param category the position category
      * @param offset the offset of the region
      * @param length the length of the region
@@ -1927,10 +1927,10 @@
         List positions= cast(List) fEndPositions.get(category);
         if (positions is null)
             throw new BadPositionCategoryException();
-        
+
         int indexStart= computeIndexInPositionList(positions, offset, false);
         int indexEnd= computeIndexInPositionList(positions, offset + length, false);
-        
+
         return positions.subList(indexStart, indexEnd);
     }
 
--- a/dwtx/jface/text/AbstractHoverInformationControlManager.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/AbstractHoverInformationControlManager.d	Sun Aug 24 03:23:46 2008 +0200
@@ -305,7 +305,7 @@
             fIsActive= false;
 
             if cast(DEBUG)
-                System.out.println("AbstractHoverInformationControlManager.Closer stopped"); //$NON-NLS-1$
+                System.out_.println("AbstractHoverInformationControlManager.Closer stopped"); //$NON-NLS-1$
 
             if (fSubjectControl !is null && !fSubjectControl.isDisposed()) {
                 fSubjectControl.removeMouseListener(this);
@@ -505,7 +505,7 @@
          */
         private void handleMouseMove(Event event) {
 //          if cast(DEBUG)
-//              System.out.println("AbstractHoverInformationControl.Closer.handleMouseMove():" + event); //$NON-NLS-1$
+//              System.out_.println("AbstractHoverInformationControl.Closer.handleMouseMove():" + event); //$NON-NLS-1$
             
             if (!(event.widget instanceof Control))
                 return;
@@ -519,7 +519,7 @@
             
             IInformationControl iControl= getCurrentInformationControl();
             if (!hasInformationControlReplacer() || !canMoveIntoInformationControl(iControl)) {
-                if (AbstractHoverInformationControlManager.this instanceof AnnotationBarHoverManager) {
+                if (this.outer instanceof AnnotationBarHoverManager) {
                     if (getInternalAccessor().getAllowMouseExit())
                         return;
                 }
@@ -640,7 +640,7 @@
             if (fIsComputing || fIsInRestartMode ||
                     (fSubjectControl !is null && !fSubjectControl.isDisposed() && fSubjectControl.getShell() !is fSubjectControl.getShell().getDisplay().getActiveShell())) {
                 if cast(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("AbstractHoverInformationControlManager...mouseHover: @ " + event.x + "/" + event.y + " : hover cancelled: fIsComputing= " + fIsComputing + ", fIsInRestartMode= " + fIsInRestartMode); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
                 return;
             }
             
@@ -965,11 +965,11 @@
             bool cancelled= fReplacingDelayJob.cancel();
             fReplacingDelayJob= null;
 //          if cast(DEBUG)
-//              System.out.println("AbstractHoverInformationControlManager.cancelReplacingDelay(): cancelled=" + cancelled); //$NON-NLS-1$
+//              System.out_.println("AbstractHoverInformationControlManager.cancelReplacingDelay(): cancelled=" + cancelled); //$NON-NLS-1$
             return cancelled;
         }
 //      if cast(DEBUG)
-//          System.out.println("AbstractHoverInformationControlManager.cancelReplacingDelay(): not delayed"); //$NON-NLS-1$
+//          System.out_.println("AbstractHoverInformationControlManager.cancelReplacingDelay(): not delayed"); //$NON-NLS-1$
         return true;
     }
     
@@ -995,7 +995,7 @@
                             replaceInformationControl(false);
                     } else {
 //                      if cast(DEBUG)
-//                          System.out.println("AbstractHoverInformationControlManager.startReplaceInformationControl(): rescheduled"); //$NON-NLS-1$
+//                          System.out_.println("AbstractHoverInformationControlManager.startReplaceInformationControl(): rescheduled"); //$NON-NLS-1$
                         fReplacingDelayJob.schedule(HOVER_AUTO_REPLACING_DELAY);
                     }
                 }
@@ -1023,7 +1023,7 @@
         fReplacingDelayJob.setSystem(true);
         fReplacingDelayJob.setPriority(Job.INTERACTIVE);
 //      if cast(DEBUG)
-//          System.out.println("AbstractHoverInformationControlManager.startReplaceInformationControl(): scheduled"); //$NON-NLS-1$
+//          System.out_.println("AbstractHoverInformationControlManager.startReplaceInformationControl(): scheduled"); //$NON-NLS-1$
         fReplacingDelayJob.schedule(HOVER_AUTO_REPLACING_DELAY);
     }
 
--- a/dwtx/jface/text/AbstractLineTracker.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/AbstractLineTracker.d	Sun Aug 24 03:23:46 2008 +0200
@@ -180,7 +180,7 @@
 
     /**
      * Tells whether this class is in debug mode.
-     * 
+     *
      * @since 3.1
      */
     private static final bool DEBUG= false;
@@ -198,7 +198,7 @@
 
     /**
      * Representation of replace and set requests.
-     * 
+     *
      * @since 3.1
      */
     protected static class Request {
@@ -225,19 +225,19 @@
 
     /**
      * The active rewrite session.
-     * 
+     *
      * @since 3.1
      */
     private DocumentRewriteSession fActiveRewriteSession;
     /**
      * The list of pending requests.
-     * 
+     *
      * @since 3.1
      */
     private List fPendingRequests;
     /**
      * The implementation that this tracker delegates to.
-     * 
+     *
      * @since 3.2
      */
     private ILineTracker fDelegate= new class()  ListLineTracker {
@@ -364,7 +364,7 @@
 
     /**
      * Converts the implementation to be a {@link TreeLineTracker} if it isn't yet.
-     * 
+     *
      * @since 3.2
      */
     private void checkImplementation() {
@@ -385,7 +385,7 @@
     /**
      * Returns the information about the first delimiter found in the given text starting at the
      * given offset.
-     * 
+     *
      * @param text the text to be searched
      * @param offset the offset in the given text
      * @return the information of the first found delimiter or <code>null</code>
@@ -417,7 +417,7 @@
 
     /**
      * Tells whether there's an active rewrite session.
-     * 
+     *
      * @return <code>true</code> if there is an active rewrite session, <code>false</code>
      *         otherwise
      * @since 3.1
@@ -428,13 +428,13 @@
 
     /**
      * Flushes the active rewrite session.
-     * 
+     *
      * @throws BadLocationException in case the recorded requests cannot be processed correctly
      * @since 3.1
      */
     protected final void flushRewriteSession()  {
-        if cast(DEBUG)
-            System.out.println("AbstractLineTracker: Flushing rewrite session: " + fActiveRewriteSession); //$NON-NLS-1$
+        if (DEBUG)
+            System.out_.println("AbstractLineTracker: Flushing rewrite session: " + fActiveRewriteSession); //$NON-NLS-1$
 
         Iterator e= fPendingRequests.iterator();
 
@@ -452,7 +452,7 @@
 
     /**
      * Checks the presence of a rewrite session and flushes it.
-     * 
+     *
      * @throws BadLocationException in case flushing does not succeed
      * @since 3.1
      */
--- a/dwtx/jface/text/DefaultDocumentAdapter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/DefaultDocumentAdapter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -487,7 +487,7 @@
         TextChangedEvent event= new TextChangedEvent(this);
 
         if (fTextChangeListeners !is null && fTextChangeListeners.size() > 0) {
-            Iterator e= new ArrayList(fTextChangeListeners).iterator();
+            Iterator e= (new ArrayList(fTextChangeListeners)).iterator();
             while (e.hasNext())
                 (cast(TextChangeListener) e.next()).textChanged(event);
         }
@@ -504,7 +504,7 @@
         TextChangedEvent event = new TextChangedEvent(this);
 
         if (fTextChangeListeners !is null && fTextChangeListeners.size() > 0) {
-            Iterator e= new ArrayList(fTextChangeListeners).iterator();
+            Iterator e= (new ArrayList(fTextChangeListeners)).iterator();
             while (e.hasNext())
                 (cast(TextChangeListener) e.next()).textSet(event);
         }
@@ -532,7 +532,7 @@
             event.newLineCount= (fEvent.fText is null ? 0 : document.computeNumberOfLines(fEvent.fText));
 
             if (fTextChangeListeners !is null && fTextChangeListeners.size() > 0) {
-                Iterator e= new ArrayList(fTextChangeListeners).iterator();
+                Iterator e= (new ArrayList(fTextChangeListeners)).iterator();
                 while (e.hasNext())
                      (cast(TextChangeListener) e.next()).textChanging(event);
             }
--- a/dwtx/jface/text/DefaultPositionUpdater.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/DefaultPositionUpdater.d	Sun Aug 24 03:23:46 2008 +0200
@@ -346,7 +346,7 @@
 
         if (fOffset < fPosition.offset && (fPosition.offset + fPosition.length < fOffset + fLength)) {
 
-            fPosition.delete();
+            fPosition.delete_();
 
             try {
                 fDocument.removePosition(fCategory, fPosition);
--- a/dwtx/jface/text/DefaultUndoManager.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/DefaultUndoManager.d	Sun Aug 24 03:23:46 2008 +0200
@@ -301,24 +301,24 @@
          * @since 3.1
          */
         public bool canUndo() {
-            
+
             if (isConnected() && isValid()) {
                 IDocument doc= fTextViewer.getDocument();
                 if ( cast(IDocumentExtension4)doc ) {
                     long docStamp= (cast(IDocumentExtension4)doc).getModificationStamp();
-                    
+
                     // Normal case: an undo is valid if its redo will restore document
                     // to its current modification stamp
-                    bool canUndo= docStamp is IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP || 
+                    bool canUndo= docStamp is IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP ||
                         docStamp is getRedoModificationStamp();
-                    
-                    /* Special case to check if the answer is false.  
+
+                    /* Special case to check if the answer is false.
                      * If the last document change was empty, then the document's
-                     * modification stamp was incremented but nothing was committed.  
+                     * modification stamp was incremented but nothing was committed.
                      * The operation being queried has an older stamp.  In this case only,
                      * the comparison is different.  A sequence of document changes that
                      * include an empty change is handled correctly when a valid commit
-                     * follows the empty change, but when #canUndo() is queried just after 
+                     * follows the empty change, but when #canUndo() is queried just after
                      * an empty change, we must special case the check.  The check is very
                      * specific to prevent false positives.
                      * see https://bugs.eclipse.org/bugs/show_bug.cgi?id=98245
@@ -329,17 +329,17 @@
                             !fCurrent.isValid() &&  // the current operation is not a valid document modification
                             fCurrent.fUndoModificationStamp !is // the invalid current operation has a document stamp
                                 IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP) {
-                        canUndo= fCurrent.fRedoModificationStamp is docStamp;                           
+                        canUndo= fCurrent.fRedoModificationStamp is docStamp;
                     }
                     /*
-                     * When the composite is the current command, it may hold the timestamp 
-                     * of a no-op change.  We check this here rather than in an override of 
+                     * When the composite is the current command, it may hold the timestamp
+                     * of a no-op change.  We check this here rather than in an override of
                      * canUndo() in CompoundTextCommand simply to keep all the special case checks
                      * in one place.
-                     */ 
+                     */
                     if (!canUndo &&
                             this is fHistory.getUndoOperation(fUndoContext)  &&  // this is the latest operation
-                            this instanceof CompoundTextCommand &&
+                            null !is cast(CompoundTextCommand)this &&
                             this is fCurrent && // this is the current operation
                             this.fStart is -1 &&  // the current operation text is not valid
                             fCurrent.fRedoModificationStamp !is IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP) {  // but it has a redo stamp
@@ -362,7 +362,7 @@
                 IDocument doc= fTextViewer.getDocument();
                 if ( cast(IDocumentExtension4)doc ) {
                     long docStamp= (cast(IDocumentExtension4)doc).getModificationStamp();
-                    return docStamp is IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP || 
+                    return docStamp is IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP ||
                         docStamp is getUndoModificationStamp();
                 }
                 // if there is no timestamp to check, simply return true per the 3.0.1 behavior
@@ -410,7 +410,7 @@
             }
             return IOperationHistory.OPERATION_INVALID_STATUS;
         }
-        
+
         /**
          * Re-applies the change described by this command.
          *
@@ -497,11 +497,11 @@
                 fPreservedText= fPreservedTextBuffer.toString();
             }
         }
-        
+
         /**
          * Attempt a commit of this command and answer true if a new
          * fCurrent was created as a result of the commit.
-         * 
+         *
          * @return true if the command was committed and created a
          * new fCurrent, false if not.
          * @since 3.1
@@ -555,20 +555,20 @@
             text.append('\'');
             return text.toString();
         }
-        
+
         /**
          * Return the undo modification stamp
-         * 
+         *
          * @return the undo modification stamp for this command
          * @since 3.1
          */
         protected long getUndoModificationStamp() {
             return fUndoModificationStamp;
         }
-        
+
         /**
          * Return the redo modification stamp
-         * 
+         *
          * @return the redo modification stamp for this command
          * @since 3.1
          */
@@ -610,7 +610,7 @@
          */
         public IStatus undo(IProgressMonitor monitor, IAdaptable uiInfo) {
             resetProcessChangeSate();
-            
+
             int size= fCommands.size();
             if (size > 0) {
 
@@ -707,10 +707,10 @@
                 return (fStart > -1 || fCommands.size() > 0);
             return false;
         }
-        
+
         /**
          * Returns the undo modification stamp.
-         * 
+         *
          * @return the undo modification stamp
          * @since 3.1
          */
@@ -722,10 +722,10 @@
 
             return fUndoModificationStamp;
         }
-        
+
         /**
          * Returns the redo modification stamp.
-         * 
+         *
          * @return the redo modification stamp
          * @since 3.1
          */
@@ -886,11 +886,11 @@
                         public void run() {
                             // if we are undoing/redoing a command we generated, then ignore
                             // the document changes associated with this undo or redo.
-                            if (event.getOperation() instanceof TextCommand) {
+                            if (cast(TextCommand)event.getOperation() ) {
                                 if ( cast(TextViewer)fTextViewer )
                                     (cast(TextViewer)fTextViewer).ignoreAutoEditStrategies(true);
                                 listenToTextChanges(false);
-    
+
                                 // in the undo case only, make sure compounds are closed
                                 if (type is OperationHistoryEvent.ABOUT_TO_UNDO) {
                                     if (fFoldingIntoCompoundChange) {
@@ -898,9 +898,9 @@
                                     }
                                 }
                             } else {
-                                // the undo or redo has our context, but it is not one of 
+                                // the undo or redo has our context, but it is not one of
                                 // our commands.  We will listen to the changes, but will
-                                // reset the state that tracks the undo/redo history. 
+                                // reset the state that tracks the undo/redo history.
                                 commit();
                                 fLastAddedCommand= null;
                             }
@@ -1070,7 +1070,7 @@
      * @since 3.1
      */
     private void addToCommandStack(TextCommand command){
-        if (!fFoldingIntoCompoundChange || command instanceof CompoundTextCommand) {
+        if (!fFoldingIntoCompoundChange || cast(CompoundTextCommand)command ) {
             fHistory.add(command);
             fLastAddedCommand= command;
         }
@@ -1129,10 +1129,10 @@
         }
         fCurrent.commit();
     }
-    
+
     /**
      * Reset processChange state.
-     *   
+     *
      * @since 3.2
      */
     private void resetProcessChangeSate() {
@@ -1179,7 +1179,7 @@
 
         int length= insertedText.length();
         int diff= modelEnd - modelStart;
-        
+
         if (fCurrent.fUndoModificationStamp is IDocumentExtension4.UNKNOWN_MODIFICATION_STAMP)
             fCurrent.fUndoModificationStamp= beforeChangeModificationStamp;
 
@@ -1198,7 +1198,7 @@
                     fCurrent.fRedoModificationStamp= beforeChangeModificationStamp;
                     if (fCurrent.attemptCommit())
                         fCurrent.fUndoModificationStamp= beforeChangeModificationStamp;
-                        
+
                     fInserting= true;
                 }
                 if (fCurrent.fStart < 0)
@@ -1302,7 +1302,7 @@
                 // because of typing or pasting whereby selection is not empty
                 fCurrent.fRedoModificationStamp= beforeChangeModificationStamp;
                 if (fCurrent.attemptCommit())
-                    fCurrent.fUndoModificationStamp= beforeChangeModificationStamp;                 
+                    fCurrent.fUndoModificationStamp= beforeChangeModificationStamp;
 
                 fCurrent.fStart= modelStart;
                 fCurrent.fEnd= modelEnd;
--- a/dwtx/jface/text/DocumentRewriteSession.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/DocumentRewriteSession.d	Sun Aug 24 03:23:46 2008 +0200
@@ -191,6 +191,6 @@
      * @see java.lang.Object#toString()
      */
     public String toString() {
-        return new StringBuffer().append(hashCode()).toString();
+        return (new StringBuffer()).append(hashCode()).toString();
     }
 }
--- a/dwtx/jface/text/FindReplaceDocumentAdapter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/FindReplaceDocumentAdapter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -217,7 +217,7 @@
      * The match offset from the last findReplace call.
      */
     private int fFindReplaceMatchOffset;
-    
+
     /**
      * Retain case mode
      */
@@ -350,7 +350,7 @@
             int offset= fFindReplaceMatcher.start();
             int length= fFindReplaceMatcher.group().length();
 
-            if (fDocument instanceof IRepairableDocumentExtension
+            if (cast(IRepairableDocumentExtension)fDocument
                     && (cast(IRepairableDocumentExtension)fDocument).isLineInformationRepairNeeded(offset, length, replaceText)) {
                 String message= TextMessages.getString("FindReplaceDocumentAdapter.incompatibleLineDelimiter"); //$NON-NLS-1$
                 throw new PatternSyntaxException(message, replaceText, offset);
@@ -403,7 +403,7 @@
 
     /**
      * Substitutes \R in a regex find pattern with (?>\r\n?|\n)
-     * 
+     *
      * @param findString the original find pattern
      * @return the transformed find pattern
      * @throws PatternSyntaxException if \R is added at an illegal position (e.g. in a character set)
@@ -412,7 +412,7 @@
     private String substituteLinebreak(String findString)  {
         int length= findString.length();
         StringBuffer buf= new StringBuffer(length);
-        
+
         int inCharGroup= 0;
         int inBraces= 0;
         bool inQuote= false;
@@ -424,25 +424,25 @@
                     if (! inQuote)
                         inCharGroup++;
                     break;
-                    
+
                 case ']':
                     buf.append(ch);
                     if (! inQuote)
                         inCharGroup--;
                     break;
-                    
+
                 case '{':
                     buf.append(ch);
                     if (! inQuote && inCharGroup is 0)
                         inBraces++;
                     break;
-                    
+
                 case '}':
                     buf.append(ch);
                     if (! inQuote && inCharGroup is 0)
                         inBraces--;
                     break;
-                    
+
                 case '\\':
                     if (i + 1 < length) {
                         char ch1= findString.charAt(i + 1);
@@ -451,7 +451,7 @@
                                 inQuote= false;
                             buf.append(ch).append(ch1);
                             i++;
-                            
+
                         } else if (ch1 is 'R') {
                             if (inCharGroup > 0 || inBraces > 0) {
                                 String msg= TextMessages.getString("FindReplaceDocumentAdapter.illegalLinebreak"); //$NON-NLS-1$
@@ -459,7 +459,7 @@
                             }
                             buf.append("(?>\\r\\n?|\\n)"); //$NON-NLS-1$
                             i++;
-                        
+
                         } else {
                             if (ch1 is 'Q') {
                                 inQuote= true;
@@ -471,20 +471,20 @@
                         buf.append(ch);
                     }
                     break;
-                    
+
                 default:
                     buf.append(ch);
                     break;
             }
-            
+
         }
         return buf.toString();
     }
-    
+
     /**
      * Interprets current Retain Case mode (all upper-case,all lower-case,capitalized or mixed)
      * and appends the character <code>ch</code> to <code>buf</code> after processing.
-     * 
+     *
      * @param buf the output buffer
      * @param ch the character to process
      * @since 3.4
@@ -503,7 +503,7 @@
 
     /**
      * Interprets escaped characters in the given replace pattern.
-     * 
+     *
      * @param replaceText the replace pattern
      * @param foundText the found pattern to be replaced
      * @return a replace pattern with escaped characters substituted by the respective characters
@@ -513,21 +513,21 @@
         int length= replaceText.length();
         bool inEscape= false;
         StringBuffer buf= new StringBuffer(length);
-        
+
         /* every string we did not check looks mixed at first
          * so initialize retain case mode with RC_MIXED
          */
         fRetainCaseMode= RC_MIXED;
-        
+
         for (int i= 0; i < length; i++) {
             final char ch= replaceText.charAt(i);
             if (inEscape) {
                 i= interpretReplaceEscape(ch, i, buf, replaceText, foundText);
                 inEscape= false;
-                
+
             } else if (ch is '\\') {
                 inEscape= true;
-                
+
             } else if (ch is '$') {
                 buf.append(ch);
 
@@ -553,7 +553,7 @@
                 interpretRetainCase(buf, ch);
             }
         }
-        
+
         if (inEscape) {
             // '\' as last character is invalid, but we still add it to get an error message
             buf.append('\\');
@@ -564,7 +564,7 @@
     /**
      * Interprets the escaped character <code>ch</code> at offset <code>i</code>
      * of the <code>replaceText</code> and appends the interpretation to <code>buf</code>.
-     * 
+     *
      * @param ch the escaped character
      * @param i the offset
      * @param buf the output buffer
@@ -614,7 +614,7 @@
                     }
                 }
                 break;
-                
+
             case '1':
             case '2':
             case '3':
@@ -637,7 +637,7 @@
                     throw new PatternSyntaxException(msg, replaceText, i);
                 }
                 break;
-                
+
             case 'x':
                 if (i + 2 < length) {
                     int parsedInt;
@@ -656,7 +656,7 @@
                     throw new PatternSyntaxException(msg, replaceText, i);
                 }
                 break;
-                
+
             case 'u':
                 if (i + 4 < length) {
                     int parsedInt;
@@ -675,7 +675,7 @@
                     throw new PatternSyntaxException(msg, replaceText, i);
                 }
                 break;
-                
+
             case 'C':
                 if(foundText.toUpperCase().equals(foundText)) // is whole match upper-case?
                     fRetainCaseMode= RC_UPPER;
@@ -703,29 +703,29 @@
      * @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);
             if (ch is '\\') {
                 if (quoting) {
-                    out.append("\\E"); //$NON-NLS-1$
+                    out_.append("\\E"); //$NON-NLS-1$
                     quoting= false;
                 }
-                out.append("\\\\"); //$NON-NLS-1$
+                out_.append("\\\\"); //$NON-NLS-1$
                 continue;
             }
             if (!quoting) {
-                out.append("\\Q"); //$NON-NLS-1$
+                out_.append("\\Q"); //$NON-NLS-1$
                 quoting= true;
             }
-            out.append(ch);
+            out_.append(ch);
         }
         if (quoting)
-            out.append("\\E"); //$NON-NLS-1$
+            out_.append("\\E"); //$NON-NLS-1$
 
-        return out.toString();
+        return out_.toString();
     }
 
     /**
--- a/dwtx/jface/text/Position.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/Position.d	Sun Aug 24 03:23:46 2008 +0200
@@ -228,7 +228,7 @@
     /**
      * Marks this position as deleted.
      */
-    public void delete() {
+    public void delete_() {
         isDeleted= true;
     }
 
--- a/dwtx/jface/text/RegExMessages.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/RegExMessages.d	Sun Aug 24 03:23:46 2008 +0200
@@ -157,20 +157,24 @@
 import dwt.dwthelper.utils;
 
 
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
+import dwt.dwthelper.MissingResourceException;
+import dwt.dwthelper.ResourceBundle;
 
 
 /**
  * RegEx messages. Helper class to get NLSed messages.
- * 
+ *
  * @since 3.4
  */
 final class RegExMessages {
-    
-    private static final String RESOURCE_BUNDLE= RegExMessages.class.getName();
-    private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
+
+    //private static const String RESOURCE_BUNDLE= RegExMessages.class.getName();
+    private static ResourceBundle fgResourceBundle;//= ResourceBundle.getBundle(RESOURCE_BUNDLE);
 
+    static this() {
+        fgResourceBundle = ResourceBundle.getBundle(
+            getImportData!("dwtx.jface.text.RegExMessages.properties"));
+    }
 
     private this() {
         // Do not instantiate
@@ -180,7 +184,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/RewriteSessionEditProcessor.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/RewriteSessionEditProcessor.d	Sun Aug 24 03:23:46 2008 +0200
@@ -169,7 +169,7 @@
 
 /**
  * A text edit processor that brackets the application of edits into a document rewrite session.
- * 
+ *
  * @since 3.3
  */
 public final class RewriteSessionEditProcessor : TextEditProcessor {
@@ -210,7 +210,7 @@
 
     /**
      * Constructs a new edit processor for the given document.
-     * 
+     *
      * @param document the document to manipulate
      * @param root the root of the text edit tree describing the modifications. By passing a text
      *        edit a a text edit processor the ownership of the edit is transfered to the text edit
@@ -221,11 +221,11 @@
     public this(IDocument document, TextEdit root, int style) {
         super(document, root, style);
     }
-    
+
     /*
      * @see dwtx.text.edits.TextEditProcessor#performEdits()
      */
-    public UndoEdit performEdits() throws MalformedTreeException, BadLocationException {
+    public UndoEdit performEdits()  {
         IDocument document= getDocument();
         if (!( cast(IDocumentExtension4)document ))
             return super.performEdits();
@@ -245,7 +245,7 @@
     /**
      * Returns <code>true</code> if the passed edit is considered <em>large</em>,
      * <code>false</code> otherwise.
-     * 
+     *
      * @param edit the edit to check
      * @return <code>true</code> if <code>edit</code> is considered <em>large</em>,
      *         <code>false</code> otherwise
--- a/dwtx/jface/text/TextMessages.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/TextMessages.d	Sun Aug 24 03:23:46 2008 +0200
@@ -4,7 +4,7 @@
  * 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
  * Port to the D programming language:
@@ -164,13 +164,19 @@
 
 /**
  * Helper class to get NLSed messages.
- * 
+ *
  * @since 3.4
  */
 class TextMessages {
-    private static final String BUNDLE_NAME= "dwtx.jface.text.TextMessages"; //$NON-NLS-1$
+//     private static final String BUNDLE_NAME= "dwtx.jface.text.TextMessages"; //$NON-NLS-1$
+
+    private static final ResourceBundle RESOURCE_BUNDLE;//= ResourceBundle.getBundle(BUNDLE_NAME);
 
-    private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
+    static this() {
+        RESOURCE_BUNDLE = ResourceBundle.getBundle(
+            getImportData!("dwtx.jface.text.TextMessages.properties"));
+    }
+
 
     private this() {
     }
@@ -179,15 +185,11 @@
         try {
             return RESOURCE_BUNDLE.getString(key);
         } catch (MissingResourceException e) {
-            return '!' + key + '!';
+            return '!' ~ key ~ '!';
         }
     }
-    
-    public static String getFormattedString(String key, Object arg) {
-        return getFormattedString(key, new Object[] { arg });
-    }
 
-    public static String getFormattedString(String key, Object[] args) {
+    public static String getFormattedString(String key, Object[] args...) {
         return MessageFormat.format(getString(key), args);
     }
 
--- a/dwtx/jface/text/TextPresentation.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/TextPresentation.d	Sun Aug 24 03:23:46 2008 +0200
@@ -572,55 +572,55 @@
     }
 
     /**
-     * Applies the template's style to the target.
+     * Applies the template_'s style to the target.
      *
-     * @param template the style range to be used as template
-     * @param target the style range to which to apply the template
+     * @param template_ the style range to be used as template_
+     * @param target the style range to which to apply the template_
      * @param merge <code>true</code> if the style should be merged instead of replaced
      * @since 3.0
      */
-    private void applyStyle(StyleRange template, StyleRange target, bool merge) {
+    private void applyStyle(StyleRange template_, StyleRange target, bool merge) {
         if (merge) {
-            if (template.font !is null)
-                target.font= template.font;
-            target.fontStyle|= template.fontStyle;
-            
-            if (template.metrics !is null)
-                target.metrics= template.metrics;
-            
-            if (template.foreground !is null)
-                target.foreground= template.foreground;
-            if (template.background !is null)
-                target.background= template.background;
-            
-            target.strikeout|= template.strikeout;
-            if (template.strikeoutColor !is null)
-                target.strikeoutColor= template.strikeoutColor;
-            
-            target.underline|= template.underline;
-            if (template.underlineStyle !is DWT.NONE)
-                target.underlineStyle= template.underlineStyle;
-            if (template.underlineColor !is null)
-                target.underlineColor= template.underlineColor;
+            if (template_.font !is null)
+                target.font= template_.font;
+            target.fontStyle|= template_.fontStyle;
+
+            if (template_.metrics !is null)
+                target.metrics= template_.metrics;
+
+            if (template_.foreground !is null)
+                target.foreground= template_.foreground;
+            if (template_.background !is null)
+                target.background= template_.background;
 
-            if (template.borderStyle !is DWT.NONE)
-                target.borderStyle= template.borderStyle;
-            if (template.borderColor !is null)
-                target.borderColor= template.borderColor;
+            target.strikeout|= template_.strikeout;
+            if (template_.strikeoutColor !is null)
+                target.strikeoutColor= template_.strikeoutColor;
+
+            target.underline|= template_.underline;
+            if (template_.underlineStyle !is DWT.NONE)
+                target.underlineStyle= template_.underlineStyle;
+            if (template_.underlineColor !is null)
+                target.underlineColor= template_.underlineColor;
+
+            if (template_.borderStyle !is DWT.NONE)
+                target.borderStyle= template_.borderStyle;
+            if (template_.borderColor !is null)
+                target.borderColor= template_.borderColor;
 
         } else {
-            target.font= template.font;
-            target.fontStyle= template.fontStyle;
-            target.metrics= template.metrics;
-            target.foreground= template.foreground;
-            target.background= template.background;
-            target.strikeout= template.strikeout;
-            target.strikeoutColor= template.strikeoutColor;
-            target.underline= template.underline;
-            target.underlineStyle= template.underlineStyle;
-            target.underlineColor= template.underlineColor;
-            target.borderStyle= template.borderStyle;
-            target.borderColor= template.borderColor;
+            target.font= template_.font;
+            target.fontStyle= template_.fontStyle;
+            target.metrics= template_.metrics;
+            target.foreground= template_.foreground;
+            target.background= template_.background;
+            target.strikeout= template_.strikeout;
+            target.strikeoutColor= template_.strikeoutColor;
+            target.underline= template_.underline;
+            target.underlineStyle= template_.underlineStyle;
+            target.underlineColor= template_.underlineColor;
+            target.borderStyle= template_.borderStyle;
+            target.borderColor= template_.borderColor;
         }
     }
 
--- a/dwtx/jface/text/TextViewer.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/TextViewer.d	Sun Aug 24 03:23:46 2008 +0200
@@ -263,7 +263,7 @@
      * @since 3.4
      */
     private static final int TEXT_HOVER_HEIGHT_CHARS= 12; //used to be 10 (text font)
-    
+
     /**
      * Represents a replace command that brings the text viewer's text widget
      * back in synchronization with text viewer's document after the document
@@ -309,8 +309,8 @@
 
                 } catch (BadLocationException x) {
                     preservedText= null;
-                    if cast(TRACE_ERRORS)
-                        System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.WidgetCommand.setEvent")); //$NON-NLS-1$
+                    if (TRACE_ERRORS)
+                        System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.WidgetCommand.setEvent")); //$NON-NLS-1$
                 }
             } else
                 preservedText= null;
@@ -343,12 +343,12 @@
         public void getNextOffset(MovementEvent event) {
             if (event.movement !is DWT.MOVEMENT_WORD_END)
                 return;
-            
-            if cast(TRACE_DOUBLE_CLICK) {
-                System.out.println("\n+++"); //$NON-NLS-1$
+
+            if (TRACE_DOUBLE_CLICK) {
+                System.out_.println("\n+++"); //$NON-NLS-1$
                 print(event);
             }
-            
+
             if (fDoubleClickSelection !is null) {
                 if (fDoubleClickSelection.x <= event.offset && event.offset <= fDoubleClickSelection.y)
                     event.newOffset= fDoubleClickSelection.y;
@@ -362,20 +362,20 @@
         public void getPreviousOffset(MovementEvent event) {
             if (event.movement !is DWT.MOVEMENT_WORD_START)
                 return;
-            
-            if cast(TRACE_DOUBLE_CLICK) {
-                System.out.println("\n---"); //$NON-NLS-1$
+
+            if (TRACE_DOUBLE_CLICK) {
+                System.out_.println("\n---"); //$NON-NLS-1$
                 print(event);
             }
             if (fDoubleClickSelection is null) {
                 ITextDoubleClickStrategy s= cast(ITextDoubleClickStrategy) selectContentTypePlugin(getSelectedRange().x, fDoubleClickStrategies);
                 if (s !is null) {
                     StyledText textWidget= getTextWidget();
-                    s.doubleClicked(TextViewer.this);
+                    s.doubleClicked(this.outer);
                     fDoubleClickSelection= textWidget.getSelection();
                     event.newOffset= fDoubleClickSelection.x;
-                    if cast(TRACE_DOUBLE_CLICK)
-                        System.out.println("- setting selection: x= " + fDoubleClickSelection.x + ", y= " + fDoubleClickSelection.y); //$NON-NLS-1$ //$NON-NLS-2$
+                    if (TRACE_DOUBLE_CLICK)
+                        System.out_.println("- setting selection: x= " + fDoubleClickSelection.x + ", y= " + fDoubleClickSelection.y); //$NON-NLS-1$ //$NON-NLS-2$
                 }
             } else {
                 if (fDoubleClickSelection.x <= event.offset && event.offset <= fDoubleClickSelection.y)
@@ -386,16 +386,16 @@
 
     /**
      * Print trace info about <code>MovementEvent</code>.
-     * 
+     *
      * @param e the event to print
      * @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("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$
     }
 
     /**
@@ -1089,16 +1089,16 @@
          * @see IFindReplaceTargetExtension#setScope(IRegion)
          * @since 2.0
          */
-        public void setScope(IRegion scope) {
+        public void setScope(IRegion scope_) {
             if (fRange !is null)
                 fRange.uninstall();
 
-            if (scope is null) {
+            if (scope_ is null) {
                 fRange= null;
                 return;
             }
 
-            fRange= new FindReplaceRange(scope);
+            fRange= new FindReplaceRange(scope_);
             fRange.setHighlightColor(fScopeHighlightColor);
             fRange.install();
         }
@@ -1247,7 +1247,7 @@
             fStateMask= stateMask;
         }
     }
-    
+
     /**
      * Captures and remembers the viewer state (selection and visual position). {@link TextViewer.ViewerState}
      * instances are normally used once and then discarded, similar to the following snippet:
@@ -1256,7 +1256,7 @@
      * doStuff(); // operation that may call setRedraw() and perform complex document modifications
      * state.restore(true); // restore the remembered state
      * </pre>
-     * 
+     *
      * @since 3.3
      */
     private final class ViewerState {
@@ -1289,7 +1289,7 @@
 
         /**
          * Returns the normalized selection, i.e. the the selection length is always non-negative.
-         * 
+         *
          * @return the normalized selection
          */
         public Point getSelection() {
@@ -1300,7 +1300,7 @@
 
         /**
          * Updates the selection.
-         * 
+         *
          * @param offset the new selection offset
          * @param length the new selection length
          */
@@ -1315,7 +1315,7 @@
         /**
          * Restores the state and disconnects it from the document. The selection is no longer
          * tracked after this call.
-         * 
+         *
          * @param restoreViewport <code>true</code> to restore both selection and viewport,
          *        <code>false</code> to only restore the selection
          */
@@ -1363,7 +1363,7 @@
 
         /**
          * Remembers the viewer state.
-         * 
+         *
          * @param document the document to remember the state of
          */
         private void connect(IDocument document) {
@@ -1409,7 +1409,7 @@
 
         /**
          * Updates a position with the given information and clears its deletion state.
-         * 
+         *
          * @param position the position to update
          * @param offset the new selection offset
          * @param length the new selection length
@@ -1424,14 +1424,14 @@
         /**
          * Returns the document line to keep visually stable. If the caret line is (partially)
          * visible, it is returned, otherwise the topmost (partially) visible line is returned.
-         * 
+         *
          * @return the visually stable line of this viewer state
          */
         private int getStableLine() {
             int stableLine; // the model line that we try to keep stable
             int caretLine= getTextWidget().getLineAtOffset(getTextWidget().getCaretOffset());
             if (caretLine < JFaceTextUtil.getPartialTopIndex(getTextWidget()) || caretLine > JFaceTextUtil.getPartialBottomIndex(getTextWidget())) {
-                stableLine= JFaceTextUtil.getPartialTopIndex(TextViewer.this);
+                stableLine= JFaceTextUtil.getPartialTopIndex(this.outer);
             } else {
                 stableLine= widgetLine2ModelLine(caretLine);
             }
@@ -1441,7 +1441,7 @@
         /**
          * Returns <code>true</code> if the viewer state is being tracked, <code>false</code>
          * otherwise.
-         * 
+         *
          * @return the tracking state
          */
         private bool isConnected() {
@@ -1469,7 +1469,7 @@
 
     /**
      * Internal cursor listener i.e. aggregation of mouse and key listener.
-     * 
+     *
      * @since 3.0
      */
     private class CursorListener : KeyListener, MouseListener {
@@ -1563,8 +1563,8 @@
             }
         }
     }
-    
-    
+
+
     /**
      * Identifies the scrollbars as originators of a view port change.
      */
@@ -1843,7 +1843,7 @@
     protected void createControl(Composite parent, int styles) {
 
         fTextWidget= createTextWidget(parent, styles);
-        
+
         // Support scroll page upon MOD1+MouseWheel
         fTextWidget.addListener(DWT.MouseWheel, new class()  Listener {
 
@@ -1862,7 +1862,7 @@
                 updateViewportListeners(INTERNAL);
             }
         });
-        
+
         fTextWidget.addDisposeListener(
             new class()  DisposeListener {
                 public void widgetDisposed(DisposeEvent e) {
@@ -1958,7 +1958,7 @@
      * control has been disposed.
      */
     protected void handleDispose() {
-        
+
         setDocument(null);
 
         if (fPaintManager !is null) {
@@ -2047,7 +2047,7 @@
         fVisibleDocument= null;
         fDocument= null;
         fScroller= null;
-        
+
         fTextWidget= null;
     }
 
@@ -2085,7 +2085,7 @@
      *             {@link ITextViewerExtension2#removeAutoEditStrategy(IAutoEditStrategy, String)} instead
      */
     public void setAutoIndentStrategy(IAutoIndentStrategy strategy, String contentType) {
-        setAutoEditStrategies(new IAutoEditStrategy[] { strategy }, contentType);
+        setAutoEditStrategies([ strategy ], contentType);
     }
 
     /**
@@ -2275,7 +2275,7 @@
         if (fTextHovers is null)
             return;
 
-        Iterator iter= new HashSet(fTextHovers.keySet()).iterator();
+        Iterator iter= (new HashSet(fTextHovers.keySet())).iterator();
         while (iter.hasNext()) {
             TextHoverKey key= cast(TextHoverKey)iter.next();
             if (key.fContentType.equals(contentType))
@@ -2319,8 +2319,8 @@
             }
             return cast(ITextHover) textHover;
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.selectContentTypePlugin")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.selectContentTypePlugin")); //$NON-NLS-1$
         }
         return null;
     }
@@ -2347,7 +2347,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public void setHoverEnrichMode(ITextViewerExtension8.EnrichMode mode) {
@@ -2456,7 +2456,7 @@
         IRegion widgetSelection= modelRange2ClosestWidgetRange(new Region(selectionOffset, selectionLength));
         if (widgetSelection !is null) {
 
-            int[] selectionRange= new int[] { widgetSelection.getOffset(), widgetSelection.getLength() };
+            int[] selectionRange= [ widgetSelection.getOffset(), widgetSelection.getLength() ];
             validateSelectionRange(selectionRange);
             if (selectionRange[0] >= 0) {
                 fTextWidget.setSelectionRange(selectionRange[0], selectionRange[1]);
@@ -3128,7 +3128,7 @@
      * accurate if the widget does not use variable line heights - for that reason, clients should
      * not use this method any longer and use the client area height of the text widget to find out
      * how much content fits into it.
-     * 
+     *
      * @return the view port height in lines
      * @deprecated as of 3.2
      */
@@ -3148,7 +3148,7 @@
 
         if (fTextWidget is null)
             return -1;
-        
+
         int widgetBottom= JFaceTextUtil.getBottomIndex(fTextWidget);
         return widgetLine2ModelLine(widgetBottom);
     }
@@ -3164,8 +3164,8 @@
                 top= getVisibleDocument().getLineOffset(top);
                 return widgetOffset2ModelOffset(top);
             } catch (BadLocationException ex) {
-                if cast(TRACE_ERRORS)
-                    System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.getTopIndexStartOffset")); //$NON-NLS-1$
+                if (TRACE_ERRORS)
+                    System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.getTopIndexStartOffset")); //$NON-NLS-1$
             }
         }
 
@@ -3189,8 +3189,8 @@
             return Math.min(coverageEndOffset, bottomEndOffset);
 
         } catch (BadLocationException ex) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.getBottomIndexEndOffset")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.getBottomIndexEndOffset")); //$NON-NLS-1$
             return getDocument().getLength() - 1;
         }
     }
@@ -3207,7 +3207,7 @@
         IRegion widgetRange= modelRange2ClosestWidgetRange(modelRange);
         if (widgetRange !is null) {
 
-            int[] range= new int[] { widgetRange.getOffset(), widgetRange.getLength() };
+            int[] range= [ widgetRange.getOffset(), widgetRange.getLength() ];
             validateSelectionRange(range);
             if (range[0] >= 0)
                 internalRevealRange(range[0], range[0] + range[1]);
@@ -3241,7 +3241,7 @@
                 // scroll vertically
                 int bottom= JFaceTextUtil.getBottomIndex(fTextWidget);
                 int lines= bottom - top;
-                
+
                 // if the widget is not scrollable as it is displaying the entire content
                 // setTopIndex won't have any effect.
 
@@ -3342,7 +3342,7 @@
             Rectangle bounds= fTextWidget.getTextBounds(start, end - 1);
             return new Region(bounds.x, bounds.width);
         }
-        
+
         return new Region(fTextWidget.getLocationAtOffset(start).x, 0);
     }
 
@@ -3481,7 +3481,7 @@
      */
     protected void setVisibleDocument(IDocument document) {
 
-        if (fVisibleDocument is document && fVisibleDocument instanceof ChildDocument) {
+        if (fVisibleDocument is document && cast(ChildDocument)fVisibleDocument ) {
             // optimization for new child documents
             return;
         }
@@ -3659,8 +3659,8 @@
         try {
             return selectContentTypePlugin(TextUtilities.getContentType(getDocument(), getDocumentPartitioning(), offset, true), plugins);
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.selectContentTypePlugin")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.selectContentTypePlugin")); //$NON-NLS-1$
         }
         return null;
     }
@@ -3692,9 +3692,9 @@
     protected void customizeDocumentCommand(DocumentCommand command) {
         if (isIgnoringAutoEditStrategies())
             return;
-        
+
         IDocument document= getDocument();
-        
+
         if (fTabsToSpacesConverter !is null)
             fTabsToSpacesConverter.customizeDocumentCommand(document, command);
 
@@ -3778,8 +3778,8 @@
                 }
             } catch (BadLocationException x) {
 
-                if cast(TRACE_ERRORS)
-                    System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.verifyText")); //$NON-NLS-1$
+                if (TRACE_ERRORS)
+                    System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.verifyText")); //$NON-NLS-1$
 
             } finally {
 
@@ -3969,7 +3969,7 @@
      * @param delete <code>true</code> if the region should be deleted rather than copied.
      * @since 2.0
      */
-    protected void copyMarkedRegion(bool delete) {
+    protected void copyMarkedRegion(bool delete_) {
 
         if (fTextWidget is null)
             return;
@@ -3984,7 +3984,7 @@
         else
             fTextWidget.setSelection(widgetMarkOffset, selection.x);
 
-        if (delete) {
+        if (delete_) {
             fTextWidget.cut();
         } else {
             fTextWidget.copy();
@@ -4077,8 +4077,8 @@
             return (offset > region.getOffset() + region.getLength() ? -1 : startLine + 1);
 
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.getFirstCompleteLineOfRegion")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.getFirstCompleteLineOfRegion")); //$NON-NLS-1$
         }
 
         return -1;
@@ -4133,7 +4133,7 @@
     protected void shift(bool useDefaultPrefixes, bool right, bool ignoreWhitespace) {
         if (fUndoManager !is null)
             fUndoManager.beginCompoundChange();
-        
+
         IDocument d= getDocument();
         Map partitioners= null;
         DocumentRewriteSession rewriteSession= null;
@@ -4179,14 +4179,14 @@
             }
 
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.shift_1")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.shift_1")); //$NON-NLS-1$
 
         } finally {
 
             if (partitioners !is null)
                 TextUtilities.addDocumentPartitioners(d, partitioners);
-            
+
             if ( cast(IDocumentExtension4)d ) {
                 IDocumentExtension4 extension= cast(IDocumentExtension4) d;
                 extension.stopRewriteSession(rewriteSession);
@@ -4219,8 +4219,8 @@
             }
 
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println("TextViewer.shiftRight: BadLocationException"); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println("TextViewer.shiftRight: BadLocationException"); //$NON-NLS-1$
         }
     }
 
@@ -4285,8 +4285,8 @@
             }
 
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println("TextViewer.shiftLeft: BadLocationException"); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println("TextViewer.shiftLeft: BadLocationException"); //$NON-NLS-1$
         }
     }
 
@@ -4306,7 +4306,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public void print(StyledTextPrintOptions options) {
@@ -4317,12 +4317,12 @@
             final Printer printer= new Printer(data);
             final Runnable styledTextPrinter= fTextWidget.print(printer, options);
 
-            Thread printingThread= new Thread("Printing") { //$NON-NLS-1$
-                public void run() {
-                    styledTextPrinter.run();
-                    printer.dispose();
-                }
-            };
+            void threadrun() {
+                styledTextPrinter.run();
+                printer.dispose();
+            }
+            Thread printingThread= new Thread( &threadrun );
+            printingThread.name = "Printing"; //$NON-NLS-1$
             printingThread.start();
         }
     }
@@ -4419,8 +4419,8 @@
             }
 
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.findAndSelect")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.findAndSelect")); //$NON-NLS-1$
         }
 
         return -1;
@@ -4497,8 +4497,8 @@
 
 
         } catch (BadLocationException x) {
-            if cast(TRACE_ERRORS)
-                System.out.println(JFaceTextMessages.getString("TextViewer.error.bad_location.findAndSelect")); //$NON-NLS-1$
+            if (TRACE_ERRORS)
+                System.out_.println(JFaceTextMessages.getString("TextViewer.error.bad_location.findAndSelect")); //$NON-NLS-1$
         }
 
         return -1;
@@ -4552,7 +4552,7 @@
             range= modelStyleRange2WidgetStyleRange(range);
             if (range !is null)
                 fTextWidget.setStyleRange(range);
-            
+
             ArrayList ranges= new ArrayList(presentation.getDenumerableRanges());
             Iterator e= presentation.getNonDefaultStyleRangeIterator();
             while (e.hasNext()) {
@@ -4561,10 +4561,10 @@
                 if (range !is null)
                     ranges.add(range);
             }
-            
+
             if (!ranges.isEmpty())
                 fTextWidget.replaceStyleRanges(0, 0, (StyleRange[])ranges.toArray(new StyleRange[ranges.size()]));
-            
+
         } else {
             IRegion region= modelRange2WidgetRange(presentation.getCoverage());
             if (region is null)
@@ -5451,11 +5451,11 @@
     public void setHyperlinkDetectors(IHyperlinkDetector[] hyperlinkDetectors, int eventStateMask) {
         if (fHyperlinkDetectors !is null) {
             for (int i= 0; i < fHyperlinkDetectors.length; i++) {
-                if (fHyperlinkDetectors[i] instanceof IHyperlinkDetectorExtension)
+                if (cast(IHyperlinkDetectorExtension)fHyperlinkDetectors[i] )
                     (cast(IHyperlinkDetectorExtension)fHyperlinkDetectors[i]).dispose();
             }
         }
-        
+
         bool enable= hyperlinkDetectors !is null && hyperlinkDetectors.length > 0;
         fHyperlinkStateMask= eventStateMask;
         fHyperlinkDetectors= hyperlinkDetectors;
--- a/dwtx/jface/text/TextViewerHoverManager.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/TextViewerHoverManager.d	Sun Aug 24 03:23:46 2008 +0200
@@ -301,8 +301,7 @@
             return;
         }
 
-        fThread= new Thread("Text Viewer Hover Presenter") { //$NON-NLS-1$
-            public void run() {
+            void threadrun() {
                 // http://bugs.eclipse.org/bugs/show_bug.cgi?id=17693
                 bool hasFinished= false;
                 try {
@@ -349,9 +348,10 @@
                     }
                 }
             }
-        };
+        fThread= new Thread( &threadrun );
+        fThread.name = "Text Viewer Hover Presenter"; //$NON-NLS-1$
 
-        fThread.setDaemon(true);
+        fThread.isDaemon(true);
         fThread.setPriority(Thread.MIN_PRIORITY);
         synchronized (fMutex) {
             fTextViewer.addTextListener(fStopper);
@@ -429,8 +429,8 @@
         if (fTextViewer !is null && fTextViewer.requestWidgetToken(this, WIDGET_PRIORITY))
             super.showInformationControl(subjectArea);
         else
-            if cast(DEBUG)
-                System.out.println("TextViewerHoverManager#showInformationControl(..) did not get widget token"); //$NON-NLS-1$
+            if (DEBUG)
+                System.out_.println("TextViewerHoverManager#showInformationControl(..) did not get widget token"); //$NON-NLS-1$
     }
 
     /*
@@ -445,7 +445,7 @@
                 fTextViewer.releaseWidgetToken(this);
         }
     }
-    
+
     /*
      * @see dwtx.jface.text.AbstractInformationControlManager#replaceInformationControl(bool)
      * @since 3.4
@@ -497,15 +497,15 @@
     public bool setFocus(IWidgetTokenOwner owner) {
         if (! hasInformationControlReplacer())
             return false;
-        
+
         IInformationControl iControl= getCurrentInformationControl();
         if (canReplace(iControl)) {
             if (cancelReplacingDelay())
                 replaceInformationControl(true);
-            
+
             return true;
         }
-        
+
         return false;
     }
 
--- a/dwtx/jface/text/TreeLineTracker.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/TreeLineTracker.d	Sun Aug 24 03:23:46 2008 +0200
@@ -185,51 +185,51 @@
  * log n)</i> where <var>n</var> is the number of lines in the document and <var>l</var> is the
  * sum of the number of removed, added or modified lines.
  * </p>
- * 
+ *
  * @since 3.2
  */
 abstract class TreeLineTracker : ILineTracker {
     /*
      * Differential Balanced Binary Tree
-     * 
+     *
      * Assumption: lines cannot overlap => there exists a total ordering of the lines by their offset,
      * which is the same as the ordering by line number
-     * 
+     *
      * Base idea: store lines in a binary search tree
      *   - the key is the line number / line offset
      *     -> lookup_line is O(log n)
      *     -> lookup_offset is O(log n)
-     *   - a change in a line somewhere will change any succeeding line numbers / line offsets 
+     *   - a change in a line somewhere will change any succeeding line numbers / line offsets
      *     -> replace is O(n)
-     *      
+     *
      * Differential tree: instead of storing the key (line number, line offset) directly, every node
      * stores the difference between its key and its parent's key
      *   - the sort key is still the line number / line offset, but it remains "virtual"
      *   - inserting a node (a line) really increases the virtual key of all succeeding nodes (lines), but this
-     *     fact will not be realized in the key information encoded in the nodes. 
+     *     fact will not be realized in the key information encoded in the nodes.
      *     -> any change only affects the nodes in the node's parent chain, although more bookkeeping
-     *         has to be done when changing a node or balancing the tree 
+     *         has to be done when changing a node or balancing the tree
      *        -> replace is O(log n)
-     *     -> line offsets and line numbers have to be computed when walking the tree from the root / 
+     *     -> line offsets and line numbers have to be computed when walking the tree from the root /
      *         from a node
      *        -> still O(log n)
-     * 
+     *
      * The balancing algorithm chosen does not depend on the differential tree property. An AVL tree
      * implementation has been chosen for simplicity.
      */
-    
+
     /*
      * Turns assertions on/off. Don't make this a a debug option for performance reasons - this way
      * the compiler can optimize the asserts away.
      */
     private static final bool ASSERT= false;
-    
+
     /**
      * The empty delimiter of the last line. The last line and only the last line must have this
      * zero-length delimiter.
      */
     private static final String NO_DELIM= ""; //$NON-NLS-1$
-    
+
     /**
      * A node represents one line. Its character and line offsets are 0-based and relative to the
      * subtree covered by the node. All nodes under the left subtree represent lines before, all
@@ -262,7 +262,7 @@
         Node right;
         /** The balance factor. */
         byte balance;
-        
+
         /*
          * @see java.lang.Object#toString()
          */
@@ -292,7 +292,7 @@
 
         /**
          * Returns the pure (without the line delimiter) length of this line.
-         * 
+         *
          * @return the pure line length
          */
         int pureLength() {
@@ -310,10 +310,10 @@
      */
     protected this() {
     }
-    
+
     /**
      * Package visible constructor for creating a tree tracker from a list tracker.
-     * 
+     *
      * @param tracker
      */
     this(ListLineTracker tracker) {
@@ -321,7 +321,7 @@
         final int n= lines.size();
         if (n is 0)
             return;
-        
+
         Line line= cast(Line) lines.get(0);
         String delim= line.delimiter;
         if (delim is null)
@@ -329,7 +329,7 @@
         int length= line.length;
         fRoot= new Node(length, delim);
         Node node= fRoot;
-        
+
         for (int i= 1; i < n; i++) {
             line= cast(Line) lines.get(i);
             delim= line.delimiter;
@@ -338,11 +338,11 @@
             length= line.length;
             node= insertAfter(node, length, delim);
         }
-        
+
         if (node.delimiter !is NO_DELIM)
             insertAfter(node, 0, NO_DELIM);
-        
-        if cast(ASSERT) checkTree();
+
+        if (ASSERT) checkTree();
     }
 
     /**
@@ -360,7 +360,7 @@
      * <p>
      * <code>offset= line.offset + line.length</code>.
      * </p>
-     * 
+     *
      * @param offset a document offset
      * @return the line starting at or containing <code>offset</code>
      * @throws BadLocationException if the offset is invalid
@@ -372,11 +372,11 @@
         int remaining= offset;
         Node node= fRoot;
         int line= 0;
-        
+
         while (true) {
             if (node is null)
                 fail(offset);
-            
+
             if (remaining < node.offset) {
                 node= node.left;
             } else {
@@ -391,14 +391,14 @@
                 node= node.right;
             }
         }
-        
+
         return node;
     }
     /**
      * Returns the line number for the given offset. If the offset is between two lines, the line
      * starting at <code>offset</code> is returned. The last line is returned if
      * <code>offset</code> is equal to the document length.
-     * 
+     *
      * @param offset a document offset
      * @return the line number starting at or containing <code>offset</code>
      * @throws BadLocationException if the offset is invalid
@@ -410,11 +410,11 @@
         int remaining= offset;
         Node node= fRoot;
         int line= 0;
-        
+
         while (true) {
             if (node is null)
                 fail(offset);
-            
+
             if (remaining < node.offset) {
                 node= node.left;
             } else {
@@ -429,11 +429,11 @@
             }
         }
     }
-    
+
     /**
      * Returns the node (line) with the given line number. Note that the last line is always
      * incomplete, i.e. has the {@link #NO_DELIM} delimiter.
-     * 
+     *
      * @param line a line number
      * @return the line with the given line number
      * @throws BadLocationException if the line is invalid
@@ -445,11 +445,11 @@
         int remaining= line;
         int offset= 0;
         Node node= fRoot;
-        
+
         while (true) {
             if (node is null)
                 fail(line);
-            
+
             if (remaining is node.line)
                 break;
             if (remaining < node.line) {
@@ -460,14 +460,14 @@
                 node= node.right;
             }
         }
-        
+
         return node;
     }
-    
+
     /**
      * Returns the offset for the given line number. Note that the
      * last line is always incomplete, i.e. has the {@link #NO_DELIM} delimiter.
-     * 
+     *
      * @param line a line number
      * @return the line offset with the given line number
      * @throws BadLocationException if the line is invalid
@@ -479,11 +479,11 @@
         int remaining= line;
         int offset= 0;
         Node node= fRoot;
-        
+
         while (true) {
             if (node is null)
                 fail(line);
-            
+
             if (remaining is node.line)
                 return offset + node.offset;
 
@@ -496,25 +496,25 @@
             }
         }
     }
-    
+
     /**
      * Left rotation - the given node is rotated down, its right child is rotated up, taking the
      * previous structural position of <code>node</code>.
-     * 
+     *
      * @param node the node to rotate around
      */
     private void rotateLeft(Node node) {
-        if cast(ASSERT) Assert.isNotNull(node);
+        if (ASSERT) Assert.isNotNull(node);
         Node child= node.right;
-        if cast(ASSERT) Assert.isNotNull(child);
+        if (ASSERT) Assert.isNotNull(child);
         bool leftChild= node.parent is null || node is node.parent.left;
-        
+
         // restructure
         setChild(node.parent, child, leftChild);
-        
+
         setChild(node, child.left, false);
         setChild(child, node, true);
-        
+
         // update relative info
         // child becomes the new parent, its line and offset counts increase as the former parent
         // moves under child's left subtree
@@ -525,20 +525,20 @@
     /**
      * Right rotation - the given node is rotated down, its left child is rotated up, taking the
      * previous structural position of <code>node</code>.
-     * 
+     *
      * @param node the node to rotate around
      */
     private void rotateRight(Node node) {
-        if cast(ASSERT) Assert.isNotNull(node);
+        if (ASSERT) Assert.isNotNull(node);
         Node child= node.left;
-        if cast(ASSERT) Assert.isNotNull(child);
+        if (ASSERT) Assert.isNotNull(child);
         bool leftChild= node.parent is null || node is node.parent.left;
-        
+
         setChild(node.parent, child, leftChild);
-        
+
         setChild(node, child.right, true);
         setChild(child, node, false);
-        
+
         // update relative info
         // node loses its left subtree, except for what it keeps in its new subtree
         // this is exactly the amount in child
@@ -548,7 +548,7 @@
 
     /**
      * Helper method for moving a child, ensuring that parent pointers are set correctly.
-     * 
+     *
      * @param parent the new parent of <code>child</code>, <code>null</code> to replace the
      *        root node
      * @param child the new child of <code>parent</code>, may be <code>null</code>
@@ -571,11 +571,11 @@
         if (child !is null)
             child.parent= parent;
     }
-    
+
     /**
      * A left rotation around <code>parent</code>, whose structural position is replaced by
      * <code>node</code>.
-     * 
+     *
      * @param node the node moving up and left
      * @param parent the node moving left and down
      */
@@ -588,7 +588,7 @@
     /**
      * A right rotation around <code>parent</code>, whose structural position is replaced by
      * <code>node</code>.
-     * 
+     *
      * @param node the node moving up and right
      * @param parent the node moving right and down
      */
@@ -601,7 +601,7 @@
     /**
      * A double left rotation, first rotating right around <code>node</code>, then left around
      * <code>parent</code>.
-     * 
+     *
      * @param node the node that will be rotated right
      * @param parent the node moving left and down
      */
@@ -626,7 +626,7 @@
     /**
      * A double right rotation, first rotating left around <code>node</code>, then right around
      * <code>parent</code>.
-     * 
+     *
      * @param node the node that will be rotated left
      * @param parent the node moving right and down
      */
@@ -650,7 +650,7 @@
 
     /**
      * Inserts a line with the given length and delimiter after <code>node</code>.
-     * 
+     *
      * @param node the predecessor of the inserted node
      * @param length the line length of the inserted node
      * @param delimiter the delimiter of the inserted node
@@ -658,28 +658,28 @@
      */
     private Node insertAfter(Node node, int length, String delimiter) {
         /*
-         * An insertion really shifts the key of all succeeding nodes. Hence we insert the added node 
+         * An insertion really shifts the key of all succeeding nodes. Hence we insert the added node
          * between node and the successor of node. The added node becomes either the right child
          * of the predecessor node, or the left child of the successor node.
          */
         Node added= new Node(length, delimiter);
-        
+
         if (node.right is null)
             setChild(node, added, false);
         else
             setChild(successorDown(node.right), added, true);
-        
+
         // parent chain update
         updateParentChain(added, length, 1);
         updateParentBalanceAfterInsertion(added);
-        
+
         return added;
     }
-    
+
     /**
      * Updates the balance information in the parent chain of node until it reaches the root or
      * finds a node whose balance violates the AVL constraint, which is the re-balanced.
-     * 
+     *
      * @param node the child of the first node that needs balance updating
      */
     private void updateParentBalanceAfterInsertion(Node node) {
@@ -705,16 +705,16 @@
                 case 0:
                     break;
                 default:
-                    if cast(ASSERT) 
+                    if (ASSERT)
                         Assert.isTrue(false);
             }
             return;
         }
     }
-    
+
     /**
      * Re-balances a node whose parent has a double positive balance.
-     * 
+     *
      * @param node the node to re-balance
      */
     private void rebalanceAfterInsertionRight(Node node) {
@@ -723,14 +723,14 @@
             singleLeftRotation(node, parent);
         } else if (node.balance is -1) {
             rightLeftRotation(node, parent);
-        } else if cast(ASSERT) {
+        } else if (ASSERT) {
             Assert.isTrue(false);
         }
     }
 
     /**
      * Re-balances a node whose parent has a double negative balance.
-     * 
+     *
      * @param node the node to re-balance
      */
     private void rebalanceAfterInsertionLeft(Node node) {
@@ -739,7 +739,7 @@
             singleRightRotation(node, parent);
         } else if (node.balance is 1) {
             leftRightRotation(node, parent);
-        } else if cast(ASSERT) {
+        } else if (ASSERT) {
             Assert.isTrue(false);
         }
     }
@@ -748,17 +748,17 @@
      * @see dwtx.jface.text.ILineTracker#replace(int, int, java.lang.String)
      */
     public final void replace(int offset, int length, String text)  {
-        if cast(ASSERT) checkTree();
-        
+        if (ASSERT) checkTree();
+
         // Inlined nodeByOffset as we need both node and offset
         int remaining= offset;
         Node first= fRoot;
         final int firstNodeOffset;
-        
+
         while (true) {
             if (first is null)
                 fail(offset);
-            
+
             if (remaining < first.offset) {
                 first= first.left;
             } else {
@@ -773,27 +773,27 @@
             }
         }
         // Inline nodeByOffset end
-        if cast(ASSERT) Assert.isTrue(first !is null);
-        
+        if (ASSERT) Assert.isTrue(first !is null);
+
         Node last;
         if (offset + length < firstNodeOffset + first.length)
             last= first;
         else
             last= nodeByOffset(offset + length);
-        if cast(ASSERT) Assert.isTrue(last !is null);
-        
+        if (ASSERT) Assert.isTrue(last !is null);
+
         int firstLineDelta= firstNodeOffset + first.length - offset;
         if (first is last)
             replaceInternal(first, text, length, firstLineDelta);
         else
             replaceFromTo(first, last, text, length, firstLineDelta);
 
-        if cast(ASSERT) checkTree();
+        if (ASSERT) checkTree();
     }
 
     /**
      * Replace happening inside a single line.
-     * 
+     *
      * @param node the affected node
      * @param text the added text
      * @param length the replace length, &lt; <code>firstLineDelta</code>
@@ -802,7 +802,7 @@
      */
     private void replaceInternal(Node node, String text, int length, int firstLineDelta) {
         // 1) modification on a single line
-        
+
         DelimiterInfo info= text is null ? null : nextDelimiterInfo(text, 0);
 
         if (info is null || info.delimiter is null) {
@@ -814,14 +814,14 @@
             // remember what we split off the first line
             int remainder= firstLineDelta - length;
             String remDelim= node.delimiter;
-            
+
             // join the first line with the first added
             int consumed= info.delimiterIndex + info.delimiterLength;
             int delta= consumed - firstLineDelta;
             updateLength(node, delta);
             node.delimiter= info.delimiter;
 
-            // Inline addlines start 
+            // Inline addlines start
             info= nextDelimiterInfo(text, consumed);
             while (info !is null) {
                 int lineLen= info.delimiterIndex - consumed + info.delimiterLength;
@@ -829,16 +829,16 @@
                 consumed += lineLen;
                 info= nextDelimiterInfo(text, consumed);
             }
-            // Inline addlines end 
+            // Inline addlines end
 
             // add remaining chunk merged with last (incomplete) additional line
             insertAfter(node, remainder + text.length() - consumed, remDelim);
         }
     }
-    
+
     /**
      * Replace spanning from one node to another.
-     * 
+     *
      * @param node the first affected node
      * @param last the last affected node
      * @param text the added text
@@ -848,7 +848,7 @@
      */
     private void replaceFromTo(Node node, Node last, String text, int length, int firstLineDelta) {
         // 2) modification covers several lines
-        
+
         // delete intermediate nodes
         // TODO could be further optimized: replace intermediate lines with intermediate added lines
         // to reduce re-balancing
@@ -867,9 +867,9 @@
 
             // join the two lines if there are no lines added
             join(node, last, added - length);
-            
+
         } else {
-            
+
             // join the first line with the first added
             int consumed= info.delimiterIndex + info.delimiterLength;
             updateLength(node, consumed - firstLineDelta);
@@ -885,7 +885,7 @@
                 info= nextDelimiterInfo(text, consumed);
             }
             // Inline addLines end
-            
+
             updateLength(last, text.length() - consumed - length);
         }
     }
@@ -893,7 +893,7 @@
     /**
      * Joins two consecutive node lines, additionally adjusting the resulting length of the combined
      * line by <code>delta</code>. The first node gets deleted.
-     * 
+     *
      * @param one the first node to join
      * @param two the second node to join
      * @param delta the delta to apply to the remaining single node
@@ -903,56 +903,56 @@
         updateLength(one, -oneLength);
         updateLength(two, oneLength + delta);
     }
-    
+
     /**
      * Adjusts the length of a node by <code>delta</code>, also adjusting the parent chain of
      * <code>node</code>. If the node's length becomes zero and is not the last (incomplete)
      * node, it is deleted after the update.
-     * 
+     *
      * @param node the node to adjust
      * @param delta the character delta to add to the node's length
      */
     private void updateLength(Node node, int delta) {
-        if cast(ASSERT) Assert.isTrue(node.length  + delta >= 0);
-        
+        if (ASSERT) Assert.isTrue(node.length  + delta >= 0);
+
         // update the node itself
         node.length += delta;
-        
+
         // check deletion
         final int lineDelta;
-        bool delete= node.length is 0 && node.delimiter !is NO_DELIM;
-        if (delete)
+        bool delete__= node.length is 0 && node.delimiter !is NO_DELIM;
+        if (delete__)
             lineDelta= -1;
         else
             lineDelta= 0;
-        
+
         // update parent chain
         if (delta !is 0 || lineDelta !is 0)
             updateParentChain(node, delta, lineDelta);
-        
-        if (delete)
-            delete(node);
+
+        if (delete__)
+            delete_(node);
     }
 
     /**
      * Updates the differential indices following the parent chain. All nodes from
      * <code>from.parent</code> to the root are updated.
-     * 
+     *
      * @param node the child of the first node to update
-     * @param deltaLength the character delta 
+     * @param deltaLength the character delta
      * @param deltaLines the line delta
      */
     private void updateParentChain(Node node, int deltaLength, int deltaLines) {
         updateParentChain(node, null, deltaLength, deltaLines);
     }
-    
+
     /**
      * Updates the differential indices following the parent chain. All nodes from
      * <code>from.parent</code> to <code>to</code> (exclusive) are updated.
-     * 
+     *
      * @param from the child of the first node to update
      * @param to the first node not to update
-     * @param deltaLength the character delta 
+     * @param deltaLength the character delta
      * @param deltaLines the line delta
      */
     private void updateParentChain(Node from, Node to, int deltaLength, int deltaLines) {
@@ -967,25 +967,25 @@
             parent= from.parent;
         }
     }
-    
+
     /**
      * Deletes a node from the tree, re-balancing it if necessary. The differential indices in the
      * node's parent chain have to be updated in advance to calling this method. Generally, don't
      * call <code>delete</code> directly, but call
      * {@link #updateLength(Node, int) update_length(node, -node.length)} to properly remove a
      * node.
-     * 
+     *
      * @param node the node to delete.
      */
-    private void delete(Node node) {
-        if cast(ASSERT) Assert.isTrue(node !is null);
-        if cast(ASSERT) Assert.isTrue(node.length is 0);
-        
+    private void delete_(Node node) {
+        if (ASSERT) Assert.isTrue(node !is null);
+        if (ASSERT) Assert.isTrue(node.length is 0);
+
         Node parent= node.parent;
         Node toUpdate; // the parent of the node that lost a child
         bool lostLeftChild;
         bool isLeftChild= parent is null || node is parent.left;
-        
+
         if (node.left is null || node.right is null) {
             // 1) node has one child at max - replace parent's pointer with the only child
             // also handles the trivial case of no children
@@ -1016,46 +1016,46 @@
         } else {
             // 3) hard case - replace node with its successor
             Node successor= successor(node);
-            
+
             // successor exists (otherwise node would not have right child, case 1)
-            if cast(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 cast(ASSERT) Assert.isTrue(successor.left is null);
-            if cast(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 cast(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 cast(ASSERT) Assert.isTrue(successor.parent !is node);
+            if (ASSERT) Assert.isTrue(successor.parent !is node);
 
             toUpdate= successor.parent;
             lostLeftChild= true;
 
             // update relative indices
             updateParentChain(successor, node, -successor.length, -1);
-            
+
             // delete successor from its current place - like 1)
             setChild(toUpdate, successor.right, true);
 
             // move node's subtrees to its successor
             setChild(successor, node.right, false);
             setChild(successor, node.left, true);
-            
+
             // replace node by successor in its parent
             setChild(parent, successor, isLeftChild);
-            
+
             // update the successor
             successor.line= node.line;
             successor.offset= node.offset;
             successor.balance= node.balance;
         }
-        
+
         updateParentBalanceAfterDeletion(toUpdate, lostLeftChild);
     }
-    
+
     /**
      * Updates the balance information in the parent chain of node.
-     * 
+     *
      * @param node the first node that needs balance updating
      * @param wasLeftChild <code>true</code> if the deletion happened on <code>node</code>'s
      *        left subtree, <code>false</code> if it occurred on <code>node</code>'s right
@@ -1067,7 +1067,7 @@
                 node.balance++;
             else
                 node.balance--;
-            
+
             Node parent= node.parent;
             if (parent !is null)
                 wasLeftChild= node is parent.left;
@@ -1087,17 +1087,17 @@
                 case 0:
                     break; // propagate up
                 default:
-                    if cast(ASSERT) 
+                    if (ASSERT)
                         Assert.isTrue(false);
             }
-            
+
             node= parent;
         }
     }
-    
+
     /**
      * Re-balances a node whose parent has a double positive balance.
-     * 
+     *
      * @param node the node to re-balance
      * @return <code>true</code> if the re-balancement leaves the height at
      *         <code>node.parent</code> constant, <code>false</code> if the height changed
@@ -1116,14 +1116,14 @@
             parent.balance= 1;
             return true;
         } else {
-            if cast(ASSERT) Assert.isTrue(false);
+            if (ASSERT) Assert.isTrue(false);
             return true;
         }
     }
 
     /**
      * Re-balances a node whose parent has a double negative balance.
-     * 
+     *
      * @param node the node to re-balance
      * @return <code>true</code> if the re-balancement leaves the height at
      *         <code>node.parent</code> constant, <code>false</code> if the height changed
@@ -1142,27 +1142,27 @@
             parent.balance= -1;
             return true;
         } else {
-            if cast(ASSERT) Assert.isTrue(false);
+            if (ASSERT) Assert.isTrue(false);
             return true;
         }
     }
 
     /**
      * Returns the successor of a node, <code>null</code> if node is the last node.
-     * 
+     *
      * @param node a node
      * @return the successor of <code>node</code>, <code>null</code> if there is none
      */
     private Node successor(Node node) {
         if (node.right !is null)
             return successorDown(node.right);
-        
+
         return successorUp(node);
     }
-    
+
     /**
      * Searches the successor of <code>node</code> in its parent chain.
-     * 
+     *
      * @param node a node
      * @return the first node in <code>node</code>'s parent chain that is reached from its left
      *         subtree, <code>null</code> if there is none
@@ -1176,13 +1176,13 @@
             child= parent;
             parent= child.parent;
         }
-        if cast(ASSERT) Assert.isTrue(node.delimiter is NO_DELIM);
+        if (ASSERT) Assert.isTrue(node.delimiter is NO_DELIM);
         return null;
     }
 
     /**
      * Searches the left-most node in a given subtree.
-     * 
+     *
      * @param node a node
      * @return the left-most node in the given subtree
      */
@@ -1199,14 +1199,14 @@
 
     /**
      * Throws an exception.
-     * 
+     *
      * @param offset the illegal character or line offset that caused the exception
      * @throws BadLocationException always
      */
     private void fail(int offset)  {
         throw new BadLocationException();
     }
-    
+
     /**
      * Returns the information about the first delimiter found in the given
      * text starting at the given offset.
@@ -1216,7 +1216,7 @@
      * @return the information of the first found delimiter or <code>null</code>
      */
     protected abstract DelimiterInfo nextDelimiterInfo(String text, int offset);
-    
+
     /*
      * @see dwtx.jface.text.ILineTracker#getLineDelimiter(int)
      */
@@ -1263,7 +1263,7 @@
 
         int startLine= lineByOffset(offset);
         int endLine= lineByOffset(offset + length);
-        
+
         return endLine - startLine + 1;
     }
 
@@ -1297,11 +1297,11 @@
         int remaining= offset;
         Node node= fRoot;
         final int lineOffset;
-        
+
         while (true) {
             if (node is null)
                 fail(offset);
-            
+
             if (remaining < node.offset) {
                 node= node.left;
             } else {
@@ -1328,11 +1328,11 @@
             int remaining= line;
             int offset= 0;
             Node node= fRoot;
-            
+
             while (true) {
                 if (node is null)
                     fail(line);
-                
+
                 if (remaining is node.line) {
                     offset += node.offset;
                     break;
@@ -1359,11 +1359,11 @@
                 int remaining= line;
                 int offset= 0;
                 Node node= fRoot;
-                
+
                 while (true) {
                     if (node is null)
                         fail(line);
-                    
+
                     if (remaining is node.line) {
                         offset+= node.offset;
                         break;
@@ -1396,7 +1396,7 @@
             throw new InternalError();
         }
     }
-    
+
     /*
      * @see java.lang.Object#toString()
      */
@@ -1406,7 +1406,7 @@
         int leaves= cast(int) Math.pow(2, depth - 1);
         int width= WIDTH * leaves;
         String empty= "."; //$NON-NLS-1$
-        
+
         List roots= new LinkedList();
         roots.add(fRoot);
         StringBuffer buf= new StringBuffer((width + 1) * depth);
@@ -1422,7 +1422,7 @@
             for (ListIterator it= roots.listIterator(); it.hasNext();) {
                 // pad before
                 buf.append(space, 0, spaces);
-                
+
                 Node node= cast(Node) it.next();
                 String box;
                 // replace the node with its children
@@ -1434,76 +1434,76 @@
                     it.add(node.right);
                     box= node.toString();
                 }
-                
+
                 // 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(box);
                 buf.append(space, 0, pad_right);
-                
+
                 // pad after
                 buf.append(space, 0, spaces);
             }
-            
+
             buf.append('\n');
-            nodes *= 2; 
+            nodes *= 2;
         }
-        
+
         return buf.toString();
     }
 
     /**
      * Recursively computes the depth of the tree. Only used by {@link #toString()}.
-     * 
+     *
      * @param root the subtree to compute the depth of, may be <code>null</code>
      * @return the depth of the given tree, 0 if it is <code>null</code>
      */
     private byte computeDepth(Node root) {
         if (root is null)
             return 0;
-        
+
         return cast(byte) (Math.max(computeDepth(root.left), computeDepth(root.right)) + 1);
     }
-    
+
     /**
      * Debug-only method that checks the tree structure and the differential offsets.
      */
     private void checkTree() {
         checkTreeStructure(fRoot);
-        
+
         try {
-            checkTreeOffsets(nodeByOffset(0), new int[] {0, 0}, null);
+            checkTreeOffsets(nodeByOffset(0), [0, 0], null);
         } catch (BadLocationException x) {
             throw new AssertionError();
         }
     }
-    
+
     /**
      * Debug-only method that validates the tree structure below <code>node</code>. I.e. it
      * checks whether all parent/child pointers are consistent and whether the AVL balance
      * information is correct.
-     * 
+     *
      * @param node the node to validate
      * @return the depth of the tree under <code>node</code>
      */
     private byte checkTreeStructure(Node node) {
         if (node is null)
             return 0;
-        
+
         byte leftDepth= checkTreeStructure(node.left);
         byte rightDepth= checkTreeStructure(node.right);
         Assert.isTrue(node.balance is rightDepth - leftDepth);
         Assert.isTrue(node.left is null || node.left.parent is node);
         Assert.isTrue(node.right is null || node.right.parent is node);
-        
+
         return cast(byte) (Math.max(rightDepth, leftDepth) + 1);
     }
-    
+
     /**
      * Debug-only method that checks the differential offsets of the tree, starting at
      * <code>node</code> and continuing until <code>last</code>.
-     * 
+     *
      * @param node the first <code>Node</code> to check, may be <code>null</code>
      * @param offLen an array of length 2, with <code>offLen[0]</code> the expected offset of
      *        <code>node</code> and <code>offLen[1]</code> the expected line of
@@ -1516,16 +1516,16 @@
     private int[] checkTreeOffsets(Node node, int[] offLen, Node last) {
         if (node is last)
             return offLen;
-        
+
         Assert.isTrue(node.offset is offLen[0]);
         Assert.isTrue(node.line is offLen[1]);
-        
+
         if (node.right !is null) {
             int[] result= checkTreeOffsets(successorDown(node.right), new int[2], node);
             offLen[0] += result[0];
             offLen[1] += result[1];
         }
-        
+
         offLen[0] += node.length;
         offLen[1]++;
         return checkTreeOffsets(node.parent, offLen, last);
--- a/dwtx/jface/text/WhitespaceCharacterPainter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/WhitespaceCharacterPainter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -434,7 +434,7 @@
                     }
                     draw(gc, widgetOffset, visibleChar.toString(), fg);
                 }
-                visibleChar.delete(0, visibleChar.length());
+                visibleChar.delete_(0, visibleChar.length());
             }
         }
     }
--- a/dwtx/jface/text/contentassist/AdditionalInfoController.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/contentassist/AdditionalInfoController.d	Sun Aug 24 03:23:46 2008 +0200
@@ -79,15 +79,15 @@
  * @since 2.0
  */
 class AdditionalInfoController : AbstractInformationControlManager {
-    
+
     /**
      * A timer thread.
-     * 
+     *
      * @since 3.2
      */
     private static abstract class Timer {
         private static final int DELAY_UNTIL_JOB_IS_SCHEDULED= 50;
-        
+
         /**
          * A <code>Task</code> is {@link Task#run() run} when {@link #delay()} milliseconds have
          * elapsed after it was scheduled without a {@link #reset(ICompletionProposal) reset}
@@ -107,7 +107,7 @@
              */
             public abstract Task nextTask();
         }
-        
+
         /**
          * IDLE: the initial task, and active whenever the info has been shown. It cannot be run,
          * but specifies an infinite delay.
@@ -116,16 +116,16 @@
             public void run() {
                 Assert.isTrue(false);
             }
-            
+
             public Task nextTask() {
                 Assert.isTrue(false);
                 return null;
             }
-            
+
             public long delay() {
                 return Long.MAX_VALUE;
             }
-            
+
             public String toString() {
                 return "IDLE"; //$NON-NLS-1$
             }
@@ -136,7 +136,10 @@
         private final Task FIRST_WAIT= new class()  Task {
             public void run() {
                 final ICompletionProposalExtension5 proposal= getCurrentProposalEx();
-                Job job= new Job(JFaceTextMessages.getString("AdditionalInfoController.job_name")) { //$NON-NLS-1$
+                Job job= new class(JFaceTextMessages.getString("AdditionalInfoController.job_name")) Job { //$NON-NLS-1$
+                    this( String txt ){
+                        super( txt );
+                    }
                     protected IStatus run(IProgressMonitor monitor) {
                         Object info;
                         try {
@@ -154,15 +157,15 @@
                 };
                 job.schedule();
             }
-            
+
             public Task nextTask() {
                 return SECOND_WAIT;
             }
-            
+
             public long delay() {
                 return DELAY_UNTIL_JOB_IS_SCHEDULED;
             }
-            
+
             public String toString() {
                 return "FIRST_WAIT"; //$NON-NLS-1$
             }
@@ -176,15 +179,15 @@
                 // show the info
                 allowShowing();
             }
-            
+
             public Task nextTask() {
                 return IDLE;
             }
-            
+
             public long delay() {
                 return fDelay - DELAY_UNTIL_JOB_IS_SCHEDULED;
             }
-            
+
             public String toString() {
                 return "SECOND_WAIT"; //$NON-NLS-1$
             }
@@ -198,7 +201,7 @@
                 if (!fDisplay.isDisposed()) {
                     fDisplay.asyncExec(new class()  Runnable {
                         public void run() {
-                            synchronized (Timer.this) {
+                            synchronized (this.outer) {
                                 if (proposal is getCurrentProposal()) {
                                     Object info= proposal.getAdditionalProposalInfo();
                                     showInformation(proposal, info);
@@ -208,15 +211,15 @@
                     });
                 }
             }
-            
+
             public Task nextTask() {
                 return IDLE;
             }
-            
+
             public long delay() {
                 return fDelay;
             }
-            
+
             public String toString() {
                 return "LEGACY_WAIT"; //$NON-NLS-1$
             }
@@ -237,12 +240,12 @@
             public void run() {
                 Assert.isTrue(false);
             }
-            
+
             public String toString() {
                 return "EXIT"; //$NON-NLS-1$
             }
         };
-        
+
         /** The timer thread. */
         private final Thread fThread;
 
@@ -250,17 +253,17 @@
         private Task fTask;
         /** The next wake up time. */
         private long fNextWakeup;
-        
+
         private ICompletionProposal fCurrentProposal= null;
         private Object fCurrentInfo= null;
         private bool fAllowShowing= false;
 
         private final Display fDisplay;
         private final int fDelay;
-        
+
         /**
          * Creates a new timer.
-         * 
+         *
          * @param display the display to use for display thread posting.
          * @param delay the delay until to show additional info
          */
@@ -270,17 +273,17 @@
             long current= System.currentTimeMillis();
             schedule(IDLE, current);
 
-            fThread= new class(new Runnable()  Thread {
-                public void run() {
-                    try {
-                        loop();
-                    } catch (InterruptedException x) {
-                    }
+            void threadrun() {
+                try {
+                    loop();
+                } catch (InterruptedException x) {
                 }
-            }, JFaceTextMessages.getString("InfoPopup.info_delay_timer_name")); //$NON-NLS-1$
+            }
+            fThread= new Thread( &threadrun );
+            fThread.name = JFaceTextMessages.getString("InfoPopup.info_delay_timer_name"); //$NON-NLS-1$
             fThread.start();
         }
-        
+
         /**
          * Terminates the timer thread.
          */
@@ -288,10 +291,10 @@
             schedule(EXIT, System.currentTimeMillis());
             notifyAll();
         }
-        
+
         /**
          * Resets the timer thread as the selection has changed to a new proposal.
-         * 
+         *
          * @param p the new proposal
          */
         public final synchronized void reset(ICompletionProposal p) {
@@ -307,7 +310,7 @@
                     notifyAll();
             }
         }
-        
+
         private Task taskOnReset(ICompletionProposal p) {
             if (p is null)
                 return IDLE;
@@ -333,11 +336,11 @@
                 }
             }
         }
-        
+
         private Task currentTask() {
             return fTask;
         }
-        
+
         private void schedule(Task task, long current) {
             fTask= task;
             long nextWakeup= current + task.delay();
@@ -354,7 +357,7 @@
         ICompletionProposal getCurrentProposal() {
             return fCurrentProposal;
         }
-        
+
         ICompletionProposalExtension5 getCurrentProposalEx() {
             Assert.isTrue( cast(ICompletionProposalExtension5)fCurrentProposal );
             return cast(ICompletionProposalExtension5) fCurrentProposal;
@@ -374,7 +377,7 @@
             if (!fDisplay.isDisposed()) {
                 fDisplay.asyncExec(new class()  Runnable {
                     public void run() {
-                        synchronized (Timer.this) {
+                        synchronized (this.outer) {
                             if (info is fCurrentInfo) {
                                 showInformation(fCurrentProposal, info);
                             }
@@ -383,10 +386,10 @@
                 });
             }
         }
-        
+
         /**
          * Called in the display thread to show additional info.
-         * 
+         *
          * @param proposal the proposal to show information about
          * @param info the information about <code>proposal</code>
          */
@@ -415,7 +418,7 @@
         public void widgetDefaultSelected(SelectionEvent e) {
         }
     }
-    
+
     /**
      * Default control creator for the information control replacer.
      * @since 3.4
@@ -460,8 +463,8 @@
         super(creator);
         fDelay= delay;
         setAnchor(ANCHOR_RIGHT);
-        setFallbackAnchors(new Anchor[] { ANCHOR_RIGHT, ANCHOR_LEFT, ANCHOR_BOTTOM });
-        
+        setFallbackAnchors([ ANCHOR_RIGHT, ANCHOR_LEFT, ANCHOR_BOTTOM ]);
+
         /*
          * Adjust the location by one pixel towards the proposal popup, so that the single pixel
          * border of the additional info popup overlays with the border of the popup. This avoids
@@ -469,7 +472,7 @@
          */
         int spacing= -1;
         setMargins(spacing, spacing); // see also adjustment in #computeLocation
-        
+
         InformationControlReplacer replacer= new InformationControlReplacer(new DefaultPresenterControlCreator());
         getInternalAccessor().setInformationControlReplacer(replacer);
     }
@@ -490,7 +493,7 @@
         fProposalTable= cast(Table) control;
         fProposalTable.addSelectionListener(fSelectionListener);
         getInternalAccessor().getInformationControlReplacer().install(fProposalTable);
-        
+
         fTimer= new class(fProposalTable.getDisplay(), fDelay)  Timer {
             protected void showInformation(ICompletionProposal proposal, Object info) {
                 InformationControlReplacer replacer= getInternalAccessor().getInformationControlReplacer();
@@ -545,10 +548,10 @@
     void showInformation(ICompletionProposal proposal, Object info) {
         if (fProposalTable is null || fProposalTable.isDisposed())
             return;
-        
+
         if (fProposal is proposal && ((info is null && fInformation is null) || (info !is null && info.equals(fInformation))))
             return;
-        
+
         fInformation= info;
         fProposal= proposal;
         showInformation();
@@ -575,7 +578,7 @@
      */
     protected Point computeLocation(Rectangle subjectArea, Point controlSize, Anchor anchor) {
         Point location= super.computeLocation(subjectArea, controlSize, anchor);
-        
+
         /*
          * The location is computed using subjectControl.toDisplay(), which does not include the
          * trim of the subject control. As we want the additional info popup aligned with the outer
@@ -595,7 +598,7 @@
         // at least as big as the proposal table
         Point sizeConstraint= super.computeSizeConstraints(subjectControl, informationControl);
         Point size= subjectControl.getShell().getSize();
-        
+
         // AbstractInformationControlManager#internalShowInformationControl(Rectangle, Object) adds trims
         // to the computed constraints. Need to remove them here, to make the outer bounds of the additional
         // info shell fit the bounds of the proposal shell:
@@ -611,7 +614,7 @@
             sizeConstraint.y= size.y;
         return sizeConstraint;
     }
-    
+
     /*
      * @see dwtx.jface.text.AbstractInformationControlManager#hideInformationControl()
      */
--- a/dwtx/jface/text/contentassist/CompletionProposalPopup.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/contentassist/CompletionProposalPopup.d	Sun Aug 24 03:23:46 2008 +0200
@@ -137,23 +137,23 @@
 
     /**
      * Completion proposal selection handler.
-     * 
+     *
      * @since 3.4
      */
     final class ProposalSelectionHandler : AbstractHandler {
-        
+
         /**
          * Selection operation codes.
          */
         static final int SELECT_NEXT= 1;
         static final int SELECT_PREVIOUS= 2;
 
-        
+
         private int fOperationCode;
 
         /**
          * Creates a new selection handler.
-         * 
+         *
          * @param operationCode the operation code
          * @since 3.4
          */
@@ -186,11 +186,11 @@
         }
 
     }
-    
+
 
     /**
      * The empty proposal displayed if there is nothing else to show.
-     * 
+     *
      * @since 3.2
      */
     private static final class EmptyProposal : ICompletionProposal, ICompletionProposalExtension {
@@ -294,15 +294,15 @@
 
     private final class CommandKeyListener : KeyAdapter {
         private KeySequence fCommandSequence;
-        
+
         private this(KeySequence keySequence) {
             fCommandSequence= keySequence;
         }
-        
+
         public void keyPressed(KeyEvent e) {
             if (!Helper.okToUse(fProposalShell))
                 return;
-            
+
             int accelerator= SWTKeySupport.convertEventToUnmodifiedAccelerator(e);
             KeySequence sequence= KeySequence.getInstance(SWTKeySupport.convertAcceleratorToKeyStroke(accelerator));
             if (sequence.equals(fCommandSequence))
@@ -310,11 +310,11 @@
                     incrementalComplete();
                 else
                     showProposals(false);
-            
+
         }
     }
-    
-    
+
+
     /** The associated text viewer. */
     private ITextViewer fViewer;
     /** The associated content assistant. */
@@ -382,14 +382,14 @@
     private bool fIsFilteredSubset;
     /**
      * The filter runnable.
-     * 
+     *
      * @since 3.1.1
      */
     private final Runnable fFilterRunnable= new class()  Runnable {
         public void run() {
             if (!fIsFilterPending)
                 return;
-            
+
             fIsFilterPending= false;
 
             if (!Helper.okToUse(fContentAssistSubjectControlAdapter.getControl()))
@@ -417,50 +417,50 @@
     /**
      * <code>true</code> if <code>fFilterRunnable</code> has been
      * posted, <code>false</code> if not.
-     * 
+     *
      * @since 3.1.1
      */
     private bool fIsFilterPending= false;
     /**
      * The info message at the bottom of the popup, or <code>null</code> for no popup (if
      * ContentAssistant does not provide one).
-     * 
+     *
      * @since 3.2
      */
     private Label fMessageText;
     /**
      * The font used for <code>fMessageText</code> or null; dispose when done.
-     * 
+     *
      * @since 3.2
      */
     private Font fMessageTextFont;
     /**
      * The most recent completion offset (used to determine repeated invocation)
-     * 
+     *
      * @since 3.2
      */
     private int fLastCompletionOffset;
     /**
      * The (reusable) empty proposal.
-     * 
+     *
      * @since 3.2
      */
     private final EmptyProposal fEmptyProposal= new EmptyProposal();
     /**
      * The text for the empty proposal, or <code>null</code> to use the default text.
-     * 
+     *
      * @since 3.2
      */
     private String fEmptyMessage= null;
     /**
      * Tells whether colored labels support is enabled.
      * Only valid while the popup is active.
-     * 
+     *
      * @since 3.4
      */
     private bool fIsColoredLabelsSupportEnabled= false;
 
-    
+
     /**
      * Creates a new completion proposal popup for the given elements.
      *
@@ -521,7 +521,7 @@
                     int count= (fComputedProposals is null ? 0 : fComputedProposals.length);
                     if (count is 0 && hideWhenNoProposals(autoActivated))
                         return;
-                    
+
                     if (count is 1 && !autoActivated && canAutoInsert(fComputedProposals[0])) {
                         insertProposal(fComputedProposals[0], cast(wchar) 0, 0, fInvocationOffset);
                         hide();
@@ -539,11 +539,11 @@
 
         return getErrorMessage();
     }
-    
+
     /**
      * Hides the popup and returns <code>true</code> if the popup is configured
      * to never display an empty list. Returns <code>false</code> otherwise.
-     * 
+     *
      * @param autoActivated whether the invocation was auto-activated
      * @return <code>false</code> if an empty list should be displayed, <code>true</code> otherwise
      * @since 3.2
@@ -564,7 +564,7 @@
     /**
      * If content assist is set up to handle cycling, then the proposals are recomputed. Otherwise,
      * nothing happens.
-     * 
+     *
      * @since 3.2
      */
     private void handleRepeatedInvocation() {
@@ -606,7 +606,7 @@
         Control control= fContentAssistSubjectControlAdapter.getControl();
         fProposalShell= new Shell(control.getShell(), DWT.ON_TOP | DWT.RESIZE );
         fProposalShell.setFont(JFaceResources.getDefaultFont());
-        if cast(USE_VIRTUAL) {
+        if (USE_VIRTUAL) {
             fProposalTable= new Table(fProposalShell, DWT.H_SCROLL | DWT.V_SCROLL | DWT.VIRTUAL);
 
             Listener listener= new class()  Listener {
@@ -618,7 +618,7 @@
         } else {
             fProposalTable= new Table(fProposalShell, DWT.H_SCROLL | DWT.V_SCROLL);
         }
-        
+
         fIsColoredLabelsSupportEnabled= fContentAssistant.isColoredLabelsSupportEnabled();
         if (fIsColoredLabelsSupportEnabled)
             TableOwnerDrawSupport.install(fProposalTable);
@@ -632,7 +632,7 @@
         layout.marginHeight= 0;
         layout.verticalSpacing= 1;
         fProposalShell.setLayout(layout);
-        
+
         if (fContentAssistant.isStatusLineVisible()) {
             createMessageText();
         }
@@ -669,7 +669,7 @@
                 fSize= fProposalShell.getSize();
             }
         });
-        
+
         fProposalShell.setBackground(control.getDisplay().getSystemColor(DWT.COLOR_GRAY));
 
         Color c= getBackgroundColor(control);
@@ -696,14 +696,14 @@
         });
 
         fProposalTable.setHeaderVisible(false);
-        
+
         addCommandSupport(fProposalTable);
     }
 
     /**
      * Returns the minimal required height for the proposal, may return 0 if the popup has not been
      * created yet.
-     * 
+     *
      * @return the minimal height
      * @since 3.3
      */
@@ -721,7 +721,7 @@
 
     /**
      * Adds command support to the given control.
-     * 
+     *
      * @param control the control to watch for focus
      * @since 3.2
      */
@@ -777,7 +777,7 @@
 
     /**
      * Returns the background color to use.
-     * 
+     *
      * @param control the control to get the display from
      * @return the background color
      * @since 3.2
@@ -791,7 +791,7 @@
 
     /**
      * Returns the foreground color to use.
-     * 
+     *
      * @param control the control to get the display from
      * @return the foreground color
      * @since 3.2
@@ -802,10 +802,10 @@
             c= JFaceResources.getColorRegistry().get(JFacePreferences.CONTENT_ASSIST_FOREGROUND_COLOR);
         return c;
     }
-    
+
     /**
      * Creates the caption line under the proposal table.
-     * 
+     *
      * @since 3.2
      */
     private void createMessageText() {
@@ -854,7 +854,7 @@
 
             String displayString;
             StyleRange[] styleRanges= null;
-            if (fIsColoredLabelsSupportEnabled && current instanceof ICompletionProposalExtension6) {
+            if (fIsColoredLabelsSupportEnabled && cast(ICompletionProposalExtension6)current ) {
                 StyledString styledString= (cast(ICompletionProposalExtension6)current).getStyledDisplayString();
                 displayString= styledString.getString();
                 styleRanges= styledString.getStyleRanges();
@@ -864,7 +864,7 @@
             item.setText(displayString);
             if (fIsColoredLabelsSupportEnabled)
                 TableOwnerDrawSupport.storeStyleRanges(item, 0, styleRanges);
-            
+
             item.setImage(current.getImage());
             item.setData(current);
         } else {
@@ -884,11 +884,11 @@
          */
         if (fIsFilterPending)
             fFilterRunnable.run();
-        
+
         // filter runnable may have hidden the proposals
         if (!Helper.okToUse(fProposalTable))
             return null;
-        
+
         int i= fProposalTable.getSelectionIndex();
         if (fFilteredProposals is null || i < 0 || i >= fFilteredProposals.length)
             return null;
@@ -952,7 +952,7 @@
             }
 
 
-            if (p instanceof ICompletionProposalExtension2 && fViewer !is null) {
+            if (cast(ICompletionProposalExtension2)p && fViewer !is null) {
                 ICompletionProposalExtension2 e= cast(ICompletionProposalExtension2) p;
                 e.apply(fViewer, trigger, stateMask, offset);
             } else if ( cast(ICompletionProposalExtension)p ) {
@@ -1050,20 +1050,20 @@
             fProposalShell.dispose();
             fProposalShell= null;
         }
-        
+
         if (fMessageTextFont !is null) {
             fMessageTextFont.dispose();
             fMessageTextFont= null;
         }
-        
+
         if (fMessageText !is null) {
             fMessageText= null;
         }
-        
+
         fEmptyMessage= null;
-        
+
         fLastCompletionOffset= -1;
-        
+
         fContentAssistant.fireSessionEndEvent();
     }
 
@@ -1087,7 +1087,7 @@
         }
 
         if (fLastProposal !is null) {
-            if (fLastProposal instanceof ICompletionProposalExtension2 && fViewer !is null) {
+            if (cast(ICompletionProposalExtension2)fLastProposal  && fViewer !is null) {
                 ICompletionProposalExtension2 extension= cast(ICompletionProposalExtension2) fLastProposal;
                 extension.unselected(fViewer);
             }
@@ -1123,18 +1123,18 @@
             return;
 
         if (Helper.okToUse(fProposalTable)) {
-            if (oldProposal instanceof ICompletionProposalExtension2 && fViewer !is null)
+            if (cast(ICompletionProposalExtension2)oldProposal  && fViewer !is null)
                 (cast(ICompletionProposalExtension2) oldProposal).unselected(fViewer);
-            
+
             if (proposals is null || proposals.length is 0) {
                 fEmptyProposal.fOffset= fFilterOffset;
                 fEmptyProposal.fDisplayString= fEmptyMessage !is null ? fEmptyMessage : JFaceTextMessages.getString("CompletionProposalPopup.no_proposals"); //$NON-NLS-1$
-                proposals= new ICompletionProposal[] { fEmptyProposal };
+                proposals= [ fEmptyProposal ];
             }
 
             fFilteredProposals= proposals;
             final int newLen= proposals.length;
-            if cast(USE_VIRTUAL) {
+            if (USE_VIRTUAL) {
                 fProposalTable.setItemCount(newLen);
                 fProposalTable.clearAll();
             } else {
@@ -1193,7 +1193,7 @@
         if (fContentAssistant.addContentAssistListener(this, ContentAssistant.PROPOSAL_SELECTOR)) {
 
             ensureDocumentListenerInstalled();
-            
+
             if (fFocusHelper is null) {
                 fFocusHelper= new class()  IEditingSupport {
 
@@ -1367,18 +1367,18 @@
     private void selectProposal(int index, bool smartToggle) {
 
         ICompletionProposal oldProposal= getSelectedProposal();
-        if (oldProposal instanceof ICompletionProposalExtension2 && fViewer !is null)
+        if (cast(ICompletionProposalExtension2)oldProposal  && fViewer !is null)
             (cast(ICompletionProposalExtension2) oldProposal).unselected(fViewer);
 
         if (fFilteredProposals is null) {
             fireSelectionEvent(null, smartToggle);
             return;
         }
-        
+
         ICompletionProposal proposal= fFilteredProposals[index];
-        if (proposal instanceof ICompletionProposalExtension2 && fViewer !is null)
+        if (cast(ICompletionProposalExtension2)proposal && fViewer !is null)
             (cast(ICompletionProposalExtension2) proposal).selected(fViewer, smartToggle);
-        
+
         fireSelectionEvent(proposal, smartToggle);
 
         fLastProposal= proposal;
@@ -1391,7 +1391,7 @@
 
     /**
      * Fires a selection event, see {@link ICompletionListener}.
-     * 
+     *
      * @param proposal the selected proposal, possibly <code>null</code>
      * @param smartToggle true if the smart toggle is on
      * @since 3.2
@@ -1483,13 +1483,13 @@
         List filtered= new ArrayList(length);
         for (int i= 0; i < length; i++) {
 
-            if (proposals[i] instanceof ICompletionProposalExtension2) {
+            if (cast(ICompletionProposalExtension2)proposals[i] ) {
 
                 ICompletionProposalExtension2 p= cast(ICompletionProposalExtension2) proposals[i];
                 if (p.validate(document, offset, event))
                     filtered.add(p);
 
-            } else if (proposals[i] instanceof ICompletionProposalExtension) {
+            } else if (cast(ICompletionProposalExtension)proposals[i] ) {
 
                 ICompletionProposalExtension p= cast(ICompletionProposalExtension) proposals[i];
                 if (p.isValidFor(document, offset))
@@ -1518,11 +1518,11 @@
             fProposalShell.setFocus();
         }
     }
-    
+
     /**
      * Returns <code>true</code> if <code>proposal</code> should be auto-inserted,
      * <code>false</code> otherwise.
-     * 
+     *
      * @param proposal the single proposal that might be automatically inserted
      * @return <code>true</code> if <code>proposal</code> can be inserted automatically,
      *         <code>false</code> otherwise
@@ -1574,7 +1574,7 @@
                     int count= (fFilteredProposals is null ? 0 : fFilteredProposals.length);
                     if (count is 0 && hideWhenNoProposals(false))
                         return;
-                    
+
                     if (count is 1 && canAutoInsert(fFilteredProposals[0])) {
                         insertProposal(fFilteredProposals[0], cast(wchar) 0, 0, fInvocationOffset);
                         hide();
@@ -1600,7 +1600,7 @@
      * proposal, it is inserted, otherwise, the common prefix of all proposals
      * is inserted into the document. If there is no common prefix, nothing
      * happens and <code>false</code> is returned.
-     * 
+     *
      * @return <code>true</code> if a single proposal was inserted and the
      *         selector can be closed, <code>false</code> otherwise
      * @since 3.0
@@ -1625,7 +1625,7 @@
         List rightCase= new ArrayList();
 
         bool isWrongCaseMatch= false;
-        
+
         // the prefix of all case insensitive matches. This differs from the document
         // contents and will be replaced.
         CharSequence wrongCasePrefix= null;
@@ -1636,10 +1636,10 @@
 
         for (int i= 0; i < fFilteredProposals.length; i++) {
             ICompletionProposal proposal= fFilteredProposals[i];
-            
+
             if (!( cast(ICompletionProposalExtension3)proposal ))
                 return false;
-            
+
             int start= (cast(ICompletionProposalExtension3)proposal).getPrefixCompletionStart(fContentAssistSubjectControlAdapter.getDocument(), fFilterOffset);
             CharSequence insertion= (cast(ICompletionProposalExtension3)proposal).getPrefixCompletionText(fContentAssistSubjectControlAdapter.getDocument(), fFilterOffset);
             if (insertion is null)
@@ -1769,19 +1769,19 @@
         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());
+                buffer.delete_(c, buffer.length());
                 return;
             }
         }
 
         // all equal up to minimum
-        buffer.delete(min, buffer.length());
+        buffer.delete_(min, buffer.length());
     }
-    
+
     /**
      * Sets the message for the repetition affordance text at the bottom of the proposal. Only has
      * an effect if {@link ContentAssistant#isRepeatedInvocationMode()} returns <code>true</code>.
-     * 
+     *
      * @param message the new caption
      * @since 3.2
      */
@@ -1794,7 +1794,7 @@
     /**
      * Sets the text to be displayed if no proposals are available. Only has an effect if
      * {@link ContentAssistant#isShowEmptyList()} returns <code>true</code>.
-     * 
+     *
      * @param message the empty message
      * @since 3.2
      */
@@ -1805,14 +1805,14 @@
 
     /**
      * Enables or disables showing of the caption line. See also {@link #setMessage(String)}.
-     * 
+     *
      * @param show
      * @since 3.2
      */
     public void setStatusLineVisible(bool show) {
         if (!isActive() || show is (fMessageText !is null))
             return; // nothing to do
-        
+
         if (show) {
             createMessageText();
         } else {
@@ -1824,23 +1824,23 @@
 
     /**
      * Informs the popup that it is being placed above the caret line instead of below.
-     * 
+     *
      * @param above <code>true</code> if the location of the popup is above the caret line, <code>false</code> if it is below
      * @since 3.3
      */
     void switchedPositionToAbove(bool above) {
         if (fAdditionalInfoController !is null) {
-            fAdditionalInfoController.setFallbackAnchors(new Anchor[] {
+            fAdditionalInfoController.setFallbackAnchors([
                     AbstractInformationControlManager.ANCHOR_RIGHT,
                     AbstractInformationControlManager.ANCHOR_LEFT,
                     above ? AbstractInformationControlManager.ANCHOR_TOP : AbstractInformationControlManager.ANCHOR_BOTTOM
-            });
+            ]);
         }
     }
 
     /**
      * Returns a new proposal selection handler.
-     * 
+     *
      * @param operationCode the operation code
      * @return the handler
      * @since 3.4
--- a/dwtx/jface/text/contentassist/ContentAssistSubjectControlAdapter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContentAssistSubjectControlAdapter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -113,7 +113,7 @@
     public int getLineHeight() {
         if (fContentAssistSubjectControl !is null)
             return fContentAssistSubjectControl.getLineHeight();
-        
+
         return fViewer.getTextWidget().getLineHeight(getCaretOffset());
     }
 
@@ -393,7 +393,7 @@
      */
     public void installValidator(ContextFrame frame) {
         if (fContentAssistSubjectControl !is null) {
-            if (frame.fValidator instanceof ISubjectControlContextInformationValidator)
+            if (cast(ISubjectControlContextInformationValidator)frame.fValidator )
                 (cast(ISubjectControlContextInformationValidator)frame.fValidator).install(frame.fInformation, fContentAssistSubjectControl, frame.fOffset);
         } else
             frame.fValidator.install(frame.fInformation, fViewer, frame.fOffset);
@@ -406,7 +406,7 @@
      */
     public void installContextInformationPresenter(ContextFrame frame) {
         if (fContentAssistSubjectControl !is null) {
-            if (frame.fPresenter instanceof ISubjectControlContextInformationPresenter)
+            if (cast(ISubjectControlContextInformationPresenter)frame.fPresenter )
                 (cast(ISubjectControlContextInformationPresenter)frame.fValidator).install(frame.fInformation, fContentAssistSubjectControl, frame.fBeginOffset);
         } else
             frame.fPresenter.install(frame.fInformation, fViewer, frame.fBeginOffset);
--- a/dwtx/jface/text/contentassist/ContentAssistant.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/contentassist/ContentAssistant.d	Sun Aug 24 03:23:46 2008 +0200
@@ -359,12 +359,12 @@
             int pos= fContentAssistSubjectControlAdapter.getSelectedRange().x;
             char[] activation;
 
-            activation= fContentAssistSubjectControlAdapter.getCompletionProposalAutoActivationCharacters(ContentAssistant.this, pos);
+            activation= fContentAssistSubjectControlAdapter.getCompletionProposalAutoActivationCharacters(this.outer, pos);
 
             if (contains(activation, e.character) && !isProposalPopupActive())
                 showStyle= SHOW_PROPOSALS;
             else {
-                activation= fContentAssistSubjectControlAdapter.getContextInformationAutoActivationCharacters(ContentAssistant.this, pos);
+                activation= fContentAssistSubjectControlAdapter.getContextInformationAutoActivationCharacters(this.outer, pos);
                 if (contains(activation, e.character) && !isContextInfoPopupActive())
                     showStyle= SHOW_CONTEXT_INFO;
                 else {
--- a/dwtx/jface/text/contentassist/JFaceTextMessages.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/contentassist/JFaceTextMessages.d	Sun Aug 24 03:23:46 2008 +0200
@@ -55,9 +55,14 @@
  */
 class JFaceTextMessages {
 
-    private static final String RESOURCE_BUNDLE= JFaceTextMessages.class.getName();
+//     private static final String RESOURCE_BUNDLE= JFaceTextMessages.class.getName();
+
+    private static ResourceBundle fgResourceBundle;//= ResourceBundle.getBundle(RESOURCE_BUNDLE);
 
-    private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
+    static this() {
+        fgResourceBundle = ResourceBundle.getBundle(
+            getImportData!("dwtx.jface.text.contentassist.JFaceTextMessages.properties"));
+    }
 
     private this() {
     }
@@ -72,7 +77,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/contentassist/PopupCloser.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/contentassist/PopupCloser.d	Sun Aug 24 03:23:46 2008 +0200
@@ -112,7 +112,7 @@
     public void install(ContentAssistant contentAssistant, Table table) {
         install(contentAssistant, table, null);
     }
-    
+
     /**
      * Installs this closer on the given table opened by the given content assistant.
      *
@@ -125,22 +125,22 @@
         fContentAssistant= contentAssistant;
         fTable= table;
         fAdditionalInfoController= additionalInfoController;
-        
+
         if (Helper.okToUse(fTable)) {
             fShell= fTable.getShell();
             fDisplay= fShell.getDisplay();
-            
+
             fShell.addShellListener(this);
             fTable.addFocusListener(this);
             fScrollbar= fTable.getVerticalBar();
             if (fScrollbar !is null)
                 fScrollbar.addSelectionListener(this);
-            
+
             fDisplay.addFilter(DWT.Activate, this);
             fDisplay.addFilter(DWT.MouseWheel, this);
-            
+
             fDisplay.addFilter(DWT.Deactivate, this);
-            
+
             fDisplay.addFilter(DWT.MouseUp, this);
         }
     }
@@ -160,9 +160,9 @@
         if (fDisplay !is null && ! fDisplay.isDisposed()) {
             fDisplay.removeFilter(DWT.Activate, this);
             fDisplay.removeFilter(DWT.MouseWheel, this);
-            
+
             fDisplay.removeFilter(DWT.Deactivate, this);
-            
+
             fDisplay.removeFilter(DWT.MouseUp, this);
         }
     }
@@ -232,13 +232,13 @@
                     return;
                 if (event.widget is fShell || event.widget is fTable || event.widget is fScrollbar)
                     return;
-                
+
                 if (fAdditionalInfoController.getInternalAccessor().getInformationControlReplacer() is null)
                     fAdditionalInfoController.hideInformationControl();
                 else if (!fAdditionalInfoController.getInternalAccessor().isReplaceInProgress()) {
                     IInformationControl infoControl= fAdditionalInfoController.getCurrentInformationControl2();
                     // During isReplaceInProgress(), events can come from the replacing information control
-                    if (event.widget instanceof Control && infoControl instanceof IInformationControlExtension5) {
+                    if (cast(Control)event.widget && cast(IInformationControlExtension5)infoControl ) {
                         Control control= cast(Control) event.widget;
                         IInformationControlExtension5 iControl5= cast(IInformationControlExtension5) infoControl;
                         if (!(iControl5.containsControl(control)))
@@ -250,11 +250,11 @@
                     }
                 }
                 break;
-                
+
             case DWT.MouseUp:
                 if (fAdditionalInfoController is null || fAdditionalInfoController.getInternalAccessor().isReplaceInProgress())
                     break;
-                if (event.widget instanceof Control) {
+                if (cast(Control)event.widget) {
                     Control control= cast(Control) event.widget;
                     IInformationControl infoControl= fAdditionalInfoController.getCurrentInformationControl2();
                     if ( cast(IInformationControlExtension5)infoControl ) {
@@ -271,7 +271,7 @@
                                     }
                                 });
                             }
-                            
+
                             // XXX: workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=212392 :
                             control.getShell().getDisplay().asyncExec(new class()  Runnable {
                                 public void run() {
@@ -282,14 +282,14 @@
                     }
                 }
                 break;
-    
+
             case DWT.Deactivate:
                 if (fAdditionalInfoController is null)
                     break;
                 InformationControlReplacer replacer= fAdditionalInfoController.getInternalAccessor().getInformationControlReplacer();
                 if (replacer !is null && fContentAssistant !is null) {
                     IInformationControl iControl= replacer.getCurrentInformationControl2();
-                    if (event.widget instanceof Control && iControl instanceof IInformationControlExtension5) {
+                    if (cast(Control)event.widget  && cast(IInformationControlExtension5)iControl ) {
                         Control control= cast(Control) event.widget;
                         IInformationControlExtension5 iControl5= cast(IInformationControlExtension5) iControl;
                         if (iControl5.containsControl(control)) {
--- a/dwtx/jface/text/hyperlink/AbstractHyperlinkDetector.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/hyperlink/AbstractHyperlinkDetector.d	Sun Aug 24 03:23:46 2008 +0200
@@ -57,7 +57,7 @@
      * @throws IllegalArgumentException if the context is <code>null</code>
      * @throws IllegalStateException if this method is called more than once
      */
-    public final void setContext(IAdaptable context) throws IllegalStateException, IllegalArgumentException {
+    public final void setContext(IAdaptable context)  {
         Assert.isLegal(context !is null);
         if (fContext !is null)
             throw new IllegalStateException();
--- a/dwtx/jface/text/hyperlink/HyperlinkManager.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/hyperlink/HyperlinkManager.d	Sun Aug 24 03:23:46 2008 +0200
@@ -180,7 +180,7 @@
         text.addMouseTrackListener(this);
 
         fTextViewer.addTextListener(this);
-        
+
         fHyperlinkPresenter.install(fTextViewer);
     }
 
@@ -234,7 +234,7 @@
             text.removeMouseTrackListener(this);
         }
         fTextViewer.removeTextListener(this);
-        
+
         fHyperlinkPresenter.uninstall();
 
         fHyperlinkPresenter= null;
@@ -252,7 +252,7 @@
 
     /**
      * Finds hyperlinks at the current offset.
-     * 
+     *
      * @return the hyperlinks or <code>null</code> if none.
      */
     protected IHyperlink[] findHyperlinks() {
@@ -268,7 +268,7 @@
                 IHyperlinkDetector detector= fHyperlinkDetectors[i];
                 if (detector is null)
                     continue;
-                
+
                 if ( cast(IHyperlinkDetectorExtension2)detector ) {
                     int stateMask= (cast(IHyperlinkDetectorExtension2)detector).getStateMask();
                     if (stateMask !is -1 && stateMask !is fActiveHyperlinkStateMask)
@@ -287,7 +287,7 @@
                 if (fDetectionStrategy is FIRST) {
                     if (hyperlinks.length is 1)
                         return hyperlinks;
-                    return new IHyperlink[] {hyperlinks[0]};
+                    return [hyperlinks[0]];
                 }
                 allHyperlinks.addAll(Arrays.asList(hyperlinks));
             }
@@ -298,7 +298,7 @@
 
         if (fDetectionStrategy !is ALL) {
             int maxLength= computeLongestHyperlinkLength(allHyperlinks);
-            Iterator iter= new ArrayList(allHyperlinks).iterator();
+            Iterator iter= (new ArrayList(allHyperlinks)).iterator();
             while (iter.hasNext()) {
                 IHyperlink hyperlink= cast(IHyperlink)iter.next();
                 if (hyperlink.getHyperlinkRegion().getLength() < maxLength)
@@ -307,16 +307,16 @@
         }
 
         if (fDetectionStrategy is LONGEST_REGION_FIRST)
-            return new IHyperlink[] {cast(IHyperlink)allHyperlinks.get(0)};
+            return [cast(IHyperlink)allHyperlinks.get(0)];
 
-        return (IHyperlink[])allHyperlinks.toArray(new IHyperlink[allHyperlinks.size()]);
+        return arraycast!(IHyperlink)(allHyperlinks.toArray());
 
     }
 
     /**
      * Computes the length of the longest detected
      * hyperlink.
-     * 
+     *
      * @param hyperlinks
      * @return the length of the longest detected
      */
@@ -335,7 +335,7 @@
 
     /**
      * Returns the current text offset.
-     * 
+     *
      * @return the current text offset
      */
     protected int getCurrentTextOffset() {
@@ -353,7 +353,7 @@
             Point p= text.getLocationAtOffset(widgetOffset);
             if (p.x > relativePosition.x)
                 widgetOffset--;
-            
+
             if ( cast(ITextViewerExtension5)fTextViewer ) {
                 ITextViewerExtension5 extension= cast(ITextViewerExtension5)fTextViewer;
                 return extension.widgetOffset2ModelOffset(widgetOffset);
@@ -457,14 +457,14 @@
             if (!(cast(IHyperlinkPresenterExtension)fHyperlinkPresenter).canHideHyperlinks())
                 return;
         }
-        
+
         if (!isRegisteredStateMask(event.stateMask)) {
             if (fActive)
                 deactivate();
-            
+
             return;
         }
-        
+
         fActive= true;
         fActiveHyperlinkStateMask= event.stateMask;
 
@@ -488,10 +488,10 @@
         fHyperlinkPresenter.showHyperlinks(fActiveHyperlinks);
 
     }
-    
+
     /**
      * Checks whether the given state mask is registered.
-     * 
+     *
      * @param stateMask
      * @return <code>true</code> if a detector is registered for the given state mask
      * @since 3.3
@@ -499,10 +499,10 @@
     private bool isRegisteredStateMask(int stateMask) {
         if (stateMask is fHyperlinkStateMask)
             return true;
-        
+
         synchronized (fHyperlinkDetectors) {
             for (int i= 0; i < fHyperlinkDetectors.length; i++) {
-                if (fHyperlinkDetectors[i] instanceof IHyperlinkDetectorExtension2) {
+                if (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i] ) {
                     if (stateMask is (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i]).getStateMask())
                         return true;
                 }
@@ -510,7 +510,7 @@
         }
         return false;
     }
-    
+
     /*
      * @see dwt.events.FocusListener#focusGained(dwt.events.FocusEvent)
      */
@@ -531,7 +531,7 @@
         //key up
         deactivate();
     }
-    
+
     /*
      * @see dwtx.jface.text.ITextListener#textChanged(TextEvent)
      * @since 3.2
@@ -543,7 +543,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public void mouseExit(MouseEvent e) {
@@ -556,7 +556,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public void mouseEnter(MouseEvent e) {
@@ -564,7 +564,7 @@
 
     /**
      * {@inheritDoc}
-     * 
+     *
      * @since 3.4
      */
     public void mouseHover(MouseEvent e) {
--- a/dwtx/jface/text/hyperlink/HyperlinkMessages.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/hyperlink/HyperlinkMessages.d	Sun Aug 24 03:23:46 2008 +0200
@@ -34,20 +34,25 @@
 
 /**
  * Helper class to get NLSed messages.
- * 
+ *
  * @since 3.4
  */
 class HyperlinkMessages {
-    private static final String BUNDLE_NAME= HyperlinkMessages.class.getName();
-    
-    private static final ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
-    
+//     private static final String BUNDLE_NAME= HyperlinkMessages.class.getName();
+
+    private static final ResourceBundle RESOURCE_BUNDLE;//= ResourceBundle.getBundle(BUNDLE_NAME);
+
+    static this() {
+        RESOURCE_BUNDLE = ResourceBundle.getBundle(
+            getImportData!("dwtx.jface.text.HyperlinkMessages.properties"));
+    }
+
     private this() {
     }
 
     /**
      * Gets a string from the resource bundle.
-     * 
+     *
      * @param key the string used to get the bundle value, must not be
      *            <code>null</code>
      * @return the string from the resource bundle
@@ -56,7 +61,7 @@
         try {
             return RESOURCE_BUNDLE.getString(key);
         } catch (MissingResourceException e) {
-            return '!' + key + '!';
+            return '!' ~ key ~ '!';
         }
     }
 }
--- a/dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -79,38 +79,38 @@
 
 /**
  * A hyperlink presenter capable of showing multiple hyperlinks in a hover.
- * 
+ *
  * @since 3.4
  */
 public class MultipleHyperlinkPresenter : DefaultHyperlinkPresenter {
-    
+
     /**
      * An information control capable of showing a list of hyperlinks. The hyperlinks can be opened.
      */
     private static class LinkListInformationControl : AbstractInformationControl , IInformationControlExtension2 {
-        
+
         private static final class LinkContentProvider : IStructuredContentProvider {
-            
+
             /*
              * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
              */
             public Object[] getElements(Object inputElement) {
                 return (Object[]) inputElement;
             }
-            
+
             /*
              * @see dwtx.jface.viewers.IContentProvider#dispose()
              */
             public void dispose() {
             }
-            
+
             /*
              * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
              */
             public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
             }
         }
-        
+
         private static final class LinkLabelProvider : ColumnLabelProvider {
             /*
              * @see dwtx.jface.viewers.ColumnLabelProvider#getText(java.lang.Object)
@@ -123,17 +123,17 @@
                 return HyperlinkMessages.getString("LinkListInformationControl.unknownLink"); //$NON-NLS-1$
             }
         }
-        
+
         private final MultipleHyperlinkHoverManager fManager;
-        
+
         private IHyperlink[] fInput;
         private Composite fParent;
         private Table fTable;
 
         private Color fForegroundColor;
         private Color fBackgroundColor;
-        
-        
+
+
         /**
          * Creates a link list information control with the given shell as parent.
          *
@@ -149,14 +149,14 @@
             fBackgroundColor= backgroundColor;
             create();
         }
-        
+
         /*
          * @see dwtx.jface.text.IInformationControl#setInformation(java.lang.String)
          */
         public void setInformation(String information) {
             //replaced by IInformationControlExtension2#setInput(java.lang.Object)
         }
-        
+
         /*
          * @see dwtx.jface.text.IInformationControlExtension2#setInput(java.lang.Object)
          */
@@ -164,7 +164,7 @@
             fInput= (IHyperlink[]) input;
             deferredCreateContent(fParent);
         }
-        
+
         /*
          * @see dwtx.jface.text.AbstractInformationControl#createContent(dwt.widgets.Composite)
          */
@@ -179,23 +179,23 @@
             fParent.setForeground(fForegroundColor);
             fParent.setBackground(fBackgroundColor);
         }
-        
+
         /*
          * @see dwtx.jface.text.AbstractInformationControl#computeSizeHint()
          */
         public Point computeSizeHint() {
             Point preferedSize= getShell().computeSize(DWT.DEFAULT, DWT.DEFAULT, true);
-            
+
             Point constraints= getSizeConstraints();
             if (constraints is null)
                 return preferedSize;
-        
+
             if (fTable.getVerticalBar() is null || fTable.getHorizontalBar() is null)
                 return Geometry.min(constraints, preferedSize);
-            
+
             int scrollBarWidth= fTable.getVerticalBar().getSize().x;
             int scrollBarHeight= fTable.getHorizontalBar().getSize().y;
-            
+
             int width;
             if (preferedSize.y - scrollBarHeight <= constraints.y) {
                 width= preferedSize.x - scrollBarWidth;
@@ -203,7 +203,7 @@
             } else {
                 width= Math.min(preferedSize.x, constraints.x);
             }
-            
+
             int height;
             if (preferedSize.x - scrollBarWidth <= constraints.x) {
                 height= preferedSize.y - scrollBarHeight;
@@ -211,27 +211,27 @@
             } else {
                 height= Math.min(preferedSize.y, constraints.y);
             }
-            
+
             return new Point(width, height);
         }
-        
+
         private void deferredCreateContent(Composite parent) {
             fTable= new Table(parent, DWT.SINGLE | DWT.FULL_SELECTION);
             fTable.setLinesVisible(false);
             fTable.setHeaderVisible(false);
             fTable.setForeground(fForegroundColor);
             fTable.setBackground(fBackgroundColor);
-            
+
             final TableViewer viewer= new TableViewer(fTable);
             viewer.setContentProvider(new LinkContentProvider());
             viewer.setLabelProvider(new LinkLabelProvider());
             viewer.setInput(fInput);
             fTable.setSelection(0);
-            
+
             registerTableListeners();
-            
+
             getShell().addShellListener(new class()  ShellAdapter {
-                
+
                 /*
                  * @see dwt.events.ShellAdapter#shellActivated(dwt.events.ShellEvent)
                  */
@@ -239,17 +239,17 @@
                     if (viewer.getTable().getSelectionCount() is 0) {
                         viewer.getTable().setSelection(0);
                     }
-                    
+
                     viewer.getTable().setFocus();
                 }
             });
         }
-        
+
         private void registerTableListeners() {
-            
+
             fTable.addMouseMoveListener(new class()  MouseMoveListener {
                 TableItem fLastItem= null;
-                
+
                 public void mouseMove(MouseEvent e) {
                     if (fTable.equals(e.getSource())) {
                         Object o= fTable.getItem(new Point(e.x, e.y));
@@ -257,41 +257,41 @@
                             TableItem item= cast(TableItem) o;
                             if (!o.equals(fLastItem)) {
                                 fLastItem= cast(TableItem) o;
-                                fTable.setSelection(new TableItem[] { fLastItem });
+                                fTable.setSelection([ fLastItem ]);
                             } else if (e.y < fTable.getItemHeight() / 4) {
                                 // Scroll up
                                 int index= fTable.indexOf(item);
                                 if (index > 0) {
                                     fLastItem= fTable.getItem(index - 1);
-                                    fTable.setSelection(new TableItem[] { fLastItem });
+                                    fTable.setSelection([ fLastItem ]);
                                 }
                             } else if (e.y > fTable.getBounds().height - fTable.getItemHeight() / 4) {
                                 // Scroll down
                                 int index= fTable.indexOf(item);
                                 if (index < fTable.getItemCount() - 1) {
                                     fLastItem= fTable.getItem(index + 1);
-                                    fTable.setSelection(new TableItem[] { fLastItem });
+                                    fTable.setSelection([ fLastItem ]);
                                 }
                             }
                         }
                     }
                 }
             });
-            
+
             fTable.addSelectionListener(new class()  SelectionAdapter {
                 public void widgetSelected(SelectionEvent e) {
                     openSelectedLink();
                 }
             });
-            
+
             fTable.addMouseListener(new class()  MouseAdapter {
                 public void mouseUp(MouseEvent e) {
                     if (fTable.getSelectionCount() < 1)
                         return;
-                    
+
                     if (e.button !is 1)
                         return;
-                    
+
                     if (fTable.equals(e.getSource())) {
                         Object o= fTable.getItem(new Point(e.x, e.y));
                         TableItem selection= fTable.getSelection()[0];
@@ -300,7 +300,7 @@
                     }
                 }
             });
-            
+
             fTable.addKeyListener(new class()  KeyAdapter {
                 public void keyPressed(KeyEvent e) {
                     if (e.keyCode is 0x0D) // return
@@ -308,7 +308,7 @@
                 }
             });
         }
-        
+
         /*
          * @see dwtx.jface.text.IInformationControlExtension#hasContents()
          */
@@ -326,9 +326,9 @@
             link.open();
         }
     }
-    
+
     private class MultipleHyperlinkHover : ITextHover, ITextHoverExtension {
-        
+
         /**
          * @see dwtx.jface.text.ITextHover#getHoverInfo(dwtx.jface.text.ITextViewer, dwtx.jface.text.IRegion)
          * @deprecated
@@ -336,21 +336,21 @@
         public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
             return null;
         }
-        
+
         /*
          * @see dwtx.jface.text.ITextHover#getHoverRegion(dwtx.jface.text.ITextViewer, int)
          */
         public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
             return fSubjectRegion;
         }
-        
+
         /*
          * @see dwtx.jface.text.ITextHoverExtension2#getHoverInfo2(dwtx.jface.text.ITextViewer, dwtx.jface.text.IRegion)
          */
         public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
             return fHyperlinks;
         }
-        
+
         /*
          * @see dwtx.jface.text.ITextHoverExtension#getHoverControlCreator()
          */
@@ -364,36 +364,36 @@
             };
         }
     }
-    
+
     private static class MultipleHyperlinkHoverManager : AbstractInformationControlManager , IWidgetTokenKeeper, IWidgetTokenKeeperExtension {
-        
+
         private class Closer : IInformationControlCloser, Listener, KeyListener {
-            
+
             private Control fSubjectControl;
             private Display fDisplay;
             private IInformationControl fControl;
             private Rectangle fSubjectArea;
-            
+
             /*
              * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#setInformationControl(dwtx.jface.text.IInformationControl)
              */
             public void setInformationControl(IInformationControl control) {
                 fControl= control;
             }
-            
+
             /*
              * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#setSubjectControl(dwt.widgets.Control)
              */
             public void setSubjectControl(Control subject) {
                 fSubjectControl= subject;
             }
-            
+
             /*
              * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#start(dwt.graphics.Rectangle)
              */
             public void start(Rectangle subjectArea) {
                 fSubjectArea= subjectArea;
-                
+
                 fDisplay= fSubjectControl.getDisplay();
                 if (!fDisplay.isDisposed()) {
                     fDisplay.addFilter(DWT.FocusOut, this);
@@ -401,7 +401,7 @@
                     fTextViewer.getTextWidget().addKeyListener(this);
                 }
             }
-            
+
             /*
              * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#stop()
              */
@@ -411,10 +411,10 @@
                     fDisplay.removeFilter(DWT.MouseMove, this);
                     fTextViewer.getTextWidget().removeKeyListener(this);
                 }
-                
+
                 fSubjectArea= null;
             }
-            
+
             /*
              * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event)
              */
@@ -429,41 +429,41 @@
                         break;
                 }
             }
-            
+
             /**
              * Handle mouse movement events.
-             * 
+             *
              * @param event the event
              */
             private void handleMouseMove(Event event) {
-                if (!(event.widget instanceof Control))
+                if (!(cast(Control)event.widget ))
                     return;
-                
+
                 if (fControl.isFocusControl())
                     return;
-                
+
                 Control eventControl= cast(Control) event.widget;
-                
+
                 //transform coordinates to subject control:
                 Point mouseLoc= event.display.map(eventControl, fSubjectControl, event.x, event.y);
-                
+
                 if (fSubjectArea.contains(mouseLoc))
                     return;
-                
+
                 if (inKeepUpZone(mouseLoc.x, mouseLoc.y, (cast(IInformationControlExtension3) fControl).getBounds()))
                     return;
-                
+
                 hideInformationControl();
             }
-            
+
             /**
              * Tests whether a given mouse location is within the keep-up zone.
              * The hover should not be hidden as long as the mouse stays inside this zone.
-             * 
+             *
              * @param x the x coordinate, relative to the <em>subject control</em>
              * @param y the y coordinate, relative to the <em>subject control</em>
              * @param controlBounds the bounds of the current control
-             * 
+             *
              * @return <code>true</code> iff the mouse event occurred in the keep-up zone
              */
             private bool inKeepUpZone(int x, int y, Rectangle controlBounds) {
@@ -476,23 +476,23 @@
                 // +--------------------+
                 if (fSubjectArea.contains(x, y))
                     return true;
-                
+
                 Rectangle iControlBounds= fSubjectControl.getDisplay().map(null, fSubjectControl, controlBounds);
                 Rectangle totalBounds= Geometry.copy(iControlBounds);
                 if (totalBounds.contains(x, y))
                     return true;
-                
+
                 int keepUpY= fSubjectArea.y + fSubjectArea.height;
                 Rectangle alsoKeepUp= new Rectangle(fSubjectArea.x, keepUpY, fSubjectArea.width, totalBounds.y - keepUpY);
                 return alsoKeepUp.contains(x, y);
             }
-            
+
             /*
              * @see dwt.events.KeyListener#keyPressed(dwt.events.KeyEvent)
              */
             public void keyPressed(KeyEvent e) {
             }
-            
+
             /*
              * @see dwt.events.KeyListener#keyReleased(dwt.events.KeyEvent)
              */
@@ -501,41 +501,41 @@
             }
 
         }
-        
+
         /**
          * Priority of the hover managed by this manager.
          * Default value: One higher then for the hovers
          * managed by TextViewerHoverManager.
          */
         private static final int WIDGET_TOKEN_PRIORITY= 1;
-        
+
         private final MultipleHyperlinkHover fHover;
         private final ITextViewer fTextViewer;
         private final MultipleHyperlinkPresenter fHyperlinkPresenter;
         private Closer fCloser;
         private bool fIsControlVisible;
 
-        
+
         /**
          * Create a new MultipleHyperlinkHoverManager. The MHHM can show and hide
          * the given MultipleHyperlinkHover inside the given ITextViewer.
-         * 
+         *
          * @param hover the hover to manage
          * @param viewer the viewer to show the hover in
          * @param hyperlinkPresenter the hyperlink presenter using this manager to present hyperlinks
          */
         public this(MultipleHyperlinkHover hover, ITextViewer viewer, MultipleHyperlinkPresenter hyperlinkPresenter) {
             super(hover.getHoverControlCreator());
-            
+
             fHover= hover;
             fTextViewer= viewer;
             fHyperlinkPresenter= hyperlinkPresenter;
-            
+
             fCloser= new Closer();
             setCloser(fCloser);
             fIsControlVisible= false;
         }
-        
+
         /*
          * @see dwtx.jface.text.AbstractInformationControlManager#computeInformation()
          */
@@ -545,32 +545,32 @@
                 setInformation(null, null);
                 return;
             }
-            
+
             Rectangle area= JFaceTextUtil.computeArea(region, fTextViewer);
             if (area is null || area.isEmpty()) {
                 setInformation(null, null);
                 return;
             }
-            
+
             Object information= fHover.getHoverInfo2(fTextViewer, region);
             setCustomInformationControlCreator(fHover.getHoverControlCreator());
             setInformation(information, area);
         }
-        
-        /* 
+
+        /*
          * @see dwtx.jface.text.AbstractInformationControlManager#computeInformationControlLocation(dwt.graphics.Rectangle, dwt.graphics.Point)
          */
         protected Point computeInformationControlLocation(Rectangle subjectArea, Point controlSize) {
             Point result= super.computeInformationControlLocation(subjectArea, controlSize);
-            
+
             Point cursorLocation= fTextViewer.getTextWidget().getDisplay().getCursorLocation();
             if (cursorLocation.x <= result.x + controlSize.x)
                 return result;
-            
+
             result.x= cursorLocation.x + 20 - controlSize.x;
             return result;
         }
-        
+
         /*
          * @see dwtx.jface.text.AbstractInformationControlManager#showInformationControl(dwt.graphics.Rectangle)
          */
@@ -584,38 +584,38 @@
             } else {
                 super.showInformationControl(subjectArea);
             }
-            
+
             fIsControlVisible= true;
         }
-        
+
         /*
          * @see dwtx.jface.text.AbstractInformationControlManager#hideInformationControl()
          */
         protected void hideInformationControl() {
             super.hideInformationControl();
-            
+
             if ( cast(IWidgetTokenOwner)fTextViewer ) {
                 (cast(IWidgetTokenOwner) fTextViewer).releaseWidgetToken(this);
             }
-            
+
             fIsControlVisible= false;
             fHyperlinkPresenter.hideHyperlinks();
         }
-        
+
         /*
          * @see dwtx.jface.text.AbstractInformationControlManager#disposeInformationControl()
          */
         public void disposeInformationControl() {
             super.disposeInformationControl();
-            
+
             if ( cast(IWidgetTokenOwner)fTextViewer ) {
                 (cast(IWidgetTokenOwner) fTextViewer).releaseWidgetToken(this);
             }
-            
+
             fIsControlVisible= false;
             fHyperlinkPresenter.hideHyperlinks();
         }
-        
+
         /*
          * @see dwtx.jface.text.IWidgetTokenKeeper#requestWidgetToken(dwtx.jface.text.IWidgetTokenOwner)
          */
@@ -623,42 +623,42 @@
             hideInformationControl();
             return true;
         }
-        
+
         /*
          * @see dwtx.jface.text.IWidgetTokenKeeperExtension#requestWidgetToken(dwtx.jface.text.IWidgetTokenOwner, int)
          */
         public bool requestWidgetToken(IWidgetTokenOwner owner, int priority) {
             if (priority < WIDGET_TOKEN_PRIORITY)
                 return false;
-            
+
             hideInformationControl();
             return true;
         }
-        
+
         /*
          * @see dwtx.jface.text.IWidgetTokenKeeperExtension#setFocus(dwtx.jface.text.IWidgetTokenOwner)
          */
         public bool setFocus(IWidgetTokenOwner owner) {
             return false;
         }
-        
+
         /**
          * Returns <code>true</code> if the information control managed by
          * this manager is visible, <code>false</code> otherwise.
-         * 
+         *
          * @return <code>true</code> if information control is visible
          */
         public bool isInformationControlVisible() {
             return fIsControlVisible;
         }
     }
-    
+
     private ITextViewer fTextViewer;
-    
+
     private IHyperlink[] fHyperlinks;
     private Region fSubjectRegion;
     private MultipleHyperlinkHoverManager fManager;
-    
+
     /**
      * Creates a new multiple hyperlink presenter which uses
      * {@link #HYPERLINK_COLOR} to read the color from the given preference store.
@@ -668,7 +668,7 @@
     public this(IPreferenceStore store) {
         super(store);
     }
-    
+
     /**
      * Creates a new multiple hyperlink presenter.
      *
@@ -677,80 +677,80 @@
     public this(RGB color) {
         super(color);
     }
-    
+
     /*
      * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#install(dwtx.jface.text.ITextViewer)
      */
     public void install(ITextViewer viewer) {
         super.install(viewer);
         fTextViewer= viewer;
-        
+
         fManager= new MultipleHyperlinkHoverManager(new MultipleHyperlinkHover(), fTextViewer, this);
         fManager.install(viewer.getTextWidget());
         fManager.setSizeConstraints(100, 12, false, true);
     }
-    
+
     /*
      * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#uninstall()
      */
     public void uninstall() {
         super.uninstall();
-        
+
         if (fTextViewer !is null) {
             fManager.dispose();
-            
+
             fTextViewer= null;
         }
     }
-    
+
     /*
      * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#canShowMultipleHyperlinks()
      */
     public bool canShowMultipleHyperlinks() {
         return true;
     }
-    
+
     /*
      * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#canHideHyperlinks()
      */
     public bool canHideHyperlinks() {
         return !fManager.isInformationControlVisible();
     }
-    
+
     /*
      * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#hideHyperlinks()
      */
     public void hideHyperlinks() {
         super.hideHyperlinks();
-        
+
         fHyperlinks= null;
     }
-    
+
     /*
      * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#showHyperlinks(dwtx.jface.text.hyperlink.IHyperlink[])
      */
     public void showHyperlinks(IHyperlink[] hyperlinks) {
-        super.showHyperlinks(new IHyperlink[] { hyperlinks[0] });
+        super.showHyperlinks([ hyperlinks[0] ]);
 
         fSubjectRegion= null;
         fHyperlinks= hyperlinks;
-        
+
         if (hyperlinks.length is 1)
             return;
-        
+
         int start= hyperlinks[0].getHyperlinkRegion().getOffset();
         int end= start + hyperlinks[0].getHyperlinkRegion().getLength();
-        
+
         for (int i= 1; i < hyperlinks.length; i++) {
             int hstart= hyperlinks[i].getHyperlinkRegion().getOffset();
             int hend= hstart + hyperlinks[i].getHyperlinkRegion().getLength();
-            
+
             start= Math.min(start, hstart);
             end= Math.max(end, hend);
         }
-        
+
         fSubjectRegion= new Region(start, end - start);
-        
+
         fManager.showInformation();
     }
 }
--- a/dwtx/jface/text/hyperlink/URLHyperlink.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/hyperlink/URLHyperlink.d	Sun Aug 24 03:23:46 2008 +0200
@@ -91,12 +91,12 @@
      * @see dwtx.jdt.internal.ui.javaeditor.IHyperlink#getHyperlinkText()
      */
     public String getHyperlinkText() {
-        return MessageFormat.format(HyperlinkMessages.getString("URLHyperlink.hyperlinkText"), new Object[] { fURLString }); //$NON-NLS-1$
+        return MessageFormat.format(HyperlinkMessages.getString("URLHyperlink.hyperlinkText"), fURLString ); //$NON-NLS-1$
     }
 
     /**
      * Returns the URL string of this hyperlink.
-     * 
+     *
      * @return the URL string
      * @since 3.2
      */
--- a/dwtx/jface/text/hyperlink/URLHyperlinkDetector.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/hyperlink/URLHyperlinkDetector.d	Sun Aug 24 03:23:46 2008 +0200
@@ -55,7 +55,7 @@
      */
     public this() {
     }
-    
+
     /**
      * Creates a new URL hyperlink detector.
      *
@@ -94,7 +94,7 @@
         bool startDoubleQuote= false;
         int urlOffsetInLine= 0;
         int urlLength= 0;
-        
+
         int urlSeparatorOffset= line.indexOf("://"); //$NON-NLS-1$
         while (urlSeparatorOffset >= 0) {
 
@@ -118,10 +118,10 @@
             urlLength= tokenizer.nextToken().length() + 3 + urlSeparatorOffset - urlOffsetInLine;
             if (offsetInLine >= urlOffsetInLine && offsetInLine <= urlOffsetInLine + urlLength)
                 break;
-        
+
             urlSeparatorOffset= line.indexOf("://", urlSeparatorOffset + 1); //$NON-NLS-1$
         }
-        
+
         if (urlSeparatorOffset < 0)
             return null;
 
@@ -149,7 +149,7 @@
         }
 
         IRegion urlRegion= new Region(lineInfo.getOffset() + urlOffsetInLine, urlLength);
-        return new IHyperlink[] {new URLHyperlink(urlRegion, urlString)};
+        return [new URLHyperlink(urlRegion, urlString)];
     }
 
 }
--- a/dwtx/jface/text/link/InclusivePositionUpdater.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/link/InclusivePositionUpdater.d	Sun Aug 24 03:23:46 2008 +0200
@@ -105,7 +105,7 @@
                     position.setLength(length - deleted + eventNewLength);
                 } else {
                     // event consumes the position - delete it
-                    position.delete();
+                    position.delete_();
                 }
             }
         } catch (BadPositionCategoryException e) {
--- a/dwtx/jface/text/link/LinkedModeModel.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeModel.d	Sun Aug 24 03:23:46 2008 +0200
@@ -159,7 +159,7 @@
         /*
          * @see dwtx.jface.text.IDocumentExtension.IReplace#perform(dwtx.jface.text.IDocument, dwtx.jface.text.IDocumentListener)
          */
-        public void perform(IDocument document, IDocumentListener owner) throws RuntimeException, MalformedTreeException {
+        public void perform(IDocument document, IDocumentListener owner)  {
             document.removeDocumentListener(owner);
             fIsChanging= true;
             try {
--- a/dwtx/jface/text/link/LinkedModeUI.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeUI.d	Sun Aug 24 03:23:46 2008 +0200
@@ -719,7 +719,7 @@
         // TODO find a way to set up content assistant.
 //      fAssistant.setDocumentPartitioning(IJavaPartitions.JAVA_PARTITIONING);
         fAssistant.enableColoredLabels(fIsColoredLabelsSupportEnabled);
-        fCaretPosition.delete();
+        fCaretPosition.delete_();
     }
 
     /**
--- a/dwtx/jface/text/projection/ProjectionDocument.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionDocument.d	Sun Aug 24 03:23:46 2008 +0200
@@ -199,17 +199,17 @@
 
     /**
      * Returns the projection mapping used by this document.
-     * 
+     *
      * @return the projection mapping used by this document
      * @deprecated As of 3.4, replaced by {@link #getDocumentInformationMapping()}
      */
     public ProjectionMapping getProjectionMapping(){
         return fMapping;
     }
-    
+
     /**
      * Returns the projection mapping used by this document.
-     * 
+     *
      * @return the projection mapping used by this document
      * @since 3.4
      */
@@ -225,7 +225,7 @@
     public IDocument getMasterDocument() {
         return fMasterDocument;
     }
-    
+
     /*
      * @see dwtx.jface.text.IDocumentExtension4#getDefaultLineDelimiter()
      * @since 3.1
@@ -233,7 +233,7 @@
     public String getDefaultLineDelimiter() {
         return TextUtilities.getDefaultLineDelimiter(fMasterDocument);
     }
-    
+
     /**
      * Initializes the projection document from the master document based on
      * the master's fragments.
@@ -272,7 +272,7 @@
      * @throws BadLocationException in case the fragment is invalid
      * @throws BadPositionCategoryException in case the segment category is invalid
      */
-    private Segment createSegmentFor(Fragment fragment, int index) throws BadLocationException, BadPositionCategoryException {
+    private Segment createSegmentFor(Fragment fragment, int index)  {
 
         int offset= 0;
         if (index > 0) {
@@ -478,7 +478,7 @@
             fragments= fMapping.toExactOriginRegions(imageRegion);
 
         if (fragments is null || fragments.length is 0)
-            return new IRegion[] { new Region(offsetInMaster, lengthInMaster) };
+            return [ new Region(offsetInMaster, lengthInMaster) ];
 
         List gaps= new ArrayList();
 
@@ -843,7 +843,7 @@
                     // join fragments and their corresponding segments
                     segment.setLength(segment.getLength() + next.getLength());
                     fragment.setLength(fragment.getLength() + next.fragment.getLength());
-                    next.delete();
+                    next.delete_();
                 }
             }
         }
--- a/dwtx/jface/text/projection/ProjectionDocumentManager.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionDocumentManager.d	Sun Aug 24 03:23:46 2008 +0200
@@ -103,7 +103,7 @@
      * @return <code>true</code> if the given document is a master document known to this manager
      */
     private bool hasProjection(IDocument master) {
-        return (fProjectionRegistry.get(master) instanceof List);
+        return (cast(List)fProjectionRegistry.get(master) );
     }
 
     /**
--- a/dwtx/jface/text/projection/ProjectionMapping.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/projection/ProjectionMapping.d	Sun Aug 24 03:23:46 2008 +0200
@@ -549,7 +549,7 @@
     public IRegion[] toExactOriginRegions(IRegion imageRegion)  {
 
         if (imageRegion.getLength() is 0)
-            return new IRegion[] { new Region(toOriginOffset(imageRegion.getOffset()), 0) };
+            return [ new Region(toOriginOffset(imageRegion.getOffset()), 0) ];
 
         int endOffset= exclusiveEnd(imageRegion);
         Position[] segments= getSegments();
@@ -602,7 +602,7 @@
         int offset= originRegion.getOffset();
         if (originRegion.getLength() is 0) {
             int imageOffset= toImageOffset(offset);
-            return imageOffset > -1 ? new IRegion[] { new Region(imageOffset, 0) } : null;
+            return imageOffset > -1 ? [ 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 IRegion[] { new Region(originOffset, 0) } : null;
+            return imageOffset > -1 ? [ new Region(originOffset, 0) ] : null;
         }
 
         int endOffset= originOffset + originLength;
--- a/dwtx/jface/text/reconciler/Reconciler.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/reconciler/Reconciler.d	Sun Aug 24 03:23:46 2008 +0200
@@ -118,7 +118,7 @@
             fStrategies.remove(contentType);
         else {
             fStrategies.put(contentType, strategy);
-            if (strategy instanceof IReconcilingStrategyExtension && getProgressMonitor() !is null) {
+            if (cast(IReconcilingStrategyExtension )strategy && getProgressMonitor() !is null) {
                 IReconcilingStrategyExtension extension= cast(IReconcilingStrategyExtension) strategy;
                 extension.setProgressMonitor(getProgressMonitor());
             }
--- a/dwtx/jface/text/source/AnnotationModel.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationModel.d	Sun Aug 24 03:23:46 2008 +0200
@@ -887,7 +887,7 @@
                 Annotation a= cast(Annotation) e.next();
                 Position p= cast(Position) fAnnotations.get(a);
                 removePosition(fDocument, p);
-//              p.delete();
+//              p.delete_();
                 synchronized (getLockObject()) {
                     getAnnotationModelEvent().annotationRemoved(a, p);
                 }
@@ -922,7 +922,7 @@
             p= cast(Position) fAnnotations.get(annotation);
             if (fDocument !is null) {
                 removePosition(fDocument, p);
-//              p.delete();
+//              p.delete_();
             }
 
             fAnnotations.remove(annotation);
--- a/dwtx/jface/text/source/AnnotationPainter.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/source/AnnotationPainter.d	Sun Aug 24 03:23:46 2008 +0200
@@ -627,7 +627,7 @@
                 isWorldChange= true;
 
                 if (DEBUG && event is null)
-                    System.out.println("AP: INTERNAL CHANGE"); //$NON-NLS-1$
+                    System.out_.println("AP: INTERNAL CHANGE"); //$NON-NLS-1$
 
                 Iterator iter= decorationsMap.entrySet().iterator();
                 while (iter.hasNext()) {
@@ -1022,7 +1022,7 @@
 
         if ( cast(ITextViewerExtension2)fSourceViewer ) {
             if cast(DEBUG)
-                System.out.println("AP: invalidating offset: " + r.getOffset() + ", length= " + r.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
+                System.out_.println("AP: invalidating offset: " + r.getOffset() + ", length= " + r.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
 
             (cast(ITextViewerExtension2)fSourceViewer).invalidateTextPresentation(r.getOffset(), r.getLength());
 
@@ -1048,7 +1048,7 @@
         IRegion region= tp.getExtent();
 
         if cast(DEBUG)
-            System.out.println("AP: applying text presentation offset: " + region.getOffset() + ", length= " + region.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
+            System.out_.println("AP: applying text presentation offset: " + region.getOffset() + ", length= " + region.getLength()); //$NON-NLS-1$ //$NON-NLS-2$
 
         for (int layer= 0, maxLayer= 1; layer < maxLayer; layer++) {
 
@@ -1127,7 +1127,7 @@
             }
         } else {
             if (DEBUG && event !is null && event.isWorldChange()) {
-                System.out.println("AP: WORLD CHANGED, stack trace follows:"); //$NON-NLS-1$
+                System.out_.println("AP: WORLD CHANGED, stack trace follows:"); //$NON-NLS-1$
                 new Throwable().printStackTrace(System.out);
             }
 
--- a/dwtx/jface/text/templates/DocumentTemplateContext.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/templates/DocumentTemplateContext.d	Sun Aug 24 03:23:46 2008 +0200
@@ -199,7 +199,7 @@
     /*
      * @see dwtx.jface.text.templates.TemplateContext#evaluate(dwtx.jface.text.templates.Template)
      */
-    public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException {
+    public TemplateBuffer evaluate(Template template)  {
         if (!canEvaluate(template))
             return null;
 
--- a/dwtx/jface/text/templates/InclusivePositionUpdater.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/templates/InclusivePositionUpdater.d	Sun Aug 24 03:23:46 2008 +0200
@@ -107,7 +107,7 @@
                     position.setLength(length - deleted + eventNewLength);
                 } else {
                     // event consumes the position - delete it
-                    position.delete();
+                    position.delete_();
                 }
             }
         } catch (BadPositionCategoryException e) {
--- a/dwtx/jface/text/templates/TemplateContextType.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/jface/text/templates/TemplateContextType.d	Sun Aug 24 03:23:46 2008 +0200
@@ -247,7 +247,7 @@
      * @throws MalformedTreeException if the positions in the buffer overlap
      * @throws BadLocationException if the buffer cannot be successfully modified
      */
-    public void resolve(TemplateBuffer buffer, TemplateContext context) throws MalformedTreeException, BadLocationException {
+    public void resolve(TemplateBuffer buffer, TemplateContext context)  {
         Assert.isNotNull(context);
         TemplateVariable[] variables= buffer.getVariables();
 
--- a/dwtx/text/edits/EditDocument.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/text/edits/EditDocument.d	Sun Aug 24 03:23:46 2008 +0200
@@ -68,7 +68,7 @@
         throw new UnsupportedOperationException();
     }
 
-    public void addPosition(String category, Position position) throws BadLocationException, BadPositionCategoryException {
+    public void addPosition(String category, Position position)  {
         throw new UnsupportedOperationException();
     }
 
@@ -84,7 +84,7 @@
         throw new UnsupportedOperationException();
     }
 
-    public int computeIndexInCategory(String category, int offset) throws BadLocationException, BadPositionCategoryException {
+    public int computeIndexInCategory(String category, int offset)  {
         throw new UnsupportedOperationException();
     }
 
--- a/dwtx/text/edits/TextEdit.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/text/edits/TextEdit.d	Sun Aug 24 03:23:46 2008 +0200
@@ -730,7 +730,7 @@
      *
      * @see TextEditProcessor#performEdits()
      */
-    public final UndoEdit apply(IDocument document, int style) throws MalformedTreeException, BadLocationException {
+    public final UndoEdit apply(IDocument document, int style)  {
         try {
             TextEditProcessor processor= new TextEditProcessor(document, this, style);
             return processor.performEdits();
@@ -756,7 +756,7 @@
      *  undefined if this exception is thrown.
      * @see #apply(IDocument, int)
      */
-    public final UndoEdit apply(IDocument document) throws MalformedTreeException, BadLocationException {
+    public final UndoEdit apply(IDocument document)  {
         return apply(document, CREATE_UNDO | UPDATE_REGIONS);
     }
 
--- a/dwtx/text/edits/TextEditProcessor.d	Sun Aug 24 02:31:41 2008 +0200
+++ b/dwtx/text/edits/TextEditProcessor.d	Sun Aug 24 03:23:46 2008 +0200
@@ -172,7 +172,7 @@
      *  tree can't be executed. The state of the document is undefined if this
      *  exception is thrown.
      */
-    public UndoEdit performEdits() throws MalformedTreeException, BadLocationException {
+    public UndoEdit performEdits()  {
         if (!fChecked) {
             fRoot.dispatchCheckIntegrity(this);
         } else {