package yuku.alkitabconverter.yes_common; import yuku.alkitabconverter.util.Rec; import yuku.alkitabconverter.yes1.Yes1File; import yuku.alkitabconverter.yes1.Yes1File.InfoEdisi; import yuku.alkitabconverter.yes1.Yes1File.InfoKitab; import yuku.alkitabconverter.yes1.Yes1File.Kitab; import yuku.alkitabconverter.yes1.Yes1File.PerikopBlok; import yuku.alkitabconverter.yes1.Yes1File.PerikopIndex; import yuku.alkitabconverter.yes1.Yes1File.Teks; import java.io.File; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Yes1Common { public static final String TAG = Yes1Common.class.getSimpleName(); public final static Charset ascii = Charset.forName("ascii"); public static Teks teks(List<Rec> xrec, String _encoding) { final ArrayList<String> ss = new ArrayList<>(); for (Rec rec: xrec) { ss.add(rec.text); } return new Teks(_encoding) {{ xisi = ss.toArray(new String[ss.size()]); }}; } public static InfoEdisi infoEdisi(final String _nama, final String _shortName, final String _longName, final int _nkitab, final int _perikopAda, final String _keterangan, final int _encoding, final String _locale) { return new InfoEdisi() {{ versi = 1; nama = _nama; shortName = _shortName; longName = _longName; nkitab = _nkitab; perikopAda = _perikopAda; keterangan = _keterangan; encoding = _encoding; locale = _locale; }}; } public static InfoKitab infoKitab(List<Rec> xrec, String _namafileInputKitab, String _encoding, int _encodingYes) throws Exception { // parse file nama kitab List<String> xnamaKitab = new ArrayList<>(); // indexnya sama dengan kitabPos Scanner sc = new Scanner(new File(_namafileInputKitab)); while (sc.hasNextLine()) { String judul = sc.nextLine().trim(); judul = judul.replace('_', ' '); System.out.println("kitabPos " + xnamaKitab.size() + " judul: " + judul); xnamaKitab.add(judul); } sc.close(); return infoKitab(xrec, _encoding, xnamaKitab); } public static InfoKitab infoKitab(List<Rec> xrec, String _encoding, List<String> xnamaKitab) throws Exception { // sapu xrec, liat ada kitab apa aja List<Integer> xkitab_1 = new ArrayList<>(); for (Rec rec: xrec) { if (!xkitab_1.contains(rec.book_1)) { xkitab_1.add(rec.book_1); } } System.out.println("Total ada " + xkitab_1.size() + " kitab"); final Kitab[] xkitab_ = new Kitab[xkitab_1.size()]; int offsetTotal = 0; int offsetLewat = 0; int maxpasal_1 = 1; int lastpasal_1 = 1; int[] xnayat = new int[256]; int[] xpasal_offset = new int[256]; for (int kitabIndex = 0; kitabIndex < xkitab_1.size(); kitabIndex++) { int kitabPos = xkitab_1.get(kitabIndex) - 1; // kitabPos selalu mulai dari 0 Arrays.fill(xpasal_offset, 0); for (Rec rec: xrec) { if (kitabPos + 1 == rec.book_1) { xnayat[rec.chapter_1 - 1]++; if (rec.chapter_1 > maxpasal_1) { maxpasal_1 = rec.chapter_1; } if (rec.chapter_1 != lastpasal_1) { xpasal_offset[lastpasal_1] = offsetLewat; lastpasal_1 = rec.chapter_1; } offsetLewat += rec.text.getBytes(_encoding).length + 1; // tambah 1 karena '\n' nya } } xpasal_offset[maxpasal_1] = offsetLewat; System.out.println("kitabIndex " + kitabIndex + ", kitabPos " + kitabPos + ":"); Kitab kitab = new Kitab(); kitab.versi = 1; kitab.pos = kitabPos; kitab.nama = xnamaKitab.get(kitabPos); // sama dengan bawah kitab.judul = xnamaKitab.get(kitabPos); // sama dengan atas kitab.npasal = maxpasal_1; kitab.nayat = new int[kitab.npasal]; System.arraycopy(xnayat, 0, kitab.nayat, 0, kitab.npasal); System.out.println("kitab " + kitab.judul + " nayat: " + Arrays.toString(kitab.nayat)); kitab.ayatLoncat = 0; kitab.pasal_offset = new int[kitab.npasal + 1]; System.arraycopy(xpasal_offset, 0, kitab.pasal_offset, 0, kitab.npasal+1); System.out.println("kitab " + kitab.judul + " pasal_offset: " + Arrays.toString(kitab.pasal_offset)); kitab.offset = offsetTotal; System.out.println("kitab " + kitab.judul + " offset: " + kitab.offset); xkitab_[kitabIndex] = kitab; //# reset offsetTotal += offsetLewat; offsetLewat = 0; for (int i = 0; i < xnayat.length; i++) xnayat[i] = 0; maxpasal_1 = 1; lastpasal_1 = 0; } return new InfoKitab() {{ this.xkitab = xkitab_; }}; } public static Yes1File bikinYesFile(final InfoEdisi infoEdisi, final InfoKitab infoKitab, final Teks teks, final PerikopBlok perikopBlok, final PerikopIndex perikopIndex) { return new Yes1File() {{ this.xseksi = new Seksi[] { new Seksi() { @Override public byte[] nama() { return "infoEdisi___".getBytes(ascii); } @Override public IsiSeksi isi() { return infoEdisi; } }, new Seksi() { @Override public byte[] nama() { return "infoKitab___".getBytes(ascii); } @Override public IsiSeksi isi() { return infoKitab; } }, new Seksi() { @Override public byte[] nama() { return "teks________".getBytes(ascii); } @Override public IsiSeksi isi() { return teks; } }, new Seksi() { @Override public byte[] nama() { return "perikopBlok_".getBytes(ascii); } @Override public IsiSeksi isi() { return perikopBlok; } }, new Seksi() { @Override public byte[] nama() { return "perikopIndex".getBytes(ascii); } @Override public IsiSeksi isi() { return perikopIndex; } }, }; }}; } public static Yes1File bikinYesFile(final InfoEdisi infoEdisi, final InfoKitab infoKitab, final Teks teks) { return new Yes1File() {{ this.xseksi = new Seksi[] { new Seksi() { @Override public byte[] nama() { return "infoEdisi___".getBytes(ascii); } @Override public IsiSeksi isi() { return infoEdisi; } }, new Seksi() { @Override public byte[] nama() { return "infoKitab___".getBytes(ascii); } @Override public IsiSeksi isi() { return infoKitab; } }, new Seksi() { @Override public byte[] nama() { return "teks________".getBytes(ascii); } @Override public IsiSeksi isi() { return teks; } }, }; }}; } }