X-Git-Url: http://secure.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 1ac320c..2cb2eb9 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 @@ -6,7 +6,7 @@ * Created on 05.03.2003 * * @author Stefan Langer (musk) - * @version $Revision: 1.21 $ + * @version $Revision: 1.24 $ */ package net.sourceforge.phpeclipse.phpeditor.php; @@ -14,6 +14,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import net.sourceforge.phpdt.internal.ui.text.*; + import org.eclipse.jface.text.Assert; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; @@ -33,8 +35,8 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { private boolean fInDoubString = false; private IDocument fDocument = null; private int fOffset = -1; - private String fContentType = IPHPPartitionScannerConstants.HTML; - private String fPrevContentType = IPHPPartitionScannerConstants.HTML; + private String fContentType = IPHPPartitions.HTML; + private String fPrevContentType = IPHPPartitions.HTML; private boolean partitionBorder = false; private int fTokenOffset; private int fEnd = -1; @@ -43,20 +45,25 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { private int fFileType; private Map tokens = new HashMap(); + public PHPPartitionScanner() { + this(IPHPPartitions.PHP_FILE); + } + public PHPPartitionScanner(int fileType) { - this.tokens.put(IPHPPartitionScannerConstants.PHP, new Token(IPHPPartitionScannerConstants.PHP)); + this.tokens.put(IPHPPartitions.PHP_PARTITIONING, new Token(IPHPPartitions.PHP_PARTITIONING)); + this.tokens.put(IPHPPartitions.PHP_STRING_DQ, new Token(IPHPPartitions.PHP_STRING_DQ)); this.tokens.put( - IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT, - new Token(IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT)); - this.tokens.put(IPHPPartitionScannerConstants.HTML, new Token(IPHPPartitionScannerConstants.HTML)); + IPHPPartitions.PHP_PHPDOC_COMMENT, + new Token(IPHPPartitions.PHP_PHPDOC_COMMENT)); + this.tokens.put(IPHPPartitions.HTML, new Token(IPHPPartitions.HTML)); this.tokens.put( - IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT, - new Token(IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT)); + IPHPPartitions.HTML_MULTILINE_COMMENT, + new Token(IPHPPartitions.HTML_MULTILINE_COMMENT)); - this.tokens.put(IPHPPartitionScannerConstants.SMARTY, new Token(IPHPPartitionScannerConstants.SMARTY)); + this.tokens.put(IPHPPartitions.SMARTY, new Token(IPHPPartitions.SMARTY)); this.tokens.put( - IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT, - new Token(IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT)); + IPHPPartitions.SMARTY_MULTILINE_COMMENT, + new Token(IPHPPartitions.SMARTY_MULTILINE_COMMENT)); this.tokens.put(IDocument.DEFAULT_CONTENT_TYPE, new Token(IDocument.DEFAULT_CONTENT_TYPE)); fFileType = fileType; @@ -154,82 +161,82 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { while ((c = read()) != ICharacterScanner.EOF) { switch (c) { case '<' : - if (!isInString(IPHPPartitionScannerConstants.PHP) - && fContentType != IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT + if (!isInString(IPHPPartitions.PHP_PARTITIONING) + && fContentType != IPHPPartitions.PHP_PHPDOC_COMMENT && checkPattern(new char[] { '?', 'p', 'h', 'p' }, true)) { - if (fContentType != IPHPPartitionScannerConstants.PHP && fCurrentLength > 5) { + if (fContentType != IPHPPartitions.PHP_PARTITIONING && fCurrentLength > 5) { unread(5); IToken token = getToken(fContentType); // save previouse contenttype //TODO build stack for previouse contenttype fPrevContentType = fContentType; - fContentType = IPHPPartitionScannerConstants.PHP; + fContentType = IPHPPartitions.PHP_PARTITIONING; return token; } else - fContentType = IPHPPartitionScannerConstants.PHP; + fContentType = IPHPPartitions.PHP_PARTITIONING; // remember offset of this partition fTokenOffset = fOffset - 5; fCurrentLength = 5; } else if ( - !isInString(IPHPPartitionScannerConstants.PHP) - && fContentType != IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT + !isInString(IPHPPartitions.PHP_PARTITIONING) + && fContentType != IPHPPartitions.PHP_PHPDOC_COMMENT && checkPattern(new char[] { '?' }, false)) { - if (fContentType != IPHPPartitionScannerConstants.PHP && fCurrentLength > 2) { + if (fContentType != IPHPPartitions.PHP_PARTITIONING && fCurrentLength > 2) { unread(2); IToken token = getToken(fContentType); // save previouse contenttype fPrevContentType = fContentType; - fContentType = IPHPPartitionScannerConstants.PHP; + fContentType = IPHPPartitions.PHP_PARTITIONING; return token; } else - fContentType = IPHPPartitionScannerConstants.PHP; + fContentType = IPHPPartitions.PHP_PARTITIONING; // remember offset of this partition fTokenOffset = fOffset - 2; fCurrentLength = 2; } else if ( - !isInString(IPHPPartitionScannerConstants.PHP) - && (fContentType != IPHPPartitionScannerConstants.PHP) // BUG #769044 - && (fContentType != IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT) // BUG #769044 + !isInString(IPHPPartitions.PHP_PARTITIONING) + && (fContentType != IPHPPartitions.PHP_PARTITIONING) // BUG #769044 + && (fContentType != IPHPPartitions.PHP_PHPDOC_COMMENT) // BUG #769044 && checkPattern(new char[] { '!', '-', '-' })) { // return previouse partition - if (fContentType != IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT && fCurrentLength > 4) { + if (fContentType != IPHPPartitions.HTML_MULTILINE_COMMENT && fCurrentLength > 4) { unread(4); IToken token = getToken(fContentType); - fContentType = IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT; + fContentType = IPHPPartitions.HTML_MULTILINE_COMMENT; return token; } else - fContentType = IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT; + fContentType = IPHPPartitions.HTML_MULTILINE_COMMENT; fTokenOffset = fOffset - 4; fCurrentLength = 4; } break; case '?' : - if (!isInString(IPHPPartitionScannerConstants.PHP) && fContentType == IPHPPartitionScannerConstants.PHP) { + if (!isInString(IPHPPartitions.PHP_PARTITIONING) && fContentType == IPHPPartitions.PHP_PARTITIONING) { if ((c = read()) == '>') { if (fPrevContentType != null) fContentType = fPrevContentType; else - fContentType = IPHPPartitionScannerConstants.HTML; + fContentType = IPHPPartitions.HTML; partitionBorder = true; - return getToken(IPHPPartitionScannerConstants.PHP); + return getToken(IPHPPartitions.PHP_PARTITIONING); } else if (c != ICharacterScanner.EOF) unread(); } break; case '-' : - if (!isInString(IPHPPartitionScannerConstants.PHP) - && fContentType == IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT + if (!isInString(IPHPPartitions.PHP_PARTITIONING) + && fContentType == IPHPPartitions.HTML_MULTILINE_COMMENT && checkPattern(new char[] { '-', '>' })) { - fContentType = IPHPPartitionScannerConstants.HTML; + fContentType = IPHPPartitions.HTML; partitionBorder = true; - return getToken(IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT); + return getToken(IPHPPartitions.HTML_MULTILINE_COMMENT); } break; case '{' : // SMARTY code starts here ? - if (fFileType == IPHPPartitionScannerConstants.SMARTY_FILE) { + if (fFileType == IPHPPartitions.SMARTY_FILE) { if ((c = read()) == '*') { if (DEBUG) { System.out.println( @@ -244,16 +251,16 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { + " fCurrentLength=" + fCurrentLength); } - if (fContentType != IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT && fCurrentLength > 2) { + if (fContentType != IPHPPartitions.SMARTY_MULTILINE_COMMENT && fCurrentLength > 2) { // SMARTY doc code starts here unread(2); IToken token = getToken(fContentType); - fContentType = IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT; + fContentType = IPHPPartitions.SMARTY_MULTILINE_COMMENT; return token; // } else if (fContentType == IPHPPartitionScannerConstants.HTML && fOffset == 2) { // fContentType = IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT; } else { // if (fContentType == IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT) { - fContentType = IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT; + fContentType = IPHPPartitions.SMARTY_MULTILINE_COMMENT; fTokenOffset = fOffset - 2; fCurrentLength = 2; } @@ -273,22 +280,22 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { if (c != ICharacterScanner.EOF) { unread(); } - if (fContentType != IPHPPartitionScannerConstants.SMARTY && fCurrentLength > 1) { + if (fContentType != IPHPPartitions.SMARTY && fCurrentLength > 1) { unread(1); IToken token = getToken(fContentType); - fContentType = IPHPPartitionScannerConstants.SMARTY; + fContentType = IPHPPartitions.SMARTY; return token; // } else if (fContentType == IPHPPartitionScannerConstants.HTML && fOffset==1) { // fContentType = IPHPPartitionScannerConstants.SMARTY; } else { - fContentType = IPHPPartitionScannerConstants.SMARTY; + fContentType = IPHPPartitions.SMARTY; fTokenOffset = fOffset - 1; fCurrentLength = 1; } } break; case '}' : // SMARTY code ends here ? - if (fFileType == IPHPPartitionScannerConstants.SMARTY_FILE && fContentType == IPHPPartitionScannerConstants.SMARTY) { + if (fFileType == IPHPPartitions.SMARTY_FILE && fContentType == IPHPPartitions.SMARTY) { if (DEBUG) { System.out.println( "SMARTY_TOKEN end " @@ -300,36 +307,36 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { + " fOffset=" + fOffset); } - fContentType = IPHPPartitionScannerConstants.HTML; + fContentType = IPHPPartitions.HTML; partitionBorder = true; - return getToken(IPHPPartitionScannerConstants.SMARTY); + return getToken(IPHPPartitions.SMARTY); } break; case '/' : - if (!isInString(IPHPPartitionScannerConstants.PHP) && (c = read()) == '*') { // MULTINE COMMENT JAVASCRIPT, CSS, PHP - if (fContentType == IPHPPartitionScannerConstants.PHP && fCurrentLength > 2) { + if (!isInString(IPHPPartitions.PHP_PARTITIONING) && (c = read()) == '*') { // MULTINE COMMENT JAVASCRIPT, CSS, PHP + if (fContentType == IPHPPartitions.PHP_PARTITIONING && fCurrentLength > 2) { unread(2); IToken token = getToken(fContentType); - fContentType = IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT; + fContentType = IPHPPartitions.PHP_PHPDOC_COMMENT; return token; - } else if (fContentType == IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT) { + } else if (fContentType == IPHPPartitions.PHP_PHPDOC_COMMENT) { fTokenOffset = fOffset - 2; fCurrentLength = 2; } - } else if (!isInString(IPHPPartitionScannerConstants.PHP) && c != ICharacterScanner.EOF) + } else if (!isInString(IPHPPartitions.PHP_PARTITIONING) && c != ICharacterScanner.EOF) unread(); break; case '*' : - if (!isInString(IPHPPartitionScannerConstants.PHP) && (c = read()) == '/') { - if (fContentType == IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT) { - fContentType = IPHPPartitionScannerConstants.PHP; + if (!isInString(IPHPPartitions.PHP_PARTITIONING) && (c = read()) == '/') { + if (fContentType == IPHPPartitions.PHP_PHPDOC_COMMENT) { + fContentType = IPHPPartitions.PHP_PARTITIONING; partitionBorder = true; - return getToken(IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT); - } else if (fContentType == IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT) { - } else if (fContentType == IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT) { + return getToken(IPHPPartitions.PHP_PHPDOC_COMMENT); + } else if (fContentType == IPHPPartitions.CSS_MULTILINE_COMMENT) { + } else if (fContentType == IPHPPartitions.JS_MULTILINE_COMMENT) { } - } else if (fFileType == IPHPPartitionScannerConstants.SMARTY_FILE && (c = read()) == '}') { + } else if (fFileType == IPHPPartitions.SMARTY_FILE && (c = read()) == '}') { if (DEBUG) { System.out.println( "SMARTYDOC_TOKEN end " @@ -341,12 +348,12 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { + " fOffset=" + fOffset); } - if (fContentType == IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT) { - fContentType = IPHPPartitionScannerConstants.HTML; + if (fContentType == IPHPPartitions.SMARTY_MULTILINE_COMMENT) { + fContentType = IPHPPartitions.HTML; partitionBorder = true; - return getToken(IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT); + return getToken(IPHPPartitions.SMARTY_MULTILINE_COMMENT); } - } else if (!isInString(IPHPPartitionScannerConstants.PHP) && c != ICharacterScanner.EOF) { + } else if (!isInString(IPHPPartitions.PHP_PARTITIONING) && c != ICharacterScanner.EOF) { unread(); } break; @@ -380,7 +387,7 @@ public class PHPPartitionScanner implements IPartitionTokenScanner { fEnd = fOffset + length; fInString = false; fInDoubString = false; - fContentType = IPHPPartitionScannerConstants.HTML; + fContentType = IPHPPartitions.HTML; // String[] prev = getPartitionStack(offset); }