| /******************************************************************************* |
| * 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); |
| } |
| }; |
| } |
| |
| } |