Package frege.imp.tokenColorer

Source Code of frege.imp.tokenColorer.FregeTokenColorer

package frege.imp.tokenColorer;

import java.util.regex.Pattern;

import org.eclipse.imp.parser.IParseController;
import org.eclipse.imp.preferences.IPreferencesService;
import org.eclipse.imp.services.ITokenColorer;
import org.eclipse.imp.services.base.TokenColorerBase;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;

import frege.FregePlugin;
import frege.compiler.types.QNames.TQName.DLocal;
import frege.compiler.types.Tokens.TToken;
import frege.compiler.types.Global.TGlobal;
import frege.compiler.enums.TokenID.TTokenID;
import frege.compiler.types.QNames.TQName;
import frege.imp.parser.FregeParseController;
import frege.imp.preferences.FregePreferencesConstants;
import frege.prelude.PreludeBase.TEither;
import frege.prelude.PreludeBase.TEither.DRight;
import frege.prelude.PreludeBase.TMaybe;
import frege.runtime.Delayed;



public class FregeTokenColorer extends TokenColorerBase implements ITokenColorer {
  protected final TextAttribute
      normalAttribute, impAttribute, iopAttribute,
      identAttribute, docuAttribute,
      commentAttribute, specialAttribute,
      keywordAttribute, literalAttribute, errorAttribute,
      nsAttribute, typeAttribute, itypeAttribute,
      conAttribute, iconAttribute;
  final Pattern pattern = Pattern.compile("^\\W+$");

  //  protected final TextAttribute commentAttribute, stringAttribute;

