/*
* Copyright 2013 The Sculptor Project Team, including the original
* author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sculptor.dsl.ui;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.xtext.nodemodel.ILeafNode;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration;
import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor;
import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
public class SculptordslSemanticHighlightingCalculator implements ISemanticHighlightingCalculator {
private static final Set<String> TERMINAL_KEYWORDS = new HashSet<String>();
{
TERMINAL_KEYWORDS.add("=>");
TERMINAL_KEYWORDS.add("delegates to");
TERMINAL_KEYWORDS.add("<->");
TERMINAL_KEYWORDS.add("opposite");
TERMINAL_KEYWORDS.add("!");
TERMINAL_KEYWORDS.add("not");
TERMINAL_KEYWORDS.add("-");
TERMINAL_KEYWORDS.add("reference");
TERMINAL_KEYWORDS.add("Map");
}
public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
if (resource == null)
return;
if (resource.getContents().size() > 0) {
Iterable<INode> allNodes = resource.getParseResult().getRootNode().getAsTreeIterable();
for (INode node : allNodes) {
if (node instanceof ILeafNode) {
ILeafNode leafNode = (ILeafNode) node;
// TODO check returned valuse of GrammarElement
if ("doc".equals(leafNode.getGrammarElement())) {
acceptor.addPosition(node.getOffset(), node.getLength(),
DefaultHighlightingConfiguration.COMMENT_ID);
} else if (TERMINAL_KEYWORDS.contains(leafNode.getText())) {
acceptor.addPosition(node.getOffset(), node.getLength(),
DefaultHighlightingConfiguration.KEYWORD_ID);
}
}
}
}
}
}