// line 1 “JavaScanner.rl”

// line 101 “JavaScanner.rl”

package radius.parser;

import java.util.HashMap; import java.util.LinkedList; import org.jruby.Ruby; // runtime import org.jruby.RubyObject; import org.jruby.runtime.builtin.IRubyObject; import org.jruby.RubyArray; import org.jruby.RubyString; import org.jruby.RubyHash; import org.jruby.RubySymbol;

public class JavaScanner {

Ruby runtime = null;
RubyArray rv = null;

void pass_through(String str) {
  RubyObject last = ((RubyObject)rv.last());
  if ( rv.size() > 0 &&  last != null && (last instanceof RubyString) ){
    // XXX concat changes for ruby 1.9
    ((RubyString) last).concat(RubyString.newString(runtime, str));
  } else {
    rv.append(RubyString.newString(runtime, str));
  }
}

void tag(String prefix, String name, RubyHash attr, RubySymbol flavor) {
  // Validate both prefix and name
  if ((prefix == null || prefix.trim().isEmpty()) && 
      (name == null || name.trim().isEmpty())) {
      pass_through("<");
      return;
  }

  if (name == null || name.trim().isEmpty()) {
      pass_through("<" + prefix + ":");
      return;
  }

  RubyHash tag = RubyHash.newHash(runtime);
  tag.op_aset(
    runtime.getCurrentContext(),
    RubySymbol.newSymbol(runtime, "prefix"),
    RubyString.newString(runtime, prefix != null ? prefix : "")
  );
  tag.op_aset(
    runtime.getCurrentContext(),
    RubySymbol.newSymbol(runtime, "name"),
    RubyString.newString(runtime, name)
  );
  tag.op_aset(
    runtime.getCurrentContext(),
    RubySymbol.newSymbol(runtime, "attrs"),
    attr
  );
  tag.op_aset(
    runtime.getCurrentContext(),
    RubySymbol.newSymbol(runtime, "flavor"),
    flavor
  );
  rv.append(tag);
}

public JavaScanner(Ruby runtime) {
  this.runtime = runtime;
}

// line 77 “JavaScanner.java” private static byte[] init__parser_actions_0() {

return new byte [] {
    0,    1,    0,    1,    3,    1,    4,    1,    5,    1,    6,    1,
    7,    1,    8,    1,    9,    1,   10,    1,   14,    1,   15,    1,
   19,    1,   21,    1,   22,    1,   23,    2,    1,    2,    2,    5,
    6,    2,    6,    7,    2,    9,    5,    2,    9,   10,    2,   10,
    9,    2,   11,   20,    2,   12,   20,    2,   13,   20,    2,   16,
   17,    2,   16,   18,    3,    5,    6,    7,    3,    9,    5,    6,
    3,   16,    6,   17,    4,    9,    5,    6,    7,    4,   16,    5,
    6,   17,    5,   16,    9,    5,    6,   17
};

}

private static final byte _parser_actions[] = init__parser_actions_0();

private static short[] init__parser_key_offsets_0() {

return new short [] {
    0,    0,   11,   21,   35,   48,   62,   66,   71,   73,   75,   88,
  101,  102,  104,  119,  134,  150,  156,  162,  177,  180,  183,  186,
  201,  203,  205,  220,  236,  242,  248,  251,  254,  270,  286,  303,
  310,  316,  332,  336,  352,  367,  370,  372,  382,  392,  403,  413,
  428,  432,  442,  442,  443,  452,  452,  452,  454,  456,  459,  462,
  464,  466
};

}

private static final short _parser_key_offsets[] = init__parser_key_offsets_0();

