1
CodeMirror.runMode = function(string, modespec, callback, options) {
2
var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);
3
var isNode = callback.nodeType == 1;
4
var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;
6
var node = callback, accum = [], col = 0;
7
callback = function(text, style) {
14
// HTML-escape and replace tabs
16
var idx = text.indexOf("\t", pos);
18
escaped += CodeMirror.htmlEscape(text.slice(pos));
19
col += text.length - pos;
23
escaped += CodeMirror.htmlEscape(text.slice(pos, idx));
24
var size = tabSize - col % tabSize;
26
for (var i = 0; i < size; ++i) escaped += " ";
32
accum.push("<span class=\"cm-" + CodeMirror.htmlEscape(style) + "\">" + escaped + "</span>");
37
var lines = CodeMirror.splitLines(string), state = CodeMirror.startState(mode);
38
for (var i = 0, e = lines.length; i < e; ++i) {
39
if (i) callback("\n");
40
var stream = new CodeMirror.StringStream(lines[i]);
41
while (!stream.eol()) {
42
var style = mode.token(stream, state);
43
callback(stream.current(), style, i, stream.start);
44
stream.start = stream.pos;
48
node.innerHTML = accum.join("");