Search in sources :

Example 1 with STYLE

use of biblemulticonverter.schema.haggai.STYLE in project BibleMultiConverter by schierlm.

the class HaggaiXML method parseContent.

private boolean parseContent(Visitor<RuntimeException> visitor, List<? extends Object> contentList, Map<BookID, String> abbrMap) throws IOException {
    boolean contentFound = false;
    for (Object n : contentList) {
        if (n instanceof String) {
            String value = normalize((String) n, false);
            visitor.visitText(value);
            contentFound |= value.trim().length() > 0;
        } else if (n instanceof JAXBElement<?>) {
            String name = ((JAXBElement<?>) n).getName().toString();
            Object nn = ((JAXBElement<?>) n).getValue();
            if (name.equals("STYLE") && nn instanceof STYLE) {
                TStyleFix fs = ((STYLE) nn).getFs();
                FormattingInstructionKind kind;
                switch(fs) {
                    case BOLD:
                        kind = FormattingInstructionKind.BOLD;
                        break;
                    case DIVINE_NAME:
                        kind = FormattingInstructionKind.DIVINE_NAME;
                        break;
                    case EMPHASIS:
                    case ITALIC:
                        kind = FormattingInstructionKind.ITALIC;
                        break;
                    case LINE_THROUGH:
                        kind = FormattingInstructionKind.STRIKE_THROUGH;
                        break;
                    case SUB:
                        kind = FormattingInstructionKind.SUBSCRIPT;
                        break;
                    case SUPER:
                        kind = FormattingInstructionKind.SUPERSCRIPT;
                        break;
                    case UNDERLINE:
                        kind = FormattingInstructionKind.UNDERLINE;
                        break;
                    case UPPERCASE:
                    case ACROSTIC:
                    case ILLUMINATED:
                    case LOWERCASE:
                    case NORMAL:
                    case OVERLINE:
                    case SMALL_CAPS:
                    default:
                        kind = null;
                        break;
                }
                if (kind == null)
                    throw new IOException(fs.toString());
                Visitor<RuntimeException> contentVisitor = visitor;
                if (kind != null) {
                    contentVisitor = contentVisitor.visitFormattingInstruction(kind);
                }
                List<Serializable> content = ((STYLE) nn).getContent();
                boolean subContentFound = parseContent(contentVisitor, content, abbrMap);
                if (!subContentFound)
                    visitEmptyMarker(contentVisitor);
            } else if ((name.equals("gr") || name.equals("GRAM")) && nn instanceof GRAM) {
                GRAM gram = (GRAM) nn;
                Visitor<RuntimeException> strongVisitor = visitor;
                int[] strongs = null;
                if (gram.getStr() != null) {
                    List<String> strongList = new ArrayList<String>(Arrays.asList(gram.getStr().trim().replaceAll(" ++", " ").replace("G", "").replace("H", "").split(" ")));
                    for (int i = 0; i < strongList.size(); i++) {
                        if (!strongList.get(i).matches("[0-9]+")) {
                            System.out.println("WARNING: Skipping invalid Strong number " + strongList.get(i));
                            strongList.remove(i);
                            i--;
                        }
                    }
                    strongs = new int[strongList.size()];
                    for (int i = 0; i < strongs.length; i++) {
                        strongs[i] = Integer.parseInt(strongList.get(i));
                    }
                }
                String[] rmac = null;
                if (gram.getRmac() != null && gram.getRmac().length() > 0) {
                    List<String> rmacList = new ArrayList<String>(Arrays.asList(gram.getRmac().toUpperCase().split(" ")));
                    for (int i = 0; i < rmacList.size(); i++) {
                        String rmacValue = rmacList.get(i);
                        if (rmacValue.endsWith("-"))
                            rmacValue = rmacValue.substring(0, rmacValue.length() - 1);
                        rmacList.set(i, rmacValue);
                        if (!rmacValue.matches(Utils.RMAC_REGEX)) {
                            System.out.println("WARNING: Skipping invalid RMAC: " + rmacValue);
                            rmacList.remove(i);
                            i--;
                        }
                        rmac = (String[]) rmacList.toArray(new String[rmacList.size()]);
                    }
                }
                if (strongs != null && strongs.length == 0)
                    strongs = null;
                if (rmac != null && rmac.length == 0)
                    rmac = null;
                if (strongs != null || rmac != null)
                    strongVisitor = strongVisitor.visitGrammarInformation(strongs, rmac, null);
                if (!parseContent(strongVisitor, gram.getContent(), abbrMap) && strongVisitor != visitor) {
                    visitEmptyMarker(strongVisitor);
                }
            } else if (name.equals("NOTE") && nn instanceof NOTE) {
                NOTE note = (NOTE) nn;
                if (note.getContent().size() == 0)
                    continue;
                Visitor<RuntimeException> v;
                v = visitor.visitFootnote();
                boolean subContentFound = parseContent(v, note.getContent(), abbrMap);
                if (!subContentFound)
                    visitEmptyMarker(v);
                contentFound = true;
            } else if (name.equals("BR")) {
                visitor.visitLineBreak(LineBreakKind.NEWLINE);
                contentFound = true;
            } else {
                throw new IOException(name);
            }
            contentFound = true;
        } else {
            throw new IOException(n.getClass().toString());
        }
    }
    return contentFound;
}
Also used : Visitor(biblemulticonverter.data.FormattedText.Visitor) STYLE(biblemulticonverter.schema.haggai.STYLE) ArrayList(java.util.ArrayList) FormattingInstructionKind(biblemulticonverter.data.FormattedText.FormattingInstructionKind) JAXBElement(javax.xml.bind.JAXBElement) IOException(java.io.IOException) GRAM(biblemulticonverter.schema.haggai.GRAM) NOTE(biblemulticonverter.schema.haggai.NOTE) List(java.util.List) ArrayList(java.util.ArrayList) TStyleFix(biblemulticonverter.schema.haggai.TStyleFix)

