[runmode addon] Reuse existing support code for standalone/node versions of runmode
This commit is contained in:
parent
215c1dc644
commit
001e07fcf8
|
@ -8,3 +8,6 @@
|
||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
/lib/codemirror.js
|
/lib/codemirror.js
|
||||||
|
/addon/runmode/runmode-standalone.js
|
||||||
|
/addon/runmode/runmode.node.js
|
||||||
|
**/.DS_Store
|
|
@ -1,164 +0,0 @@
|
||||||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
||||||
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
|
||||||
|
|
||||||
var root = typeof globalThis !== 'undefined' ? globalThis : window;
|
|
||||||
root.CodeMirror = {};
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
function splitLines(string){ return string.split(/\r?\n|\r/); };
|
|
||||||
|
|
||||||
function StringStream(string, _tabSize, oracle) {
|
|
||||||
this.pos = this.start = 0;
|
|
||||||
this.string = string
|
|
||||||
this.oracle = oracle
|
|
||||||
}
|
|
||||||
StringStream.prototype = {
|
|
||||||
eol: function() {return this.pos >= this.string.length;},
|
|
||||||
sol: function() {return this.pos == 0;},
|
|
||||||
peek: function() {return this.string.charAt(this.pos) || null;},
|
|
||||||
next: function() {
|
|
||||||
if (this.pos < this.string.length)
|
|
||||||
return this.string.charAt(this.pos++);
|
|
||||||
},
|
|
||||||
eat: function(match) {
|
|
||||||
var ch = this.string.charAt(this.pos);
|
|
||||||
if (typeof match == "string") var ok = ch == match;
|
|
||||||
else var ok = ch && (match.test ? match.test(ch) : match(ch));
|
|
||||||
if (ok) {++this.pos; return ch;}
|
|
||||||
},
|
|
||||||
eatWhile: function(match) {
|
|
||||||
var start = this.pos;
|
|
||||||
while (this.eat(match)){}
|
|
||||||
return this.pos > start;
|
|
||||||
},
|
|
||||||
eatSpace: function() {
|
|
||||||
var start = this.pos;
|
|
||||||
while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
|
|
||||||
return this.pos > start;
|
|
||||||
},
|
|
||||||
skipToEnd: function() {this.pos = this.string.length;},
|
|
||||||
skipTo: function(ch) {
|
|
||||||
var found = this.string.indexOf(ch, this.pos);
|
|
||||||
if (found > -1) {this.pos = found; return true;}
|
|
||||||
},
|
|
||||||
backUp: function(n) {this.pos -= n;},
|
|
||||||
column: function() {return this.start - this.lineStart;},
|
|
||||||
indentation: function() {return 0;},
|
|
||||||
match: function(pattern, consume, caseInsensitive) {
|
|
||||||
if (typeof pattern == "string") {
|
|
||||||
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
|
||||||
var substr = this.string.substr(this.pos, pattern.length);
|
|
||||||
if (cased(substr) == cased(pattern)) {
|
|
||||||
if (consume !== false) this.pos += pattern.length;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var match = this.string.slice(this.pos).match(pattern);
|
|
||||||
if (match && match.index > 0) return null;
|
|
||||||
if (match && consume !== false) this.pos += match[0].length;
|
|
||||||
return match;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
current: function(){return this.string.slice(this.start, this.pos);},
|
|
||||||
hideFirstChars: function(n, inner) {
|
|
||||||
this.lineStart += n;
|
|
||||||
try { return inner(); }
|
|
||||||
finally { this.lineStart -= n; }
|
|
||||||
},
|
|
||||||
lookAhead: function(n) { return this.oracle && this.oracle.lookAhead(n) }
|
|
||||||
};
|
|
||||||
CodeMirror.StringStream = StringStream;
|
|
||||||
|
|
||||||
CodeMirror.startState = function (mode, a1, a2) {
|
|
||||||
return mode.startState ? mode.startState(a1, a2) : true;
|
|
||||||
};
|
|
||||||
|
|
||||||
var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
|
|
||||||
CodeMirror.defineMode = function (name, mode) {
|
|
||||||
if (arguments.length > 2)
|
|
||||||
mode.dependencies = Array.prototype.slice.call(arguments, 2);
|
|
||||||
modes[name] = mode;
|
|
||||||
};
|
|
||||||
CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; };
|
|
||||||
CodeMirror.resolveMode = function(spec) {
|
|
||||||
if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
|
|
||||||
spec = mimeModes[spec];
|
|
||||||
} else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
|
|
||||||
spec = mimeModes[spec.name];
|
|
||||||
}
|
|
||||||
if (typeof spec == "string") return {name: spec};
|
|
||||||
else return spec || {name: "null"};
|
|
||||||
};
|
|
||||||
CodeMirror.getMode = function (options, spec) {
|
|
||||||
spec = CodeMirror.resolveMode(spec);
|
|
||||||
var mfactory = modes[spec.name];
|
|
||||||
if (!mfactory) throw new Error("Unknown mode: " + spec);
|
|
||||||
return mfactory(options, spec);
|
|
||||||
};
|
|
||||||
CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min;
|
|
||||||
CodeMirror.defineMode("null", function() {
|
|
||||||
return {token: function(stream) {stream.skipToEnd();}};
|
|
||||||
});
|
|
||||||
CodeMirror.defineMIME("text/plain", "null");
|
|
||||||
|
|
||||||
CodeMirror.runMode = function (string, modespec, callback, options) {
|
|
||||||
var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec);
|
|
||||||
var ie = /MSIE \d/.test(navigator.userAgent);
|
|
||||||
var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
|
|
||||||
|
|
||||||
if (callback.appendChild) {
|
|
||||||
var tabSize = (options && options.tabSize) || 4;
|
|
||||||
var node = callback, col = 0;
|
|
||||||
node.innerHTML = "";
|
|
||||||
callback = function (text, style) {
|
|
||||||
if (text == "\n") {
|
|
||||||
// Emitting LF or CRLF on IE8 or earlier results in an incorrect display.
|
|
||||||
// Emitting a carriage return makes everything ok.
|
|
||||||
node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text));
|
|
||||||
col = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var content = "";
|
|
||||||
// replace tabs
|
|
||||||
for (var pos = 0; ;) {
|
|
||||||
var idx = text.indexOf("\t", pos);
|
|
||||||
if (idx == -1) {
|
|
||||||
content += text.slice(pos);
|
|
||||||
col += text.length - pos;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
col += idx - pos;
|
|
||||||
content += text.slice(pos, idx);
|
|
||||||
var size = tabSize - col % tabSize;
|
|
||||||
col += size;
|
|
||||||
for (var i = 0; i < size; ++i) content += " ";
|
|
||||||
pos = idx + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (style) {
|
|
||||||
var sp = node.appendChild(document.createElement("span"));
|
|
||||||
sp.className = "cm-" + style.replace(/ +/g, " cm-");
|
|
||||||
sp.appendChild(document.createTextNode(content));
|
|
||||||
} else {
|
|
||||||
node.appendChild(document.createTextNode(content));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);
|
|
||||||
var oracle = {lookAhead: function(n) { return lines[i + n] }}
|
|
||||||
for (var i = 0, e = lines.length; i < e; ++i) {
|
|
||||||
if (i) callback("\n");
|
|
||||||
var stream = new CodeMirror.StringStream(lines[i], tabSize, oracle);
|
|
||||||
if (!stream.string && mode.blankLine) mode.blankLine(state);
|
|
||||||
while (!stream.eol()) {
|
|
||||||
var style = mode.token(stream, state);
|
|
||||||
callback(stream.current(), style, i, stream.start, state);
|
|
||||||
stream.start = stream.pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})();
|
|
|
@ -13,11 +13,12 @@
|
||||||
|
|
||||||
CodeMirror.runMode = function(string, modespec, callback, options) {
|
CodeMirror.runMode = function(string, modespec, callback, options) {
|
||||||
var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);
|
var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);
|
||||||
var ie = /MSIE \d/.test(navigator.userAgent);
|
var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;
|
||||||
var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
|
|
||||||
|
|
||||||
|
// Create a tokenizing callback function if passed-in callback is a DOM element.
|
||||||
if (callback.appendChild) {
|
if (callback.appendChild) {
|
||||||
var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;
|
var ie = /MSIE \d/.test(navigator.userAgent);
|
||||||
|
var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
|
||||||
var node = callback, col = 0;
|
var node = callback, col = 0;
|
||||||
node.innerHTML = "";
|
node.innerHTML = "";
|
||||||
callback = function(text, style) {
|
callback = function(text, style) {
|
||||||
|
@ -45,7 +46,7 @@ CodeMirror.runMode = function(string, modespec, callback, options) {
|
||||||
pos = idx + 1;
|
pos = idx + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Create a node with token style and append it to the callback DOM element.
|
||||||
if (style) {
|
if (style) {
|
||||||
var sp = node.appendChild(document.createElement("span"));
|
var sp = node.appendChild(document.createElement("span"));
|
||||||
sp.className = "cm-" + style.replace(/ +/g, " cm-");
|
sp.className = "cm-" + style.replace(/ +/g, " cm-");
|
||||||
|
|
|
@ -1,197 +0,0 @@
|
||||||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
||||||
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
|
||||||
|
|
||||||
/* Just enough of CodeMirror to run runMode under node.js */
|
|
||||||
|
|
||||||
function splitLines(string){return string.split(/\r\n?|\n/);};
|
|
||||||
|
|
||||||
// Counts the column offset in a string, taking tabs into account.
|
|
||||||
// Used mostly to find indentation.
|
|
||||||
var countColumn = exports.countColumn = function(string, end, tabSize, startIndex, startValue) {
|
|
||||||
if (end == null) {
|
|
||||||
end = string.search(/[^\s\u00a0]/);
|
|
||||||
if (end == -1) end = string.length;
|
|
||||||
}
|
|
||||||
for (var i = startIndex || 0, n = startValue || 0;;) {
|
|
||||||
var nextTab = string.indexOf("\t", i);
|
|
||||||
if (nextTab < 0 || nextTab >= end)
|
|
||||||
return n + (end - i);
|
|
||||||
n += nextTab - i;
|
|
||||||
n += tabSize - (n % tabSize);
|
|
||||||
i = nextTab + 1;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function StringStream(string, tabSize, context) {
|
|
||||||
this.pos = this.start = 0;
|
|
||||||
this.string = string;
|
|
||||||
this.tabSize = tabSize || 8;
|
|
||||||
this.lastColumnPos = this.lastColumnValue = 0;
|
|
||||||
this.lineStart = 0;
|
|
||||||
this.context = context
|
|
||||||
};
|
|
||||||
|
|
||||||
StringStream.prototype = {
|
|
||||||
eol: function() {return this.pos >= this.string.length;},
|
|
||||||
sol: function() {return this.pos == this.lineStart;},
|
|
||||||
peek: function() {return this.string.charAt(this.pos) || undefined;},
|
|
||||||
next: function() {
|
|
||||||
if (this.pos < this.string.length)
|
|
||||||
return this.string.charAt(this.pos++);
|
|
||||||
},
|
|
||||||
eat: function(match) {
|
|
||||||
var ch = this.string.charAt(this.pos);
|
|
||||||
if (typeof match == "string") var ok = ch == match;
|
|
||||||
else var ok = ch && (match.test ? match.test(ch) : match(ch));
|
|
||||||
if (ok) {++this.pos; return ch;}
|
|
||||||
},
|
|
||||||
eatWhile: function(match) {
|
|
||||||
var start = this.pos;
|
|
||||||
while (this.eat(match)){}
|
|
||||||
return this.pos > start;
|
|
||||||
},
|
|
||||||
eatSpace: function() {
|
|
||||||
var start = this.pos;
|
|
||||||
while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
|
|
||||||
return this.pos > start;
|
|
||||||
},
|
|
||||||
skipToEnd: function() {this.pos = this.string.length;},
|
|
||||||
skipTo: function(ch) {
|
|
||||||
var found = this.string.indexOf(ch, this.pos);
|
|
||||||
if (found > -1) {this.pos = found; return true;}
|
|
||||||
},
|
|
||||||
backUp: function(n) {this.pos -= n;},
|
|
||||||
column: function() {
|
|
||||||
if (this.lastColumnPos < this.start) {
|
|
||||||
this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
|
|
||||||
this.lastColumnPos = this.start;
|
|
||||||
}
|
|
||||||
return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
|
|
||||||
},
|
|
||||||
indentation: function() {
|
|
||||||
return countColumn(this.string, null, this.tabSize) -
|
|
||||||
(this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
|
|
||||||
},
|
|
||||||
match: function(pattern, consume, caseInsensitive) {
|
|
||||||
if (typeof pattern == "string") {
|
|
||||||
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
|
||||||
var substr = this.string.substr(this.pos, pattern.length);
|
|
||||||
if (cased(substr) == cased(pattern)) {
|
|
||||||
if (consume !== false) this.pos += pattern.length;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var match = this.string.slice(this.pos).match(pattern);
|
|
||||||
if (match && match.index > 0) return null;
|
|
||||||
if (match && consume !== false) this.pos += match[0].length;
|
|
||||||
return match;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
current: function(){return this.string.slice(this.start, this.pos);},
|
|
||||||
hideFirstChars: function(n, inner) {
|
|
||||||
this.lineStart += n;
|
|
||||||
try { return inner(); }
|
|
||||||
finally { this.lineStart -= n; }
|
|
||||||
},
|
|
||||||
lookAhead: function(n) {
|
|
||||||
var line = this.context.line + n
|
|
||||||
return line >= this.context.lines.length ? null : this.context.lines[line]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
exports.StringStream = StringStream;
|
|
||||||
|
|
||||||
exports.startState = function(mode, a1, a2) {
|
|
||||||
return mode.startState ? mode.startState(a1, a2) : true;
|
|
||||||
};
|
|
||||||
|
|
||||||
var modes = exports.modes = {}, mimeModes = exports.mimeModes = {};
|
|
||||||
exports.defineMode = function(name, mode) {
|
|
||||||
if (arguments.length > 2)
|
|
||||||
mode.dependencies = Array.prototype.slice.call(arguments, 2);
|
|
||||||
modes[name] = mode;
|
|
||||||
};
|
|
||||||
exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; };
|
|
||||||
|
|
||||||
exports.defineMode("null", function() {
|
|
||||||
return {token: function(stream) {stream.skipToEnd();}};
|
|
||||||
});
|
|
||||||
exports.defineMIME("text/plain", "null");
|
|
||||||
|
|
||||||
exports.resolveMode = function(spec) {
|
|
||||||
if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
|
|
||||||
spec = mimeModes[spec];
|
|
||||||
} else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
|
|
||||||
spec = mimeModes[spec.name];
|
|
||||||
}
|
|
||||||
if (typeof spec == "string") return {name: spec};
|
|
||||||
else return spec || {name: "null"};
|
|
||||||
};
|
|
||||||
|
|
||||||
function copyObj(obj, target, overwrite) {
|
|
||||||
if (!target) target = {};
|
|
||||||
for (var prop in obj)
|
|
||||||
if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
|
|
||||||
target[prop] = obj[prop];
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This can be used to attach properties to mode objects from
|
|
||||||
// outside the actual mode definition.
|
|
||||||
var modeExtensions = exports.modeExtensions = {};
|
|
||||||
exports.extendMode = function(mode, properties) {
|
|
||||||
var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
|
|
||||||
copyObj(properties, exts);
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.getMode = function(options, spec) {
|
|
||||||
var spec = exports.resolveMode(spec);
|
|
||||||
var mfactory = modes[spec.name];
|
|
||||||
if (!mfactory) return exports.getMode(options, "text/plain");
|
|
||||||
var modeObj = mfactory(options, spec);
|
|
||||||
if (modeExtensions.hasOwnProperty(spec.name)) {
|
|
||||||
var exts = modeExtensions[spec.name];
|
|
||||||
for (var prop in exts) {
|
|
||||||
if (!exts.hasOwnProperty(prop)) continue;
|
|
||||||
if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop];
|
|
||||||
modeObj[prop] = exts[prop];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
modeObj.name = spec.name;
|
|
||||||
if (spec.helperType) modeObj.helperType = spec.helperType;
|
|
||||||
if (spec.modeProps) for (var prop in spec.modeProps)
|
|
||||||
modeObj[prop] = spec.modeProps[prop];
|
|
||||||
|
|
||||||
return modeObj;
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.innerMode = function(mode, state) {
|
|
||||||
var info;
|
|
||||||
while (mode.innerMode) {
|
|
||||||
info = mode.innerMode(state);
|
|
||||||
if (!info || info.mode == mode) break;
|
|
||||||
state = info.state;
|
|
||||||
mode = info.mode;
|
|
||||||
}
|
|
||||||
return info || {mode: mode, state: state};
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.registerHelper = exports.registerGlobalHelper = Math.min;
|
|
||||||
|
|
||||||
exports.runMode = function(string, modespec, callback, options) {
|
|
||||||
var mode = exports.getMode({indentUnit: 2}, modespec);
|
|
||||||
var lines = splitLines(string), state = (options && options.state) || exports.startState(mode);
|
|
||||||
var context = {lines: lines, line: 0}
|
|
||||||
for (var i = 0, e = lines.length; i < e; ++i, ++context.line) {
|
|
||||||
if (i) callback("\n");
|
|
||||||
var stream = new exports.StringStream(lines[i], 4, context);
|
|
||||||
if (!stream.string && mode.blankLine) mode.blankLine(state);
|
|
||||||
while (!stream.eol()) {
|
|
||||||
var style = mode.token(stream, state);
|
|
||||||
callback(stream.current(), style, i, stream.start, state);
|
|
||||||
stream.start = stream.pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")];
|
|
||||||
require.cache[require.resolve("../../addon/runmode/runmode")] = require.cache[require.resolve("./runmode.node")];
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
<!doctype html>
|
||||||
|
|
||||||
|
<title>CodeMirror: Mode Runner Demo</title>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<link rel=stylesheet href="../doc/docs.css">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../lib/codemirror.css">
|
||||||
|
<script src="../addon/runmode/runmode-standalone.js"></script>
|
||||||
|
<script src="../mode/xml/xml.js"></script>
|
||||||
|
<div id=nav>
|
||||||
|
<a href="https://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 class=active href="#">Mode Runner</a>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<h2>Mode Runner Demo</h2>
|
||||||
|
|
||||||
|
|
||||||
|
<textarea id="code" style="width: 90%; height: 7em; border: 1px solid black; padding: .2em .4em;">
|
||||||
|
<foobar>
|
||||||
|
<blah>Enter your xml here and press the button below to display
|
||||||
|
it as highlighted by the CodeMirror XML mode</blah>
|
||||||
|
<tag2 foo="2" bar="&quot;bar&quot;"/>
|
||||||
|
</foobar></textarea><br>
|
||||||
|
<button onclick="doHighlight();">Highlight!</button>
|
||||||
|
<pre id="output" class="cm-s-default"></pre>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function doHighlight() {
|
||||||
|
CodeMirror.runMode(document.getElementById("code").value, "application/xml",
|
||||||
|
document.getElementById("output"));
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<p>Running a CodeMirror mode outside of the editor.
|
||||||
|
The <code>CodeMirror.runMode</code> function, defined
|
||||||
|
in <code><a href="../addon/runmode/runmode.js">addon/runmode/runmode.js</a></code> takes the following arguments:</p>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt><code>text (string)</code></dt>
|
||||||
|
<dd>The document to run through the highlighter.</dd>
|
||||||
|
<dt><code>mode (<a href="../doc/manual.html#option_mode">mode spec</a>)</code></dt>
|
||||||
|
<dd>The mode to use (must be loaded as normal).</dd>
|
||||||
|
<dt><code>output (function or DOM node)</code></dt>
|
||||||
|
<dd>If this is a function, it will be called for each token with
|
||||||
|
two arguments, the token's text and the token's style class (may
|
||||||
|
be <code>null</code> for unstyled tokens). If it is a DOM node,
|
||||||
|
the tokens will be converted to <code>span</code> elements as in
|
||||||
|
an editor, and inserted into the node
|
||||||
|
(through <code>innerHTML</code>).</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</article>
|
|
@ -21,11 +21,11 @@
|
||||||
"lint": "bin/lint"
|
"lint": "bin/lint"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@rollup/plugin-buble": "^0.21.3",
|
||||||
"blint": "^1.1.0",
|
"blint": "^1.1.0",
|
||||||
"node-static": "0.7.11",
|
"node-static": "0.7.11",
|
||||||
"puppeteer": "^1.20.0",
|
"puppeteer": "^1.20.0",
|
||||||
"rollup": "^1.26.3",
|
"rollup": "^1.26.3"
|
||||||
"rollup-plugin-buble": "^0.19.8"
|
|
||||||
},
|
},
|
||||||
"bugs": "http://github.com/codemirror/CodeMirror/issues",
|
"bugs": "http://github.com/codemirror/CodeMirror/issues",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
@ -42,5 +42,6 @@
|
||||||
"directories": {},
|
"directories": {},
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"devDependencies": {}
|
"devDependencies": {}
|
||||||
}
|
},
|
||||||
|
"dependencies": {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,42 @@
|
||||||
import buble from 'rollup-plugin-buble';
|
import buble from '@rollup/plugin-buble';
|
||||||
|
|
||||||
export default {
|
export default [
|
||||||
input: "src/codemirror.js",
|
{
|
||||||
output: {
|
input: "src/codemirror.js",
|
||||||
banner: `// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
output: {
|
||||||
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
banner: `// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||||
|
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
||||||
|
|
||||||
// This is CodeMirror (https://codemirror.net), a code editor
|
// This is CodeMirror (https://codemirror.net), a code editor
|
||||||
// implemented in JavaScript on top of the browser's DOM.
|
// implemented in JavaScript on top of the browser's DOM.
|
||||||
//
|
//
|
||||||
// You can find some technical background for some of the code below
|
// You can find some technical background for some of the code below
|
||||||
// at http://marijnhaverbeke.nl/blog/#cm-internals .
|
// at http://marijnhaverbeke.nl/blog/#cm-internals .
|
||||||
`,
|
`,
|
||||||
format: "umd",
|
format: "umd",
|
||||||
file: "lib/codemirror.js",
|
file: "lib/codemirror.js",
|
||||||
name: "CodeMirror"
|
name: "CodeMirror"
|
||||||
|
},
|
||||||
|
plugins: [ buble({namedFunctionExpressions: false}) ]
|
||||||
},
|
},
|
||||||
plugins: [ buble({namedFunctionExpressions: false}) ]
|
{
|
||||||
};
|
input: ["src/addon/runmode/runmode-standalone.js"],
|
||||||
|
output: {
|
||||||
|
format: "iife",
|
||||||
|
file: "addon/runmode/runmode-standalone.js",
|
||||||
|
name: "CodeMirror",
|
||||||
|
freeze: false, // IE8 doesn't support Object.freeze.
|
||||||
|
},
|
||||||
|
plugins: [ buble({namedFunctionExpressions: false}) ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: ["src/addon/runmode/runmode.node.js"],
|
||||||
|
output: {
|
||||||
|
format: "cjs",
|
||||||
|
file: "addon/runmode/runmode.node.js",
|
||||||
|
name: "CodeMirror",
|
||||||
|
freeze: false, // IE8 doesn't support Object.freeze.
|
||||||
|
},
|
||||||
|
plugins: [ buble({namedFunctionExpressions: false}) ]
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import StringStream from "../../util/StringStream.js"
|
||||||
|
import * as modeMethods from "../../modes.js"
|
||||||
|
|
||||||
|
// Create a minimal CodeMirror needed to use runMode, and assign to root.
|
||||||
|
var root = typeof globalThis !== 'undefined' ? globalThis : window
|
||||||
|
root.CodeMirror = {}
|
||||||
|
|
||||||
|
// Copy StringStream and mode methods into CodeMirror object.
|
||||||
|
CodeMirror.StringStream = StringStream
|
||||||
|
for (var exported in modeMethods) CodeMirror[exported] = modeMethods[exported]
|
||||||
|
|
||||||
|
// Minimal default mode.
|
||||||
|
CodeMirror.defineMode("null", () => ({token: stream => stream.skipToEnd()}))
|
||||||
|
CodeMirror.defineMIME("text/plain", "null")
|
||||||
|
|
||||||
|
CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min
|
||||||
|
CodeMirror.splitLines = function(string) { return string.split(/\r?\n|\r/); }
|
||||||
|
|
||||||
|
CodeMirror.defaults = { indentUnit: 2 }
|
||||||
|
export default CodeMirror;
|
|
@ -0,0 +1,19 @@
|
||||||
|
import StringStream from "../../util/StringStream.js"
|
||||||
|
import * as modeMethods from "../../modes.js"
|
||||||
|
|
||||||
|
// Copy StringStream and mode methods into exports (CodeMirror) object.
|
||||||
|
exports.StringStream = StringStream
|
||||||
|
for (var exported in modeMethods) exports[exported] = modeMethods[exported]
|
||||||
|
|
||||||
|
// Shim library CodeMirror with the minimal CodeMirror defined above.
|
||||||
|
require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")]
|
||||||
|
require.cache[require.resolve("../../addon/runmode/runmode")] = require.cache[require.resolve("./runmode.node")]
|
||||||
|
|
||||||
|
// Minimal default mode.
|
||||||
|
exports.defineMode("null", () => ({token: stream => stream.skipToEnd()}))
|
||||||
|
exports.defineMIME("text/plain", "null")
|
||||||
|
|
||||||
|
exports.registerHelper = exports.registerGlobalHelper = Math.min
|
||||||
|
exports.splitLines = function(string) { return string.split(/\r?\n|\r/); }
|
||||||
|
|
||||||
|
exports.defaults = { indentUnit: 2 }
|
|
@ -0,0 +1,2 @@
|
||||||
|
import "./codemirror-standalone.js"
|
||||||
|
import "../../../addon/runmode/runmode.js"
|
|
@ -0,0 +1,2 @@
|
||||||
|
import "./codemirror.node.js"
|
||||||
|
import "../../../addon/runmode/runmode.js"
|
Loading…
Reference in New Issue