idlviewfactory.java
来自「UCS (Ultra Corba Simulator) is one more 」· Java 代码 · 共 437 行 · 第 1/2 页
JAVA
437 行
/**
* (c) 2007 UCS_2008
*
* Project UCS (Ultra Corba Simulator)
* Subproject CorbaMNQ
* File IdlViewFactory.java
* Created on Sep 13, 2007 by ucs_2008
*
* History:
* Date(Y.M.D) User Reason (plus CR, LM, Fault number)
*
*/
package com.corba.mnq.ui.text.idl;
import com.corba.mnq.ui.text.SegmentCache;
import com.corba.mnq.ui.text.SegmentExt;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent;
import javax.swing.text.PlainView;
import javax.swing.text.Segment;
import javax.swing.text.Utilities;
import javax.swing.text.View;
import javax.swing.text.ViewFactory;
import java.util.HashMap;
import java.util.Map;
/**
* name: "IdlViewFactory"
*
* @author ucs_2008
*/
public class IdlViewFactory implements ViewFactory {
public static final String KEYWORD = "keyword";
public static final String OPERATOR = "operator";
public static final String TYPE = "type";
// public static final String CLASS = "class"; not used anymore
// since
// version 1.7.3
public static final String RESERVED_WORD = "reserved_word";
private static Map idlSpecialWordsMap;
public IdlViewFactory() {
super();
getIdlSpecialWordsMap();
}
public static Map getIdlSpecialWordsMap() {
idlSpecialWordsMap = new HashMap();
// keywrods for idl file
idlSpecialWordsMap.put("abstract", KEYWORD);
idlSpecialWordsMap.put("exception", KEYWORD);
idlSpecialWordsMap.put("inout", KEYWORD);
idlSpecialWordsMap.put("provides", KEYWORD);
idlSpecialWordsMap.put("truncatable", KEYWORD);
idlSpecialWordsMap.put("attribute", KEYWORD);
idlSpecialWordsMap.put("emits", KEYWORD);
idlSpecialWordsMap.put("interface", KEYWORD);
idlSpecialWordsMap.put("public", KEYWORD);
idlSpecialWordsMap.put("typedef", KEYWORD);
idlSpecialWordsMap.put("enum", KEYWORD);
idlSpecialWordsMap.put("local", KEYWORD);
idlSpecialWordsMap.put("publishes", KEYWORD);
idlSpecialWordsMap.put("typeid", KEYWORD);
idlSpecialWordsMap.put("eventtype", KEYWORD);
idlSpecialWordsMap.put("raises", KEYWORD);
idlSpecialWordsMap.put("typeprefix", KEYWORD);
idlSpecialWordsMap.put("case", KEYWORD);
idlSpecialWordsMap.put("factory", KEYWORD);
idlSpecialWordsMap.put("module", KEYWORD);
idlSpecialWordsMap.put("readonly", KEYWORD);
idlSpecialWordsMap.put("FALSE", KEYWORD);
idlSpecialWordsMap.put("multiple", KEYWORD);
idlSpecialWordsMap.put("setraises", KEYWORD);
idlSpecialWordsMap.put("union", KEYWORD);
idlSpecialWordsMap.put("component", KEYWORD);
idlSpecialWordsMap.put("finder", KEYWORD);
idlSpecialWordsMap.put("native", KEYWORD);
idlSpecialWordsMap.put("sequence", KEYWORD);
idlSpecialWordsMap.put("uses", KEYWORD);
idlSpecialWordsMap.put("const", KEYWORD);
idlSpecialWordsMap.put("fixed", KEYWORD);
idlSpecialWordsMap.put("Object", KEYWORD);
idlSpecialWordsMap.put("ValueBase", KEYWORD);
idlSpecialWordsMap.put("consumes", KEYWORD);
idlSpecialWordsMap.put("valuetype", KEYWORD);
idlSpecialWordsMap.put("context", KEYWORD);
idlSpecialWordsMap.put("getraises", KEYWORD);
idlSpecialWordsMap.put("oneway", KEYWORD);
idlSpecialWordsMap.put("struct", KEYWORD);
idlSpecialWordsMap.put("custom", KEYWORD);
idlSpecialWordsMap.put("home", KEYWORD);
idlSpecialWordsMap.put("out", KEYWORD);
idlSpecialWordsMap.put("supports", KEYWORD);
idlSpecialWordsMap.put("default", KEYWORD);
idlSpecialWordsMap.put("import", KEYWORD);
idlSpecialWordsMap.put("primarykey", KEYWORD);
idlSpecialWordsMap.put("switch", KEYWORD);
idlSpecialWordsMap.put("in", KEYWORD);
idlSpecialWordsMap.put("private", KEYWORD);
idlSpecialWordsMap.put("TRUE", KEYWORD);
idlSpecialWordsMap.put("void", KEYWORD);
// type words for idl
idlSpecialWordsMap.put("any", TYPE);
idlSpecialWordsMap.put("boolean", TYPE);
idlSpecialWordsMap.put("long", TYPE);
idlSpecialWordsMap.put("unsigned", TYPE);
idlSpecialWordsMap.put("char", TYPE);
idlSpecialWordsMap.put("short", TYPE);
idlSpecialWordsMap.put("float", TYPE);
idlSpecialWordsMap.put("octet", TYPE);
idlSpecialWordsMap.put("string", TYPE);
idlSpecialWordsMap.put("void", TYPE);
idlSpecialWordsMap.put("wchar", TYPE);
idlSpecialWordsMap.put("wstring", TYPE);
idlSpecialWordsMap.put("double", TYPE);
return idlSpecialWordsMap;
}
public View create(Element elem) {
return new JavaView(elem);
}
class JavaView extends PlainView {
public JavaView(Element elem) {
super(elem);
}
protected int drawUnselectedText(Graphics g, int x, int y, int startOffset, int endOffset)
throws BadLocationException {
int length = (endOffset < getDocument().getLength() ? endOffset : getDocument()
.getLength())
- startOffset;
return scanParagraph(g, x, y, startOffset, length);
}
private boolean isParagraphInComment(int startOffset) {
if (startOffset > 0) {
Element root = getDocument().getDefaultRootElement();
Element previousElement = root.getElement(root.getElementIndex(startOffset - 1));
if (previousElement.getAttributes().containsAttribute(
IdlDocument.MULTILINE_COMMENT, IdlDocument.MULTILINE_COMMENT))
return true;
}
return false;
}
private int scanParagraph(Graphics g, int x, int y, int startPosition, int length)
throws BadLocationException {
SegmentExt content = SegmentCache.getSharedSegment();
// content.a
JTextComponent host = (JTextComponent) getContainer();
getDocument().getText(startPosition, length, content);
boolean inComment = isParagraphInComment(startPosition);
boolean inSingleComment = false;
for (int wordIndex = 0; wordIndex < content.count;) {
char indexedChar = content.array[content.offset + wordIndex];
if (Character.isJavaIdentifierStart(indexedChar) && !inComment && !inSingleComment) {
String scannedIdentifier = scanIdentifier(content, wordIndex);
String tokenType = (String) idlSpecialWordsMap.get(scannedIdentifier);
int scannedIdentifierLength = scannedIdentifier.length();
Color color = getColorForTokenType(tokenType);
Segment text = getLineBuffer();
getDocument().getText(startPosition + wordIndex, scannedIdentifierLength, text);
g.setColor(color);
x = Utilities.drawTabbedText(text, x, y, g, this, startPosition + wordIndex);
wordIndex = wordIndex + scannedIdentifierLength;
} else if (Character.isDigit(indexedChar)) {
String scannedNumericLiteral = scanNumericLiteral(content, wordIndex);
int scannedNumericLiteralLength = scannedNumericLiteral.length();
Color color = (Color) host
.getClientProperty(IdlTextEditor.NUMERIC_LITERAL_COLOR);
Segment text = getLineBuffer();
getDocument().getText(startPosition + wordIndex, scannedNumericLiteralLength,
text);
g.setColor(color);
x = Utilities.drawTabbedText(text, x, y, g, this, startPosition + wordIndex);
wordIndex = wordIndex + scannedNumericLiteralLength;
} else if (indexedChar == '\"') {
int scannedStringLength = scanStringLiteral(content, wordIndex);
Segment text = getLineBuffer();
getDocument().getText(startPosition + wordIndex, scannedStringLength, text);
g.setColor((Color) host.getClientProperty(IdlTextEditor.STRING_LITERAL_COLOR));
x = Utilities.drawTabbedText(text, x, y, g, this, startPosition + wordIndex);
wordIndex = wordIndex + scannedStringLength;
} else if (indexedChar == '\'') {
int scannedCharLength = scanCharLiteral(content, wordIndex);
Segment text = getLineBuffer();
getDocument().getText(startPosition + wordIndex, scannedCharLength, text);
g.setColor((Color) host.getClientProperty(IdlTextEditor.CHAR_LITERAL_COLOR));
x = Utilities.drawTabbedText(text, x, y, g, this, startPosition + wordIndex);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?