changeset 150:5cf141e43417

...
author Frank Benoit <benoit@tionex.de>
date Sun, 24 Aug 2008 23:05:26 +0200
parents b411f1c62131
children eb21d3dfc767
files dwtx/jface/internal/text/InformationControlReplacer.d dwtx/jface/internal/text/StickyHoverManager.d dwtx/jface/internal/text/html/BrowserInformationControl.d dwtx/jface/internal/text/html/HTML2TextReader.d dwtx/jface/internal/text/html/HTMLMessages.d dwtx/jface/internal/text/html/HTMLPrinter.d dwtx/jface/internal/text/link/contentassist/CompletionProposalPopup2.d dwtx/jface/internal/text/link/contentassist/ContentAssistMessages.d dwtx/jface/internal/text/revisions/Colors.d dwtx/jface/internal/text/revisions/RevisionPainter.d dwtx/jface/text/AbstractHoverInformationControlManager.d dwtx/jface/text/DocumentEvent.d dwtx/jface/text/SequentialRewriteTextStore.d dwtx/jface/text/link/LinkedModeModel.d dwtx/jface/text/link/LinkedModeUI.d dwtx/jface/text/rules/DefaultPartitioner.d dwtx/jface/text/rules/FastPartitioner.d dwtx/jface/text/rules/RuleBasedPartitioner.d dwtx/text/edits/MoveSourceEdit.d dwtx/text/edits/MoveTargetEdit.d dwtx/text/edits/MultiTextEdit.d dwtx/text/edits/TextEdit.d dwtx/text/edits/TextEditMessages.d dwtx/text/undo/UndoMessages.d
diffstat 24 files changed, 308 insertions(+), 330 deletions(-) [+]
line wrap: on
line diff
--- a/dwtx/jface/internal/text/InformationControlReplacer.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/InformationControlReplacer.d	Sun Aug 24 23:05:26 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:
@@ -44,7 +44,7 @@
  * @since 3.4
  */
 public class InformationControlReplacer : AbstractInformationControlManager {
-    
+
     /**
      * Minimal width in pixels.
      */
@@ -53,7 +53,7 @@
      * Minimal height in pixels.
      */
     private static const int MIN_HEIGHT= 50;
-    
+
     /**
      * Default control creator.
      */
@@ -68,11 +68,11 @@
     private bool fDelayedInformationSet;
     private Rectangle fReplaceableArea;
     private Rectangle fContentBounds;
-    
-    
+
+
     /**
      * Creates a new information control replacer.
-     * 
+     *
      * @param creator the default information control creator
      */
     public this(IInformationControlCreator creator) {
@@ -82,7 +82,7 @@
 
     /**
      * Replace the information control.
-     * 
+     *
      * @param informationPresenterControlCreator the information presenter control creator
      * @param contentBounds the bounds of the content area of the information control
      * @param information the information to show
@@ -90,7 +90,7 @@
      * @param takeFocus <code>true</code> iff the replacing information control should take focus
      */
     public void replaceInformationControl(IInformationControlCreator informationPresenterControlCreator, Rectangle contentBounds, Object information, final Rectangle subjectArea, bool takeFocus) {
-        
+
         try {
             fIsReplacing= true;
             if (! fDelayedInformationSet)
@@ -99,11 +99,11 @@
                 takeFocus= true; // delayed input has been set, so the original info control must have been focused
             fContentBounds= contentBounds;
             fReplaceableArea= subjectArea;
-            
+
             setCustomInformationControlCreator(informationPresenterControlCreator);
-            
+
             takesFocusWhenVisible(takeFocus);
-        
+
             showInformation();
         } finally {
             fIsReplacing= false;
@@ -113,7 +113,7 @@
             setCustomInformationControlCreator(null);
         }
     }
-    
+
     /*
      * @see dwtx.jface.text.AbstractInformationControlManager#computeInformation()
      */
@@ -122,8 +122,8 @@
             setInformation(fReplacableInformation, fReplaceableArea);
             return;
         }
-        
-        if cast(DEBUG)
+
+        if (DEBUG)
             System.out_.println("InformationControlReplacer: no active replaceable"); //$NON-NLS-1$
     }
 
@@ -136,40 +136,40 @@
      */
     public void showInformationControl(Rectangle subjectArea, Object information) {
         IInformationControl informationControl= getInformationControl();
-        
+
         Rectangle controlBounds= fContentBounds;
         if ( cast(IInformationControlExtension3)informationControl ) {
             IInformationControlExtension3 iControl3= cast(IInformationControlExtension3) informationControl;
             Rectangle trim= iControl3.computeTrim();
             controlBounds= Geometry.add(controlBounds, trim);
-            
+
             /*
              * Ensure minimal size. Interacting with a tiny information control
              * (resizing, selecting text) would be a pain.
              */
             controlBounds.width= Math.max(controlBounds.width, MIN_WIDTH);
             controlBounds.height= Math.max(controlBounds.height, MIN_HEIGHT);
-            
+
             getInternalAccessor().cropToClosestMonitor(controlBounds);
         }
-        
+
         Point location= Geometry.getLocation(controlBounds);
         Point size= Geometry.getSize(controlBounds);
-        
+
         // Caveat: some IInformationControls fail unless setSizeConstraints(..) is called with concrete values
         informationControl.setSizeConstraints(size.x, size.y);
-        
+
         if ( cast(IInformationControlExtension2)informationControl )
             (cast(IInformationControlExtension2) informationControl).setInput(information);
         else
             informationControl.setInformation(information.toString());
-        
+
         informationControl.setLocation(location);
         informationControl.setSize(size.x, size.y);
-        
+
         showInformationControl(subjectArea);
     }
-    
+
     /*
      * @see dwtx.jface.text.AbstractInformationControlManager#hideInformationControl()
      */
