/*
* Ada Sonar Plugin
* Copyright (C) 2010 Akram Ben Aissi
* dev@sonar.codehaus.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.plugins.ada.lexer;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.sonar.api.BatchExtension;
import org.sonar.channel.ChannelDispatcher;
import org.sonar.channel.CodeReader;
/**
*
*/
@SuppressWarnings("unchecked")
public final class PageLexer implements BatchExtension {
/**
* The order of the tokenizers is significant, as they are processed in this order.
*
* TextTokenizer must be last, it will always consume the characters until the next token arrives.
*/
private static List tokenizers = Arrays.asList(
/* HTML Comments */
new CommentTokenizer("--", "\n", true),
/* JSP Comments */
new CommentTokenizer("<%--", "--%>", false),
/* HTML Directive */
// new DoctypeTokenizer("<!DOCTYPE", ">"),
/* XML Directives */
// new DirectiveTokenizer("<?", "?>"),
/* JSP Directives */
// new DirectiveTokenizer("<%@", "%>"),
/* JSP Expressions */
// new ExpressionTokenizer("<%", "%>"),
/* XML and HTML Tags */
// new ElementTokenizer("<", ">"),
/* Text (for everything else) */
new TextTokenizer());
public List<Node> parse(Reader reader) {
// CodeReader reads the file stream
CodeReader codeReader = new CodeReader(reader);
// ArrayList collects the nodes
List<Node> nodeList = new ArrayList<Node>();
// ChannelDispatcher manages the tokenizers
ChannelDispatcher<List<Node>> channelDispatcher = new ChannelDispatcher<List<Node>>(tokenizers);
channelDispatcher.consume(codeReader, nodeList);
// clean up
codeReader.close();
return nodeList;
}
}