private static char[] init__parser_trans_keys_0() {

return new char [] {
   58,   63,   95,   45,   46,   48,   57,   65,   90,   97,  122,   63,
   95,   45,   46,   48,   57,   65,   90,   97,  122,   32,   47,   58,
   62,   63,   95,    9,   13,   45,   57,   65,   90,   97,  122,   32,
   47,   62,   63,   95,    9,   13,   45,   58,   65,   90,   97,  122,
   32,   61,   63,   95,    9,   13,   45,   46,   48,   58,   65,   90,
   97,  122,   32,   61,    9,   13,   32,   34,   39,    9,   13,   34,
   92,   34,   92,   32,   47,   62,   63,   95,    9,   13,   45,   58,
   65,   90,   97,  122,   32,   47,   62,   63,   95,    9,   13,   45,
   58,   65,   90,   97,  122,   62,   34,   92,   32,   34,   47,   62,
   63,   92,   95,    9,   13,   45,   58,   65,   90,   97,  122,   32,
   34,   47,   62,   63,   92,   95,    9,   13,   45,   58,   65,   90,
   97,  122,   32,   34,   61,   63,   92,   95,    9,   13,   45,   46,
   48,   58,   65,   90,   97,  122,   32,   34,   61,   92,    9,   13,
   32,   34,   39,   92,    9,   13,   32,   34,   47,   62,   63,   92,
   95,    9,   13,   45,   58,   65,   90,   97,  122,   34,   62,   92,
   34,   39,   92,   34,   39,   92,   32,   39,   47,   62,   63,   92,
   95,    9,   13,   45,   58,   65,   90,   97,  122,   39,   92,   39,
   92,   32,   39,   47,   62,   63,   92,   95,    9,   13,   45,   58,
   65,   90,   97,  122,   32,   39,   61,   63,   92,   95,    9,   13,
   45,   46,   48,   58,   65,   90,   97,  122,   32,   39,   61,   92,
    9,   13,   32,   34,   39,   92,    9,   13,   34,   39,   92,   34,
   39,   92,   32,   34,   39,   47,   62,   63,   92,   95,    9,   13,
   45,   58,   65,   90,   97,  122,   32,   34,   39,   47,   62,   63,
   92,   95,    9,   13,   45,   58,   65,   90,   97,  122,   32,   34,
   39,   61,   63,   92,   95,    9,   13,   45,   46,   48,   58,   65,
   90,   97,  122,   32,   34,   39,   61,   92,    9,   13,   32,   34,
   39,   92,    9,   13,   32,   34,   39,   47,   62,   63,   92,   95,
    9,   13,   45,   58,   65,   90,   97,  122,   34,   39,   62,   92,
   32,   34,   39,   47,   62,   63,   92,   95,    9,   13,   45,   58,
   65,   90,   97,  122,   32,   39,   47,   62,   63,   92,   95,    9,
   13,   45,   58,   65,   90,   97,  122,   39,   62,   92,   39,   92,
   63,   95,   45,   46,   48,   57,   65,   90,   97,  122,   63,   95,
   45,   46,   48,   57,   65,   90,   97,  122,   58,   63,   95,   45,
   46,   48,   57,   65,   90,   97,  122,   63,   95,   45,   46,   48,
   57,   65,   90,   97,  122,   32,   58,   62,   63,   95,    9,   13,
   45,   46,   48,   57,   65,   90,   97,  122,   32,   62,    9,   13,
   63,   95,   45,   46,   48,   57,   65,   90,   97,  122,   60,   47,
   63,   95,   45,   57,   65,   90,   97,  122,   34,   92,   34,   92,
   34,   39,   92,   34,   39,   92,   39,   92,   39,   92,    0
};

}

private static final char _parser_trans_keys[] = init__parser_trans_keys_0();

private static byte[] init__parser_single_lengths_0() {

return new byte [] {
    0,    3,    2,    6,    5,    4,    2,    3,    2,    2,    5,    5,
    1,    2,    7,    7,    6,    4,    4,    7,    3,    3,    3,    7,
    2,    2,    7,    6,    4,    4,    3,    3,    8,    8,    7,    5,
    4,    8,    4,    8,    7,    3,    2,    2,    2,    3,    2,    5,
    2,    2,    0,    1,    3,    0,    0,    2,    2,    3,    3,    2,
    2,    0
};

}

private static final byte _parser_single_lengths[] = init__parser_single_lengths_0();

private static byte[] init__parser_range_lengths_0() {

return new byte [] {
    0,    4,    4,    4,    4,    5,    1,    1,    0,    0,    4,    4,
    0,    0,    4,    4,    5,    1,    1,    4,    0,    0,    0,    4,
    0,    0,    4,    5,    1,    1,    0,    0,    4,    4,    5,    1,
    1,    4,    0,    4,    4,    0,    0,    4,    4,    4,    4,    5,
    1,    4,    0,    0,    3,    0,    0,    0,    0,    0,    0,    0,
    0,    0
};

}

