/*
* Copyright 2005-2015 by BerryWorks Software, LLC. All rights reserved.
*
* This file is part of EDIReader. You may obtain a license for its use directly from
* BerryWorks Software, and you may also choose to use this software under the terms of the
* GPL version 3. Other products in the EDIReader software suite are available only by licensing
* with BerryWorks. Only those files bearing the GPL statement below are available under the GPL.
*
* EDIReader is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* EDIReader 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with EDIReader. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.berryworks.edireader.tokenizer;
import com.berryworks.edireader.EDISyntaxException;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.List;
public interface Tokenizer extends SourcePosition {
String WHITESPACE = "\n\r \\";
char getTerminator();
void setTerminator(char d);
char getDelimiter();
void setDelimiter(char d);
char getSubDelimiter();
void setSubDelimiter(char sd);
int getRepetitionSeparator();
void setRepetitionSeparator(int e);
void setRelease(int e);
boolean hasMoreTokens() throws IOException, EDISyntaxException;
Token nextToken() throws IOException, EDISyntaxException;
String nextSimpleValue() throws SAXException, IOException;
List<String> nextCompositeElement() throws IOException, EDISyntaxException;
List<String> nextCompositeElement(boolean returnNullAtSegmentEnd) throws IOException, EDISyntaxException;
String nextSimpleValue(boolean required) throws SAXException,
IOException;
int nextIntValue() throws SAXException, IOException;
String nextSegment() throws SAXException, IOException;
String getRecording();
void setRecorder(boolean b);
/**
* Look ahead into the source of input chars and return the next n chars to
* be seen, without disturbing the normal operation of getChar().
*
* @param n number of chars to return
* @return char[] containing upcoming input chars
* @throws IOException for problem reading EDI data
*/
char[] lookahead(int n) throws IOException;
/**
* Returns any chars that have been read from the input stream but not yet
* returned by getChar(). The use of lookahead() is a typical reason for
* this to happen.
*
* @return char[] containing buffered chars of unused input
*/
char[] getBuffered();
char[] getChars(int n) throws IOException, EDISyntaxException;
int getSegmentCount();
int getElementInSegmentCount();
void setWriter(Writer writer);
Token skipSegment() throws SAXException, IOException;
void ungetToken();
String nextSimpleValue(boolean required, boolean returnNullAtSegmentEnd) throws SAXException,
IOException;
void scanTerminatorSuffix() throws IOException;
boolean isEndOfData();
char getSubSubDelimiter();
void setSubSubDelimiter(char ssd);
Reader getReader();
void ungetChar();
/**
* Gets the next character of input.
*
* @throws IOException for problem reading EDI data
*/
void getChar() throws IOException;
}