You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by ma...@apache.org on 2006/07/24 17:25:15 UTC

svn commit: r425125 - in /incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript: javascript20parser/ uixtools/

Author: matzew
Date: Mon Jul 24 10:25:15 2006
New Revision: 425125

URL: http://svn.apache.org/viewvc?rev=425125&view=rev
Log:
fixing crap

Modified:
    incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/javascript20parser/JSParser20TokenManager.java
    incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/TokenReader.java
    incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/Tokenizer.java

Modified: incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/javascript20parser/JSParser20TokenManager.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/javascript20parser/JSParser20TokenManager.java?rev=425125&r1=425124&r2=425125&view=diff
==============================================================================
--- incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/javascript20parser/JSParser20TokenManager.java (original)
+++ incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/javascript20parser/JSParser20TokenManager.java Mon Jul 24 10:25:15 2006
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 /* Generated By:JJTree&JavaCC: Do not edit this line. JSParser20TokenManager.java */
-package org.apache.myfaces.adfbuild.plugin.javascript.javascript20parser;
+package org.apache.myfaces.trinidadbuild.plugin.javascript.javascript20parser;
 import java.io.IOException;
 
 public class JSParser20TokenManager implements JSParser20Constants

Modified: incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/TokenReader.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/TokenReader.java?rev=425125&r1=425124&r2=425125&view=diff
==============================================================================
--- incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/TokenReader.java (original)
+++ incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/TokenReader.java Mon Jul 24 10:25:15 2006
@@ -15,407 +15,19 @@
  */
 package org.apache.myfaces.trinidadbuild.plugin.javascript.uixtools;
 
-import java.io.BufferedReader;
 import java.io.IOException;
 
 /**
- * A Tokenizer for JavaScript source files.
  * @version $Name:  $ ($Revision$) $Date$
  * @author Arjuna Wijeyekoon - arjuna.wijeyekoon@oracle.com
  */
