X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java index 8d0de49..a4581f8 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/php/PHPPartitionScanner.java @@ -8,7 +8,7 @@ Contributors: Igor Malinin - initial contribution - $Id: PHPPartitionScanner.java,v 1.25 2004-09-02 18:32:34 jsurfer Exp $ + $Id: PHPPartitionScanner.java,v 1.29 2005-05-15 23:24:41 axelcl Exp $ **********************************************************************/ package net.sourceforge.phpeclipse.phpeditor.php; @@ -17,7 +17,6 @@ import java.util.Map; import net.sourceforge.phpeclipse.ui.text.rules.AbstractPartitioner; -import org.eclipse.core.internal.indexing.AbstractPagePolicy; import org.eclipse.jface.text.Assert; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; @@ -32,14 +31,8 @@ import org.eclipse.jface.text.rules.Token; * @author Igor Malinin */ public class PHPPartitionScanner implements IPartitionTokenScanner { - // public static final String JSP_DIRECTIVE = "__jsp_directive"; - // public static final String JSP_COMMENT = "__jsp_comment"; - //// public static final String JSP_TAG = "__jsp_tag"; - // public static final String JSP_DECLARATION = "__jsp_declaration"; public static final String PHP_SCRIPTING_AREA = "__php_scripting_area "; - // public static final String JSP_EXPRESSION = "__jsp_expression"; - public static final int STATE_DEFAULT = 0; // public static final int STATE_TAG = 1; @@ -85,26 +78,14 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { state = STATE_DEFAULT; return getToken(null); - case '?': // <%SCRIPLET <%@DIRECTIVE <%!DECLARATION <%=EXPRESSION <%--COMMENT - int ch = read(); - // if (Character.isWhitespace((char)ch)) { - // return nextJSPToken(PHP_SCRIPTING_AREA); - // } - switch (ch) { - case ICharacterScanner.EOF: - state = STATE_DEFAULT; - return getToken(PHP_SCRIPTING_AREA); - - // case '-': // <%- <%--COMMENT - // switch (read()) { - // case ICharacterScanner.EOF: - // case '-': // <%-- - // return nextCommentToken(); - // } - // - // break; - } - + case '?': // - // ch = read(); - // switch (ch) { - // case ICharacterScanner.EOF: - // break loop; - // - // case '-': // -- --%> - // ch = read(); - // switch (ch) { - // case ICharacterScanner.EOF: - // break loop; - // - // case '%': // --% --%> - // ch = read(); - // switch (ch) { - // case ICharacterScanner.EOF: - // case '>': - // break loop; - // } - // - // continue loop; - // - // case '-': // --- ---%> - // unread(); - // continue loop; - // } - // - // ch = read(); - // continue loop; - // } - // } - // - // ch = read(); - // } - // - // return getToken(JSP_COMMENT); - // } - private IToken getToken(String type) { length = position - offset; @@ -247,6 +200,14 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { return Token.EOF; } +// if (length<0) { +// try { +// System.out.println("Length<0:"+document.get(offset,5)+""+length); +// } catch (BadLocationException e) { +// e.printStackTrace(); +// } +// } + if (type == null) { return Token.UNDEFINED; } @@ -273,57 +234,90 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { } } - private void readUntilEscaped(char ch) { - if (position >= end) { - return; - } + private boolean readUntilEscapedDQ() { + // search last double quoted character try { + char ch; while (true) { - if (document.getChar(position++) == ch) { - if (position < 2 || document.getChar(position - 2) != '\\') { - break; + if (position >= end) { + return false; + } + ch = document.getChar(position++); + if (ch == '\\') { + if (position >= end) { + return false; } + ch = document.getChar(position++); // ignore escaped character + } else if (ch == '"') { + return true; } } } catch (BadLocationException e) { --position; - return; } + return false; } - - private void readSingleLine() { - if (position >= end) { - return; - } - try { - while (document.getChar(position++) != '\n') { - + + private boolean readUntilEscapedSQ() { + // search last single quoted character + try { + char ch; + while (true) { + if (position >= end) { + return false; + } + ch = document.getChar(position++); + if (ch == '\\') { + if (position >= end) { + return false; + } + ch = document.getChar(position++); // ignore escaped character + } else if (ch == '\'') { + return true; + } } } catch (BadLocationException e) { --position; - return; } + return false; } - private void readMultiLineComment() { - if (position >= end) { - return; + private boolean readSingleLine() { + try { + do { + if (position >= end) { + return false; + } + } while (document.getChar(position++) != '\n'); + return true; + } catch (BadLocationException e) { + --position; } + return false; + } + + private boolean readMultiLineComment() { try { char ch; while (true) { + if (position >= end) { + return false; + } ch = document.getChar(position++); if (ch == '*') { + if (position >= end) { + return false; + } if (document.getChar(position) == '/') { position++; - break; + return true; } } } } catch (BadLocationException e) { --position; - return; } + return false; } private void unread() { @@ -365,13 +359,13 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { */ public void setPartialRange(IDocument document, int offset, int length, String contentType, int partitionOffset) { state = STATE_DEFAULT; - // if (partitionOffset > -1) { - // int delta= offset - partitionOffset; - // if (delta > 0) { - // this.setRange(document, partitionOffset, length + delta); - // return; - // } - // } + if (partitionOffset > -1) { + int delta = offset - partitionOffset; + if (delta > 0) { + setRange(document, partitionOffset, length + delta); + return; + } + } setRange(document, partitionOffset, length); }