private static final byte _parser_range_lengths[] = init__parser_range_lengths_0();

private static short[] init__parser_index_offsets_0() {

return new short [] {
    0,    0,    8,   15,   26,   36,   46,   50,   55,   58,   61,   71,
   81,   83,   86,   98,  110,  122,  128,  134,  146,  150,  154,  158,
  170,  173,  176,  188,  200,  206,  212,  216,  220,  233,  246,  259,
  266,  272,  285,  290,  303,  315,  319,  322,  329,  336,  344,  351,
  362,  366,  373,  374,  376,  383,  384,  385,  388,  391,  395,  399,
  402,  405
};

}

private static final short _parser_index_offsets[] = init__parser_index_offsets_0();

private static byte[] init__parser_trans_targs_0() {

return new byte [] {
    2,    1,    1,    1,    1,    1,    1,   51,    3,    3,    3,    3,
    3,    3,   51,    4,   12,   43,   54,    3,    3,    4,    3,    3,
    3,   51,    4,   12,   54,    5,    5,    4,    5,    5,    5,   51,
    6,    7,    5,    5,    6,    5,    5,    5,    5,   51,    6,    7,
    6,   51,    7,    8,   42,    7,   51,   10,   13,    9,   10,   13,
    9,   11,   12,   54,    5,    5,   11,    5,    5,    5,   51,   11,
   12,   54,    5,    5,   11,    5,    5,    5,   51,   53,   51,   14,
   13,    9,   15,   10,   20,   56,   16,   13,   16,   15,   16,   16,
   16,    9,   15,   10,   20,   56,   16,   13,   16,   15,   16,   16,
   16,    9,   17,   10,   18,   16,   13,   16,   17,   16,   16,   16,
   16,    9,   17,   10,   18,   13,   17,    9,   18,   19,   21,   13,
   18,    9,   15,   10,   20,   56,   16,   13,   16,   15,   16,   16,
   16,    9,   10,   55,   13,    9,   23,   14,   31,   22,   23,   14,
   31,   22,   26,   10,   41,   60,   27,   25,   27,   26,   27,   27,
   27,   24,   10,   25,   24,   23,   25,   24,   26,   10,   41,   60,
   27,   25,   27,   26,   27,   27,   27,   24,   28,   10,   29,   27,
   25,   27,   28,   27,   27,   27,   27,   24,   28,   10,   29,   25,
   28,   24,   29,   30,   40,   25,   29,   24,   23,   14,   31,   22,
   32,   32,   31,   22,   33,   23,   14,   38,   58,   34,   31,   34,
   33,   34,   34,   34,   22,   33,   23,   14,   38,   58,   34,   31,
   34,   33,   34,   34,   34,   22,   35,   23,   14,   36,   34,   31,
   34,   35,   34,   34,   34,   34,   22,   35,   23,   14,   36,   31,
   35,   22,   36,   37,   39,   31,   36,   22,   33,   23,   14,   38,
   58,   34,   31,   34,   33,   34,   34,   34,   22,   23,   14,   57,
   31,   22,   33,   23,   14,   38,   58,   34,   31,   34,   33,   34,
   34,   34,   22,   26,   10,   41,   60,   27,   25,   27,   26,   27,
   27,   27,   24,   10,   59,   25,   24,   10,   25,   24,    3,    3,
    3,    3,    3,    3,   51,   45,   45,   45,   45,   45,   45,   51,
   46,   45,   45,   45,   45,   45,   45,   51,   47,   47,   47,   47,
   47,   47,   51,   48,   49,   61,   47,   47,   48,   47,   47,   47,
   47,   51,   48,   61,   48,   51,   47,   47,   47,   47,   47,   47,
   51,    0,   52,   51,   44,    1,    1,    1,    1,    1,   51,   51,
   51,   10,   13,    9,   10,   13,    9,   23,   14,   31,   22,   23,
   14,   31,   22,   10,   25,   24,   10,   25,   24,   51,   51,   51,
   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
   51,   51,   51,   51,   51,   51,   51,   51,   51,    0
};

}

private static final byte _parser_trans_targs[] = init__parser_trans_targs_0();