-public class Tokenizer implements TokenReader
+public interface TokenReader
 {
 
-  /**
-   * @param in used to read data from the JS file
+  /*
+   * Reads a Token from this source. This method will block until data
+   * becomes available.
+   * @return null if there is no more data and EOF is reached.
    */
-  public Tokenizer(BufferedReader in)
-  {
-    _in = in;
-    Runnable runner = new Runnable()
-      {
-        public void run()
-        {
-          //ystem.out.println("Tokenizer: start:"+Thread.currentThread());
-          _run();
-          //ystem.out.println("Tokenizer: end:"+Thread.currentThread());
-        }
-      };
-    new Thread(runner).start();
-  }
-
-  /**
-   * reads a Token. blocks until a Token is available.
-   * @return null if the EOF is reached.
-   */
-  public Token read() throws IOException, InterruptedException
-  {
-    return _out.read();
-  }
-
-  private void _run()
-  {
-    try
-      {
-        _run2();
-      }
-    catch (Exception e)
-      {
-        System.out.println("Exception parsing line:"+_lineNumber);
-        e.printStackTrace();
-      }
-  }
-
-  private void _run2() throws InterruptedException
-  {
-    try
-    {
-      for(;_fillBuffer();)
-      {
-        //ystem.out.println("begin process");
-        _processBuffer();
-        //ystem.out.println("end process");
-      }
-      _out.write(new Token(Token.EOF, _lineNumber));
-    }
-    catch (IOException e)
-    {
-      System.out.println("Exception parsing line:"+_lineNumber);
-      _out.write(e);
-    }
-    catch (Exception e)
-    {
-      e.printStackTrace();
-      _out.write(new IOException("Exception parsing line:"+_lineNumber));
-    }
-    finally
-    {
-      _out.close();
-    }
-  }
-
-  private void _processBuffer() throws InterruptedException
-  {
-    _offset = 0;
-
-    for(;_offset<_len;)
-      {
-        //ystem.out.println("line:"+_lineNumber+" offset:"+_offset);
-        char ch = _buffer.charAt(_offset++);
-        switch(_status)
-          {
-          case ROOT_MODE :
-          case DIVISION_MODE :
-            _next = _rootMode(ch, _status);
-            break;
-          case READ_WORD_MODE :
-            _next = _readWordMode(ch, _status, _str);
-            break;
-          case QUOTE1_MODE :
-          case QUOTE2_MODE :
-            _next = _quoteMode(ch, _status, _prev, _str);
-            break;
-          case ESCAPED_CHAR_MODE :
-            _str.append('\\');
-            _str.append(ch);
-            _next = _prev;
-            break;
-          case POSSIBLE_COMMENT_MODE :
-            if (ch=='/') _next = COMMENT1_MODE;
-            else if (ch=='*') _next = COMMENT2_MODE;
-            else
-              {
-                _offset--; //Roll Back one
-                if (_prev == DIVISION_MODE)
-                  {
-                    _writeControl('/');
-                    _next = ROOT_MODE;
-                  }
-                else
-                  {
-                    _next = REGULAR_EXP_MODE;
-                  }
-              }
-            break;
-          case COMMENT1_MODE :
-          case COMMENT2_MODE :
-          case END_COMMENT_MODE :
-            _next = _commentMode(ch, _status, _str);
-            break;
-          case REGULAR_EXP_MODE :
-            _next = _regularExpMode(ch, _str);
-            break;
-          case END_REGULAR_EXP_MODE :
-            if ((ch=='g') || (ch=='i'))
-              {
-                _out.write(new Token(Token.REGULAR_EXP_MODIFIER,
-                                     _lineNumber,
-                                     ch));
-                _next = END_REGULAR_EXP_MODE;
-              }
-            else
-              {
-                _offset--; //Rollback
-                _next = ROOT_MODE;
-              }
-            break;
-          }
-        _prev = _status;
-        _status = _next;
-      }
-  }
-
-  private int _rootMode(char ch, int status) throws InterruptedException
-  {
-    switch(ch)
-      {
-      case '\'' :
-        return QUOTE1_MODE;
-      case '\"' :
-        return QUOTE2_MODE;
-      case ' '  :
-      case '\t' :
-        _out.write(WHITESPACE);
-        return status;
-      case '\n' :
-        _out.write(NEWLINE);
-        return ROOT_MODE;
-      case '.' :
-        _out.write(PERIOD);
-        return status;
-      case ';' :
-        _out.write(SEMICOLON);
-        return ROOT_MODE;
-      case '(' :
-      case '{' :
-      case '[' :
-        _out.write(new Token(Token.LEFT_BRACE, _lineNumber, ch));
-        return ROOT_MODE;
-      case ')' :
-        _out.write(new Token(Token.RIGHT_BRACE, _lineNumber, ch));
-        return DIVISION_MODE;
-      case '}' :
-      case ']' :
-        _out.write(new Token(Token.RIGHT_BRACE, _lineNumber, ch));
-        return ROOT_MODE;
-      case '/'  : return POSSIBLE_COMMENT_MODE;
-      default :
-        if (_isAlphaNumeric(ch))
-          {
-            _offset--; //Rollback
-            return READ_WORD_MODE;
-          }
-        else
-          {
-            _writeControl(ch);
-            return ROOT_MODE;
-          }
-      }
-  }
-
-  private int _regularExpMode(char ch, StringBuffer regExp)
-    throws InterruptedException
-  {
-    switch(ch)
-      {
-      case '\\' :
-        return ESCAPED_CHAR_MODE;
-      case '/' :
-        _out.write(new Token(Token.REGULAR_EXP,
-                             _lineNumber,
-                             regExp.toString()));
-        regExp.setLength(0);
-        return END_REGULAR_EXP_MODE;
-      default :
-        regExp.append(ch);
-        return REGULAR_EXP_MODE;
-      }
-  }
-
-  private int _quoteMode(char ch, int status, int prev,
-                         StringBuffer quoteString) throws InterruptedException
-  {
-    if (((ch=='\'') && (status==QUOTE1_MODE)) ||
-        ((ch=='\"') && (status==QUOTE2_MODE)))
-      {
-        _out.write(new Token(Token.QUOTED,
-                             _lineNumber, ch, quoteString.toString()));
-        quoteString.setLength(0);
-        return ROOT_MODE;
-      }
-    else if (ch=='\\') return ESCAPED_CHAR_MODE;
-    else
-      {
-        quoteString.append(ch);
-        return status;
-      }
-  }
-
-  private int _commentMode(char ch, int status,
-                           StringBuffer commentString)
-    throws InterruptedException
-  {
-    if (status==END_COMMENT_MODE)
-      {
-        if (ch=='/')
-          {
-            _writeComment(commentString);
-            return ROOT_MODE;
-          }
-        else
-          {
-            commentString.append('*');
-            _offset--; //Roll back
-            return COMMENT2_MODE;
-          }
-      }
-    else if ((status==COMMENT2_MODE) && (ch=='*'))
-      {
-        return END_COMMENT_MODE;
-      }
-    else if ((status==COMMENT1_MODE) && (ch=='\n'))
-      {
-        _writeComment(commentString);
-        _out.write(NEWLINE);
-        return ROOT_MODE;
-      }
-    else
-      {
-        commentString.append(ch);
-        return status;
-      }
-  }
-
-  private int _readWordMode(char ch, int status, StringBuffer wordBuffer)
-    throws InterruptedException
-  {
-    if (_isAlphaNumeric(ch))
-      {
-        wordBuffer.append(ch);
-        return status;
-      }
-    else
-      {
-        _writeAlphaNumeric(wordBuffer.toString());
-        wordBuffer.setLength(0);
-        _offset--; //Rollback
-        return DIVISION_MODE;
-      }
-  }
-
-  private void _writeComment(StringBuffer s) throws InterruptedException
-  {
-    _out.write(new Token(Token.COMMENT, _lineNumber, s.toString()));
-    s.setLength(0);
-  }
-
-  private void _writeControl(char ch) throws InterruptedException
-  {
-    _out.write(new Token(Token.CONTROL, _lineNumber, ch));
-  }
-
-  private void _writeAlphaNumeric(String s) throws InterruptedException
-  {
-    if (Character.isDigit(s.charAt(0)))
-      {
-        _out.write(new Token(Token.NUMBER, _lineNumber, s));
-      }
-    else if (_isReservedKeyword(s))
-      {
-        _out.write(new Token(Token.RESERVED, _lineNumber, s));
-      }
-    else
-      {
-        _out.write(new Token(Token.NAME, _lineNumber, s));
-      }
-  }
-
-  private boolean _isReservedKeyword(String s)
-  {
-    for(int i=0; i<reservedWords.length; i++)
-      {
-        if (s.equals(reservedWords[i])) return true;
-      }
-    return false;
-  }
-
-  private boolean _isAlphaNumeric(char ch)
-  {
-    return Character.isLetterOrDigit(ch) || (ch=='_') ;
-  }
-
-  /**
-   * @return false if EOF
-   */
-  private boolean _fillBuffer() throws IOException
-  {
-    _buffer.setLength(0);
-    String s = _in.readLine();
-    if (s==null)
-      {
-        _len=0;
-        return false;
-      }
-    else
-      {
-        _buffer.append(s).append('\n');
-        _len = _buffer.length();
-        _lineNumber++;
-        return true;
-      }
-  }
-
-  private void _reset()
-  {
-    _status = _prev = _next = ROOT_MODE;
-    _buffer.setLength(0);
-    _len = _lineNumber = _offset = 0;
-    _wordBuffer.setLength(0);
-    _str.setLength(0);
-  }
-
-  private int _status = ROOT_MODE;
-  private int _prev = ROOT_MODE;
-  private int _next = ROOT_MODE;
-
-  private int _len = 0;
-  private int _lineNumber = 0;
-  private int _offset = 0;
-
-  private final StringBuffer _buffer = new StringBuffer();
-  private final StringBuffer _wordBuffer = new StringBuffer();
-  private final StringBuffer _str = new StringBuffer();
-
-  private final BufferedReader _in;
-  private final TokenBuffer _out = new TokenBuffer();
-
-  /**
-   * These are not all the reserved words in JS but are the only ones
-   * important to the filters.
-   */
-  private static final String[] reservedWords =
-  {
-    "function", "var"
-  };
-
-  private final Token NEWLINE = new Token(Token.NEWLINE, 0);
-  private final Token WHITESPACE = new Token(Token.WHITESPACE, 0);
-  private final Token PERIOD = new Token(Token.PERIOD, 0);
-  private final Token SEMICOLON = new Token(Token.SEMICOLON, 0);
-
-  /**
-   * These are the FSM states
-   */
-  private static final int ROOT_MODE = 0;
-  private static final int READ_WORD_MODE = 10;
-  private static final int DIVISION_MODE = 15;
-  private static final int QUOTE1_MODE = 20;
-  private static final int QUOTE2_MODE = 30;
-  private static final int ESCAPED_CHAR_MODE = 40;
-  private static final int POSSIBLE_COMMENT_MODE = 50;
-  private static final int COMMENT1_MODE = 60;
-  private static final int COMMENT2_MODE = 70;
-  private static final int END_COMMENT_MODE = 80;
-  private static final int REGULAR_EXP_MODE = 90;
-  private static final int END_REGULAR_EXP_MODE = 95;
+  public Token read() throws IOException, InterruptedException;
 }

