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

org.unlaxer.parser.combinator.ContainerParser Maven / Gradle / Ivy

package org.unlaxer.parser.combinator;

import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.stream.Collectors;

import org.unlaxer.CursorRange;
import org.unlaxer.Name;
import org.unlaxer.Parsed;
import org.unlaxer.RangedContent;
import org.unlaxer.Token;
import org.unlaxer.TokenKind;
import org.unlaxer.context.ParseContext;

public abstract class ContainerParser extends NoneChildParser {

	private static final long serialVersionUID = 358784075416463053L;
	
	public ContainerParser() {
		super();
	}

	public ContainerParser(Name name) {
		super(name);
	}

	@Override
	public Parsed parse(ParseContext parseContext, TokenKind tokenKind, boolean invertMatch) {
		Token token = Token.empty(
				tokenKind, 
				parseContext.getCursor(TokenKind.consumed),
				this
		);
		parseContext.getCurrent().addToken(token);
		return new Parsed(token);
	}
	
	public abstract T get();
	
	public abstract RangedContent get(CursorRange position);
	
	@SuppressWarnings("unchecked")
	public static  List> getRangedContents(Token rootToken ){
		return getRangedContents(
				rootToken, 
				(Class>) MethodHandles.lookup().lookupClass());
	}

	public static  List> getRangedContents(Token rootToken ,
		Class> targetContainerParserClass){
		
		return rootToken.flatten().stream()
			.filter(token-> targetContainerParserClass.isInstance(token.parser))
			.map(token->targetContainerParserClass.cast(token.parser).get(token.getSource().cursorRange()))
			.collect(Collectors.toList());
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy