org.unlaxer.TokenEnclosureUtil Maven / Gradle / Ivy
package org.unlaxer;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import org.unlaxer.parser.ParsersSpecifier;
public class TokenEnclosureUtil{
public static Optional getEnclosureWithToken(
Token baseToken,
EnclosureDirection direction ,
CodePointIndex position,
Optional currentToken,
ParsersSpecifier parserSpecifier){
return getEnclosureWithRange(baseToken , direction , position , currentToken.map(x->x.getSource().cursorRange()), parserSpecifier);
}
public static Optional getEnclosureWithRange(
Token baseToken,
EnclosureDirection direction ,
CodePointIndex position,
Optional currentRange,
ParsersSpecifier parserSepcifier){
List collect = baseToken.flatten().stream()
.filter(parserSepcifier::contains)
.filter(token-> token.getSource().cursorRange().match(position))
.filter(token-> {
return currentRange.map(
range->range.relation(token.getSource().cursorRange()) == rangeRelation(direction))
.orElse(token.getSource().cursorRange().match(position));
})
.collect(Collectors.toList());
return collect.isEmpty() ? Optional.empty() :
Optional.of(direction.isInner() ? collect.get(0) : collect.get(collect.size()-1));
}
static RangesRelation rangeRelation(EnclosureDirection enclosureDirection){
return enclosureDirection.isInner()?
RangesRelation.inner :
RangesRelation.outer;
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy