X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java index 41246b6..70f5461 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/FastJavaPartitionScanner.java @@ -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; +// } } /*