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

📄 hunkcolorvisitor.java

📁 用来二进制文件比较
💻 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 + -