package yuku.alkitabconverter.yet;
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import yuku.alkitabconverter.util.KjvUtils;
import yuku.alkitabconverter.util.Rec;
import yuku.alkitabconverter.util.TextDb;
import yuku.alkitabconverter.yes_common.Yes2Common;
import yuku.alkitabconverter.yet.YetFileInput.YetFileInputResult;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class YetToYes2 {
@Parameter private List<String> params = new ArrayList<>();
@Parameter(names = "--help", help = true, description = "Show this help") private boolean help = false;
@Parameter(names = "--no-compress", description = "Disable compression on the resultant yes file") private boolean nocompress = false;
public static void main(String[] args) throws Exception {
YetToYes2 main = new YetToYes2();
JCommander jc = new JCommander(main, args);
if (main.help) {
jc.setProgramName("java -jar YetToYes2.jar");
jc.usage();
System.exit(0);
}
int retval = main.main();
System.exit(retval);
}
private int main() throws Exception {
if (params.size() < 1) {
System.err.println("Usage parameters: <yet-file> [<yes-file>]");
return 1;
}
String yetfile = params.get(0);
String yesfile;
if (params.size() >= 2) {
yesfile = params.get(1);
} else {
yesfile = yetfile.endsWith(".yet") ? (yetfile.substring(0, yetfile.length() - 1) + "s"): yetfile + ".yes";
}
System.err.println("input: " + yetfile);
System.err.println("output: " + yesfile);
YetFileInputResult result = new YetFileInput().parse(yetfile);
if (result == null) {
// error message given by parse above
return 1;
}
if (result.recs == null) {
System.err.println("yet file doesn't contain any verses");
return 1;
} else if (result.infos == null) {
System.err.println("yet file doesn't contain any info");
return 1;
} else if (result.infos.get("longName") == null) {
System.err.println("yet file doesn't contain info 'longName' which is required");
return 1;
} else if (result.bookNames == null) {
System.err.println("yet file doesn't contain any book names");
return 1;
}
{ // check if all book names are available
Set<Integer> books_1 = new HashSet<>();
for (Rec rec: result.recs) {
books_1.add(rec.book_1);
}
for (Integer book_1: books_1) {
String bookName = result.bookNames.get(book_1);
if (bookName == null) {
System.err.println("yet file doesn't contain book name for book " + book_1);
return 1;
}
}
}
Yes2Common.VersionInfo versionInfo = new Yes2Common.VersionInfo();
versionInfo.locale = result.infos.get("locale");
versionInfo.shortName = result.infos.get("shortName");
versionInfo.longName = result.infos.get("longName");
versionInfo.description = result.infos.get("description");
versionInfo.setBookNamesAndAbbreviations(result.getBookNamesAsList(), result.getBookAbbreviationsAsList());
// convert recs to textdb
TextDb textDb = new TextDb();
for (Rec rec: result.recs) {
textDb.append(rec.book_1 - 1, rec.chapter_1, rec.verse_1, rec.text, -1);
if (!KjvUtils.isValidKjv(rec.book_1 - 1, rec.chapter_1, rec.verse_1)) {
System.err.println("warning: is not a valid verse in KJV versification: verse " + rec.book_1 + " " + rec.chapter_1 + " " + rec.verse_1);
}
}
boolean compressed = !nocompress;
Yes2Common.createYesFile(new File(yesfile), versionInfo, textDb, result.pericopeData, compressed, result.xrefEntries, result.footnoteEntries);
return 0;
}
}