aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Cargo.toml1
-rw-r--r--build.rs88
-rw-r--r--tests/commonmark.rs9142
4 files changed, 9232 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index ec3af4f..0e0f1b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,5 @@
*.lock
coverage/
target
+commonmark-data.txt
unicode-data.txt
diff --git a/Cargo.toml b/Cargo.toml
index 1c443c3..1b075af 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,5 +18,6 @@ env_logger = "0.9"
log = "0.4"
[build-dependencies]
+regex = "1.5"
reqwest = "0.11"
tokio = { version = "1.12", features = ["full"] }
diff --git a/build.rs b/build.rs
index cdfeac4..feb22c8 100644
--- a/build.rs
+++ b/build.rs
@@ -1,8 +1,96 @@
extern crate reqwest;
+use regex::Regex;
use std::fs;
#[tokio::main]
async fn main() {
+ commonmark().await;
+ punctuation().await;
+}
+
+async fn commonmark() {
+ let url = "https://raw.githubusercontent.com/commonmark/commonmark-spec/0.30/spec.txt";
+ let data_url = "commonmark-data.txt";
+ #[allow(unused_variables)]
+ let code_url = "tests/commonmark.rs";
+
+ let value = if let Ok(value) = fs::read_to_string(data_url) {
+ value
+ } else {
+ let value = reqwest::get(url).await.unwrap().text().await.unwrap();
+
+ fs::write(data_url, value.clone()).unwrap();
+
+ value
+ };
+
+ let re = Regex::new(r"(?m)(?:^`{32} example\n[\s\S]*?\n`{32}$|^#{1,6} *(.*)$)").unwrap();
+ let re_heading_prefix = Regex::new(r"#{1,6} ").unwrap();
+ let re_in_out = Regex::new(r"\n\.(?:\n|$)").unwrap();
+ let mut current_heading: Option<String> = None;
+ let mut case_index = 0;
+
+ let value = Regex::new(r"<!-- END TESTS -->[\s\S]*")
+ .unwrap()
+ .replace(&value, "");
+ let value = Regex::new(r"→").unwrap().replace_all(&value, "\t");
+ let mut cases: Vec<String> = vec![];
+
+ for mat in re.find_iter(&value) {
+ let mut lines = mat.as_str().lines().collect::<Vec<_>>();
+
+ if lines.len() == 1 {
+ current_heading = Some(re_heading_prefix.replace(lines[0], "").to_string());
+ } else {
+ lines.remove(0);
+ lines.pop();
+ let section = current_heading.as_ref().unwrap();
+ let case = lines.join("\n");
+ let parts = re_in_out.split(&case).collect::<Vec<_>>();
+ let input = format!("{}\n", parts[0]);
+ let output = if parts[1].is_empty() {
+ "".to_string()
+ } else {
+ format!("{}\n", parts[1])
+ };
+
+ let test = format!(" assert_eq!(\n micromark_with_options(r###\"{}\"###, DANGER),\n r###\"{}\"###,\n r###\"{} ({})\"###\n);", input, output, section, case_index);
+
+ cases.push(test);
+
+ case_index += 1;
+ }
+ }
+
+ #[allow(unused_variables)]
+ let doc = format!(
+ "//! CommonMark test suite.
+
+// > 👉 **Important**: this module is generated by `build.rs`.
+// > It is generate from the latest Unicode data.
+
+extern crate micromark;
+use micromark::{{micromark_with_options, Options}};
+
+const DANGER: &Options = &Options {{
+ allow_dangerous_html: true,
+ allow_dangerous_protocol: true,
+ default_line_ending: None,
+}};
+
+#[test]
+fn commonmark() {{
+{}
+}}
+",
+ cases.join("\n\n")
+ );
+
+ // To do: enable when CM is completely fixed.
+ // fs::write(code_url, doc).unwrap();
+}
+
+async fn punctuation() {
let url = "https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt";
let data_url = "unicode-data.txt";
let code_url = "src/unicode.rs";
diff --git a/tests/commonmark.rs b/tests/commonmark.rs
new file mode 100644
index 0000000..dade5ff
--- /dev/null
+++ b/tests/commonmark.rs
@@ -0,0 +1,9142 @@
+//! CommonMark test suite.
+
+// > 👉 **Important**: this module is generated by `build.rs`.
+// > It is generate from the latest Unicode data.
+
+extern crate micromark;
+use micromark::{micromark_with_options, Options};
+
+const DANGER: &Options = &Options {
+ allow_dangerous_html: true,
+ allow_dangerous_protocol: true,
+ default_line_ending: None,
+};
+
+#[test]
+fn commonmark() {
+ assert_eq!(
+ micromark_with_options(
+ r###" foo baz bim
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo baz bim
+</code></pre>
+"###,
+ r###"Tabs (0)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo baz bim
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo baz bim
+</code></pre>
+"###,
+ r###"Tabs (1)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" a a
+ ὐ a
+"###,
+ DANGER
+ ),
+ r###"<pre><code>a a
+ὐ a
+</code></pre>
+"###,
+ r###"Tabs (2)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" - foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<p>bar</p>
+</li>
+</ul>
+"###,
+ r###"Tabs (3)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<pre><code> bar
+</code></pre>
+</li>
+</ul>
+"###,
+ r###"Tabs (4)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<pre><code> foo
+</code></pre>
+</blockquote>
+"###,
+ r###"Tabs (5)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<pre><code> foo
+</code></pre>
+</li>
+</ul>
+"###,
+ r###"Tabs (6)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo
+ bar
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo
+bar
+</code></pre>
+"###,
+ r###"Tabs (7)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###" - foo
+ // - bar
+ // - baz
+ // "###, DANGER),
+ // r###"<ul>
+ // <li>foo
+ // <ul>
+ // <li>bar
+ // <ul>
+ // <li>baz</li>
+ // </ul>
+ // </li>
+ // </ul>
+ // </li>
+ // </ul>
+ // "###,
+ // r###"Tabs (8)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# Foo
+"###,
+ DANGER
+ ),
+ r###"<h1>Foo</h1>
+"###,
+ r###"Tabs (9)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"* * *
+"###,
+ DANGER
+ ),
+ r###"<hr />
+"###,
+ r###"Tabs (10)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~
+"###,
+ DANGER
+ ),
+ r###"<p>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^_`{|}~</p>
+"###,
+ r###"Backslash escapes (11)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\ \A\a\ \3\φ\«
+"###,
+ DANGER
+ ),
+ r###"<p>\ \A\a\ \3\φ\«</p>
+"###,
+ r###"Backslash escapes (12)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\*not emphasized*
+\<br/> not a tag
+\[not a link](/foo)
+\`not code`
+1\. not a list
+\* not a list
+\# not a heading
+\[foo]: /url "not a reference"
+\&ouml; not a character entity
+"###,
+ DANGER
+ ),
+ r###"<p>*not emphasized*
+&lt;br/&gt; not a tag
+[not a link](/foo)
+`not code`
+1. not a list
+* not a list
+# not a heading
+[foo]: /url &quot;not a reference&quot;
+&amp;ouml; not a character entity</p>
+"###,
+ r###"Backslash escapes (13)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\\*emphasis*
+"###,
+ DANGER
+ ),
+ r###"<p>\<em>emphasis</em></p>
+"###,
+ r###"Backslash escapes (14)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo\
+bar
+"###,
+ DANGER
+ ),
+ r###"<p>foo<br />
+bar</p>
+"###,
+ r###"Backslash escapes (15)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`` \[\` ``
+"###,
+ DANGER
+ ),
+ r###"<p><code>\[\`</code></p>
+"###,
+ r###"Backslash escapes (16)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" \[\]
+"###,
+ DANGER
+ ),
+ r###"<pre><code>\[\]
+</code></pre>
+"###,
+ r###"Backslash escapes (17)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~
+\[\]
+~~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code>\[\]
+</code></pre>
+"###,
+ r###"Backslash escapes (18)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://example.com?find=\*>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="http://example.com?find=%5C*">http://example.com?find=\*</a></p>
+"###,
+ r###"Backslash escapes (19)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="/bar\/)">
+"###,
+ DANGER
+ ),
+ r###"<a href="/bar\/)">
+"###,
+ r###"Backslash escapes (20)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo](/bar\* "ti\*tle")
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/bar*" title="ti*tle">foo</a></p>
+"###,
+ r###"Backslash escapes (21)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+
+[foo]: /bar\* "ti\*tle"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/bar*" title="ti*tle">foo</a></p>
+"###,
+ r###"Backslash escapes (22)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"``` foo\+bar
+foo
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code class="language-foo+bar">foo
+</code></pre>
+"###,
+ r###"Backslash escapes (23)"###
+ );
+
+ // To do: bug.
+ // assert_eq!(
+ // micromark_with_options(r###"&nbsp; &amp; &copy; &AElig; &Dcaron;
+ // &frac34; &HilbertSpace; &DifferentialD;
+ // &ClockwiseContourIntegral; &ngE;
+ // "###, DANGER),
+ // r###"<p>  &amp; © Æ Ď
+ // ¾ ℋ ⅆ
+ // ∲ ≧̸</p>
+ // "###,
+ // r###"Entity and numeric character references (24)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&#35; &#1234; &#992; &#0;
+"###,
+ DANGER
+ ),
+ r###"<p># Ӓ Ϡ �</p>
+"###,
+ r###"Entity and numeric character references (25)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&#X22; &#XD06; &#xcab;
+"###,
+ DANGER
+ ),
+ r###"<p>&quot; ആ ಫ</p>
+"###,
+ r###"Entity and numeric character references (26)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&nbsp &x; &#; &#x;
+&#87654321;
+&#abcdef0;
+&ThisIsNotDefined; &hi?;
+"###,
+ DANGER
+ ),
+ r###"<p>&amp;nbsp &amp;x; &amp;#; &amp;#x;
+&amp;#87654321;
+&amp;#abcdef0;
+&amp;ThisIsNotDefined; &amp;hi?;</p>
+"###,
+ r###"Entity and numeric character references (27)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&copy
+"###,
+ DANGER
+ ),
+ r###"<p>&amp;copy</p>
+"###,
+ r###"Entity and numeric character references (28)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&MadeUpEntity;
+"###,
+ DANGER
+ ),
+ r###"<p>&amp;MadeUpEntity;</p>
+"###,
+ r###"Entity and numeric character references (29)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="&ouml;&ouml;.html">
+"###,
+ DANGER
+ ),
+ r###"<a href="&ouml;&ouml;.html">
+"###,
+ r###"Entity and numeric character references (30)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo](/f&ouml;&ouml; "f&ouml;&ouml;")
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
+"###,
+ r###"Entity and numeric character references (31)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+
+[foo]: /f&ouml;&ouml; "f&ouml;&ouml;"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
+"###,
+ r###"Entity and numeric character references (32)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"``` f&ouml;&ouml;
+foo
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code class="language-föö">foo
+</code></pre>
+"###,
+ r###"Entity and numeric character references (33)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`f&ouml;&ouml;`
+"###,
+ DANGER
+ ),
+ r###"<p><code>f&amp;ouml;&amp;ouml;</code></p>
+"###,
+ r###"Entity and numeric character references (34)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" f&ouml;f&ouml;
+"###,
+ DANGER
+ ),
+ r###"<pre><code>f&amp;ouml;f&amp;ouml;
+</code></pre>
+"###,
+ r###"Entity and numeric character references (35)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&#42;foo&#42;
+*foo*
+"###,
+ DANGER
+ ),
+ r###"<p>*foo*
+<em>foo</em></p>
+"###,
+ r###"Entity and numeric character references (36)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"&#42; foo
+
+ // * foo
+ // "###, DANGER),
+ // r###"<p>* foo</p>
+ // <ul>
+ // <li>foo</li>
+ // </ul>
+ // "###,
+ // r###"Entity and numeric character references (37)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo&#10;&#10;bar
+"###,
+ DANGER
+ ),
+ r###"<p>foo
+
+bar</p>
+"###,
+ r###"Entity and numeric character references (38)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"&#9;foo
+"###,
+ DANGER
+ ),
+ r###"<p> foo</p>
+"###,
+ r###"Entity and numeric character references (39)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[a](url &quot;tit&quot;)
+"###,
+ DANGER
+ ),
+ r###"<p>[a](url &quot;tit&quot;)</p>
+"###,
+ r###"Entity and numeric character references (40)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"- `one
+ // - two`
+ // "###, DANGER),
+ // r###"<ul>
+ // <li>`one</li>
+ // <li>two`</li>
+ // </ul>
+ // "###,
+ // r###"Precedence (41)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"***
+---
+___
+"###,
+ DANGER
+ ),
+ r###"<hr />
+<hr />
+<hr />
+"###,
+ r###"Thematic breaks (42)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"+++
+"###,
+ DANGER
+ ),
+ r###"<p>+++</p>
+"###,
+ r###"Thematic breaks (43)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"===
+"###,
+ DANGER
+ ),
+ r###"<p>===</p>
+"###,
+ r###"Thematic breaks (44)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"--
+**
+__
+"###,
+ DANGER
+ ),
+ r###"<p>--
+**
+__</p>
+"###,
+ r###"Thematic breaks (45)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ***
+ ***
+ ***
+"###,
+ DANGER
+ ),
+ r###"<hr />
+<hr />
+<hr />
+"###,
+ r###"Thematic breaks (46)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ***
+"###,
+ DANGER
+ ),
+ r###"<pre><code>***
+</code></pre>
+"###,
+ r###"Thematic breaks (47)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+ ***
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+***</p>
+"###,
+ r###"Thematic breaks (48)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_____________________________________
+"###,
+ DANGER
+ ),
+ r###"<hr />
+"###,
+ r###"Thematic breaks (49)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" - - -
+"###,
+ DANGER
+ ),
+ r###"<hr />
+"###,
+ r###"Thematic breaks (50)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ** * ** * ** * **
+"###,
+ DANGER
+ ),
+ r###"<hr />
+"###,
+ r###"Thematic breaks (51)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- - - -
+"###,
+ DANGER
+ ),
+ r###"<hr />
+"###,
+ r###"Thematic breaks (52)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- - - -
+"###,
+ DANGER
+ ),
+ r###"<hr />
+"###,
+ r###"Thematic breaks (53)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_ _ _ _ a
+
+a------
+
+---a---
+"###,
+ DANGER
+ ),
+ r###"<p>_ _ _ _ a</p>
+<p>a------</p>
+<p>---a---</p>
+"###,
+ r###"Thematic breaks (54)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" *-*
+"###,
+ DANGER
+ ),
+ r###"<p><em>-</em></p>
+"###,
+ r###"Thematic breaks (55)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"- foo
+ // ***
+ // - bar
+ // "###, DANGER),
+ // r###"<ul>
+ // <li>foo</li>
+ // </ul>
+ // <hr />
+ // <ul>
+ // <li>bar</li>
+ // </ul>
+ // "###,
+ // r###"Thematic breaks (56)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+***
+bar
+"###,
+ DANGER
+ ),
+ r###"<p>Foo</p>
+<hr />
+<p>bar</p>
+"###,
+ r###"Thematic breaks (57)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+---
+bar
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo</h2>
+<p>bar</p>
+"###,
+ r###"Thematic breaks (58)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"* Foo
+ // * * *
+ // * Bar
+ // "###, DANGER),
+ // r###"<ul>
+ // <li>Foo</li>
+ // </ul>
+ // <hr />
+ // <ul>
+ // <li>Bar</li>
+ // </ul>
+ // "###,
+ // r###"Thematic breaks (59)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- Foo
+- * * *
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>Foo</li>
+<li>
+<hr />
+</li>
+</ul>
+"###,
+ r###"Thematic breaks (60)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# foo
+## foo
+### foo
+#### foo
+##### foo
+###### foo
+"###,
+ DANGER
+ ),
+ r###"<h1>foo</h1>
+<h2>foo</h2>
+<h3>foo</h3>
+<h4>foo</h4>
+<h5>foo</h5>
+<h6>foo</h6>
+"###,
+ r###"ATX headings (61)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"####### foo
+"###,
+ DANGER
+ ),
+ r###"<p>####### foo</p>
+"###,
+ r###"ATX headings (62)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"#5 bolt
+
+#hashtag
+"###,
+ DANGER
+ ),
+ r###"<p>#5 bolt</p>
+<p>#hashtag</p>
+"###,
+ r###"ATX headings (63)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\## foo
+"###,
+ DANGER
+ ),
+ r###"<p>## foo</p>
+"###,
+ r###"ATX headings (64)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# foo *bar* \*baz\*
+"###,
+ DANGER
+ ),
+ r###"<h1>foo <em>bar</em> *baz*</h1>
+"###,
+ r###"ATX headings (65)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# foo
+"###,
+ DANGER
+ ),
+ r###"<h1>foo</h1>
+"###,
+ r###"ATX headings (66)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ### foo
+ ## foo
+ # foo
+"###,
+ DANGER
+ ),
+ r###"<h3>foo</h3>
+<h2>foo</h2>
+<h1>foo</h1>
+"###,
+ r###"ATX headings (67)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" # foo
+"###,
+ DANGER
+ ),
+ r###"<pre><code># foo
+</code></pre>
+"###,
+ r###"ATX headings (68)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+ # bar
+"###,
+ DANGER
+ ),
+ r###"<p>foo
+# bar</p>
+"###,
+ r###"ATX headings (69)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"## foo ##
+ ### bar ###
+"###,
+ DANGER
+ ),
+ r###"<h2>foo</h2>
+<h3>bar</h3>
+"###,
+ r###"ATX headings (70)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# foo ##################################
+##### foo ##
+"###,
+ DANGER
+ ),
+ r###"<h1>foo</h1>
+<h5>foo</h5>
+"###,
+ r###"ATX headings (71)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"### foo ###
+"###,
+ DANGER
+ ),
+ r###"<h3>foo</h3>
+"###,
+ r###"ATX headings (72)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"### foo ### b
+"###,
+ DANGER
+ ),
+ r###"<h3>foo ### b</h3>
+"###,
+ r###"ATX headings (73)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# foo#
+"###,
+ DANGER
+ ),
+ r###"<h1>foo#</h1>
+"###,
+ r###"ATX headings (74)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"### foo \###
+## foo #\##
+# foo \#
+"###,
+ DANGER
+ ),
+ r###"<h3>foo ###</h3>
+<h2>foo ###</h2>
+<h1>foo #</h1>
+"###,
+ r###"ATX headings (75)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"****
+## foo
+****
+"###,
+ DANGER
+ ),
+ r###"<hr />
+<h2>foo</h2>
+<hr />
+"###,
+ r###"ATX headings (76)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo bar
+# baz
+Bar foo
+"###,
+ DANGER
+ ),
+ r###"<p>Foo bar</p>
+<h1>baz</h1>
+<p>Bar foo</p>
+"###,
+ r###"ATX headings (77)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"##
+#
+### ###
+"###,
+ DANGER
+ ),
+ r###"<h2></h2>
+<h1></h1>
+<h3></h3>
+"###,
+ r###"ATX headings (78)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo *bar*
+=========
+
+Foo *bar*
+---------
+"###,
+ DANGER
+ ),
+ r###"<h1>Foo <em>bar</em></h1>
+<h2>Foo <em>bar</em></h2>
+"###,
+ r###"Setext headings (79)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo *bar
+baz*
+====
+"###,
+ DANGER
+ ),
+ r###"<h1>Foo <em>bar
+baz</em></h1>
+"###,
+ r###"Setext headings (80)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" Foo *bar
+baz*
+====
+"###,
+ DANGER
+ ),
+ r###"<h1>Foo <em>bar
+baz</em></h1>
+"###,
+ r###"Setext headings (81)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+-------------------------
+
+Foo
+=
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo</h2>
+<h1>Foo</h1>
+"###,
+ r###"Setext headings (82)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" Foo
+---
+
+ Foo
+-----
+
+ Foo
+ ===
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo</h2>
+<h2>Foo</h2>
+<h1>Foo</h1>
+"###,
+ r###"Setext headings (83)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" Foo
+ ---
+
+ Foo
+---
+"###,
+ DANGER
+ ),
+ r###"<pre><code>Foo
+---
+
+Foo
+</code></pre>
+<hr />
+"###,
+ r###"Setext headings (84)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+ ----
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo</h2>
+"###,
+ r###"Setext headings (85)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+ ---
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+---</p>
+"###,
+ r###"Setext headings (86)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+= =
+
+Foo
+--- -
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+= =</p>
+<p>Foo</p>
+<hr />
+"###,
+ r###"Setext headings (87)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+-----
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo</h2>
+"###,
+ r###"Setext headings (88)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo\
+----
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo\</h2>
+"###,
+ r###"Setext headings (89)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`Foo
+----
+`
+
+<a title="a lot
+---
+of dashes"/>
+"###,
+ DANGER
+ ),
+ r###"<h2>`Foo</h2>
+<p>`</p>
+<h2>&lt;a title=&quot;a lot</h2>
+<p>of dashes&quot;/&gt;</p>
+"###,
+ r###"Setext headings (90)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> Foo
+---
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>Foo</p>
+</blockquote>
+<hr />
+"###,
+ r###"Setext headings (91)"###
+ );
+
+ // To do: setext heading interrupt?
+ // assert_eq!(
+ // micromark_with_options(r###"> foo
+ // bar
+ // ===
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <p>foo
+ // bar
+ // ===</p>
+ // </blockquote>
+ // "###,
+ // r###"Setext headings (92)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- Foo
+---
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>Foo</li>
+</ul>
+<hr />
+"###,
+ r###"Setext headings (93)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+Bar
+---
+"###,
+ DANGER
+ ),
+ r###"<h2>Foo
+Bar</h2>
+"###,
+ r###"Setext headings (94)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"---
+Foo
+---
+Bar
+---
+Baz
+"###,
+ DANGER
+ ),
+ r###"<hr />
+<h2>Foo</h2>
+<h2>Bar</h2>
+<p>Baz</p>
+"###,
+ r###"Setext headings (95)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"
+====
+"###,
+ DANGER
+ ),
+ r###"<p>====</p>
+"###,
+ r###"Setext headings (96)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"---
+---
+"###,
+ DANGER
+ ),
+ r###"<hr />
+<hr />
+"###,
+ r###"Setext headings (97)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+-----
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>foo</li>
+</ul>
+<hr />
+"###,
+ r###"Setext headings (98)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo
+---
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo
+</code></pre>
+<hr />
+"###,
+ r###"Setext headings (99)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+-----
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>foo</p>
+</blockquote>
+<hr />
+"###,
+ r###"Setext headings (100)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\> foo
+------
+"###,
+ DANGER
+ ),
+ r###"<h2>&gt; foo</h2>
+"###,
+ r###"Setext headings (101)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+
+bar
+---
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>Foo</p>
+<h2>bar</h2>
+<p>baz</p>
+"###,
+ r###"Setext headings (102)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+bar
+
+---
+
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+bar</p>
+<hr />
+<p>baz</p>
+"###,
+ r###"Setext headings (103)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+bar
+* * *
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+bar</p>
+<hr />
+<p>baz</p>
+"###,
+ r###"Setext headings (104)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+bar
+\---
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+bar
+---
+baz</p>
+"###,
+ r###"Setext headings (105)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" a simple
+ indented code block
+"###,
+ DANGER
+ ),
+ r###"<pre><code>a simple
+ indented code block
+</code></pre>
+"###,
+ r###"Indented code blocks (106)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" - foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<p>bar</p>
+</li>
+</ul>
+"###,
+ r###"Indented code blocks (107)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"1. foo
+
+ // - bar
+ // "###, DANGER),
+ // r###"<ol>
+ // <li>
+ // <p>foo</p>
+ // <ul>
+ // <li>bar</li>
+ // </ul>
+ // </li>
+ // </ol>
+ // "###,
+ // r###"Indented code blocks (108)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" <a/>
+ *hi*
+
+ - one
+"###,
+ DANGER
+ ),
+ r###"<pre><code>&lt;a/&gt;
+*hi*
+
+- one
+</code></pre>
+"###,
+ r###"Indented code blocks (109)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" chunk1
+
+ chunk2
+
+
+
+ chunk3
+"###,
+ DANGER
+ ),
+ r###"<pre><code>chunk1
+
+chunk2
+
+
+
+chunk3
+</code></pre>
+"###,
+ r###"Indented code blocks (110)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" chunk1
+
+ chunk2
+"###,
+ DANGER
+ ),
+ r###"<pre><code>chunk1
+
+ chunk2
+</code></pre>
+"###,
+ r###"Indented code blocks (111)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+ bar
+
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+bar</p>
+"###,
+ r###"Indented code blocks (112)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo
+bar
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo
+</code></pre>
+<p>bar</p>
+"###,
+ r###"Indented code blocks (113)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# Heading
+ foo
+Heading
+------
+ foo
+----
+"###,
+ DANGER
+ ),
+ r###"<h1>Heading</h1>
+<pre><code>foo
+</code></pre>
+<h2>Heading</h2>
+<pre><code>foo
+</code></pre>
+<hr />
+"###,
+ r###"Indented code blocks (114)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo
+ bar
+"###,
+ DANGER
+ ),
+ r###"<pre><code> foo
+bar
+</code></pre>
+"###,
+ r###"Indented code blocks (115)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"
+
+ foo
+
+
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo
+</code></pre>
+"###,
+ r###"Indented code blocks (116)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo
+"###,
+ DANGER
+ ),
+ r###"<pre><code>foo
+</code></pre>
+"###,
+ r###"Indented code blocks (117)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+<
+ >
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>&lt;
+ &gt;
+</code></pre>
+"###,
+ r###"Fenced code blocks (118)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~
+<
+ >
+~~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code>&lt;
+ &gt;
+</code></pre>
+"###,
+ r###"Fenced code blocks (119)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"``
+foo
+``
+"###,
+ DANGER
+ ),
+ r###"<p><code>foo</code></p>
+"###,
+ r###"Fenced code blocks (120)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+aaa
+~~~
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+~~~
+</code></pre>
+"###,
+ r###"Fenced code blocks (121)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~
+aaa
+```
+~~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+```
+</code></pre>
+"###,
+ r###"Fenced code blocks (122)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"````
+aaa
+```
+``````
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+```
+</code></pre>
+"###,
+ r###"Fenced code blocks (123)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~~
+aaa
+~~~
+~~~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+~~~
+</code></pre>
+"###,
+ r###"Fenced code blocks (124)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+"###,
+ DANGER
+ ),
+ r###"<pre><code></code></pre>
+"###,
+ r###"Fenced code blocks (125)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`````
+
+```
+aaa
+"###,
+ DANGER
+ ),
+ r###"<pre><code>
+```
+aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (126)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> ```
+> aaa
+
+bbb
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<pre><code>aaa
+</code></pre>
+</blockquote>
+<p>bbb</p>
+"###,
+ r###"Fenced code blocks (127)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+
+
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>
+
+</code></pre>
+"###,
+ r###"Fenced code blocks (128)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code></code></pre>
+"###,
+ r###"Fenced code blocks (129)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ```
+ aaa
+aaa
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (130)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ```
+aaa
+ aaa
+aaa
+ ```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+aaa
+aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (131)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ```
+ aaa
+ aaa
+ aaa
+ ```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+ aaa
+aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (132)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ```
+ aaa
+ ```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>```
+aaa
+```
+</code></pre>
+"###,
+ r###"Fenced code blocks (133)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+aaa
+ ```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (134)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" ```
+aaa
+ ```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (135)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+aaa
+ ```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+ ```
+</code></pre>
+"###,
+ r###"Fenced code blocks (136)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"``` ```
+aaa
+"###,
+ DANGER
+ ),
+ r###"<p><code> </code>
+aaa</p>
+"###,
+ r###"Fenced code blocks (137)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~~~~
+aaa
+~~~ ~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+~~~ ~~
+</code></pre>
+"###,
+ r###"Fenced code blocks (138)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+```
+bar
+```
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>foo</p>
+<pre><code>bar
+</code></pre>
+<p>baz</p>
+"###,
+ r###"Fenced code blocks (139)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+---
+~~~
+bar
+~~~
+# baz
+"###,
+ DANGER
+ ),
+ r###"<h2>foo</h2>
+<pre><code>bar
+</code></pre>
+<h1>baz</h1>
+"###,
+ r###"Fenced code blocks (140)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```ruby
+def foo(x)
+ return 3
+end
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code class="language-ruby">def foo(x)
+ return 3
+end
+</code></pre>
+"###,
+ r###"Fenced code blocks (141)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~~ ruby startline=3 $%@#$
+def foo(x)
+ return 3
+end
+~~~~~~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code class="language-ruby">def foo(x)
+ return 3
+end
+</code></pre>
+"###,
+ r###"Fenced code blocks (142)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"````;
+````
+"###,
+ DANGER
+ ),
+ r###"<pre><code class="language-;"></code></pre>
+"###,
+ r###"Fenced code blocks (143)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"``` aa ```
+foo
+"###,
+ DANGER
+ ),
+ r###"<p><code>aa</code>
+foo</p>
+"###,
+ r###"Fenced code blocks (144)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"~~~ aa ``` ~~~
+foo
+~~~
+"###,
+ DANGER
+ ),
+ r###"<pre><code class="language-aa">foo
+</code></pre>
+"###,
+ r###"Fenced code blocks (145)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+``` aaa
+```
+"###,
+ DANGER
+ ),
+ r###"<pre><code>``` aaa
+</code></pre>
+"###,
+ r###"Fenced code blocks (146)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<table><tr><td>
+<pre>
+**Hello**,
+
+_world_.
+</pre>
+</td></tr></table>
+"###,
+ DANGER
+ ),
+ r###"<table><tr><td>
+<pre>
+**Hello**,
+<p><em>world</em>.
+</pre></p>
+</td></tr></table>
+"###,
+ r###"HTML blocks (147)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<table>
+ <tr>
+ <td>
+ hi
+ </td>
+ </tr>
+</table>
+
+okay.
+"###,
+ DANGER
+ ),
+ r###"<table>
+ <tr>
+ <td>
+ hi
+ </td>
+ </tr>
+</table>
+<p>okay.</p>
+"###,
+ r###"HTML blocks (148)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" <div>
+ *hello*
+ <foo><a>
+"###,
+ DANGER
+ ),
+ r###" <div>
+ *hello*
+ <foo><a>
+"###,
+ r###"HTML blocks (149)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"</div>
+*foo*
+"###,
+ DANGER
+ ),
+ r###"</div>
+*foo*
+"###,
+ r###"HTML blocks (150)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<DIV CLASS="foo">
+
+*Markdown*
+
+</DIV>
+"###,
+ DANGER
+ ),
+ r###"<DIV CLASS="foo">
+<p><em>Markdown</em></p>
+</DIV>
+"###,
+ r###"HTML blocks (151)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div id="foo"
+ class="bar">
+</div>
+"###,
+ DANGER
+ ),
+ r###"<div id="foo"
+ class="bar">
+</div>
+"###,
+ r###"HTML blocks (152)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div id="foo" class="bar
+ baz">
+</div>
+"###,
+ DANGER
+ ),
+ r###"<div id="foo" class="bar
+ baz">
+</div>
+"###,
+ r###"HTML blocks (153)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div>
+*foo*
+
+*bar*
+"###,
+ DANGER
+ ),
+ r###"<div>
+*foo*
+<p><em>bar</em></p>
+"###,
+ r###"HTML blocks (154)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div id="foo"
+*hi*
+"###,
+ DANGER
+ ),
+ r###"<div id="foo"
+*hi*
+"###,
+ r###"HTML blocks (155)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div class
+foo
+"###,
+ DANGER
+ ),
+ r###"<div class
+foo
+"###,
+ r###"HTML blocks (156)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div *???-&&&-<---
+*foo*
+"###,
+ DANGER
+ ),
+ r###"<div *???-&&&-<---
+*foo*
+"###,
+ r###"HTML blocks (157)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div><a href="bar">*foo*</a></div>
+"###,
+ DANGER
+ ),
+ r###"<div><a href="bar">*foo*</a></div>
+"###,
+ r###"HTML blocks (158)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<table><tr><td>
+foo
+</td></tr></table>
+"###,
+ DANGER
+ ),
+ r###"<table><tr><td>
+foo
+</td></tr></table>
+"###,
+ r###"HTML blocks (159)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div></div>
+``` c
+int x = 33;
+```
+"###,
+ DANGER
+ ),
+ r###"<div></div>
+``` c
+int x = 33;
+```
+"###,
+ r###"HTML blocks (160)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="foo">
+*bar*
+</a>
+"###,
+ DANGER
+ ),
+ r###"<a href="foo">
+*bar*
+</a>
+"###,
+ r###"HTML blocks (161)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<Warning>
+*bar*
+</Warning>
+"###,
+ DANGER
+ ),
+ r###"<Warning>
+*bar*
+</Warning>
+"###,
+ r###"HTML blocks (162)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<i class="foo">
+*bar*
+</i>
+"###,
+ DANGER
+ ),
+ r###"<i class="foo">
+*bar*
+</i>
+"###,
+ r###"HTML blocks (163)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"</ins>
+*bar*
+"###,
+ DANGER
+ ),
+ r###"</ins>
+*bar*
+"###,
+ r###"HTML blocks (164)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<del>
+*foo*
+</del>
+"###,
+ DANGER
+ ),
+ r###"<del>
+*foo*
+</del>
+"###,
+ r###"HTML blocks (165)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<del>
+
+*foo*
+
+</del>
+"###,
+ DANGER
+ ),
+ r###"<del>
+<p><em>foo</em></p>
+</del>
+"###,
+ r###"HTML blocks (166)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<del>*foo*</del>
+"###,
+ DANGER
+ ),
+ r###"<p><del><em>foo</em></del></p>
+"###,
+ r###"HTML blocks (167)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<pre language="haskell"><code>
+import Text.HTML.TagSoup
+
+main :: IO ()
+main = print $ parseTags tags
+</code></pre>
+okay
+"###,
+ DANGER
+ ),
+ r###"<pre language="haskell"><code>
+import Text.HTML.TagSoup
+
+main :: IO ()
+main = print $ parseTags tags
+</code></pre>
+<p>okay</p>
+"###,
+ r###"HTML blocks (168)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<script type="text/javascript">
+// JavaScript example
+
+document.getElementById("demo").innerHTML = "Hello JavaScript!";
+</script>
+okay
+"###,
+ DANGER
+ ),
+ r###"<script type="text/javascript">
+// JavaScript example
+
+document.getElementById("demo").innerHTML = "Hello JavaScript!";
+</script>
+<p>okay</p>
+"###,
+ r###"HTML blocks (169)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<textarea>
+
+*foo*
+
+_bar_
+
+</textarea>
+"###,
+ DANGER
+ ),
+ r###"<textarea>
+
+*foo*
+
+_bar_
+
+</textarea>
+"###,
+ r###"HTML blocks (170)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<style
+ type="text/css">
+h1 {color:red;}
+
+p {color:blue;}
+</style>
+okay
+"###,
+ DANGER
+ ),
+ r###"<style
+ type="text/css">
+h1 {color:red;}
+
+p {color:blue;}
+</style>
+<p>okay</p>
+"###,
+ r###"HTML blocks (171)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<style
+ type="text/css">
+
+foo
+"###,
+ DANGER
+ ),
+ r###"<style
+ type="text/css">
+
+foo
+"###,
+ r###"HTML blocks (172)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> <div>
+> foo
+
+bar
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<div>
+foo
+</blockquote>
+<p>bar</p>
+"###,
+ r###"HTML blocks (173)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"- <div>
+ // - foo
+ // "###, DANGER),
+ // r###"<ul>
+ // <li>
+ // <div>
+ // </li>
+ // <li>foo</li>
+ // </ul>
+ // "###,
+ // r###"HTML blocks (174)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<style>p{color:red;}</style>
+*foo*
+"###,
+ DANGER
+ ),
+ r###"<style>p{color:red;}</style>
+<p><em>foo</em></p>
+"###,
+ r###"HTML blocks (175)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<!-- foo -->*bar*
+*baz*
+"###,
+ DANGER
+ ),
+ r###"<!-- foo -->*bar*
+<p><em>baz</em></p>
+"###,
+ r###"HTML blocks (176)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<script>
+foo
+</script>1. *bar*
+"###,
+ DANGER
+ ),
+ r###"<script>
+foo
+</script>1. *bar*
+"###,
+ r###"HTML blocks (177)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<!-- Foo
+
+bar
+ baz -->
+okay
+"###,
+ DANGER
+ ),
+ r###"<!-- Foo
+
+bar
+ baz -->
+<p>okay</p>
+"###,
+ r###"HTML blocks (178)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<?php
+
+ echo '>';
+
+?>
+okay
+"###,
+ DANGER
+ ),
+ r###"<?php
+
+ echo '>';
+
+?>
+<p>okay</p>
+"###,
+ r###"HTML blocks (179)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<!DOCTYPE html>
+"###,
+ DANGER
+ ),
+ r###"<!DOCTYPE html>
+"###,
+ r###"HTML blocks (180)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<![CDATA[
+function matchwo(a,b)
+{
+ if (a < b && a < 0) then {
+ return 1;
+
+ } else {
+
+ return 0;
+ }
+}
+]]>
+okay
+"###,
+ DANGER
+ ),
+ r###"<![CDATA[
+function matchwo(a,b)
+{
+ if (a < b && a < 0) then {
+ return 1;
+
+ } else {
+
+ return 0;
+ }
+}
+]]>
+<p>okay</p>
+"###,
+ r###"HTML blocks (181)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" <!-- foo -->
+
+ <!-- foo -->
+"###,
+ DANGER
+ ),
+ r###" <!-- foo -->
+<pre><code>&lt;!-- foo --&gt;
+</code></pre>
+"###,
+ r###"HTML blocks (182)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" <div>
+
+ <div>
+"###,
+ DANGER
+ ),
+ r###" <div>
+<pre><code>&lt;div&gt;
+</code></pre>
+"###,
+ r###"HTML blocks (183)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+<div>
+bar
+</div>
+"###,
+ DANGER
+ ),
+ r###"<p>Foo</p>
+<div>
+bar
+</div>
+"###,
+ r###"HTML blocks (184)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div>
+bar
+</div>
+*foo*
+"###,
+ DANGER
+ ),
+ r###"<div>
+bar
+</div>
+*foo*
+"###,
+ r###"HTML blocks (185)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+<a href="bar">
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+<a href="bar">
+baz</p>
+"###,
+ r###"HTML blocks (186)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div>
+
+*Emphasized* text.
+
+</div>
+"###,
+ DANGER
+ ),
+ r###"<div>
+<p><em>Emphasized</em> text.</p>
+</div>
+"###,
+ r###"HTML blocks (187)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<div>
+*Emphasized* text.
+</div>
+"###,
+ DANGER
+ ),
+ r###"<div>
+*Emphasized* text.
+</div>
+"###,
+ r###"HTML blocks (188)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<table>
+
+<tr>
+
+<td>
+Hi
+</td>
+
+</tr>
+
+</table>
+"###,
+ DANGER
+ ),
+ r###"<table>
+<tr>
+<td>
+Hi
+</td>
+</tr>
+</table>
+"###,
+ r###"HTML blocks (189)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<table>
+
+ <tr>
+
+ <td>
+ Hi
+ </td>
+
+ </tr>
+
+</table>
+"###,
+ DANGER
+ ),
+ r###"<table>
+ <tr>
+<pre><code>&lt;td&gt;
+ Hi
+&lt;/td&gt;
+</code></pre>
+ </tr>
+</table>
+"###,
+ r###"HTML blocks (190)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url "title"
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">foo</a></p>
+"###,
+ r###"Link reference definitions (191)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" [foo]:
+ /url
+ 'the title'
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="the title">foo</a></p>
+"###,
+ r###"Link reference definitions (192)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[Foo*bar\]]:my_(url) 'title (with parens)'
+
+[Foo*bar\]]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>
+"###,
+ r###"Link reference definitions (193)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[Foo bar]:
+<my url>
+'title'
+
+[Foo bar]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="my%20url" title="title">Foo bar</a></p>
+"###,
+ r###"Link reference definitions (194)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url '
+title
+line1
+line2
+'
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="
+title
+line1
+line2
+">foo</a></p>
+"###,
+ r###"Link reference definitions (195)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url 'title
+
+with blank line'
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]: /url 'title</p>
+<p>with blank line'</p>
+<p>[foo]</p>
+"###,
+ r###"Link reference definitions (196)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]:
+/url
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url">foo</a></p>
+"###,
+ r###"Link reference definitions (197)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]:
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]:</p>
+<p>[foo]</p>
+"###,
+ r###"Link reference definitions (198)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: <>
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="">foo</a></p>
+"###,
+ r###"Link reference definitions (199)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: <bar>(baz)
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]: <bar>(baz)</p>
+<p>[foo]</p>
+"###,
+ r###"Link reference definitions (200)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url\bar\*baz "foo\"bar\baz"
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url%5Cbar*baz" title="foo&quot;bar\baz">foo</a></p>
+"###,
+ r###"Link reference definitions (201)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+
+[foo]: url
+"###,
+ DANGER
+ ),
+ r###"<p><a href="url">foo</a></p>
+"###,
+ r###"Link reference definitions (202)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+
+[foo]: first
+[foo]: second
+"###,
+ DANGER
+ ),
+ r###"<p><a href="first">foo</a></p>
+"###,
+ r###"Link reference definitions (203)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[FOO]: /url
+
+[Foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url">Foo</a></p>
+"###,
+ r###"Link reference definitions (204)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[ΑΓΩ]: /φου
+
+[αγω]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>
+"###,
+ r###"Link reference definitions (205)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url
+"###,
+ DANGER
+ ),
+ r###""###,
+ r###"Link reference definitions (206)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[
+foo
+]: /url
+bar
+"###,
+ DANGER
+ ),
+ r###"<p>bar</p>
+"###,
+ r###"Link reference definitions (207)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url "title" ok
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]: /url &quot;title&quot; ok</p>
+"###,
+ r###"Link reference definitions (208)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url
+"title" ok
+"###,
+ DANGER
+ ),
+ r###"<p>&quot;title&quot; ok</p>
+"###,
+ r###"Link reference definitions (209)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" [foo]: /url "title"
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<pre><code>[foo]: /url &quot;title&quot;
+</code></pre>
+<p>[foo]</p>
+"###,
+ r###"Link reference definitions (210)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```
+[foo]: /url
+```
+
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<pre><code>[foo]: /url
+</code></pre>
+<p>[foo]</p>
+"###,
+ r###"Link reference definitions (211)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo
+[bar]: /baz
+
+[bar]
+"###,
+ DANGER
+ ),
+ r###"<p>Foo
+[bar]: /baz</p>
+<p>[bar]</p>
+"###,
+ r###"Link reference definitions (212)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"# [Foo]
+[foo]: /url
+> bar
+"###,
+ DANGER
+ ),
+ r###"<h1><a href="/url">Foo</a></h1>
+<blockquote>
+<p>bar</p>
+</blockquote>
+"###,
+ r###"Link reference definitions (213)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url
+bar
+===
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<h1>bar</h1>
+<p><a href="/url">foo</a></p>
+"###,
+ r###"Link reference definitions (214)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url
+===
+[foo]
+"###,
+ DANGER
+ ),
+ r###"<p>===
+<a href="/url">foo</a></p>
+"###,
+ r###"Link reference definitions (215)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /foo-url "foo"
+[bar]: /bar-url
+ "bar"
+[baz]: /baz-url
+
+[foo],
+[bar],
+[baz]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/foo-url" title="foo">foo</a>,
+<a href="/bar-url" title="bar">bar</a>,
+<a href="/baz-url">baz</a></p>
+"###,
+ r###"Link reference definitions (216)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"[foo]
+
+ // > [foo]: /url
+ // "###, DANGER),
+ // r###"<p><a href="/url">foo</a></p>
+ // <blockquote>
+ // </blockquote>
+ // "###,
+ // r###"Link reference definitions (217)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"aaa
+
+bbb
+"###,
+ DANGER
+ ),
+ r###"<p>aaa</p>
+<p>bbb</p>
+"###,
+ r###"Paragraphs (218)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"aaa
+bbb
+
+ccc
+ddd
+"###,
+ DANGER
+ ),
+ r###"<p>aaa
+bbb</p>
+<p>ccc
+ddd</p>
+"###,
+ r###"Paragraphs (219)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"aaa
+
+
+bbb
+"###,
+ DANGER
+ ),
+ r###"<p>aaa</p>
+<p>bbb</p>
+"###,
+ r###"Paragraphs (220)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" aaa
+ bbb
+"###,
+ DANGER
+ ),
+ r###"<p>aaa
+bbb</p>
+"###,
+ r###"Paragraphs (221)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"aaa
+ bbb
+ ccc
+"###,
+ DANGER
+ ),
+ r###"<p>aaa
+bbb
+ccc</p>
+"###,
+ r###"Paragraphs (222)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" aaa
+bbb
+"###,
+ DANGER
+ ),
+ r###"<p>aaa
+bbb</p>
+"###,
+ r###"Paragraphs (223)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" aaa
+bbb
+"###,
+ DANGER
+ ),
+ r###"<pre><code>aaa
+</code></pre>
+<p>bbb</p>
+"###,
+ r###"Paragraphs (224)"###
+ );
+
+ // To do: whitespace trimming of editor likely?
+ // assert_eq!(
+ // micromark_with_options(r###"aaa
+ // bbb
+ // "###, DANGER),
+ // r###"<p>aaa<br />
+ // bbb</p>
+ // "###,
+ // r###"Paragraphs (225)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"
+
+aaa
+
+
+# aaa
+
+
+"###,
+ DANGER
+ ),
+ r###"<p>aaa</p>
+<h1>aaa</h1>
+"###,
+ r###"Blank lines (226)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> # Foo
+> bar
+> baz
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<h1>Foo</h1>
+<p>bar
+baz</p>
+</blockquote>
+"###,
+ r###"Block quotes (227)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"># Foo
+>bar
+> baz
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<h1>Foo</h1>
+<p>bar
+baz</p>
+</blockquote>
+"###,
+ r###"Block quotes (228)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" > # Foo
+ > bar
+ > baz
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<h1>Foo</h1>
+<p>bar
+baz</p>
+</blockquote>
+"###,
+ r###"Block quotes (229)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" > # Foo
+ > bar
+ > baz
+"###,
+ DANGER
+ ),
+ r###"<pre><code>&gt; # Foo
+&gt; bar
+&gt; baz
+</code></pre>
+"###,
+ r###"Block quotes (230)"###
+ );
+
+ // To do: whitespace trimming of editor likely?
+ // assert_eq!(
+ // micromark_with_options(r###"> # Foo
+ // > bar
+ // baz
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <h1>Foo</h1>
+ // <p>bar
+ // baz</p>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (231)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> bar
+baz
+> foo
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>bar
+baz
+foo</p>
+</blockquote>
+"###,
+ r###"Block quotes (232)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+---
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>foo</p>
+</blockquote>
+<hr />
+"###,
+ r###"Block quotes (233)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"> - foo
+ // - bar
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <ul>
+ // <li>foo</li>
+ // </ul>
+ // </blockquote>
+ // <ul>
+ // <li>bar</li>
+ // </ul>
+ // "###,
+ // r###"Block quotes (234)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+ bar
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<pre><code>foo
+</code></pre>
+</blockquote>
+<pre><code>bar
+</code></pre>
+"###,
+ r###"Block quotes (235)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> ```
+foo
+```
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<pre><code></code></pre>
+</blockquote>
+<p>foo</p>
+<pre><code></code></pre>
+"###,
+ r###"Block quotes (236)"###
+ );
+
+ // To do: some bug with laziness.
+ // assert_eq!(
+ // micromark_with_options(r###"> foo
+ // - bar
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <p>foo
+ // - bar</p>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (237)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###">
+ // "###, DANGER),
+ // r###"<blockquote>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (238)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###">
+ // >
+ // >
+ // "###, DANGER),
+ // r###"<blockquote>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (239)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###">
+ // > foo
+ // >
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <p>foo</p>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (240)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+
+> bar
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>foo</p>
+</blockquote>
+<blockquote>
+<p>bar</p>
+</blockquote>
+"###,
+ r###"Block quotes (241)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+> bar
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>foo
+bar</p>
+</blockquote>
+"###,
+ r###"Block quotes (242)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> foo
+>
+> bar
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>foo</p>
+<p>bar</p>
+</blockquote>
+"###,
+ r###"Block quotes (243)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+> bar
+"###,
+ DANGER
+ ),
+ r###"<p>foo</p>
+<blockquote>
+<p>bar</p>
+</blockquote>
+"###,
+ r###"Block quotes (244)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> aaa
+***
+> bbb
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>aaa</p>
+</blockquote>
+<hr />
+<blockquote>
+<p>bbb</p>
+</blockquote>
+"###,
+ r###"Block quotes (245)"###
+ );
+
+ // To do: some bug with laziness.
+ // assert_eq!(
+ // micromark_with_options(r###"> bar
+ // baz
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <p>bar
+ // baz</p>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (246)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> bar
+
+baz
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>bar</p>
+</blockquote>
+<p>baz</p>
+"###,
+ r###"Block quotes (247)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> bar
+>
+baz
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<p>bar</p>
+</blockquote>
+<p>baz</p>
+"###,
+ r###"Block quotes (248)"###
+ );
+
+ // To do: some bug with laziness.
+ // assert_eq!(
+ // micromark_with_options(r###"> > > foo
+ // bar
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <blockquote>
+ // <blockquote>
+ // <p>foo
+ // bar</p>
+ // </blockquote>
+ // </blockquote>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (249)"###
+ // );
+
+ // To do: some bug with laziness.
+ // assert_eq!(
+ // micromark_with_options(r###">>> foo
+ // > bar
+ // >>baz
+ // "###, DANGER),
+ // r###"<blockquote>
+ // <blockquote>
+ // <blockquote>
+ // <p>foo
+ // bar
+ // baz</p>
+ // </blockquote>
+ // </blockquote>
+ // </blockquote>
+ // "###,
+ // r###"Block quotes (250)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"> code
+
+> not code
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<pre><code>code
+</code></pre>
+</blockquote>
+<blockquote>
+<p>not code</p>
+</blockquote>
+"###,
+ r###"Block quotes (251)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"A paragraph
+with two lines.
+
+ indented code
+
+> A block quote.
+"###,
+ DANGER
+ ),
+ r###"<p>A paragraph
+with two lines.</p>
+<pre><code>indented code
+</code></pre>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+"###,
+ r###"List items (252)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. A paragraph
+ with two lines.
+
+ indented code
+
+ > A block quote.
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>A paragraph
+with two lines.</p>
+<pre><code>indented code
+</code></pre>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+</li>
+</ol>
+"###,
+ r###"List items (253)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- one
+
+ two
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>one</li>
+</ul>
+<p>two</p>
+"###,
+ r###"List items (254)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- one
+
+ two
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>one</p>
+<p>two</p>
+</li>
+</ul>
+"###,
+ r###"List items (255)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" - one
+
+ two
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>one</li>
+</ul>
+<pre><code> two
+</code></pre>
+"###,
+ r###"List items (256)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" - one
+
+ two
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>one</p>
+<p>two</p>
+</li>
+</ul>
+"###,
+ r###"List items (257)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" > > 1. one
+>>
+>> two
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<blockquote>
+<ol>
+<li>
+<p>one</p>
+<p>two</p>
+</li>
+</ol>
+</blockquote>
+</blockquote>
+"###,
+ r###"List items (258)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###">>- one
+>>
+ > > two
+"###,
+ DANGER
+ ),
+ r###"<blockquote>
+<blockquote>
+<ul>
+<li>one</li>
+</ul>
+<p>two</p>
+</blockquote>
+</blockquote>
+"###,
+ r###"List items (259)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"-one
+
+2.two
+"###,
+ DANGER
+ ),
+ r###"<p>-one</p>
+<p>2.two</p>
+"###,
+ r###"List items (260)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<p>bar</p>
+</li>
+</ul>
+"###,
+ r###"List items (261)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. foo
+
+ ```
+ bar
+ ```
+
+ baz
+
+ > bam
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>foo</p>
+<pre><code>bar
+</code></pre>
+<p>baz</p>
+<blockquote>
+<p>bam</p>
+</blockquote>
+</li>
+</ol>
+"###,
+ r###"List items (262)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- Foo
+
+ bar
+
+
+ baz
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>Foo</p>
+<pre><code>bar
+
+
+baz
+</code></pre>
+</li>
+</ul>
+"###,
+ r###"List items (263)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"123456789. ok
+ // "###, DANGER),
+ // r###"<ol start="123456789">
+ // <li>ok</li>
+ // </ol>
+ // "###,
+ // r###"List items (264)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1234567890. not ok
+"###,
+ DANGER
+ ),
+ r###"<p>1234567890. not ok</p>
+"###,
+ r###"List items (265)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"0. ok
+ // "###, DANGER),
+ // r###"<ol start="0">
+ // <li>ok</li>
+ // </ol>
+ // "###,
+ // r###"List items (266)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"003. ok
+ // "###, DANGER),
+ // r###"<ol start="3">
+ // <li>ok</li>
+ // </ol>
+ // "###,
+ // r###"List items (267)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"-1. not ok
+"###,
+ DANGER
+ ),
+ r###"<p>-1. not ok</p>
+"###,
+ r###"List items (268)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<pre><code>bar
+</code></pre>
+</li>
+</ul>
+"###,
+ r###"List items (269)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" 10. foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ol start="10">
+<li>
+<p>foo</p>
+<pre><code>bar
+</code></pre>
+</li>
+</ol>
+"###,
+ r###"List items (270)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" indented code
+
+paragraph
+
+ more code
+"###,
+ DANGER
+ ),
+ r###"<pre><code>indented code
+</code></pre>
+<p>paragraph</p>
+<pre><code>more code
+</code></pre>
+"###,
+ r###"List items (271)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. indented code
+
+ paragraph
+
+ more code
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<pre><code>indented code
+</code></pre>
+<p>paragraph</p>
+<pre><code>more code
+</code></pre>
+</li>
+</ol>
+"###,
+ r###"List items (272)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. indented code
+
+ paragraph
+
+ more code
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<pre><code> indented code
+</code></pre>
+<p>paragraph</p>
+<pre><code>more code
+</code></pre>
+</li>
+</ol>
+"###,
+ r###"List items (273)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" foo
+
+bar
+"###,
+ DANGER
+ ),
+ r###"<p>foo</p>
+<p>bar</p>
+"###,
+ r###"List items (274)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>foo</li>
+</ul>
+<p>bar</p>
+"###,
+ r###"List items (275)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<p>bar</p>
+</li>
+</ul>
+"###,
+ r###"List items (276)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"-
+ foo
+-
+ ```
+ bar
+ ```
+-
+ baz
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>foo</li>
+<li>
+<pre><code>bar
+</code></pre>
+</li>
+<li>
+<pre><code>baz
+</code></pre>
+</li>
+</ul>
+"###,
+ r###"List items (277)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(r###"-
+ // foo
+ // "###, DANGER),
+ // r###"<ul>
+ // <li>foo</li>
+ // </ul>
+ // "###,
+ // r###"List items (278)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"-
+
+ foo
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li></li>
+</ul>
+<p>foo</p>
+"###,
+ r###"List items (279)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- foo
+ // -
+ // - bar
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>foo</li>
+ // <li></li>
+ // <li>bar</li>
+ // </ul>
+ // "###,
+ // r###"List items (280)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- foo
+ // -
+ // - bar
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>foo</li>
+ // <li></li>
+ // <li>bar</li>
+ // </ul>
+ // "###,
+ // r###"List items (281)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"1. foo
+ // 2.
+ // 3. bar
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ol>
+ // <li>foo</li>
+ // <li></li>
+ // <li>bar</li>
+ // </ol>
+ // "###,
+ // r###"List items (282)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"*
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li></li>
+ // </ul>
+ // "###,
+ // r###"List items (283)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+*
+
+foo
+1.
+"###,
+ DANGER
+ ),
+ r###"<p>foo
+*</p>
+<p>foo
+1.</p>
+"###,
+ r###"List items (284)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" 1. A paragraph
+ with two lines.
+
+ indented code
+
+ > A block quote.
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>A paragraph
+with two lines.</p>
+<pre><code>indented code
+</code></pre>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+</li>
+</ol>
+"###,
+ r###"List items (285)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" 1. A paragraph
+ with two lines.
+
+ indented code
+
+ > A block quote.
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>A paragraph
+with two lines.</p>
+<pre><code>indented code
+</code></pre>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+</li>
+</ol>
+"###,
+ r###"List items (286)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" 1. A paragraph
+ with two lines.
+
+ indented code
+
+ > A block quote.
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>A paragraph
+with two lines.</p>
+<pre><code>indented code
+</code></pre>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+</li>
+</ol>
+"###,
+ r###"List items (287)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" 1. A paragraph
+ with two lines.
+
+ indented code
+
+ > A block quote.
+"###,
+ DANGER
+ ),
+ r###"<pre><code>1. A paragraph
+ with two lines.
+
+ indented code
+
+ &gt; A block quote.
+</code></pre>
+"###,
+ r###"List items (288)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###" 1. A paragraph
+with two lines.
+
+ indented code
+
+ > A block quote.
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>A paragraph
+with two lines.</p>
+<pre><code>indented code
+</code></pre>
+<blockquote>
+<p>A block quote.</p>
+</blockquote>
+</li>
+</ol>
+"###,
+ r###"List items (289)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###" 1. A paragraph
+ // with two lines.
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ol>
+ // <li>A paragraph
+ // with two lines.</li>
+ // </ol>
+ // "###,
+ // r###"List items (290)"###
+ // );
+
+ // To do: some bug with laziness.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"> 1. > Blockquote
+ // continued here.
+ // "###,
+ // DANGER
+ // ),
+ // r###"<blockquote>
+ // <ol>
+ // <li>
+ // <blockquote>
+ // <p>Blockquote
+ // continued here.</p>
+ // </blockquote>
+ // </li>
+ // </ol>
+ // </blockquote>
+ // "###,
+ // r###"List items (291)"###
+ // );
+
+ // To do: some bug with laziness.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"> 1. > Blockquote
+ // > continued here.
+ // "###,
+ // DANGER
+ // ),
+ // r###"<blockquote>
+ // <ol>
+ // <li>
+ // <blockquote>
+ // <p>Blockquote
+ // continued here.</p>
+ // </blockquote>
+ // </li>
+ // </ol>
+ // </blockquote>
+ // "###,
+ // r###"List items (292)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- foo
+ // - bar
+ // - baz
+ // - boo
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>foo
+ // <ul>
+ // <li>bar
+ // <ul>
+ // <li>baz
+ // <ul>
+ // <li>boo</li>
+ // </ul>
+ // </li>
+ // </ul>
+ // </li>
+ // </ul>
+ // </li>
+ // </ul>
+ // "###,
+ // r###"List items (293)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- foo
+ // - bar
+ // - baz
+ // - boo
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>foo</li>
+ // <li>bar</li>
+ // <li>baz</li>
+ // <li>boo</li>
+ // </ul>
+ // "###,
+ // r###"List items (294)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"10) foo
+ // - bar
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ol start="10">
+ // <li>foo
+ // <ul>
+ // <li>bar</li>
+ // </ul>
+ // </li>
+ // </ol>
+ // "###,
+ // r###"List items (295)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"10) foo
+ // - bar
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ol start="10">
+ // <li>foo</li>
+ // </ol>
+ // <ul>
+ // <li>bar</li>
+ // </ul>
+ // "###,
+ // r###"List items (296)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- - foo
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>
+ // <ul>
+ // <li>foo</li>
+ // </ul>
+ // </li>
+ // </ul>
+ // "###,
+ // r###"List items (297)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"1. - 2. foo
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ol>
+ // <li>
+ // <ul>
+ // <li>
+ // <ol start="2">
+ // <li>foo</li>
+ // </ol>
+ // </li>
+ // </ul>
+ // </li>
+ // </ol>
+ // "###,
+ // r###"List items (298)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- # Foo
+ // - Bar
+ // ---
+ // baz
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>
+ // <h1>Foo</h1>
+ // </li>
+ // <li>
+ // <h2>Bar</h2>
+ // baz</li>
+ // </ul>
+ // "###,
+ // r###"List items (299)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- foo
+ // - bar
+ // + baz
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>foo</li>
+ // <li>bar</li>
+ // </ul>
+ // <ul>
+ // <li>baz</li>
+ // </ul>
+ // "###,
+ // r###"Lists (300)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"1. foo
+ // 2. bar
+ // 3) baz
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ol>
+ // <li>foo</li>
+ // <li>bar</li>
+ // </ol>
+ // <ol start="3">
+ // <li>baz</li>
+ // </ol>
+ // "###,
+ // r###"Lists (301)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"Foo
+ // - bar
+ // - baz
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p>Foo</p>
+ // <ul>
+ // <li>bar</li>
+ // <li>baz</li>
+ // </ul>
+ // "###,
+ // r###"Lists (302)"###
+ // );
+
+ // To do: some bug with interrupting.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"The number of windows in my house is
+ // 14. The number of doors is 6.
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p>The number of windows in my house is
+ // 14. The number of doors is 6.</p>
+ // "###,
+ // r###"Lists (303)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"The number of windows in my house is
+ // 1. The number of doors is 6.
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p>The number of windows in my house is</p>
+ // <ol>
+ // <li>The number of doors is 6.</li>
+ // </ol>
+ // "###,
+ // r###"Lists (304)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+- bar
+
+
+- baz
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+</li>
+<li>
+<p>bar</p>
+</li>
+<li>
+<p>baz</p>
+</li>
+</ul>
+"###,
+ r###"Lists (305)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+ - bar
+ - baz
+
+
+ bim
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>foo
+<ul>
+<li>bar
+<ul>
+<li>
+<p>baz</p>
+<p>bim</p>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+"###,
+ r###"Lists (306)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- foo
+ // - bar
+
+ // <!-- -->
+
+ // - baz
+ // - bim
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>foo</li>
+ // <li>bar</li>
+ // </ul>
+ // <!-- -->
+ // <ul>
+ // <li>baz</li>
+ // <li>bim</li>
+ // </ul>
+ // "###,
+ // r###"Lists (307)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- foo
+
+ notcode
+
+- foo
+
+<!-- -->
+
+ code
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<p>notcode</p>
+</li>
+<li>
+<p>foo</p>
+</li>
+</ul>
+<!-- -->
+<pre><code>code
+</code></pre>
+"###,
+ r###"Lists (308)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // - b
+ // - c
+ // - d
+ // - e
+ // - f
+ // - g
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a</li>
+ // <li>b</li>
+ // <li>c</li>
+ // <li>d</li>
+ // <li>e</li>
+ // <li>f</li>
+ // <li>g</li>
+ // </ul>
+ // "###,
+ // r###"Lists (309)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. a
+
+ 2. b
+
+ 3. c
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>a</p>
+</li>
+<li>
+<p>b</p>
+</li>
+<li>
+<p>c</p>
+</li>
+</ol>
+"###,
+ r###"Lists (310)"###
+ );
+
+ // To do: some bug with interrupting.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // - b
+ // - c
+ // - d
+ // - e
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a</li>
+ // <li>b</li>
+ // <li>c</li>
+ // <li>d
+ // - e</li>
+ // </ul>
+ // "###,
+ // r###"Lists (311)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. a
+
+ 2. b
+
+ 3. c
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<p>a</p>
+</li>
+<li>
+<p>b</p>
+</li>
+</ol>
+<pre><code>3. c
+</code></pre>
+"###,
+ r###"Lists (312)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- a
+- b
+
+- c
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>a</p>
+</li>
+<li>
+<p>b</p>
+</li>
+<li>
+<p>c</p>
+</li>
+</ul>
+"###,
+ r###"Lists (313)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"* a
+*
+
+* c
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>a</p>
+</li>
+<li></li>
+<li>
+<p>c</p>
+</li>
+</ul>
+"###,
+ r###"Lists (314)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- a
+- b
+
+ c
+- d
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>a</p>
+</li>
+<li>
+<p>b</p>
+<p>c</p>
+</li>
+<li>
+<p>d</p>
+</li>
+</ul>
+"###,
+ r###"Lists (315)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"- a
+- b
+
+ [ref]: /url
+- d
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>a</p>
+</li>
+<li>
+<p>b</p>
+</li>
+<li>
+<p>d</p>
+</li>
+</ul>
+"###,
+ r###"Lists (316)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // - ```
+ // b
+
+ // ```
+ // - c
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a</li>
+ // <li>
+ // <pre><code>b
+
+ // </code></pre>
+ // </li>
+ // <li>c</li>
+ // </ul>
+ // "###,
+ // r###"Lists (317)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // - b
+
+ // c
+ // - d
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a
+ // <ul>
+ // <li>
+ // <p>b</p>
+ // <p>c</p>
+ // </li>
+ // </ul>
+ // </li>
+ // <li>d</li>
+ // </ul>
+ // "###,
+ // r###"Lists (318)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"* a
+ // > b
+ // >
+ // * c
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a
+ // <blockquote>
+ // <p>b</p>
+ // </blockquote>
+ // </li>
+ // <li>c</li>
+ // </ul>
+ // "###,
+ // r###"Lists (319)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // > b
+ // ```
+ // c
+ // ```
+ // - d
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a
+ // <blockquote>
+ // <p>b</p>
+ // </blockquote>
+ // <pre><code>c
+ // </code></pre>
+ // </li>
+ // <li>d</li>
+ // </ul>
+ // "###,
+ // r###"Lists (320)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a</li>
+ // </ul>
+ // "###,
+ // r###"Lists (321)"###
+ // );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // - b
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>a
+ // <ul>
+ // <li>b</li>
+ // </ul>
+ // </li>
+ // </ul>
+ // "###,
+ // r###"Lists (322)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"1. ```
+ foo
+ ```
+
+ bar
+"###,
+ DANGER
+ ),
+ r###"<ol>
+<li>
+<pre><code>foo
+</code></pre>
+<p>bar</p>
+</li>
+</ol>
+"###,
+ r###"Lists (323)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"* foo
+ * bar
+
+ baz
+"###,
+ DANGER
+ ),
+ r###"<ul>
+<li>
+<p>foo</p>
+<ul>
+<li>bar</li>
+</ul>
+<p>baz</p>
+</li>
+</ul>
+"###,
+ r###"Lists (324)"###
+ );
+
+ // To do: eol after containers.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"- a
+ // - b
+ // - c
+
+ // - d
+ // - e
+ // - f
+ // "###,
+ // DANGER
+ // ),
+ // r###"<ul>
+ // <li>
+ // <p>a</p>
+ // <ul>
+ // <li>b</li>
+ // <li>c</li>
+ // </ul>
+ // </li>
+ // <li>
+ // <p>d</p>
+ // <ul>
+ // <li>e</li>
+ // <li>f</li>
+ // </ul>
+ // </li>
+ // </ul>
+ // "###,
+ // r###"Lists (325)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`hi`lo`
+"###,
+ DANGER
+ ),
+ r###"<p><code>hi</code>lo`</p>
+"###,
+ r###"Inlines (326)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`foo`
+"###,
+ DANGER
+ ),
+ r###"<p><code>foo</code></p>
+"###,
+ r###"Code spans (327)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`` foo ` bar ``
+"###,
+ DANGER
+ ),
+ r###"<p><code>foo ` bar</code></p>
+"###,
+ r###"Code spans (328)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"` `` `
+"###,
+ DANGER
+ ),
+ r###"<p><code>``</code></p>
+"###,
+ r###"Code spans (329)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"` `` `
+"###,
+ DANGER
+ ),
+ r###"<p><code> `` </code></p>
+"###,
+ r###"Code spans (330)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"` a`
+"###,
+ DANGER
+ ),
+ r###"<p><code> a</code></p>
+"###,
+ r###"Code spans (331)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"` b `
+"###,
+ DANGER
+ ),
+ r###"<p><code> b </code></p>
+"###,
+ r###"Code spans (332)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"` `
+` `
+"###,
+ DANGER
+ ),
+ r###"<p><code> </code>
+<code> </code></p>
+"###,
+ r###"Code spans (333)"###
+ );
+
+ // To do: some bug with generating tests.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"``
+ // foo
+ // bar
+ // baz
+ // ``
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p><code>foo bar baz</code></p>
+ // "###,
+ // r###"Code spans (334)"###
+ // );
+
+ // To do: bug with a line ending sticking around? Generating this file?
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"``
+ // foo
+ // ``
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p><code>foo </code></p>
+ // "###,
+ // r###"Code spans (335)"###
+ // );
+
+ // To do: bug generating this file?
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"`foo bar
+ // baz`
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p><code>foo bar baz</code></p>
+ // "###,
+ // r###"Code spans (336)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`foo\`bar`
+"###,
+ DANGER
+ ),
+ r###"<p><code>foo\</code>bar`</p>
+"###,
+ r###"Code spans (337)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"``foo`bar``
+"###,
+ DANGER
+ ),
+ r###"<p><code>foo`bar</code></p>
+"###,
+ r###"Code spans (338)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"` foo `` bar `
+"###,
+ DANGER
+ ),
+ r###"<p><code>foo `` bar</code></p>
+"###,
+ r###"Code spans (339)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo`*`
+"###,
+ DANGER
+ ),
+ r###"<p>*foo<code>*</code></p>
+"###,
+ r###"Code spans (340)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[not a `link](/foo`)
+"###,
+ DANGER
+ ),
+ r###"<p>[not a <code>link](/foo</code>)</p>
+"###,
+ r###"Code spans (341)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`<a href="`">`
+"###,
+ DANGER
+ ),
+ r###"<p><code>&lt;a href=&quot;</code>&quot;&gt;`</p>
+"###,
+ r###"Code spans (342)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="`">`
+"###,
+ DANGER
+ ),
+ r###"<p><a href="`">`</p>
+"###,
+ r###"Code spans (343)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`<http://foo.bar.`baz>`
+"###,
+ DANGER
+ ),
+ r###"<p><code>&lt;http://foo.bar.</code>baz&gt;`</p>
+"###,
+ r###"Code spans (344)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://foo.bar.`baz>`
+"###,
+ DANGER
+ ),
+ r###"<p><a href="http://foo.bar.%60baz">http://foo.bar.`baz</a>`</p>
+"###,
+ r###"Code spans (345)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"```foo``
+"###,
+ DANGER
+ ),
+ r###"<p>```foo``</p>
+"###,
+ r###"Code spans (346)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`foo
+"###,
+ DANGER
+ ),
+ r###"<p>`foo</p>
+"###,
+ r###"Code spans (347)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`foo``bar``
+"###,
+ DANGER
+ ),
+ r###"<p>`foo<code>bar</code></p>
+"###,
+ r###"Code spans (348)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo bar*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (349)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"a * foo bar*
+"###,
+ DANGER
+ ),
+ r###"<p>a * foo bar*</p>
+"###,
+ r###"Emphasis and strong emphasis (350)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"a*"foo"*
+"###,
+ DANGER
+ ),
+ r###"<p>a*&quot;foo&quot;*</p>
+"###,
+ r###"Emphasis and strong emphasis (351)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"* a *
+"###,
+ DANGER
+ ),
+ r###"<p>* a *</p>
+"###,
+ r###"Emphasis and strong emphasis (352)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo*bar*
+"###,
+ DANGER
+ ),
+ r###"<p>foo<em>bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (353)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"5*6*78
+"###,
+ DANGER
+ ),
+ r###"<p>5<em>6</em>78</p>
+"###,
+ r###"Emphasis and strong emphasis (354)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo bar_
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (355)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_ foo bar_
+"###,
+ DANGER
+ ),
+ r###"<p>_ foo bar_</p>
+"###,
+ r###"Emphasis and strong emphasis (356)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"a_"foo"_
+"###,
+ DANGER
+ ),
+ r###"<p>a_&quot;foo&quot;_</p>
+"###,
+ r###"Emphasis and strong emphasis (357)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo_bar_
+"###,
+ DANGER
+ ),
+ r###"<p>foo_bar_</p>
+"###,
+ r###"Emphasis and strong emphasis (358)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"5_6_78
+"###,
+ DANGER
+ ),
+ r###"<p>5_6_78</p>
+"###,
+ r###"Emphasis and strong emphasis (359)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"пристаням_стремятся_
+"###,
+ DANGER
+ ),
+ r###"<p>пристаням_стремятся_</p>
+"###,
+ r###"Emphasis and strong emphasis (360)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"aa_"bb"_cc
+"###,
+ DANGER
+ ),
+ r###"<p>aa_&quot;bb&quot;_cc</p>
+"###,
+ r###"Emphasis and strong emphasis (361)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo-_(bar)_
+"###,
+ DANGER
+ ),
+ r###"<p>foo-<em>(bar)</em></p>
+"###,
+ r###"Emphasis and strong emphasis (362)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo*
+"###,
+ DANGER
+ ),
+ r###"<p>_foo*</p>
+"###,
+ r###"Emphasis and strong emphasis (363)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo bar *
+"###,
+ DANGER
+ ),
+ r###"<p>*foo bar *</p>
+"###,
+ r###"Emphasis and strong emphasis (364)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo bar
+*
+"###,
+ DANGER
+ ),
+ r###"<p>*foo bar
+*</p>
+"###,
+ r###"Emphasis and strong emphasis (365)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*(*foo)
+"###,
+ DANGER
+ ),
+ r###"<p>*(*foo)</p>
+"###,
+ r###"Emphasis and strong emphasis (366)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*(*foo*)*
+"###,
+ DANGER
+ ),
+ r###"<p><em>(<em>foo</em>)</em></p>
+"###,
+ r###"Emphasis and strong emphasis (367)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo*bar
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo</em>bar</p>
+"###,
+ r###"Emphasis and strong emphasis (368)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo bar _
+"###,
+ DANGER
+ ),
+ r###"<p>_foo bar _</p>
+"###,
+ r###"Emphasis and strong emphasis (369)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_(_foo)
+"###,
+ DANGER
+ ),
+ r###"<p>_(_foo)</p>
+"###,
+ r###"Emphasis and strong emphasis (370)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_(_foo_)_
+"###,
+ DANGER
+ ),
+ r###"<p><em>(<em>foo</em>)</em></p>
+"###,
+ r###"Emphasis and strong emphasis (371)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo_bar
+"###,
+ DANGER
+ ),
+ r###"<p>_foo_bar</p>
+"###,
+ r###"Emphasis and strong emphasis (372)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_пристаням_стремятся
+"###,
+ DANGER
+ ),
+ r###"<p>_пристаням_стремятся</p>
+"###,
+ r###"Emphasis and strong emphasis (373)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo_bar_baz_
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo_bar_baz</em></p>
+"###,
+ r###"Emphasis and strong emphasis (374)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_(bar)_.
+"###,
+ DANGER
+ ),
+ r###"<p><em>(bar)</em>.</p>
+"###,
+ r###"Emphasis and strong emphasis (375)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo bar**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo bar</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (376)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"** foo bar**
+"###,
+ DANGER
+ ),
+ r###"<p>** foo bar**</p>
+"###,
+ r###"Emphasis and strong emphasis (377)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"a**"foo"**
+"###,
+ DANGER
+ ),
+ r###"<p>a**&quot;foo&quot;**</p>
+"###,
+ r###"Emphasis and strong emphasis (378)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo**bar**
+"###,
+ DANGER
+ ),
+ r###"<p>foo<strong>bar</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (379)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo bar__
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo bar</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (380)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__ foo bar__
+"###,
+ DANGER
+ ),
+ r###"<p>__ foo bar__</p>
+"###,
+ r###"Emphasis and strong emphasis (381)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__
+foo bar__
+"###,
+ DANGER
+ ),
+ r###"<p>__
+foo bar__</p>
+"###,
+ r###"Emphasis and strong emphasis (382)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"a__"foo"__
+"###,
+ DANGER
+ ),
+ r###"<p>a__&quot;foo&quot;__</p>
+"###,
+ r###"Emphasis and strong emphasis (383)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo__bar__
+"###,
+ DANGER
+ ),
+ r###"<p>foo__bar__</p>
+"###,
+ r###"Emphasis and strong emphasis (384)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"5__6__78
+"###,
+ DANGER
+ ),
+ r###"<p>5__6__78</p>
+"###,
+ r###"Emphasis and strong emphasis (385)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"пристаням__стремятся__
+"###,
+ DANGER
+ ),
+ r###"<p>пристаням__стремятся__</p>
+"###,
+ r###"Emphasis and strong emphasis (386)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo, __bar__, baz__
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo, <strong>bar</strong>, baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (387)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo-__(bar)__
+"###,
+ DANGER
+ ),
+ r###"<p>foo-<strong>(bar)</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (388)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo bar **
+"###,
+ DANGER
+ ),
+ r###"<p>**foo bar **</p>
+"###,
+ r###"Emphasis and strong emphasis (389)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**(**foo)
+"###,
+ DANGER
+ ),
+ r###"<p>**(**foo)</p>
+"###,
+ r###"Emphasis and strong emphasis (390)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*(**foo**)*
+"###,
+ DANGER
+ ),
+ r###"<p><em>(<strong>foo</strong>)</em></p>
+"###,
+ r###"Emphasis and strong emphasis (391)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**Gomphocarpus (*Gomphocarpus physocarpus*, syn.
+*Asclepias physocarpa*)**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>Gomphocarpus (<em>Gomphocarpus physocarpus</em>, syn.
+<em>Asclepias physocarpa</em>)</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (392)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo "*bar*" foo**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo &quot;<em>bar</em>&quot; foo</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (393)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo**bar
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo</strong>bar</p>
+"###,
+ r###"Emphasis and strong emphasis (394)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo bar __
+"###,
+ DANGER
+ ),
+ r###"<p>__foo bar __</p>
+"###,
+ r###"Emphasis and strong emphasis (395)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__(__foo)
+"###,
+ DANGER
+ ),
+ r###"<p>__(__foo)</p>
+"###,
+ r###"Emphasis and strong emphasis (396)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_(__foo__)_
+"###,
+ DANGER
+ ),
+ r###"<p><em>(<strong>foo</strong>)</em></p>
+"###,
+ r###"Emphasis and strong emphasis (397)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo__bar
+"###,
+ DANGER
+ ),
+ r###"<p>__foo__bar</p>
+"###,
+ r###"Emphasis and strong emphasis (398)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__пристаням__стремятся
+"###,
+ DANGER
+ ),
+ r###"<p>__пристаням__стремятся</p>
+"###,
+ r###"Emphasis and strong emphasis (399)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo__bar__baz__
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo__bar__baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (400)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__(bar)__.
+"###,
+ DANGER
+ ),
+ r###"<p><strong>(bar)</strong>.</p>
+"###,
+ r###"Emphasis and strong emphasis (401)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo [bar](/url)*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <a href="/url">bar</a></em></p>
+"###,
+ r###"Emphasis and strong emphasis (402)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo
+bar*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo
+bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (403)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo __bar__ baz_
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <strong>bar</strong> baz</em></p>
+"###,
+ r###"Emphasis and strong emphasis (404)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo _bar_ baz_
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <em>bar</em> baz</em></p>
+"###,
+ r###"Emphasis and strong emphasis (405)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo_ bar_
+"###,
+ DANGER
+ ),
+ r###"<p><em><em>foo</em> bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (406)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo *bar**
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <em>bar</em></em></p>
+"###,
+ r###"Emphasis and strong emphasis (407)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo **bar** baz*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <strong>bar</strong> baz</em></p>
+"###,
+ r###"Emphasis and strong emphasis (408)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo**bar**baz*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo<strong>bar</strong>baz</em></p>
+"###,
+ r###"Emphasis and strong emphasis (409)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo**bar*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo**bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (410)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"***foo** bar*
+"###,
+ DANGER
+ ),
+ r###"<p><em><strong>foo</strong> bar</em></p>
+"###,
+ r###"Emphasis and strong emphasis (411)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo **bar***
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <strong>bar</strong></em></p>
+"###,
+ r###"Emphasis and strong emphasis (412)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo**bar***
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo<strong>bar</strong></em></p>
+"###,
+ r###"Emphasis and strong emphasis (413)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo***bar***baz
+"###,
+ DANGER
+ ),
+ r###"<p>foo<em><strong>bar</strong></em>baz</p>
+"###,
+ r###"Emphasis and strong emphasis (414)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo******bar*********baz
+"###,
+ DANGER
+ ),
+ r###"<p>foo<strong><strong><strong>bar</strong></strong></strong>***baz</p>
+"###,
+ r###"Emphasis and strong emphasis (415)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo **bar *baz* bim** bop*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <strong>bar <em>baz</em> bim</strong> bop</em></p>
+"###,
+ r###"Emphasis and strong emphasis (416)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo [*bar*](/url)*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <a href="/url"><em>bar</em></a></em></p>
+"###,
+ r###"Emphasis and strong emphasis (417)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"** is not an empty emphasis
+"###,
+ DANGER
+ ),
+ r###"<p>** is not an empty emphasis</p>
+"###,
+ r###"Emphasis and strong emphasis (418)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**** is not an empty strong emphasis
+"###,
+ DANGER
+ ),
+ r###"<p>**** is not an empty strong emphasis</p>
+"###,
+ r###"Emphasis and strong emphasis (419)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo [bar](/url)**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <a href="/url">bar</a></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (420)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo
+bar**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo
+bar</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (421)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo _bar_ baz__
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <em>bar</em> baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (422)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo __bar__ baz__
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <strong>bar</strong> baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (423)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"____foo__ bar__
+"###,
+ DANGER
+ ),
+ r###"<p><strong><strong>foo</strong> bar</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (424)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo **bar****
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <strong>bar</strong></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (425)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo *bar* baz**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <em>bar</em> baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (426)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo*bar*baz**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo<em>bar</em>baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (427)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"***foo* bar**
+"###,
+ DANGER
+ ),
+ r###"<p><strong><em>foo</em> bar</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (428)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo *bar***
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <em>bar</em></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (429)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo *bar **baz**
+bim* bop**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <em>bar <strong>baz</strong>
+bim</em> bop</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (430)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo [*bar*](/url)**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo <a href="/url"><em>bar</em></a></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (431)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__ is not an empty emphasis
+"###,
+ DANGER
+ ),
+ r###"<p>__ is not an empty emphasis</p>
+"###,
+ r###"Emphasis and strong emphasis (432)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"____ is not an empty strong emphasis
+"###,
+ DANGER
+ ),
+ r###"<p>____ is not an empty strong emphasis</p>
+"###,
+ r###"Emphasis and strong emphasis (433)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo ***
+"###,
+ DANGER
+ ),
+ r###"<p>foo ***</p>
+"###,
+ r###"Emphasis and strong emphasis (434)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo *\**
+"###,
+ DANGER
+ ),
+ r###"<p>foo <em>*</em></p>
+"###,
+ r###"Emphasis and strong emphasis (435)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo *_*
+"###,
+ DANGER
+ ),
+ r###"<p>foo <em>_</em></p>
+"###,
+ r###"Emphasis and strong emphasis (436)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo *****
+"###,
+ DANGER
+ ),
+ r###"<p>foo *****</p>
+"###,
+ r###"Emphasis and strong emphasis (437)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo **\***
+"###,
+ DANGER
+ ),
+ r###"<p>foo <strong>*</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (438)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo **_**
+"###,
+ DANGER
+ ),
+ r###"<p>foo <strong>_</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (439)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo*
+"###,
+ DANGER
+ ),
+ r###"<p>*<em>foo</em></p>
+"###,
+ r###"Emphasis and strong emphasis (440)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo**
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo</em>*</p>
+"###,
+ r###"Emphasis and strong emphasis (441)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"***foo**
+"###,
+ DANGER
+ ),
+ r###"<p>*<strong>foo</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (442)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"****foo*
+"###,
+ DANGER
+ ),
+ r###"<p>***<em>foo</em></p>
+"###,
+ r###"Emphasis and strong emphasis (443)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo***
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo</strong>*</p>
+"###,
+ r###"Emphasis and strong emphasis (444)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo****
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo</em>***</p>
+"###,
+ r###"Emphasis and strong emphasis (445)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo ___
+"###,
+ DANGER
+ ),
+ r###"<p>foo ___</p>
+"###,
+ r###"Emphasis and strong emphasis (446)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo _\__
+"###,
+ DANGER
+ ),
+ r###"<p>foo <em>_</em></p>
+"###,
+ r###"Emphasis and strong emphasis (447)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo _*_
+"###,
+ DANGER
+ ),
+ r###"<p>foo <em>*</em></p>
+"###,
+ r###"Emphasis and strong emphasis (448)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo _____
+"###,
+ DANGER
+ ),
+ r###"<p>foo _____</p>
+"###,
+ r###"Emphasis and strong emphasis (449)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo __\___
+"###,
+ DANGER
+ ),
+ r###"<p>foo <strong>_</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (450)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo __*__
+"###,
+ DANGER
+ ),
+ r###"<p>foo <strong>*</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (451)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo_
+"###,
+ DANGER
+ ),
+ r###"<p>_<em>foo</em></p>
+"###,
+ r###"Emphasis and strong emphasis (452)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo__
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo</em>_</p>
+"###,
+ r###"Emphasis and strong emphasis (453)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"___foo__
+"###,
+ DANGER
+ ),
+ r###"<p>_<strong>foo</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (454)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"____foo_
+"###,
+ DANGER
+ ),
+ r###"<p>___<em>foo</em></p>
+"###,
+ r###"Emphasis and strong emphasis (455)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo___
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo</strong>_</p>
+"###,
+ r###"Emphasis and strong emphasis (456)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo____
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo</em>___</p>
+"###,
+ r###"Emphasis and strong emphasis (457)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo**
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (458)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*_foo_*
+"###,
+ DANGER
+ ),
+ r###"<p><em><em>foo</em></em></p>
+"###,
+ r###"Emphasis and strong emphasis (459)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__foo__
+"###,
+ DANGER
+ ),
+ r###"<p><strong>foo</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (460)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_*foo*_
+"###,
+ DANGER
+ ),
+ r###"<p><em><em>foo</em></em></p>
+"###,
+ r###"Emphasis and strong emphasis (461)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"****foo****
+"###,
+ DANGER
+ ),
+ r###"<p><strong><strong>foo</strong></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (462)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"____foo____
+"###,
+ DANGER
+ ),
+ r###"<p><strong><strong>foo</strong></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (463)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"******foo******
+"###,
+ DANGER
+ ),
+ r###"<p><strong><strong><strong>foo</strong></strong></strong></p>
+"###,
+ r###"Emphasis and strong emphasis (464)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"***foo***
+"###,
+ DANGER
+ ),
+ r###"<p><em><strong>foo</strong></em></p>
+"###,
+ r###"Emphasis and strong emphasis (465)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_____foo_____
+"###,
+ DANGER
+ ),
+ r###"<p><em><strong><strong>foo</strong></strong></em></p>
+"###,
+ r###"Emphasis and strong emphasis (466)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo _bar* baz_
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo _bar</em> baz_</p>
+"###,
+ r###"Emphasis and strong emphasis (467)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo __bar *baz bim__ bam*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo <strong>bar *baz bim</strong> bam</em></p>
+"###,
+ r###"Emphasis and strong emphasis (468)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**foo **bar baz**
+"###,
+ DANGER
+ ),
+ r###"<p>**foo <strong>bar baz</strong></p>
+"###,
+ r###"Emphasis and strong emphasis (469)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo *bar baz*
+"###,
+ DANGER
+ ),
+ r###"<p>*foo <em>bar baz</em></p>
+"###,
+ r###"Emphasis and strong emphasis (470)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*[bar*](/url)
+"###,
+ DANGER
+ ),
+ r###"<p>*<a href="/url">bar*</a></p>
+"###,
+ r###"Emphasis and strong emphasis (471)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_foo [bar_](/url)
+"###,
+ DANGER
+ ),
+ r###"<p>_foo <a href="/url">bar_</a></p>
+"###,
+ r###"Emphasis and strong emphasis (472)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*<img src="foo" title="*"/>
+"###,
+ DANGER
+ ),
+ r###"<p>*<img src="foo" title="*"/></p>
+"###,
+ r###"Emphasis and strong emphasis (473)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**<a href="**">
+"###,
+ DANGER
+ ),
+ r###"<p>**<a href="**"></p>
+"###,
+ r###"Emphasis and strong emphasis (474)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__<a href="__">
+"###,
+ DANGER
+ ),
+ r###"<p>__<a href="__"></p>
+"###,
+ r###"Emphasis and strong emphasis (475)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*a `*`*
+"###,
+ DANGER
+ ),
+ r###"<p><em>a <code>*</code></em></p>
+"###,
+ r###"Emphasis and strong emphasis (476)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"_a `_`_
+"###,
+ DANGER
+ ),
+ r###"<p><em>a <code>_</code></em></p>
+"###,
+ r###"Emphasis and strong emphasis (477)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"**a<http://foo.bar/?q=**>
+"###,
+ DANGER
+ ),
+ r###"<p>**a<a href="http://foo.bar/?q=**">http://foo.bar/?q=**</a></p>
+"###,
+ r###"Emphasis and strong emphasis (478)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"__a<http://foo.bar/?q=__>
+"###,
+ DANGER
+ ),
+ r###"<p>__a<a href="http://foo.bar/?q=__">http://foo.bar/?q=__</a></p>
+"###,
+ r###"Emphasis and strong emphasis (479)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/uri "title")
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri" title="title">link</a></p>
+"###,
+ r###"Links (480)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link</a></p>
+"###,
+ r###"Links (481)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[](./target.md)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="./target.md"></a></p>
+"###,
+ r###"Links (482)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link]()
+"###,
+ DANGER
+ ),
+ r###"<p><a href="">link</a></p>
+"###,
+ r###"Links (483)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](<>)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="">link</a></p>
+"###,
+ r###"Links (484)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[]()
+"###,
+ DANGER
+ ),
+ r###"<p><a href=""></a></p>
+"###,
+ r###"Links (485)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/my uri)
+"###,
+ DANGER
+ ),
+ r###"<p>[link](/my uri)</p>
+"###,
+ r###"Links (486)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](</my uri>)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/my%20uri">link</a></p>
+"###,
+ r###"Links (487)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo
+bar)
+"###,
+ DANGER
+ ),
+ r###"<p>[link](foo
+bar)</p>
+"###,
+ r###"Links (488)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](<foo
+bar>)
+"###,
+ DANGER
+ ),
+ r###"<p>[link](<foo
+bar>)</p>
+"###,
+ r###"Links (489)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[a](<b)c>)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="b)c">a</a></p>
+"###,
+ r###"Links (490)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](<foo\>)
+"###,
+ DANGER
+ ),
+ r###"<p>[link](&lt;foo&gt;)</p>
+"###,
+ r###"Links (491)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[a](<b)c
+[a](<b)c>
+[a](<b>c)
+"###,
+ DANGER
+ ),
+ r###"<p>[a](&lt;b)c
+[a](&lt;b)c&gt;
+[a](<b>c)</p>
+"###,
+ r###"Links (492)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](\(foo\))
+"###,
+ DANGER
+ ),
+ r###"<p><a href="(foo)">link</a></p>
+"###,
+ r###"Links (493)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo(and(bar)))
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo(and(bar))">link</a></p>
+"###,
+ r###"Links (494)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo(and(bar))
+"###,
+ DANGER
+ ),
+ r###"<p>[link](foo(and(bar))</p>
+"###,
+ r###"Links (495)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo\(and\(bar\))
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo(and(bar)">link</a></p>
+"###,
+ r###"Links (496)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](<foo(and(bar)>)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo(and(bar)">link</a></p>
+"###,
+ r###"Links (497)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo\)\:)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo):">link</a></p>
+"###,
+ r###"Links (498)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](#fragment)
+
+[link](http://example.com#fragment)
+
+[link](http://example.com?foo=3#frag)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="#fragment">link</a></p>
+<p><a href="http://example.com#fragment">link</a></p>
+<p><a href="http://example.com?foo=3#frag">link</a></p>
+"###,
+ r###"Links (499)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo\bar)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo%5Cbar">link</a></p>
+"###,
+ r###"Links (500)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](foo%20b&auml;)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo%20b%C3%A4">link</a></p>
+"###,
+ r###"Links (501)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link]("title")
+"###,
+ DANGER
+ ),
+ r###"<p><a href="%22title%22">link</a></p>
+"###,
+ r###"Links (502)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/url "title")
+[link](/url 'title')
+[link](/url (title))
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">link</a>
+<a href="/url" title="title">link</a>
+<a href="/url" title="title">link</a></p>
+"###,
+ r###"Links (503)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/url "title \"&quot;")
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title &quot;&quot;">link</a></p>
+"###,
+ r###"Links (504)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/url "title")
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url%C2%A0%22title%22">link</a></p>
+"###,
+ r###"Links (505)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/url "title "and" title")
+"###,
+ DANGER
+ ),
+ r###"<p>[link](/url &quot;title &quot;and&quot; title&quot;)</p>
+"###,
+ r###"Links (506)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link](/url 'title "and" title')
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title &quot;and&quot; title">link</a></p>
+"###,
+ r###"Links (507)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link]( /uri
+ "title" )
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri" title="title">link</a></p>
+"###,
+ r###"Links (508)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link] (/uri)
+"###,
+ DANGER
+ ),
+ r###"<p>[link] (/uri)</p>
+"###,
+ r###"Links (509)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link [foo [bar]]](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link [foo [bar]]</a></p>
+"###,
+ r###"Links (510)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link] bar](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p>[link] bar](/uri)</p>
+"###,
+ r###"Links (511)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link [bar](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p>[link <a href="/uri">bar</a></p>
+"###,
+ r###"Links (512)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link \[bar](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link [bar</a></p>
+"###,
+ r###"Links (513)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link *foo **bar** `#`*](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
+"###,
+ r###"Links (514)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[![moon](moon.jpg)](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>
+"###,
+ r###"Links (515)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo [bar](/uri)](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p>[foo <a href="/uri">bar</a>](/uri)</p>
+"###,
+ r###"Links (516)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo *[bar [baz](/uri)](/uri)*](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p>[foo <em>[bar <a href="/uri">baz</a>](/uri)</em>](/uri)</p>
+"###,
+ r###"Links (517)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![[[foo](uri1)](uri2)](uri3)
+"###,
+ DANGER
+ ),
+ r###"<p><img src="uri3" alt="[foo](uri2)" /></p>
+"###,
+ r###"Links (518)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*[foo*](/uri)
+"###,
+ DANGER
+ ),
+ r###"<p>*<a href="/uri">foo*</a></p>
+"###,
+ r###"Links (519)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo *bar](baz*)
+"###,
+ DANGER
+ ),
+ r###"<p><a href="baz*">foo *bar</a></p>
+"###,
+ r###"Links (520)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo [bar* baz]
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo [bar</em> baz]</p>
+"###,
+ r###"Links (521)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo <bar attr="](baz)">
+"###,
+ DANGER
+ ),
+ r###"<p>[foo <bar attr="](baz)"></p>
+"###,
+ r###"Links (522)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo`](/uri)`
+"###,
+ DANGER
+ ),
+ r###"<p>[foo<code>](/uri)</code></p>
+"###,
+ r###"Links (523)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo<http://example.com/?search=](uri)>
+"###,
+ DANGER
+ ),
+ r###"<p>[foo<a href="http://example.com/?search=%5D(uri)">http://example.com/?search=](uri)</a></p>
+"###,
+ r###"Links (524)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][bar]
+
+[bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">foo</a></p>
+"###,
+ r###"Links (525)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link [foo [bar]]][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link [foo [bar]]</a></p>
+"###,
+ r###"Links (526)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link \[bar][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link [bar</a></p>
+"###,
+ r###"Links (527)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[link *foo **bar** `#`*][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
+"###,
+ r###"Links (528)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[![moon](moon.jpg)][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>
+"###,
+ r###"Links (529)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo [bar](/uri)][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo <a href="/uri">bar</a>]<a href="/uri">ref</a></p>
+"###,
+ r###"Links (530)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo *bar [baz][ref]*][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo <em>bar <a href="/uri">baz</a></em>]<a href="/uri">ref</a></p>
+"###,
+ r###"Links (531)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*[foo*][ref]
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>*<a href="/uri">foo*</a></p>
+"###,
+ r###"Links (532)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo *bar][ref]*
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">foo *bar</a>*</p>
+"###,
+ r###"Links (533)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo <bar attr="][ref]">
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo <bar attr="][ref]"></p>
+"###,
+ r###"Links (534)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo`][ref]`
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo<code>][ref]</code></p>
+"###,
+ r###"Links (535)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo<http://example.com/?search=][ref]>
+
+[ref]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo<a href="http://example.com/?search=%5D%5Bref%5D">http://example.com/?search=][ref]</a></p>
+"###,
+ r###"Links (536)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][BaR]
+
+[bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">foo</a></p>
+"###,
+ r###"Links (537)"###
+ );
+
+ // To do: bug with unicode normalization.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"[ẞ]
+
+ // [SS]: /url
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p><a href="/url">ẞ</a></p>
+ // "###,
+ // r###"Links (538)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[Foo
+ bar]: /url
+
+[Baz][Foo bar]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url">Baz</a></p>
+"###,
+ r###"Links (539)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo] [bar]
+
+[bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>[foo] <a href="/url" title="title">bar</a></p>
+"###,
+ r###"Links (540)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+[bar]
+
+[bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]
+<a href="/url" title="title">bar</a></p>
+"###,
+ r###"Links (541)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]: /url1
+
+[foo]: /url2
+
+[bar][foo]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url1">bar</a></p>
+"###,
+ r###"Links (542)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[bar][foo\!]
+
+[foo!]: /url
+"###,
+ DANGER
+ ),
+ r###"<p>[bar][foo!]</p>
+"###,
+ r###"Links (543)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][ref[]
+
+[ref[]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo][ref[]</p>
+<p>[ref[]: /uri</p>
+"###,
+ r###"Links (544)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][ref[bar]]
+
+[ref[bar]]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[foo][ref[bar]]</p>
+<p>[ref[bar]]: /uri</p>
+"###,
+ r###"Links (545)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[[[foo]]]
+
+[[[foo]]]: /url
+"###,
+ DANGER
+ ),
+ r###"<p>[[[foo]]]</p>
+<p>[[[foo]]]: /url</p>
+"###,
+ r###"Links (546)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][ref\[]
+
+[ref\[]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">foo</a></p>
+"###,
+ r###"Links (547)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[bar\\]: /uri
+
+[bar\\]
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/uri">bar\</a></p>
+"###,
+ r###"Links (548)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[]
+
+[]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[]</p>
+<p>[]: /uri</p>
+"###,
+ r###"Links (549)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[
+ ]
+
+[
+ ]: /uri
+"###,
+ DANGER
+ ),
+ r###"<p>[
+]</p>
+<p>[
+]: /uri</p>
+"###,
+ r###"Links (550)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">foo</a></p>
+"###,
+ r###"Links (551)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[*foo* bar][]
+
+[*foo* bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title"><em>foo</em> bar</a></p>
+"###,
+ r###"Links (552)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[Foo][]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">Foo</a></p>
+"###,
+ r###"Links (553)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+[]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">foo</a>
+[]</p>
+"###,
+ r###"Links (554)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">foo</a></p>
+"###,
+ r###"Links (555)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[*foo* bar]
+
+[*foo* bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title"><em>foo</em> bar</a></p>
+"###,
+ r###"Links (556)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[[*foo* bar]]
+
+[*foo* bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>[<a href="/url" title="title"><em>foo</em> bar</a>]</p>
+"###,
+ r###"Links (557)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[[bar [foo]
+
+[foo]: /url
+"###,
+ DANGER
+ ),
+ r###"<p>[[bar <a href="/url">foo</a></p>
+"###,
+ r###"Links (558)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[Foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url" title="title">Foo</a></p>
+"###,
+ r###"Links (559)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo] bar
+
+[foo]: /url
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url">foo</a> bar</p>
+"###,
+ r###"Links (560)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\[foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]</p>
+"###,
+ r###"Links (561)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo*]: /url
+
+*[foo*]
+"###,
+ DANGER
+ ),
+ r###"<p>*<a href="/url">foo*</a></p>
+"###,
+ r###"Links (562)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][bar]
+
+[foo]: /url1
+[bar]: /url2
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url2">foo</a></p>
+"###,
+ r###"Links (563)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][]
+
+[foo]: /url1
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url1">foo</a></p>
+"###,
+ r###"Links (564)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo]()
+
+[foo]: /url1
+"###,
+ DANGER
+ ),
+ r###"<p><a href="">foo</a></p>
+"###,
+ r###"Links (565)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo](not a link)
+
+[foo]: /url1
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url1">foo</a>(not a link)</p>
+"###,
+ r###"Links (566)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][bar][baz]
+
+[baz]: /url
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]<a href="/url">bar</a></p>
+"###,
+ r###"Links (567)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][bar][baz]
+
+[baz]: /url1
+[bar]: /url2
+"###,
+ DANGER
+ ),
+ r###"<p><a href="/url2">foo</a><a href="/url1">baz</a></p>
+"###,
+ r###"Links (568)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"[foo][bar][baz]
+
+[baz]: /url1
+[foo]: /url2
+"###,
+ DANGER
+ ),
+ r###"<p>[foo]<a href="/url1">bar</a></p>
+"###,
+ r###"Links (569)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo](/url "title")
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo" title="title" /></p>
+"###,
+ r###"Images (570)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo *bar*]
+
+[foo *bar*]: train.jpg "train & tracks"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
+"###,
+ r###"Images (571)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo ![bar](/url)](/url2)
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url2" alt="foo bar" /></p>
+"###,
+ r###"Images (572)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo [bar](/url)](/url2)
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url2" alt="foo bar" /></p>
+"###,
+ r###"Images (573)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo *bar*][]
+
+[foo *bar*]: train.jpg "train & tracks"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
+"###,
+ r###"Images (574)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo *bar*][foobar]
+
+[FOOBAR]: train.jpg "train & tracks"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
+"###,
+ r###"Images (575)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo](train.jpg)
+"###,
+ DANGER
+ ),
+ r###"<p><img src="train.jpg" alt="foo" /></p>
+"###,
+ r###"Images (576)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"My ![foo bar](/path/to/train.jpg "title" )
+"###,
+ DANGER
+ ),
+ r###"<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p>
+"###,
+ r###"Images (577)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo](<url>)
+"###,
+ DANGER
+ ),
+ r###"<p><img src="url" alt="foo" /></p>
+"###,
+ r###"Images (578)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![](/url)
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="" /></p>
+"###,
+ r###"Images (579)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo][bar]
+
+[bar]: /url
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo" /></p>
+"###,
+ r###"Images (580)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo][bar]
+
+[BAR]: /url
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo" /></p>
+"###,
+ r###"Images (581)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo][]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo" title="title" /></p>
+"###,
+ r###"Images (582)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![*foo* bar][]
+
+[*foo* bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo bar" title="title" /></p>
+"###,
+ r###"Images (583)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![Foo][]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="Foo" title="title" /></p>
+"###,
+ r###"Images (584)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo]
+[]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo" title="title" />
+[]</p>
+"###,
+ r###"Images (585)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo" title="title" /></p>
+"###,
+ r###"Images (586)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![*foo* bar]
+
+[*foo* bar]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="foo bar" title="title" /></p>
+"###,
+ r###"Images (587)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![[foo]]
+
+[[foo]]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>![[foo]]</p>
+<p>[[foo]]: /url &quot;title&quot;</p>
+"###,
+ r###"Images (588)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"![Foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p><img src="/url" alt="Foo" title="title" /></p>
+"###,
+ r###"Images (589)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"!\[foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>![foo]</p>
+"###,
+ r###"Images (590)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"\![foo]
+
+[foo]: /url "title"
+"###,
+ DANGER
+ ),
+ r###"<p>!<a href="/url" title="title">foo</a></p>
+"###,
+ r###"Images (591)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://foo.bar.baz>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="http://foo.bar.baz">http://foo.bar.baz</a></p>
+"###,
+ r###"Autolinks (592)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://foo.bar.baz/test?q=hello&id=22&boolean>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean">http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean</a></p>
+"###,
+ r###"Autolinks (593)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<irc://foo.bar:2233/baz>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
+"###,
+ r###"Autolinks (594)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<MAILTO:FOO@BAR.BAZ>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
+"###,
+ r###"Autolinks (595)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a+b+c:d>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="a+b+c:d">a+b+c:d</a></p>
+"###,
+ r###"Autolinks (596)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<made-up-scheme://foo,bar>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p>
+"###,
+ r###"Autolinks (597)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://../>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="http://../">http://../</a></p>
+"###,
+ r###"Autolinks (598)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<localhost:5001/foo>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="localhost:5001/foo">localhost:5001/foo</a></p>
+"###,
+ r###"Autolinks (599)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://foo.bar/baz bim>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;http://foo.bar/baz bim&gt;</p>
+"###,
+ r###"Autolinks (600)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<http://example.com/\[\>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="http://example.com/%5C%5B%5C">http://example.com/\[\</a></p>
+"###,
+ r###"Autolinks (601)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<foo@bar.example.com>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
+"###,
+ r###"Autolinks (602)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<foo+special@Bar.baz-bar0.com>
+"###,
+ DANGER
+ ),
+ r###"<p><a href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
+"###,
+ r###"Autolinks (603)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<foo\+@bar.example.com>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;foo+@bar.example.com&gt;</p>
+"###,
+ r###"Autolinks (604)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;&gt;</p>
+"###,
+ r###"Autolinks (605)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"< http://foo.bar >
+"###,
+ DANGER
+ ),
+ r###"<p>&lt; http://foo.bar &gt;</p>
+"###,
+ r###"Autolinks (606)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<m:abc>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;m:abc&gt;</p>
+"###,
+ r###"Autolinks (607)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<foo.bar.baz>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;foo.bar.baz&gt;</p>
+"###,
+ r###"Autolinks (608)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"http://example.com
+"###,
+ DANGER
+ ),
+ r###"<p>http://example.com</p>
+"###,
+ r###"Autolinks (609)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo@bar.example.com
+"###,
+ DANGER
+ ),
+ r###"<p>foo@bar.example.com</p>
+"###,
+ r###"Autolinks (610)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a><bab><c2c>
+"###,
+ DANGER
+ ),
+ r###"<p><a><bab><c2c></p>
+"###,
+ r###"Raw HTML (611)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a/><b2/>
+"###,
+ DANGER
+ ),
+ r###"<p><a/><b2/></p>
+"###,
+ r###"Raw HTML (612)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a /><b2
+data="foo" >
+"###,
+ DANGER
+ ),
+ r###"<p><a /><b2
+data="foo" ></p>
+"###,
+ r###"Raw HTML (613)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a foo="bar" bam = 'baz <em>"</em>'
+_boolean zoop:33=zoop:33 />
+"###,
+ DANGER
+ ),
+ r###"<p><a foo="bar" bam = 'baz <em>"</em>'
+_boolean zoop:33=zoop:33 /></p>
+"###,
+ r###"Raw HTML (614)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo <responsive-image src="foo.jpg" />
+"###,
+ DANGER
+ ),
+ r###"<p>Foo <responsive-image src="foo.jpg" /></p>
+"###,
+ r###"Raw HTML (615)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<33> <__>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;33&gt; &lt;__&gt;</p>
+"###,
+ r###"Raw HTML (616)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a h*#ref="hi">
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;a h*#ref=&quot;hi&quot;&gt;</p>
+"###,
+ r###"Raw HTML (617)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="hi'> <a href=hi'>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;a href=&quot;hi'&gt; &lt;a href=hi'&gt;</p>
+"###,
+ r###"Raw HTML (618)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"< a><
+foo><bar/ >
+<foo bar=baz
+bim!bop />
+"###,
+ DANGER
+ ),
+ r###"<p>&lt; a&gt;&lt;
+foo&gt;&lt;bar/ &gt;
+&lt;foo bar=baz
+bim!bop /&gt;</p>
+"###,
+ r###"Raw HTML (619)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href='bar'title=title>
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;a href='bar'title=title&gt;</p>
+"###,
+ r###"Raw HTML (620)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"</a></foo >
+"###,
+ DANGER
+ ),
+ r###"<p></a></foo ></p>
+"###,
+ r###"Raw HTML (621)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"</a href="foo">
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;/a href=&quot;foo&quot;&gt;</p>
+"###,
+ r###"Raw HTML (622)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <!-- this is a
+comment - with hyphen -->
+"###,
+ DANGER
+ ),
+ r###"<p>foo <!-- this is a
+comment - with hyphen --></p>
+"###,
+ r###"Raw HTML (623)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <!-- not a comment -- two hyphens -->
+"###,
+ DANGER
+ ),
+ r###"<p>foo &lt;!-- not a comment -- two hyphens --&gt;</p>
+"###,
+ r###"Raw HTML (624)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <!--> foo -->
+
+foo <!-- foo--->
+"###,
+ DANGER
+ ),
+ r###"<p>foo &lt;!--&gt; foo --&gt;</p>
+<p>foo &lt;!-- foo---&gt;</p>
+"###,
+ r###"Raw HTML (625)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <?php echo $a; ?>
+"###,
+ DANGER
+ ),
+ r###"<p>foo <?php echo $a; ?></p>
+"###,
+ r###"Raw HTML (626)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <!ELEMENT br EMPTY>
+"###,
+ DANGER
+ ),
+ r###"<p>foo <!ELEMENT br EMPTY></p>
+"###,
+ r###"Raw HTML (627)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <![CDATA[>&<]]>
+"###,
+ DANGER
+ ),
+ r###"<p>foo <![CDATA[>&<]]></p>
+"###,
+ r###"Raw HTML (628)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <a href="&ouml;">
+"###,
+ DANGER
+ ),
+ r###"<p>foo <a href="&ouml;"></p>
+"###,
+ r###"Raw HTML (629)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo <a href="\*">
+"###,
+ DANGER
+ ),
+ r###"<p>foo <a href="\*"></p>
+"###,
+ r###"Raw HTML (630)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="\"">
+"###,
+ DANGER
+ ),
+ r###"<p>&lt;a href=&quot;&quot;&quot;&gt;</p>
+"###,
+ r###"Raw HTML (631)"###
+ );
+
+ // To do: bug generating this file.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"foo
+ // baz
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p>foo<br />
+ // baz</p>
+ // "###,
+ // r###"Hard line breaks (632)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo\
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>foo<br />
+baz</p>
+"###,
+ r###"Hard line breaks (633)"###
+ );
+
+ // To do: bug generating this file.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"foo
+ // baz
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p>foo<br />
+ // baz</p>
+ // "###,
+ // r###"Hard line breaks (634)"###
+ // );
+
+ // To do: bug generating this file.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"foo
+ // bar
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p>foo<br />
+ // bar</p>
+ // "###,
+ // r###"Hard line breaks (635)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo\
+ bar
+"###,
+ DANGER
+ ),
+ r###"<p>foo<br />
+bar</p>
+"###,
+ r###"Hard line breaks (636)"###
+ );
+
+ // To do: bug generating this file.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"*foo
+ // bar*
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p><em>foo<br />
+ // bar</em></p>
+ // "###,
+ // r###"Hard line breaks (637)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"*foo\
+bar*
+"###,
+ DANGER
+ ),
+ r###"<p><em>foo<br />
+bar</em></p>
+"###,
+ r###"Hard line breaks (638)"###
+ );
+
+ // To do: bug generating this file.
+ // assert_eq!(
+ // micromark_with_options(
+ // r###"`code
+ // span`
+ // "###,
+ // DANGER
+ // ),
+ // r###"<p><code>code span</code></p>
+ // "###,
+ // r###"Hard line breaks (639)"###
+ // );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"`code\
+span`
+"###,
+ DANGER
+ ),
+ r###"<p><code>code\ span</code></p>
+"###,
+ r###"Hard line breaks (640)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="foo
+bar">
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo
+bar"></p>
+"###,
+ r###"Hard line breaks (641)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"<a href="foo\
+bar">
+"###,
+ DANGER
+ ),
+ r###"<p><a href="foo\
+bar"></p>
+"###,
+ r###"Hard line breaks (642)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo\
+"###,
+ DANGER
+ ),
+ r###"<p>foo\</p>
+"###,
+ r###"Hard line breaks (643)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+"###,
+ DANGER
+ ),
+ r###"<p>foo</p>
+"###,
+ r###"Hard line breaks (644)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"### foo\
+"###,
+ DANGER
+ ),
+ r###"<h3>foo\</h3>
+"###,
+ r###"Hard line breaks (645)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"### foo
+"###,
+ DANGER
+ ),
+ r###"<h3>foo</h3>
+"###,
+ r###"Hard line breaks (646)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+baz
+"###,
+ DANGER
+ ),
+ r###"<p>foo
+baz</p>
+"###,
+ r###"Soft line breaks (647)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"foo
+ baz
+"###,
+ DANGER
+ ),
+ r###"<p>foo
+baz</p>
+"###,
+ r###"Soft line breaks (648)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"hello $.;'there
+"###,
+ DANGER
+ ),
+ r###"<p>hello $.;'there</p>
+"###,
+ r###"Textual content (649)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Foo χρῆν
+"###,
+ DANGER
+ ),
+ r###"<p>Foo χρῆν</p>
+"###,
+ r###"Textual content (650)"###
+ );
+
+ assert_eq!(
+ micromark_with_options(
+ r###"Multiple spaces
+"###,
+ DANGER
+ ),
+ r###"<p>Multiple spaces</p>
+"###,
+ r###"Textual content (651)"###
+ );
+}