⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syntaxcontext.java

📁 模仿WINDOWS的WINZIP的一款软件
💻 JAVA
字号:
package org.jr.jzj.editor;
/**
 * <p>Copyright: Copyright (c) 2002-2003</p>
 * <p>Company: JavaResearch(http://www.javaresearch.org)</p>
 * <p>最后更新日期:2003年3月20日
 * @author Barney,Cherami,Brain
 * @version 0.8
 */

import java.awt.*;
import java.awt.font.*;
import javax.swing.text.*;


public class SyntaxContext
    extends StyleContext
    implements ViewFactory {

  protected static Font[] tokenFonts;
  private static int numTokenTypes = 152;
  protected SyntaxView view;
  protected SyntaxParser parser;

  public static SyntaxContext newInstance() {
    return new DefaultContext();
  }

  public static SyntaxContext newInstance(SyntaxParser parser) {
    SyntaxContext context;
    if (parser == null) {
      context = new DefaultContext();
    }
    else {
      try {
        context = new SyntaxContext(parser);
      }
      catch (Exception ex) {
        context = new DefaultContext();
      }
    }
    return context;
  }

  protected SyntaxContext(SyntaxParser parser) {
    this.parser = parser;
    initFonts();
  }

  protected void initFonts() {
    if (parser != null) {
      tokenFonts = parser.getFonts();
    }
  }

  public static Font[] getTokenStyles() {
    return tokenFonts;
  }

  public View create(Element elem) {
    return new SyntaxView(elem);
  }

  public Font getFont(int code) {
    return tokenFonts[code];
  }

  class SyntaxView
      extends PlainView {
    boolean lexerValid;
    SyntaxScanner simpleLexer;
    SyntaxView(Element elem) {
      super(elem);
      SyntaxDocument doc = (SyntaxDocument) getDocument();
      simpleLexer = doc.createSyntaxScanner();
      lexerValid = false;
    }

    protected int getTabSize() {
      Integer i = (Integer) getDocument().getProperty(PlainDocument.
          tabSizeAttribute);
      int size = (i != null) ? i.intValue() : 4;
      return size;
    }

    public void paint(Graphics g, Shape a) {
      super.paint(g, a);
      lexerValid = false;
    }

    protected int drawUnselectedText(Graphics g, int x, int y, int start,
                                     int end) throws BadLocationException {
      Document doc = getDocument();
      int mark = start;
      int drawTo = 0;
      Font font;
      while (start < end) {
        updateSimpleScanner(start);
        font = getFont(simpleLexer.token);
        drawTo = Math.min(simpleLexer.getEndOffset(), end);
        g.setFont(font);
        g.setColor( (Color) font.getAttributes().get(TextAttribute.FOREGROUND));
        Segment text = getLineBuffer();
        if (drawTo < start) {
          break;
        }
        doc.getText(start, drawTo - start, text);
        x = Utilities.drawTabbedText(text, x, y, g, this, start);
        start = drawTo;
      }
      return x;
    }

    private void updateSimpleScanner(int p) {
      try {
        if (!lexerValid) {
          SyntaxDocument doc = (SyntaxDocument) getDocument();
          simpleLexer.setRange(0, doc.getLength(), doc.getText(0, doc.getLength()));
          lexerValid = true;
        }
        int newEndOffset = 0;
        int oldEndOffset = -1;
        while (simpleLexer.getEndOffset() <= p) {
          simpleLexer.scan();
          newEndOffset = simpleLexer.getEndOffset();
          if (newEndOffset == oldEndOffset) {
            break;
          }
          else {
            oldEndOffset = newEndOffset;
          }
        }
      }
      catch (BadLocationException e) {
        e.printStackTrace();
      }
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -