1028N/A/*
1028N/A * CDDL HEADER START
1028N/A *
1028N/A * The contents of this file are subject to the terms of the
1028N/A * Common Development and Distribution License (the "License").
1028N/A * You may not use this file except in compliance with the License.
1028N/A *
1028N/A * See LICENSE.txt included in this distribution for the specific
1028N/A * language governing permissions and limitations under the License.
1028N/A *
1028N/A * When distributing Covered Code, include this CDDL HEADER in each
1028N/A * file and include the License file at LICENSE.txt.
1028N/A * If applicable, add the following below this CDDL HEADER, with the
1028N/A * fields enclosed by brackets "[]" replaced with your own identifying
1028N/A * information: Portions Copyright [yyyy] [name of copyright owner]
1028N/A *
1028N/A * CDDL HEADER END
1028N/A */
1028N/A
1028N/A/*
1380N/A * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
1028N/A */
1028N/Apackage org.opensolaris.opengrok.analysis.python;
1028N/A
1028N/Aimport java.io.IOException;
1028N/Aimport java.io.Reader;
1028N/Aimport java.io.StringReader;
1028N/A
1028N/Aimport org.apache.lucene.analysis.TokenStream;
1028N/Aimport org.apache.lucene.document.Document;
1028N/Aimport org.apache.lucene.document.Field;
1127N/Aimport org.opensolaris.opengrok.analysis.Definitions;
1028N/Aimport org.opensolaris.opengrok.analysis.FileAnalyzerFactory;
1384N/Aimport org.opensolaris.opengrok.analysis.XrefWriter;
1028N/Aimport org.opensolaris.opengrok.analysis.plain.PlainAnalyzer;
1028N/Aimport org.opensolaris.opengrok.configuration.Project;
1028N/Aimport org.opensolaris.opengrok.history.Annotation;
1028N/A
1028N/A/**
1028N/A *
1028N/A * @author Lubos Kosco
1028N/A */
1028N/A
1028N/Apublic class PythonAnalyzer extends PlainAnalyzer {
1028N/A
1028N/A PythonSymbolTokenizer cref;
1028N/A PythonXref xref;
1028N/A Reader dummy = new StringReader("");
1028N/A
1028N/A /** Creates a new instance of PythonAnalyzer */
1028N/A protected PythonAnalyzer(FileAnalyzerFactory factory) {
1028N/A super(factory);
1028N/A cref = new PythonSymbolTokenizer(dummy);
1028N/A xref = new PythonXref(dummy);
1028N/A }
1028N/A
1028N/A @Override
1028N/A public void analyze(Document doc, Reader in) throws IOException {
1028N/A super.analyze(doc, in);
1028N/A doc.add(new Field("refs", dummy));
1190N/A }
1190N/A
1028N/A @Override
1380N/A public TokenStream overridableTokenStream(String fieldName, Reader reader) {
1028N/A if("refs".equals(fieldName)) {
1028N/A cref.reInit(super.content, super.len);
1028N/A return cref;
1028N/A }
1380N/A return super.overridableTokenStream(fieldName, reader);
1028N/A }
1028N/A
1028N/A /**
1028N/A * Write a cross referenced HTML file.
1028N/A * @param out Writer to write HTML cross-reference
1028N/A */
1028N/A @Override
1384N/A public void writeXref(XrefWriter out) throws IOException {
1028N/A xref.reInit(content, len);
1028N/A xref.setDefs(defs);
1028N/A xref.project = project;
1028N/A xref.write(out);
1028N/A }
1190N/A
1028N/A /**
1028N/A * Write a cross referenced HTML file reads the source from in
1028N/A * @param in Input source
1028N/A * @param out Output xref writer
1127N/A * @param defs definitions for the file (could be null)
1028N/A * @param annotation annotation for the file (could be null)
1028N/A */
1384N/A static void writeXref(Reader in, XrefWriter out, Definitions defs, Annotation annotation, Project project) throws IOException {
1028N/A PythonXref xref = new PythonXref(in);
1028N/A xref.annotation = annotation;
1028N/A xref.project = project;
1127N/A xref.setDefs(defs);
1028N/A xref.write(out);
1028N/A }
1028N/A}