private static byte[] init__parser_trans_actions_0() {

return new byte [] {
   31,    0,    0,    0,    0,    0,    0,   27,    3,    3,    3,    3,
    3,    3,   27,    5,    5,    0,    5,    0,    0,    5,    0,    0,
    0,   27,    0,    0,    0,   11,   11,    0,   11,   11,   11,   27,
   13,   13,    0,    0,   13,    0,    0,    0,    0,   29,    0,    0,
    0,   29,    0,    0,    0,    0,   29,   43,   15,   15,   17,    0,
    0,    7,   34,   34,   64,   64,    7,   64,   64,   64,   29,    0,
    9,    9,   37,   37,    0,   37,   37,   37,   29,    0,   29,   17,
    0,    0,    7,   17,   34,   81,   64,    0,   64,    7,   64,   64,
   64,    0,    0,   17,    9,   72,   37,    0,   37,    0,   37,   37,
   37,    0,   13,   17,   13,    0,    0,    0,   13,    0,    0,    0,
    0,    0,    0,   17,    0,    0,    0,    0,    0,   17,    0,    0,
    0,    0,   40,   43,   68,   86,   76,   15,   76,   40,   76,   76,
   76,   15,   17,   58,    0,    0,   46,   43,   15,   15,   17,   17,
    0,    0,    7,   17,   34,   81,   64,    0,   64,    7,   64,   64,
   64,    0,   17,    0,    0,   17,    0,    0,    0,   17,    9,   72,
   37,    0,   37,    0,   37,   37,   37,    0,   13,   17,   13,    0,
    0,    0,   13,    0,    0,    0,    0,    0,    0,   17,    0,    0,
    0,    0,    0,    0,   17,    0,    0,    0,   43,   43,   15,   15,
   17,   17,    0,    0,    7,   17,   17,   34,   81,   64,    0,   64,
    7,   64,   64,   64,    0,    0,   17,   17,    9,   72,   37,    0,
   37,    0,   37,   37,   37,    0,   13,   17,   17,   13,    0,    0,
    0,   13,    0,    0,    0,    0,    0,    0,   17,   17,    0,    0,
    0,    0,    0,   17,   17,    0,    0,    0,   40,   43,   43,   68,
   86,   76,   15,   76,   40,   76,   76,   76,   15,   17,   17,   58,
    0,    0,   40,   46,   43,   68,   86,   76,   15,   76,   40,   76,
   76,   76,   15,   40,   43,   68,   86,   76,   15,   76,   40,   76,
   76,   76,   15,   17,   58,    0,    0,   43,   15,   15,    0,    0,
    0,    0,    0,    0,   27,    1,    1,    1,    1,    1,    1,   27,
   31,    0,    0,    0,    0,    0,    0,   27,    3,    3,    3,    3,
    3,    3,   27,    5,    0,    5,    0,    0,    5,    0,    0,    0,
    0,   27,    0,    0,    0,   27,    0,    0,    0,    0,    0,    0,
   27,    0,   61,   23,    0,    1,    1,    1,    1,    1,   25,   52,
   49,   17,    0,    0,   17,    0,    0,   17,   17,    0,    0,   17,
   17,    0,    0,   17,    0,    0,   17,    0,    0,   55,   27,   27,
   27,   27,   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
   29,   29,   29,   29,   27,   27,   27,   27,   27,   27,   27,   25,
   52,   49,   52,   49,   52,   49,   52,   49,   55,    0
};

}

private static final byte _parser_trans_actions[] = init__parser_trans_actions_0();

private static byte[] init__parser_to_state_actions_0() {

return new byte [] {
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   19,   19,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0
};

}

private static final byte _parser_to_state_actions[] = init__parser_to_state_actions_0();

private static byte[] init__parser_from_state_actions_0() {

return new byte [] {
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   21,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0
};

}

private static final byte _parser_from_state_actions[] = init__parser_from_state_actions_0();

private static short[] init__parser_eof_trans_0() {

return new short [] {
    0,  455,  455,  455,  455,  448,  448,  448,  448,  448,  448,  448,
  448,  448,  448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
  448,  448,  448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
  448,  448,  448,  448,  448,  448,  448,  455,  455,  455,  455,  455,
  455,  455,    0,    0,  456,  463,  464,  463,  464,  463,  464,  463,
  464,  465
};

}

