org.unlaxer.parser.combinator.WhiteSpaceDelimitedChain Maven / Gradle / Ivy
package org.unlaxer.parser.combinator;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.unlaxer.Name;
import org.unlaxer.Parsed;
import org.unlaxer.TokenKind;
import org.unlaxer.context.ParseContext;
import org.unlaxer.parser.HasChildrenParser;
import org.unlaxer.parser.Parser;
import org.unlaxer.parser.elementary.SpaceDelimitor;
import org.unlaxer.reducer.TagBasedReducer.NodeKind;
public class WhiteSpaceDelimitedChain extends Chain {
private static final long serialVersionUID = 7516040092056055656L;
static final SpaceDelimitor spaceDelimitor = new SpaceDelimitor();
static {
spaceDelimitor.addTag(NodeKind.notNode.getTag());
}
public WhiteSpaceDelimitedChain(List children) {
super(setup(children));
}
@SafeVarargs
public WhiteSpaceDelimitedChain(Parser... children) {
super(setup(children));
}
public WhiteSpaceDelimitedChain(Name name, List children) {
super(name, setup(children));
}
public WhiteSpaceDelimitedChain(Name name, Parser... children) {
super(name, setup(children));
}
@Override
public Parsed parse(ParseContext parseContext, TokenKind tokenKind, boolean invertMatch) {
return super.parse(parseContext, tokenKind, invertMatch);
}
@Override
public WhiteSpaceDelimitedChain newFiltered(Predicate cutFilter){
Predicate passFilter = cutFilter.negate();
List newChildren = getChildren().stream()
.filter(passFilter)
.collect(Collectors.toList());
return new WhiteSpaceDelimitedChain(getName() , newChildren);
}
@Override
public HasChildrenParser createWith(List children) {
return new WhiteSpaceDelimitedChain(getName() , children);
}
static Parser[] setup(Parser...parsers) {
Parser[] newParsers = new Parser[parsers.length * 2 +1];
int i = 0;
newParsers[i++] = spaceDelimitor;
for (Parser parser : parsers) {
newParsers[i++] = parser;
newParsers[i++] = spaceDelimitor;
}
return newParsers;
}
static List setup(List parsers) {
List results = new ArrayList<>();
results.add(spaceDelimitor);
for (Parser parser : parsers) {
results.add(parser);
results.add(spaceDelimitor);
}
return results;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy