blob: b71370f3aec1f49de15ae4c0d610573bf176715d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.javascript.internal.ui.text;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.internal.ui.editor.EditorUtility;
import org.eclipse.dltk.javascript.core.JSKeywordCategory;
import org.eclipse.dltk.javascript.core.JSKeywordManager;
import org.eclipse.dltk.javascript.parser.jsdoc.JSDocTag;
import org.eclipse.dltk.ui.text.ScriptSourceViewerConfiguration;
import org.eclipse.dltk.ui.text.TodoTaskPreferencesOnPreferenceStore;
import org.eclipse.dltk.ui.text.rules.CombinedWordRule.WordMatcher;
import org.eclipse.jface.text.rules.IWordDetector;
import org.eclipse.ui.texteditor.ITextEditor;
public class JavascriptDocScanner extends JavaScriptScriptCommentScanner {
public JavascriptDocScanner(ScriptSourceViewerConfiguration configuration) {
super(configuration, JavascriptColorConstants.JS_DOC,
JavascriptColorConstants.JS_TODO_TAG,
new TodoTaskPreferencesOnPreferenceStore(
configuration.getPreferenceStore()));
}
@Override
protected String[] getTokenProperties() {
return new String[] { JavascriptColorConstants.JS_DOC,
JavascriptColorConstants.JS_TODO_TAG,
JavascriptColorConstants.JS_DOC_TAGS };
}
@Override
protected List<WordMatcher> createMatchers() {
final List<WordMatcher> matchers = super.createMatchers();
matchers.add(createJavadocKeywordMatcher());
return matchers;
}
private WordMatcher createJavadocKeywordMatcher() {
final WordMatcher matcher = new WordMatcher();
final Set<String> tags = new HashSet<String>();
Collections.addAll(tags, JSDocTag.getTags());
ISourceModule module = null;
if (fConfiguration != null) {
final ITextEditor editor = fConfiguration.getEditor();
if (editor != null) {
module = EditorUtility.getEditorInputModelElement(editor, true);
}
}
Collections.addAll(
tags,
JSKeywordManager.getInstance().getKeywords(
JSKeywordCategory.JS_DOC_TAG, module));
for (String tag : tags) {
matcher.addWord(tag, getToken(JavascriptColorConstants.JS_DOC_TAGS));
}
return matcher;
}
@Override
protected IWordDetector createIdentifierDetector() {
return new IWordDetector() {
public boolean isWordStart(char c) {
return c == '@' || Character.isJavaIdentifierStart(c);
}
public boolean isWordPart(char c) {
return c == '.' || c == '-'
|| Character.isJavaIdentifierPart(c);
}
};
}
}