Author: olga
Date: Wed Jul 23 11:36:19 2008
New Revision: 679154

URL: http://svn.apache.org/viewvc?rev=679154&view=rev
Log:
PIG-139: command line editing

Added:
    incubator/pig/branches/types/autocomplete
    incubator/pig/branches/types/lib/jline-0.9.94.jar   (with props)
    incubator/pig/branches/types/lib/jline-LICENSE.txt
    
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/PigCompletor.java
    incubator/pig/branches/types/src/org/apache/pig/tools/grunt/autocomplete
Modified:
    incubator/pig/branches/types/CHANGES.txt
    incubator/pig/branches/types/build.xml
    incubator/pig/branches/types/src/org/apache/pig/Main.java
    incubator/pig/branches/types/src/org/apache/pig/tools/grunt/Grunt.java
    incubator/pig/branches/types/src/org/apache/pig/tools/grunt/GruntParser.java
    
incubator/pig/branches/types/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj

Modified: incubator/pig/branches/types/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/CHANGES.txt?rev=679154&r1=679153&r2=679154&view=diff
==============================================================================
--- incubator/pig/branches/types/CHANGES.txt (original)
+++ incubator/pig/branches/types/CHANGES.txt Wed Jul 23 11:36:19 2008
@@ -139,3 +139,5 @@
     PIG-294: string comparator unit tests (sms via pi_song)
 
     PIG-258: cleaning up directories on failure (daijy via olgan)
+
+    PIG-139: command line editing

Added: incubator/pig/branches/types/autocomplete
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/autocomplete?rev=679154&view=auto
==============================================================================
--- incubator/pig/branches/types/autocomplete (added)
+++ incubator/pig/branches/types/autocomplete Wed Jul 23 11:36:19 2008
@@ -0,0 +1,46 @@
+# This is auto-complete file for grunt. Put this file anywhere in
+# your CLASSPATH or your working directory. Auto-complete entry
+# can be anything include piggy bank tokens, commonly used paths,
+# etc. The only constraint is that entry can not contain whitespace
+# (include tab).
+#
+UPPER
+getExponent
+CEIL
+RANDOM
+LOG
+toDegrees
+LOG1P
+NEXTUP
+MIN
+MAX
+SIN
+TANH
+ASIN
+COSH
+EXP
+IEEEremainder
+nextAfter
+ULP
+SINH
+SIGNUM
+HYPOT
+ATAN2
+ABS
+POW
+RINT
+FLOOR
+LOG10
+TAN
+ATAN
+toRadians
+COS
+SCALB
+ACOS
+ROUND
+SQRT
+CBRT
+EXPM1
+copySign
+COR
+COV

Modified: incubator/pig/branches/types/build.xml
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/build.xml?rev=679154&r1=679153&r2=679154&view=diff
==============================================================================
--- incubator/pig/branches/types/build.xml (original)
+++ incubator/pig/branches/types/build.xml Wed Jul 23 11:36:19 2008
@@ -82,6 +82,7 @@
         <fileset file="${lib.dir}/javacc.jar" />
         <fileset file="${lib.dir}/jsch-0.1.33.jar" />
         <fileset file="${lib.dir}/junit-4.1.jar" />
+        <fileset file="${lib.dir}/jline-0.9.94.jar" />
         <fileset file="${lib.dir}/commons-collections-3.2.jar" />
     </path>
 
@@ -200,6 +201,7 @@
             <compilerarg line="${javac.args} ${javac.args.warnings}"/>
                <classpath refid="${cp}" />
         </javac>
+        <copy file="${src.dir}/org/apache/pig/tools/grunt/autocomplete" 
todir="${build.classes}/org/apache/pig/tools/grunt"/>
     </target>
         
     <!-- this target is for compilation with all warnings enabled -->
@@ -302,6 +304,7 @@
             <zipfileset src="${lib.dir}/junit-4.1.jar" />
             <zipfileset src="${lib.dir}/${hadoop.jarfile}" />
             <zipfileset src="${lib.dir}/jsch-0.1.33.jar" />
+            <zipfileset src="${lib.dir}/jline-0.9.94.jar" />
         </jar>
         <copy file="${output.jarfile}" tofile="${output.jarfile.backcompat}"/>
     </target>

