package yuku.alkitabconverter.col;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
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.Teks;
import yuku.alkitabconverter.util.Rec;
public class CuvColProses {
static int edisi_index = -1;
static String getKodeEdisi() {
return new String[] {"cuvs", "cuvt"}[edisi_index];
}
static String getShortTitleEdisi() {
return new String[] {"CUVS", "CUVT"}[edisi_index];
}
static String getJudulEdisi() {
return new String[] {"Chinese Union Version (Simplified)", "Chinese Union Version (Traditional)"}[edisi_index];
}
static String getKeteranganEdisi() {
return "Public domain.";
}
private static String getTeksCol() {
return "../Alkitab/publikasi/" + getKodeEdisi() + "_teks_col.txt";
}
private static String getYesOutput() {
return "../Alkitab/publikasi/" + getKodeEdisi() + ".yes";
}
static final Charset ascii = Charset.forName("ascii");
static final Charset utf8 = Charset.forName("utf-8");
public static void main(String[] args) throws Exception {
edisi_index = Integer.parseInt(args[0]);
ArrayList<Rec> xrec = new ColProses().parse(getTeksCol());
final InfoEdisi infoEdisi = infoEdisi();
final InfoKitab infoKitab = infoKitab(xrec);
final Teks teks = teks(xrec);
Yes1File file = 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;
}
}
};
}};
file.output(new RandomAccessFile(getYesOutput(), "rw"));
}
private static Teks teks(ArrayList<Rec> xrec) {
final ArrayList<String> ss = new ArrayList<>();
for (Rec rec: xrec) {
ss.add(rec.text);
}
return new Teks("utf-8") {{
xisi = ss.toArray(new String[ss.size()]);
}};
}
private static InfoEdisi infoEdisi() {
return new InfoEdisi() {{
versi = 1;
nama = getKodeEdisi();
shortName = getShortTitleEdisi();
longName = getJudulEdisi();
keterangan = getKeteranganEdisi();
nkitab = 66;
perikopAda = 0;
encoding = 2;
}};
}
private static InfoKitab infoKitab(ArrayList<Rec> xrec) throws Exception {
final Kitab[] xkitab_ = new Kitab[66];
String[] xjudul, xnama;
xjudul = new String[66];
xnama = new String[66];
int p = 0;
Scanner sc = new Scanner(new File("../Alkitab/publikasi/" + getKodeEdisi() + "_kitab.txt"));
while (sc.hasNextLine()) {
String judul = sc.nextLine().trim();
if (judul.length() > 0) {
xjudul[p] = judul;
xnama[p] = judul.replaceAll(" ", "_");
p++;
}
}
sc.close();
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 kitabPos = 0; kitabPos < 66; kitabPos++) {
xpasal_offset[0] = 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(utf8).length + 1; // tambah 1 karena '\n' nya
}
}
xpasal_offset[maxpasal_1] = offsetLewat;
Kitab kitab = new Kitab();
kitab.versi = 1;
kitab.pos = kitabPos;
kitab.nama = xnama[kitabPos];
kitab.judul = xjudul[kitabPos];
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.encoding = 1;
kitab.offset = offsetTotal;
System.out.println("kitab " + kitab.judul + " offset: " + kitab.offset);
xkitab_[kitabPos] = 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_;
}};
}
}