001 /**
002 * jline - Java console input library
003 * Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>
004 * All rights reserved.
005 *
006 * Redistribution and use in source and binary forms, with or
007 * without modification, are permitted provided that the following
008 * conditions are met:
009 *
010 * Redistributions of source code must retain the above copyright
011 * notice, this list of conditions and the following disclaimer.
012 *
013 * Redistributions in binary form must reproduce the above copyright
014 * notice, this list of conditions and the following disclaimer
015 * in the documentation and/or other materials provided with
016 * the distribution.
017 *
018 * Neither the name of JLine nor the names of its contributors
019 * may be used to endorse or promote products derived from this
020 * software without specific prior written permission.
021 *
022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
023 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
024 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
025 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
026 * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
027 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
028 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
029 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
030 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
031 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
032 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
033 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
034 * OF THE POSSIBILITY OF SUCH DAMAGE.
035 */
036 package jline;
037
038 import java.util.*;
039
040 /**
041 * A Completor is the mechanism by which tab-completion candidates
042 * will be resolved.
043 * <p>
044 * <strong>TODO:</strong>
045 * <ul>
046 * <li>handle quotes and escaped quotes</li>
047 * <li>enable automatic escaping of whitespace</li>
048 * </ul>
049 *
050 * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
051 */
052 public interface Completor
053 {
054 /**
055 * Populates <i>candidates</i> with a list of possible
056 * completions for the <i>buffer</i>. The <i>candidates</i>
057 * list will not be sorted before being displayed to the
058 * user: thus, the complete method should sort the
059 * {@link List} before returning.
060 *
061 *
062 * @param buffer the buffer
063 * @param candidates the {@link List} of candidates to populate
064 * @return the index of the <i>buffer</i> for which
065 * the completion will be relative
066 */
067 int complete (String buffer, int cursor, List candidates);
068 }