laika.bundle

package laika.bundle

Type members

Classlikes

Builder API for block parsers.

Builder API for block parsers.

The entry points provide access to the parsers for child blocks (recursive), child spans (withSpans) or escape sequences (withEscapedText). These are methods with decreasing power, as the parser for recursive blocks does also provide the span parsers.

If your parser implementation is completely independent from the host markup language you can use the standalone method.

Builds a block parser definition lazily by passing the recursive parsers of the host language.

Builds a block parser definition lazily by passing the recursive parsers of the host language.

case class BlockParserBuilderOps(parserFactory: RecursiveParsers => Parser[Block], recursive: Boolean, position: BlockPosition, precedence: Precedence, paragraphLineCheck: Option[PrefixedParser[Any]]) extends BlockParserBuilder

Builder API for block parsers that allows to set the parser precedence.

Builder API for block parsers that allows to set the parser precedence.

case class BlockParserDefinition(startChars: Set[Char], parser: Parser[Block], isRecursive: Boolean, position: BlockPosition, precedence: Precedence, paragraphLineCheck: Option[PrefixedParser[Any]]) extends ParserDefinition[Block]

Defines a parser for a single kind of block element, like a quoted block or a bullet list for example.

Defines a parser for a single kind of block element, like a quoted block or a bullet list for example.

Value parameters:
isRecursive

indicates whether this parser produces child elements by recursively applying the parsers for the host language

paragraphLineCheck

a test for the start of each line in plain paragraphs that indicates whether the line might be the start of a block identified by this parser

parser

the parser for the block element

position

indicates whether this parser is responsible for root or nested elements only, or for both

precedence

indicates whether the parser should be applied before the base parsers of the host language (high precedence) or after them

startChars

the optional start characters that can start this block (allows performance optimizations when defined)

sealed trait BlockPosition

Specifies the position a block element is allowed to appear in.

Specifies the position a block element is allowed to appear in.

RootOnly elements can only appear on the top level of the document hierarchy, while NestedOnly can only appear nested within other elements, e.g. as part of a list item or within a quoted block. Any allows block elements in any position.

Companion:
object
Companion:
class
sealed trait BundleOrigin

Indicates whether an extension bundle is a built-in default provided by the library, a collection of extensions installed by a markup format or user-defined.

Indicates whether an extension bundle is a built-in default provided by the library, a collection of extensions installed by a markup format or user-defined.

This is relevant for determining the precedence of installed bundles when merging them, as user-supplied functionality always overrides library defaults.

Companion:
object
Companion:
class

Responsible for providing the parsers for configuration files and configuration headers in markup documents as part of an ExtensionBundle.

Responsible for providing the parsers for configuration files and configuration headers in markup documents as part of an ExtensionBundle.

Laika has a built-in implementation of this API that parses configuration as HOCON, but these can be overridden by adding an instance of this trait to a ParserBundle within an ExtensionBundle.

Companion:
object
Companion:
class

The default implementations for determining the document type of the input based on its path.

The default implementations for determining the document type of the input based on its path.

An extension bundle is a collection of parser extensions, rewrite rules, render overrides and other features to be applied to parse, render and transform operations. It serves as a central registry for all of Laika's extension and customization hooks.

An extension bundle is a collection of parser extensions, rewrite rules, render overrides and other features to be applied to parse, render and transform operations. It serves as a central registry for all of Laika's extension and customization hooks.

The base trait contains empty implementations for all these features, therefore any bundle implementation only needs to override the relevant members.

If the bundle implementation is not parameterized, the most convenient choice for users would be to simply implement it as an object, like all built-in extensions do:

object MyExtensions extends ExtensionBundle {

 // override one or more members

}

This way a user can easily pass it to the operation builders:

val transformer = Transformer
 .from(Markdown)
 .to(HTML)
 .using(MyExtensions)
 .build
Companion:
object

Provides default ExtensionBundle instances.

Provides default ExtensionBundle instances.

Companion:
class
case class MarkupExtensions(blockParsers: Seq[BlockParserBuilder], spanParsers: Seq[SpanParserBuilder], syntaxHighlighters: Seq[SyntaxHighlighter], parserHooks: ParserHooks)

Bundles extensions for the text markup parsers defined for the host language to support additional syntax not recognized by the base parsers.

Bundles extensions for the text markup parsers defined for the host language to support additional syntax not recognized by the base parsers.

When extension parsers fail for a given input the built-in parsers will still be tried for the same block or span respectively.

