116 lines
3.1 KiB
V
116 lines
3.1 KiB
V
// Copyright 2026 The V Language. All rights reserved.
|
|
// Use of this source code is governed by an MIT license
|
|
// that can be found in the LICENSE file.
|
|
module markdown
|
|
|
|
// Extension is the interface implemented by markdown extensions.
|
|
// An extension configures the Markdown processor by enabling parser and
|
|
// renderer features.
|
|
pub interface Extension {
|
|
// extend is called once when the extension is registered with a Markdown processor.
|
|
extend(mut m Markdown)
|
|
}
|
|
|
|
// TableExt adds GitHub Flavored Markdown table support (| col | col |).
|
|
pub struct TableExt {}
|
|
|
|
// extend implements Extension for TableExt.
|
|
pub fn (_ TableExt) extend(mut m Markdown) {
|
|
m.opts.tables = true
|
|
}
|
|
|
|
// StrikethroughExt adds GFM strikethrough support (~~text~~).
|
|
pub struct StrikethroughExt {}
|
|
|
|
// extend implements Extension for StrikethroughExt.
|
|
pub fn (_ StrikethroughExt) extend(mut m Markdown) {
|
|
m.opts.strikethrough = true
|
|
}
|
|
|
|
// LinkifyExt adds autolink support for bare URLs and email addresses.
|
|
pub struct LinkifyExt {}
|
|
|
|
// extend implements Extension for LinkifyExt.
|
|
pub fn (_ LinkifyExt) extend(mut m Markdown) {
|
|
m.opts.linkify = true
|
|
}
|
|
|
|
// TaskListExt adds GFM task list item support (- [ ] / - [x]).
|
|
pub struct TaskListExt {}
|
|
|
|
// extend implements Extension for TaskListExt.
|
|
pub fn (_ TaskListExt) extend(mut m Markdown) {
|
|
m.opts.task_list = true
|
|
}
|
|
|
|
// FootnoteExt adds footnote support ([^label] references and [^label]: definitions).
|
|
pub struct FootnoteExt {}
|
|
|
|
// extend implements Extension for FootnoteExt.
|
|
pub fn (_ FootnoteExt) extend(mut m Markdown) {
|
|
m.opts.footnotes = true
|
|
}
|
|
|
|
// TypographerExt replaces ASCII punctuation sequences with Unicode typographic
|
|
// equivalents: -- en dash, --- em dash, ... ellipsis, and smart quotes.
|
|
pub struct TypographerExt {}
|
|
|
|
// extend implements Extension for TypographerExt.
|
|
pub fn (_ TypographerExt) extend(mut m Markdown) {
|
|
m.opts.typographer = true
|
|
}
|
|
|
|
// DefinitionListExt adds Pandoc-style definition list support.
|
|
pub struct DefinitionListExt {}
|
|
|
|
// extend implements Extension for DefinitionListExt.
|
|
pub fn (_ DefinitionListExt) extend(mut m Markdown) {
|
|
m.opts.definition_list = true
|
|
}
|
|
|
|
// table returns a TableExt extension value.
|
|
pub fn table() TableExt {
|
|
return TableExt{}
|
|
}
|
|
|
|
// strikethrough returns a StrikethroughExt extension value.
|
|
pub fn strikethrough() StrikethroughExt {
|
|
return StrikethroughExt{}
|
|
}
|
|
|
|
// linkify returns a LinkifyExt extension value.
|
|
pub fn linkify() LinkifyExt {
|
|
return LinkifyExt{}
|
|
}
|
|
|
|
// task_list returns a TaskListExt extension value.
|
|
pub fn task_list() TaskListExt {
|
|
return TaskListExt{}
|
|
}
|
|
|
|
// footnote returns a FootnoteExt extension value.
|
|
pub fn footnote() FootnoteExt {
|
|
return FootnoteExt{}
|
|
}
|
|
|
|
// typographer returns a TypographerExt extension value.
|
|
pub fn typographer() TypographerExt {
|
|
return TypographerExt{}
|
|
}
|
|
|
|
// definition_list returns a DefinitionListExt extension value.
|
|
pub fn definition_list() DefinitionListExt {
|
|
return DefinitionListExt{}
|
|
}
|
|
|
|
// gfm returns the core GitHub Flavored Markdown extensions:
|
|
// TableExt, StrikethroughExt, LinkifyExt, and TaskListExt.
|
|
pub fn gfm() []Extension {
|
|
return [
|
|
Extension(TableExt{}),
|
|
StrikethroughExt{},
|
|
LinkifyExt{},
|
|
TaskListExt{},
|
|
]
|
|
}
|