--- /dev/null
+package com.quantum.editors;
+
+import java.util.HashMap;
+
+import com.quantum.QuantumPlugin;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+
+public class SQLConfiguration extends SourceViewerConfiguration {
+ private PresentationReconciler reconciler = new PresentationReconciler();
+ private ColorManager colorManager;
+ private HashMap cache = new HashMap();
+ private boolean textBold = false;
+ private boolean keywordBold = true;
+ private boolean stringBold = false;
+ private boolean commentBold = false;
+ private boolean numericBold = false;
+ public SQLConfiguration(ColorManager colorManager) {
+ this.colorManager = colorManager;
+ }
+ public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
+ return new String[] {
+ IDocument.DEFAULT_CONTENT_TYPE,
+ SQLPartitionScanner.SQL_COMMENT,
+ SQLPartitionScanner.SQL_KEYWORD,
+ SQLPartitionScanner.SQL_IDENTIFIER};
+ }
+
+ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
+ initializeColors();
+ return reconciler;
+ }
+ public void loadPrefs() {
+ IPreferenceStore store = QuantumPlugin.getDefault().getPreferenceStore();
+ textBold = store.getBoolean("quantum.text.bold"); //$NON-NLS-1$
+ keywordBold = store.getBoolean("quantum.keyword.bold"); //$NON-NLS-1$
+ stringBold = store.getBoolean("quantum.string.bold"); //$NON-NLS-1$
+ commentBold = store.getBoolean("quantum.comment.bold"); //$NON-NLS-1$
+ numericBold = store.getBoolean("quantum.numeric.bold"); //$NON-NLS-1$
+ SQLColorConstants.BACKGROUND = PreferenceConverter.getColor(store, "quantum.background.color"); //$NON-NLS-1$
+ SQLColorConstants.DEFAULT = PreferenceConverter.getColor(store, "quantum.text.color"); //$NON-NLS-1$
+ SQLColorConstants.IDENTIFIER = PreferenceConverter.getColor(store, "quantum.text.color"); //$NON-NLS-1$
+ SQLColorConstants.KEYWORD = PreferenceConverter.getColor(store, "quantum.keyword.color"); //$NON-NLS-1$
+ SQLColorConstants.STRING = PreferenceConverter.getColor(store, "quantum.string.color"); //$NON-NLS-1$
+ SQLColorConstants.COMMENT = PreferenceConverter.getColor(store, "quantum.comment.color"); //$NON-NLS-1$
+ SQLColorConstants.NUMERIC = PreferenceConverter.getColor(store, "quantum.numeric.color"); //$NON-NLS-1$
+ }
+ public void initializeColors() {
+ setDamageRepairer(getAttr(SQLColorConstants.KEYWORD, keywordBold), SQLPartitionScanner.SQL_KEYWORD);
+ setDamageRepairer(getAttr(SQLColorConstants.COMMENT, commentBold), SQLPartitionScanner.SQL_COMMENT);
+ setDamageRepairer(getAttr(SQLColorConstants.STRING, stringBold), SQLPartitionScanner.SQL_STRING);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), IDocument.DEFAULT_CONTENT_TYPE);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), SQLPartitionScanner.SQL_SYMBOL);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), SQLPartitionScanner.SQL_IDENTIFIER);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), SQLPartitionScanner.SQL_SEPARATOR);
+ setDamageRepairer(getAttr(SQLColorConstants.NUMERIC, numericBold), SQLPartitionScanner.SQL_NUMERIC);
+ }
+ public TextAttribute getAttr(RGB color, boolean bold) {
+ colorManager.getColor(SQLColorConstants.BACKGROUND);
+ Color foreground = colorManager.getColor(color);
+ TextAttribute attr = new TextAttribute(foreground);
+ if (bold) {
+ return new TextAttribute(foreground, attr.getBackground(), SWT.BOLD);
+ }
+ return attr;
+ }
+ public void setDamageRepairer(TextAttribute attr, String token) {
+ NonRuleBasedDamagerRepairer ndr = (NonRuleBasedDamagerRepairer) cache.get(token);
+ if (ndr == null) {
+ ndr =
+ new NonRuleBasedDamagerRepairer(attr);
+ reconciler.setDamager(ndr, token);
+ reconciler.setRepairer(ndr, token);
+ cache.put(token, ndr);
+ } else {
+ ndr.setTextAttribute(attr);
+ }
+ }
+}
\ No newline at end of file