001 /*
002 * Copyright (c) 2002-2006, Marc Prud'hommeaux. All rights reserved.
003 *
004 * This software is distributable under the BSD license. See the terms of the
005 * BSD license in the documentation provided with this software.
006 */
007 package jline;
008
009
010 /**
011 * A CursorBuffer is a holder for a {@link StringBuffer} that
012 * also contains the current cursor position.
013 *
014 * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
015 */
016 public class CursorBuffer {
017 public int cursor = 0;
018 public final StringBuffer buffer = new StringBuffer();
019
020 public int length() {
021 return buffer.length();
022 }
023
024 public char current() {
025 if (cursor <= 0) {
026 return 0;
027 }
028
029 return buffer.charAt(cursor - 1);
030 }
031
032 /**
033 * Insert the specific character into the buffer, setting the
034 * cursor position ahead one.
035 *
036 * @param c the character to insert
037 */
038 public void insert(final char c) {
039 buffer.insert(cursor++, c);
040 }
041
042 /**
043 * Insert the specified {@link String} into the buffer, setting
044 * the cursor to the end of the insertion point.
045 *
046 * @param str the String to insert. Must not be null.
047 */
048 public void insert(final String str) {
049 if (buffer.length() == 0) {
050 buffer.append(str);
051 } else {
052 buffer.insert(cursor, str);
053 }
054
055 cursor += str.length();
056 }
057
058 public String toString() {
059 return buffer.toString();
060 }
061 }