diff test/editortest/REPTextImpl.java @ 414:784a4d67e6a5

(no commit message)
author one
date Tue, 09 Dec 2008 15:44:28 +0900
parents
children b7f42fc75a36
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/editortest/REPTextImpl.java	Tue Dec 09 15:44:28 2008 +0900
@@ -0,0 +1,89 @@
+package test.editortest;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.swing.JTextArea;
+import javax.swing.text.BadLocationException;
+
+import rep.REP;
+import rep.REPCommand;
+
+public class REPTextImpl implements REPText {
+	
+	private JTextArea textArea;
+	private String BR = System.getProperty("line.separator");
+
+	public REPTextImpl(JTextArea area){
+		this.textArea = area;
+	}
+
+	public String delete(int lineno, String text) {
+		increaseLine(lineno);
+		
+		String deleted = "";
+		try {
+			int start = textArea.getLineStartOffset(lineno);
+			int end = textArea.getLineEndOffset(lineno);
+			int length = end - start;
+			deleted = textArea.getText(start, length);
+			textArea.replaceRange("", start, end);
+		} catch (BadLocationException e) {
+			e.printStackTrace();
+		}
+		return deleted;
+	}
+
+	public void insert(int lineno, String text) {
+		increaseLine(lineno);
+		
+		String text2 = text + BR;
+		try {
+			int offset = textArea.getLineStartOffset(lineno);
+			textArea.insert(text2, offset);
+		} catch (BadLocationException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private void increaseLine(int lineno) {
+		while(true){
+			int lines = textArea.getLineCount();
+			Logger.print(lineno + " : " + lines);
+			if(lineno >= lines){
+				textArea.append(BR);
+			}else{
+				break;
+			}
+		}
+	}
+	
+	public void edit(REPCommand command){
+		int lineno = command.lineno;
+		String text = command.string;
+		if(command.cmd == REP.REPCMD_INSERT){
+			insert(lineno, text);
+		}else if(command.cmd == REP.REPCMD_DELETE){
+			delete(lineno, text);
+		}else{
+			Logger.print(command);
+		}
+	}
+
+	public List<String> list() {
+		int count = textArea.getLineCount();
+		LinkedList<String> list = new LinkedList<String>();
+		for(int i = 0; i < count; i++){
+			try {
+				int start = textArea.getLineStartOffset(i);
+				int end = textArea.getLineEndOffset(i);
+				String text = textArea.getText(start, end - start);
+				list.add(text);
+			} catch (BadLocationException e) {
+				e.printStackTrace();
+			}
+		}
+		return list;
+	}
+
+}