Added: incubator/pig/branches/types/lib/jline-0.9.94.jar
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/lib/jline-0.9.94.jar?rev=679154&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/pig/branches/types/lib/jline-0.9.94.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/pig/branches/types/lib/jline-LICENSE.txt
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/lib/jline-LICENSE.txt?rev=679154&view=auto
==============================================================================
--- incubator/pig/branches/types/lib/jline-LICENSE.txt (added)
+++ incubator/pig/branches/types/lib/jline-LICENSE.txt Wed Jul 23 11:36:19 2008
@@ -0,0 +1,149 @@
+Common Public License - v 1.0 
+
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC 
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 
+
+
+1. DEFINITIONS 
+
+"Contribution" means: 
+
+a) in the case of the initial Contributor, the initial code and documentation 
distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate from and are 
distributed by that particular Contributor. A Contribution 'originates' from a
+Contributor if it was added to the Program by such Contributor itself or 
anyone acting on such Contributor's behalf. Contributions do not include 
additions
+to the Program which: (i) are separate modules of software distributed in 
conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program. 
+
+"Contributor" means any person or entity that distributes the Program. 
+
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are 
necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program. 
+
+
+"Program" means the Contributions distributed in accordance with this 
Agreement. 
+
+
+"Recipient" means anyone who receives the Program under this Agreement, 
including all Contributors. 
+
+
+2. GRANT OF RIGHTS 
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants 
Recipient a non-exclusive, worldwide, royalty-free copyright license to
+reproduce, prepare derivative works of, publicly display, publicly perform, 
distribute and sublicense the Contribution of such Contributor, if any, and
+such derivative works, in source code and object code form.
+b) Subject to the terms of this Agreement, each Contributor hereby grants 
Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the 
Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and the 
Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the 
Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder. 
+c) Recipient understands that although each Contributor grants the licenses to 
its Contributions set forth herein, no assurances are provided by any
+Contributor that the Program does not infringe the patent or other 
intellectual property rights of any other entity. Each Contributor disclaims any
+liability to Recipient for claims brought by any other entity based on 
infringement of intellectual property rights or otherwise. As a condition to
+exercising the rights and licenses granted hereunder, each Recipient hereby 
assumes sole responsibility to secure any other intellectual property rights
+needed, if any. For example, if a third party patent license is required to 
allow Recipient to distribute the Program, it is Recipient's responsibility to
+acquire that license before distributing the Program.
+d) Each Contributor represents that to its knowledge it has sufficient 
copyright rights in its Contribution, if any, to grant the copyright license set
+forth in this Agreement. 
+3. REQUIREMENTS 
+
+A Contributor may choose to distribute the Program in object code form under 
its own license agreement, provided that: 
+
+a) it complies with the terms and conditions of this Agreement; and
+b) its license agreement:
+i) effectively disclaims on behalf of all Contributors all warranties and 
conditions, express and implied, including warranties or conditions of title and
+non-infringement, and implied warranties or conditions of merchantability and 
fitness for a particular purpose; 
+ii) effectively excludes on behalf of all Contributors all liability for 
damages, including direct, indirect, special, incidental and consequential
+damages, such as lost profits; 
+iii) states that any provisions which differ from this Agreement are offered 
by that Contributor alone and not by any other party; and
+iv) states that source code for the Program is available from such 
Contributor, and informs licensees how to obtain it in a reasonable manner on 
or through
+a medium customarily used for software exchange. 
+When the Program is made available in source code form: 
+
+a) it must be made available under this Agreement; and 
+b) a copy of this Agreement must be included with each copy of the Program. 
+
+Contributors may not remove or alter any copyright notices contained within 
the Program. 
+
+
+Each Contributor must identify itself as the originator of its Contribution, 
if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution. 
+
+
+4. COMMERCIAL DISTRIBUTION 
+
+Commercial distributors of software may accept certain responsibilities with 
respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor who 
includes the Program in a commercial product offering should do so in a
+manner which does not create potential liability for other Contributors. 
Therefore, if a Contributor includes the Program in a commercial product 
offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend and 
indemnify every other Contributor ("Indemnified Contributor") against any 
losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits and 
other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such Commercial 
Contributor in connection with its distribution of the Program in a commercial
+product offering. The obligations in this section do not apply to any claims 
or Losses relating to any actual or alleged intellectual property
+infringement. In order to qualify, an Indemnified Contributor must: a) 
promptly notify the Commercial Contributor in writing of such claim, and b) 
allow
+the Commercial Contributor to control, and cooperate with the Commercial 
Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own expense. 
+
+
+For example, a Contributor might include the Program in a commercial product 
offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers 
warranties related to Product X, those performance claims and warranties are 
such
+Commercial Contributor's responsibility alone. Under this section, the 
Commercial Contributor would have to defend claims against the other 
Contributors
+related to those performance claims and warranties, and if a court requires 
any other Contributor to pay any damages as a result, the Commercial
+Contributor must pay those damages. 
+
+
+5. NO WARRANTY 
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN 
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS
+OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF 
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+Each Recipient is solely responsible for determining the appropriateness of 
using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement, including but not limited to the 
risks and costs of program errors, compliance with applicable laws, damage to or
+loss of data, programs or equipment, and unavailability or interruption of 
operations. 
+
+
+6. DISCLAIMER OF LIABILITY 
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 
LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 
EXERCISE OF
+ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
DAMAGES. 
+
+
+7. GENERAL 
+
+If any provision of this Agreement is invalid or unenforceable under 
applicable law, it shall not affect the validity or enforceability of the 
remainder of
+the terms of this Agreement, and without further action by the parties hereto, 
such provision shall be reformed to the minimum extent necessary to make
+such provision valid and enforceable. 
+
+
+If Recipient institutes patent litigation against a Contributor with respect 
to a patent applicable to software (including a cross-claim or counterclaim in
+a lawsuit), then any patent licenses granted by that Contributor to such 
Recipient under this Agreement shall terminate as of the date such litigation is
+filed. In addition, if Recipient institutes patent litigation against any 
entity (including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software or 
hardware) infringes such Recipient's patent(s), then such Recipient's rights
+granted under Section 2(b) shall terminate as of the date such litigation is 
filed. 
+
+
+All Recipient's rights under this Agreement shall terminate if it fails to 
comply with any of the material terms or conditions of this Agreement and does
+not cure such failure in a reasonable period of time after becoming aware of 
such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as 
reasonably practicable. However, Recipient's obligations under this Agreement 
and
+any licenses granted by Recipient relating to the Program shall continue and 
survive. 
+
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in 
order to avoid inconsistency the Agreement is copyrighted and may only be
+modified in the following manner. The Agreement Steward reserves the right to 
publish new versions (including revisions) of this Agreement from time to
+time. No one other than the Agreement Steward has the right to modify this 
Agreement. IBM is the initial Agreement Steward. IBM may assign the
+responsibility to serve as the Agreement Steward to a suitable separate 
entity. Each new version of the Agreement will be given a distinguishing version
+number. The Program (including Contributions) may always be distributed 
subject to the version of the Agreement under which it was received. In 
addition,
+after a new version of the Agreement is published, Contributor may elect to 
distribute the Program (including its Contributions) under the new version.
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives 
no rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or otherwise. All 
rights in the Program not expressly granted under this Agreement are
+reserved. 
+
+
+This Agreement is governed by the laws of the State of New York and the 
intellectual property laws of the United States of America. No party to this
+Agreement will bring a legal action under this Agreement more than one year 
after the cause of action arose. Each party waives its rights to a jury trial
+in any resulting litigation. 
+

