##// END OF EJS Templates
feat(configs): deprecared old hooks protocol and ssh wrapper....
feat(configs): deprecared old hooks protocol and ssh wrapper. New defaults are now set on v2 keys, so previous installation are automatically set to new keys. Fallback mode is still available.

File last commit:

r4105:10488616 default
r5496:cab50adf default
Show More
tiddlywiki.js
308 lines | 8.3 KiB | application/javascript | JavascriptLexer
project: added all source files and assets
r1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
codemirror: bumped to version 5.49.2
r4105 // Distributed under an MIT license: https://codemirror.net/LICENSE
project: added all source files and assets
r1
/***
|''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]]|
codemirror: bumped to version 5.49.2
r4105 |''Documentation''|https://codemirror.tiddlyspace.com/|
project: added all source files and assets
r1 |''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 = {};
codemirror: bumped to version 5.49.2
r4105 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
};
project: added all source files and assets
r1
var isSpaceName = /[\w_\-]/i,
codemirror: bumped to version 5.49.2
r4105 reHR = /^\-\-\-\-+$/, // <hr>
reWikiCommentStart = /^\/\*\*\*$/, // /***
reWikiCommentStop = /^\*\*\*\/$/, // ***/
reBlockQuote = /^<<<$/,
project: added all source files and assets
r1
codemirror: bumped to version 5.49.2
r4105 reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start
reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop
reXmlCodeStart = /^<!--\{\{\{-->$/, // xml block start
reXmlCodeStop = /^<!--\}\}\}-->$/, // xml stop
project: added all source files and assets
r1
codemirror: bumped to version 5.49.2
r4105 reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start
reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop
project: added all source files and assets
r1
codemirror: bumped to version 5.49.2
r4105 reUntilCodeStop = /.*?\}\}\}/;
project: added all source files and assets
r1
function chain(stream, state, f) {
state.tokenize = f;
return f(stream, state);
}
codemirror: bumped to version 5.49.2
r4105 function tokenBase(stream, state) {
var sol = stream.sol(), ch = stream.peek();
project: added all source files and assets
r1
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);
}
codemirror: bumped to version 5.49.2
r4105 if (stream.match(reBlockQuote))
project: added all source files and assets
r1 return 'quote';
codemirror: bumped to version 5.49.2
r4105 if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop))
project: added all source files and assets
r1 return 'comment';
codemirror: bumped to version 5.49.2
r4105 if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop))
project: added all source files and assets
r1 return 'comment';
codemirror: bumped to version 5.49.2
r4105 if (stream.match(reHR))
project: added all source files and assets
r1 return 'hr';
codemirror: bumped to version 5.49.2
r4105 }
project: added all source files and assets
r1
codemirror: bumped to version 5.49.2
r4105 stream.next();
project: added all source files and assets
r1 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";
}
codemirror: bumped to version 5.49.2
r4105 if (ch == '|')
project: added all source files and assets
r1 return 'header';
}
codemirror: bumped to version 5.49.2
r4105 if (ch == '{' && stream.match(/\{\{/))
project: added all source files and assets
r1 return chain(stream, state, twTokenCode);
// rudimentary html:// file:// link matching. TW knows much more ...
codemirror: bumped to version 5.49.2
r4105 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";
project: added all source files and assets
r1 // just a little string indicator, don't want to have the whole string covered
codemirror: bumped to version 5.49.2
r4105 if (ch == '"')
project: added all source files and assets
r1 return 'string';
codemirror: bumped to version 5.49.2
r4105
if (ch == '~') // _no_ CamelCase indicator should be bold
project: added all source files and assets
r1 return 'brace';
codemirror: bumped to version 5.49.2
r4105
if (/[\[\]]/.test(ch) && stream.match(ch)) // check for [[..]]
return 'brace';
project: added all source files and assets
r1 if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting
stream.eatWhile(isSpaceName);
return "link";
}
codemirror: bumped to version 5.49.2
r4105
project: added all source files and assets
r1 if (/\d/.test(ch)) { // numbers
stream.eatWhile(/\d/);
return "number";
}
codemirror: bumped to version 5.49.2
r4105
project: added all source files and assets
r1 if (ch == "/") { // tw invisible comment
if (stream.eat("%")) {
return chain(stream, state, twTokenComment);
codemirror: bumped to version 5.49.2
r4105 } else if (stream.eat("/")) { //
project: added all source files and assets
r1 return chain(stream, state, twTokenEm);
}
}
codemirror: bumped to version 5.49.2
r4105
if (ch == "_" && stream.eat("_")) // tw underline
project: added all source files and assets
r1 return chain(stream, state, twTokenUnderline);
codemirror: bumped to version 5.49.2
r4105
project: added all source files and assets
r1 // strikethrough and mdash handling
codemirror: bumped to version 5.49.2
r4105 if (ch == "-" && stream.eat("-")) {
// if strikethrough looks ugly, change CSS.
if (stream.peek() != ' ')
return chain(stream, state, twTokenStrike);
// mdash
if (stream.peek() == ' ')
return 'brace';
project: added all source files and assets
r1 }
codemirror: bumped to version 5.49.2
r4105
if (ch == "'" && stream.eat("'")) // tw bold
return chain(stream, state, twTokenStrong);
if (ch == "<" && stream.eat("<")) // tw macro
return chain(stream, state, twTokenMacro);
project: added all source files and assets
r1
// core macro handling
stream.eatWhile(/[\w\$_]/);
codemirror: bumped to version 5.49.2
r4105 return textwords.propertyIsEnumerable(stream.current()) ? "keyword" : null
}
project: added all source files and assets
r1
// tw invisible comment
function twTokenComment(stream, state) {
codemirror: bumped to version 5.49.2
r4105 var maybeEnd = false, ch;
project: added all source files and assets
r1 while (ch = stream.next()) {
if (ch == "/" && maybeEnd) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 break;
}
maybeEnd = (ch == "%");
}
return "comment";
}
// tw strong / bold
function twTokenStrong(stream, state) {
var maybeEnd = false,
ch;
while (ch = stream.next()) {
if (ch == "'" && maybeEnd) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 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)) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 return "comment";
}
if (sb && stream.sol() && stream.match(reCodeBlockStop)) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 return "comment";
}
stream.next();
return "comment";
}
// tw em / italic
function twTokenEm(stream, state) {
var maybeEnd = false,
ch;
while (ch = stream.next()) {
if (ch == "/" && maybeEnd) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 break;
}
maybeEnd = (ch == "/");
}
return "em";
}
// tw underlined text
function twTokenUnderline(stream, state) {
var maybeEnd = false,
ch;
while (ch = stream.next()) {
if (ch == "_" && maybeEnd) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 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) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 break;
}
maybeEnd = (ch == "-");
}
return "strikethrough";
}
// macro
function twTokenMacro(stream, state) {
if (stream.current() == '<<') {
return 'macro';
}
codemirror: bumped to version 5.49.2
r4105 var ch = stream.next();
project: added all source files and assets
r1 if (!ch) {
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 return null;
}
if (ch == ">") {
if (stream.peek() == '>') {
stream.next();
codemirror: bumped to version 5.49.2
r4105 state.tokenize = tokenBase;
project: added all source files and assets
r1 return "macro";
}
}
stream.eatWhile(/[\w\$_]/);
codemirror: bumped to version 5.49.2
r4105 return keywords.propertyIsEnumerable(stream.current()) ? "keyword" : null
project: added all source files and assets
r1 }
// Interface
return {
startState: function () {
codemirror: bumped to version 5.49.2
r4105 return {tokenize: tokenBase};
project: added all source files and assets
r1 },
token: function (stream, state) {
if (stream.eatSpace()) return null;
var style = state.tokenize(stream, state);
return style;
codemirror: bumped to version 5.49.2
r4105 }
project: added all source files and assets
r1 };
});
CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki");
});