package com.floreysoft.jmte.token;
public abstract class AbstractToken implements Token {
protected String text;
protected int line;
protected int column;
protected String sourceName;
private int tokenIndex;
public AbstractToken() {
}
public AbstractToken(AbstractToken token) {
this.text = token.text;
this.line = token.line;
this.column = token.column;
this.sourceName = token.sourceName;
this.setTokenIndex(token.getTokenIndex());
}
public AbstractToken(char[] buffer, int start, int end, int tokenIndex) {
this(null, buffer, start, end, tokenIndex);
}
public AbstractToken(String sourceName, char[] buffer, int start, int end,
int tokenIndex) {
this.setSourceName(sourceName);
setText(buffer, start, end);
setLine(buffer, start, end);
setColumn(buffer, start, end);
this.setTokenIndex(tokenIndex);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getLine() {
return line;
}
public void setLine(int line) {
this.line = line;
}
public int getColumn() {
return column;
}
public void setColumn(int column) {
this.column = column;
}
public void setText(char[] buffer, int start, int end) {
setText(new String(buffer, start, end - start));
}
public void setLine(char[] buffer, int start, int end) {
line = 1;
for (int i = 0; i < start; i++) {
if (buffer[i] == '\n') {
line++;
}
}
}
public void setColumn(char[] buffer, int start, int end) {
column = 0;
if (buffer.length != 0) {
for (int i = start; i >= 0; i--) {
if (buffer[i] == '\n') {
break;
} else {
column++;
}
}
}
}
@Override
public String toString() {
return getText();
}
@Override
public String emit() {
return getText();
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
@Override
public String getSourceName() {
return sourceName;
}
@Override
public int getTokenIndex() {
return tokenIndex;
}
public void setTokenIndex(int tokenIndex) {
this.tokenIndex = tokenIndex;
}
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}