@@ -184,7 +184,7 @@
         fReplacableInformation= input;
         if (! isReplacing()) {
             fDelayedInformationSet= true;
-        } else if (getCurrentInformationControl2() instanceof IInformationControlExtension2) {
+        } else if (cast(IInformationControlExtension2)getCurrentInformationControl2() ) {
             (cast(IInformationControlExtension2) getCurrentInformationControl2()).setInput(input);
         } else if (getCurrentInformationControl2() !is null) {
             getCurrentInformationControl2().setInformation(input.toString());
@@ -193,23 +193,23 @@
 
     /**
      * Tells whether the replacer is currently replacing another information control.
-     * 
+     *
      * @return <code>true</code> while code from {@link #replaceInformationControl(IInformationControlCreator, Rectangle, Object, Rectangle, bool)} is run
      */
     public bool isReplacing() {
         return fIsReplacing;
     }
-    
+
     /**
      * @return the current information control, or <code>null</code> if none available
      */
     public IInformationControl getCurrentInformationControl2() {
         return getInternalAccessor().getCurrentInformationControl();
     }
-    
+
     /**
      * The number of pixels to blow up the keep-up zone.
-     * 
+     *
      * @return the margin in pixels
      */
     public int getKeepUpMargin() {
--- a/dwtx/jface/internal/text/StickyHoverManager.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/StickyHoverManager.d	Sun Aug 24 23:05:26 2008 +0200
@@ -84,7 +84,7 @@
     class Closer : IInformationControlCloser, ControlListener, MouseListener, IViewportListener, KeyListener, FocusListener, Listener {
         //TODO: Catch 'Esc' key in fInformationControlToClose: Don't dispose, just hideInformationControl().
         // This would allow to reuse the information control also when the user explicitly closes it.
-        
+
         //TODO: if subject control is a Scrollable, should add selection listeners to both scroll bars
         // (and remove the ViewPortListener, which only listens to vertical scrolling)
 
@@ -125,7 +125,7 @@
             }
 
             fTextViewer.addViewportListener(this);
-            
+
             IInformationControl fInformationControlToClose= getCurrentInformationControl2();
             if (fInformationControlToClose !is null)
                 fInformationControlToClose.addFocusListener(this);
@@ -153,11 +153,11 @@
                 fSubjectControl.removeMouseListener(this);
                 fSubjectControl.removeKeyListener(this);
             }
-            
+
             IInformationControl fInformationControlToClose= getCurrentInformationControl2();
             if (fInformationControlToClose !is null)
                 fInformationControlToClose.removeFocusListener(this);
-            
+
             if (fDisplay !is null && !fDisplay.isDisposed()) {
                 fDisplay.removeFilter(DWT.MouseMove, this);
                 fDisplay.removeFilter(DWT.FocusOut, this);
@@ -219,18 +219,18 @@
          */
         public void keyReleased(KeyEvent e) {
         }
-        
+
         /*
          * @see dwt.events.FocusListener#focusGained(dwt.events.FocusEvent)
          */
         public void focusGained(FocusEvent e) {
         }
-        
+
         /*
          * @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 (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.
@@ -239,7 +239,7 @@
                 }
             });
         }
-        
+
         /*
          * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event)
          */
@@ -247,10 +247,10 @@
             if (event.type is DWT.MouseMove) {
                 if (!( cast(Control)event.widget ) || event.widget.isDisposed())
                     return;
-                
+
                 IInformationControl infoControl= getCurrentInformationControl2();
                 if (infoControl !is null && !infoControl.isFocusControl() && cast(IInformationControlExtension3)infoControl ) {
-//                  if cast(DEBUG) System.out_.println("StickyHoverManager.Closer.handleEvent(): activeShell= " + fDisplay.getActiveShell()); //$NON-NLS-1$
+//                  if (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) {
@@ -261,7 +261,7 @@
                             hideInformationControl();
                         }
                     }
-                    
+
                 } else {
                     /*
                      * TODO: need better understanding of why/if this is needed.
@@ -270,9 +270,9 @@
                     if (fDisplay !is null && !fDisplay.isDisposed())
                         fDisplay.removeFilter(DWT.MouseMove, this);
                 }
-                
+
             } else if (event.type is DWT.FocusOut) {
-                if cast(DEBUG) System.out_.println("StickyHoverManager.Closer.handleEvent(): focusOut: " + event); //$NON-NLS-1$
+                if (DEBUG) System.out_.println("StickyHoverManager.Closer.handleEvent(): focusOut: " + event); //$NON-NLS-1$
                 IInformationControl iControl= getCurrentInformationControl2();
                 if (iControl !is null && ! iControl.isFocusControl())
                     hideInformationControl();
@@ -280,21 +280,21 @@
         }
     }
 
-    
+
     private const TextViewer fTextViewer;
 
-    
+
     /**
      * Creates a new sticky hover manager.
-     * 
+     *
      * @param textViewer the text viewer
      */
     public this(TextViewer textViewer) {
         super(new DefaultInformationControlCreator());
-        
+
         fTextViewer= textViewer;
         setCloser(new Closer());
-        
+
         install(fTextViewer.getTextWidget());
     }
 
@@ -305,7 +305,7 @@
         if (fTextViewer !is null && fTextViewer.requestWidgetToken(this, WIDGET_PRIORITY))
             super.showInformationControl(subjectArea);
         else
-            if cast(DEBUG)
+            if (DEBUG)
                 System.out_.println("cancelled StickyHoverManager.showInformationControl(..): did not get widget token (with prio)"); //$NON-NLS-1$
     }
 
@@ -338,7 +338,7 @@
      */
     public bool requestWidgetToken(IWidgetTokenOwner owner) {
         hideInformationControl();
-        if cast(DEBUG)
+        if (DEBUG)
             System.out_.println("StickyHoverManager gave up widget token (no prio)"); //$NON-NLS-1$
         return true;
     }
@@ -349,21 +349,21 @@
     public bool requestWidgetToken(IWidgetTokenOwner owner, int priority) {
         if (getCurrentInformationControl2() !is null) {
             if (getCurrentInformationControl2().isFocusControl()) {
-                if cast(DEBUG)
+                if (DEBUG)
                     System.out_.println("StickyHoverManager kept widget token (focused)"); //$NON-NLS-1$
                 return false;
             } else if (priority > WIDGET_PRIORITY) {
                 hideInformationControl();
-                if cast(DEBUG)
+                if (DEBUG)
                     System.out_.println("StickyHoverManager gave up widget token (prio)"); //$NON-NLS-1$
                 return true;
             } else {
-                if cast(DEBUG)
+                if (DEBUG)
                     System.out_.println("StickyHoverManager kept widget token (prio)"); //$NON-NLS-1$
                 return false;
             }
         }
-        if cast(DEBUG)
+        if (DEBUG)
             System.out_.println("StickyHoverManager gave up widget token (no iControl)"); //$NON-NLS-1$
         return true;
     }
@@ -384,5 +384,5 @@
         iControl.setFocus();
         return iControl.isFocusControl();
     }
-    
+
 }
--- a/dwtx/jface/internal/text/html/BrowserInformationControl.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/html/BrowserInformationControl.d	Sun Aug 24 23:05:26 2008 +0200
@@ -78,7 +78,7 @@
  *  <li>focusLost event is not sent - see https://bugs.eclipse.org/bugs/show_bug.cgi?id=84532</li>
  * </ul>
  * </p>
- * 
+ *
  * @since 3.2
  */
 public class BrowserInformationControl : AbstractInformationControl , IInformationControlExtension2, IDelayedInputChangeProvider {
@@ -97,7 +97,7 @@
                 Browser browser= new Browser(parent, DWT.NONE);
                 browser.dispose();
                 fgIsAvailable= true;
-                
+
                 Slider sliderV= new Slider(parent, DWT.VERTICAL);
                 Slider sliderH= new Slider(parent, DWT.HORIZONTAL);
                 int width= sliderV.computeSize(DWT.DEFAULT, DWT.DEFAULT).x;
@@ -123,7 +123,7 @@
     private static const int MIN_WIDTH= 80;
     private static const int MIN_HEIGHT= 50;
 
-    
+
     /**
      * Availability checking cache.
      */
@@ -135,7 +135,7 @@
      * @since 3.4
      */
     private static Point fgScrollBarSize;
-    
+
     /** The control's browser widget */
     private Browser fBrowser;
     /** Tells whether the browser has content */
@@ -175,7 +175,7 @@
 
     /**
      * Creates a browser information control with the given shell as parent.
-     * 
+     *
      * @param parent the parent shell
      * @param symbolicFontName the symbolic name of the font used for size computations
      * @param resizable <code>true</code> if the control should be resizable
@@ -186,10 +186,10 @@
         fSymbolicFontName= symbolicFontName;
         create();
     }
-    
+
     /**
      * Creates a browser information control with the given shell as parent.
-     * 
+     *
      * @param parent the parent shell
      * @param symbolicFontName the symbolic name of the font used for size computations
      * @param statusFieldText the text to be used in the optional status field
@@ -201,10 +201,10 @@
         fSymbolicFontName= symbolicFontName;
         create();
     }
-    
+
     /**
      * Creates a browser information control with the given shell as parent.
-     * 
+     *
      * @param parent the parent shell
      * @param symbolicFontName the symbolic name of the font used for size computations
      * @param toolBarManager the manager or <code>null</code> if toolbar is not desired
@@ -215,13 +215,13 @@
         fSymbolicFontName= symbolicFontName;
         create();
     }
-    
+
     /*
      * @see dwtx.jface.text.AbstractInformationControl#createContent(dwt.widgets.Composite)
      */
     protected void createContent(Composite parent) {
         fBrowser= new Browser(parent, DWT.NONE);
-        
+
         Display display= getShell().getDisplay();
         fBrowser.setForeground(display.getSystemColor(DWT.COLOR_INFO_FOREGROUND));
         fBrowser.setBackground(display.getSystemColor(DWT.COLOR_INFO_BACKGROUND));
@@ -240,10 +240,10 @@
                 fCompleted= true;
             }
         });
-        
+
         // Replace browser's built-in context menu with none
         fBrowser.setMenu(new Menu(getShell(), DWT.NONE));
-        
+
         createTextLayout();
     }
 
@@ -266,13 +266,13 @@
             }
         });
     }
