module hunt.markdown.parser.block.BlockParser;

import hunt.markdown.node.Block;
import hunt.markdown.parser.block.ParserState;
import hunt.markdown.parser.block.BlockContinue;
import hunt.markdown.parser.InlineParser;

/**
 * Parser for a specific block node.
 * <p>
 * Implementations should subclass {@link AbstractBlockParser} instead of implementing this directly.
 */
public interface BlockParser {

    /**
     * Return true if the block that is parsed is a container (contains other blocks), or false if it's a leaf.
     */
    bool isContainer();

    bool canContain(Block childBlock);

    Block getBlock();

    BlockContinue tryContinue(ParserState parserState);

    void addLine(string line);

    void closeBlock();

    void parseInlines(InlineParser inlineParser);

    int opCmp(BlockParser o);

}