package org.ninjadev.multivim;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;
import java.util.LinkedList;
public class Buffer implements Serializable{
public LinkedList<String> lines;
public int bufferId;
public static int bufferIdCounter = 0;
public Buffer() throws IOException{
lines = new LinkedList<String>();
bufferId = bufferIdCounter++;
insertLine(0,"");
}
public void insertLine(int index, String line) throws IOException{
lines.add(index, line);
}
public void deleteLine(int index) throws IOException{
lines.remove(index);
}
public void replaceLine(int index, String line) throws IOException{
lines.remove(index);
lines.add(index, line);
}
public String toString(){
StringBuilder sb = new StringBuilder();
for(String line : lines){
sb.append(line);
sb.append("\n");
}
if(sb.length() > 0){
sb.delete(sb.length()-1, sb.length());
}
return sb.toString();
}
public String insert(String text, Cursor cursor) throws IOException {
System.out.println("MY TEXT: " + text);
String line = lines.get((int) cursor.data.position.row);
line = line.substring(0,cursor.data.position.column) + text + line.substring(cursor.data.position.column);
replaceLine(cursor.data.position.row, line);
System.out.println(line);
return line;
}
public Buffer readFile(String pathname) throws IOException {
BufferedReader file = new BufferedReader(new FileReader(new File(pathname)));
int i=0;
String line;
while((line = file.readLine()) != null){
insertLine(i++,line);
}
file.close();
return this;
}
public String getChar(int y, int x) {
String character = null;
try{
character = ""+lines.get(y).charAt(x);
}catch(Exception e){}
return character;
}
public void setChar(String chr, int line, int character) {
String str = lines.get(line);
lines.set(line, str.substring(0, character) + chr + str.substring(character+1));
}
public void delete(Cursor cursor) throws IOException {
String line = lines.get(cursor.data.position.row);
if(cursor.data.position.column == 0){
cursor.data.position.column = lines.get(cursor.data.position.row-1).length()+1;
join(cursor.data.position.row-1, cursor.data.position.row);
cursor.data.position.row--;
}else{
lines.set(cursor.data.position.row, line.substring(0, cursor.data.position.column-1) + line.substring(cursor.data.position.column));
}
}
private void join(int i, int j) throws IOException {
lines.set(i, lines.get(i) + lines.get(j));
deleteLine(j);
}
public void delete(Cursor cursor, Cursor operatorCursor) throws IOException {
while(operatorCursor.data.position.row != cursor.data.position.row ||
operatorCursor.data.position.column != cursor.data.position.column){
System.out.println("delete");
delete(operatorCursor);
operatorCursor.backward();
}
}
}