/******************************************************************************* * Copyright (c) 2001, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Jens Lukowski/Innoopract - initial renaming/restructuring * Benjamin Muskalla, b.muskalla@gmx.net - [158660] character entities should have their own syntax highlighting preference * *******************************************************************************/ package org.eclipse.wst.xml.ui.internal.style; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.TextAttribute; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; import org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider; import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; import org.eclipse.wst.xml.ui.internal.XMLUIPlugin; public class LineStyleProviderForXML extends AbstractLineStyleProvider implements LineStyleProvider { public LineStyleProviderForXML() { super(); } protected TextAttribute getAttributeFor(ITextRegion region) { /** * a method to centralize all the "format rules" for regions * specifically associated for how to "open" the region. */ // not sure why this is coming through null, but just to catch it if (region == null) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.CDATA_TEXT); } String type = region.getType(); if ((type == DOMRegionContext.XML_CONTENT) || (type == DOMRegionContext.XML_DOCTYPE_INTERNAL_SUBSET) || (type == DOMRegionContext.UNDEFINED)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.XML_CONTENT); } if ((type == DOMRegionContext.XML_TAG_OPEN) || (type == DOMRegionContext.XML_END_TAG_OPEN) || (type == DOMRegionContext.XML_TAG_CLOSE) || (type == DOMRegionContext.XML_EMPTY_TAG_CLOSE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_BORDER); } if ((type == DOMRegionContext.XML_CDATA_OPEN) || (type == DOMRegionContext.XML_CDATA_CLOSE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.CDATA_BORDER); } if (type == DOMRegionContext.XML_CDATA_TEXT) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.CDATA_TEXT); } if (type == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); } if (type == DOMRegionContext.XML_DOCTYPE_DECLARATION) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_NAME); } if (type == DOMRegionContext.XML_TAG_NAME) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_NAME); } if ((type == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); } if (type == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS); } if ((type == DOMRegionContext.XML_COMMENT_OPEN) || (type == DOMRegionContext.XML_COMMENT_CLOSE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.COMMENT_BORDER); } if (type == DOMRegionContext.XML_COMMENT_TEXT) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.COMMENT_TEXT); } if (type == DOMRegionContext.XML_DOCTYPE_NAME) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.DOCTYPE_NAME); } if ((type == DOMRegionContext.XML_CHAR_REFERENCE) || (type == DOMRegionContext.XML_ENTITY_REFERENCE) || (type == DOMRegionContext.XML_PE_REFERENCE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.ENTITY_REFERENCE); } if (type == DOMRegionContext.XML_PI_CONTENT) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.PI_CONTENT); } if ((type == DOMRegionContext.XML_PI_OPEN) || (type == DOMRegionContext.XML_PI_CLOSE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.PI_BORDER); } if ((type == DOMRegionContext.XML_DECLARATION_OPEN) || (type == DOMRegionContext.XML_DECLARATION_CLOSE)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.DECL_BORDER); } if (type == DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_SYSREF) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF); } if (type == DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_PUBREF) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF); } if ((type == DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_PUBLIC) || (type == DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_SYSTEM)) { return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID); } if (type == DOMRegionContext.WHITE_SPACE) { /* * White space is normally not on its own ... but when it is, * we'll treat as content */ return (TextAttribute) getTextAttributes().get(IStyleConstantsXML.XML_CONTENT); } /* * default, return null to signal "not handled" in which case, other * providers should be tried */ return null; } protected IPreferenceStore getColorPreferences() { return XMLUIPlugin.getDefault().getPreferenceStore(); } protected void handlePropertyChange(PropertyChangeEvent event) { String styleKey = null; if (event != null) { String prefKey = event.getProperty(); // check if preference changed is a style preference if (IStyleConstantsXML.TAG_NAME.equals(prefKey)) { styleKey = IStyleConstantsXML.TAG_NAME; } else if (IStyleConstantsXML.TAG_BORDER.equals(prefKey)) { styleKey = IStyleConstantsXML.TAG_BORDER; } else if (IStyleConstantsXML.TAG_ATTRIBUTE_NAME.equals(prefKey)) { styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_NAME; } else if (IStyleConstantsXML.TAG_ATTRIBUTE_VALUE.equals(prefKey)) { styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_VALUE; } else if (IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS.equals(prefKey)) { styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS; } else if (IStyleConstantsXML.COMMENT_BORDER.equals(prefKey)) { styleKey = IStyleConstantsXML.COMMENT_BORDER; } else if (IStyleConstantsXML.COMMENT_TEXT.equals(prefKey)) { styleKey = IStyleConstantsXML.COMMENT_TEXT; } else if (IStyleConstantsXML.ENTITY_REFERENCE.equals(prefKey)) { styleKey = IStyleConstantsXML.ENTITY_REFERENCE; } else if (IStyleConstantsXML.CDATA_BORDER.equals(prefKey)) { styleKey = IStyleConstantsXML.CDATA_BORDER; } else if (IStyleConstantsXML.CDATA_TEXT.equals(prefKey)) { styleKey = IStyleConstantsXML.CDATA_TEXT; } else if (IStyleConstantsXML.DECL_BORDER.equals(prefKey)) { styleKey = IStyleConstantsXML.DECL_BORDER; } else if (IStyleConstantsXML.DOCTYPE_EXTERNAL_ID.equals(prefKey)) { styleKey = IStyleConstantsXML.DOCTYPE_EXTERNAL_ID; } else if (IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF.equals(prefKey)) { styleKey = IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF; } else if (IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF.equals(prefKey)) { styleKey = IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF; } else if (IStyleConstantsXML.DOCTYPE_NAME.equals(prefKey)) { styleKey = IStyleConstantsXML.DOCTYPE_NAME; } else if (IStyleConstantsXML.PI_CONTENT.equals(prefKey)) { styleKey = IStyleConstantsXML.PI_CONTENT; } else if (IStyleConstantsXML.PI_BORDER.equals(prefKey)) { styleKey = IStyleConstantsXML.PI_BORDER; } else if (IStyleConstantsXML.XML_CONTENT.equals(prefKey)) { styleKey = IStyleConstantsXML.XML_CONTENT; } } if (styleKey != null) { // overwrite style preference with new value addTextAttribute(styleKey); super.handlePropertyChange(event); } } /** * Loads text attributes into map. Make sure map is cleared before calling * this. */ protected void loadColors() { addTextAttribute(IStyleConstantsXML.TAG_NAME); addTextAttribute(IStyleConstantsXML.TAG_BORDER); addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS); addTextAttribute(IStyleConstantsXML.COMMENT_BORDER); addTextAttribute(IStyleConstantsXML.COMMENT_TEXT); addTextAttribute(IStyleConstantsXML.CDATA_BORDER); addTextAttribute(IStyleConstantsXML.CDATA_TEXT); addTextAttribute(IStyleConstantsXML.DECL_BORDER); addTextAttribute(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID); addTextAttribute(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF); addTextAttribute(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF); addTextAttribute(IStyleConstantsXML.DOCTYPE_NAME); addTextAttribute(IStyleConstantsXML.PI_CONTENT); addTextAttribute(IStyleConstantsXML.PI_BORDER); addTextAttribute(IStyleConstantsXML.XML_CONTENT); addTextAttribute(IStyleConstantsXML.ENTITY_REFERENCE); } }