/*
* Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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 com.google.dart.tools.ui.web.css;
import com.google.dart.tools.ui.web.css.model.CssDocument;
import com.google.dart.tools.ui.web.css.model.CssParser;
import com.google.dart.tools.ui.web.utils.Node;
import com.google.dart.tools.ui.web.utils.WebEditor;
import org.eclipse.jface.text.IDocumentExtension3;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher;
import org.eclipse.jface.text.source.ICharacterPairMatcher;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
/**
* An editor for CSS files.
*/
public class CssEditor extends WebEditor {
private CssContentOutlinePage outlinePage;
private CssDocument model;
/**
* Create a new CssEditor.
*/
public CssEditor() {
setRulerContextMenuId("#DartCssEditorRulerContext");
setSourceViewerConfiguration(new CssSourceViewerConfiguration(this));
setDocumentProvider(new CssDocumentProvider(this));
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
installTabsToSpacesConverter();
}
@SuppressWarnings("rawtypes")
@Override
public Object getAdapter(Class required) {
if (IContentOutlinePage.class.equals(required)) {
if (outlinePage == null) {
outlinePage = new CssContentOutlinePage(this);
}
return outlinePage;
}
return super.getAdapter(required);
}
public CssDocument getModel() {
if (model == null) {
model = new CssParser(getDocument()).parse();
}
return model;
}
public void selectAndReveal(Node node) {
selectAndReveal(node.getStartOffset(), node.getEndOffset() - node.getStartOffset());
}
@Override
protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) {
ICharacterPairMatcher matcher = new DefaultCharacterPairMatcher(
new char[] {'{', '}'},
IDocumentExtension3.DEFAULT_PARTITIONING);
support.setCharacterPairMatcher(matcher);
support.setMatchingCharacterPainterPreferenceKeys(MATCHING_BRACKETS, MATCHING_BRACKETS_COLOR);
super.configureSourceViewerDecorationSupport(support);
}
@Override
protected void handleDocumentModified() {
model = null;
}
@Override
protected void handleReconcilation(IRegion partition) {
if (outlinePage != null) {
outlinePage.handleEditorReconcilation();
}
}
protected boolean iEditingLess() {
IEditorInput input = getEditorInput();
if (input != null) {
return input.getName().endsWith(".less");
} else {
return false;
}
}
}