|
@@ -35,7 +35,9 @@ public class PlJavaJSword {
|
|
|
private static final String DEFAULT_VERSIFICATION = "KJV";
|
|
|
private static final Versification kjv = Versifications.instance().getVersification(DEFAULT_VERSIFICATION);
|
|
|
private static final Books BOOKS = Books.installed();
|
|
|
- private static final HashSet<Character> PUNCTUATION = new HashSet<Character>(Arrays.asList('.', ',', ';', ':', '?'));
|
|
|
+ private static final HashSet<Character> PUNCTUATION = new HashSet<Character>(Arrays.asList('.', ',', ';', ':', '?', '!'));
|
|
|
+ private static final HashSet<Character> OPEN_PARENTHESES = new HashSet<Character>(Arrays.asList('[', '('));
|
|
|
+ private static final HashSet<Character> CLOSE_PARENTHESES = new HashSet<Character>(Arrays.asList(']', ')'));
|
|
|
private static final Logger logger = LoggerFactory.getLogger(PlJavaJSword.class);
|
|
|
|
|
|
@Function(onNullInput=RETURNS_NULL, effects=IMMUTABLE, trust=SANDBOXED)
|
|
@@ -55,57 +57,60 @@ public class PlJavaJSword {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
- private static String parseText(String text){
|
|
|
- String t = text.trim();
|
|
|
- if (t.isEmpty() || PUNCTUATION.contains(t.charAt(0))){
|
|
|
- return t;
|
|
|
- } else {
|
|
|
- return " " + t;
|
|
|
- }
|
|
|
- }
|
|
|
- private static String parseVerse(Iterator<Content> content){
|
|
|
- String verse = "";
|
|
|
- while (content.hasNext()){
|
|
|
- Content c = content.next();
|
|
|
- switch (c.getCType()){
|
|
|
- case Element:
|
|
|
- Element e = (Element)c;
|
|
|
- switch (e.getName()){
|
|
|
- case "note":
|
|
|
- break;
|
|
|
- default:
|
|
|
- logger.info(e.getName() + " " + e.getValue());
|
|
|
- verse += " " + parseContent(e.getContent().listIterator());
|
|
|
- }
|
|
|
- break;
|
|
|
- case Text:
|
|
|
- verse += parseText(c.getValue());
|
|
|
- break;
|
|
|
+ private static String join(Iterator<String> parts){
|
|
|
+ String ret = "";
|
|
|
+ while (parts.hasNext()){
|
|
|
+ String part = parts.next().trim();
|
|
|
+ if (part.isEmpty()){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (ret.isEmpty()){
|
|
|
+ ret += part;
|
|
|
+ }
|
|
|
+ else if (OPEN_PARENTHESES.contains(ret.charAt(ret.length()-1))){
|
|
|
+ ret += part;
|
|
|
+ }
|
|
|
+ else if (CLOSE_PARENTHESES.contains(part.charAt(0))){
|
|
|
+ ret += part;
|
|
|
+ }
|
|
|
+ else if (PUNCTUATION.contains(part.charAt(0))){
|
|
|
+ ret += part;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ ret += " " + part;
|
|
|
}
|
|
|
}
|
|
|
- return verse.trim();
|
|
|
+ return ret;
|
|
|
}
|
|
|
private static String parseContent(Iterator<Content> content){
|
|
|
List<String> ret = new ArrayList<String>();
|
|
|
while (content.hasNext()){
|
|
|
Content c = content.next();
|
|
|
+ String part = null;
|
|
|
switch(c.getCType()){
|
|
|
case Element:
|
|
|
Element e = (Element)c;
|
|
|
+ logger.info(e.getName() + " " + e.getValue());
|
|
|
switch (e.getName()){
|
|
|
- case "verse":
|
|
|
- case "q":
|
|
|
- String part = parseVerse(e.getContent().listIterator());
|
|
|
- ret.add(part);
|
|
|
+ case "title":
|
|
|
+ case "note":
|
|
|
+ break;
|
|
|
default:
|
|
|
- logger.warn(e.getName() + " " + e.getValue());
|
|
|
+ part = parseContent(e.getContent().listIterator());
|
|
|
+ ret.add(part);
|
|
|
}
|
|
|
break;
|
|
|
case Text:
|
|
|
- ret.add(parseText(c.getValue()).trim());
|
|
|
+ logger.info("Text: " + c.getValue());
|
|
|
+ part = c.getValue().trim();
|
|
|
+ ret.add(part);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ logger.info(c.getCType() + " " + c.getValue());
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
- return String.join(" ", ret);
|
|
|
+ return join(ret.listIterator());
|
|
|
}
|
|
|
@Function(onNullInput=RETURNS_NULL, effects=IMMUTABLE, trust=SANDBOXED)
|
|
|
public static String getText(String translation, String reference) throws BookException {
|