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