blob: e3d11c7af15da6977c7b6ec815f532355cbed638 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 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
*******************************************************************************/
package org.eclipse.wst.jsdt.web.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.jsdt.web.core.internal.regions.DOMJSPRegionContexts;
import org.eclipse.wst.jsdt.web.ui.internal.JSPUIPlugin;
import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML;
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.style.IStyleConstantsXML;
public class LineStyleProviderForJSP extends AbstractLineStyleProvider
implements LineStyleProvider {
private String fLanguage = null;
// private static final String JAVA = "java"; //$NON-NLS-1$
// private static final String[] JAVASCRIPT_LANGUAGE_KEYS = new String[] {
// "javascript", "javascript1.0", "javascript1.1_3", "javascript1.2",
// "javascript1.3", "javascript1.4", "javascript1.5", "javascript1.6",
// "jscript", "sashscript" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
// //$NON-NLS-9$ //$NON-NLS-10$
public LineStyleProviderForJSP() {
super();
}
@Override
protected TextAttribute getAttributeFor(ITextRegion region) {
/**
* a method to centralize all the "sytle rules" for regions
*/
TextAttribute result = null;
// not sure why this is coming through null, but just to catch it
if (region == null) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.CDATA_TEXT);
} else {
if (result == null) {
String type = region.getType();
if ((type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN)
|| (type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN)
|| (type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN)
|| (type == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN)
|| (type == DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE)
|| (type == DOMJSPRegionContexts.JSP_CLOSE)) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsHTML.SCRIPT_AREA_BORDER);
} else if (type == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME
|| type == DOMJSPRegionContexts.JSP_ROOT_TAG_NAME) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.TAG_NAME);
} else if ((type == DOMJSPRegionContexts.JSP_COMMENT_OPEN)
|| (type == DOMJSPRegionContexts.JSP_COMMENT_CLOSE)) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.COMMENT_BORDER);
} else if (type == DOMJSPRegionContexts.JSP_COMMENT_TEXT) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.COMMENT_TEXT);
}
// ============ These are in common with XML --- (for XML form
// of tags)
// Note: this assume's this provider is only called for
// true JSP Nodes. If its called for others, then this will
// cause their tag names to be highlighted too!
// Further checks could be done to prevent that, but doesn't
// seem worth it, since if adpaters factories are working
// right,
// then wouldn't be needed.
else if (type == DOMRegionContext.XML_TAG_NAME) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.TAG_NAME);
} else if ((type == DOMRegionContext.XML_TAG_OPEN)
|| (type == DOMRegionContext.XML_END_TAG_OPEN)
|| (type == DOMRegionContext.XML_TAG_CLOSE)
|| (type == DOMRegionContext.XML_EMPTY_TAG_CLOSE)) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.TAG_BORDER);
} else if (type == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.TAG_ATTRIBUTE_NAME);
} else if ((type == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)
|| (type == DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_DQUOTE)
|| (type == DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.TAG_ATTRIBUTE_VALUE);
} else if (type == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS);
}
// DMW: added 9/1/2002 Undefined color may need addjustment :)
else if (type == DOMRegionContext.UNDEFINED) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.XML_CONTENT);
} else if (type == DOMRegionContext.WHITE_SPACE) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.XML_CONTENT);
} else if (type == DOMRegionContext.XML_CONTENT) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.XML_CONTENT);
} else if (type == DOMRegionContext.BLOCK_TEXT) {
result = (TextAttribute) getTextAttributes().get(
IStyleConstantsXML.CDATA_TEXT);
}
}
}
// default, return null to signal "not handled"
// in which case, other factories should be tried
return result;
}
@Override
protected IPreferenceStore getColorPreferences() {
return JSPUIPlugin.getDefault().getPreferenceStore();
}
@Override
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(IStyleConstantsHTML.SCRIPT_AREA_BORDER);
}
@Override
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.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;
} else if (IStyleConstantsHTML.SCRIPT_AREA_BORDER.equals(prefKey)) {
styleKey = IStyleConstantsHTML.SCRIPT_AREA_BORDER;
}
}
if (styleKey != null) {
// overwrite style preference with new value
addTextAttribute(styleKey);
super.handlePropertyChange(event);
}
}
/**
* Returns the language.
*
* @return String
*/
public String getLanguage() {
return fLanguage;
}
/**
* Sets the language.
*
* @param language
* The language to set
*/
public void setLanguage(String language) {
this.fLanguage = language;
}
}