Package com.admc.jcreole

Source Code of com.admc.jcreole.CreoleScanner

/* The following code was generated by JFlex 1.4.3 on 1/7/13 7:12 PM */

/*
* Copyright 2011 Axis Data Management Corp.
*
* Licensed 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 com.admc.jcreole;

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.io.InputStream;
import java.io.IOException;
import java.io.File;
import java.util.List;
import java.util.ArrayList;
import org.apache.commons.io.input.CharSequenceReader;
import com.admc.util.Expander;
import com.admc.util.IOUtil;


/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 1/7/13 7:12 PM from the specification file
* <tt>/home/blaine/gradle/jcreole/src/main/java/com/admc/jcreole/creole.flex</tt>
*/
public class CreoleScanner extends beaver.Scanner {

  /** This character denotes the end of file */
  public static final int YYEOF = -1;

  /** initial size of the lookahead buffer */
  private static final int ZZ_BUFFERSIZE = 16384;

  /** lexical states */
  public static final int JCXBLOCKSTATE = 12;
  public static final int DLSTATE = 14;
  public static final int LISTATE = 4;
  public static final int PSTATE = 2;
  public static final int HEADSTATE = 10;
  public static final int YYINITIAL = 0;
  public static final int DEATH = 16;
  public static final int TABLESTATE = 8;
  public static final int ESCURL = 6;

  /**
   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
   *                  at the beginning of a line
   * l is of the form l = 2*k, k a non negative integer
   */
  private static final int ZZ_LEXSTATE[] = {
     0123456789, 10, 11, 12, 13, 14, 15,
    16, 17
  };

  /**
   * Translates characters to character classes
   */
  private static final String ZZ_CMAP_PACKED =
    "\11\0\1\2\1\6\1\0\1\1\23\0\1\4\1\57\1\5\1\13"+
    "\3\0\1\5\1\20\1\40\1\7\1\70\1\36\1\33\1\5\1\32"+
    "\12\3\1\63\1\16\1\10\1\15\1\12\1\5\1\0\1\3\1\74"+
    "\1\50\1\47\1\41\1\66\5\3\1\53\1\3\1\24\1\3\1\55"+
    "\1\3\1\67\1\64\7\3\1\11\1\37\1\14\1\35\1\34\1\0"+
    "\1\45\1\71\1\52\1\30\1\25\1\21\1\3\1\62\1\26\1\73"+
    "\1\72\1\51\1\44\1\27\1\22\1\54\1\3\1\42\1\46\1\23"+
    "\1\65\2\3\1\31\1\43\1\3\1\60\1\17\1\61\1\56\uff81\0";

