Package org.kacprzak.eclipse.django_editor.editors

Source Code of org.kacprzak.eclipse.django_editor.editors.DjangoSourceViewerConfiguration

package org.kacprzak.eclipse.django_editor.editors;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextDoubleClickStrategy;
import org.eclipse.jface.text.contentassist.ContentAssistant;
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.rules.DefaultDamagerRepairer;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.swt.graphics.RGB;
import org.kacprzak.eclipse.django_editor.DjangoActivator;
import org.kacprzak.eclipse.django_editor.IDjangoPartitions;
import org.kacprzak.eclipse.django_editor.editors.completion.DjangoFilterCompletionProcessor;
import org.kacprzak.eclipse.django_editor.editors.completion.DjangoTagCompletionProcessor;
import org.kacprzak.eclipse.django_editor.editors.css.CssScanner;
import org.kacprzak.eclipse.django_editor.editors.dj.DjangoTagScanner;
import org.kacprzak.eclipse.django_editor.editors.dj.DjangoVariableScanner;
import org.kacprzak.eclipse.django_editor.editors.html.HtmlTagScanner;
import org.kacprzak.eclipse.django_editor.editors.js.JavaScriptScanner;
import org.kacprzak.eclipse.django_editor.preferences.IDjangoPrefs;

/**
* @author Zbigniew Kacprzak
*/
public class DjangoSourceViewerConfiguration extends SourceViewerConfiguration {

  private PresentationReconciler reconciler;

  private DjangoDoubleClickStrategy doubleClickStrategy;
  private DjangoColoredScanner   defaultScanner;
  private HtmlTagScanner       htmlTagScanner;
  private DjangoColoredScanner   htmlCommentScanner;
  private DjangoColoredScanner   htmlScriptletScanner;
  private DjangoColoredScanner   htmlDirectiveScanner;
  private DjangoColoredScanner   htmlDoctypeScanner;
  private AbsDjRuleBasedScanner   cssScanner;
  private AbsDjRuleBasedScanner   jsScanner;

  private DjangoColoredScanner   djCommentScanner;
  private DjangoTagScanner     djTagScanner;
  private DjangoVariableScanner   djVariableScanner;

  private ColorProvider       colorProvider;
  private IPreferenceStore     store;

  public DjangoSourceViewerConfiguration(ColorProvider colorProvider) {
    this.colorProvider = colorProvider;
    this.store = DjangoActivator.getDefault().getPreferenceStore();
  }