Modified: incubator/pig/branches/types/src/org/apache/pig/Main.java
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/Main.java?rev=679154&r1=679153&r2=679154&view=diff
==============================================================================
--- incubator/pig/branches/types/src/org/apache/pig/Main.java (original)
+++ incubator/pig/branches/types/src/org/apache/pig/Main.java Wed Jul 23 
11:36:19 2008
@@ -23,6 +23,9 @@
 import java.util.jar.*;
 import java.text.ParseException;
 
+import jline.ConsoleReader;
+import jline.ConsoleReaderInputStream;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -41,6 +44,7 @@
 import org.apache.pig.impl.util.PropertiesUtil;
 import org.apache.pig.tools.cmdline.CmdLineParser;
 import org.apache.pig.tools.grunt.Grunt;
+import org.apache.pig.tools.grunt.PigCompletor;
 import org.apache.pig.tools.timer.PerformanceTimerFactory;
 import org.apache.pig.tools.parameters.ParameterSubstitutionPreprocessor;
 
@@ -265,8 +269,12 @@
         if (remainders == null) {
             // Interactive
             mode = ExecMode.SHELL;
-            in = new BufferedReader(new InputStreamReader(System.in));
-            grunt = new Grunt(in, pigContext);
+            ConsoleReader reader = new ConsoleReader(System.in, new 
OutputStreamWriter(System.out));
+            reader.addCompletor(new PigCompletor());
+            reader.setDefaultPrompt("grunt> ");
+            ConsoleReaderInputStream inputStream = new 
ConsoleReaderInputStream(reader);
+            grunt = new Grunt(new BufferedReader(new 
InputStreamReader(inputStream)), pigContext);
+            grunt.setConsoleReader(reader);
             grunt.run();
             rc = 0;
             return;

Modified: incubator/pig/branches/types/src/org/apache/pig/tools/grunt/Grunt.java
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/tools/grunt/Grunt.java?rev=679154&r1=679153&r2=679154&view=diff
==============================================================================
--- incubator/pig/branches/types/src/org/apache/pig/tools/grunt/Grunt.java 
(original)
+++ incubator/pig/branches/types/src/org/apache/pig/tools/grunt/Grunt.java Wed 
Jul 23 11:36:19 2008
@@ -19,6 +19,8 @@
 
 import java.io.BufferedReader;
 
+import jline.ConsoleReader;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pig.PigServer;
@@ -47,6 +49,10 @@
         }
     }
 
