*/
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;
/** 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;
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;
}
case '\r':
- // emulate JavaPartitionScanner
- if (!fgEmulate && fLast != CARRIAGE_RETURN) {
+ if ( fLast != CARRIAGE_RETURN) {
fLast= CARRIAGE_RETURN;
fTokenLength++;
continue;
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 {
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);
}
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;
}
// 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;
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;
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;
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;
consume();
break;
- case JAVADOC:
+ case PHPDOC:
switch (ch) {
case '/':
switch (fLast) {
return postFix(MULTI_LINE_COMMENT);
case STAR:
- return postFix(JAVADOC);
+ return postFix(PHPDOC);
default:
consume();
if (fLast == SLASH_STAR) {
fLast= SLASH_STAR_STAR;
fTokenLength++;
- fState= JAVADOC;
+ fState= PHPDOC;
} else {
fTokenLength++;
fLast= STAR;
}
break;
- case STRING:
+ case STRING_DQ:
switch (ch) {
case '\\':
fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH;
case '\"':
if (fLast != BACKSLASH) {
- return postFix(STRING);
+ return postFix(STRING_DQ);
} else {
consume();
}
break;
- case CHARACTER:
+ case STRING_SQ:
switch (ch) {
case '\\':
fLast= (fLast == BACKSLASH) ? NONE : BACKSLASH;
case '\'':
if (fLast != BACKSLASH) {
- return postFix(CHARACTER);
+ return postFix(STRING_SQ);
} else {
consume();
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;
}
/*
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;
+// }
}
/*
fTokenLength= 0;
fPrefixLength= 0;
fLast= NONE;
- fState= JAVA;
+ fState= HTML;
// emulate JavaPartitionScanner
- if (fgEmulate) {
- fJavaOffset= -1;
- fJavaLength= 0;
- }
+// if (fgEmulate) {
+// fJavaOffset= -1;
+// fJavaLength= 0;
+// }
}
/*