package com.tyndalehouse.step.tools.osis;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.crosswire.jsword.book.Book;
import org.crosswire.jsword.book.BookData;
import org.crosswire.jsword.book.Books;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.tyndalehouse.step.core.models.InterlinearMode;
import com.tyndalehouse.step.core.models.LookupOption;
import com.tyndalehouse.step.core.service.jsword.impl.JSwordPassageServiceImpl;
import com.tyndalehouse.step.core.utils.TestUtils;
/**
* Reads an osis ref in a module
*
* @author chrisburrell
*
*/
public class InterleavedOsisReader {
private static final Logger LOGGER = LoggerFactory.getLogger(InterleavedOsisReader.class);
/**
* Just shows XML on the stdout
*
* @param args not used
* @throws Exception any kind of exception
*/
public static void main(final String[] args) throws Exception {
final String[] versions = new String[] { "OSMHB", "ESV-THE" };
final String ref = "Mic.5";
final boolean unicodeBreakDown = false;
final boolean compare = true;
final InterlinearMode interlinearMode = InterlinearMode.INTERLEAVED;
boolean format = false;
final Format prettyFormat = format ? Format.getPrettyFormat() : Format.getRawFormat();
final Book currentBook = Books.installed().getBook(versions[0]);
final Book[] books = new Book[versions.length];
for (int ii = 0; ii < versions.length; ii++) {
books[ii] = Books.installed().getBook(versions[ii]);
}
final BookData bookData = new BookData(books, currentBook.getKey(ref), compare);
final Element osisFragment = bookData.getOsisFragment();
final XMLOutputter xmlOutputter = new XMLOutputter(prettyFormat);
final String inputString = xmlOutputter.outputString(osisFragment);
LOGGER.debug(inputString);
if (unicodeBreakDown) {
outputUnicode(inputString);
}
// do the test
final JSwordPassageServiceImpl jsi = new JSwordPassageServiceImpl(
TestUtils.mockVersificationService(), null, null, null, TestUtils.mockVersionResolver(), null);
final List<LookupOption> options = new ArrayList<LookupOption>();
options.add(LookupOption.CHAPTER_BOOK_VERSE_NUMBER);
// options.add(LookupOption.HEADINGS_ONLY);
// options.add(LookupOption.HEADINGS);
// options.add(LookupOption.CHAPTER_BOOK_VERSE_NUMBER);
final String osisText = jsi.getInterleavedVersions(versions, ref, options,
interlinearMode).getValue();
LOGGER.debug(osisText);
final SAXBuilder sb = new SAXBuilder();
// final Document d = sb.build(new StringReader(osisText));
// final String output = xmlOutputter.outputString(d);
// LOGGER.debug("Transformed is:\n {}", output);
if (unicodeBreakDown) {
outputUnicode(osisText);
}
}
public static void outputUnicode(final String s) {
StringBuilder chars = new StringBuilder(16);
StringBuilder intVals = new StringBuilder(16);
for (int ii = 0; ii < s.length(); ii++) {
final char c = s.charAt(ii);
if (c == ' ') {
LOGGER.debug("[{}] => [{}]", chars.toString(), intVals.toString());
chars = new StringBuilder(16);
intVals = new StringBuilder(16);
} else {
chars.append(c);
intVals.append((int) c);
intVals.append(", ");
}
}
}
}