📄 hunkcolorvisitor.java
字号:
package VDiff;
import JLibDiff.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.plaf.basic.*;
public class HunkColorVisitor extends HunkVisitor {
public static Color ADDED_COLOR = Color.yellow;
public static Color DELETED_COLOR = Color.red;
public static Color MODIFIED_COLOR = Color.green;
public static DefaultHighlighter.DefaultHighlightPainter painterAdded =
new DefaultHighlighter.DefaultHighlightPainter(ADDED_COLOR);
public static DefaultHighlighter.DefaultHighlightPainter painterDeleted =
new DefaultHighlighter.DefaultHighlightPainter(DELETED_COLOR);
public static DefaultHighlighter.DefaultHighlightPainter painterModified =
new DefaultHighlighter.DefaultHighlightPainter(MODIFIED_COLOR);
private BasicTextUI.BasicHighlighter oldHighLighter;
private BasicTextUI.BasicHighlighter newHighLighter;
private JTextArea oldTextArea;
private JTextArea newTextArea;
public HunkColorVisitor(JTextArea oldTextArea, JTextArea newTextArea) {
this.oldHighLighter = new BasicTextUI.BasicHighlighter();
this.newHighLighter = new BasicTextUI.BasicHighlighter();
this.oldTextArea = oldTextArea;
this.newTextArea = newTextArea;
this.oldTextArea.setHighlighter(oldHighLighter);
oldHighLighter.install(oldTextArea);
this.newTextArea.setHighlighter(newHighLighter);
newHighLighter.install(newTextArea);
}
public void visitHunkAdd(HunkAdd hunk) {
addtoNewHighLighter(getOffsetSOL(hunk.lowLine(1)-1,
newTextArea.getText()),
getOffsetEOL(hunk.highLine(1)-1,
newTextArea.getText()),
painterAdded);
}
public void visitHunkChange(HunkChange hunk) {
addtoOldHighLighter(getOffsetSOL(hunk.lowLine(0)-1,
oldTextArea.getText()),
getOffsetEOL(hunk.highLine(0)-1,
oldTextArea.getText()),
painterModified);
addtoNewHighLighter(getOffsetSOL(hunk.lowLine(1)-1,
newTextArea.getText()),
getOffsetEOL(hunk.highLine(1)-1,
newTextArea.getText()),
painterModified);
}
public void visitHunkDel(HunkDel hunk) {
addtoOldHighLighter(getOffsetSOL(hunk.lowLine(0)-1,
oldTextArea.getText()),
getOffsetEOL(hunk.highLine(0)-1,
oldTextArea.getText()),
painterDeleted);
}
// return offset of the start of the line
// 0 is the first is the first line
private int getOffsetSOL(int linenumber, String buffer) {
if (linenumber == 0) {
return 0;
} else {
int counter=0;
int offset=-1;
int tmp=-1;
while (counter<linenumber) {
offset++;
counter++;
tmp = buffer.indexOf('\n', offset);
if (tmp == -1) {
return offset+1;
}
offset = tmp;
}
return offset;
}
}
// return offset of the end of the line
private int getOffsetEOL(int linenumber, String buffer) {
int offsetSOL = getOffsetSOL(linenumber, buffer);
int offsetEOL = buffer.indexOf('\n', offsetSOL+1);
if (offsetEOL == -1) {
return offsetSOL+1;
} else {
return offsetEOL;
}
}
private void addtoNewHighLighter(int start, int end,
DefaultHighlighter.DefaultHighlightPainter painter) {
addHighLighter(start, end, painter, newHighLighter);
}
private void addtoOldHighLighter(int start, int end,
DefaultHighlighter.DefaultHighlightPainter painter) {
addHighLighter(start, end, painter, oldHighLighter);
}
private void addHighLighter(int start, int end,
DefaultHighlighter.DefaultHighlightPainter painter,
BasicTextUI.BasicHighlighter highlighter) {
try {
highlighter.addHighlight(start, end, painter);
} catch (BadLocationException e) {
System.err.println(e);
e.printStackTrace();
System.exit(1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -