use of biblemulticonverter.data.Book in project BibleMultiConverter by schierlm.
the class ZefaniaXMLRoundtrip method createXMLBible.
protected XMLBIBLE createXMLBible(Bible bible) throws Exception {
ObjectFactory of = new ObjectFactory();
XMLBIBLE doc = of.createXMLBIBLE();
doc.setBiblename(bible.getName());
doc.setType(EnumModtyp.X_BIBLE);
doc.setINFORMATION(of.createINFORMATION());
MetadataBook metadata = bible.getMetadataBook();
if (metadata != null) {
for (String key : metadata.getKeys()) {
String value = metadata.getValue(key);
if (value.equals("-empty-"))
value = "";
if (key.equals(MetadataBookKey.status.toString())) {
doc.setStatus(EnumStatus.fromValue(value));
} else if (key.equals(MetadataBookKey.version.toString())) {
doc.setVersion(value);
} else if (key.equals(MetadataBookKey.revision.toString())) {
doc.setRevision(new BigInteger(value));
} else if (Arrays.asList(INFORMATION_KEYS).contains(key)) {
doc.getINFORMATION().getTitleOrCreatorOrDescription().add(new JAXBElement<String>(new QName(key), String.class, value));
}
}
}
for (Book bk : bible.getBooks()) {
if (bk.getId().equals(BookID.METADATA))
continue;
if (bk.getId().getZefID() <= 0) {
System.out.println("WARNING: Unable to export book " + bk.getAbbr());
continue;
}
String shortname = removeRoundtripMarker(bk.getShortName());
String longname = removeRoundtripMarker(bk.getLongName());
BookID bookID = bk.getId();
BIBLEBOOK bb = of.createBIBLEBOOK();
bb.setBnumber(BigInteger.valueOf(bookID.getZefID()));
if (!shortname.equals("_" + bookID.getOsisID()))
bb.setBsname(shortname);
if (!longname.equals("_" + bookID.getEnglishName()))
bb.setBname(longname);
int cnumber = 0;
for (Chapter ccc : bk.getChapters()) {
cnumber++;
if (ccc.getVerses().size() == 0)
continue;
CHAPTER cc = of.createCHAPTER();
cc.setCnumber(BigInteger.valueOf(cnumber));
bb.getCHAPTER().add(cc);
if (ccc.getProlog() != null) {
PROLOG prolog = of.createPROLOG();
prolog.setVref(BigInteger.ONE);
ccc.getProlog().accept(new CreateContentVisitor(of, prolog.getContent(), null, 0, null));
cc.getPROLOGOrCAPTIONOrVERS().add(prolog);
}
for (VirtualVerse vv : ccc.createVirtualVerses()) {
for (Headline h : vv.getHeadlines()) {
CAPTION caption = of.createCAPTION();
caption.setVref(BigInteger.valueOf(vv.getNumber()));
h.accept(new CreateContentVisitor(of, caption.getContent(), null, 0, null));
EnumCaptionType[] types = new EnumCaptionType[] { null, EnumCaptionType.X_H_1, EnumCaptionType.X_H_2, EnumCaptionType.X_H_3, EnumCaptionType.X_H_4, EnumCaptionType.X_H_5, EnumCaptionType.X_H_6, null, null, null };
caption.setType(types[h.getDepth()]);
cc.getPROLOGOrCAPTIONOrVERS().add(caption);
}
List<Object> remarksAndXrefs = new ArrayList<Object>();
VERS vers = of.createVERS();
vers.setVnumber(BigInteger.valueOf(vv.getNumber()));
for (Verse v : vv.getVerses()) {
if (!v.getNumber().equals("" + vv.getNumber())) {
STYLE verseNum = of.createSTYLE();
verseNum.setCss("font-weight: bold");
verseNum.getContent().add("(" + v.getNumber() + ")");
vers.getContent().add(new JAXBElement<STYLE>(new QName("STYLE"), STYLE.class, verseNum));
vers.getContent().add(" ");
}
v.accept(new CreateContentVisitor(of, vers.getContent(), remarksAndXrefs, vv.getNumber(), null));
}
cc.getPROLOGOrCAPTIONOrVERS().add(vers);
cc.getPROLOGOrCAPTIONOrVERS().addAll(remarksAndXrefs);
}
}
doc.getBIBLEBOOK().add(bb);
}
return doc;
}
use of biblemulticonverter.data.Book in project BibleMultiConverter by schierlm.
the class AbstractParatextFormat method doExport.
@Override
public void doExport(Bible bible, String... exportArgs) throws Exception {
List<ParatextBook> books = new ArrayList<>();
for (Book bk : bible.getBooks()) {
ParatextID pid = ParatextID.fromBookID(bk.getId());
if (pid == null) {
System.out.println("WARNING: Skipping unsupported book " + bk.getId());
continue;
}
ParatextBook book = new ParatextBook(pid, bible.getName());
books.add(book);
book.getAttributes().put("toc1", bk.getLongName());
book.getAttributes().put("toc2", bk.getShortName());
book.getAttributes().put("toc3", bk.getAbbr());
ParatextExportContext ctx = new ParatextExportContext(book);
for (int cnum = 1; cnum <= bk.getChapters().size(); cnum++) {
Chapter ch = bk.getChapters().get(cnum - 1);
if (cnum > 1)
ctx.startChapter(cnum);
if (ch.getProlog() != null) {
ch.getProlog().accept(new ParatextExportVisitor("in prolog", bk.getId().isNT(), ctx, null, cnum == 1 ? ParagraphKind.INTRO_PARAGRAPH_P : ParagraphKind.CHAPTER_DESCRIPTION, null));
}
if (cnum == 1)
ctx.startChapter(cnum);
for (Verse v : ch.getVerses()) {
v.accept(new ParatextExportVisitor("in verse", bk.getId().isNT(), ctx, null, ParagraphKind.PARAGRAPH_P, v.getNumber()));
}
}
}
doExportBooks(books, exportArgs);
}
use of biblemulticonverter.data.Book in project BibleMultiConverter by schierlm.
the class Validate method printHeadlines.
private void printHeadlines(Bible bible) throws IOException {
HeadlineSummaryVisitor hsv = new HeadlineSummaryVisitor();
for (Book b : bible.getBooks()) {
int cnumber = 0;
for (Chapter c : b.getChapters()) {
cnumber++;
if (c.getProlog() != null) {
hsv.setCurrentVerse(b.getAbbr() + " " + cnumber + " (Prolog)");
c.getProlog().accept(hsv);
}
for (Verse v : c.getVerses()) {
hsv.setCurrentVerse(b.getAbbr() + " " + cnumber + ":" + v.getNumber());
v.accept(hsv);
}
}
}
hsv.printVerseRange();
}
use of biblemulticonverter.data.Book in project BibleMultiConverter by schierlm.
the class Validate method doExport.
@Override
public void doExport(Bible bible, String... exportArgs) throws Exception {
Map<String, Set<String>> dictionaryEntries = null;
if (exportArgs.length > 0 && exportArgs[0].equals("IncludeExternalRefs")) {
dictionaryEntries = new HashMap<String, Set<String>>();
for (int i = 1; i < exportArgs.length; i++) {
String ref = exportArgs[i];
if (ref.startsWith("S"))
ref = "Lstrongs=" + ref.substring(1);
if (ref.startsWith("B")) {
for (Book baseBook : new Diffable().doImport(new File(ref.substring(1))).getBooks()) {
if (baseBook.getId().getZefID() < 0)
continue;
Book book = null;
for (Book oldBook : bible.getBooks()) {
if (oldBook.getId().equals(baseBook.getId())) {
book = oldBook;
break;
}
}
if (book == null) {
book = new Book(baseBook.getAbbr(), baseBook.getId(), "$BBL$" + baseBook.getAbbr(), "$BBL$" + baseBook.getAbbr());
bible.getBooks().add(book);
}
for (int ch = 0; ch < baseBook.getChapters().size(); ch++) {
for (Verse v : baseBook.getChapters().get(ch).getVerses()) {
while (book.getChapters().size() <= ch) book.getChapters().add(new Chapter());
Chapter c = book.getChapters().get(ch);
boolean verseFound = false;
for (Verse vv : c.getVerses()) {
if (vv.getNumber().equals(v.getNumber())) {
verseFound = true;
break;
}
}
if (!verseFound) {
Verse vv = new Verse(v.getNumber());
vv.getAppendVisitor().visitText("X");
vv.finished();
c.getVerses().add(vv);
}
}
}
}
} else if (ref.startsWith("L")) {
if (ref.contains("=")) {
int pos = ref.indexOf('=');
Set<String> entryList = new HashSet<>();
try (BufferedReader br = new BufferedReader(new FileReader(ref.substring(pos + 1)))) {
String line;
while ((line = br.readLine()) != null) {
entryList.add(line);
}
}
dictionaryEntries.put(ref.substring(1, pos), entryList);
} else {
Set<String> entryList = new HashSet<>();
for (Book bk : bible.getBooks()) {
if (bk.getId().equals(BookID.DICTIONARY_ENTRY)) {
entryList.add(bk.getAbbr());
}
}
dictionaryEntries.put(ref.substring(1), entryList);
}
} else if (ref.startsWith("X")) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(ref.substring(1)))) {
for (Book bk : bible.getBooks()) {
if (bk.getId().equals(BookID.DICTIONARY_ENTRY)) {
bw.write(bk.getAbbr());
bw.newLine();
}
}
}
} else {
System.out.println("WARNING: external reference: " + ref);
}
}
exportArgs = new String[0];
}
List<String> danglingReferences = new ArrayList<>();
bible.validate(danglingReferences, dictionaryEntries);
if (danglingReferences.size() > 0) {
System.out.println("Dangling references: ");
for (String reference : danglingReferences) {
System.out.println("\t" + reference);
}
System.out.println();
}
if (exportArgs.length == 1 && exportArgs[0].equals("PrintSpecialVerseSummary")) {
System.out.println("Special verse numbers:");
printSpecialVerseNumbers(bible);
} else if (exportArgs.length == 1 && exportArgs[0].equals("PrintHeadlines")) {
System.out.println("Headlines:");
printHeadlines(bible);
} else if (exportArgs.length > 0) {
System.out.println("WARNING: Unsupported arguments: " + Arrays.toString(exportArgs));
}
}
use of biblemulticonverter.data.Book in project BibleMultiConverter by schierlm.
the class MobiPocket method doExport.
@Override
public void doExport(Bible bible, String... exportArgs) throws Exception {
footNotes.setLength(0);
crossRefs.setLength(0);
footNoteCount = 0;
chapref = "";
File exportFile = new File(exportArgs[0]);
String title = bible.getName();
File directory = exportFile.getParentFile();
String filename = exportFile.getName();
try (final BufferedWriter opfw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(directory, filename + ".opf")), "UTF-8"))) {
opfw.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + "<package unique-identifier=\"uid\">\r\n" + " <metadata>\r\n" + " <dc-metadata xmlns:dc=\"http://purl.org/metadata/dublin_core\" xmlns:oebpackage=\"http://openebook.org/namespaces/oeb-package/1.0/\">\r\n" + " <dc:Title>" + TITLEPREFIX + title + "</dc:Title>\r\n" + " <dc:Language>" + LANGUAGE + "</dc:Language>\r\n" + " </dc-metadata>\r\n" + " <x-metadata>\r\n" + " <DatabaseName>Bible" + filename + "</DatabaseName>\r\n" + " <output encoding=\"Windows-1252\"></output>\r\n" + " </x-metadata>\r\n" + " </metadata>\r\n" + " <manifest>\r\n" + " <item id=\"onlyfile\" media-type=\"text/x-oeb1-document\" href=\"" + filename + ".html\"></item>\r\n" + " </manifest>\r\n" + " <spine>\r\n" + " <itemref idref=\"onlyfile\" />\r\n" + " </spine>\r\n" + " <tours></tours>\r\n" + " <guide></guide>\r\n" + "</package>\r\n" + "");
}
boolean isDictionary = false;
for (Book bk : bible.getBooks()) {
if (bk.getId() == BookID.DICTIONARY_ENTRY) {
isDictionary = true;
break;
} else if (bk.getId().getZefID() > 0) {
isDictionary = false;
break;
}
}
try (final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(directory, filename + ".html")), "UTF-8"))) {
bw.write("<html><head>");
bw.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">");
bw.write("<style type=\"text/css\">body {font-family: Verdana, Arial, Helvetica, sans-serif}</style>");
bw.write("<title>" + TITLEPREFIX + title + "</title></head><body>");
bw.newLine();
bw.write("<h1>" + title + "</h1>");
if (isDictionary) {
bw.write("<a onclick=\"index_search()\">Suchen</a><br>");
}
bw.write("<h2>" + TOC + "</h2>");
bw.newLine();
List<String> books = new ArrayList<String>();
Map<String, Integer> maxChapter = new HashMap<String, Integer>();
Map<String, BookID> bookIDs = new HashMap<String, BookID>();
for (Book bk : bible.getBooks()) {
books.add(bk.getAbbr());
if (isDictionary) {
bw.write("<p><a href=\"#" + bk.getAbbr() + "\">" + bk.getLongName() + "</a></p>");
} else {
bw.write("<p><a href=\"#b" + bookRef(bk) + "\">" + bk.getLongName() + " (" + bk.getAbbr() + ")</a></p>");
}
bw.newLine();
maxChapter.put(bk.getAbbr(), bk.getChapters().size());
bookIDs.put(bk.getAbbr(), bk.getId());
}
try (final BufferedWriter bxw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(directory, filename + ".bxr")), "UTF-8"))) {
bxw.write(title);
bxw.newLine();
for (String bk : books) {
bxw.write(bk + "|" + bookRef(bk, bookIDs.get(bk)) + "|" + maxChapter.get(bk));
bxw.newLine();
}
}
bxrs.add(new MobiPocketBXR(filename, new File(directory, filename + ".bxr")));
final String lexiconName = (isDictionary ? "Bible" : "BibleDict") + filename;
for (Book bk : bible.getBooks()) {
if (bk.getId() == BookID.DICTIONARY_ENTRY) {
bw.write("<mbp:pagebreak><idx:entry>");
bw.newLine();
bw.write("<h2><a name=\"" + bk.getAbbr() + "\" external=\"yes\"><idx:orth>" + bk.getLongName() + "</idx:orth></a></h2>");
bw.newLine();
bw.write("<p>");
bw.newLine();
writeVerse(bw, bk.getChapters().get(0).getProlog(), bible, "", lexiconName);
bw.write("</p>");
bw.newLine();
writeFootNotes(bw);
bw.write("</idx:entry>");
} else {
bw.write("<mbp:pagebreak>");
bw.newLine();
chapref = "b" + bookRef(bk);
bw.write("<h2><a name=\"" + chapref + "\" external=\"yes\">" + bk.getLongName() + " (" + bk.getAbbr() + ")</a> (<a href=\"oeb:redirect?title=BibleNavigation#" + chapref + "\">Navigation</a>)</h2>");
bw.newLine();
int chapter = 0;
for (Chapter ch : bk.getChapters()) {
chapter++;
chapref = "b" + bookRef(bk) + "c" + chapter;
bw.write("<h3><a name=\"" + chapref + "\" external=\"yes\">" + bk.getAbbr() + " " + chapter + "</a> (<a href=\"oeb:redirect?title=BibleNavigation#" + chapref + "\">Navigation</a>)</h3>");
bw.newLine();
if (ch.getProlog() != null) {
bw.write("<small>");
bw.newLine();
writeVerse(bw, ch.getProlog(), bible, "", lexiconName);
bw.write("</small>");
bw.newLine();
}
for (final Verse v : ch.getVerses()) {
writeVerse(bw, v, bible, "<b>" + v.getNumber() + "</b> ", lexiconName);
}
writeFootNotes(bw);
}
}
}
}
}
Aggregations