下面列出了怎么用org.eclipse.jface.text.rules.ITokenScanner的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public IToken evaluate(ICharacterScanner scanner, boolean resume) {
if (scanner instanceof ITokenScanner) {
if (isShowInactiveCode && !CollectionUtils.isEmpty(inactiveCodeRegions)) {
ITokenScanner tokenScanner = (ITokenScanner) scanner;
ITextRegion reg = findInactiveCodeRegion(tokenScanner.getTokenOffset());
if (reg != null) {
for (int i = tokenScanner.getTokenOffset(); i < reg.getOffset() + reg.getLength(); i++) {
scanner.read();
}
return ModulaPartitionTokens.DISABLED_CODE;
}
}
}
return Token.UNDEFINED;
}
@Override
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
DSLPresentationReconciler reconciler = new DSLPresentationReconciler(sourceViewer);
ITokenScanner scanner = new TokenScanner();
String contentType = IDocument.DEFAULT_CONTENT_TYPE;
// TODO preference store
long delay = 300;
DefaultDamagerRepairer dr = new DelayedDamagerRepairer(scanner, reconciler, delay);
reconciler.setDamager(dr, contentType);
reconciler.setRepairer(dr, contentType);
// IResource file = this.extractResource(this.editor);
return reconciler;
}
private static ITokenScanner getRecipeScanner(final IDocument doc) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
/*final*/ InnerTagScanner scanner = new InnerTagScanner(store, IColorPreferenceConstant.TAG_FG_COLOR,
IColorPreferenceConstant.TAG_BG_COLOR);
// store.addPropertyChangeListener(new IPropertyChangeListener() {
//
// public void propertyChange(PropertyChangeEvent event) {
// String property = event.getProperty();
// if (IColorPreferenceConstant.TAG_FG_COLOR.equals(property)
// || IColorPreferenceConstant.TAG_BG_COLOR.equals(property)) {
// scanner.updateToken(IColorPreferenceConstant.TAG_FG_COLOR, IColorPreferenceConstant.TAG_BG_COLOR);
//
// if (doc != null) { // 刷新
// try {
// doc.replace(doc.getLength(), 0, "");
// } catch (BadLocationException e) {
// e.printStackTrace();
// }
// }
// }
// }
// });
return scanner;
}
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
}
private static ITokenScanner getRecipeScanner(final IDocument doc) {
// IPreferenceStore store = Activator.getDefault().getPreferenceStore();
final InnerTagScanner scanner = new InnerTagScanner();
// store.addPropertyChangeListener(new IPropertyChangeListener() {
//
// public void propertyChange(PropertyChangeEvent event) {
// String property = event.getProperty();
// if (IPreferenceConstants.TAG_FOREGROUND.equals(property)
// || IPreferenceConstants.TAG_BACKGROUND.equals(property)) {
// scanner.updateToken(IPreferenceConstants.TAG_FOREGROUND, IPreferenceConstants.TAG_BACKGROUND);
//
// if (doc != null) { // 刷新
// try {
// doc.replace(doc.getLength(), 0, "");
// } catch (BadLocationException e) {
// e.printStackTrace();
// }
// }
// }
// }
// });
return scanner;
}
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
scanner = null;
doc = null;
}
private static ITokenScanner getRecipeScanner(final IDocument doc) {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
/*final*/ InnerTagScanner scanner = new InnerTagScanner(store, IColorPreferenceConstant.TAG_FG_COLOR,
IColorPreferenceConstant.TAG_BG_COLOR);
// store.addPropertyChangeListener(new IPropertyChangeListener() {
//
// public void propertyChange(PropertyChangeEvent event) {
// String property = event.getProperty();
// if (IColorPreferenceConstant.TAG_FG_COLOR.equals(property)
// || IColorPreferenceConstant.TAG_BG_COLOR.equals(property)) {
// scanner.updateToken(IColorPreferenceConstant.TAG_FG_COLOR, IColorPreferenceConstant.TAG_BG_COLOR);
//
// if (doc != null) { // 刷新
// try {
// doc.replace(doc.getLength(), 0, "");
// } catch (BadLocationException e) {
// e.printStackTrace();
// }
// }
// }
// }
// });
return scanner;
}
public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
final PresentationReconciler reconciler = new PresentationReconciler();
reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
final SyntaxHighlighter scanner = new SyntaxHighlighter(
com.abstratt.mdd.frontend.textuml.core.TextUMLConstants.KEYWORDS);
final DefaultDamagerRepairer dr = new DefaultDamagerRepairer(scanner);
reconciler.setDamager(dr, ContentTypes.DEFAULT_CONTENT_TYPE);
reconciler.setRepairer(dr, ContentTypes.DEFAULT_CONTENT_TYPE);
// fix bug 2127735 --multiline comment is broken
final ITokenScanner commentScanner = scanner.getCommentScanner();
final DefaultDamagerRepairer commentDamagerRepairer = new DefaultDamagerRepairer(commentScanner);
reconciler.setDamager(commentDamagerRepairer, ContentTypes.COMMENT_CONTENT_TYPE);
reconciler.setRepairer(commentDamagerRepairer, ContentTypes.COMMENT_CONTENT_TYPE);
return reconciler;
}
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
}
private static ITokenScanner getRecipeScanner(final IDocument doc) {
// IPreferenceStore store = Activator.getDefault().getPreferenceStore();
InnerTagScanner scanner = new InnerTagScanner();
// store.addPropertyChangeListener(new IPropertyChangeListener() {
//
// public void propertyChange(PropertyChangeEvent event) {
// String property = event.getProperty();
// if (IPreferenceConstants.TAG_FOREGROUND.equals(property)
// || IPreferenceConstants.TAG_BACKGROUND.equals(property)) {
// scanner.updateToken(IPreferenceConstants.TAG_FOREGROUND, IPreferenceConstants.TAG_BACKGROUND);
//
// if (doc != null) { // 刷新
// try {
// doc.replace(doc.getLength(), 0, "");
// } catch (BadLocationException e) {
// e.printStackTrace();
// }
// }
// }
// }
// });
return scanner;
}
public static void configure(TextLayout textLayout) {
String text = textLayout.getText();
Document doc = new Document(text);
ITokenScanner scanner = getRecipeScanner(doc);
scanner.setRange(doc, 0, doc.getLength());
IToken token;
while ((token = scanner.nextToken()) != Token.EOF) {
int offset = scanner.getTokenOffset();
int length = scanner.getTokenLength();
Object data = token.getData();
if (data != null && data instanceof TextStyle) {
TextStyle textStyle = (TextStyle) data;
textLayout.setStyle(textStyle, offset, offset + length - 1);
}
}
}
private static ITokenScanner getRecipeScanner(final IDocument doc) {
// IPreferenceStore store = Activator.getDefault().getPreferenceStore();
final InnerTagScanner scanner = new InnerTagScanner();
// store.addPropertyChangeListener(new IPropertyChangeListener() {
//
// public void propertyChange(PropertyChangeEvent event) {
// String property = event.getProperty();
// if (IPreferenceConstants.TAG_FOREGROUND.equals(property)
// || IPreferenceConstants.TAG_BACKGROUND.equals(property)) {
// scanner.updateToken(IPreferenceConstants.TAG_FOREGROUND, IPreferenceConstants.TAG_BACKGROUND);
//
// if (doc != null) { // 刷新
// try {
// doc.replace(doc.getLength(), 0, "");
// } catch (BadLocationException e) {
// e.printStackTrace();
// }
// }
// }
// }
// });
return scanner;
}
/**
* @return
*/
public ITokenScanner getTLACodeScanner()
{
if (tlaCodeScanner== null)
{
tlaCodeScanner = new TLACodeScanner();
}
return tlaCodeScanner;
}
public ITokenScanner getPCALCodeScanner()
{
if (pcalCodeScanner== null)
{
pcalCodeScanner = new PCALCodeScanner();
}
return pcalCodeScanner;
}
/**
* getPreProcessorScanner
*
* @return
*/
private ITokenScanner getPreProcessorScanner()
{
XMLTagScanner preProcessorScanner = new XMLTagScanner();
preProcessorScanner.setDefaultReturnToken(getToken("meta.tag.preprocessor.xml.svg")); //$NON-NLS-1$
return preProcessorScanner;
}
protected void processLanguage(String language, short endToken) throws IOException, Exception
{
ITokenScanner tokenScanner = fScanner.getTokenScanner().getPrimaryTokenScanner();
if (tokenScanner instanceof HTMLTokenScanner)
{
((HTMLTokenScanner) tokenScanner).setInsideSpecialTag(true);
}
Symbol startTag = fCurrentSymbol;
advance();
int start = fCurrentSymbol.getStart();
int end = start - 1;
short id = fCurrentSymbol.getId();
while (id != endToken && id != HTMLTokens.EOF)
{
end = fCurrentSymbol.getEnd();
advance();
id = fCurrentSymbol.getId();
}
if (tokenScanner instanceof HTMLTokenScanner)
{
((HTMLTokenScanner) tokenScanner).setInsideSpecialTag(false);
}
IParseNode[] nested = getParseResult(language, start, end);
if (fCurrentElement != null)
{
HTMLSpecialNode node = new HTMLSpecialNode(startTag, nested, startTag.getStart(), fCurrentSymbol.getEnd());
node.setEndNode(fCurrentSymbol.getStart(), fCurrentSymbol.getEnd());
parseAttribute(node, startTag);
fCurrentElement.addChild(node);
}
}
public ThemeingDamagerRepairer(ITokenScanner scanner)
{
super(scanner);
maxLinesToColor = Platform.getPreferencesService().getInt(CommonEditorPlugin.PLUGIN_ID,
IPreferenceConstants.EDITOR_MAX_COLORED_COLUMNS,
IPreferenceConstants.EDITOR_MAX_COLORED_COLUMNS_DEFAULT,
new IScopeContext[] { EclipseUtil.instanceScope(), EclipseUtil.defaultScope() });
}
public Entry(ITokenScanner tokenScanner, IToken token, int offset, int length)
{
this.tokenScanner = tokenScanner;
this.token = token;
this.offset = offset;
this.length = length;
}
private ITokenScanner getStartEndTokenScanner() {
if (startEndTokenScanner == null) {
RuleBasedScanner ts = new RuleBasedScanner();
IToken seqToken = new Token(getStartEndTokenType());
List<IRule> rules = new ArrayList<IRule>();
for (String[] pair : getPartitionerSwitchStrategy().getSwitchTagPairs()) {
rules.add(new SingleTagRule(pair[0], seqToken));
rules.add(new SingleTagRule(pair[1], seqToken));
}
ts.setRules(rules.toArray(new IRule[rules.size()]));
ts.setDefaultReturnToken(new Token("text")); //$NON-NLS-1$
startEndTokenScanner = ts;
}
return startEndTokenScanner;
}
public PresentationRepairer(ITokenScanner scanner, ISegmentViewer viewer) {
Assert.isNotNull(scanner);
fViewer = viewer;
fScanner = scanner;
fDefaultTextStyle = new TextStyle();
}
ITokenScanner getCommentScanner() {
// lazy init
if (this.commentScanner == null) {
final Token comment = new Token(new TextAttribute(JFaceResources.getColorRegistry().get(COMMENT_COLOR)));
// no rules needed, because this will apply to comment partition
// only
final RuleBasedScanner ruleBasedScanner = new RuleBasedScanner();
// this will apply the syntax
ruleBasedScanner.setDefaultReturnToken(comment);
this.commentScanner = ruleBasedScanner;
}
return commentScanner;
}
public PresentationRepairer(ITokenScanner scanner, CellEditorTextViewer viewer) {
Assert.isNotNull(scanner);
this.viewer = viewer;
fScanner = scanner;
fDefaultTextStyle = new TextStyle();
}
public PresentationRepairer(ITokenScanner scanner, ISegmentViewer viewer) {
Assert.isNotNull(scanner);
fViewer = viewer;
fScanner = scanner;
fDefaultTextStyle = new TextStyle();
}
@Override
public Class<? extends ITokenScanner> bindITokenScanner() {
return TemplateAwareTokenScanner.class;
}
public Class<? extends ITokenScanner> bindITokenScanner() {
return TokenScanner.class;
}
@Inject
public PresentationRepairer(ITokenScanner scanner) {
super(scanner);
}
@Override
public void setUp() throws Exception {
super.setUp();
document = get(XtextDocument.class);
scanner = get(ITokenScanner.class);
}
@Override
public Class<? extends ITokenScanner> bindITokenScanner() {
return RichStringAwareTokenScanner.class;
}
public DamageRepairer(ITokenScanner scanner) {
logger = LogViewerPlugin.getDefault().getLogger();
Assert.isNotNull(scanner);
this.scanner = scanner;
defaultTextAttribute = new TextAttribute(null);
}
private ITokenScanner getPreProcessorScanner()
{
XMLTagScanner preProcessorScanner = new XMLTagScanner();
preProcessorScanner.setDefaultReturnToken(getToken(IXMLScopes.META_TAG_PREPROCESSOR_XML));
return preProcessorScanner;
}