From 6587c670ccd950fc835140c4413ebb3036c2d26e Mon Sep 17 00:00:00 2001 From: Imanol-Mikel Barba Sabariego Date: Tue, 17 Sep 2013 09:43:34 +0000 Subject: [PATCH] git-svn-id: svn://imanolbarba.net/PAD@3 c2ee353e-ed0d-4329-bf56-03aec153487f --- readline/bin/pad/prac1/EditableBufferedReader.class | Bin 2299 -> 0 bytes readline/src/pad/prac1/EditableBufferedReader.java | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 184 insertions(+), 6 deletions(-) diff --git a/readline/bin/pad/prac1/EditableBufferedReader.class b/readline/bin/pad/prac1/EditableBufferedReader.class index 00fdc51..b6f0177 100644 Binary files a/readline/bin/pad/prac1/EditableBufferedReader.class and b/readline/bin/pad/prac1/EditableBufferedReader.class differ diff --git a/readline/src/pad/prac1/EditableBufferedReader.java b/readline/src/pad/prac1/EditableBufferedReader.java index 2582977..2ee7a49 100644 --- a/readline/src/pad/prac1/EditableBufferedReader.java +++ b/readline/src/pad/prac1/EditableBufferedReader.java @@ -4,8 +4,53 @@ import java.io.*; public class EditableBufferedReader extends BufferedReader { + /* + * MODE DEFINITIONS + */ + + public static final int INSERT = 0; + public static final int OVERWRITE = 1; + public static final int DEL_BACKWARD = 0; + public static final int DEL_FORWARD = 1; + + /* + * TYPE DEFINITIONS + */ + + public static final int ESCAPE_SEQUENCE = 0; + public static final int PRINTABLE = 1; + public static final int NON_PRINTABLE = 2; + + /* KEY DEFINITIONS + * ESC (0x1B) starts an escape sequence + * ESC+[+C (0x1B 0x5B 0x43) Cursor Forward + * ESC+[+D (0x1B 0x5B 0x44) Cursor Backward + * ESC+[+2+~ (0x1B 0x5B 0x32 0x7E) Insert + * ESC+[+3+~ (0x1B 0x5B 0x33 0x7E) Delete forward + * ESC+O+H (0x1B 0x4F 0x48) Home + * ESC+O+F (0x1B 0x4F 0x46) End + */ + + public static final int RETURN_KEY = 0x0D; + public static final int BACKSPACE = 0x08; + public static final int BACKSPACE_DEL = 0x7B; + public static final int ESC = 0x1B; + public static final int ESC_SEQ = 0x5B; + public static final int FORWARD_C = 0x43; + public static final int BACKWARD_D = 0x44; + public static final int DEL_3 = 0x33; + public static final int TILDE = 0x7E; + public static final int HOME_END = 0x4F; + public static final int HOME = 0x48; + public static final int END = 0x46; + public static final int INSERT_2 = 0x32; + private String line = ""; + private int lineLength = 0; + private int cursorPosition = 1; private boolean returnKey = false; + private int writeMode = INSERT; + public EditableBufferedReader(Reader in) { @@ -29,6 +74,80 @@ public class EditableBufferedReader extends BufferedReader Runtime.getRuntime().exec(cmd).waitFor(); } + private int parseKey(int key) + { + return PRINTABLE; + } + + public void addChar(char character) + { + //switch writemode + //if insert + //print space + //moveto cursorPosition-1 + //print char + //add to string + //update string length + //update cursor position + //if overwrite + //just print char + //add to string + //update string length + //update cursor position + } + + public void delChar(int mode) + { + //switch mode + //if back + //del char using backspace + //remove char from line string + //update cursor position + //update line length + //if forward + //moveto cursorPosition+1 + //del char using backspace + //remove char from line string + //update line length + } + + private void moveCursorForward() + { + System.out.print((char)ESC); + System.out.print((char)ESC_SEQ); + System.out.print((char)FORWARD_C); + } + + private void moveCursorBackward() + { + System.out.print((char)ESC); + System.out.print((char)ESC_SEQ); + System.out.print((char)BACKWARD_D); + } + + public void moveCursorTo(int pos) + { + if((pos <= lineLength) && (pos >= 1)) + { + if(pos > cursorPosition) + { + for(int i = 0; i < (pos - cursorPosition); i++) + { + moveCursorForward(); + } + } + + else if(pos < cursorPosition) + { + for(int i = 0; i < (cursorPosition - pos); i++) + { + moveCursorBackward(); + } + } + cursorPosition = pos; + } + } + public int read() throws IOException { return super.read(); @@ -50,16 +169,75 @@ public class EditableBufferedReader extends BufferedReader try { int character = read(); - switch(character) + System.out.println("\n\n" + character + "\n"); + switch(parseKey(character)) { - case 0x0D: - returnKey = true; + case ESCAPE_SEQUENCE: + if(read() == ESC_SEQ) + { + switch(read()) + { + case FORWARD_C: + moveCursorTo(cursorPosition+1); + break; + + case BACKWARD_D: + moveCursorTo(cursorPosition-1); + break; + + case DEL_3: + if(read() == TILDE) + { + delChar(DEL_FORWARD); + } + break; + + case INSERT_2: + if(read() == TILDE) + { + writeMode = 1-writeMode; + } + break; + + case HOME_END: + switch(read()) + { + case HOME: + moveCursorTo(1); + break; + + case END: + moveCursorTo(lineLength+1); + break; + } + break; + } + } + break; + + case PRINTABLE: + switch(character) + { + case RETURN_KEY: + returnKey = true; + break; + + case BACKSPACE: + case BACKSPACE_DEL: + delChar(DEL_BACKWARD); + break; + + default: + addChar((char)character); + break; + } break; - default: - line += (char)character; - System.out.print((char)character); + + case NON_PRINTABLE: + //ignore break; } + } catch (IOException e) { -- libgit2 0.22.2