use of biblemulticonverter.data.Verse in project BibleMultiConverter by schierlm.
the class RoundtripXML method parseBible.
protected Bible parseBible(JAXBElement<BibleType> sBible) throws Exception {
Bible dBible = new Bible(sBible.getValue().getName());
for (BibleType.Book sBook : sBible.getValue().getBook()) {
Book dBook = new Book(sBook.getAbbr(), BookID.fromOsisId(sBook.getId().replaceAll("-[0-9]+$", "")), sBook.getShortName(), sBook.getLongName());
dBible.getBooks().add(dBook);
for (BibleType.Book.Chapter sChapter : sBook.getChapter()) {
Chapter dChapter = new Chapter();
dBook.getChapters().add(dChapter);
if (sChapter.getProlog() != null) {
dChapter.setProlog(new FormattedText());
parseContent(dChapter.getProlog().getAppendVisitor(), sChapter.getProlog().getContent());
dChapter.getProlog().finished();
}
for (BibleType.Book.Chapter.Verse sVerse : sChapter.getVerse()) {
Verse dVerse = new Verse(sVerse.getNumber());
dChapter.getVerses().add(dVerse);
parseContent(dVerse.getAppendVisitor(), sVerse.getContent());
dVerse.finished();
}
}
}
return dBible;
}
use of biblemulticonverter.data.Verse in project BibleMultiConverter by schierlm.
the class ScrambledDiffable method doExport.
@Override
public void doExport(Bible bible, String... exportArgs) throws Exception {
String outputFile = exportArgs[0];
Scrambler scrambler = new Scrambler(exportArgs.length == 1 ? null : exportArgs[1]);
for (Book book : bible.getBooks()) {
if (book.getId() == BookID.METADATA)
continue;
for (Chapter chapter : book.getChapters()) {
if (chapter.getProlog() != null) {
FormattedText newProlog = new FormattedText();
scrambleText(scrambler, chapter.getProlog(), newProlog);
chapter.setProlog(newProlog);
}
List<Verse> verses = chapter.getVerses();
for (int i = 0; i < verses.size(); i++) {
Verse oldVerse = verses.get(i);
Verse newVerse = new Verse(oldVerse.getNumber());
scrambleText(scrambler, oldVerse, newVerse);
verses.set(i, newVerse);
}
}
}
new Diffable().doExport(bible, new String[] { outputFile });
}
use of biblemulticonverter.data.Verse in project BibleMultiConverter by schierlm.
the class SimpleJSON method doExport.
@Override
public void doExport(Bible bible, String... exportArgs) throws Exception {
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(exportArgs[0]), StandardCharsets.UTF_8))) {
SimpleJSONVisitor sjv = new SimpleJSONVisitor(bw);
bw.write("\t{\"osis\": [{\"osisText\": [{\"osisRefWork\": {\"_value\": \"" + json(bible.getName()) + "\"}," + "\t\t\"header\": [{\"work\": [{");
MetadataBook mdbk = bible.getMetadataBook();
for (MetadataBookKey key : Arrays.asList(MetadataBookKey.title, MetadataBookKey.creator, MetadataBookKey.contributors, MetadataBookKey.identifier, MetadataBookKey.subject, MetadataBookKey.date, MetadataBookKey.description, MetadataBookKey.publisher, MetadataBookKey.type, MetadataBookKey.source, MetadataBookKey.language, MetadataBookKey.coverage, MetadataBookKey.rights)) {
if (key != MetadataBookKey.title)
bw.write(',');
String value = mdbk == null ? null : mdbk.getValue(key);
bw.write("\"" + key.toString() + "\": [{\"_text\": \"" + json(value == null ? "" : value) + "\"}]");
}
bw.write("}]}],\t\"div\": [");
boolean first = true;
for (Book bk : bible.getBooks()) {
if (bk.getChapters().isEmpty() || bk.getChapters().get(0).getVerses().isEmpty()) {
System.out.println("WARNING: Skipping empty book " + bk.getAbbr());
continue;
}
if (!first)
bw.write(',');
bw.write("\t{\"name\": {\"_value\": \"" + json(bk.getLongName()) + "\"},\"osisID\": {\"_value\": \"" + json(bk.getId().getOsisID()) + "\"},\"chapter\": [");
first = true;
for (int ch = 1; ch <= bk.getChapters().size(); ch++) {
if (!first)
bw.write(',');
Chapter cc = bk.getChapters().get(ch - 1);
bw.write("\t{\"cnumber\":" + ch + ",\n\"verse\": [");
first = true;
for (VirtualVerse vv : cc.createVirtualVerses()) {
if (!first)
bw.write(',');
bw.write("\t{\"osisID\": {\"_value\": \"" + json(bk.getId().getOsisID() + "." + ch + "." + vv.getNumber()) + "\"},\"vnumber\":" + vv.getNumber() + ",\"_text\": \"");
for (Verse v : vv.getVerses()) {
if (!v.getNumber().equals("" + vv.getNumber())) {
bw.write(" (" + v.getNumber() + ") ");
}
v.accept(sjv);
}
bw.write("\"}");
first = false;
}
bw.write("]}");
first = false;
}
bw.write("]}");
first = false;
}
bw.write("]}]}]}\n");
}
}
use of biblemulticonverter.data.Verse in project BibleMultiConverter by schierlm.
the class StrippedDiffable method strip.
protected void strip(Bible bible, EnumSet<Feature> chosenFeatures) {
EnumSet<Feature> foundFeatures = EnumSet.noneOf(Feature.class);
for (int i = 0; i < bible.getBooks().size(); i++) {
Book book = bible.getBooks().get(i);
BookID bid = book.getId();
boolean stripBook;
switch(bid) {
case METADATA:
stripBook = isEnabled(Feature.StripMetadataBook, chosenFeatures, foundFeatures);
break;
case INTRODUCTION:
stripBook = isEnabled(Feature.StripIntroductionBooks, chosenFeatures, foundFeatures);
break;
case INTRODUCTION_OT:
// no "shortcut" or here due to side effects of isEnabled!
stripBook = isEnabled(Feature.StripIntroductionBooks, chosenFeatures, foundFeatures) | isEnabled(Feature.StripOldTestament, chosenFeatures, foundFeatures);
break;
case INTRODUCTION_NT:
// no "shortcut" or here due to side effects of isEnabled!
stripBook = isEnabled(Feature.StripIntroductionBooks, chosenFeatures, foundFeatures) | isEnabled(Feature.StripNewTestament, chosenFeatures, foundFeatures);
break;
case APPENDIX:
stripBook = isEnabled(Feature.StripAppendixBook, chosenFeatures, foundFeatures);
break;
case DICTIONARY_ENTRY:
stripBook = isEnabled(Feature.StripDictionaryEntries, chosenFeatures, foundFeatures);
break;
default:
stripBook = isEnabled(bid.isNT() ? Feature.StripNewTestament : Feature.StripOldTestament, chosenFeatures, foundFeatures);
if (bid.isDeuterocanonical())
stripBook = stripBook | isEnabled(Feature.StripDeuterocanonicalBooks, chosenFeatures, foundFeatures);
break;
}
if (stripBook) {
bible.getBooks().remove(i);
i--;
continue;
}
for (Chapter chap : book.getChapters()) {
if (chap.getProlog() != null) {
if (isEnabled(Feature.StripPrologs, chosenFeatures, foundFeatures)) {
chap.setProlog(null);
} else {
FormattedText newProlog = new FormattedText();
chap.getProlog().accept(new StripVisitor(newProlog.getAppendVisitor(), chosenFeatures, foundFeatures));
newProlog.finished();
chap.setProlog(newProlog);
}
}
for (int j = 0; j < chap.getVerses().size(); j++) {
Verse v = chap.getVerses().get(j);
Verse nv = new Verse(v.getNumber());
v.accept(new StripVisitor(nv.getAppendVisitor(), chosenFeatures, foundFeatures));
nv.finished();
chap.getVerses().set(j, nv);
}
}
}
EnumSet<Feature> stripped = EnumSet.copyOf(chosenFeatures);
stripped.retainAll(foundFeatures);
chosenFeatures.removeAll(stripped);
foundFeatures.removeAll(stripped);
printFeatureSet("Features stripped:", stripped);
printFeatureSet("Features to strip not found:", chosenFeatures);
printFeatureSet("Features still present after stripping:", foundFeatures);
}
use of biblemulticonverter.data.Verse in project BibleMultiConverter by schierlm.
the class StrippedDiffable method rearrangeChapterBoundaries.
protected void rearrangeChapterBoundaries(Bible bible) {
for (Book book : bible.getBooks()) {
for (int i = 0; i < book.getChapters().size(); i++) {
Chapter chap = book.getChapters().get(i);
while (chap.getVerses().size() >= 2) {
if (i >= 1 && chap.getVerses().get(0).getNumber().startsWith(i + ",")) {
Verse v = chap.getVerses().remove(0);
Verse nv = new Verse(v.getNumber().substring((i + ",").length()));
v.accept(nv.getAppendVisitor());
nv.finished();
book.getChapters().get(i - 1).getVerses().add(nv);
} else if (i < book.getChapters().size() - 1 && chap.getVerses().get(chap.getVerses().size() - 1).getNumber().startsWith((i + 2) + ",")) {
Verse v = chap.getVerses().remove(chap.getVerses().size() - 1);
Verse nv = new Verse(v.getNumber().substring(((i + 2) + ",").length()));
v.accept(nv.getAppendVisitor());
nv.finished();
book.getChapters().get(i + 1).getVerses().add(0, nv);
} else {
break;
}
}
}
}
}
Aggregations