Example 2 with STYLE

use of biblemulticonverter.schema.haggai.STYLE in project BibleMultiConverter by schierlm.

the class HaggaiXML method createXMLBible.

protected XMLBIBLE createXMLBible(Bible bible) throws Exception {
    ObjectFactory of = new ObjectFactory();
    XMLBIBLE doc = of.createXMLBIBLE();
    doc.setBiblename(bible.getName());
    doc.setINFORMATION(new JAXBElement<INFORMATION>(new QName("INFORMATION"), INFORMATION.class, 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(ModuleStatus.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 (!key.contains("@")) {
                Pattern regex = INFORMATION_FIELDS.get(MetadataBookKey.valueOf(key));
                if (regex != null && regex.matcher(value).matches())
                    doc.getINFORMATION().getValue().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;
        }
        BIBLEBOOK bb = of.createBIBLEBOOK();
        bb.setBnumber(BigInteger.valueOf(bk.getId().getZefID()));
        bb.setBsname(bk.getShortName());
        bb.setBname(bk.getLongName());
        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.getCAPTIONOrPROLOGOrREMARK().add(new JAXBElement<CHAPTER>(new QName("CHAPTER"), CHAPTER.class, cc));
            if (ccc.getProlog() != null) {
                PROLOG prolog = of.createPROLOG();
                ccc.getProlog().accept(new CreateContentVisitor(of, prolog.getContent(), null));
                cc.getCAPTIONOrPARAGRAPHOrVERSE().add(new JAXBElement<PROLOG>(new QName("PROLOG"), PROLOG.class, prolog));
            }
            for (VirtualVerse vv : ccc.createVirtualVerses()) {
                for (Headline h : vv.getHeadlines()) {
                    CAPTION caption = of.createCAPTION();
                    h.accept(new CreateContentVisitor(of, caption.getContent(), null));
                    cc.getCAPTIONOrPARAGRAPHOrVERSE().add(new JAXBElement<CAPTION>(new QName("CAPTION"), CAPTION.class, caption));
                }
                VERSE vers = of.createVERSE();
                vers.setVnumber(BigInteger.valueOf(vv.getNumber()));
                for (Verse v : vv.getVerses()) {
                    if (!v.getNumber().equals("" + vv.getNumber())) {
                        STYLE verseNum = of.createSTYLE();
                        verseNum.setFs(TStyleFix.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(), vers));
                }
                cc.getCAPTIONOrPARAGRAPHOrVERSE().add(new JAXBElement<VERSE>(new QName("VERSE"), VERSE.class, vers));
            }
        }
        doc.getBIBLEBOOK().add(new JAXBElement<BIBLEBOOK>(new QName("BIBLEBOOK"), BIBLEBOOK.class, bb));
    }
    return doc;
}
Also used : VirtualVerse(biblemulticonverter.data.VirtualVerse) VERSE(biblemulticonverter.schema.haggai.VERSE) ObjectFactory(biblemulticonverter.schema.haggai.ObjectFactory) Book(biblemulticonverter.data.Book) MetadataBook(biblemulticonverter.data.MetadataBook) Headline(biblemulticonverter.data.FormattedText.Headline) PROLOG(biblemulticonverter.schema.haggai.PROLOG) MetadataBook(biblemulticonverter.data.MetadataBook) Pattern(java.util.regex.Pattern) XMLBIBLE(biblemulticonverter.schema.haggai.XMLBIBLE) INFORMATION(biblemulticonverter.schema.haggai.INFORMATION) QName(javax.xml.namespace.QName) Chapter(biblemulticonverter.data.Chapter) STYLE(biblemulticonverter.schema.haggai.STYLE) BIBLEBOOK(biblemulticonverter.schema.haggai.BIBLEBOOK) CHAPTER(biblemulticonverter.schema.haggai.CHAPTER) BigInteger(java.math.BigInteger) CAPTION(biblemulticonverter.schema.haggai.CAPTION) VirtualVerse(biblemulticonverter.data.VirtualVerse) Verse(biblemulticonverter.data.Verse)

Aggregations

STYLE (biblemulticonverter.schema.haggai.STYLE)2 Book (biblemulticonverter.data.Book)1 Chapter (biblemulticonverter.data.Chapter)1 FormattingInstructionKind (biblemulticonverter.data.FormattedText.FormattingInstructionKind)1 Headline (biblemulticonverter.data.FormattedText.Headline)1 Visitor (biblemulticonverter.data.FormattedText.Visitor)1 MetadataBook (biblemulticonverter.data.MetadataBook)1 Verse (biblemulticonverter.data.Verse)1 VirtualVerse (biblemulticonverter.data.VirtualVerse)1 BIBLEBOOK (biblemulticonverter.schema.haggai.BIBLEBOOK)1 CAPTION (biblemulticonverter.schema.haggai.CAPTION)1 CHAPTER (biblemulticonverter.schema.haggai.CHAPTER)1 GRAM (biblemulticonverter.schema.haggai.GRAM)1 INFORMATION (biblemulticonverter.schema.haggai.INFORMATION)1 NOTE (biblemulticonverter.schema.haggai.NOTE)1 ObjectFactory (biblemulticonverter.schema.haggai.ObjectFactory)1 PROLOG (biblemulticonverter.schema.haggai.PROLOG)1 TStyleFix (biblemulticonverter.schema.haggai.TStyleFix)1 VERSE (biblemulticonverter.schema.haggai.VERSE)1 XMLBIBLE (biblemulticonverter.schema.haggai.XMLBIBLE)1