package melnorme.lang.ide.core_text; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.PatternRule; import org.eclipse.jface.text.rules.Token; /** * This is a workaround for this {@link PatternRule} bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=409538 * * We'll have to keep using this workaround indefinetely unless/until the time comes * where platform 4.3.1 is specified as a minimum requirement */ public class PatternRule_Fixed extends PatternRule { public PatternRule_Fixed(String startSequence, String endSequence, IToken token, char escapeCharacter, boolean breaksOnEOL, boolean breaksOnEOF) { super(startSequence, endSequence, token, escapeCharacter, breaksOnEOL, breaksOnEOF); } public PatternRule_Fixed(String startSequence, String endSequence, IToken token, char escapeCharacter, boolean breaksOnEOL) { this(startSequence, endSequence, token, escapeCharacter, breaksOnEOL, false); } @Override protected IToken doEvaluate(ICharacterScanner scanner, boolean resume) { if (resume) { if (endSequenceDetected(scanner)) return fToken; } else { int c= scanner.read(); if (c == fStartSequence[0]) { if (sequenceDetected(scanner, fStartSequence, false)) { if (endSequenceDetected(scanner)) return fToken; } } } scanner.unread(); return Token.UNDEFINED; } }