radius-ts 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +22 -17
- data/LICENSE +19 -0
- data/README.rdoc +7 -25
- data/Rakefile +8 -34
- data/VERSION +1 -0
- data/lib/radius/parser.rb +17 -6
- data/lib/radius/parser/JavaScanner$Flavor.class +0 -0
- data/lib/radius/parser/JavaScanner$Tag.class +0 -0
- data/lib/radius/parser/JavaScanner.class +0 -0
- data/lib/radius/parser/JavaScanner.java +634 -0
- data/lib/radius/parser/JavaScanner.rl +179 -0
- data/lib/radius/parser/java_scanner.jar +0 -0
- data/lib/radius/parser/scanner.rb +63 -62
- data/lib/radius/parser/scanner.rl +2 -1
- data/lib/radius/parser/squiggle_scanner.rl +125 -0
- data/lib/radius/utility.rb +10 -0
- data/lib/radius/version.rb +5 -11
- data/tasks/jeweler.rake +23 -0
- data/tasks/rdoc.rake +13 -0
- data/tasks/rubinius.rake +4 -0
- data/tasks/scan.rake +25 -2
- data/tasks/test.rake +7 -0
- data/test/benchmarks.rb +35 -0
- data/test/context_test.rb +1 -1
- data/test/multithreaded_test.rb +41 -10
- data/test/parser_test.rb +6 -1
- data/test/quickstart_test.rb +2 -2
- data/test/squiggle_test.rb +6 -1
- data/test/test_helper.rb +5 -1
- data/test/utility_test.rb +30 -0
- metadata +35 -26
- data/Manifest.txt +0 -22
@@ -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 "
|
2
|
+
# line 1 "scanner.rl"
|
3
3
|
|
4
|
-
# line
|
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 "
|
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
|
776
|
+
# line 119 "scanner.rl"
|
777
777
|
|
778
|
-
# line 779 "
|
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
|
788
|
+
# line 120 "scanner.rl"
|
789
789
|
|
790
|
-
# line 791 "
|
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 "
|
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 "
|
837
|
+
# line 5 "scanner.rl"
|
838
838
|
begin
|
839
839
|
mark_pfx = p end
|
840
840
|
when 2 then
|
841
|
-
# line 6 "
|
841
|
+
# line 6 "scanner.rl"
|
842
842
|
begin
|
843
843
|
|
844
844
|
if data[mark_pfx..p-1] != @prefix
|
845
|
-
|
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
|
856
|
+
# line 13 "scanner.rl"
|
856
857
|
begin
|
857
858
|
mark_stg = p end
|
858
859
|
when 4 then
|
859
|
-
# line
|
860
|
+
# line 14 "scanner.rl"
|
860
861
|
begin
|
861
862
|
@starttag = data[mark_stg..p-1] end
|
862
863
|
when 11 then
|
863
|
-
# line
|
864
|
+
# line 15 "scanner.rl"
|
864
865
|
begin
|
865
866
|
mark_attr = p end
|
866
867
|
when 15 then
|
867
|
-
# line
|
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
|
874
|
+
# line 25 "scanner.rl"
|
874
875
|
begin
|
875
876
|
mark_nat = p end
|
876
877
|
when 7 then
|
877
|
-
# line
|
878
|
+
# line 26 "scanner.rl"
|
878
879
|
begin
|
879
880
|
@nat = data[mark_nat..p-1] end
|
880
881
|
when 8 then
|
881
|
-
# line
|
882
|
+
# line 27 "scanner.rl"
|
882
883
|
begin
|
883
884
|
mark_vat = p end
|
884
885
|
when 10 then
|
885
|
-
# line
|
886
|
+
# line 28 "scanner.rl"
|
886
887
|
begin
|
887
888
|
@vat = data[mark_vat..p-1] end
|
888
889
|
when 27 then
|
889
|
-
# line
|
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
|
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
|
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
|
945
|
+
# line 15 "scanner.rl"
|
945
946
|
begin
|
946
947
|
mark_attr = p end
|
947
|
-
# line
|
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
|
954
|
+
# line 16 "scanner.rl"
|
954
955
|
begin
|
955
956
|
|
956
957
|
@attrs[@nat] = @vat
|
957
958
|
end
|
958
|
-
# line
|
959
|
+
# line 25 "scanner.rl"
|
959
960
|
begin
|
960
961
|
mark_nat = p end
|
961
962
|
when 18 then
|
962
|
-
# line
|
963
|
+
# line 27 "scanner.rl"
|
963
964
|
begin
|
964
965
|
mark_vat = p end
|
965
|
-
# line
|
966
|
+
# line 15 "scanner.rl"
|
966
967
|
begin
|
967
968
|
mark_attr = p end
|
968
969
|
when 9 then
|
969
|
-
# line
|
970
|
+
# line 27 "scanner.rl"
|
970
971
|
begin
|
971
972
|
mark_vat = p end
|
972
|
-
# line
|
973
|
+
# line 28 "scanner.rl"
|
973
974
|
begin
|
974
975
|
@vat = data[mark_vat..p-1] end
|
975
976
|
when 23 then
|
976
|
-
# line
|
977
|
+
# line 28 "scanner.rl"
|
977
978
|
begin
|
978
979
|
@vat = data[mark_vat..p-1] end
|
979
|
-
# line
|
980
|
+
# line 27 "scanner.rl"
|
980
981
|
begin
|
981
982
|
mark_vat = p end
|
982
983
|
when 31 then
|
983
|
-
# line
|
984
|
+
# line 30 "scanner.rl"
|
984
985
|
begin
|
985
986
|
@flavor = :open end
|
986
|
-
# line
|
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
|
1006
|
+
# line 31 "scanner.rl"
|
1006
1007
|
begin
|
1007
1008
|
@flavor = :self end
|
1008
|
-
# line
|
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
|
1028
|
+
# line 32 "scanner.rl"
|
1028
1029
|
begin
|
1029
1030
|
@flavor = :close end
|
1030
|
-
# line
|
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
|
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
|
1062
|
+
# line 79 "scanner.rl"
|
1062
1063
|
begin
|
1063
1064
|
act = 2; end
|
1064
1065
|
when 12 then
|
1065
|
-
# line
|
1066
|
+
# line 15 "scanner.rl"
|
1066
1067
|
begin
|
1067
1068
|
mark_attr = p end
|
1068
|
-
# line
|
1069
|
+
# line 16 "scanner.rl"
|
1069
1070
|
begin
|
1070
1071
|
|
1071
1072
|
@attrs[@nat] = @vat
|
1072
1073
|
end
|
1073
|
-
# line
|
1074
|
+
# line 25 "scanner.rl"
|
1074
1075
|
begin
|
1075
1076
|
mark_nat = p end
|
1076
1077
|
when 20 then
|
1077
|
-
# line
|
1078
|
+
# line 27 "scanner.rl"
|
1078
1079
|
begin
|
1079
1080
|
mark_vat = p end
|
1080
|
-
# line
|
1081
|
+
# line 15 "scanner.rl"
|
1081
1082
|
begin
|
1082
1083
|
mark_attr = p end
|
1083
|
-
# line
|
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
|
1094
|
+
# line 16 "scanner.rl"
|
1094
1095
|
begin
|
1095
1096
|
|
1096
1097
|
@attrs[@nat] = @vat
|
1097
1098
|
end
|
1098
|
-
# line
|
1099
|
+
# line 70 "scanner.rl"
|
1099
1100
|
begin
|
1100
1101
|
act = 1; end
|
1101
1102
|
when 19 then
|
1102
|
-
# line
|
1103
|
+
# line 27 "scanner.rl"
|
1103
1104
|
begin
|
1104
1105
|
mark_vat = p end
|
1105
|
-
# line
|
1106
|
+
# line 15 "scanner.rl"
|
1106
1107
|
begin
|
1107
1108
|
mark_attr = p end
|
1108
|
-
# line
|
1109
|
+
# line 16 "scanner.rl"
|
1109
1110
|
begin
|
1110
1111
|
|
1111
1112
|
@attrs[@nat] = @vat
|
1112
1113
|
end
|
1113
|
-
# line
|
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
|
1122
|
+
# line 15 "scanner.rl"
|
1122
1123
|
begin
|
1123
1124
|
mark_attr = p end
|
1124
|
-
# line
|
1125
|
+
# line 16 "scanner.rl"
|
1125
1126
|
begin
|
1126
1127
|
|
1127
1128
|
@attrs[@nat] = @vat
|
1128
1129
|
end
|
1129
|
-
# line
|
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
|
1138
|
+
# line 27 "scanner.rl"
|
1138
1139
|
begin
|
1139
1140
|
mark_vat = p end
|
1140
|
-
# line
|
1141
|
+
# line 15 "scanner.rl"
|
1141
1142
|
begin
|
1142
1143
|
mark_attr = p end
|
1143
|
-
# line
|
1144
|
+
# line 16 "scanner.rl"
|
1144
1145
|
begin
|
1145
1146
|
|
1146
1147
|
@attrs[@nat] = @vat
|
1147
1148
|
end
|
1148
|
-
# line
|
1149
|
+
# line 70 "scanner.rl"
|
1149
1150
|
begin
|
1150
1151
|
act = 1; end
|
1151
|
-
# line
|
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
|
+
# 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
|
1191
|
+
# line 121 "scanner.rl"
|
1191
1192
|
return p
|
1192
1193
|
end
|
1193
1194
|
end
|