2 if (typeof exports
== "object" && typeof module
== "object") // CommonJS
3 mod(require("../../lib/codemirror"));
4 else if (typeof define
== "function" && define
.amd
) // AMD
5 define(["../../lib/codemirror"], mod
);
6 else // Plain browser env
8 })(function(CodeMirror
) {
11 CodeMirror
.runMode = function(string
, modespec
, callback
, options
) {
12 var mode
= CodeMirror
.getMode(CodeMirror
.defaults
, modespec
);
13 var ie
= /MSIE \d/.test(navigator
.userAgent
);
14 var ie_lt9
= ie
&& (document
.documentMode
== null || document
.documentMode
< 9);
16 if (callback
.nodeType
== 1) {
17 var tabSize
= (options
&& options
.tabSize
) || CodeMirror
.defaults
.tabSize
;
18 var node
= callback
, col
= 0;
20 callback = function(text
, style
) {
22 // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.
23 // Emitting a carriage return makes everything ok.
24 node
.appendChild(document
.createTextNode(ie_lt9
? '\r' : text
));
31 var idx
= text
.indexOf("\t", pos
);
33 content
+= text
.slice(pos
);
34 col
+= text
.length
- pos
;
38 content
+= text
.slice(pos
, idx
);
39 var size
= tabSize
- col
% tabSize
;
41 for (var i
= 0; i
< size
; ++i
) content
+= " ";
47 var sp
= node
.appendChild(document
.createElement("span"));
48 sp
.className
= "cm-" + style
.replace(/ +/g
, " cm-");
49 sp
.appendChild(document
.createTextNode(content
));
51 node
.appendChild(document
.createTextNode(content
));
56 var lines
= CodeMirror
.splitLines(string
), state
= (options
&& options
.state
) || CodeMirror
.startState(mode
);
57 for (var i
= 0, e
= lines
.length
; i
< e
; ++i
) {
58 if (i
) callback("\n");
59 var stream
= new CodeMirror
.StringStream(lines
[i
]);
60 while (!stream
.eol()) {
61 var style
= mode
.token(stream
, state
);
62 callback(stream
.current(), style
, i
, stream
.start
, state
);
63 stream
.start
= stream
.pos
;