pub struct Render {Show 16 fields
pub hardbreaks: bool,
pub github_pre_lang: bool,
pub full_info_string: bool,
pub width: usize,
pub unsafe: bool,
pub escape: bool,
pub list_style: ListStyleType,
pub sourcepos: bool,
pub escaped_char_spans: bool,
pub ignore_empty_links: bool,
pub gfm_quirks: bool,
pub prefer_fenced: bool,
pub figure_with_caption: bool,
pub tasklist_classes: bool,
pub ol_width: usize,
pub experimental_minimize_commonmark: bool,
}Expand description
Options for formatter functions.
Fields§
§hardbreaks: boolSoft line breaks in the input translate into hard line breaks in the output.
let mut options = Options::default();
assert_eq!(markdown_to_html("Hello.\nWorld.\n", &options),
"<p>Hello.\nWorld.</p>\n");
options.render.hardbreaks = true;
assert_eq!(markdown_to_html("Hello.\nWorld.\n", &options),
"<p>Hello.<br />\nWorld.</p>\n");github_pre_lang: boolGitHub-style <pre lang="xyz"> is used for fenced code blocks with info tags.
let mut options = Options::default();
assert_eq!(markdown_to_html("``` rust\nfn hello();\n```\n", &options),
"<pre><code class=\"language-rust\">fn hello();\n</code></pre>\n");
options.render.github_pre_lang = true;
assert_eq!(markdown_to_html("``` rust\nfn hello();\n```\n", &options),
"<pre lang=\"rust\"><code>fn hello();\n</code></pre>\n");full_info_string: boolEnable full info strings for code blocks
let mut options = Options::default();
assert_eq!(markdown_to_html("``` rust extra info\nfn hello();\n```\n", &options),
"<pre><code class=\"language-rust\">fn hello();\n</code></pre>\n");
options.render.full_info_string = true;
let html = markdown_to_html("``` rust extra info\nfn hello();\n```\n", &options);
assert!(html.contains(r#"data-meta="extra info""#));width: usizeThe wrap column when outputting CommonMark.
let mut options = Options::default();
let node = parse_document(&arena, "hello hello hello hello hello hello", &options);
let mut output = String::new();
format_commonmark(node, &options, &mut output).unwrap();
assert_eq!(output,
"hello hello hello hello hello hello\n");
options.render.width = 20;
let mut output = String::new();
format_commonmark(node, &options, &mut output).unwrap();
assert_eq!(output,
"hello hello hello\nhello hello hello\n");unsafe: boolAllow rendering of raw HTML and potentially dangerous links.
let mut options = Options::default();
let input = "<script>\nalert('xyz');\n</script>\n\n\
Possibly <marquee>annoying</marquee>.\n\n\
[Dangerous](javascript:alert(document.cookie)).\n\n\
[Safe](http://commonmark.org).\n";
assert_eq!(markdown_to_html(input, &options),
"<!-- raw HTML omitted -->\n\
<p>Possibly <!-- raw HTML omitted -->annoying<!-- raw HTML omitted -->.</p>\n\
<p><a href=\"\">Dangerous</a>.</p>\n\
<p><a href=\"http://commonmark.org\">Safe</a>.</p>\n");
options.render.r#unsafe = true;
assert_eq!(markdown_to_html(input, &options),
"<script>\nalert(\'xyz\');\n</script>\n\
<p>Possibly <marquee>annoying</marquee>.</p>\n\
<p><a href=\"javascript:alert(document.cookie)\">Dangerous</a>.</p>\n\
<p><a href=\"http://commonmark.org\">Safe</a>.</p>\n");escape: boolEscape raw HTML instead of clobbering it.
let mut options = Options::default();
let input = "<i>italic text</i>";
assert_eq!(markdown_to_html(input, &options),
"<p><!-- raw HTML omitted -->italic text<!-- raw HTML omitted --></p>\n");
options.render.escape = true;
assert_eq!(markdown_to_html(input, &options),
"<p><i>italic text</i></p>\n");list_style: ListStyleTypeSet the type of bullet list marker to use. Options are:
ListStyleType::Dashto use-(default)ListStyleType::Plusto use+ListStyleType::Starto use*
let mut options = Options::default();
let input = "- one\n- two\n- three";
assert_eq!(markdown_to_commonmark(input, &options),
"- one\n- two\n- three\n"); // default is Dash
options.render.list_style = ListStyleType::Plus;
assert_eq!(markdown_to_commonmark(input, &options),
"+ one\n+ two\n+ three\n");
options.render.list_style = ListStyleType::Star;
assert_eq!(markdown_to_commonmark(input, &options),
"* one\n* two\n* three\n");sourcepos: boolInclude source position attributes in HTML and XML output.
Sourcepos information is reliable for core block items excluding lists and list items, all inlines, and most extensions. The description lists extension still has issues; see https://github.com/kivikakk/comrak/blob/3bb6d4ce/src/tests/description_lists.rs#L60-L125.
let mut options = Options::default();
options.render.sourcepos = true;
let input = "Hello *world*!";
assert_eq!(markdown_to_html(input, &options),
"<p data-sourcepos=\"1:1-1:14\">Hello <em data-sourcepos=\"1:7-1:13\">world</em>!</p>\n");escaped_char_spans: boolWrap escaped characters in a <span> to allow any
post-processing to recognize them.
let mut options = Options::default();
let input = "Notify user \\@example";
assert_eq!(markdown_to_html(input, &options),
"<p>Notify user @example</p>\n");
options.render.escaped_char_spans = true;
assert_eq!(markdown_to_html(input, &options),
"<p>Notify user <span data-escaped-char>@</span>example</p>\n");Enabling this option will cause the escaped_char_spans parse option to
be enabled.
ignore_empty_links: boolIgnore empty links in input.
let mut options = Options::default();
let input = "[]()";
assert_eq!(markdown_to_html(input, &options),
"<p><a href=\"\"></a></p>\n");
options.render.ignore_empty_links = true;
assert_eq!(markdown_to_html(input, &options), "<p>[]()</p>\n");gfm_quirks: boolEnables GFM quirks in HTML output which break CommonMark compatibility.
let mut options = Options::default();
let input = "****abcd**** *_foo_*";
assert_eq!(markdown_to_html(input, &options),
"<p><strong><strong>abcd</strong></strong> <em><em>foo</em></em></p>\n");
options.render.gfm_quirks = true;
assert_eq!(markdown_to_html(input, &options),
"<p><strong>abcd</strong> <em><em>foo</em></em></p>\n");prefer_fenced: boolPrefer fenced code blocks when outputting CommonMark.
let arena = Arena::new();
let mut options = Options::default();
let input = "```\nhello\n```\n";
let root = parse_document(&arena, input, &options);
let mut buf = String::new();
format_commonmark(&root, &options, &mut buf);
assert_eq!(buf, " hello\n");
buf.clear();
options.render.prefer_fenced = true;
format_commonmark(&root, &options, &mut buf);
assert_eq!(buf, "```\nhello\n```\n");figure_with_caption: boolRender the image as a figure element with the title as its caption.
let mut options = Options::default();
let input = "";
assert_eq!(markdown_to_html(input, &options),
"<p><img src=\"https://example.com/image.png\" alt=\"image\" title=\"this is an image\" /></p>\n");
options.render.figure_with_caption = true;
assert_eq!(markdown_to_html(input, &options),
"<p><figure><img src=\"https://example.com/image.png\" alt=\"image\" title=\"this is an image\" /><figcaption>this is an image</figcaption></figure></p>\n");tasklist_classes: boolAdd classes to the output of the tasklist extension. This allows tasklists to be styled.
let mut options = Options::default();
options.extension.tasklist = true;
let input = "- [ ] Foo";
assert_eq!(markdown_to_html(input, &options),
"<ul>\n<li><input type=\"checkbox\" disabled=\"\" /> Foo</li>\n</ul>\n");
options.render.tasklist_classes = true;
assert_eq!(markdown_to_html(input, &options),
"<ul class=\"contains-task-list\">\n<li class=\"task-list-item\"><input type=\"checkbox\" class=\"task-list-item-checkbox\" disabled=\"\" /> Foo</li>\n</ul>\n");ol_width: usizeRender ordered list with a minimum marker width. Having a width lower than 3 doesn’t do anything.
let mut options = Options::default();
let input = "1. Something";
assert_eq!(markdown_to_commonmark(input, &options),
"1. Something\n");
options.render.ol_width = 5;
assert_eq!(markdown_to_commonmark(input, &options),
"1. Something\n");experimental_minimize_commonmark: boolMinimise escapes used in CommonMark output (-t commonmark) by removing
each individually and seeing if the resulting document roundtrips.
Brute-force and expensive, but produces nicer output. Note that the
result may not in fact be minimal.
let mut options = Options::default();
let input = "__hi";
assert_eq!(markdown_to_commonmark(input, &options),
"\\_\\_hi\n");
options.render.experimental_minimize_commonmark = true;
assert_eq!(markdown_to_commonmark(input, &options),
"__hi\n");Implementations§
Trait Implementations§
Source§impl<'arbitrary> Arbitrary<'arbitrary> for Render
impl<'arbitrary> Arbitrary<'arbitrary> for Render
Source§fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>
fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Self>
Self from the given unstructured data. Read moreSource§fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>
fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Self>
Self from the entirety of the given
unstructured data. Read moreSource§fn size_hint(depth: usize) -> (usize, Option<usize>)
fn size_hint(depth: usize) -> (usize, Option<usize>)
Unstructured this type
needs to construct itself. Read moreSource§fn try_size_hint(
depth: usize,
) -> Result<(usize, Option<usize>), MaxRecursionReached>
fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>
Unstructured this type
needs to construct itself. Read more