xref: /OpenGrok/opengrok-indexer/src/main/jflex/analysis/r/RProductions.lexh (revision d219b4cea555a12b602d2d5518daa22134ad4879)
1*d219b4ceSAdam Hornacek/*
2*d219b4ceSAdam Hornacek * CDDL HEADER START
3*d219b4ceSAdam Hornacek *
4*d219b4ceSAdam Hornacek * The contents of this file are subject to the terms of the
5*d219b4ceSAdam Hornacek * Common Development and Distribution License (the "License").
6*d219b4ceSAdam Hornacek * You may not use this file except in compliance with the License.
7*d219b4ceSAdam Hornacek *
8*d219b4ceSAdam Hornacek * See LICENSE.txt included in this distribution for the specific
9*d219b4ceSAdam Hornacek * language governing permissions and limitations under the License.
10*d219b4ceSAdam Hornacek *
11*d219b4ceSAdam Hornacek * When distributing Covered Code, include this CDDL HEADER in each
12*d219b4ceSAdam Hornacek * file and include the License file at LICENSE.txt.
13*d219b4ceSAdam Hornacek * If applicable, add the following below this CDDL HEADER, with the
14*d219b4ceSAdam Hornacek * fields enclosed by brackets "[]" replaced with your own identifying
15*d219b4ceSAdam Hornacek * information: Portions Copyright [yyyy] [name of copyright owner]
16*d219b4ceSAdam Hornacek *
17*d219b4ceSAdam Hornacek * CDDL HEADER END
18*d219b4ceSAdam Hornacek */
19*d219b4ceSAdam Hornacek
20*d219b4ceSAdam Hornacek/*
21*d219b4ceSAdam Hornacek * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
22*d219b4ceSAdam Hornacek * Portions Copyright (c) 2017, 2019-2020, Chris Fraire <cfraire@me.com>.
23*d219b4ceSAdam Hornacek */
24*d219b4ceSAdam Hornacek
25*d219b4ceSAdam Hornacek<YYINITIAL> {
26*d219b4ceSAdam Hornacek    ^ "#line" / {WhspChar}    {
27*d219b4ceSAdam Hornacek        chkLOC();
28*d219b4ceSAdam Hornacek        offerKeyword(yytext());
29*d219b4ceSAdam Hornacek    }
30*d219b4ceSAdam Hornacek
31*d219b4ceSAdam Hornacek    // Special infix operators with only letters
32*d219b4ceSAdam Hornacek    "%in%" | "%o%" | "%x%" | "%" \p{L}+ "%"    {
33*d219b4ceSAdam Hornacek        offer("%");
34*d219b4ceSAdam Hornacek        offerKeyword(yytext().substring(1, yylength() - 1));
35*d219b4ceSAdam Hornacek        offer("%");
36*d219b4ceSAdam Hornacek    }
37*d219b4ceSAdam Hornacek
38*d219b4ceSAdam Hornacek    // Special infix operators otherwise
39*d219b4ceSAdam Hornacek    "%%" | "%*%" | "%/%" | "%" [\p{L}\p{M}\p{N}\p{P}\p{S}--[\%]]+ "%"    {
40*d219b4ceSAdam Hornacek        offer(yytext());
41*d219b4ceSAdam Hornacek    }
42*d219b4ceSAdam Hornacek
43*d219b4ceSAdam Hornacek    // Special identifiers starting with a dot
44*d219b4ceSAdam Hornacek    "..." | ".." [1-9] {decimal}*    {
45*d219b4ceSAdam Hornacek        offer(yytext());
46*d219b4ceSAdam Hornacek    }
47*d219b4ceSAdam Hornacek
48*d219b4ceSAdam Hornacek    {Identifier}    {
49*d219b4ceSAdam Hornacek        chkLOC();
50*d219b4ceSAdam Hornacek        if (offerSymbol(yytext(), 0, false) && returnOnSymbol()) {
51*d219b4ceSAdam Hornacek            return yystate();
52*d219b4ceSAdam Hornacek        }
53*d219b4ceSAdam Hornacek    }
54*d219b4ceSAdam Hornacek
55*d219b4ceSAdam Hornacek    {Number}    {
56*d219b4ceSAdam Hornacek        chkLOC();
57*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.NUMBER_CLASS, yychar);
58*d219b4ceSAdam Hornacek        offer(yytext());
59*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar + yylength());
60*d219b4ceSAdam Hornacek    }
61*d219b4ceSAdam Hornacek
62*d219b4ceSAdam Hornacek    \'    {
63*d219b4ceSAdam Hornacek        chkLOC();
64*d219b4ceSAdam Hornacek        yypush(QSTRING);
65*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
66*d219b4ceSAdam Hornacek        offer(yytext());
67*d219b4ceSAdam Hornacek    }
68*d219b4ceSAdam Hornacek
69*d219b4ceSAdam Hornacek    \"    {
70*d219b4ceSAdam Hornacek        chkLOC();
71*d219b4ceSAdam Hornacek        yypush(STRING);
72*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
73*d219b4ceSAdam Hornacek        offer(yytext());
74*d219b4ceSAdam Hornacek    }
75*d219b4ceSAdam Hornacek
76*d219b4ceSAdam Hornacek    "#"    {
77*d219b4ceSAdam Hornacek        yypush(SCOMMENT);
78*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.COMMENT_CLASS, yychar);
79*d219b4ceSAdam Hornacek        offer(yytext());
80*d219b4ceSAdam Hornacek    }
81*d219b4ceSAdam Hornacek}
82*d219b4ceSAdam Hornacek
83*d219b4ceSAdam Hornacek<QSTRING> {
84*d219b4ceSAdam Hornacek    \'    {
85*d219b4ceSAdam Hornacek        chkLOC();
86*d219b4ceSAdam Hornacek        offer(yytext());
87*d219b4ceSAdam Hornacek        yypop();
88*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar + yylength());
89*d219b4ceSAdam Hornacek    }
90*d219b4ceSAdam Hornacek}
91*d219b4ceSAdam Hornacek
92*d219b4ceSAdam Hornacek<STRING> {
93*d219b4ceSAdam Hornacek    \"    {
94*d219b4ceSAdam Hornacek        chkLOC();
95*d219b4ceSAdam Hornacek        offer(yytext());
96*d219b4ceSAdam Hornacek        yypop();
97*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar + yylength());
98*d219b4ceSAdam Hornacek    }
99*d219b4ceSAdam Hornacek}
100*d219b4ceSAdam Hornacek
101*d219b4ceSAdam Hornacek<QSTRING, STRING> {
102*d219b4ceSAdam Hornacek    \\[\'\"\\]    {
103*d219b4ceSAdam Hornacek        chkLOC();
104*d219b4ceSAdam Hornacek        offer(yytext());
105*d219b4ceSAdam Hornacek    }
106*d219b4ceSAdam Hornacek
107*d219b4ceSAdam Hornacek    {MaybeWhsp}{EOL}    {
108*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
109*d219b4ceSAdam Hornacek        onEndOfLineMatched(yytext(), yychar);
110*d219b4ceSAdam Hornacek        onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
111*d219b4ceSAdam Hornacek    }
112*d219b4ceSAdam Hornacek}
113*d219b4ceSAdam Hornacek
114*d219b4ceSAdam Hornacek<SCOMMENT> {
115*d219b4ceSAdam Hornacek    {MaybeWhsp}{EOL}    {
116*d219b4ceSAdam Hornacek        yypushback(yylength());
117*d219b4ceSAdam Hornacek        yypop();
118*d219b4ceSAdam Hornacek        onDisjointSpanChanged(null, yychar);
119*d219b4ceSAdam Hornacek    }
120*d219b4ceSAdam Hornacek}
121*d219b4ceSAdam Hornacek
122*d219b4ceSAdam Hornacek<YYINITIAL> {
123*d219b4ceSAdam Hornacek    {MaybeWhsp}{EOL}    {
124*d219b4ceSAdam Hornacek        onEndOfLineMatched(yytext(), yychar);
125*d219b4ceSAdam Hornacek    }
126*d219b4ceSAdam Hornacek}
127*d219b4ceSAdam Hornacek
128*d219b4ceSAdam Hornacek<YYINITIAL, SCOMMENT, QSTRING, STRING> {
129*d219b4ceSAdam Hornacek    // Only one whitespace char at a time.
130*d219b4ceSAdam Hornacek    {WhspChar} | [[\s]--[\n\r]]    {
131*d219b4ceSAdam Hornacek        offer(yytext());
132*d219b4ceSAdam Hornacek    }
133*d219b4ceSAdam Hornacek
134*d219b4ceSAdam Hornacek    // Only one char at a time.
135*d219b4ceSAdam Hornacek    [^\n\r]    {
136*d219b4ceSAdam Hornacek        chkLOC();
137*d219b4ceSAdam Hornacek        offer(yytext());
138*d219b4ceSAdam Hornacek    }
139*d219b4ceSAdam Hornacek}
140*d219b4ceSAdam Hornacek
141*d219b4ceSAdam Hornacek// "string links" and "comment links"
142*d219b4ceSAdam Hornacek<SCOMMENT, QSTRING, STRING> {
143*d219b4ceSAdam Hornacek    {FPath}    {
144*d219b4ceSAdam Hornacek        chkLOC();
145*d219b4ceSAdam Hornacek        if (takeAllContent()) {
146*d219b4ceSAdam Hornacek            onPathlikeMatched(yytext(), '/', false, yychar);
147*d219b4ceSAdam Hornacek        }
148*d219b4ceSAdam Hornacek    }
149*d219b4ceSAdam Hornacek
150*d219b4ceSAdam Hornacek    {File}    {
151*d219b4ceSAdam Hornacek        chkLOC();
152*d219b4ceSAdam Hornacek        if (takeAllContent()) {
153*d219b4ceSAdam Hornacek            String path = yytext();
154*d219b4ceSAdam Hornacek            onFilelikeMatched(path, yychar);
155*d219b4ceSAdam Hornacek        }
156*d219b4ceSAdam Hornacek    }
157*d219b4ceSAdam Hornacek
158*d219b4ceSAdam Hornacek    {FNameChar}+ "@" {FNameChar}+ "." {FNameChar}+    {
159*d219b4ceSAdam Hornacek        chkLOC();
160*d219b4ceSAdam Hornacek        if (takeAllContent()) {
161*d219b4ceSAdam Hornacek            onEmailAddressMatched(yytext(), yychar);
162*d219b4ceSAdam Hornacek        }
163*d219b4ceSAdam Hornacek    }
164*d219b4ceSAdam Hornacek
165*d219b4ceSAdam Hornacek    {BrowseableURI}    {
166*d219b4ceSAdam Hornacek        chkLOC();
167*d219b4ceSAdam Hornacek        if (takeAllContent()) {
168*d219b4ceSAdam Hornacek            onUriMatched(yytext(), yychar, null);
169*d219b4ceSAdam Hornacek        }
170*d219b4ceSAdam Hornacek    }
171*d219b4ceSAdam Hornacek}
172