/* ************************************************************************
#
# DivConq
#
# http://divconq.com/
#
# Copyright:
# Copyright 2014 eTimeline, LLC. All rights reserved.
#
# License:
# See the license.txt file in the project's top-level directory for details.
#
# Authors:
# * Andy White
#
************************************************************************ */
package divconq.lang.chars;
import divconq.lang.StringBuilder32;
public class Latin1Decoder implements ICharDecoder {
protected int m_charatcer = 0;
@Override
public int getCharacter() {
return this.m_charatcer;
}
@Override
public boolean needsMore() {
return false;
}
@Override
public int getCharacterAndReset() {
int tchar = this.m_charatcer;
this.reset();
return tchar;
}
@Override
public void reset() {
this.m_charatcer = 0;
}
@Override
public CharSequence processBytes(byte[] values) {
StringBuilder32 sb = new StringBuilder32();
try {
for (int pos = 0; pos < values.length; pos++)
if (!this.readByteNeedMore(values[pos], true))
sb.append(this.getCharacterAndReset());
}
catch (Exception x) {
// TODO
}
return sb;
}
@Override
public boolean readByteNeedMore(byte bch, boolean safe) throws Exception {
int ch = 0xFF & bch;
if (safe && ((ch < (int)0x9) || ((ch < (int)0x20) && (ch > (int)0xD)) || (ch == (int)0x7F)))
throw new Exception("Latin1 decoder encountered an error: Control characters not allowed.");
this.m_charatcer = ch;
return false;
}
}