27
27
*/
28
28
29
29
package org. opensolaris. opengrok. analysis. java;
30
- import org. opensolaris. opengrok. analysis. JFlexXref;
31
- import java. io. IOException;
32
- import java. io. Writer;
33
- import java. io. Reader;
34
- import org. opensolaris. opengrok. web. Util;
35
30
31
+ import org. opensolaris. opengrok. analysis. JFlexXrefSimple;
32
+ import org. opensolaris. opengrok. util. StringUtils;
33
+ import org. opensolaris. opengrok. web. HtmlConsts;
34
+ import org. opensolaris. opengrok. web. Util;
36
35
% %
37
36
%public
38
37
%class JavaXref
39
- %extends JFlexXref
38
+ %extends JFlexXrefSimple
40
39
%unicode
41
- %ignorecase
42
40
%int
43
41
%include CommonXref.lexh
44
42
%{
@@ -52,11 +50,11 @@ import org.opensolaris.opengrok.web.Util;
52
50
protected void setLineNumber(int x) { yyline = x; }
53
51
%}
54
52
55
- Identifier = [ a- zA- Z_ ] [ a - zA - Z0 - 9_ ] +
56
-
57
- File = [ a - zA - Z ] {FNameChar} * "." ( "java" | "properties" | "props" | "xml" | "conf" | "txt" | "htm" | "html" | "ini" | "jnlp" | "jad" | "diff" | "patch" )
58
-
59
- Number = ( 0 [ xX ][ 0 - 9a - fA - F ] +| [ 0 - 9 ] + \. [ 0 - 9 ] +| [ 0 - 9 ] +)(( [ eE ][ + -] ? [ 0 - 9 ] +)? [ ufdlUFDL ] *)?
53
+ File = [ a- zA- Z ] {FNameChar} * "." ( [ Jj ][ Aa ][ Vv ][ Aa ] |
54
+ [ Pp ][ Rr ][ Oo ][ Pp ][ Ee ][ Rr ][ Tt ][ Ii ][ Ee ][ Ss ] | [ Pp ][ Rr ][ Oo ][ Pp ][ Ss ] |
55
+ [ Xx ][ Mm ][ Ll ] | [ Cc ][ Oo ][ Nn ][ Ff ] | [ Tt ][ Xx ][ Tt ] | [ Hh ][ Tt ][ Mm ][ Ll ] ? |
56
+ [ Ii ][ Nn ][ Ii ] | [ Jj ][ Nn ][ Ll ][ Pp ] | [ Jj ][ Aa ][ Dd ] | [ Dd ][ Ii ][ Ff ][ Ff ] |
57
+ [ Pp ][ Aa ][ Tt ][ Cc ][ Hh ] )
60
58
61
59
JavadocWithClassArg = "@throws" | "@exception"
62
60
JavadocWithParamNameArg = "@param"
@@ -69,6 +67,7 @@ ParamName = {Identifier} | "<" {Identifier} ">"
69
67
%include Common.lexh
70
68
%include CommonURI.lexh
71
69
%include CommonPath.lexh
70
+ %include Java.lexh
72
71
%%
73
72
<YYINITIAL> {
74
73
\{ { incScope(); writeUnicodeChar(yycharat(0 )); }
@@ -96,31 +95,57 @@ ParamName = {Identifier} | "<" {Identifier} ">"
96
95
/* {Hier}
97
96
{ out.write(Util.breadcrumbPath(urlPrefix+"defs=",yytext(),'.'));}
98
97
*/
99
- {Number} { out. write(" <span class=\" n\" >" ); out. write(yytext()); out. write(" </span>" ); }
100
-
101
- \" { yybegin(STRING );out. write(" <span class=\" s\" >\" " );}
102
- \' { yybegin(QSTRING );out. write(" <span class=\" s\" >\' " );}
103
- "/**" / [^ /] { yybegin(JAVADOC );out. write(" <span class=\" c\" >/**" );}
104
- "/*" { yybegin(COMMENT );out. write(" <span class=\" c\" >/*" );}
105
- "//" { yybegin(SCOMMENT );out. write(" <span class=\" c\" >//" );}
98
+ {Number} {
99
+ disjointSpan(HtmlConsts . NUMBER_CLASS );
100
+ out. write(yytext());
101
+ disjointSpan(null );
102
+ }
103
+
104
+ \" {
105
+ pushSpan(STRING , HtmlConsts . STRING_CLASS );
106
+ out. write(htmlize(yytext()));
107
+ }
108
+ \' {
109
+ pushSpan(QSTRING , HtmlConsts . STRING_CLASS );
110
+ out. write(htmlize(yytext()));
111
+ }
112
+ "/**" / [^ /] {
113
+ pushSpan(JAVADOC , HtmlConsts . COMMENT_CLASS );
114
+ out. write(yytext());
115
+ }
116
+ "/*" {
117
+ pushSpan(COMMENT , HtmlConsts . COMMENT_CLASS );
118
+ out. write(yytext());
119
+ }
120
+ "//" {
121
+ pushSpan(SCOMMENT , HtmlConsts . COMMENT_CLASS );
122
+ out. write(yytext());
123
+ }
106
124
}
107
125
108
126
<STRING> {
109
- \" {WhiteSpace} \" { out. write(yytext());}
110
- \" { yybegin(YYINITIAL ); out. write(" \" </span>" ); }
111
- \\\\ { out. write(" \\\\ " ); }
112
- \\\" { out. write(" \\\" " ); }
127
+ \\ [ \"\\ ] |
128
+ \" {WhiteSpace} \" { out. write(htmlize(yytext())); }
129
+ \" {
130
+ out. write(htmlize(yytext()));
131
+ yypop();
132
+ }
113
133
}
114
134
115
135
<QSTRING> {
116
- "\\\\ " { out. write(" \\\\ " ); }
117
- "\\\' " { out. write(" \\\' " ); }
118
- \' {WhiteSpace} \' { out. write(yytext()); }
119
- \' { yybegin(YYINITIAL ); out. write(" '</span>" ); }
136
+ \\ [ \'\\ ] |
137
+ \' {WhiteSpace} \' { out. write(htmlize(yytext())); }
138
+ \' {
139
+ out. write(htmlize(yytext()));
140
+ yypop();
141
+ }
120
142
}
121
143
122
144
<COMMENT, JAVADOC> {
123
- "*/" { yybegin(YYINITIAL ); out. write(" */</span>" ); }
145
+ "*/" {
146
+ out. write(yytext());
147
+ yypop();
148
+ }
124
149
}
125
150
126
151
<JAVADOC> {
@@ -140,23 +165,21 @@ ParamName = {Identifier} | "<" {Identifier} ">"
140
165
141
166
<SCOMMENT> {
142
167
{WhspChar} * {EOL} {
143
- yybegin( YYINITIAL ); out . write( " </span> " );
168
+ yypop( );
144
169
startNewLine();
145
170
}
146
171
}
147
172
148
173
149
174
<YYINITIAL, STRING, COMMENT, SCOMMENT, QSTRING, JAVADOC> {
150
- "&" { out. write( " &" );}
151
- "<" { out. write( " <" );}
152
- ">" { out. write( " >" );}
175
+ [ &<>\'\" ] { out. write(htmlize(yytext())); }
153
176
{WhspChar} * {EOL} { startNewLine(); }
154
177
{WhiteSpace} { out. write(yytext()); }
155
178
[ !- ~] { out. write(yycharat(0 )); }
156
179
[^\n] { writeUnicodeChar(yycharat(0 )); }
157
180
}
158
181
159
- <STRING, COMMENT, SCOMMENT, STRING, QSTRING, JAVADOC> {
182
+ <STRING, COMMENT, SCOMMENT, QSTRING, JAVADOC> {
160
183
{FPath}
161
184
{ out. write(Util . breadcrumbPath(urlPrefix+ " path=" ,yytext(),' /' ));}
162
185
@@ -170,12 +193,26 @@ ParamName = {Identifier} | "<" {Identifier} ">"
170
193
out. write(path);
171
194
out. write(" </a>" );}
172
195
173
- {BrowseableURI} {
174
- appendLink(yytext(), true );
175
- }
176
-
177
196
{FNameChar} + "@" {FNameChar} + "." {FNameChar} +
178
197
{
179
198
writeEMailAddress(yytext());
180
199
}
181
200
}
201
+
202
+ <STRING, SCOMMENT> {
203
+ {BrowseableURI} {
204
+ appendLink(yytext(), true );
205
+ }
206
+ }
207
+
208
+ <COMMENT, JAVADOC> {
209
+ {BrowseableURI} {
210
+ appendLink(yytext(), true , StringUtils . END_C_COMMENT );
211
+ }
212
+ }
213
+
214
+ <QSTRING> {
215
+ {BrowseableURI} {
216
+ appendLink(yytext(), true , StringUtils . APOS_NO_BSESC );
217
+ }
218
+ }
0 commit comments