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

org.unlaxer.parser.elementary.WildCardInterleaveParser Maven / Gradle / Ivy

package org.unlaxer.parser.elementary;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

import org.unlaxer.Range;
import org.unlaxer.RangedString;
import org.unlaxer.Token;
import org.unlaxer.TokenKind;
import org.unlaxer.parser.Parser;
import org.unlaxer.parser.Parsers;
import org.unlaxer.parser.combinator.Choice;
import org.unlaxer.parser.combinator.ChoiceInterface;
import org.unlaxer.parser.combinator.LazyZeroOrMore;
import org.unlaxer.util.annotation.TokenExtractor;

public abstract class WildCardInterleaveParser extends LazyZeroOrMore{
  
  abstract List interleaveParsers();
  
  @Override
  public Supplier getLazyParser() {
    Parsers parsers = Parsers.of(interleaveParsers());
    parsers.add(Parser.get(WildCardCharacterParser.class));
    return ()->   new Choice(parsers);
  }
  
  
  @TokenExtractor
  public List getParsedWithConcattedCharcter(Token thisParserParsed) {
    
    List concatted = new ArrayList<>();
    List flatten = thisParserParsed.filteredChildren;
    
    StringBuilder characters = new StringBuilder();
    Integer current = null;
    
    for (Token token : flatten) {
      token = ChoiceInterface.choiced(token);
      if(token.parser instanceof SingleCharacterParser) {
        if(current == null) {
          current = token.tokenRange.startIndexInclusive;
        }
        token.tokenString.ifPresent(characters::append);
      }else {
        if(characters.length()>0) {
          Token token2 = new Token(
              TokenKind.consumed, 
              new RangedString(new Range(current , token.tokenRange.endIndexExclusive), characters.toString()), 
              Parser.get(WildCardStringParser.class)
           );
          concatted.add(token2);
          characters = new StringBuilder();
          current = null;
        }
        concatted.add(token);
      }
    }
    return concatted;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy