package tk.eclipse.plugin.htmleditor.editors;
import org.eclipse.jface.text.rules.ICharacterScanner;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
/**
* @author Naoki Takezoe
*/
public class DocTypeRule extends MultiLineRule {
public DocTypeRule(IToken token){
super("<!DOCTYPE", ">", token);
}
@Override
protected boolean endSequenceDetected(ICharacterScanner scanner) {
int c;
boolean quoted = false;
char[][] delimiters= scanner.getLegalLineDelimiters();
boolean previousWasEscapeCharacter = false;
while ((c= scanner.read()) != ICharacterScanner.EOF) {
if (c == fEscapeCharacter) {
// Skip the escaped character.
scanner.read();
} else if(c=='['){
quoted = true;
} else if(c==']'){
quoted = false;
} else if (fEndSequence.length > 0 && c == fEndSequence[0]) {
// Check if the specified end sequence has been found.
if (quoted==false && sequenceDetected(scanner, fEndSequence, true))
return true;
} else if (fBreaksOnEOL) {
// Check for end of line since it can be used to terminate the pattern.
for (int i= 0; i < delimiters.length; i++) {
if (c == delimiters[i][0] && sequenceDetected(scanner, delimiters[i], true)) {
if (!fEscapeContinuesLine || !previousWasEscapeCharacter)
return true;
}
}
}
previousWasEscapeCharacter = (c == fEscapeCharacter);
}
if (fBreaksOnEOF) return true;
scanner.unread();
return false;
}
}