X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLConfiguration.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLConfiguration.java new file mode 100644 index 0000000..14a17c9 --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/text/XMLConfiguration.java @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2002-2004 Widespace, OU and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * Igor Malinin - initial contribution + * + * $Id: XMLConfiguration.java,v 1.2 2006-10-21 23:14:13 pombredanne Exp $ + */ + +package net.sourceforge.phpeclipse.xml.ui.internal.text; + +import net.sourceforge.phpeclipse.ui.templates.template.BasicCompletionProcessor; +import net.sourceforge.phpeclipse.ui.text.TextDoubleClickStrategy; +import net.sourceforge.phpeclipse.xml.ui.text.XMLTextTools; + +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.ITextDoubleClickStrategy; +import org.eclipse.jface.text.ITextHover; +import org.eclipse.jface.text.contentassist.ContentAssistant; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.text.contentassist.IContentAssistant; +import org.eclipse.jface.text.presentation.IPresentationReconciler; +import org.eclipse.jface.text.presentation.PresentationReconciler; +import org.eclipse.jface.text.reconciler.IReconciler; +import org.eclipse.jface.text.reconciler.MonoReconciler; +import org.eclipse.jface.text.rules.DefaultDamagerRepairer; +import org.eclipse.jface.text.source.IAnnotationHover; +import org.eclipse.jface.text.source.IAnnotationModel; +import org.eclipse.jface.text.source.ISourceViewer; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; +import org.eclipse.ui.texteditor.IDocumentProvider; +import org.eclipse.ui.texteditor.ITextEditor; + +/** + * XML editor configuration. + * + * @author Igor Malinin + */ +public class XMLConfiguration extends TextSourceViewerConfiguration { + protected XMLTextTools xmlTextTools; + + private ITextDoubleClickStrategy dcsDefault; + + private ITextDoubleClickStrategy dcsSimple; + + private ITextDoubleClickStrategy dcsTag; + + private ITextDoubleClickStrategy dcsAttValue; + + /** The associated editor. */ + private ITextEditor editor; + + public XMLConfiguration(XMLTextTools tools) { + this(tools, null); + } + + public XMLConfiguration(XMLTextTools tools, ITextEditor editor) { + xmlTextTools = tools; + this.editor = editor; + dcsDefault = new TextDoubleClickStrategy(); + dcsSimple = new SimpleDoubleClickStrategy(); + dcsTag = new TagDoubleClickStrategy(); + dcsAttValue = new AttValueDoubleClickStrategy(); + } + + /* + * @see SourceViewerConfiguration#getAnnotationHover(ISourceViewer) + */ + public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) { + return new XMLAnnotationHover(); + } + + /* + * @see SourceViewerConfiguration#getTextHover(ISourceViewer, String) + */ + public ITextHover getTextHover(ISourceViewer sourceViewer, + String contentType) { + if (editor != null) { + IDocumentProvider provider = editor.getDocumentProvider(); + IEditorInput input = editor.getEditorInput(); + IAnnotationModel model = provider.getAnnotationModel(input); + return new XMLTextHover(model); + } + + return super.getTextHover(sourceViewer, contentType); + } + + /* + * @see SourceViewerConfiguration#getDoubleClickStrategy(ISourceViewer, + * String) + */ + public ITextDoubleClickStrategy getDoubleClickStrategy( + ISourceViewer sourceViewer, String contentType) { + if (XMLPartitionScanner.XML_COMMENT.equals(contentType)) { + return dcsSimple; + } + + if (XMLPartitionScanner.XML_PI.equals(contentType)) { + return dcsSimple; + } + + if (XMLPartitionScanner.XML_TAG.equals(contentType)) { + return dcsTag; + } + + if (XMLPartitionScanner.XML_ATTRIBUTE.equals(contentType)) { + return dcsAttValue; + } + + if (XMLPartitionScanner.XML_CDATA.equals(contentType)) { + return dcsSimple; + } + + if (contentType.startsWith(XMLPartitionScanner.DTD_INTERNAL)) { + return dcsSimple; + } + + return dcsDefault; + } + + /* + * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getConfiguredContentTypes(ISourceViewer) + */ + public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { + return new String[] { IDocument.DEFAULT_CONTENT_TYPE, + XMLPartitionScanner.XML_PI, XMLPartitionScanner.XML_COMMENT, + XMLPartitionScanner.XML_DECL, XMLPartitionScanner.XML_TAG, + XMLPartitionScanner.XML_ATTRIBUTE, + XMLPartitionScanner.XML_CDATA, + XMLPartitionScanner.DTD_INTERNAL, + XMLPartitionScanner.DTD_INTERNAL_PI, + XMLPartitionScanner.DTD_INTERNAL_COMMENT, + XMLPartitionScanner.DTD_INTERNAL_DECL, }; + } + + /* + * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getPresentationReconciler(ISourceViewer) + */ + public IPresentationReconciler getPresentationReconciler( + ISourceViewer sourceViewer) { + PresentationReconciler reconciler = new PresentationReconciler(); + + DefaultDamagerRepairer dr; + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLTextScanner()); + reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); + reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); + + dr = new DefaultDamagerRepairer(xmlTextTools.getDTDTextScanner()); + reconciler.setDamager(dr, XMLPartitionScanner.DTD_INTERNAL); + reconciler.setRepairer(dr, XMLPartitionScanner.DTD_INTERNAL); + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLPIScanner()); + + reconciler.setDamager(dr, XMLPartitionScanner.XML_PI); + reconciler.setRepairer(dr, XMLPartitionScanner.XML_PI); + reconciler.setDamager(dr, XMLPartitionScanner.DTD_INTERNAL_PI); + reconciler.setRepairer(dr, XMLPartitionScanner.DTD_INTERNAL_PI); + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLCommentScanner()); + + reconciler.setDamager(dr, XMLPartitionScanner.XML_COMMENT); + reconciler.setRepairer(dr, XMLPartitionScanner.XML_COMMENT); + reconciler.setDamager(dr, XMLPartitionScanner.DTD_INTERNAL_COMMENT); + reconciler.setRepairer(dr, XMLPartitionScanner.DTD_INTERNAL_COMMENT); + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLDeclScanner()); + + reconciler.setDamager(dr, XMLPartitionScanner.XML_DECL); + reconciler.setRepairer(dr, XMLPartitionScanner.XML_DECL); + reconciler.setDamager(dr, XMLPartitionScanner.DTD_INTERNAL_DECL); + reconciler.setRepairer(dr, XMLPartitionScanner.DTD_INTERNAL_DECL); + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLTagScanner()); + + reconciler.setDamager(dr, XMLPartitionScanner.XML_TAG); + reconciler.setRepairer(dr, XMLPartitionScanner.XML_TAG); + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLAttributeScanner()); + + reconciler.setDamager(dr, XMLPartitionScanner.XML_ATTRIBUTE); + reconciler.setRepairer(dr, XMLPartitionScanner.XML_ATTRIBUTE); + + dr = new DefaultDamagerRepairer(xmlTextTools.getXMLCDATAScanner()); + + reconciler.setDamager(dr, XMLPartitionScanner.XML_CDATA); + reconciler.setRepairer(dr, XMLPartitionScanner.XML_CDATA); + + return reconciler; + } + + /* + * @see SourceViewerConfiguration#getReconciler(ISourceViewer) + */ + public IReconciler getReconciler(ISourceViewer sourceViewer) { + if ((editor != null) && editor.isEditable()) { + MonoReconciler reconciler = new MonoReconciler( + new XMLReconcilingStrategy(editor), false); + reconciler.setProgressMonitor(new NullProgressMonitor()); + reconciler.setDelay(500); + return reconciler; + } + + return null; + } + + public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { + ContentAssistant assistant = new ContentAssistant(); + assistant + .setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); + + IContentAssistProcessor processor = new BasicCompletionProcessor(); + assistant.setContentAssistProcessor(processor, + IDocument.DEFAULT_CONTENT_TYPE); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_TAG); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_PI); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_COMMENT); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_DECL); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_TAG); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_ATTRIBUTE); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.XML_CDATA); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.DTD_INTERNAL); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.DTD_INTERNAL_PI); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.DTD_INTERNAL_COMMENT); + assistant.setContentAssistProcessor(processor, + XMLPartitionScanner.DTD_INTERNAL_DECL); + assistant + .setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE); + assistant + .setInformationControlCreator(getInformationControlCreator(sourceViewer)); + + return assistant; + } + +} \ No newline at end of file