pub struct Constructs {Show 29 fields
pub attention: bool,
pub autolink: bool,
pub block_quote: bool,
pub character_escape: bool,
pub character_reference: bool,
pub code_indented: bool,
pub code_fenced: bool,
pub code_text: bool,
pub definition: bool,
pub frontmatter: bool,
pub autolink_literal: bool,
pub footnote_definition: bool,
pub label_start_footnote: bool,
pub strikethrough: bool,
pub table: bool,
pub task_list_item: bool,
pub hard_break_escape: bool,
pub hard_break_trailing: bool,
pub heading_atx: bool,
pub heading_setext: bool,
pub html_flow: bool,
pub html_text: bool,
pub label_start_image: bool,
pub label_start_link: bool,
pub label_end: bool,
pub list_item: bool,
pub math_flow: bool,
pub math_text: bool,
pub thematic_break: bool,
}Expand description
Control which constructs are enabled.
Not all constructs can be configured. Notably, blank lines and paragraphs cannot be turned off.
§Examples
use base_markdown::Constructs;
// Use the default trait to get `CommonMark` constructs:
let commonmark = Constructs::default();
// To turn on all of GFM, use the `gfm` method:
let gfm = Constructs::gfm();
// Or, mix and match:
let custom = Constructs {
math_flow: true,
math_text: true,
..Constructs::gfm()
};Fields§
§attention: boolAttention.
> | a *b* c **d**.
^^^ ^^^^^autolink: boolAutolink.
> | a <https://example.com> b <user@example.org>.
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^block_quote: boolBlock quote.
> | > a
^^^character_escape: boolCharacter escape.
> | a \* b
^^character_reference: boolCharacter reference.
> | a & b
^^^^^code_indented: boolCode (indented).
> | a
^^^^^code_fenced: boolCode (fenced).
> | ~~~js
^^^^^
> | console.log(1)
^^^^^^^^^^^^^^
> | ~~~
^^^code_text: boolCode (text).
> | a `b` c
^^^definition: boolDefinition.
> | [a]: b "c"
^^^^^^^^^^frontmatter: boolFrontmatter with an unindented opening fence on the first document line, outside list items and blockquotes, and a matching closing fence.
Frontmatter is language-agnostic, following Markly and cmarkly. All forms produce a source-backed opaque node with NodeSyntax::Frontmatter metadata. Untagged --- and +++ imply YAML and TOML, with an empty info string. A format hint after either delimiter (such as --- json or ---yaml), or a language-tagged backtick/tilde code fence, supplies an explicit language. The parser preserves the raw body and the full authored info string without parsing the named format; Document::frontmatter_value returns the body. HTML omits the frontmatter. Backtick/tilde fences without a language, fences later in a document, and unclosed fences remain ordinary Markdown.
Markdown serialization retains the stored info string and body while normalizing spacing around the info string. It can lengthen fences or change their marker when edited content would close them prematurely, writing an implied language explicitly when replacing an untagged dash/plus delimiter, and adds a line ending before the closing fence when an edited body needs one. Round trips preserve the body and effective language.
use base_markdown::{Constructs, Document, NodeSyntax, ParseOptions};
let options = ParseOptions {
constructs: Constructs { frontmatter: true, ..Constructs::default() },
..ParseOptions::default()
};
let document = Document::parse("```json title=example\n{\"draft\": true}\n```\n\n# Hello", &options).unwrap();
let node = document.children(document.root()).next().unwrap();
let Some(NodeSyntax::Frontmatter { info, .. }) = document.syntax(node) else { panic!() };
assert_eq!(info.resolve(document.source()).unwrap(), "json title=example");
assert_eq!(document.frontmatter_value(node), Some("{\"draft\": true}\n"));> | ---
^^^
> | title: Neptune
^^^^^^^^^^^^^^
> | ---
^^^autolink_literal: boolAutolink literal.
> | https://example.com
^^^^^^^^^^^^^^^^^^^footnote_definition: boolFootnote definition.
> | [^a]: b
^^^^^^^label_start_footnote: boolFootnote label start.
> | a[^b]
^^strikethrough: boolStrikethrough.
> | a ~b~ c.
^^^table: boolTable.
> | | a |
^^^^^
> | | - |
^^^^^
> | | b |
^^^^^task_list_item: boolTask list item.
> | * [x] y.
^^^hard_break_escape: boolHard break (escape).
> | a\
^
| bhard_break_trailing: boolHard break (trailing).
> | a␠␠
^^
| bheading_atx: boolHeading (atx).
> | # a
^^^heading_setext: boolHeading (setext).
> | a
^^
> | ==
^^html_flow: boolHTML (flow).
> | <div>
^^^^^html_text: boolHTML (text).
> | a <b> c
^^^label_start_image: boolLabel start (image).
> | a  d
^^label_start_link: boolLabel start (link).
> | a [b](c) d
^label_end: boolLabel end.
> | a [b](c) d
^^^^list_item: boolList items.
> | * a
^^^math_flow: boolMath (flow).
> | $$
^^
> | \frac{1}{2}
^^^^^^^^^^^
> | $$
^^math_text: boolMath (text).
> | a $b$ c
^^^thematic_break: boolThematic break.
> | ***
^^^Implementations§
Source§impl Constructs
impl Constructs
Sourcepub fn gfm() -> Self
pub fn gfm() -> Self
GFM.
GFM stands for GitHub flavored markdown.
GFM extends CommonMark and adds support for autolink literals,
footnotes, strikethrough, tables, and tasklists.
For more information, see the GFM specification: https://github.github.com/gfm/.
Trait Implementations§
Source§impl Clone for Constructs
impl Clone for Constructs
Source§impl Debug for Constructs
impl Debug for Constructs
Source§impl Default for Constructs
impl Default for Constructs
Source§fn default() -> Self
fn default() -> Self
CommonMark.
CommonMark is a relatively strong specification of how markdown
works.
Most markdown parsers try to follow it.
For more information, see the CommonMark specification:
https://spec.commonmark.org.