/******************************************************************************* * Copyright (c) 2012 Sierra Wireless and others. * 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 * * Contributors: * Sierra Wireless - initial API and implementation *******************************************************************************/ package org.eclipse.koneki.ldt.ui.internal.editor.text.rules; import org.eclipse.jface.text.rules.EndOfLineRule; 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.IWhitespaceDetector; import org.eclipse.jface.text.rules.Token; import org.eclipse.jface.text.rules.WhitespaceRule; /** * A scanner to detect the following pattern: * * <pre> * --- * -- @module foo. * -- Blah blah. * </pre> */ public class LuaDocSingleCommentSeriesRule implements IPredicateRule { private IToken fDocToken; private EndOfLineRule threeDashesRule; private EndOfLineRule twoDashesRule; public LuaDocSingleCommentSeriesRule(IToken docToken) { this.fDocToken = docToken; threeDashesRule = new EndOfLineRule("---", fDocToken); //$NON-NLS-1$ twoDashesRule = new EndOfLineRule("--", fDocToken); //$NON-NLS-1$ } @Override public IToken getSuccessToken() { return fDocToken; } @Override public IToken evaluate(ICharacterScanner scanner, boolean resume) { WhitespaceRule whiteSpaceRule = new WhitespaceRule(new IWhitespaceDetector() { @Override public boolean isWhitespace(char c) { return c == ' ' || c == '\t'; } }); IToken t = threeDashesRule.evaluate(scanner); if (t == fDocToken) { while (t == fDocToken) { // ignore possible trailing whitespaces whiteSpaceRule.evaluate(scanner); t = twoDashesRule.evaluate(scanner); } return fDocToken; } return Token.UNDEFINED; } @Override public IToken evaluate(ICharacterScanner scanner) { return evaluate(scanner, false); } }