xref: /OpenGrok/opengrok-indexer/src/main/jflex/analysis/golang/GolangXref.lex (revision 903e9098726cde53097d6288ffdc171ddd231f14)
1d219b4ceSAdam Hornacek /*
2d219b4ceSAdam Hornacek  * CDDL HEADER START
3d219b4ceSAdam Hornacek  *
4d219b4ceSAdam Hornacek  * The contents of this file are subject to the terms of the
5d219b4ceSAdam Hornacek  * Common Development and Distribution License (the "License").
6d219b4ceSAdam Hornacek  * You may not use this file except in compliance with the License.
7d219b4ceSAdam Hornacek  *
8d219b4ceSAdam Hornacek  * See LICENSE.txt included in this distribution for the specific
9d219b4ceSAdam Hornacek  * language governing permissions and limitations under the License.
10d219b4ceSAdam Hornacek  *
11d219b4ceSAdam Hornacek  * When distributing Covered Code, include this CDDL HEADER in each
12d219b4ceSAdam Hornacek  * file and include the License file at LICENSE.txt.
13d219b4ceSAdam Hornacek  * If applicable, add the following below this CDDL HEADER, with the
14d219b4ceSAdam Hornacek  * fields enclosed by brackets "[]" replaced with your own identifying
15d219b4ceSAdam Hornacek  * information: Portions Copyright [yyyy] [name of copyright owner]
16d219b4ceSAdam Hornacek  *
17d219b4ceSAdam Hornacek  * CDDL HEADER END
18d219b4ceSAdam Hornacek  */
19d219b4ceSAdam Hornacek 
20d219b4ceSAdam Hornacek /*
21d219b4ceSAdam Hornacek  * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved.
22d219b4ceSAdam Hornacek  * Portions Copyright (c) 2017, Chris Fraire <cfraire@me.com>.
23d219b4ceSAdam Hornacek  */
24d219b4ceSAdam Hornacek 
25d219b4ceSAdam Hornacek /*
26d219b4ceSAdam Hornacek  * Cross reference a Golang file
27d219b4ceSAdam Hornacek  */
28d219b4ceSAdam Hornacek 
29d219b4ceSAdam Hornacek package org.opengrok.indexer.analysis.golang;
30d219b4ceSAdam Hornacek 
31d219b4ceSAdam Hornacek import java.io.IOException;
32d219b4ceSAdam Hornacek import org.opengrok.indexer.analysis.JFlexSymbolMatcher;
33d219b4ceSAdam Hornacek import org.opengrok.indexer.util.StringUtils;
34d219b4ceSAdam Hornacek import org.opengrok.indexer.web.HtmlConsts;
35d219b4ceSAdam Hornacek 
36d219b4ceSAdam Hornacek /**
37d219b4ceSAdam Hornacek  * @author Patrick Lundquist
38d219b4ceSAdam Hornacek  */
39d219b4ceSAdam Hornacek %%
40d219b4ceSAdam Hornacek %public
41d219b4ceSAdam Hornacek %class GolangXref
42d219b4ceSAdam Hornacek %extends JFlexSymbolMatcher
43d219b4ceSAdam Hornacek %unicode
44d219b4ceSAdam Hornacek %int
45d219b4ceSAdam Hornacek %char
46d219b4ceSAdam Hornacek %include ../CommonLexer.lexh
47d219b4ceSAdam Hornacek %include ../CommonXref.lexh
48d219b4ceSAdam Hornacek %{
49d219b4ceSAdam Hornacek     @Override
yypop()50d219b4ceSAdam Hornacek     public void yypop() throws IOException {
51d219b4ceSAdam Hornacek         onDisjointSpanChanged(null, yychar);
52d219b4ceSAdam Hornacek         super.yypop();
53d219b4ceSAdam Hornacek     }
54d219b4ceSAdam Hornacek 
chkLOC()55d219b4ceSAdam Hornacek     protected void chkLOC() {
56d219b4ceSAdam Hornacek         switch (yystate()) {
57d219b4ceSAdam Hornacek             case COMMENT:
58d219b4ceSAdam Hornacek             case SCOMMENT:
59d219b4ceSAdam Hornacek                 break;
60d219b4ceSAdam Hornacek             default:
61d219b4ceSAdam Hornacek                 phLOC();
62d219b4ceSAdam Hornacek                 break;
63d219b4ceSAdam Hornacek         }
64d219b4ceSAdam Hornacek     }
65d219b4ceSAdam Hornacek %}
66d219b4ceSAdam Hornacek 
67d219b4ceSAdam Hornacek File = [a-zA-Z]{FNameChar}* "." ([Gg][Oo] | [Tt][Xx][Tt] | [Hh][Tt][Mm][Ll]? |
68d219b4ceSAdam Hornacek     [Dd][Ii][Ff][Ff] | [Pp][Aa][Tt][Cc][Hh])
69d219b4ceSAdam Hornacek 
70d219b4ceSAdam Hornacek %state STRING COMMENT SCOMMENT QSTRING
71d219b4ceSAdam Hornacek 
72d219b4ceSAdam Hornacek %include ../Common.lexh
73d219b4ceSAdam Hornacek %include ../CommonURI.lexh
74d219b4ceSAdam Hornacek %include ../CommonPath.lexh
75d219b4ceSAdam Hornacek %include Golang.lexh
76d219b4ceSAdam Hornacek %%
77d219b4ceSAdam Hornacek <YYINITIAL> {
78d219b4ceSAdam Hornacek     {Identifier} {
79d219b4ceSAdam Hornacek         chkLOC();
80d219b4ceSAdam Hornacek         String id = yytext();
81d219b4ceSAdam Hornacek         onFilteredSymbolMatched(id, yychar, Consts.kwd);
82d219b4ceSAdam Hornacek     }
83d219b4ceSAdam Hornacek     {Number}     {
84d219b4ceSAdam Hornacek         chkLOC();
85d219b4ceSAdam Hornacek         onDisjointSpanChanged(HtmlConsts.NUMBER_CLASS, yychar);
86d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
87d219b4ceSAdam Hornacek         onDisjointSpanChanged(null, yychar);
88d219b4ceSAdam Hornacek     }
89d219b4ceSAdam Hornacek     \"           {
90d219b4ceSAdam Hornacek         chkLOC();
91d219b4ceSAdam Hornacek         yypush(STRING);
92d219b4ceSAdam Hornacek         onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
93d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
94d219b4ceSAdam Hornacek     }
95d219b4ceSAdam Hornacek     \'           {
96d219b4ceSAdam Hornacek         chkLOC();
97d219b4ceSAdam Hornacek         yypush(QSTRING);
98d219b4ceSAdam Hornacek         onDisjointSpanChanged(HtmlConsts.STRING_CLASS, yychar);
99d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
100d219b4ceSAdam Hornacek     }
101d219b4ceSAdam Hornacek     "/*"         {
102d219b4ceSAdam Hornacek         yypush(COMMENT);
103d219b4ceSAdam Hornacek         onDisjointSpanChanged(HtmlConsts.COMMENT_CLASS, yychar);
104d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
105d219b4ceSAdam Hornacek     }
106d219b4ceSAdam Hornacek     "//"         {
107d219b4ceSAdam Hornacek         yypush(SCOMMENT);
108d219b4ceSAdam Hornacek         onDisjointSpanChanged(HtmlConsts.COMMENT_CLASS, yychar);
109d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
110d219b4ceSAdam Hornacek     }
111d219b4ceSAdam Hornacek }
112d219b4ceSAdam Hornacek 
113d219b4ceSAdam Hornacek "<" ({File}|{FPath}) ">" {
114d219b4ceSAdam Hornacek     chkLOC();
115d219b4ceSAdam Hornacek     onNonSymbolMatched("<", yychar);
116d219b4ceSAdam Hornacek     String path = yytext();
117d219b4ceSAdam Hornacek     path = path.substring(1, path.length() - 1);
118d219b4ceSAdam Hornacek     onFilelikeMatched(path, yychar + 1);
119d219b4ceSAdam Hornacek     onNonSymbolMatched(">", yychar + 1 + path.length());
120d219b4ceSAdam Hornacek }
121d219b4ceSAdam Hornacek 
122d219b4ceSAdam Hornacek <STRING> {
123d219b4ceSAdam Hornacek     \\[\"\\] |
124d219b4ceSAdam Hornacek     \" {WhspChar}+ \"    { chkLOC(); onNonSymbolMatched(yytext(), yychar); }
125d219b4ceSAdam Hornacek     \"    {
126d219b4ceSAdam Hornacek         chkLOC();
127d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
128d219b4ceSAdam Hornacek         yypop();
129d219b4ceSAdam Hornacek     }
130d219b4ceSAdam Hornacek }
131d219b4ceSAdam Hornacek 
132d219b4ceSAdam Hornacek <QSTRING> {
133d219b4ceSAdam Hornacek     \\[\'\\] |
134d219b4ceSAdam Hornacek     \' {WhspChar}+ \'    { chkLOC(); onNonSymbolMatched(yytext(), yychar); }
135d219b4ceSAdam Hornacek     \'    {
136d219b4ceSAdam Hornacek         chkLOC();
137d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
138d219b4ceSAdam Hornacek         yypop();
139d219b4ceSAdam Hornacek     }
140d219b4ceSAdam Hornacek }
141d219b4ceSAdam Hornacek 
142d219b4ceSAdam Hornacek <COMMENT> {
143d219b4ceSAdam Hornacek     "*/"    {
144d219b4ceSAdam Hornacek         onNonSymbolMatched(yytext(), yychar);
145d219b4ceSAdam Hornacek         yypop();
146d219b4ceSAdam Hornacek     }
147d219b4ceSAdam Hornacek }
148d219b4ceSAdam Hornacek 
149d219b4ceSAdam Hornacek <SCOMMENT> {
150d219b4ceSAdam Hornacek     {WhspChar}*{EOL}    {
151d219b4ceSAdam Hornacek         yypop();
152d219b4ceSAdam Hornacek         onEndOfLineMatched(yytext(), yychar);
153d219b4ceSAdam Hornacek     }
154d219b4ceSAdam Hornacek }
155d219b4ceSAdam Hornacek 
156d219b4ceSAdam Hornacek <YYINITIAL, STRING, COMMENT, SCOMMENT, QSTRING> {
157d219b4ceSAdam Hornacek     {WhspChar}*{EOL}   { onEndOfLineMatched(yytext(), yychar); }
158d219b4ceSAdam Hornacek     [[\s]--[\n]]       { onNonSymbolMatched(yytext(), yychar); }
159d219b4ceSAdam Hornacek     [^\n]              { chkLOC(); onNonSymbolMatched(yytext(), yychar); }
160d219b4ceSAdam Hornacek }
161d219b4ceSAdam Hornacek 
162d219b4ceSAdam Hornacek <STRING, COMMENT, SCOMMENT, QSTRING> {
163d219b4ceSAdam Hornacek     {FPath}    {
164d219b4ceSAdam Hornacek         chkLOC();
165d219b4ceSAdam Hornacek         onPathlikeMatched(yytext(), '/', false, yychar);
166d219b4ceSAdam Hornacek     }
167d219b4ceSAdam Hornacek     {File} {
168d219b4ceSAdam Hornacek         chkLOC();
169d219b4ceSAdam Hornacek         String path = yytext();
170d219b4ceSAdam Hornacek         onFilelikeMatched(path, yychar);
171d219b4ceSAdam Hornacek     }
172d219b4ceSAdam Hornacek     {FNameChar}+ "@" {FNameChar}+ "." {FNameChar}+    {
173d219b4ceSAdam Hornacek         chkLOC();
174*903e9098SAdam Hornacek         onEmailAddressMatched(yytext(), yychar);
175d219b4ceSAdam Hornacek     }
176d219b4ceSAdam Hornacek }
177d219b4ceSAdam Hornacek 
178d219b4ceSAdam Hornacek <STRING, SCOMMENT> {
179d219b4ceSAdam Hornacek     {BrowseableURI}    {
180d219b4ceSAdam Hornacek         chkLOC();
181d219b4ceSAdam Hornacek         onUriMatched(yytext(), yychar);
182d219b4ceSAdam Hornacek     }
183d219b4ceSAdam Hornacek }
184d219b4ceSAdam Hornacek 
185d219b4ceSAdam Hornacek <COMMENT> {
186d219b4ceSAdam Hornacek     {BrowseableURI}    {
187d219b4ceSAdam Hornacek         onUriMatched(yytext(), yychar, StringUtils.END_C_COMMENT);
188d219b4ceSAdam Hornacek     }
189d219b4ceSAdam Hornacek }
190d219b4ceSAdam Hornacek 
191d219b4ceSAdam Hornacek <QSTRING> {
192d219b4ceSAdam Hornacek     {BrowseableURI}    {
193d219b4ceSAdam Hornacek         chkLOC();
194d219b4ceSAdam Hornacek         onUriMatched(yytext(), yychar, StringUtils.APOS_NO_BSESC);
195d219b4ceSAdam Hornacek     }
196d219b4ceSAdam Hornacek }
197