  /**
   * Translates characters to character classes
   */
  private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);

  /**
   * Translates DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

  private static final String ZZ_ACTION_PACKED_0 =
    "\20\0\2\1\2\0\3\2\1\3\21\2\1\4\1\5"+
    "\1\6\5\2\17\7\1\10\3\7\1\11\1\12\1\7"+
    "\1\12\1\13\1\14\1\10\1\15\2\7\1\16\1\7"+
    "\1\16\1\7\20\17\1\20\1\21\1\10\2\7\1\10"+
    "\1\22\4\7\1\23\4\7\1\15\1\7\1\24\1\7"+
    "\1\24\1\25\6\1\5\0\1\26\1\27\2\0\1\30"+
    "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\10"+
    "\1\0\2\10\10\0\1\40\1\41\1\42\1\27\1\43"+
    "\1\44\1\0\1\32\1\45\5\0\1\46\2\0\1\47"+
    "\1\27\1\50\1\0\1\51\1\52\1\53\1\54\1\55"+
    "\1\56\4\0\1\11\1\12\2\0\1\27\2\57\1\60"+
    "\1\61\1\57\1\27\2\0\1\16\1\62\1\16\1\27"+
    "\1\16\1\27\2\0\1\27\2\63\1\64\1\0\1\65"+
    "\1\66\1\0\1\67\1\70\2\0\1\21\2\27\3\0"+
    "\1\23\2\27\2\0\1\27\1\52\1\57\1\71\1\72"+
    "\1\57\1\0\1\24\1\0\1\27\5\1\5\0\1\73"+
    "\2\0\1\74\1\0\1\74\6\0\1\75\6\0\1\76"+
    "\4\0\1\77\11\0\1\75\21\0\1\75\37\0\1\100"+
    "\17\0\1\75\12\0\13\1\14\0\1\101\1\102\1\0"+
    "\1\103\2\0\1\104\15\0\1\102\16\0\1\105\42\0"+
    "\1\105\10\0\6\1\3\0\1\106\1\15\1\0\1\107"+
    "\3\0\1\110\1\111\1\101\2\0\2\104\11\0\1\112"+
    "\1\113\1\0\1\114\12\0\1\115\1\116\31\0\1\117"+
    "\14\0\3\1\2\0\1\15\4\0\1\110\1\111\2\0"+
    "\1\120\1\121\7\0\1\112\1\113\1\74\1\0\1\104"+
    "\6\0\1\122\22\0\1\123\14\0\1\124\2\0\3\1"+
    "\1\125\4\0\1\126\3\0\1\127\4\0\1\104\2\0"+
    "\1\120\1\130\5\0\1\103\6\0\1\11\30\0\3\1"+
    "\13\0\1\120\16\0\1\11\21\0\2\1\12\0\1\131"+
    "\35\0\2\1\13\0\1\132\31\0\2\1\1\0\1\133"+
    "\34\0\2\1\25\0\2\1\5\0\1\131\2\0\1\134"+
    "\13\0\2\1\6\0\1\135\13\0\2\1\6\0\1\136"+
    "\7\0\1\137\2\0\2\1\3\0\1\140\6\0\1\141"+
    "\1\0\1\1\2\0\1\142\7\0\1\142\1\143\5\0"+
    "\1\143\1\0\1\144\3\0\1\144\2\0\1\145\7\0"+
    "\1\146\2\0\1\147\4\0\1\146\1\0\1\147";

  private static int [] zzUnpackAction() {
    int [] result = new int[981];
    int offset = 0;
    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAction(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /**
   * Translates a state to a row index in the transition table
   */
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();

  private static final String ZZ_ROWMAP_PACKED_0 =
    "\0\0\0\75\0\172\0\267\0\364\0\u0131\0\u016e\0\u01ab"+
    "\0\u01e8\0\u0225\0\u0262\0\u029f\0\u02dc\0\u0319\0\u0356\0\u0393"+
    "\0\u03d0\0\u040d\0\u044a\0\u0487\0\u04c4\0\u0501\0\u053e\0\u04c4"+
    "\0\u057b\0\u05b8\0\u05f5\0\u0632\0\u066f\0\u06ac\0\u06e9\0\u0726"+
    "\0\u0763\0\u07a0\0\u07dd\0\u081a\0\u0857\0\u0894\0\u08d1\0\u090e"+
    "\0\u094b\0\u0988\0\u04c4\0\u04c4\0\u09c5\0\u0a02\0\u0a3f\0\u0a7c"+
    "\0\u0ab9\0\u04c4\0\u0af6\0\u0b33\0\u0b70\0\u0bad\0\u05f5\0\u0632"+
    "\0\u0bea\0\u0c27\0\u0c64\0\u0ca1\0\u0cde\0\u0d1b\0\u0d58\0\u0d95"+
    "\0\u0dd2\0\u0857\0\u0e0f\0\u0e4c\0\u0e89\0\u0b70\0\u0ec6\0\u0bea"+
    "\0\u04c4\0\u04c4\0\u0f03\0\u0f40\0\u0f7d\0\u0fba\0\u0ff7\0\u1034"+
    "\0\u1071\0\u0a7c\0\u04c4\0\u0af6\0\u0b70\0\u10ae\0\u05f5\0\u0632"+
    "\0\u0bea\0\u0c64\0\u0ca1\0\u0cde\0\u0d1b\0\u0d58\0\u0d95\0\u0857"+
    "\0\u10eb\0\u1128\0\u1165\0\u11a2\0\u11df\0\u121c\0\u1259\0\u1296"+
    "\0\u04c4\0\u12d3\0\u1310\0\u134d\0\u138a\0\u13c7\0\u1404\0\u1441"+
    "\0\u147e\0\u14bb\0\u14f8\0\u1535\0\u0b70\0\u1572\0\u0bea\0\u04c4"+
    "\0\u15af\0\u15ec\0\u1629\0\u1666\0\u16a3\0\u16e0\0\u044a\0\u171d"+
    "\0\u0501\0\u175a\0\u1797\0\u04c4\0\u17d4\0\u1811\0\u184e\0\u04c4"+
    "\0\u04c4\0\u188b\0\u04c4\0\u04c4\0\u04c4\0\u04c4\0\u04c4\0\u04c4"+
    "\0\u18c8\0\u1905\0\u1942\0\u197f\0\u19bc\0\u0894\0\u19f9\0\u1a36"+
    "\0\u1a73\0\u1ab0\0\u1aed\0\u04c4\0\u04c4\0\u04c4\0\u1b2a\0\u04c4"+
    "\0\u04c4\0\u1b67\0\u1ba4\0\u04c4\0\u1be1\0\u1c1e\0\u1c5b\0\u1c98"+
    "\0\u1cd5\0\u04c4\0\u1d12\0\u1d4f\0\u04c4\0\u1d8c\0\u04c4\0\u1dc9"+
    "\0\u04c4\0\u1e06\0\u04c4\0\u04c4\0\u04c4\0\u04c4\0\u1e43\0\u1e80"+
    "\0\u1ebd\0\u0e4c\0\u1efa\0\u04c4\0\u1f37\0\u1f74\0\u1fb1\0\u04c4"+
    "\0\u1fee\0\u04c4\0\u04c4\0\u202b\0\u2068\0\u0fba\0\u20a5\0\u20e2"+
    "\0\u04c4\0\u04c4\0\u211f\0\u215c\0\u2199\0\u10eb\0\u21d6\0\u2213"+
    "\0\u04c4\0\u1165\0\u04c4\0\u2250\0\u04c4\0\u04c4\0\u228d\0\u04c4"+
    "\0\u04c4\0\u121c\0\u22ca\0\u2307\0\u2344\0\u2381\0\u23be\0\u1310"+
    "\0\u134d\0\u23fb\0\u2438\0\u2475\0\u1441\0\u24b2\0\u24ef\0\u252c"+
    "\0\u2569\0\u04c4\0\u04c4\0\u25a6\0\u1535\0\u04c4\0\u25e3\0\u2620"+
    "\0\u265d\0\u269a\0\u26d7\0\u2714\0\u2751\0\u278e\0\u27cb\0\u2808"+
    "\0\u2845\0\u2882\0\u04c4\0\u28bf\0\u28fc\0\u04c4\0\u2939\0\u2976"+
    "\0\u29b3\0\u29f0\0\u2a2d\0\u2a6a\0\u2aa7\0\u2ae4\0\u2b21\0\u2b5e"+
    "\0\u2b9b\0\u2bd8\0\u2c15\0\u2c52\0\u2c8f\0\u04c4\0\u2ccc\0\u2d09"+
    "\0\u2d46\0\u2d83\0\u04c4\0\u2dc0\0\u2dfd\0\u2e3a\0\u2e77\0\u2eb4"+
    "\0\u2ef1\0\u2f2e\0\u2f6b\0\u2fa8\0\u2fe5\0\u3022\0\u305f\0\u309c"+
    "\0\u30d9\0\u3116\0\u3153\0\u3190\0\u31cd\0\u320a\0\u3247\0\u3284"+
    "\0\u2976\0\u32c1\0\u32fe\0\u333b\0\u3378\0\u33b5\0\u33f2\0\u342f"+
    "\0\u346c\0\u34a9\0\u1efa\0\u34e6\0\u3523\0\u3560\0\u359d\0\u35da"+
    "\0\u3617\0\u3654\0\u3691\0\u36ce\0\u370b\0\u1fee\0\u202b\0\u3748"+
    "\0\u3785\0\u37c2\0\u37ff\0\u383c\0\u3879\0\u38b6\0\u38f3\0\u3930"+
    "\0\u396d\0\u39aa\0\u39e7\0\u3a24\0\u3a61\0\u3a9e\0\u04c4\0\u3adb"+
    "\0\u3b18\0\u3b55\0\u3b92\0\u3bcf\0\u3c0c\0\u3c49\0\u3c86\0\u3cc3"+
    "\0\u3d00\0\u3d3d\0\u3d7a\0\u3db7\0\u3df4\0\u3e31\0\u3e6e\0\u2569"+
    "\0\u25a6\0\u3eab\0\u3ee8\0\u3f25\0\u3f62\0\u3f9f\0\u3fdc\0\u4019"+
    "\0\u4056\0\u4093\0\u40d0\0\u410d\0\u414a\0\u4187\0\u41c4\0\u4201"+
    "\0\u423e\0\u427b\0\u42b8\0\u42f5\0\u4332\0\u436f\0\u43ac\0\u43e9"+
    "\0\u4426\0\u4463\0\u44a0\0\u44dd\0\u451a\0\u4557\0\u4594\0\u45d1"+
    "\0\u460e\0\u04c4\0\u464b\0\u04c4\0\u4688\0\u46c5\0\u4702\0\u473f"+
    "\0\u477c\0\u47b9\0\u47f6\0\u4833\0\u4870\0\u48ad\0\u48ea\0\u4927"+
    "\0\u4964\0\u49a1\0\u49de\0\u4a1b\0\u4a58\0\u4a95\0\u4ad2\0\u4b0f"+
    "\0\u4b4c\0\u4b89\0\u4bc6\0\u4c03\0\u4c40\0\u4c7d\0\u4cba\0\u4cf7"+
    "\0\u4d34\0\u4d71\0\u4dae\0\u04c4\0\u4deb\0\u4e28\0\u4e65\0\u4ea2"+
    "\0\u4edf\0\u4f1c\0\u4f59\0\u4f96\0\u4fd3\0\u5010\0\u504d\0\u508a"+
    "\0\u50c7\0\u5104\0\u5141\0\u517e\0\u51bb\0\u51f8\0\u5235\0\u5272"+
    "\0\u52af\0\u52ec\0\u5329\0\u5366\0\u53a3\0\u53e0\0\u541d\0\u545a"+
    "\0\u5497\0\u54d4\0\u5511\0\u554e\0\u558b\0\u55c8\0\u4a58\0\u5605"+
    "\0\u5642\0\u567f\0\u56bc\0\u56f9\0\u5736\0\u5773\0\u57b0\0\u57ed"+
    "\0\u582a\0\u5867\0\u58a4\0\u58e1\0\u591e\0\u595b\0\u5998\0\u59d5"+
    "\0\u04c4\0\u5a12\0\u5a4f\0\u04c4\0\u5a8c\0\u5ac9\0\u5b06\0\u5b43"+
    "\0\u5b80\0\u04c4\0\u5bbd\0\u5bfa\0\u5c37\0\u04c4\0\u5c74\0\u5cb1"+
    "\0\u4a58\0\u5cee\0\u5d2b\0\u5d68\0\u5da5\0\u5de2\0\u5e1f\0\u5e5c"+
    "\0\u5e99\0\u5ed6\0\u04c4\0\u5f13\0\u5f50\0\u5f8d\0\u5fca\0\u6007"+
    "\0\u6044\0\u6081\0\u60be\0\u60fb\0\u6138\0\u04c4\0\u04c4\0\u6175"+
    "\0\u61b2\0\u61ef\0\u622c\0\u6269\0\u62a6\0\u62e3\0\u6320\0\u635d"+
    "\0\u639a\0\u63d7\0\u6414\0\u6451\0\u648e\0\u64cb\0\u6508\0\u6545"+
    "\0\u6582\0\u65bf\0\u65fc\0\u6639\0\u6676\0\u66b3\0\u66f0\0\u672d"+
    "\0\u04c4\0\u676a\0\u67a7\0\u67e4\0\u6821\0\u685e\0\u689b\0\u68d8"+
    "\0\u6915\0\u6952\0\u698f\0\u69cc\0\u6a09\0\u6a46\0\u6a83\0\u6ac0"+
    "\0\u04c4\0\u6afd\0\u04c4\0\u6b3a\0\u6b77\0\u6bb4\0\u6bf1\0\u04c4"+
    "\0\u04c4\0\u6c2e\0\u6c6b\0\u6ca8\0\u04c4\0\u6ce5\0\u6d22\0\u6d5f"+
    "\0\u6d9c\0\u6dd9\0\u6e16\0\u6e53\0\u04c4\0\u04c4\0\u5ed6\0\u6e90"+
    "\0\u6ecd\0\u6f0a\0\u6f47\0\u6f84\0\u6fc1\0\u6ffe\0\u703b\0\u6175"+
    "\0\u7078\0\u70b5\0\u70f2\0\u712f\0\u716c\0\u71a9\0\u71e6\0\u7223"+
    "\0\u7260\0\u729d\0\u72da\0\u7317\0\u7354\0\u7391\0\u73ce\0\u740b"+
    "\0\u7448\0\u7485\0\u04c4\0\u74c2\0\u74ff\0\u753c\0\u7579\0\u75b6"+
    "\0\u75f3\0\u7630\0\u766d\0\u76aa\0\u76e7\0\u7724\0\u7761\0\u04c4"+
    "\0\u779e\0\u77db\0\u7818\0\u7855\0\u7892\0\u6afd\0\u78cf\0\u790c"+
    "\0\u7949\0\u7986\0\u6c2e\0\u79c3\0\u7a00\0\u7a3d\0\u04c4\0\u7a7a"+
    "\0\u7ab7\0\u7af4\0\u7b31\0\u7b6e\0\u7bab\0\u7be8\0\u7c25\0\u6f0a"+
    "\0\u7c62\0\u7c9f\0\u7cdc\0\u7d19\0\u7d56\0\u7078\0\u7d93\0\u7dd0"+
    "\0\u7e0d\0\u7e4a\0\u7e87\0\u7ec4\0\u04c4\0\u7f01\0\u7f3e\0\u7f7b"+
    "\0\u7fb8\0\u7ff5\0\u8032\0\u806f\0\u80ac\0\u80e9\0\u8126\0\u8163"+
    "\0\u81a0\0\u81dd\0\u821a\0\u8257\0\u8294\0\u82d1\0\u830e\0\u834b"+
    "\0\u8388\0\u83c5\0\u8402\0\u843f\0\u847c\0\u84b9\0\u84f6\0\u8533"+
    "\0\u8570\0\u85ad\0\u85ea\0\u8627\0\u5c37\0\u8664\0\u86a1\0\u86de"+
    "\0\u871b\0\u8758\0\u8795\0\u87d2\0\u880f\0\u884c\0\u8889\0\u88c6"+
    "\0\u8903\0\u8940\0\u897d\0\u89ba\0\u89f7\0\u8a34\0\u8a71\0\u8aae"+
    "\0\u8aeb\0\u8b28\0\u7ec4\0\u8b65\0\u8ba2\0\u8bdf\0\u8c1c\0\u8c59"+
    "\0\u8c96\0\u8cd3\0\u8d10\0\u8d4d\0\u8d8a\0\u8dc7\0\u8e04\0\u8e41"+
    "\0\u8e7e\0\u8ebb\0\u8ef8\0\u8f35\0\u8f72\0\u8faf\0\u8fec\0\u9029"+
    "\0\u9066\0\u90a3\0\u90e0\0\u911d\0\u915a\0\u9197\0\u91d4\0\u9211"+
    "\0\u924e\0\u6ecd\0\u7b6e\0\u928b\0\u92c8\0\u9305\0\u9342\0\u937f"+
    "\0\u93bc\0\u93f9\0\u9436\0\u9473\0\u94b0\0\u94ed\0\u952a\0\u9567"+
    "\0\u95a4\0\u95e1\0\u961e\0\u965b\0\u9698\0\u96d5\0\u9712\0\u974f"+
    "\0\u978c\0\u97c9\0\u9806\0\u9843\0\u9880\0\u98bd\0\u98fa\0\u9937"+
    "\0\u9974\0\u99b1\0\u99ee\0\u9a2b\0\u9a68\0\u9aa5\0\u9ae2\0\u9b1f"+
    "\0\u9b5c\0\u9b99\0\u9bd6\0\u04c4\0\u9c13\0\u9c50\0\u9c8d\0\u9cca"+
    "\0\u9d07\0\u9d44\0\u9d81\0\u9dbe\0\u9dfb\0\u9e38\0\u9e75\0\u9eb2"+
    "\0\u9eef\0\u9f2c\0\u9f69\0\u9fa6\0\u9fe3\0\ua020\0\ua05d\0\ua09a"+
    "\0\ua0d7\0\ua114\0\ua151\0\ua18e\0\ua1cb\0\ua208\0\ua245\0\ua282"+
    "\0\u04c4\0\ua2bf\0\ua2fc\0\ua339\0\ua376\0\ua3b3\0\ua3f0\0\ua42d"+
    "\0\ua46a\0\ua4a7\0\ua4e4\0\ua521\0\ua55e\0\ua59b\0\ua5d8\0\ua615"+
    "\0\ua652\0\ua68f\0\ua6cc\0\ua709\0\ua746\0\ua783\0\ua7c0\0\ua7fd"+
    "\0\ua83a\0\ua877\0\ua8b4\0\ua8f1\0\ua92e\0\ua96b\0\ua9a8\0\ua9e5"+
    "\0\uaa22\0\uaa5f\0\uaa9c\0\uaad9\0\uab16\0\uab53\0\uab90\0\uabcd"+
    "\0\uac0a\0\uac47\0\uac84\0\uacc1\0\uacfe\0\uad3b\0\uad78\0\uadb5"+
    "\0\uadf2\0\uae2f\0\uae6c\0\uaea9\0\uaee6\0\uaf23\0\uaf60\0\uaf9d"+
    "\0\uafda\0\ub017\0\ub054\0\u04c4\0\ub091\0\ub0ce\0\u04c4\0\ub10b"+
    "\0\ub148\0\ub185\0\ub1c2\0\ub1ff\0\ub23c\0\ub279\0\ub2b6\0\ub2f3"+
    "\0\ub330\0\ub36d\0\ub3aa\0\ub3e7\0\ub424\0\ub461\0\ub49e\0\ub4db"+
    "\0\ub518\0\ub555\0\u04c4\0\ub592\0\ub5cf\0\ub60c\0\ub649\0\ub686"+
    "\0\ub6c3\0\ub700\0\ub73d\0\ub77a\0\ub7b7\0\ub7f4\0\ub831\0\ub86e"+
    "\0\ub8ab\0\ub8e8\0\ub925\0\ub962\0\ub99f\0\ub9dc\0\u04c4\0\uba19"+
    "\0\uba56\0\uba93\0\ubad0\0\ubb0d\0\ubb4a\0\ubb87\0\u04c4\0\ubbc4"+
    "\0\ubc01\0\ubc3e\0\ubc7b\0\ubcb8\0\ubcf5\0\ubd32\0\u04c4\0\ubd6f"+
    "\0\ubdac\0\ubde9\0\ube26\0\ube63\0\ubea0\0\u04c4\0\ubedd\0\ubf1a"+
    "\0\ubf57\0\ubf94\0\ubfd1\0\uc00e\0\uc04b\0\uc088\0\uc0c5\0\uc102"+
    "\0\uc13f\0\uc17c\0\u04c4\0\uc1b9\0\uc1f6\0\uc233\0\uc270\0\uc2ad"+
    "\0\uc2ea\0\u04c4\0\uc327\0\uc364\0\uc3a1\0\uc3de\0\uc41b\0\u04c4"+
    "\0\uc458\0\uc495\0\u04c4\0\uc4d2\0\uc50f\0\uc54c\0\uc589\0\uc5c6"+
    "\0\uc603\0\uc640\0\uc67d\0\uc6ba\0\uc6f7\0\uc734\0\uc771\0\uc7ae"+
    "\0\uc7eb\0\uc828\0\u04c4\0\uc865\0\u04c4";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[981];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0/* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /**
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpackTrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\2\25\1\26\1\27\1\26\1\25\1\30\1\31\1\32"+
    "\1\33\1\34\1\35\5\25\11\27\1\36\1\37\1\40"+
    "\1\41\1\42\1\43\1\25\15\27\1\44\1\25\1\45"+
    "\1\25\1\27\1\25\4\27\1\25\4\27\2\25\1\46"+
    "\1\27\1\46\1\25\1\30\1\47\1\50\1\33\1\34"+
    "\1\51\1\25\1\52\1\53\1\54\1\25\1\55\10\27"+
    "\1\36\1\56\1\40\1\41\1\42\1\43\1\25\15\27"+
    "\1\57\1\25\1\60\1\25\1\61\1\25\4\27\1\25"+
    "\4\27\3\62\1\63\2\62\1\64\1\65\1\66\1\67"+
    "\1\70\1\71\5\62\1\72\10\63\1\73\1\74\1\75"+
    "\1\76\1\77\1\100\1\62\15\63\1\101\1\62\1\102"+
    "\1\62\1\103\1\62\4\63\1\62\4\63\2\62\1\104"+
    "\1\63\1\104\1\62\1\105\1\106\1\107\1\67\1\70"+
    "\1\110\2\62\1\111\1\112\1\62\1\72\10\63\1\73"+
    "\1\74\1\75\1\76\1\77\1\100\1\62\15\63\1\113"+
    "\1\62\1\102\1\62\1\103\1\62\4\63\1\62\4\63"+
    "\3\62\1\63\2\62\1\114\1\65\1\115\1\67\1\70"+
    "\1\71\5\62\1\72\10\63\1\73\1\74\1\75\1\76"+
    "\1\77\1\100\1\62\15\63\1\101\1\62\1\102\1\62"+
    "\1\103\1\62\4\63\1\62\4\63\2\62\1\116\1\63"+
    "\1\116\1\62\1\114\1\117\1\120\1\67\1\70\1\121"+
    "\5\62\1\72\10\63\1\73\1\74\1\75\1\76\1\77"+
    "\1\100\1\62\15\63\1\113\1\62\1\122\1\62\1\103"+
    "\1\62\4\63\1\62\4\63\3\123\1\124\2\123\1\0"+
    "\1\125\1\126\1\127\1\130\1\131\5\123\11\124\1\132"+
    "\1\133\1\134\1\135\1\136\1\137\1\123\15\124\1\101"+
    "\1\123\1\140\1\123\1\124\1\123\4\124\1\123\4\124"+
    "\2\123\1\141\1\124\1\141\1\123\1\0\1\125\1\142"+
    "\1\127\1\130\1\131\5\123\11\124\1\132\1\133\1\134"+
    "\1\135\1\136\1\137\1\123\15\124\1\113\1\123\1\140"+
    "\1\123\1\124\1\123\4\124\1\123\4\124\3\62\1\63"+
    "\2\62\1\143\1\65\1\115\1\67\1\70\1\71\3\62"+
    "\1\144\1\62\1\72\10\63\1\73\1\74\1\75\1\76"+
    "\1\77\1\100\1\62\15\63\1\145\1\62\1\102\1\62"+
    "\1\103\1\62\4\63\1\62\4\63\2\62\1\146\1\63"+
    "\1\146\1\62\1\143\1\65\1\147\1\67\1\70\1\71"+
    "\3\62\1\144\1\62\1\72\10\63\1\73\1\74\1\75"+
    "\1\76\1\77\1\100\1\62\15\63\1\150\1\62\1\122"+
    "\1\62\1\103\1\62\4\63\1\62\4\63\3\62\1\63"+
    "\2\62\1\151\1\65\1\152\1\67\1\70\1\71\1\62"+
    "\1\153\3\62\1\72\10\63\1\73\1\74\1\75\1\76"+
    "\1\77\1\100\1\62\15\63\1\101\1\62\1\102\1\62"+
    "\1\103\1\62\4\63\1\62\4\63\2\62\1\154\1\63"+
    "\1\154\1\62\1\151\1\65\1\155\1\67\1\70\1\71"+
    "\1\62\1\156\3\62\1\72\10\63\1\73\1\74\1\75"+
    "\1\76\1\77\1\100\1\62\15\63\1\113\1\62\1\102"+
    "\1\62\1\103\1\62\4\63\1\62\4\63\3\62\1\63"+
    "\3\62\1\65\1\157\1\67\1\70\1\71\5\62\1\72"+
    "\10\63\1\73\1\74\1\75\1\76\1\77\1\100\1\62"+
    "\15\63\1\101\1\62\1\102\1\62\1\103\1\62\4\63"+
    "\1\62\4\63\2\62\1\160\1\63\1\160\2\62\1\65"+
    "\1\161\1\67\1\70\1\71\5\62\1\72\10\63\1\73"+
    "\1\162\1\75\1\76\1\77\1\100\1\62\15\63\1\113"+
    "\1\62\1\122\1\62\1\103\1\62\4\63\1\62\4\63"+
    "\3\62\1\63\2\62\1\163\1\65\1\115\1\67\1\70"+
    "\1\71\5\62\1\72\10\63\1\73\1\74\1\75\1\76"+
    "\1\77\1\100\1\62\15\63\1\101\1\62\1\102\1\62"+
    "\1\103\1\62\4\63\1\62\4\63\2\62\1\164\1\63"+
    "\1\164\1\62\1\163\1\165\1\166\1\67\1\70\1\167"+
    "\2\62\1\170\2\62\1\72\10\63\1\73\1\74\1\75"+
    "\1\76\1\77\1\100\1\62\15\63\1\113\1\62\1\122"+
    "\1\62\1\103\1\62\4\63\1\62\4\63\6\171\1\0"+
    "\1\171\1\172\1\173\46\171\1\174\16\171\1\175\1\171"+
    "\1\175\1\171\1\0\1\171\1\176\1\173\46\171\1\174"+
    "\14\171\2\0\1\177\1\0\1\177\102\0\1\200\161\0"+
    "\1\201\1\0\1\201\1\0\1\30\107\0\1\202\40\0"+
    "\1\203\21\0\1\204\75\0\1\205\75\0\1\206\75\0"+
    "\1\207\75\0\1\210\113\0\1\211\75\0\1\212\75\0"+
    "\1\213\75\0\1\214\75\0\1\215\75\0\1\216\41\0"+
    "\1\217\2\0\6\220\4\0\1\221\10\0\6\220\16\0"+
    "\1\222\1\0\1\223\1\220\1\224\72\0\1\225\16\0"+
    "\1\226\1\0\1\226\1\0\1\30\1\227\1\230\2\0"+
    "\1\231\1\0\1\52\1\53\1\54\13\0\1\232\22\0"+
    "\1\233\16\0\7\234\1\204\4\234\1\235\1\236\57\234"+
    "\10\0\1\237\64\0\13\240\1\210\1\235\1\241\57\240"+
    "\15\0\1\52\100\0\1\202\1\0\1\242\36\0\1\203"+
    "\45\0\1\243\45\0\1\217\2\0\1\244\3\220\1\244"+
    "\1\220\1\244\1\0\1\244\1\0\1\221\10\0\6\220"+
    "\16\0\1\222\1\0\1\223\1\220\1\224\72\0\1\245"+
    "\35\0\1\202\1\0\1\246\36\0\1\203\33\0\1\247"+
    "\40\0\1\250\14\0\1\251\1\0\1\251\10\0\1\252"+
    "\15\0\1\253\24\0\1\254\23\0\1\255\75\0\1\256"+
    "\77\0\1\257\102\0\1\247\1\0\1\260\36\0\1\250"+
    "\44\0\1\261\75\0\1\262\75\0\1\263\75\0\1\264"+
    "\75\0\1\265\75\0\1\266\41\0\1\217\2\0\6\220"+
    "\4\0\1\267\10\0\6\220\16\0\1\222\1\0\1\223"+
    "\1\220\1\270\33\0\1\247\1\0\1\271\36\0\1\250"+
    "\14\0\1\272\1\0\1\272\1\0\1\273\1\274\1\275"+
    "\2\0\1\274\2\0\1\111\1\112\36\0\1\233\20\0"+
    "\1\276\1\0\1\276\1\0\1\273\6\0\1\252\15\0"+
    "\1\253\24\0\1\254\24\0\1\277\70\0\1\217\2\0"+
    "\1\244\3\220\1\244\1\220\1\244\1\0\1\244\1\0"+
    "\1\267\10\0\6\220\16\0\1\222\1\0\1\223\1\220"+
    "\1\270\12\0\2\300\1\301\1\300\1\301\1\300\1\302"+
    "\1\303\3\300\1\303\1\300\1\302\1\300\1\302\13\300"+
    "\1\304\41\300\10\0\1\305\66\0\1\306\1\0\1\306"+
    "\2\0\1\117\1\307\2\0\1\121\42\0\1\233\25\0"+
    "\1\310\4\0\1\311\1\312\67\0\1\313\77\0\1\314"+
    "\1\311\1\312\67\0\1\315\66\0\1\316\1\0\1\316"+
    "\3\0\1\317\45\0\1\233\26\0\1\320\64\0\2\321"+
    "\1\322\1\321\1\322\12\321\1\323\55\321\2\0\1\324"+
    "\1\0\1\324\1\0\1\325\6\0\1\326\40\0\1\327"+
    "\22\0\1\217\1\0\1\330\6\220\2\0\1\331\1\0"+
    "\1\267\10\0\6\220\16\0\1\222\1\0\1\223\1\220"+
    "\1\270\14\0\1\332\1\0\1\332\3\0\1\333\6\0"+
    "\1\334\36\0\1\233\26\0\1\335\70\0\1\217\1\0"+
    "\1\330\1\244\3\220\1\244\1\220\1\244\1\0\1\244"+
    "\1\0\1\267\10\0\6\220\16\0\1\222\1\0\1\223"+
    "\1\220\1\270\22\0\1\336\66\0\1\337\1\0\1\337"+
    "\1\0\1\151\6\0\1\340\61\0\1\341\1\0\1\341"+
    "\3\0\1\317\4\0\1\342\40\0\1\233\26\0\1\343"+
    "\66\0\1\337\1\0\1\337\1\0\1\151\6\0\1\156"+
    "\67\0\1\344\66\0\1\345\1\0\1\345\3\0\1\346"+
    "\22\0\1\232\22\0\1\233\26\0\1\347\117\0\1\350"+
    "\41\0\2\300\1\351\1\300\1\351\1\300\1\352\6\300"+
    "\1\352\1\353\1\352\13\300\1\354\41\300\2\0\1\355"+
    "\1\0\1\355\2\0\1\356\1\357\2\0\1\356\2\0"+
    "\1\170\37\0\1\233\26\0\1\360\64\0\6\171\1\0"+
    "\74\171\1\0\1\171\1\361\72\171\1\0\2\171\1\362"+
    "\71\171\1\0\51\171\1\363\16\171\1\175\1\171\1\175"+
    "\1\171\1\0\1\171\1\364\72\171\1\0\1\171\1\365"+
    "\64\171\12\0\1\366\105\0\1\367\74\0\1\370\52\0"+
    "\1\371\1\372\1\0\1\372\1\0\1\371\1\0\1\373"+
    "\1\374\1\0\1\375\4\0\1\376\1\377\16\0\1\u0100"+
    "\3\0\1\u0101\1\u0102\6\0\1\u0103\1\0\1\u0104\1\u0105"+
    "\2\376\13\0\14\206\1\u0106\60\206\12\0\1\373\115\0"+
    "\1\u0107\64\0\1\u0108\127\0\1\222\76\0\1\u0109\37\0"+
    "\1\u010a\51\0\60\u010b\1\u010c\1\u010d\13\u010b\7\234\1\u010e"+
    "\4\234\1\235\1\236\57\234\10\0\1\u010f\64\0\13\240"+
    "\1\0\1\235\1\241\57\240\33\0\1\u0110\50\0\1\244"+
    "\3\0\1\244\1\0\1\244\1\0\1\244\56\0\1\u0111"+
    "\1\u0112\1\0\1\u0112\1\0\1\u0111\1\0\1\373\1\374"+
    "\1\0\1\375\4\0\1\u0113\1\u0114\1\0\1\u0115\1\0"+
    "\1\u0116\1\u0117\11\0\1\u0100\3\0\1\u0118\1\u0102\1\u0119"+
    "\5\0\1\u0103\1\0\1\u011a\1\u011b\1\u0113\1\376\67\0"+
    "\1\u011c\53\0\1\u011d\41\0\60\u010b\1\u011e\1\u010d\13\u010b"+
    "\23\0\1\u011f\74\0\1\u0120\74\0\1\u0121\53\0\1\251"+
    "\1\0\1\251\10\0\1\252\15\0\1\253\74\0\1\u0122"+
    "\121\0\1\u0123\15\0\1\u0124\1\u0125\1\0\1\u0125\1\0"+
    "\1\u0124\1\0\1\373\2\0\1\375\4\0\1\u0126\1\u0127"+
    "\4\0\1\u0128\11\0\1\u0129\3\0\1\u012a\1\u012b\10\0"+
    "\1\u0104\1\u0105\1\u012c\1\u012d\67\0\1\u012e\53\0\1\u012f"+
    "\64\0\1\u0130\74\0\1\u0131\74\0\1\u0132\53\0\1\u0133"+
    "\1\0\1\u0133\1\0\1\273\76\0\1\u0134\66\0\1\276"+
    "\1\0\1\276\1\0\1\273\6\0\1\252\15\0\1\253"+
    "\42\0\1\u0135\1\u0136\1\0\1\u0136\1\0\1\u0135\1\0"+
    "\1\373\2\0\1\375\4\0\1\u0126\1\u0137\1\0\1\u0138"+
    "\1\0\1\u0139\1\u013a\11\0\1\u0129\3\0\1\u013b\1\u012b"+
    "\1\u013c\5\0\1\u013d\1\0\1\u0104\1\u0105\1\u012c\1\u012d"+
    "\15\0\1\u013e\1\0\1\u013e\1\0\1\302\1\303\3\0"+
    "\1\303\1\0\1\302\1\0\1\302\13\0\1\u013f\74\0"+
    "\1\u0140\42\0\1\u0141\1\u0142\1\0\1\u0142\1\0\1\u0141"+
    "\1\0\1\373\1\374\1\0\1\375\4\0\1\u0126\1\u0143"+
    "\4\0\1\u0128\11\0\1\u0129\4\0\1\u0144\6\0\1\u0103"+
    "\1\0\1\u0104\1\u0105\1\u012c\1\u012d\23\0\1\u0145\73\0"+
    "\1\310\5\0\1\312\60\0\1\u0146\1\u0147\1\0\1\u0147"+
    "\1\0\1\u0146\1\0\1\373\1\374\1\0\1\375\4\0"+
    "\1\u0126\1\u0148\1\0\1\u0149\1\0\1\u0139\1\u014a\11\0"+
    "\1\u0129\3\0\1\u014b\1\u0144\1\u013c\5\0\1\u0103\1\0"+
    "\1\u0104\1\u0105\1\u012c\1\u012d\26\0\1\314\1\0\1\312"+
    "\60\0\2\u014c\1\0\1\u014c\1\0\1\u014c\1\0\1\373"+
    "\2\0\1\375\24\0\1\u0129\15\0\1\u0104\1\u0105\25\0"+
    "\1\u014d\65\0\1\u014c\1\u014e\1\0\1\u014e\1\0\1\u014c"+
    "\1\0\1\373\2\0\1\375\11\0\1\u0139\12\0\1\u0129"+
    "\5\0\1\u013c\7\0\1\u0104\1\u0105\17\0\1\324\1\0"+
    "\1\324\1\0\1\325\103\0\1\u014f\67\0\1\u0150\101\0"+
    "\1\326\60\0\1\u0141\1\u0151\1\0\1\u0151\1\0\1\u0141"+
    "\1\0\1\373\1\374\1\0\1\375\4\0\1\u0126\1\u0143"+
    "\3\0\1\u0139\1\u0128\11\0\1\u0129\4\0\1\u0144\1\u013c"+
    "\5\0\1\u0103\1\0\1\u0104\1\u0105\1\u012c\1\u012d\14\0"+
    "\1\u0124\1\u0152\1\0\1\u0152\1\0\1\u0124\1\0\1\373"+
    "\2\0\1\375\4\0\1\u0126\1\u0143\3\0\1\u0153\1\u0128"+
    "\11\0\1\u0129\4\0\1\u012b\10\0\1\u0104\1\u0105\1\u012c"+
    "\1\u012d\15\0\1\337\1\0\1\337\1\0\1\151\103\0"+
    "\1\342\60\0\1\u0124\1\u0154\1\0\1\u0154\1\0\1\u0124"+
    "\1\0\1\373\2\0\1\375\4\0\1\u0126\1\u0143\3\0"+
    "\1\u0155\1\u0128\11\0\1\u0129\4\0\1\u012b\1\u013c\7\0"+
    "\1\u0104\1\u0105\1\u012c\1\u012d\14\0\1\u0156\1\u0157\1\0"+
    "\1\u0157\1\0\1\u0156\1\0\1\373\1\374\1\0\1\375"+
    "\1\u0158\3\0\1\u0126\1\u0143\4\0\1\u0128\11\0\1\u0129"+
    "\4\0\1\u0144\6\0\1\u0103\1\0\1\u0104\1\u0105\1\u012c"+
    "\1\u012d\23\0\1\u0159\65\0\1\u015a\1\u015b\1\0\1\u015b"+
    "\1\0\1\u015a\1\0\1\373\1\374\1\0\1\375\1\u0158"+
    "\3\0\1\u0126\1\u015c\1\0\1\u0115\1\0\1\u0116\1\u015d"+
    "\11\0\1\u0129\3\0\1\u015e\1\u0144\1\u0119\5\0\1\u0103"+
    "\1\0\1\u0104\1\u0105\1\u012c\1\u012d\46\0\1\u015f\43\0"+
    "\1\u0160\1\0\1\u0160\1\0\1\352\6\0\1\352\1\353"+
    "\1\352\13\0\1\u0161\74\0\1\u0162\51\0\1\u0163\65\0"+
    "\1\u0164\1\u0165\1\0\1\u0165\1\0\1\u0164\1\0\1\373"+
    "\1\374\1\0\1\375\4\0\1\u0126\1\u0166\1\0\1\u0167"+
    "\1\0\1\u0139\1\u0168\11\0\1\u0129\3\0\1\u0169\1\u0144"+
    "\1\u013c\5\0\1\u0103\1\0\1\u0104\1\u0105\1\u012c\1\u012d"+
    "\13\0\1\171\2\361\1\171\1\361\1\171\1\u014c\4\171"+
    "\1\u016a\24\171\1\u016b\15\171\1\u016c\1\u016d\15\171\6\362"+
    "\1\206\5\362\1\u016e\60\362\6\u016f\1\u010b\51\u016f\1\u0170"+
    "\1\u0171\13\u016f\6\171\1\0\1\171\1\u0172\65\171\1\361"+
    "\1\365\1\171\1\365\1\171\1\u014c\4\171\1\u016a\11\171"+
    "\1\u0173\12\171\1\u016b\5\171\1\u0174\7\171\1\u016c\1\u016d"+
    "\15\171\3\0\2\366\4\0\1\u0175\7\0\11\366\1\0"+
    "\2\366\4\0\15\366\4\0\1\366\1\0\4\366\1\0"+
    "\4\366\54\0\1\u0176\43\0\1\u0177\52\0\2\371\1\0"+
    "\1\371\1\0\1\371\2\0\1\374\1\0\1\375\4\0"+
    "\1\376\1\377\16\0\1\u0100\3\0\1\u0101\1\u0102\10\0"+
    "\1\u0104\1\u0105\2\376\14\0\1\371\1\372\1\0\1\372"+
    "\1\0\1\371\2\0\1\374\1\0\1\375\4\0\1\376"+
    "\1\377\16\0\1\u0100\3\0\1\u0101\1\u0102\6\0\1\u0103"+
    "\1\0\1\u0104\1\u0105\2\376\16\0\2\374\5\0\1\u0178"+
    "\6\0\11\374\1\0\2\374\4\0\15\374\4\0\1\374"+
    "\1\0\4\374\1\0\4\374\12\375\1\u0179\62\375\22\0"+
    "\1\u017a\53\0\2\u0129\1\0\1\u0129\1\0\1\u0129\3\0"+
    "\1\u017b\127\0\1\u017c\57\0\1\u017d\106\0\1\u017e\32\0"+
    "\12\u0104\1\u017f\62\u0104\12\u0105\1\u0180\62\u0105\14\206\1\u0181"+
    "\60\206\33\0\1\u0182\115\0\1\u0183\100\0\1\u0184\37\0"+
    "\1\u0185\51\0\61\u010b\1\u010d\13\u010b\61\u010c\1\u0186\13\u010c"+
    "\61\u010b\1\u0187\13\u010b\1\0\1\u0188\1\u010f\1\0\1\u010f"+
    "\1\0\1\u0188\2\0\1\u0189\6\0\1\u0113\1\u018a\1\0"+
    "\1\u0115\1\0\1\u0116\1\u0117\15\0\1\u015e\1\0\1\u0119"+
    "\5\0\1\u0103\1\0\1\u011a\1\u011b\1\u0113\47\0\1\u018b"+
    "\42\0\2\u0111\1\0\1\u0111\1\0\1\u0111\2\0\1\374"+
    "\1\0\1\375\4\0\1\u0113\1\u0114\1\0\1\u0115\2\0"+
    "\1\u0117\11\0\1\u0100\3\0\1\u0118\1\u0102\10\0\1\u011a"+
    "\1\u011b\1\u0113\1\376\14\0\1\u0111\1\u0112\1\0\1\u0112"+
    "\1\0\1\u0111\2\0\1\374\1\0\1\375\4\0\1\u0113"+
    "\1\u0114\1\0\1\u0115\1\0\1\u0116\1\u0117\11\0\1\u0100"+
    "\3\0\1\u0118\1\u0102\1\u0119\5\0\1\u0103\1\0\1\u011a"+
    "\1\u011b\1\u0113\1\376\35\0\1\u018c\74\0\1\u018d\101\0"+
    "\1\u018e\74\0\1\u018f\112\0\1\u0190\52\0\1\u0191\51\0"+
    "\12\u011a\1\u0192\62\u011a\12\u011b\1\u0193\62\u011b\63\0\1\u0194"+
    "\44\0\1\u0195\41\0\6\u010c\1\u0196\52\u010c\1\u0186\13\u010c"+
    "\54\0\1\u0197\74\0\1\u0198\43\0\1\u0199\104\0\1\u019a"+
    "\121\0\1\u019b\15\0\2\u0124\1\0\1\u0124\1\0\1\u0124"+
    "\4\0\1\375\4\0\1\u0126\1\u0143\4\0\1\u0128\11\0"+
    "\1\u0129\4\0\1\u012b\10\0\1\u0104\1\u0105\1\u012c\1\u012d"+
    "\14\0\1\u0124\1\u0125\1\0\1\u0125\1\0\1\u0124\4\0"+
    "\1\375\4\0\1\u0126\1\u0127\4\0\1\u0128\11\0\1\u0129"+
    "\3\0\1\u012a\1\u012b\10\0\1\u0104\1\u0105\1\u012c\1\u012d"+
    "\14\0\2\u0126\1\0\1\u0126\1\0\1\u0126\3\0\1\u019c"+
    "\104\0\1\u019d\101\0\1\u019e\112\0\1\u019f\57\0\1\u01a0"+
    "\47\0\2\u012c\5\0\1\u01a1\6\0\11\u012c\1\0\2\u012c"+
    "\4\0\15\u012c\4\0\1\u012c\1\0\4\u012c\1\0\4\u012c"+
    "\1\0\2\u012d\1\0\1\u012d\1\0\1\u012d\3\0\1\u01a2"+
    "\145\0\1\u01a3\44\0\1\u01a4\115\0\1\u01a5\43\0\1\u01a6"+
    "\125\0\1\u01a7\21\0\1\u01a8\1\u0134\1\0\1\u0134\1\0"+
    "\1\u01a8\12\0\1\u01a9\1\0\1\u0138\1\0\1\u0139\1\u01aa"+
    "\15\0\1\u01ab\1\0\1\u013c\5\0\1\u013d\21\0\2\u0135"+
    "\1\0\1\u0135\1\0\1\u0135\4\0\1\375\4\0\1\u0126"+
    "\1\u01ac\1\0\1\u0138\2\0\1\u013a\11\0\1\u0129\3\0"+
    "\1\u01ab\1\u012b\6\0\1\u013d\1\0\1\u0104\1\u0105\1\u012c"+
    "\1\u012d\14\0\1\u0135\1\u0136\1\0\1\u0136\1\0\1\u0135"+
    "\4\0\1\375\4\0\1\u0126\1\u0137\1\0\1\u0138\1\0"+
    "\1\u0139\1\u013a\11\0\1\u0129\3\0\1\u013b\1\u012b\1\u013c"+
    "\5\0\1\u013d\1\0\1\u0104\1\u0105\1\u012c\1\u012d\35\0"+
    "\1\u01ad\74\0\1\u01ae\101\0\1\u01af\74\0\1\u01b0\112\0"+
    "\1\u01b1\52\0\1\u01b2\113\0\1\u01b3\65\0\1\u01b4\42\0"+
    "\2\u0141\1\0\1\u0141\1\0\1\u0141\2\0\1\374\1\0"+
    "\1\375\4\0\1\u0126\1\u0143\4\0\1\u0128\11\0\1\u0129"+
    "\4\0\1\u0144\10\0\1\u0104\1\u0105\1\u012c\1\u012d\14\0"+
    "\1\u0141\1\u0142\1\0\1\u0142\1\0\1\u0141\2\0\1\374"+
    "\1\0\1\375\4\0\1\u0126\1\u0143\4\0\1\u0128\11\0"+
    "\1\u0129\4\0\1\u0144\6\0\1\u0103\1\0\1\u0104\1\u0105"+
    "\1\u012c\1\u012d\35\0\1\u01b5\102\0\1\u01b6\45\0\1\u01b7"+
    "\1\u0145\1\0\1\u0145\1\0\1\u01b7\12\0\1\u01b8\1\0"+
    "\1\u0149\1\0\1\u0139\1\u01b9\15\0\1\u014b\1\0\1\u013c"+
    "\5\0\1\u0103\21\0\2\u0146\1\0\1\u0146\1\0\1\u0146"+
    "\2\0\1\374\1\0\1\375\4\0\1\u0126\1\u0148\1\0"+
    "\1\u0149\2\0\1\u014a\11\0\1\u0129\3\0\1\u014b\1\u0144"+
    "\10\0\1\u0104\1\u0105\1\u012c\1\u012d\14\0\1\u0146\1\u0147"+
    "\1\0\1\u0147\1\0\1\u0146\2\0\1\374\1\0\1\375"+
    "\4\0\1\u0126\1\u0148\1\0\1\u0149\1\0\1\u0139\1\u014a"+
    "\11\0\1\u0129\3\0\1\u014b\1\u0144\1\u013c\5\0\1\u0103"+
    "\1\0\1\u0104\1\u0105\1\u012c\1\u012d\35\0\1\u01ba\74\0"+
    "\1\u01bb\101\0\1\u01bc\112\0\1\u01bd\30\0\2\u014c\1\0"+
    "\1\u014c\1\0\1\u014c\4\0\1\375\24\0\1\u0129\15\0"+
    "\1\u0104\1\u0105\17\0\1\u014d\1\0\1\u014d\20\0\1\u0139"+
    "\20\0\1\u013c\27\0\1\u014c\1\u014e\1\0\1\u014e\1\0"+
    "\1\u014c\4\0\1\375\11\0\1\u0139\12\0\1\u0129\5\0"+
    "\1\u013c\7\0\1\u0104\1\u0105\17\0\1\u0150\1\0\1\u0150"+
    "\20\0\1\u0139\20\0\1\u013c\5\0\1\u0103\21\0\1\u0141"+
    "\1\u0151\1\0\1\u0151\1\0\1\u0141\2\0\1\374\1\0"+
    "\1\375\4\0\1\u0126\1\u0143\3\0\1\u0139\1\u0128\11\0"+
    "\1\u0129\4\0\1\u0144\1\u013c\5\0\1\u0103\1\0\1\u0104"+
    "\1\u0105\1\u012c\1\u012d\14\0\1\u0124\1\u0152\1\0\1\u0152"+
    "\1\0\1\u0124\4\0\1\375\4\0\1\u0126\1\u0143\3\0"+
    "\1\u0153\1\u0128\11\0\1\u0129\4\0\1\u012b\10\0\1\u0104"+
    "\1\u0105\1\u012c\1\u012d\42\0\1\u01be\46\0\1\u0124\1\u0154"+
    "\1\0\1\u0154\1\0\1\u0124\4\0\1\375\4\0\1\u0126"+
    "\1\u0143\3\0\1\u0155\1\u0128\11\0\1\u0129\4\0\1\u012b"+
    "\1\u013c\7\0\1\u0104\1\u0105\1\u012c\1\u012d\42\0\1\u01bf"+
    "\46\0\2\u0156\1\0\1\u0156\1\0\1\u0156\2\0\1\374"+
    "\1\0\1\375\1\u0158\3\0\1\u0126\1\u0143\4\0\1\u0128"+
    "\11\0\1\u0129\4\0\1\u0144\10\0\1\u0104\1\u0105\1\u012c"+
    "\1\u012d\14\0\1\u0156\1\u0157\1\0\1\u0157\1\0\1\u0156"+
    "\2\0\1\374\1\0\1\375\1\u0158\3\0\1\u0126\1\u0143"+
    "\4\0\1\u0128\11\0\1\u0129\4\0\1\u0144\6\0\1\u0103"+
    "\1\0\1\u0104\1\u0105\1\u012c\1\u012d\14\0\2\u0158\1\0"+
    "\1\u0158\1\0\1\u0158\3\0\1\u01c0\63\0\1\u01c1\1\u0159"+
    "\1\0\1\u0159\1\0\1\u01c1\12\0\1\u01c2\1\0\1\u0115"+
    "\1\0\1\u0116\1\u01c3\15\0\1\u015e\1\0\1\u0119\5\0"+
    "\1\u0103\21\0\2\u015a\1\0\1\u015a\1\0\1\u015a\2\0"+
    "\1\374\1\0\1\375\1\u0158\3\0\1\u0126\1\u015c\1\0"+
    "\1\u0115\2\0\1\u015d\11\0\1\u0129\3\0\1\u015e\1\u0144"+
    "\10\0\1\u0104\1\u0105\1\u012c\1\u012d\14\0\1\u015a\1\u015b"+
    "\1\0\1\u015b\1\0\1\u015a\2\0\1\374\1\0\1\375"+
    "\1\u0158\3\0\1\u0126\1\u015c\1\0\1\u0115\1\0\1\u0116"+
    "\1\u015d\11\0\1\u0129\3\0\1\u015e\1\u0144\1\u0119\5\0"+
    "\1\u0103\1\0\1\u0104\1\u0105\1\u012c\1\u012d\35\0\1\u01c4"+
    "\101\0\1\u01c5\112\0\1\u01c6\62\0\1\u01c7\74\0\1\u01c8"+
    "\42\0\1\u01c9\1\u0163\1\0\1\u0163\1\0\1\u01c9\12\0"+
    "\1\u01ca\1\0\1\u0167\1\0\1\u0139\1\u01cb\15\0\1\u0169"+
    "\1\0\1\u013c\5\0\1\u0103\21\0\2\u0164\1\0\1\u0164"+
    "\1\0\1\u0164\2\0\1\374\1\0\1\375\4\0\1\u0126"+
    "\1\u0166\1\0\1\u0167\2\0\1\u0168\11\0\1\u0129\3\0"+
    "\1\u0169\1\u0144\10\0\1\u0104\1\u0105\1\u012c\1\u012d\14\0"+
    "\1\u0164\1\u0165\1\0\1\u0165\1\0\1\u0164\2\0\1\374"+
    "\1\0\1\375\4\0\1\u0126\1\u0166\1\0\1\u0167\1\0"+
    "\1\u0139\1\u0168\11\0\1\u0129\3\0\1\u0169\1\u0144\1\u013c"+
    "\5\0\1\u0103\1\0\1\u0104\1\u0105\1\u012c\1\u012d\35\0"+
    "\1\u01cc\74\0\1\u01cd\101\0\1\u01ce\112\0\1\u01cf\27\0"+
    "\6\u016a\1\375\3\u016a\1\u01d0\62\u016a\1\171\2\u016b\1\171"+
    "\1\u016b\1\171\1\u0129\66\171\6\u016c\1\u0104\3\u016c\1\u01d1"+
    "\62\u016c\6\u016d\1\u0105\3\u016d\1\u01d2\62\u016d\6\362\1\206"+
    "\5\362\1\171\60\362\6\u016f\1\u010b\52\u016f\1\u0171\13\u016f"+
    "\6\u0170\1\u010c\52\u0170\1\u01d3\13\u0170\6\u016f\1\u010b\52\u016f"+
    "\1\171\13\u016f\2\171\1\u0172\1\171\1\u0172\1\171\1\0"+
    "\16\171\1\u0173\20\171\1\u0174\34\171\1\0\20\171\1\u01d4"+
    "\53\171\1\0\14\171\1\u01d5\51\171\1\0\2\u0175\1\0"+
    "\1\u0175\1\0\1\u0175\1\0\1\u01d6\147\0\1\u01d7\65\0"+
    "\1\u01d8\32\0\1\u01d9\62\0\12\375\1\u01da\62\375\22\0"+
    "\1\u01db\64\0\1\u01dc\130\0\1\u01dd\56\0\1\u01de\71\0"+
    "\1\u01df\47\0\12\u0104\1\u01e0\62\u0104\12\u0105\1\u01e1\62\u0105"+
    "\14\0\1\u01e2\143\0\1\u01e3\65\0\1\u01e4\20\0\61\u010c"+
    "\1\u01e5\13\u010c\61\0\1\u01e6\14\0\2\u0188\1\0\1\u0188"+
    "\1\0\1\u0188\2\0\1\u0189\6\0\1\u0113\1\u018a\1\0"+
    "\1\u0115\2\0\1\u0117\15\0\1\u015e\11\0\1\u011a\1\u011b"+
    "\1\u0113\17\0\2\u0189\5\0\1\u01e7\6\0\11\u0189\1\0"+
    "\2\u0189\4\0\15\u0189\4\0\1\u0189\1\0\4\u0189\1\0"+
    "\4\u0189\22\0\1\u01e8\105\0\1\u01e9\63\0\1\u01ea\124\0"+
    "\1\u01eb\107\0\1\u01ec\37\0\1\u01ed\112\0\1\u01ee\71\0"+
    "\1\u01ef\31\0\12\u011a\1\u01f0\62\u011a\12\u011b\1\u01f1\62\u011b"+
    "\32\0\1\u01f2\44\0\1\u01e9\1\0\1\u01e9\1\0\1\u01f3"+
    "\66\0\6\u0196\1\u01f4\52\u0196\1\u01f5\13\u0196\46\0\1\u011c"+
    "\14\0\1\u0194\74\0\1\u01f6\65\0\1\u01f7\53\0\1\u01f8"+
    "\47\0\1\252\100\0\1\u01f9\104\0\1\u01fa\102\0\1\u01fb"+
    "\112\0\1\u01fc\56\0\1\u01fd\56\0\1\u01fe\74\0\1\u01ff"+
    "\114\0\1\u0200\125\0\1\u0201\65\0\1\u0202\66\0\1\u012e"+
    "\14\0\1\u01a3\12\0\2\u01a8\1\0\1\u01a8\1\0\1\u01a8"+
    "\12\0\1\u01a9\1\0\1\u0138\2\0\1\u01aa\15\0\1\u01ab"+
    "\7\0\1\u013d\42\0\1\u0203\101\0\1\u0204\112\0\1\u0205"+
    "\51\0\1\u0206\74\0\1\u0207\124\0\1\u0208\107\0\1\u0209"+
    "\37\0\1\u020a\112\0\1\u020b\71\0\1\u020c\56\0\1\u020d"+
    "\102\0\1\u020e\63\0\1\u020f\102\0\1\u0210\45\0\2\u01b7"+
    "\1\0\1\u01b7\1\0\1\u01b7\12\0\1\u01b8\1\0\1\u0149"+
    "\2\0\1\u01b9\15\0\1\u014b\52\0\1\u0211\101\0\1\u0212"+
    "\67\0\1\u0213\124\0\1\u0214\52\0\1\u0215\112\0\1\u0216"+
    "\113\0\1\u0217\74\0\1\u0218\21\0\1\u0219\63\0\2\u01c1"+
    "\1\0\1\u01c1\1\0\1\u01c1\12\0\1\u01c2\1\0\1\u0115"+
    "\2\0\1\u01c3\15\0\1\u015e\52\0\1\u021a\101\0\1\u021b"+
    "\67\0\1\u021c\102\0\1\u021d\112\0\1\u021e\61\0\1\u021f"+
    "\42\0\2\u01c9\1\0\1\u01c9\1\0\1\u01c9\12\0\1\u01ca"+
    "\1\0\1\u0167\2\0\1\u01cb\15\0\1\u0169\52\0\1\u0220"+
    "\101\0\1\u0221\67\0\1\u0222\124\0\1\u0223\52\0\1\u0224"+
    "\112\0\1\u0225\26\0\6\u016a\1\375\3\u016a\1\171\62\u016a"+
    "\6\u016c\1\u0104\3\u016c\1\171\62\u016c\6\u016d\1\u0105\3\u016d"+
    "\1\171\62\u016d\6\u0170\1\u010c\52\u0170\1\u0226\13\u0170\6\171"+
    "\1\0\56\171\1\u0227\15\171\1\0\34\171\1\u0228\31\171"+
    "\10\0\1\u0229\116\0\1\u022a\110\0\1\u0176\14\0\1\u01d7"+
    "\23\0\1\u022b\105\0\1\u022c\74\0\1\u022d\121\0\1\u022e"+
    "\47\0\1\u022f\63\0\1\u0230\74\0\1\u0231\114\0\1\u0232"+
    "\110\0\1\u0183\14\0\1\u01e3\11\0\61\u0233\1\u0234\13\u0233"+
    "\12\0\1\u0235\104\0\1\u0236\75\0\1\u0237\53\0\1\u0238"+
    "\1\0\1\u0238\5\0\1\u0238\126\0\1\u0239\55\0\1\u023a"+
    "\72\0\1\u023b\122\0\1\u023c\35\0\1\u023d\74\0\1\u023e"+
    "\62\0\1\u023f\2\0\1\u023f\1\0\1\u01f2\1\0\7\u023f"+
    "\1\u01f2\17\u023f\1\u01f2\20\u023f\1\u01f2\3\u023f\1\u01f2\11\u023f"+
    "\6\u0196\1\u01f4\52\u0196\1\u0240\21\u0196\1\u01f4\52\u0196\1\u0241"+
    "\13\u0196\32\0\1\u0242\110\0\1\u0198\14\0\1\u01f6\13\0"+
    "\1\u01f8\1\0\1\u01f8\1\0\1\252\66\0\10\u01f9\1\u0243"+
    "\64\u01f9\23\0\1\u0244\76\0\1\u0245\72\0\1\u0246\121\0"+
    "\1\u0247\24\0\1\u0248\2\0\1\u0248\1\0\1\u0200\1\0"+
    "\7\u0248\1\u0200\17\u0248\1\u0200\20\u0248\1\u0200\3\u0248\1\u0200"+
    "\11\u0248\32\0\1\u0249\110\0\1\u01a5\14\0\1\u0201\33\0"+
    "\1\u024a\102\0\1\u024b\112\0\1\u024c\50\0\1\u024d\75\0"+
    "\1\u024e\53\0\1\u024f\1\0\1\u024f\5\0\1\u0250\126\0"+
    "\1\u0251\55\0\1\u0252\72\0\1\u0253\122\0\1\u0254\46\0"+
    "\1\u0255\53\0\1\u020e\1\0\1\u020e\1\0\1\302\111\0"+
    "\1\u0256\121\0\1\u0257\46\0\1\u0258\102\0\1\u0259\67\0"+
    "\1\u025a\53\0\1\u025b\1\0\1\u025b\5\0\1\u025b\107\0"+
    "\1\u025c\72\0\1\u025d\115\0\1\u025e\74\0\1\u025f\52\0"+
    "\1\u0260\102\0\1\u0261\67\0\1\u0262\76\0\1\u0263\72\0"+
    "\1\u0264\53\0\1\u021f\1\0\1\u021f\1\0\1\352\110\0"+
    "\1\u0265\102\0\1\u0266\67\0\1\u0267\53\0\1\u0268\1\0"+
    "\1\u0268\5\0\1\u0268\107\0\1\u0269\72\0\1\u026a\51\0"+
    "\6\u026b\1\u0233\52\u026b\1\171\13\u026b\6\171\1\0\35\171"+
    "\1\u026c\36\171\1\0\42\171\1\u026d\23\171\1\u026e\2\0"+
    "\1\u026e\1\0\1\u022a\1\0\7\u026e\1\u022a\17\u026e\1\u022a"+
    "\20\u026e\1\u022a\3\u026e\1\u022a\11\u026e\24\0\1\u026f\75\0"+
    "\1\u0270\120\0\1\u0271\46\0\1\u0272\51\0\1\u0273\2\0"+
    "\1\u0273\1\0\1\u0232\1\0\7\u0273\1\u0232\17\u0273\1\u0232"+
    "\20\u0273\1\u0232\3\u0273\1\u0232\11\u0273\61\u0233\1\u0274\13\u0233"+
    "\61\0\1\u0234\36\0\1\u0275\75\0\1\u0276\50\0\6\u0238"+
    "\1\u0277\66\u0238\66\0\1\u0278\37\0\1\u0279\70\0\1\u027a"+
    "\74\0\1\u027b\47\0\6\u0196\1\u01f4\52\u0196\1\u027c\13\u0196"+
    "\6\u027d\1\u027e\52\u027d\1\u027f\13\u027d\1\u0280\2\0\1\u0280"+
    "\1\0\1\u0242\1\0\7\u0280\1\u0242\17\u0280\1\u0242\20\u0280"+
    "\1\u0242\3\u0280\1\u0242\11\u0280\10\u01f9\1\u0281\64\u01f9\24\0"+
    "\1\u0282\101\0\1\u0283\70\0\1\u0284\120\0\1\u0285\23\0"+
    "\1\u0286\2\0\1\u0286\1\0\1\u0249\1\0\7\u0286\1\u0249"+
    "\17\u0286\1\u0249\20\u0286\1\u0249\3\u0286\1\u0249\11\u0286\23\0"+
    "\1\u0287\76\0\1\u0288\72\0\1\u0289\74\0\1\u028a\75\0"+
    "\1\u028b\50\0\6\u024f\1\0\3\u024f\1\u028c\62\u024f\12\0"+
    "\1\u028d\150\0\1\u028e\37\0\1\u028f\70\0\1\u0290\74\0"+
    "\1\u0291\72\0\1\u0292\75\0\1\u0293\121\0\1\u0294\46\0"+
    "\1\u0295\76\0\1\u0296\73\0\1\u0297\101\0\1\u0298\70\0"+
    "\1\u0299\135\0\1\u029a\74\0\1\u029b\31\0\1\u029c\76\0"+
    "\1\u029d\73\0\1\u029e\101\0\1\u029f\70\0\1\u02a0\72\0"+
    "\1\u02a1\76\0\1\u02a2\73\0\1\u02a3\101\0\1\u02a4\70\0"+
    "\1\u02a5\47\0\6\u026b\1\u0233\52\u026b\1\u02a6\13\u026b\6\171"+
    "\1\0\57\171\1\u02a7\14\171\1\0\16\171\1\u02a8\47\171"+
    "\22\0\1\u02a9\114\0\1\u02aa\77\0\1\u02ab\72\0\1\u02ac"+
    "\31\0\61\u0233\1\u02ad\13\u0233\24\0\1\u02ae\72\0\1\u02af"+
    "\74\0\1\u02b0\54\0\1\u0238\1\0\1\u0238\5\0\1\u0238"+
    "\12\0\1\u02b1\111\0\1\u02b2\116\0\1\u02b3\10\0\6\u027d"+
    "\1\u027e\52\u027d\1\u02b4\21\u027d\1\u027e\52\u027d\1\u02b5\21\u027d"+
    "\1\u027e\52\u027d\1\u02b6\13\u027d\6\u02b7\1\u02b8\52\u02b7\1\u027f"+
    "\13\u02b7\1\0\2\u02b9\1\0\1\u02b9\1\0\1\u02b9\1\0"+
    "\1\u02b9\27\0\1\u02ba\56\0\1\u02bb\77\0\1\u02bc\111\0"+
    "\1\u02bd\77\0\1\u02be\53\0\1\u02bf\101\0\1\u0208\70\0"+
    "\1\u02c0\73\0\1\u02c1\72\0\1\u02c2\52\0\6\u024f\1\0"+
    "\3\u024f\1\u02c3\62\u024f\22\0\1\u02c4\54\0\1\u024f\1\0"+
    "\1\u024f\5\0\1\u0250\12\0\1\u02bc\111\0\1\u02c5\116\0"+
    "\1\u02c6\53\0\1\u02c7\53\0\1\u02c8\117\0\1\u02c9\53\0"+
    "\1\u02ca\101\0\1\u0214\65\0\1\u02cb\54\0\1\u025b\1\0"+
    "\1\u025b\5\0\1\u025b\12\0\1\u02bc\111\0\1\u02cc\54\0"+
    "\1\u02cd\74\0\1\u02ce\76\0\1\u02cf\101\0\1\u01eb\65\0"+
    "\1\u02d0\54\0\1\u0238\1\0\1\u0238\5\0\1\u0238\12\0"+
    "\1\u02bc\111\0\1\u02d1\56\0\1\u02d2\101\0\1\u0223\65\0"+
    "\1\u02d3\54\0\1\u0268\1\0\1\u0268\5\0\1\u0268\12\0"+
    "\1\u02bc\111\0\1\u02d4\32\0\6\u026b\1\u0233\52\u026b\1\u0226"+
    "\13\u026b\6\171\1\0\13\171\1\u02d5\60\171\1\0\55\171"+
    "\1\u02d6\10\171\23\0\1\u02d7\120\0\1\u02d8\73\0\1\u02d9"+
    "\103\0\1\u02da\41\0\1\u02db\75\0\1\u02dc\113\0\1\u02dd"+
    "\62\0\1\u02de\113\0\1\u02df\107\0\1\u02e0\12\0\6\u02b7"+
    "\1\u02e1\52\u02b7\1\u027f\13\u02b7\6\u027d\1\u027e\52\u027d\1\u02e2"+
    "\21\u027d\1\u027e\52\u027d\1\u02e3\13\u027d\6\u02b7\1\u02b8\74\u02b7"+
    "\1\u02b8\52\u02b7\1\u02e4\13\u02b7\1\0\2\u02b9\1\0\1\u02b9"+
    "\1\0\1\u02b9\31\0\1\u02ba\35\0\2\u02ba\1\0\1\u02ba"+
    "\1\0\1\u02ba\3\0\1\u02e5\105\0\1\u02e6\101\0\1\u02e7"+
    "\113\0\1\u02e8\73\0\1\u02e9\50\0\1\u02ea\114\0\1\u02eb"+
    "\54\0\1\u02ec\75\0\1\u02ed\113\0\1\u02ee\101\0\1\u02ef"+
    "\107\0\1\u02f0\67\0\1\u02f1\42\0\1\u02f2\117\0\1\u02f3"+
    "\50\0\1\u02f4\75\0\1\u02f5\120\0\1\u02f6\67\0\1\u02f7"+
    "\74\0\1\u02f8\54\0\1\u02f9\75\0\1\u02fa\120\0\1\u02fb"+
    "\47\0\1\u02fc\75\0\1\u02fd\120\0\1\u02fe\25\0\6\171"+
    "\1\0\33\171\1\u02ff\40\171\1\0\53\171\1\u0300\12\171"+
    "\25\0\1\u0301\74\0\1\u0302\115\0\1\u0303\70\0\1\u0304"+
    "\55\0\1\u0305\76\0\1\u0306\113\0\1\u0307\32\0\1\u0113"+
    "\1\0\1\u0113\115\0\1\u0308\74\0\1\u0309\130\0\1\u030a"+
    "\13\0\6\u02b7\1\u02b8\52\u02b7\1\u030b\13\u02b7\12\0\1\u030c"+
    "\107\0\1\u030d\51\0\1\u030e\1\0\1\u030e\115\0\1\u030f"+
    "\115\0\1\u0310\51\0\1\u0311\120\0\1\u0312\50\0\1\u0313"+
    "\76\0\1\u0314\113\0\1\u0315\55\0\1\u0316\74\0\1\u0317"+
    "\111\0\1\u0318\57\0\1\u0319\115\0\1\u031a\51\0\1\u031b"+
    "\76\0\1\u031c\74\0\1\u031d\113\0\1\u031e\74\0\1\u031f"+
    "\53\0\1\u0320\76\0\1\u0321\74\0\1\u0322\72\0\1\u0323"+
    "\76\0\1\u0324\74\0\1\u0325\47\0\6\171\1\0\35\171"+
    "\1\u0326\36\171\1\0\16\171\1\u0327\47\171\41\0\1\u0328"+
    "\54\0\1\u0301\55\0\1\u0329\1\0\1\u0329\116\0\1\u032a"+
    "\73\0\1\u032b\51\0\1\u0113\1\0\1\u0113\34\0\1\u0328"+
    "\4\0\1\u01eb\73\0\1\u032c\50\0\1\u032d\100\0\1\u032e"+
    "\130\0\1\u032f\13\0\6\u02b7\1\u02b8\52\u02b7\1\u0330\13\u02b7"+
    "\2\0\1\u0331\1\0\1\u0331\34\0\1\u0332\33\0\12\u0333"+
    "\1\0\62\u0333\21\0\1\u0334\55\0\1\u0335\1\0\1\u0335"+
    "\115\0\1\u0336\74\0\1\u0337\74\0\1\u0338\51\0\1\u0331"+
    "\1\0\1\u0331\34\0\1\u0332\4\0\1\u0208\73\0\1\u0339"+
    "\50\0\1\u033a\100\0\1\u033b\75\0\1\u033c\50\0\1\u0331"+
    "\1\0\1\u0331\72\0\1\u033d\1\0\1\u033d\115\0\1\u033e"+
    "\51\0\1\u0331\1\0\1\u0331\41\0\1\u0214\47\0\1\u033f"+
    "\120\0\1\u0340\74\0\1\u0341\54\0\1\u0342\51\0\1\u0331"+
    "\1\0\1\u0331\41\0\1\u01eb\47\0\1\u0343\100\0\1\u0344"+
    "\51\0\1\u0331\1\0\1\u0331\41\0\1\u0223\47\0\1\u0345"+
    "\53\0\6\171\1\0\36\171\1\u0346\35\171\1\0\16\171"+
    "\1\u0347\47\171\27\0\1\u0348\74\0\1\u0349\47\0\1\u0113"+
    "\1\0\1\u0113\41\0\1\u01eb\51\0\1\u034a\112\0\1\u0328"+
    "\11\0\1\u034b\44\0\1\u034c\132\0\1\u034d\13\0\6\u02b7"+
    "\1\u02e1\66\u02b7\12\u034e\1\0\62\u034e\27\0\1\u034f\45\0"+
    "\12\u0333\1\u0350\62\u0333\41\0\1\u0351\35\0\1\u0335\1\0"+
    "\1\u0335\10\0\1\u0352\15\0\1\u0352\34\0\1\u0352\52\0"+
    "\1\u0208\47\0\1\u0353\55\0\1\u0331\1\0\1\u0331\41\0"+
    "\1\u0208\51\0\1\u0354\112\0\1\u0351\11\0\1\u0355\44\0"+
    "\1\u0356\100\0\1\u0357\47\0\1\u033d\1\0\1\u033d\10\0"+
    "\1\u0358\15\0\1\u0358\34\0\1\u0358\52\0\1\u0214\101\0"+
    "\1\u0359\44\0\1\u035a\74\0\1\u035b\117\0\1\u01eb\101\0"+
    "\1\u034b\67\0\1\u0223\101\0\1\u035c\21\0\6\171\1\0"+
    "\14\171\1\u035d\57\171\1\0\14\171\1\u035e\51\171\23\0"+
    "\1\u035f\74\0\1\u0360\117\0\1\u0361\54\0\1\u0362\46\0"+
    "\12\u034c\1\u0363\62\u034c\6\0\1\u0364\66\0\12\u034e\1\u0365"+
    "\62\u034e\23\0\1\u0366\63\0\1\u0367\111\0\1\u0368\73\0"+
    "\1\u0369\42\0\1\u036a\1\0\1\u036b\54\0\1\u0355\67\0"+
    "\1\u036c\54\0\1\u036d\46\0\12\u0356\1\u036e\62\u0356\23\0"+
    "\1\u0208\77\0\1\u0369\42\0\1\u036a\1\0\1\u036f\27\0"+
    "\1\u0370\135\0\1\u0371\53\0\1\u036c\20\0\1\u0371\33\0"+
    "\1\u0372\46\0\6\171\1\0\37\171\1\u0373\26\171\6\u035e"+
    "\1\u0356\3\u035e\1\u0374\62\u035e\42\0\1\u0375\34\0\1\u0376"+
    "\1\0\1\u0376\5\0\1\u0377\62\0\12\u0361\1\u0378\62\u0361"+
    "\46\0\1\u0379\26\0\12\u034c\1\u037a\62\u034c\12\0\1\u037b"+
    "\124\0\1\u037c\55\0\1\u037d\100\0\1\u037e\116\0\1\u037f"+
    "\75\0\1\u0380\22\0\12\u036c\1\u0381\62\u036c\46\0\1\u0357"+
    "\26\0\12\u0356\1\u0382\62\u0356\52\0\1\u0383\70\0\1\u0384"+
    "\53\0\1\u0385\115\0\1\u0386\26\0\6\u0373\1\u036c\3\u0373"+
    "\1\u0387\62\u0373\6\u035e\1\u0356\3\u035e\1\u0388\62\u035e\43\0"+
    "\1\u0389\33\0\1\u038a\1\u038b\1\u0376\5\0\1\u0377\6\0"+
    "\11\u038b\1\0\2\u038b\4\0\15\u038b\4\0\1\u038b\1\0"+
    "\4\u038b\1\0\4\u038b\12\0\1\u038c\62\0\12\u0361\1\u038d"+
    "\62\u0361\23\0\1\u01eb\53\0\1\u038e\1\0\1\u038e\1\0"+
    "\1\u038f\3\0\1\u038e\125\0\1\u0390\73\0\1\u0391\103\0"+
    "\1\u0392\45\0\1\u0393\103\0\1\u0394\43\0\12\u036c\1\u0395"+
    "\62\u036c\2\0\1\u0396\1\0\1\u0396\1\0\1\u0397\3\0"+
    "\1\u0396\113\0\1\u0398\66\0\1\u0214\117\0\1\u0399\51\0"+
    "\1\u0223\51\0\6\u0373\1\u036c\3\u0373\1\u039a\62\u0373\2\171"+
    "\1\u039b\1\171\1\u039b\1\171\1\u0397\3\171\1\u039b\62\171"+
    "\1\0\2\376\1\0\1\376\1\0\1\376\70\0\1\u038a"+
    "\1\0\1\u038a\5\0\1\u0377\65\0\2\u038b\5\0\1\u039c"+
    "\6\0\11\u038b\1\0\2\u038b\4\0\15\u038b\4\0\1\u038b"+
    "\1\0\4\u038b\1\0\4\u038b\2\0\1\u038c\1\0\1\u038c"+
    "\1\0\1\u039d\70\0\1\u039e\1\0\1\u039e\1\0\1\u039f"+
    "\3\0\1\u039e\64\0\1\u038e\1\0\1\u038e\1\0\1\u038f"+
    "\66\0\12\u0390\1\u03a0\62\u0390\43\0\1\u03a1\57\0\1\u03a2"+
    "\120\0\1\u03a3\106\0\1\u03a4\12\0\1\u03a5\1\0\1\u03a5"+
    "\1\0\1\u03a6\3\0\1\u03a5\64\0\1\u0396\1\0\1\u0396"+
    "\1\0\1\u0397\152\0\1\u03a4\7\0\1\u036a\25\0\1\u03a7"+
    "\47\0\2\171\1\u03a8\1\171\1\u03a8\1\171\1\u03a6\3\171"+
    "\1\u03a8\64\171\1\u039b\1\171\1\u039b\1\171\1\u0397\66\171"+
    "\12\0\1\u03a9\142\0\1\u03aa\16\0\1\u039e\1\0\1\u039e"+
    "\1\0\1\u039f\66\0\12\u0390\1\u03ab\62\u0390\12\u03a1\1\u03ac"+
    "\62\u03a1\27\0\1\u03ad\137\0\1\u03ae\56\0\1\u03af\22\0"+
    "\1\u03a5\1\0\1\u03a5\1\0\1\u03a6\111\0\1\u03b0\51\0"+
    "\2\171\1\u03a8\1\171\1\u03a8\1\171\1\u03a6\66\171\2\0"+
    "\1\u03a9\1\0\1\u03a9\1\0\1\u03b1\146\0\1\u03b2\26\0"+
    "\1\u03b3\62\0\12\u03a1\1\u03b4\62\u03a1\25\0\1\u03ae\50\0"+
    "\2\u03b5\1\0\1\u03b5\1\0\1\u03b5\133\0\1\u03b6\27\0"+
    "\12\u03b0\1\u03b7\62\u03b0\60\0\1\u03b8\74\0\1\u03b9\26\0"+
    "\1\u03ba\65\0\2\u03bb\14\0\11\u03bb\1\0\2\u03bb\4\0"+
    "\15\u03bb\4\0\1\u03bb\1\0\4\u03bb\1\0\4\u03bb\27\0"+
    "\1\u03ae\45\0\12\u03b0\1\u03bc\62\u03b0\60\0\1\u03bd\22\0"+
    "\1\u03be\71\0\2\u03bb\5\0\1\u03bf\6\0\11\u03bb\1\0"+
    "\2\u03bb\4\0\15\u03bb\4\0\1\u03bb\1\0\4\u03bb\1\0"+
    "\4\u03bb\12\0\1\u03c0\142\0\1\u03c1\14\0\6\u03be\1\u03c2"+
    "\66\u03be\12\0\1\u03c3\70\0\1\u03c4\66\0\6\u03be\1\u03c2"+
    "\52\u03be\1\u03c5\13\u03be\6\u03c4\1\u03c6\66\u03c4\6\u03be\1\u03c2"+
    "\52\u03be\1\u03c7\13\u03be\6\u03c4\1\u03c6\52\u03c4\1\u03c8\13\u03c4"+
    "\6\u03be\1\u03c2\52\u03be\1\u03c9\13\u03be\6\u03c4\1\u03c6\52\u03c4"+
    "\1\u03ca\13\u03c4\6\u03be\1\u03cb\66\u03be\6\u03c4\1\u03c6\52\u03c4"+
    "\1\u03cc\13\u03c4\61\0\1\u03cd\13\0\6\u03c4\1\u03ce\66\u03c4"+
    "\61\0\1\u03cf\74\0\1\u03d0\74\0\1\u03d1\74\0\1\u03d2"+
    "\21\0\1\u03d3\147\0\1\u03d4\21\0\1\u03d5\66\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[51362];
    int offset = 0;
    offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackTrans(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /* error codes */
  private static final int ZZ_UNKNOWN_ERROR = 0;
  private static final int ZZ_NO_MATCH = 1;
  private static final int ZZ_PUSHBACK_2BIG = 2;

  /* error messages for the codes above */
  private static final String ZZ_ERROR_MSG[] = {
    "Unkown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

  /**
   * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();

  private static final String ZZ_ATTRIBUTE_PACKED_0 =
    "\20\0\2\1\2\0\1\11\2\1\1\11\22\1\2\11"+
    "\5\1\1\11\26\1\2\11\10\1\1\11\25\1\1\11"+
    "\16\1\1\11\7\1\4\0\1\11\1\1\2\0\2\11"+
    "\1\1\6\11\1\0\2\1\10\0\3\11\1\1\2\11"+
    "\1\0\1\1\1\11\5\0\1\11\2\0\1\11\1\1"+
    "\1\11\1\0\1\11\1\1\4\11\4\0\1\1\1\11"+
    "\2\0\1\1\1\11\1\1\2\11\2\1\2\0\1\1"+
    "\2\11\3\1\2\0\1\1\1\11\1\1\1\11\1\0"+
    "\2\11\1\0\2\11\2\0\3\1\3\0\3\1\2\0"+
    "\3\1\2\11\1\1\1\0\1\11\1\0\6\1\5\0"+
    "\1\11\2\0\1\11\1\0\1\1\6\0\1\1\6\0"+
    "\1\11\4\0\1\11\11\0\1\1\21\0\1\1\37\0"+
    "\1\11\17\0\1\1\12\0\13\1\14\0\1\1\1\11"+
    "\1\0\1\11\2\0\1\1\15\0\1\1\16\0\1\11"+
    "\42\0\1\1\10\0\6\1\3\0\1\11\1\1\1\0"+
    "\1\11\3\0\2\1\1\11\2\0\1\1\1\11\11\0"+
    "\2\1\1\0\1\11\12\0\2\11\31\0\1\11\14\0"+
    "\3\1\1\11\1\0\1\11\4\0\2\11\2\0\1\1"+
    "\1\11\7\0\2\11\1\1\1\0\1\1\6\0\1\1"+
    "\22\0\1\11\14\0\1\11\2\0\4\1\4\0\1\1"+
    "\3\0\1\11\4\0\1\1\2\0\2\1\5\0\1\1"+
    "\6\0\1\11\30\0\3\1\13\0\1\1\16\0\1\1"+
    "\21\0\2\1\12\0\1\1\35\0\2\1\13\0\1\11"+
    "\31\0\2\1\1\0\1\11\34\0\2\1\25\0\2\1"+
    "\5\0\1\11\2\0\1\11\13\0\2\1\6\0\1\11"+
    "\13\0\2\1\6\0\1\11\7\0\1\11\2\0\2\1"+
    "\3\0\1\11\6\0\1\11\1\0\1\1\2\0\1\1"+
    "\7\0\1\11\1\1\5\0\1\11\1\0\1\1\3\0"+
    "\1\11\2\0\1\11\7\0\1\1\2\0\1\1\4\0"+
    "\1\11\1\0\1\11";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[981];
    int offset = 0;
    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }

  /** the input device */
  private java.io.Reader zzReader;

  /** the current state of the DFA */
  private int zzState;

  /** the current lexical state */
  private int zzLexicalState = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private char zzBuffer[] = new char[ZZ_BUFFERSIZE];

  /** the textposition at the last accepting state */
  private int zzMarkedPos;

  /** the current text position in the buffer */
  private int zzCurrentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int zzStartRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int zzEndRead;

  /** number of newlines encountered up to the start of the matched text */
  private int yyline;

  /** the number of characters up to the start of the matched text */
  private int yychar;

  /**
   * the number of characters from the last newline up to the start of the
   * matched text
   */
  private int yycolumn;

  /**
   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
   */
  private boolean zzAtBOL = true;

  /** zzAtEOF == true <=> the scanner is at the EOF */
  private boolean zzAtEOF;

  /** denotes if the user-EOF-code has already been executed */
  private boolean zzEOFDone;

  /** For the backwards DFA of general lookahead statements */
  private boolean [] zzFin = new boolean [ZZ_BUFFERSIZE+1];

  /* user code: */
    private static final Pattern BlockPrePattern =
            Pattern.compile("(?s)\\Q{{{\\E\n(.*?)\n\\Q}}}");
    private static final Pattern InlinePrePattern =
            Pattern.compile("(?s)\\Q{{{\\E(.*?)\\Q}}}");
    private static final Pattern ListLevelPattern =
            Pattern.compile("\\s*([#*]+)(=?)");
    private static final Pattern ParamPluginPattern =
            Pattern.compile("(?s)<<\\s*(\\w+)\\s+(.*\\S)\\s*>>");
    private static final Pattern OptParamPluginPattern =
            Pattern.compile("(?s)<<\\s*(\\w+)(?:\\s+(.*\\S))?\\s*>>");
    private static final Pattern JcxPattern =
            Pattern.compile("(?s)<<\\s*([\\[{])\\s*(.*\\S)?\\s*>>");
    private static final Pattern IndexSandwichPattern = Pattern.compile(
            "(?s)(<<\\s*\\(\\s*>>\\s*)(.*?\\S)\\s*<<\\s*\\)\\s*>>");
    private static final Pattern PrettyPattern =
            Pattern.compile(
                    "(?s)(?:[ \t]*)?<<[ \t]*"
                    + "prettyPrint(?:[ \t]+([-\\w \t]*))?>>[ \t]*"
                    + "\\Q\n{{{\\E\n(.*?)\n\\Q}}}");

    private boolean needIndexCloser;
    private Token newToken(short id) {
        return new Token(id, null, yychar, yyline, yycolumn);
    }
    private Token newToken(short id, String s) {
        return new Token(id, s, yychar, yyline, yycolumn);
    }
    private Token newToken(short id, String s, int intParam) {
        return new Token(id, s, yychar, yyline, yycolumn, intParam);
    }

    private int urlDeferringState, listLevel;
    private List<Integer> stateStack = new ArrayList<Integer>();

    public List<Integer> getStateStack() { return stateStack; }

    private void pushState() {
        stateStack.add(0, yystate());
    }
    private int popState() {
        return (stateStack.size() < 1) ? YYINITIAL : stateStack.remove(0);
    }

    /**
     * Static factory method.
     *
     * @param doClean If true will silently remove illegal input characters.
     *                If false, will throw if encounter any illegal input char.
     */
    public static CreoleScanner newCreoleScanner(File inFile,
            boolean doClean, Expander expander) throws IOException {
        return newCreoleScanner(
                IOUtil.toStringBuilder(inFile), doClean, expander);
    }

    /**
     * Static factory method.
     * This method will always silently filter out \r's.
     * The doClean parameter says what to do about control characters other
     * than \r (silently filtered) and \n and tabs (allowed and retained).
     *
     * @param inSb StringBuilder containing any characters that we will filter
     *           and/or validate.
     * @param doClean If true will silently remove illegal input characters.
     *                If false, will throw if encounter any illegal input char.
     * @throws IllegalArgumentException if doClean is set to false and
     *         control character(s) other than \n, \r, \t are found in the
     *         StringBuilder.
     */
    public static CreoleScanner newCreoleScanner(StringBuilder inSb,
            boolean doClean, Expander expander) throws IOException {
        List<Integer> badIndexes = new ArrayList<Integer>();
        char c;
        StringBuilder sb = (expander == null) ? inSb : expander.expand(inSb);
        for (int i = sb.length() - 1; i >= 0; i--) {
            c = sb.charAt(i);
            switch (c) {
              case '\r':
                sb.deleteCharAt(i);
              case '\n':
              case '\t':
                continue;
            }
            if (!Character.isISOControl(c)) continue;
            if (doClean) sb.deleteCharAt(i);
            else badIndexes.add(badIndexes.size(), Integer.valueOf(i));
        }
        if (badIndexes.size() > 0)
            throw new IllegalArgumentException(
                    "Illegal input char(s) at following positions: "
                    + badIndexes);
        //if (sb.length() > 0 && sb.charAt(sb.length()-1) != '\n')
            //sb.append('\n');
        return new CreoleScanner(new CharSequenceReader(sb));
    }

    private Matcher matcher(Pattern p) {
        return matcher(p, false);
    }

    private Matcher matcher(Pattern p, boolean doTrim) {
        Matcher m = p.matcher(doTrim ? yytext().trim() : yytext());
        if (!m.matches())
            throw new CreoleParseException(String.format(
                "Creole directive markup text doesn't match expected pattern: "
                + "\"%s\"", yytext()), yychar, yyline, yycolumn);
        return m;
    }


  /**
   * Creates a new scanner
   * There is also a java.io.InputStream version of this constructor.
   *
   * @param   in  the java.io.Reader to read input from.
   */
  public CreoleScanner(java.io.Reader in) {
    this.zzReader = in;
  }

  /**
   * Creates a new scanner.
   * There is also java.io.Reader version of this constructor.
   *
   * @param   in  the java.io.Inputstream to read input from.
   */
  public CreoleScanner(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }

  /**
   * Unpacks the compressed character translation table.
   *
   * @param packed   the packed character translation table
   * @return         the unpacked character translation table
   */
  private static char [] zzUnpackCMap(String packed) {
    char [] map = new char[0x10000];
    int i = 0/* index in packed string  */
    int j = 0/* index in unpacked array */
    while (i < 160) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }


  /**
   * Refills the input buffer.
   *
   * @return      <code>false</code>, iff there was new input.
   *
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  private boolean zzRefill() throws java.io.IOException {

    /* first: make room (if you can) */
    if (zzStartRead > 0) {
      System.arraycopy(zzBuffer, zzStartRead,
                       zzBuffer, 0,
                       zzEndRead-zzStartRead);

      /* translate stored positions */
      zzEndRead-= zzStartRead;
      zzCurrentPos-= zzStartRead;
      zzMarkedPos-= zzStartRead;
      zzStartRead = 0;
    }

    /* is the buffer big enough? */
    if (zzCurrentPos >= zzBuffer.length) {
      /* if not: blow it up */
      char newBuffer[] = new char[zzCurrentPos*2];
      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
      zzBuffer = newBuffer;
    }

    /* finally: fill the buffer with new input */
    int numRead = zzReader.read(zzBuffer, zzEndRead,
                                            zzBuffer.length-zzEndRead);

    if (numRead > 0) {
      zzEndRead+= numRead;
      return false;
    }
    // unlikely but not impossible: read 0 characters, but not at end of stream   
    if (numRead == 0) {
      int c = zzReader.read();
      if (c == -1) {
        return true;
      } else {
        zzBuffer[zzEndRead++] = (char) c;
        return false;
      }    
    }

  // numRead < 0
    return true;
  }

   
  /**
   * Closes the input stream.
   */
  public final void yyclose() throws java.io.IOException {
    zzAtEOF = true;            /* indicate end of file */
    zzEndRead = zzStartRead;  /* invalidate buffer    */

    if (zzReader != null)
      zzReader.close();
  }


  /**
   * Resets the scanner to read from a new input stream.
   * Does not close the old reader.
   *
   * All internal variables are reset, the old input stream
   * <b>cannot</b> be reused (internal buffer is discarded and lost).
   * Lexical state is set to <tt>ZZ_INITIAL</tt>.
   *
   * @param reader   the new input stream
   */
  public final void yyreset(java.io.Reader reader) {
    zzReader = reader;
    zzAtBOL  = true;
    zzAtEOF  = false;
    zzEOFDone = false;
    zzEndRead = zzStartRead = 0;
    zzCurrentPos = zzMarkedPos = 0;
    yyline = yychar = yycolumn = 0;
    zzLexicalState = YYINITIAL;
  }


  /**
   * Returns the current lexical state.
   */
  public final int yystate() {
    return zzLexicalState;
  }


  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  public final void yybegin(int newState) {
    zzLexicalState = newState;
  }


  /**
   * Returns the text matched by the current regular expression.
   */
  public final String yytext() {
    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
  }


  /**
   * Returns the character at position <tt>pos</tt> from the
   * matched text.
   *
   * It is equivalent to yytext().charAt(pos), but faster
   *
   * @param pos the position of the character to fetch.
   *            A value from 0 to yylength()-1.
   *
   * @return the character at position pos
   */
  public final char yycharat(int pos) {
    return zzBuffer[zzStartRead+pos];
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return zzMarkedPos-zzStartRead;
  }


  /**
   * Reports an error that occured while scanning.
   *
   * In a wellformed scanner (no or only correct usage of
   * yypushback(int) and a match-all fallback rule) this method
   * will only be called with things that "Can't Possibly Happen".
   * If this method is called, something is seriously wrong
   * (e.g. a JFlex bug producing a faulty scanner etc.).
   *
   * Usual syntax/scanner level error handling should be done
   * in error fallback rules.
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void zzScanError(int errorCode) {
    String message;
    try {
      message = ZZ_ERROR_MSG[errorCode];
    }
    catch (ArrayIndexOutOfBoundsException e) {
      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
    }

    throw new Error(message);
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
  public void yypushback(int number)  {
    if ( number > yylength() )
      zzScanError(ZZ_PUSHBACK_2BIG);

    zzMarkedPos -= number;
  }


  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void zzDoEOF() throws java.io.IOException {
    if (!zzEOFDone) {
      zzEOFDone = true;
      yyclose();
    }
  }


  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  public Token nextToken() throws java.io.IOException, CreoleParseException {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    char [] zzBufferL = zzBuffer;
    char [] zzCMapL = ZZ_CMAP;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      yychar+= zzMarkedPosL-zzStartRead;

      boolean zzR = false;
      for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;
                                                             zzCurrentPosL++) {
        switch (zzBufferL[zzCurrentPosL]) {
        case '\u000B':
        case '\u000C':
        case '\u0085':
        case '\u2028':
        case '\u2029':
          yyline++;
          yycolumn = 0;
          zzR = false;
          break;
        case '\r':
          yyline++;
          yycolumn = 0;
          zzR = true;
          break;
        case '\n':
          if (zzR)
            zzR = false;
          else {
            yyline++;
            yycolumn = 0;
          }
          break;
        default:
          zzR = false;
          yycolumn++;
        }
      }

      if (zzR) {
        // peek one character ahead if it is \n (if we have counted one line too much)
        boolean zzPeek;
        if (zzMarkedPosL < zzEndReadL)
          zzPeek = zzBufferL[zzMarkedPosL] == '\n';
        else if (zzAtEOF)
          zzPeek = false;
        else {
          boolean eof = zzRefill();
          zzEndReadL = zzEndRead;
          zzMarkedPosL = zzMarkedPos;
          zzBufferL = zzBuffer;
          if (eof)
            zzPeek = false;
          else
            zzPeek = zzBufferL[zzMarkedPosL] == '\n';
        }
        if (zzPeek) yyline--;
      }
      if (zzMarkedPosL > zzStartRead) {
        switch (zzBufferL[zzMarkedPosL-1]) {
        case '\n':
        case '\u000B':
        case '\u000C':
        case '\u0085':
        case '\u2028':
        case '\u2029':
          zzAtBOL = true;
          break;
        case '\r':
          if (zzMarkedPosL < zzEndReadL)
            zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
          else if (zzAtEOF)
            zzAtBOL = false;
          else {
            boolean eof = zzRefill();
            zzMarkedPosL = zzMarkedPos;
            zzEndReadL = zzEndRead;
            zzBufferL = zzBuffer;
            if (eof)
              zzAtBOL = false;
            else
              zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
          }
          break;
        default:
          zzAtBOL = false;
        }
      }
      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
 
      if (zzAtBOL)
        zzState = ZZ_LEXSTATE[zzLexicalState+1];
      else
        zzState = ZZ_LEXSTATE[zzLexicalState];


      zzForAction: {
        while (true) {
   
          if (zzCurrentPosL < zzEndReadL)
            zzInput = zzBufferL[zzCurrentPosL++];
          else if (zzAtEOF) {
            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;

          int zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
        case 9:
          { yybegin(popState());
    yypushback(yylength());
    return newToken(Terminals.END_PARA, "\n");
          }
        case 104: break;
        case 94:
          { return newToken(Terminals.ROOTLVL_STYLESHEET,
            matcher(ParamPluginPattern, true).group(2));
          }
        case 105: break;
        case 80:
          { if (yystate() == YYINITIAL) {
        pushState();
        yybegin(PSTATE);
    }
    return newToken(Terminals.NESTED_PRE, matcher(InlinePrePattern).group(1));
          }
        case 106: break;
        case 68:
          { // Seems to be a JFlex bug here.  "{{...}}}" captures the whole thing
    // even though it should end after the first "}}.
    if (yystate() == YYINITIAL) {
        pushState();
        yybegin(PSTATE);
    }
    // N.b. we handle images inside of [[links]] in the awkwardly redundant
    // way of parsing that out inside the parser instead of the scanner.
    // We delimit url from alttext with 0 char.
    StringBuilder sb = new StringBuilder(yytext());
    return newToken(Terminals.IMAGE,
            sb.substring(2, yylength()-2), sb.indexOf("|") - 2);
          }
        case 107: break;
        case 36:
          { pushState();
    yybegin(LISTATE);
    return newToken(Terminals.LI, "#", -1);
          }
        case 108: break;
        case 61:
          { return newToken(Terminals.EMDASH);
          }
        case 109: break;
        case 25:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.EM_TOGGLE);
          }
        case 110: break;
        case 20:
          { yypushback(yylength());
    yybegin(LISTATE);
    return newToken(Terminals.FINAL_DT);
          }
        case 111: break;
        case 57:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { yybegin(popState());
    return newToken(Terminals.FINAL_DT);
          }
        case 112: break;
        case 6:
          { yypushback(yylength());
    pushState();
    yybegin(TABLESTATE);
          }
        case 113: break;
        case 67:
          { return newToken(Terminals.TEXT, yytext().substring(1));
          }
        case 114: break;
        case 27:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.UNDER_TOGGLE);
          }
        case 115: break;
        case 96:
          { return newToken(Terminals.ROOTLVL_ENUMFORMATS,
            matcher(ParamPluginPattern, true).group(2));
          }
        case 116: break;
        case 90:
          { Matcher m = matcher(IndexSandwichPattern);
    if (m.groupCount() != 2)
        throw new RuntimeException(
            "Index Sandwich Pattern captured " + m.groupCount() + " groups");
    if (needIndexCloser)
        throw new CreoleParseException(
                "Tangled index entry marker (...) pairing",
                yychar, yyline, yycolumn);
    needIndexCloser = true;
    yypushback(yylength() - m.group(1).length());
    return newToken(Terminals.INDEXED, m.group(2));
          }
        case 117: break;
        case 79:
          { yybegin(popState());
    return newToken(Terminals.END_JCXBLOCK);
          }
        case 118: break;
        case 18:
          { // No need to pop state.  We always come from and return to YYINITIAL.
    yybegin(YYINITIAL);
    return newToken(Terminals.END_H);
          }
        case 119: break;
        case 56:
          { return newToken(Terminals.TEXT, "|");
          }
        case 120: break;
        case 38:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { yybegin(popState());
    return newToken(Terminals.END_PARA);
          }
        case 121: break;
        case 10:
          { yypushback(yylength());
    yybegin(LISTATE);
    return newToken(Terminals.END_PARA);
          }
        case 122: break;
        case 91:
          { // Undesirable situation here.
    // We don't know whether the Styler directive at root level is intended for
    // a para, list, table, or jcxBlock.
    // Until figure out how to determine, assume para, which may cause
    // unnecessary switching back and forth to paras.
    // Probably not worth fixing, since the page author can always avoid this
    // situation by not using <<addClass +jcxBlock...>> at the root level.
    // I.e. if the author wants to style a root-level jcxBlock, then use a
    // <<addClass =jcxBlock...>> instead.
    pushState();
    yypushback(yylength());
    yybegin(PSTATE);
          }
        case 123: break;
        case 54:
          { return newToken(Terminals.CELL, null, 1);
          }
        case 124: break;
        case 95:
          { return newToken(Terminals.NESTED_STYLESHEET,
            matcher(ParamPluginPattern, true).group(2));
          }
        case 125: break;
        case 59:
          { throw new CreoleParseException("'<<<' or '>>>' are reserved tokens",
            yychar, yyline, yycolumn);
          }
        case 126: break;
        case 41:
          { return newToken(Terminals.EM_TOGGLE);
          }
        case 127: break;
        case 4:
          { // No need to push or pop for HEADSTATE.  Will revert to YYINITIAL.
    // If you wnat a HEADING from inside a jcxBlock, exit the jcxBlock first.
    yypushback(yylength());
    yybegin(HEADSTATE);
          }
        case 128: break;
        case 72:
          { int startIndex = yytext().indexOf('~');
    return newToken(Terminals.NESTED_RAWHTML,
            yytext().substring(startIndex+1, yylength() - 2));
          }
        case 129: break;
        case 16:
          { yybegin(popState()); return newToken(Terminals.FINAL_ROW);
          }
        case 130: break;
        case 2:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.TEXT, yytext());
          }
        case 131: break;
        case 62:
          // lookahead expression with fixed lookahead length
          yypushback(2);
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.TEXT, yytext());
          }
        case 132: break;
        case 88:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { // YYINITIAL handled already
    urlDeferringState = yystate();
    yybegin(ESCURL);
    return newToken(Terminals.TEXT, yytext());
          }
        case 133: break;
        case 37:
          { if (yystate() == YYINITIAL) yybegin(PSTATE);
    int len = yylength();
    return newToken(Terminals.TEXT,
            yytext().substring(0, len - 2) + yytext().substring(len - 1));
          }
        case 134: break;
        case 43:
          { return newToken(Terminals.UNDER_TOGGLE);
          }
        case 135: break;
        case 35:
          // lookahead expression with fixed lookahead length
          yypushback(1);
          { pushState();
    yybegin(LISTATE);
    return newToken(Terminals.LI, "#", 1);
          }
        case 136: break;
        case 30:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.HARDLINE);
          }
        case 137: break;
        case 34:
          { pushState();
    yybegin(LISTATE);
    return newToken(Terminals.LI, "*", -1);
          }
        case 138: break;
        case 39:
          { return newToken(Terminals.STRONG_TOGGLE);
          }
        case 139: break;
        case 83:
          { yybegin(popState());
    yypushback(yylength());
    return newToken(Terminals.FINAL_LI);
          }
        case 140: break;
        case 66:
          { pushState();
    yypushback(2);
    yybegin(PSTATE);
    return newToken(Terminals.STRIKE_TOGGLE);
          }
        case 141: break;
        case 64:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 2;
          { return newToken(Terminals.CELL, null);
          }
        case 142: break;
        case 45:
          { return newToken(Terminals.SUB_TOGGLE);
          }
        case 143: break;
        case 40:
          { return newToken(Terminals.MONO_TOGGLE);
          }
        case 144: break;
        case 71:
          { if (!needIndexCloser)
        throw new CreoleParseException(
                "Tangled index entry marker (...) pairing",
                yychar, yyline, yycolumn);
    needIndexCloser = false;
          }
        case 145: break;
        case 65:
          { // The optional 2nd half may in fact be a {{image}} instead of the target
    // URL.  In that case, the parser will handle it.
    // We delimit label from url with 0 char.
    StringBuilder sb = new StringBuilder(yytext());
    if (yystate() == YYINITIAL) {
        pushState();
        yybegin(PSTATE);
    }
    return newToken(Terminals.URL,
            sb.substring(2, yylength()-2), sb.indexOf("|") - 2);
          }
        case 146: break;
        case 58:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { return newToken(Terminals.END_DT);
          }
        case 147: break;
        case 82:
          { return newToken(Terminals.URL, yytext());
          }
        case 148: break;
        case 73:
          { int startIndex = yytext().indexOf('!');
    return newToken(Terminals.NESTED_HTMLCOMMENT,
            yytext().substring(startIndex+1, yylength() - 2));
          }
        case 149: break;
        case 21:
          { return newToken(Terminals.DT);
          }
        case 150: break;
        case 60:
          { pushState();
    yypushback(yylength());
    yybegin(PSTATE);
          }
        case 151: break;
        case 12:
          { yypushback(yylength());
    yybegin(TABLESTATE);
    return newToken(Terminals.END_PARA);
          }
        case 152: break;
        case 89:
          { // Pres starting at ^{st} inside jcxBlocks handled by NESTED_...
    yypushback(1);
    return newToken((yystate() == YYINITIAL)
            ? Terminals.ROOTLVL_NOWIKI : Terminals.NESTED_NOWIKI,
            matcher(BlockPrePattern).group(1));
          }
        case 153: break;
        case 24:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.MONO_TOGGLE);
          }
        case 154: break;
        case 85:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { pushState();
    urlDeferringState = PSTATE;
    yybegin(ESCURL);
    return newToken(Terminals.TEXT, yytext());
          }
        case 155: break;
        case 102:
          { yypushback(1);
    return newToken((yystate() == YYINITIAL)
            ? Terminals.ROOTLVL_NOWIKI : Terminals.NESTED_NOWIKI,
            matcher(PrettyPattern).group(2) + '\u0003');
          }
        case 156: break;
        case 29:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.SUB_TOGGLE);
          }
        case 157: break;
        case 69:
          { yypushback(2); return newToken(Terminals.STRIKE_TOGGLE);
          }
        case 158: break;
        case 17:
          { return newToken(Terminals.CELL);
          }
        case 159: break;
        case 11:
          { yypushback(yylength());
    yybegin(DLSTATE);
    return newToken(Terminals.END_PARA);
          }
        case 160: break;
        case 8:
          { if (yystate() == YYINITIAL) yybegin(PSTATE);
    return newToken(Terminals.TEXT, yytext().substring(1));
          }
        case 161: break;
        case 22:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.STRONG_TOGGLE);
          }
        case 162: break;
        case 93:
          { return newToken(Terminals.FOOTREF, matcher(ParamPluginPattern).group(2));
          }
        case 163: break;
        case 78:
          { return newToken(Terminals.END_JCXSPAN);
          }
        case 164: break;
        case 103:
          { yypushback(1);
    Matcher m = matcher(PrettyPattern);
    return newToken((yystate() == YYINITIAL)
            ? Terminals.ROOTLVL_NOWIKI : Terminals.NESTED_NOWIKI,
            m.group(2) + '\u0003' + m.group(1));
          }
        case 165: break;
        case 63:
          { yypushback(yylength());
    pushState();
    yybegin(PSTATE);
          }
        case 166: break;
        case 49:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { return newToken(Terminals.END_LI, null, listLevel);
          }
        case 167: break;
        case 48:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { yybegin(popState());
    return newToken(Terminals.FINAL_LI);
          }
        case 168: break;
        case 42:
          { return newToken(Terminals.STRIKE_TOGGLE);
          }
        case 169: break;
        case 55:
          { return newToken(Terminals.TEXT, "\n");
          }
        case 170: break;
        case 15:
          { yybegin(urlDeferringState)// Already been pushed, if necessary
    return newToken(Terminals.TEXT, yytext());
          }
        case 171: break;
        case 14:
          { Matcher m = matcher(ListLevelPattern);
    if (m.groupCount() != 2)
        throw new RuntimeException(
                "List-item Matcher captured " + m.groupCount() + " groups");
    return newToken(Terminals.LI,
            Character.toString(m.group(1).charAt(0)),
            m.group(1).length()
            * ((m.group(2) != null && m.group(2).length() > 0) ? -1 : 1)
            );
          }
        case 172: break;
        case 97:
          { return newToken(Terminals.NESTED_ENUMFORMATS,
            matcher(ParamPluginPattern).group(2));
          }
        case 173: break;
        case 31:
          { if (yystate() == YYINITIAL) yybegin(PSTATE);
    return newToken(Terminals.HARDSPACE); // Going with HardSpace here
          }
        case 174: break;
        case 44:
          { return newToken(Terminals.SUP_TOGGLE);
          }
        case 175: break;
        case 77:
          { Matcher m = matcher(JcxPattern);
    if (m.groupCount() != 2)
        throw new RuntimeException(
                "JCX Matcher captured " + m.groupCount() + " groups");
    String classNames = m.group(2);
    return newToken(Terminals.JCXSPAN,
            (classNames == null) ? null : classNames.replaceAll("\\s+", " "));
          }
        case 176: break;
        case 74:
          { // Raw HTML starting at ^{st} inside jcxBlocks handled by NESTED_...
    int startIndex = yytext().indexOf('~');
    return newToken(Terminals.ROOTLVL_RAWHTML,
            yytext().substring(startIndex+1, yylength() - 2));
          }
        case 177: break;
        case 23:
          { throw new CreoleParseException("Unknown plugin", yychar, yyline, yycolumn);
          }
        case 178: break;
        case 92:
          { return newToken(Terminals.INDEXED, matcher(ParamPluginPattern).group(2));
          }
        case 179: break;
        case 84:
          { yybegin(popState());
    yypushback(yylength());
    return newToken(Terminals.FINAL_DT);
          }
        case 180: break;
        case 19:
          { int hLevel = yytext().trim().length();
    if (hLevel < 1 || hLevel > 6)
        throw new CreoleParseException(
                "Unexpected level for Heading prefix: " + yytext().trim(),
                yychar, yyline, yycolumn);
    return newToken(Terminals.HEADING, null, hLevel);
          }
        case 181: break;
        case 99:
          { return newToken(Terminals.ENTRYDEF,
            matcher(ParamPluginPattern).group(2), 1);
          }
        case 182: break;
        case 3:
          { return newToken(Terminals.ROOTLVL_NEWLINE);
          }
        case 183: break;
        case 7:
          { return newToken(Terminals.TEXT, yytext());
          }
        case 184: break;
        case 47:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { return newToken(Terminals.TEXT, yytext());
          }
        case 185: break;
        case 52:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { return newToken(Terminals.END_ROW, null, listLevel);
          }
        case 186: break;
        case 98:
          { return newToken(Terminals.ENTRYDEF,
            matcher(ParamPluginPattern).group(2), 0);
          }
        case 187: break;
        case 5:
          { pushState();
    yybegin(DLSTATE);
    return newToken(Terminals.DT);
          }
        case 188: break;
        case 51:
          // lookahead expression with fixed base length
          zzMarkedPos = zzStartRead + 1;
          { yybegin(popState());
    return newToken(Terminals.FINAL_ROW);
          }
        case 189: break;
        case 75:
          { // HTML comments starting at ^{st} inside jcxBlocks handled by NESTED_...
    int startIndex = yytext().indexOf('!');
    return newToken(Terminals.ROOTLVL_HTMLCOMMENT,
            yytext().substring(startIndex+1, yylength() - 2));
          }
        case 190: break;
        case 50:
          { return newToken(Terminals.TAB);
          }
        case 191: break;
        case 70:
          { Matcher m = matcher(JcxPattern);
    if (m.groupCount() != 2)
        throw new RuntimeException(
                "JCX Matcher captured " + m.groupCount() + " groups");
    String classNames = m.group(2);
    // Note the recursion for JCXBLOCKSTATE
    pushState();
    yybegin(JCXBLOCKSTATE);
    return newToken(Terminals.JCXBLOCK,
            (classNames == null) ? null : classNames.replaceAll("\\s+", " "));
          }
        case 192: break;
        case 86:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.TEXT, yytext().substring(1));
          }
        case 193: break;
        case 28:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.SUP_TOGGLE);
          }
        case 194: break;
        case 1:
          { return newToken(Terminals.EOF);
          }
        case 195: break;
        case 101:
          { return newToken(Terminals.STYLER, matcher(ParamPluginPattern).group(2));
          }
        case 196: break;
        case 100:
          { return newToken(Terminals.ENUMFORMATRESET,
            matcher(ParamPluginPattern).group(2));
          }
        case 197: break;
        case 26:
          { pushState();
    yybegin(PSTATE);
    return newToken(Terminals.STRIKE_TOGGLE);
          }
        case 198: break;
        case 76:
          { return newToken(Terminals.HOR);
          }
        case 199: break;
        case 33:
          { pushState();
    yybegin(LISTATE);
    return newToken(Terminals.TAB);
          }
        case 200: break;
        case 87:
          { Matcher m = matcher(OptParamPluginPattern, true);
    if (m.groupCount() != 2)
        throw new RuntimeException(
                "JCX Matcher captured " + m.groupCount() + " groups");
    short t;
    if (m.group(1).equals("toc"))
        t = Terminals.TOC;
    else if (m.group(1).equals("footNotes"))
        t = Terminals.FOOTNOTES;
    else if (m.group(1).equals("masterDefList"))
        t = Terminals.MASTERDEFLIST;
    else if (m.group(1).equals("index"))
        t = Terminals.INDEX;
    else throw new IllegalStateException(
            "Unexpected Plugin directive: " + m.group(1));
    return newToken(t, m.group(2));
          }
        case 201: break;
        case 46:
          { return newToken(Terminals.HARDLINE);
          }
        case 202: break;
        case 32:
          // lookahead expression with fixed lookahead length
          yypushback(1);
          { pushState();
    yybegin(LISTATE);
    return newToken(Terminals.LI, "*", 1);
          }
        case 203: break;
        case 81:
          // general lookahead, find correct zzMarkedPos
          { int zzFState = 18;
            int zzFPos = zzStartRead;
            if (zzFin.length <= zzBufferL.length) { zzFin = new boolean[zzBufferL.length+1]; }
            boolean zzFinL[] = zzFin;
            while (zzFState != -1 && zzFPos < zzMarkedPos) {
              if ((zzAttrL[zzFState] & 1) == 1) { zzFinL[zzFPos] = true; }
              zzInput = zzBufferL[zzFPos++];
              zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];
            }
            if (zzFState != -1 && (zzAttrL[zzFState] & 1) == 1) { zzFinL[zzFPos] = true; }

            zzFState = 19;
            zzFPos = zzMarkedPos;
            while (!zzFinL[zzFPos] || (zzAttrL[zzFState] & 1) != 1) {
              zzInput = zzBufferL[--zzFPos];
              zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];
            };
            zzMarkedPos = zzFPos;
          }
          {
          }
        case 204: break;
        case 13:
          {
          }
        case 205: break;
        case 53:
          // lookahead expression with fixed lookahead length
          yypushback(1);
          {
          }
        case 206: break;
        default:
          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
            zzAtEOF = true;
            zzDoEOF();
            switch (zzLexicalState) {
            case DLSTATE: {
              yybegin(DEATH); return newToken(Terminals.FINAL_DT);
            }
            case 982: break;
            case LISTATE: {
              yybegin(DEATH); return newToken(Terminals.FINAL_LI);
            }
            case 983: break;
            case PSTATE: {
              yybegin(DEATH); return newToken(Terminals.END_PARA);
            }
            case 984: break;
            case TABLESTATE: {
              yybegin(DEATH); return newToken(Terminals.FINAL_ROW);
            }
            case 985: break;
            default:
              {
                return newToken(Terminals.EOF);
              }
            }
          }
          else {
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
TOP

Related Classes of com.admc.jcreole.CreoleScanner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.