radius-ts 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,179 @@
1
+ %%{
2
+ machine parser;
3
+
4
+ action _prefix { mark_pfx = p; }
5
+ action prefix {
6
+ prefix = input.substring(mark_pfx, p);
7
+ }
8
+ action _check_prefix {
9
+ if ( !prefix.equals(tag_prefix) ) {
10
+ // have to manually add ':' / Sep
11
+ // pass the text through & reset state
12
+ pass_through(input.substring(tagstart, p) + ":");
13
+ prefix = "";
14
+ fgoto main;
15
+ }
16
+ }
17
+
18
+ action _starttag { mark_stg = p; }
19
+ action starttag { name = input.substring(mark_stg, p); }
20
+ action _attr { mark_attr = p; }
21
+ action attr {
22
+ attributes.op_aset(
23
+ runtime.getCurrentContext(),
24
+ RubyString.newString(runtime, nat),
25
+ RubyString.newString(runtime, vat)
26
+ );
27
+ }
28
+
29
+ action _nameattr { mark_nat = p; }
30
+ action nameattr { nat = input.substring(mark_nat, p); }
31
+ action _valattr { mark_vat = p; }
32
+ action valattr { vat = input.substring(mark_vat, p); }
33
+
34
+ action opentag { flavor = RubySymbol.newSymbol(runtime, "open".intern()); }
35
+ action selftag { flavor = RubySymbol.newSymbol(runtime, "self".intern()); }
36
+ action closetag { flavor = RubySymbol.newSymbol(runtime, "close".intern()); }
37
+
38
+ Closeout := empty;
39
+
40
+ # words
41
+ PrefixChar = [\-A-Za-z0-9._?] ;
42
+ NameChar = [\-A-Za-z0-9._:?] ;
43
+ TagName = NameChar+ >_starttag %starttag;
44
+ Prefix = PrefixChar+ >_prefix %prefix;
45
+ Open = "<";
46
+ Sep = ":" >_check_prefix;
47
+ End = "/";
48
+ Close = ">";
49
+
50
+ Name = Prefix Sep TagName;
51
+
52
+ NameAttr = NameChar+ >_nameattr %nameattr;
53
+ Q1Char = ( "\\\'" | [^'] ) ;
54
+ Q1Attr = Q1Char* >_valattr %valattr;
55
+ Q2Char = ( "\\\"" | [^"] ) ;
56
+ Q2Attr = Q2Char* >_valattr %valattr;
57
+
58
+ Attr = NameAttr space* "=" space* ('"' Q2Attr '"' | "'" Q1Attr "'") space* >_attr %attr;
59
+ Attrs = (space+ Attr* | empty);
60
+
61
+ CloseTrailer = End Close %selftag;
62
+ OpenTrailer = Close %opentag;
63
+
64
+ Trailer = (OpenTrailer | CloseTrailer);
65
+
66
+ OpenOrSelfTag = Name Attrs? Trailer;
67
+ CloseTag = End Name space* Close %closetag;
68
+
69
+ SomeTag = Open (OpenOrSelfTag | CloseTag);
70
+
71
+ main := |*
72
+ SomeTag => {
73
+ tag(prefix, name, attributes, flavor);
74
+ prefix = "";
75
+ name = "";
76
+ attributes = RubyHash.newHash(runtime);
77
+ flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
78
+ };
79
+ any => {
80
+ pass_through(input.substring(p, p + 1));
81
+ tagstart = p + 1;
82
+ };
83
+ *|;
84
+ }%%
85
+
86
+ package radius.parser;
87
+
88
+ import java.util.HashMap;
89
+ import java.util.LinkedList;
90
+ import org.jruby.Ruby; // runtime
91
+ import org.jruby.RubyObject;
92
+ import org.jruby.runtime.builtin.IRubyObject;
93
+ import org.jruby.RubyArray;
94
+ import org.jruby.RubyString;
95
+ import org.jruby.RubyHash;
96
+ import org.jruby.RubySymbol;
97
+
98
+ public class JavaScanner {
99
+
100
+ Ruby runtime = null;
101
+ RubyArray rv = null;
102
+
103
+ void pass_through(String str) {
104
+ RubyObject last = ((RubyObject)rv.last());
105
+ if ( rv.size() > 0 && last != null && (last instanceof RubyString) ){
106
+ // XXX concat changes for ruby 1.9
107
+ ((RubyString) last).concat(RubyString.newString(runtime, str));
108
+ } else {
109
+ rv.append(RubyString.newString(runtime, str));
110
+ }
111
+ }
112
+
113
+ void tag(String prefix, String name, RubyHash attr, RubySymbol flavor) {
114
+ RubyHash tag = RubyHash.newHash(runtime);
115
+ tag.op_aset(
116
+ runtime.getCurrentContext(),
117
+ RubySymbol.newSymbol(runtime, "prefix"),
118
+ RubyString.newString(runtime, prefix)
119
+ );
120
+ tag.op_aset(
121
+ runtime.getCurrentContext(),
122
+ RubySymbol.newSymbol(runtime, "name"),
123
+ RubyString.newString(runtime, name)
124
+ );
125
+ tag.op_aset(
126
+ runtime.getCurrentContext(),
127
+ RubySymbol.newSymbol(runtime, "attrs"),
128
+ attr
129
+ );
130
+ tag.op_aset(
131
+ runtime.getCurrentContext(),
132
+ RubySymbol.newSymbol(runtime, "flavor"),
133
+ flavor
134
+ );
135
+ rv.append(tag);
136
+ }
137
+
138
+ public JavaScanner(Ruby runtime) {
139
+ this.runtime = runtime;
140
+ }
141
+
142
+ %% write data;
143
+
144
+ public RubyArray operate(String tag_prefix, String input) {
145
+ char[] data = input.toCharArray();
146
+ String disposable_string;
147
+
148
+ String name = "";
149
+ String prefix = "";
150
+ RubySymbol flavor = RubySymbol.newSymbol(runtime, "tasteless".intern());
151
+ RubyHash attributes = RubyHash.newHash(runtime);
152
+
153
+ int tagstart = 0;
154
+ int mark_pfx = 0;
155
+ int mark_stg = 0;
156
+ int mark_attr = 0;
157
+ int mark_nat = 0;
158
+ int mark_vat = 0;
159
+
160
+ String nat = "";
161
+ String vat = "";
162
+
163
+ int cs;
164
+ int p = 0;
165
+ int pe = data.length;
166
+ int eof = pe;
167
+ int act;
168
+ int ts;
169
+ int te;
170
+
171
+ rv = RubyArray.newArray(runtime);
172
+ char[] remainder = data;
173
+
174
+ %% write init;
175
+ %% write exec;
176
+
177
+ return rv;
178
+ }
179
+ }
Binary file
@@ -1,7 +1,7 @@
1
1
 
2
- # line 1 "scan.rl"
2
+ # line 1 "scanner.rl"
3
3
 
4
- # line 83 "scan.rl"
4
+ # line 84 "scanner.rl"
5
5
 
6
6
 
7
7
  module Radius
@@ -37,7 +37,7 @@ module Radius
37
37
 
38
38
  @prefix = prefix
39
39
 
40
- # line 41 "scan.rb"
40
+ # line 41 "scanner.rb"
41
41
  class << self
42
42
  attr_accessor :_parser_trans_keys
43
43
  private :_parser_trans_keys, :_parser_trans_keys=
@@ -773,9 +773,9 @@ end
773
773
  self.parser_en_main = 49;
774
774
 
775
775
 
776
- # line 118 "scan.rl"
776
+ # line 119 "scanner.rl"
777
777
 
778
- # line 779 "scan.rb"
778
+ # line 779 "scanner.rb"
779
779
  begin
780
780
  p ||= 0
781
781
  pe ||= data.length
@@ -785,9 +785,9 @@ begin
785
785
  act = 0
786
786
  end
787
787
 
788
- # line 119 "scan.rl"
788
+ # line 120 "scanner.rl"
789
789
 
790
- # line 791 "scan.rb"
790
+ # line 791 "scanner.rb"
791
791
  begin
792
792
  testEof = false
793
793
  _slen, _trans, _keys, _inds, _acts, _nacts = nil
@@ -815,7 +815,7 @@ begin
815
815
  begin
816
816
  ts = p
817
817
  end
818
- # line 819 "scan.rb"
818
+ # line 819 "scanner.rb"
819
819
  end
820
820
  _keys = cs << 1
821
821
  _inds = _parser_index_offsets[cs]
@@ -834,15 +834,16 @@ ts = p
834
834
  if _parser_trans_actions[_trans] != 0
835
835
  case _parser_trans_actions[_trans]
836
836
  when 24 then
837
- # line 5 "scan.rl"
837
+ # line 5 "scanner.rl"
838
838
  begin
839
839
  mark_pfx = p end
840
840
  when 2 then
841
- # line 6 "scan.rl"
841
+ # line 6 "scanner.rl"
842
842
  begin
843
843
 
844
844
  if data[mark_pfx..p-1] != @prefix
845
- @nodes.last << data[mark_pfx-1..p]
845
+ closing = data[mark_pfx-1,1] == '/'
846
+ @nodes.last << data[mark_pfx-(closing ? 2 : 1)..p]
846
847
  begin
847
848
  p += 1
848
849
  _goto_level = _out
@@ -852,41 +853,41 @@ ts = p
852
853
  end
853
854
  end
854
855
  when 3 then
855
- # line 12 "scan.rl"
856
+ # line 13 "scanner.rl"
856
857
  begin
857
858
  mark_stg = p end
858
859
  when 4 then
859
- # line 13 "scan.rl"
860
+ # line 14 "scanner.rl"
860
861
  begin
861
862
  @starttag = data[mark_stg..p-1] end
862
863
  when 11 then
863
- # line 14 "scan.rl"
864
+ # line 15 "scanner.rl"
864
865
  begin
865
866
  mark_attr = p end
866
867
  when 15 then
867
- # line 15 "scan.rl"
868
+ # line 16 "scanner.rl"
868
869
  begin
869
870
 
870
871
  @attrs[@nat] = @vat
871
872
  end
872
873
  when 5 then
873
- # line 24 "scan.rl"
874
+ # line 25 "scanner.rl"
874
875
  begin
875
876
  mark_nat = p end
876
877
  when 7 then
877
- # line 25 "scan.rl"
878
+ # line 26 "scanner.rl"
878
879
  begin
879
880
  @nat = data[mark_nat..p-1] end
880
881
  when 8 then
881
- # line 26 "scan.rl"
882
+ # line 27 "scanner.rl"
882
883
  begin
883
884
  mark_vat = p end
884
885
  when 10 then
885
- # line 27 "scan.rl"
886
+ # line 28 "scanner.rl"
886
887
  begin
887
888
  @vat = data[mark_vat..p-1] end
888
889
  when 27 then
889
- # line 78 "scan.rl"
890
+ # line 79 "scanner.rl"
890
891
  begin
891
892
  te = p+1
892
893
  begin
@@ -895,7 +896,7 @@ te = p+1
895
896
  end
896
897
  end
897
898
  when 29 then
898
- # line 78 "scan.rl"
899
+ # line 79 "scanner.rl"
899
900
  begin
900
901
  te = p
901
902
  p = p - 1; begin
@@ -904,7 +905,7 @@ p = p - 1; begin
904
905
  end
905
906
  end
906
907
  when 1 then
907
- # line 78 "scan.rl"
908
+ # line 79 "scanner.rl"
908
909
  begin
909
910
  begin p = ((te))-1; end
910
911
  begin
@@ -941,49 +942,49 @@ p = p - 1; begin
941
942
  end
942
943
  end
943
944
  when 13 then
944
- # line 14 "scan.rl"
945
+ # line 15 "scanner.rl"
945
946
  begin
946
947
  mark_attr = p end
947
- # line 15 "scan.rl"
948
+ # line 16 "scanner.rl"
948
949
  begin
949
950
 
950
951
  @attrs[@nat] = @vat
951
952
  end
952
953
  when 14 then
953
- # line 15 "scan.rl"
954
+ # line 16 "scanner.rl"
954
955
  begin
955
956
 
956
957
  @attrs[@nat] = @vat
957
958
  end
958
- # line 24 "scan.rl"
959
+ # line 25 "scanner.rl"
959
960
  begin
960
961
  mark_nat = p end
961
962
  when 18 then
962
- # line 26 "scan.rl"
963
+ # line 27 "scanner.rl"
963
964
  begin
964
965
  mark_vat = p end
965
- # line 14 "scan.rl"
966
+ # line 15 "scanner.rl"
966
967
  begin
967
968
  mark_attr = p end
968
969
  when 9 then
969
- # line 26 "scan.rl"
970
+ # line 27 "scanner.rl"
970
971
  begin
971
972
  mark_vat = p end
972
- # line 27 "scan.rl"
973
+ # line 28 "scanner.rl"
973
974
  begin
974
975
  @vat = data[mark_vat..p-1] end
975
976
  when 23 then
976
- # line 27 "scan.rl"
977
+ # line 28 "scanner.rl"
977
978
  begin
978
979
  @vat = data[mark_vat..p-1] end
979
- # line 26 "scan.rl"
980
+ # line 27 "scanner.rl"
980
981
  begin
981
982
  mark_vat = p end
982
983
  when 31 then
983
- # line 29 "scan.rl"
984
+ # line 30 "scanner.rl"
984
985
  begin
985
986
  @flavor = :open end
986
- # line 69 "scan.rl"
987
+ # line 70 "scanner.rl"
987
988
  begin
988
989
  te = p
989
990
  p = p - 1; begin
@@ -1002,10 +1003,10 @@ p = p - 1; begin
1002
1003
  end
1003
1004
  end
1004
1005
  when 30 then
1005
- # line 30 "scan.rl"
1006
+ # line 31 "scanner.rl"
1006
1007
  begin
1007
1008
  @flavor = :self end
1008
- # line 69 "scan.rl"
1009
+ # line 70 "scanner.rl"
1009
1010
  begin
1010
1011
  te = p
1011
1012
  p = p - 1; begin
@@ -1024,10 +1025,10 @@ p = p - 1; begin
1024
1025
  end
1025
1026
  end
1026
1027
  when 32 then
1027
- # line 31 "scan.rl"
1028
+ # line 32 "scanner.rl"
1028
1029
  begin
1029
1030
  @flavor = :close end
1030
- # line 69 "scan.rl"
1031
+ # line 70 "scanner.rl"
1031
1032
  begin
1032
1033
  te = p
1033
1034
  p = p - 1; begin
@@ -1050,7 +1051,7 @@ p = p - 1; begin
1050
1051
  begin
1051
1052
  te = p+1
1052
1053
  end
1053
- # line 69 "scan.rl"
1054
+ # line 70 "scanner.rl"
1054
1055
  begin
1055
1056
  act = 1; end
1056
1057
  when 28 then
@@ -1058,29 +1059,29 @@ act = 1; end
1058
1059
  begin
1059
1060
  te = p+1
1060
1061
  end
1061
- # line 78 "scan.rl"
1062
+ # line 79 "scanner.rl"
1062
1063
  begin
1063
1064
  act = 2; end
1064
1065
  when 12 then
1065
- # line 14 "scan.rl"
1066
+ # line 15 "scanner.rl"
1066
1067
  begin
1067
1068
  mark_attr = p end
1068
- # line 15 "scan.rl"
1069
+ # line 16 "scanner.rl"
1069
1070
  begin
1070
1071
 
1071
1072
  @attrs[@nat] = @vat
1072
1073
  end
1073
- # line 24 "scan.rl"
1074
+ # line 25 "scanner.rl"
1074
1075
  begin
1075
1076
  mark_nat = p end
1076
1077
  when 20 then
1077
- # line 26 "scan.rl"
1078
+ # line 27 "scanner.rl"
1078
1079
  begin
1079
1080
  mark_vat = p end
1080
- # line 14 "scan.rl"
1081
+ # line 15 "scanner.rl"
1081
1082
  begin
1082
1083
  mark_attr = p end
1083
- # line 15 "scan.rl"
1084
+ # line 16 "scanner.rl"
1084
1085
  begin
1085
1086
 
1086
1087
  @attrs[@nat] = @vat
@@ -1090,27 +1091,27 @@ act = 2; end
1090
1091
  begin
1091
1092
  te = p+1
1092
1093
  end
1093
- # line 15 "scan.rl"
1094
+ # line 16 "scanner.rl"
1094
1095
  begin
1095
1096
 
1096
1097
  @attrs[@nat] = @vat
1097
1098
  end
1098
- # line 69 "scan.rl"
1099
+ # line 70 "scanner.rl"
1099
1100
  begin
1100
1101
  act = 1; end
1101
1102
  when 19 then
1102
- # line 26 "scan.rl"
1103
+ # line 27 "scanner.rl"
1103
1104
  begin
1104
1105
  mark_vat = p end
1105
- # line 14 "scan.rl"
1106
+ # line 15 "scanner.rl"
1106
1107
  begin
1107
1108
  mark_attr = p end
1108
- # line 15 "scan.rl"
1109
+ # line 16 "scanner.rl"
1109
1110
  begin
1110
1111
 
1111
1112
  @attrs[@nat] = @vat
1112
1113
  end
1113
- # line 24 "scan.rl"
1114
+ # line 25 "scanner.rl"
1114
1115
  begin
1115
1116
  mark_nat = p end
1116
1117
  when 16 then
@@ -1118,15 +1119,15 @@ act = 1; end
1118
1119
  begin
1119
1120
  te = p+1
1120
1121
  end
1121
- # line 14 "scan.rl"
1122
+ # line 15 "scanner.rl"
1122
1123
  begin
1123
1124
  mark_attr = p end
1124
- # line 15 "scan.rl"
1125
+ # line 16 "scanner.rl"
1125
1126
  begin
1126
1127
 
1127
1128
  @attrs[@nat] = @vat
1128
1129
  end
1129
- # line 69 "scan.rl"
1130
+ # line 70 "scanner.rl"
1130
1131
  begin
1131
1132
  act = 1; end
1132
1133
  when 21 then
@@ -1134,21 +1135,21 @@ act = 1; end
1134
1135
  begin
1135
1136
  te = p+1
1136
1137
  end
1137
- # line 26 "scan.rl"
1138
+ # line 27 "scanner.rl"
1138
1139
  begin
1139
1140
  mark_vat = p end
1140
- # line 14 "scan.rl"
1141
+ # line 15 "scanner.rl"
1141
1142
  begin
1142
1143
  mark_attr = p end
1143
- # line 15 "scan.rl"
1144
+ # line 16 "scanner.rl"
1144
1145
  begin
1145
1146
 
1146
1147
  @attrs[@nat] = @vat
1147
1148
  end
1148
- # line 69 "scan.rl"
1149
+ # line 70 "scanner.rl"
1149
1150
  begin
1150
1151
  act = 1; end
1151
- # line 1152 "scan.rb"
1152
+ # line 1153 "scanner.rb"
1152
1153
  end
1153
1154
  end
1154
1155
  end
@@ -1158,7 +1159,7 @@ act = 1; end
1158
1159
  # line 1 "NONE"
1159
1160
  begin
1160
1161
  ts = nil; end
1161
- # line 1162 "scan.rb"
1162
+ # line 1163 "scanner.rb"
1162
1163
  end
1163
1164
 
1164
1165
  if cs == 0
@@ -1187,7 +1188,7 @@ ts = nil; end
1187
1188
  end
1188
1189
  end
1189
1190
 
1190
- # line 120 "scan.rl"
1191
+ # line 121 "scanner.rl"
1191
1192
  return p
1192
1193
  end
1193
1194
  end