  public FregeTokenColorer() {
    super();
   
    Display display = Display.getDefault();
    IPreferencesService service = FregePlugin.getInstance().getPreferencesService();
   
    final boolean boldns = service.getBooleanPreference(FregePreferencesConstants.P_BOLDNS);
    final boolean italic = service.getBooleanPreference(FregePreferencesConstants.P_ITALICIMPORTS);
   
    Color docuColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_DOCUCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_BLUE).getRGB()));
    Color commColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_COMMCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_CYAN).getRGB()));
    Color tconColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_TCONCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_RED).getRGB()));
    Color dconColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_DCONCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_YELLOW).getRGB()));
    Color varidColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_VARIDCOLOR),
            display.getSystemColor(SWT.COLOR_BLACK).getRGB()));
    Color importColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_IMPORTCOLOR),
            display.getSystemColor(SWT.COLOR_BLACK).getRGB()));
    Color keywdColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_KEYWORDCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_MAGENTA).getRGB()));
    Color litColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_LITERALCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_CYAN).getRGB()));
    Color errColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_ERRORCOLOR),
            display.getSystemColor(SWT.COLOR_RED).getRGB()));
    Color spcColor = new Color (display,
        StringConverter.asRGB(service.getStringPreference(FregePreferencesConstants.P_SPECIALCOLOR),
            display.getSystemColor(SWT.COLOR_DARK_MAGENTA).getRGB()));
    commentAttribute = new TextAttribute(commColor, null, SWT.NORMAL);
    docuAttribute    = new TextAttribute(docuColor, null, SWT.ITALIC);
    normalAttribute  = null; // new TextAttribute(display.getSystemColor(SWT.COLOR_BLACK), null, SWT.NORMAL);
    keywordAttribute = new TextAttribute(keywdColor, null, SWT.BOLD);
    literalAttribute = new TextAttribute(litColor, null, SWT.NORMAL);
    errorAttribute   = new TextAttribute(errColor, null, SWT.NORMAL);
    specialAttribute = new TextAttribute(spcColor, null, SWT.BOLD);
   
    identAttribute   = new TextAttribute(varidColor, null, SWT.NORMAL);
    impAttribute     = new TextAttribute(importColor, null, italic ? SWT.ITALIC : SWT.NORMAL);
    iopAttribute     = new TextAttribute(importColor, null, SWT.NORMAL);
    nsAttribute      = new TextAttribute(tconColor,  null, boldns ? SWT.BOLD : SWT.NORMAL);
    typeAttribute   = new TextAttribute(tconColor,  null, SWT.NORMAL);
    itypeAttribute   = new TextAttribute(tconColor,  null, italic ? SWT.ITALIC : SWT.NORMAL);
    conAttribute     = new TextAttribute(dconColor,  null, SWT.NORMAL);
    iconAttribute    = new TextAttribute(dconColor,  null, italic ? SWT.ITALIC : SWT.NORMAL);
  }
 
  public TextAttribute getKind(FregeParseController controller, TToken tok, TextAttribute normalAttribute) {
    TGlobal g = controller.getCurrentAst();
    final TMaybe mb = TGlobal.resolved(g, tok);
    final TMaybe.DJust just = mb._Just();
    if (just == null) return normalAttribute;
    final TEither et = Delayed.<TEither>forced( just.mem1 );
    final DRight right = et._Right();
    if (right == null) return nsAttribute;      // since it is Left ()
    final TQName qname = Delayed.<TQName>forced( right.mem1 );
    final DLocal local = qname._Local();
    if (local != null) return normalAttribute;    // local var
    final boolean our = TGlobal.our(g, qname);
    final TQName.DTName tname = qname._TName();
    if (tname != null) return our? typeAttribute : itypeAttribute;
    final TQName.DMName mname = qname._MName();
    if (mname != null && TToken.tokid(tok) == TTokenID.CONID)
      return our ? conAttribute : iconAttribute;
    final String b = TQName.M.base(qname);
    final boolean op = pattern.matcher(b).find();
    return our ? identAttribute : (op ? iopAttribute : impAttribute);
  }

  @Override
  public TextAttribute getColoring(IParseController controller, Object o) {
    if (o == null)
      return null;
    return getColoring((FregeParseController) controller, (TToken) o);
  }
 
  public TextAttribute getColoring(final FregeParseController controller, final TToken token) {
    final int tid = TToken.tokid(token);
   
    if (tid >= TTokenID.PACKAGE && tid <= TTokenID.INFIXR)   return keywordAttribute;
    if (tid == TTokenID.DOCUMENTATION)            return docuAttribute;
    if (tid == TTokenID.COMMENT)              return commentAttribute;
    if (tid == TTokenID.CONID
        || tid == TTokenID.QUALIFIER
        || tid == TTokenID.VARID) {
      return  getKind(controller, token, normalAttribute);
    }
     
    // if (tid == TTokenID.VARID.j || tid == TTokenID.QVARID.j)  return identAttribute;
    if (tid >= TTokenID.INTCONST && tid <= TTokenID.REGEXP) return literalAttribute;
    if (tid == TTokenID.LEXERROR)               return errorAttribute;

    if (tid >= TTokenID.DCOLON && tid <= TTokenID.EARROWreturn specialAttribute;
    if (tid >= TTokenID.LOP0 && tid <= TTokenID.SOMEOP)  
      return getKind(controller, token, normalAttribute);
    if (tid == TTokenID.CHAR && TToken.value(token).length() > 0)
      switch (TToken.value(token).charAt(0)) {
        case '_': return  specialAttribute;
        case '=': return  specialAttribute;
        case '|': return  specialAttribute;
        case '\\': return specialAttribute;
        case ';': return normalAttribute;
        case '(': return normalAttribute;
        case ')': return normalAttribute;
        case '[': return normalAttribute;
        case ']': return normalAttribute;
        case '{': return normalAttribute;
        case '}': return normalAttribute;
        case ',': return normalAttribute;
        case '.': return normalAttribute;
        case '!': return identAttribute;
        case '?': return identAttribute;
        case '-': return identAttribute;
        default: break;
    }
    // System.err.println("Don't know how to colour " + IShow_Token.show(token) + " ?");
    return errorAttribute;
  }

  public IRegion calculateDamageExtent(IRegion seed) {
    System.err.println("calculateDamagExtent: " + seed);
    return seed;
  }
}
TOP

Related Classes of frege.imp.tokenColorer.FregeTokenColorer

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.