| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 | // CodeMirror, copyright (c) by Marijn Haverbeke and others// Distributed under an MIT license: http://codemirror.net/LICENSE(function() {  var mode = CodeMirror.getMode({tabSize: 4}, "gfm");  function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }  var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "gfm", highlightFormatting: true});  function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); }  FT("codeBackticks",     "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]");  FT("doubleBackticks",     "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]");  FT("codeBlock",     "[comment&formatting&formatting-code-block ```css]",     "[tag foo]",     "[comment&formatting&formatting-code-block ```]");  FT("taskList",     "[variable-2&formatting&formatting-list&formatting-list-ul - ][meta&formatting&formatting-task [ ]]][variable-2  foo]",     "[variable-2&formatting&formatting-list&formatting-list-ul - ][property&formatting&formatting-task [x]]][variable-2  foo]");  FT("formatting_strikethrough",     "[strikethrough&formatting&formatting-strikethrough ~~][strikethrough foo][strikethrough&formatting&formatting-strikethrough ~~]");  FT("formatting_strikethrough",     "foo [strikethrough&formatting&formatting-strikethrough ~~][strikethrough bar][strikethrough&formatting&formatting-strikethrough ~~]");  MT("emInWordAsterisk",     "foo[em *bar*]hello");  MT("emInWordUnderscore",     "foo_bar_hello");  MT("emStrongUnderscore",     "[strong __][em&strong _foo__][em _] bar");  MT("fencedCodeBlocks",     "[comment ```]",     "[comment foo]",     "",     "[comment ```]",     "bar");  MT("fencedCodeBlockModeSwitching",     "[comment ```javascript]",     "[variable foo]",     "",     "[comment ```]",     "bar");  MT("fencedCodeBlockModeSwitchingObjc",     "[comment ```objective-c]",     "[keyword @property] [variable NSString] [operator *] [variable foo];",     "[comment ```]",     "bar");  MT("fencedCodeBlocksNoTildes",     "~~~",     "foo",     "~~~");  MT("taskListAsterisk",     "[variable-2 * []] foo]", // Invalid; must have space or x between []     "[variable-2 * [ ]]bar]", // Invalid; must have space after ]     "[variable-2 * [x]]hello]", // Invalid; must have space after ]     "[variable-2 * ][meta [ ]]][variable-2  [world]]]", // Valid; tests reference style links     "    [variable-3 * ][property [x]]][variable-3  foo]"); // Valid; can be nested  MT("taskListPlus",     "[variable-2 + []] foo]", // Invalid; must have space or x between []     "[variable-2 + [ ]]bar]", // Invalid; must have space after ]     "[variable-2 + [x]]hello]", // Invalid; must have space after ]     "[variable-2 + ][meta [ ]]][variable-2  [world]]]", // Valid; tests reference style links     "    [variable-3 + ][property [x]]][variable-3  foo]"); // Valid; can be nested  MT("taskListDash",     "[variable-2 - []] foo]", // Invalid; must have space or x between []     "[variable-2 - [ ]]bar]", // Invalid; must have space after ]     "[variable-2 - [x]]hello]", // Invalid; must have space after ]     "[variable-2 - ][meta [ ]]][variable-2  [world]]]", // Valid; tests reference style links     "    [variable-3 - ][property [x]]][variable-3  foo]"); // Valid; can be nested  MT("taskListNumber",     "[variable-2 1. []] foo]", // Invalid; must have space or x between []     "[variable-2 2. [ ]]bar]", // Invalid; must have space after ]     "[variable-2 3. [x]]hello]", // Invalid; must have space after ]     "[variable-2 4. ][meta [ ]]][variable-2  [world]]]", // Valid; tests reference style links     "    [variable-3 1. ][property [x]]][variable-3  foo]"); // Valid; can be nested  MT("SHA",     "foo [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] bar");  MT("SHAEmphasis",     "[em *foo ][em&link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]");  MT("shortSHA",     "foo [link be6a8cc] bar");  MT("tooShortSHA",     "foo be6a8c bar");  MT("longSHA",     "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar");  MT("badSHA",     "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar");  MT("userSHA",     "foo [link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] hello");  MT("userSHAEmphasis",     "[em *foo ][em&link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]");  MT("userProjectSHA",     "foo [link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] world");  MT("userProjectSHAEmphasis",     "[em *foo ][em&link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]");  MT("num",     "foo [link #1] bar");  MT("numEmphasis",     "[em *foo ][em&link #1][em *]");  MT("badNum",     "foo #1bar hello");  MT("userNum",     "foo [link bar#1] hello");  MT("userNumEmphasis",     "[em *foo ][em&link bar#1][em *]");  MT("userProjectNum",     "foo [link bar/hello#1] world");  MT("userProjectNumEmphasis",     "[em *foo ][em&link bar/hello#1][em *]");  MT("vanillaLink",     "foo [link http://www.example.com/] bar");  MT("vanillaLinkNoScheme",     "foo [link www.example.com] bar");  MT("vanillaLinkHttps",     "foo [link https://www.example.com/] bar");  MT("vanillaLinkDataSchema",     "foo [link data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==] bar");  MT("vanillaLinkPunctuation",     "foo [link http://www.example.com/]. bar");  MT("vanillaLinkExtension",     "foo [link http://www.example.com/index.html] bar");  MT("vanillaLinkEmphasis",     "foo [em *][em&link http://www.example.com/index.html][em *] bar");  MT("notALink",     "foo asfd:asdf bar");  MT("notALink",     "[comment ```css]",     "[tag foo] {[property color]:[keyword black];}",     "[comment ```][link http://www.example.com/]");  MT("notALink",     "[comment ``foo `bar` http://www.example.com/``] hello");  MT("notALink",     "[comment `foo]",     "[comment&link http://www.example.com/]",     "[comment `] foo",     "",     "[link http://www.example.com/]");  MT("headerCodeBlockGithub",     "[header&header-1 # heading]",     "",     "[comment ```]",     "[comment code]",     "[comment ```]",     "",     "Commit: [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2]",     "Issue: [link #1]",     "Link: [link http://www.example.com/]");  MT("strikethrough",     "[strikethrough ~~foo~~]");  MT("strikethroughWithStartingSpace",     "~~ foo~~");  MT("strikethroughUnclosedStrayTildes",    "[strikethrough ~~foo~~~]");  MT("strikethroughUnclosedStrayTildes",     "[strikethrough ~~foo ~~]");  MT("strikethroughUnclosedStrayTildes",    "[strikethrough ~~foo ~~ bar]");  MT("strikethroughUnclosedStrayTildes",    "[strikethrough ~~foo ~~ bar~~]hello");  MT("strikethroughOneLetter",     "[strikethrough ~~a~~]");  MT("strikethroughWrapped",     "[strikethrough ~~foo]",     "[strikethrough foo~~]");  MT("strikethroughParagraph",     "[strikethrough ~~foo]",     "",     "foo[strikethrough ~~bar]");  MT("strikethroughEm",     "[strikethrough ~~foo][em&strikethrough *bar*][strikethrough ~~]");  MT("strikethroughEm",     "[em *][em&strikethrough ~~foo~~][em *]");  MT("strikethroughStrong",     "[strikethrough ~~][strong&strikethrough **foo**][strikethrough ~~]");  MT("strikethroughStrong",     "[strong **][strong&strikethrough ~~foo~~][strong **]");})();
 |