  public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
    return IDjangoPartitions.CONFIGURED_CONTENT_TYPES;
  }
  public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType) {
    if (doubleClickStrategy == null)
      doubleClickStrategy = new DjangoDoubleClickStrategy();
    return doubleClickStrategy;
  }
  @Override
  public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
    ContentAssistant assistant = new ContentAssistant();

    // default templates
    assistant.setContentAssistProcessor(new DjangoTagCompletionProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
    assistant.setContentAssistProcessor(new DjangoTagCompletionProcessor(), IDjangoPartitions.DJANGO_TAG);
    assistant.setContentAssistProcessor(new DjangoFilterCompletionProcessor(), IDjangoPartitions.DJANGO_VARIABLE);
    assistant.setContentAssistProcessor(new DjangoTagCompletionProcessor(), IDjangoPartitions.HTML_TAG);
    assistant.setContentAssistProcessor(new DjangoTagCompletionProcessor(), IDjangoPartitions.JAVA_SCRIPT);
    assistant.setContentAssistProcessor(new DjangoTagCompletionProcessor(), IDjangoPartitions.HTML_CSS);

//    // display Django keywords
//    assistant.setContentAssistProcessor(new DjangoCompletionProcessor(IDjangoPartitions.DJANGO_TAG),
//        IDjangoPartitions.DJANGO_TAG);
//
//    // display Django filters
//    assistant.setContentAssistProcessor(new DjangoCompletionProcessor(IDjangoPartitions.DJANGO_VARIABLE),
//        IDjangoPartitions.DJANGO_VARIABLE);

    assistant.enableAutoInsert(true);
    assistant.enableAutoActivation(true);
    assistant.setAutoActivationDelay(100);
    assistant.setProposalPopupOrientation(IContentAssistant.CONTEXT_INFO_BELOW);
    assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_BELOW);
    assistant.setContextInformationPopupBackground(colorProvider.getColor(new RGB(0, 0, 0)));

    //assistant.setDocumentPartitioning(IDjangoPartitions.CONFIGURED_CONTENT_TYPES);

    return assistant;
  }
  protected DjangoColoredScanner getDefaultScanner() {
    if (defaultScanner == null) {
      defaultScanner = new DjangoColoredScanner(colorProvider,
          IDjangoPrefs.DEFAULT_FG_COLOR, IDjangoPrefs.DEFAULT_FG_STYLE);
    }
    return defaultScanner;
  }

  protected AbsDjRuleBasedScanner getJavaScriptScanner() {
    if (jsScanner == null) {
      jsScanner = new JavaScriptScanner(colorProvider,
          IDjangoPrefs.DEFAULT_FG_COLOR, IDjangoPrefs.DEFAULT_FG_STYLE);
    }
    return jsScanner;
  }
  protected HtmlTagScanner getHtmlTagScanner() {
    if (htmlTagScanner == null) {
      htmlTagScanner = new HtmlTagScanner(colorProvider,
          //IDjangoPrefs.HTMLTAG_COLOR, IDjangoPrefs.HTMLTAG_STYLE);
          //IDjangoPrefs.HTMLTAG_ATTR_COLOR, IDjangoPrefs.HTMLTAG_ATTR_STYLE);
          IDjangoPrefs.DEFAULT_FG_COLOR, IDjangoPrefs.DEFAULT_FG_STYLE);
    }
    return htmlTagScanner;
  }

  protected DjangoTagScanner getDjangoTagScanner() {
    if (djTagScanner == null) {
      djTagScanner = new DjangoTagScanner(colorProvider,
          //IDjangoPrefs.DJDELIMITER_COLOR, IDjangoPrefs.DJDELIMITER_STYLE);
          IDjangoPrefs.DEFAULT_FG_COLOR, IDjangoPrefs.DEFAULT_FG_STYLE);
    }
    return djTagScanner;
  }

  protected DjangoVariableScanner getDjangoVarScanner() {
    if (djVariableScanner == null) {
      djVariableScanner = new DjangoVariableScanner(colorProvider,
          //IDjangoPrefs.DJDELIMITER_COLOR, IDjangoPrefs.DJDELIMITER_STYLE);
          IDjangoPrefs.DEFAULT_FG_COLOR, IDjangoPrefs.DEFAULT_FG_STYLE);
    }
    return djVariableScanner;
  }

  protected DjangoColoredScanner getDjangoCommentScanner() {
    if (djCommentScanner == null) {
      djCommentScanner = new DjangoColoredScanner(colorProvider,
          IDjangoPrefs.DJCOMMENT_COLOR,
          IDjangoPrefs.DJCOMMENT_STYLE
          );
    }
    return djCommentScanner;
  }

  protected DjangoColoredScanner getHtmlCommentScanner() {
    if (htmlCommentScanner == null) {
      htmlCommentScanner = new DjangoColoredScanner(colorProvider,
          IDjangoPrefs.HTMLCOMMENT_COLOR,
          IDjangoPrefs.HTMLCOMMENT_STYLE
          );
    }
    return htmlCommentScanner;
  }

  /**
   * Creates or Returns the scanner for scriptlets (<% ... %>).
   */
  protected DjangoColoredScanner getHtmlScriptletScanner() {
    if (htmlScriptletScanner == null) {
      htmlScriptletScanner = new DjangoColoredScanner(colorProvider,
          IDjangoPrefs.HTMLSCRIPTLET_COLOR,
          IDjangoPrefs.HTMLSCRIPTLET_STYLE
          );
    }
    return htmlScriptletScanner;
  }

  /**
   * Creates or Returns the scanner for directives (<%@ ... %>).
   */
  protected DjangoColoredScanner getHtmlDirectiveScanner(){
    if (htmlDirectiveScanner == null) {
      htmlDirectiveScanner = new DjangoColoredScanner(colorProvider,
          IDjangoPrefs.HTMLSCRIPTLET_COLOR,
          IDjangoPrefs.HTMLSCRIPTLET_STYLE
          );
    }
    return htmlDirectiveScanner;
  }

  /**
   * Creates or Returns the scanner for DOCTYPE decl.
   */
  protected DjangoColoredScanner getHtmlDoctypeScanner(){
    if (htmlDoctypeScanner == null) {
      htmlDoctypeScanner = new DjangoColoredScanner(colorProvider,
          IDjangoPrefs.HTMLDOCTYPE_COLOR,
          IDjangoPrefs.HTMLDOCTYPE_STYLE
          );
    }
    return htmlDoctypeScanner;
  }

  /**
   * Creates or Returns the scanner for inner CSS.
   */
  protected AbsDjRuleBasedScanner getCSSScanner() {
    if (cssScanner == null) {
      cssScanner = new CssScanner(colorProvider);
    }
    return cssScanner;
  }


  public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
    if (reconciler != null)
      return reconciler;

    reconciler = new PresentationReconciler();

    DefaultDamagerRepairer dr = null;

    dr = new DefaultDamagerRepairer(getDefaultScanner());
    reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
    reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);

    dr = new DefaultDamagerRepairer(getDjangoTagScanner());
    reconciler.setDamager(dr, IDjangoPartitions.DJANGO_TAG);
    reconciler.setRepairer(dr, IDjangoPartitions.DJANGO_TAG);

    dr = new DefaultDamagerRepairer(getDjangoVarScanner());
    reconciler.setDamager(dr, IDjangoPartitions.DJANGO_VARIABLE);
    reconciler.setRepairer(dr, IDjangoPartitions.DJANGO_VARIABLE);

    dr = new DefaultDamagerRepairer(getDjangoCommentScanner());
    reconciler.setDamager(dr, IDjangoPartitions.DJANGO_COMMENT);
    reconciler.setRepairer(dr, IDjangoPartitions.DJANGO_COMMENT);

    dr = new DefaultDamagerRepairer(getHtmlTagScanner());
    reconciler.setDamager(dr, IDjangoPartitions.HTML_TAG);
    reconciler.setRepairer(dr, IDjangoPartitions.HTML_TAG);

    dr = new DefaultDamagerRepairer(getHtmlCommentScanner());
    reconciler.setDamager(dr, IDjangoPartitions.HTML_COMMENT);
    reconciler.setRepairer(dr, IDjangoPartitions.HTML_COMMENT);

    dr = new DefaultDamagerRepairer(getHtmlDoctypeScanner());
    reconciler.setDamager(dr, IDjangoPartitions.HTML_DOCTYPE);
    reconciler.setRepairer(dr, IDjangoPartitions.HTML_DOCTYPE);

    dr = new DefaultDamagerRepairer(getHtmlScriptletScanner());
    reconciler.setDamager(dr, IDjangoPartitions.HTML_SCRIPTLET);
    reconciler.setRepairer(dr, IDjangoPartitions.HTML_SCRIPTLET);

    dr = new DefaultDamagerRepairer(getHtmlDirectiveScanner());
    reconciler.setDamager(dr, IDjangoPartitions.HTML_DIRECTIVE);
    reconciler.setRepairer(dr, IDjangoPartitions.HTML_DIRECTIVE);

    dr = new DefaultDamagerRepairer(getJavaScriptScanner());
    reconciler.setDamager(dr, IDjangoPartitions.JAVA_SCRIPT);
    reconciler.setRepairer(dr, IDjangoPartitions.JAVA_SCRIPT);

    dr = new DefaultDamagerRepairer(getCSSScanner());
    reconciler.setDamager(dr, IDjangoPartitions.HTML_CSS);
    reconciler.setRepairer(dr, IDjangoPartitions.HTML_CSS);

    return reconciler;
  }

    //updates the syntax highlighting for the specified preference
    //assumes that that editor colorCache has been updated with the
    //new named color
    public void updateSyntaxColorAndStyle() {
        if (reconciler == null) {
          return;
        }

      defaultScanner.updateColors();
      djCommentScanner.updateColors();
      djTagScanner.updateColors();
      djVariableScanner.updateColors();
      cssScanner.updateColors();
      jsScanner.updateColors();

        htmlTagScanner.updateColors();
      htmlCommentScanner.updateColors();
      htmlScriptletScanner.updateColors();
      htmlDirectiveScanner.updateColors();
      htmlDoctypeScanner.updateColors();
    }

}
TOP

Related Classes of org.kacprzak.eclipse.django_editor.editors.DjangoSourceViewerConfiguration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.