-    
+
     /**
      * {@inheritDoc} This control can handle {@link String} and
      * {@link BrowserInformationControlInput}.
      */
     public void setInput(Object input) {
-        Assert.isLegal(input is null || cast(String)input  || input instanceof BrowserInformationControlInput);
+        Assert.isLegal(input is null || cast(String)input  || cast(BrowserInformationControlInput)input );
 
         if ( cast(String)input ) {
             setInformation(cast(String)input);
@@ -280,11 +280,11 @@
         }
 
         fInput= cast(BrowserInformationControlInput)input;
-        
+
         String content= null;
         if (fInput !is null)
             content= fInput.getHtml();
-        
+
         fBrowserHasContent= content !is null && content.length() > 0;
 
         if (!fBrowserHasContent)
@@ -297,29 +297,29 @@
         // and the re-wrapping would cause visual noise
         String[] styles= null;
         if (RTL && resizable)
-            styles= new String[] { "direction:rtl;", "overflow:scroll;", "word-wrap:break-word;" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+            styles= [ "direction:rtl;", "overflow:scroll;", "word-wrap:break-word;" ]; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         else if (RTL && !resizable)
-            styles= new String[] { "direction:rtl;", "overflow:hidden;", "word-wrap:break-word;" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+            styles= [ "direction:rtl;", "overflow:hidden;", "word-wrap:break-word;" ]; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         else if (!resizable)
             //XXX: In IE, "word-wrap: break-word;" causes bogus wrapping even in non-broken words :-(see e.g. Javadoc of String).
             // Re-check whether we really still need this now that the Javadoc Hover header already sets this style.
-            styles= new String[] { "overflow:hidden;"/*, "word-wrap: break-word;"*/ }; //$NON-NLS-1$
+            styles= [ "overflow:hidden;"/*, "word-wrap: break-word;"*/ ]; //$NON-NLS-1$
         else
-            styles= new String[] { "overflow:scroll;" }; //$NON-NLS-1$
-        
+            styles= [ "overflow:scroll;" ]; //$NON-NLS-1$
+
         StringBuffer buffer= new StringBuffer(content);
         HTMLPrinter.insertStyles(buffer, styles);
         content= buffer.toString();
-        
+
         /*
          * XXX: Should add some JavaScript here that shows something like
          * "(continued...)" or "..." at the end of the visible area when the page overflowed
          * with "overflow:hidden;".
          */
-        
+
         fCompleted= false;
         fBrowser.setText(content);
-        
+
         Object[] listeners= fInputChangeListeners.getListeners();
         for (int i= 0; i < listeners.length; i++)
             (cast(IInputChangedListener)listeners[i]).inputChanged(fInput);
@@ -332,45 +332,45 @@
         Shell shell= getShell();
         if (shell.isVisible() is visible)
             return;
-        
+
         if (!visible) {
             super.setVisible(false);
             setInput(null);
             return;
         }
-        
+
         /*
          * The Browser widget flickers when made visible while it is not completely loaded.
          * The fix is to delay the call to setVisible until either loading is completed
          * (see ProgressListener in constructor), or a timeout has been reached.
          */
         final Display display= shell.getDisplay();
-        
+
         // Make sure the display wakes from sleep after timeout:
         display.timerExec(100, new class()  Runnable {
             public void run() {
                 fCompleted= true;
             }
         });
-        
+
         while (!fCompleted) {
             // Drive the event loop to process the events required to load the browser widget's contents:
             if (!display.readAndDispatch()) {
                 display.sleep();
             }
         }
-        
+
         shell= getShell();
         if (shell is null || shell.isDisposed())
             return;
-        
+
         /*
          * Avoids flickering when replacing hovers, especially on Vista in ON_CLICK mode.
          * Causes flickering on GTK. Carbon does not care.
          */
         if ("win32".equals(DWT.getPlatform())) //$NON-NLS-1$
             shell.moveAbove(null);
-        
+
         super.setVisible(true);
     }
 
@@ -389,12 +389,12 @@
     /**
      * Creates and initializes the text layout used
      * to compute the size hint.
-     * 
+     *
      * @since 3.2
      */
     private void createTextLayout() {
         fTextLayout= new TextLayout(fBrowser.getDisplay());
-        
+
         // Initialize fonts
         Font font= fSymbolicFontName is null ? JFaceResources.getDialogFont() : JFaceResources.getFont(fSymbolicFontName);
         fTextLayout.setFont(font);
@@ -404,11 +404,11 @@
             fontData[i].setStyle(DWT.BOLD);
         font= new Font(getShell().getDisplay(), fontData);
         fBoldStyle= new TextStyle(font, null, null);
-        
+
         // Compute and set tab width
         fTextLayout.setText("    "); //$NON-NLS-1$
         int tabWidth = fTextLayout.getBounds().width;
-        fTextLayout.setTabs(new int[] {tabWidth});
+        fTextLayout.setTabs([tabWidth]);
 
         fTextLayout.setText(""); //$NON-NLS-1$
     }
@@ -426,7 +426,7 @@
             fBoldStyle= null;
         }
         fBrowser= null;
-        
+
         super.dispose();
     }
 
@@ -437,7 +437,7 @@
         Point sizeConstraints= getSizeConstraints();
         Rectangle trim= computeTrim();
         int height= trim.height;
-        
+
         //FIXME: The HTML2TextReader does not render <p> like a browser.
         // Instead of inserting an empty line, it just adds a single line break.
         // Furthermore, the indentation of <dl><dd> elements is too small (e.g with a long @see line)
@@ -458,7 +458,7 @@
             if (sr.fontStyle is DWT.BOLD)
                 fTextLayout.setStyle(fBoldStyle, sr.start, sr.start + sr.length - 1);
         }
-        
+
         Rectangle bounds= fTextLayout.getBounds(); // does not return minimum width, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=217446
         int lineCount= fTextLayout.getLineCount();
         int textWidth= 0;
@@ -471,15 +471,15 @@
         }
         bounds.width= textWidth;
         fTextLayout.setText(""); //$NON-NLS-1$
-        
+
         int minWidth= bounds.width;
         height= height + bounds.height;
-        
+
         // Add some air to accommodate for different browser renderings
         minWidth+= 15;
         height+= 15;
 
-        
+
         // Apply max size constraints
         if (sizeConstraints !is null) {
             if (sizeConstraints.x !is DWT.DEFAULT)
@@ -491,7 +491,7 @@
         // Ensure minimal size
         int width= Math.max(MIN_WIDTH, minWidth);
         height= Math.max(MIN_HEIGHT, height);
-        
+
         return new Point(width, height);
     }
 
@@ -502,7 +502,7 @@
         Rectangle trim= super.computeTrim();
         if (isResizable()) {
             bool RTL= (getShell().getStyle() & DWT.RIGHT_TO_LEFT) !is 0;
-            if cast(RTL) {
+            if (RTL) {
                 trim.x-= fgScrollBarSize.x;
             }
             trim.width+= fgScrollBarSize.x;
@@ -510,11 +510,11 @@
         }
         return trim;
     }
-    
+
     /**
      * Adds the listener to the collection of listeners who will be
      * notified when the current location has changed or is about to change.
-     * 
+     *
      * @param listener the location listener
      * @since 3.4
      */
@@ -544,11 +544,11 @@
     public bool hasContents() {
         return fBrowserHasContent;
     }
-    
+
     /**
      * Adds a listener for input changes to this input change provider.
      * Has no effect if an identical listener is already registered.
-     * 
+     *
      * @param inputChangeListener the listener to add
      * @since 3.4
      */
@@ -556,18 +556,18 @@
         Assert.isNotNull(inputChangeListener);
         fInputChangeListeners.add(inputChangeListener);
     }
-    
+
     /**
      * Removes the given input change listener from this input change provider.
      * Has no effect if an identical listener is not registered.
-     * 
+     *
      * @param inputChangeListener the listener to remove
      * @since 3.4
      */
     public void removeInputChangeListener(IInputChangedListener inputChangeListener) {
         fInputChangeListeners.remove(inputChangeListener);
     }
-    
+
     /*
      * @see dwtx.jface.text.IDelayedInputChangeProvider#setDelayedInputChangeListener(dwtx.jface.text.IInputChangedListener)
      * @since 3.4
@@ -575,10 +575,10 @@
     public void setDelayedInputChangeListener(IInputChangedListener inputChangeListener) {
         fDelayedInputChangeListener= inputChangeListener;
     }
-    
+
     /**
      * Tells whether a delayed input change listener is registered.
-     * 
+     *
      * @return <code>true</code> iff a delayed input change
      *         listener is currently registered
      * @since 3.4
@@ -586,10 +586,10 @@
     public bool hasDelayedInputChangeListener() {
         return fDelayedInputChangeListener !is null;
     }
-    
+
     /**
      * Notifies listeners of a delayed input change.
-     * 
+     *
      * @param newInput the new input, or <code>null</code> to request cancellation
      * @since 3.4
      */
@@ -597,7 +597,7 @@
         if (fDelayedInputChangeListener !is null)
             fDelayedInputChangeListener.inputChanged(newInput);
     }
-    
+
     /*
      * @see java.lang.Object#toString()
      * @since 3.4
@@ -613,21 +613,21 @@
     public BrowserInformationControlInput getInput() {
         return fInput;
     }
-    
+
     /*
      * @see dwtx.jface.text.IInformationControlExtension5#computeSizeConstraints(int, int)
      */
     public Point computeSizeConstraints(int widthInChars, int heightInChars) {
         if (fSymbolicFontName is null)
             return null;
-        
+
         GC gc= new GC(fBrowser);
         Font font= fSymbolicFontName is null ? JFaceResources.getDialogFont() : JFaceResources.getFont(fSymbolicFontName);
         gc.setFont(font);
         int width= gc.getFontMetrics().getAverageCharWidth();
         int height= gc.getFontMetrics().getHeight();
         gc.dispose();
-        
+
         return new Point(widthInChars * width, heightInChars * height);
     }
 
--- a/dwtx/jface/internal/text/html/HTML2TextReader.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTML2TextReader.d	Sun Aug 24 23:05:26 2008 +0200
@@ -49,7 +49,7 @@
     private static const Map fgEntityLookup;
     private static const Set fgTags;
 
