// 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, 100, 101, 103, 118, 133, 149, 155, 161, 176, 179, 182, 185, 200, 202, 204, 219, 235, 241, 247, 250, 253, 269, 285, 302, 309, 315, 331, 335, 351, 366, 369, 371, 381, 392, 402, 416, 420, 420, 421, 430, 430, 430, 432, 434, 437, 440, 442, 444 }; } 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, 58, 65, 90, 97, 122, 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, 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, 58, 63, 95, 45, 46, 48, 57, 65, 90, 97, 122, 63, 95, 45, 46, 48, 58, 65, 90, 97, 122, 32, 62, 63, 95, 9, 13, 45, 46, 48, 58, 65, 90, 97, 122, 32, 62, 9, 13, 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, 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, 97, 109, 121, 127, 133, 145, 149, 153, 157, 169, 172, 175, 187, 199, 205, 211, 215, 219, 232, 245, 258, 265, 271, 284, 289, 302, 314, 318, 321, 328, 336, 343, 353, 357, 358, 360, 367, 368, 369, 372, 375, 379, 383, 386, 389 }; } 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, 99, 100, 98, 59, 98, 97, 98, 98, 98, 56, 61, 35, 101, 62, 60, 97, 57, 58, 99, 100, 98, 59, 98, 97, 98, 98, 98, 56, 103, 21, 105, 106, 104, 107, 104, 103, 104, 104, 104, 102, 24, 108, 68, 63, 21, 107, 102, 109, 109, 109, 109, 109, 109, 0, 111, 110, 110, 110, 110, 110, 110, 0, 112, 112, 112, 112, 112, 112, 0, 113, 115, 114, 114, 113, 114, 114, 114, 114, 0, 116, 117, 116, 0, 118, 120, 119, 123, 122, 122, 122, 122, 122, 121, 124, 125, 24, 25, 23, 24, 25, 23, 61, 35, 62, 60, 61, 35, 62, 60, 24, 68, 63, 24, 68, 63, 126, 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, 0, 122, 125, 126, 125, 126, 125, 126, 125, 126, 127 }; } 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; } }