Value parameters:
blockParsers

parsers for block elements in text markup, complementing the parsers of the host language

parserHooks

hooks for markup parsers to control aspects beyond the individual span and block parsers

spanParsers

parsers for span elements in text markup, complementing the parsers of the host language

syntaxHighlighters

parsers for syntax highlighting of code blocks

sealed trait ParserBuilder[T <: ParserDefinition[_]]

Builds a parser definition lazily by passing the recursive parsers of the host language.

Builds a parser definition lazily by passing the recursive parsers of the host language.

This indirection is needed when supplying parser implementations as many parsers recursively parse child elements. A list parser for example needs to be able to detect any other block or span element within a list item. But since it has no way of knowing which extensions a user might have added to the host language, those parsers are supplied from the outside by the parser engine.

case class ParserBundle(blockParsers: Seq[BlockParserBuilder], spanParsers: Seq[SpanParserBuilder], syntaxHighlighters: Seq[SyntaxHighlighter], markupParserHooks: Option[ParserHooks], configProvider: Option[ConfigProvider], templateParser: Option[Parser[TemplateRoot]], styleSheetParser: Option[Parser[Set[StyleDeclaration]]])

Bundles a collection of all types of parsers used in a transformation.

Bundles a collection of all types of parsers used in a transformation.

The parsers for text markup and configuration headers are meant to complement base parsers defined by the host language. If they fail for a given input the built-in parsers will still be tried for the same block, span or configuration header respectively.

The parsers for stylesheets and templates on the other hand are meant to overwrite any previously installed parsers.

Value parameters:
blockParsers

parsers for block elements in text markup, complementing the parsers of the host language

configProvider

parser for configuration headers in text markup and template documents and configuration documents

markupParserHooks

hooks for markup parsers to control aspects beyond the individual span and block parsers

spanParsers

parsers for span elements in text markup, complementing the parsers of the host language

styleSheetParser

parser for CSS documents

syntaxHighlighters

parsers for syntax highlighting of code blocks

templateParser

parser for template documents

sealed trait ParserDefinition[E <: Element]

Defines a parser for a single kind of text markup, like a literal text span or a bullet list for example.

Defines a parser for a single kind of text markup, like a literal text span or a bullet list for example.

case class ParserHooks(postProcessBlocks: Seq[Block] => Seq[Block], postProcessDocument: UnresolvedDocument => UnresolvedDocument, preProcessInput: DocumentInput => DocumentInput)

Hooks for markup parsers to control aspects beyond the individual span and block parsers defined for the host language.

Hooks for markup parsers to control aspects beyond the individual span and block parsers defined for the host language.

Value parameters:
postProcessBlocks

function invoked for every block container, allowing post-processing of the result

postProcessDocument

function invoked after parsing but before rewriting, allowing to modify the document

preProcessInput

function invoked before parsing, allowing to pre-process the input

sealed trait Precedence

Indicates whether a parser should be applied before the base parsers of the host language (high precedence) or after them (low precedence).

Indicates whether a parser should be applied before the base parsers of the host language (high precedence) or after them (low precedence).

Companion:
object
object Precedence
Companion:
class

Collects custom render functions that adjust the rendered output of one or more AST nodes.

Collects custom render functions that adjust the rendered output of one or more AST nodes.

object SpanParser

Builder API for span parsers.

Builder API for span parsers.

The two entry points are either recursive if your parser implementation needs to recursively parse child spans defined by the host language or standalone if it doesn't.

Builds a span parser definition lazily by passing the recursive parsers of the host language.

Builds a span parser definition lazily by passing the recursive parsers of the host language.

case class SpanParserBuilderOps(parserFactory: RecursiveSpanParsers => PrefixedParser[Span], recursive: Boolean, precedence: Precedence) extends SpanParserBuilder

Builder API for span parsers that allows to set the parser precedence.

Builder API for span parsers that allows to set the parser precedence.

case class SpanParserDefinition(startChars: Type[Char], parser: Parser[Span], isRecursive: Boolean, precedence: Precedence) extends ParserDefinition[Span]

Defines a parser for a single kind of span element, like a literal text span or a link reference for example.

Defines a parser for a single kind of span element, like a literal text span or a link reference for example.

Value parameters:
isRecursive

indicates whether this parser produces child elements by recursively applying the parsers for the host language

parser

the parser for the span element

precedence

indicates whether the parser should be applied before the base parsers of the host language (high precedence) or after them

startChars

all start characters that can start this span (allows performance optimizations)