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) 2005, 2018, Oracle and/or its affiliates. All rights reserved. 22*d219b4ceSAdam Hornacek * Portions Copyright (c) 2017, 2020, Chris Fraire <cfraire@me.com>. 23*d219b4ceSAdam Hornacek */ 24*d219b4ceSAdam Hornacek 25*d219b4ceSAdam Hornacek package org.opengrok.indexer.search.context; 26*d219b4ceSAdam Hornacek 27*d219b4ceSAdam Hornacek import java.io.StringReader; 28*d219b4ceSAdam Hornacek import java.util.HashSet; 29*d219b4ceSAdam Hornacek %% 30*d219b4ceSAdam Hornacek 31*d219b4ceSAdam Hornacek %public 32*d219b4ceSAdam Hornacek %class HistoryLineTokenizer 33*d219b4ceSAdam Hornacek %unicode 34*d219b4ceSAdam Hornacek %function next 35*d219b4ceSAdam Hornacek %type String 36*d219b4ceSAdam Hornacek %ignorecase 37*d219b4ceSAdam Hornacek %char 38*d219b4ceSAdam Hornacek %{ 39*d219b4ceSAdam Hornacek public static final HashSet<String> stopset = new HashSet<String>(); 40*d219b4ceSAdam Hornacek static { 41*d219b4ceSAdam Hornacek stopset.add( "a"); 42*d219b4ceSAdam Hornacek stopset.add( "an"); 43*d219b4ceSAdam Hornacek stopset.add( "and"); 44*d219b4ceSAdam Hornacek stopset.add( "are"); 45*d219b4ceSAdam Hornacek stopset.add( "as"); 46*d219b4ceSAdam Hornacek stopset.add( "at"); 47*d219b4ceSAdam Hornacek stopset.add( "be"); 48*d219b4ceSAdam Hornacek stopset.add( "but"); 49*d219b4ceSAdam Hornacek stopset.add( "by"); 50*d219b4ceSAdam Hornacek stopset.add( "for"); 51*d219b4ceSAdam Hornacek stopset.add( "if"); 52*d219b4ceSAdam Hornacek stopset.add( "in"); 53*d219b4ceSAdam Hornacek stopset.add( "into"); 54*d219b4ceSAdam Hornacek stopset.add( "is"); 55*d219b4ceSAdam Hornacek stopset.add( "it"); 56*d219b4ceSAdam Hornacek stopset.add( "no"); 57*d219b4ceSAdam Hornacek stopset.add( "not"); 58*d219b4ceSAdam Hornacek stopset.add( "of"); 59*d219b4ceSAdam Hornacek stopset.add( "on"); 60*d219b4ceSAdam Hornacek stopset.add( "or"); 61*d219b4ceSAdam Hornacek stopset.add( "s"); 62*d219b4ceSAdam Hornacek stopset.add( "such"); 63*d219b4ceSAdam Hornacek stopset.add( "t"); 64*d219b4ceSAdam Hornacek stopset.add( "that"); 65*d219b4ceSAdam Hornacek stopset.add( "the"); 66*d219b4ceSAdam Hornacek stopset.add( "their"); 67*d219b4ceSAdam Hornacek stopset.add( "then"); 68*d219b4ceSAdam Hornacek stopset.add( "there"); 69*d219b4ceSAdam Hornacek stopset.add( "these"); 70*d219b4ceSAdam Hornacek stopset.add( "they"); 71*d219b4ceSAdam Hornacek stopset.add( "this"); 72*d219b4ceSAdam Hornacek stopset.add( "to"); 73*d219b4ceSAdam Hornacek stopset.add( "was"); 74*d219b4ceSAdam Hornacek stopset.add( "will"); 75*d219b4ceSAdam Hornacek stopset.add( "with"); 76*d219b4ceSAdam Hornacek stopset.add( "/"); 77*d219b4ceSAdam Hornacek stopset.add( "\\"); 78*d219b4ceSAdam Hornacek stopset.add(":"); 79*d219b4ceSAdam Hornacek stopset.add("."); 80*d219b4ceSAdam Hornacek stopset.add("0.0"); 81*d219b4ceSAdam Hornacek stopset.add( "1.0"); 82*d219b4ceSAdam Hornacek } 83*d219b4ceSAdam Hornacek reInit(String str)84*d219b4ceSAdam Hornacek public void reInit(String str) { 85*d219b4ceSAdam Hornacek yyreset(new StringReader(str)); 86*d219b4ceSAdam Hornacek } 87*d219b4ceSAdam Hornacek 88*d219b4ceSAdam Hornacek /** Return the position of the first character in the current token. */ getMatchStart()89*d219b4ceSAdam Hornacek long getMatchStart() { 90*d219b4ceSAdam Hornacek return yychar; 91*d219b4ceSAdam Hornacek } 92*d219b4ceSAdam Hornacek 93*d219b4ceSAdam Hornacek /** Return the position of the first character after the current token. */ getMatchEnd()94*d219b4ceSAdam Hornacek long getMatchEnd() { 95*d219b4ceSAdam Hornacek return yychar + yylength(); 96*d219b4ceSAdam Hornacek } 97*d219b4ceSAdam Hornacek %} 98*d219b4ceSAdam Hornacek 99*d219b4ceSAdam Hornacek Identifier = [a-zA-Z\p{Letter}_] [a-zA-Z\p{Letter}0-9\p{Number}_]* 100*d219b4ceSAdam Hornacek Number = [0-9]+|[0-9]+\.[0-9]+| "0[xX]" [0-9a-fA-F]+ 101*d219b4ceSAdam Hornacek Printable = [\@\$\%\^\&\-+=\?\.\:] 102*d219b4ceSAdam Hornacek 103*d219b4ceSAdam Hornacek %% 104*d219b4ceSAdam Hornacek 105*d219b4ceSAdam Hornacek 106*d219b4ceSAdam Hornacek {Identifier}|{Number}|{Printable} {String m = yytext(); 107*d219b4ceSAdam Hornacek if(stopset.contains(m)) { } else { return(m);}} 108*d219b4ceSAdam Hornacek <<EOF>> { return null;} 109*d219b4ceSAdam Hornacek [^] {} 110