# 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.
--- JsDocumentationColoringLexer.java	2012-09-11 23:39:26.537582358 +0200
+++ JsDocumentationColoringLexer.java.patched	2012-09-11 23:39:26.617582375 +0200
@@ -569,7 +569,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();
   }
 
 
@@ -585,7 +585,7 @@
    * @return the character at position pos
    */
   public final char yycharat(int pos) {
-    return zzBuffer[zzStartRead+pos];
+    return input.readText().charAt(pos);
   }
 
 
@@ -593,7 +593,7 @@
    * Returns the length of the matched text region.
    */
   public final int yylength() {
-    return zzMarkedPos-zzStartRead;
+    return input.readLength();
   }
 
 
@@ -636,7 +636,7 @@
     if ( number > yylength() )
       zzScanError(ZZ_PUSHBACK_2BIG);
 
-    zzMarkedPos -= number;
+    input.backup(number);
   }
 
 
@@ -652,10 +652,7 @@
     int zzAction;
 
     // cached fields:
-    int zzCurrentPosL;
     int zzMarkedPosL;
-    int zzEndReadL = zzEndRead;
-    char [] zzBufferL = zzBuffer;
     char [] zzCMapL = ZZ_CMAP;
 
     int [] zzTransL = ZZ_TRANS;
@@ -669,38 +666,19 @@
 
       zzAction = -1;
 
-      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+      int tokenLength = 0;
   
       zzState = ZZ_LEXSTATE[zzLexicalState];
 
 
       zzForAction: {
         while (true) {
-    
-          if (zzCurrentPosL < zzEndReadL)
-            zzInput = zzBufferL[zzCurrentPosL++];
-          else if (zzAtEOF) {
+            zzInput = input.read();
+            if(zzInput == LexerInput.EOF) {
             zzInput = YYEOF;
             break zzForAction;
           }
-          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;
@@ -708,7 +686,7 @@
           int zzAttributes = zzAttrL[zzState];
           if ( (zzAttributes & 1) == 1 ) {
             zzAction = zzState;
-            zzMarkedPosL = zzCurrentPosL;
+            tokenLength = input.readLength();
             if ( (zzAttributes & 8) == 8 ) break zzForAction;
           }
 
@@ -716,7 +694,9 @@
       }
 
       // store back cached position
-      zzMarkedPos = zzMarkedPosL;
+      if(zzInput != YYEOF) {
+          input.backup(input.readLength() - tokenLength);
+      }
 
       switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
         case 6: 
