Package radius.parser

Source Code of radius.parser.JavaScanner

// line 1 "JavaScanner.rl"

// line 84 "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) {
    RubyHash tag = RubyHash.newHash(runtime);
    tag.op_aset(
      runtime.getCurrentContext(),
      RubySymbol.newSymbol(runtime, "prefix"),
      RubyString.newString(runtime, 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 65 "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,   34,   47,   61,   65,   70,   72,   74,   87,
    100101103118133149155161176179182185,
    200202204219235241247250253269285302,
    309315331335351366369371381392402416,
    420420421430430430432434437440442444
  };
}

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,   97122,   63,
     95,   45,   46,   48,   58,   65,   90,   97122,   32,   47,   62,
     63,   95,    9,   13,   45,   58,   65,   90,   97122,   32,   47,
     62,   63,   95,    9,   13,   45,   58,   65,   90,   97122,   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,   97122,   32,   47,   62,   63,   95,    9,   13,   45,   58,
     65,   90,   97122,   62,   34,   92,   32,   34,   47,   62,   63,
     92,   95,    9,   13,   45,   58,   65,   90,   97122,   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,   97122,   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,   97122,   34,   62,   92,   34,
     39,   92,   34,   39,   92,   32,   39,   47,   62,   63,   92,   95,
      9,   13,   45,   58,   65,   90,   97122,   39,   92,   39,   92,
     32,   39,   47,   62,   63,   92,   95,    9,   13,   45,   58,   65,
     90,   97122,   32,   39,   61,   63,   92,   95,    9,   13,   45,
     46,   48,   58,   65,   90,   97122,   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,   97122,   32,   34,   39,   47,   62,   63,   92,
     95,    9,   13,   45,   58,   65,   90,   97122,   32,   34,   39,
     61,   63,   92,   95,    9,   13,   45,   46,   48,   58,   65,   90,
     97122,   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,   97122,   34,   39,   62,   92,   32,
     34,   39,   47,   62,   63,   92,   95,    9,   13,   45,   58,   65,
     90,   97122,   32,   39,   47,   62,   63,   92,   95,    9,   13,
     45,   58,   65,   90,   97122,   39,   62,   92,   39,   92,   63,
     95,   45,   46,   48,   57,   65,   90,   97122,   58,   63,   95,
     45,   46,   48,   57,   65,   90,   97122,   63,   95,   45,   46,
     48,   58,   65,   90,   97122,   32,   62,   63,   95,    9,   13,
     45,   46,   48,   58,   65,   90,   97122,   32,   62,    9,   13,
     60,   47,   63,   95,   45,   57,   65,   90,   97122,   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,    5,    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,    3,    2,    4,    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,    5,    1,
      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,   25,   35,   45,   49,   54,   57,   60,   70,
     80,   82,   85,   97109121127133145149153157,
    169172175187199205211215219232245258,
    265271284289302314318321328336343353,
    357358360367368369372375379383386389
  };
}

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


private static byte[] init__parser_indicies_0()
{
  return new byte [] {
      2,    1,    1,    1,    1,    1,    1,    0,    3,    3,    3,    3,
      3,    3,    0,    4,    6,    7,    5,    5,    4,    5,    5,    5,
      0,    8,   10,   11,    9,    9,    8,    9,    9,    9,    0,   13,
     15,   14,   14,   13,   14,   14,   14,   14,   12,   16,   17,   16,
     12,   17,   18,   19,   17,   12,   21,   22,   20,   24,   25,   23,
     26,   28,   29,   27,   27,   26,   27,   27,   27,   12,   30,   32,
     33,   31,   31,   30,   31,   31,   31,   12,   34,   12,   35,   25,
     23,   36,   24,   38,   39,   37,   25,   37,   36,   37,   37,   37,
     23,   40,   24,   42,   43,   41,   25,   41,   40,   41,   41,   41,
     23,   44,   24,   46,   45,   25,   45,   44,   45,   45,   45,   45,
     23,   47,   24,   48,   25,   47,   23,   48,   49,   50,   25,   48,
     23,   51,   21,   53,   54,   52,   22,   52,   51,   52,   52,   52,
     20,   24,   55,   25,   23,   57,   58,   59,   56,   61,   35,   62,
     60,   64,   24,   66,   67,   65,   68,   65,   64,   65,   65,   65,
     63,   24,   68,   63,   61,   68,   63,   69,   24,   71,   72,   70,
     68,   70,   69,   70,   70,   70,   63,   73,   24,   75,   74,   68,
     74,   73,   74,   74,   74,   74,   63,   76,   24,   77,   68,   76,
     63,   77,   78,   79,   68,   77,   63,   80,   58,   59,   56,   81,
     81,   62,   60,   82,   61,   35,   84,   85,   83,   62,   83,   82,
     83,   83,   83,   60,   86,   61,   35,   88,   89,   87,   62,   87,
     86,   87,   87,   87,   60,   90,   61,   35,   92,   91,   62,   91,
     90,   91,   91,   91,   91,   60,   93,   61,   35,   94,   62,   93,
     60,   94,   95,   96,   62,   94,   60,   97,   80,   58,   99100,
     98,   59,   98,   97,   98,   98,   98,   56,   61,   35101,   62,
     60,   97,   57,   58,   99100,   98,   59,   98,   97,   98,   98,
     98,   56103,   21105106104107104103104104,
    104102,   24108,   68,   63,   21107102109109109,
    109109109,    0111110110110110110110,    0,
    112112112112112112,    0113115114114113,
    114114114114,    0116117116,    0118120119,
    123122122122122122121124125,   24,   25,   23,
     24,   25,   23,   61,   35,   62,   60,   61,   35,   62,   60,   24,
     68,   63,   24,   68,   63126,    0
  };
}

