/******************************************************************************* * Copyright (c) 2007, 2008 Edgar Espina. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.deved.antlride.common.ui.text.rules; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IPredicateRule; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; public class AntlrMultilineRule implements IPredicateRule { private IToken fSuccesToken; private int fCount; private char fStartChar; private char fEndChar; //private StringBuilder builder; public AntlrMultilineRule(IToken succesToken, char startChar, char endChar) { fSuccesToken = succesToken; fStartChar = startChar; fEndChar = endChar; //builder = new StringBuilder(); } public IToken evaluate(ICharacterScanner scanner) { int ch = scanner.read(); //builder.setLength(0); if (ch != ICharacterScanner.EOF && ch == fStartChar) { boolean end = false; fCount = -1; do { //builder.append((char)ch); if (ch == fStartChar) { fCount++; } else if (ch == fEndChar) { fCount--; end = fCount < 0; } if (end) { //System.out.println(builder); return fSuccesToken; } ch = scanner.read(); } while (ch != ICharacterScanner.EOF); //System.out.println(builder); return fSuccesToken; } scanner.unread(); return Token.UNDEFINED; } public IToken evaluate(ICharacterScanner scanner, boolean resume) { return evaluate(scanner); } public IToken getSuccessToken() { return fSuccesToken; } }