1   package org.daisy.pipeline.nlp.calabash.impl;
2   
3   import java.util.function.Predicate;
4   
5   import net.sf.saxon.s9api.QName;
6   import net.sf.saxon.s9api.XdmNode;
7   
8   /**
9    * Encapsulate what the Lexer needs to know about the input format so it can
10   * parse and rebuild the input documents.
11   */
12  public class FormatSpecifications {
13  
14  	public QName sentenceTag;
15  	public QName wordTag;
16  	public QName langAttr;
17  	public Predicate<XdmNode> inlineElements;
18  	public Predicate<XdmNode> ensureWordBefore;
19  	public Predicate<XdmNode> ensureWordAfter;
20  	public Predicate<XdmNode> ensureSentenceBefore;
21  	public Predicate<XdmNode> ensureSentenceAfter;
22  
23  	FormatSpecifications(QName sentenceElement, QName wordElement,
24  	        String langNamespace, String langAttr, Predicate<XdmNode> inlineElements,
25  	        Predicate<XdmNode> ensureWordBefore, Predicate<XdmNode> ensureWordAfter,
26  	        Predicate<XdmNode> ensureSentenceBefore, Predicate<XdmNode> ensureSentenceAfter) {
27  		sentenceTag = sentenceElement;
28  		wordTag = wordElement;
29  		this.langAttr = new QName(langNamespace, langAttr);
30  		this.inlineElements = inlineElements.or(ensureWordBefore)
31  		                                    .or(ensureWordAfter)
32  		                                    .or(ensureSentenceBefore)
33  		                                    .or(ensureSentenceAfter)
34  		                                    .or(x -> wordTag.equals(x.getNodeName()));
35  		this.ensureWordBefore = ensureWordBefore;
36  		this.ensureWordAfter = ensureWordAfter;
37  		this.ensureSentenceBefore = ensureSentenceBefore;
38  		this.ensureSentenceAfter = ensureSentenceAfter;
39  	}
40  }