diff options
author | Richard Mahn <richmahn@users.noreply.github.com> | 2016-07-22 23:29:20 -0600 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2016-07-23 13:29:20 +0800 |
commit | 69dae1ec1c5265e815c8b0fedff3399438e2e380 (patch) | |
tree | d3d675c58db46baf72f2402e2f38d2de1cb2cb5e /public/plugins/codemirror-5.17.0/mode/tiddlywiki | |
parent | cf85e9eb7b125156fc3289f6a1306e16b748929b (diff) |
Added coding style modes to SimpleMDE (#3286)
* Added coding style modes to SimpleMDE
* Moved the CodeMirror addon from simplemd to codemirror directory
Diffstat (limited to 'public/plugins/codemirror-5.17.0/mode/tiddlywiki')
3 files changed, 476 insertions, 0 deletions
diff --git a/public/plugins/codemirror-5.17.0/mode/tiddlywiki/index.html b/public/plugins/codemirror-5.17.0/mode/tiddlywiki/index.html new file mode 100644 index 00000000..77dd0457 --- /dev/null +++ b/public/plugins/codemirror-5.17.0/mode/tiddlywiki/index.html @@ -0,0 +1,154 @@ +<!doctype html> + +<title>CodeMirror: TiddlyWiki mode</title> +<meta charset="utf-8"/> +<link rel=stylesheet href="../../doc/docs.css"> + +<link rel="stylesheet" href="../../lib/codemirror.css"> +<link rel="stylesheet" href="tiddlywiki.css"> +<script src="../../lib/codemirror.js"></script> +<script src="../../addon/edit/matchbrackets.js"></script> +<script src="tiddlywiki.js"></script> +<style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style> +<div id=nav> + <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a> + + <ul> + <li><a href="../../index.html">Home</a> + <li><a href="../../doc/manual.html">Manual</a> + <li><a href="https://github.com/codemirror/codemirror">Code</a> + </ul> + <ul> + <li><a href="../index.html">Language modes</a> + <li><a class=active href="#">TiddlyWiki</a> + </ul> +</div> + +<article> +<h2>TiddlyWiki mode</h2> + + +<div><textarea id="code" name="code"> +!TiddlyWiki Formatting +* Rendered versions can be found at: http://www.tiddlywiki.com/#Reference + +|!Option | !Syntax | +|bold font | ''bold'' | +|italic type | //italic// | +|underlined text | __underlined__ | +|strikethrough text | --strikethrough-- | +|superscript text | super^^script^^ | +|subscript text | sub~~script~~ | +|highlighted text | @@highlighted@@ | +|preformatted text | {{{preformatted}}} | + +!Block Elements +<<< +!Heading 1 + +!!Heading 2 + +!!!Heading 3 + +!!!!Heading 4 + +!!!!!Heading 5 +<<< + +!!Lists +<<< +* unordered list, level 1 +** unordered list, level 2 +*** unordered list, level 3 + +# ordered list, level 1 +## ordered list, level 2 +### unordered list, level 3 + +; definition list, term +: definition list, description +<<< + +!!Blockquotes +<<< +> blockquote, level 1 +>> blockquote, level 2 +>>> blockquote, level 3 + +> blockquote +<<< + +!!Preformatted Text +<<< +{{{ +preformatted (e.g. code) +}}} +<<< + +!!Code Sections +<<< +{{{ +Text style code +}}} + +//{{{ +JS styled code. TiddlyWiki mixed mode should support highlighter switching in the future. +//}}} + +<!--{{{--> +XML styled code. TiddlyWiki mixed mode should support highlighter switching in the future. +<!--}}}--> +<<< + +!!Tables +<<< +|CssClass|k +|!heading column 1|!heading column 2| +|row 1, column 1|row 1, column 2| +|row 2, column 1|row 2, column 2| +|>|COLSPAN| +|ROWSPAN| ... | +|~| ... | +|CssProperty:value;...| ... | +|caption|c + +''Annotation:'' +* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right. +* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above. +<<< +!!Images /% TODO %/ +cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]] + +!Hyperlinks +* [[WikiWords|WikiWord]] are automatically transformed to hyperlinks to the respective tiddler +** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}} +* [[PrettyLinks]] are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}} +** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>'''N.B.:''' In this case, the target can also be any website (i.e. URL). + +!Custom Styling +* {{{@@CssProperty:value;CssProperty:value;...@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords. +* <html><code>{{customCssClass{...}}}</code></html> +* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> ... </html>}}} + +!Special Markers +* {{{<br>}}} forces a manual line break +* {{{----}}} creates a horizontal ruler +* [[HTML entities|http://www.tiddlywiki.com/#HtmlEntities]] +* [[HTML entities local|HtmlEntities]] +* {{{<<macroName>>}}} calls the respective [[macro|Macros]] +* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup. +* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}. +</textarea></div> + + <script> + var editor = CodeMirror.fromTextArea(document.getElementById("code"), { + mode: 'tiddlywiki', + lineNumbers: true, + matchBrackets: true + }); + </script> + + <p>TiddlyWiki mode supports a single configuration.</p> + + <p><strong>MIME types defined:</strong> <code>text/x-tiddlywiki</code>.</p> + </article> diff --git a/public/plugins/codemirror-5.17.0/mode/tiddlywiki/tiddlywiki.css b/public/plugins/codemirror-5.17.0/mode/tiddlywiki/tiddlywiki.css new file mode 100644 index 00000000..9a69b639 --- /dev/null +++ b/public/plugins/codemirror-5.17.0/mode/tiddlywiki/tiddlywiki.css @@ -0,0 +1,14 @@ +span.cm-underlined { + text-decoration: underline; +} +span.cm-strikethrough { + text-decoration: line-through; +} +span.cm-brace { + color: #170; + font-weight: bold; +} +span.cm-table { + color: blue; + font-weight: bold; +} diff --git a/public/plugins/codemirror-5.17.0/mode/tiddlywiki/tiddlywiki.js b/public/plugins/codemirror-5.17.0/mode/tiddlywiki/tiddlywiki.js new file mode 100644 index 00000000..1a3b3bc6 --- /dev/null +++ b/public/plugins/codemirror-5.17.0/mode/tiddlywiki/tiddlywiki.js @@ -0,0 +1,308 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +/*** + |''Name''|tiddlywiki.js| + |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| + |''Author''|PMario| + |''Version''|0.1.7| + |''Status''|''stable''| + |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| + |''Documentation''|http://codemirror.tiddlyspace.com/| + |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| + |''CoreVersion''|2.5.0| + |''Requires''|codemirror.js| + |''Keywords''|syntax highlighting color code mirror codemirror| + ! Info + CoreVersion parameter is needed for TiddlyWiki only! +***/ + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("tiddlywiki", function () { + // Tokenizer + var textwords = {}; + + var keywords = { + "allTags": true, "closeAll": true, "list": true, + "newJournal": true, "newTiddler": true, + "permaview": true, "saveChanges": true, + "search": true, "slider": true, "tabs": true, + "tag": true, "tagging": true, "tags": true, + "tiddler": true, "timeline": true, + "today": true, "version": true, "option": true, + "with": true, "filter": true + }; + + var isSpaceName = /[\w_\-]/i, + reHR = /^\-\-\-\-+$/, // <hr> + reWikiCommentStart = /^\/\*\*\*$/, // /*** + reWikiCommentStop = /^\*\*\*\/$/, // ***/ + reBlockQuote = /^<<<$/, + + reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start + reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop + reXmlCodeStart = /^<!--\{\{\{-->$/, // xml block start + reXmlCodeStop = /^<!--\}\}\}-->$/, // xml stop + + reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start + reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop + + reUntilCodeStop = /.*?\}\}\}/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function tokenBase(stream, state) { + var sol = stream.sol(), ch = stream.peek(); + + state.block = false; // indicates the start of a code block. + + // check start of blocks + if (sol && /[<\/\*{}\-]/.test(ch)) { + if (stream.match(reCodeBlockStart)) { + state.block = true; + return chain(stream, state, twTokenCode); + } + if (stream.match(reBlockQuote)) + return 'quote'; + if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) + return 'comment'; + if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) + return 'comment'; + if (stream.match(reHR)) + return 'hr'; + } + + stream.next(); + if (sol && /[\/\*!#;:>|]/.test(ch)) { + if (ch == "!") { // tw header + stream.skipToEnd(); + return "header"; + } + if (ch == "*") { // tw list + stream.eatWhile('*'); + return "comment"; + } + if (ch == "#") { // tw numbered list + stream.eatWhile('#'); + return "comment"; + } + if (ch == ";") { // definition list, term + stream.eatWhile(';'); + return "comment"; + } + if (ch == ":") { // definition list, description + stream.eatWhile(':'); + return "comment"; + } + if (ch == ">") { // single line quote + stream.eatWhile(">"); + return "quote"; + } + if (ch == '|') + return 'header'; + } + + if (ch == '{' && stream.match(/\{\{/)) + return chain(stream, state, twTokenCode); + + // rudimentary html:// file:// link matching. TW knows much more ... + if (/[hf]/i.test(ch) && + /[ti]/i.test(stream.peek()) && + stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) + return "link"; + + // just a little string indicator, don't want to have the whole string covered + if (ch == '"') + return 'string'; + + if (ch == '~') // _no_ CamelCase indicator should be bold + return 'brace'; + + if (/[\[\]]/.test(ch) && stream.match(ch)) // check for [[..]] + return 'brace'; + + if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting + stream.eatWhile(isSpaceName); + return "link"; + } + + if (/\d/.test(ch)) { // numbers + stream.eatWhile(/\d/); + return "number"; + } + + if (ch == "/") { // tw invisible comment + if (stream.eat("%")) { + return chain(stream, state, twTokenComment); + } else if (stream.eat("/")) { // + return chain(stream, state, twTokenEm); + } + } + + if (ch == "_" && stream.eat("_")) // tw underline + return chain(stream, state, twTokenUnderline); + + // strikethrough and mdash handling + if (ch == "-" && stream.eat("-")) { + // if strikethrough looks ugly, change CSS. + if (stream.peek() != ' ') + return chain(stream, state, twTokenStrike); + // mdash + if (stream.peek() == ' ') + return 'brace'; + } + + if (ch == "'" && stream.eat("'")) // tw bold + return chain(stream, state, twTokenStrong); + + if (ch == "<" && stream.eat("<")) // tw macro + return chain(stream, state, twTokenMacro); + + // core macro handling + stream.eatWhile(/[\w\$_]/); + return textwords.propertyIsEnumerable(stream.current()) ? "keyword" : null + } + + // tw invisible comment + function twTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "%"); + } + return "comment"; + } + + // tw strong / bold + function twTokenStrong(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "'" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "'"); + } + return "strong"; + } + + // tw code + function twTokenCode(stream, state) { + var sb = state.block; + + if (sb && stream.current()) { + return "comment"; + } + + if (!sb && stream.match(reUntilCodeStop)) { + state.tokenize = tokenBase; + return "comment"; + } + + if (sb && stream.sol() && stream.match(reCodeBlockStop)) { + state.tokenize = tokenBase; + return "comment"; + } + + stream.next(); + return "comment"; + } + + // tw em / italic + function twTokenEm(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "/"); + } + return "em"; + } + + // tw underlined text + function twTokenUnderline(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "_" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "_"); + } + return "underlined"; + } + + // tw strike through text looks ugly + // change CSS if needed + function twTokenStrike(stream, state) { + var maybeEnd = false, ch; + + while (ch = stream.next()) { + if (ch == "-" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "-"); + } + return "strikethrough"; + } + + // macro + function twTokenMacro(stream, state) { + if (stream.current() == '<<') { + return 'macro'; + } + + var ch = stream.next(); + if (!ch) { + state.tokenize = tokenBase; + return null; + } + if (ch == ">") { + if (stream.peek() == '>') { + stream.next(); + state.tokenize = tokenBase; + return "macro"; + } + } + + stream.eatWhile(/[\w\$_]/); + return keywords.propertyIsEnumerable(stream.current()) ? "keyword" : null + } + + // Interface + return { + startState: function () { + return {tokenize: tokenBase}; + }, + + token: function (stream, state) { + if (stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + return style; + } + }; +}); + +CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); +}); |