package yuku.alkitab.base.storage; import yuku.alkitab.io.Utf8Decoder; import java.util.ArrayList; public class OldVerseTextDecoder { public static class Ascii implements VerseTextDecoder { private void lowercase(byte[] ba) { for (int i = 0, blen = ba.length; i < blen; i++) { byte b = ba[i]; if (b <= (byte)'Z' && b >= (byte)'A') { ba[i] |= 0x20; } } } @Override public String[] separateIntoVerses(byte[] ba, boolean lowercased) { ArrayList<String> versesBuf = new ArrayList<>(60); char[] verseBuf = new char[4000]; int i = 0; if (lowercased) { lowercase(ba); } //# WARNING: This will work only if all bytes are less than 0x80. for (byte c : ba) { if (c == (byte) 0x0a) { String single = new String(verseBuf, 0, i); versesBuf.add(single); i = 0; } else { verseBuf[i++] = (char) c; } } return versesBuf.toArray(new String[versesBuf.size()]); } @SuppressWarnings("deprecation") @Override public String makeIntoSingleString(byte[] ba, boolean lowercased) { if (lowercased) { lowercase(ba); } return new String(ba, 0); } } public static class Utf8 implements VerseTextDecoder { @Override public String[] separateIntoVerses(byte[] ba, boolean lowercased) { ArrayList<String> versesBuf = new ArrayList<>(60); int len = ba.length; int from = 0; for (int pos = 0; pos < len; pos++) { byte c = ba[pos]; if (c == (byte)0x0a) { String single; if (lowercased) { single = Utf8Decoder.toStringLowerCase(ba, from, pos - from); } else { single = Utf8Decoder.toString(ba, from, pos - from); } versesBuf.add(single); from = pos + 1; } } return versesBuf.toArray(new String[versesBuf.size()]); } @Override public String makeIntoSingleString(byte[] ba, boolean lowercased) { String res; if (lowercased) { res = Utf8Decoder.toStringLowerCase(ba); } else { res = Utf8Decoder.toString(ba); } return res; } } }