Search in sources :

Example 16 with Book

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;
}
Also used : VirtualVerse(biblemulticonverter.data.VirtualVerse) ArrayList(java.util.ArrayList) ObjectFactory(biblemulticonverter.schema.zef2005.ObjectFactory) BookID(biblemulticonverter.data.BookID) Book(biblemulticonverter.data.Book) MetadataBook(biblemulticonverter.data.MetadataBook) Headline(biblemulticonverter.data.FormattedText.Headline) VERS(biblemulticonverter.schema.zef2005.VERS) PROLOG(biblemulticonverter.schema.zef2005.PROLOG) MetadataBook(biblemulticonverter.data.MetadataBook) XMLBIBLE(biblemulticonverter.schema.zef2005.XMLBIBLE) QName(javax.xml.namespace.QName) Chapter(biblemulticonverter.data.Chapter) STYLE(biblemulticonverter.schema.zef2005.STYLE) JAXBElement(javax.xml.bind.JAXBElement) BIBLEBOOK(biblemulticonverter.schema.zef2005.BIBLEBOOK) EnumCaptionType(biblemulticonverter.schema.zef2005.EnumCaptionType) CHAPTER(biblemulticonverter.schema.zef2005.CHAPTER) BigInteger(java.math.BigInteger) CAPTION(biblemulticonverter.schema.zef2005.CAPTION) VirtualVerse(biblemulticonverter.data.VirtualVerse) Verse(biblemulticonverter.data.Verse)

Example 17 with Book

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);
}
Also used : ParatextID(biblemulticonverter.format.paratext.ParatextBook.ParatextID) Book(biblemulticonverter.data.Book) ArrayList(java.util.ArrayList) Chapter(biblemulticonverter.data.Chapter) Verse(biblemulticonverter.data.Verse)

Example 18 with Book

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();
}
Also used : Book(biblemulticonverter.data.Book) Chapter(biblemulticonverter.data.Chapter) Verse(biblemulticonverter.data.Verse)

Example 19 with Book

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));
    }
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) FileWriter(java.io.FileWriter) Diffable(biblemulticonverter.format.Diffable) Chapter(biblemulticonverter.data.Chapter) ArrayList(java.util.ArrayList) BufferedWriter(java.io.BufferedWriter) Book(biblemulticonverter.data.Book) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) File(java.io.File) Verse(biblemulticonverter.data.Verse)

Example 20 with Book

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);
                }
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Chapter(biblemulticonverter.data.Chapter) BufferedWriter(java.io.BufferedWriter) BookID(biblemulticonverter.data.BookID) Book(biblemulticonverter.data.Book) FileOutputStream(java.io.FileOutputStream) MobiPocketBXR(biblemulticonverter.tools.MobiPocketBXR) OutputStreamWriter(java.io.OutputStreamWriter) File(java.io.File) Verse(biblemulticonverter.data.Verse)

Aggregations

Book (biblemulticonverter.data.Book)67 Chapter (biblemulticonverter.data.Chapter)60 Verse (biblemulticonverter.data.Verse)57 FormattedText (biblemulticonverter.data.FormattedText)27 MetadataBook (biblemulticonverter.data.MetadataBook)25 VirtualVerse (biblemulticonverter.data.VirtualVerse)24 BookID (biblemulticonverter.data.BookID)22 ArrayList (java.util.ArrayList)22 File (java.io.File)20 Bible (biblemulticonverter.data.Bible)19 Headline (biblemulticonverter.data.FormattedText.Headline)18 BufferedWriter (java.io.BufferedWriter)16 FileOutputStream (java.io.FileOutputStream)15 IOException (java.io.IOException)14 OutputStreamWriter (java.io.OutputStreamWriter)13 HashMap (java.util.HashMap)10 HashSet (java.util.HashSet)10 Visitor (biblemulticonverter.data.FormattedText.Visitor)9 FileInputStream (java.io.FileInputStream)9 EnumMap (java.util.EnumMap)9