class Luce::BlockParser

Overview

Maintains the internal state needed to parse a series of lines into blocks of Markdown suitable for further inline parsing.

Defined in:

luce/block_parser.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(lines : Array(Luce::Line), document : Luce::Document) #

Instance Method Detail

def advance : Nil #

Advance the reading position by one line


def block_syntaxes : Array(Luce::BlockSyntax) #

The enabled block syntaxes

To turn a series of lines into blocks, each of these will be tried in turn. Order matters here.


def current : Line #

Return the current line


def current_syntax : BlockSyntax | Nil #

The BlockSyntax which is running now. The value is nil until we found the first matched BlockSyntax.


def document : Document #

The Markdown document this parser is parsing


def done? : Bool #

def encountered_blank_line : Bool #

Whether the parser has encountered a blank line between two block-level elements.

DEPRECATED Use #encountered_blank_line? instead. Remove at version 1.0.


def encountered_blank_line=(encountered_blank_line : Bool) #

Whether the parser has encountered a blank line between two block-level elements.


def encountered_blank_line? : Bool #

Whether the parser has encountered a blank line between two block-level elements.


def lines : Array(Line) #

def lines_to_consume : Array(Line) #

The lines from @start to @pos (inclusive), it works as a buffer for some blocks, for example: When the ParagraphSyntax parsing process is interrupted by the SetextHeaderSyntax, so this structure is not a paragraph but a setext heading, then the ParagraphSyntax#parse does not have to retreat the reading position, it only needs to return nil, the SetextHeaderSyntax will pick up the lines in #lines_to_consume.


def matches?(regex : Regex) : Bool #

Return if the current line matches the given regex or not.


def matches_next?(regex : Regex) : Bool #

Return if the next line matches the given regex or not.


def next : Line | Nil #

Return the line after the current one or nil if there is none.


def parent_syntax : BlockSyntax | Nil #

The parent BlockSyntax when it is running inside a nested syntax.


def parse_lines(parent_syntax : BlockSyntax | Nil = nil, disable_setext_heading : Bool = false) : Array(Node) #

def peek(lines_ahead : Int32) : Line | Nil #

Return the line that is lines_ahead lines ahead of the current one, or nil if there is none.

Note that #peek(0) is equivalent to #current, and #peek(1) is equivalent to #next.


def previous_syntax : BlockSyntax | Nil #

The BlockSyntax which is running before the #current_syntax.


def retreat : Nil #

Retreats the reading position by one line


def retreat_by(count : Int32) : Nil #

Retreats the reading position by count lines.


def setext_heading_disabled? : Bool #

Whether the BlockSyntax is disabled temporarily.


def standard_block_syntaxes : Array(Luce::BlockSyntax) #

The collection of built-in block parsers