/* * 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.html; import com.google.dart.tools.core.html.HtmlParser; import com.google.dart.tools.core.html.XmlDocument; import com.google.dart.tools.core.html.XmlNode; 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.texteditor.SourceViewerDecorationSupport; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; /** * An editor for html files. */ public class HtmlEditor extends WebEditor { public final static String HTML_COMMENT_PARTITION = "__html_comment"; public final static String HTML_BRACKET_PARTITION = "__html_bracket"; public final static String HTML_TEMPLATE_PARTITION = "__template"; public final static String HTML_STYLE_PARTITION = "__css_style"; public final static String HTML_CODE_PARTITION = "__code"; private HtmlContentOutlinePage outlinePage; private XmlDocument model; public HtmlEditor() { setRulerContextMenuId("#DartHtmlEditorRulerContext"); setSourceViewerConfiguration(new HtmlSourceViewerConfiguration(this)); setDocumentProvider(new HtmlDocumentProvider()); } @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 HtmlContentOutlinePage(this); } return outlinePage; } return super.getAdapter(required); } public void selectAndReveal(XmlNode 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); } protected XmlDocument getModel() { if (model == null) { model = new HtmlParser(getDocument().get()).parse(); } return model; } @Override protected void handleDocumentModified() { model = null; } @Override protected void handleReconcilation(IRegion partition) { if (outlinePage != null) { outlinePage.handleEditorReconcilation(); } } }