?? syntaxcontext.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 + -