X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.xml.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLPartitionScanner.java b/net.sourceforge.phpeclipse.xml.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLPartitionScanner.java index fd44b54..eca1657 100644 --- a/net.sourceforge.phpeclipse.xml.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLPartitionScanner.java +++ b/net.sourceforge.phpeclipse.xml.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLPartitionScanner.java @@ -8,7 +8,7 @@ * Contributors: * Igor Malinin - initial contribution * - * $Id: XMLPartitionScanner.java,v 1.4 2006-01-15 12:24:16 bananeweizen Exp $ + * $Id: XMLPartitionScanner.java,v 1.5 2006-10-21 23:14:13 pombredanne Exp $ */ package net.sourceforge.phpeclipse.xml.ui.internal.text; @@ -24,40 +24,54 @@ import org.eclipse.jface.text.rules.IPartitionTokenScanner; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; - /** - * - * + * + * * @author Igor Malinin */ public class XMLPartitionScanner implements IPartitionTokenScanner { - public static final String XML_PI = "__xml_processing_instruction"; - public static final String XML_COMMENT = "__xml_comment"; - public static final String XML_DECL = "__xml_declaration"; - public static final String XML_TAG = "__xml_tag"; - public static final String XML_ATTRIBUTE = "__xml_attribute"; - public static final String XML_CDATA = "__xml_cdata"; - - public static final String DTD_INTERNAL = "__dtd_internal"; - public static final String DTD_INTERNAL_PI = "__dtd_internal_pi"; + public static final String XML_PI = "__xml_processing_instruction"; + + public static final String XML_COMMENT = "__xml_comment"; + + public static final String XML_DECL = "__xml_declaration"; + + public static final String XML_TAG = "__xml_tag"; + + public static final String XML_ATTRIBUTE = "__xml_attribute"; + + public static final String XML_CDATA = "__xml_cdata"; + + public static final String DTD_INTERNAL = "__dtd_internal"; + + public static final String DTD_INTERNAL_PI = "__dtd_internal_pi"; + public static final String DTD_INTERNAL_COMMENT = "__dtd_internal_comment"; - public static final String DTD_INTERNAL_DECL = "__dtd_internal_declaration"; - public static final String DTD_CONDITIONAL = "__dtd_conditional"; - public static final int STATE_DEFAULT = 0; - public static final int STATE_TAG = 1; - public static final int STATE_DECL = 2; - public static final int STATE_CDATA = 4; + public static final String DTD_INTERNAL_DECL = "__dtd_internal_declaration"; + + public static final String DTD_CONDITIONAL = "__dtd_conditional"; + + public static final int STATE_DEFAULT = 0; - public static final int STATE_INTERNAL = 8; + public static final int STATE_TAG = 1; + + public static final int STATE_DECL = 2; + + public static final int STATE_CDATA = 4; + + public static final int STATE_INTERNAL = 8; protected IDocument document; + protected int end; protected int offset; + protected int length; protected int position; + protected int state; protected boolean parsedtd; @@ -75,125 +89,124 @@ public class XMLPartitionScanner implements IPartitionTokenScanner { offset += length; switch (state) { - case STATE_TAG: - return nextTagToken(); + case STATE_TAG: + return nextTagToken(); - case STATE_DECL: - return nextDeclToken(); + case STATE_DECL: + return nextDeclToken(); - case STATE_CDATA: - return nextCDATAToken(); + case STATE_CDATA: + return nextCDATAToken(); } switch (read()) { + case ICharacterScanner.EOF: + state = STATE_DEFAULT; + return getToken(null); + + case '<': + switch (read()) { case ICharacterScanner.EOF: + if (parsedtd || isInternal()) { + break; + } + state = STATE_DEFAULT; - return getToken(null); + return getToken(XML_TAG); - case '<': + case '?': // ': - state = STATE_DEFAULT; - return getToken(XML_TAG); + case ICharacterScanner.EOF: + case '>': + state = STATE_DEFAULT; + return getToken(XML_TAG); - case '"': case '\'': - while (true) { - int ch = read(); + case '"': + case '\'': + while (true) { + int ch = read(); - if (ch == quot) { - state = STATE_TAG; - return getToken(XML_ATTRIBUTE); - } + if (ch == quot) { + state = STATE_TAG; + return getToken(XML_ATTRIBUTE); + } - switch (ch) { - case '<': - unread(); + switch (ch) { + case '<': + unread(); - case ICharacterScanner.EOF: - state = STATE_DEFAULT; - return getToken(XML_ATTRIBUTE); - } + case ICharacterScanner.EOF: + state = STATE_DEFAULT; + return getToken(XML_ATTRIBUTE); } - default: - unread(); + } + default: + unread(); } while (true) { switch (read()) { - case '<': - unread(); + case '<': + unread(); - case ICharacterScanner.EOF: - case '>': - state = STATE_DEFAULT; - return getToken(XML_TAG); + case ICharacterScanner.EOF: + case '>': + state = STATE_DEFAULT; + return getToken(XML_TAG); - case '"': case '\'': - unread(); + case '"': + case '\'': + unread(); - state = STATE_TAG; - return getToken(XML_TAG); + state = STATE_TAG; + return getToken(XML_TAG); } } } @@ -251,38 +266,38 @@ loop: private IToken nextDeclToken() { loop: while (true) { switch (read()) { - case ICharacterScanner.EOF: - state = STATE_DEFAULT; - return getToken(isInternal() ? DTD_INTERNAL_DECL : XML_DECL); + case ICharacterScanner.EOF: + state = STATE_DEFAULT; + return getToken(isInternal() ? DTD_INTERNAL_DECL : XML_DECL); - case '<': - if (parsedtd || isInternal()) { - switch (read()) { - case ICharacterScanner.EOF: - state = STATE_DEFAULT; - return getToken(isInternal() ? DTD_INTERNAL : null); - - case '!': - case '?': - unread(); - break; - - default: - continue loop; - } + case '<': + if (parsedtd || isInternal()) { + switch (read()) { + case ICharacterScanner.EOF: + state = STATE_DEFAULT; + return getToken(isInternal() ? DTD_INTERNAL : null); + + case '!': + case '?': + unread(); + break; + + default: + continue loop; } + } - unread(); + unread(); - case '>': - state &= STATE_INTERNAL; - return getToken(isInternal() ? DTD_INTERNAL_DECL : XML_DECL); + case '>': + state &= STATE_INTERNAL; + return getToken(isInternal() ? DTD_INTERNAL_DECL : XML_DECL); - case '[': // - if (!isInternal()) { - state = STATE_INTERNAL; - return getToken(XML_DECL); - } + case '[': // + if (!isInternal()) { + state = STATE_INTERNAL; + return getToken(XML_DECL); + } } } } @@ -292,24 +307,24 @@ loop: loop: while (true) { switch (read()) { + case ICharacterScanner.EOF: + break loop; + + case '-': // - --> + switch (read()) { case ICharacterScanner.EOF: break loop; - case '-': // - --> + case '-': // -- --> switch (read()) { - case ICharacterScanner.EOF: - break loop; - - case '-': // -- --> - switch (read()) { - case ICharacterScanner.EOF: - case '>': - break loop; - } - - unread(); - continue loop; + case ICharacterScanner.EOF: + case '>': + break loop; } + + unread(); + continue loop; + } } } @@ -321,17 +336,17 @@ loop: loop: while (true) { switch (read()) { + case ICharacterScanner.EOF: + break loop; + + case '?': // ? ?> + switch (read()) { case ICharacterScanner.EOF: + case '>': break loop; + } - case '?': // ? ?> - switch (read()) { - case ICharacterScanner.EOF: - case '>': - break loop; - } - - unread(); + unread(); } } @@ -341,28 +356,27 @@ loop: private IToken nextCDATAToken() { state = STATE_DEFAULT; -loop: - while (true) { + loop: while (true) { switch (read()) { + case ICharacterScanner.EOF: + break loop; + + case ']': // ] ]]> + switch (read()) { case ICharacterScanner.EOF: break loop; - case ']': // ] ]]> + case ']': // ]] ]]> switch (read()) { - case ICharacterScanner.EOF: - break loop; - - case ']': // ]] ]]> - switch (read()) { - case ICharacterScanner.EOF: - case '>': // ]]> - break loop; - } - - unread(); - unread(); - continue loop; + case ICharacterScanner.EOF: + case '>': // ]]> + break loop; } + + unread(); + unread(); + continue loop; + } } } @@ -374,54 +388,53 @@ loop: int level = 1; -loop: - while (true) { + loop: while (true) { switch (read()) { + case ICharacterScanner.EOF: + break loop; + + case '<': // - --> + switch (read()) { case ICharacterScanner.EOF: break loop; - case '<': // - --> + case '!': // -- --> switch (read()) { - case ICharacterScanner.EOF: - break loop; - - case '!': // -- --> - switch (read()) { - case ICharacterScanner.EOF: - break loop; - - case '[': - ++level; - continue loop; - } + case ICharacterScanner.EOF: + break loop; - unread(); - continue loop; + case '[': + ++level; + continue loop; } unread(); continue loop; + } - case ']': // - --> - switch (read()) { - case ICharacterScanner.EOF: - break loop; + unread(); + continue loop; - case ']': // -- --> - switch (read()) { - case ICharacterScanner.EOF: - case '>': - if (--level == 0) { - break loop; - } + case ']': // - --> + switch (read()) { + case ICharacterScanner.EOF: + break loop; - continue loop; - } + case ']': // -- --> + switch (read()) { + case ICharacterScanner.EOF: + case '>': + if (--level == 0) { + break loop; + } - unread(); - unread(); - continue loop; + continue loop; } + + unread(); + unread(); + continue loop; + } } } @@ -473,7 +486,7 @@ loop: * @see org.eclipse.jface.text.rules.ITokenScanner#getTokenOffset() */ public int getTokenOffset() { - Assert.isTrue(offset>=0, Integer.toString(offset)); + Assert.isTrue(offset >= 0, Integer.toString(offset)); return offset; } @@ -485,7 +498,8 @@ loop: } /* - * @see org.eclipse.jface.text.rules.ITokenScanner#setRange(IDocument, int, int) + * @see org.eclipse.jface.text.rules.ITokenScanner#setRange(IDocument, int, + * int) */ public void setRange(IDocument document, int offset, int length) { this.document = document; @@ -495,48 +509,47 @@ loop: this.position = offset; this.length = 0; - this.state = STATE_DEFAULT; + this.state = STATE_DEFAULT; } /* - * @see org.eclipse.jface.text.rules.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) { -// setRange(document, partitionOffset, length + delta); -// return; -// } -// } -// setRange(document, partitionOffset, length); -// } + * @see org.eclipse.jface.text.rules.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) { + // setRange(document, partitionOffset, length + delta); + // return; + // } + // } + // setRange(document, partitionOffset, length); + // } /* * @see org.eclipse.jface.text.rules.IPartitionTokenScanner */ - public void setPartialRange( - IDocument document, int offset, int length, - String contentType, int partitionOffset - ) { -// boolean flag = false; + public void setPartialRange(IDocument document, int offset, int length, + String contentType, int partitionOffset) { + // boolean flag = false; this.document = document; this.end = offset + length; // NB! Undocumented value: -1 if (partitionOffset >= 0) { offset = partitionOffset; -// flag = true; + // flag = true; } this.offset = offset; this.position = offset; this.length = 0; -// if (flag) { -// state = STATE_DEFAULT; -// return; -// } + // if (flag) { + // state = STATE_DEFAULT; + // return; + // } if (contentType == XML_ATTRIBUTE) { state = STATE_TAG; return; @@ -552,11 +565,9 @@ loop: return; } - if (contentType == DTD_INTERNAL || - contentType == DTD_INTERNAL_PI || - contentType == DTD_INTERNAL_DECL || - contentType == DTD_INTERNAL_COMMENT - ) { + if (contentType == DTD_INTERNAL || contentType == DTD_INTERNAL_PI + || contentType == DTD_INTERNAL_DECL + || contentType == DTD_INTERNAL_COMMENT) { state = STATE_INTERNAL; return; } @@ -571,7 +582,8 @@ loop: if (type != IDocument.DEFAULT_CONTENT_TYPE) { return true; } - } catch (BadLocationException e) {} + } catch (BadLocationException e) { + } return false; }