2 * @author Telmo Brugnara
\r
5 package winterwell.markdown.editors;
\r
7 import org.eclipse.jface.text.rules.ICharacterScanner;
\r
8 import org.eclipse.jface.text.rules.IRule;
\r
9 import org.eclipse.jface.text.rules.IToken;
\r
10 import org.eclipse.jface.text.rules.Token;
\r
12 public class HeaderWithUnderlineRule implements IRule {
\r
14 IToken successToken = null;
\r
16 public HeaderWithUnderlineRule(IToken token) {
\r
17 successToken = token;
\r
20 public IToken evaluate(ICharacterScanner scanner) {
\r
23 if (scanner.getColumn()==0) {
\r
27 } while (!isNewLine((char) c) && c != ICharacterScanner.EOF);
\r
28 if(c == ICharacterScanner.EOF) {
\r
30 for(int i=0;i<scanCount;i++) { scanner.unread(); }
\r
31 return Token.UNDEFINED;
\r
39 if(!isUnderline((char) c)) {
\r
41 for(int i=0;i<scanCount;i++) { scanner.unread(); }
\r
42 return Token.UNDEFINED;
\r
47 if(isNewLine((char) c) || c == ICharacterScanner.EOF) {
\r
49 return successToken;
\r
51 if(!isUnderline((char) c) && !isWhitespace((char) c) && c != '\r') {
\r
53 for(int i=0;i<scanCount;i++) { scanner.unread(); }
\r
54 return Token.UNDEFINED;
\r
59 return Token.UNDEFINED;
\r
62 boolean isNewLine(char c) {
\r
66 boolean isUnderline(char c) {
\r
67 return c == '=' || c == '-';
\r
70 boolean isWhitespace(char c) {
\r
71 return c == ' ' || c == '\t';
\r