private static final byte _parser_indicies[] = init__parser_indicies_0();


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

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


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

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,
     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,   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,    1,    1,    1,    1,   13,   13,   13,   13,   13,   13,   13,
     13,   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
     13,   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
     13,   13,   13,   13,   13,   13,   13,    1,    1,    1,    1,    1,
      0,    0122125126125126125126125126127
  };
}

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


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

static final int parser_en_Closeout = 48;
static final int parser_en_main = 49;


// line 143 "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 351 "JavaScanner.java"
  {
  cs = parser_start;
  ts = -1;
  te = -1;
  act = 0;
  }

// line 175 "JavaScanner.rl"
   
// line 361 "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 390 "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);

  _trans = _parser_indicies[_trans];
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 = input.substring(mark_pfx, p);
  }
  break;
  case 2:
// line 8 "JavaScanner.rl"
  {
    if ( !prefix.equals(tag_prefix) ) {
      // have to manually add ':' / Sep
      // pass the text through & reset state
      pass_through(input.substring(tagstart, p) + ":");
      prefix = "";
      {cs = 49; _goto_targ = 2; if (true) continue _goto;}
    }
  }
  break;
  case 3:
// line 18 "JavaScanner.rl"
  { mark_stg = p; }
  break;
  case 4:
// line 19 "JavaScanner.rl"
  { name = input.substring(mark_stg, p); }
  break;
  case 5:
// line 20 "JavaScanner.rl"
  { mark_attr = p; }
  break;
  case 6:
// line 21 "JavaScanner.rl"
  {
    attributes.op_aset(
      runtime.getCurrentContext(),
      RubyString.newString(runtime, nat),
      RubyString.newString(runtime, vat)
    );
  }
  break;
  case 7:
// line 29 "JavaScanner.rl"
  { mark_nat = p; }
  break;
  case 8:
// line 30 "JavaScanner.rl"
  { nat = input.substring(mark_nat, p); }
  break;
  case 9:
// line 31 "JavaScanner.rl"
  { mark_vat = p; }
  break;
  case 10:
// line 32 "JavaScanner.rl"
  { vat = input.substring(mark_vat, p); }
  break;
  case 11:
// line 34 "JavaScanner.rl"
  { flavor = RubySymbol.newSymbol(runtime, "open".intern()); }
  break;
  case 12:
// line 35 "JavaScanner.rl"
  { flavor = RubySymbol.newSymbol(runtime, "self".intern()); }
  break;
  case 13:
// line 36 "JavaScanner.rl"
  { flavor = RubySymbol.newSymbol(runtime, "close".intern()); }
  break;
  case 16:
// line 1 "NONE"
  {te = p+1;}
  break;
  case 17:
// line 72 "JavaScanner.rl"
  {act = 1;}
  break;
  case 18:
// line 79 "JavaScanner.rl"
  {act = 2;}
  break;
  case 19:
// line 79 "JavaScanner.rl"
  {te = p+1;{
      pass_through(input.substring(p, p + 1));
      tagstart = p + 1;
    }}
  break;
  case 20:
// line 72 "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 79 "JavaScanner.rl"
  {te = p;p--;{
      pass_through(input.substring(p, p + 1));
      tagstart = p + 1;
    }}
  break;
  case 22:
// line 79 "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 590 "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 604 "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 176 "JavaScanner.rl"

    return rv;
  }
}
TOP

Related Classes of radius.parser.JavaScanner

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.