2016-07-23 07:29:20 +02:00
|
|
|
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2019-10-15 10:40:42 +02:00
|
|
|
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
2016-07-23 07:29:20 +02:00
|
|
|
|
|
|
|
(function() {
|
|
|
|
var mode = CodeMirror.getMode({tabSize: 4}, 'textile');
|
|
|
|
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
|
|
|
|
|
|
|
|
MT('simpleParagraphs',
|
|
|
|
'Some text.',
|
|
|
|
'',
|
|
|
|
'Some more text.');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Phrase Modifiers
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('em',
|
|
|
|
'foo [em _bar_]');
|
|
|
|
|
|
|
|
MT('emBoogus',
|
|
|
|
'code_mirror');
|
|
|
|
|
|
|
|
MT('strong',
|
|
|
|
'foo [strong *bar*]');
|
|
|
|
|
|
|
|
MT('strongBogus',
|
|
|
|
'3 * 3 = 9');
|
|
|
|
|
|
|
|
MT('italic',
|
|
|
|
'foo [em __bar__]');
|
|
|
|
|
|
|
|
MT('italicBogus',
|
|
|
|
'code__mirror');
|
|
|
|
|
|
|
|
MT('bold',
|
|
|
|
'foo [strong **bar**]');
|
|
|
|
|
|
|
|
MT('boldBogus',
|
|
|
|
'3 ** 3 = 27');
|
|
|
|
|
|
|
|
MT('simpleLink',
|
2019-10-15 10:40:42 +02:00
|
|
|
'[link "CodeMirror":https://codemirror.net]');
|
2016-07-23 07:29:20 +02:00
|
|
|
|
|
|
|
MT('referenceLink',
|
|
|
|
'[link "CodeMirror":code_mirror]',
|
|
|
|
'Normal Text.',
|
2019-10-15 10:40:42 +02:00
|
|
|
'[link [[code_mirror]]https://codemirror.net]');
|
2016-07-23 07:29:20 +02:00
|
|
|
|
|
|
|
MT('footCite',
|
|
|
|
'foo bar[qualifier [[1]]]');
|
|
|
|
|
|
|
|
MT('footCiteBogus',
|
|
|
|
'foo bar[[1a2]]');
|
|
|
|
|
|
|
|
MT('special-characters',
|
|
|
|
'Registered [tag (r)], ' +
|
|
|
|
'Trademark [tag (tm)], and ' +
|
|
|
|
'Copyright [tag (c)] 2008');
|
|
|
|
|
|
|
|
MT('cite',
|
|
|
|
"A book is [keyword ??The Count of Monte Cristo??] by Dumas.");
|
|
|
|
|
|
|
|
MT('additionAndDeletion',
|
|
|
|
'The news networks declared [negative -Al Gore-] ' +
|
|
|
|
'[positive +George W. Bush+] the winner in Florida.');
|
|
|
|
|
|
|
|
MT('subAndSup',
|
|
|
|
'f(x, n) = log [builtin ~4~] x [builtin ^n^]');
|
|
|
|
|
|
|
|
MT('spanAndCode',
|
|
|
|
'A [quote %span element%] and [atom @code element@]');
|
|
|
|
|
|
|
|
MT('spanBogus',
|
|
|
|
'Percentage 25% is not a span.');
|
|
|
|
|
|
|
|
MT('citeBogus',
|
|
|
|
'Question? is not a citation.');
|
|
|
|
|
|
|
|
MT('codeBogus',
|
|
|
|
'user@example.com');
|
|
|
|
|
|
|
|
MT('subBogus',
|
|
|
|
'~username');
|
|
|
|
|
|
|
|
MT('supBogus',
|
|
|
|
'foo ^ bar');
|
|
|
|
|
|
|
|
MT('deletionBogus',
|
|
|
|
'3 - 3 = 0');
|
|
|
|
|
|
|
|
MT('additionBogus',
|
|
|
|
'3 + 3 = 6');
|
|
|
|
|
|
|
|
MT('image',
|
|
|
|
'An image: [string !http://www.example.com/image.png!]');
|
|
|
|
|
|
|
|
MT('imageWithAltText',
|
|
|
|
'An image: [string !http://www.example.com/image.png (Alt Text)!]');
|
|
|
|
|
|
|
|
MT('imageWithUrl',
|
|
|
|
'An image: [string !http://www.example.com/image.png!:http://www.example.com/]');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Headers
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('h1',
|
|
|
|
'[header&header-1 h1. foo]');
|
|
|
|
|
|
|
|
MT('h2',
|
|
|
|
'[header&header-2 h2. foo]');
|
|
|
|
|
|
|
|
MT('h3',
|
|
|
|
'[header&header-3 h3. foo]');
|
|
|
|
|
|
|
|
MT('h4',
|
|
|
|
'[header&header-4 h4. foo]');
|
|
|
|
|
|
|
|
MT('h5',
|
|
|
|
'[header&header-5 h5. foo]');
|
|
|
|
|
|
|
|
MT('h6',
|
|
|
|
'[header&header-6 h6. foo]');
|
|
|
|
|
|
|
|
MT('h7Bogus',
|
|
|
|
'h7. foo');
|
|
|
|
|
|
|
|
MT('multipleHeaders',
|
|
|
|
'[header&header-1 h1. Heading 1]',
|
|
|
|
'',
|
|
|
|
'Some text.',
|
|
|
|
'',
|
|
|
|
'[header&header-2 h2. Heading 2]',
|
|
|
|
'',
|
|
|
|
'More text.');
|
|
|
|
|
|
|
|
MT('h1inline',
|
|
|
|
'[header&header-1 h1. foo ][header&header-1&em _bar_][header&header-1 baz]');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Lists
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('ul',
|
|
|
|
'foo',
|
|
|
|
'bar',
|
|
|
|
'',
|
|
|
|
'[variable-2 * foo]',
|
|
|
|
'[variable-2 * bar]');
|
|
|
|
|
|
|
|
MT('ulNoBlank',
|
|
|
|
'foo',
|
|
|
|
'bar',
|
|
|
|
'[variable-2 * foo]',
|
|
|
|
'[variable-2 * bar]');
|
|
|
|
|
|
|
|
MT('ol',
|
|
|
|
'foo',
|
|
|
|
'bar',
|
|
|
|
'',
|
|
|
|
'[variable-2 # foo]',
|
|
|
|
'[variable-2 # bar]');
|
|
|
|
|
|
|
|
MT('olNoBlank',
|
|
|
|
'foo',
|
|
|
|
'bar',
|
|
|
|
'[variable-2 # foo]',
|
|
|
|
'[variable-2 # bar]');
|
|
|
|
|
|
|
|
MT('ulFormatting',
|
|
|
|
'[variable-2 * ][variable-2&em _foo_][variable-2 bar]',
|
|
|
|
'[variable-2 * ][variable-2&strong *][variable-2&em&strong _foo_]' +
|
|
|
|
'[variable-2&strong *][variable-2 bar]',
|
|
|
|
'[variable-2 * ][variable-2&strong *foo*][variable-2 bar]');
|
|
|
|
|
|
|
|
MT('olFormatting',
|
|
|
|
'[variable-2 # ][variable-2&em _foo_][variable-2 bar]',
|
|
|
|
'[variable-2 # ][variable-2&strong *][variable-2&em&strong _foo_]' +
|
|
|
|
'[variable-2&strong *][variable-2 bar]',
|
|
|
|
'[variable-2 # ][variable-2&strong *foo*][variable-2 bar]');
|
|
|
|
|
|
|
|
MT('ulNested',
|
|
|
|
'[variable-2 * foo]',
|
|
|
|
'[variable-3 ** bar]',
|
|
|
|
'[keyword *** bar]',
|
|
|
|
'[variable-2 **** bar]',
|
|
|
|
'[variable-3 ** bar]');
|
|
|
|
|
|
|
|
MT('olNested',
|
|
|
|
'[variable-2 # foo]',
|
|
|
|
'[variable-3 ## bar]',
|
|
|
|
'[keyword ### bar]',
|
|
|
|
'[variable-2 #### bar]',
|
|
|
|
'[variable-3 ## bar]');
|
|
|
|
|
|
|
|
MT('ulNestedWithOl',
|
|
|
|
'[variable-2 * foo]',
|
|
|
|
'[variable-3 ## bar]',
|
|
|
|
'[keyword *** bar]',
|
|
|
|
'[variable-2 #### bar]',
|
|
|
|
'[variable-3 ** bar]');
|
|
|
|
|
|
|
|
MT('olNestedWithUl',
|
|
|
|
'[variable-2 # foo]',
|
|
|
|
'[variable-3 ** bar]',
|
|
|
|
'[keyword ### bar]',
|
|
|
|
'[variable-2 **** bar]',
|
|
|
|
'[variable-3 ## bar]');
|
|
|
|
|
|
|
|
MT('definitionList',
|
|
|
|
'[number - coffee := Hot ][number&em _and_][number black]',
|
|
|
|
'',
|
|
|
|
'Normal text.');
|
|
|
|
|
|
|
|
MT('definitionListSpan',
|
|
|
|
'[number - coffee :=]',
|
|
|
|
'',
|
|
|
|
'[number Hot ][number&em _and_][number black =:]',
|
|
|
|
'',
|
|
|
|
'Normal text.');
|
|
|
|
|
|
|
|
MT('boo',
|
|
|
|
'[number - dog := woof woof]',
|
|
|
|
'[number - cat := meow meow]',
|
|
|
|
'[number - whale :=]',
|
|
|
|
'[number Whale noises.]',
|
|
|
|
'',
|
|
|
|
'[number Also, ][number&em _splashing_][number . =:]');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Attributes
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('divWithAttribute',
|
|
|
|
'[punctuation div][punctuation&attribute (#my-id)][punctuation . foo bar]');
|
|
|
|
|
|
|
|
MT('divWithAttributeAnd2emRightPadding',
|
|
|
|
'[punctuation div][punctuation&attribute (#my-id)((][punctuation . foo bar]');
|
|
|
|
|
|
|
|
MT('divWithClassAndId',
|
|
|
|
'[punctuation div][punctuation&attribute (my-class#my-id)][punctuation . foo bar]');
|
|
|
|
|
|
|
|
MT('paragraphWithCss',
|
|
|
|
'p[attribute {color:red;}]. foo bar');
|
|
|
|
|
|
|
|
MT('paragraphNestedStyles',
|
|
|
|
'p. [strong *foo ][strong&em _bar_][strong *]');
|
|
|
|
|
|
|
|
MT('paragraphWithLanguage',
|
|
|
|
'p[attribute [[fr]]]. Parlez-vous français?');
|
|
|
|
|
|
|
|
MT('paragraphLeftAlign',
|
|
|
|
'p[attribute <]. Left');
|
|
|
|
|
|
|
|
MT('paragraphRightAlign',
|
|
|
|
'p[attribute >]. Right');
|
|
|
|
|
|
|
|
MT('paragraphRightAlign',
|
|
|
|
'p[attribute =]. Center');
|
|
|
|
|
|
|
|
MT('paragraphJustified',
|
|
|
|
'p[attribute <>]. Justified');
|
|
|
|
|
|
|
|
MT('paragraphWithLeftIndent1em',
|
|
|
|
'p[attribute (]. Left');
|
|
|
|
|
|
|
|
MT('paragraphWithRightIndent1em',
|
|
|
|
'p[attribute )]. Right');
|
|
|
|
|
|
|
|
MT('paragraphWithLeftIndent2em',
|
|
|
|
'p[attribute ((]. Left');
|
|
|
|
|
|
|
|
MT('paragraphWithRightIndent2em',
|
|
|
|
'p[attribute ))]. Right');
|
|
|
|
|
|
|
|
MT('paragraphWithLeftIndent3emRightIndent2em',
|
|
|
|
'p[attribute ((())]. Right');
|
|
|
|
|
|
|
|
MT('divFormatting',
|
|
|
|
'[punctuation div. ][punctuation&strong *foo ]' +
|
|
|
|
'[punctuation&strong&em _bar_][punctuation&strong *]');
|
|
|
|
|
|
|
|
MT('phraseModifierAttributes',
|
|
|
|
'p[attribute (my-class)]. This is a paragraph that has a class and' +
|
|
|
|
' this [em _][em&attribute (#special-phrase)][em emphasized phrase_]' +
|
|
|
|
' has an id.');
|
|
|
|
|
|
|
|
MT('linkWithClass',
|
|
|
|
'[link "(my-class). This is a link with class":http://redcloth.org]');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Layouts
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('paragraphLayouts',
|
|
|
|
'p. This is one paragraph.',
|
|
|
|
'',
|
|
|
|
'p. This is another.');
|
|
|
|
|
|
|
|
MT('div',
|
|
|
|
'[punctuation div. foo bar]');
|
|
|
|
|
|
|
|
MT('pre',
|
|
|
|
'[operator pre. Text]');
|
|
|
|
|
|
|
|
MT('bq.',
|
|
|
|
'[bracket bq. foo bar]',
|
|
|
|
'',
|
|
|
|
'Normal text.');
|
|
|
|
|
|
|
|
MT('footnote',
|
|
|
|
'[variable fn123. foo ][variable&strong *bar*]');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Spanning Layouts
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('bq..ThenParagraph',
|
|
|
|
'[bracket bq.. foo bar]',
|
|
|
|
'',
|
|
|
|
'[bracket More quote.]',
|
|
|
|
'p. Normal Text');
|
|
|
|
|
|
|
|
MT('bq..ThenH1',
|
|
|
|
'[bracket bq.. foo bar]',
|
|
|
|
'',
|
|
|
|
'[bracket More quote.]',
|
|
|
|
'[header&header-1 h1. Header Text]');
|
|
|
|
|
|
|
|
MT('bc..ThenParagraph',
|
|
|
|
'[atom bc.. # Some ruby code]',
|
|
|
|
'[atom obj = {foo: :bar}]',
|
|
|
|
'[atom puts obj]',
|
|
|
|
'',
|
|
|
|
'[atom obj[[:love]] = "*love*"]',
|
|
|
|
'[atom puts obj.love.upcase]',
|
|
|
|
'',
|
|
|
|
'p. Normal text.');
|
|
|
|
|
|
|
|
MT('fn1..ThenParagraph',
|
|
|
|
'[variable fn1.. foo bar]',
|
|
|
|
'',
|
|
|
|
'[variable More.]',
|
|
|
|
'p. Normal Text');
|
|
|
|
|
|
|
|
MT('pre..ThenParagraph',
|
|
|
|
'[operator pre.. foo bar]',
|
|
|
|
'',
|
|
|
|
'[operator More.]',
|
|
|
|
'p. Normal Text');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Tables
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('table',
|
|
|
|
'[variable-3&operator |_. name |_. age|]',
|
|
|
|
'[variable-3 |][variable-3&strong *Walter*][variable-3 | 5 |]',
|
|
|
|
'[variable-3 |Florence| 6 |]',
|
|
|
|
'',
|
|
|
|
'p. Normal text.');
|
|
|
|
|
|
|
|
MT('tableWithAttributes',
|
|
|
|
'[variable-3&operator |_. name |_. age|]',
|
|
|
|
'[variable-3 |][variable-3&attribute /2.][variable-3 Jim |]',
|
|
|
|
'[variable-3 |][variable-3&attribute \\2{color: red}.][variable-3 Sam |]');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* HTML
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('html',
|
|
|
|
'[comment <div id="wrapper">]',
|
|
|
|
'[comment <section id="introduction">]',
|
|
|
|
'',
|
|
|
|
'[header&header-1 h1. Welcome]',
|
|
|
|
'',
|
|
|
|
'[variable-2 * Item one]',
|
|
|
|
'[variable-2 * Item two]',
|
|
|
|
'',
|
|
|
|
'[comment <a href="http://example.com">Example</a>]',
|
|
|
|
'',
|
|
|
|
'[comment </section>]',
|
|
|
|
'[comment </div>]');
|
|
|
|
|
|
|
|
MT('inlineHtml',
|
|
|
|
'I can use HTML directly in my [comment <span class="youbetcha">Textile</span>].');
|
|
|
|
|
|
|
|
/*
|
|
|
|
* No-Textile
|
|
|
|
*/
|
|
|
|
|
|
|
|
MT('notextile',
|
|
|
|
'[string-2 notextile. *No* formatting]');
|
|
|
|
|
|
|
|
MT('notextileInline',
|
|
|
|
'Use [string-2 ==*asterisks*==] for [strong *strong*] text.');
|
|
|
|
|
|
|
|
MT('notextileWithPre',
|
|
|
|
'[operator pre. *No* formatting]');
|
|
|
|
|
|
|
|
MT('notextileWithSpanningPre',
|
|
|
|
'[operator pre.. *No* formatting]',
|
|
|
|
'',
|
|
|
|
'[operator *No* formatting]');
|
|
|
|
|
|
|
|
/* Only toggling phrases between non-word chars. */
|
|
|
|
|
|
|
|
MT('phrase-in-word',
|
|
|
|
'foo_bar_baz');
|
|
|
|
|
|
|
|
MT('phrase-non-word',
|
|
|
|
'[negative -x-] aaa-bbb ccc-ddd [negative -eee-] fff [negative -ggg-]');
|
|
|
|
|
|
|
|
MT('phrase-lone-dash',
|
|
|
|
'foo - bar - baz');
|
|
|
|
})();
|