X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaHeuristicScanner.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaHeuristicScanner.java index 6bea251..e68f3c2 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaHeuristicScanner.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/text/JavaHeuristicScanner.java @@ -13,13 +13,16 @@ package net.sourceforge.phpdt.internal.ui.text; import java.util.Arrays; import net.sourceforge.phpdt.internal.compiler.parser.Scanner; +import net.sourceforge.phpeclipse.phpeditor.php.PHPDocumentPartitioner; -import org.eclipse.jface.text.Assert; +//incastrix +//import org.eclipse.jface.text.Assert; +import org.eclipse.core.runtime.Assert; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; +//import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITypedRegion; -import org.eclipse.jface.text.Region; +//import org.eclipse.jface.text.Region; import org.eclipse.jface.text.TextUtilities; /** @@ -327,8 +330,10 @@ public class JavaHeuristicScanner implements Symbols { * the document to scan. */ public JavaHeuristicScanner(IDocument document) { +// this(document, IPHPPartitions.PHP_PARTITIONING, +// IDocument.DEFAULT_CONTENT_TYPE); this(document, IPHPPartitions.PHP_PARTITIONING, - IDocument.DEFAULT_CONTENT_TYPE); + PHPDocumentPartitioner.PHP_SCRIPT_CODE); } /** @@ -380,7 +385,25 @@ public class JavaHeuristicScanner implements Symbols { case QUESTIONMARK: return TokenQUESTIONMARK; case EQUAL: + try { + if (fDocument.getChar(fPos) == '>') { + fPos++; + return TokenOTHER; + } + } catch (BadLocationException e) { + } return TokenEQUAL; + case '<': + try { + if (fDocument.get(fPos, 4).equalsIgnoreCase("?php")) { + fPos += 4; + return TokenEOF; + } else if (fDocument.getChar(fPos) == '?') { + fPos++; + return TokenEOF; + } + } catch (BadLocationException e) { + } } // else @@ -451,6 +474,18 @@ public class JavaHeuristicScanner implements Symbols { return TokenQUESTIONMARK; case EQUAL: return TokenEQUAL; + case '>': + try { + switch (fDocument.getChar(fPos)) { + case '=': + fPos--; + return TokenOTHER; + case '?': + fPos--; + return TokenEOF; + } + } catch (BadLocationException e) { + } } // else @@ -644,16 +679,16 @@ public class JavaHeuristicScanner implements Symbols { * @return a region describing the surrounding block, or null * if none can be found */ - public IRegion findSurroundingBlock(int offset) { - if (offset < 1 || offset >= fDocument.getLength()) - return null; - - int begin = findOpeningPeer(offset - 1, LBRACE, RBRACE); - int end = findClosingPeer(offset, LBRACE, RBRACE); - if (begin == NOT_FOUND || end == NOT_FOUND) - return null; - return new Region(begin, end + 1 - begin); - } +// public IRegion findSurroundingBlock(int offset) { +// if (offset < 1 || offset >= fDocument.getLength()) +// return null; +// +// int begin = findOpeningPeer(offset - 1, LBRACE, RBRACE); +// int end = findClosingPeer(offset, LBRACE, RBRACE); +// if (begin == NOT_FOUND || end == NOT_FOUND) +// return null; +// return new Region(begin, end + 1 - begin); +// } /** * Finds the smallest position in fDocument such that the @@ -673,9 +708,9 @@ public class JavaHeuristicScanner implements Symbols { * bound) that resides in a Java partition, or * NOT_FOUND if none can be found */ - public int findNonWhitespaceForward(int position, int bound) { - return scanForward(position, bound, fNonWSDefaultPart); - } +// public int findNonWhitespaceForward(int position, int bound) { +// return scanForward(position, bound, fNonWSDefaultPart); +// } /** * Finds the smallest position in fDocument such that the @@ -716,9 +751,9 @@ public class JavaHeuristicScanner implements Symbols { * position] that resides in a Java partition, or * NOT_FOUND if none can be found */ - public int findNonWhitespaceBackward(int position, int bound) { - return scanBackward(position, bound, fNonWSDefaultPart); - } +// public int findNonWhitespaceBackward(int position, int bound) { +// return scanBackward(position, bound, fNonWSDefaultPart); +// } /** * Finds the lowest position p in fDocument @@ -752,6 +787,15 @@ public class JavaHeuristicScanner implements Symbols { while (fPos < bound) { fChar = fDocument.getChar(fPos); + // omit closing tag + if (fChar == '?') { + if (fPos < fDocument.getLength() - 1) { + if (fDocument.get(fPos - 1, 2).equalsIgnoreCase("?>")) { + fPos++; + return NOT_FOUND; + } + } + } if (condition.stop(fChar, fPos, true)) return fPos; @@ -781,9 +825,9 @@ public class JavaHeuristicScanner implements Symbols { * position] that resides in a Java partition, or * NOT_FOUND if none can be found */ - public int scanForward(int position, int bound, char ch) { - return scanForward(position, bound, new CharacterMatch(ch)); - } +// public int scanForward(int position, int bound, char ch) { +// return scanForward(position, bound, new CharacterMatch(ch)); +// } /** * Finds the lowest position in fDocument such that the @@ -805,9 +849,9 @@ public class JavaHeuristicScanner implements Symbols { * bound) that resides in a Java partition, or * NOT_FOUND if none can be found */ - public int scanForward(int position, int bound, char[] chars) { - return scanForward(position, bound, new CharacterMatch(chars)); - } +// public int scanForward(int position, int bound, char[] chars) { +// return scanForward(position, bound, new CharacterMatch(chars)); +// } /** * Finds the highest position p in fDocument @@ -841,6 +885,22 @@ public class JavaHeuristicScanner implements Symbols { while (fPos > bound) { fChar = fDocument.getChar(fPos); + // omit opening tag + if (fChar == 'p' || fChar == 'P') { + if (fPos >= 4) { + if (fDocument.get(fPos - 4, 5).equalsIgnoreCase("= 1) { + if (fDocument.get(fPos - 1, 2).equalsIgnoreCase("position] that resides in a Java partition, or * NOT_FOUND if none can be found */ - public int scanBackward(int position, int bound, char ch) { - return scanBackward(position, bound, new CharacterMatch(ch)); - } +// public int scanBackward(int position, int bound, char ch) { +// return scanBackward(position, bound, new CharacterMatch(ch)); +// } /** * Finds the highest position in fDocument such that the @@ -895,9 +955,9 @@ public class JavaHeuristicScanner implements Symbols { * position] that resides in a Java partition, or * NOT_FOUND if none can be found */ - public int scanBackward(int position, int bound, char[] chars) { - return scanBackward(position, bound, new CharacterMatch(chars)); - } +// public int scanBackward(int position, int bound, char[] chars) { +// return scanBackward(position, bound, new CharacterMatch(chars)); +// } /** * Checks whether position resides in a default (Java)