All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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