Changes:
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / formatter / CodeFormatter.java
index 516c7de..3d70337 100644 (file)
@@ -23,7 +23,6 @@ import net.sourceforge.phpdt.core.compiler.ITerminalSymbols;
 import net.sourceforge.phpdt.core.compiler.InvalidInputException;
 import net.sourceforge.phpdt.internal.compiler.ConfigurableOption;
 import net.sourceforge.phpdt.internal.compiler.parser.Scanner;
-
 import net.sourceforge.phpdt.internal.formatter.impl.FormatterOptions;
 import net.sourceforge.phpdt.internal.formatter.impl.SplitLine;
 
@@ -315,6 +314,7 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
     boolean inArrayAssignment = false;
     boolean inThrowsClause = false;
     boolean inClassOrInterfaceHeader = false;
+    int dollarBraceCount = 0;
 
     // openBracketCount is used to count the number of open brackets not closed yet.
     int openBracketCount = 0;
@@ -349,6 +349,13 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
         // exit the loop.
         try {
           token = scanner.getNextToken();
+          if (Scanner.DEBUG) {
+            int currentEndPosition = scanner.getCurrentTokenEndPosition();
+            int currentStartPosition = scanner.getCurrentTokenStartPosition();
+
+            System.out.print(currentStartPosition + "," + currentEndPosition + ": ");
+            System.out.println(scanner.toStringAction(token));
+          }
 
           // Patch for line comment
           // See PR http://dev.eclipse.org/bugs/show_bug.cgi?id=23096
@@ -600,6 +607,9 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
           }
         }
         switch (token) {
+          case TokenNameDOLLAR_LBRACE :
+            dollarBraceCount++;
+            break;
           case TokenNameelse :
             //                         case TokenNamefinally :
             expectingOpenBrace = true;
@@ -723,6 +733,10 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
             }
             break;
           case TokenNameRBRACE :
+            if (dollarBraceCount > 0) {
+              dollarBraceCount--;
+              break;
+            }
             if (previousCompilableToken == TokenNameRPAREN) {
               pendingSpace = false;
             }
@@ -856,17 +870,17 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
             }
             increaseLineDelta(scanner.startPosition - scanner.currentPosition);
             break;
-//          case TokenNameHTML :
-//            // Add the next token to the formatted source string.
-//            // outputCurrentToken(token);
-//            int startPosition = scanner.startPosition;
-//            flushBuffer();
-//            for (int i = startPosition, max = scanner.currentPosition; i < max; i++) {
-//              char currentCharacter = scanner.source[i];
-//              updateMappedPositions(i);
-//              currentLineBuffer.append(currentCharacter);
-//            }
-//            break;
+            //          case TokenNameHTML :
+            //            // Add the next token to the formatted source string.
+            //            // outputCurrentToken(token);
+            //            int startPosition = scanner.startPosition;
+            //            flushBuffer();
+            //            for (int i = startPosition, max = scanner.currentPosition; i < max; i++) {
+            //              char currentCharacter = scanner.source[i];
+            //              updateMappedPositions(i);
+            //              currentLineBuffer.append(currentCharacter);
+            //            }
+            //            break;
           default :
             if ((token == TokenNameIdentifier) || isLiteralToken(token)) {
               //                                                       || token == TokenNamesuper
@@ -1111,7 +1125,9 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
       case TokenNameCOLON : // :
         return 50; // it's better cutting on ?: than on ;
       case TokenNameEQUAL_EQUAL : // == 
+      case TokenNameEQUAL_EQUAL_EQUAL : // === 
       case TokenNameNOT_EQUAL : // != 
+                       case TokenNameNOT_EQUAL_EQUAL : // != 
         return 60;
       case TokenNameLESS : // < 
       case TokenNameLESS_EQUAL : // <= 
@@ -1293,12 +1309,24 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
       case TokenNameCOLON : // : (15.24)
         return ":"; //$NON-NLS-1$
 
+      case TokenNameCOLON_COLON : // : (15.24)
+        return "::"; //$NON-NLS-1$
+
       case TokenNameEQUAL_EQUAL : // == (15.20, 15.20.1, 15.20.2, 15.20.3)
         return "=="; //$NON-NLS-1$
 
+      case TokenNameEQUAL_EQUAL_EQUAL : // == (15.20, 15.20.1, 15.20.2, 15.20.3)
+        return "==="; //$NON-NLS-1$
+
+      case TokenNameEQUAL_GREATER : // -= (15.25.2)
+        return "=>"; //$NON-NLS-1$                             
+
       case TokenNameNOT_EQUAL : // != (15.20, 15.20.1, 15.20.2, 15.20.3)
         return "!="; //$NON-NLS-1$
 
+                       case TokenNameNOT_EQUAL_EQUAL : // != (15.20, 15.20.1, 15.20.2, 15.20.3)
+                               return "!=="; //$NON-NLS-1$
+                                                       
       case TokenNameLESS : // < (15.19.1)
         return "<"; //$NON-NLS-1$
 
@@ -1362,6 +1390,9 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
       case TokenNameMINUS_EQUAL : // -= (15.25.2)
         return "-="; //$NON-NLS-1$
 
+      case TokenNameMINUS_GREATER : // -= (15.25.2)
+        return "->"; //$NON-NLS-1$
+
       case TokenNameLEFT_SHIFT_EQUAL : // <<= (15.25.2)
         return "<<="; //$NON-NLS-1$
 
@@ -1973,6 +2004,13 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
           if (currentToken != Scanner.TokenNameWHITESPACE)
             previousToken = currentToken;
           currentToken = splitScanner.getNextToken();
+          if (Scanner.DEBUG) {
+            int currentEndPosition = splitScanner.getCurrentTokenEndPosition();
+            int currentStartPosition = splitScanner.getCurrentTokenStartPosition();
+
+            System.out.print(currentStartPosition + "," + currentEndPosition + ": ");
+            System.out.println(scanner.toStringAction(currentToken));
+          }
         } catch (InvalidInputException e) {
           if (!handleInvalidToken(e))
             throw e;
@@ -2122,7 +2160,9 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
           case TokenNameGREATER_EQUAL : // >= (15.19.1)
             //                         case TokenNameinstanceof : // instanceof
           case TokenNameEQUAL_EQUAL : // == (15.20, 15.20.1, 15.20.2, 15.20.3)
+          case TokenNameEQUAL_EQUAL_EQUAL : // == (15.20, 15.20.1, 15.20.2, 15.20.3)
           case TokenNameNOT_EQUAL : // != (15.20, 15.20.1, 15.20.2, 15.20.3)
+                                       case TokenNameNOT_EQUAL_EQUAL : // != (15.20, 15.20.1, 15.20.2, 15.20.3)
           case TokenNameAND : // & (15.21, 15.21.1, 15.21.2)
           case TokenNameOR : // | (15.21, 15.21.1, 15.21.2)
           case TokenNameXOR : // ^ (15.21, 15.21.1, 15.21.2)