private static final short _parser_eof_trans[] = init__parser_eof_trans_0();

static final int parser_start = 51; static final int parser_first_final = 51; static final int parser_error = 0;

static final int parser_en_Closeout = 50; static final int parser_en_main = 51;

// line 172 “JavaScanner.rl”

public RubyArray operate(String tag_prefix, String input) {
  char[] data = input.toCharArray();
  String disposable_string;

  String name = "";
  String prefix = "";
  RubySymbol flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
  RubyHash attributes = RubyHash.newHash(runtime);

  int tagstart = 0;
  int mark_pfx = 0;
  int mark_stg = 0;
  int mark_attr = 0;
  int mark_nat = 0;
  int mark_vat = 0;

  String nat = "";
  String vat = "";

  int cs;
  int p = 0;
  int pe = data.length;
  int eof = pe;
  int act;
  int ts;
  int te;

  rv = RubyArray.newArray(runtime);
  char[] remainder = data;

// line 385 “JavaScanner.java”

{
cs = parser_start;
ts = -1;
te = -1;
act = 0;
}

// line 204 “JavaScanner.rl”

// line 395 “JavaScanner.java”

{
int _klen;
int _trans = 0;
int _acts;
int _nacts;
int _keys;
int _goto_targ = 0;

_goto: while (true) {
switch ( _goto_targ ) {
case 0:
if ( p == pe ) {
        _goto_targ = 4;
        continue _goto;
}
if ( cs == 0 ) {
        _goto_targ = 5;
        continue _goto;
}

case 1:

_acts = _parser_from_state_actions[cs];
_nacts = (int) _parser_actions[_acts++];
while ( _nacts-- > 0 ) {
        switch ( _parser_actions[_acts++] ) {
case 15:

// line 1 “NONE”

{ts = p;}
break;

// line 424 “JavaScanner.java”

        }
}

_match: do {
_keys = _parser_key_offsets[cs];
_trans = _parser_index_offsets[cs];
_klen = _parser_single_lengths[cs];
if ( _klen > 0 ) {
        int _lower = _keys;
        int _mid;
        int _upper = _keys + _klen - 1;
        while (true) {
                if ( _upper < _lower )
                        break;

                _mid = _lower + ((_upper-_lower) >> 1);
                if ( data[p] < _parser_trans_keys[_mid] )
                        _upper = _mid - 1;
                else if ( data[p] > _parser_trans_keys[_mid] )
                        _lower = _mid + 1;
                else {
                        _trans += (_mid - _keys);
                        break _match;
                }
        }
        _keys += _klen;
        _trans += _klen;
}

_klen = _parser_range_lengths[cs];
if ( _klen > 0 ) {
        int _lower = _keys;
        int _mid;
        int _upper = _keys + (_klen<<1) - 2;
        while (true) {
                if ( _upper < _lower )
                        break;

                _mid = _lower + (((_upper-_lower) >> 1) & ~1);
                if ( data[p] < _parser_trans_keys[_mid] )
                        _upper = _mid - 2;
                else if ( data[p] > _parser_trans_keys[_mid+1] )
                        _lower = _mid + 2;
                else {
                        _trans += ((_mid - _keys)>>1);
                        break _match;
                }
        }
        _trans += _klen;
}
} while (false);

case 3:

cs = _parser_trans_targs[_trans];

if ( _parser_trans_actions[_trans] != 0 ) {
        _acts = _parser_trans_actions[_trans];
        _nacts = (int) _parser_actions[_acts++];
        while ( _nacts-- > 0 )
{
                switch ( _parser_actions[_acts++] )
                {
case 0:

// line 4 “JavaScanner.rl”

{ mark_pfx = p; }
break;
case 1:

// line 5 “JavaScanner.rl”

    {
prefix = String.valueOf(input.substring(mark_pfx, p));
    }
    break;
    case 2:

// line 8 “JavaScanner.rl”

      {
        if ( !prefix.equals(tag_prefix) ) {
    // Pass through the entire tag markup as text
    pass_through(input.substring(tagstart, p + 1));
    // Reset all state
    prefix = "";
    name = "";
    attributes = RubyHash.newHash(runtime);
    flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
    tagstart = p + 1;
    {cs = 51; _goto_targ = 2; if (true) continue _goto;}
  }
}
      break;
      case 3:

// line 22 “JavaScanner.rl”

{ mark_stg = p; }
break;
case 4:

// line 23 “JavaScanner.rl”

    {
name = String.valueOf(input.substring(mark_stg, p));
if (name == null || name.trim().isEmpty()) {
  // Pass through the entire tag markup as text
  pass_through(input.substring(tagstart, p + 1));
  // Reset all state
  prefix = "";
  name = "";
  attributes = RubyHash.newHash(runtime);
  flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
  tagstart = p + 1;
  {cs = 51; _goto_targ = 2; if (true) continue _goto;}
}
    }
    break;
    case 5:

// line 37 “JavaScanner.rl”

{ mark_attr = p; }
break;
case 6:

// line 38 “JavaScanner.rl”

    {
attributes.op_aset(
  runtime.getCurrentContext(),
  RubyString.newString(runtime, nat),
  RubyString.newString(runtime, vat)
);
    }
    break;
    case 7:

// line 46 “JavaScanner.rl”

{ mark_nat = p; }
break;
case 8:

// line 47 “JavaScanner.rl”

{ nat = input.substring(mark_nat, p); }
break;
case 9:

// line 48 “JavaScanner.rl”

{ mark_vat = p; }
break;
case 10:

// line 49 “JavaScanner.rl”

{ vat = input.substring(mark_vat, p); }
break;
case 11:

// line 51 “JavaScanner.rl”

{ flavor = RubySymbol.newSymbol(runtime, "open".intern()); }
break;
case 12:

// line 52 “JavaScanner.rl”

{ flavor = RubySymbol.newSymbol(runtime, "self".intern()); }
break;
case 13:

// line 53 “JavaScanner.rl”

{ flavor = RubySymbol.newSymbol(runtime, "close".intern()); }
break;
case 16:

// line 1 “NONE”

{te = p+1;}
break;
case 17:

// line 89 “JavaScanner.rl”

{act = 1;}
break;
case 18:

// line 96 “JavaScanner.rl”

{act = 2;}
break;
case 19:

// line 96 “JavaScanner.rl”

  {te = p+1;{
pass_through(input.substring(p, p + 1));
      tagstart = p + 1;
    }}
  break;
  case 20:

// line 89 “JavaScanner.rl”

  {te = p;p--;{
tag(prefix, name, attributes, flavor);
      prefix = "";
      name = "";
      attributes = RubyHash.newHash(runtime);
      flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
    }}
  break;
  case 21:

// line 96 “JavaScanner.rl”

  {te = p;p--;{
pass_through(input.substring(p, p + 1));
      tagstart = p + 1;
    }}
  break;
  case 22:

// line 96 “JavaScanner.rl”

  {{p = ((te))-1;}{
pass_through(input.substring(p, p + 1));
      tagstart = p + 1;
    }}
  break;
  case 23:

// line 1 “NONE”

  {       switch( act ) {
  case 1:
  {{p = ((te))-1;}
tag(prefix, name, attributes, flavor);
      prefix = "";
      name = "";
      attributes = RubyHash.newHash(runtime);
      flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
    }
  break;
  case 2:
  {{p = ((te))-1;}
pass_through(input.substring(p, p + 1));
      tagstart = p + 1;
    }
  break;
  }
  }
  break;

// line 640 “JavaScanner.java”

                }
        }
}

case 2:

_acts = _parser_to_state_actions[cs];
_nacts = (int) _parser_actions[_acts++];
while ( _nacts-- > 0 ) {
        switch ( _parser_actions[_acts++] ) {
case 14:

// line 1 “NONE”

{ts = -1;}
break;

// line 654 “JavaScanner.java”

        }
}

if ( cs == 0 ) {
        _goto_targ = 5;
        continue _goto;
}
if ( ++p != pe ) {
        _goto_targ = 1;
        continue _goto;
}

case 4:

if ( p == eof )
{
if ( _parser_eof_trans[cs] > 0 ) {
        _trans = _parser_eof_trans[cs] - 1;
        _goto_targ = 3;
        continue _goto;
}
}

case 5:

}
break; }
}

// line 205 “JavaScanner.rl”

  return rv;
}

}