/**
* Copyright winterwell Mathematics Ltd.
* @author Daniel Winterstein
* 11 Jan 2007
*/
package winterwell.markdown.editors;
import org.eclipse.jface.text.rules.ICharacterScanner;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
/**
*
*
* @author Daniel Winterstein
*/
public class EmphasisRule extends MultiLineRule {
public EmphasisRule(String marker, IToken token) {
super(marker, marker, token);
assert marker.equals("*") || marker.equals("_") || marker.equals("**")
|| marker.equals("***");
}
@Override
protected boolean sequenceDetected(ICharacterScanner scanner, char[] sequence, boolean eofAllowed) {
boolean detect = super.sequenceDetected(scanner, sequence, eofAllowed);
if (!detect) return false;
// But is it an emphasis* or a * list item?
for(int i=0; i <= sequence.length; i++) scanner.unread();
char before = (char) scanner.read();
String star = "";
for(int i=0; i <sequence.length; i++) star += scanner.read();
char after = (char) scanner.read();
// Set the scanner back to where it was
scanner.unread();
// Is it a list item marker, or just a floating *?
if (Character.isWhitespace(after) && Character.isWhitespace(before)) return false;
return true;
}
}