Modified: incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/Tokenizer.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/Tokenizer.java?rev=425125&r1=425124&r2=425125&view=diff
==============================================================================
--- incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/Tokenizer.java (original)
+++ incubator/adffaces/branches/matzew-repackaging-trinidad/plugins/maven-javascript-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/javascript/uixtools/Tokenizer.java Mon Jul 24 10:25:15 2006
@@ -15,19 +15,407 @@
  */
 package org.apache.myfaces.trinidadbuild.plugin.javascript.uixtools;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 
 /**
+ * A Tokenizer for JavaScript source files.
  * @version $Name:  $ ($Revision$) $Date$
  * @author Arjuna Wijeyekoon - arjuna.wijeyekoon@oracle.com
  */
-public interface TokenReader
+public class Tokenizer implements TokenReader
 {
 
-  /*
-   * Reads a Token from this source. This method will block until data
-   * becomes available.
-   * @return null if there is no more data and EOF is reached.
+  /**
+   * @param in used to read data from the JS file
    */
-  public Token read() throws IOException, InterruptedException;
+  public Tokenizer(BufferedReader in)
+  {
+    _in = in;
+    Runnable runner = new Runnable()
+      {
+        public void run()
+        {
+          //ystem.out.println("Tokenizer: start:"+Thread.currentThread());
+          _run();
+          //ystem.out.println("Tokenizer: end:"+Thread.currentThread());
+        }
+      };
+    new Thread(runner).start();
+  }
+
+  /**
+   * reads a Token. blocks until a Token is available.
+   * @return null if the EOF is reached.
+   */
+  public Token read() throws IOException, InterruptedException
+  {
+    return _out.read();
+  }
+
+  private void _run()
+  {
+    try
+      {
+        _run2();
+      }
+    catch (Exception e)
+      {
+        System.out.println("Exception parsing line:"+_lineNumber);
+        e.printStackTrace();
+      }
+  }
+
+  private void _run2() throws InterruptedException
+  {
+    try
+    {
+      for(;_fillBuffer();)
+      {
+        //ystem.out.println("begin process");
+        _processBuffer();
+        //ystem.out.println("end process");
+      }
+      _out.write(new Token(Token.EOF, _lineNumber));
+    }
+    catch (IOException e)
+    {
+      System.out.println("Exception parsing line:"+_lineNumber);
+      _out.write(e);
+    }
+    catch (Exception e)
+    {
+      e.printStackTrace();
+      _out.write(new IOException("Exception parsing line:"+_lineNumber));
+    }
+    finally
+    {
+      _out.close();
+    }
+  }
+
+  private void _processBuffer() throws InterruptedException
+  {
+    _offset = 0;
+
+    for(;_offset<_len;)
+      {
+        //ystem.out.println("line:"+_lineNumber+" offset:"+_offset);
+        char ch = _buffer.charAt(_offset++);
+        switch(_status)
+          {
+          case ROOT_MODE :
+          case DIVISION_MODE :
+            _next = _rootMode(ch, _status);
+            break;
+          case READ_WORD_MODE :
+            _next = _readWordMode(ch, _status, _str);
+            break;
+          case QUOTE1_MODE :
+          case QUOTE2_MODE :
+            _next = _quoteMode(ch, _status, _prev, _str);
+            break;
+          case ESCAPED_CHAR_MODE :
+            _str.append('\\');
+            _str.append(ch);
+            _next = _prev;
+            break;
+          case POSSIBLE_COMMENT_MODE :
+            if (ch=='/') _next = COMMENT1_MODE;
+            else if (ch=='*') _next = COMMENT2_MODE;
+            else
+              {
+                _offset--; //Roll Back one
+                if (_prev == DIVISION_MODE)
+                  {
+                    _writeControl('/');
+                    _next = ROOT_MODE;
+                  }
+                else
+                  {
+                    _next = REGULAR_EXP_MODE;
+                  }
+              }
+            break;
+          case COMMENT1_MODE :
+          case COMMENT2_MODE :
+          case END_COMMENT_MODE :
+            _next = _commentMode(ch, _status, _str);
+            break;
+          case REGULAR_EXP_MODE :
+            _next = _regularExpMode(ch, _str);
+            break;
+          case END_REGULAR_EXP_MODE :
+            if ((ch=='g') || (ch=='i'))
+              {
+                _out.write(new Token(Token.REGULAR_EXP_MODIFIER,
+                                     _lineNumber,
+                                     ch));
+                _next = END_REGULAR_EXP_MODE;
+              }
+            else
+              {
+                _offset--; //Rollback
+                _next = ROOT_MODE;
+              }
+            break;
+          }
+        _prev = _status;
+        _status = _next;
+      }
+  }
+
+  private int _rootMode(char ch, int status) throws InterruptedException
+  {
+    switch(ch)
+      {
+      case '\'' :
+        return QUOTE1_MODE;
+      case '\"' :
+        return QUOTE2_MODE;
+      case ' '  :
+      case '\t' :
+        _out.write(WHITESPACE);
+        return status;
+      case '\n' :
+        _out.write(NEWLINE);
+        return ROOT_MODE;
+      case '.' :
+        _out.write(PERIOD);
+        return status;
+      case ';' :
+        _out.write(SEMICOLON);
+        return ROOT_MODE;
+      case '(' :
+      case '{' :
+      case '[' :
+        _out.write(new Token(Token.LEFT_BRACE, _lineNumber, ch));
+        return ROOT_MODE;
+      case ')' :
+        _out.write(new Token(Token.RIGHT_BRACE, _lineNumber, ch));
+        return DIVISION_MODE;
+      case '}' :
+      case ']' :
+        _out.write(new Token(Token.RIGHT_BRACE, _lineNumber, ch));
+        return ROOT_MODE;
+      case '/'  : return POSSIBLE_COMMENT_MODE;
+      default :
+        if (_isAlphaNumeric(ch))
+          {
+            _offset--; //Rollback
+            return READ_WORD_MODE;
+          }
+        else
+          {
+            _writeControl(ch);
+            return ROOT_MODE;
+          }
+      }
+  }
+
+  private int _regularExpMode(char ch, StringBuffer regExp)
+    throws InterruptedException
+  {
+    switch(ch)
+      {
+      case '\\' :
+        return ESCAPED_CHAR_MODE;
+      case '/' :
+        _out.write(new Token(Token.REGULAR_EXP,
+                             _lineNumber,
+                             regExp.toString()));
+        regExp.setLength(0);
+        return END_REGULAR_EXP_MODE;
+      default :
+        regExp.append(ch);
+        return REGULAR_EXP_MODE;
+      }
+  }
+
+  private int _quoteMode(char ch, int status, int prev,
+                         StringBuffer quoteString) throws InterruptedException
+  {
+    if (((ch=='\'') && (status==QUOTE1_MODE)) ||
+        ((ch=='\"') && (status==QUOTE2_MODE)))
+      {
+        _out.write(new Token(Token.QUOTED,
+                             _lineNumber, ch, quoteString.toString()));
+        quoteString.setLength(0);
+        return ROOT_MODE;
+      }
+    else if (ch=='\\') return ESCAPED_CHAR_MODE;
+    else
+      {
+        quoteString.append(ch);
+        return status;
+      }
+  }
+
+  private int _commentMode(char ch, int status,
+                           StringBuffer commentString)
+    throws InterruptedException
+  {
+    if (status==END_COMMENT_MODE)
+      {
+        if (ch=='/')
+          {
+            _writeComment(commentString);
+            return ROOT_MODE;
+          }
+        else
+          {
+            commentString.append('*');
+            _offset--; //Roll back
+            return COMMENT2_MODE;
+          }
+      }
+    else if ((status==COMMENT2_MODE) && (ch=='*'))
+      {
+        return END_COMMENT_MODE;
+      }
+    else if ((status==COMMENT1_MODE) && (ch=='\n'))
+      {
+        _writeComment(commentString);
+        _out.write(NEWLINE);
+        return ROOT_MODE;
+      }
+    else
+      {
+        commentString.append(ch);
+        return status;
+      }
+  }
+
+  private int _readWordMode(char ch, int status, StringBuffer wordBuffer)
+    throws InterruptedException
+  {
+    if (_isAlphaNumeric(ch))
+      {
+        wordBuffer.append(ch);
+        return status;
+      }
+    else
+      {
+        _writeAlphaNumeric(wordBuffer.toString());
+        wordBuffer.setLength(0);
+        _offset--; //Rollback
+        return DIVISION_MODE;
+      }
+  }
+
+  private void _writeComment(StringBuffer s) throws InterruptedException
+  {
+    _out.write(new Token(Token.COMMENT, _lineNumber, s.toString()));
+    s.setLength(0);
+  }
+
+  private void _writeControl(char ch) throws InterruptedException
+  {
+    _out.write(new Token(Token.CONTROL, _lineNumber, ch));
+  }
+
+  private void _writeAlphaNumeric(String s) throws InterruptedException
+  {
+    if (Character.isDigit(s.charAt(0)))
+      {
+        _out.write(new Token(Token.NUMBER, _lineNumber, s));
+      }
+    else if (_isReservedKeyword(s))
+      {
+        _out.write(new Token(Token.RESERVED, _lineNumber, s));
+      }
+    else
+      {
+        _out.write(new Token(Token.NAME, _lineNumber, s));
+      }
+  }
+
+  private boolean _isReservedKeyword(String s)
+  {
+    for(int i=0; i<reservedWords.length; i++)
+      {
+        if (s.equals(reservedWords[i])) return true;
+      }
+    return false;
+  }
+
+  private boolean _isAlphaNumeric(char ch)
+  {
+    return Character.isLetterOrDigit(ch) || (ch=='_') ;
+  }
+
+  /**
+   * @return false if EOF
+   */
+  private boolean _fillBuffer() throws IOException
+  {
+    _buffer.setLength(0);
+    String s = _in.readLine();
+    if (s==null)
+      {
+        _len=0;
+        return false;
+      }
+    else
+      {
+        _buffer.append(s).append('\n');
+        _len = _buffer.length();
+        _lineNumber++;
+        return true;
+      }
+  }
+
+  private void _reset()
+  {
+    _status = _prev = _next = ROOT_MODE;
+    _buffer.setLength(0);
+    _len = _lineNumber = _offset = 0;
+    _wordBuffer.setLength(0);
+    _str.setLength(0);
+  }
+
+  private int _status = ROOT_MODE;
+  private int _prev = ROOT_MODE;
+  private int _next = ROOT_MODE;
+
+  private int _len = 0;
+  private int _lineNumber = 0;
+  private int _offset = 0;
+
+  private final StringBuffer _buffer = new StringBuffer();
+  private final StringBuffer _wordBuffer = new StringBuffer();
+  private final StringBuffer _str = new StringBuffer();
+
+  private final BufferedReader _in;
+  private final TokenBuffer _out = new TokenBuffer();
+
+  /**
+   * These are not all the reserved words in JS but are the only ones
+   * important to the filters.
+   */
+  private static final String[] reservedWords =
+  {
+    "function", "var"
+  };
+
+  private final Token NEWLINE = new Token(Token.NEWLINE, 0);
+  private final Token WHITESPACE = new Token(Token.WHITESPACE, 0);
+  private final Token PERIOD = new Token(Token.PERIOD, 0);
+  private final Token SEMICOLON = new Token(Token.SEMICOLON, 0);
+
+  /**
+   * These are the FSM states
+   */
+  private static final int ROOT_MODE = 0;
+  private static final int READ_WORD_MODE = 10;
+  private static final int DIVISION_MODE = 15;
+  private static final int QUOTE1_MODE = 20;
+  private static final int QUOTE2_MODE = 30;
+  private static final int ESCAPED_CHAR_MODE = 40;
+  private static final int POSSIBLE_COMMENT_MODE = 50;
+  private static final int COMMENT1_MODE = 60;
+  private static final int COMMENT2_MODE = 70;
+  private static final int END_COMMENT_MODE = 80;
+  private static final int REGULAR_EXP_MODE = 90;
+  private static final int END_REGULAR_EXP_MODE = 95;
 }