--- Scribe.java.orig	2005-03-11 08:01:52.000000000 +0100
+++ Scribe.java	2005-04-18 19:44:19.796875000 +0200
@@ -70,6 +70,10 @@
 	private int textRegionStart;
 	public boolean useTab;
 
+	/* martijn kruithof: used for adding {} */
+	private int addBraceDepth = 0;
+
+
 	Scribe(CodeFormatterVisitor formatter, Map settings, int offset, int length, CodeSnippetParsingUtil codeSnippetParsingUtil) {
 		if (settings != null) {
 			Object assertModeSetting = settings.get(JavaCore.COMPILER_SOURCE);
@@ -115,7 +119,17 @@
 		addOptimizedReplaceEdit(insertPosition, 0, insertedString);
 	}
 
+	    
+    private final void mandatoryInsertEdit(int insertPosition, String insertedString) {
+        if (this.edits.length == this.editsIndex) {
+            // resize
+            resize();
+        }
+        this.edits[this.editsIndex++] = new OptimizedReplaceEdit(insertPosition, 0, insertedString, false);
+    }
+
 	private final void addOptimizedReplaceEdit(int offset, int length, String replacement) {
+		final OptimizedReplaceEdit next = new OptimizedReplaceEdit(offset, length, replacement);
 		if (this.editsIndex > 0) {
 			// try to merge last two edits
 			final OptimizedReplaceEdit previous = this.edits[this.editsIndex-1];
@@ -136,7 +150,7 @@
 				this.editsIndex--;
 				return;
 			}
-			if (endOffsetOfPreviousEdit == offset) {
+			if (endOffsetOfPreviousEdit == offset && previous.mergeable) {
 				if (length != 0) {
 					if (replacementLength != 0) {
 						this.edits[this.editsIndex - 1] = new OptimizedReplaceEdit(previousOffset, previousLength + length, previousReplacement + replacement);
@@ -169,10 +183,10 @@
 					}
 				}
 			} else {
-				this.edits[this.editsIndex++] = new OptimizedReplaceEdit(offset, length, replacement);
+				this.edits[this.editsIndex++] = next;
 			}
 		} else {
-			this.edits[this.editsIndex++] = new OptimizedReplaceEdit(offset, length, replacement);
+			this.edits[this.editsIndex++] = next;
 		}
 	}
 	
@@ -1119,6 +1133,7 @@
 					case TerminalTokens.TokenNamesynchronized :
 					case TerminalTokens.TokenNametransient :
 					case TerminalTokens.TokenNamevolatile :
+					case TerminalTokens.TokenNamestrictfp :
 						this.print(this.scanner.getRawTokenSource(), !isFirstModifier);
 						isFirstModifier = false;
 						currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition();
@@ -1470,4 +1485,76 @@
 			this.indentationLevel -= tabSize;
 		}
 	}
-}
\ No newline at end of file
+
+	/** 
+	 * Martijn Kruithof: needed to insert {} at if.
+	 *
+	 */
+
+    public void insertLBrace(boolean considerSpaceIfAny){
+//        if (checkLineWrapping && column + 1 > this.pageWidth) {
+//            handleLineTooLong();
+//        }
+        this.lastNumberOfNewLines = 0;
+        printIndentationIfNecessary();
+        if (considerSpaceIfAny) {
+            this.space();
+        }
+        int pos = this.scanner.getCurrentTokenStartPosition();
+        if (pos >= this.textRegionStart && pos <= this.textRegionEnd)
+        {
+            if (this.pendingSpace)
+            {
+                this.mandatoryInsertEdit(this.scanner.getCurrentTokenStartPosition(),
+                        " {"); //$NON-NLS-1$
+            }
+            else
+            {
+                this.mandatoryInsertEdit(this.scanner.getCurrentTokenStartPosition(),
+                        "{"); //$NON-NLS-1$
+            }
+            this.pendingSpace = false;
+            this.needSpace = false;
+            column += 1;
+            this.addBraceDepth++;
+        }
+
+    }
+    
+    public void insertRBrace(boolean considerSpaceIfAny){
+//      if (checkLineWrapping && column + 1 > this.pageWidth) {
+//          handleLineTooLong();
+//      }
+        this.lastNumberOfNewLines = 0;
+        printIndentationIfNecessary();
+        if (considerSpaceIfAny) {
+            this.space();
+        }
+        Exception e = new Exception();
+        e.setStackTrace(new StackTraceElement[0]);
+//        Util.log(e,("Inserting } at " + this.scanner.getCurrentTokenEndPosition() + "\neofPos =" + this.scanner.eofPosition + "\nslen =" + this.scanner.source.length));
+        int pos = this.scanner.getCurrentTokenEndPosition() + 1;
+        if (this.addBraceDepth > 0)
+        {
+            if (pos > this.textRegionEnd)
+            {
+                this.textRegionEnd = pos;
+            }
+            if (this.pendingSpace)
+            {
+                this.mandatoryInsertEdit(
+                        this.scanner.getCurrentTokenEndPosition() + 1, " }"); //$NON-NLS-1$
+            }
+            else
+            {
+                this.mandatoryInsertEdit(
+                        this.scanner.getCurrentTokenEndPosition() + 1, "}"); //$NON-NLS-1$
+            }
+            this.pendingSpace = false;
+            this.needSpace = false;
+            column += 1;
+            this.addBraceDepth--;
+        }
+    }
+    
+}
