-",
- }
- }
-/>
-`;
diff --git a/packages/netlify-cms-widget-markdown/src/__tests__/renderer.spec.js b/packages/netlify-cms-widget-markdown/src/__tests__/renderer.spec.js
index 41d4664f..da86d6e5 100644
--- a/packages/netlify-cms-widget-markdown/src/__tests__/renderer.spec.js
+++ b/packages/netlify-cms-widget-markdown/src/__tests__/renderer.spec.js
@@ -74,18 +74,43 @@ Text with **bold** & _em_ elements
renderer
.create(
)
.toJSON(),
- ).toMatchSnapshot();
+ ).toMatchInlineSnapshot(`
+.emotion-0 {
+ margin: 15px 2px;
+}
+
+
+
ol item 1
+
ol item 2
+Sublist 1
+Sublist 2
+Sublist 3
+Sub-Sublist 1
+Sub-Sublist 2
+Sub-Sublist 3
+
+
+
ol item 3
+",
+ }
+ }
+/>
+`);
});
});
describe('Links', () => {
it('should render links', () => {
const value = `
-I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3].
+I get 10 times more traffic from [Google] than from [Yahoo] or [MSN].
- [1]: http://google.com/ "Google"
- [2]: http://search.yahoo.com/ "Yahoo Search"
- [3]: http://search.msn.com/ "MSN Search"
+ [Google]: http://google.com/ "Google"
+ [Yahoo]: http://search.yahoo.com/ "Yahoo Search"
+ [MSN]: http://search.msn.com/ "MSN Search"
`;
expect(
renderer
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/__fixtures__/commonmark.json b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/__fixtures__/commonmark.json
deleted file mode 100644
index eb6b4df7..00000000
--- a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/__fixtures__/commonmark.json
+++ /dev/null
@@ -1,4994 +0,0 @@
-[
- {
- "end_line": 355,
- "section": "Tabs",
- "html": "
foo\tbaz\t\tbim\n
\n",
- "markdown": "\tfoo\tbaz\t\tbim\n",
- "example": 1,
- "start_line": 350
- },
- {
- "end_line": 362,
- "section": "Tabs",
- "html": "
foo\tbaz\t\tbim\n
\n",
- "markdown": " \tfoo\tbaz\t\tbim\n",
- "example": 2,
- "start_line": 357
- },
- {
- "end_line": 371,
- "section": "Tabs",
- "html": "
a\ta\nὐ\ta\n
\n",
- "markdown": " a\ta\n ὐ\ta\n",
- "example": 3,
- "start_line": 364
- },
- {
- "end_line": 388,
- "section": "Tabs",
- "html": "
\n",
- "markdown": " - foo\n\n\tbar\n",
- "example": 4,
- "start_line": 377
- },
- {
- "end_line": 402,
- "section": "Tabs",
- "html": "
\n",
- "markdown": "- foo\n\n\t\tbar\n",
- "example": 5,
- "start_line": 390
- },
- {
- "end_line": 420,
- "section": "Tabs",
- "html": "
\n foo\n
\n \n",
- "markdown": ">\t\tfoo\n",
- "example": 6,
- "start_line": 413
- },
- {
- "end_line": 431,
- "section": "Tabs",
- "html": "
\n",
- "markdown": "-\t\tfoo\n",
- "example": 7,
- "start_line": 422
- },
- {
- "end_line": 441,
- "section": "Tabs",
- "html": "
foo\nbar\n
\n",
- "markdown": " foo\n\tbar\n",
- "example": 8,
- "start_line": 434
- },
- {
- "end_line": 459,
- "section": "Tabs",
- "html": "
\n",
- "markdown": " - foo\n - bar\n\t - baz\n",
- "example": 9,
- "start_line": 443
- },
- {
- "end_line": 465,
- "section": "Tabs",
- "html": "
Foo \n",
- "markdown": "#\tFoo\n",
- "example": 10,
- "start_line": 461
- },
- {
- "end_line": 471,
- "section": "Tabs",
- "html": "
\n",
- "markdown": "*\t*\t*\t\n",
- "example": 11,
- "start_line": 467
- },
- {
- "end_line": 502,
- "section": "Precedence",
- "html": "
\n",
- "markdown": "- `one\n- two`\n",
- "example": 12,
- "start_line": 494
- },
- {
- "end_line": 541,
- "section": "Thematic breaks",
- "html": "
\n
\n
\n",
- "markdown": "***\n---\n___\n",
- "example": 13,
- "start_line": 533
- },
- {
- "end_line": 550,
- "section": "Thematic breaks",
- "html": "
+++
\n",
- "markdown": "+++\n",
- "example": 14,
- "start_line": 546
- },
- {
- "end_line": 557,
- "section": "Thematic breaks",
- "html": "
===
\n",
- "markdown": "===\n",
- "example": 15,
- "start_line": 553
- },
- {
- "end_line": 570,
- "section": "Thematic breaks",
- "html": "
--\n**\n__
\n",
- "markdown": "--\n**\n__\n",
- "example": 16,
- "start_line": 562
- },
- {
- "end_line": 583,
- "section": "Thematic breaks",
- "html": "
\n
\n
\n",
- "markdown": " ***\n ***\n ***\n",
- "example": 17,
- "start_line": 575
- },
- {
- "end_line": 593,
- "section": "Thematic breaks",
- "html": "
***\n
\n",
- "markdown": " ***\n",
- "example": 18,
- "start_line": 588
- },
- {
- "end_line": 602,
- "section": "Thematic breaks",
- "html": "
Foo\n***
\n",
- "markdown": "Foo\n ***\n",
- "example": 19,
- "start_line": 596
- },
- {
- "end_line": 611,
- "section": "Thematic breaks",
- "html": "
\n",
- "markdown": "_____________________________________\n",
- "example": 20,
- "start_line": 607
- },
- {
- "end_line": 620,
- "section": "Thematic breaks",
- "html": "
\n",
- "markdown": " - - -\n",
- "example": 21,
- "start_line": 616
- },
- {
- "end_line": 627,
- "section": "Thematic breaks",
- "html": "
\n",
- "markdown": " ** * ** * ** * **\n",
- "example": 22,
- "start_line": 623
- },
- {
- "end_line": 634,
- "section": "Thematic breaks",
- "html": "
\n",
- "markdown": "- - - -\n",
- "example": 23,
- "start_line": 630
- },
- {
- "end_line": 643,
- "section": "Thematic breaks",
- "html": "
\n",
- "markdown": "- - - - \n",
- "example": 24,
- "start_line": 639
- },
- {
- "end_line": 658,
- "section": "Thematic breaks",
- "html": "
_ _ _ _ a
\n
a------
\n
---a---
\n",
- "markdown": "_ _ _ _ a\n\na------\n\n---a---\n",
- "example": 25,
- "start_line": 648
- },
- {
- "end_line": 668,
- "section": "Thematic breaks",
- "html": "
-
\n",
- "markdown": " *-*\n",
- "example": 26,
- "start_line": 664
- },
- {
- "end_line": 685,
- "section": "Thematic breaks",
- "html": "
\n
\n
\n",
- "markdown": "- foo\n***\n- bar\n",
- "example": 27,
- "start_line": 673
- },
- {
- "end_line": 698,
- "section": "Thematic breaks",
- "html": "
Foo
\n
\n
bar
\n",
- "markdown": "Foo\n***\nbar\n",
- "example": 28,
- "start_line": 690
- },
- {
- "end_line": 714,
- "section": "Thematic breaks",
- "html": "
Foo \n
bar
\n",
- "markdown": "Foo\n---\nbar\n",
- "example": 29,
- "start_line": 707
- },
- {
- "end_line": 732,
- "section": "Thematic breaks",
- "html": "
\n
\n
\n",
- "markdown": "* Foo\n* * *\n* Bar\n",
- "example": 30,
- "start_line": 720
- },
- {
- "end_line": 747,
- "section": "Thematic breaks",
- "html": "
\n",
- "markdown": "- Foo\n- * * *\n",
- "example": 31,
- "start_line": 737
- },
- {
- "end_line": 780,
- "section": "ATX headings",
- "html": "
foo \n
foo \n
foo \n
foo \n
foo \n
foo \n",
- "markdown": "# foo\n## foo\n### foo\n#### foo\n##### foo\n###### foo\n",
- "example": 32,
- "start_line": 766
- },
- {
- "end_line": 789,
- "section": "ATX headings",
- "html": "
####### foo
\n",
- "markdown": "####### foo\n",
- "example": 33,
- "start_line": 785
- },
- {
- "end_line": 807,
- "section": "ATX headings",
- "html": "
#5 bolt
\n
#hashtag
\n",
- "markdown": "#5 bolt\n\n#hashtag\n",
- "example": 34,
- "start_line": 800
- },
- {
- "end_line": 816,
- "section": "ATX headings",
- "html": "
## foo
\n",
- "markdown": "\\## foo\n",
- "example": 35,
- "start_line": 812
- },
- {
- "end_line": 825,
- "section": "ATX headings",
- "html": "
foo bar *baz* \n",
- "markdown": "# foo *bar* \\*baz\\*\n",
- "example": 36,
- "start_line": 821
- },
- {
- "end_line": 834,
- "section": "ATX headings",
- "html": "
foo \n",
- "markdown": "# foo \n",
- "example": 37,
- "start_line": 830
- },
- {
- "end_line": 847,
- "section": "ATX headings",
- "html": "
foo \n
foo \n
foo \n",
- "markdown": " ### foo\n ## foo\n # foo\n",
- "example": 38,
- "start_line": 839
- },
- {
- "end_line": 857,
- "section": "ATX headings",
- "html": "
# foo\n
\n",
- "markdown": " # foo\n",
- "example": 39,
- "start_line": 852
- },
- {
- "end_line": 866,
- "section": "ATX headings",
- "html": "
foo\n# bar
\n",
- "markdown": "foo\n # bar\n",
- "example": 40,
- "start_line": 860
- },
- {
- "end_line": 877,
- "section": "ATX headings",
- "html": "
foo \n
bar \n",
- "markdown": "## foo ##\n ### bar ###\n",
- "example": 41,
- "start_line": 871
- },
- {
- "end_line": 888,
- "section": "ATX headings",
- "html": "
foo \n
foo \n",
- "markdown": "# foo ##################################\n##### foo ##\n",
- "example": 42,
- "start_line": 882
- },
- {
- "end_line": 897,
- "section": "ATX headings",
- "html": "
foo \n",
- "markdown": "### foo ### \n",
- "example": 43,
- "start_line": 893
- },
- {
- "end_line": 908,
- "section": "ATX headings",
- "html": "
foo ### b \n",
- "markdown": "### foo ### b\n",
- "example": 44,
- "start_line": 904
- },
- {
- "end_line": 917,
- "section": "ATX headings",
- "html": "
foo# \n",
- "markdown": "# foo#\n",
- "example": 45,
- "start_line": 913
- },
- {
- "end_line": 931,
- "section": "ATX headings",
- "html": "
foo ### \n
foo ### \n
foo # \n",
- "markdown": "### foo \\###\n## foo #\\##\n# foo \\#\n",
- "example": 46,
- "start_line": 923
- },
- {
- "end_line": 945,
- "section": "ATX headings",
- "html": "
\n
foo \n
\n",
- "markdown": "****\n## foo\n****\n",
- "example": 47,
- "start_line": 937
- },
- {
- "end_line": 956,
- "section": "ATX headings",
- "html": "
Foo bar
\n
baz \n
Bar foo
\n",
- "markdown": "Foo bar\n# baz\nBar foo\n",
- "example": 48,
- "start_line": 948
- },
- {
- "end_line": 969,
- "section": "ATX headings",
- "html": "
\n
\n
\n",
- "markdown": "## \n#\n### ###\n",
- "example": 49,
- "start_line": 961
- },
- {
- "end_line": 1013,
- "section": "Setext headings",
- "html": "
Foo bar \n
Foo bar \n",
- "markdown": "Foo *bar*\n=========\n\nFoo *bar*\n---------\n",
- "example": 50,
- "start_line": 1004
- },
- {
- "end_line": 1025,
- "section": "Setext headings",
- "html": "
Foo bar\nbaz \n",
- "markdown": "Foo *bar\nbaz*\n====\n",
- "example": 51,
- "start_line": 1018
- },
- {
- "end_line": 1039,
- "section": "Setext headings",
- "html": "
Foo \n
Foo \n",
- "markdown": "Foo\n-------------------------\n\nFoo\n=\n",
- "example": 52,
- "start_line": 1030
- },
- {
- "end_line": 1058,
- "section": "Setext headings",
- "html": "
Foo \n
Foo \n
Foo \n",
- "markdown": " Foo\n---\n\n Foo\n-----\n\n Foo\n ===\n",
- "example": 53,
- "start_line": 1045
- },
- {
- "end_line": 1076,
- "section": "Setext headings",
- "html": "
Foo\n---\n\nFoo\n
\n
\n",
- "markdown": " Foo\n ---\n\n Foo\n---\n",
- "example": 54,
- "start_line": 1063
- },
- {
- "end_line": 1087,
- "section": "Setext headings",
- "html": "
Foo \n",
- "markdown": "Foo\n ---- \n",
- "example": 55,
- "start_line": 1082
- },
- {
- "end_line": 1098,
- "section": "Setext headings",
- "html": "
Foo\n---
\n",
- "markdown": "Foo\n ---\n",
- "example": 56,
- "start_line": 1092
- },
- {
- "end_line": 1114,
- "section": "Setext headings",
- "html": "
Foo\n= =
\n
Foo
\n
\n",
- "markdown": "Foo\n= =\n\nFoo\n--- -\n",
- "example": 57,
- "start_line": 1103
- },
- {
- "end_line": 1124,
- "section": "Setext headings",
- "html": "
Foo \n",
- "markdown": "Foo \n-----\n",
- "example": 58,
- "start_line": 1119
- },
- {
- "end_line": 1134,
- "section": "Setext headings",
- "html": "
Foo\\ \n",
- "markdown": "Foo\\\n----\n",
- "example": 59,
- "start_line": 1129
- },
- {
- "end_line": 1153,
- "section": "Setext headings",
- "html": "
`Foo \n
`
\n
<a title="a lot \n
of dashes"/>
\n",
- "markdown": "`Foo\n----\n`\n\n
\n",
- "example": 60,
- "start_line": 1140
- },
- {
- "end_line": 1167,
- "section": "Setext headings",
- "html": "
\nFoo
\n \n
\n",
- "markdown": "> Foo\n---\n",
- "example": 61,
- "start_line": 1159
- },
- {
- "end_line": 1180,
- "section": "Setext headings",
- "html": "
\nfoo\nbar\n===
\n \n",
- "markdown": "> foo\nbar\n===\n",
- "example": 62,
- "start_line": 1170
- },
- {
- "end_line": 1191,
- "section": "Setext headings",
- "html": "
\n
\n",
- "markdown": "- Foo\n---\n",
- "example": 63,
- "start_line": 1183
- },
- {
- "end_line": 1205,
- "section": "Setext headings",
- "html": "
Foo\nBar \n",
- "markdown": "Foo\nBar\n---\n",
- "example": 64,
- "start_line": 1198
- },
- {
- "end_line": 1223,
- "section": "Setext headings",
- "html": "
\n
Foo \n
Bar \n
Baz
\n",
- "markdown": "---\nFoo\n---\nBar\n---\nBaz\n",
- "example": 65,
- "start_line": 1211
- },
- {
- "end_line": 1233,
- "section": "Setext headings",
- "html": "
====
\n",
- "markdown": "\n====\n",
- "example": 66,
- "start_line": 1228
- },
- {
- "end_line": 1246,
- "section": "Setext headings",
- "html": "
\n
\n",
- "markdown": "---\n---\n",
- "example": 67,
- "start_line": 1240
- },
- {
- "end_line": 1257,
- "section": "Setext headings",
- "html": "
\n
\n",
- "markdown": "- foo\n-----\n",
- "example": 68,
- "start_line": 1249
- },
- {
- "end_line": 1267,
- "section": "Setext headings",
- "html": "
foo\n
\n
\n",
- "markdown": " foo\n---\n",
- "example": 69,
- "start_line": 1260
- },
- {
- "end_line": 1278,
- "section": "Setext headings",
- "html": "
\nfoo
\n \n
\n",
- "markdown": "> foo\n-----\n",
- "example": 70,
- "start_line": 1270
- },
- {
- "end_line": 1289,
- "section": "Setext headings",
- "html": "
> foo \n",
- "markdown": "\\> foo\n------\n",
- "example": 71,
- "start_line": 1284
- },
- {
- "end_line": 1325,
- "section": "Setext headings",
- "html": "
Foo
\n
bar \n
baz
\n",
- "markdown": "Foo\n\nbar\n---\nbaz\n",
- "example": 72,
- "start_line": 1315
- },
- {
- "end_line": 1343,
- "section": "Setext headings",
- "html": "
Foo\nbar
\n
\n
baz
\n",
- "markdown": "Foo\nbar\n\n---\n\nbaz\n",
- "example": 73,
- "start_line": 1331
- },
- {
- "end_line": 1359,
- "section": "Setext headings",
- "html": "
Foo\nbar
\n
\n
baz
\n",
- "markdown": "Foo\nbar\n* * *\nbaz\n",
- "example": 74,
- "start_line": 1349
- },
- {
- "end_line": 1374,
- "section": "Setext headings",
- "html": "
Foo\nbar\n---\nbaz
\n",
- "markdown": "Foo\nbar\n\\---\nbaz\n",
- "example": 75,
- "start_line": 1364
- },
- {
- "end_line": 1399,
- "section": "Indented code blocks",
- "html": "
a simple\n indented code block\n
\n",
- "markdown": " a simple\n indented code block\n",
- "example": 76,
- "start_line": 1392
- },
- {
- "end_line": 1417,
- "section": "Indented code blocks",
- "html": "
\n",
- "markdown": " - foo\n\n bar\n",
- "example": 77,
- "start_line": 1406
- },
- {
- "end_line": 1433,
- "section": "Indented code blocks",
- "html": "
\n\nfoo
\n\n \n \n",
- "markdown": "1. foo\n\n - bar\n",
- "example": 78,
- "start_line": 1420
- },
- {
- "end_line": 1451,
- "section": "Indented code blocks",
- "html": "
<a/>\n*hi*\n\n- one\n
\n",
- "markdown": "
\n *hi*\n\n - one\n",
- "example": 79,
- "start_line": 1440
- },
- {
- "end_line": 1473,
- "section": "Indented code blocks",
- "html": "
chunk1\n\nchunk2\n\n\n\nchunk3\n
\n",
- "markdown": " chunk1\n\n chunk2\n \n \n \n chunk3\n",
- "example": 80,
- "start_line": 1456
- },
- {
- "end_line": 1488,
- "section": "Indented code blocks",
- "html": "
chunk1\n \n chunk2\n
\n",
- "markdown": " chunk1\n \n chunk2\n",
- "example": 81,
- "start_line": 1479
- },
- {
- "end_line": 1501,
- "section": "Indented code blocks",
- "html": "
Foo\nbar
\n",
- "markdown": "Foo\n bar\n\n",
- "example": 82,
- "start_line": 1494
- },
- {
- "end_line": 1515,
- "section": "Indented code blocks",
- "html": "
foo\n
\n
bar
\n",
- "markdown": " foo\nbar\n",
- "example": 83,
- "start_line": 1508
- },
- {
- "end_line": 1536,
- "section": "Indented code blocks",
- "html": "
Heading \n
foo\n
\n
Heading \n
foo\n
\n
\n",
- "markdown": "# Heading\n foo\nHeading\n------\n foo\n----\n",
- "example": 84,
- "start_line": 1521
- },
- {
- "end_line": 1548,
- "section": "Indented code blocks",
- "html": "
foo\nbar\n
\n",
- "markdown": " foo\n bar\n",
- "example": 85,
- "start_line": 1541
- },
- {
- "end_line": 1563,
- "section": "Indented code blocks",
- "html": "
foo\n
\n",
- "markdown": "\n \n foo\n \n\n",
- "example": 86,
- "start_line": 1554
- },
- {
- "end_line": 1573,
- "section": "Indented code blocks",
- "html": "
foo \n
\n",
- "markdown": " foo \n",
- "example": 87,
- "start_line": 1568
- },
- {
- "end_line": 1632,
- "section": "Fenced code blocks",
- "html": "
<\n >\n
\n",
- "markdown": "```\n<\n >\n```\n",
- "example": 88,
- "start_line": 1623
- },
- {
- "end_line": 1646,
- "section": "Fenced code blocks",
- "html": "
<\n >\n
\n",
- "markdown": "~~~\n<\n >\n~~~\n",
- "example": 89,
- "start_line": 1637
- },
- {
- "end_line": 1656,
- "section": "Fenced code blocks",
- "html": "
foo
\n",
- "markdown": "``\nfoo\n``\n",
- "example": 90,
- "start_line": 1650
- },
- {
- "end_line": 1670,
- "section": "Fenced code blocks",
- "html": "
aaa\n~~~\n
\n",
- "markdown": "```\naaa\n~~~\n```\n",
- "example": 91,
- "start_line": 1661
- },
- {
- "end_line": 1682,
- "section": "Fenced code blocks",
- "html": "
aaa\n```\n
\n",
- "markdown": "~~~\naaa\n```\n~~~\n",
- "example": 92,
- "start_line": 1673
- },
- {
- "end_line": 1696,
- "section": "Fenced code blocks",
- "html": "
aaa\n```\n
\n",
- "markdown": "````\naaa\n```\n``````\n",
- "example": 93,
- "start_line": 1687
- },
- {
- "end_line": 1708,
- "section": "Fenced code blocks",
- "html": "
aaa\n~~~\n
\n",
- "markdown": "~~~~\naaa\n~~~\n~~~~\n",
- "example": 94,
- "start_line": 1699
- },
- {
- "end_line": 1718,
- "section": "Fenced code blocks",
- "html": "
\n",
- "markdown": "```\n",
- "example": 95,
- "start_line": 1714
- },
- {
- "end_line": 1731,
- "section": "Fenced code blocks",
- "html": "
\n```\naaa\n
\n",
- "markdown": "`````\n\n```\naaa\n",
- "example": 96,
- "start_line": 1721
- },
- {
- "end_line": 1745,
- "section": "Fenced code blocks",
- "html": "
\naaa\n
\n \n
bbb
\n",
- "markdown": "> ```\n> aaa\n\nbbb\n",
- "example": 97,
- "start_line": 1734
- },
- {
- "end_line": 1759,
- "section": "Fenced code blocks",
- "html": "
\n \n
\n",
- "markdown": "```\n\n \n```\n",
- "example": 98,
- "start_line": 1750
- },
- {
- "end_line": 1769,
- "section": "Fenced code blocks",
- "html": "
\n",
- "markdown": "```\n```\n",
- "example": 99,
- "start_line": 1764
- },
- {
- "end_line": 1785,
- "section": "Fenced code blocks",
- "html": "
aaa\naaa\n
\n",
- "markdown": " ```\n aaa\naaa\n```\n",
- "example": 100,
- "start_line": 1776
- },
- {
- "end_line": 1799,
- "section": "Fenced code blocks",
- "html": "
aaa\naaa\naaa\n
\n",
- "markdown": " ```\naaa\n aaa\naaa\n ```\n",
- "example": 101,
- "start_line": 1788
- },
- {
- "end_line": 1813,
- "section": "Fenced code blocks",
- "html": "
aaa\n aaa\naaa\n
\n",
- "markdown": " ```\n aaa\n aaa\n aaa\n ```\n",
- "example": 102,
- "start_line": 1802
- },
- {
- "end_line": 1827,
- "section": "Fenced code blocks",
- "html": "
```\naaa\n```\n
\n",
- "markdown": " ```\n aaa\n ```\n",
- "example": 103,
- "start_line": 1818
- },
- {
- "end_line": 1840,
- "section": "Fenced code blocks",
- "html": "
aaa\n
\n",
- "markdown": "```\naaa\n ```\n",
- "example": 104,
- "start_line": 1833
- },
- {
- "end_line": 1850,
- "section": "Fenced code blocks",
- "html": "
aaa\n
\n",
- "markdown": " ```\naaa\n ```\n",
- "example": 105,
- "start_line": 1843
- },
- {
- "end_line": 1863,
- "section": "Fenced code blocks",
- "html": "
aaa\n ```\n
\n",
- "markdown": "```\naaa\n ```\n",
- "example": 106,
- "start_line": 1855
- },
- {
- "end_line": 1875,
- "section": "Fenced code blocks",
- "html": "
\naaa
\n",
- "markdown": "``` ```\naaa\n",
- "example": 107,
- "start_line": 1869
- },
- {
- "end_line": 1886,
- "section": "Fenced code blocks",
- "html": "
aaa\n~~~ ~~\n
\n",
- "markdown": "~~~~~~\naaa\n~~~ ~~\n",
- "example": 108,
- "start_line": 1878
- },
- {
- "end_line": 1903,
- "section": "Fenced code blocks",
- "html": "
foo
\n
bar\n
\n
baz
\n",
- "markdown": "foo\n```\nbar\n```\nbaz\n",
- "example": 109,
- "start_line": 1892
- },
- {
- "end_line": 1921,
- "section": "Fenced code blocks",
- "html": "
foo \n
bar\n
\n
baz \n",
- "markdown": "foo\n---\n~~~\nbar\n~~~\n# baz\n",
- "example": 110,
- "start_line": 1909
- },
- {
- "end_line": 1940,
- "section": "Fenced code blocks",
- "html": "
def foo(x)\n return 3\nend\n
\n",
- "markdown": "```ruby\ndef foo(x)\n return 3\nend\n```\n",
- "example": 111,
- "start_line": 1929
- },
- {
- "end_line": 1954,
- "section": "Fenced code blocks",
- "html": "
def foo(x)\n return 3\nend\n
\n",
- "markdown": "~~~~ ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n~~~~~~~\n",
- "example": 112,
- "start_line": 1943
- },
- {
- "end_line": 1962,
- "section": "Fenced code blocks",
- "html": "
\n",
- "markdown": "````;\n````\n",
- "example": 113,
- "start_line": 1957
- },
- {
- "end_line": 1973,
- "section": "Fenced code blocks",
- "html": "
aa
\nfoo
\n",
- "markdown": "``` aa ```\nfoo\n",
- "example": 114,
- "start_line": 1967
- },
- {
- "end_line": 1985,
- "section": "Fenced code blocks",
- "html": "
``` aaa\n
\n",
- "markdown": "```\n``` aaa\n```\n",
- "example": 115,
- "start_line": 1978
- },
- {
- "end_line": 2070,
- "section": "HTML blocks",
- "html": "
\n\n**Hello**,\nworld .\n
\n
\n",
- "markdown": "
\n\n**Hello**,\n\n_world_.\n \n
\n",
- "example": 116,
- "start_line": 2055
- },
- {
- "end_line": 2103,
- "section": "HTML blocks",
- "html": "
\n
okay.
\n",
- "markdown": "
\n\nokay.\n",
- "example": 117,
- "start_line": 2084
- },
- {
- "end_line": 2114,
- "section": "HTML blocks",
- "html": "
\n*foo*\n",
- "example": 119,
- "start_line": 2119
- },
- {
- "end_line": 2140,
- "section": "HTML blocks",
- "html": "
\n",
- "markdown": "
\n\n*Markdown*\n\n
\n",
- "example": 120,
- "start_line": 2130
- },
- {
- "end_line": 2154,
- "section": "HTML blocks",
- "html": "
\n
\n",
- "markdown": "
\n
\n",
- "example": 121,
- "start_line": 2146
- },
- {
- "end_line": 2165,
- "section": "HTML blocks",
- "html": "
\n
\n",
- "markdown": "
\n
\n",
- "example": 122,
- "start_line": 2157
- },
- {
- "end_line": 2178,
- "section": "HTML blocks",
- "html": "
\n*foo*\n
bar
\n",
- "markdown": "
\n*foo*\n\n*bar*\n",
- "example": 123,
- "start_line": 2169
- },
- {
- "end_line": 2191,
- "section": "HTML blocks",
- "html": "
\n",
- "markdown": "
\n",
- "example": 127,
- "start_line": 2218
- },
- {
- "end_line": 2233,
- "section": "HTML blocks",
- "html": "
\n",
- "markdown": "
\n",
- "example": 128,
- "start_line": 2225
- },
- {
- "end_line": 2252,
- "section": "HTML blocks",
- "html": "
\n``` c\nint x = 33;\n```\n",
- "markdown": "
\n``` c\nint x = 33;\n```\n",
- "example": 129,
- "start_line": 2242
- },
- {
- "end_line": 2267,
- "section": "HTML blocks",
- "html": "
\n*bar*\n \n",
- "markdown": "
\n*bar*\n \n",
- "example": 130,
- "start_line": 2259
- },
- {
- "end_line": 2280,
- "section": "HTML blocks",
- "html": "
\n*bar*\n \n",
- "markdown": "
\n*bar*\n \n",
- "example": 131,
- "start_line": 2272
- },
- {
- "end_line": 2291,
- "section": "HTML blocks",
- "html": "
\n*bar*\n \n",
- "markdown": "
\n*bar*\n \n",
- "example": 132,
- "start_line": 2283
- },
- {
- "end_line": 2300,
- "section": "HTML blocks",
- "html": "\n*bar*\n",
- "markdown": "\n*bar*\n",
- "example": 133,
- "start_line": 2294
- },
- {
- "end_line": 2317,
- "section": "HTML blocks",
- "html": "
\n*foo*\n\n",
- "markdown": "
\n*foo*\n\n",
- "example": 134,
- "start_line": 2309
- },
- {
- "end_line": 2334,
- "section": "HTML blocks",
- "html": "
\nfoo
\n\n",
- "markdown": "
\n\n*foo*\n\n\n",
- "example": 135,
- "start_line": 2324
- },
- {
- "end_line": 2346,
- "section": "HTML blocks",
- "html": "
foo
\n",
- "markdown": "
*foo*\n",
- "example": 136,
- "start_line": 2342
- },
- {
- "end_line": 2374,
- "section": "HTML blocks",
- "html": "
\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n
\n
okay
\n",
- "markdown": "
\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n
\nokay\n",
- "example": 137,
- "start_line": 2358
- },
- {
- "end_line": 2393,
- "section": "HTML blocks",
- "html": "\n
okay
\n",
- "markdown": "\nokay\n",
- "example": 138,
- "start_line": 2379
- },
- {
- "end_line": 2414,
- "section": "HTML blocks",
- "html": "\n
okay
\n",
- "markdown": "\nokay\n",
- "example": 139,
- "start_line": 2398
- },
- {
- "end_line": 2431,
- "section": "HTML blocks",
- "html": "\n
foo
\n",
- "markdown": "\n*foo*\n",
- "example": 143,
- "start_line": 2463
- },
- {
- "end_line": 2478,
- "section": "HTML blocks",
- "html": "*bar*\n
baz
\n",
- "markdown": "*bar*\n*baz*\n",
- "example": 144,
- "start_line": 2472
- },
- {
- "end_line": 2492,
- "section": "HTML blocks",
- "html": "1. *bar*\n",
- "markdown": "1. *bar*\n",
- "example": 145,
- "start_line": 2484
- },
- {
- "end_line": 2509,
- "section": "HTML blocks",
- "html": "\n
okay
\n",
- "markdown": "\nokay\n",
- "example": 146,
- "start_line": 2497
- },
- {
- "end_line": 2529,
- "section": "HTML blocks",
- "html": "';\n\n?>\n
okay
\n",
- "markdown": "';\n\n?>\nokay\n",
- "example": 147,
- "start_line": 2515
- },
- {
- "end_line": 2538,
- "section": "HTML blocks",
- "html": "\n",
- "markdown": "\n",
- "example": 148,
- "start_line": 2534
- },
- {
- "end_line": 2571,
- "section": "HTML blocks",
- "html": "\n
okay
\n",
- "markdown": "\nokay\n",
- "example": 149,
- "start_line": 2543
- },
- {
- "end_line": 2584,
- "section": "HTML blocks",
- "html": " \n
<!-- foo -->\n
\n",
- "markdown": " \n\n \n",
- "example": 150,
- "start_line": 2576
- },
- {
- "end_line": 2595,
- "section": "HTML blocks",
- "html": "
\n
<div>\n
\n",
- "markdown": "
\n\n
\n",
- "example": 151,
- "start_line": 2587
- },
- {
- "end_line": 2611,
- "section": "HTML blocks",
- "html": "
Foo
\n
\nbar\n
\n",
- "markdown": "Foo\n
\nbar\n
\n",
- "example": 152,
- "start_line": 2601
- },
- {
- "end_line": 2627,
- "section": "HTML blocks",
- "html": "
\nbar\n
\n*foo*\n",
- "markdown": "
\nbar\n
\n*foo*\n",
- "example": 153,
- "start_line": 2617
- },
- {
- "end_line": 2640,
- "section": "HTML blocks",
- "html": "
Foo\n\nbaz
\n",
- "markdown": "Foo\n
\nbaz\n",
- "example": 154,
- "start_line": 2632
- },
- {
- "end_line": 2683,
- "section": "HTML blocks",
- "html": "\n",
- "markdown": "\n\n*Emphasized* text.\n\n
\n",
- "example": 155,
- "start_line": 2673
- },
- {
- "end_line": 2694,
- "section": "HTML blocks",
- "html": "\n*Emphasized* text.\n
\n",
- "markdown": "\n*Emphasized* text.\n
\n",
- "example": 156,
- "start_line": 2686
- },
- {
- "end_line": 2728,
- "section": "HTML blocks",
- "html": " \n",
- "markdown": "
\n",
- "example": 157,
- "start_line": 2708
- },
- {
- "end_line": 2756,
- "section": "HTML blocks",
- "html": "
\n \n<td>\n Hi\n</td>\n
\n \n
\n",
- "markdown": "
\n\n \n\n \n Hi\n \n\n \n\n
\n",
- "example": 158,
- "start_line": 2735
- },
- {
- "end_line": 2789,
- "section": "Link reference definitions",
- "html": "
foo
\n",
- "markdown": "[foo]: /url \"title\"\n\n[foo]\n",
- "example": 159,
- "start_line": 2783
- },
- {
- "end_line": 2800,
- "section": "Link reference definitions",
- "html": "
foo
\n",
- "markdown": " [foo]: \n /url \n 'the title' \n\n[foo]\n",
- "example": 160,
- "start_line": 2792
- },
- {
- "end_line": 2809,
- "section": "Link reference definitions",
- "html": "
Foo*bar]
\n",
- "markdown": "[Foo*bar\\]]:my_(url) 'title (with parens)'\n\n[Foo*bar\\]]\n",
- "example": 161,
- "start_line": 2803
- },
- {
- "end_line": 2820,
- "section": "Link reference definitions",
- "html": "
Foo bar
\n",
- "markdown": "[Foo bar]:\n
\n'title'\n\n[Foo bar]\n",
- "example": 162,
- "start_line": 2812
- },
- {
- "end_line": 2839,
- "section": "Link reference definitions",
- "html": "foo
\n",
- "markdown": "[foo]: /url '\ntitle\nline1\nline2\n'\n\n[foo]\n",
- "example": 163,
- "start_line": 2825
- },
- {
- "end_line": 2854,
- "section": "Link reference definitions",
- "html": "[foo]: /url 'title
\nwith blank line'
\n[foo]
\n",
- "markdown": "[foo]: /url 'title\n\nwith blank line'\n\n[foo]\n",
- "example": 164,
- "start_line": 2844
- },
- {
- "end_line": 2866,
- "section": "Link reference definitions",
- "html": "foo
\n",
- "markdown": "[foo]:\n/url\n\n[foo]\n",
- "example": 165,
- "start_line": 2859
- },
- {
- "end_line": 2878,
- "section": "Link reference definitions",
- "html": "[foo]:
\n[foo]
\n",
- "markdown": "[foo]:\n\n[foo]\n",
- "example": 166,
- "start_line": 2871
- },
- {
- "end_line": 2890,
- "section": "Link reference definitions",
- "html": "foo
\n",
- "markdown": "[foo]: /url\\bar\\*baz \"foo\\\"bar\\baz\"\n\n[foo]\n",
- "example": 167,
- "start_line": 2884
- },
- {
- "end_line": 2901,
- "section": "Link reference definitions",
- "html": "foo
\n",
- "markdown": "[foo]\n\n[foo]: url\n",
- "example": 168,
- "start_line": 2895
- },
- {
- "end_line": 2914,
- "section": "Link reference definitions",
- "html": "foo
\n",
- "markdown": "[foo]\n\n[foo]: first\n[foo]: second\n",
- "example": 169,
- "start_line": 2907
- },
- {
- "end_line": 2926,
- "section": "Link reference definitions",
- "html": "Foo
\n",
- "markdown": "[FOO]: /url\n\n[Foo]\n",
- "example": 170,
- "start_line": 2920
- },
- {
- "end_line": 2935,
- "section": "Link reference definitions",
- "html": "αγω
\n",
- "markdown": "[ΑΓΩ]: /φου\n\n[αγω]\n",
- "example": 171,
- "start_line": 2929
- },
- {
- "end_line": 2944,
- "section": "Link reference definitions",
- "html": "",
- "markdown": "[foo]: /url\n",
- "example": 172,
- "start_line": 2941
- },
- {
- "end_line": 2956,
- "section": "Link reference definitions",
- "html": "bar
\n",
- "markdown": "[\nfoo\n]: /url\nbar\n",
- "example": 173,
- "start_line": 2949
- },
- {
- "end_line": 2966,
- "section": "Link reference definitions",
- "html": "[foo]: /url "title" ok
\n",
- "markdown": "[foo]: /url \"title\" ok\n",
- "example": 174,
- "start_line": 2962
- },
- {
- "end_line": 2976,
- "section": "Link reference definitions",
- "html": ""title" ok
\n",
- "markdown": "[foo]: /url\n\"title\" ok\n",
- "example": 175,
- "start_line": 2971
- },
- {
- "end_line": 2990,
- "section": "Link reference definitions",
- "html": "[foo]: /url "title"\n
\n[foo]
\n",
- "markdown": " [foo]: /url \"title\"\n\n[foo]\n",
- "example": 176,
- "start_line": 2982
- },
- {
- "end_line": 3006,
- "section": "Link reference definitions",
- "html": "[foo]: /url\n
\n[foo]
\n",
- "markdown": "```\n[foo]: /url\n```\n\n[foo]\n",
- "example": 177,
- "start_line": 2996
- },
- {
- "end_line": 3020,
- "section": "Link reference definitions",
- "html": "Foo\n[bar]: /baz
\n[bar]
\n",
- "markdown": "Foo\n[bar]: /baz\n\n[bar]\n",
- "example": 178,
- "start_line": 3011
- },
- {
- "end_line": 3035,
- "section": "Link reference definitions",
- "html": "\n\nbar
\n \n",
- "markdown": "# [Foo]\n[foo]: /url\n> bar\n",
- "example": 179,
- "start_line": 3026
- },
- {
- "end_line": 3054,
- "section": "Link reference definitions",
- "html": "foo ,\nbar ,\nbaz
\n",
- "markdown": "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n \"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]\n",
- "example": 180,
- "start_line": 3041
- },
- {
- "end_line": 3070,
- "section": "Link reference definitions",
- "html": "foo
\n\n \n",
- "markdown": "[foo]\n\n> [foo]: /url\n",
- "example": 181,
- "start_line": 3062
- },
- {
- "end_line": 3092,
- "section": "Paragraphs",
- "html": "aaa
\nbbb
\n",
- "markdown": "aaa\n\nbbb\n",
- "example": 182,
- "start_line": 3085
- },
- {
- "end_line": 3108,
- "section": "Paragraphs",
- "html": "aaa\nbbb
\nccc\nddd
\n",
- "markdown": "aaa\nbbb\n\nccc\nddd\n",
- "example": 183,
- "start_line": 3097
- },
- {
- "end_line": 3121,
- "section": "Paragraphs",
- "html": "aaa
\nbbb
\n",
- "markdown": "aaa\n\n\nbbb\n",
- "example": 184,
- "start_line": 3113
- },
- {
- "end_line": 3132,
- "section": "Paragraphs",
- "html": "aaa\nbbb
\n",
- "markdown": " aaa\n bbb\n",
- "example": 185,
- "start_line": 3126
- },
- {
- "end_line": 3146,
- "section": "Paragraphs",
- "html": "aaa\nbbb\nccc
\n",
- "markdown": "aaa\n bbb\n ccc\n",
- "example": 186,
- "start_line": 3138
- },
- {
- "end_line": 3158,
- "section": "Paragraphs",
- "html": "aaa\nbbb
\n",
- "markdown": " aaa\nbbb\n",
- "example": 187,
- "start_line": 3152
- },
- {
- "end_line": 3168,
- "section": "Paragraphs",
- "html": "aaa\n
\nbbb
\n",
- "markdown": " aaa\nbbb\n",
- "example": 188,
- "start_line": 3161
- },
- {
- "end_line": 3181,
- "section": "Paragraphs",
- "html": "aaa \nbbb
\n",
- "markdown": "aaa \nbbb \n",
- "example": 189,
- "start_line": 3175
- },
- {
- "end_line": 3204,
- "section": "Blank lines",
- "html": "aaa
\naaa \n",
- "markdown": " \n\naaa\n \n\n# aaa\n\n \n",
- "example": 190,
- "start_line": 3192
- },
- {
- "end_line": 3268,
- "section": "Block quotes",
- "html": "\nFoo \nbar\nbaz
\n \n",
- "markdown": "> # Foo\n> bar\n> baz\n",
- "example": 191,
- "start_line": 3258
- },
- {
- "end_line": 3283,
- "section": "Block quotes",
- "html": "\nFoo \nbar\nbaz
\n \n",
- "markdown": "># Foo\n>bar\n> baz\n",
- "example": 192,
- "start_line": 3273
- },
- {
- "end_line": 3298,
- "section": "Block quotes",
- "html": "\nFoo \nbar\nbaz
\n \n",
- "markdown": " > # Foo\n > bar\n > baz\n",
- "example": 193,
- "start_line": 3288
- },
- {
- "end_line": 3312,
- "section": "Block quotes",
- "html": "> # Foo\n> bar\n> baz\n
\n",
- "markdown": " > # Foo\n > bar\n > baz\n",
- "example": 194,
- "start_line": 3303
- },
- {
- "end_line": 3328,
- "section": "Block quotes",
- "html": "\nFoo \nbar\nbaz
\n \n",
- "markdown": "> # Foo\n> bar\nbaz\n",
- "example": 195,
- "start_line": 3318
- },
- {
- "end_line": 3344,
- "section": "Block quotes",
- "html": "\nbar\nbaz\nfoo
\n \n",
- "markdown": "> bar\nbaz\n> foo\n",
- "example": 196,
- "start_line": 3334
- },
- {
- "end_line": 3366,
- "section": "Block quotes",
- "html": "\nfoo
\n \n \n",
- "markdown": "> foo\n---\n",
- "example": 197,
- "start_line": 3358
- },
- {
- "end_line": 3390,
- "section": "Block quotes",
- "html": "\n\n \n\n",
- "markdown": "> - foo\n- bar\n",
- "example": 198,
- "start_line": 3378
- },
- {
- "end_line": 3406,
- "section": "Block quotes",
- "html": "\nfoo\n
\n \nbar\n
\n",
- "markdown": "> foo\n bar\n",
- "example": 199,
- "start_line": 3396
- },
- {
- "end_line": 3419,
- "section": "Block quotes",
- "html": "\n
\n \nfoo
\n
\n",
- "markdown": "> ```\nfoo\n```\n",
- "example": 200,
- "start_line": 3409
- },
- {
- "end_line": 3433,
- "section": "Block quotes",
- "html": "\nfoo\n- bar
\n \n",
- "markdown": "> foo\n - bar\n",
- "example": 201,
- "start_line": 3425
- },
- {
- "end_line": 3454,
- "section": "Block quotes",
- "html": "\n \n",
- "markdown": ">\n",
- "example": 202,
- "start_line": 3449
- },
- {
- "end_line": 3464,
- "section": "Block quotes",
- "html": "\n \n",
- "markdown": ">\n> \n> \n",
- "example": 203,
- "start_line": 3457
- },
- {
- "end_line": 3477,
- "section": "Block quotes",
- "html": "\nfoo
\n \n",
- "markdown": ">\n> foo\n> \n",
- "example": 204,
- "start_line": 3469
- },
- {
- "end_line": 3493,
- "section": "Block quotes",
- "html": "\nfoo
\n \n\nbar
\n \n",
- "markdown": "> foo\n\n> bar\n",
- "example": 205,
- "start_line": 3482
- },
- {
- "end_line": 3512,
- "section": "Block quotes",
- "html": "\nfoo\nbar
\n \n",
- "markdown": "> foo\n> bar\n",
- "example": 206,
- "start_line": 3504
- },
- {
- "end_line": 3526,
- "section": "Block quotes",
- "html": "\nfoo
\nbar
\n \n",
- "markdown": "> foo\n>\n> bar\n",
- "example": 207,
- "start_line": 3517
- },
- {
- "end_line": 3539,
- "section": "Block quotes",
- "html": "foo
\n\nbar
\n \n",
- "markdown": "foo\n> bar\n",
- "example": 208,
- "start_line": 3531
- },
- {
- "end_line": 3557,
- "section": "Block quotes",
- "html": "\naaa
\n \n \n\nbbb
\n \n",
- "markdown": "> aaa\n***\n> bbb\n",
- "example": 209,
- "start_line": 3545
- },
- {
- "end_line": 3571,
- "section": "Block quotes",
- "html": "\nbar\nbaz
\n \n",
- "markdown": "> bar\nbaz\n",
- "example": 210,
- "start_line": 3563
- },
- {
- "end_line": 3583,
- "section": "Block quotes",
- "html": "\nbar
\n \nbaz
\n",
- "markdown": "> bar\n\nbaz\n",
- "example": 211,
- "start_line": 3574
- },
- {
- "end_line": 3595,
- "section": "Block quotes",
- "html": "\nbar
\n \nbaz
\n",
- "markdown": "> bar\n>\nbaz\n",
- "example": 212,
- "start_line": 3586
- },
- {
- "end_line": 3614,
- "section": "Block quotes",
- "html": "\n\n\nfoo\nbar
\n \n \n \n",
- "markdown": "> > > foo\nbar\n",
- "example": 213,
- "start_line": 3602
- },
- {
- "end_line": 3631,
- "section": "Block quotes",
- "html": "\n\n\nfoo\nbar\nbaz
\n \n \n \n",
- "markdown": ">>> foo\n> bar\n>>baz\n",
- "example": 214,
- "start_line": 3617
- },
- {
- "end_line": 3651,
- "section": "Block quotes",
- "html": "\ncode\n
\n \n\nnot code
\n \n",
- "markdown": "> code\n\n> not code\n",
- "example": 215,
- "start_line": 3639
- },
- {
- "end_line": 3709,
- "section": "List items",
- "html": "A paragraph\nwith two lines.
\nindented code\n
\n\nA block quote.
\n \n",
- "markdown": "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote.\n",
- "example": 216,
- "start_line": 3694
- },
- {
- "end_line": 3735,
- "section": "List items",
- "html": "\n\nA paragraph\nwith two lines.
\nindented code\n
\n\nA block quote.
\n \n \n \n",
- "markdown": "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n",
- "example": 217,
- "start_line": 3716
- },
- {
- "end_line": 3758,
- "section": "List items",
- "html": "\ntwo
\n",
- "markdown": "- one\n\n two\n",
- "example": 218,
- "start_line": 3749
- },
- {
- "end_line": 3772,
- "section": "List items",
- "html": "\n",
- "markdown": "- one\n\n two\n",
- "example": 219,
- "start_line": 3761
- },
- {
- "end_line": 3785,
- "section": "List items",
- "html": "\n two\n
\n",
- "markdown": " - one\n\n two\n",
- "example": 220,
- "start_line": 3775
- },
- {
- "end_line": 3799,
- "section": "List items",
- "html": "\n",
- "markdown": " - one\n\n two\n",
- "example": 221,
- "start_line": 3788
- },
- {
- "end_line": 3825,
- "section": "List items",
- "html": "\n\n\n\none
\ntwo
\n \n \n \n \n",
- "markdown": " > > 1. one\n>>\n>> two\n",
- "example": 222,
- "start_line": 3810
- },
- {
- "end_line": 3850,
- "section": "List items",
- "html": "\n\n\ntwo
\n \n \n",
- "markdown": ">>- one\n>>\n > > two\n",
- "example": 223,
- "start_line": 3837
- },
- {
- "end_line": 3863,
- "section": "List items",
- "html": "-one
\n2.two
\n",
- "markdown": "-one\n\n2.two\n",
- "example": 224,
- "start_line": 3856
- },
- {
- "end_line": 3881,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n\n\n bar\n",
- "example": 225,
- "start_line": 3869
- },
- {
- "end_line": 3908,
- "section": "List items",
- "html": "\n\nfoo
\nbar\n
\nbaz
\n\nbam
\n \n \n \n",
- "markdown": "1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam\n",
- "example": 226,
- "start_line": 3886
- },
- {
- "end_line": 3932,
- "section": "List items",
- "html": "\n\nFoo
\nbar\n\n\nbaz\n
\n \n \n",
- "markdown": "- Foo\n\n bar\n\n\n baz\n",
- "example": 227,
- "start_line": 3914
- },
- {
- "end_line": 3942,
- "section": "List items",
- "html": "\nok \n \n",
- "markdown": "123456789. ok\n",
- "example": 228,
- "start_line": 3936
- },
- {
- "end_line": 3949,
- "section": "List items",
- "html": "1234567890. not ok
\n",
- "markdown": "1234567890. not ok\n",
- "example": 229,
- "start_line": 3945
- },
- {
- "end_line": 3960,
- "section": "List items",
- "html": "\nok \n \n",
- "markdown": "0. ok\n",
- "example": 230,
- "start_line": 3954
- },
- {
- "end_line": 3969,
- "section": "List items",
- "html": "\nok \n \n",
- "markdown": "003. ok\n",
- "example": 231,
- "start_line": 3963
- },
- {
- "end_line": 3978,
- "section": "List items",
- "html": "-1. not ok
\n",
- "markdown": "-1. not ok\n",
- "example": 232,
- "start_line": 3974
- },
- {
- "end_line": 4010,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n\n bar\n",
- "example": 233,
- "start_line": 3998
- },
- {
- "end_line": 4027,
- "section": "List items",
- "html": "\n\nfoo
\nbar\n
\n \n \n",
- "markdown": " 10. foo\n\n bar\n",
- "example": 234,
- "start_line": 4015
- },
- {
- "end_line": 4046,
- "section": "List items",
- "html": "indented code\n
\nparagraph
\nmore code\n
\n",
- "markdown": " indented code\n\nparagraph\n\n more code\n",
- "example": 235,
- "start_line": 4034
- },
- {
- "end_line": 4065,
- "section": "List items",
- "html": "\n\nindented code\n
\nparagraph
\nmore code\n
\n \n \n",
- "markdown": "1. indented code\n\n paragraph\n\n more code\n",
- "example": 236,
- "start_line": 4049
- },
- {
- "end_line": 4087,
- "section": "List items",
- "html": "\n\n indented code\n
\nparagraph
\nmore code\n
\n \n \n",
- "markdown": "1. indented code\n\n paragraph\n\n more code\n",
- "example": 237,
- "start_line": 4071
- },
- {
- "end_line": 4105,
- "section": "List items",
- "html": "foo
\nbar
\n",
- "markdown": " foo\n\nbar\n",
- "example": 238,
- "start_line": 4098
- },
- {
- "end_line": 4117,
- "section": "List items",
- "html": "\nbar
\n",
- "markdown": "- foo\n\n bar\n",
- "example": 239,
- "start_line": 4108
- },
- {
- "end_line": 4136,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n\n bar\n",
- "example": 240,
- "start_line": 4125
- },
- {
- "end_line": 4174,
- "section": "List items",
- "html": "\nfoo \n\nbar\n
\n \n\nbaz\n
\n \n \n",
- "markdown": "-\n foo\n-\n ```\n bar\n ```\n-\n baz\n",
- "example": 241,
- "start_line": 4153
- },
- {
- "end_line": 4186,
- "section": "List items",
- "html": "\n",
- "markdown": "- \n foo\n",
- "example": 242,
- "start_line": 4179
- },
- {
- "end_line": 4202,
- "section": "List items",
- "html": "\nfoo
\n",
- "markdown": "-\n\n foo\n",
- "example": 243,
- "start_line": 4193
- },
- {
- "end_line": 4217,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n-\n- bar\n",
- "example": 244,
- "start_line": 4207
- },
- {
- "end_line": 4232,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n- \n- bar\n",
- "example": 245,
- "start_line": 4222
- },
- {
- "end_line": 4247,
- "section": "List items",
- "html": "\nfoo \n \nbar \n \n",
- "markdown": "1. foo\n2.\n3. bar\n",
- "example": 246,
- "start_line": 4237
- },
- {
- "end_line": 4258,
- "section": "List items",
- "html": "\n",
- "markdown": "*\n",
- "example": 247,
- "start_line": 4252
- },
- {
- "end_line": 4273,
- "section": "List items",
- "html": "foo\n*
\nfoo\n1.
\n",
- "markdown": "foo\n*\n\nfoo\n1.\n",
- "example": 248,
- "start_line": 4262
- },
- {
- "end_line": 4303,
- "section": "List items",
- "html": "\n\nA paragraph\nwith two lines.
\nindented code\n
\n\nA block quote.
\n \n \n \n",
- "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n",
- "example": 249,
- "start_line": 4284
- },
- {
- "end_line": 4327,
- "section": "List items",
- "html": "\n\nA paragraph\nwith two lines.
\nindented code\n
\n\nA block quote.
\n \n \n \n",
- "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n",
- "example": 250,
- "start_line": 4308
- },
- {
- "end_line": 4351,
- "section": "List items",
- "html": "\n\nA paragraph\nwith two lines.
\nindented code\n
\n\nA block quote.
\n \n \n \n",
- "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n",
- "example": 251,
- "start_line": 4332
- },
- {
- "end_line": 4371,
- "section": "List items",
- "html": "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n
\n",
- "markdown": " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n",
- "example": 252,
- "start_line": 4356
- },
- {
- "end_line": 4405,
- "section": "List items",
- "html": "\n\nA paragraph\nwith two lines.
\nindented code\n
\n\nA block quote.
\n \n \n \n",
- "markdown": " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote.\n",
- "example": 253,
- "start_line": 4386
- },
- {
- "end_line": 4418,
- "section": "List items",
- "html": "\nA paragraph\nwith two lines. \n \n",
- "markdown": " 1. A paragraph\n with two lines.\n",
- "example": 254,
- "start_line": 4410
- },
- {
- "end_line": 4437,
- "section": "List items",
- "html": "\n\n\n\nBlockquote\ncontinued here.
\n \n \n \n \n",
- "markdown": "> 1. > Blockquote\ncontinued here.\n",
- "example": 255,
- "start_line": 4423
- },
- {
- "end_line": 4454,
- "section": "List items",
- "html": "\n\n\n\nBlockquote\ncontinued here.
\n \n \n \n \n",
- "markdown": "> 1. > Blockquote\n> continued here.\n",
- "example": 256,
- "start_line": 4440
- },
- {
- "end_line": 4488,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n - bar\n - baz\n - boo\n",
- "example": 257,
- "start_line": 4467
- },
- {
- "end_line": 4505,
- "section": "List items",
- "html": "\n",
- "markdown": "- foo\n - bar\n - baz\n - boo\n",
- "example": 258,
- "start_line": 4493
- },
- {
- "end_line": 4521,
- "section": "List items",
- "html": "\nfoo\n\n \n \n",
- "markdown": "10) foo\n - bar\n",
- "example": 259,
- "start_line": 4510
- },
- {
- "end_line": 4536,
- "section": "List items",
- "html": "\nfoo \n \n\n",
- "markdown": "10) foo\n - bar\n",
- "example": 260,
- "start_line": 4526
- },
- {
- "end_line": 4551,
- "section": "List items",
- "html": "\n",
- "markdown": "- - foo\n",
- "example": 261,
- "start_line": 4541
- },
- {
- "end_line": 4568,
- "section": "List items",
- "html": "\n\n\n \n \n",
- "markdown": "1. - 2. foo\n",
- "example": 262,
- "start_line": 4554
- },
- {
- "end_line": 4587,
- "section": "List items",
- "html": "\n",
- "markdown": "- # Foo\n- Bar\n ---\n baz\n",
- "example": 263,
- "start_line": 4573
- },
- {
- "end_line": 4821,
- "section": "Lists",
- "html": "\n\n",
- "markdown": "- foo\n- bar\n+ baz\n",
- "example": 264,
- "start_line": 4809
- },
- {
- "end_line": 4836,
- "section": "Lists",
- "html": "\nfoo \nbar \n \n\nbaz \n \n",
- "markdown": "1. foo\n2. bar\n3) baz\n",
- "example": 265,
- "start_line": 4824
- },
- {
- "end_line": 4853,
- "section": "Lists",
- "html": "Foo
\n\n",
- "markdown": "Foo\n- bar\n- baz\n",
- "example": 266,
- "start_line": 4843
- },
- {
- "end_line": 4926,
- "section": "Lists",
- "html": "The number of windows in my house is\n14. The number of doors is 6.
\n",
- "markdown": "The number of windows in my house is\n14. The number of doors is 6.\n",
- "example": 267,
- "start_line": 4920
- },
- {
- "end_line": 4938,
- "section": "Lists",
- "html": "The number of windows in my house is
\n\nThe number of doors is 6. \n \n",
- "markdown": "The number of windows in my house is\n1. The number of doors is 6.\n",
- "example": 268,
- "start_line": 4930
- },
- {
- "end_line": 4963,
- "section": "Lists",
- "html": "\n\nfoo
\n \n\nbar
\n \n\nbaz
\n \n \n",
- "markdown": "- foo\n\n- bar\n\n\n- baz\n",
- "example": 269,
- "start_line": 4944
- },
- {
- "end_line": 4987,
- "section": "Lists",
- "html": "\n",
- "markdown": "- foo\n - bar\n - baz\n\n\n bim\n",
- "example": 270,
- "start_line": 4965
- },
- {
- "end_line": 5013,
- "section": "Lists",
- "html": "\n\n\n",
- "markdown": "- foo\n- bar\n\n\n\n- baz\n- bim\n",
- "example": 271,
- "start_line": 4995
- },
- {
- "end_line": 5039,
- "section": "Lists",
- "html": "\n\nfoo
\nnotcode
\n \n\nfoo
\n \n \n\ncode\n
\n",
- "markdown": "- foo\n\n notcode\n\n- foo\n\n\n\n code\n",
- "example": 272,
- "start_line": 5016
- },
- {
- "end_line": 5069,
- "section": "Lists",
- "html": "\na \nb \nc \nd \ne \nf \ng \nh \ni \n \n",
- "markdown": "- a\n - b\n - c\n - d\n - e\n - f\n - g\n - h\n- i\n",
- "example": 273,
- "start_line": 5047
- },
- {
- "end_line": 5090,
- "section": "Lists",
- "html": "\n\na
\n \n\nb
\n \n\nc
\n \n \n",
- "markdown": "1. a\n\n 2. b\n\n 3. c\n",
- "example": 274,
- "start_line": 5072
- },
- {
- "end_line": 5113,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n- b\n\n- c\n",
- "example": 275,
- "start_line": 5096
- },
- {
- "end_line": 5133,
- "section": "Lists",
- "html": "\n",
- "markdown": "* a\n*\n\n* c\n",
- "example": 276,
- "start_line": 5118
- },
- {
- "end_line": 5159,
- "section": "Lists",
- "html": "\n\na
\n \n\nb
\nc
\n \n\nd
\n \n \n",
- "markdown": "- a\n- b\n\n c\n- d\n",
- "example": 277,
- "start_line": 5140
- },
- {
- "end_line": 5180,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n- b\n\n [ref]: /url\n- d\n",
- "example": 278,
- "start_line": 5162
- },
- {
- "end_line": 5204,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n- ```\n b\n\n\n ```\n- c\n",
- "example": 279,
- "start_line": 5185
- },
- {
- "end_line": 5229,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n - b\n\n c\n- d\n",
- "example": 280,
- "start_line": 5211
- },
- {
- "end_line": 5249,
- "section": "Lists",
- "html": "\n",
- "markdown": "* a\n > b\n >\n* c\n",
- "example": 281,
- "start_line": 5235
- },
- {
- "end_line": 5273,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n > b\n ```\n c\n ```\n- d\n",
- "example": 282,
- "start_line": 5255
- },
- {
- "end_line": 5284,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n",
- "example": 283,
- "start_line": 5278
- },
- {
- "end_line": 5298,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n - b\n",
- "example": 284,
- "start_line": 5287
- },
- {
- "end_line": 5318,
- "section": "Lists",
- "html": "\n\nfoo\n
\nbar
\n \n \n",
- "markdown": "1. ```\n foo\n ```\n\n bar\n",
- "example": 285,
- "start_line": 5304
- },
- {
- "end_line": 5338,
- "section": "Lists",
- "html": "\n",
- "markdown": "* foo\n * bar\n\n baz\n",
- "example": 286,
- "start_line": 5323
- },
- {
- "end_line": 5366,
- "section": "Lists",
- "html": "\n",
- "markdown": "- a\n - b\n - c\n\n- d\n - e\n - f\n",
- "example": 287,
- "start_line": 5341
- },
- {
- "end_line": 5379,
- "section": "Inlines",
- "html": "hi
lo`
\n",
- "markdown": "`hi`lo`\n",
- "example": 288,
- "start_line": 5375
- },
- {
- "end_line": 5393,
- "section": "Backslash escapes",
- "html": "!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~
\n",
- "markdown": "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~\n",
- "example": 289,
- "start_line": 5389
- },
- {
- "end_line": 5403,
- "section": "Backslash escapes",
- "html": "\\\t\\A\\a\\ \\3\\φ\\«
\n",
- "markdown": "\\\t\\A\\a\\ \\3\\φ\\«\n",
- "example": 290,
- "start_line": 5399
- },
- {
- "end_line": 5427,
- "section": "Backslash escapes",
- "html": "*not emphasized*\n<br/> not a tag\n[not a link](/foo)\n`not code`\n1. not a list\n* not a list\n# not a heading\n[foo]: /url "not a reference"
\n",
- "markdown": "\\*not emphasized*\n\\ not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n",
- "example": 291,
- "start_line": 5409
- },
- {
- "end_line": 5436,
- "section": "Backslash escapes",
- "html": "\\emphasis
\n",
- "markdown": "\\\\*emphasis*\n",
- "example": 292,
- "start_line": 5432
- },
- {
- "end_line": 5447,
- "section": "Backslash escapes",
- "html": "foo \nbar
\n",
- "markdown": "foo\\\nbar\n",
- "example": 293,
- "start_line": 5441
- },
- {
- "end_line": 5457,
- "section": "Backslash escapes",
- "html": "\\[\\`
\n",
- "markdown": "`` \\[\\` ``\n",
- "example": 294,
- "start_line": 5453
- },
- {
- "end_line": 5465,
- "section": "Backslash escapes",
- "html": "\\[\\]\n
\n",
- "markdown": " \\[\\]\n",
- "example": 295,
- "start_line": 5460
- },
- {
- "end_line": 5475,
- "section": "Backslash escapes",
- "html": "\\[\\]\n
\n",
- "markdown": "~~~\n\\[\\]\n~~~\n",
- "example": 296,
- "start_line": 5468
- },
- {
- "end_line": 5482,
- "section": "Backslash escapes",
- "html": "http://example.com?find=\\*
\n",
- "markdown": "\n",
- "example": 297,
- "start_line": 5478
- },
- {
- "end_line": 5489,
- "section": "Backslash escapes",
- "html": "\n",
- "markdown": " \n",
- "example": 298,
- "start_line": 5485
- },
- {
- "end_line": 5499,
- "section": "Backslash escapes",
- "html": "foo
\n",
- "markdown": "[foo](/bar\\* \"ti\\*tle\")\n",
- "example": 299,
- "start_line": 5495
- },
- {
- "end_line": 5508,
- "section": "Backslash escapes",
- "html": "foo
\n",
- "markdown": "[foo]\n\n[foo]: /bar\\* \"ti\\*tle\"\n",
- "example": 300,
- "start_line": 5502
- },
- {
- "end_line": 5518,
- "section": "Backslash escapes",
- "html": "foo\n
\n",
- "markdown": "``` foo\\+bar\nfoo\n```\n",
- "example": 301,
- "start_line": 5511
- },
- {
- "end_line": 5546,
- "section": "Entity and numeric character references",
- "html": " & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸
\n",
- "markdown": " & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸\n",
- "example": 302,
- "start_line": 5538
- },
- {
- "end_line": 5561,
- "section": "Entity and numeric character references",
- "html": "# Ӓ Ϡ � �
\n",
- "markdown": "# Ӓ Ϡ \n",
- "example": 303,
- "start_line": 5557
- },
- {
- "end_line": 5574,
- "section": "Entity and numeric character references",
- "html": "" ആ ಫ
\n",
- "markdown": "" ആ ಫ\n",
- "example": 304,
- "start_line": 5570
- },
- {
- "end_line": 5585,
- "section": "Entity and numeric character references",
- "html": "  &x; &#; &#x;\n&ThisIsNotDefined; &hi?;
\n",
- "markdown": "  &x; \n&ThisIsNotDefined; &hi?;\n",
- "example": 305,
- "start_line": 5579
- },
- {
- "end_line": 5596,
- "section": "Entity and numeric character references",
- "html": "©
\n",
- "markdown": "©\n",
- "example": 306,
- "start_line": 5592
- },
- {
- "end_line": 5606,
- "section": "Entity and numeric character references",
- "html": "&MadeUpEntity;
\n",
- "markdown": "&MadeUpEntity;\n",
- "example": 307,
- "start_line": 5602
- },
- {
- "end_line": 5617,
- "section": "Entity and numeric character references",
- "html": " \n",
- "markdown": " \n",
- "example": 308,
- "start_line": 5613
- },
- {
- "end_line": 5624,
- "section": "Entity and numeric character references",
- "html": "foo
\n",
- "markdown": "[foo](/föö \"föö\")\n",
- "example": 309,
- "start_line": 5620
- },
- {
- "end_line": 5633,
- "section": "Entity and numeric character references",
- "html": "foo
\n",
- "markdown": "[foo]\n\n[foo]: /föö \"föö\"\n",
- "example": 310,
- "start_line": 5627
- },
- {
- "end_line": 5643,
- "section": "Entity and numeric character references",
- "html": "foo\n
\n",
- "markdown": "``` föö\nfoo\n```\n",
- "example": 311,
- "start_line": 5636
- },
- {
- "end_line": 5653,
- "section": "Entity and numeric character references",
- "html": "föö
\n",
- "markdown": "`föö`\n",
- "example": 312,
- "start_line": 5649
- },
- {
- "end_line": 5661,
- "section": "Entity and numeric character references",
- "html": "föfö\n
\n",
- "markdown": " föfö\n",
- "example": 313,
- "start_line": 5656
- },
- {
- "end_line": 5682,
- "section": "Code spans",
- "html": "foo
\n",
- "markdown": "`foo`\n",
- "example": 314,
- "start_line": 5678
- },
- {
- "end_line": 5692,
- "section": "Code spans",
- "html": "foo ` bar
\n",
- "markdown": "`` foo ` bar ``\n",
- "example": 315,
- "start_line": 5688
- },
- {
- "end_line": 5702,
- "section": "Code spans",
- "html": "``
\n",
- "markdown": "` `` `\n",
- "example": 316,
- "start_line": 5698
- },
- {
- "end_line": 5713,
- "section": "Code spans",
- "html": "foo
\n",
- "markdown": "``\nfoo\n``\n",
- "example": 317,
- "start_line": 5707
- },
- {
- "end_line": 5724,
- "section": "Code spans",
- "html": "foo bar baz
\n",
- "markdown": "`foo bar\n baz`\n",
- "example": 318,
- "start_line": 5719
- },
- {
- "end_line": 5734,
- "section": "Code spans",
- "html": "a b
\n",
- "markdown": "`a b`\n",
- "example": 319,
- "start_line": 5730
- },
- {
- "end_line": 5754,
- "section": "Code spans",
- "html": "foo `` bar
\n",
- "markdown": "`foo `` bar`\n",
- "example": 320,
- "start_line": 5750
- },
- {
- "end_line": 5764,
- "section": "Code spans",
- "html": "foo\\
bar`
\n",
- "markdown": "`foo\\`bar`\n",
- "example": 321,
- "start_line": 5760
- },
- {
- "end_line": 5780,
- "section": "Code spans",
- "html": "*foo*
\n",
- "markdown": "*foo`*`\n",
- "example": 322,
- "start_line": 5776
- },
- {
- "end_line": 5789,
- "section": "Code spans",
- "html": "[not a link](/foo
)
\n",
- "markdown": "[not a `link](/foo`)\n",
- "example": 323,
- "start_line": 5785
- },
- {
- "end_line": 5799,
- "section": "Code spans",
- "html": "<a href="
">`
\n",
- "markdown": "` `\n",
- "example": 324,
- "start_line": 5795
- },
- {
- "end_line": 5808,
- "section": "Code spans",
- "html": "`
\n",
- "markdown": " `\n",
- "example": 325,
- "start_line": 5804
- },
- {
- "end_line": 5817,
- "section": "Code spans",
- "html": "<http://foo.bar.
baz>`
\n",
- "markdown": "``\n",
- "example": 326,
- "start_line": 5813
- },
- {
- "end_line": 5826,
- "section": "Code spans",
- "html": "http://foo.bar.`baz `
\n",
- "markdown": "`\n",
- "example": 327,
- "start_line": 5822
- },
- {
- "end_line": 5836,
- "section": "Code spans",
- "html": "```foo``
\n",
- "markdown": "```foo``\n",
- "example": 328,
- "start_line": 5832
- },
- {
- "end_line": 5843,
- "section": "Code spans",
- "html": "`foo
\n",
- "markdown": "`foo\n",
- "example": 329,
- "start_line": 5839
- },
- {
- "end_line": 5852,
- "section": "Code spans",
- "html": "`foobar
\n",
- "markdown": "`foo``bar``\n",
- "example": 330,
- "start_line": 5848
- },
- {
- "end_line": 6065,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "*foo bar*\n",
- "example": 331,
- "start_line": 6061
- },
- {
- "end_line": 6075,
- "section": "Emphasis and strong emphasis",
- "html": "a * foo bar*
\n",
- "markdown": "a * foo bar*\n",
- "example": 332,
- "start_line": 6071
- },
- {
- "end_line": 6086,
- "section": "Emphasis and strong emphasis",
- "html": "a*"foo"*
\n",
- "markdown": "a*\"foo\"*\n",
- "example": 333,
- "start_line": 6082
- },
- {
- "end_line": 6095,
- "section": "Emphasis and strong emphasis",
- "html": "* a *
\n",
- "markdown": "* a *\n",
- "example": 334,
- "start_line": 6091
- },
- {
- "end_line": 6104,
- "section": "Emphasis and strong emphasis",
- "html": "foobar
\n",
- "markdown": "foo*bar*\n",
- "example": 335,
- "start_line": 6100
- },
- {
- "end_line": 6111,
- "section": "Emphasis and strong emphasis",
- "html": "56 78
\n",
- "markdown": "5*6*78\n",
- "example": 336,
- "start_line": 6107
- },
- {
- "end_line": 6120,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "_foo bar_\n",
- "example": 337,
- "start_line": 6116
- },
- {
- "end_line": 6130,
- "section": "Emphasis and strong emphasis",
- "html": "_ foo bar_
\n",
- "markdown": "_ foo bar_\n",
- "example": 338,
- "start_line": 6126
- },
- {
- "end_line": 6140,
- "section": "Emphasis and strong emphasis",
- "html": "a_"foo"_
\n",
- "markdown": "a_\"foo\"_\n",
- "example": 339,
- "start_line": 6136
- },
- {
- "end_line": 6149,
- "section": "Emphasis and strong emphasis",
- "html": "foo_bar_
\n",
- "markdown": "foo_bar_\n",
- "example": 340,
- "start_line": 6145
- },
- {
- "end_line": 6156,
- "section": "Emphasis and strong emphasis",
- "html": "5_6_78
\n",
- "markdown": "5_6_78\n",
- "example": 341,
- "start_line": 6152
- },
- {
- "end_line": 6163,
- "section": "Emphasis and strong emphasis",
- "html": "пристаням_стремятся_
\n",
- "markdown": "пристаням_стремятся_\n",
- "example": 342,
- "start_line": 6159
- },
- {
- "end_line": 6173,
- "section": "Emphasis and strong emphasis",
- "html": "aa_"bb"_cc
\n",
- "markdown": "aa_\"bb\"_cc\n",
- "example": 343,
- "start_line": 6169
- },
- {
- "end_line": 6184,
- "section": "Emphasis and strong emphasis",
- "html": "foo-(bar)
\n",
- "markdown": "foo-_(bar)_\n",
- "example": 344,
- "start_line": 6180
- },
- {
- "end_line": 6196,
- "section": "Emphasis and strong emphasis",
- "html": "_foo*
\n",
- "markdown": "_foo*\n",
- "example": 345,
- "start_line": 6192
- },
- {
- "end_line": 6206,
- "section": "Emphasis and strong emphasis",
- "html": "*foo bar *
\n",
- "markdown": "*foo bar *\n",
- "example": 346,
- "start_line": 6202
- },
- {
- "end_line": 6217,
- "section": "Emphasis and strong emphasis",
- "html": "*foo bar\n*
\n",
- "markdown": "*foo bar\n*\n",
- "example": 347,
- "start_line": 6211
- },
- {
- "end_line": 6228,
- "section": "Emphasis and strong emphasis",
- "html": "*(*foo)
\n",
- "markdown": "*(*foo)\n",
- "example": 348,
- "start_line": 6224
- },
- {
- "end_line": 6238,
- "section": "Emphasis and strong emphasis",
- "html": "(foo )
\n",
- "markdown": "*(*foo*)*\n",
- "example": 349,
- "start_line": 6234
- },
- {
- "end_line": 6247,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "*foo*bar\n",
- "example": 350,
- "start_line": 6243
- },
- {
- "end_line": 6260,
- "section": "Emphasis and strong emphasis",
- "html": "_foo bar _
\n",
- "markdown": "_foo bar _\n",
- "example": 351,
- "start_line": 6256
- },
- {
- "end_line": 6270,
- "section": "Emphasis and strong emphasis",
- "html": "_(_foo)
\n",
- "markdown": "_(_foo)\n",
- "example": 352,
- "start_line": 6266
- },
- {
- "end_line": 6279,
- "section": "Emphasis and strong emphasis",
- "html": "(foo )
\n",
- "markdown": "_(_foo_)_\n",
- "example": 353,
- "start_line": 6275
- },
- {
- "end_line": 6288,
- "section": "Emphasis and strong emphasis",
- "html": "_foo_bar
\n",
- "markdown": "_foo_bar\n",
- "example": 354,
- "start_line": 6284
- },
- {
- "end_line": 6295,
- "section": "Emphasis and strong emphasis",
- "html": "_пристаням_стремятся
\n",
- "markdown": "_пристаням_стремятся\n",
- "example": 355,
- "start_line": 6291
- },
- {
- "end_line": 6302,
- "section": "Emphasis and strong emphasis",
- "html": "foo_bar_baz
\n",
- "markdown": "_foo_bar_baz_\n",
- "example": 356,
- "start_line": 6298
- },
- {
- "end_line": 6313,
- "section": "Emphasis and strong emphasis",
- "html": "(bar) .
\n",
- "markdown": "_(bar)_.\n",
- "example": 357,
- "start_line": 6309
- },
- {
- "end_line": 6322,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "**foo bar**\n",
- "example": 358,
- "start_line": 6318
- },
- {
- "end_line": 6332,
- "section": "Emphasis and strong emphasis",
- "html": "** foo bar**
\n",
- "markdown": "** foo bar**\n",
- "example": 359,
- "start_line": 6328
- },
- {
- "end_line": 6343,
- "section": "Emphasis and strong emphasis",
- "html": "a**"foo"**
\n",
- "markdown": "a**\"foo\"**\n",
- "example": 360,
- "start_line": 6339
- },
- {
- "end_line": 6352,
- "section": "Emphasis and strong emphasis",
- "html": "foobar
\n",
- "markdown": "foo**bar**\n",
- "example": 361,
- "start_line": 6348
- },
- {
- "end_line": 6361,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "__foo bar__\n",
- "example": 362,
- "start_line": 6357
- },
- {
- "end_line": 6371,
- "section": "Emphasis and strong emphasis",
- "html": "__ foo bar__
\n",
- "markdown": "__ foo bar__\n",
- "example": 363,
- "start_line": 6367
- },
- {
- "end_line": 6381,
- "section": "Emphasis and strong emphasis",
- "html": "__\nfoo bar__
\n",
- "markdown": "__\nfoo bar__\n",
- "example": 364,
- "start_line": 6375
- },
- {
- "end_line": 6391,
- "section": "Emphasis and strong emphasis",
- "html": "a__"foo"__
\n",
- "markdown": "a__\"foo\"__\n",
- "example": 365,
- "start_line": 6387
- },
- {
- "end_line": 6400,
- "section": "Emphasis and strong emphasis",
- "html": "foo__bar__
\n",
- "markdown": "foo__bar__\n",
- "example": 366,
- "start_line": 6396
- },
- {
- "end_line": 6407,
- "section": "Emphasis and strong emphasis",
- "html": "5__6__78
\n",
- "markdown": "5__6__78\n",
- "example": 367,
- "start_line": 6403
- },
- {
- "end_line": 6414,
- "section": "Emphasis and strong emphasis",
- "html": "пристаням__стремятся__
\n",
- "markdown": "пристаням__стремятся__\n",
- "example": 368,
- "start_line": 6410
- },
- {
- "end_line": 6421,
- "section": "Emphasis and strong emphasis",
- "html": "foo, bar , baz
\n",
- "markdown": "__foo, __bar__, baz__\n",
- "example": 369,
- "start_line": 6417
- },
- {
- "end_line": 6432,
- "section": "Emphasis and strong emphasis",
- "html": "foo-(bar)
\n",
- "markdown": "foo-__(bar)__\n",
- "example": 370,
- "start_line": 6428
- },
- {
- "end_line": 6445,
- "section": "Emphasis and strong emphasis",
- "html": "**foo bar **
\n",
- "markdown": "**foo bar **\n",
- "example": 371,
- "start_line": 6441
- },
- {
- "end_line": 6458,
- "section": "Emphasis and strong emphasis",
- "html": "**(**foo)
\n",
- "markdown": "**(**foo)\n",
- "example": 372,
- "start_line": 6454
- },
- {
- "end_line": 6468,
- "section": "Emphasis and strong emphasis",
- "html": "(foo )
\n",
- "markdown": "*(**foo**)*\n",
- "example": 373,
- "start_line": 6464
- },
- {
- "end_line": 6477,
- "section": "Emphasis and strong emphasis",
- "html": "Gomphocarpus (Gomphocarpus physocarpus , syn.\nAsclepias physocarpa )
\n",
- "markdown": "**Gomphocarpus (*Gomphocarpus physocarpus*, syn.\n*Asclepias physocarpa*)**\n",
- "example": 374,
- "start_line": 6471
- },
- {
- "end_line": 6484,
- "section": "Emphasis and strong emphasis",
- "html": "foo "bar " foo
\n",
- "markdown": "**foo \"*bar*\" foo**\n",
- "example": 375,
- "start_line": 6480
- },
- {
- "end_line": 6493,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "**foo**bar\n",
- "example": 376,
- "start_line": 6489
- },
- {
- "end_line": 6505,
- "section": "Emphasis and strong emphasis",
- "html": "__foo bar __
\n",
- "markdown": "__foo bar __\n",
- "example": 377,
- "start_line": 6501
- },
- {
- "end_line": 6515,
- "section": "Emphasis and strong emphasis",
- "html": "__(__foo)
\n",
- "markdown": "__(__foo)\n",
- "example": 378,
- "start_line": 6511
- },
- {
- "end_line": 6525,
- "section": "Emphasis and strong emphasis",
- "html": "(foo )
\n",
- "markdown": "_(__foo__)_\n",
- "example": 379,
- "start_line": 6521
- },
- {
- "end_line": 6534,
- "section": "Emphasis and strong emphasis",
- "html": "__foo__bar
\n",
- "markdown": "__foo__bar\n",
- "example": 380,
- "start_line": 6530
- },
- {
- "end_line": 6541,
- "section": "Emphasis and strong emphasis",
- "html": "__пристаням__стремятся
\n",
- "markdown": "__пристаням__стремятся\n",
- "example": 381,
- "start_line": 6537
- },
- {
- "end_line": 6548,
- "section": "Emphasis and strong emphasis",
- "html": "foo__bar__baz
\n",
- "markdown": "__foo__bar__baz__\n",
- "example": 382,
- "start_line": 6544
- },
- {
- "end_line": 6559,
- "section": "Emphasis and strong emphasis",
- "html": "(bar) .
\n",
- "markdown": "__(bar)__.\n",
- "example": 383,
- "start_line": 6555
- },
- {
- "end_line": 6571,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "*foo [bar](/url)*\n",
- "example": 384,
- "start_line": 6567
- },
- {
- "end_line": 6580,
- "section": "Emphasis and strong emphasis",
- "html": "foo\nbar
\n",
- "markdown": "*foo\nbar*\n",
- "example": 385,
- "start_line": 6574
- },
- {
- "end_line": 6590,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz
\n",
- "markdown": "_foo __bar__ baz_\n",
- "example": 386,
- "start_line": 6586
- },
- {
- "end_line": 6597,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz
\n",
- "markdown": "_foo _bar_ baz_\n",
- "example": 387,
- "start_line": 6593
- },
- {
- "end_line": 6604,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "__foo_ bar_\n",
- "example": 388,
- "start_line": 6600
- },
- {
- "end_line": 6611,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "*foo *bar**\n",
- "example": 389,
- "start_line": 6607
- },
- {
- "end_line": 6618,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz
\n",
- "markdown": "*foo **bar** baz*\n",
- "example": 390,
- "start_line": 6614
- },
- {
- "end_line": 6624,
- "section": "Emphasis and strong emphasis",
- "html": "foobar baz
\n",
- "markdown": "*foo**bar**baz*\n",
- "example": 391,
- "start_line": 6620
- },
- {
- "end_line": 6649,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "***foo** bar*\n",
- "example": 392,
- "start_line": 6645
- },
- {
- "end_line": 6656,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "*foo **bar***\n",
- "example": 393,
- "start_line": 6652
- },
- {
- "end_line": 6663,
- "section": "Emphasis and strong emphasis",
- "html": "foobar
\n",
- "markdown": "*foo**bar***\n",
- "example": 394,
- "start_line": 6659
- },
- {
- "end_line": 6672,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz bim bop
\n",
- "markdown": "*foo **bar *baz* bim** bop*\n",
- "example": 395,
- "start_line": 6668
- },
- {
- "end_line": 6679,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "*foo [*bar*](/url)*\n",
- "example": 396,
- "start_line": 6675
- },
- {
- "end_line": 6688,
- "section": "Emphasis and strong emphasis",
- "html": "** is not an empty emphasis
\n",
- "markdown": "** is not an empty emphasis\n",
- "example": 397,
- "start_line": 6684
- },
- {
- "end_line": 6695,
- "section": "Emphasis and strong emphasis",
- "html": "**** is not an empty strong emphasis
\n",
- "markdown": "**** is not an empty strong emphasis\n",
- "example": 398,
- "start_line": 6691
- },
- {
- "end_line": 6708,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "**foo [bar](/url)**\n",
- "example": 399,
- "start_line": 6704
- },
- {
- "end_line": 6717,
- "section": "Emphasis and strong emphasis",
- "html": "foo\nbar
\n",
- "markdown": "**foo\nbar**\n",
- "example": 400,
- "start_line": 6711
- },
- {
- "end_line": 6727,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz
\n",
- "markdown": "__foo _bar_ baz__\n",
- "example": 401,
- "start_line": 6723
- },
- {
- "end_line": 6734,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz
\n",
- "markdown": "__foo __bar__ baz__\n",
- "example": 402,
- "start_line": 6730
- },
- {
- "end_line": 6741,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "____foo__ bar__\n",
- "example": 403,
- "start_line": 6737
- },
- {
- "end_line": 6748,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "**foo **bar****\n",
- "example": 404,
- "start_line": 6744
- },
- {
- "end_line": 6755,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz
\n",
- "markdown": "**foo *bar* baz**\n",
- "example": 405,
- "start_line": 6751
- },
- {
- "end_line": 6762,
- "section": "Emphasis and strong emphasis",
- "html": "foobar baz
\n",
- "markdown": "**foo*bar*baz**\n",
- "example": 406,
- "start_line": 6758
- },
- {
- "end_line": 6769,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "***foo* bar**\n",
- "example": 407,
- "start_line": 6765
- },
- {
- "end_line": 6776,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "**foo *bar***\n",
- "example": 408,
- "start_line": 6772
- },
- {
- "end_line": 6787,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar baz \nbim bop
\n",
- "markdown": "**foo *bar **baz**\nbim* bop**\n",
- "example": 409,
- "start_line": 6781
- },
- {
- "end_line": 6794,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar
\n",
- "markdown": "**foo [*bar*](/url)**\n",
- "example": 410,
- "start_line": 6790
- },
- {
- "end_line": 6803,
- "section": "Emphasis and strong emphasis",
- "html": "__ is not an empty emphasis
\n",
- "markdown": "__ is not an empty emphasis\n",
- "example": 411,
- "start_line": 6799
- },
- {
- "end_line": 6810,
- "section": "Emphasis and strong emphasis",
- "html": "____ is not an empty strong emphasis
\n",
- "markdown": "____ is not an empty strong emphasis\n",
- "example": 412,
- "start_line": 6806
- },
- {
- "end_line": 6820,
- "section": "Emphasis and strong emphasis",
- "html": "foo ***
\n",
- "markdown": "foo ***\n",
- "example": 413,
- "start_line": 6816
- },
- {
- "end_line": 6827,
- "section": "Emphasis and strong emphasis",
- "html": "foo *
\n",
- "markdown": "foo *\\**\n",
- "example": 414,
- "start_line": 6823
- },
- {
- "end_line": 6834,
- "section": "Emphasis and strong emphasis",
- "html": "foo _
\n",
- "markdown": "foo *_*\n",
- "example": 415,
- "start_line": 6830
- },
- {
- "end_line": 6841,
- "section": "Emphasis and strong emphasis",
- "html": "foo *****
\n",
- "markdown": "foo *****\n",
- "example": 416,
- "start_line": 6837
- },
- {
- "end_line": 6848,
- "section": "Emphasis and strong emphasis",
- "html": "foo *
\n",
- "markdown": "foo **\\***\n",
- "example": 417,
- "start_line": 6844
- },
- {
- "end_line": 6855,
- "section": "Emphasis and strong emphasis",
- "html": "foo _
\n",
- "markdown": "foo **_**\n",
- "example": 418,
- "start_line": 6851
- },
- {
- "end_line": 6866,
- "section": "Emphasis and strong emphasis",
- "html": "*foo
\n",
- "markdown": "**foo*\n",
- "example": 419,
- "start_line": 6862
- },
- {
- "end_line": 6873,
- "section": "Emphasis and strong emphasis",
- "html": "foo *
\n",
- "markdown": "*foo**\n",
- "example": 420,
- "start_line": 6869
- },
- {
- "end_line": 6880,
- "section": "Emphasis and strong emphasis",
- "html": "*foo
\n",
- "markdown": "***foo**\n",
- "example": 421,
- "start_line": 6876
- },
- {
- "end_line": 6887,
- "section": "Emphasis and strong emphasis",
- "html": "***foo
\n",
- "markdown": "****foo*\n",
- "example": 422,
- "start_line": 6883
- },
- {
- "end_line": 6894,
- "section": "Emphasis and strong emphasis",
- "html": "foo *
\n",
- "markdown": "**foo***\n",
- "example": 423,
- "start_line": 6890
- },
- {
- "end_line": 6901,
- "section": "Emphasis and strong emphasis",
- "html": "foo ***
\n",
- "markdown": "*foo****\n",
- "example": 424,
- "start_line": 6897
- },
- {
- "end_line": 6911,
- "section": "Emphasis and strong emphasis",
- "html": "foo ___
\n",
- "markdown": "foo ___\n",
- "example": 425,
- "start_line": 6907
- },
- {
- "end_line": 6918,
- "section": "Emphasis and strong emphasis",
- "html": "foo _
\n",
- "markdown": "foo _\\__\n",
- "example": 426,
- "start_line": 6914
- },
- {
- "end_line": 6925,
- "section": "Emphasis and strong emphasis",
- "html": "foo *
\n",
- "markdown": "foo _*_\n",
- "example": 427,
- "start_line": 6921
- },
- {
- "end_line": 6932,
- "section": "Emphasis and strong emphasis",
- "html": "foo _____
\n",
- "markdown": "foo _____\n",
- "example": 428,
- "start_line": 6928
- },
- {
- "end_line": 6939,
- "section": "Emphasis and strong emphasis",
- "html": "foo _
\n",
- "markdown": "foo __\\___\n",
- "example": 429,
- "start_line": 6935
- },
- {
- "end_line": 6946,
- "section": "Emphasis and strong emphasis",
- "html": "foo *
\n",
- "markdown": "foo __*__\n",
- "example": 430,
- "start_line": 6942
- },
- {
- "end_line": 6953,
- "section": "Emphasis and strong emphasis",
- "html": "_foo
\n",
- "markdown": "__foo_\n",
- "example": 431,
- "start_line": 6949
- },
- {
- "end_line": 6964,
- "section": "Emphasis and strong emphasis",
- "html": "foo _
\n",
- "markdown": "_foo__\n",
- "example": 432,
- "start_line": 6960
- },
- {
- "end_line": 6971,
- "section": "Emphasis and strong emphasis",
- "html": "_foo
\n",
- "markdown": "___foo__\n",
- "example": 433,
- "start_line": 6967
- },
- {
- "end_line": 6978,
- "section": "Emphasis and strong emphasis",
- "html": "___foo
\n",
- "markdown": "____foo_\n",
- "example": 434,
- "start_line": 6974
- },
- {
- "end_line": 6985,
- "section": "Emphasis and strong emphasis",
- "html": "foo _
\n",
- "markdown": "__foo___\n",
- "example": 435,
- "start_line": 6981
- },
- {
- "end_line": 6992,
- "section": "Emphasis and strong emphasis",
- "html": "foo ___
\n",
- "markdown": "_foo____\n",
- "example": 436,
- "start_line": 6988
- },
- {
- "end_line": 7002,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "**foo**\n",
- "example": 437,
- "start_line": 6998
- },
- {
- "end_line": 7009,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "*_foo_*\n",
- "example": 438,
- "start_line": 7005
- },
- {
- "end_line": 7016,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "__foo__\n",
- "example": 439,
- "start_line": 7012
- },
- {
- "end_line": 7023,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "_*foo*_\n",
- "example": 440,
- "start_line": 7019
- },
- {
- "end_line": 7033,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "****foo****\n",
- "example": 441,
- "start_line": 7029
- },
- {
- "end_line": 7040,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "____foo____\n",
- "example": 442,
- "start_line": 7036
- },
- {
- "end_line": 7051,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "******foo******\n",
- "example": 443,
- "start_line": 7047
- },
- {
- "end_line": 7060,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "***foo***\n",
- "example": 444,
- "start_line": 7056
- },
- {
- "end_line": 7067,
- "section": "Emphasis and strong emphasis",
- "html": "foo
\n",
- "markdown": "_____foo_____\n",
- "example": 445,
- "start_line": 7063
- },
- {
- "end_line": 7076,
- "section": "Emphasis and strong emphasis",
- "html": "foo _bar baz_
\n",
- "markdown": "*foo _bar* baz_\n",
- "example": 446,
- "start_line": 7072
- },
- {
- "end_line": 7083,
- "section": "Emphasis and strong emphasis",
- "html": "foo bar *baz bim bam
\n",
- "markdown": "*foo __bar *baz bim__ bam*\n",
- "example": 447,
- "start_line": 7079
- },
- {
- "end_line": 7092,
- "section": "Emphasis and strong emphasis",
- "html": "**foo bar baz
\n",
- "markdown": "**foo **bar baz**\n",
- "example": 448,
- "start_line": 7088
- },
- {
- "end_line": 7099,
- "section": "Emphasis and strong emphasis",
- "html": "*foo bar baz
\n",
- "markdown": "*foo *bar baz*\n",
- "example": 449,
- "start_line": 7095
- },
- {
- "end_line": 7108,
- "section": "Emphasis and strong emphasis",
- "html": "*bar*
\n",
- "markdown": "*[bar*](/url)\n",
- "example": 450,
- "start_line": 7104
- },
- {
- "end_line": 7115,
- "section": "Emphasis and strong emphasis",
- "html": "_foo bar_
\n",
- "markdown": "_foo [bar_](/url)\n",
- "example": 451,
- "start_line": 7111
- },
- {
- "end_line": 7122,
- "section": "Emphasis and strong emphasis",
- "html": "*
\n",
- "markdown": "* \n",
- "example": 452,
- "start_line": 7118
- },
- {
- "end_line": 7129,
- "section": "Emphasis and strong emphasis",
- "html": "**
\n",
- "markdown": "**\n",
- "example": 453,
- "start_line": 7125
- },
- {
- "end_line": 7136,
- "section": "Emphasis and strong emphasis",
- "html": "__
\n",
- "markdown": "__ \n",
- "example": 454,
- "start_line": 7132
- },
- {
- "end_line": 7143,
- "section": "Emphasis and strong emphasis",
- "html": "a *
\n",
- "markdown": "*a `*`*\n",
- "example": 455,
- "start_line": 7139
- },
- {
- "end_line": 7150,
- "section": "Emphasis and strong emphasis",
- "html": "a _
\n",
- "markdown": "_a `_`_\n",
- "example": 456,
- "start_line": 7146
- },
- {
- "end_line": 7157,
- "section": "Emphasis and strong emphasis",
- "html": "**ahttp://foo.bar/?q=**
\n",
- "markdown": "**a\n",
- "example": 457,
- "start_line": 7153
- },
- {
- "end_line": 7164,
- "section": "Emphasis and strong emphasis",
- "html": "__ahttp://foo.bar/?q=__
\n",
- "markdown": "__a\n",
- "example": 458,
- "start_line": 7160
- },
- {
- "end_line": 7245,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](/uri \"title\")\n",
- "example": 459,
- "start_line": 7241
- },
- {
- "end_line": 7254,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](/uri)\n",
- "example": 460,
- "start_line": 7250
- },
- {
- "end_line": 7263,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link]()\n",
- "example": 461,
- "start_line": 7259
- },
- {
- "end_line": 7270,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](<>)\n",
- "example": 462,
- "start_line": 7266
- },
- {
- "end_line": 7280,
- "section": "Links",
- "html": "[link](/my uri)
\n",
- "markdown": "[link](/my uri)\n",
- "example": 463,
- "start_line": 7276
- },
- {
- "end_line": 7287,
- "section": "Links",
- "html": "[link](</my uri>)
\n",
- "markdown": "[link]( )\n",
- "example": 464,
- "start_line": 7283
- },
- {
- "end_line": 7296,
- "section": "Links",
- "html": "
[link](foo\nbar)
\n",
- "markdown": "[link](foo\nbar)\n",
- "example": 465,
- "start_line": 7290
- },
- {
- "end_line": 7305,
- "section": "Links",
- "html": "
[link]()
\n",
- "markdown": "[link](
)\n",
- "example": 466,
- "start_line": 7299
- },
- {
- "end_line": 7313,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](\\(foo\\))\n",
- "example": 467,
- "start_line": 7309
- },
- {
- "end_line": 7322,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](foo(and(bar)))\n",
- "example": 468,
- "start_line": 7318
- },
- {
- "end_line": 7331,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](foo\\(and\\(bar\\))\n",
- "example": 469,
- "start_line": 7327
- },
- {
- "end_line": 7338,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link]()\n",
- "example": 470,
- "start_line": 7334
- },
- {
- "end_line": 7348,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](foo\\)\\:)\n",
- "example": 471,
- "start_line": 7344
- },
- {
- "end_line": 7363,
- "section": "Links",
- "html": "link
\nlink
\nlink
\n",
- "markdown": "[link](#fragment)\n\n[link](http://example.com#fragment)\n\n[link](http://example.com?foo=3#frag)\n",
- "example": 472,
- "start_line": 7353
- },
- {
- "end_line": 7373,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](foo\\bar)\n",
- "example": 473,
- "start_line": 7369
- },
- {
- "end_line": 7389,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](foo%20bä)\n",
- "example": 474,
- "start_line": 7385
- },
- {
- "end_line": 7400,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](\"title\")\n",
- "example": 475,
- "start_line": 7396
- },
- {
- "end_line": 7413,
- "section": "Links",
- "html": "link \nlink \nlink
\n",
- "markdown": "[link](/url \"title\")\n[link](/url 'title')\n[link](/url (title))\n",
- "example": 476,
- "start_line": 7405
- },
- {
- "end_line": 7423,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](/url \"title \\\""\")\n",
- "example": 477,
- "start_line": 7419
- },
- {
- "end_line": 7433,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](/url \"title\")\n",
- "example": 478,
- "start_line": 7429
- },
- {
- "end_line": 7442,
- "section": "Links",
- "html": "[link](/url "title "and" title")
\n",
- "markdown": "[link](/url \"title \"and\" title\")\n",
- "example": 479,
- "start_line": 7438
- },
- {
- "end_line": 7451,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link](/url 'title \"and\" title')\n",
- "example": 480,
- "start_line": 7447
- },
- {
- "end_line": 7476,
- "section": "Links",
- "html": "link
\n",
- "markdown": "[link]( /uri\n \"title\" )\n",
- "example": 481,
- "start_line": 7471
- },
- {
- "end_line": 7486,
- "section": "Links",
- "html": "[link] (/uri)
\n",
- "markdown": "[link] (/uri)\n",
- "example": 482,
- "start_line": 7482
- },
- {
- "end_line": 7496,
- "section": "Links",
- "html": "link [foo [bar]]
\n",
- "markdown": "[link [foo [bar]]](/uri)\n",
- "example": 483,
- "start_line": 7492
- },
- {
- "end_line": 7503,
- "section": "Links",
- "html": "[link] bar](/uri)
\n",
- "markdown": "[link] bar](/uri)\n",
- "example": 484,
- "start_line": 7499
- },
- {
- "end_line": 7510,
- "section": "Links",
- "html": "[link bar
\n",
- "markdown": "[link [bar](/uri)\n",
- "example": 485,
- "start_line": 7506
- },
- {
- "end_line": 7517,
- "section": "Links",
- "html": "link [bar
\n",
- "markdown": "[link \\[bar](/uri)\n",
- "example": 486,
- "start_line": 7513
- },
- {
- "end_line": 7526,
- "section": "Links",
- "html": "link foo bar #
\n",
- "markdown": "[link *foo **bar** `#`*](/uri)\n",
- "example": 487,
- "start_line": 7522
- },
- {
- "end_line": 7533,
- "section": "Links",
- "html": "
\n",
- "markdown": "[![moon](moon.jpg)](/uri)\n",
- "example": 488,
- "start_line": 7529
- },
- {
- "end_line": 7542,
- "section": "Links",
- "html": "[foo bar ](/uri)
\n",
- "markdown": "[foo [bar](/uri)](/uri)\n",
- "example": 489,
- "start_line": 7538
- },
- {
- "end_line": 7549,
- "section": "Links",
- "html": "[foo [bar baz ](/uri) ](/uri)
\n",
- "markdown": "[foo *[bar [baz](/uri)](/uri)*](/uri)\n",
- "example": 490,
- "start_line": 7545
- },
- {
- "end_line": 7556,
- "section": "Links",
- "html": "
\n",
- "markdown": "![[[foo](uri1)](uri2)](uri3)\n",
- "example": 491,
- "start_line": 7552
- },
- {
- "end_line": 7566,
- "section": "Links",
- "html": "*foo*
\n",
- "markdown": "*[foo*](/uri)\n",
- "example": 492,
- "start_line": 7562
- },
- {
- "end_line": 7573,
- "section": "Links",
- "html": "foo *bar
\n",
- "markdown": "[foo *bar](baz*)\n",
- "example": 493,
- "start_line": 7569
- },
- {
- "end_line": 7583,
- "section": "Links",
- "html": "foo [bar baz]
\n",
- "markdown": "*foo [bar* baz]\n",
- "example": 494,
- "start_line": 7579
- },
- {
- "end_line": 7593,
- "section": "Links",
- "html": "[foo
\n",
- "markdown": "[foo \n",
- "example": 495,
- "start_line": 7589
- },
- {
- "end_line": 7600,
- "section": "Links",
- "html": "[foo](/uri)
\n",
- "markdown": "[foo`](/uri)`\n",
- "example": 496,
- "start_line": 7596
- },
- {
- "end_line": 7607,
- "section": "Links",
- "html": "[foohttp://example.com/?search=](uri)
\n",
- "markdown": "[foo\n",
- "example": 497,
- "start_line": 7603
- },
- {
- "end_line": 7647,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo][bar]\n\n[bar]: /url \"title\"\n",
- "example": 498,
- "start_line": 7641
- },
- {
- "end_line": 7662,
- "section": "Links",
- "html": "link [foo [bar]]
\n",
- "markdown": "[link [foo [bar]]][ref]\n\n[ref]: /uri\n",
- "example": 499,
- "start_line": 7656
- },
- {
- "end_line": 7671,
- "section": "Links",
- "html": "link [bar
\n",
- "markdown": "[link \\[bar][ref]\n\n[ref]: /uri\n",
- "example": 500,
- "start_line": 7665
- },
- {
- "end_line": 7682,
- "section": "Links",
- "html": "link foo bar #
\n",
- "markdown": "[link *foo **bar** `#`*][ref]\n\n[ref]: /uri\n",
- "example": 501,
- "start_line": 7676
- },
- {
- "end_line": 7691,
- "section": "Links",
- "html": "
\n",
- "markdown": "[![moon](moon.jpg)][ref]\n\n[ref]: /uri\n",
- "example": 502,
- "start_line": 7685
- },
- {
- "end_line": 7702,
- "section": "Links",
- "html": "[foo bar ]ref
\n",
- "markdown": "[foo [bar](/uri)][ref]\n\n[ref]: /uri\n",
- "example": 503,
- "start_line": 7696
- },
- {
- "end_line": 7711,
- "section": "Links",
- "html": "[foo bar baz ]ref
\n",
- "markdown": "[foo *bar [baz][ref]*][ref]\n\n[ref]: /uri\n",
- "example": 504,
- "start_line": 7705
- },
- {
- "end_line": 7726,
- "section": "Links",
- "html": "*foo*
\n",
- "markdown": "*[foo*][ref]\n\n[ref]: /uri\n",
- "example": 505,
- "start_line": 7720
- },
- {
- "end_line": 7735,
- "section": "Links",
- "html": "foo *bar
\n",
- "markdown": "[foo *bar][ref]\n\n[ref]: /uri\n",
- "example": 506,
- "start_line": 7729
- },
- {
- "end_line": 7747,
- "section": "Links",
- "html": "[foo
\n",
- "markdown": "[foo \n\n[ref]: /uri\n",
- "example": 507,
- "start_line": 7741
- },
- {
- "end_line": 7756,
- "section": "Links",
- "html": "[foo][ref]
\n",
- "markdown": "[foo`][ref]`\n\n[ref]: /uri\n",
- "example": 508,
- "start_line": 7750
- },
- {
- "end_line": 7765,
- "section": "Links",
- "html": "[foohttp://example.com/?search=][ref]
\n",
- "markdown": "[foo\n\n[ref]: /uri\n",
- "example": 509,
- "start_line": 7759
- },
- {
- "end_line": 7776,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo][BaR]\n\n[bar]: /url \"title\"\n",
- "example": 510,
- "start_line": 7770
- },
- {
- "end_line": 7787,
- "section": "Links",
- "html": "Толпой is a Russian word.
\n",
- "markdown": "[Толпой][Толпой] is a Russian word.\n\n[ТОЛПОЙ]: /url\n",
- "example": 511,
- "start_line": 7781
- },
- {
- "end_line": 7800,
- "section": "Links",
- "html": "Baz
\n",
- "markdown": "[Foo\n bar]: /url\n\n[Baz][Foo bar]\n",
- "example": 512,
- "start_line": 7793
- },
- {
- "end_line": 7812,
- "section": "Links",
- "html": "[foo] bar
\n",
- "markdown": "[foo] [bar]\n\n[bar]: /url \"title\"\n",
- "example": 513,
- "start_line": 7806
- },
- {
- "end_line": 7823,
- "section": "Links",
- "html": "[foo]\nbar
\n",
- "markdown": "[foo]\n[bar]\n\n[bar]: /url \"title\"\n",
- "example": 514,
- "start_line": 7815
- },
- {
- "end_line": 7864,
- "section": "Links",
- "html": "bar
\n",
- "markdown": "[foo]: /url1\n\n[foo]: /url2\n\n[bar][foo]\n",
- "example": 515,
- "start_line": 7856
- },
- {
- "end_line": 7877,
- "section": "Links",
- "html": "[bar][foo!]
\n",
- "markdown": "[bar][foo\\!]\n\n[foo!]: /url\n",
- "example": 516,
- "start_line": 7871
- },
- {
- "end_line": 7890,
- "section": "Links",
- "html": "[foo][ref[]
\n[ref[]: /uri
\n",
- "markdown": "[foo][ref[]\n\n[ref[]: /uri\n",
- "example": 517,
- "start_line": 7883
- },
- {
- "end_line": 7900,
- "section": "Links",
- "html": "[foo][ref[bar]]
\n[ref[bar]]: /uri
\n",
- "markdown": "[foo][ref[bar]]\n\n[ref[bar]]: /uri\n",
- "example": 518,
- "start_line": 7893
- },
- {
- "end_line": 7910,
- "section": "Links",
- "html": "[[[foo]]]
\n[[[foo]]]: /url
\n",
- "markdown": "[[[foo]]]\n\n[[[foo]]]: /url\n",
- "example": 519,
- "start_line": 7903
- },
- {
- "end_line": 7919,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo][ref\\[]\n\n[ref\\[]: /uri\n",
- "example": 520,
- "start_line": 7913
- },
- {
- "end_line": 7930,
- "section": "Links",
- "html": "bar\\
\n",
- "markdown": "[bar\\\\]: /uri\n\n[bar\\\\]\n",
- "example": 521,
- "start_line": 7924
- },
- {
- "end_line": 7942,
- "section": "Links",
- "html": "[]
\n[]: /uri
\n",
- "markdown": "[]\n\n[]: /uri\n",
- "example": 522,
- "start_line": 7935
- },
- {
- "end_line": 7956,
- "section": "Links",
- "html": "[\n]
\n[\n]: /uri
\n",
- "markdown": "[\n ]\n\n[\n ]: /uri\n",
- "example": 523,
- "start_line": 7945
- },
- {
- "end_line": 7974,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo][]\n\n[foo]: /url \"title\"\n",
- "example": 524,
- "start_line": 7968
- },
- {
- "end_line": 7983,
- "section": "Links",
- "html": "foo bar
\n",
- "markdown": "[*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n",
- "example": 525,
- "start_line": 7977
- },
- {
- "end_line": 7994,
- "section": "Links",
- "html": "Foo
\n",
- "markdown": "[Foo][]\n\n[foo]: /url \"title\"\n",
- "example": 526,
- "start_line": 7988
- },
- {
- "end_line": 8009,
- "section": "Links",
- "html": "foo \n[]
\n",
- "markdown": "[foo] \n[]\n\n[foo]: /url \"title\"\n",
- "example": 527,
- "start_line": 8001
- },
- {
- "end_line": 8027,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo]\n\n[foo]: /url \"title\"\n",
- "example": 528,
- "start_line": 8021
- },
- {
- "end_line": 8036,
- "section": "Links",
- "html": "foo bar
\n",
- "markdown": "[*foo* bar]\n\n[*foo* bar]: /url \"title\"\n",
- "example": 529,
- "start_line": 8030
- },
- {
- "end_line": 8045,
- "section": "Links",
- "html": "[foo bar ]
\n",
- "markdown": "[[*foo* bar]]\n\n[*foo* bar]: /url \"title\"\n",
- "example": 530,
- "start_line": 8039
- },
- {
- "end_line": 8054,
- "section": "Links",
- "html": "[[bar foo
\n",
- "markdown": "[[bar [foo]\n\n[foo]: /url\n",
- "example": 531,
- "start_line": 8048
- },
- {
- "end_line": 8065,
- "section": "Links",
- "html": "Foo
\n",
- "markdown": "[Foo]\n\n[foo]: /url \"title\"\n",
- "example": 532,
- "start_line": 8059
- },
- {
- "end_line": 8076,
- "section": "Links",
- "html": "foo bar
\n",
- "markdown": "[foo] bar\n\n[foo]: /url\n",
- "example": 533,
- "start_line": 8070
- },
- {
- "end_line": 8088,
- "section": "Links",
- "html": "[foo]
\n",
- "markdown": "\\[foo]\n\n[foo]: /url \"title\"\n",
- "example": 534,
- "start_line": 8082
- },
- {
- "end_line": 8100,
- "section": "Links",
- "html": "*foo*
\n",
- "markdown": "[foo*]: /url\n\n*[foo*]\n",
- "example": 535,
- "start_line": 8094
- },
- {
- "end_line": 8113,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo][bar]\n\n[foo]: /url1\n[bar]: /url2\n",
- "example": 536,
- "start_line": 8106
- },
- {
- "end_line": 8121,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo][]\n\n[foo]: /url1\n",
- "example": 537,
- "start_line": 8115
- },
- {
- "end_line": 8131,
- "section": "Links",
- "html": "foo
\n",
- "markdown": "[foo]()\n\n[foo]: /url1\n",
- "example": 538,
- "start_line": 8125
- },
- {
- "end_line": 8139,
- "section": "Links",
- "html": "foo (not a link)
\n",
- "markdown": "[foo](not a link)\n\n[foo]: /url1\n",
- "example": 539,
- "start_line": 8133
- },
- {
- "end_line": 8150,
- "section": "Links",
- "html": "[foo]bar
\n",
- "markdown": "[foo][bar][baz]\n\n[baz]: /url\n",
- "example": 540,
- "start_line": 8144
- },
- {
- "end_line": 8163,
- "section": "Links",
- "html": "foo baz
\n",
- "markdown": "[foo][bar][baz]\n\n[baz]: /url1\n[bar]: /url2\n",
- "example": 541,
- "start_line": 8156
- },
- {
- "end_line": 8176,
- "section": "Links",
- "html": "[foo]bar
\n",
- "markdown": "[foo][bar][baz]\n\n[baz]: /url1\n[foo]: /url2\n",
- "example": 542,
- "start_line": 8169
- },
- {
- "end_line": 8196,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo](/url \"title\")\n",
- "example": 543,
- "start_line": 8192
- },
- {
- "end_line": 8205,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo *bar*]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n",
- "example": 544,
- "start_line": 8199
- },
- {
- "end_line": 8212,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo ![bar](/url)](/url2)\n",
- "example": 545,
- "start_line": 8208
- },
- {
- "end_line": 8219,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo [bar](/url)](/url2)\n",
- "example": 546,
- "start_line": 8215
- },
- {
- "end_line": 8235,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo *bar*][]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n",
- "example": 547,
- "start_line": 8229
- },
- {
- "end_line": 8244,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo *bar*][foobar]\n\n[FOOBAR]: train.jpg \"train & tracks\"\n",
- "example": 548,
- "start_line": 8238
- },
- {
- "end_line": 8251,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo](train.jpg)\n",
- "example": 549,
- "start_line": 8247
- },
- {
- "end_line": 8258,
- "section": "Images",
- "html": "My
\n",
- "markdown": "My ![foo bar](/path/to/train.jpg \"title\" )\n",
- "example": 550,
- "start_line": 8254
- },
- {
- "end_line": 8265,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo]()\n",
- "example": 551,
- "start_line": 8261
- },
- {
- "end_line": 8272,
- "section": "Images",
- "html": "
\n",
- "markdown": "![](/url)\n",
- "example": 552,
- "start_line": 8268
- },
- {
- "end_line": 8283,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo][bar]\n\n[bar]: /url\n",
- "example": 553,
- "start_line": 8277
- },
- {
- "end_line": 8292,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo][bar]\n\n[BAR]: /url\n",
- "example": 554,
- "start_line": 8286
- },
- {
- "end_line": 8303,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo][]\n\n[foo]: /url \"title\"\n",
- "example": 555,
- "start_line": 8297
- },
- {
- "end_line": 8312,
- "section": "Images",
- "html": "
\n",
- "markdown": "![*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n",
- "example": 556,
- "start_line": 8306
- },
- {
- "end_line": 8323,
- "section": "Images",
- "html": "
\n",
- "markdown": "![Foo][]\n\n[foo]: /url \"title\"\n",
- "example": 557,
- "start_line": 8317
- },
- {
- "end_line": 8337,
- "section": "Images",
- "html": " \n[]
\n",
- "markdown": "![foo] \n[]\n\n[foo]: /url \"title\"\n",
- "example": 558,
- "start_line": 8329
- },
- {
- "end_line": 8348,
- "section": "Images",
- "html": "
\n",
- "markdown": "![foo]\n\n[foo]: /url \"title\"\n",
- "example": 559,
- "start_line": 8342
- },
- {
- "end_line": 8357,
- "section": "Images",
- "html": "
\n",
- "markdown": "![*foo* bar]\n\n[*foo* bar]: /url \"title\"\n",
- "example": 560,
- "start_line": 8351
- },
- {
- "end_line": 8369,
- "section": "Images",
- "html": "![[foo]]
\n[[foo]]: /url "title"
\n",
- "markdown": "![[foo]]\n\n[[foo]]: /url \"title\"\n",
- "example": 561,
- "start_line": 8362
- },
- {
- "end_line": 8380,
- "section": "Images",
- "html": "
\n",
- "markdown": "![Foo]\n\n[foo]: /url \"title\"\n",
- "example": 562,
- "start_line": 8374
- },
- {
- "end_line": 8392,
- "section": "Images",
- "html": "![foo]
\n",
- "markdown": "!\\[foo]\n\n[foo]: /url \"title\"\n",
- "example": 563,
- "start_line": 8386
- },
- {
- "end_line": 8404,
- "section": "Images",
- "html": "!foo
\n",
- "markdown": "\\![foo]\n\n[foo]: /url \"title\"\n",
- "example": 564,
- "start_line": 8398
- },
- {
- "end_line": 8435,
- "section": "Autolinks",
- "html": "http://foo.bar.baz
\n",
- "markdown": "\n",
- "example": 565,
- "start_line": 8431
- },
- {
- "end_line": 8442,
- "section": "Autolinks",
- "html": "http://foo.bar.baz/test?q=hello&id=22&boolean
\n",
- "markdown": "\n",
- "example": 566,
- "start_line": 8438
- },
- {
- "end_line": 8449,
- "section": "Autolinks",
- "html": "irc://foo.bar:2233/baz
\n",
- "markdown": "\n",
- "example": 567,
- "start_line": 8445
- },
- {
- "end_line": 8458,
- "section": "Autolinks",
- "html": "MAILTO:FOO@BAR.BAZ
\n",
- "markdown": "\n",
- "example": 568,
- "start_line": 8454
- },
- {
- "end_line": 8470,
- "section": "Autolinks",
- "html": "a+b+c:d
\n",
- "markdown": "\n",
- "example": 569,
- "start_line": 8466
- },
- {
- "end_line": 8477,
- "section": "Autolinks",
- "html": "made-up-scheme://foo,bar
\n",
- "markdown": "\n",
- "example": 570,
- "start_line": 8473
- },
- {
- "end_line": 8484,
- "section": "Autolinks",
- "html": "http://../
\n",
- "markdown": " \n",
- "example": 571,
- "start_line": 8480
- },
- {
- "end_line": 8491,
- "section": "Autolinks",
- "html": "localhost:5001/foo
\n",
- "markdown": "\n",
- "example": 572,
- "start_line": 8487
- },
- {
- "end_line": 8500,
- "section": "Autolinks",
- "html": "<http://foo.bar/baz bim>
\n",
- "markdown": "\n",
- "example": 573,
- "start_line": 8496
- },
- {
- "end_line": 8509,
- "section": "Autolinks",
- "html": "http://example.com/\\[\\
\n",
- "markdown": "\n",
- "example": 574,
- "start_line": 8505
- },
- {
- "end_line": 8531,
- "section": "Autolinks",
- "html": "foo@bar.example.com
\n",
- "markdown": "\n",
- "example": 575,
- "start_line": 8527
- },
- {
- "end_line": 8538,
- "section": "Autolinks",
- "html": "foo+special@Bar.baz-bar0.com
\n",
- "markdown": "\n",
- "example": 576,
- "start_line": 8534
- },
- {
- "end_line": 8547,
- "section": "Autolinks",
- "html": "<foo+@bar.example.com>
\n",
- "markdown": "\n",
- "example": 577,
- "start_line": 8543
- },
- {
- "end_line": 8556,
- "section": "Autolinks",
- "html": "<>
\n",
- "markdown": "<>\n",
- "example": 578,
- "start_line": 8552
- },
- {
- "end_line": 8563,
- "section": "Autolinks",
- "html": "< http://foo.bar >
\n",
- "markdown": "< http://foo.bar >\n",
- "example": 579,
- "start_line": 8559
- },
- {
- "end_line": 8570,
- "section": "Autolinks",
- "html": "<m:abc>
\n",
- "markdown": "\n",
- "example": 580,
- "start_line": 8566
- },
- {
- "end_line": 8577,
- "section": "Autolinks",
- "html": "<foo.bar.baz>
\n",
- "markdown": "\n",
- "example": 581,
- "start_line": 8573
- },
- {
- "end_line": 8584,
- "section": "Autolinks",
- "html": "http://example.com
\n",
- "markdown": "http://example.com\n",
- "example": 582,
- "start_line": 8580
- },
- {
- "end_line": 8591,
- "section": "Autolinks",
- "html": "foo@bar.example.com
\n",
- "markdown": "foo@bar.example.com\n",
- "example": 583,
- "start_line": 8587
- },
- {
- "end_line": 8673,
- "section": "Raw HTML",
- "html": "
\n",
- "markdown": "\n",
- "example": 584,
- "start_line": 8669
- },
- {
- "end_line": 8682,
- "section": "Raw HTML",
- "html": "
\n",
- "markdown": " \n",
- "example": 585,
- "start_line": 8678
- },
- {
- "end_line": 8693,
- "section": "Raw HTML",
- "html": "
\n",
- "markdown": "\n",
- "example": 586,
- "start_line": 8687
- },
- {
- "end_line": 8704,
- "section": "Raw HTML",
- "html": "
\n",
- "markdown": " \n",
- "example": 587,
- "start_line": 8698
- },
- {
- "end_line": 8713,
- "section": "Raw HTML",
- "html": "Foo
\n",
- "markdown": "Foo \n",
- "example": 588,
- "start_line": 8709
- },
- {
- "end_line": 8722,
- "section": "Raw HTML",
- "html": "<33> <__>
\n",
- "markdown": "<33> <__>\n",
- "example": 589,
- "start_line": 8718
- },
- {
- "end_line": 8731,
- "section": "Raw HTML",
- "html": "<a h*#ref="hi">
\n",
- "markdown": "\n",
- "example": 590,
- "start_line": 8727
- },
- {
- "end_line": 8740,
- "section": "Raw HTML",
- "html": "<a href="hi'> <a href=hi'>
\n",
- "markdown": " \n",
- "example": 591,
- "start_line": 8736
- },
- {
- "end_line": 8751,
- "section": "Raw HTML",
- "html": "< a><\nfoo><bar/ >
\n",
- "markdown": "< a><\nfoo>\n",
- "example": 592,
- "start_line": 8745
- },
- {
- "end_line": 8760,
- "section": "Raw HTML",
- "html": "<a href='bar'title=title>
\n",
- "markdown": "\n",
- "example": 593,
- "start_line": 8756
- },
- {
- "end_line": 8769,
- "section": "Raw HTML",
- "html": "
\n",
- "markdown": " \n",
- "example": 594,
- "start_line": 8765
- },
- {
- "end_line": 8778,
- "section": "Raw HTML",
- "html": "</a href="foo">
\n",
- "markdown": "\n",
- "example": 595,
- "start_line": 8774
- },
- {
- "end_line": 8789,
- "section": "Raw HTML",
- "html": "foo
\n",
- "markdown": "foo \n",
- "example": 596,
- "start_line": 8783
- },
- {
- "end_line": 8796,
- "section": "Raw HTML",
- "html": "foo <!-- not a comment -- two hyphens -->
\n",
- "markdown": "foo \n",
- "example": 597,
- "start_line": 8792
- },
- {
- "end_line": 8808,
- "section": "Raw HTML",
- "html": "foo <!--> foo -->
\nfoo <!-- foo--->
\n",
- "markdown": "foo foo -->\n\nfoo \n",
- "example": 598,
- "start_line": 8801
- },
- {
- "end_line": 8817,
- "section": "Raw HTML",
- "html": "foo
\n",
- "markdown": "foo \n",
- "example": 599,
- "start_line": 8813
- },
- {
- "end_line": 8826,
- "section": "Raw HTML",
- "html": "foo
\n",
- "markdown": "foo \n",
- "example": 600,
- "start_line": 8822
- },
- {
- "end_line": 8835,
- "section": "Raw HTML",
- "html": "foo &<]]>
\n",
- "markdown": "foo &<]]>\n",
- "example": 601,
- "start_line": 8831
- },
- {
- "end_line": 8845,
- "section": "Raw HTML",
- "html": "foo
\n",
- "markdown": "foo \n",
- "example": 602,
- "start_line": 8841
- },
- {
- "end_line": 8854,
- "section": "Raw HTML",
- "html": "foo
\n",
- "markdown": "foo \n",
- "example": 603,
- "start_line": 8850
- },
- {
- "end_line": 8861,
- "section": "Raw HTML",
- "html": "<a href=""">
\n",
- "markdown": " \n",
- "example": 604,
- "start_line": 8857
- },
- {
- "end_line": 8877,
- "section": "Hard line breaks",
- "html": "foo \nbaz
\n",
- "markdown": "foo \nbaz\n",
- "example": 605,
- "start_line": 8871
- },
- {
- "end_line": 8889,
- "section": "Hard line breaks",
- "html": "foo \nbaz
\n",
- "markdown": "foo\\\nbaz\n",
- "example": 606,
- "start_line": 8883
- },
- {
- "end_line": 8900,
- "section": "Hard line breaks",
- "html": "foo \nbaz
\n",
- "markdown": "foo \nbaz\n",
- "example": 607,
- "start_line": 8894
- },
- {
- "end_line": 8911,
- "section": "Hard line breaks",
- "html": "foo \nbar
\n",
- "markdown": "foo \n bar\n",
- "example": 608,
- "start_line": 8905
- },
- {
- "end_line": 8920,
- "section": "Hard line breaks",
- "html": "foo \nbar
\n",
- "markdown": "foo\\\n bar\n",
- "example": 609,
- "start_line": 8914
- },
- {
- "end_line": 8932,
- "section": "Hard line breaks",
- "html": "foo \nbar
\n",
- "markdown": "*foo \nbar*\n",
- "example": 610,
- "start_line": 8926
- },
- {
- "end_line": 8941,
- "section": "Hard line breaks",
- "html": "foo \nbar
\n",
- "markdown": "*foo\\\nbar*\n",
- "example": 611,
- "start_line": 8935
- },
- {
- "end_line": 8951,
- "section": "Hard line breaks",
- "html": "code span
\n",
- "markdown": "`code \nspan`\n",
- "example": 612,
- "start_line": 8946
- },
- {
- "end_line": 8959,
- "section": "Hard line breaks",
- "html": "code\\ span
\n",
- "markdown": "`code\\\nspan`\n",
- "example": 613,
- "start_line": 8954
- },
- {
- "end_line": 8970,
- "section": "Hard line breaks",
- "html": "
\n",
- "markdown": " \n",
- "example": 614,
- "start_line": 8964
- },
- {
- "end_line": 8979,
- "section": "Hard line breaks",
- "html": "
\n",
- "markdown": " \n",
- "example": 615,
- "start_line": 8973
- },
- {
- "end_line": 8990,
- "section": "Hard line breaks",
- "html": "foo\\
\n",
- "markdown": "foo\\\n",
- "example": 616,
- "start_line": 8986
- },
- {
- "end_line": 8997,
- "section": "Hard line breaks",
- "html": "foo
\n",
- "markdown": "foo \n",
- "example": 617,
- "start_line": 8993
- },
- {
- "end_line": 9004,
- "section": "Hard line breaks",
- "html": "foo\\ \n",
- "markdown": "### foo\\\n",
- "example": 618,
- "start_line": 9000
- },
- {
- "end_line": 9011,
- "section": "Hard line breaks",
- "html": "foo \n",
- "markdown": "### foo \n",
- "example": 619,
- "start_line": 9007
- },
- {
- "end_line": 9028,
- "section": "Soft line breaks",
- "html": "foo\nbaz
\n",
- "markdown": "foo\nbaz\n",
- "example": 620,
- "start_line": 9022
- },
- {
- "end_line": 9040,
- "section": "Soft line breaks",
- "html": "foo\nbaz
\n",
- "markdown": "foo \n baz\n",
- "example": 621,
- "start_line": 9034
- },
- {
- "end_line": 9058,
- "section": "Textual content",
- "html": "hello $.;'there
\n",
- "markdown": "hello $.;'there\n",
- "example": 622,
- "start_line": 9054
- },
- {
- "end_line": 9065,
- "section": "Textual content",
- "html": "Foo χρῆν
\n",
- "markdown": "Foo χρῆν\n",
- "example": 623,
- "start_line": 9061
- },
- {
- "end_line": 9074,
- "section": "Textual content",
- "html": "Multiple spaces
\n",
- "markdown": "Multiple spaces\n",
- "example": 624,
- "start_line": 9070
- }
-]
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js
index f4a82cc3..f89f7244 100644
--- a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js
+++ b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js
@@ -1,45 +1,124 @@
-import { flow, trim } from 'lodash';
-import commonmarkSpec from './__fixtures__/commonmark.json';
-import expected from './__fixtures__/commonmarkExpected.json';
-import { markdownToSlate, slateToMarkdown, markdownToHtml } from '../index.js';
+import { flow } from 'lodash';
+import { tests as commonmarkSpec } from 'commonmark-spec';
+import commonmark from 'commonmark';
+import { markdownToSlate, slateToMarkdown } from '../index.js';
-/**
- * Map the commonmark spec data into an array of arrays for use in Jest's
- * `test.each`.
- */
-const spec = commonmarkSpec.map(({ markdown, html }) => [markdown, html]);
+const skips = [
+ {
+ number: [456],
+ reason: 'Remark ¯\\_(ツ)_/¯',
+ },
+ {
+ number: [416, 417, 424, 425, 426, 431, 457, 460, 462, 464, 467],
+ reason: 'Remark does not support infinite (redundant) nested marks',
+ },
+ {
+ number: [455, 469, 470, 471],
+ reason: 'Remark parses the initial set of identical nested delimiters first',
+ },
+ {
+ number: [473, 476, 478, 480],
+ reason: 'we convert underscores to asterisks for strong/emphasis',
+ },
+ { number: 490, reason: 'Remark strips pointy enclosing pointy brackets from link url' },
+ { number: 503, reason: 'Remark allows non-breaking space between link url and title' },
+ { number: 507, reason: 'Remark allows a space between link alt and url' },
+ {
+ number: [
+ 511,
+ 516,
+ 525,
+ 528,
+ 529,
+ 530,
+ 532,
+ 533,
+ 534,
+ 540,
+ 541,
+ 542,
+ 543,
+ 546,
+ 548,
+ 560,
+ 565,
+ 567,
+ ],
+ reason: 'we convert link references to standard links, but Remark also fails these',
+ },
+ {
+ number: [569, 570, 571, 572, 573, 581, 585],
+ reason: 'Remark does not recognize or remove marks in image alt text',
+ },
+ { number: 589, reason: 'Remark does not honor backslash escape of image exclamation point' },
+ { number: 593, reason: 'Remark removes "mailto:" from autolink text' },
+ { number: 599, reason: 'Remark does not escape all expected entities' },
+ { number: 602, reason: 'Remark allows autolink emails to contain backslashes' },
+];
+
+const onlys = [
+ // just add the spec number, eg:
+ // 431,
+];
/**
* Each test receives input markdown and output html as expected for Commonmark
* compliance. To test all of our handling in one go, we serialize the markdown
* into our Slate AST, then back to raw markdown, and finally to HTML.
*/
-const process = flow([markdownToSlate, slateToMarkdown, markdownToHtml]);
+const reader = new commonmark.Parser();
+const writer = new commonmark.HtmlRenderer();
+const parseWithCommonmark = markdown => {
+ const parsed = reader.parse(markdown);
+ return writer.render(parsed);
+};
+const parse = flow([markdownToSlate, slateToMarkdown]);
/**
* Passing this test suite requires 100% Commonmark compliance. There are 624
* tests, of which we're passing about 300 as of introduction of this suite. To
* work on improving Commonmark support, update __fixtures__/commonmarkExpected.json
*/
+describe.skip('Commonmark support', function() {
+ const specs =
+ onlys.length > 0
+ ? commonmarkSpec.filter(({ number }) => onlys.includes(number))
+ : commonmarkSpec;
+ specs.forEach(spec => {
+ const skip = skips.find(({ number }) => {
+ return Array.isArray(number) ? number.includes(spec.number) : number === spec.number;
+ });
+ const specUrl = `https://spec.commonmark.org/0.29/#example-${spec.number}`;
+ const parsed = parse(spec.markdown);
+ const commonmarkParsedHtml = parseWithCommonmark(parsed);
+ const description = `
+${spec.section}
+${specUrl}
-describe('Commonmark support', () => {
- test.each(spec)('%s', (markdown, html) => {
- // We're trimming the html from the spec as they all have trailing newlines
- // and we never output trailing newlines. This may be a compliance issue.
- const trimmedHtml = trim(html);
+Spec:
+${JSON.stringify(spec, null, 2)}
- switch (expected[markdown]) {
- case 'TO_EQUAL':
- expect(process(markdown)).toEqual(trimmedHtml);
- break;
- case 'NOT_TO_EQUAL':
- expect(process(markdown)).not.toEqual(trimmedHtml);
- break;
- case 'TO_ERROR':
- expect(() => process(markdown)).toThrowError();
- break;
- default:
- throw new Error('Unknown expected type: ' + expected[markdown]);
+Markdown input:
+${spec.markdown}
+
+Markdown parsed through Slate/Remark and back to Markdown:
+${parsed}
+
+HTML output:
+${commonmarkParsedHtml}
+
+Expected HTML output:
+${spec.html}
+ `;
+ if (skip) {
+ const showMessage = Array.isArray(skip.number) ? skip.number[0] === spec.number : true;
+ if (showMessage) {
+ //console.log(`skipping spec ${skip.number}\n${skip.reason}\n${specUrl}`);
+ }
}
+ const testFn = skip ? test.skip : test;
+ testFn(description, () => {
+ expect(commonmarkParsedHtml).toEqual(spec.html);
+ });
});
});
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js
index 65a30120..62617039 100644
--- a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js
+++ b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js
@@ -1,4 +1,7 @@
+/** @jsx h */
+
import { flow } from 'lodash';
+import h from '../../../test-helpers/h';
import { markdownToSlate, slateToMarkdown } from '../index';
const process = flow([markdownToSlate, slateToMarkdown]);
@@ -12,8 +15,16 @@ describe('slate', () => {
expect(process('**a[b](c)d**')).toEqual('**a[b](c)d**');
expect(process('**[a](b)**')).toEqual('**[a](b)**');
expect(process('**![a](b)**')).toEqual('**![a](b)**');
- expect(process('_`a`_')).toEqual('_`a`_');
- expect(process('_`a`b_')).toEqual('_`a`b_');
+ expect(process('_`a`_')).toEqual('*`a`*');
+ });
+
+ it('should handle unstyled code nodes adjacent to styled code nodes', () => {
+ expect(process('`foo`***`bar`***')).toEqual('`foo`***`bar`***');
+ });
+
+ it('should handle styled code nodes adjacent to non-code text', () => {
+ expect(process('_`a`b_')).toEqual('*`a`b*');
+ expect(process('_`a`**b**_')).toEqual('*`a`**b***');
});
it('should condense adjacent, identically styled text and inline nodes', () => {
@@ -23,7 +34,8 @@ describe('slate', () => {
it('should handle nested markdown entities', () => {
expect(process('**a**b**c**')).toEqual('**a**b**c**');
- expect(process('**a _b_ c**')).toEqual('**a _b_ c**');
+ expect(process('**a _b_ c**')).toEqual('**a *b* c**');
+ expect(process('*`a`*')).toEqual('*`a`*');
});
it('should parse inline images as images', () => {
@@ -34,57 +46,249 @@ describe('slate', () => {
expect(process('* ')).toEqual('* ');
});
+ it('should wrap break tags in surrounding marks', () => {
+ expect(process('*a \nb*')).toEqual('*a\\\nb*');
+ });
+
+ it('should not output empty headers in markdown', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ foo
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"foo"`);
+ });
+
+ it('should not output empty marks in markdown', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+
+ foo bar
+ baz
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"foobarbaz"`);
+ });
+
it('should not produce invalid markdown when a styled block has trailing whitespace', () => {
- const slateAst = {
- object: 'block',
- type: 'root',
- nodes: [
- {
- object: 'block',
- type: 'paragraph',
- nodes: [
- {
- object: 'text',
- data: undefined,
- leaves: [
- {
- text: 'foo ', // <--
- marks: [{ type: 'bold' }],
- },
- ],
- },
- { object: 'text', data: undefined, leaves: [{ text: 'bar' }] },
- ],
- },
- ],
- };
- expect(slateToMarkdown(slateAst)).toEqual('**foo** bar');
+ // prettier-ignore
+ const slateAst = (
+
+
+ foo bar bim bam
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"**foo** bar **bim *bam***"`);
});
it('should not produce invalid markdown when a styled block has leading whitespace', () => {
- const slateAst = {
- object: 'block',
- type: 'root',
- nodes: [
- {
- object: 'block',
- type: 'paragraph',
- nodes: [
- { object: 'text', data: undefined, leaves: [{ text: 'foo' }] },
- {
- object: 'text',
- data: undefined,
- leaves: [
- {
- text: ' bar', // <--
- marks: [{ type: 'bold' }],
- },
- ],
- },
- ],
- },
- ],
- };
- expect(slateToMarkdown(slateAst)).toEqual('foo **bar**');
+ // prettier-ignore
+ const slateAst = (
+
+
+ foo bar
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"foo **bar**"`);
+ });
+
+ it('should group adjacent marks into a single mark when possible', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ shared mark
+
+ link
+
+ {' '}
+ not shared mark
+
+ another
+ link
+
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(
+ `"**shared mark*[link](link)*** **not shared mark***[another **link**](link)*"`,
+ );
+ });
+
+ describe('links', () => {
+ it('should handle inline code in link content', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+
+ foo
+
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"[\`foo\`](link)"`);
+ });
+ });
+
+ describe('code marks', () => {
+ it('can contain other marks', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ foo
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"***\`foo\`***"`);
+ });
+
+ it('can be condensed when no other marks are present', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ foo
+ bar
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"\`foo\`"`);
+ });
+ });
+
+ describe('with nested styles within a single word', () => {
+ it('should not produce invalid markdown when a bold word has italics applied to a smaller part', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ y
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"**h*e*y**"`);
+ });
+
+ it('should not produce invalid markdown when an italic word has bold applied to a smaller part', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ y
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"*h**e**y*"`);
+ });
+
+ it('should handle italics inside bold inside strikethrough', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ l
+ l
+ o
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"~~h**e*l*l**o~~"`);
+ });
+
+ it('should handle bold inside italics inside strikethrough', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ l
+ l
+ o
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"~~h*e**l**l*o~~"`);
+ });
+
+ it('should handle strikethrough inside italics inside bold', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ l
+ l
+ o
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"**h*e~~l~~l*o**"`);
+ });
+
+ it('should handle italics inside strikethrough inside bold', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ l
+ l
+ o
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"**h~~e*l*l~~o**"`);
+ });
+
+ it('should handle strikethrough inside bold inside italics', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ l
+ l
+ o
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"*h**e~~l~~l**o*"`);
+ });
+
+ it('should handle bold inside strikethrough inside italics', () => {
+ // prettier-ignore
+ const slateAst = (
+
+
+ h
+ e
+ l
+ l
+ o
+
+
+ );
+ expect(slateToMarkdown(slateAst.toJSON())).toMatchInlineSnapshot(`"*h~~e**l**l~~o*"`);
+ });
});
});
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/index.js b/packages/netlify-cms-widget-markdown/src/serializers/index.js
index e2d06c36..3f0be220 100644
--- a/packages/netlify-cms-widget-markdown/src/serializers/index.js
+++ b/packages/netlify-cms-widget-markdown/src/serializers/index.js
@@ -115,10 +115,11 @@ export const remarkToMarkdown = obj => {
listItemIndent: '1',
/**
- * Settings to emulate the defaults from the Prosemirror editor, not
- * necessarily optimal. Should eventually be configurable.
+ * Use asterisk for everything, it's the most versatile. Eventually using
+ * other characters should be an option.
*/
bullet: '*',
+ emphasis: '*',
strong: '*',
rule: '-',
};
@@ -147,16 +148,21 @@ export const remarkToMarkdown = obj => {
/**
* Convert Markdown to HTML.
*/
-export const markdownToHtml = (markdown, getAsset) => {
+export const markdownToHtml = (markdown, { getAsset, resolveWidget } = {}) => {
const mdast = markdownToRemark(markdown);
const hast = unified()
- .use(remarkToRehypeShortcodes, { plugins: getEditorComponents(), getAsset })
+ .use(remarkToRehypeShortcodes, { plugins: getEditorComponents(), getAsset, resolveWidget })
.use(remarkToRehype, { allowDangerousHTML: true })
.runSync(mdast);
const html = unified()
- .use(rehypeToHtml, { allowDangerousHTML: true, allowDangerousCharacters: true })
+ .use(rehypeToHtml, {
+ allowDangerousHTML: true,
+ allowDangerousCharacters: true,
+ closeSelfClosing: true,
+ entities: { useNamedReferences: true },
+ })
.stringify(hast);
return html;
@@ -189,12 +195,12 @@ export const htmlToSlate = html => {
/**
* Convert Markdown to Slate's Raw AST.
*/
-export const markdownToSlate = markdown => {
+export const markdownToSlate = (markdown, { voidCodeBlock } = {}) => {
const mdast = markdownToRemark(markdown);
const slateRaw = unified()
.use(remarkWrapHtml)
- .use(remarkToSlate)
+ .use(remarkToSlate, { voidCodeBlock })
.runSync(mdast);
return slateRaw;
@@ -209,8 +215,8 @@ export const markdownToSlate = markdown => {
* MDAST. The conversion is manual because Unified can only operate on Unist
* trees.
*/
-export const slateToMarkdown = raw => {
- const mdast = slateToRemark(raw, { shortcodePlugins: getEditorComponents() });
+export const slateToMarkdown = (raw, { voidCodeBlock } = {}) => {
+ const mdast = slateToRemark(raw, { voidCodeBlock });
const markdown = remarkToMarkdown(mdast);
return markdown;
};
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/remarkRehypeShortcodes.js b/packages/netlify-cms-widget-markdown/src/serializers/remarkRehypeShortcodes.js
index 9dc0fe1a..0fb41f59 100644
--- a/packages/netlify-cms-widget-markdown/src/serializers/remarkRehypeShortcodes.js
+++ b/packages/netlify-cms-widget-markdown/src/serializers/remarkRehypeShortcodes.js
@@ -1,3 +1,4 @@
+import React from 'react';
import { map, has } from 'lodash';
import { renderToString } from 'react-dom/server';
import u from 'unist-builder';
@@ -8,7 +9,7 @@ import u from 'unist-builder';
* conversion by replacing the shortcode text with stringified HTML for
* previewing the shortcode output.
*/
-export default function remarkToRehypeShortcodes({ plugins, getAsset }) {
+export default function remarkToRehypeShortcodes({ plugins, getAsset, resolveWidget }) {
return transform;
function transform(root) {
@@ -37,7 +38,7 @@ export default function remarkToRehypeShortcodes({ plugins, getAsset }) {
* an HTML string or a React component. If a React component is returned,
* render it to an HTML string.
*/
- const value = plugin.toPreview(shortcodeData, getAsset);
+ const value = getPreview(plugin, shortcodeData);
const valueHtml = typeof value === 'string' ? value : renderToString(value);
/**
@@ -47,4 +48,20 @@ export default function remarkToRehypeShortcodes({ plugins, getAsset }) {
const children = [textNode];
return { ...node, children };
}
+
+ /**
+ * Retrieve the shortcode preview component.
+ */
+ function getPreview(plugin, shortcodeData) {
+ const { toPreview, widget } = plugin;
+ if (toPreview) {
+ return toPreview(shortcodeData, getAsset);
+ }
+ const preview = resolveWidget(widget);
+ return React.createElement(preview.preview, {
+ value: shortcodeData,
+ field: plugin,
+ getAsset,
+ });
+ }
}
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/remarkSlate.js b/packages/netlify-cms-widget-markdown/src/serializers/remarkSlate.js
index 2e12a9cf..b88b2c3e 100644
--- a/packages/netlify-cms-widget-markdown/src/serializers/remarkSlate.js
+++ b/packages/netlify-cms-widget-markdown/src/serializers/remarkSlate.js
@@ -1,31 +1,4 @@
-import { isEmpty, isArray, last, flatMap } from 'lodash';
-
-/**
- * A Remark plugin for converting an MDAST to Slate Raw AST. Remark plugins
- * return a `transform` function that receives the MDAST as it's first argument.
- */
-export default function remarkToSlate() {
- return transform;
-}
-
-function transform(node) {
- /**
- * Call `transform` recursively on child nodes.
- *
- * If a node returns a falsey value, filter it out. Some nodes do not
- * translate from MDAST to Slate, such as definitions for link/image
- * references or footnotes.
- */
- const children =
- !['strong', 'emphasis', 'delete'].includes(node.type) &&
- !isEmpty(node.children) &&
- flatMap(node.children, transform).filter(val => val);
-
- /**
- * Run individual nodes through the conversion factory.
- */
- return convertNode(node, children);
-}
+import { isEmpty, isArray, flatMap, map, flatten } from 'lodash';
/**
* Map of MDAST node types to Slate node types.
@@ -34,7 +7,7 @@ const typeMap = {
root: 'root',
paragraph: 'paragraph',
blockquote: 'quote',
- code: 'code',
+ code: 'code-block',
listItem: 'list-item',
table: 'table',
tableRow: 'table-row',
@@ -56,60 +29,82 @@ const markMap = {
};
/**
- * Add nodes to a parent node only if `nodes` is truthy.
+ * A Remark plugin for converting an MDAST to Slate Raw AST. Remark plugins
+ * return a `transformNode` function that receives the MDAST as it's first argument.
*/
-function addNodes(parent, nodes) {
- return nodes ? { ...parent, nodes } : parent;
-}
+export default function remarkToSlate({ voidCodeBlock } = {}) {
+ return transformNode;
-/**
- * Create a Slate Inline node.
- */
-function createBlock(type, nodes, props = {}) {
- if (!isArray(nodes)) {
- props = nodes;
- nodes = undefined;
+ function transformNode(node) {
+ /**
+ * Call `transformNode` recursively on child nodes.
+ *
+ * If a node returns a falsey value, filter it out. Some nodes do not
+ * translate from MDAST to Slate, such as definitions for link/image
+ * references or footnotes.
+ */
+ const children =
+ !['strong', 'emphasis', 'delete'].includes(node.type) &&
+ !isEmpty(node.children) &&
+ flatMap(node.children, transformNode).filter(val => val);
+
+ /**
+ * Run individual nodes through the conversion factory.
+ */
+ const output = convertNode(node, children || undefined);
+ return output;
}
- const node = { object: 'block', type, ...props };
- return addNodes(node, nodes);
-}
-
-/**
- * Create a Slate Block node.
- */
-function createInline(type, props = {}, nodes) {
- const node = { object: 'inline', type, ...props };
- return addNodes(node, nodes);
-}
-
-/**
- * Create a Slate Raw text node.
- */
-function createText(value, data) {
- const node = { object: 'text', data };
- const leaves = isArray(value) ? value : [{ text: value }];
- return { ...node, leaves };
-}
-
-function processMarkNode(node, parentMarks = []) {
/**
- * Add the current node's mark type to the marks collected from parent
- * mark nodes, if any.
+ * Add nodes to a parent node only if `nodes` is truthy.
*/
- const markType = markMap[node.type];
- const marks = markType ? [...parentMarks, { type: markMap[node.type] }] : parentMarks;
+ function addNodes(parent, nodes) {
+ return nodes ? { ...parent, nodes } : parent;
+ }
- const children = flatMap(node.children, childNode => {
+ /**
+ * Create a Slate Block node.
+ */
+ function createBlock(type, nodes, props = {}) {
+ if (!isArray(nodes)) {
+ props = nodes;
+ nodes = undefined;
+ }
+
+ const node = { object: 'block', type, ...props };
+ return addNodes(node, nodes);
+ }
+
+ /**
+ * Create a Slate Inline node.
+ */
+ function createInline(type, props = {}, nodes) {
+ const node = { object: 'inline', type, ...props };
+ return addNodes(node, nodes);
+ }
+
+ /**
+ * Create a Slate Raw text node.
+ */
+ function createText(node) {
+ const newNode = { object: 'text' };
+ if (typeof node === 'string') {
+ return { ...newNode, text: node };
+ }
+ const { text, marks } = node;
+ return { ...newNode, text, marks };
+ }
+
+ function processMarkChild(childNode, marks) {
switch (childNode.type) {
/**
* If a text node is a direct child of the current node, it should be
- * set aside as a leaf, and all marks that have been collected in the
- * `marks` array should apply to that specific leaf.
+ * set aside as a text, and all marks that have been collected in the
+ * `marks` array should apply to that specific text.
*/
case 'html':
case 'text':
- return { text: childNode.value, marks };
+ return { ...convertNode(childNode), marks };
/**
* MDAST inline code nodes don't have children, just a text value, similar
@@ -117,14 +112,14 @@ function processMarkNode(node, parentMarks = []) {
* first add the inline code mark to the marks array.
*/
case 'inlineCode': {
- const childMarks = [...marks, { type: markMap['inlineCode'] }];
- return { text: childNode.value, marks: childMarks };
+ const childMarks = [...marks, { type: markMap[childNode.type] }];
+ return { ...convertNode(childNode), marks: childMarks };
}
/**
* Process nested style nodes. The recursive results should be pushed into
- * the leaves array. This way, every MDAST nested text structure becomes a
- * flat array of leaves that can serve as the value of a single Slate Raw
+ * the texts array. This way, every MDAST nested text structure becomes a
+ * flat array of texts that can serve as the value of a single Slate Raw
* text node.
*/
case 'strong':
@@ -132,211 +127,236 @@ function processMarkNode(node, parentMarks = []) {
case 'delete':
return processMarkNode(childNode, marks);
+ case 'link': {
+ const nodes = map(childNode.children, child => processMarkChild(child, marks));
+ const result = convertNode(childNode, flatten(nodes));
+ return result;
+ }
+
/**
* Remaining nodes simply need mark data added to them, and to then be
* added into the cumulative children array.
*/
default:
- return { ...childNode, data: { marks } };
+ return transformNode({ ...childNode, data: { ...childNode.data, marks } });
}
- });
+ }
- return children;
-}
-
-function convertMarkNode(node) {
- const slateNodes = processMarkNode(node);
-
- const convertedSlateNodes = slateNodes.reduce((acc, node) => {
- const lastConvertedNode = last(acc);
- if (node.text && lastConvertedNode && lastConvertedNode.leaves) {
- lastConvertedNode.leaves.push(node);
- } else if (node.text) {
- acc.push(createText([node]));
- } else {
- acc.push(transform(node));
- }
-
- return acc;
- }, []);
-
- return convertedSlateNodes;
-}
-
-/**
- * Convert a single MDAST node to a Slate Raw node. Uses local node factories
- * that mimic the unist-builder function utilized in the slateRemark
- * transformer.
- */
-function convertNode(node, nodes) {
- switch (node.type) {
+ function processMarkNode(node, parentMarks = []) {
/**
- * General
- *
- * Convert simple cases that only require a type and children, with no
- * additional properties.
+ * Add the current node's mark type to the marks collected from parent
+ * mark nodes, if any.
*/
- case 'root':
- case 'paragraph':
- case 'listItem':
- case 'blockquote':
- case 'tableRow':
- case 'tableCell': {
- return createBlock(typeMap[node.type], nodes);
- }
+ const markType = markMap[node.type];
+ const marks = markType ? [...parentMarks, { type: markMap[node.type] }] : parentMarks;
- /**
- * Shortcodes
- *
- * Shortcode nodes are represented as "void" blocks in the Slate AST. They
- * maintain the same data as MDAST shortcode nodes. Slate void blocks must
- * contain a blank text node.
- */
- case 'shortcode': {
- const { data } = node;
- const nodes = [createText('')];
- return createBlock(typeMap[node.type], nodes, { data, isVoid: true });
- }
+ const children = flatMap(node.children, child => processMarkChild(child, marks));
- /**
- * Text
- *
- * Text and HTML nodes are both used to render text, and should be treated
- * the same. HTML is treated as text because we never want to escape or
- * encode it.
- */
- case 'text':
- case 'html': {
- return createText(node.value, node.data);
- }
+ return children;
+ }
- /**
- * Inline Code
- *
- * Inline code nodes from an MDAST are represented in our Slate schema as
- * text nodes with a "code" mark. We manually create the "leaf" containing
- * the inline code value and a "code" mark, and place it in an array for use
- * as a Slate text node's children array.
- */
- case 'inlineCode': {
- const leaf = {
- text: node.value,
- marks: [{ type: 'code' }],
- };
- return createText([leaf]);
- }
+ /**
+ * Convert a single MDAST node to a Slate Raw node. Uses local node factories
+ * that mimic the unist-builder function utilized in the slateRemark
+ * transformer.
+ */
+ function convertNode(node, nodes) {
+ switch (node.type) {
+ /**
+ * General
+ *
+ * Convert simple cases that only require a type and children, with no
+ * additional properties.
+ */
+ case 'root':
+ case 'paragraph':
+ case 'blockquote':
+ case 'tableRow':
+ case 'tableCell': {
+ return createBlock(typeMap[node.type], nodes);
+ }
- /**
- * Marks
- *
- * Marks are typically decorative sub-types that apply to text nodes. In an
- * MDAST, marks are nodes that can contain other nodes. This nested
- * hierarchy has to be flattened and split into distinct text nodes with
- * their own set of marks.
- */
- case 'strong':
- case 'emphasis':
- case 'delete': {
- return convertMarkNode(node);
- }
+ /**
+ * List Items
+ *
+ * Markdown list items can be empty, but a list item in the Slate schema
+ * should at least have an empty paragraph node.
+ */
+ case 'listItem': {
+ const children = isEmpty(nodes) ? [createBlock('paragraph')] : nodes;
+ return createBlock(typeMap[node.type], children);
+ }
- /**
- * Headings
- *
- * MDAST headings use a single type with a separate "depth" property to
- * indicate the heading level, while the Slate schema uses a separate node
- * type for each heading level. Here we get the proper Slate node name based
- * on the MDAST node depth.
- */
- case 'heading': {
- const depthMap = { 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six' };
- const slateType = `heading-${depthMap[node.depth]}`;
- return createBlock(slateType, nodes);
- }
+ /**
+ * Shortcodes
+ *
+ * Shortcode nodes are represented as "void" blocks in the Slate AST. They
+ * maintain the same data as MDAST shortcode nodes. Slate void blocks must
+ * contain a blank text node.
+ */
+ case 'shortcode': {
+ const nodes = [createText('')];
+ const data = { ...node.data };
+ return createBlock(typeMap[node.type], nodes, { data });
+ }
- /**
- * Code Blocks
- *
- * MDAST code blocks are a distinct node type with a simple text value. We
- * convert that value into a nested child text node for Slate. We also carry
- * over the "lang" data property if it's defined.
- */
- case 'code': {
- const data = { lang: node.lang };
- const text = createText(node.value);
- const nodes = [text];
- return createBlock(typeMap[node.type], nodes, { data });
- }
+ /**
+ * Text
+ *
+ * Text nodes contain plain text. We remove newlines because they don't
+ * carry meaning for a rich text editor - a break in rich text would be
+ * expected to result in a break in output HTML, but that isn't the case.
+ * To avoid this confusion we remove them.
+ */
+ case 'text': {
+ const text = node.value.replace(/\n/, ' ');
+ return createText(text);
+ }
- /**
- * Lists
- *
- * MDAST has a single list type and an "ordered" property. We derive that
- * information into the Slate schema's distinct list node types. We also
- * include the "start" property, which indicates the number an ordered list
- * starts at, if defined.
- */
- case 'list': {
- const slateType = node.ordered ? 'numbered-list' : 'bulleted-list';
- const data = { start: node.start };
- return createBlock(slateType, nodes, { data });
- }
+ /**
+ * HTML
+ *
+ * HTML nodes contain plain text like text nodes, except they only contain
+ * HTML. Our serialization results in non-HTML being placed in HTML nodes
+ * sometimes to ensure that we're never escaping HTML from the rich text
+ * editor. We do not replace line feeds in HTML because the HTML is raw
+ * in the rich text editor, so the writer knows they're writing HTML, and
+ * should expect soft breaks to be visually absent in the rendered HTML.
+ */
+ case 'html': {
+ return createText(node.value);
+ }
- /**
- * Breaks
- *
- * MDAST soft break nodes represent a trailing double space or trailing
- * slash from a Markdown document. In Slate, these are simply transformed to
- * line breaks within a text node.
- */
- case 'break': {
- const textNode = createText('\n');
- return createInline('break', {}, [textNode]);
- }
+ /**
+ * Inline Code
+ *
+ * Inline code nodes from an MDAST are represented in our Slate schema as
+ * text nodes with a "code" mark. We manually create the text containing
+ * the inline code value and a "code" mark, and place it in an array for use
+ * as a Slate text node's children array.
+ */
+ case 'inlineCode': {
+ return createText({ text: node.value, marks: [{ type: 'code' }] });
+ }
- /**
- * Thematic Breaks
- *
- * Thematic breaks are void nodes in the Slate schema.
- */
- case 'thematicBreak': {
- return createBlock(typeMap[node.type], { isVoid: true });
- }
+ /**
+ * Marks
+ *
+ * Marks are typically decorative sub-types that apply to text nodes. In an
+ * MDAST, marks are nodes that can contain other nodes. This nested
+ * hierarchy has to be flattened and split into distinct text nodes with
+ * their own set of marks.
+ */
+ case 'strong':
+ case 'emphasis':
+ case 'delete': {
+ return processMarkNode(node);
+ }
- /**
- * Links
- *
- * MDAST stores the link attributes directly on the node, while our Slate
- * schema references them in the data object.
- */
- case 'link': {
- const { title, url, data } = node;
- const newData = { ...data, title, url };
- return createInline(typeMap[node.type], { data: newData }, nodes);
- }
+ /**
+ * Headings
+ *
+ * MDAST headings use a single type with a separate "depth" property to
+ * indicate the heading level, while the Slate schema uses a separate node
+ * type for each heading level. Here we get the proper Slate node name based
+ * on the MDAST node depth.
+ */
+ case 'heading': {
+ const depthMap = { 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six' };
+ const slateType = `heading-${depthMap[node.depth]}`;
+ return createBlock(slateType, nodes);
+ }
- /**
- * Images
- *
- * Identical to link nodes except for the lack of child nodes and addition
- * of alt attribute data MDAST stores the link attributes directly on the
- * node, while our Slate schema references them in the data object.
- */
- case 'image': {
- const { title, url, alt, data } = node;
- const newData = { ...data, title, alt, url };
- return createInline(typeMap[node.type], { isVoid: true, data: newData });
- }
+ /**
+ * Code Blocks
+ *
+ * MDAST code blocks are a distinct node type with a simple text value. We
+ * convert that value into a nested child text node for Slate. If a void
+ * node is required due to a custom code block handler, the value is
+ * stored in the "code" data property instead. We also carry over the "lang"
+ * data property if it's defined.
+ */
+ case 'code': {
+ const data = {
+ lang: node.lang,
+ ...(voidCodeBlock ? { code: node.value } : {}),
+ };
+ const text = createText(voidCodeBlock ? '' : node.value);
+ const nodes = [text];
+ const block = createBlock(typeMap[node.type], nodes, { data });
+ return block;
+ }
- /**
- * Tables
- *
- * Tables are parsed separately because they may include an "align"
- * property, which should be passed to the Slate node.
- */
- case 'table': {
- const data = { align: node.align };
- return createBlock(typeMap[node.type], nodes, { data });
+ /**
+ * Lists
+ *
+ * MDAST has a single list type and an "ordered" property. We derive that
+ * information into the Slate schema's distinct list node types. We also
+ * include the "start" property, which indicates the number an ordered list
+ * starts at, if defined.
+ */
+ case 'list': {
+ const slateType = node.ordered ? 'numbered-list' : 'bulleted-list';
+ const data = { start: node.start };
+ return createBlock(slateType, nodes, { data });
+ }
+
+ /**
+ * Breaks
+ *
+ * MDAST soft break nodes represent a trailing double space or trailing
+ * slash from a Markdown document. In Slate, these are simply transformed to
+ * line breaks within a text node.
+ */
+ case 'break': {
+ const { data } = node;
+ return createInline('break', { data });
+ }
+
+ /**
+ * Thematic Breaks
+ *
+ * Thematic breaks are void nodes in the Slate schema.
+ */
+ case 'thematicBreak': {
+ return createBlock(typeMap[node.type]);
+ }
+
+ /**
+ * Links
+ *
+ * MDAST stores the link attributes directly on the node, while our Slate
+ * schema references them in the data object.
+ */
+ case 'link': {
+ const { title, url, data } = node;
+ const newData = { ...data, title, url };
+ return createInline(typeMap[node.type], { data: newData }, nodes);
+ }
+
+ /**
+ * Images
+ *
+ * Identical to link nodes except for the lack of child nodes and addition
+ * of alt attribute data MDAST stores the link attributes directly on the
+ * node, while our Slate schema references them in the data object.
+ */
+ case 'image': {
+ const { title, url, alt, data } = node;
+ const newData = { ...data, title, alt, url };
+ return createInline(typeMap[node.type], { data: newData });
+ }
+
+ /**
+ * Tables
+ *
+ * Tables are parsed separately because they may include an "align"
+ * property, which should be passed to the Slate node.
+ */
+ case 'table': {
+ const data = { align: node.align };
+ return createBlock(typeMap[node.type], nodes, { data });
+ }
}
}
}
diff --git a/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js b/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js
index 8cde5ea3..d0c3f139 100644
--- a/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js
+++ b/packages/netlify-cms-widget-markdown/src/serializers/slateRemark.js
@@ -1,5 +1,6 @@
-import { get, isEmpty, without, flatMap, last, sortBy } from 'lodash';
+import { get, without, last, map, intersection, omit } from 'lodash';
import u from 'unist-builder';
+import mdastToString from 'mdast-util-to-string';
/**
* Map of Slate node types to MDAST/Remark node types.
@@ -14,7 +15,7 @@ const typeMap = {
'heading-five': 'heading',
'heading-six': 'heading',
quote: 'blockquote',
- code: 'code',
+ 'code-block': 'code',
'numbered-list': 'list',
'bulleted-list': 'list',
'list-item': 'listItem',
@@ -38,7 +39,10 @@ const markMap = {
code: 'inlineCode',
};
-export default function slateToRemark(raw) {
+const leadingWhitespaceExp = /^\s+\S/;
+const trailingWhitespaceExp = /(?!\S)\s+$/;
+
+export default function slateToRemark(raw, { voidCodeBlock }) {
/**
* The Slate Raw AST generally won't have a top level type, so we set it to
* "root" for clarity.
@@ -46,465 +50,352 @@ export default function slateToRemark(raw) {
raw.type = 'root';
return transform(raw);
-}
-
-/**
- * The transform function mimics the approach of a Remark plugin for
- * conformity with the other serialization functions. This function converts
- * Slate nodes to MDAST nodes, and recursively calls itself to process child
- * nodes to arbitrary depth.
- */
-function transform(node) {
- /**
- * Combine adjacent text and inline nodes before processing so they can
- * share marks.
- */
- const combinedChildren = node.nodes && combineTextAndInline(node.nodes);
/**
- * Call `transform` recursively on child nodes, and flatten the resulting
- * array.
+ * The transform function mimics the approach of a Remark plugin for
+ * conformity with the other serialization functions. This function converts
+ * Slate nodes to MDAST nodes, and recursively calls itself to process child
+ * nodes to arbitrary depth.
*/
- const children = !isEmpty(combinedChildren) && flatMap(combinedChildren, transform);
-
- /**
- * Run individual nodes through conversion factories.
- */
- return ['text'].includes(node.object) ? convertTextNode(node) : convertNode(node, children);
-}
-
-/**
- * Includes inline nodes as leaves in adjacent text nodes where appropriate, so
- * that mark node combining logic can apply to both text and inline nodes. This
- * is necessary because Slate doesn't allow inline nodes to have marks while
- * inline nodes in MDAST may be nested within mark nodes. Treating them as if
- * they were text is a bit of a necessary hack.
- */
-function combineTextAndInline(nodes) {
- return nodes.reduce((acc, node) => {
- const prevNode = last(acc);
- const prevNodeLeaves = get(prevNode, 'leaves');
- const data = node.data || {};
-
+ function transform(node) {
/**
- * If the previous node has leaves and the current node has marks in data
- * (only happens when we place them on inline nodes here in the parser), or
- * the current node also has leaves (because the previous node was
- * originally an inline node that we've already squashed into a leaf)
- * combine the current node into the previous.
+ * Combine adjacent text and inline nodes before processing so they can
+ * share marks.
*/
- if (!isEmpty(prevNodeLeaves) && !isEmpty(data.marks)) {
- prevNodeLeaves.push({ node, marks: data.marks });
- return acc;
- }
+ const hasBlockChildren = node.nodes && node.nodes[0] && node.nodes[0].object === 'block';
+ const children = hasBlockChildren
+ ? node.nodes.map(transform).filter(v => v)
+ : convertInlineAndTextChildren(node.nodes);
- if (!isEmpty(prevNodeLeaves) && !isEmpty(node.leaves)) {
- prevNode.leaves = prevNodeLeaves.concat(node.leaves);
- return acc;
- }
+ const output = convertBlockNode(node, children);
+ //console.log(JSON.stringify(output, null, 2));
+ return output;
+ }
- /**
- * Break nodes contain a single child text node with a newline character
- * for visual purposes in the editor, but Remark break nodes have no
- * children, so we remove the child node here.
- */
- if (node.type === 'break') {
- acc.push({ object: 'inline', type: 'break' });
- return acc;
- }
-
- /**
- * Convert remaining inline nodes to standalone text nodes with leaves.
- */
- if (node.object === 'inline') {
- acc.push({ object: 'text', leaves: [{ node, marks: data.marks }] });
- return acc;
- }
-
- /**
- * Only remaining case is an actual text node, can be pushed as is.
- */
- acc.push(node);
- return acc;
- }, []);
-}
-
-/**
- * Slate treats inline code decoration as a standard mark, but MDAST does
- * not allow inline code nodes to contain children, only a single text
- * value. An MDAST inline code node can be nested within mark nodes such
- * as "emphasis" and "strong", but it cannot contain them.
- *
- * Because of this, if a "code" mark (translated to MDAST "inlineCode") is
- * in the markTypes array, we make the base text node an "inlineCode" type
- * instead of a standard text node.
- */
-function processCodeMark(markTypes) {
- const isInlineCode = markTypes.includes('inlineCode');
- const filteredMarkTypes = isInlineCode ? without(markTypes, 'inlineCode') : markTypes;
- const textNodeType = isInlineCode ? 'inlineCode' : 'html';
- return { filteredMarkTypes, textNodeType };
-}
-
-/**
- * Converts a Slate Raw text node to an MDAST text node.
- *
- * Slate text nodes without marks often simply have a "text" property with
- * the value. In this case the conversion to MDAST is simple. If a Slate
- * text node does not have a "text" property, it will instead have a
- * "leaves" property containing an array of objects, each with an array of
- * marks, such as "bold" or "italic", along with a "text" property.
- *
- * MDAST instead expresses such marks in a nested structure, with individual
- * nodes for each mark type nested until the deepest mark node, which will
- * contain the text node.
- *
- * To convert a Slate text node's marks to MDAST, we treat each "leaf" as a
- * separate text node, convert the text node itself to an MDAST text node,
- * and then recursively wrap the text node for each mark, collecting the results
- * of each leaf in a single array of child nodes.
- *
- * For example, this Slate text node:
- *
- * {
- * object: 'text',
- * leaves: [
- * {
- * text: 'test',
- * marks: ['bold', 'italic']
- * },
- * {
- * text: 'test two'
- * }
- * ]
- * }
- *
- * ...would be converted to this MDAST nested structure:
- *
- * [
- * {
- * type: 'strong',
- * children: [{
- * type: 'emphasis',
- * children: [{
- * type: 'text',
- * value: 'test'
- * }]
- * }]
- * },
- * {
- * type: 'text',
- * value: 'test two'
- * }
- * ]
- *
- * This example also demonstrates how a single Slate node may need to be
- * replaced with multiple MDAST nodes, so the resulting array must be flattened.
- */
-function convertTextNode(node) {
- /**
- * If the Slate text node has a "leaves" property, translate the Slate AST to
- * a nested MDAST structure. Otherwise, just return an equivalent MDAST text
- * node.
- */
- if (node.leaves) {
- const processedLeaves = node.leaves.map(processLeaves);
- // Compensate for Slate including leading and trailing whitespace in styled text nodes, which
- // cannot be represented in markdown (https://github.com/netlify/netlify-cms/issues/1448)
- for (let i = 0; i < processedLeaves.length; i += 1) {
- const leaf = processedLeaves[i];
- if (leaf.marks.length > 0 && leaf.text && leaf.text.trim() !== leaf.text) {
- const [, leadingWhitespace, trailingWhitespace] = leaf.text.match(/^(\s*).*?(\s*)$/);
- // Move the leading whitespace to a separate unstyled leaf, unless the current leaf
- // is preceded by another one with (at least) the same marks applied:
- if (
- leadingWhitespace.length > 0 &&
- (i === 0 ||
- !leaf.marks.every(
- mark => processedLeaves[i - 1].marks && processedLeaves[i - 1].marks.includes(mark),
- ))
- ) {
- processedLeaves.splice(i, 0, {
- text: leadingWhitespace,
- marks: [],
- textNodeType: leaf.textNodeType,
- });
- i += 1;
- leaf.text = leaf.text.replace(/^\s+/, '');
+ function removeMarkFromNodes(nodes, markType) {
+ return nodes.map(node => {
+ switch (node.type) {
+ case 'link': {
+ const updatedNodes = removeMarkFromNodes(node.nodes, markType);
+ return {
+ ...node,
+ nodes: updatedNodes,
+ };
}
- // Move the trailing whitespace to a separate unstyled leaf, unless the current leaf
- // is followed by another one with (at least) the same marks applied:
- if (
- trailingWhitespace.length > 0 &&
- (i === processedLeaves.length - 1 ||
- !leaf.marks.every(
- mark => processedLeaves[i + 1].marks && processedLeaves[i + 1].marks.includes(mark),
- ))
- ) {
- processedLeaves.splice(i + 1, 0, {
- text: trailingWhitespace,
- marks: [],
- textNodeType: leaf.textNodeType,
- });
- i += 1;
- leaf.text = leaf.text.replace(/\s+$/, '');
+
+ case 'image':
+ case 'break': {
+ const data = omit(node.data, 'marks');
+ return { ...node, data };
}
+
+ default:
+ return {
+ ...node,
+ marks: node.marks.filter(({ type }) => type !== markType),
+ };
+ }
+ });
+ }
+
+ function getNodeMarks(node) {
+ switch (node.type) {
+ case 'link': {
+ // Code marks can't always be condensed together. If all text in a link
+ // is wrapped in a mark, this function returns that mark and the node
+ // ends up nested inside of that mark. Code marks sometimes can't do
+ // that, like when they wrap all of the text content of a link. Here we
+ // remove code marks before processing so that they stay put.
+ const nodesWithoutCode = node.nodes.map(n => ({
+ ...n,
+ marks: n.marks ? n.marks.filter(({ type }) => type !== 'code') : n.marks,
+ }));
+ const childMarks = map(nodesWithoutCode, getNodeMarks);
+ return intersection(...childMarks);
+ }
+
+ case 'break':
+ case 'image':
+ return map(get(node, ['data', 'marks']), mark => mark.type);
+
+ default:
+ return map(node.marks, mark => mark.type);
+ }
+ }
+
+ function getSharedMarks(marks, node) {
+ const nodeMarks = getNodeMarks(node);
+ const sharedMarks = intersection(marks, nodeMarks);
+ if (sharedMarks[0] === 'code') {
+ return nodeMarks.length === 1 ? marks : [];
+ }
+ return sharedMarks;
+ }
+
+ function extractFirstMark(nodes) {
+ let firstGroupMarks = getNodeMarks(nodes[0]) || [];
+
+ // If code mark is present, but there are other marks, process others first.
+ // If only the code mark is present, don't allow it to be shared with other
+ // nodes.
+ if (firstGroupMarks[0] === 'code' && firstGroupMarks.length > 1) {
+ firstGroupMarks = [...without('firstGroupMarks', 'code'), 'code'];
+ }
+
+ let splitIndex = 1;
+
+ if (firstGroupMarks.length > 0) {
+ while (splitIndex < nodes.length) {
+ if (nodes[splitIndex]) {
+ const sharedMarks = getSharedMarks(firstGroupMarks, nodes[splitIndex]);
+ if (sharedMarks.length > 0) {
+ firstGroupMarks = sharedMarks;
+ } else {
+ break;
+ }
+ }
+ splitIndex += 1;
}
}
- const condensedNodes = processedLeaves.reduce(condenseNodesReducer, { nodes: [] });
- return condensedNodes.nodes;
- }
- if (node.object === 'inline') {
- return transform(node);
- }
+ const markType = firstGroupMarks[0];
+ const childNodes = nodes.slice(0, splitIndex);
+ const updatedChildNodes = markType ? removeMarkFromNodes(childNodes, markType) : childNodes;
+ const remainingNodes = nodes.slice(splitIndex);
- return u('html', node.text);
-}
-
-/**
- * Process Slate node leaves in preparation for MDAST transformation.
- */
-function processLeaves(leaf) {
- /**
- * Get an array of the mark types, converted to their MDAST equivalent
- * types.
- */
- const { marks = [], text } = leaf;
- const markTypes = marks.map(mark => markMap[mark.type]);
-
- if (typeof leaf.text === 'string') {
- /**
- * Code marks must be removed from the marks array, and the presence of a
- * code mark changes the text node type that should be used.
- */
- const { filteredMarkTypes, textNodeType } = processCodeMark(markTypes);
- return { text, marks: filteredMarkTypes, textNodeType };
- }
-
- return { node: leaf.node, marks: markTypes };
-}
-
-/**
- * Slate's AST doesn't group adjacent text nodes with the same marks - a
- * change in marks from letter to letter, even if some are in common, results
- * in a separate leaf. For example, given "**a_b_**", transformation to and
- * from Slate's AST will result in "**a****_b_**".
- *
- * MDAST treats styling entities as distinct nodes that contain children, so a
- * "strong" node can contain a plain text node with a sibling "emphasis" node,
- * which contains more text. This reducer serves to create an optimized nested
- * MDAST without the typical redundancies that Slate's AST would produce if
- * transformed as-is. The reducer can be called recursively to produce nested
- * structures.
- */
-function condenseNodesReducer(acc, node, idx, nodes) {
- /**
- * Skip any nodes that are being processed as children of an MDAST node
- * through recursive calls.
- */
- if (typeof acc.nextIndex === 'number' && acc.nextIndex > idx) {
- return acc;
+ return [markType, updatedChildNodes, remainingNodes];
}
/**
- * Processing for nodes with marks.
+ * Converts the strings returned from `splitToNamedParts` to Slate nodes.
*/
- if (node.marks && node.marks.length > 0) {
- /**
- * For each mark on the current node, get the number of consecutive nodes
- * (starting with this one) that have the mark. Whichever mark covers the
- * most nodes is used as the parent node, and the nodes with that mark are
- * processed as children. If the greatest number of consecutive nodes is
- * tied between multiple marks, there is no priority as to which goes
- * first.
- */
- const markLengths = node.marks.map(mark => getMarkLength(mark, nodes.slice(idx)));
- const parentMarkLength = last(sortBy(markLengths, 'length'));
- const { markType: parentType, length: parentLength } = parentMarkLength;
-
- /**
- * Since this and any consecutive nodes with the parent mark are going to
- * be processed as children of the parent mark, this reducer should simply
- * return the accumulator until after the last node to be covered by the
- * new parent node. Here we set the next index that should be processed,
- * if any.
- */
- const newNextIndex = idx + parentLength;
-
- /**
- * Get the set of nodes that should be processed as children of the new
- * parent mark node, run each through the reducer as children of the
- * parent node, and create the parent MDAST node with the resulting
- * children.
- */
- const children = nodes.slice(idx, newNextIndex);
- const denestedChildren = children.map(child => ({
- ...child,
- marks: without(child.marks, parentType),
- }));
- const mdastChildren = denestedChildren.reduce(condenseNodesReducer, { nodes: [], parentType })
- .nodes;
- const mdastNode = u(parentType, mdastChildren);
-
- return { ...acc, nodes: [...acc.nodes, mdastNode], nextIndex: newNextIndex };
+ function splitWhitespace(node, { trailing } = {}) {
+ if (!node.text) {
+ return { trimmedNode: node };
+ }
+ const exp = trailing ? trailingWhitespaceExp : leadingWhitespaceExp;
+ const index = node.text.search(exp);
+ if (index > -1) {
+ const substringIndex = trailing ? index : index + 1;
+ const firstSplit = node.text.substring(0, substringIndex);
+ const secondSplit = node.text.substring(substringIndex);
+ const whitespace = trailing ? secondSplit : firstSplit;
+ const text = trailing ? firstSplit : secondSplit;
+ return { whitespace, trimmedNode: { ...node, text } };
+ }
+ return { trimmedNode: node };
}
- /**
- * Create the base text node, and pass in the array of mark types as data
- * (helpful when optimizing/condensing the final structure).
- */
- const baseNode =
- typeof node.text === 'string'
- ? u(node.textNodeType, { marks: node.marks }, node.text)
- : transform(node.node);
-
- /**
- * Recursively wrap the base text node in the individual mark nodes, if
- * any exist.
- */
- return { ...acc, nodes: [...acc.nodes, baseNode] };
-}
-
-/**
- * Get the number of consecutive Slate nodes containing a given mark beginning
- * from the first received node.
- */
-function getMarkLength(markType, nodes) {
- let length = 0;
- while (nodes[length] && nodes[length].marks.includes(markType)) {
- ++length;
+ function collectCenterNodes(nodes, leadingNode, trailingNode) {
+ switch (nodes.length) {
+ case 0:
+ return [];
+ case 1:
+ return [trailingNode];
+ case 2:
+ return [leadingNode, trailingNode];
+ default:
+ return [leadingNode, ...nodes.slice(1, -1), trailingNode];
+ }
}
- return { markType, length };
-}
-/**
- * Convert a single Slate Raw node to an MDAST node. Uses the unist-builder `u`
- * function to create MDAST nodes.
- */
-function convertNode(node, children) {
- switch (node.type) {
- /**
- * General
- *
- * Convert simple cases that only require a type and children, with no
- * additional properties.
- */
- case 'root':
- case 'paragraph':
- case 'quote':
- case 'list-item':
- case 'table':
- case 'table-row':
- case 'table-cell': {
- return u(typeMap[node.type], children);
+ function normalizeFlankingWhitespace(nodes) {
+ const { whitespace: leadingWhitespace, trimmedNode: leadingNode } = splitWhitespace(nodes[0]);
+ const lastNode = nodes.length > 1 ? last(nodes) : leadingNode;
+ const trailingSplitResult = splitWhitespace(lastNode, { trailing: true });
+ const { whitespace: trailingWhitespace, trimmedNode: trailingNode } = trailingSplitResult;
+ const centerNodes = collectCenterNodes(nodes, leadingNode, trailingNode).filter(val => val);
+ return { leadingWhitespace, centerNodes, trailingWhitespace };
+ }
+
+ function convertInlineAndTextChildren(nodes = []) {
+ const convertedNodes = [];
+ let remainingNodes = nodes;
+
+ while (remainingNodes.length > 0) {
+ const nextNode = remainingNodes[0];
+ if (nextNode.object === 'inline' || (nextNode.marks && nextNode.marks.length > 0)) {
+ const [markType, markNodes, remainder] = extractFirstMark(remainingNodes);
+ /**
+ * A node with a code mark will be a text node, and will not be adjacent
+ * to a sibling code node as the Slate schema requires them to be
+ * merged. Markdown also requires at least a space between inline code
+ * nodes.
+ */
+ if (markType === 'code') {
+ const node = markNodes[0];
+ convertedNodes.push(u(markMap[markType], node.data, node.text));
+ } else if (!markType && markNodes.length === 1 && markNodes[0].object === 'inline') {
+ const node = markNodes[0];
+ convertedNodes.push(convertInlineNode(node, convertInlineAndTextChildren(node.nodes)));
+ } else {
+ const {
+ leadingWhitespace,
+ trailingWhitespace,
+ centerNodes,
+ } = normalizeFlankingWhitespace(markNodes);
+ const children = convertInlineAndTextChildren(centerNodes);
+ const markNode = u(markMap[markType], children);
+
+ // Filter out empty marks, otherwise their output literally by
+ // remark-stringify, eg. an empty bold node becomes "****"
+ if (mdastToString(markNode) === '') {
+ remainingNodes = remainder;
+ continue;
+ }
+ const createText = text => text && u('html', text);
+ const normalizedNodes = [
+ createText(leadingWhitespace),
+ markNode,
+ createText(trailingWhitespace),
+ ].filter(val => val);
+ convertedNodes.push(...normalizedNodes);
+ }
+ remainingNodes = remainder;
+ } else {
+ remainingNodes.shift();
+ convertedNodes.push(u('html', nextNode.text));
+ }
}
- /**
- * Shortcodes
- *
- * Shortcode nodes only exist in Slate's Raw AST if they were inserted
- * via the plugin toolbar in memory, so they should always have
- * shortcode data attached. The "shortcode" data property contains the
- * name of the registered shortcode plugin, and the "shortcodeData" data
- * property contains the data received from the shortcode plugin's
- * `fromBlock` method when the shortcode node was created.
- *
- * Here we create a `shortcode` MDAST node that contains only the shortcode
- * data.
- */
- case 'shortcode': {
- const { data } = node;
- return u(typeMap[node.type], { data });
- }
+ return convertedNodes;
+ }
- /**
- * Headings
- *
- * Slate schemas don't usually infer basic type info from data, so each
- * level of heading is a separately named type. The MDAST schema just
- * has a single "heading" type with the depth stored in a "depth"
- * property on the node. Here we derive the depth from the Slate node
- * type - e.g., for "heading-two", we need a depth value of "2".
- */
- case 'heading-one':
- case 'heading-two':
- case 'heading-three':
- case 'heading-four':
- case 'heading-five':
- case 'heading-six': {
- const depthMap = { one: 1, two: 2, three: 3, four: 4, five: 5, six: 6 };
- const depthText = node.type.split('-')[1];
- const depth = depthMap[depthText];
- return u(typeMap[node.type], { depth }, children);
- }
+ function convertBlockNode(node, children) {
+ switch (node.type) {
+ /**
+ * General
+ *
+ * Convert simple cases that only require a type and children, with no
+ * additional properties.
+ */
+ case 'root':
+ case 'paragraph':
+ case 'quote':
+ case 'list-item':
+ case 'table':
+ case 'table-row':
+ case 'table-cell': {
+ return u(typeMap[node.type], children);
+ }
- /**
- * Code Blocks
- *
- * Code block nodes have a single text child, and may have a code language
- * stored in the "lang" data property. Here we transfer both the node
- * value and the "lang" data property to the new MDAST node.
- */
- case 'code': {
- const value = flatMap(node.nodes, child => {
- return flatMap(child.leaves, 'text');
- }).join('');
- const { lang, ...data } = get(node, 'data', {});
- return u(typeMap[node.type], { lang, data }, value);
- }
+ /**
+ * Shortcodes
+ *
+ * Shortcode nodes only exist in Slate's Raw AST if they were inserted
+ * via the plugin toolbar in memory, so they should always have
+ * shortcode data attached. The "shortcode" data property contains the
+ * name of the registered shortcode plugin, and the "shortcodeData" data
+ * property contains the data received from the shortcode plugin's
+ * `fromBlock` method when the shortcode node was created.
+ *
+ * Here we create a `shortcode` MDAST node that contains only the shortcode
+ * data.
+ */
+ case 'shortcode': {
+ const { data } = node;
+ return u(typeMap[node.type], { data });
+ }
- /**
- * Lists
- *
- * Our Slate schema has separate node types for ordered and unordered
- * lists, but the MDAST spec uses a single type with a boolean "ordered"
- * property to indicate whether the list is numbered. The MDAST spec also
- * allows for a "start" property to indicate the first number used for an
- * ordered list. Here we translate both values to our Slate schema.
- */
- case 'numbered-list':
- case 'bulleted-list': {
- const ordered = node.type === 'numbered-list';
- const props = { ordered, start: get(node.data, 'start') || 1 };
- return u(typeMap[node.type], props, children);
- }
+ /**
+ * Headings
+ *
+ * Slate schemas don't usually infer basic type info from data, so each
+ * level of heading is a separately named type. The MDAST schema just
+ * has a single "heading" type with the depth stored in a "depth"
+ * property on the node. Here we derive the depth from the Slate node
+ * type - e.g., for "heading-two", we need a depth value of "2".
+ */
+ case 'heading-one':
+ case 'heading-two':
+ case 'heading-three':
+ case 'heading-four':
+ case 'heading-five':
+ case 'heading-six': {
+ const depthMap = { one: 1, two: 2, three: 3, four: 4, five: 5, six: 6 };
+ const depthText = node.type.split('-')[1];
+ const depth = depthMap[depthText];
+ const mdastNode = u(typeMap[node.type], { depth }, children);
+ if (mdastToString(mdastNode)) {
+ return mdastNode;
+ }
+ return;
+ }
- /**
- * Breaks
- *
- * Breaks don't have children. We parse them separately for clarity.
- */
- case 'break':
- case 'thematic-break': {
- return u(typeMap[node.type]);
- }
+ /**
+ * Code Blocks
+ *
+ * Code block nodes may have a single text child, or instead be void and
+ * store their value in `data.code`. They also may have a code language
+ * stored in the "lang" data property. Here we transfer both the node value
+ * and the "lang" data property to the new MDAST node, and spread any
+ * remaining data as `data`.
+ */
+ case 'code-block': {
+ const { lang, code, ...data } = get(node, 'data', {});
+ const value = voidCodeBlock ? code : children[0]?.value;
+ return u(typeMap[node.type], { lang, data }, value || '');
+ }
- /**
- * Links
- *
- * The url and title attributes of link nodes are stored in properties on
- * the node for both Slate and Remark schemas.
- */
- case 'link': {
- const { url, title, ...data } = get(node, 'data', {});
- return u(typeMap[node.type], { url, title, data }, children);
- }
+ /**
+ * Lists
+ *
+ * Our Slate schema has separate node types for ordered and unordered
+ * lists, but the MDAST spec uses a single type with a boolean "ordered"
+ * property to indicate whether the list is numbered. The MDAST spec also
+ * allows for a "start" property to indicate the first number used for an
+ * ordered list. Here we translate both values to our Slate schema.
+ */
+ case 'numbered-list':
+ case 'bulleted-list': {
+ const ordered = node.type === 'numbered-list';
+ const props = { ordered, start: get(node.data, 'start') || 1 };
+ return u(typeMap[node.type], props, children);
+ }
- /**
- * Images
- *
- * This transformation is almost identical to that of links, except for the
- * lack of child nodes and addition of `alt` attribute data.
- */
- case 'image': {
- const { url, title, alt, ...data } = get(node, 'data', {});
- return u(typeMap[node.type], { url, title, alt, data });
+ /**
+ * Thematic Break
+ *
+ * Thematic break is a block level break. They cannot have children.
+ */
+ case 'thematic-break': {
+ return u(typeMap[node.type]);
+ }
}
+ }
- /**
- * No default case is supplied because an unhandled case should never
- * occur. In the event that it does, let the error throw (for now).
- */
+ function convertInlineNode(node, children) {
+ switch (node.type) {
+ /**
+ * Break
+ *
+ * Breaks are phrasing level breaks. They cannot have children.
+ */
+ case 'break': {
+ return u(typeMap[node.type]);
+ }
+
+ /**
+ * Links
+ *
+ * The url and title attributes of link nodes are stored in properties on
+ * the node for both Slate and Remark schemas.
+ */
+ case 'link': {
+ const { url, title, ...data } = get(node, 'data', {});
+ return u(typeMap[node.type], { url, title, data }, children);
+ }
+
+ /**
+ * Images
+ *
+ * This transformation is almost identical to that of links, except for the
+ * lack of child nodes and addition of `alt` attribute data.
+ */
+ case 'image': {
+ const { url, title, alt, ...data } = get(node, 'data', {});
+ return u(typeMap[node.type], { url, title, alt, data });
+ }
+ }
}
}
diff --git a/packages/netlify-cms-widget-markdown/src/styles.js b/packages/netlify-cms-widget-markdown/src/styles.js
index f7ff7eb1..9c55e311 100644
--- a/packages/netlify-cms-widget-markdown/src/styles.js
+++ b/packages/netlify-cms-widget-markdown/src/styles.js
@@ -5,7 +5,7 @@ export const editorStyleVars = {
};
export const EditorControlBar = styled.div`
- z-index: 1;
+ z-index: 200;
position: sticky;
top: 0;
margin-bottom: ${editorStyleVars.stickyDistanceBottom};
diff --git a/packages/netlify-cms-widget-markdown/src/types.js b/packages/netlify-cms-widget-markdown/src/types.js
new file mode 100644
index 00000000..22a02787
--- /dev/null
+++ b/packages/netlify-cms-widget-markdown/src/types.js
@@ -0,0 +1,3 @@
+export const SLATE_DEFAULT_BLOCK_TYPE = 'paragraph';
+
+export const SLATE_BLOCK_PARENT_TYPES = ['list-item', 'quote'];
diff --git a/packages/netlify-cms-widget-markdown/test-helpers/h.js b/packages/netlify-cms-widget-markdown/test-helpers/h.js
new file mode 100644
index 00000000..f9bf9cd3
--- /dev/null
+++ b/packages/netlify-cms-widget-markdown/test-helpers/h.js
@@ -0,0 +1,32 @@
+import { createHyperscript } from 'slate-hyperscript';
+
+const h = createHyperscript({
+ blocks: {
+ paragraph: 'paragraph',
+ 'heading-one': 'heading-one',
+ 'heading-two': 'heading-two',
+ 'heading-three': 'heading-three',
+ 'heading-four': 'heading-four',
+ 'heading-five': 'heading-five',
+ 'heading-six': 'heading-six',
+ quote: 'quote',
+ 'code-block': 'code-block',
+ 'bulleted-list': 'bulleted-list',
+ 'numbered-list': 'numbered-list',
+ 'thematic-break': 'thematic-break',
+ table: 'table',
+ },
+ inlines: {
+ link: 'link',
+ break: 'break',
+ image: 'image',
+ },
+ marks: {
+ b: 'bold',
+ i: 'italic',
+ s: 'strikethrough',
+ code: 'code',
+ },
+});
+
+export default h;
diff --git a/packages/netlify-cms-widget-object/src/ObjectControl.js b/packages/netlify-cms-widget-object/src/ObjectControl.js
index 8fc69d65..cbe55b75 100644
--- a/packages/netlify-cms-widget-object/src/ObjectControl.js
+++ b/packages/netlify-cms-widget-object/src/ObjectControl.js
@@ -13,7 +13,8 @@ const styleStrings = {
border-top-right-radius: 0;
`,
objectWidgetTopBarContainer: `
- padding: ${lengths.objectWidgetTopBarContainerPadding}
+ padding: ${lengths.objectWidgetTopBarContainerPadding};
+ overflow: hidden;
`,
};
diff --git a/packages/netlify-cms-widget-text/src/TextControl.js b/packages/netlify-cms-widget-text/src/TextControl.js
index 82979ca0..d69757c2 100644
--- a/packages/netlify-cms-widget-text/src/TextControl.js
+++ b/packages/netlify-cms-widget-text/src/TextControl.js
@@ -1,5 +1,3 @@
-/** @jsx jsx */
-import { jsx } from '@emotion/core';
import React from 'react';
import PropTypes from 'prop-types';
import Textarea from 'react-textarea-autosize';
diff --git a/packages/netlify-cms/package.json b/packages/netlify-cms/package.json
index 49456b2f..dfb4efb2 100644
--- a/packages/netlify-cms/package.json
+++ b/packages/netlify-cms/package.json
@@ -20,9 +20,11 @@
],
"license": "MIT",
"dependencies": {
+ "codemirror": "^5.46.0",
"netlify-cms-app": "^2.10.0-beta.4",
"netlify-cms-media-library-cloudinary": "^1.3.4",
"netlify-cms-media-library-uploadcare": "^0.5.5",
+ "netlify-cms-widget-code": "^1.0.0",
"react": "^16.8.4",
"react-dom": "^16.8.4"
}
diff --git a/packages/netlify-cms/src/extensions.js b/packages/netlify-cms/src/extensions.js
new file mode 100644
index 00000000..ead339c2
--- /dev/null
+++ b/packages/netlify-cms/src/extensions.js
@@ -0,0 +1,27 @@
+import { NetlifyCmsApp as CMS } from 'netlify-cms-app/dist/esm';
+
+// Media libraries
+import uploadcare from 'netlify-cms-media-library-uploadcare';
+import cloudinary from 'netlify-cms-media-library-cloudinary';
+
+// Widgets
+import NetlifyCmsWidgetCode from 'netlify-cms-widget-code';
+
+// Locales
+import * as locales from 'netlify-cms-locales';
+
+CMS.registerMediaLibrary(uploadcare);
+CMS.registerMediaLibrary(cloudinary);
+
+CMS.registerWidget(NetlifyCmsWidgetCode.Widget());
+
+Object.keys(locales).forEach(locale => {
+ CMS.registerLocale(locale, locales[locale]);
+});
+
+CMS.registerEditorComponent({
+ id: 'code-block',
+ label: 'Code Block',
+ widget: 'code',
+ type: 'code-block',
+});
diff --git a/packages/netlify-cms/src/index.js b/packages/netlify-cms/src/index.js
index 5bb2504a..f74f7493 100644
--- a/packages/netlify-cms/src/index.js
+++ b/packages/netlify-cms/src/index.js
@@ -1,8 +1,7 @@
import createReactClass from 'create-react-class';
import React from 'react';
import { NetlifyCmsApp as CMS } from 'netlify-cms-app/dist/esm';
-import './media-libraries';
-import './locales';
+import './extensions';
/**
* Load Netlify CMS automatically if `window.CMS_MANUAL_INIT` is set.
diff --git a/packages/netlify-cms/src/locales.js b/packages/netlify-cms/src/locales.js
deleted file mode 100644
index 3f568e99..00000000
--- a/packages/netlify-cms/src/locales.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { NetlifyCmsApp as CMS } from 'netlify-cms-app/dist/esm';
-import * as locales from 'netlify-cms-locales';
-
-Object.keys(locales).forEach(locale => {
- CMS.registerLocale(locale, locales[locale]);
-});
diff --git a/packages/netlify-cms/src/media-libraries.js b/packages/netlify-cms/src/media-libraries.js
deleted file mode 100644
index 8bfe477d..00000000
--- a/packages/netlify-cms/src/media-libraries.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { NetlifyCmsApp as CMS } from 'netlify-cms-app/dist/esm';
-import uploadcare from 'netlify-cms-media-library-uploadcare';
-import cloudinary from 'netlify-cms-media-library-cloudinary';
-
-CMS.registerMediaLibrary(uploadcare);
-CMS.registerMediaLibrary(cloudinary);
diff --git a/packages/netlify-cms/webpack.config.js b/packages/netlify-cms/webpack.config.js
index a6ad063a..9d80dfc9 100644
--- a/packages/netlify-cms/webpack.config.js
+++ b/packages/netlify-cms/webpack.config.js
@@ -29,7 +29,7 @@ const baseConfig = {
watchContentBase: true,
publicPath: '/dist/',
quiet: true,
- host: 'localhost',
+ host: '0.0.0.0',
port: 8080,
},
};
diff --git a/scripts/externals.js b/scripts/externals.js
index 74a95a27..21c8faba 100644
--- a/scripts/externals.js
+++ b/scripts/externals.js
@@ -55,6 +55,13 @@ module.exports = {
amd: '@emotion/styled',
umd: '@emotion/styled',
},
+ codemirror: {
+ root: 'CodeMirror',
+ commonjs2: 'codemirror',
+ commonjs: 'codemirror',
+ amd: 'codemirror',
+ umd: 'codemirror',
+ },
immutable: {
root: ['NetlifyCmsDefaultExports', 'Immutable'],
commonjs2: 'immutable',
diff --git a/scripts/webpack.js b/scripts/webpack.js
index d1f2fc8d..1ad6310a 100644
--- a/scripts/webpack.js
+++ b/scripts/webpack.js
@@ -1,11 +1,13 @@
const path = require('path');
const webpack = require('webpack');
const FriendlyErrorsWebpackPlugin = require('friendly-errors-webpack-plugin');
+const { flatMap } = require('lodash');
const { toGlobalName, externals } = require('./externals');
const pkg = require(path.join(process.cwd(), 'package.json'));
const isProduction = process.env.NODE_ENV === 'production';
const isTest = process.env.NODE_ENV === 'test';
+const moduleNameToPath = libName => `${path.resolve(__dirname, `../node_modules/${libName}`)}/`;
const rules = () => ({
js: () => ({
@@ -19,11 +21,13 @@ const rules = () => ({
},
},
}),
- css: () => ({
- test: /\.css$/,
- include: [/(ol|redux-notifications|react-datetime)/],
- use: ['to-string-loader', 'css-loader'],
- }),
+ css: () => [
+ {
+ test: /\.css$/,
+ include: ['ol', 'redux-notifications', 'react-datetime', 'codemirror'].map(moduleNameToPath),
+ use: ['to-string-loader', 'css-loader'],
+ },
+ ],
svg: () => ({
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
exclude: [/node_modules/],
@@ -109,7 +113,7 @@ const baseConfig = ({ target = isProduction ? 'umd' : 'umddir' } = {}) => ({
entry: './src/index.js',
output: targetOutputs()[target],
module: {
- rules: Object.values(rules()).map(rule => rule()),
+ rules: flatMap(Object.values(rules()), rule => rule()),
},
plugins: Object.values(plugins()).map(plugin => plugin()),
devtool: isTest ? '' : 'source-map',
diff --git a/yarn.lock b/yarn.lock
index 9c918649..5e57efb2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -302,6 +302,14 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-json-strings" "^7.7.4"
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.4.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz#7db302c83bc30caa89e38fee935635ef6bd11c28"
+ integrity sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.7.4"
+
"@babel/plugin-proposal-object-rest-spread@^7.3.4", "@babel/plugin-proposal-object-rest-spread@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71"
@@ -318,6 +326,14 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.7.4"
+"@babel/plugin-proposal-optional-chaining@^7.2.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.4.tgz#3f04c2de1a942cbd3008324df8144b9cbc0ca0ba"
+ integrity sha512-JmgaS+ygAWDR/STPe3/7y0lNlHgS+19qZ9aC06nYLwQ/XB7c0q5Xs+ksFU3EDnp9EiEsO0dnRAOKeyLHTZuW3A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.7.4"
+
"@babel/plugin-proposal-unicode-property-regex@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb"
@@ -333,7 +349,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-dynamic-import@^7.7.4":
+"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec"
integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==
@@ -354,13 +370,20 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-syntax-jsx@^7.7.4":
+"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec"
integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.7.4.tgz#e53b751d0c3061b1ba3089242524b65a7a9da12b"
+ integrity sha512-XKh/yIRPiQTOeBg0QJjEus5qiSKucKAiApNtO1psqG7D17xmE+X2i5ZqBEuSvo0HRuyPaKaSN/Gy+Ha9KFQolw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46"
@@ -375,6 +398,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-optional-chaining@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901"
+ integrity sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-syntax-top-level-await@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da"
@@ -590,7 +620,7 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-jsx" "^7.7.4"
-"@babel/plugin-transform-react-jsx@^7.7.4":
+"@babel/plugin-transform-react-jsx@^7.3.0", "@babel/plugin-transform-react-jsx@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da"
integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw==
@@ -742,7 +772,7 @@
"@babel/parser" "^7.7.4"
"@babel/types" "^7.7.4"
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4":
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558"
integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==
@@ -774,19 +804,19 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
-"@commitlint/cli@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-8.2.0.tgz#fbf9969e04e2162d985eaa644fdad6ce807aadb6"
- integrity sha512-8fJ5pmytc38yw2QWbTTJmXLfSiWPwMkHH4govo9zJ/+ERPBF2jvlxD/dQvk24ezcizjKc6LFka2edYC4OQ+Dgw==
+"@commitlint/cli@^8.3.3":
+ version "8.3.3"
+ resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-8.3.3.tgz#7a301924d9f361ec3aaf8094dcabbe9e90b51ec5"
+ integrity sha512-7OqY1qPuVZ6R1NmBSBck2TyakOXGJBjJKW9+MJrYUcFvq7NYw3kRLlm9jEAB841n8XsVb1Vp+2QK0Lr+BewYJQ==
dependencies:
- "@commitlint/format" "^8.2.0"
- "@commitlint/lint" "^8.2.0"
- "@commitlint/load" "^8.2.0"
- "@commitlint/read" "^8.2.0"
+ "@commitlint/format" "^8.3.2"
+ "@commitlint/lint" "^8.3.2"
+ "@commitlint/load" "^8.3.3"
+ "@commitlint/read" "^8.3.2"
babel-polyfill "6.26.0"
chalk "2.4.2"
get-stdin "7.0.0"
- lodash "4.17.14"
+ lodash "4.17.15"
meow "5.0.0"
resolve-from "5.0.0"
resolve-global "1.0.0"
@@ -796,111 +826,111 @@
resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-8.2.0.tgz#886a5538e3708e017ec2871e0cbce00f635d3102"
integrity sha512-HuwlHQ3DyVhpK9GHgTMhJXD8Zp8PGIQVpQGYh/iTrEU6TVxdRC61BxIDZvfWatCaiG617Z/U8maRAFrqFM4TqA==
-"@commitlint/ensure@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-8.2.0.tgz#fad0c81c3d3bd09aa5fbcbcc483ae1f39bc8af8f"
- integrity sha512-XZZih/kcRrqK7lEORbSYCfqQw6byfsFbLygRGVdJMlCPGu9E2MjpwCtoj5z7y/lKfUB3MJaBhzn2muJqS1gC6A==
+"@commitlint/ensure@^8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-8.3.0.tgz#f11d7241a89b3530854c22bfe251e02ad79c8b4b"
+ integrity sha512-EX3fdt+APMfbGcYvl9lyPDZ5s5qHW1hdl5f2MVXoN/izydq41sUYJOp3ivEt6SWZS92mCg/HyJL8RNinw+z2aw==
dependencies:
- lodash "4.17.14"
+ lodash "4.17.15"
-"@commitlint/execute-rule@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.2.0.tgz#aefb3744e22613660adefb7ebcccaa60bd24e78d"
- integrity sha512-9MBRthHaulbWTa8ReG2Oii2qc117NuvzhZdnkuKuYLhker7sUXGFcVhLanuWUKGyfyI2o9zVr/NHsNbCCsTzAA==
+"@commitlint/execute-rule@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.3.2.tgz#2bc643d9bf409d9d2f11c40691257d606aa3e2ab"
+ integrity sha512-34xugZLvyXl8blVNweXNpYtho5sfbMRCGjx/z6PeoZJWuC7lv/U40kkqnTcGExNGTCZpcPP/qCle97wDIM88UQ==
-"@commitlint/format@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-8.2.0.tgz#0a2447fadac7c0421ce8a8d7e27dfa2172c737d4"
- integrity sha512-sA77agkDEMsEMrlGhrLtAg8vRexkOofEEv/CZX+4xlANyAz2kNwJvMg33lcL65CBhqKEnRRJRxfZ1ZqcujdKcQ==
+"@commitlint/format@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-8.3.2.tgz#4dd36f66a52b520f574901ce22c464d19febc0e0"
+ integrity sha512-7g69QZ+UcDkOPbHQf0WzetbPxWIou2Cem8ZfU45+2WyYYdNukkRxrdjGllUI6kfWWGrZiPV7sWd32+GCmHMRNA==
dependencies:
chalk "^2.0.1"
-"@commitlint/is-ignored@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-8.2.0.tgz#b6409ab28bf5a80f25e14da17da3916adb230a89"
- integrity sha512-ADaGnKfbfV6KD1pETp0Qf7XAyc75xTy3WJlbvPbwZ4oPdBMsXF0oXEEGMis6qABfU2IXan5/KAJgAFX3vdd0jA==
+"@commitlint/is-ignored@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-8.3.2.tgz#840c3f6612ce8d95ca3f5750c62cf7d1eb855320"
+ integrity sha512-FVxU9Uq6O7REQ5xaBv7m+Un7hD6iSvWDHxF3UdlnRq92y1hLXZgejPYMfGHNyH4krz+rVg+uerBVqJ0Jm4dEiA==
dependencies:
"@types/semver" "^6.0.1"
- semver "6.2.0"
+ semver "6.3.0"
-"@commitlint/lint@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-8.2.0.tgz#aadc606379f3550eb877f16d4f5b103639cbf92a"
- integrity sha512-ch9JN8aR37ufdjoWv50jLfvFz9rWMgLW5HEkMGLsM/51gjekmQYS5NJg8S2+6F5+jmralAO7VkUMI6FukXKX0A==
+"@commitlint/lint@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-8.3.2.tgz#4dd94048981fc2ac47c03e7556799381a6b236d4"
+ integrity sha512-PG9iWB/wqkBSTbtmsDuFh3iz5DijqSqkqBrQAETb8x03OaUzTTtJi+aCZjkqvHle1Z6c3TtvCvz4tTy0K4cm2A==
dependencies:
- "@commitlint/is-ignored" "^8.2.0"
- "@commitlint/parse" "^8.2.0"
- "@commitlint/rules" "^8.2.0"
+ "@commitlint/is-ignored" "^8.3.2"
+ "@commitlint/parse" "^8.3.2"
+ "@commitlint/rules" "^8.3.2"
babel-runtime "^6.23.0"
- lodash "4.17.14"
+ lodash "4.17.15"
-"@commitlint/load@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.2.0.tgz#9ca53a0c795e4f63d796b4d42279e856549add1a"
- integrity sha512-EV6PfAY/p83QynNd1llHxJiNxKmp43g8+7dZbyfHFbsGOdokrCnoelAVZ+WGgktXwLN/uXyfkcIAxwac015UYw==
+"@commitlint/load@^8.3.3":
+ version "8.3.3"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.3.3.tgz#8ddbfd7d199e3a45f897e0109131fb0ba3c13ba4"
+ integrity sha512-YE/9ZZt0T3ZDMUVyIOBVDfRXv9yH2JFKe+toYDQasG4+THwWmZ6fb/K6OmF/QA240/QXG+OgC0lgrWLjEw1yGg==
dependencies:
- "@commitlint/execute-rule" "^8.2.0"
- "@commitlint/resolve-extends" "^8.2.0"
+ "@commitlint/execute-rule" "^8.3.2"
+ "@commitlint/resolve-extends" "^8.3.2"
babel-runtime "^6.23.0"
chalk "2.4.2"
cosmiconfig "^5.2.0"
- lodash "4.17.14"
+ lodash "4.17.15"
resolve-from "^5.0.0"
-"@commitlint/message@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-8.2.0.tgz#bdc0388183f6bc6006c7e7e197a721683011907a"
- integrity sha512-LNsSwDLIFgE3nb/Sb1PIluYNy4Q8igdf4tpJCdv5JJDf7CZCZt3ZTglj0YutZZorpRRuHJsVIB2+dI4bVH3bFw==
+"@commitlint/message@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-8.3.2.tgz#ca17f4a95a76e0ab766170124024f3a9fb07c2d8"
+ integrity sha512-lV+0z6a6+UBrOZnsffuUJ/frmP+9HKMuAaQsZ8/UuFJ23F70v/Mww5451F6gK6Z9mQ9mTVMn5yOF9KDKNOE8jA==
-"@commitlint/parse@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-8.2.0.tgz#de80137e89ee5a2d3029656c9b33e90c88c6f56c"
- integrity sha512-vzouqroTXG6QXApkrps0gbeSYW6w5drpUk7QAeZIcaCSPsQXDM8eqqt98ZzlzLJHo5oPNXPX1AAVSTrssvHemA==
+"@commitlint/parse@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-8.3.2.tgz#0d0f47cd10a5d3dde8e3ee5fc658dd608f157193"
+ integrity sha512-95oRko1imNvDOqRH5sle/jgazp20gMsuAU2ME4VtPS1+FhuHELbhh0L+cBpA8+uhRHnHfIM4OBcH3Uf0nRsOWg==
dependencies:
conventional-changelog-angular "^1.3.3"
- conventional-commits-parser "^2.1.0"
+ conventional-commits-parser "^3.0.0"
lodash "^4.17.11"
-"@commitlint/read@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-8.2.0.tgz#54c6549723d532c74434ee0d74e0459032dc9159"
- integrity sha512-1tBai1VuSQmsOTsvJr3Fi/GZqX3zdxRqYe/yN4i3cLA5S2Y4QGJ5I3l6nGZlKgm/sSelTCVKHltrfWU8s5H7SA==
+"@commitlint/read@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-8.3.2.tgz#8f9876ec9495fa4b6b014ce190b0fd8ec20dbe16"
+ integrity sha512-/fTnmRjJ83d5zC8yVdr9dus9a5+TeHrN1p0xQ3mt9KDCtycNIEH5zFjD7yPk4BijXRvd5qkBPqK/4BNmiI66Ew==
dependencies:
- "@commitlint/top-level" "^8.2.0"
+ "@commitlint/top-level" "^8.3.2"
"@marionebl/sander" "^0.6.0"
babel-runtime "^6.23.0"
- git-raw-commits "^1.3.0"
+ git-raw-commits "^2.0.0"
-"@commitlint/resolve-extends@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.2.0.tgz#b7f2f0c71c10f24b98a199ed11d2c14cfd7a318f"
- integrity sha512-cwi0HUsDcD502HBP8huXfTkVuWmeo1Fiz3GKxNwMBBsJV4+bKa7QrtxbNpXhVuarX7QjWfNTvmW6KmFS7YK9uw==
+"@commitlint/resolve-extends@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.3.2.tgz#bf3f6117c243bda714fcf206e82448132001b818"
+ integrity sha512-8ipCJBLJ6SmPzFvubACpRhmywsOiAf3j//ruBD9r6UBO4UXy9eLyOcVSCPLac9fuZuwijYGdGG/bZRPQpKqjGA==
dependencies:
"@types/node" "^12.0.2"
import-fresh "^3.0.0"
- lodash "4.17.14"
+ lodash "4.17.15"
resolve-from "^5.0.0"
resolve-global "^1.0.0"
-"@commitlint/rules@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-8.2.0.tgz#4cd6a323ca1a3f3d33ae6dc723f8c88f3dcde347"
- integrity sha512-FlqSBBP2Gxt5Ibw+bxdYpzqYR6HI8NIBpaTBhAjSEAduQtdWFMOhF0zsgkwH7lHN7opaLcnY2fXxAhbzTmJQQA==
+"@commitlint/rules@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-8.3.2.tgz#1ff5af93fbda1773fa2a3ce19026cbdff6eb976b"
+ integrity sha512-hKz4hkXAjrYNvr4Z9oxHNlmuW9Y6iHAlYa7I2nXbCTtsAvO5se1kp1hTrk7kVSMjlPOHoWzd8/ygHv2mzIvtrA==
dependencies:
- "@commitlint/ensure" "^8.2.0"
- "@commitlint/message" "^8.2.0"
- "@commitlint/to-lines" "^8.2.0"
+ "@commitlint/ensure" "^8.3.0"
+ "@commitlint/message" "^8.3.2"
+ "@commitlint/to-lines" "^8.3.2"
babel-runtime "^6.23.0"
-"@commitlint/to-lines@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-8.2.0.tgz#dddb5916a457e1a79e437115a9b8eac7bf9ad52a"
- integrity sha512-LXTYG3sMenlN5qwyTZ6czOULVcx46uMy+MEVqpvCgptqr/MZcV/C2J+S2o1DGwj1gOEFMpqrZaE3/1R2Q+N8ng==
+"@commitlint/to-lines@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-8.3.2.tgz#c73a1e3349866cb11d39734bfd21c086c25dfc33"
+ integrity sha512-0czIcX4L+y7XXfOQ2JGRaUJvEKHD/Dg2bKjORO4BG13OVz8XTnCXrNyxiiB/obf7iYjDs7pMT547g5PGzTPbLg==
-"@commitlint/top-level@^8.2.0":
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-8.2.0.tgz#206e7cbc54dbe9494190677f887dd60943fed5b0"
- integrity sha512-Yaw4KmYNy31/HhRUuZ+fupFcDalnfpdu4JGBgGAqS9aBHdMSSWdWqtAaDaxdtWjTZeN3O0sA2gOhXwvKwiDwvw==
+"@commitlint/top-level@^8.3.2":
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-8.3.2.tgz#4f1d1632dbf94ceea6abd8e2c255d3bdaea31302"
+ integrity sha512-VipnLdvhTr+uEQEdMNuOjzjUw1ck+1nofXgQyNzg9lS2DrIZVjFixDJlPjOgqxi8wFKkKUIrNHVgqfx+uQDjyQ==
dependencies:
find-up "^4.0.0"
@@ -922,6 +952,23 @@
debug "^3.1.0"
lodash.once "^4.1.1"
+"@emotion/babel-plugin-jsx-pragmatic@^0.1.4":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin-jsx-pragmatic/-/babel-plugin-jsx-pragmatic-0.1.4.tgz#12fd120ecb202c6110dc98d3edabddafda1515f1"
+ integrity sha512-5LfpS5JWi0e+ss9nQdLByslCSjM2Gl72+WnUg60lJFvGk2ecr0tL86f5z8FbvlhpIhoIIIRBpFKMLr0BuIaLWg==
+ dependencies:
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@emotion/babel-preset-css-prop@^10.0.9":
+ version "10.0.23"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-preset-css-prop/-/babel-preset-css-prop-10.0.23.tgz#7c21a36c97c3ce9e96f5896b56f68b9bbac800bd"
+ integrity sha512-XG1s1SQF8twf/ufh+j3EdVjQW7SjcAPOdPZDxEsVVahoR1mF2/nWl4adc5ROppSr/P84QJEdquA6lmyZWcnaBQ==
+ dependencies:
+ "@babel/plugin-transform-react-jsx" "^7.3.0"
+ "@babel/runtime" "^7.5.5"
+ "@emotion/babel-plugin-jsx-pragmatic" "^0.1.4"
+ babel-plugin-emotion "^10.0.23"
+
"@emotion/babel-utils@^0.6.4":
version "0.6.10"
resolved "https://registry.yarnpkg.com/@emotion/babel-utils/-/babel-utils-0.6.10.tgz#83dbf3dfa933fae9fc566e54fbb45f14674c6ccc"
@@ -2119,6 +2166,11 @@
"@testing-library/dom" "^6.11.0"
"@types/testing-library__react" "^9.1.2"
+"@types/anymatch@*":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
+ integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
+
"@types/babel__core@^7.1.0":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
@@ -2254,11 +2306,21 @@
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==
+"@types/source-list-map@*":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
"@types/stack-utils@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+"@types/tapable@*":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370"
+ integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==
+
"@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0":
version "6.10.0"
resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.10.0.tgz#590d76e3875a7c536dc744eb530cbf51b6483404"
@@ -2274,6 +2336,13 @@
"@types/react-dom" "*"
"@types/testing-library__dom" "*"
+"@types/uglify-js@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
+ integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
+ dependencies:
+ source-map "^0.6.1"
+
"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
@@ -2295,6 +2364,27 @@
"@types/unist" "*"
"@types/vfile-message" "*"
+"@types/webpack-sources@*":
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92"
+ integrity sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==
+ dependencies:
+ "@types/node" "*"
+ "@types/source-list-map" "*"
+ source-map "^0.6.1"
+
+"@types/webpack@^4.4.19":
+ version "4.41.0"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.0.tgz#b813a044d8b0dec7dfcd7622fdbe327bde06eb9a"
+ integrity sha512-tWkdf9nO0zFgAY/EumUKwrDUhraHKDqCPhwfFR/R8l0qnPdgb9le0Gzhvb7uzVpouuDGBgiE//ZdY+5jcZy2TA==
+ dependencies:
+ "@types/anymatch" "*"
+ "@types/node" "*"
+ "@types/tapable" "*"
+ "@types/uglify-js" "*"
+ "@types/webpack-sources" "*"
+ source-map "^0.6.0"
+
"@types/yargs-parser@*":
version "13.1.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
@@ -2602,6 +2692,14 @@ all-contributors-cli@^6.0.0:
request "^2.72.0"
yargs "^15.0.1"
+ally.js@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/ally.js/-/ally.js-1.4.1.tgz#9fb7e6ba58efac4ee9131cb29aa9ee3b540bcf1e"
+ integrity sha1-n7fmuljvrE7pExyymqnuO1QLzx4=
+ dependencies:
+ css.escape "^1.5.0"
+ platform "1.3.3"
+
ansi-colors@^3.0.0:
version "3.2.4"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
@@ -3007,17 +3105,14 @@ babel-core@^7.0.0-bridge.0:
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
-babel-eslint@^10.0.1:
- version "10.0.3"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
- integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==
+babel-eslint@^11.0.0-beta.0:
+ version "11.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-11.0.0-beta.1.tgz#1762faffeaee26877761b9a19af43cef679999a4"
+ integrity sha512-4xDIJZUn6RDNfSfKmrywNT+e37srxxPP+GdciWakL5U36fde3/K7Y/X8XyEquXGQz02tPvzRuF6SNrR61uZ+fA==
dependencies:
- "@babel/code-frame" "^7.0.0"
- "@babel/parser" "^7.0.0"
- "@babel/traverse" "^7.0.0"
- "@babel/types" "^7.0.0"
+ eslint-scope "3.7.1"
eslint-visitor-keys "^1.0.0"
- resolve "^1.12.0"
+ semver "^6.3.0"
babel-jest@^24.5.0, babel-jest@^24.9.0:
version "24.9.0"
@@ -3090,6 +3185,13 @@ babel-plugin-emotion@^9.2.11:
source-map "^0.5.7"
touch "^2.0.1"
+babel-plugin-inline-json-import@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-inline-json-import/-/babel-plugin-inline-json-import-0.3.2.tgz#fdec1a59364d632895d421aec4c9435ccbbcadd3"
+ integrity sha512-QNNJx08KjmMT25Cw7rAPQ6dlREDPiZGDyApHL8KQ9vrQHbrr4PTi7W8g1tMMZPz0jEMd39nx/eH7xjnDNxq5sA==
+ dependencies:
+ decache "^4.5.1"
+
babel-plugin-inline-react-svg@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-inline-react-svg/-/babel-plugin-inline-react-svg-1.1.0.tgz#b39519c78249b3fcf895b541c38b485a2b11b0be"
@@ -3398,13 +3500,6 @@ braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2"
to-regex "^3.0.1"
-braces@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
@@ -3631,6 +3726,11 @@ caller-path@^2.0.0:
dependencies:
caller-callsite "^2.0.0"
+callsite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+ integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
+
callsites@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
@@ -3663,11 +3763,6 @@ camelcase@^2.0.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-camelcase@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
- integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
-
camelcase@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
@@ -3695,7 +3790,7 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-ccount@^1.0.0:
+ccount@^1.0.0, ccount@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386"
integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==
@@ -3949,6 +4044,11 @@ code-point-at@^1.0.0:
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+codemirror@^5.46.0:
+ version "5.49.2"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.49.2.tgz#c84fdaf11b19803f828b0c67060c7bc6d154ccad"
+ integrity sha512-dwJ2HRPHm8w51WB5YTF9J7m6Z5dtkqbU9ntMZ1dqXyFB9IpjoUFDj80ahRVEoVanfIp6pfASJbOlbWdEf8FOzQ==
+
collapse-white-space@^1.0.0, collapse-white-space@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a"
@@ -4041,6 +4141,21 @@ commondir@^1.0.1:
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+commonmark-spec@^0.29.0:
+ version "0.29.0"
+ resolved "https://registry.yarnpkg.com/commonmark-spec/-/commonmark-spec-0.29.0.tgz#5fbfe052f060a0020fbf1ecc917e51cbc0f1fb67"
+ integrity sha512-jmvWU8f4BFfg10eOBrhZwTqRlfSYTkhGAuaFDlfPOCF6d/bgSSV3xPlpw4e7AzCwj7sUDzDsLS7ceLsmIpFV8w==
+
+commonmark@^0.29.0:
+ version "0.29.0"
+ resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.29.0.tgz#0f4b1d7bf9ae07b3b3a2d428ffd1d997b2ec7a7e"
+ integrity sha512-Wc3kvAIm0EK85pHsM95Fev31wEN6/zQpwd2qcLDL8psjHRoUFvUeGHevIJAdToWUuFoX8WI/gmeDauqy32xgJQ==
+ dependencies:
+ entities "~ 1.1.1"
+ mdurl "~ 1.0.1"
+ minimist "~ 1.2.0"
+ string.prototype.repeat "^0.2.0"
+
compare-func@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
@@ -4208,20 +4323,7 @@ conventional-commits-filter@^2.0.2:
lodash.ismatch "^4.4.0"
modify-values "^1.0.0"
-conventional-commits-parser@^2.1.0:
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e"
- integrity sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==
- dependencies:
- JSONStream "^1.0.4"
- is-text-path "^1.0.0"
- lodash "^4.2.1"
- meow "^4.0.0"
- split2 "^2.0.0"
- through2 "^2.0.0"
- trim-off-newlines "^1.0.0"
-
-conventional-commits-parser@^3.0.3:
+conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.3:
version "3.0.8"
resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710"
integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==
@@ -4479,7 +4581,7 @@ css-loader@^3.0.0:
postcss-value-parser "^4.0.2"
schema-utils "^2.6.0"
-css.escape@^1.5.1:
+css.escape@^1.5.0, css.escape@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
@@ -4536,6 +4638,21 @@ cyclist@^1.0.1:
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+cypress-jest-adapter@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/cypress-jest-adapter/-/cypress-jest-adapter-0.0.3.tgz#4f161fb9d88392e1eb163099f31839586297c139"
+ integrity sha512-t0y+k0CM5VO3o+t3aJUHSlWfsDOAEsMjaQtU9sUDtmATYmcuMKCSz7hdHcqTB1+ZEK4+XwIs0Gg05NE35Q/eIA==
+ dependencies:
+ expect "^24.5.0"
+ jest-get-type "^24.3.0"
+
+cypress-plugin-tab@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cypress-plugin-tab/-/cypress-plugin-tab-1.0.3.tgz#8a64a4c189c5d180dc0a97175097c0cc937c1213"
+ integrity sha512-uiadGT+IzoGxKCqYxQXyc5OhHkv4JAT5LWwNTs8R6pBJkBUUC/uZR2ys4jqhqX6mD/ZucAt5p+U9KMr8Ae4fQA==
+ dependencies:
+ ally.js "^1.4.1"
+
cypress@^3.4.1:
version "3.8.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.8.0.tgz#7d4cd08f81f9048ee36760cc9ee3b9014f9e84ab"
@@ -4648,6 +4765,13 @@ debuglog@^1.0.1:
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
+decache@^4.5.1:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/decache/-/decache-4.5.1.tgz#94a977a88a4188672c96550ec4889582ceecdf49"
+ integrity sha512-5J37nATc6FmOTLbcsr9qx7Nm28qQyg1SK4xyEHqM0IBkNhWFp0Sm+vKoWYHD8wq+OUEb9jLyaKFfzzd1A9hcoA==
+ dependencies:
+ callsite "^1.0.0"
+
decamelize-keys@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@@ -5119,7 +5243,7 @@ enhanced-resolve@^4.1.0:
memory-fs "^0.5.0"
tapable "^1.0.0"
-entities@^1.1.1:
+entities@^1.1.1, "entities@~ 1.1.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
@@ -5262,6 +5386,20 @@ escodegen@^1.9.1:
optionalDependencies:
source-map "~0.6.1"
+eslint-config-prettier@^6.5.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9"
+ integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==
+ dependencies:
+ get-stdin "^6.0.0"
+
+eslint-plugin-babel@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023"
+ integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==
+ dependencies:
+ eslint-rule-composer "^0.3.0"
+
eslint-plugin-cypress@^2.6.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.8.0.tgz#95a3fe4aa36dbeccd0337fad09496222905f6d8b"
@@ -5295,6 +5433,19 @@ eslint-plugin-react@^7.12.4:
prop-types "^15.7.2"
resolve "^1.13.1"
+eslint-rule-composer@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"
+ integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
+
+eslint-scope@3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
+ integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -5553,7 +5704,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2:
dependencies:
homedir-polyfill "^1.0.1"
-expect@^24.9.0:
+expect@^24.5.0, expect@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
@@ -5795,13 +5946,6 @@ fill-range@^4.0.0:
repeat-string "^1.6.1"
to-regex-range "^2.1.0"
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -6183,16 +6327,16 @@ git-raw-commits@2.0.0:
split2 "^2.0.0"
through2 "^2.0.0"
-git-raw-commits@^1.3.0:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff"
- integrity sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==
+git-raw-commits@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.3.tgz#f040e67b8445962d4d168903a9e84c4240c17655"
+ integrity sha512-SoSsFL5lnixVzctGEi2uykjA7B5I0AhO9x6kdzvGRHbxsa6JSEgrgy1esRKsfOKE1cgyOJ/KDR2Trxu157sb8w==
dependencies:
dargs "^4.0.1"
lodash.template "^4.0.2"
- meow "^4.0.0"
+ meow "^5.0.0"
split2 "^2.0.0"
- through2 "^2.0.0"
+ through2 "^3.0.0"
git-remote-origin-url@^2.0.0:
version "2.0.0"
@@ -6530,16 +6674,16 @@ hast-util-embedded@^1.0.0:
dependencies:
hast-util-is-element "^1.0.0"
-hast-util-from-parse5@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-1.1.0.tgz#359cc339dc8ccf1dfaca41915ad63fd546130acd"
- integrity sha1-NZzDOdyMzx36ykGRWtY/1UYTCs0=
+hast-util-from-parse5@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.2.tgz#afeadc6aab41e6acfe038645bbefd4005c56a475"
+ integrity sha512-YXFjoRS7ES7PEoLx6uihtSfKTO1s3z/tzGiV5cVpsUiihduogFXubNRCzTIW3yOOGO1nws9CxPq4MbwD39Uo+w==
dependencies:
- camelcase "^3.0.0"
- has "^1.0.1"
- hastscript "^3.0.0"
- property-information "^3.1.0"
- vfile-location "^2.0.0"
+ ccount "^1.0.3"
+ hastscript "^5.0.0"
+ property-information "^5.0.0"
+ web-namespaces "^1.1.2"
+ xtend "^4.0.1"
hast-util-has-property@^1.0.0:
version "1.0.3"
@@ -6564,33 +6708,34 @@ hast-util-parse-selector@^2.0.0:
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.3.tgz#57edd449103900c7f63fd9e6f694ffd7e4634719"
integrity sha512-nxbeqjQNxsvo/uYYAw9kij6td05YVUlf1qti09rVfbWSLT5H6wo3c+USIwX6nzXWk5kFZzXnEqO82856r0aM2Q==
-hast-util-to-html@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-3.1.0.tgz#882c99849e40130e991c042e456d453d95c36cff"
- integrity sha1-iCyZhJ5AEw6ZHAQuRW1FPZXDbP8=
+hast-util-to-html@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-5.0.1.tgz#74cb518b3612b9f1aeb92fd29478c7a092f33953"
+ integrity sha512-zPuZuclFMJAP50wi9FoP3fcjOWmP3A9CqiPiR1nqOoweYDB4Urc2tg4ZITeDOrOjUQG5zArGopeGDuu3+vkGQg==
dependencies:
ccount "^1.0.0"
comma-separated-tokens "^1.0.1"
hast-util-is-element "^1.0.0"
hast-util-whitespace "^1.0.0"
html-void-elements "^1.0.0"
- kebab-case "^1.0.0"
- property-information "^3.1.0"
+ property-information "^5.0.0"
space-separated-tokens "^1.0.0"
stringify-entities "^1.0.1"
unist-util-is "^2.0.0"
xtend "^4.0.1"
-hast-util-to-mdast@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/hast-util-to-mdast/-/hast-util-to-mdast-1.2.0.tgz#2812f744286186043d5d526dfc964ff026be07b7"
- integrity sha512-kYrD+weqqtBwqLHkEMh12YHXPzG1iuRm9NH3qVs7hwGTkE5QrhtdMahVN96JnRnb/MmdvfKCzK42ajgRKjQzNg==
+hast-util-to-mdast@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/hast-util-to-mdast/-/hast-util-to-mdast-4.0.0.tgz#835b0d75febc34d95d83cd0c72b349385768db8f"
+ integrity sha512-3mHEoA5UF0imbdSFR6hhKKzDLF4m5G4nlNziAYS7wdN0ySetgAZT/5moFjWaYfnxPnY/3Ml5li7/ika2cVL+qg==
dependencies:
hast-util-has-property "^1.0.0"
hast-util-is-element "^1.0.0"
hast-util-to-string "^1.0.0"
- rehype-minify-whitespace "^2.0.0"
- unist-util-is "^2.1.0"
+ mdast-util-phrasing "^1.0.0"
+ mdast-util-to-string "^1.0.4"
+ rehype-minify-whitespace "^2.0.3"
+ trim-trailing-lines "^1.1.0"
unist-util-visit "^1.1.1"
xtend "^4.0.1"
@@ -6604,15 +6749,14 @@ hast-util-whitespace@^1.0.0:
resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.3.tgz#6d161b307bd0693b5ec000c7c7e8b5445109ee34"
integrity sha512-AlkYiLTTwPOyxZ8axq2/bCwRUPjIPBfrHkXuCR92B38b3lSdU22R5F/Z4DL6a2kxWpekWq1w6Nj48tWat6GeRA==
-hastscript@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-3.1.0.tgz#66628ba6d7f1ad07d9277dd09028aba7f4934599"
- integrity sha512-8V34dMSDT1Ik+ZSgTzCLdyp89MrWxcxctXPxhmb72GQj1Xkw1aHPM9UaHCWewvH2Q+PVkYUm4ZJVw4T0dgEGNA==
+hastscript@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.1.tgz#71726ee1e97220575d1f29a8e937387d99d48275"
+ integrity sha512-xHo1Hkcqd0LlWNuDL3/BxwhgAGp3d7uEvCMgCTrBY+zsOooPPH+8KAvW8PCgl+GB8H3H44nfSaF0A4BQ+4xlYg==
dependencies:
- camelcase "^3.0.0"
comma-separated-tokens "^1.0.0"
hast-util-parse-selector "^2.0.0"
- property-information "^3.0.0"
+ property-information "^5.0.0"
space-separated-tokens "^1.0.0"
he@^1.1.1:
@@ -6901,6 +7045,11 @@ immediate@~3.0.5:
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
+immer@^3.1.3:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-3.3.0.tgz#ee7cf3a248d5dd2d4eedfbe7dfc1e9be8c72041d"
+ integrity sha512-vlWRjnZqoTHuEjadquVHK3GxsXe1gNoATffLEA8Qbrdd++Xb+wHEFiWtwAKTscMBoi1AsvEMXhYRzAXA8Ex9FQ==
+
immutable@^3.7.6:
version "3.8.2"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
@@ -7127,7 +7276,7 @@ is-binary-path@^1.0.0:
dependencies:
binary-extensions "^1.0.0"
-is-buffer@^1.1.4, is-buffer@^1.1.5:
+is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
@@ -7203,11 +7352,6 @@ is-directory@^0.3.1:
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
-is-empty@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b"
- integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s=
-
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -7273,7 +7417,12 @@ is-hexadecimal@^1.0.0:
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee"
integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==
-is-hotkey@^0.1.1, is-hotkey@^0.1.4:
+is-hotkey@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.4.tgz#c34d2c85d6ec8d09a871dcf71931c8067a824c7d"
+ integrity sha512-Py+aW4r5mBBY18TGzGz286/gKS+fCQ0Hee3qkaiSmEPiD0PqFpe0wuA3l7rTOUKyeXl8Mxf3XzJxIoTlSv+kxA==
+
+is-hotkey@^0.1.4:
version "0.1.6"
resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.6.tgz#c214b1ccdcbda46fba4ba93d2de64915db737471"
integrity sha512-1+hMr0GLPM0M49UDRt9RgE8i+SM29UY4AGRP6sGz6fThOVXqSrEvTMakolhHMcVizJnPNAoMpEmE+Oi1k2NrZQ==
@@ -7303,11 +7452,6 @@ is-number@^3.0.0:
dependencies:
kind-of "^3.0.2"
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
@@ -7404,7 +7548,7 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
-is-text-path@^1.0.0, is-text-path@^1.0.1:
+is-text-path@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
@@ -7672,7 +7816,7 @@ jest-environment-node@^24.9.0:
jest-mock "^24.9.0"
jest-util "^24.9.0"
-jest-get-type@^24.9.0:
+jest-get-type@^24.3.0, jest-get-type@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
@@ -8110,16 +8254,6 @@ jwt-decode@^2.1.0, jwt-decode@^2.2.0:
resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79"
integrity sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=
-kebab-case@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb"
- integrity sha1-P55JkK3K0MaGwOcB92RYaPdfkes=
-
-keycode@^2.1.2:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
- integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=
-
killable@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -8426,11 +8560,6 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@4.17.14:
- version "4.17.14"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
- integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==
-
lodash@4.17.15, lodash@^4.1.1, lodash@^4.11.2, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
@@ -8611,10 +8740,17 @@ mdast-util-definitions@^1.2.0, mdast-util-definitions@^1.2.3:
dependencies:
unist-util-visit "^1.0.0"
-mdast-util-to-hast@^2.2.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-2.5.0.tgz#f087844d255c7540f36906da30ba106c0ee5ee2f"
- integrity sha1-8IeETSVcdUDzaQbaMLoQbA7l7i8=
+mdast-util-phrasing@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-1.0.3.tgz#f71626caa78394a748a082ecae084de17af5520f"
+ integrity sha512-b1Ar28MjmPMMnTDUApnL1AUJY1L/KmBg5+iBLMd8/+0JqXh1sENow9+wj8Mp/SZBYtMlGRUQ1PkBWinPEDVeNQ==
+ dependencies:
+ unist-util-is "^3.0.0"
+
+mdast-util-to-hast@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-4.0.0.tgz#d8467ce28ea73b4648667bc389aa39dfa9f67f18"
+ integrity sha512-yOTZSxR1aPvWRUxVeLaLZ1sCYrK87x2Wusp1bDM/Ao2jETBhYUKITI3nHvgy+HkZW54HuCAhHnS0mTcbECD5Ig==
dependencies:
collapse-white-space "^1.0.0"
detab "^2.0.0"
@@ -8628,12 +8764,12 @@ mdast-util-to-hast@^2.2.0:
unist-util-visit "^1.1.0"
xtend "^4.0.1"
-mdast-util-to-string@^1.0.5:
+mdast-util-to-string@^1.0.4, mdast-util-to-string@^1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.7.tgz#62d8e9c6b2113070d8b497c7dc35bf12796f06ee"
integrity sha512-P+gdtssCoHOX+eJUrrC30Sixqao86ZPlVjR5NEAoy0U79Pfxb1Y0Gntei0+GrnQD4T04X9xA8tcugp90cSmNow==
-mdurl@^1.0.1:
+mdurl@^1.0.1, "mdurl@~ 1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
@@ -8652,6 +8788,11 @@ mem@^4.0.0:
mimic-fn "^2.0.0"
p-is-promise "^2.0.0"
+memoize-one@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906"
+ integrity sha512-2GApq0yI/b22J2j9rhbrAlsHb0Qcz+7yWxeLG8h+95sl1XPUgeLimQSOdur4Vw7cUhrBHwaUZxWFZueojqNRzA==
+
memoize-one@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0"
@@ -8768,14 +8909,6 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
-micromatch@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
- integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
- dependencies:
- braces "^3.0.1"
- picomatch "^2.0.5"
-
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -8863,7 +8996,7 @@ minimist@1.1.x:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
-minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, "minimist@~ 1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
@@ -8953,6 +9086,18 @@ moment@2.24.0, moment@^2.24.0:
resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+monaco-editor-webpack-plugin@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.7.0.tgz#920cbeecca25f15d70d568a7e11b0ba4daf1ae83"
+ integrity sha512-oItymcnlL14Sjd7EF7q+CMhucfwR/2BxsqrXIBrWL6LQplFfAfV+grLEQRmVHeGSBZ/Gk9ptzfueXnWcoEcFuA==
+ dependencies:
+ "@types/webpack" "^4.4.19"
+
+monaco-editor@^0.16.0:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.16.2.tgz#950084ed82eeaef1c8c9d3c1bcab849fe11b2415"
+ integrity sha512-NtGrFzf54jADe7qsWh3lazhS7Kj0XHkJUGBq9fA/Jbwc+sgVcyfsYF6z2AQ7hPqDC+JmdOt/OwFjBnRwqXtx6w==
+
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@@ -9863,10 +10008,10 @@ parse5@4.0.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
-parse5@^2.1.5:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-2.2.3.tgz#0c4fc41c1000c5e6b93d48b03f8083837834e9f6"
- integrity sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=
+parse5@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
@@ -10009,11 +10154,6 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-picomatch@^2.0.5:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5"
- integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==
-
pidtree@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b"
@@ -10079,6 +10219,11 @@ pkg-up@^2.0.0:
dependencies:
find-up "^2.1.0"
+platform@1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.3.tgz#646c77011899870b6a0903e75e997e8e51da7461"
+ integrity sha1-ZGx3ARiZhwtqCQPnXpl+jlHadGE=
+
please-upgrade-node@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942"
@@ -10345,10 +10490,12 @@ propagate@^2.0.0:
resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45"
integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==
-property-information@^3.0.0, property-information@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/property-information/-/property-information-3.2.0.tgz#fd1483c8fbac61808f5fe359e7693a1f48a58331"
- integrity sha1-/RSDyPusYYCPX+NZ52k6H0ilgzE=
+property-information@^5.0.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.3.0.tgz#bc87ac82dc4e72a31bb62040544b1bf9653da039"
+ integrity sha512-IslotQn1hBCZDY7SaJ3zmCjVea219VTwmOk6Pu3z9haU9m4+T8GwaDubur+6NMHEU+Fjs/6/p66z6QULPkcL1w==
+ dependencies:
+ xtend "^4.0.1"
proto-list@~1.2.1:
version "1.2.4"
@@ -10562,6 +10709,11 @@ rc@^1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
+re-resizable@^4.11.0:
+ version "4.11.0"
+ resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-4.11.0.tgz#d5df10bda445c4ec0945751a223bf195afb61890"
+ integrity sha512-dye+7rERqNf/6mDT1iwps+4Gf42420xuZgygF33uX178DxffqcyeuHbBuJ382FIcB5iP6mMZOhfW7kI0uXwb/Q==
+
react-aria-menubutton@^6.0.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/react-aria-menubutton/-/react-aria-menubutton-6.2.0.tgz#0b479a80d90c8a643dedaa865345051698d39f4c"
@@ -10571,6 +10723,11 @@ react-aria-menubutton@^6.0.0:
prop-types "^15.6.0"
teeny-tap "^0.2.0"
+react-codemirror2@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/react-codemirror2/-/react-codemirror2-6.0.0.tgz#180065df57a64026026cde569a9708fdf7656525"
+ integrity sha512-D7y9qZ05FbUh9blqECaJMdDwKluQiO3A9xB+fssd5jKM7YAXucRuEOlX32mJQumUvHUkHRHqXIPBjm6g0FW0Ag==
+
react-datetime@^2.16.3:
version "2.16.3"
resolved "https://registry.yarnpkg.com/react-datetime/-/react-datetime-2.16.3.tgz#7f9ac7d4014a939c11c761d0c22d1fb506cb505e"
@@ -10660,6 +10817,15 @@ react-modal@^3.8.1:
react-lifecycles-compat "^3.0.0"
warning "^4.0.3"
+react-monaco-editor@^0.25.1:
+ version "0.25.1"
+ resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.25.1.tgz#29215061da23d0e4ad7bf928d9403288d5be4e92"
+ integrity sha512-VLksQjt8fmeIZoET9fQgmR0sdCCBFaiss92MwW5JvgO3JfrnhHtrLBqrSQRjtbUmef1EmEKi4gZp5Mh0oidvVg==
+ dependencies:
+ "@types/react" "*"
+ monaco-editor "^0.16.0"
+ prop-types "^15.7.2"
+
react-onclickoutside@^6.5.0:
version "6.9.0"
resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.9.0.tgz#a54bc317ae8cf6131a5d78acea55a11067f37a1f"
@@ -10673,13 +10839,6 @@ react-polyglot@^0.6.0:
hoist-non-react-statics "^2.5.0"
prop-types "^15.5.8"
-react-portal@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-3.2.0.tgz#4224e19b2b05d5cbe730a7ba0e34ec7585de0043"
- integrity sha512-avb1FreAZAVCvNNyS2dCpxZiPYPJnAasHYPxdVBTROgNFeI+KSb+OoMHNsC1GbDawESCriPwCX+qKua6WSPIFw==
- dependencies:
- prop-types "^15.5.8"
-
react-redux@^4.0.0:
version "4.4.10"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.10.tgz#ad57bd1db00c2d0aa7db992b360ce63dd0b80ec5"
@@ -10744,7 +10903,7 @@ react-scroll-sync@^0.6.0:
resolved "https://registry.yarnpkg.com/react-scroll-sync/-/react-scroll-sync-0.6.0.tgz#c87eba2cdd55ae35874277d74b034419d73df59a"
integrity sha512-Frc7pNPIEQY6rUAUwm1wW0an57Xau6X1Sag+Ra2FJT+oDBEBdh4cahrE3oGwtYHPcyWMt74q7vRKLw73cPy6aw==
-react-select@^2.4.2:
+react-select@^2.4.2, react-select@^2.4.3:
version "2.4.4"
resolved "https://registry.yarnpkg.com/react-select/-/react-select-2.4.4.tgz#ba72468ef1060c7d46fbb862b0748f96491f1f73"
integrity sha512-C4QPLgy9h42J/KkdrpVxNmkY6p4lb49fsrbDk/hRcZpX7JvZPNb6mGj+c5SzyEtBv1DmQ9oPH4NmhAFvCrg8Jw==
@@ -11124,7 +11283,7 @@ regjsparser@^0.6.0:
dependencies:
jsesc "~0.5.0"
-rehype-minify-whitespace@^2.0.0:
+rehype-minify-whitespace@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/rehype-minify-whitespace/-/rehype-minify-whitespace-2.0.4.tgz#954bd07b42633566f198df12cb7d816cc3b793bd"
integrity sha512-TQVOvOSURaWNbYepVgSzUofSTRsaAVQe/dH01Mo44u+Gr221jTmUem8l0jlJBAfSOHNaUF4jfDDbyEeb4ueAmA==
@@ -11138,53 +11297,40 @@ rehype-minify-whitespace@^2.0.0:
unist-util-is "^3.0.0"
unist-util-modify-children "^1.0.0"
-rehype-parse@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-3.1.0.tgz#7f5227a597a3f39fc4b938646161539c444ee728"
- integrity sha1-f1InpZej85/EuThkYWFTnERO5yg=
+rehype-parse@^6.0.0:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964"
+ integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==
dependencies:
- hast-util-from-parse5 "^1.0.0"
- parse5 "^2.1.5"
+ hast-util-from-parse5 "^5.0.0"
+ parse5 "^5.0.0"
+ xtend "^4.0.0"
+
+rehype-remark@^5.0.1:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/rehype-remark/-/rehype-remark-5.0.2.tgz#541d6e7bc11d98bac3536831fe052e52157228ce"
+ integrity sha512-ppbJ8cgFeB2uFugT8jaEifqo6qA+fcFAwnQ4DNWdXC2+Si7CMvGhreeflG8mTTNWVnFSP4xu04ZSZnubZiOpfw==
+ dependencies:
+ hast-util-to-mdast "^4.0.0"
+
+rehype-stringify@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-5.0.0.tgz#f66780704824ed31b8945ac1b19093a5dab0efd3"
+ integrity sha512-uQVzP/eLMM6kdM5Myo0mt5rrb5ntCAxFGNobtzMTTdL1+hqc6WNVxB9uwZyckm54qz/0SnDkzgvCV0/AZy4wCw==
+ dependencies:
+ hast-util-to-html "^5.0.0"
xtend "^4.0.1"
-rehype-remark@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/rehype-remark/-/rehype-remark-2.1.0.tgz#84cadd41410d23de8f83e141e92342c2df94c1c8"
- integrity sha1-hMrdQUENI96Pg+FB6SNCwt+Uwcg=
+rehype@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/rehype/-/rehype-7.0.0.tgz#23a0134d341de8b693c02a0fedf96498f5c82b61"
+ integrity sha512-+D+LpHtbA32tzbEW1G9vafZkegKSE+/ij49P+jF64lyJgROO3s8qihpSNdsqJVDxIuhJ0pQcHBhqZoZ3ATtMbQ==
dependencies:
- hast-util-to-mdast "^1.1.0"
+ rehype-parse "^6.0.0"
+ rehype-stringify "^5.0.0"
+ unified "^7.0.0"
-rehype-stringify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-3.0.0.tgz#9fef0868213c2dce2f780b76f3d0488c85e819eb"
- integrity sha1-n+8IaCE8Lc4veAt289BIjIXoGes=
- dependencies:
- hast-util-to-html "^3.0.0"
- xtend "^4.0.1"
-
-remark-parse@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-3.0.1.tgz#1b9f841a44d8f4fbf2246850265459a4eb354c80"
- integrity sha1-G5+EGkTY9PvyJGhQJlRZpOs1TIA=
- dependencies:
- collapse-white-space "^1.0.2"
- has "^1.0.1"
- is-alphabetical "^1.0.0"
- is-decimal "^1.0.0"
- is-whitespace-character "^1.0.0"
- is-word-character "^1.0.0"
- markdown-escapes "^1.0.0"
- parse-entities "^1.0.2"
- repeat-string "^1.5.4"
- state-toggle "^1.0.0"
- trim "0.0.1"
- trim-trailing-lines "^1.0.0"
- unherit "^1.0.4"
- unist-util-remove-position "^1.0.0"
- vfile-location "^2.0.0"
- xtend "^4.0.1"
-
-remark-parse@^6.0.0:
+remark-parse@^6.0.0, remark-parse@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a"
integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==
@@ -11205,34 +11351,14 @@ remark-parse@^6.0.0:
vfile-location "^2.0.0"
xtend "^4.0.1"
-remark-rehype@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-2.0.1.tgz#13e989f89ee15444bd2354dffd767da922b985e3"
- integrity sha1-E+mJ+J7hVES9I1Tf/XZ9qSK5heM=
+remark-rehype@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-4.0.1.tgz#c88541ebdacea7c29dd4dc3e611c00a43e140887"
+ integrity sha512-k1GzhtRhXr1sZjX86OS7H4asQu5uOM9Tro//SpOdRaxax6o43mr7M7Np20ubJ+GM6eYjlEHtPv1rDN2hXs2plw==
dependencies:
- mdast-util-to-hast "^2.2.0"
+ mdast-util-to-hast "^4.0.0"
-remark-stringify@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-3.0.1.tgz#79242bebe0a752081b5809516fa0c06edec069cf"
- integrity sha1-eSQr6+CnUggbWAlRb6DAbt7Aac8=
- dependencies:
- ccount "^1.0.0"
- is-alphanumeric "^1.0.0"
- is-decimal "^1.0.0"
- is-whitespace-character "^1.0.0"
- longest-streak "^2.0.1"
- markdown-escapes "^1.0.0"
- markdown-table "^1.1.0"
- mdast-util-compact "^1.0.0"
- parse-entities "^1.0.2"
- repeat-string "^1.5.4"
- state-toggle "^1.0.0"
- stringify-entities "^1.0.1"
- unherit "^1.0.4"
- xtend "^4.0.1"
-
-remark-stringify@^6.0.0:
+remark-stringify@^6.0.0, remark-stringify@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088"
integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==
@@ -11655,12 +11781,7 @@ semver-compare@^1.0.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@6.2.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db"
- integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==
-
-semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
+semver@6.3.0, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -11833,99 +11954,89 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-slate-base64-serializer@^0.2.34:
+slate-base64-serializer@^0.2.107, slate-base64-serializer@^0.2.112:
version "0.2.112"
resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.112.tgz#791d04a0ae7b9796844f068a904e185f2afc91f9"
integrity sha512-Vo94bkCq8cbFj7Lutdh2RaM9S4WlLxnnMqZPKGUyefklUN4q2EzM/WUH7s9CIlLUH1qRfC/b0V25VJZr5XXTzA==
dependencies:
isomorphic-base64 "^1.0.2"
-slate-dev-environment@^0.1.2, slate-dev-environment@^0.1.4:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/slate-dev-environment/-/slate-dev-environment-0.1.6.tgz#ff22b40ef4cc890ff7706b6b657abc276782424f"
- integrity sha512-DDeNzcpBvdEtPmuLrpPtrth7vnK693fgxzwS6FACu3oMBoXjh0qcJWVBktecPJXJDxcTVkWUpt0dPhfXLMIkWQ==
+slate-dev-environment@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/slate-dev-environment/-/slate-dev-environment-0.2.2.tgz#bd8946e1fe4cf5447060c84a362a1d026ed8b77f"
+ integrity sha512-JZ09llrRQu6JUsLJCUlGC0lB1r1qIAabAkSd454iyYBq6lDuY//Bypi3Jo8yzIfzZ4+mRLdQvl9e8MbeM9l48Q==
dependencies:
is-in-browser "^1.1.3"
-slate-dev-logger@^0.1.39, slate-dev-logger@^0.1.43:
- version "0.1.43"
- resolved "https://registry.yarnpkg.com/slate-dev-logger/-/slate-dev-logger-0.1.43.tgz#77f6ca7207fcbf453a5516f3aa8b19794d1d26dc"
- integrity sha512-GkcPMGzmPVm85AL+jaKnzhIA0UH9ktQDEIDM+FuQtz+TAPcpPCQiRAaZ6I2p2uD0Hq9bImhKSCtHIa0qRxiVGw==
-
-slate-edit-list@^0.11.3:
- version "0.11.3"
- resolved "https://registry.yarnpkg.com/slate-edit-list/-/slate-edit-list-0.11.3.tgz#d27ff2ff93a83bef49131a6a44b87a9558c9d44c"
- integrity sha512-nqaiYYppezMmbsh+JN6vqZl2EexiUTJWwCzJVas8cv+WeRtRmuysn94LKF2VdLIxLmNAe/ZfliIkW9uC/NdO6w==
-
-slate-edit-table@^0.15.1:
- version "0.15.2"
- resolved "https://registry.yarnpkg.com/slate-edit-table/-/slate-edit-table-0.15.2.tgz#f26b67451b507f936106151f55a0bffbdbca0213"
- integrity sha1-8mtnRRtQf5NhBhUfVaC/+9vKAhM=
-
-slate-hotkeys@^0.1.2:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/slate-hotkeys/-/slate-hotkeys-0.1.4.tgz#5b10b2a178affc60827f9284d4c0a5d7e5041ffe"
- integrity sha1-WxCyoXiv/GCCf5KE1MCl1+UEH/4=
+slate-hotkeys@^0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/slate-hotkeys/-/slate-hotkeys-0.2.9.tgz#0cc9eb750a49ab9ef11601305b7c82b5402348e3"
+ integrity sha512-y+C/s5vJEmBxo8fIqHmUcdViGwALL/A6Qow3sNG1OHYD5SI11tC2gfYtGbPh+2q0H7O4lufffCmFsP5bMaDHqA==
dependencies:
- is-hotkey "^0.1.1"
- slate-dev-environment "^0.1.4"
+ is-hotkey "0.1.4"
+ slate-dev-environment "^0.2.2"
-slate-plain-serializer@^0.5.15:
- version "0.5.41"
- resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.5.41.tgz#dc2d219602c2cb8dc710ac660e108f3b3cc4dc80"
- integrity sha512-KPC2T5PT29JN7uxpmpg/xIGO1YjNmpTfghkGsUKBx7HHYjGe5c9jEApolTvzNy3F3w+wGQNsiT+aN6dn9m6sFA==
+slate-hyperscript@^0.13.3:
+ version "0.13.9"
+ resolved "https://registry.yarnpkg.com/slate-hyperscript/-/slate-hyperscript-0.13.9.tgz#474327b3e0fa942578d73d94e7dd9a9506489c5b"
+ integrity sha512-VckpITrnUmeXryJwT9TgN6B+8oO2H6iZQ9Qnn9XWYMHoMR2ekOj6bChgw1r9K9+RA3EcJLQculW5vSel+yHDpg==
dependencies:
- slate-dev-logger "^0.1.43"
+ is-plain-object "^2.0.4"
-slate-prop-types@^0.4.32:
- version "0.4.67"
- resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.4.67.tgz#c6aa74195466546a44fcb85d1c7b15fefe36ce6b"
- integrity sha512-FmdwitAw1Y69JHm326dfwP6Zd6R99jz1Im8jvKcnG2hytk72I1vIv6ct2CkNGwc3sg90+OIO/Rf18frYxxoTzw==
+slate-plain-serializer@^0.7.1, slate-plain-serializer@^0.7.11:
+ version "0.7.11"
+ resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.7.11.tgz#74ff6eb949e9fbd92ad98ed833d74d5082f2688b"
+ integrity sha512-vzXQ68GiHHcTUcAB6ggf2qN/sX9BoLs77SMHacp5Gkg+oHAA/NxRzRH4efDAhpiJqfJZDrA3rQySK6+Y7KAuwg==
-slate-react@0.12.9:
- version "0.12.9"
- resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.12.9.tgz#6cb6f1fa86c868f56b5dce064146520545884351"
- integrity sha1-bLbx+obIaPVrXc4GQUZSBUWIQ1E=
+slate-prop-types@^0.5.42:
+ version "0.5.42"
+ resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.5.42.tgz#4ec444cc67ee1d338536ed3213dcbf9a7a0eaa25"
+ integrity sha512-3n3556FDs9/cyhRdDMryVB1PJvWeu+p3dx9TvHtONybud4tfulWk4r175JoVWcFZCUFGFQK7IbObUbz1MWNKCg==
+
+slate-react-placeholder@^0.2.9:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/slate-react-placeholder/-/slate-react-placeholder-0.2.9.tgz#30f450a05d4871c7d1a27668ebe7907861e7ca74"
+ integrity sha512-YSJ9Gb4tGpbzPje3eNKtu26hWM8ApxTk9RzjK+6zfD5V/RMTkuWONk24y6c9lZk0OAYNZNUmrnb/QZfU3j9nag==
+
+slate-react@^0.22.0:
+ version "0.22.10"
+ resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.22.10.tgz#01296dadb707869ace6cb21d336c90bedfb567bf"
+ integrity sha512-B2Ms1u/REbdd8yKkOItKgrw/tX8klgz5l5x6PP86+oh/yqmB6EHe0QyrYlQ9fc3WBlJUVTOL+nyAP1KmlKj2/w==
dependencies:
debug "^3.1.0"
get-window "^1.1.1"
is-window "^1.0.2"
- keycode "^2.1.2"
lodash "^4.1.1"
+ memoize-one "^4.0.0"
prop-types "^15.5.8"
react-immutable-proptypes "^2.1.0"
- react-portal "^3.1.0"
selection-is-backward "^1.0.0"
- slate-base64-serializer "^0.2.34"
- slate-dev-environment "^0.1.2"
- slate-dev-logger "^0.1.39"
- slate-hotkeys "^0.1.2"
- slate-plain-serializer "^0.5.15"
- slate-prop-types "^0.4.32"
+ slate-base64-serializer "^0.2.112"
+ slate-dev-environment "^0.2.2"
+ slate-hotkeys "^0.2.9"
+ slate-plain-serializer "^0.7.11"
+ slate-prop-types "^0.5.42"
+ slate-react-placeholder "^0.2.9"
+ tiny-invariant "^1.0.1"
+ tiny-warning "^0.0.3"
-slate-schema-violations@^0.1.20:
- version "0.1.39"
- resolved "https://registry.yarnpkg.com/slate-schema-violations/-/slate-schema-violations-0.1.39.tgz#854ab5624136419cef4c803b1823acabe11f1c15"
- integrity sha512-SNRoV9Ii5UqjNqAKcIw7aAOMwgI45zsn86ue2n8NVLNOCe3fUI35cjq6l3fdvmRYw4X/GcZqzhpQsizHD3ts6A==
+slate-soft-break@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/slate-soft-break/-/slate-soft-break-0.9.0.tgz#7fb2a22eb8600717ee299f7866469cb9c705a53d"
+ integrity sha512-iTy2bl/G+tphN10YQBOPDRxDqgM46ZH1UUz0ublmL6PLtwJ3jJK1n08w37YxnY/ge4aW31UN386KV6qvFx6Hsw==
-slate-soft-break@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/slate-soft-break/-/slate-soft-break-0.6.1.tgz#b5e9ccf3cb876168c10266428274e2523b0d3dd9"
- integrity sha512-PTujwU6B8vKO86Yqj2TXcryxkal6PBmFrUhZwZF6fQlhlLUaJAMYQX60blGvO7tncDxyofxxIkBKdGdjL3JldA==
-
-slate@^0.34.0:
- version "0.34.7"
- resolved "https://registry.yarnpkg.com/slate/-/slate-0.34.7.tgz#5908e1d0fc092a2212488beca65671f01e0eb80a"
- integrity sha1-WQjh0PwJKiISSIvsplZx8B4OuAo=
+slate@^0.47.0:
+ version "0.47.9"
+ resolved "https://registry.yarnpkg.com/slate/-/slate-0.47.9.tgz#090597dd790e79718f782994907d34a903739443"
+ integrity sha512-EK4O6b7lGt+g5H9PGw9O5KCM4RrOvOgE9mPi3rzQ0zDRlgAb2ga4TdpS6XNQbrsJWsc8I1fjaSsUeCqCUhhi9A==
dependencies:
debug "^3.1.0"
direction "^0.1.5"
esrever "^0.2.0"
- is-empty "^1.0.0"
is-plain-object "^2.0.4"
lodash "^4.17.4"
- slate-dev-logger "^0.1.39"
- slate-schema-violations "^0.1.20"
+ tiny-invariant "^1.0.1"
+ tiny-warning "^0.0.3"
type-of "^2.0.1"
slice-ansi@0.0.4:
@@ -12324,6 +12435,11 @@ string.prototype.padend@^3.0.0:
define-properties "^1.1.3"
es-abstract "^1.17.0-next.1"
+string.prototype.repeat@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf"
+ integrity sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8=
+
string.prototype.trim@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d"
@@ -12461,6 +12577,14 @@ strong-log-transformer@^2.0.0:
minimist "^1.2.0"
through "^2.3.4"
+style-loader@^0.23.1:
+ version "0.23.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925"
+ integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==
+ dependencies:
+ loader-utils "^1.1.0"
+ schema-utils "^1.0.0"
+
style-search@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
@@ -12476,16 +12600,6 @@ stylelint-config-styled-components@^0.1.1:
resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede"
integrity sha512-z5Xz/9GmvxO6e/DLzBMwkB85zHxEEjN6K7Cj80Bi+o/9vR9eS3GX3E9VuMnX9WLFYulqbqLtTapGGY28JBiy9Q==
-stylelint-processor-styled-components@^1.5.2:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.9.0.tgz#597fc40b5a2e02c9e01a810212406c3a7ff2e3ef"
- integrity sha512-tWsCnURm8uqqVySWsGfXdto1qR/0MaATGx2ovWu/hqG+gnrjGZZOdeNEIEb12tpIbCnLV0a6q1Bb3yhDjGGzSQ==
- dependencies:
- "@babel/parser" "^7.0.0"
- "@babel/traverse" "^7.0.0"
- micromatch "^4.0.2"
- postcss "^7.0.0"
-
stylelint@^9.10.1:
version "9.10.1"
resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d"
@@ -12774,11 +12888,16 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
-tiny-invariant@^1.0.2:
+tiny-invariant@^1.0.1, tiny-invariant@^1.0.2:
version "1.0.6"
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73"
integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==
+tiny-warning@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-0.0.3.tgz#1807eb4c5f81784a6354d58ea1d5024f18c6c81f"
+ integrity sha512-r0SSA5Y5IWERF9Xh++tFPx0jITBgGggOsRLDWWew6YRw/C2dr4uNO1fw1vanrBmHsICmPyMLNBZboTlxUmUuaA==
+
tiny-warning@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
@@ -12833,13 +12952,6 @@ to-regex-range@^2.1.0:
is-number "^3.0.0"
repeat-string "^1.6.1"
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
to-regex@^3.0.1, to-regex@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
@@ -12927,7 +13039,7 @@ trim-off-newlines@^1.0.0:
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
-trim-trailing-lines@^1.0.0:
+trim-trailing-lines@^1.0.0, trim-trailing-lines@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a"
integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==
@@ -13089,19 +13201,7 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
-unified@^6.1.4:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba"
- integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==
- dependencies:
- bail "^1.0.0"
- extend "^3.0.0"
- is-plain-obj "^1.1.0"
- trough "^1.0.0"
- vfile "^2.0.0"
- x-is-string "^0.1.0"
-
-unified@^7.0.0:
+unified@^7.0.0, unified@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13"
integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==
@@ -13151,7 +13251,7 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
-unist-builder@^1.0.1, unist-builder@^1.0.2:
+unist-builder@^1.0.1, unist-builder@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17"
integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==
@@ -13170,7 +13270,7 @@ unist-util-generated@^1.1.0:
resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42"
integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==
-unist-util-is@^2.0.0, unist-util-is@^2.1.0:
+unist-util-is@^2.0.0:
version "2.1.3"
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20"
integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==
@@ -13211,19 +13311,14 @@ unist-util-stringify-position@^2.0.0:
dependencies:
"@types/unist" "^2.0.2"
-unist-util-visit-parents@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06"
- integrity sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==
-
-unist-util-visit-parents@^2.0.0:
+unist-util-visit-parents@^2.0.0, unist-util-visit-parents@^2.0.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
dependencies:
unist-util-is "^3.0.0"
-unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1:
+unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1, unist-util-visit@^1.4.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
@@ -13423,16 +13518,6 @@ vfile-message@^1.0.0:
dependencies:
unist-util-stringify-position "^1.1.1"
-vfile@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a"
- integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==
- dependencies:
- is-buffer "^1.1.4"
- replace-ext "1.0.0"
- unist-util-stringify-position "^1.0.0"
- vfile-message "^1.0.0"
-
vfile@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803"
@@ -13525,6 +13610,11 @@ weak-map@^1.0.5:
resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb"
integrity sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=
+web-namespaces@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.3.tgz#9bbf5c99ff0908d2da031f1d732492a96571a83f"
+ integrity sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA==
+
webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"