# 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.
--- JsColoringLexer.java	2012-09-11 23:38:58.281577587 +0200
+++ JsColoringLexer.java.patched	2012-09-11 23:38:58.353577605 +0200
@@ -982,7 +982,7 @@
    * Returns the text matched by the current regular expression.
    */
   public final String yytext() {
-    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+    return input.readText().toString();
   }
 
 
@@ -998,7 +998,7 @@
    * @return the character at position pos
    */
   public final char yycharat(int pos) {
-    return zzBuffer[zzStartRead+pos];
+    return input.readText().charAt(pos);
   }
 
 
@@ -1006,7 +1006,7 @@
    * Returns the length of the matched text region.
    */
   public final int yylength() {
-    return zzMarkedPos-zzStartRead;
+    return input.readLength();
   }
 
 
@@ -1049,7 +1049,7 @@
     if ( number > yylength() )
       zzScanError(ZZ_PUSHBACK_2BIG);
 
-    zzMarkedPos -= number;
+    input.backup(number);
   }
 
 
@@ -1082,7 +1082,7 @@
 
       zzAction = -1;
 
-      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+      int tokenLength = 0;
   
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
@@ -1090,30 +1090,15 @@
       zzForAction: {
         while (true) {
     
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = zzBufferL[zzCurrentPosL++];
-          else if (zzAtEOF) {
+          zzInput = input.read();
+
+          if(zzInput == LexerInput.EOF) {
+              //end of input reached
             zzInput = YYEOF;
             break zzForAction;
+              //notice: currently LexerInput.EOF == YYEOF
           }
-          else {
-            // store back cached positions
-            zzCurrentPos  = zzCurrentPosL;
-            zzMarkedPos   = zzMarkedPosL;
-            boolean eof = zzRefill();
-            // get translated positions and possibly new buffer
-            zzCurrentPosL  = zzCurrentPos;
-            zzMarkedPosL   = zzMarkedPos;
-            zzBufferL      = zzBuffer;
-            zzEndReadL     = zzEndRead;
-            if (eof) {
-              zzInput = YYEOF;
-              break zzForAction;
-            }
-            else {
-              zzInput = zzBufferL[zzCurrentPosL++];
-            }
-          }
+
           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
           if (zzNext == -1) break zzForAction;
           zzState = zzNext;
@@ -1121,7 +1106,7 @@
           int zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
-            zzMarkedPosL = zzCurrentPosL;
+            tokenLength = input.readLength();
             if ( (zzAttributes & 8) == 8 ) break zzForAction;
           }
 
@@ -1129,7 +1114,9 @@
       }
 
       // store back cached position
-      zzMarkedPos = zzMarkedPosL;
+      if(zzInput != YYEOF) {
+         input.backup(input.readLength() - tokenLength);
+      }
 
       switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
         case 40: 