-    static {
+    static this() {
 
         fgTags= new HashSet();
         fgTags.add("b"); //$NON-NLS-1$
@@ -157,7 +157,7 @@
             return EMPTY_STRING;
 
         html= html.toLowerCase();
-        
+
         String tag= html;
         if ('/' is tag.charAt(0))
             tag= tag.substring(1);
@@ -225,13 +225,13 @@
 
         if ("/dd".equals(html)) //$NON-NLS-1$
             return LINE_DELIM;
-        
+
         if ("head".equals(html) && !fHeaderDetected) { //$NON-NLS-1$
             fHeaderDetected= true;
             fIgnore= true;
             return EMPTY_STRING;
         }
-        
+
         if ("/head".equals(html) && fHeaderDetected && fIgnore) { //$NON-NLS-1$
             fIgnore= false;
             return EMPTY_STRING;
@@ -280,11 +280,11 @@
 
         return html2Text(buf.toString());
     }
-    
+
     private static bool isInComment(StringBuffer buf) {
         return buf.length() >= 3 && "!--".equals(buf.substring(0, 3)); //$NON-NLS-1$
     }
-    
+
     private static bool isCommentEnd(StringBuffer buf) {
         int tagLen= buf.length();
         return tagLen >= 5 && "--".equals(buf.substring(tagLen - 2)); //$NON-NLS-1$
--- a/dwtx/jface/internal/text/html/HTMLMessages.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTMLMessages.d	Sun Aug 24 23:05:26 2008 +0200
@@ -37,9 +37,14 @@
  */
 class HTMLMessages {
 
-    private static const String RESOURCE_BUNDLE= HTMLMessages.class.getName();
+//     private static const String RESOURCE_BUNDLE= HTMLMessages.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.internal.text.html.HTMLMessages.properties"));
+    }
 
     private this() {
     }
@@ -54,7 +59,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$
         }
     }
 
@@ -65,32 +70,14 @@
      * @param args the arguments used to format the string
      * @return the formatted string
      */
-    public static String getFormattedString(String key, Object[] args) {
+    public static String getFormattedString(String key, Object[] args...) {
         String format= null;
         try {
             format= fgResourceBundle.getString(key);
         } catch (MissingResourceException e) {
-            return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
+            return "!" ~ key ~ "!";//$NON-NLS-2$ //$NON-NLS-1$
         }
         return MessageFormat.format(format, args);
     }
 
-    /**
-     * Gets a string from the resource bundle and formats it with the given argument.
-     *
-     * @param key the string used to get the bundle value, must not be null
-     * @param arg the argument used to format the string
-     * @return the formatted string
-     */
-    public static String getFormattedString(String key, Object arg) {
-        String format= null;
-        try {
-            format= fgResourceBundle.getString(key);
-        } catch (MissingResourceException e) {
-            return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
-        }
-        if (arg is null)
-            arg= ""; //$NON-NLS-1$
-        return MessageFormat.format(format, new Object[] { arg });
-    }
 }
--- a/dwtx/jface/internal/text/html/HTMLPrinter.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/html/HTMLPrinter.d	Sun Aug 24 23:05:26 2008 +0200
@@ -46,7 +46,8 @@
     private static RGB FG_COLOR_RGB= new RGB(0, 0, 0); // RGB value of info fg color on WindowsXP
 
 
-    static {
+    static this() {
+        implMissing( __FILE__, __LINE__ ); // lazy init needed for Display
         final Display display= Display.getDefault();
         if (display !is null && !display.isDisposed()) {
             try {
@@ -185,12 +186,12 @@
     private static void appendStyleSheetURL(StringBuffer buffer, String styleSheet) {
         if (styleSheet is null)
             return;
-        
+
         buffer.append("<head><style CHARSET=\"ISO-8859-1\" TYPE=\"text/css\">"); //$NON-NLS-1$
         buffer.append(styleSheet);
         buffer.append("</style></head>"); //$NON-NLS-1$
     }
-    
+
     private static void appendStyleSheetURL(StringBuffer buffer, URL styleSheetURL) {
         if (styleSheetURL is null)
             return;
@@ -218,7 +219,7 @@
         appendColors(pageProlog, FG_COLOR_RGB, BG_COLOR_RGB);
         buffer.insert(position,  pageProlog.toString());
     }
-    
+
     public static void insertPageProlog(StringBuffer buffer, int position, String styleSheet) {
         insertPageProlog(buffer, position, null, null, styleSheet);
     }
@@ -266,7 +267,7 @@
         if (paragraphReader !is null)
             addParagraph(buffer, read(paragraphReader));
     }
-    
+
     /**
      * Replaces the following style attributes of the font definition of the <code>html</code>
      * element:
@@ -281,7 +282,7 @@
      * <p>
      * If the listed font attributes are not contained in the passed style list, nothing happens.
      * </p>
-     * 
+     *
      * @param styles CSS style definitions
      * @param fontData the font information to use
      * @return the modified style definitions
@@ -290,10 +291,10 @@
     public static String convertTopLevelFont(String styles, FontData fontData) {
         bool bold= (fontData.getStyle() & DWT.BOLD) !is 0;
         bool italic= (fontData.getStyle() & DWT.ITALIC) !is 0;
-        
+
         // See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=155993
         String size= Integer.toString(fontData.getHeight()) + ("carbon".equals(DWT.getPlatform()) ? "px" : "pt"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-        
+
         String family= "'" + fontData.getName() + "',sans-serif"; //$NON-NLS-1$ //$NON-NLS-2$
         styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-size:\\s*)\\d+pt(\\;?.*\\})", "$1" + size + "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         styles= styles.replaceFirst("(html\\s*\\{.*(?:\\s|;)font-weight:\\s*)\\w+(\\;?.*\\})", "$1" + (bold ? "bold" : "normal") + "$2"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
--- a/dwtx/jface/internal/text/link/contentassist/CompletionProposalPopup2.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/CompletionProposalPopup2.d	Sun Aug 24 23:05:26 2008 +0200
@@ -120,11 +120,11 @@
     /**
      * Tells whether colored labels support is enabled.
      * Only valid while the popup is active.
-     * 
+     *
      * @since 3.4
      */
     private bool fIsColoredLabelsSupportEnabled= false;
-    
+
     private final IEditingSupport fFocusEditingSupport= new class()  IEditingSupport {
 
         public bool isOriginator(DocumentEvent event, IRegion focus) {
@@ -278,7 +278,7 @@
 //      fProposalShell= new Shell(control.getShell(), DWT.ON_TOP | DWT.RESIZE );
         fProposalTable= new Table(fProposalShell, DWT.H_SCROLL | DWT.V_SCROLL);
 //      fProposalTable= new Table(fProposalShell, DWT.H_SCROLL | DWT.V_SCROLL);
-        
+
 
         fIsColoredLabelsSupportEnabled= fContentAssistant.isColoredLabelsSupportEnabled();
         if (fIsColoredLabelsSupportEnabled)
@@ -556,7 +556,7 @@
                 item= new TableItem(fProposalTable, DWT.NULL);
                 if (p.getImage() !is null)
                     item.setImage(p.getImage());
-                
+
                 String displayString;
                 StyleRange[] styleRanges= null;
                 if (fIsColoredLabelsSupportEnabled && cast(ICompletionProposalExtension6)p ) {
@@ -569,7 +569,7 @@
                 item.setText(displayString);
                 if (fIsColoredLabelsSupportEnabled)
                     TableOwnerDrawSupport.storeStyleRanges(item, 0, styleRanges);
-                
+
                 item.setData(p);
 
                 if (validate && validateProposal(document, p, endOffset, null)) {
@@ -924,13 +924,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))
--- a/dwtx/jface/internal/text/link/contentassist/ContentAssistMessages.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/link/contentassist/ContentAssistMessages.d	Sun Aug 24 23:05:26 2008 +0200
@@ -10,6 +10,7 @@
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
+module dwtx.jface.internal.text.link.contentassist.ContentAssistMessages;
 
 
 import dwtx.jface.internal.text.link.contentassist.IProposalListener; // packageimport
@@ -22,8 +23,6 @@
 import dwtx.jface.internal.text.link.contentassist.ContentAssistant2; // packageimport
 import dwtx.jface.internal.text.link.contentassist.AdditionalInfoController2; // packageimport
 
-module dwtx.jface.internal.text.link.contentassist.ContentAssistMessages;
-
 import dwt.dwthelper.utils;
 
 import java.util.MissingResourceException;
@@ -39,9 +38,14 @@
  */
 class ContentAssistMessages {
 
-    private static const String RESOURCE_BUNDLE= ContentAssistMessages.class.getName();
+//     private static const String RESOURCE_BUNDLE= ContentAssistMessages.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.internal.text.link.contentassist.ContentAssistMessages.properties"));
+    }
 
     private this() {
     }
@@ -56,7 +60,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$
         }
     }
 
@@ -67,32 +71,15 @@
      * @param args the arguments used to format the string
      * @return the formatted string
      */
-    public static String getFormattedString(String key, Object[] args) {
+    public static String getFormattedString(String key, Object[] args... ) {
         String format= null;
         try {
             format= fgResourceBundle.getString(key);
         } catch (MissingResourceException e) {
-            return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
+            return "!" ~ key ~ "!";//$NON-NLS-2$ //$NON-NLS-1$
         }
         return MessageFormat.format(format, args);
     }
 
-    /**
-     * Gets a string from the resource bundle and formats it with the given argument.
-     *
-     * @param key the string used to get the bundle value, must not be null
-     * @param arg the argument used to format the string
-     * @return the formatted string
-     */
-    public static String getFormattedString(String key, Object arg) {
-        String format= null;
-        try {
-            format= fgResourceBundle.getString(key);
-        } catch (MissingResourceException e) {
-            return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
-        }
-        if (arg is null)
-            arg= ""; //$NON-NLS-1$
-        return MessageFormat.format(format, new Object[] { arg });
-    }
+
 }
--- a/dwtx/jface/internal/text/revisions/Colors.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/Colors.d	Sun Aug 24 23:05:26 2008 +0200
@@ -30,7 +30,7 @@
 
 /**
  * Utility for color operations.
- * 
+ *
  * @since 3.3
  */
 public final class Colors {
@@ -43,7 +43,7 @@
     /**
      * Returns the human-perceived brightness of a color as float in [0.0, 1.0]. The used RGB
      * weights come from http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9.
-     * 
+     *
      * @param rgb the color
      * @return the gray-scale value
      */
@@ -56,7 +56,7 @@
      * are lightened. Depending on the hue, the brightness range within the RGB gamut may be
      * different, outside values are clipped. Note that this is an approximation; the returned RGB
      * is not guaranteed to have the requested {@link #brightness(RGB) brightness}.
-     * 
+     *
      * @param color the color to normalize
      * @param brightness the requested brightness, in [0,&nbsp;1]
      * @return a normalized version of <code>color</code>
@@ -74,7 +74,7 @@
     /**
      * Converts an {@link RGB} to an <a href="http://en.wikipedia.org/wiki/HSL_color_space">HSI</a>
      * triplet.
-     * 
+     *
      * @param color the color to convert
      * @return the HSI float array of length 3
      */
@@ -95,7 +95,7 @@
                 hue = (g  - b) / delta;
             } else {
                 if (g is max) {
-                    hue = 2 + (b - r) / delta;  
+                    hue = 2 + (b - r) / delta;
                 } else {
                     hue = 4 + (r - g) / delta;
                 }
@@ -103,12 +103,12 @@
             hue *= 60;
             if (hue < 0) hue += 360;
         }
-        return new float[] {hue, saturation, intensity};
+        return [hue, saturation, intensity];
     }
 
     /**
      * Converts a <a href="http://en.wikipedia.org/wiki/HSL_color_space">HSI</a> triplet to an RGB.
-     * 
+     *
      * @param hsi the HSI values
      * @return the RGB corresponding to the HSI spec
      */
@@ -118,7 +118,7 @@
         float saturation= hsi[1];
         float intensity= hsi[2];
         if (saturation is 0) {
-            r = g = b = intensity; 
+            r = g = b = intensity;
         } else {
             float temp2= intensity < 0.5f ? intensity * (1.0f + saturation) : (intensity + saturation) - (intensity * saturation);
             float temp1= 2f * intensity - temp2;
@@ -132,7 +132,7 @@
 
         int red = cast(int)(r * 255 + 0.5);
         int green = cast(int)(g * 255 + 0.5);
-        int blue = cast(int)(b * 255 + 0.5);    
+        int blue = cast(int)(b * 255 + 0.5);
         return new RGB(red, green, blue);
     }
 
@@ -158,7 +158,7 @@
      * @param bg the background color
      * @param fg the foreground color
      * @param factor the mixing factor, must be in [0,&nbsp;1]
-     * 
+     *
      * @return the interpolated color
      */
     public static RGB blend(RGB bg, RGB fg, float factor) {
@@ -179,7 +179,7 @@
      * <p>
      * The returned array has size <code>steps</code>, and the color at index 0 is <code>start</code>, the color
      * at index <code>steps&nbsp;-&nbsp;1</code> is <code>end</code>.
-     * 
+     *
      * @param start the start color of the palette
      * @param end the end color of the palette
      * @param steps the requested size, must be &gt; 0
@@ -189,14 +189,14 @@
         Assert.isLegal(start !is null);
         Assert.isLegal(end !is null);
         Assert.isLegal(steps > 0);
-        
+
         if (steps is 1)
-            return new RGB[] { start };
+            return [ start ];
 
         float step= 1.0f / (steps - 1);
         RGB[] gradient= new RGB[steps];
         for (int i= 0; i < steps; i++)
-            gradient[i]= blend(start, end, step * i); 
+            gradient[i]= blend(start, end, step * i);
 
         return gradient;
     }
@@ -217,7 +217,7 @@
      * {@link DWT#COLOR_YELLOW yellow}, {@link DWT#COLOR_CYAN cyan},
      * {@link DWT#COLOR_MAGENTA magenta}.
      * </p>
-     * 
+     *
      * @param steps the requested size, must be &gt;= 2
      * @return an array of <code>steps</code> colors evenly distributed on the color wheel
      */
@@ -241,7 +241,7 @@
      * {@link DWT#COLOR_YELLOW yellow}, {@link DWT#COLOR_CYAN cyan},
      * {@link DWT#COLOR_MAGENTA magenta}.
      * </p>
-     * 
+     *
      * @param index the index of the color, must be &gt;= 0
      * @return a color hue in [0&#176;,&nbsp;360&#176;)
      * @see RGB#RGB(float, float, float)
@@ -252,7 +252,7 @@
          * Base 3 gives a nice partitioning for RGB colors with red, green, blue being the colors
          * 0,1,2, and yellow, cyan, magenta colors 3,4,5.
          */
-        final int base= 3; 
+        final int base= 3;
         final float range= 360f;
 
         // partition the baseRange by using the least significant bit to select one half of the
--- a/dwtx/jface/internal/text/revisions/RevisionPainter.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/internal/text/revisions/RevisionPainter.d	Sun Aug 24 23:05:26 2008 +0200
@@ -98,7 +98,7 @@
 /**
  * A strategy for painting the live annotate colors onto the vertical ruler column. It also manages
  * the revision hover.
- * 
+ *
  * @since 3.2
  */
 public final class RevisionPainter {
@@ -109,7 +109,7 @@
     private static const RGB BY_DATE_START_COLOR= new RGB(199, 134, 57);
     private static const RGB BY_DATE_END_COLOR= new RGB(241, 225, 206);
 
-    
+
     /**
      * The annotations created to show a revision in the overview ruler.
      */
@@ -160,14 +160,14 @@
 
         /**
          * Sets the revision information, which is needed to compute the relative age of a revision.
-         * 
+         *
          * @param info the new revision info, <code>null</code> for none.
          */
         public void setInfo(RevisionInformation info) {
             fRevisions= null;
             fColors.clear();
             fFocusColors.clear();
-            
+
             if (info is null)
                 return;
             List revisions= new ArrayList();
@@ -220,7 +220,7 @@
             int index= fRevisions.indexOf(new Long(age));
             return index;
         }
-        
+
         private RGB getShadedColor(RGB color, float scale, bool focus) {
             Assert.isLegal(scale >= 0.0);
             Assert.isLegal(scale <= 1.0);
@@ -252,7 +252,7 @@
 
         /**
          * Returns the color for a revision based on relative age and author.
-         * 
+         *
          * @param revision the revision
          * @param focus <code>true</code> to return the focus color
          * @return the color for a revision
@@ -262,7 +262,7 @@
             RGB color= cast(RGB) map.get(revision);
             if (color !is null)
                 return color;
-            
+
             color= adaptColor(revision, focus);
             map.put(revision, color);
             return color;
@@ -275,7 +275,7 @@
     private class MouseHandler : MouseMoveListener, MouseTrackListener, Listener {
 
         private RevisionRange fMouseDownRegion;
-        
+
         private void handleMouseUp(Event e) {
             if (e.button is 1) {
                 RevisionRange upRegion= fFocusRange;
@@ -366,7 +366,7 @@
      */
     private static final class HoverInformationControlCreator : AbstractReusableInformationControlCreator {
         private bool fIsFocusable;
-        
+
         public this(bool isFocusable) {
             fIsFocusable= isFocusable;
         }
@@ -385,11 +385,11 @@
                         content= addCSSToHTMLFragment(content);
                         super.setInformation(content);
                     }
-                    
+
                     /**
                      * Adds a HTML header and CSS info if <code>html</code> is only an HTML fragment (has no
                      * &lt;html&gt; section).
-                     * 
+                     *
                      * @param html the html / text produced by a revision
                      * @return modified html
                      */
@@ -398,14 +398,14 @@
                         if (html.substring(0, max).indexOf("<html>") !is -1) //$NON-NLS-1$
                             // there is already a header
                             return html;
-                        
+
                         StringBuffer info= new StringBuffer(512 + html.length());
                         HTMLPrinter.insertPageProlog(info, 0, fgStyleSheet);
                         info.append(html);
                         HTMLPrinter.addPageEpilog(info);
                         return info.toString();
                     }
-                    
+
                 };
             }
             return new DefaultInformationControl(parent, fIsFocusable);
@@ -451,12 +451,12 @@
         "var             { font-style: italic }\n" + //$NON-NLS-1$
         "th          { font-weight: bold }\n" + //$NON-NLS-1$
         ""; //$NON-NLS-1$
-    
+
     /**
      * The revision hover displays information about the currently selected revision.
      */
     private final class RevisionHover : IAnnotationHover, IAnnotationHoverExtension, IAnnotationHoverExtension2, IInformationProviderExtension2 {
-        
+
         /*
          * @see dwtx.jface.text.source.IAnnotationHover#getHoverInfo(dwtx.jface.text.source.ISourceViewer,
          *      int)
@@ -633,7 +633,7 @@
 
     /**
      * Creates a new revision painter for a vertical ruler column.
-     * 
+     *
      * @param column the column that will delegate{@link #paint(GC, ILineRange) painting} to the
      *        newly created painter.
      * @param sharedColors a shared colors object to store shaded colors in
@@ -647,7 +647,7 @@
 
     /**
      * Sets the revision information to be drawn and triggers a redraw.
-     * 
+     *
      * @param info the revision information to show, <code>null</code> to draw none
      */
     public void setRevisionInformation(RevisionInformation info) {
@@ -666,7 +666,7 @@
 
     /**
      * Changes the rendering mode and triggers redrawing if needed.
-     * 
+     *
      * @param renderingMode the rendering mode
      * @since 3.3
      */
@@ -681,7 +681,7 @@
 
     /**
      * Sets the background color.
-     * 
+     *
      * @param background the background color, <code>null</code> for the platform's list
      *        background
      */
@@ -692,7 +692,7 @@
     /**
      * Sets the parent ruler - the delegating column must call this method as soon as it creates its
      * control.
-     * 
+     *
      * @param parentRuler the parent ruler
      */
     public void setParentRuler(CompositeRuler parentRuler) {
@@ -703,7 +703,7 @@
      * Delegates the painting of the quick diff colors to this painter. The painter will draw the
      * color boxes onto the passed {@link GC} for all model (document) lines in
      * <code>visibleModelLines</code>.
-     * 
+     *
      * @param gc the {@link GC} to draw onto
      * @param visibleLines the lines (in document offsets) that are currently (perhaps only
      *        partially) visible
@@ -724,14 +724,14 @@
             }
             fAuthorInset= gc.stringExtent(new String(string)).x;
         }
-        
+
         // recompute colors (show intense colors if ruler is narrow)
         int width= getWidth();
         if (width !is fLastWidth) {
             fColorTool.setInfo(fRevisionInfo);
             fLastWidth= width;
         }
-        
+
         // draw change regions
         List/* <RevisionRange> */ranges= getRanges(visibleLines);
         for (Iterator it= ranges.iterator(); it.hasNext();) {
@@ -772,13 +772,13 @@
                 handleDispose();
             }
         });
-        
+
         fRevisionSelectionProvider.install(fViewer);
     }
 
     /**
      * Returns <code>true</code> if the column is fully connected.
-     * 
+     *
      * @return <code>true</code> if the column is fully connected, false otherwise
      */
     private bool isConnected() {
@@ -787,7 +787,7 @@
 
     /**
      * Sets the annotation model.
-     * 
+     *
      * @param model the annotation model, possibly <code>null</code>
      * @see IVerticalRulerColumn#setModel(IAnnotationModel)
      */
@@ -804,7 +804,7 @@
 
     /**
      * Sets the annotation model.
-     * 
+     *
      * @param model the annotation model.
      */
     private void setAnnotationModel(IAnnotationModel model) {
@@ -814,7 +814,7 @@
 
     /**
      * Sets the line differ.
-     * 
+     *
      * @param differ the line differ or <code>null</code> if none
      */
     private void setDiffer(IAnnotationModel differ) {
@@ -839,13 +839,13 @@
             (cast(IAnnotationModel) fLineDiffer).removeAnnotationModelListener(fAnnotationListener);
             fLineDiffer= null;
         }
-        
+
         fRevisionSelectionProvider.uninstall();
     }
 
     /**
      * Paints a single change region onto <code>gc</code>.
-     * 
+     *
      * @param range the range to paint
      * @param gc the {@link GC} to paint on
      */
@@ -915,16 +915,16 @@
          */
         int offset= fWidget.getOffsetAtLine(widgetLine);
         int widgetBaseline= fWidget.getBaseline(offset);
-        
+
         FontMetrics fm = gc.getFontMetrics();
         int fontBaseline = fm.getAscent() + fm.getLeading();
         int baselineBias= widgetBaseline - fontBaseline;
         return Math.max(0, baselineBias);
     }
-    
+
     /**
      * Looks up the color for a certain revision.
-     * 
+     *
      * @param revision the revision to get the color for
      * @param focus <code>true</code> if it is the focus revision
      * @return the color for the revision
@@ -936,7 +936,7 @@
     /**
      * Returns the revision range that contains the given line, or
      * <code>null</code> if there is none.
-     * 
+     *
      * @param line the line of interest
      * @return the corresponding <code>RevisionRange</code> or <code>null</code>
      */
@@ -961,7 +961,7 @@
 
     /**
      * Returns the sublist of all <code>RevisionRange</code>s that intersect with the given lines.
-     * 
+     *
      * @param lines the model based lines of interest
      * @return elementType: RevisionRange
      */
@@ -992,7 +992,7 @@
     /**
      * Gets all change ranges of the revisions in the revision model and adapts them to the current
      * quick diff information. The list is cached.
-     * 
+     *
      * @return the list of all change regions, with diff information applied
      */
     private List getRangeCache() {
@@ -1019,11 +1019,11 @@
     private void clearRangeCache() {
         fRevisionRanges= null;
     }
-    
+
     /**
      * Returns <code>true</code> if <code>range</code> contains <code>line</code>. A line is
      * not contained in a range if it is the range's exclusive end line.
-     * 
+     *
      * @param range the range to check whether it contains <code>line</code>
      * @param line the line the line
      * @return <code>true</code> if <code>range</code> contains <code>line</code>,
@@ -1035,7 +1035,7 @@
 
     /**
      * Computes the end index of a line range.
-     * 
+     *
      * @param range a line range
      * @return the last line (exclusive) of <code>range</code>
      */
@@ -1045,7 +1045,7 @@
 
     /**
      * Returns the visible extent of a document line range in widget lines.
-     * 
+     *
      * @param range the document line range
      * @return the visible extent of <code>range</code> in widget lines
      */
@@ -1083,7 +1083,7 @@
 
     /**
      * Returns the revision hover.
-     * 
+     *
      * @return the revision hover
      */
     public IAnnotationHover getHover() {
@@ -1094,7 +1094,7 @@
      * Computes and returns the bounds of the rectangle corresponding to a widget line range. The
      * rectangle is in pixel coordinates relative to the text widget's
      * {@link StyledText#getClientArea() client area} and has the width of the ruler.
-     * 
+     *
      * @param range the widget line range
      * @return the box bounds corresponding to <code>range</code>
      */
@@ -1111,7 +1111,7 @@
     private void updateOverviewAnnotations() {
         if (fAnnotationModel is null)
             return;
-        
+
         Revision revision= fFocusRevision !is null ? fFocusRevision : fSelectedRevision;
 
         Map added= null;
@@ -1153,7 +1153,7 @@
 
     /**
      * Returns the character offset based region of a line range.
-     * 
+     *
      * @param lines the line range to convert
      * @return the character offset range corresponding to <code>range</code>
      * @throws BadLocationException if the line range is not within the document bounds
@@ -1172,7 +1172,7 @@
 
     /**
      * Handles the selection of a revision and informs listeners.
-     * 
+     *
      * @param revision the selected revision, <code>null</code> for none
      */
     void handleRevisionSelected(Revision revision) {
@@ -1184,7 +1184,7 @@
 
     /**
      * Handles the selection of a revision id and informs listeners
-     * 
+     *
      * @param id the selected revision id
      */
     void handleRevisionSelected(String id) {
@@ -1206,7 +1206,7 @@
 
     /**
      * Returns the selection provider.
-     * 
+     *
      * @return the selection provider
      */
     public RevisionSelectionProvider getRevisionSelectionProvider() {
@@ -1215,7 +1215,7 @@
 
     /**
      * Updates the focus line with a new line.
-     * 
+     *
      * @param line the new focus line, -1 for no focus
      */
     private void updateFocusLine(int line) {
@@ -1225,13 +1225,13 @@
 
     /**
      * Handles a changing focus line.
-     * 
+     *
      * @param previousLine the old focus line (-1 for no focus)
      * @param nextLine the new focus line (-1 for no focus)
      */
     private void onFocusLineChanged(int previousLine, int nextLine) {
-        if cast(DEBUG)
-            System.out_.println("line: " + previousLine + " > " + nextLine); //$NON-NLS-1$ //$NON-NLS-2$
+        if (DEBUG)
+            System.out_.println("line: " ~ previousLine ~ " > " ~ nextLine); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusLine= nextLine;
         RevisionRange region= getRange(nextLine);
         updateFocusRange(region);
@@ -1239,7 +1239,7 @@
 
     /**
      * Updates the focus range.
-     * 
+     *
      * @param range the new focus range, <code>null</code> for no focus
      */
     private void updateFocusRange(RevisionRange range) {
@@ -1249,12 +1249,12 @@
 
     /**
      * Handles a changing focus range.
-     * 
+     *
      * @param previousRange the old focus range (<code>null</code> for no focus)
      * @param nextRange the new focus range (<code>null</code> for no focus)
      */
     private void onFocusRangeChanged(RevisionRange previousRange, RevisionRange nextRange) {
-        if cast(DEBUG)
+        if (DEBUG)
             System.out_.println("range: " + previousRange + " > " + nextRange); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusRange= nextRange;
         Revision revision= nextRange is null ? null : nextRange.getRevision();
@@ -1268,12 +1268,12 @@
 
     /**
      * Handles a changing focus revision.
-     * 
+     *
      * @param previousRevision the old focus revision (<code>null</code> for no focus)
      * @param nextRevision the new focus revision (<code>null</code> for no focus)
      */
     private void onFocusRevisionChanged(Revision previousRevision, Revision nextRevision) {
-        if cast(DEBUG)
+        if (DEBUG)
             System.out_.println("revision: " + previousRevision + " > " + nextRevision); //$NON-NLS-1$ //$NON-NLS-2$
         fFocusRevision= nextRevision;
         uninstallWheelHandler();
@@ -1305,7 +1305,7 @@
 
     /**
      * Handles a mouse wheel event.
-     * 
+     *
      * @param event the mouse wheel event
      */
     private void handleMouseWheel(Event event) {
@@ -1381,7 +1381,7 @@
     /**
      * Translates a y coordinate in the pixel coordinates of the column's control to a document line
      * number.
-     * 
+     *
      * @param y the y coordinate
      * @return the corresponding document line, -1 for no line
      * @see CompositeRuler#toDocumentLineNumber(int)
@@ -1406,7 +1406,7 @@
 
     /**
      * Returns the width of the column.
-     * 
+     *
      * @return the width of the column
      */
     private int getWidth() {
@@ -1415,7 +1415,7 @@
 
     /**
      * Returns the System background color for list widgets.
-     * 
+     *
      * @return the System background color for list widgets
      */
     private Color getBackground() {
@@ -1426,7 +1426,7 @@
 
     /**
      * Sets the hover later returned by {@link #getHover()}.
-     * 
+     *
      * @param hover the hover
      */
     public void setHover(IAnnotationHover hover) {
@@ -1435,7 +1435,7 @@
 
     /**
      * Returns <code>true</code> if the receiver can provide a hover for a certain document line.
-     * 
+     *
      * @param activeLine the document line of interest
      * @return <code>true</code> if the receiver can provide a hover
      */
@@ -1445,7 +1445,7 @@
 
     /**
      * Returns the revision at a certain document offset, or <code>null</code> for none.
-     * 
+     *
      * @param offset the document offset
      * @return the revision at offset, or <code>null</code> for none
      */
@@ -1467,7 +1467,7 @@
 
     /**
      * Returns <code>true</code> if a revision model has been set, <code>false</code> otherwise.
-     * 
+     *
      * @return <code>true</code> if a revision model has been set, <code>false</code> otherwise
      */
     public bool hasInformation() {
@@ -1476,7 +1476,7 @@
 
     /**
      * Returns the width in chars required to display information.
-     * 
+     *
      * @return the width in chars required to display information
      * @since 3.3
      */
@@ -1506,7 +1506,7 @@
 
     /**
      * Enables showing the revision id.
-     * 
+     *
      * @param show <code>true</code> to show the revision, <code>false</code> to hide it
      */
     public void showRevisionId(bool show) {
@@ -1517,10 +1517,10 @@
             postRedraw();
         }
     }
-    
+
     /**
      * Enables showing the revision author.
-     * 
+     *
      * @param show <code>true</code> to show the author, <code>false</code> to hide it
      */
     public void showRevisionAuthor(bool show) {
@@ -1534,7 +1534,7 @@
 
     /**
      * Adds a revision listener.
-     * 
+     *
      * @param listener the listener
      * @since 3.3
      */
@@ -1544,7 +1544,7 @@
 
     /**
      * Removes a revision listener.
-     * 
+     *
      * @param listener the listener
      * @since 3.3
      */
@@ -1554,7 +1554,7 @@
 
     /**
      * Informs the revision listeners about a change.
-     * 
+     *
      * @since 3.3
      */
     private void informListeners() {
--- a/dwtx/jface/text/AbstractHoverInformationControlManager.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/AbstractHoverInformationControlManager.d	Sun Aug 24 23:05:26 2008 +0200
@@ -1003,20 +1003,21 @@
             return;
         }
 
-        fReplacingDelayJob= new Job("AbstractHoverInformationControlManager Replace Delayer") { //$NON-NLS-1$
-            public IStatus run(final IProgressMonitor monitor) {
+        fReplacingDelayJob= new class("AbstractHoverInformationControlManager Replace Delayer") Job { //$NON-NLS-1$
+            this( String str ){
+                super(str);
+            }
+            public IStatus run(IProgressMonitor monitor) {
                 if (monitor.isCanceled() || display.isDisposed()) {
                     return Status.CANCEL_STATUS;
                 }
-                display.syncExec(new class()  Runnable {
-                    public void run() {
-                        fReplacingDelayJob= null;
-                        if (monitor.isCanceled())
-                            return;
-                        if (! fWaitForMouseUp)
-                            replaceInformationControl(false);
-                    }
-                });
+                display.syncExec(dgRunnable( (IProgressMonitor monitor_) {
+                    fReplacingDelayJob= null;
+                    if (monitor_.isCanceled())
+                        return;
+                    if (! fWaitForMouseUp)
+                        replaceInformationControl(false);
+                }, monitor ));
                 return Status.OK_STATUS;
             }
         };
@@ -1057,10 +1058,10 @@
 
         bool was= isEnabled();
         super.setEnabled(enabled);
-        bool is= isEnabled();
+        bool is_= isEnabled();
 
-        if (was !is is && fMouseTracker !is null) {
-            if (is)
+        if (was !is is_ && fMouseTracker !is null) {
+            if (is_)
                 fMouseTracker.start(getSubjectControl());
             else
                 fMouseTracker.stop();
--- a/dwtx/jface/text/DocumentEvent.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/DocumentEvent.d	Sun Aug 24 23:05:26 2008 +0200
@@ -169,12 +169,12 @@
  * @see dwtx.jface.text.IDocument
  */
 public class DocumentEvent {
-    
+
     /**
      * Debug option for asserting that text is not null.
      * If the <code>dwtx.text/debug/DocumentEvent/assertTextNotNull</code>
      * system property is <code>true</code>
-     * 
+     *
      * @since 3.3
      */
     private static const bool ASSERT_TEXT_NOT_NULL= Boolean.getBoolean("dwtx.text/debug/DocumentEvent/assertTextNotNull"); //$NON-NLS-1$
@@ -207,7 +207,7 @@
         Assert.isTrue(offset >= 0);
         Assert.isTrue(length >= 0);
 
-        if cast(ASSERT_TEXT_NOT_NULL)
+        if (ASSERT_TEXT_NOT_NULL)
             Assert.isNotNull(text);
 
         fDocument= doc;
@@ -274,7 +274,7 @@
     public long getModificationStamp() {
         return fModificationStamp;
     }
-    
+
     /*
      * @see java.lang.Object#toString()
      * @since 3.4
--- a/dwtx/jface/text/SequentialRewriteTextStore.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/SequentialRewriteTextStore.d	Sun Aug 24 23:05:26 2008 +0200
@@ -248,7 +248,7 @@
                 int delta= getDelta(lastReplace);
                 fReplaceList.add(new Replace(offset - delta, offset, length, text));
 
-            } else if cast(ASSERT_SEQUENTIALITY) {
+            } else if (ASSERT_SEQUENTIALITY) {
                 throw new IllegalArgumentException();
 
             } else {
@@ -287,7 +287,7 @@
             int delta= getDelta(lastReplace);
             return fSource.get(offset - delta, length);
 
-        } else if cast(ASSERT_SEQUENTIALITY) {
+        } else if (ASSERT_SEQUENTIALITY) {
             throw new IllegalArgumentException();
 
         } else {
@@ -347,7 +347,7 @@
             int delta= getDelta(lastReplace);
             return fSource.get(offset - delta);
 
-        } else if cast(ASSERT_SEQUENTIALITY) {
+        } else if (ASSERT_SEQUENTIALITY) {
             throw new IllegalArgumentException();
 
         } else {
--- a/dwtx/jface/text/link/LinkedModeModel.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeModel.d	Sun Aug 24 23:05:26 2008 +0200
@@ -131,8 +131,8 @@
     public static LinkedModeModel getModel(IDocument document, int offset) {
         if (!hasInstalledModel(document))
             return null;
-        
-        LinkedModeManager mgr= LinkedModeManager.getLinkedManager(new IDocument[] {document}, false);
+
+        LinkedModeManager mgr= LinkedModeManager.getLinkedManager([document], false);
         if (mgr !is null)
             return mgr.getTopEnvironment();
         return null;
--- a/dwtx/jface/text/link/LinkedModeUI.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/link/LinkedModeUI.d	Sun Aug 24 23:05:26 2008 +0200
@@ -636,8 +636,8 @@
 
         }
     };
-    
-    
+
+
     /** Whether this UI is in simple highlighting mode or not. */
     private bool fSimple;
 
@@ -666,7 +666,7 @@
      * @param viewer the viewer upon which the linked mode UI should act
      */
     public this(LinkedModeModel model, ITextViewer viewer) {
-        constructor(model, new LinkedModeUITarget[]{new EmptyTarget(viewer)});
+        constructor(model, [new EmptyTarget(viewer)]);
     }
 
     /**
@@ -691,7 +691,7 @@
      * @param target the target upon which the linked mode UI should act
      */
     public this(LinkedModeModel model, LinkedModeUITarget target) {
-        constructor(model, new LinkedModeUITarget[]{target});
+        constructor(model, [target]);
     }
 
     /**
@@ -997,7 +997,7 @@
         final StyledText widget= fCurrentTarget.fWidget;
         if (widget is null || widget.isDisposed())
             return;
-        
+
         // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=132263
         widget.getDisplay().asyncExec(new class()  Runnable {
             public void run() {
@@ -1060,7 +1060,7 @@
 
     /**
      * Returns all possible content types of <code>document</code>.
-     * 
+     *
      * @param document the document
      * @return all possible content types of <code>document</code>
      * @throws BadPartitioningException
@@ -1079,7 +1079,7 @@
         }
         return document.getLegalContentTypes();
     }
-    
+
     private void createAnnotationModel() {
         if (fCurrentTarget.fAnnotationModel is null) {
             LinkedPositionAnnotations lpa= new LinkedPositionAnnotations();
@@ -1298,7 +1298,7 @@
      * Enables the support for colored labels in the proposal popup.
      * <p>Completion proposals can implement {@link ICompletionProposalExtension6}
      * to provide colored proposal labels.</p>
-     * 
+     *
      * @param isEnabled if <code>true</code> the support for colored labels is enabled in the proposal popup
      * @since 3.4
      */
--- a/dwtx/jface/text/rules/DefaultPartitioner.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/rules/DefaultPartitioner.d	Sun Aug 24 23:05:26 2008 +0200
@@ -137,7 +137,7 @@
      * @since 3.0
      */
     public String[] getManagingPositionCategories() {
-        return new String[] { fPositionCategory };
+        return [ fPositionCategory ];
     }
 
     /*
--- a/dwtx/jface/text/rules/FastPartitioner.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/rules/FastPartitioner.d	Sun Aug 24 23:05:26 2008 +0200
@@ -144,7 +144,7 @@
      * @see dwtx.jface.text.IDocumentPartitionerExtension2#getManagingPositionCategories()
      */
     public String[] getManagingPositionCategories() {
-        return new String[] { fPositionCategory };
+        return [ fPositionCategory ];
     }
 
     /*
@@ -824,7 +824,7 @@
     protected final Position[] getPositions()  {
         if (fCachedPositions is null) {
             fCachedPositions= fDocument.getPositions(fPositionCategory);
-        } else if cast(CHECK_CACHE_CONSISTENCY) {
+        } else if (CHECK_CACHE_CONSISTENCY) {
             Position[] positions= fDocument.getPositions(fPositionCategory);
             int len= Math.min(positions.length, fCachedPositions.length);
             for (int i= 0; i < len; i++) {
--- a/dwtx/jface/text/rules/RuleBasedPartitioner.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/jface/text/rules/RuleBasedPartitioner.d	Sun Aug 24 23:05:26 2008 +0200
@@ -128,7 +128,7 @@
      * @since 3.0
      */
     public String[] getManagingPositionCategories() {
-        return new String[] { fPositionCategory };
+        return [ fPositionCategory ];
     }
 
     /*
--- a/dwtx/text/edits/MoveSourceEdit.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/text/edits/MoveSourceEdit.d	Sun Aug 24 23:05:26 2008 +0200
@@ -113,7 +113,7 @@
      *
      * @return the target edit or <code>null</code>
      */
-    public this getTargetEdit() {
+    public MoveTargetEdit getTargetEdit() {
         return fTarget;
     }
 
--- a/dwtx/text/edits/MoveTargetEdit.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/text/edits/MoveTargetEdit.d	Sun Aug 24 23:05:26 2008 +0200
@@ -97,7 +97,7 @@
      *
      * @return the source edit or <code>null</code>
      */
-    public this getSourceEdit() {
+    public MoveSourceEdit getSourceEdit() {
         return fSource;
     }
 
@@ -201,11 +201,11 @@
     /*
      * @see dwtx.text.edits.TextEdit#traversePassThree
      */
-    int traverseRegionUpdating(TextEditProcessor processor, IDocument document, int accumulatedDelta, bool delete) {
+    int traverseRegionUpdating(TextEditProcessor processor, IDocument document, int accumulatedDelta, bool delete_) {
         // the children got already updated / normalized while they got removed
         // from the source edit. So we only have to adjust the offset computed to
         // far.
-        if (delete) {
+        if (delete_) {
             deleteTree();
         } else {
             internalMoveTree(accumulatedDelta);
--- a/dwtx/text/edits/MultiTextEdit.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/text/edits/MultiTextEdit.d	Sun Aug 24 23:05:26 2008 +0200
@@ -172,7 +172,7 @@
      * @see TextEdit#copy
      */
     protected TextEdit doCopy() {
-        Assert.isTrue(MultiTextEdit.class is getClass(), "Subclasses must reimplement copy0"); //$NON-NLS-1$
+        Assert.isTrue(MultiTextEdit.classinfo is getClass(), "Subclasses must reimplement copy0"); //$NON-NLS-1$
         return new MultiTextEdit(this);
     }
 
--- a/dwtx/text/edits/TextEdit.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/text/edits/TextEdit.d	Sun Aug 24 23:05:26 2008 +0200
@@ -944,10 +944,10 @@
 
     abstract int performDocumentUpdating(IDocument document) ;
 
-    int traverseRegionUpdating(TextEditProcessor processor, IDocument document, int accumulatedDelta, bool delete) {
-        performRegionUpdating(accumulatedDelta, delete);
+    int traverseRegionUpdating(TextEditProcessor processor, IDocument document, int accumulatedDelta, bool delete_) {
+        performRegionUpdating(accumulatedDelta, delete_);
         if (fChildren !is null) {
-            bool childDelete= delete || deleteChildren();
+            bool childDelete= delete_ || deleteChildren();
             for (Iterator iter= fChildren.iterator(); iter.hasNext();) {
                 TextEdit child= cast(TextEdit)iter.next();
                 accumulatedDelta= child.traverseRegionUpdating(processor, document, accumulatedDelta, childDelete);
@@ -972,8 +972,8 @@
     protected void childRegionUpdated() {
     }
 
-    void performRegionUpdating(int accumulatedDelta, bool delete) {
-        if (delete)
+    void performRegionUpdating(int accumulatedDelta, bool delete_) {
+        if (delete_)
             markAsDeleted();
         else
             adjustOffset(accumulatedDelta);
--- a/dwtx/text/edits/TextEditMessages.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/text/edits/TextEditMessages.d	Sun Aug 24 23:05:26 2008 +0200
@@ -44,9 +44,14 @@
 
 class TextEditMessages {
 
-    private static const String BUNDLE_NAME= "dwtx.text.edits.Messages"; //$NON-NLS-1$
+//     private static const String BUNDLE_NAME= "dwtx.text.edits.Messages"; //$NON-NLS-1$
+
+    private static const ResourceBundle RESOURCE_BUNDLE;//= ResourceBundle.getBundle(BUNDLE_NAME);
 
-    private static const ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
+    static this() {
+        RESOURCE_BUNDLE = ResourceBundle.getBundle(
+            getImportData!("dwtx.text.edits.TextEditMessages.properties"));
+    }
 
     private this() {
     }
@@ -55,15 +60,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/text/undo/UndoMessages.d	Sun Aug 24 22:41:48 2008 +0200
+++ b/dwtx/text/undo/UndoMessages.d	Sun Aug 24 23:05:26 2008 +0200
@@ -33,9 +33,14 @@
  */
 final class UndoMessages {
 
-    private static const String BUNDLE_NAME= "dwtx.text.undo.UndoMessages"; //$NON-NLS-1$
+//     private static const String BUNDLE_NAME= "dwtx.text.undo.UndoMessages"; //$NON-NLS-1$
+
+    private static const ResourceBundle RESOURCE_BUNDLE;//= ResourceBundle.getBundle(BUNDLE_NAME);
 
-    private static const ResourceBundle RESOURCE_BUNDLE= ResourceBundle.getBundle(BUNDLE_NAME);
+    static this() {
+        RESOURCE_BUNDLE = ResourceBundle.getBundle(
+            getImportData!("dwtx.text.undo.UndoMessages.properties"));
+    }
 
     private this() {
     }
@@ -44,15 +49,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);
     }
 }