/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.django_templates.comon.parsing;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.IWordDetector;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WordRule;
import org.python.pydev.django_templates.common.parsing.lexer.DjangoTemplatesTokens;
public class DjTokenScanner {
@SuppressWarnings("nls")
private static final String[] DJ_START = { "{%", "{{" };
@SuppressWarnings("nls")
private static final String[] DJ_END = new String[] { "%}", "}}" };
public List<IRule> getDjRules() {
ArrayList<IRule> rules = new ArrayList<IRule>();
// adds rules for finding the django templates start and end sequences
WordRule wordRule = new WordRule(new DjStartDetector(), Token.UNDEFINED);
IToken token = createToken(getTokenName(DjangoTemplatesTokens.DJ_START));
for (String word : DJ_START) {
wordRule.addWord(word, token);
}
rules.add(wordRule);
wordRule = new WordRule(new DjEndDetector(), Token.UNDEFINED);
token = createToken(getTokenName(DjangoTemplatesTokens.DJ_END));
for (String word : DJ_END) {
wordRule.addWord(word, token);
}
rules.add(wordRule);
return rules;
}
private static final class DjStartDetector implements IWordDetector {
public boolean isWordPart(char c) {
switch (c) {
case '{':
case '%':
return true;
}
return false;
}
public boolean isWordStart(char c) {
return c == '{';
}
}
private static final class DjEndDetector implements IWordDetector {
public boolean isWordPart(char c) {
switch (c) {
case '%':
case '}':
return true;
}
return false;
}
public boolean isWordStart(char c) {
return c == '}' || c == '%';
}
}
protected IToken createToken(String string) {
return new Token(string);
}
private static String getTokenName(short token) {
return DjangoTemplatesTokens.getTokenName(token);
}
}