org.biojavax.bio.phylo.io.nexus.NexusBlockParser Maven / Gradle / Ivy
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojavax.bio.phylo.io.nexus;
import org.biojava.bio.seq.io.ParseException;
/**
* Parses Nexus blocks. Each instance should parse tokens into events that can
* be fired at some kind of NexusBlockListener. An Abstract parser is provided
* from which all implementations should derive.
*
* @author Richard Holland
* @author Tobias Thierer
* @author Jim Balhoff
* @since 1.6
*/
public interface NexusBlockParser {
/**
* The name for an unknown block parser.
*/
public static final String UNKNOWN_BLOCK = "__UNKNOWN";
/**
* Notifies the parser that a new block is starting.
*
* @param blockName
* the name of the block.
*/
public void startBlock(String blockName);
/**
* Notifies the parser that a block is ending.
*/
public void endBlock();
/**
* Notifies the parser of the next token. Comment tokens will already have
* been parsed out and sent separately to the text() method of the listener.
* Quoted strings will have been parsed and underscores converted. What this
* token contains is the full string, after removal of quotes if necessary.
* The token will never be only whitespace.
*
* @param token
* the token to parse.
* @throws ParseException
* if the token is unparseable.
*/
public void parseToken(String token) throws ParseException;
/**
* Opening a comment tag.
*/
public void beginComment();
/**
* Closing a comment tag.
*/
public void endComment();
/**
* Closing a line (semi-colon encountered). This indicates that anything
* received after it is on the next logical line of the block.
*/
public void endTokenGroup();
/**
* Receiving free text inside a comment tag.
*
* @param comment
* the text of the comment.
*/
public void commentText(String comment) throws ParseException;
/**
* Obtain the listener for this parser.
*
* @return the listener.
*/
public NexusBlockListener getBlockListener();
/**
* Does the listener want to know about brackets and braces as separate
* tokens?
*
* @return true if it does.
*/
public boolean wantsBracketsAndBraces();
/**
* All block parsers should derive from this abstract parser.
*/
public abstract class Abstract implements NexusBlockParser {
private NexusBlockListener blockListener;
private String blockName;
public Abstract(final NexusBlockListener blockListener) {
this.blockListener = blockListener;
this.blockName = null;
}
public NexusBlockListener getBlockListener() {
return this.blockListener;
}
public void startBlock(final String blockName) {
this.resetStatus();
this.blockName = blockName;
this.blockListener.startBlock(blockName);
}
/**
* This function is called when the parser is reset before starting a
* new block.
*/
protected abstract void resetStatus();
protected String getBlockName() {
return this.blockName;
}
public void endBlock() {
this.blockName = null;
this.blockListener.endBlock();
}
public void beginComment() {
this.blockListener.beginComment();
}
public void endComment() {
this.blockListener.endComment();
}
public void endTokenGroup() {
this.blockListener.endTokenGroup();
}
public void commentText(final String comment) throws ParseException {
this.blockListener.commentText(comment);
}
public abstract void parseToken(final String token)
throws ParseException;
public boolean wantsBracketsAndBraces() {
return false;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy