Added "Task Tags" functionality (TODO,...)
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / text / FastJavaPartitionScanner.java
index 41246b6..70f5461 100644 (file)
@@ -18,19 +18,21 @@ import org.eclipse.jface.text.rules.Token;
  */
 public class FastJavaPartitionScanner implements IPartitionTokenScanner {
 
-       private final static String SKIP= "__skip"; //$NON-NLS-1$       
-       public final static String JAVA_STRING= "__php_string"; //$NON-NLS-1$
-       public final static String JAVA_SINGLE_LINE_COMMENT= "__php_singleline_comment"; //$NON-NLS-1$
-       public final static String JAVA_MULTI_LINE_COMMENT= "__php_multiline_comment"; //$NON-NLS-1$
-       public final static String JAVA_DOC= "__php_phpdoc"; //$NON-NLS-1$
+//     private final static String SKIP= "__skip"; //$NON-NLS-1$       
+//     public final static String JAVA_STRING= "__php_string"; //$NON-NLS-1$
+//     public final static String JAVA_SINGLE_LINE_COMMENT= "__php_singleline_comment"; //$NON-NLS-1$
+//     public final static String JAVA_MULTI_LINE_COMMENT= "__php_multiline_comment"; //$NON-NLS-1$
+//     public final static String JAVA_DOC= "__php_phpdoc"; //$NON-NLS-1$
 
        // states
-       private static final int JAVA= 0;       
-       private static final int SINGLE_LINE_COMMENT= 1;
+       private static final int HTML= 0;       
+       private static final int SINGLE_LINE_COMMENT= 1; 
        private static final int MULTI_LINE_COMMENT= 2;
-       private static final int JAVADOC= 3;
-       private static final int CHARACTER= 4;
-       private static final int STRING= 5;
+       private static final int PHPDOC= 3;
+//     private static final int CHARACTER= 4;
+       private static final int STRING_SQ= 4;  // single quote string
+       private static final int STRING_DQ= 5;  // double quote string
+       private static final int PHP= 6;  // double quote string
        
        // beginning of prefixes and postfixes
        private static final int NONE= 0;
@@ -57,35 +59,25 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
        /** The amount of characters already read on first call to nextToken(). */
        private int fPrefixLength;
        
-       // emulate JavaPartitionScanner
-       private static final boolean fgEmulate= false;
+       // emulate JavaPartitionScanner 
+//     private static final boolean fgEmulate= false;
        private int fJavaOffset;
        private int fJavaLength;
        
        private final IToken[] fTokens= new IToken[] {
                new Token(null),
-               new Token(JAVA_SINGLE_LINE_COMMENT),
-               new Token(JAVA_MULTI_LINE_COMMENT),
-               new Token(JAVA_DOC),
-               new Token(SKIP),
-               new Token(JAVA_STRING)
+               new Token(IPHPPartitions.PHP_SINGLELINE_COMMENT),
+               new Token(IPHPPartitions.PHP_MULTILINE_COMMENT),
+               new Token(IPHPPartitions.PHP_PHPDOC_COMMENT),
+               new Token(IPHPPartitions.PHP_STRING_SQ),
+               new Token(IPHPPartitions.PHP_STRING_DQ),
+               new Token(IPHPPartitions.PHP_PARTITIONING),
        };
 
        /*
         * @see org.eclipse.jface.text.rules.ITokenScanner#nextToken()
         */
        public IToken nextToken() {
-               
-               // emulate JavaPartitionScanner
-               if (fgEmulate) {
-                       if (fJavaOffset != -1 && fTokenOffset + fTokenLength != fJavaOffset + fJavaLength) {
-                               fTokenOffset += fTokenLength;           
-                               return fTokens[JAVA];   
-                       } else {
-                               fJavaOffset= -1;
-                               fJavaLength= 0; 
-                       }
-               }               
 
                fTokenOffset += fTokenLength;
                fTokenLength= fPrefixLength;
@@ -98,7 +90,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                        case ICharacterScanner.EOF:
                                if (fTokenLength > 0) {
                                        fLast= NONE; // ignore last
-                                       return preFix(fState, JAVA, NONE, 0);
+                                       return preFix(fState, HTML, NONE, 0);
 
                                } else {
                                        fLast= NONE;
@@ -107,8 +99,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                }
 
                        case '\r':
-                               // emulate JavaPartitionScanner
-                               if (!fgEmulate && fLast != CARRIAGE_RETURN) {
+                               if ( fLast != CARRIAGE_RETURN) {
                                                fLast= CARRIAGE_RETURN;
                                                fTokenLength++;
                                                continue;
@@ -117,22 +108,23 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                        
                                        switch (fState) {
                                        case SINGLE_LINE_COMMENT:
-                                       case CHARACTER:
-                                       case STRING:
+//                                     case CHARACTER:
+                                       case STRING_SQ:  
+                                       case STRING_DQ:
                                                if (fTokenLength > 0) {
                                                        IToken token= fTokens[fState];
                                                        
                                                        // emulate JavaPartitionScanner
-                                                       if (fgEmulate) {
-                                                               fTokenLength++;
-                                                               fLast= NONE;
-                                                               fPrefixLength= 0;
-                                                       } else {                                                                
+//                                                     if (fgEmulate) {
+//                                                             fTokenLength++;
+//                                                             fLast= NONE;
+//                                                             fPrefixLength= 0;
+//                                                     } else {                                                                
                                                                fLast= CARRIAGE_RETURN; 
                                                                fPrefixLength= 1;
-                                                       }
+//                                                     }
                                                        
-                                                       fState= JAVA;
+                                                       fState= HTML;
                                                        return token;
 
                                                } else {
@@ -149,8 +141,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                        case '\n':                              
                                switch (fState) {
                                case SINGLE_LINE_COMMENT:
-                               case CHARACTER:
-                               case STRING:                            
+//                             case CHARACTER:
+                               case STRING_SQ:
+                               case STRING_DQ:                         
                                        // assert(fTokenLength > 0);
                                        return postFix(fState);
 
@@ -160,48 +153,50 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                }
 
                        default:
-                               if (!fgEmulate && fLast == CARRIAGE_RETURN) {                   
+                               if ( fLast == CARRIAGE_RETURN) {                        
                                        switch (fState) {
                                        case SINGLE_LINE_COMMENT:
-                                       case CHARACTER:
-                                       case STRING:
+//                                     case CHARACTER:
+                                       case STRING_SQ:
+                                       case STRING_DQ:
 
                                                int last;
                                                int newState;
                                                switch (ch) {
                                                case '/':
                                                        last= SLASH;
-                                                       newState= JAVA;
+                                                       newState= HTML;
                                                        break;
 
                                                case '*':
                                                        last= STAR;
-                                                       newState= JAVA;
+                                                       newState= HTML;
                                                        break;
                                                
                                                case '\'':
                                                        last= NONE;
-                                                       newState= CHARACTER;
+       //                                              newState= CHARACTER;
+                                                       newState= STRING_SQ;
                                                        break;
 
                                                case '"':
                                                        last= NONE;
-                                                       newState= STRING;
+                                                       newState= STRING_DQ;
                                                        break;
 
                                                case '\r':
                                                        last= CARRIAGE_RETURN;
-                                                       newState= JAVA;
+                                                       newState= HTML;
                                                        break;
 
                                                case '\\':
                                                        last= BACKSLASH;
-                                                       newState= JAVA;
+                                                       newState= HTML;
                                                        break;
 
                                                default:
                                                        last= NONE;
-                                                       newState= JAVA;
+                                                       newState= HTML;
                                                        break;
                                                }
                                                
@@ -216,14 +211,14 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
 
                        // states        
                        switch (fState) {
-                       case JAVA:
+                       case PHP:
                                switch (ch) {
                                case '/':
                                        if (fLast == SLASH) {
                                                if (fTokenLength - getLastLength(fLast) > 0) {
-                                                       return preFix(JAVA, SINGLE_LINE_COMMENT, NONE, 2);
+                                                       return preFix(PHP, SINGLE_LINE_COMMENT, NONE, 2);
                                                } else {                                                        
-                                                       preFix(JAVA, SINGLE_LINE_COMMENT, NONE, 2);
+                                                       preFix(PHP, SINGLE_LINE_COMMENT, NONE, 2);
                                                        fTokenOffset += fTokenLength;
                                                        fTokenLength= fPrefixLength;
                                                        break;
@@ -238,9 +233,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                case '*':
                                        if (fLast == SLASH) {
                                                if (fTokenLength - getLastLength(fLast) > 0)
-                                                       return preFix(JAVA, MULTI_LINE_COMMENT, SLASH_STAR, 2);
+                                                       return preFix(PHP, MULTI_LINE_COMMENT, SLASH_STAR, 2);
                                                else {
-                                                       preFix(JAVA, MULTI_LINE_COMMENT, SLASH_STAR, 2);
+                                                       preFix(PHP, MULTI_LINE_COMMENT, SLASH_STAR, 2);
                                                        fTokenOffset += fTokenLength;
                                                        fTokenLength= fPrefixLength;
                                                        break;
@@ -254,9 +249,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                case '\'':
                                        fLast= NONE; // ignore fLast
                                        if (fTokenLength > 0)
-                                               return preFix(JAVA, CHARACTER, NONE, 1);
+                                               return preFix(PHP, STRING_SQ, NONE, 1);
                                        else {                                          
-                                               preFix(JAVA, CHARACTER, NONE, 1);
+                                               preFix(PHP, STRING_SQ, NONE, 1);
                                                fTokenOffset += fTokenLength;
                                                fTokenLength= fPrefixLength;
                                                break;
@@ -265,9 +260,9 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                case '"':
                                        fLast= NONE; // ignore fLast                            
                                        if (fTokenLength > 0)
-                                               return preFix(JAVA, STRING, NONE, 1);
+                                               return preFix(PHP, STRING_DQ, NONE, 1);
                                        else {
-                                               preFix(JAVA, STRING, NONE, 1);
+                                               preFix(PHP, STRING_DQ, NONE, 1);
                                                fTokenOffset += fTokenLength;
                                                fTokenLength= fPrefixLength;
                                                break;
@@ -283,7 +278,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                consume();
                                break;
                                
-                       case JAVADOC:
+                       case PHPDOC:
                                switch (ch) {
                                case '/':
                                        switch (fLast) {
@@ -291,7 +286,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                                return postFix(MULTI_LINE_COMMENT);
        
                                        case STAR:
-                                               return postFix(JAVADOC);
+                                               return postFix(PHPDOC);
 
                                        default:
                                                consume();
@@ -316,7 +311,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                        if (fLast == SLASH_STAR) {
                                                fLast= SLASH_STAR_STAR;
                                                fTokenLength++;
-                                               fState= JAVADOC;
+                                               fState= PHPDOC;
                                        } else {
                                                fTokenLength++;
                                                fLast= STAR;
@@ -337,7 +332,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                }
                                break;
                                
-                       case STRING:
+                       case STRING_DQ:
                                switch (ch) {
                                case '\\':
                                        fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH;
@@ -346,7 +341,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                        
                                case '\"':                                                      
                                        if (fLast != BACKSLASH) {
-                                               return postFix(STRING);
+                                               return postFix(STRING_DQ);
 
                                        } else {
                                                consume();
@@ -359,7 +354,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                                }
                                break;
        
-                       case CHARACTER:
+                       case STRING_SQ:
                                switch (ch) {
                                case '\\':
                                        fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH;
@@ -368,7 +363,7 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
        
                                case '\'':
                                        if (fLast != BACKSLASH) {
-                                               return postFix(CHARACTER);
+                                               return postFix(STRING_SQ);
        
                                        } else {
                                                consume();
@@ -414,55 +409,61 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
        private final IToken postFix(int state) {
                fTokenLength++;
                fLast= NONE;
-               fState= JAVA;
+               fState= HTML;
                fPrefixLength= 0;               
                return fTokens[state];
        }
 
        private final IToken preFix(int state, int newState, int last, int prefixLength) {
                // emulate JavaPartitionScanner
-               if (fgEmulate && state == JAVA && (fTokenLength - getLastLength(fLast) > 0)) {
-                       fTokenLength -= getLastLength(fLast);
-                       fJavaOffset= fTokenOffset;
-                       fJavaLength= fTokenLength;
-                       fTokenLength= 1;
-                       fState= newState;
-                       fPrefixLength= prefixLength;
-                       fLast= last;
-                       return fTokens[state];
-
-               } else {
+//             if (fgEmulate && state == JAVA && (fTokenLength - getLastLength(fLast) > 0)) {
+//                     fTokenLength -= getLastLength(fLast);
+//                     fJavaOffset= fTokenOffset;
+//                     fJavaLength= fTokenLength;
+//                     fTokenLength= 1;
+//                     fState= newState;
+//                     fPrefixLength= prefixLength;
+//                     fLast= last;
+//                     return fTokens[state];
+//
+//             } else {
                        fTokenLength -= getLastLength(fLast);
                        fLast= last;
                        fPrefixLength= prefixLength;
                        IToken token= fTokens[state];           
                        fState= newState;
                        return token;
-               }
+//             }
        }
 
        private static int getState(String contentType) {
 
                if (contentType == null)
-                       return JAVA;
-
-               else if (contentType.equals(JAVA_SINGLE_LINE_COMMENT))
+                       return HTML;
+               
+               else if (contentType.equals(IPHPPartitions.PHP_PARTITIONING))
+                       return PHP;
+               
+               else if (contentType.equals(IPHPPartitions.PHP_SINGLELINE_COMMENT))
                        return SINGLE_LINE_COMMENT;
 
-               else if (contentType.equals(JAVA_MULTI_LINE_COMMENT))
+               else if (contentType.equals(IPHPPartitions.PHP_MULTILINE_COMMENT))
                        return MULTI_LINE_COMMENT;
 
-               else if (contentType.equals(JAVA_DOC))
-                       return JAVADOC;
-
-               else if (contentType.equals(JAVA_STRING))
-                       return STRING;
+               else if (contentType.equals(IPHPPartitions.PHP_PHPDOC_COMMENT))
+                       return PHPDOC;
 
-               else if (contentType.equals(SKIP))
-                       return CHARACTER;
+               else if (contentType.equals(IPHPPartitions.PHP_STRING_DQ))
+                       return STRING_DQ;
+               
+               else if (contentType.equals(IPHPPartitions.PHP_STRING_SQ))
+                       return STRING_SQ;
+               
+//             else if (contentType.equals(SKIP))
+//                     return CHARACTER;
                        
                else
-                       return JAVA;
+                       return HTML;
        }
 
        /*
@@ -478,16 +479,16 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                
                if (offset == partitionOffset) {
                        // restart at beginning of partition
-                       fState= JAVA;
+                       fState= HTML;
                } else {
                        fState= getState(contentType);                  
                }
 
                // emulate JavaPartitionScanner
-               if (fgEmulate) {
-                       fJavaOffset= -1;
-                       fJavaLength= 0;
-               }
+//             if (fgEmulate) {
+//                     fJavaOffset= -1;
+//                     fJavaLength= 0;
+//             }
        }
 
        /*
@@ -500,13 +501,13 @@ public class FastJavaPartitionScanner implements IPartitionTokenScanner {
                fTokenLength= 0;                
                fPrefixLength= 0;
                fLast= NONE;
-               fState= JAVA;
+               fState= HTML;
 
                // emulate JavaPartitionScanner
-               if (fgEmulate) {
-                       fJavaOffset= -1;
-                       fJavaLength= 0;
-               }
+//             if (fgEmulate) {
+//                     fJavaOffset= -1;
+//                     fJavaLength= 0;
+//             }
        }
 
        /*