Documentation
¶
Overview ¶
Package parser contains stuff that are related to parsing a Markdown text.
Index ¶
- Variables
- func DefaultBlockParsers() []util.PrioritizedValue
- func DefaultInlineParsers() []util.PrioritizedValue
- func DefaultParagraphTransformers() []util.PrioritizedValue
- func ProcessDelimiters(bottom ast.Node, pc Context)
- type ASTTransformer
- type Attribute
- type Attributes
- type Block
- type BlockParser
- func NewATXHeadingParser(opts ...HeadingOption) BlockParser
- func NewBlockquoteParser() BlockParser
- func NewCodeBlockParser() BlockParser
- func NewFencedCodeBlockParser() BlockParser
- func NewHTMLBlockParser() BlockParser
- func NewListItemParser() BlockParser
- func NewListParser() BlockParser
- func NewParagraphParser() BlockParser
- func NewSetextHeadingParser(opts ...HeadingOption) BlockParser
- func NewThematicBreakParser() BlockParser
- type CloseBlocker
- type Config
- type Context
- type ContextConfig
- type ContextKey
- type ContextOption
- type Delimiter
- type DelimiterProcessor
- type HeadingConfig
- type HeadingOption
- type IDs
- type InlineParser
- type Option
- func WithASTTransformers(ps ...util.PrioritizedValue) Option
- func WithAttribute() Option
- func WithBlockParsers(bs ...util.PrioritizedValue) Option
- func WithEscapedSpace() Option
- func WithInlineParsers(bs ...util.PrioritizedValue) Option
- func WithOption(name OptionName, value any) Option
- func WithParagraphTransformers(ps ...util.PrioritizedValue) Option
- type OptionName
- type ParagraphTransformer
- type ParseConfig
- type ParseOption
- type Parser
- type Reference
- type SetOptioner
- type State
Constants ¶
This section is empty.
Variables ¶
var LinkReferenceParagraphTransformer = &linkReferenceParagraphTransformer{}
LinkReferenceParagraphTransformer is a ParagraphTransformer implementation that parses and extracts link reference from paragraphs.
Functions ¶
func DefaultBlockParsers ¶
func DefaultBlockParsers() []util.PrioritizedValue
DefaultBlockParsers returns a new list of default BlockParsers. Priorities of default BlockParsers are:
SetextHeadingParser, 100 ThematicBreakParser, 200 ListParser, 300 ListItemParser, 400 CodeBlockParser, 500 ATXHeadingParser, 600 FencedCodeBlockParser, 700 BlockquoteParser, 800 HTMLBlockParser, 900 ParagraphParser, 1000
func DefaultInlineParsers ¶
func DefaultInlineParsers() []util.PrioritizedValue
DefaultInlineParsers returns a new list of default InlineParsers. Priorities of default InlineParsers are:
CodeSpanParser, 100 LinkParser, 200 AutoLinkParser, 300 RawHTMLParser, 400 EmphasisParser, 500
func DefaultParagraphTransformers ¶
func DefaultParagraphTransformers() []util.PrioritizedValue
DefaultParagraphTransformers returns a new list of default ParagraphTransformers. Priorities of default ParagraphTransformers are:
LinkReferenceParagraphTransformer, 100
func ProcessDelimiters ¶
ProcessDelimiters processes the delimiter list in the context. Processing will be stop when reaching the bottom.
If you implement an inline parser that can have other inline nodes as children, you should call this function when nesting span has closed.
Types ¶
type ASTTransformer ¶
type ASTTransformer interface {
// Transform transforms the given AST tree.
Transform(node *ast.Document, reader text.Reader, pc Context)
}
ASTTransformer transforms entire Markdown document AST tree.
type Attributes ¶ added in v1.0.10
type Attributes []Attribute
An Attributes is a collection of attributes.
func ParseAttributes ¶ added in v1.0.8
func ParseAttributes(reader text.Reader) (Attributes, bool)
ParseAttributes parses attributes into a map. ParseAttributes returns a parsed attributes and true if could parse attributes, otherwise nil and false.
type Block ¶
type Block struct {
// Node is a BlockNode.
Node ast.Node
// Parser is a BlockParser.
Parser BlockParser
}
A Block struct holds a node and correspond parser pair.
type BlockParser ¶
type BlockParser interface {
// Trigger returns a list of characters that triggers Parse method of
// this parser.
// If Trigger returns a nil, Open will be called with any lines.
Trigger() []byte
// Open parses the current line and returns a result of parsing.
//
// Open must not parse beyond the current line.
// If Open has been able to parse the current line, Open must advance a reader
// position by consumed byte length.
//
// If Open has not been able to parse the current line, Open should returns
// (nil, NoChildren). If Open has been able to parse the current line, Open
// should returns a new Block node and returns HasChildren or NoChildren.
Open(parent ast.Node, reader text.Reader, pc Context) (ast.Node, State)
// Continue parses the current line and returns a result of parsing.
//
// Continue must not parse beyond the current line.
// If Continue has been able to parse the current line, Continue must advance
// a reader position by consumed byte length.
//
// If Continue has not been able to parse the current line, Continue should
// returns Close. If Continue has been able to parse the current line,
// Continue should returns (Continue | NoChildren) or
// (Continue | HasChildren)
Continue(node ast.Node, reader text.Reader, pc Context) State
// Close will be called when the parser returns Close.
Close(node ast.Node, reader text.Reader, pc Context)
// CanInterruptParagraph returns true if the parser can interrupt paragraphs,
// otherwise false.
CanInterruptParagraph() bool
// CanAcceptIndentedLine returns true if the parser can open new node when
// the given line is being indented more than 3 spaces.
CanAcceptIndentedLine() bool
}
A BlockParser interface parses a block level element like Paragraph, List, Blockquote etc.
func NewATXHeadingParser ¶
func NewATXHeadingParser(opts ...HeadingOption) BlockParser
NewATXHeadingParser return a new BlockParser that can parse ATX headings.
func NewBlockquoteParser ¶
func NewBlockquoteParser() BlockParser
NewBlockquoteParser returns a new BlockParser that parses blockquotes.
func NewCodeBlockParser ¶
func NewCodeBlockParser() BlockParser
NewCodeBlockParser returns a new BlockParser that parses code blocks.
func NewFencedCodeBlockParser ¶
func NewFencedCodeBlockParser() BlockParser
NewFencedCodeBlockParser returns a new BlockParser that parses fenced code blocks.
func NewHTMLBlockParser ¶
func NewHTMLBlockParser() BlockParser
NewHTMLBlockParser return a new BlockParser that can parse html blocks.
func NewListItemParser ¶
func NewListItemParser() BlockParser
NewListItemParser returns a new BlockParser that parses list items.
func NewListParser ¶
func NewListParser() BlockParser
NewListParser returns a new BlockParser that parses lists. This parser must take precedence over the ListItemParser.
func NewParagraphParser ¶
func NewParagraphParser() BlockParser
NewParagraphParser returns a new BlockParser that parses paragraphs.
func NewSetextHeadingParser ¶
func NewSetextHeadingParser(opts ...HeadingOption) BlockParser
NewSetextHeadingParser return a new BlockParser that can parse Setext headings.
func NewThematicBreakParser ¶ added in v1.0.9
func NewThematicBreakParser() BlockParser
NewThematicBreakParser returns a new BlockParser that parses thematic breaks.
type CloseBlocker ¶
type CloseBlocker interface {
// CloseBlock will be called when a block is closed.
CloseBlock(parent ast.Node, block text.Reader, pc Context)
}
A CloseBlocker interface is a callback function that will be called when block is closed in the inline parsing.
type Config ¶
type Config struct {
Options map[OptionName]any
BlockParsers util.PrioritizedSlice /*<BlockParser>*/
InlineParsers util.PrioritizedSlice /*<InlineParser>*/
ParagraphTransformers util.PrioritizedSlice /*<ParagraphTransformer>*/
ASTTransformers util.PrioritizedSlice /*<ASTTransformer>*/
EscapedSpace bool
}
A Config struct is a data structure that holds configuration of the Parser.
type Context ¶
type Context interface {
// String implements Stringer.
String() string
// Get returns a value associated with the given key.
Get(ContextKey) any
// ComputeIfAbsent computes a value if a value associated with the given key is absent and returns the value.
ComputeIfAbsent(ContextKey, func() any) any
// Set sets the given value to the context.
Set(ContextKey, any)
// AddReference adds the given reference to this context.
AddReference(Reference)
// Reference returns (a reference, true) if a reference associated with
// the given label exists, otherwise (nil, false).
Reference(label string) (Reference, bool)
// References returns a list of references.
References() []Reference