blob: 3724733c889d8b1429783bcd41f6bfb1770362f1 [file] [log] [blame]
Chinthakayala,Sheshashailavas(sc2914)8f6a6c42018-06-27 16:11:44 +00001"no use strict";
2!(function(window) {
3if (typeof window.window != "undefined" && window.document)
4 return;
5if (window.require && window.define)
6 return;
7
8if (!window.console) {
9 window.console = function() {
10 var msgs = Array.prototype.slice.call(arguments, 0);
11 postMessage({type: "log", data: msgs});
12 };
13 window.console.error =
14 window.console.warn =
15 window.console.log =
16 window.console.trace = window.console;
17}
18window.window = window;
19window.ace = window;
20
21window.onerror = function(message, file, line, col, err) {
22 postMessage({type: "error", data: {
23 message: message,
24 data: err.data,
25 file: file,
26 line: line,
27 col: col,
28 stack: err.stack
29 }});
30};
31
32window.normalizeModule = function(parentId, moduleName) {
33 // normalize plugin requires
34 if (moduleName.indexOf("!") !== -1) {
35 var chunks = moduleName.split("!");
36 return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]);
37 }
38 // normalize relative requires
39 if (moduleName.charAt(0) == ".") {
40 var base = parentId.split("/").slice(0, -1).join("/");
41 moduleName = (base ? base + "/" : "") + moduleName;
42
43 while (moduleName.indexOf(".") !== -1 && previous != moduleName) {
44 var previous = moduleName;
45 moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "");
46 }
47 }
48
49 return moduleName;
50};
51
52window.require = function require(parentId, id) {
53 if (!id) {
54 id = parentId;
55 parentId = null;
56 }
57 if (!id.charAt)
58 throw new Error("worker.js require() accepts only (parentId, id) as arguments");
59
60 id = window.normalizeModule(parentId, id);
61
62 var module = window.require.modules[id];
63 if (module) {
64 if (!module.initialized) {
65 module.initialized = true;
66 module.exports = module.factory().exports;
67 }
68 return module.exports;
69 }
70
71 if (!window.require.tlns)
72 return console.log("unable to load " + id);
73
74 var path = resolveModuleId(id, window.require.tlns);
75 if (path.slice(-3) != ".js") path += ".js";
76
77 window.require.id = id;
78 window.require.modules[id] = {}; // prevent infinite loop on broken modules
79 importScripts(path);
80 return window.require(parentId, id);
81};
82function resolveModuleId(id, paths) {
83 var testPath = id, tail = "";
84 while (testPath) {
85 var alias = paths[testPath];
86 if (typeof alias == "string") {
87 return alias + tail;
88 } else if (alias) {
89 return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name);
90 } else if (alias === false) {
91 return "";
92 }
93 var i = testPath.lastIndexOf("/");
94 if (i === -1) break;
95 tail = testPath.substr(i) + tail;
96 testPath = testPath.slice(0, i);
97 }
98 return id;
99}
100window.require.modules = {};
101window.require.tlns = {};
102
103window.define = function(id, deps, factory) {
104 if (arguments.length == 2) {
105 factory = deps;
106 if (typeof id != "string") {
107 deps = id;
108 id = window.require.id;
109 }
110 } else if (arguments.length == 1) {
111 factory = id;
112 deps = [];
113 id = window.require.id;
114 }
115
116 if (typeof factory != "function") {
117 window.require.modules[id] = {
118 exports: factory,
119 initialized: true
120 };
121 return;
122 }
123
124 if (!deps.length)
125 // If there is no dependencies, we inject "require", "exports" and
126 // "module" as dependencies, to provide CommonJS compatibility.
127 deps = ["require", "exports", "module"];
128
129 var req = function(childId) {
130 return window.require(id, childId);
131 };
132
133 window.require.modules[id] = {
134 exports: {},
135 factory: function() {
136 var module = this;
137 var returnExports = factory.apply(this, deps.map(function(dep) {
138 switch (dep) {
139 // Because "require", "exports" and "module" aren't actual
140 // dependencies, we must handle them seperately.
141 case "require": return req;
142 case "exports": return module.exports;
143 case "module": return module;
144 // But for all other dependencies, we can just go ahead and
145 // require them.
146 default: return req(dep);
147 }
148 }));
149 if (returnExports)
150 module.exports = returnExports;
151 return module;
152 }
153 };
154};
155window.define.amd = {};
156require.tlns = {};
157window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {
158 for (var i in topLevelNamespaces)
159 require.tlns[i] = topLevelNamespaces[i];
160};
161
162window.initSender = function initSender() {
163
164 var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter;
165 var oop = window.require("ace/lib/oop");
166
167 var Sender = function() {};
168
169 (function() {
170
171 oop.implement(this, EventEmitter);
172
173 this.callback = function(data, callbackId) {
174 postMessage({
175 type: "call",
176 id: callbackId,
177 data: data
178 });
179 };
180
181 this.emit = function(name, data) {
182 postMessage({
183 type: "event",
184 name: name,
185 data: data
186 });
187 };
188
189 }).call(Sender.prototype);
190
191 return new Sender();
192};
193
194var main = window.main = null;
195var sender = window.sender = null;
196
197window.onmessage = function(e) {
198 var msg = e.data;
199 if (msg.event && sender) {
200 sender._signal(msg.event, msg.data);
201 }
202 else if (msg.command) {
203 if (main[msg.command])
204 main[msg.command].apply(main, msg.args);
205 else if (window[msg.command])
206 window[msg.command].apply(window, msg.args);
207 else
208 throw new Error("Unknown command:" + msg.command);
209 }
210 else if (msg.init) {
211 window.initBaseUrls(msg.tlns);
212 require("ace/lib/es5-shim");
213 sender = window.sender = window.initSender();
214 var clazz = require(msg.module)[msg.classname];
215 main = window.main = new clazz(sender);
216 }
217};
218})(this);
219
220define("ace/lib/oop",["require","exports","module"], function(require, exports, module) {
221"use strict";
222
223exports.inherits = function(ctor, superCtor) {
224 ctor.super_ = superCtor;
225 ctor.prototype = Object.create(superCtor.prototype, {
226 constructor: {
227 value: ctor,
228 enumerable: false,
229 writable: true,
230 configurable: true
231 }
232 });
233};
234
235exports.mixin = function(obj, mixin) {
236 for (var key in mixin) {
237 obj[key] = mixin[key];
238 }
239 return obj;
240};
241
242exports.implement = function(proto, mixin) {
243 exports.mixin(proto, mixin);
244};
245
246});
247
248define("ace/lib/lang",["require","exports","module"], function(require, exports, module) {
249"use strict";
250
251exports.last = function(a) {
252 return a[a.length - 1];
253};
254
255exports.stringReverse = function(string) {
256 return string.split("").reverse().join("");
257};
258
259exports.stringRepeat = function (string, count) {
260 var result = '';
261 while (count > 0) {
262 if (count & 1)
263 result += string;
264
265 if (count >>= 1)
266 string += string;
267 }
268 return result;
269};
270
271var trimBeginRegexp = /^\s\s*/;
272var trimEndRegexp = /\s\s*$/;
273
274exports.stringTrimLeft = function (string) {
275 return string.replace(trimBeginRegexp, '');
276};
277
278exports.stringTrimRight = function (string) {
279 return string.replace(trimEndRegexp, '');
280};
281
282exports.copyObject = function(obj) {
283 var copy = {};
284 for (var key in obj) {
285 copy[key] = obj[key];
286 }
287 return copy;
288};
289
290exports.copyArray = function(array){
291 var copy = [];
292 for (var i=0, l=array.length; i<l; i++) {
293 if (array[i] && typeof array[i] == "object")
294 copy[i] = this.copyObject(array[i]);
295 else
296 copy[i] = array[i];
297 }
298 return copy;
299};
300
301exports.deepCopy = function deepCopy(obj) {
302 if (typeof obj !== "object" || !obj)
303 return obj;
304 var copy;
305 if (Array.isArray(obj)) {
306 copy = [];
307 for (var key = 0; key < obj.length; key++) {
308 copy[key] = deepCopy(obj[key]);
309 }
310 return copy;
311 }
312 if (Object.prototype.toString.call(obj) !== "[object Object]")
313 return obj;
314
315 copy = {};
316 for (var key in obj)
317 copy[key] = deepCopy(obj[key]);
318 return copy;
319};
320
321exports.arrayToMap = function(arr) {
322 var map = {};
323 for (var i=0; i<arr.length; i++) {
324 map[arr[i]] = 1;
325 }
326 return map;
327
328};
329
330exports.createMap = function(props) {
331 var map = Object.create(null);
332 for (var i in props) {
333 map[i] = props[i];
334 }
335 return map;
336};
337exports.arrayRemove = function(array, value) {
338 for (var i = 0; i <= array.length; i++) {
339 if (value === array[i]) {
340 array.splice(i, 1);
341 }
342 }
343};
344
345exports.escapeRegExp = function(str) {
346 return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
347};
348
349exports.escapeHTML = function(str) {
350 return str.replace(/&/g, "&#38;").replace(/"/g, "&#34;").replace(/'/g, "&#39;").replace(/</g, "&#60;");
351};
352
353exports.getMatchOffsets = function(string, regExp) {
354 var matches = [];
355
356 string.replace(regExp, function(str) {
357 matches.push({
358 offset: arguments[arguments.length-2],
359 length: str.length
360 });
361 });
362
363 return matches;
364};
365exports.deferredCall = function(fcn) {
366 var timer = null;
367 var callback = function() {
368 timer = null;
369 fcn();
370 };
371
372 var deferred = function(timeout) {
373 deferred.cancel();
374 timer = setTimeout(callback, timeout || 0);
375 return deferred;
376 };
377
378 deferred.schedule = deferred;
379
380 deferred.call = function() {
381 this.cancel();
382 fcn();
383 return deferred;
384 };
385
386 deferred.cancel = function() {
387 clearTimeout(timer);
388 timer = null;
389 return deferred;
390 };
391
392 deferred.isPending = function() {
393 return timer;
394 };
395
396 return deferred;
397};
398
399
400exports.delayedCall = function(fcn, defaultTimeout) {
401 var timer = null;
402 var callback = function() {
403 timer = null;
404 fcn();
405 };
406
407 var _self = function(timeout) {
408 if (timer == null)
409 timer = setTimeout(callback, timeout || defaultTimeout);
410 };
411
412 _self.delay = function(timeout) {
413 timer && clearTimeout(timer);
414 timer = setTimeout(callback, timeout || defaultTimeout);
415 };
416 _self.schedule = _self;
417
418 _self.call = function() {
419 this.cancel();
420 fcn();
421 };
422
423 _self.cancel = function() {
424 timer && clearTimeout(timer);
425 timer = null;
426 };
427
428 _self.isPending = function() {
429 return timer;
430 };
431
432 return _self;
433};
434});
435
436define("ace/range",["require","exports","module"], function(require, exports, module) {
437"use strict";
438var comparePoints = function(p1, p2) {
439 return p1.row - p2.row || p1.column - p2.column;
440};
441var Range = function(startRow, startColumn, endRow, endColumn) {
442 this.start = {
443 row: startRow,
444 column: startColumn
445 };
446
447 this.end = {
448 row: endRow,
449 column: endColumn
450 };
451};
452
453(function() {
454 this.isEqual = function(range) {
455 return this.start.row === range.start.row &&
456 this.end.row === range.end.row &&
457 this.start.column === range.start.column &&
458 this.end.column === range.end.column;
459 };
460 this.toString = function() {
461 return ("Range: [" + this.start.row + "/" + this.start.column +
462 "] -> [" + this.end.row + "/" + this.end.column + "]");
463 };
464
465 this.contains = function(row, column) {
466 return this.compare(row, column) == 0;
467 };
468 this.compareRange = function(range) {
469 var cmp,
470 end = range.end,
471 start = range.start;
472
473 cmp = this.compare(end.row, end.column);
474 if (cmp == 1) {
475 cmp = this.compare(start.row, start.column);
476 if (cmp == 1) {
477 return 2;
478 } else if (cmp == 0) {
479 return 1;
480 } else {
481 return 0;
482 }
483 } else if (cmp == -1) {
484 return -2;
485 } else {
486 cmp = this.compare(start.row, start.column);
487 if (cmp == -1) {
488 return -1;
489 } else if (cmp == 1) {
490 return 42;
491 } else {
492 return 0;
493 }
494 }
495 };
496 this.comparePoint = function(p) {
497 return this.compare(p.row, p.column);
498 };
499 this.containsRange = function(range) {
500 return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;
501 };
502 this.intersects = function(range) {
503 var cmp = this.compareRange(range);
504 return (cmp == -1 || cmp == 0 || cmp == 1);
505 };
506 this.isEnd = function(row, column) {
507 return this.end.row == row && this.end.column == column;
508 };
509 this.isStart = function(row, column) {
510 return this.start.row == row && this.start.column == column;
511 };
512 this.setStart = function(row, column) {
513 if (typeof row == "object") {
514 this.start.column = row.column;
515 this.start.row = row.row;
516 } else {
517 this.start.row = row;
518 this.start.column = column;
519 }
520 };
521 this.setEnd = function(row, column) {
522 if (typeof row == "object") {
523 this.end.column = row.column;
524 this.end.row = row.row;
525 } else {
526 this.end.row = row;
527 this.end.column = column;
528 }
529 };
530 this.inside = function(row, column) {
531 if (this.compare(row, column) == 0) {
532 if (this.isEnd(row, column) || this.isStart(row, column)) {
533 return false;
534 } else {
535 return true;
536 }
537 }
538 return false;
539 };
540 this.insideStart = function(row, column) {
541 if (this.compare(row, column) == 0) {
542 if (this.isEnd(row, column)) {
543 return false;
544 } else {
545 return true;
546 }
547 }
548 return false;
549 };
550 this.insideEnd = function(row, column) {
551 if (this.compare(row, column) == 0) {
552 if (this.isStart(row, column)) {
553 return false;
554 } else {
555 return true;
556 }
557 }
558 return false;
559 };
560 this.compare = function(row, column) {
561 if (!this.isMultiLine()) {
562 if (row === this.start.row) {
563 return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);
564 }
565 }
566
567 if (row < this.start.row)
568 return -1;
569
570 if (row > this.end.row)
571 return 1;
572
573 if (this.start.row === row)
574 return column >= this.start.column ? 0 : -1;
575
576 if (this.end.row === row)
577 return column <= this.end.column ? 0 : 1;
578
579 return 0;
580 };
581 this.compareStart = function(row, column) {
582 if (this.start.row == row && this.start.column == column) {
583 return -1;
584 } else {
585 return this.compare(row, column);
586 }
587 };
588 this.compareEnd = function(row, column) {
589 if (this.end.row == row && this.end.column == column) {
590 return 1;
591 } else {
592 return this.compare(row, column);
593 }
594 };
595 this.compareInside = function(row, column) {
596 if (this.end.row == row && this.end.column == column) {
597 return 1;
598 } else if (this.start.row == row && this.start.column == column) {
599 return -1;
600 } else {
601 return this.compare(row, column);
602 }
603 };
604 this.clipRows = function(firstRow, lastRow) {
605 if (this.end.row > lastRow)
606 var end = {row: lastRow + 1, column: 0};
607 else if (this.end.row < firstRow)
608 var end = {row: firstRow, column: 0};
609
610 if (this.start.row > lastRow)
611 var start = {row: lastRow + 1, column: 0};
612 else if (this.start.row < firstRow)
613 var start = {row: firstRow, column: 0};
614
615 return Range.fromPoints(start || this.start, end || this.end);
616 };
617 this.extend = function(row, column) {
618 var cmp = this.compare(row, column);
619
620 if (cmp == 0)
621 return this;
622 else if (cmp == -1)
623 var start = {row: row, column: column};
624 else
625 var end = {row: row, column: column};
626
627 return Range.fromPoints(start || this.start, end || this.end);
628 };
629
630 this.isEmpty = function() {
631 return (this.start.row === this.end.row && this.start.column === this.end.column);
632 };
633 this.isMultiLine = function() {
634 return (this.start.row !== this.end.row);
635 };
636 this.clone = function() {
637 return Range.fromPoints(this.start, this.end);
638 };
639 this.collapseRows = function() {
640 if (this.end.column == 0)
641 return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0);
642 else
643 return new Range(this.start.row, 0, this.end.row, 0);
644 };
645 this.toScreenRange = function(session) {
646 var screenPosStart = session.documentToScreenPosition(this.start);
647 var screenPosEnd = session.documentToScreenPosition(this.end);
648
649 return new Range(
650 screenPosStart.row, screenPosStart.column,
651 screenPosEnd.row, screenPosEnd.column
652 );
653 };
654 this.moveBy = function(row, column) {
655 this.start.row += row;
656 this.start.column += column;
657 this.end.row += row;
658 this.end.column += column;
659 };
660
661}).call(Range.prototype);
662Range.fromPoints = function(start, end) {
663 return new Range(start.row, start.column, end.row, end.column);
664};
665Range.comparePoints = comparePoints;
666
667Range.comparePoints = function(p1, p2) {
668 return p1.row - p2.row || p1.column - p2.column;
669};
670
671
672exports.Range = Range;
673});
674
675define("ace/apply_delta",["require","exports","module"], function(require, exports, module) {
676"use strict";
677
678function throwDeltaError(delta, errorText){
679 console.log("Invalid Delta:", delta);
680 throw "Invalid Delta: " + errorText;
681}
682
683function positionInDocument(docLines, position) {
684 return position.row >= 0 && position.row < docLines.length &&
685 position.column >= 0 && position.column <= docLines[position.row].length;
686}
687
688function validateDelta(docLines, delta) {
689 if (delta.action != "insert" && delta.action != "remove")
690 throwDeltaError(delta, "delta.action must be 'insert' or 'remove'");
691 if (!(delta.lines instanceof Array))
692 throwDeltaError(delta, "delta.lines must be an Array");
693 if (!delta.start || !delta.end)
694 throwDeltaError(delta, "delta.start/end must be an present");
695 var start = delta.start;
696 if (!positionInDocument(docLines, delta.start))
697 throwDeltaError(delta, "delta.start must be contained in document");
698 var end = delta.end;
699 if (delta.action == "remove" && !positionInDocument(docLines, end))
700 throwDeltaError(delta, "delta.end must contained in document for 'remove' actions");
701 var numRangeRows = end.row - start.row;
702 var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));
703 if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)
704 throwDeltaError(delta, "delta.range must match delta lines");
705}
706
707exports.applyDelta = function(docLines, delta, doNotValidate) {
708
709 var row = delta.start.row;
710 var startColumn = delta.start.column;
711 var line = docLines[row] || "";
712 switch (delta.action) {
713 case "insert":
714 var lines = delta.lines;
715 if (lines.length === 1) {
716 docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);
717 } else {
718 var args = [row, 1].concat(delta.lines);
719 docLines.splice.apply(docLines, args);
720 docLines[row] = line.substring(0, startColumn) + docLines[row];
721 docLines[row + delta.lines.length - 1] += line.substring(startColumn);
722 }
723 break;
724 case "remove":
725 var endColumn = delta.end.column;
726 var endRow = delta.end.row;
727 if (row === endRow) {
728 docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);
729 } else {
730 docLines.splice(
731 row, endRow - row + 1,
732 line.substring(0, startColumn) + docLines[endRow].substring(endColumn)
733 );
734 }
735 break;
736 }
737};
738});
739
740define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) {
741"use strict";
742
743var EventEmitter = {};
744var stopPropagation = function() { this.propagationStopped = true; };
745var preventDefault = function() { this.defaultPrevented = true; };
746
747EventEmitter._emit =
748EventEmitter._dispatchEvent = function(eventName, e) {
749 this._eventRegistry || (this._eventRegistry = {});
750 this._defaultHandlers || (this._defaultHandlers = {});
751
752 var listeners = this._eventRegistry[eventName] || [];
753 var defaultHandler = this._defaultHandlers[eventName];
754 if (!listeners.length && !defaultHandler)
755 return;
756
757 if (typeof e != "object" || !e)
758 e = {};
759
760 if (!e.type)
761 e.type = eventName;
762 if (!e.stopPropagation)
763 e.stopPropagation = stopPropagation;
764 if (!e.preventDefault)
765 e.preventDefault = preventDefault;
766
767 listeners = listeners.slice();
768 for (var i=0; i<listeners.length; i++) {
769 listeners[i](e, this);
770 if (e.propagationStopped)
771 break;
772 }
773
774 if (defaultHandler && !e.defaultPrevented)
775 return defaultHandler(e, this);
776};
777
778
779EventEmitter._signal = function(eventName, e) {
780 var listeners = (this._eventRegistry || {})[eventName];
781 if (!listeners)
782 return;
783 listeners = listeners.slice();
784 for (var i=0; i<listeners.length; i++)
785 listeners[i](e, this);
786};
787
788EventEmitter.once = function(eventName, callback) {
789 var _self = this;
790 callback && this.addEventListener(eventName, function newCallback() {
791 _self.removeEventListener(eventName, newCallback);
792 callback.apply(null, arguments);
793 });
794};
795
796
797EventEmitter.setDefaultHandler = function(eventName, callback) {
798 var handlers = this._defaultHandlers;
799 if (!handlers)
800 handlers = this._defaultHandlers = {_disabled_: {}};
801
802 if (handlers[eventName]) {
803 var old = handlers[eventName];
804 var disabled = handlers._disabled_[eventName];
805 if (!disabled)
806 handlers._disabled_[eventName] = disabled = [];
807 disabled.push(old);
808 var i = disabled.indexOf(callback);
809 if (i != -1)
810 disabled.splice(i, 1);
811 }
812 handlers[eventName] = callback;
813};
814EventEmitter.removeDefaultHandler = function(eventName, callback) {
815 var handlers = this._defaultHandlers;
816 if (!handlers)
817 return;
818 var disabled = handlers._disabled_[eventName];
819
820 if (handlers[eventName] == callback) {
821 var old = handlers[eventName];
822 if (disabled)
823 this.setDefaultHandler(eventName, disabled.pop());
824 } else if (disabled) {
825 var i = disabled.indexOf(callback);
826 if (i != -1)
827 disabled.splice(i, 1);
828 }
829};
830
831EventEmitter.on =
832EventEmitter.addEventListener = function(eventName, callback, capturing) {
833 this._eventRegistry = this._eventRegistry || {};
834
835 var listeners = this._eventRegistry[eventName];
836 if (!listeners)
837 listeners = this._eventRegistry[eventName] = [];
838
839 if (listeners.indexOf(callback) == -1)
840 listeners[capturing ? "unshift" : "push"](callback);
841 return callback;
842};
843
844EventEmitter.off =
845EventEmitter.removeListener =
846EventEmitter.removeEventListener = function(eventName, callback) {
847 this._eventRegistry = this._eventRegistry || {};
848
849 var listeners = this._eventRegistry[eventName];
850 if (!listeners)
851 return;
852
853 var index = listeners.indexOf(callback);
854 if (index !== -1)
855 listeners.splice(index, 1);
856};
857
858EventEmitter.removeAllListeners = function(eventName) {
859 if (this._eventRegistry) this._eventRegistry[eventName] = [];
860};
861
862exports.EventEmitter = EventEmitter;
863
864});
865
866define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) {
867"use strict";
868
869var oop = require("./lib/oop");
870var EventEmitter = require("./lib/event_emitter").EventEmitter;
871
872var Anchor = exports.Anchor = function(doc, row, column) {
873 this.$onChange = this.onChange.bind(this);
874 this.attach(doc);
875
876 if (typeof column == "undefined")
877 this.setPosition(row.row, row.column);
878 else
879 this.setPosition(row, column);
880};
881
882(function() {
883
884 oop.implement(this, EventEmitter);
885 this.getPosition = function() {
886 return this.$clipPositionToDocument(this.row, this.column);
887 };
888 this.getDocument = function() {
889 return this.document;
890 };
891 this.$insertRight = false;
892 this.onChange = function(delta) {
893 if (delta.start.row == delta.end.row && delta.start.row != this.row)
894 return;
895
896 if (delta.start.row > this.row)
897 return;
898
899 var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);
900 this.setPosition(point.row, point.column, true);
901 };
902
903 function $pointsInOrder(point1, point2, equalPointsInOrder) {
904 var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;
905 return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);
906 }
907
908 function $getTransformedPoint(delta, point, moveIfEqual) {
909 var deltaIsInsert = delta.action == "insert";
910 var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);
911 var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);
912 var deltaStart = delta.start;
913 var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.
914 if ($pointsInOrder(point, deltaStart, moveIfEqual)) {
915 return {
916 row: point.row,
917 column: point.column
918 };
919 }
920 if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {
921 return {
922 row: point.row + deltaRowShift,
923 column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)
924 };
925 }
926
927 return {
928 row: deltaStart.row,
929 column: deltaStart.column
930 };
931 }
932 this.setPosition = function(row, column, noClip) {
933 var pos;
934 if (noClip) {
935 pos = {
936 row: row,
937 column: column
938 };
939 } else {
940 pos = this.$clipPositionToDocument(row, column);
941 }
942
943 if (this.row == pos.row && this.column == pos.column)
944 return;
945
946 var old = {
947 row: this.row,
948 column: this.column
949 };
950
951 this.row = pos.row;
952 this.column = pos.column;
953 this._signal("change", {
954 old: old,
955 value: pos
956 });
957 };
958 this.detach = function() {
959 this.document.removeEventListener("change", this.$onChange);
960 };
961 this.attach = function(doc) {
962 this.document = doc || this.document;
963 this.document.on("change", this.$onChange);
964 };
965 this.$clipPositionToDocument = function(row, column) {
966 var pos = {};
967
968 if (row >= this.document.getLength()) {
969 pos.row = Math.max(0, this.document.getLength() - 1);
970 pos.column = this.document.getLine(pos.row).length;
971 }
972 else if (row < 0) {
973 pos.row = 0;
974 pos.column = 0;
975 }
976 else {
977 pos.row = row;
978 pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));
979 }
980
981 if (column < 0)
982 pos.column = 0;
983
984 return pos;
985 };
986
987}).call(Anchor.prototype);
988
989});
990
991define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) {
992"use strict";
993
994var oop = require("./lib/oop");
995var applyDelta = require("./apply_delta").applyDelta;
996var EventEmitter = require("./lib/event_emitter").EventEmitter;
997var Range = require("./range").Range;
998var Anchor = require("./anchor").Anchor;
999
1000var Document = function(textOrLines) {
1001 this.$lines = [""];
1002 if (textOrLines.length === 0) {
1003 this.$lines = [""];
1004 } else if (Array.isArray(textOrLines)) {
1005 this.insertMergedLines({row: 0, column: 0}, textOrLines);
1006 } else {
1007 this.insert({row: 0, column:0}, textOrLines);
1008 }
1009};
1010
1011(function() {
1012
1013 oop.implement(this, EventEmitter);
1014 this.setValue = function(text) {
1015 var len = this.getLength() - 1;
1016 this.remove(new Range(0, 0, len, this.getLine(len).length));
1017 this.insert({row: 0, column: 0}, text);
1018 };
1019 this.getValue = function() {
1020 return this.getAllLines().join(this.getNewLineCharacter());
1021 };
1022 this.createAnchor = function(row, column) {
1023 return new Anchor(this, row, column);
1024 };
1025 if ("aaa".split(/a/).length === 0) {
1026 this.$split = function(text) {
1027 return text.replace(/\r\n|\r/g, "\n").split("\n");
1028 };
1029 } else {
1030 this.$split = function(text) {
1031 return text.split(/\r\n|\r|\n/);
1032 };
1033 }
1034
1035
1036 this.$detectNewLine = function(text) {
1037 var match = text.match(/^.*?(\r\n|\r|\n)/m);
1038 this.$autoNewLine = match ? match[1] : "\n";
1039 this._signal("changeNewLineMode");
1040 };
1041 this.getNewLineCharacter = function() {
1042 switch (this.$newLineMode) {
1043 case "windows":
1044 return "\r\n";
1045 case "unix":
1046 return "\n";
1047 default:
1048 return this.$autoNewLine || "\n";
1049 }
1050 };
1051
1052 this.$autoNewLine = "";
1053 this.$newLineMode = "auto";
1054 this.setNewLineMode = function(newLineMode) {
1055 if (this.$newLineMode === newLineMode)
1056 return;
1057
1058 this.$newLineMode = newLineMode;
1059 this._signal("changeNewLineMode");
1060 };
1061 this.getNewLineMode = function() {
1062 return this.$newLineMode;
1063 };
1064 this.isNewLine = function(text) {
1065 return (text == "\r\n" || text == "\r" || text == "\n");
1066 };
1067 this.getLine = function(row) {
1068 return this.$lines[row] || "";
1069 };
1070 this.getLines = function(firstRow, lastRow) {
1071 return this.$lines.slice(firstRow, lastRow + 1);
1072 };
1073 this.getAllLines = function() {
1074 return this.getLines(0, this.getLength());
1075 };
1076 this.getLength = function() {
1077 return this.$lines.length;
1078 };
1079 this.getTextRange = function(range) {
1080 return this.getLinesForRange(range).join(this.getNewLineCharacter());
1081 };
1082 this.getLinesForRange = function(range) {
1083 var lines;
1084 if (range.start.row === range.end.row) {
1085 lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];
1086 } else {
1087 lines = this.getLines(range.start.row, range.end.row);
1088 lines[0] = (lines[0] || "").substring(range.start.column);
1089 var l = lines.length - 1;
1090 if (range.end.row - range.start.row == l)
1091 lines[l] = lines[l].substring(0, range.end.column);
1092 }
1093 return lines;
1094 };
1095 this.insertLines = function(row, lines) {
1096 console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead.");
1097 return this.insertFullLines(row, lines);
1098 };
1099 this.removeLines = function(firstRow, lastRow) {
1100 console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead.");
1101 return this.removeFullLines(firstRow, lastRow);
1102 };
1103 this.insertNewLine = function(position) {
1104 console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.");
1105 return this.insertMergedLines(position, ["", ""]);
1106 };
1107 this.insert = function(position, text) {
1108 if (this.getLength() <= 1)
1109 this.$detectNewLine(text);
1110
1111 return this.insertMergedLines(position, this.$split(text));
1112 };
1113 this.insertInLine = function(position, text) {
1114 var start = this.clippedPos(position.row, position.column);
1115 var end = this.pos(position.row, position.column + text.length);
1116
1117 this.applyDelta({
1118 start: start,
1119 end: end,
1120 action: "insert",
1121 lines: [text]
1122 }, true);
1123
1124 return this.clonePos(end);
1125 };
1126
1127 this.clippedPos = function(row, column) {
1128 var length = this.getLength();
1129 if (row === undefined) {
1130 row = length;
1131 } else if (row < 0) {
1132 row = 0;
1133 } else if (row >= length) {
1134 row = length - 1;
1135 column = undefined;
1136 }
1137 var line = this.getLine(row);
1138 if (column == undefined)
1139 column = line.length;
1140 column = Math.min(Math.max(column, 0), line.length);
1141 return {row: row, column: column};
1142 };
1143
1144 this.clonePos = function(pos) {
1145 return {row: pos.row, column: pos.column};
1146 };
1147
1148 this.pos = function(row, column) {
1149 return {row: row, column: column};
1150 };
1151
1152 this.$clipPosition = function(position) {
1153 var length = this.getLength();
1154 if (position.row >= length) {
1155 position.row = Math.max(0, length - 1);
1156 position.column = this.getLine(length - 1).length;
1157 } else {
1158 position.row = Math.max(0, position.row);
1159 position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);
1160 }
1161 return position;
1162 };
1163 this.insertFullLines = function(row, lines) {
1164 row = Math.min(Math.max(row, 0), this.getLength());
1165 var column = 0;
1166 if (row < this.getLength()) {
1167 lines = lines.concat([""]);
1168 column = 0;
1169 } else {
1170 lines = [""].concat(lines);
1171 row--;
1172 column = this.$lines[row].length;
1173 }
1174 this.insertMergedLines({row: row, column: column}, lines);
1175 };
1176 this.insertMergedLines = function(position, lines) {
1177 var start = this.clippedPos(position.row, position.column);
1178 var end = {
1179 row: start.row + lines.length - 1,
1180 column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length
1181 };
1182
1183 this.applyDelta({
1184 start: start,
1185 end: end,
1186 action: "insert",
1187 lines: lines
1188 });
1189
1190 return this.clonePos(end);
1191 };
1192 this.remove = function(range) {
1193 var start = this.clippedPos(range.start.row, range.start.column);
1194 var end = this.clippedPos(range.end.row, range.end.column);
1195 this.applyDelta({
1196 start: start,
1197 end: end,
1198 action: "remove",
1199 lines: this.getLinesForRange({start: start, end: end})
1200 });
1201 return this.clonePos(start);
1202 };
1203 this.removeInLine = function(row, startColumn, endColumn) {
1204 var start = this.clippedPos(row, startColumn);
1205 var end = this.clippedPos(row, endColumn);
1206
1207 this.applyDelta({
1208 start: start,
1209 end: end,
1210 action: "remove",
1211 lines: this.getLinesForRange({start: start, end: end})
1212 }, true);
1213
1214 return this.clonePos(start);
1215 };
1216 this.removeFullLines = function(firstRow, lastRow) {
1217 firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);
1218 lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1);
1219 var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;
1220 var deleteLastNewLine = lastRow < this.getLength() - 1;
1221 var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow );
1222 var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 );
1223 var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow );
1224 var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length );
1225 var range = new Range(startRow, startCol, endRow, endCol);
1226 var deletedLines = this.$lines.slice(firstRow, lastRow + 1);
1227
1228 this.applyDelta({
1229 start: range.start,
1230 end: range.end,
1231 action: "remove",
1232 lines: this.getLinesForRange(range)
1233 });
1234 return deletedLines;
1235 };
1236 this.removeNewLine = function(row) {
1237 if (row < this.getLength() - 1 && row >= 0) {
1238 this.applyDelta({
1239 start: this.pos(row, this.getLine(row).length),
1240 end: this.pos(row + 1, 0),
1241 action: "remove",
1242 lines: ["", ""]
1243 });
1244 }
1245 };
1246 this.replace = function(range, text) {
1247 if (!(range instanceof Range))
1248 range = Range.fromPoints(range.start, range.end);
1249 if (text.length === 0 && range.isEmpty())
1250 return range.start;
1251 if (text == this.getTextRange(range))
1252 return range.end;
1253
1254 this.remove(range);
1255 var end;
1256 if (text) {
1257 end = this.insert(range.start, text);
1258 }
1259 else {
1260 end = range.start;
1261 }
1262
1263 return end;
1264 };
1265 this.applyDeltas = function(deltas) {
1266 for (var i=0; i<deltas.length; i++) {
1267 this.applyDelta(deltas[i]);
1268 }
1269 };
1270 this.revertDeltas = function(deltas) {
1271 for (var i=deltas.length-1; i>=0; i--) {
1272 this.revertDelta(deltas[i]);
1273 }
1274 };
1275 this.applyDelta = function(delta, doNotValidate) {
1276 var isInsert = delta.action == "insert";
1277 if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]
1278 : !Range.comparePoints(delta.start, delta.end)) {
1279 return;
1280 }
1281
1282 if (isInsert && delta.lines.length > 20000)
1283 this.$splitAndapplyLargeDelta(delta, 20000);
1284 applyDelta(this.$lines, delta, doNotValidate);
1285 this._signal("change", delta);
1286 };
1287
1288 this.$splitAndapplyLargeDelta = function(delta, MAX) {
1289 var lines = delta.lines;
1290 var l = lines.length;
1291 var row = delta.start.row;
1292 var column = delta.start.column;
1293 var from = 0, to = 0;
1294 do {
1295 from = to;
1296 to += MAX - 1;
1297 var chunk = lines.slice(from, to);
1298 if (to > l) {
1299 delta.lines = chunk;
1300 delta.start.row = row + from;
1301 delta.start.column = column;
1302 break;
1303 }
1304 chunk.push("");
1305 this.applyDelta({
1306 start: this.pos(row + from, column),
1307 end: this.pos(row + to, column = 0),
1308 action: delta.action,
1309 lines: chunk
1310 }, true);
1311 } while(true);
1312 };
1313 this.revertDelta = function(delta) {
1314 this.applyDelta({
1315 start: this.clonePos(delta.start),
1316 end: this.clonePos(delta.end),
1317 action: (delta.action == "insert" ? "remove" : "insert"),
1318 lines: delta.lines.slice()
1319 });
1320 };
1321 this.indexToPosition = function(index, startRow) {
1322 var lines = this.$lines || this.getAllLines();
1323 var newlineLength = this.getNewLineCharacter().length;
1324 for (var i = startRow || 0, l = lines.length; i < l; i++) {
1325 index -= lines[i].length + newlineLength;
1326 if (index < 0)
1327 return {row: i, column: index + lines[i].length + newlineLength};
1328 }
1329 return {row: l-1, column: lines[l-1].length};
1330 };
1331 this.positionToIndex = function(pos, startRow) {
1332 var lines = this.$lines || this.getAllLines();
1333 var newlineLength = this.getNewLineCharacter().length;
1334 var index = 0;
1335 var row = Math.min(pos.row, lines.length);
1336 for (var i = startRow || 0; i < row; ++i)
1337 index += lines[i].length + newlineLength;
1338
1339 return index + pos.column;
1340 };
1341
1342}).call(Document.prototype);
1343
1344exports.Document = Document;
1345});
1346
1347define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) {
1348"use strict";
1349
1350var Range = require("../range").Range;
1351var Document = require("../document").Document;
1352var lang = require("../lib/lang");
1353
1354var Mirror = exports.Mirror = function(sender) {
1355 this.sender = sender;
1356 var doc = this.doc = new Document("");
1357
1358 var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this));
1359
1360 var _self = this;
1361 sender.on("change", function(e) {
1362 var data = e.data;
1363 if (data[0].start) {
1364 doc.applyDeltas(data);
1365 } else {
1366 for (var i = 0; i < data.length; i += 2) {
1367 if (Array.isArray(data[i+1])) {
1368 var d = {action: "insert", start: data[i], lines: data[i+1]};
1369 } else {
1370 var d = {action: "remove", start: data[i], end: data[i+1]};
1371 }
1372 doc.applyDelta(d, true);
1373 }
1374 }
1375 if (_self.$timeout)
1376 return deferredUpdate.schedule(_self.$timeout);
1377 _self.onUpdate();
1378 });
1379};
1380
1381(function() {
1382
1383 this.$timeout = 500;
1384
1385 this.setTimeout = function(timeout) {
1386 this.$timeout = timeout;
1387 };
1388
1389 this.setValue = function(value) {
1390 this.doc.setValue(value);
1391 this.deferredUpdate.schedule(this.$timeout);
1392 };
1393
1394 this.getValue = function(callbackId) {
1395 this.sender.callback(this.doc.getValue(), callbackId);
1396 };
1397
1398 this.onUpdate = function() {
1399 };
1400
1401 this.isPending = function() {
1402 return this.deferredUpdate.isPending();
1403 };
1404
1405}).call(Mirror.prototype);
1406
1407});
1408
1409define("ace/mode/xml/sax",["require","exports","module"], function(require, exports, module) {
1410var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
1411var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\u00B7\u0300-\u036F\\ux203F-\u2040]");
1412var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
1413var S_TAG = 0;//tag name offerring
1414var S_ATTR = 1;//attr name offerring
1415var S_ATTR_S=2;//attr name end and space offer
1416var S_EQ = 3;//=space?
1417var S_V = 4;//attr value(no quot value only)
1418var S_E = 5;//attr value end and no space(quot end)
1419var S_S = 6;//(attr value end || tag end ) && (space offer)
1420var S_C = 7;//closed el<el />
1421
1422function XMLReader(){
1423
1424}
1425
1426XMLReader.prototype = {
1427 parse:function(source,defaultNSMap,entityMap){
1428 var domBuilder = this.domBuilder;
1429 domBuilder.startDocument();
1430 _copy(defaultNSMap ,defaultNSMap = {})
1431 parse(source,defaultNSMap,entityMap,
1432 domBuilder,this.errorHandler);
1433 domBuilder.endDocument();
1434 }
1435}
1436function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
1437 function fixedFromCharCode(code) {
1438 if (code > 0xffff) {
1439 code -= 0x10000;
1440 var surrogate1 = 0xd800 + (code >> 10)
1441 , surrogate2 = 0xdc00 + (code & 0x3ff);
1442
1443 return String.fromCharCode(surrogate1, surrogate2);
1444 } else {
1445 return String.fromCharCode(code);
1446 }
1447 }
1448 function entityReplacer(a){
1449 var k = a.slice(1,-1);
1450 if(k in entityMap){
1451 return entityMap[k];
1452 }else if(k.charAt(0) === '#'){
1453 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
1454 }else{
1455 errorHandler.error('entity not found:'+a);
1456 return a;
1457 }
1458 }
1459 function appendText(end){//has some bugs
1460 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
1461 locator&&position(start);
1462 domBuilder.characters(xt,0,end-start);
1463 start = end
1464 }
1465 function position(start,m){
1466 while(start>=endPos && (m = linePattern.exec(source))){
1467 startPos = m.index;
1468 endPos = startPos + m[0].length;
1469 locator.lineNumber++;
1470 }
1471 locator.columnNumber = start-startPos+1;
1472 }
1473 var startPos = 0;
1474 var endPos = 0;
1475 var linePattern = /.+(?:\r\n?|\n)|.*$/g
1476 var locator = domBuilder.locator;
1477
1478 var parseStack = [{currentNSMap:defaultNSMapCopy}]
1479 var closeMap = {};
1480 var start = 0;
1481 while(true){
1482 var i = source.indexOf('<',start);
1483 if(i<0){
1484 if(!source.substr(start).match(/^\s*$/)){
1485 var doc = domBuilder.document;
1486 var text = doc.createTextNode(source.substr(start));
1487 doc.appendChild(text);
1488 domBuilder.currentElement = text;
1489 }
1490 return;
1491 }
1492 if(i>start){
1493 appendText(i);
1494 }
1495 switch(source.charAt(i+1)){
1496 case '/':
1497 var end = source.indexOf('>',i+3);
1498 var tagName = source.substring(i+2,end);
1499 var config;
1500 if (parseStack.length > 1) {
1501 config = parseStack.pop();
1502 } else {
1503 errorHandler.fatalError("end tag name not found for: "+tagName);
1504 break;
1505 }
1506 var localNSMap = config.localNSMap;
1507
1508 if(config.tagName != tagName){
1509 errorHandler.fatalError("end tag name: " + tagName + " does not match the current start tagName: "+config.tagName );
1510 }
1511 domBuilder.endElement(config.uri,config.localName,tagName);
1512 if(localNSMap){
1513 for(var prefix in localNSMap){
1514 domBuilder.endPrefixMapping(prefix) ;
1515 }
1516 }
1517 end++;
1518 break;
1519 case '?':// <?...?>
1520 locator&&position(i);
1521 end = parseInstruction(source,i,domBuilder);
1522 break;
1523 case '!':// <!doctype,<![CDATA,<!--
1524 locator&&position(i);
1525 end = parseDCC(source,i,domBuilder,errorHandler);
1526 break;
1527 default:
1528 try{
1529 locator&&position(i);
1530
1531 var el = new ElementAttributes();
1532 var end = parseElementStartPart(source,i,el,entityReplacer,errorHandler);
1533 var len = el.length;
1534 if(len && locator){
1535 var backup = copyLocator(locator,{});
1536 for(var i = 0;i<len;i++){
1537 var a = el[i];
1538 position(a.offset);
1539 a.offset = copyLocator(locator,{});
1540 }
1541 copyLocator(backup,locator);
1542 }
1543 if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
1544 el.closed = true;
1545 if(!entityMap.nbsp){
1546 errorHandler.warning('unclosed xml attribute');
1547 }
1548 }
1549 appendElement(el,domBuilder,parseStack);
1550
1551
1552 if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
1553 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
1554 }else{
1555 end++;
1556 }
1557 }catch(e){
1558 errorHandler.error('element parse error: '+e);
1559 end = -1;
1560 }
1561
1562 }
1563 if(end<0){
1564 appendText(i+1);
1565 }else{
1566 start = end;
1567 }
1568 }
1569}
1570function copyLocator(f,t){
1571 t.lineNumber = f.lineNumber;
1572 t.columnNumber = f.columnNumber;
1573 return t;
1574
1575}
1576function parseElementStartPart(source,start,el,entityReplacer,errorHandler){
1577 var attrName;
1578 var value;
1579 var p = ++start;
1580 var s = S_TAG;//status
1581 while(true){
1582 var c = source.charAt(p);
1583 switch(c){
1584 case '=':
1585 if(s === S_ATTR){//attrName
1586 attrName = source.slice(start,p);
1587 s = S_EQ;
1588 }else if(s === S_ATTR_S){
1589 s = S_EQ;
1590 }else{
1591 throw new Error('attribute equal must after attrName');
1592 }
1593 break;
1594 case '\'':
1595 case '"':
1596 if(s === S_EQ){//equal
1597 start = p+1;
1598 p = source.indexOf(c,start)
1599 if(p>0){
1600 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
1601 el.add(attrName,value,start-1);
1602 s = S_E;
1603 }else{
1604 throw new Error('attribute value no end \''+c+'\' match');
1605 }
1606 }else if(s == S_V){
1607 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
1608 el.add(attrName,value,start);
1609 errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
1610 start = p+1;
1611 s = S_E
1612 }else{
1613 throw new Error('attribute value must after "="');
1614 }
1615 break;
1616 case '/':
1617 switch(s){
1618 case S_TAG:
1619 el.setTagName(source.slice(start,p));
1620 case S_E:
1621 case S_S:
1622 case S_C:
1623 s = S_C;
1624 el.closed = true;
1625 case S_V:
1626 case S_ATTR:
1627 case S_ATTR_S:
1628 break;
1629 default:
1630 throw new Error("attribute invalid close char('/')")
1631 }
1632 break;
1633 case ''://end document
1634 errorHandler.error('unexpected end of input');
1635 case '>':
1636 switch(s){
1637 case S_TAG:
1638 el.setTagName(source.slice(start,p));
1639 case S_E:
1640 case S_S:
1641 case S_C:
1642 break;//normal
1643 case S_V://Compatible state
1644 case S_ATTR:
1645 value = source.slice(start,p);
1646 if(value.slice(-1) === '/'){
1647 el.closed = true;
1648 value = value.slice(0,-1)
1649 }
1650 case S_ATTR_S:
1651 if(s === S_ATTR_S){
1652 value = attrName;
1653 }
1654 if(s == S_V){
1655 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
1656 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start)
1657 }else{
1658 errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
1659 el.add(value,value,start)
1660 }
1661 break;
1662 case S_EQ:
1663 throw new Error('attribute value missed!!');
1664 }
1665 return p;
1666 case '\u0080':
1667 c = ' ';
1668 default:
1669 if(c<= ' '){//space
1670 switch(s){
1671 case S_TAG:
1672 el.setTagName(source.slice(start,p));//tagName
1673 s = S_S;
1674 break;
1675 case S_ATTR:
1676 attrName = source.slice(start,p)
1677 s = S_ATTR_S;
1678 break;
1679 case S_V:
1680 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
1681 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
1682 el.add(attrName,value,start)
1683 case S_E:
1684 s = S_S;
1685 break;
1686 }
1687 }else{//not space
1688 switch(s){
1689 case S_ATTR_S:
1690 errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead!!')
1691 el.add(attrName,attrName,start);
1692 start = p;
1693 s = S_ATTR;
1694 break;
1695 case S_E:
1696 errorHandler.warning('attribute space is required"'+attrName+'"!!')
1697 case S_S:
1698 s = S_ATTR;
1699 start = p;
1700 break;
1701 case S_EQ:
1702 s = S_V;
1703 start = p;
1704 break;
1705 case S_C:
1706 throw new Error("elements closed character '/' and '>' must be connected to");
1707 }
1708 }
1709 }
1710 p++;
1711 }
1712}
1713function appendElement(el,domBuilder,parseStack){
1714 var tagName = el.tagName;
1715 var localNSMap = null;
1716 var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
1717 var i = el.length;
1718 while(i--){
1719 var a = el[i];
1720 var qName = a.qName;
1721 var value = a.value;
1722 var nsp = qName.indexOf(':');
1723 if(nsp>0){
1724 var prefix = a.prefix = qName.slice(0,nsp);
1725 var localName = qName.slice(nsp+1);
1726 var nsPrefix = prefix === 'xmlns' && localName
1727 }else{
1728 localName = qName;
1729 prefix = null
1730 nsPrefix = qName === 'xmlns' && ''
1731 }
1732 a.localName = localName ;
1733 if(nsPrefix !== false){//hack!!
1734 if(localNSMap == null){
1735 localNSMap = {}
1736 _copy(currentNSMap,currentNSMap={})
1737 }
1738 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
1739 a.uri = 'http://www.w3.org/2000/xmlns/'
1740 domBuilder.startPrefixMapping(nsPrefix, value)
1741 }
1742 }
1743 var i = el.length;
1744 while(i--){
1745 a = el[i];
1746 var prefix = a.prefix;
1747 if(prefix){//no prefix attribute has no namespace
1748 if(prefix === 'xml'){
1749 a.uri = 'http://www.w3.org/XML/1998/namespace';
1750 }if(prefix !== 'xmlns'){
1751 a.uri = currentNSMap[prefix]
1752 }
1753 }
1754 }
1755 var nsp = tagName.indexOf(':');
1756 if(nsp>0){
1757 prefix = el.prefix = tagName.slice(0,nsp);
1758 localName = el.localName = tagName.slice(nsp+1);
1759 }else{
1760 prefix = null;//important!!
1761 localName = el.localName = tagName;
1762 }
1763 var ns = el.uri = currentNSMap[prefix || ''];
1764 domBuilder.startElement(ns,localName,tagName,el);
1765 if(el.closed){
1766 domBuilder.endElement(ns,localName,tagName);
1767 if(localNSMap){
1768 for(prefix in localNSMap){
1769 domBuilder.endPrefixMapping(prefix)
1770 }
1771 }
1772 }else{
1773 el.currentNSMap = currentNSMap;
1774 el.localNSMap = localNSMap;
1775 parseStack.push(el);
1776 }
1777}
1778function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
1779 if(/^(?:script|textarea)$/i.test(tagName)){
1780 var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);
1781 var text = source.substring(elStartEnd+1,elEndStart);
1782 if(/[&<]/.test(text)){
1783 if(/^script$/i.test(tagName)){
1784 domBuilder.characters(text,0,text.length);
1785 return elEndStart;
1786 }//}else{//text area
1787 text = text.replace(/&#?\w+;/g,entityReplacer);
1788 domBuilder.characters(text,0,text.length);
1789 return elEndStart;
1790
1791 }
1792 }
1793 return elStartEnd+1;
1794}
1795function fixSelfClosed(source,elStartEnd,tagName,closeMap){
1796 var pos = closeMap[tagName];
1797 if(pos == null){
1798 pos = closeMap[tagName] = source.lastIndexOf('</'+tagName+'>')
1799 }
1800 return pos<elStartEnd;
1801}
1802function _copy(source,target){
1803 for(var n in source){target[n] = source[n]}
1804}
1805function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
1806 var next= source.charAt(start+2)
1807 switch(next){
1808 case '-':
1809 if(source.charAt(start + 3) === '-'){
1810 var end = source.indexOf('-->',start+4);
1811 if(end>start){
1812 domBuilder.comment(source,start+4,end-start-4);
1813 return end+3;
1814 }else{
1815 errorHandler.error("Unclosed comment");
1816 return -1;
1817 }
1818 }else{
1819 return -1;
1820 }
1821 default:
1822 if(source.substr(start+3,6) == 'CDATA['){
1823 var end = source.indexOf(']]>',start+9);
1824 domBuilder.startCDATA();
1825 domBuilder.characters(source,start+9,end-start-9);
1826 domBuilder.endCDATA()
1827 return end+3;
1828 }
1829 var matchs = split(source,start);
1830 var len = matchs.length;
1831 if(len>1 && /!doctype/i.test(matchs[0][0])){
1832 var name = matchs[1][0];
1833 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0]
1834 var sysid = len>4 && matchs[4][0];
1835 var lastMatch = matchs[len-1]
1836 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
1837 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
1838 domBuilder.endDTD();
1839
1840 return lastMatch.index+lastMatch[0].length
1841 }
1842 }
1843 return -1;
1844}
1845
1846
1847
1848function parseInstruction(source,start,domBuilder){
1849 var end = source.indexOf('?>',start);
1850 if(end){
1851 var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
1852 if(match){
1853 var len = match[0].length;
1854 domBuilder.processingInstruction(match[1], match[2]) ;
1855 return end+2;
1856 }else{//error
1857 return -1;
1858 }
1859 }
1860 return -1;
1861}
1862function ElementAttributes(source){
1863
1864}
1865ElementAttributes.prototype = {
1866 setTagName:function(tagName){
1867 if(!tagNamePattern.test(tagName)){
1868 throw new Error('invalid tagName:'+tagName)
1869 }
1870 this.tagName = tagName
1871 },
1872 add:function(qName,value,offset){
1873 if(!tagNamePattern.test(qName)){
1874 throw new Error('invalid attribute:'+qName)
1875 }
1876 this[this.length++] = {qName:qName,value:value,offset:offset}
1877 },
1878 length:0,
1879 getLocalName:function(i){return this[i].localName},
1880 getOffset:function(i){return this[i].offset},
1881 getQName:function(i){return this[i].qName},
1882 getURI:function(i){return this[i].uri},
1883 getValue:function(i){return this[i].value}
1884}
1885
1886
1887
1888
1889function _set_proto_(thiz,parent){
1890 thiz.__proto__ = parent;
1891 return thiz;
1892}
1893if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
1894 _set_proto_ = function(thiz,parent){
1895 function p(){};
1896 p.prototype = parent;
1897 p = new p();
1898 for(parent in thiz){
1899 p[parent] = thiz[parent];
1900 }
1901 return p;
1902 }
1903}
1904
1905function split(source,start){
1906 var match;
1907 var buf = [];
1908 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
1909 reg.lastIndex = start;
1910 reg.exec(source);//skip <
1911 while(match = reg.exec(source)){
1912 buf.push(match);
1913 if(match[1])return buf;
1914 }
1915}
1916
1917return XMLReader;
1918});
1919
1920define("ace/mode/xml/dom",["require","exports","module"], function(require, exports, module) {
1921
1922function copy(src,dest){
1923 for(var p in src){
1924 dest[p] = src[p];
1925 }
1926}
1927function _extends(Class,Super){
1928 var pt = Class.prototype;
1929 if(Object.create){
1930 var ppt = Object.create(Super.prototype)
1931 pt.__proto__ = ppt;
1932 }
1933 if(!(pt instanceof Super)){
1934 function t(){};
1935 t.prototype = Super.prototype;
1936 t = new t();
1937 copy(pt,t);
1938 Class.prototype = pt = t;
1939 }
1940 if(pt.constructor != Class){
1941 if(typeof Class != 'function'){
1942 console.error("unknow Class:"+Class)
1943 }
1944 pt.constructor = Class
1945 }
1946}
1947var htmlns = 'http://www.w3.org/1999/xhtml' ;
1948var NodeType = {}
1949var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;
1950var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;
1951var TEXT_NODE = NodeType.TEXT_NODE = 3;
1952var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;
1953var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;
1954var ENTITY_NODE = NodeType.ENTITY_NODE = 6;
1955var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
1956var COMMENT_NODE = NodeType.COMMENT_NODE = 8;
1957var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;
1958var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;
1959var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;
1960var NOTATION_NODE = NodeType.NOTATION_NODE = 12;
1961var ExceptionCode = {}
1962var ExceptionMessage = {};
1963var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1);
1964var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2);
1965var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3);
1966var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4);
1967var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
1968var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6);
1969var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
1970var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8);
1971var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9);
1972var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10);
1973var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11);
1974var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12);
1975var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13);
1976var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14);
1977var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15);
1978
1979
1980function DOMException(code, message) {
1981 if(message instanceof Error){
1982 var error = message;
1983 }else{
1984 error = this;
1985 Error.call(this, ExceptionMessage[code]);
1986 this.message = ExceptionMessage[code];
1987 if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
1988 }
1989 error.code = code;
1990 if(message) this.message = this.message + ": " + message;
1991 return error;
1992};
1993DOMException.prototype = Error.prototype;
1994copy(ExceptionCode,DOMException)
1995function NodeList() {
1996};
1997NodeList.prototype = {
1998 length:0,
1999 item: function(index) {
2000 return this[index] || null;
2001 }
2002};
2003function LiveNodeList(node,refresh){
2004 this._node = node;
2005 this._refresh = refresh
2006 _updateLiveList(this);
2007}
2008function _updateLiveList(list){
2009 var inc = list._node._inc || list._node.ownerDocument._inc;
2010 if(list._inc != inc){
2011 var ls = list._refresh(list._node);
2012 __set__(list,'length',ls.length);
2013 copy(ls,list);
2014 list._inc = inc;
2015 }
2016}
2017LiveNodeList.prototype.item = function(i){
2018 _updateLiveList(this);
2019 return this[i];
2020}
2021
2022_extends(LiveNodeList,NodeList);
2023function NamedNodeMap() {
2024};
2025
2026function _findNodeIndex(list,node){
2027 var i = list.length;
2028 while(i--){
2029 if(list[i] === node){return i}
2030 }
2031}
2032
2033function _addNamedNode(el,list,newAttr,oldAttr){
2034 if(oldAttr){
2035 list[_findNodeIndex(list,oldAttr)] = newAttr;
2036 }else{
2037 list[list.length++] = newAttr;
2038 }
2039 if(el){
2040 newAttr.ownerElement = el;
2041 var doc = el.ownerDocument;
2042 if(doc){
2043 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
2044 _onAddAttribute(doc,el,newAttr);
2045 }
2046 }
2047}
2048function _removeNamedNode(el,list,attr){
2049 var i = _findNodeIndex(list,attr);
2050 if(i>=0){
2051 var lastIndex = list.length-1
2052 while(i<lastIndex){
2053 list[i] = list[++i]
2054 }
2055 list.length = lastIndex;
2056 if(el){
2057 var doc = el.ownerDocument;
2058 if(doc){
2059 _onRemoveAttribute(doc,el,attr);
2060 attr.ownerElement = null;
2061 }
2062 }
2063 }else{
2064 throw DOMException(NOT_FOUND_ERR,new Error())
2065 }
2066}
2067NamedNodeMap.prototype = {
2068 length:0,
2069 item:NodeList.prototype.item,
2070 getNamedItem: function(key) {
2071 var i = this.length;
2072 while(i--){
2073 var attr = this[i];
2074 if(attr.nodeName == key){
2075 return attr;
2076 }
2077 }
2078 },
2079 setNamedItem: function(attr) {
2080 var el = attr.ownerElement;
2081 if(el && el!=this._ownerElement){
2082 throw new DOMException(INUSE_ATTRIBUTE_ERR);
2083 }
2084 var oldAttr = this.getNamedItem(attr.nodeName);
2085 _addNamedNode(this._ownerElement,this,attr,oldAttr);
2086 return oldAttr;
2087 },
2088 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
2089 var el = attr.ownerElement, oldAttr;
2090 if(el && el!=this._ownerElement){
2091 throw new DOMException(INUSE_ATTRIBUTE_ERR);
2092 }
2093 oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
2094 _addNamedNode(this._ownerElement,this,attr,oldAttr);
2095 return oldAttr;
2096 },
2097 removeNamedItem: function(key) {
2098 var attr = this.getNamedItem(key);
2099 _removeNamedNode(this._ownerElement,this,attr);
2100 return attr;
2101
2102
2103 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
2104 removeNamedItemNS:function(namespaceURI,localName){
2105 var attr = this.getNamedItemNS(namespaceURI,localName);
2106 _removeNamedNode(this._ownerElement,this,attr);
2107 return attr;
2108 },
2109 getNamedItemNS: function(namespaceURI, localName) {
2110 var i = this.length;
2111 while(i--){
2112 var node = this[i];
2113 if(node.localName == localName && node.namespaceURI == namespaceURI){
2114 return node;
2115 }
2116 }
2117 return null;
2118 }
2119};
2120function DOMImplementation(/* Object */ features) {
2121 this._features = {};
2122 if (features) {
2123 for (var feature in features) {
2124 this._features = features[feature];
2125 }
2126 }
2127};
2128
2129DOMImplementation.prototype = {
2130 hasFeature: function(/* string */ feature, /* string */ version) {
2131 var versions = this._features[feature.toLowerCase()];
2132 if (versions && (!version || version in versions)) {
2133 return true;
2134 } else {
2135 return false;
2136 }
2137 },
2138 createDocument:function(namespaceURI, qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
2139 var doc = new Document();
2140 doc.implementation = this;
2141 doc.childNodes = new NodeList();
2142 doc.doctype = doctype;
2143 if(doctype){
2144 doc.appendChild(doctype);
2145 }
2146 if(qualifiedName){
2147 var root = doc.createElementNS(namespaceURI,qualifiedName);
2148 doc.appendChild(root);
2149 }
2150 return doc;
2151 },
2152 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
2153 var node = new DocumentType();
2154 node.name = qualifiedName;
2155 node.nodeName = qualifiedName;
2156 node.publicId = publicId;
2157 node.systemId = systemId;
2158 return node;
2159 }
2160};
2161
2162function Node() {
2163};
2164
2165Node.prototype = {
2166 firstChild : null,
2167 lastChild : null,
2168 previousSibling : null,
2169 nextSibling : null,
2170 attributes : null,
2171 parentNode : null,
2172 childNodes : null,
2173 ownerDocument : null,
2174 nodeValue : null,
2175 namespaceURI : null,
2176 prefix : null,
2177 localName : null,
2178 insertBefore:function(newChild, refChild){//raises
2179 return _insertBefore(this,newChild,refChild);
2180 },
2181 replaceChild:function(newChild, oldChild){//raises
2182 this.insertBefore(newChild,oldChild);
2183 if(oldChild){
2184 this.removeChild(oldChild);
2185 }
2186 },
2187 removeChild:function(oldChild){
2188 return _removeChild(this,oldChild);
2189 },
2190 appendChild:function(newChild){
2191 return this.insertBefore(newChild,null);
2192 },
2193 hasChildNodes:function(){
2194 return this.firstChild != null;
2195 },
2196 cloneNode:function(deep){
2197 return cloneNode(this.ownerDocument||this,this,deep);
2198 },
2199 normalize:function(){
2200 var child = this.firstChild;
2201 while(child){
2202 var next = child.nextSibling;
2203 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
2204 this.removeChild(next);
2205 child.appendData(next.data);
2206 }else{
2207 child.normalize();
2208 child = next;
2209 }
2210 }
2211 },
2212 isSupported:function(feature, version){
2213 return this.ownerDocument.implementation.hasFeature(feature,version);
2214 },
2215 hasAttributes:function(){
2216 return this.attributes.length>0;
2217 },
2218 lookupPrefix:function(namespaceURI){
2219 var el = this;
2220 while(el){
2221 var map = el._nsMap;
2222 if(map){
2223 for(var n in map){
2224 if(map[n] == namespaceURI){
2225 return n;
2226 }
2227 }
2228 }
2229 el = el.nodeType == 2?el.ownerDocument : el.parentNode;
2230 }
2231 return null;
2232 },
2233 lookupNamespaceURI:function(prefix){
2234 var el = this;
2235 while(el){
2236 var map = el._nsMap;
2237 if(map){
2238 if(prefix in map){
2239 return map[prefix] ;
2240 }
2241 }
2242 el = el.nodeType == 2?el.ownerDocument : el.parentNode;
2243 }
2244 return null;
2245 },
2246 isDefaultNamespace:function(namespaceURI){
2247 var prefix = this.lookupPrefix(namespaceURI);
2248 return prefix == null;
2249 }
2250};
2251
2252
2253function _xmlEncoder(c){
2254 return c == '<' && '&lt;' ||
2255 c == '>' && '&gt;' ||
2256 c == '&' && '&amp;' ||
2257 c == '"' && '&quot;' ||
2258 '&#'+c.charCodeAt()+';'
2259}
2260
2261
2262copy(NodeType,Node);
2263copy(NodeType,Node.prototype);
2264function _visitNode(node,callback){
2265 if(callback(node)){
2266 return true;
2267 }
2268 if(node = node.firstChild){
2269 do{
2270 if(_visitNode(node,callback)){return true}
2271 }while(node=node.nextSibling)
2272 }
2273}
2274
2275
2276
2277function Document(){
2278}
2279function _onAddAttribute(doc,el,newAttr){
2280 doc && doc._inc++;
2281 var ns = newAttr.namespaceURI ;
2282 if(ns == 'http://www.w3.org/2000/xmlns/'){
2283 el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value
2284 }
2285}
2286function _onRemoveAttribute(doc,el,newAttr,remove){
2287 doc && doc._inc++;
2288 var ns = newAttr.namespaceURI ;
2289 if(ns == 'http://www.w3.org/2000/xmlns/'){
2290 delete el._nsMap[newAttr.prefix?newAttr.localName:'']
2291 }
2292}
2293function _onUpdateChild(doc,el,newChild){
2294 if(doc && doc._inc){
2295 doc._inc++;
2296 var cs = el.childNodes;
2297 if(newChild){
2298 cs[cs.length++] = newChild;
2299 }else{
2300 var child = el.firstChild;
2301 var i = 0;
2302 while(child){
2303 cs[i++] = child;
2304 child =child.nextSibling;
2305 }
2306 cs.length = i;
2307 }
2308 }
2309}
2310function _removeChild(parentNode,child){
2311 var previous = child.previousSibling;
2312 var next = child.nextSibling;
2313 if(previous){
2314 previous.nextSibling = next;
2315 }else{
2316 parentNode.firstChild = next
2317 }
2318 if(next){
2319 next.previousSibling = previous;
2320 }else{
2321 parentNode.lastChild = previous;
2322 }
2323 _onUpdateChild(parentNode.ownerDocument,parentNode);
2324 return child;
2325}
2326function _insertBefore(parentNode,newChild,nextChild){
2327 var cp = newChild.parentNode;
2328 if(cp){
2329 cp.removeChild(newChild);//remove and update
2330 }
2331 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
2332 var newFirst = newChild.firstChild;
2333 if (newFirst == null) {
2334 return newChild;
2335 }
2336 var newLast = newChild.lastChild;
2337 }else{
2338 newFirst = newLast = newChild;
2339 }
2340 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
2341
2342 newFirst.previousSibling = pre;
2343 newLast.nextSibling = nextChild;
2344
2345
2346 if(pre){
2347 pre.nextSibling = newFirst;
2348 }else{
2349 parentNode.firstChild = newFirst;
2350 }
2351 if(nextChild == null){
2352 parentNode.lastChild = newLast;
2353 }else{
2354 nextChild.previousSibling = newLast;
2355 }
2356 do{
2357 newFirst.parentNode = parentNode;
2358 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
2359 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
2360 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
2361 newChild.firstChild = newChild.lastChild = null;
2362 }
2363 return newChild;
2364}
2365function _appendSingleChild(parentNode,newChild){
2366 var cp = newChild.parentNode;
2367 if(cp){
2368 var pre = parentNode.lastChild;
2369 cp.removeChild(newChild);//remove and update
2370 var pre = parentNode.lastChild;
2371 }
2372 var pre = parentNode.lastChild;
2373 newChild.parentNode = parentNode;
2374 newChild.previousSibling = pre;
2375 newChild.nextSibling = null;
2376 if(pre){
2377 pre.nextSibling = newChild;
2378 }else{
2379 parentNode.firstChild = newChild;
2380 }
2381 parentNode.lastChild = newChild;
2382 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
2383 return newChild;
2384}
2385Document.prototype = {
2386 nodeName : '#document',
2387 nodeType : DOCUMENT_NODE,
2388 doctype : null,
2389 documentElement : null,
2390 _inc : 1,
2391
2392 insertBefore : function(newChild, refChild){//raises
2393 if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
2394 var child = newChild.firstChild;
2395 while(child){
2396 var next = child.nextSibling;
2397 this.insertBefore(child,refChild);
2398 child = next;
2399 }
2400 return newChild;
2401 }
2402 if(this.documentElement == null && newChild.nodeType == 1){
2403 this.documentElement = newChild;
2404 }
2405
2406 return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
2407 },
2408 removeChild : function(oldChild){
2409 if(this.documentElement == oldChild){
2410 this.documentElement = null;
2411 }
2412 return _removeChild(this,oldChild);
2413 },
2414 importNode : function(importedNode,deep){
2415 return importNode(this,importedNode,deep);
2416 },
2417 getElementById : function(id){
2418 var rtv = null;
2419 _visitNode(this.documentElement,function(node){
2420 if(node.nodeType == 1){
2421 if(node.getAttribute('id') == id){
2422 rtv = node;
2423 return true;
2424 }
2425 }
2426 })
2427 return rtv;
2428 },
2429 createElement : function(tagName){
2430 var node = new Element();
2431 node.ownerDocument = this;
2432 node.nodeName = tagName;
2433 node.tagName = tagName;
2434 node.childNodes = new NodeList();
2435 var attrs = node.attributes = new NamedNodeMap();
2436 attrs._ownerElement = node;
2437 return node;
2438 },
2439 createDocumentFragment : function(){
2440 var node = new DocumentFragment();
2441 node.ownerDocument = this;
2442 node.childNodes = new NodeList();
2443 return node;
2444 },
2445 createTextNode : function(data){
2446 var node = new Text();
2447 node.ownerDocument = this;
2448 node.appendData(data)
2449 return node;
2450 },
2451 createComment : function(data){
2452 var node = new Comment();
2453 node.ownerDocument = this;
2454 node.appendData(data)
2455 return node;
2456 },
2457 createCDATASection : function(data){
2458 var node = new CDATASection();
2459 node.ownerDocument = this;
2460 node.appendData(data)
2461 return node;
2462 },
2463 createProcessingInstruction : function(target,data){
2464 var node = new ProcessingInstruction();
2465 node.ownerDocument = this;
2466 node.tagName = node.target = target;
2467 node.nodeValue= node.data = data;
2468 return node;
2469 },
2470 createAttribute : function(name){
2471 var node = new Attr();
2472 node.ownerDocument = this;
2473 node.name = name;
2474 node.nodeName = name;
2475 node.localName = name;
2476 node.specified = true;
2477 return node;
2478 },
2479 createEntityReference : function(name){
2480 var node = new EntityReference();
2481 node.ownerDocument = this;
2482 node.nodeName = name;
2483 return node;
2484 },
2485 createElementNS : function(namespaceURI,qualifiedName){
2486 var node = new Element();
2487 var pl = qualifiedName.split(':');
2488 var attrs = node.attributes = new NamedNodeMap();
2489 node.childNodes = new NodeList();
2490 node.ownerDocument = this;
2491 node.nodeName = qualifiedName;
2492 node.tagName = qualifiedName;
2493 node.namespaceURI = namespaceURI;
2494 if(pl.length == 2){
2495 node.prefix = pl[0];
2496 node.localName = pl[1];
2497 }else{
2498 node.localName = qualifiedName;
2499 }
2500 attrs._ownerElement = node;
2501 return node;
2502 },
2503 createAttributeNS : function(namespaceURI,qualifiedName){
2504 var node = new Attr();
2505 var pl = qualifiedName.split(':');
2506 node.ownerDocument = this;
2507 node.nodeName = qualifiedName;
2508 node.name = qualifiedName;
2509 node.namespaceURI = namespaceURI;
2510 node.specified = true;
2511 if(pl.length == 2){
2512 node.prefix = pl[0];
2513 node.localName = pl[1];
2514 }else{
2515 node.localName = qualifiedName;
2516 }
2517 return node;
2518 }
2519};
2520_extends(Document,Node);
2521
2522
2523function Element() {
2524 this._nsMap = {};
2525};
2526Element.prototype = {
2527 nodeType : ELEMENT_NODE,
2528 hasAttribute : function(name){
2529 return this.getAttributeNode(name)!=null;
2530 },
2531 getAttribute : function(name){
2532 var attr = this.getAttributeNode(name);
2533 return attr && attr.value || '';
2534 },
2535 getAttributeNode : function(name){
2536 return this.attributes.getNamedItem(name);
2537 },
2538 setAttribute : function(name, value){
2539 var attr = this.ownerDocument.createAttribute(name);
2540 attr.value = attr.nodeValue = "" + value;
2541 this.setAttributeNode(attr)
2542 },
2543 removeAttribute : function(name){
2544 var attr = this.getAttributeNode(name)
2545 attr && this.removeAttributeNode(attr);
2546 },
2547 appendChild:function(newChild){
2548 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
2549 return this.insertBefore(newChild,null);
2550 }else{
2551 return _appendSingleChild(this,newChild);
2552 }
2553 },
2554 setAttributeNode : function(newAttr){
2555 return this.attributes.setNamedItem(newAttr);
2556 },
2557 setAttributeNodeNS : function(newAttr){
2558 return this.attributes.setNamedItemNS(newAttr);
2559 },
2560 removeAttributeNode : function(oldAttr){
2561 return this.attributes.removeNamedItem(oldAttr.nodeName);
2562 },
2563 removeAttributeNS : function(namespaceURI, localName){
2564 var old = this.getAttributeNodeNS(namespaceURI, localName);
2565 old && this.removeAttributeNode(old);
2566 },
2567
2568 hasAttributeNS : function(namespaceURI, localName){
2569 return this.getAttributeNodeNS(namespaceURI, localName)!=null;
2570 },
2571 getAttributeNS : function(namespaceURI, localName){
2572 var attr = this.getAttributeNodeNS(namespaceURI, localName);
2573 return attr && attr.value || '';
2574 },
2575 setAttributeNS : function(namespaceURI, qualifiedName, value){
2576 var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
2577 attr.value = attr.nodeValue = "" + value;
2578 this.setAttributeNode(attr)
2579 },
2580 getAttributeNodeNS : function(namespaceURI, localName){
2581 return this.attributes.getNamedItemNS(namespaceURI, localName);
2582 },
2583
2584 getElementsByTagName : function(tagName){
2585 return new LiveNodeList(this,function(base){
2586 var ls = [];
2587 _visitNode(base,function(node){
2588 if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
2589 ls.push(node);
2590 }
2591 });
2592 return ls;
2593 });
2594 },
2595 getElementsByTagNameNS : function(namespaceURI, localName){
2596 return new LiveNodeList(this,function(base){
2597 var ls = [];
2598 _visitNode(base,function(node){
2599 if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
2600 ls.push(node);
2601 }
2602 });
2603 return ls;
2604 });
2605 }
2606};
2607Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
2608Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
2609
2610
2611_extends(Element,Node);
2612function Attr() {
2613};
2614Attr.prototype.nodeType = ATTRIBUTE_NODE;
2615_extends(Attr,Node);
2616
2617
2618function CharacterData() {
2619};
2620CharacterData.prototype = {
2621 data : '',
2622 substringData : function(offset, count) {
2623 return this.data.substring(offset, offset+count);
2624 },
2625 appendData: function(text) {
2626 text = this.data+text;
2627 this.nodeValue = this.data = text;
2628 this.length = text.length;
2629 },
2630 insertData: function(offset,text) {
2631 this.replaceData(offset,0,text);
2632
2633 },
2634 appendChild:function(newChild){
2635 throw new Error(ExceptionMessage[3])
2636 return Node.prototype.appendChild.apply(this,arguments)
2637 },
2638 deleteData: function(offset, count) {
2639 this.replaceData(offset,count,"");
2640 },
2641 replaceData: function(offset, count, text) {
2642 var start = this.data.substring(0,offset);
2643 var end = this.data.substring(offset+count);
2644 text = start + text + end;
2645 this.nodeValue = this.data = text;
2646 this.length = text.length;
2647 }
2648}
2649_extends(CharacterData,Node);
2650function Text() {
2651};
2652Text.prototype = {
2653 nodeName : "#text",
2654 nodeType : TEXT_NODE,
2655 splitText : function(offset) {
2656 var text = this.data;
2657 var newText = text.substring(offset);
2658 text = text.substring(0, offset);
2659 this.data = this.nodeValue = text;
2660 this.length = text.length;
2661 var newNode = this.ownerDocument.createTextNode(newText);
2662 if(this.parentNode){
2663 this.parentNode.insertBefore(newNode, this.nextSibling);
2664 }
2665 return newNode;
2666 }
2667}
2668_extends(Text,CharacterData);
2669function Comment() {
2670};
2671Comment.prototype = {
2672 nodeName : "#comment",
2673 nodeType : COMMENT_NODE
2674}
2675_extends(Comment,CharacterData);
2676
2677function CDATASection() {
2678};
2679CDATASection.prototype = {
2680 nodeName : "#cdata-section",
2681 nodeType : CDATA_SECTION_NODE
2682}
2683_extends(CDATASection,CharacterData);
2684
2685
2686function DocumentType() {
2687};
2688DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
2689_extends(DocumentType,Node);
2690
2691function Notation() {
2692};
2693Notation.prototype.nodeType = NOTATION_NODE;
2694_extends(Notation,Node);
2695
2696function Entity() {
2697};
2698Entity.prototype.nodeType = ENTITY_NODE;
2699_extends(Entity,Node);
2700
2701function EntityReference() {
2702};
2703EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
2704_extends(EntityReference,Node);
2705
2706function DocumentFragment() {
2707};
2708DocumentFragment.prototype.nodeName = "#document-fragment";
2709DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;
2710_extends(DocumentFragment,Node);
2711
2712
2713function ProcessingInstruction() {
2714}
2715ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
2716_extends(ProcessingInstruction,Node);
2717function XMLSerializer(){}
2718XMLSerializer.prototype.serializeToString = function(node){
2719 var buf = [];
2720 serializeToString(node,buf);
2721 return buf.join('');
2722}
2723Node.prototype.toString =function(){
2724 return XMLSerializer.prototype.serializeToString(this);
2725}
2726function serializeToString(node,buf){
2727 switch(node.nodeType){
2728 case ELEMENT_NODE:
2729 var attrs = node.attributes;
2730 var len = attrs.length;
2731 var child = node.firstChild;
2732 var nodeName = node.tagName;
2733 var isHTML = htmlns === node.namespaceURI
2734 buf.push('<',nodeName);
2735 for(var i=0;i<len;i++){
2736 serializeToString(attrs.item(i),buf,isHTML);
2737 }
2738 if(child || isHTML && !/^(?:meta|link|img|br|hr|input|button)$/i.test(nodeName)){
2739 buf.push('>');
2740 if(isHTML && /^script$/i.test(nodeName)){
2741 if(child){
2742 buf.push(child.data);
2743 }
2744 }else{
2745 while(child){
2746 serializeToString(child,buf);
2747 child = child.nextSibling;
2748 }
2749 }
2750 buf.push('</',nodeName,'>');
2751 }else{
2752 buf.push('/>');
2753 }
2754 return;
2755 case DOCUMENT_NODE:
2756 case DOCUMENT_FRAGMENT_NODE:
2757 var child = node.firstChild;
2758 while(child){
2759 serializeToString(child,buf);
2760 child = child.nextSibling;
2761 }
2762 return;
2763 case ATTRIBUTE_NODE:
2764 return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
2765 case TEXT_NODE:
2766 return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
2767 case CDATA_SECTION_NODE:
2768 return buf.push( '<![CDATA[',node.data,']]>');
2769 case COMMENT_NODE:
2770 return buf.push( "<!--",node.data,"-->");
2771 case DOCUMENT_TYPE_NODE:
2772 var pubid = node.publicId;
2773 var sysid = node.systemId;
2774 buf.push('<!DOCTYPE ',node.name);
2775 if(pubid){
2776 buf.push(' PUBLIC "',pubid);
2777 if (sysid && sysid!='.') {
2778 buf.push( '" "',sysid);
2779 }
2780 buf.push('">');
2781 }else if(sysid && sysid!='.'){
2782 buf.push(' SYSTEM "',sysid,'">');
2783 }else{
2784 var sub = node.internalSubset;
2785 if(sub){
2786 buf.push(" [",sub,"]");
2787 }
2788 buf.push(">");
2789 }
2790 return;
2791 case PROCESSING_INSTRUCTION_NODE:
2792 return buf.push( "<?",node.target," ",node.data,"?>");
2793 case ENTITY_REFERENCE_NODE:
2794 return buf.push( '&',node.nodeName,';');
2795 default:
2796 buf.push('??',node.nodeName);
2797 }
2798}
2799function importNode(doc,node,deep){
2800 var node2;
2801 switch (node.nodeType) {
2802 case ELEMENT_NODE:
2803 node2 = node.cloneNode(false);
2804 node2.ownerDocument = doc;
2805 case DOCUMENT_FRAGMENT_NODE:
2806 break;
2807 case ATTRIBUTE_NODE:
2808 deep = true;
2809 break;
2810 }
2811 if(!node2){
2812 node2 = node.cloneNode(false);//false
2813 }
2814 node2.ownerDocument = doc;
2815 node2.parentNode = null;
2816 if(deep){
2817 var child = node.firstChild;
2818 while(child){
2819 node2.appendChild(importNode(doc,child,deep));
2820 child = child.nextSibling;
2821 }
2822 }
2823 return node2;
2824}
2825function cloneNode(doc,node,deep){
2826 var node2 = new node.constructor();
2827 for(var n in node){
2828 var v = node[n];
2829 if(typeof v != 'object' ){
2830 if(v != node2[n]){
2831 node2[n] = v;
2832 }
2833 }
2834 }
2835 if(node.childNodes){
2836 node2.childNodes = new NodeList();
2837 }
2838 node2.ownerDocument = doc;
2839 switch (node2.nodeType) {
2840 case ELEMENT_NODE:
2841 var attrs = node.attributes;
2842 var attrs2 = node2.attributes = new NamedNodeMap();
2843 var len = attrs.length
2844 attrs2._ownerElement = node2;
2845 for(var i=0;i<len;i++){
2846 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
2847 }
2848 break;;
2849 case ATTRIBUTE_NODE:
2850 deep = true;
2851 }
2852 if(deep){
2853 var child = node.firstChild;
2854 while(child){
2855 node2.appendChild(cloneNode(doc,child,deep));
2856 child = child.nextSibling;
2857 }
2858 }
2859 return node2;
2860}
2861
2862function __set__(object,key,value){
2863 object[key] = value
2864}
2865try{
2866 if(Object.defineProperty){
2867 Object.defineProperty(LiveNodeList.prototype,'length',{
2868 get:function(){
2869 _updateLiveList(this);
2870 return this.$$length;
2871 }
2872 });
2873 Object.defineProperty(Node.prototype,'textContent',{
2874 get:function(){
2875 return getTextContent(this);
2876 },
2877 set:function(data){
2878 switch(this.nodeType){
2879 case 1:
2880 case 11:
2881 while(this.firstChild){
2882 this.removeChild(this.firstChild);
2883 }
2884 if(data || String(data)){
2885 this.appendChild(this.ownerDocument.createTextNode(data));
2886 }
2887 break;
2888 default:
2889 this.data = data;
2890 this.value = value;
2891 this.nodeValue = data;
2892 }
2893 }
2894 })
2895
2896 function getTextContent(node){
2897 switch(node.nodeType){
2898 case 1:
2899 case 11:
2900 var buf = [];
2901 node = node.firstChild;
2902 while(node){
2903 if(node.nodeType!==7 && node.nodeType !==8){
2904 buf.push(getTextContent(node));
2905 }
2906 node = node.nextSibling;
2907 }
2908 return buf.join('');
2909 default:
2910 return node.nodeValue;
2911 }
2912 }
2913 __set__ = function(object,key,value){
2914 object['$$'+key] = value
2915 }
2916 }
2917}catch(e){//ie8
2918}
2919
2920return DOMImplementation;
2921});
2922
2923define("ace/mode/xml/dom-parser",["require","exports","module","ace/mode/xml/sax","ace/mode/xml/dom"], function(require, exports, module) {
2924 'use strict';
2925
2926 var XMLReader = require('./sax'),
2927 DOMImplementation = require('./dom');
2928
2929function DOMParser(options){
2930 this.options = options ||{locator:{}};
2931
2932}
2933DOMParser.prototype.parseFromString = function(source,mimeType){
2934 var options = this.options;
2935 var sax = new XMLReader();
2936 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
2937 var errorHandler = options.errorHandler;
2938 var locator = options.locator;
2939 var defaultNSMap = options.xmlns||{};
2940 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"}
2941 if(locator){
2942 domBuilder.setDocumentLocator(locator)
2943 }
2944
2945 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
2946 sax.domBuilder = options.domBuilder || domBuilder;
2947 if(/\/x?html?$/.test(mimeType)){
2948 entityMap.nbsp = '\xa0';
2949 entityMap.copy = '\xa9';
2950 defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
2951 }
2952 if(source){
2953 sax.parse(source,defaultNSMap,entityMap);
2954 }else{
2955 sax.errorHandler.error("invalid document source");
2956 }
2957 return domBuilder.document;
2958}
2959function buildErrorHandler(errorImpl,domBuilder,locator){
2960 if(!errorImpl){
2961 if(domBuilder instanceof DOMHandler){
2962 return domBuilder;
2963 }
2964 errorImpl = domBuilder ;
2965 }
2966 var errorHandler = {}
2967 var isCallback = errorImpl instanceof Function;
2968 locator = locator||{}
2969 function build(key){
2970 var fn = errorImpl[key];
2971 if(!fn){
2972 if(isCallback){
2973 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
2974 }else{
2975 var i=arguments.length;
2976 while(--i){
2977 if(fn = errorImpl[arguments[i]]){
2978 break;
2979 }
2980 }
2981 }
2982 }
2983 errorHandler[key] = fn && function(msg){
2984 fn(msg+_locator(locator), msg, locator);
2985 }||function(){};
2986 }
2987 build('warning','warn');
2988 build('error','warn','warning');
2989 build('fatalError','warn','warning','error');
2990 return errorHandler;
2991}
2992function DOMHandler() {
2993 this.cdata = false;
2994}
2995function position(locator,node){
2996 node.lineNumber = locator.lineNumber;
2997 node.columnNumber = locator.columnNumber;
2998}
2999DOMHandler.prototype = {
3000 startDocument : function() {
3001 this.document = new DOMImplementation().createDocument(null, null, null);
3002 if (this.locator) {
3003 this.document.documentURI = this.locator.systemId;
3004 }
3005 },
3006 startElement:function(namespaceURI, localName, qName, attrs) {
3007 var doc = this.document;
3008 var el = doc.createElementNS(namespaceURI, qName||localName);
3009 var len = attrs.length;
3010 appendElement(this, el);
3011 this.currentElement = el;
3012
3013 this.locator && position(this.locator,el)
3014 for (var i = 0 ; i < len; i++) {
3015 var namespaceURI = attrs.getURI(i);
3016 var value = attrs.getValue(i);
3017 var qName = attrs.getQName(i);
3018 var attr = doc.createAttributeNS(namespaceURI, qName);
3019 if( attr.getOffset){
3020 position(attr.getOffset(1),attr)
3021 }
3022 attr.value = attr.nodeValue = value;
3023 el.setAttributeNode(attr)
3024 }
3025 },
3026 endElement:function(namespaceURI, localName, qName) {
3027 var current = this.currentElement
3028 var tagName = current.tagName;
3029 this.currentElement = current.parentNode;
3030 },
3031 startPrefixMapping:function(prefix, uri) {
3032 },
3033 endPrefixMapping:function(prefix) {
3034 },
3035 processingInstruction:function(target, data) {
3036 var ins = this.document.createProcessingInstruction(target, data);
3037 this.locator && position(this.locator,ins)
3038 appendElement(this, ins);
3039 },
3040 ignorableWhitespace:function(ch, start, length) {
3041 },
3042 characters:function(chars, start, length) {
3043 chars = _toString.apply(this,arguments)
3044 if(this.currentElement && chars){
3045 if (this.cdata) {
3046 var charNode = this.document.createCDATASection(chars);
3047 this.currentElement.appendChild(charNode);
3048 } else {
3049 var charNode = this.document.createTextNode(chars);
3050 this.currentElement.appendChild(charNode);
3051 }
3052 this.locator && position(this.locator,charNode)
3053 }
3054 },
3055 skippedEntity:function(name) {
3056 },
3057 endDocument:function() {
3058 this.document.normalize();
3059 },
3060 setDocumentLocator:function (locator) {
3061 if(this.locator = locator){// && !('lineNumber' in locator)){
3062 locator.lineNumber = 0;
3063 }
3064 },
3065 comment:function(chars, start, length) {
3066 chars = _toString.apply(this,arguments)
3067 var comm = this.document.createComment(chars);
3068 this.locator && position(this.locator,comm)
3069 appendElement(this, comm);
3070 },
3071
3072 startCDATA:function() {
3073 this.cdata = true;
3074 },
3075 endCDATA:function() {
3076 this.cdata = false;
3077 },
3078
3079 startDTD:function(name, publicId, systemId) {
3080 var impl = this.document.implementation;
3081 if (impl && impl.createDocumentType) {
3082 var dt = impl.createDocumentType(name, publicId, systemId);
3083 this.locator && position(this.locator,dt)
3084 appendElement(this, dt);
3085 }
3086 },
3087 warning:function(error) {
3088 console.warn(error,_locator(this.locator));
3089 },
3090 error:function(error) {
3091 console.error(error,_locator(this.locator));
3092 },
3093 fatalError:function(error) {
3094 console.error(error,_locator(this.locator));
3095 throw error;
3096 }
3097}
3098function _locator(l){
3099 if(l){
3100 return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
3101 }
3102}
3103function _toString(chars,start,length){
3104 if(typeof chars == 'string'){
3105 return chars.substr(start,length)
3106 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
3107 if(chars.length >= start+length || start){
3108 return new java.lang.String(chars,start,length)+'';
3109 }
3110 return chars;
3111 }
3112}
3113"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
3114 DOMHandler.prototype[key] = function(){return null}
3115})
3116function appendElement (hander,node) {
3117 if (!hander.currentElement) {
3118 hander.document.appendChild(node);
3119 } else {
3120 hander.currentElement.appendChild(node);
3121 }
3122}//appendChild and setAttributeNS are preformance key
3123
3124return {
3125 DOMParser: DOMParser
3126 };
3127});
3128
3129define("ace/mode/xml_worker",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/worker/mirror","ace/mode/xml/dom-parser"], function(require, exports, module) {
3130"use strict";
3131
3132var oop = require("../lib/oop");
3133var lang = require("../lib/lang");
3134var Mirror = require("../worker/mirror").Mirror;
3135var DOMParser = require("./xml/dom-parser").DOMParser;
3136
3137var Worker = exports.Worker = function(sender) {
3138 Mirror.call(this, sender);
3139 this.setTimeout(400);
3140 this.context = null;
3141};
3142
3143oop.inherits(Worker, Mirror);
3144
3145(function() {
3146
3147 this.setOptions = function(options) {
3148 this.context = options.context;
3149 };
3150
3151 this.onUpdate = function() {
3152 var value = this.doc.getValue();
3153 if (!value)
3154 return;
3155 var parser = new DOMParser();
3156 var errors = [];
3157 parser.options.errorHandler = {
3158 fatalError: function(fullMsg, errorMsg, locator) {
3159 errors.push({
3160 row: locator.lineNumber,
3161 column: locator.columnNumber,
3162 text: errorMsg,
3163 type: "error"
3164 });
3165 },
3166 error: function(fullMsg, errorMsg, locator) {
3167 errors.push({
3168 row: locator.lineNumber,
3169 column: locator.columnNumber,
3170 text: errorMsg,
3171 type: "error"
3172 });
3173 },
3174 warning: function(fullMsg, errorMsg, locator) {
3175 errors.push({
3176 row: locator.lineNumber,
3177 column: locator.columnNumber,
3178 text: errorMsg,
3179 type: "warning"
3180 });
3181 }
3182 };
3183
3184 parser.parseFromString(value);
3185 this.sender.emit("error", errors);
3186 };
3187
3188}).call(Worker.prototype);
3189
3190});
3191
3192define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) {
3193
3194function Empty() {}
3195
3196if (!Function.prototype.bind) {
3197 Function.prototype.bind = function bind(that) { // .length is 1
3198 var target = this;
3199 if (typeof target != "function") {
3200 throw new TypeError("Function.prototype.bind called on incompatible " + target);
3201 }
3202 var args = slice.call(arguments, 1); // for normal call
3203 var bound = function () {
3204
3205 if (this instanceof bound) {
3206
3207 var result = target.apply(
3208 this,
3209 args.concat(slice.call(arguments))
3210 );
3211 if (Object(result) === result) {
3212 return result;
3213 }
3214 return this;
3215
3216 } else {
3217 return target.apply(
3218 that,
3219 args.concat(slice.call(arguments))
3220 );
3221
3222 }
3223
3224 };
3225 if(target.prototype) {
3226 Empty.prototype = target.prototype;
3227 bound.prototype = new Empty();
3228 Empty.prototype = null;
3229 }
3230 return bound;
3231 };
3232}
3233var call = Function.prototype.call;
3234var prototypeOfArray = Array.prototype;
3235var prototypeOfObject = Object.prototype;
3236var slice = prototypeOfArray.slice;
3237var _toString = call.bind(prototypeOfObject.toString);
3238var owns = call.bind(prototypeOfObject.hasOwnProperty);
3239var defineGetter;
3240var defineSetter;
3241var lookupGetter;
3242var lookupSetter;
3243var supportsAccessors;
3244if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) {
3245 defineGetter = call.bind(prototypeOfObject.__defineGetter__);
3246 defineSetter = call.bind(prototypeOfObject.__defineSetter__);
3247 lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
3248 lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
3249}
3250if ([1,2].splice(0).length != 2) {
3251 if(function() { // test IE < 9 to splice bug - see issue #138
3252 function makeArray(l) {
3253 var a = new Array(l+2);
3254 a[0] = a[1] = 0;
3255 return a;
3256 }
3257 var array = [], lengthBefore;
3258
3259 array.splice.apply(array, makeArray(20));
3260 array.splice.apply(array, makeArray(26));
3261
3262 lengthBefore = array.length; //46
3263 array.splice(5, 0, "XXX"); // add one element
3264
3265 lengthBefore + 1 == array.length
3266
3267 if (lengthBefore + 1 == array.length) {
3268 return true;// has right splice implementation without bugs
3269 }
3270 }()) {//IE 6/7
3271 var array_splice = Array.prototype.splice;
3272 Array.prototype.splice = function(start, deleteCount) {
3273 if (!arguments.length) {
3274 return [];
3275 } else {
3276 return array_splice.apply(this, [
3277 start === void 0 ? 0 : start,
3278 deleteCount === void 0 ? (this.length - start) : deleteCount
3279 ].concat(slice.call(arguments, 2)))
3280 }
3281 };
3282 } else {//IE8
3283 Array.prototype.splice = function(pos, removeCount){
3284 var length = this.length;
3285 if (pos > 0) {
3286 if (pos > length)
3287 pos = length;
3288 } else if (pos == void 0) {
3289 pos = 0;
3290 } else if (pos < 0) {
3291 pos = Math.max(length + pos, 0);
3292 }
3293
3294 if (!(pos+removeCount < length))
3295 removeCount = length - pos;
3296
3297 var removed = this.slice(pos, pos+removeCount);
3298 var insert = slice.call(arguments, 2);
3299 var add = insert.length;
3300 if (pos === length) {
3301 if (add) {
3302 this.push.apply(this, insert);
3303 }
3304 } else {
3305 var remove = Math.min(removeCount, length - pos);
3306 var tailOldPos = pos + remove;
3307 var tailNewPos = tailOldPos + add - remove;
3308 var tailCount = length - tailOldPos;
3309 var lengthAfterRemove = length - remove;
3310
3311 if (tailNewPos < tailOldPos) { // case A
3312 for (var i = 0; i < tailCount; ++i) {
3313 this[tailNewPos+i] = this[tailOldPos+i];
3314 }
3315 } else if (tailNewPos > tailOldPos) { // case B
3316 for (i = tailCount; i--; ) {
3317 this[tailNewPos+i] = this[tailOldPos+i];
3318 }
3319 } // else, add == remove (nothing to do)
3320
3321 if (add && pos === lengthAfterRemove) {
3322 this.length = lengthAfterRemove; // truncate array
3323 this.push.apply(this, insert);
3324 } else {
3325 this.length = lengthAfterRemove + add; // reserves space
3326 for (i = 0; i < add; ++i) {
3327 this[pos+i] = insert[i];
3328 }
3329 }
3330 }
3331 return removed;
3332 };
3333 }
3334}
3335if (!Array.isArray) {
3336 Array.isArray = function isArray(obj) {
3337 return _toString(obj) == "[object Array]";
3338 };
3339}
3340var boxedString = Object("a"),
3341 splitString = boxedString[0] != "a" || !(0 in boxedString);
3342
3343if (!Array.prototype.forEach) {
3344 Array.prototype.forEach = function forEach(fun /*, thisp*/) {
3345 var object = toObject(this),
3346 self = splitString && _toString(this) == "[object String]" ?
3347 this.split("") :
3348 object,
3349 thisp = arguments[1],
3350 i = -1,
3351 length = self.length >>> 0;
3352 if (_toString(fun) != "[object Function]") {
3353 throw new TypeError(); // TODO message
3354 }
3355
3356 while (++i < length) {
3357 if (i in self) {
3358 fun.call(thisp, self[i], i, object);
3359 }
3360 }
3361 };
3362}
3363if (!Array.prototype.map) {
3364 Array.prototype.map = function map(fun /*, thisp*/) {
3365 var object = toObject(this),
3366 self = splitString && _toString(this) == "[object String]" ?
3367 this.split("") :
3368 object,
3369 length = self.length >>> 0,
3370 result = Array(length),
3371 thisp = arguments[1];
3372 if (_toString(fun) != "[object Function]") {
3373 throw new TypeError(fun + " is not a function");
3374 }
3375
3376 for (var i = 0; i < length; i++) {
3377 if (i in self)
3378 result[i] = fun.call(thisp, self[i], i, object);
3379 }
3380 return result;
3381 };
3382}
3383if (!Array.prototype.filter) {
3384 Array.prototype.filter = function filter(fun /*, thisp */) {
3385 var object = toObject(this),
3386 self = splitString && _toString(this) == "[object String]" ?
3387 this.split("") :
3388 object,
3389 length = self.length >>> 0,
3390 result = [],
3391 value,
3392 thisp = arguments[1];
3393 if (_toString(fun) != "[object Function]") {
3394 throw new TypeError(fun + " is not a function");
3395 }
3396
3397 for (var i = 0; i < length; i++) {
3398 if (i in self) {
3399 value = self[i];
3400 if (fun.call(thisp, value, i, object)) {
3401 result.push(value);
3402 }
3403 }
3404 }
3405 return result;
3406 };
3407}
3408if (!Array.prototype.every) {
3409 Array.prototype.every = function every(fun /*, thisp */) {
3410 var object = toObject(this),
3411 self = splitString && _toString(this) == "[object String]" ?
3412 this.split("") :
3413 object,
3414 length = self.length >>> 0,
3415 thisp = arguments[1];
3416 if (_toString(fun) != "[object Function]") {
3417 throw new TypeError(fun + " is not a function");
3418 }
3419
3420 for (var i = 0; i < length; i++) {
3421 if (i in self && !fun.call(thisp, self[i], i, object)) {
3422 return false;
3423 }
3424 }
3425 return true;
3426 };
3427}
3428if (!Array.prototype.some) {
3429 Array.prototype.some = function some(fun /*, thisp */) {
3430 var object = toObject(this),
3431 self = splitString && _toString(this) == "[object String]" ?
3432 this.split("") :
3433 object,
3434 length = self.length >>> 0,
3435 thisp = arguments[1];
3436 if (_toString(fun) != "[object Function]") {
3437 throw new TypeError(fun + " is not a function");
3438 }
3439
3440 for (var i = 0; i < length; i++) {
3441 if (i in self && fun.call(thisp, self[i], i, object)) {
3442 return true;
3443 }
3444 }
3445 return false;
3446 };
3447}
3448if (!Array.prototype.reduce) {
3449 Array.prototype.reduce = function reduce(fun /*, initial*/) {
3450 var object = toObject(this),
3451 self = splitString && _toString(this) == "[object String]" ?
3452 this.split("") :
3453 object,
3454 length = self.length >>> 0;
3455 if (_toString(fun) != "[object Function]") {
3456 throw new TypeError(fun + " is not a function");
3457 }
3458 if (!length && arguments.length == 1) {
3459 throw new TypeError("reduce of empty array with no initial value");
3460 }
3461
3462 var i = 0;
3463 var result;
3464 if (arguments.length >= 2) {
3465 result = arguments[1];
3466 } else {
3467 do {
3468 if (i in self) {
3469 result = self[i++];
3470 break;
3471 }
3472 if (++i >= length) {
3473 throw new TypeError("reduce of empty array with no initial value");
3474 }
3475 } while (true);
3476 }
3477
3478 for (; i < length; i++) {
3479 if (i in self) {
3480 result = fun.call(void 0, result, self[i], i, object);
3481 }
3482 }
3483
3484 return result;
3485 };
3486}
3487if (!Array.prototype.reduceRight) {
3488 Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) {
3489 var object = toObject(this),
3490 self = splitString && _toString(this) == "[object String]" ?
3491 this.split("") :
3492 object,
3493 length = self.length >>> 0;
3494 if (_toString(fun) != "[object Function]") {
3495 throw new TypeError(fun + " is not a function");
3496 }
3497 if (!length && arguments.length == 1) {
3498 throw new TypeError("reduceRight of empty array with no initial value");
3499 }
3500
3501 var result, i = length - 1;
3502 if (arguments.length >= 2) {
3503 result = arguments[1];
3504 } else {
3505 do {
3506 if (i in self) {
3507 result = self[i--];
3508 break;
3509 }
3510 if (--i < 0) {
3511 throw new TypeError("reduceRight of empty array with no initial value");
3512 }
3513 } while (true);
3514 }
3515
3516 do {
3517 if (i in this) {
3518 result = fun.call(void 0, result, self[i], i, object);
3519 }
3520 } while (i--);
3521
3522 return result;
3523 };
3524}
3525if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) {
3526 Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) {
3527 var self = splitString && _toString(this) == "[object String]" ?
3528 this.split("") :
3529 toObject(this),
3530 length = self.length >>> 0;
3531
3532 if (!length) {
3533 return -1;
3534 }
3535
3536 var i = 0;
3537 if (arguments.length > 1) {
3538 i = toInteger(arguments[1]);
3539 }
3540 i = i >= 0 ? i : Math.max(0, length + i);
3541 for (; i < length; i++) {
3542 if (i in self && self[i] === sought) {
3543 return i;
3544 }
3545 }
3546 return -1;
3547 };
3548}
3549if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) {
3550 Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) {
3551 var self = splitString && _toString(this) == "[object String]" ?
3552 this.split("") :
3553 toObject(this),
3554 length = self.length >>> 0;
3555
3556 if (!length) {
3557 return -1;
3558 }
3559 var i = length - 1;
3560 if (arguments.length > 1) {
3561 i = Math.min(i, toInteger(arguments[1]));
3562 }
3563 i = i >= 0 ? i : length - Math.abs(i);
3564 for (; i >= 0; i--) {
3565 if (i in self && sought === self[i]) {
3566 return i;
3567 }
3568 }
3569 return -1;
3570 };
3571}
3572if (!Object.getPrototypeOf) {
3573 Object.getPrototypeOf = function getPrototypeOf(object) {
3574 return object.__proto__ || (
3575 object.constructor ?
3576 object.constructor.prototype :
3577 prototypeOfObject
3578 );
3579 };
3580}
3581if (!Object.getOwnPropertyDescriptor) {
3582 var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " +
3583 "non-object: ";
3584 Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
3585 if ((typeof object != "object" && typeof object != "function") || object === null)
3586 throw new TypeError(ERR_NON_OBJECT + object);
3587 if (!owns(object, property))
3588 return;
3589
3590 var descriptor, getter, setter;
3591 descriptor = { enumerable: true, configurable: true };
3592 if (supportsAccessors) {
3593 var prototype = object.__proto__;
3594 object.__proto__ = prototypeOfObject;
3595
3596 var getter = lookupGetter(object, property);
3597 var setter = lookupSetter(object, property);
3598 object.__proto__ = prototype;
3599
3600 if (getter || setter) {
3601 if (getter) descriptor.get = getter;
3602 if (setter) descriptor.set = setter;
3603 return descriptor;
3604 }
3605 }
3606 descriptor.value = object[property];
3607 return descriptor;
3608 };
3609}
3610if (!Object.getOwnPropertyNames) {
3611 Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
3612 return Object.keys(object);
3613 };
3614}
3615if (!Object.create) {
3616 var createEmpty;
3617 if (Object.prototype.__proto__ === null) {
3618 createEmpty = function () {
3619 return { "__proto__": null };
3620 };
3621 } else {
3622 createEmpty = function () {
3623 var empty = {};
3624 for (var i in empty)
3625 empty[i] = null;
3626 empty.constructor =
3627 empty.hasOwnProperty =
3628 empty.propertyIsEnumerable =
3629 empty.isPrototypeOf =
3630 empty.toLocaleString =
3631 empty.toString =
3632 empty.valueOf =
3633 empty.__proto__ = null;
3634 return empty;
3635 }
3636 }
3637
3638 Object.create = function create(prototype, properties) {
3639 var object;
3640 if (prototype === null) {
3641 object = createEmpty();
3642 } else {
3643 if (typeof prototype != "object")
3644 throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'");
3645 var Type = function () {};
3646 Type.prototype = prototype;
3647 object = new Type();
3648 object.__proto__ = prototype;
3649 }
3650 if (properties !== void 0)
3651 Object.defineProperties(object, properties);
3652 return object;
3653 };
3654}
3655
3656function doesDefinePropertyWork(object) {
3657 try {
3658 Object.defineProperty(object, "sentinel", {});
3659 return "sentinel" in object;
3660 } catch (exception) {
3661 }
3662}
3663if (Object.defineProperty) {
3664 var definePropertyWorksOnObject = doesDefinePropertyWork({});
3665 var definePropertyWorksOnDom = typeof document == "undefined" ||
3666 doesDefinePropertyWork(document.createElement("div"));
3667 if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
3668 var definePropertyFallback = Object.defineProperty;
3669 }
3670}
3671
3672if (!Object.defineProperty || definePropertyFallback) {
3673 var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: ";
3674 var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "
3675 var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " +
3676 "on this javascript engine";
3677
3678 Object.defineProperty = function defineProperty(object, property, descriptor) {
3679 if ((typeof object != "object" && typeof object != "function") || object === null)
3680 throw new TypeError(ERR_NON_OBJECT_TARGET + object);
3681 if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null)
3682 throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
3683 if (definePropertyFallback) {
3684 try {
3685 return definePropertyFallback.call(Object, object, property, descriptor);
3686 } catch (exception) {
3687 }
3688 }
3689 if (owns(descriptor, "value")) {
3690
3691 if (supportsAccessors && (lookupGetter(object, property) ||
3692 lookupSetter(object, property)))
3693 {
3694 var prototype = object.__proto__;
3695 object.__proto__ = prototypeOfObject;
3696 delete object[property];
3697 object[property] = descriptor.value;
3698 object.__proto__ = prototype;
3699 } else {
3700 object[property] = descriptor.value;
3701 }
3702 } else {
3703 if (!supportsAccessors)
3704 throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
3705 if (owns(descriptor, "get"))
3706 defineGetter(object, property, descriptor.get);
3707 if (owns(descriptor, "set"))
3708 defineSetter(object, property, descriptor.set);
3709 }
3710
3711 return object;
3712 };
3713}
3714if (!Object.defineProperties) {
3715 Object.defineProperties = function defineProperties(object, properties) {
3716 for (var property in properties) {
3717 if (owns(properties, property))
3718 Object.defineProperty(object, property, properties[property]);
3719 }
3720 return object;
3721 };
3722}
3723if (!Object.seal) {
3724 Object.seal = function seal(object) {
3725 return object;
3726 };
3727}
3728if (!Object.freeze) {
3729 Object.freeze = function freeze(object) {
3730 return object;
3731 };
3732}
3733try {
3734 Object.freeze(function () {});
3735} catch (exception) {
3736 Object.freeze = (function freeze(freezeObject) {
3737 return function freeze(object) {
3738 if (typeof object == "function") {
3739 return object;
3740 } else {
3741 return freezeObject(object);
3742 }
3743 };
3744 })(Object.freeze);
3745}
3746if (!Object.preventExtensions) {
3747 Object.preventExtensions = function preventExtensions(object) {
3748 return object;
3749 };
3750}
3751if (!Object.isSealed) {
3752 Object.isSealed = function isSealed(object) {
3753 return false;
3754 };
3755}
3756if (!Object.isFrozen) {
3757 Object.isFrozen = function isFrozen(object) {
3758 return false;
3759 };
3760}
3761if (!Object.isExtensible) {
3762 Object.isExtensible = function isExtensible(object) {
3763 if (Object(object) === object) {
3764 throw new TypeError(); // TODO message
3765 }
3766 var name = '';
3767 while (owns(object, name)) {
3768 name += '?';
3769 }
3770 object[name] = true;
3771 var returnValue = owns(object, name);
3772 delete object[name];
3773 return returnValue;
3774 };
3775}
3776if (!Object.keys) {
3777 var hasDontEnumBug = true,
3778 dontEnums = [
3779 "toString",
3780 "toLocaleString",
3781 "valueOf",
3782 "hasOwnProperty",
3783 "isPrototypeOf",
3784 "propertyIsEnumerable",
3785 "constructor"
3786 ],
3787 dontEnumsLength = dontEnums.length;
3788
3789 for (var key in {"toString": null}) {
3790 hasDontEnumBug = false;
3791 }
3792
3793 Object.keys = function keys(object) {
3794
3795 if (
3796 (typeof object != "object" && typeof object != "function") ||
3797 object === null
3798 ) {
3799 throw new TypeError("Object.keys called on a non-object");
3800 }
3801
3802 var keys = [];
3803 for (var name in object) {
3804 if (owns(object, name)) {
3805 keys.push(name);
3806 }
3807 }
3808
3809 if (hasDontEnumBug) {
3810 for (var i = 0, ii = dontEnumsLength; i < ii; i++) {
3811 var dontEnum = dontEnums[i];
3812 if (owns(object, dontEnum)) {
3813 keys.push(dontEnum);
3814 }
3815 }
3816 }
3817 return keys;
3818 };
3819
3820}
3821if (!Date.now) {
3822 Date.now = function now() {
3823 return new Date().getTime();
3824 };
3825}
3826var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" +
3827 "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" +
3828 "\u2029\uFEFF";
3829if (!String.prototype.trim || ws.trim()) {
3830 ws = "[" + ws + "]";
3831 var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
3832 trimEndRegexp = new RegExp(ws + ws + "*$");
3833 String.prototype.trim = function trim() {
3834 return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
3835 };
3836}
3837
3838function toInteger(n) {
3839 n = +n;
3840 if (n !== n) { // isNaN
3841 n = 0;
3842 } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) {
3843 n = (n > 0 || -1) * Math.floor(Math.abs(n));
3844 }
3845 return n;
3846}
3847
3848function isPrimitive(input) {
3849 var type = typeof input;
3850 return (
3851 input === null ||
3852 type === "undefined" ||
3853 type === "boolean" ||
3854 type === "number" ||
3855 type === "string"
3856 );
3857}
3858
3859function toPrimitive(input) {
3860 var val, valueOf, toString;
3861 if (isPrimitive(input)) {
3862 return input;
3863 }
3864 valueOf = input.valueOf;
3865 if (typeof valueOf === "function") {
3866 val = valueOf.call(input);
3867 if (isPrimitive(val)) {
3868 return val;
3869 }
3870 }
3871 toString = input.toString;
3872 if (typeof toString === "function") {
3873 val = toString.call(input);
3874 if (isPrimitive(val)) {
3875 return val;
3876 }
3877 }
3878 throw new TypeError();
3879}
3880var toObject = function (o) {
3881 if (o == null) { // this matches both null and undefined
3882 throw new TypeError("can't convert "+o+" to object");
3883 }
3884 return Object(o);
3885};
3886
3887});