+    public void setConsoleReader(ConsoleReader c)
+    {
+        parser.setConsoleReader(c);
+    }
     public void run() {
         parser.setInteractive(true);
         parser.parseContOnError();

Modified: 
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/GruntParser.java
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/tools/grunt/GruntParser.java?rev=679154&r1=679153&r2=679154&view=diff
==============================================================================
--- 
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/GruntParser.java 
(original)
+++ 
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/GruntParser.java 
Wed Jul 23 11:36:19 2008
@@ -26,6 +26,8 @@
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 
+import jline.ConsoleReader;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.mapred.JobClient;
@@ -132,8 +134,9 @@
     {
         if (mInteractive)
         {
-            System.err.print("grunt> ");
-            System.err.flush();
+            /*System.err.print("grunt> ");
+            System.err.flush();*/
+            mConsoleReader.setDefaultPrompt("grunt> ");
         }
     }
     

Added: 
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/PigCompletor.java
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/tools/grunt/PigCompletor.java?rev=679154&view=auto
==============================================================================
--- 
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/PigCompletor.java 
(added)
+++ 
incubator/pig/branches/types/src/org/apache/pig/tools/grunt/PigCompletor.java 
Wed Jul 23 11:36:19 2008
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pig.tools.grunt;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import jline.Completor;
+
+public class PigCompletor implements Completor {
+    private final Log log = LogFactory.getLog(getClass());
+    Set<String> candidates;
+    static final String AUTOCOMPLETE_FILENAME = "autocomplete";
+
+    public PigCompletor() {
+        candidates = new TreeSet<String>();
+        try {
+            InputStream keywordStream;
+            
+            // try to find keyword file in current directory
+            keywordStream = null;
+            try
+            {
+                keywordStream = new FileInputStream(AUTOCOMPLETE_FILENAME);
+            }
+            catch (FileNotFoundException e)
+            {
+                log.debug("Can not find autocomplete file in current 
directory, skipped");
+            }
+            if (keywordStream!=null)
+            {
+                processKeywordStream(keywordStream);
+                keywordStream.close();
+            }
+            
+            // try to find all keyword file in CLASSPATH
+            Enumeration<URL> itr = 
getClass().getClassLoader().getResources(AUTOCOMPLETE_FILENAME);
+            while (itr.hasMoreElements())
+            {
+                URL url = itr.nextElement();
+                keywordStream = url.openStream();
+                if (keywordStream!=null)
+                {
+                    processKeywordStream(keywordStream);
+                    keywordStream.close();
+                }
+                else
+                    log.debug("Error loading " + url + ", skipped");
+            }
+            
+            // try to use default keyword file
+            keywordStream = 
getClass().getResourceAsStream("/org/apache/pig/tools/grunt/autocomplete");
+            if (keywordStream!=null)
+            {
+                processKeywordStream(keywordStream);
+                keywordStream.close();
+            }
+        }
+        catch (IOException e) {
+            log.warn("Error occurs when reading internal autocomplete file, 
skipped");
+        }
+    }
+
+    private void processKeywordStream(InputStream stream) throws IOException
+    {
+        BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream));
+        String line;
+        while ((line=reader.readLine())!=null)
+        {
+            if (!line.startsWith("#")&&!line.startsWith("//"))
+            {
+                line = line.trim();
+                if (!line.equals(""))
+                    addCandidateString(line);
+            }
+                
+        }
+        reader.close();
+    }
+
+    public void addCandidateString(final String candidateString) {
+        for (int i=0;i<candidateString.length();i++)
+        {
+            if (isDelimit(candidateString.charAt(i)))
+            {
+                log.warn("Auto-complete keyword \"" + candidateString + "\" is 
skipped because it contains white spaces");
+                return;
+            }
+        }
+        candidates.add(candidateString);
+    }
+
+    public int complete(String buffer, int cursor, List candidates) {
+        if (cursor == 0)
+            return 0;
+        int p = cursor;
+        p--;
+        while (p > 0) {
+            char c = buffer.charAt(p);
+            if (isDelimit(c)) {
+                p++;
+                break;
+            }
+            p--;
+        }
+        StringBuffer sb = new StringBuffer();
+        for (int i = p; i < cursor; i++) {
+            sb.append(buffer.charAt(i));
+        }
+        if (!sb.toString().equals("")) {
+            List<String> matches = searchCandidate(sb.toString());
+            if (matches != null) {
+                for (String match:matches)
+                    candidates.add(match);
+                return p;
+            }
+        }
+        return 0;
+    }
+
+    private boolean isDelimit(char c) {
+        if (Character.isWhitespace(c))
+            return true;
+        return false;
+    }
+
+    private List<String> searchCandidate(String s) {
+        List<String> list = new ArrayList<String>();
+        for (String can : candidates) {
+            if (can.startsWith(s) && !can.equals(s))
+                list.add(can);
+        }
+        return list;
+    }
+}

Added: incubator/pig/branches/types/src/org/apache/pig/tools/grunt/autocomplete
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/tools/grunt/autocomplete?rev=679154&view=auto
==============================================================================
--- incubator/pig/branches/types/src/org/apache/pig/tools/grunt/autocomplete 
(added)
+++ incubator/pig/branches/types/src/org/apache/pig/tools/grunt/autocomplete 
Wed Jul 23 11:36:19 2008
@@ -0,0 +1,151 @@
+load
+filter
+foreach
+matches
+order
+arrange
+distinct
+cogroup
+join
+cross
+union
+split
+into
+if
+all
+any
+as
+by
+using
+inner
+outer
+parallel
+group
+and
+or
+not
+generate
+flatten
+eval
+asc
+desc
+int
+long
+float
+double
+chararray
+bytearray
+bag
+tuple
+map
+define
+is
+null
+cat
+cd
+cp
+copyFromLocal
+copyToLocal
+dump
+describe
+explain
+help
+kill
+ls
+mv
+mkdir
+pwd
+quit
+register
+rm
+set
+store
+into
+using
+LOAD
+FILTER
+FOREACH
+MATCHES
+ORDER
+ARRANGE
+DISTINCT
+COGROUP
+JOIN
+CROSS
+UNION
+SPLIT
+INTO
+IF
+ALL
+ANY
+AS
+BY
+USING
+INNER
+OUTER
+PARALLEL
+GROUP
+AND
+OR
+NOT
+GENERATE
+FLATTEN
+EVAL
+ASC
+DESC
+INT
+LONG
+FLOAT
+DOUBLE
+CHARARRAY
+BYTEARRAY
+BAG
+TUPLE
+MAP
+DEFINE
+IS
+NULL
+CAT
+CD
+CP
+COPYFROMLOCAL
+COPYTOLOCAL
+DUMP
+DESCRIBE
+EXPLAIN
+HELP
+KILL
+LS
+MV
+MKDIR
+PWD
+QUIT
+REGISTER
+RM
+SET
+STORE
+INTO
+USING
+#
+# Now start build-in UDF
+#
+ARITY
+AVG
+BagSize
+BinStorage
+CONCAT
+ConstantSize
+COUNT
+DIFF
+IsEmpty
+MapSize
+MAX
+MIN
+PigDump
+PigStorage
+SIZE
+SUM
+TextLoader
+TOKENIZE
+TupleSize
+Utf8StorageConverter

Modified: 
incubator/pig/branches/types/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj?rev=679154&r1=679153&r2=679154&view=diff
==============================================================================
--- 
incubator/pig/branches/types/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj
 (original)
+++ 
incubator/pig/branches/types/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj
 Wed Jul 23 11:36:19 2008
@@ -29,17 +29,27 @@
 package org.apache.pig.tools.pigscript.parser;
 
 import java.io.IOException;
+import java.io.InputStream;
+
+import jline.ConsoleReader;
 
 public abstract class PigScriptParser
 {
        protected boolean mInteractive;
-
+       protected ConsoleReader mConsoleReader;
+       
        public void setInteractive(boolean interactive)
        {
                mInteractive = interactive;
                token_source.interactive = interactive;
        }
        
+       public void setConsoleReader(ConsoleReader c)
+    {
+        mConsoleReader = c;
+        token_source.consoleReader = c;
+    }
+    
        abstract public void prompt();
        
        abstract protected void quit();
@@ -143,12 +153,14 @@
         int funcBlockLevel = 0;
        int prevState = DEFAULT;
        boolean interactive = false;
+       ConsoleReader consoleReader = null;
        public void secondary_prompt()
        {
                if (interactive)
                {
-                       System.err.print(">> ");
-                       System.err.flush();
+                       /*System.err.print(">> ");
+                       System.err.flush();*/
+                   consoleReader.setDefaultPrompt(">> ");
                }
        }
 


Reply via email to