]>
git.r.bdr.sh - rbdr/dotfiles/blob - atom/packages/pretty-json/node_modules/jsonminify/report/assets/scripts/vendor/codemirror/util/runmode-standalone.js
afdf044d8d5c5e86f24f0ecc9f69e917c65469f7
1 /* Just enough of CodeMirror to run runMode under node.js */
3 function splitLines(string
){ return string
.split(/\r?\n|\r/); };
5 function StringStream(string
) {
6 this.pos
= this.start
= 0;
9 StringStream
.prototype = {
10 eol: function() {return this.pos
>= this.string
.length
;},
11 sol: function() {return this.pos
== 0;},
12 peek: function() {return this.string
.charAt(this.pos
) || null;},
14 if (this.pos
< this.string
.length
)
15 return this.string
.charAt(this.pos
++);
17 eat: function(match
) {
18 var ch
= this.string
.charAt(this.pos
);
19 if (typeof match
== "string") var ok
= ch
== match
;
20 else var ok
= ch
&& (match
.test
? match
.test(ch
) : match(ch
));
21 if (ok
) {++this.pos
; return ch
;}
23 eatWhile: function(match
) {
25 while (this.eat(match
)){}
26 return this.pos
> start
;
28 eatSpace: function() {
30 while (/[\s\u00a0]/.test(this.string
.charAt(this.pos
))) ++this.pos
;
31 return this.pos
> start
;
33 skipToEnd: function() {this.pos
= this.string
.length
;},
34 skipTo: function(ch
) {
35 var found
= this.string
.indexOf(ch
, this.pos
);
36 if (found
> -1) {this.pos
= found
; return true;}
38 backUp: function(n
) {this.pos
-= n
;},
39 column: function() {return this.start
;},
40 indentation: function() {return 0;},
41 match: function(pattern
, consume
, caseInsensitive
) {
42 if (typeof pattern
== "string") {
43 function cased(str
) {return caseInsensitive
? str
.toLowerCase() : str
;}
44 if (cased(this.string
).indexOf(cased(pattern
), this.pos
) == this.pos
) {
45 if (consume
!== false) this.pos
+= pattern
.length
;
50 var match
= this.string
.slice(this.pos
).match(pattern
);
51 if (match
&& consume
!== false) this.pos
+= match
[0].length
;
55 current: function(){return this.string
.slice(this.start
, this.pos
);}
57 exports
.StringStream
= StringStream
;
59 exports
.startState = function(mode
, a1
, a2
) {
60 return mode
.startState
? mode
.startState(a1
, a2
) : true;
63 var modes
= exports
.modes
= {}, mimeModes
= exports
.mimeModes
= {};
64 exports
.defineMode = function(name
, mode
) { modes
[name
] = mode
; };
65 exports
.defineMIME = function(mime
, spec
) { mimeModes
[mime
] = spec
; };
66 exports
.getMode = function(options
, spec
) {
67 if (typeof spec
== "string" && mimeModes
.hasOwnProperty(spec
))
68 spec
= mimeModes
[spec
];
69 if (typeof spec
== "string")
70 var mname
= spec
, config
= {};
71 else if (spec
!= null)
72 var mname
= spec
.name
, config
= spec
;
73 var mfactory
= modes
[mname
];
74 if (!mfactory
) throw new Error("Unknown mode: " + spec
);
75 return mfactory(options
, config
|| {});
78 exports
.runMode = function(string
, modespec
, callback
) {
79 var mode
= exports
.getMode({indentUnit: 2}, modespec
);
80 var lines
= splitLines(string
), state
= exports
.startState(mode
);
81 for (var i
= 0, e
= lines
.length
; i
< e
; ++i
) {
82 if (i
) callback("\n");
83 var stream
= new exports
.StringStream(lines
[i
]);
84 while (!stream
.eol()) {
85 var style
= mode
.token(stream
, state
);
86 callback(stream
.current(), style
, i
, stream
.start
);
87 stream
.start
= stream
.pos
;