001    /**
002     *      jline - Java console input library
003     *      Copyright (c) 2002,2003 Marc Prud'hommeaux mwp1@cornell.edu
004     *      
005     *      This library is free software; you can redistribute it and/or
006     *      modify it under the terms of the GNU Lesser General Public
007     *      License as published by the Free Software Foundation; either
008     *      version 2.1 of the License, or (at your option) any later version.
009     *      
010     *      This library is distributed in the hope that it will be useful,
011     *      but WITHOUT ANY WARRANTY; without even the implied warranty of
012     *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013     *      Lesser General Public License for more details.
014     *      
015     *      You should have received a copy of the GNU Lesser General Public
016     *      License along with this library; if not, write to the Free Software
017     *      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
018     */
019    package jline;
020    
021    import java.io.*;
022    import java.util.*;
023    
024    /**
025     *  A CursorBuffer is a holder for a {@link StringBuffer} that
026     *  also contains the current cursor position.
027     *
028     *  @author  <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
029     */
030    public class CursorBuffer
031    {
032            public int cursor = 0;
033            public final StringBuffer buffer = new StringBuffer ();
034    
035    
036            public int length ()
037            {
038                    return buffer.length ();
039            }
040    
041    
042            public char current ()
043            {
044                    if (cursor <= 0)
045                            return 0;
046    
047                    return buffer.charAt (cursor - 1);
048            }
049    
050    
051            /**
052             *  Insert the specific character into the buffer, setting the
053             *  cursor position ahead one.
054             *
055             *  @param  c  the character to insert
056             */
057            public void insert (final char c)
058            {
059                    buffer.insert (cursor++, c);
060            }
061    
062    
063            /**
064             *  Insert the specified {@link String} into the buffer, setting
065             *  the cursor to the end of the insertion point.
066             *
067             *  @param  str  the String to insert. Must not be null.
068             */
069            public void insert (final String str)
070            {
071                    if (buffer.length () == 0)
072                            buffer.append (str);
073                    else
074                            buffer.insert (cursor, str);
075    
076                    cursor += str.length ();
077            }
078    
079    
080            public String toString ()
081            {
082                    return buffer.toString ();
083            }
084    }