1"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.slice(0, factory.length).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 sender = window.sender = window.initSender(); 213 var clazz = require(msg.module)[msg.classname]; 214 main = window.main = new clazz(sender); 215 } 216}; 217})(this); 218 219define("ace/lib/oop",[], function(require, exports, module) { 220"use strict"; 221 222exports.inherits = function(ctor, superCtor) { 223 ctor.super_ = superCtor; 224 ctor.prototype = Object.create(superCtor.prototype, { 225 constructor: { 226 value: ctor, 227 enumerable: false, 228 writable: true, 229 configurable: true 230 } 231 }); 232}; 233 234exports.mixin = function(obj, mixin) { 235 for (var key in mixin) { 236 obj[key] = mixin[key]; 237 } 238 return obj; 239}; 240 241exports.implement = function(proto, mixin) { 242 exports.mixin(proto, mixin); 243}; 244 245}); 246 247define("ace/lib/lang",[], function(require, exports, module) { 248"use strict"; 249 250exports.last = function(a) { 251 return a[a.length - 1]; 252}; 253 254exports.stringReverse = function(string) { 255 return string.split("").reverse().join(""); 256}; 257 258exports.stringRepeat = function (string, count) { 259 var result = ''; 260 while (count > 0) { 261 if (count & 1) 262 result += string; 263 264 if (count >>= 1) 265 string += string; 266 } 267 return result; 268}; 269 270var trimBeginRegexp = /^\s\s*/; 271var trimEndRegexp = /\s\s*$/; 272 273exports.stringTrimLeft = function (string) { 274 return string.replace(trimBeginRegexp, ''); 275}; 276 277exports.stringTrimRight = function (string) { 278 return string.replace(trimEndRegexp, ''); 279}; 280 281exports.copyObject = function(obj) { 282 var copy = {}; 283 for (var key in obj) { 284 copy[key] = obj[key]; 285 } 286 return copy; 287}; 288 289exports.copyArray = function(array){ 290 var copy = []; 291 for (var i=0, l=array.length; i<l; i++) { 292 if (array[i] && typeof array[i] == "object") 293 copy[i] = this.copyObject(array[i]); 294 else 295 copy[i] = array[i]; 296 } 297 return copy; 298}; 299 300exports.deepCopy = function deepCopy(obj) { 301 if (typeof obj !== "object" || !obj) 302 return obj; 303 var copy; 304 if (Array.isArray(obj)) { 305 copy = []; 306 for (var key = 0; key < obj.length; key++) { 307 copy[key] = deepCopy(obj[key]); 308 } 309 return copy; 310 } 311 if (Object.prototype.toString.call(obj) !== "[object Object]") 312 return obj; 313 314 copy = {}; 315 for (var key in obj) 316 copy[key] = deepCopy(obj[key]); 317 return copy; 318}; 319 320exports.arrayToMap = function(arr) { 321 var map = {}; 322 for (var i=0; i<arr.length; i++) { 323 map[arr[i]] = 1; 324 } 325 return map; 326 327}; 328 329exports.createMap = function(props) { 330 var map = Object.create(null); 331 for (var i in props) { 332 map[i] = props[i]; 333 } 334 return map; 335}; 336exports.arrayRemove = function(array, value) { 337 for (var i = 0; i <= array.length; i++) { 338 if (value === array[i]) { 339 array.splice(i, 1); 340 } 341 } 342}; 343 344exports.escapeRegExp = function(str) { 345 return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); 346}; 347 348exports.escapeHTML = function(str) { 349 return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<"); 350}; 351 352exports.getMatchOffsets = function(string, regExp) { 353 var matches = []; 354 355 string.replace(regExp, function(str) { 356 matches.push({ 357 offset: arguments[arguments.length-2], 358 length: str.length 359 }); 360 }); 361 362 return matches; 363}; 364exports.deferredCall = function(fcn) { 365 var timer = null; 366 var callback = function() { 367 timer = null; 368 fcn(); 369 }; 370 371 var deferred = function(timeout) { 372 deferred.cancel(); 373 timer = setTimeout(callback, timeout || 0); 374 return deferred; 375 }; 376 377 deferred.schedule = deferred; 378 379 deferred.call = function() { 380 this.cancel(); 381 fcn(); 382 return deferred; 383 }; 384 385 deferred.cancel = function() { 386 clearTimeout(timer); 387 timer = null; 388 return deferred; 389 }; 390 391 deferred.isPending = function() { 392 return timer; 393 }; 394 395 return deferred; 396}; 397 398 399exports.delayedCall = function(fcn, defaultTimeout) { 400 var timer = null; 401 var callback = function() { 402 timer = null; 403 fcn(); 404 }; 405 406 var _self = function(timeout) { 407 if (timer == null) 408 timer = setTimeout(callback, timeout || defaultTimeout); 409 }; 410 411 _self.delay = function(timeout) { 412 timer && clearTimeout(timer); 413 timer = setTimeout(callback, timeout || defaultTimeout); 414 }; 415 _self.schedule = _self; 416 417 _self.call = function() { 418 this.cancel(); 419 fcn(); 420 }; 421 422 _self.cancel = function() { 423 timer && clearTimeout(timer); 424 timer = null; 425 }; 426 427 _self.isPending = function() { 428 return timer; 429 }; 430 431 return _self; 432}; 433}); 434 435define("ace/range",[], function(require, exports, module) { 436"use strict"; 437var comparePoints = function(p1, p2) { 438 return p1.row - p2.row || p1.column - p2.column; 439}; 440var Range = function(startRow, startColumn, endRow, endColumn) { 441 this.start = { 442 row: startRow, 443 column: startColumn 444 }; 445 446 this.end = { 447 row: endRow, 448 column: endColumn 449 }; 450}; 451 452(function() { 453 this.isEqual = function(range) { 454 return this.start.row === range.start.row &&
455 this.end.row === range.end.row && 456 this.start.column === range.start.column && 457 this.end.column === range.end.column; 458 }; 459 this.toString = function() { 460 return ("Range: [" + this.start.row + "/" + this.start.column + 461 "] -> [" + this.end.row + "/" + this.end.column + "]"); 462 }; 463 464 this.contains = function(row, column) { 465 return this.compare(row, column) == 0; 466 }; 467 this.compareRange = function(range) { 468 var cmp, 469 end = range.end, 470 start = range.start; 471 472 cmp = this.compare(end.row, end.column); 473 if (cmp == 1) { 474 cmp = this.compare(start.row, start.column); 475 if (cmp == 1) { 476 return 2; 477 } else if (cmp == 0) { 478 return 1; 479 } else { 480 return 0; 481 } 482 } else if (cmp == -1) { 483 return -2; 484 } else { 485 cmp = this.compare(start.row, start.column); 486 if (cmp == -1) { 487 return -1; 488 } else if (cmp == 1) { 489 return 42; 490 } else { 491 return 0; 492 } 493 } 494 }; 495 this.comparePoint = function(p) { 496 return this.compare(p.row, p.column); 497 }; 498 this.containsRange = function(range) { 499 return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; 500 }; 501 this.intersects = function(range) { 502 var cmp = this.compareRange(range); 503 return (cmp == -1 || cmp == 0 || cmp == 1); 504 }; 505 this.isEnd = function(row, column) { 506 return this.end.row == row && this.end.column == column; 507 }; 508 this.isStart = function(row, column) { 509 return this.start.row == row && this.start.column == column; 510 }; 511 this.setStart = function(row, column) { 512 if (typeof row == "object") { 513 this.start.column = row.column; 514 this.start.row = row.row; 515 } else { 516 this.start.row = row; 517 this.start.column = column; 518 } 519 }; 520 this.setEnd = function(row, column) { 521 if (typeof row == "object") { 522 this.end.column = row.column; 523 this.end.row = row.row; 524 } else { 525 this.end.row = row; 526 this.end.column = column; 527 } 528 }; 529 this.inside = function(row, column) { 530 if (this.compare(row, column) == 0) { 531 if (this.isEnd(row, column) || this.isStart(row, column)) { 532 return false; 533 } else { 534 return true; 535 } 536 } 537 return false; 538 }; 539 this.insideStart = function(row, column) { 540 if (this.compare(row, column) == 0) { 541 if (this.isEnd(row, column)) { 542 return false; 543 } else { 544 return true; 545 } 546 } 547 return false; 548 }; 549 this.insideEnd = function(row, column) { 550 if (this.compare(row, column) == 0) { 551 if (this.isStart(row, column)) { 552 return false; 553 } else { 554 return true; 555 } 556 } 557 return false; 558 }; 559 this.compare = function(row, column) { 560 if (!this.isMultiLine()) { 561 if (row === this.start.row) { 562 return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); 563 } 564 } 565 566 if (row < this.start.row) 567 return -1; 568 569 if (row > this.end.row) 570 return 1; 571 572 if (this.start.row === row) 573 return column >= this.start.column ? 0 : -1; 574 575 if (this.end.row === row) 576 return column <= this.end.column ? 0 : 1; 577 578 return 0; 579 }; 580 this.compareStart = function(row, column) { 581 if (this.start.row == row && this.start.column == column) { 582 return -1; 583 } else { 584 return this.compare(row, column); 585 } 586 }; 587 this.compareEnd = function(row, column) { 588 if (this.end.row == row && this.end.column == column) { 589 return 1; 590 } else { 591 return this.compare(row, column); 592 } 593 }; 594 this.compareInside = function(row, column) {
595 if (this.end.row == row && this.end.column == column) { 596 return 1; 597 } else if (this.start.row == row && this.start.column == column) { 598 return -1; 599 } else { 600 return this.compare(row, column); 601 } 602 }; 603 this.clipRows = function(firstRow, lastRow) { 604 if (this.end.row > lastRow) 605 var end = {row: lastRow + 1, column: 0}; 606 else if (this.end.row < firstRow) 607 var end = {row: firstRow, column: 0}; 608 609 if (this.start.row > lastRow) 610 var start = {row: lastRow + 1, column: 0}; 611 else if (this.start.row < firstRow) 612 var start = {row: firstRow, column: 0}; 613 614 return Range.fromPoints(start || this.start, end || this.end); 615 }; 616 this.extend = function(row, column) { 617 var cmp = this.compare(row, column); 618 619 if (cmp == 0) 620 return this; 621 else if (cmp == -1) 622 var start = {row: row, column: column}; 623 else 624 var end = {row: row, column: column}; 625 626 return Range.fromPoints(start || this.start, end || this.end); 627 }; 628 629 this.isEmpty = function() { 630 return (this.start.row === this.end.row && this.start.column === this.end.column); 631 }; 632 this.isMultiLine = function() { 633 return (this.start.row !== this.end.row); 634 }; 635 this.clone = function() { 636 return Range.fromPoints(this.start, this.end); 637 }; 638 this.collapseRows = function() { 639 if (this.end.column == 0) 640 return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0); 641 else 642 return new Range(this.start.row, 0, this.end.row, 0); 643 }; 644 this.toScreenRange = function(session) { 645 var screenPosStart = session.documentToScreenPosition(this.start); 646 var screenPosEnd = session.documentToScreenPosition(this.end); 647 648 return new Range( 649 screenPosStart.row, screenPosStart.column, 650 screenPosEnd.row, screenPosEnd.column 651 ); 652 }; 653 this.moveBy = function(row, column) { 654 this.start.row += row; 655 this.start.column += column; 656 this.end.row += row; 657 this.end.column += column; 658 }; 659 660}).call(Range.prototype); 661Range.fromPoints = function(start, end) { 662 return new Range(start.row, start.column, end.row, end.column); 663}; 664Range.comparePoints = comparePoints; 665 666Range.comparePoints = function(p1, p2) { 667 return p1.row - p2.row || p1.column - p2.column; 668}; 669 670 671exports.Range = Range; 672}); 673 674define("ace/apply_delta",[], function(require, exports, module) { 675"use strict"; 676 677function throwDeltaError(delta, errorText){ 678 console.log("Invalid Delta:", delta); 679 throw "Invalid Delta: " + errorText; 680} 681 682function positionInDocument(docLines, position) { 683 return position.row >= 0 && position.row < docLines.length && 684 position.column >= 0 && position.column <= docLines[position.row].length; 685} 686 687function validateDelta(docLines, delta) { 688 if (delta.action != "insert" && delta.action != "remove") 689 throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); 690 if (!(delta.lines instanceof Array)) 691 throwDeltaError(delta, "delta.lines must be an Array"); 692 if (!delta.start || !delta.end) 693 throwDeltaError(delta, "delta.start/end must be an present"); 694 var start = delta.start; 695 if (!positionInDocument(docLines, delta.start)) 696 throwDeltaError(delta, "delta.start must be contained in document"); 697 var end = delta.end; 698 if (delta.action == "remove" && !positionInDocument(docLines, end)) 699 throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); 700 var numRangeRows = end.row - start.row; 701 var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); 702 if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) 703 throwDeltaError(delta, "delta.range must match delta lines"); 704} 705 706exports.applyDelta = function(docLines, delta, doNotValidate) { 707 708 var row = delta.start.row; 709 var startColumn = delta.start.column; 710 var line = docLines[row] || ""; 711 switch (delta.action) { 712 case "insert": 713 var lines = delta.lines; 714 if (lines.length === 1) { 715 docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); 716 } else { 717 var args = [row, 1].concat(delta.lines); 718 docLines.splice.apply(docLines, args); 719 docLines[row] = line.substring(0, startColumn) + docLines[row]; 720 docLines[row + delta.lines.length - 1] += line.substring(startColumn); 721 } 722 break; 723 case "remove": 724 var endColumn = delta.end.column; 725 var endRow = delta.end.row; 726 if (row === endRow) { 727 docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); 728 } else { 729 docLines.splice( 730 row, endRow - row + 1, 731 line.substring(0, startColumn) + docLines[endRow].substring(endColumn) 732 ); 733 } 734 break; 735 } 736}; 737}); 738 739define("ace/lib/event_emitter",[], function(require, exports, module) { 740"use strict"; 741 742var EventEmitter = {};
743var stopPropagation = function() { this.propagationStopped = true; }; 744var preventDefault = function() { this.defaultPrevented = true; }; 745 746EventEmitter._emit = 747EventEmitter._dispatchEvent = function(eventName, e) { 748 this._eventRegistry || (this._eventRegistry = {}); 749 this._defaultHandlers || (this._defaultHandlers = {}); 750 751 var listeners = this._eventRegistry[eventName] || []; 752 var defaultHandler = this._defaultHandlers[eventName]; 753 if (!listeners.length && !defaultHandler) 754 return; 755 756 if (typeof e != "object" || !e) 757 e = {}; 758 759 if (!e.type) 760 e.type = eventName; 761 if (!e.stopPropagation) 762 e.stopPropagation = stopPropagation; 763 if (!e.preventDefault) 764 e.preventDefault = preventDefault; 765 766 listeners = listeners.slice(); 767 for (var i=0; i<listeners.length; i++) { 768 listeners[i](e, this); 769 if (e.propagationStopped) 770 break; 771 } 772 773 if (defaultHandler && !e.defaultPrevented) 774 return defaultHandler(e, this); 775}; 776 777 778EventEmitter._signal = function(eventName, e) { 779 var listeners = (this._eventRegistry || {})[eventName]; 780 if (!listeners) 781 return; 782 listeners = listeners.slice(); 783 for (var i=0; i<listeners.length; i++) 784 listeners[i](e, this); 785}; 786 787EventEmitter.once = function(eventName, callback) { 788 var _self = this; 789 this.on(eventName, function newCallback() { 790 _self.off(eventName, newCallback); 791 callback.apply(null, arguments); 792 }); 793 if (!callback) { 794 return new Promise(function(resolve) { 795 callback = resolve; 796 }); 797 } 798}; 799 800 801EventEmitter.setDefaultHandler = function(eventName, callback) { 802 var handlers = this._defaultHandlers; 803 if (!handlers) 804 handlers = this._defaultHandlers = {_disabled_: {}}; 805 806 if (handlers[eventName]) { 807 var old = handlers[eventName]; 808 var disabled = handlers._disabled_[eventName]; 809 if (!disabled) 810 handlers._disabled_[eventName] = disabled = []; 811 disabled.push(old); 812 var i = disabled.indexOf(callback); 813 if (i != -1) 814 disabled.splice(i, 1); 815 } 816 handlers[eventName] = callback; 817}; 818EventEmitter.removeDefaultHandler = function(eventName, callback) { 819 var handlers = this._defaultHandlers; 820 if (!handlers) 821 return; 822 var disabled = handlers._disabled_[eventName]; 823 824 if (handlers[eventName] == callback) { 825 if (disabled) 826 this.setDefaultHandler(eventName, disabled.pop()); 827 } else if (disabled) { 828 var i = disabled.indexOf(callback); 829 if (i != -1) 830 disabled.splice(i, 1); 831 } 832}; 833 834EventEmitter.on = 835EventEmitter.addEventListener = function(eventName, callback, capturing) { 836 this._eventRegistry = this._eventRegistry || {}; 837 838 var listeners = this._eventRegistry[eventName]; 839 if (!listeners) 840 listeners = this._eventRegistry[eventName] = []; 841 842 if (listeners.indexOf(callback) == -1) 843 listeners[capturing ? "unshift" : "push"](callback); 844 return callback; 845}; 846 847EventEmitter.off = 848EventEmitter.removeListener = 849EventEmitter.removeEventListener = function(eventName, callback) { 850 this._eventRegistry = this._eventRegistry || {}; 851 852 var listeners = this._eventRegistry[eventName]; 853 if (!listeners) 854 return; 855 856 var index = listeners.indexOf(callback); 857 if (index !== -1) 858 listeners.splice(index, 1); 859}; 860 861EventEmitter.removeAllListeners = function(eventName) { 862 if (!eventName) this._eventRegistry = this._defaultHandlers = undefined; 863 if (this._eventRegistry) this._eventRegistry[eventName] = undefined; 864 if (this._defaultHandlers) this._defaultHandlers[eventName] = undefined; 865}; 866 867exports.EventEmitter = EventEmitter; 868 869}); 870 871define("ace/anchor",[], function(require, exports, module) { 872"use strict"; 873 874var oop = require("./lib/oop"); 875var EventEmitter = require("./lib/event_emitter").EventEmitter; 876 877var Anchor = exports.Anchor = function(doc, row, column) { 878 this.$onChange = this.onChange.bind(this); 879 this.attach(doc); 880 881 if (typeof column == "undefined") 882 this.setPosition(row.row, row.column); 883 else 884 this.setPosition(row, column); 885}; 886 887(function() { 888 889 oop.implement(this, EventEmitter); 890 this.getPosition = function() { 891 return this.$clipPositionToDocument(this.row, this.column); 892 }; 893 this.getDocument = function() { 894 return this.document; 895 }; 896 this.$insertRight = false;
897 this.onChange = function(delta) { 898 if (delta.start.row == delta.end.row && delta.start.row != this.row) 899 return; 900 901 if (delta.start.row > this.row) 902 return; 903 904 var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); 905 this.setPosition(point.row, point.column, true); 906 }; 907 908 function $pointsInOrder(point1, point2, equalPointsInOrder) { 909 var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; 910 return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); 911 } 912 913 function $getTransformedPoint(delta, point, moveIfEqual) { 914 var deltaIsInsert = delta.action == "insert"; 915 var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); 916 var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); 917 var deltaStart = delta.start; 918 var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. 919 if ($pointsInOrder(point, deltaStart, moveIfEqual)) { 920 return { 921 row: point.row, 922 column: point.column 923 }; 924 } 925 if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { 926 return { 927 row: point.row + deltaRowShift, 928 column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) 929 }; 930 } 931 932 return { 933 row: deltaStart.row, 934 column: deltaStart.column 935 }; 936 } 937 this.setPosition = function(row, column, noClip) { 938 var pos; 939 if (noClip) { 940 pos = { 941 row: row, 942 column: column 943 }; 944 } else { 945 pos = this.$clipPositionToDocument(row, column); 946 } 947 948 if (this.row == pos.row && this.column == pos.column) 949 return; 950 951 var old = { 952 row: this.row, 953 column: this.column 954 }; 955 956 this.row = pos.row; 957 this.column = pos.column; 958 this._signal("change", { 959 old: old, 960 value: pos 961 }); 962 }; 963 this.detach = function() { 964 this.document.off("change", this.$onChange); 965 }; 966 this.attach = function(doc) { 967 this.document = doc || this.document; 968 this.document.on("change", this.$onChange); 969 }; 970 this.$clipPositionToDocument = function(row, column) { 971 var pos = {}; 972 973 if (row >= this.document.getLength()) { 974 pos.row = Math.max(0, this.document.getLength() - 1); 975 pos.column = this.document.getLine(pos.row).length; 976 } 977 else if (row < 0) { 978 pos.row = 0; 979 pos.column = 0; 980 } 981 else { 982 pos.row = row; 983 pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); 984 } 985 986 if (column < 0) 987 pos.column = 0; 988 989 return pos; 990 }; 991 992}).call(Anchor.prototype); 993 994}); 995 996define("ace/document",[], function(require, exports, module) { 997"use strict"; 998 999var oop = require("./lib/oop"); 1000var applyDelta = require("./apply_delta").applyDelta; 1001var EventEmitter = require("./lib/event_emitter").EventEmitter; 1002var Range = require("./range").Range; 1003var Anchor = require("./anchor").Anchor; 1004 1005var Document = function(textOrLines) { 1006 this.$lines = [""]; 1007 if (textOrLines.length === 0) { 1008 this.$lines = [""]; 1009 } else if (Array.isArray(textOrLines)) { 1010 this.insertMergedLines({row: 0, column: 0}, textOrLines); 1011 } else { 1012 this.insert({row: 0, column:0}, textOrLines); 1013 } 1014}; 1015 1016(function() { 1017 1018 oop.implement(this, EventEmitter); 1019 this.setValue = function(text) { 1020 var len = this.getLength() - 1; 1021 this.remove(new Range(0, 0, len, this.getLine(len).length)); 1022 this.insert({row: 0, column: 0}, text); 1023 }; 1024 this.getValue = function() { 1025 return this.getAllLines().join(this.getNewLineCharacter()); 1026 }; 1027 this.createAnchor = function(row, column) {
1028 return new Anchor(this, row, column); 1029 }; 1030 if ("aaa".split(/a/).length === 0) { 1031 this.$split = function(text) { 1032 return text.replace(/\r\n|\r/g, "\n").split("\n"); 1033 }; 1034 } else { 1035 this.$split = function(text) { 1036 return text.split(/\r\n|\r|\n/); 1037 }; 1038 } 1039 1040 1041 this.$detectNewLine = function(text) { 1042 var match = text.match(/^.*?(\r\n|\r|\n)/m); 1043 this.$autoNewLine = match ? match[1] : "\n"; 1044 this._signal("changeNewLineMode"); 1045 }; 1046 this.getNewLineCharacter = function() { 1047 switch (this.$newLineMode) { 1048 case "windows": 1049 return "\r\n"; 1050 case "unix": 1051 return "\n"; 1052 default: 1053 return this.$autoNewLine || "\n"; 1054 } 1055 }; 1056 1057 this.$autoNewLine = ""; 1058 this.$newLineMode = "auto"; 1059 this.setNewLineMode = function(newLineMode) { 1060 if (this.$newLineMode === newLineMode) 1061 return; 1062 1063 this.$newLineMode = newLineMode; 1064 this._signal("changeNewLineMode"); 1065 }; 1066 this.getNewLineMode = function() { 1067 return this.$newLineMode; 1068 }; 1069 this.isNewLine = function(text) { 1070 return (text == "\r\n" || text == "\r" || text == "\n"); 1071 }; 1072 this.getLine = function(row) { 1073 return this.$lines[row] || ""; 1074 }; 1075 this.getLines = function(firstRow, lastRow) { 1076 return this.$lines.slice(firstRow, lastRow + 1); 1077 }; 1078 this.getAllLines = function() { 1079 return this.getLines(0, this.getLength()); 1080 }; 1081 this.getLength = function() { 1082 return this.$lines.length; 1083 }; 1084 this.getTextRange = function(range) { 1085 return this.getLinesForRange(range).join(this.getNewLineCharacter()); 1086 }; 1087 this.getLinesForRange = function(range) { 1088 var lines; 1089 if (range.start.row === range.end.row) { 1090 lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; 1091 } else { 1092 lines = this.getLines(range.start.row, range.end.row); 1093 lines[0] = (lines[0] || "").substring(range.start.column); 1094 var l = lines.length - 1; 1095 if (range.end.row - range.start.row == l) 1096 lines[l] = lines[l].substring(0, range.end.column); 1097 } 1098 return lines; 1099 }; 1100 this.insertLines = function(row, lines) { 1101 console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); 1102 return this.insertFullLines(row, lines); 1103 }; 1104 this.removeLines = function(firstRow, lastRow) { 1105 console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); 1106 return this.removeFullLines(firstRow, lastRow); 1107 }; 1108 this.insertNewLine = function(position) { 1109 console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); 1110 return this.insertMergedLines(position, ["", ""]); 1111 }; 1112 this.insert = function(position, text) { 1113 if (this.getLength() <= 1) 1114 this.$detectNewLine(text); 1115 1116 return this.insertMergedLines(position, this.$split(text)); 1117 }; 1118 this.insertInLine = function(position, text) { 1119 var start = this.clippedPos(position.row, position.column); 1120 var end = this.pos(position.row, position.column + text.length); 1121 1122 this.applyDelta({ 1123 start: start, 1124 end: end, 1125 action: "insert", 1126 lines: [text] 1127 }, true); 1128 1129 return this.clonePos(end); 1130 }; 1131 1132 this.clippedPos = function(row, column) { 1133 var length = this.getLength(); 1134 if (row === undefined) { 1135 row = length; 1136 } else if (row < 0) { 1137 row = 0; 1138 } else if (row >= length) { 1139 row = length - 1; 1140 column = undefined; 1141 } 1142 var line = this.getLine(row); 1143 if (column == undefined) 1144 column = line.length; 1145 column = Math.min(Math.max(column, 0), line.length); 1146 return {row: row, column: column}; 1147 }; 1148 1149 this.clonePos = function(pos) { 1150 return {row: pos.row, column: pos.column}; 1151 }; 1152 1153 this.pos = function(row, column) { 1154 return {row: row, column: column}; 1155 }; 1156 1157 this.$clipPosition = function(position) { 1158 var length = this.getLength(); 1159 if (position.row >= length) { 1160 position.row = Math.max(0, length - 1); 1161 position.column = this.getLine(length - 1).length; 1162 } else { 1163 position.row = Math.max(0, position.row); 1164 position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); 1165 } 1166 return position; 1167 }; 1168 this.insertFullLines = function(row, lines) { 1169 row = Math.min(Math.max(row, 0), this.getLength()); 1170 var column = 0; 1171 if (row < this.getLength()) { 1172 lines = lines.concat([""]); 1173 column = 0; 1174 } else { 1175 lines = [""].concat(lines); 1176 row--; 1177 column = this.$lines[row].length; 1178 } 1179 this.insertMergedLines({row: row, column: column}, lines); 1180 }; 1181 this.insertMergedLines = function(position, lines) { 1182 var start = this.clippedPos(position.row, position.column); 1183 var end = { 1184 row: start.row + lines.length - 1, 1185 column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length 1186 }; 1187 1188 this.applyDelta({ 1189 start: start, 1190 end: end, 1191 action: "insert", 1192 lines: lines 1193 }); 1194 1195 return this.clonePos(end); 1196 }; 1197 this.remove = function(range) { 1198 var start = this.clippedPos(range.start.row, range.start.column); 1199 var end = this.clippedPos(range.end.row, range.end.column); 1200 this.applyDelta({ 1201 start: start, 1202 end: end, 1203 action: "remove", 1204 lines: this.getLinesForRange({start: start, end: end}) 1205 }); 1206 return this.clonePos(start); 1207 }; 1208 this.removeInLine = function(row, startColumn, endColumn) { 1209 var start = this.clippedPos(row, startColumn); 1210 var end = this.clippedPos(row, endColumn); 1211 1212 this.applyDelta({ 1213 start: start, 1214 end: end, 1215 action: "remove", 1216 lines: this.getLinesForRange({start: start, end: end}) 1217 }, true); 1218 1219 return this.clonePos(start); 1220 }; 1221 this.removeFullLines = function(firstRow, lastRow) { 1222 firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); 1223 lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); 1224 var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; 1225 var deleteLastNewLine = lastRow < this.getLength() - 1; 1226 var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); 1227 var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); 1228 var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); 1229 var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); 1230 var range = new Range(startRow, startCol, endRow, endCol);
1231 var deletedLines = this.$lines.slice(firstRow, lastRow + 1); 1232 1233 this.applyDelta({ 1234 start: range.start, 1235 end: range.end, 1236 action: "remove", 1237 lines: this.getLinesForRange(range) 1238 }); 1239 return deletedLines; 1240 }; 1241 this.removeNewLine = function(row) { 1242 if (row < this.getLength() - 1 && row >= 0) { 1243 this.applyDelta({ 1244 start: this.pos(row, this.getLine(row).length), 1245 end: this.pos(row + 1, 0), 1246 action: "remove", 1247 lines: ["", ""] 1248 }); 1249 } 1250 }; 1251 this.replace = function(range, text) { 1252 if (!(range instanceof Range)) 1253 range = Range.fromPoints(range.start, range.end); 1254 if (text.length === 0 && range.isEmpty()) 1255 return range.start; 1256 if (text == this.getTextRange(range)) 1257 return range.end; 1258 1259 this.remove(range); 1260 var end; 1261 if (text) { 1262 end = this.insert(range.start, text); 1263 } 1264 else { 1265 end = range.start; 1266 } 1267 1268 return end; 1269 }; 1270 this.applyDeltas = function(deltas) { 1271 for (var i=0; i<deltas.length; i++) { 1272 this.applyDelta(deltas[i]); 1273 } 1274 }; 1275 this.revertDeltas = function(deltas) { 1276 for (var i=deltas.length-1; i>=0; i--) { 1277 this.revertDelta(deltas[i]); 1278 } 1279 }; 1280 this.applyDelta = function(delta, doNotValidate) { 1281 var isInsert = delta.action == "insert"; 1282 if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] 1283 : !Range.comparePoints(delta.start, delta.end)) { 1284 return; 1285 } 1286 1287 if (isInsert && delta.lines.length > 20000) { 1288 this.$splitAndapplyLargeDelta(delta, 20000); 1289 } 1290 else { 1291 applyDelta(this.$lines, delta, doNotValidate); 1292 this._signal("change", delta); 1293 } 1294 }; 1295 1296 this.$safeApplyDelta = function(delta) { 1297 var docLength = this.$lines.length; 1298 if ( 1299 delta.action == "remove" && delta.start.row < docLength && delta.end.row < docLength 1300 || delta.action == "insert" && delta.start.row <= docLength 1301 ) { 1302 this.applyDelta(delta); 1303 } 1304 }; 1305 1306 this.$splitAndapplyLargeDelta = function(delta, MAX) { 1307 var lines = delta.lines; 1308 var l = lines.length - MAX + 1; 1309 var row = delta.start.row; 1310 var column = delta.start.column; 1311 for (var from = 0, to = 0; from < l; from = to) { 1312 to += MAX - 1; 1313 var chunk = lines.slice(from, to); 1314 chunk.push(""); 1315 this.applyDelta({ 1316 start: this.pos(row + from, column), 1317 end: this.pos(row + to, column = 0), 1318 action: delta.action, 1319 lines: chunk 1320 }, true); 1321 } 1322 delta.lines = lines.slice(from); 1323 delta.start.row = row + from; 1324 delta.start.column = column; 1325 this.applyDelta(delta, true); 1326 }; 1327 this.revertDelta = function(delta) { 1328 this.$safeApplyDelta({ 1329 start: this.clonePos(delta.start), 1330 end: this.clonePos(delta.end), 1331 action: (delta.action == "insert" ? "remove" : "insert"), 1332 lines: delta.lines.slice() 1333 }); 1334 }; 1335 this.indexToPosition = function(index, startRow) { 1336 var lines = this.$lines || this.getAllLines(); 1337 var newlineLength = this.getNewLineCharacter().length; 1338 for (var i = startRow || 0, l = lines.length; i < l; i++) { 1339 index -= lines[i].length + newlineLength; 1340 if (index < 0) 1341 return {row: i, column: index + lines[i].length + newlineLength}; 1342 } 1343 return {row: l-1, column: index + lines[l-1].length + newlineLength}; 1344 }; 1345 this.positionToIndex = function(pos, startRow) { 1346 var lines = this.$lines || this.getAllLines(); 1347 var newlineLength = this.getNewLineCharacter().length; 1348 var index = 0; 1349 var row = Math.min(pos.row, lines.length); 1350 for (var i = startRow || 0; i < row; ++i) 1351 index += lines[i].length + newlineLength; 1352 1353 return index + pos.column; 1354 }; 1355 1356}).call(Document.prototype); 1357 1358exports.Document = Document; 1359}); 1360 1361define("ace/worker/mirror",[], function(require, exports, module) { 1362"use strict"; 1363 1364var Range = require("../range").Range; 1365var Document = require("../document").Document; 1366var lang = require("../lib/lang"); 1367 1368var Mirror = exports.Mirror = function(sender) { 1369 this.sender = sender; 1370 var doc = this.doc = new Document(""); 1371 1372 var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this)); 1373 1374 var _self = this; 1375 sender.on("change", function(e) { 1376 var data = e.data; 1377 if (data[0].start) { 1378 doc.applyDeltas(data); 1379 } else { 1380 for (var i = 0; i < data.length; i += 2) {
1381 if (Array.isArray(data[i+1])) { 1382 var d = {action: "insert", start: data[i], lines: data[i+1]}; 1383 } else { 1384 var d = {action: "remove", start: data[i], end: data[i+1]}; 1385 } 1386 doc.applyDelta(d, true); 1387 } 1388 } 1389 if (_self.$timeout) 1390 return deferredUpdate.schedule(_self.$timeout); 1391 _self.onUpdate(); 1392 }); 1393}; 1394 1395(function() { 1396 1397 this.$timeout = 500; 1398 1399 this.setTimeout = function(timeout) { 1400 this.$timeout = timeout; 1401 }; 1402 1403 this.setValue = function(value) { 1404 this.doc.setValue(value); 1405 this.deferredUpdate.schedule(this.$timeout); 1406 }; 1407 1408 this.getValue = function(callbackId) { 1409 this.sender.callback(this.doc.getValue(), callbackId); 1410 }; 1411 1412 this.onUpdate = function() { 1413 }; 1414 1415 this.isPending = function() { 1416 return this.deferredUpdate.isPending(); 1417 }; 1418 1419}).call(Mirror.prototype); 1420 1421}); 1422 1423define("ace/mode/html/saxparser",[], function(require, exports, module) { 1424module.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({ 14251:[function(_dereq_,module,exports){ 1426function isScopeMarker(node) { 1427 if (node.namespaceURI === "http://www.w3.org/1999/xhtml") { 1428 return node.localName === "applet" 1429 || node.localName === "caption" 1430 || node.localName === "marquee" 1431 || node.localName === "object" 1432 || node.localName === "table" 1433 || node.localName === "td" 1434 || node.localName === "th"; 1435 } 1436 if (node.namespaceURI === "http://www.w3.org/1998/Math/MathML") { 1437 return node.localName === "mi" 1438 || node.localName === "mo" 1439 || node.localName === "mn" 1440 || node.localName === "ms" 1441 || node.localName === "mtext" 1442 || node.localName === "annotation-xml"; 1443 } 1444 if (node.namespaceURI === "http://www.w3.org/2000/svg") { 1445 return node.localName === "foreignObject" 1446 || node.localName === "desc" 1447 || node.localName === "title"; 1448 } 1449} 1450 1451function isListItemScopeMarker(node) { 1452 return isScopeMarker(node) 1453 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'ol') 1454 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'ul'); 1455} 1456 1457function isTableScopeMarker(node) { 1458 return (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'table') 1459 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'html'); 1460} 1461 1462function isTableBodyScopeMarker(node) { 1463 return (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'tbody') 1464 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'tfoot') 1465 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'thead') 1466 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'html'); 1467} 1468 1469function isTableRowScopeMarker(node) { 1470 return (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'tr') 1471 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'html'); 1472} 1473 1474function isButtonScopeMarker(node) { 1475 return isScopeMarker(node) 1476 || (node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'button'); 1477} 1478 1479function isSelectScopeMarker(node) { 1480 return !(node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'optgroup') 1481 && !(node.namespaceURI === "http://www.w3.org/1999/xhtml" && node.localName === 'option'); 1482} 1483function ElementStack() { 1484 this.elements = []; 1485 this.rootNode = null; 1486 this.headElement = null; 1487 this.bodyElement = null; 1488} 1489ElementStack.prototype._inScope = function(localName, isMarker) { 1490 for (var i = this.elements.length - 1; i >= 0; i--) { 1491 var node = this.elements[i]; 1492 if (node.localName === localName) 1493 return true; 1494 if (isMarker(node)) 1495 return false;
1496 } 1497}; 1498ElementStack.prototype.push = function(item) { 1499 this.elements.push(item); 1500}; 1501ElementStack.prototype.pushHtmlElement = function(item) { 1502 this.rootNode = item.node; 1503 this.push(item); 1504}; 1505ElementStack.prototype.pushHeadElement = function(item) { 1506 this.headElement = item.node; 1507 this.push(item); 1508}; 1509ElementStack.prototype.pushBodyElement = function(item) { 1510 this.bodyElement = item.node; 1511 this.push(item); 1512}; 1513ElementStack.prototype.pop = function() { 1514 return this.elements.pop(); 1515}; 1516ElementStack.prototype.remove = function(item) { 1517 this.elements.splice(this.elements.indexOf(item), 1); 1518}; 1519ElementStack.prototype.popUntilPopped = function(localName) { 1520 var element; 1521 do { 1522 element = this.pop(); 1523 } while (element.localName != localName); 1524}; 1525 1526ElementStack.prototype.popUntilTableScopeMarker = function() { 1527 while (!isTableScopeMarker(this.top)) 1528 this.pop(); 1529}; 1530 1531ElementStack.prototype.popUntilTableBodyScopeMarker = function() { 1532 while (!isTableBodyScopeMarker(this.top)) 1533 this.pop(); 1534}; 1535 1536ElementStack.prototype.popUntilTableRowScopeMarker = function() { 1537 while (!isTableRowScopeMarker(this.top)) 1538 this.pop(); 1539}; 1540ElementStack.prototype.item = function(index) { 1541 return this.elements[index]; 1542}; 1543ElementStack.prototype.contains = function(element) { 1544 return this.elements.indexOf(element) !== -1; 1545}; 1546ElementStack.prototype.inScope = function(localName) { 1547 return this._inScope(localName, isScopeMarker); 1548}; 1549ElementStack.prototype.inListItemScope = function(localName) { 1550 return this._inScope(localName, isListItemScopeMarker); 1551}; 1552ElementStack.prototype.inTableScope = function(localName) { 1553 return this._inScope(localName, isTableScopeMarker); 1554}; 1555ElementStack.prototype.inButtonScope = function(localName) { 1556 return this._inScope(localName, isButtonScopeMarker); 1557}; 1558ElementStack.prototype.inSelectScope = function(localName) { 1559 return this._inScope(localName, isSelectScopeMarker); 1560}; 1561ElementStack.prototype.hasNumberedHeaderElementInScope = function() { 1562 for (var i = this.elements.length - 1; i >= 0; i--) { 1563 var node = this.elements[i]; 1564 if (node.isNumberedHeader()) 1565 return true; 1566 if (isScopeMarker(node)) 1567 return false; 1568 } 1569}; 1570ElementStack.prototype.furthestBlockForFormattingElement = function(element) { 1571 var furthestBlock = null; 1572 for (var i = this.elements.length - 1; i >= 0; i--) { 1573 var node = this.elements[i]; 1574 if (node.node === element) 1575 break; 1576 if (node.isSpecial()) 1577 furthestBlock = node; 1578 } 1579 return furthestBlock; 1580}; 1581ElementStack.prototype.findIndex = function(localName) { 1582 for (var i = this.elements.length - 1; i >= 0; i--) { 1583 if (this.elements[i].localName == localName) 1584 return i; 1585 } 1586 return -1; 1587}; 1588 1589ElementStack.prototype.remove_openElements_until = function(callback) { 1590 var finished = false; 1591 var element; 1592 while (!finished) { 1593 element = this.elements.pop(); 1594 finished = callback(element); 1595 } 1596 return element; 1597}; 1598 1599Object.defineProperty(ElementStack.prototype, 'top', { 1600 get: function() { 1601 return this.elements[this.elements.length - 1]; 1602 } 1603}); 1604 1605Object.defineProperty(ElementStack.prototype, 'length', { 1606 get: function() { 1607 return this.elements.length; 1608 } 1609}); 1610 1611exports.ElementStack = ElementStack; 1612 1613}, 1614{}], 16152:[function(_dereq_,module,exports){ 1616var entities = _dereq_('html5-entities'); 1617var InputStream = _dereq_('./InputStream').InputStream; 1618 1619var namedEntityPrefixes = {}; 1620Object.keys(entities).forEach(function (entityKey) { 1621 for (var i = 0; i < entityKey.length; i++) { 1622 namedEntityPrefixes[entityKey.substring(0, i + 1)] = true; 1623 } 1624}); 1625 1626function isAlphaNumeric(c) { 1627 return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); 1628} 1629 1630function isHexDigit(c) { 1631 return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); 1632} 1633 1634function isDecimalDigit(c) { 1635 return (c >= '0' && c <= '9'); 1636} 1637 1638var EntityParser = {}; 1639 1640EntityParser.consumeEntity = function(buffer, tokenizer, additionalAllowedCharacter) { 1641 var decodedCharacter = ''; 1642 var consumedCharacters = ''; 1643 var ch = buffer.char(); 1644 if (ch === InputStream.EOF) 1645 return false; 1646 consumedCharacters += ch; 1647 if (ch == '\t' || ch == '\n' || ch == '\v' || ch == ' ' || ch == '<' || ch == '&') { 1648 buffer.unget(consumedCharacters); 1649 return false;
1650 } 1651 if (additionalAllowedCharacter === ch) { 1652 buffer.unget(consumedCharacters); 1653 return false; 1654 } 1655 if (ch == '#') { 1656 ch = buffer.shift(1); 1657 if (ch === InputStream.EOF) { 1658 tokenizer._parseError("expected-numeric-entity-but-got-eof"); 1659 buffer.unget(consumedCharacters); 1660 return false; 1661 } 1662 consumedCharacters += ch; 1663 var radix = 10; 1664 var isDigit = isDecimalDigit; 1665 if (ch == 'x' || ch == 'X') { 1666 radix = 16; 1667 isDigit = isHexDigit; 1668 ch = buffer.shift(1); 1669 if (ch === InputStream.EOF) { 1670 tokenizer._parseError("expected-numeric-entity-but-got-eof"); 1671 buffer.unget(consumedCharacters); 1672 return false; 1673 } 1674 consumedCharacters += ch; 1675 } 1676 if (isDigit(ch)) { 1677 var code = ''; 1678 while (ch !== InputStream.EOF && isDigit(ch)) { 1679 code += ch; 1680 ch = buffer.char(); 1681 } 1682 code = parseInt(code, radix); 1683 var replacement = this.replaceEntityNumbers(code); 1684 if (replacement) { 1685 tokenizer._parseError("invalid-numeric-entity-replaced"); 1686 code = replacement; 1687 } 1688 if (code > 0xFFFF && code <= 0x10FFFF) { 1689 code -= 0x10000; 1690 var first = ((0xffc00 & code) >> 10) + 0xD800; 1691 var second = (0x3ff & code) + 0xDC00; 1692 decodedCharacter = String.fromCharCode(first, second); 1693 } else 1694 decodedCharacter = String.fromCharCode(code); 1695 if (ch !== ';') { 1696 tokenizer._parseError("numeric-entity-without-semicolon"); 1697 buffer.unget(ch); 1698 } 1699 return decodedCharacter; 1700 } 1701 buffer.unget(consumedCharacters); 1702 tokenizer._parseError("expected-numeric-entity"); 1703 return false; 1704 } 1705 if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { 1706 var mostRecentMatch = ''; 1707 while (namedEntityPrefixes[consumedCharacters]) { 1708 if (entities[consumedCharacters]) { 1709 mostRecentMatch = consumedCharacters; 1710 } 1711 if (ch == ';') 1712 break; 1713 ch = buffer.char(); 1714 if (ch === InputStream.EOF) 1715 break; 1716 consumedCharacters += ch; 1717 } 1718 if (!mostRecentMatch) { 1719 tokenizer._parseError("expected-named-entity"); 1720 buffer.unget(consumedCharacters); 1721 return false; 1722 } 1723 decodedCharacter = entities[mostRecentMatch]; 1724 if (ch === ';' || !additionalAllowedCharacter || !(isAlphaNumeric(ch) || ch === '=')) { 1725 if (consumedCharacters.length > mostRecentMatch.length) { 1726 buffer.unget(consumedCharacters.substring(mostRecentMatch.length)); 1727 } 1728 if (ch !== ';') { 1729 tokenizer._parseError("named-entity-without-semicolon"); 1730 } 1731 return decodedCharacter; 1732 } 1733 buffer.unget(consumedCharacters); 1734 return false; 1735 } 1736}; 1737 1738EntityParser.replaceEntityNumbers = function(c) { 1739 switch(c) { 1740 case 0x00: return 0xFFFD; // REPLACEMENT CHARACTER 1741 case 0x13: return 0x0010; // Carriage return 1742 case 0x80: return 0x20AC; // EURO SIGN 1743 case 0x81: return 0x0081; // <control> 1744 case 0x82: return 0x201A; // SINGLE LOW-9 QUOTATION MARK 1745 case 0x83: return 0x0192; // LATIN SMALL LETTER F WITH HOOK 1746 case 0x84: return 0x201E; // DOUBLE LOW-9 QUOTATION MARK 1747 case 0x85: return 0x2026; // HORIZONTAL ELLIPSIS 1748 case 0x86: return 0x2020; // DAGGER 1749 case 0x87: return 0x2021; // DOUBLE DAGGER 1750 case 0x88: return 0x02C6; // MODIFIER LETTER CIRCUMFLEX ACCENT 1751 case 0x89: return 0x2030; // PER MILLE SIGN 1752 case 0x8A: return 0x0160; // LATIN CAPITAL LETTER S WITH CARON 1753 case 0x8B: return 0x2039; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK 1754 case 0x8C: return 0x0152; // LATIN CAPITAL LIGATURE OE 1755 case 0x8D: return 0x008D; // <control> 1756 case 0x8E: return 0x017D; // LATIN CAPITAL LETTER Z WITH CARON 1757 case 0x8F: return 0x008F; // <control> 1758 case 0x90: return 0x0090; // <control> 1759 case 0x91: return 0x2018; // LEFT SINGLE QUOTATION MARK 1760 case 0x92: return 0x2019; // RIGHT SINGLE QUOTATION MARK 1761 case 0x93: return 0x201C; // LEFT DOUBLE QUOTATION MARK 1762 case 0x94: return 0x201D; // RIGHT DOUBLE QUOTATION MARK 1763 case 0x95: return 0x2022; // BULLET 1764 case 0x96: return 0x2013; // EN DASH 1765 case 0x97: return 0x2014; // EM DASH 1766 case 0x98: return 0x02DC; // SMALL TILDE 1767 case 0x99: return 0x2122; // TRADE MARK SIGN 1768 case 0x9A: return 0x0161; // LATIN SMALL LETTER S WITH CARON 1769 case 0x9B: return 0x203A; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 1770 case 0x9C: return 0x0153; // LATIN SMALL LIGATURE OE 1771 case 0x9D: return 0x009D; // <control> 1772 case 0x9E: return 0x017E; // LATIN SMALL LETTER Z WITH CARON 1773 case 0x9F: return 0x0178; // LATIN CAPITAL LETTER Y WITH DIAERESIS 1774 default: 1775 if ((c >= 0xD800 && c <= 0xDFFF) || c > 0x10FFFF) { 1776 return 0xFFFD; 1777 } else if ((c >= 0x0001 && c <= 0x0008) || (c >= 0x000E && c <= 0x001F) || 1778 (c >= 0x007F && c <= 0x009F) || (c >= 0xFDD0 && c <= 0xFDEF) || 1779 c == 0x000B || c == 0xFFFE || c == 0x1FFFE || c == 0x2FFFFE || 1780 c == 0x2FFFF || c == 0x3FFFE || c == 0x3FFFF || c == 0x4FFFE || 1781 c == 0x4FFFF || c == 0x5FFFE || c == 0x5FFFF || c == 0x6FFFE || 1782 c == 0x6FFFF || c == 0x7FFFE || c == 0x7FFFF || c == 0x8FFFE || 1783 c == 0x8FFFF || c == 0x9FFFE || c == 0x9FFFF || c == 0xAFFFE || 1784 c == 0xAFFFF || c == 0xBFFFE || c == 0xBFFFF || c == 0xCFFFE || 1785 c == 0xCFFFF || c == 0xDFFFE || c == 0xDFFFF || c == 0xEFFFE || 1786 c == 0xEFFFF || c == 0xFFFFE || c == 0xFFFFF || c == 0x10FFFE || 1787 c == 0x10FFFF) { 1788 return c; 1789 } 1790 } 1791}; 1792 1793exports.EntityParser = EntityParser; 1794 1795}, 1796{"./InputStream":3,"html5-entities":12}], 17973:[function(_dereq_,module,exports){ 1798function InputStream() { 1799 this.data = ''; 1800 this.start = 0; 1801 this.committed = 0; 1802 this.eof = false;
1803 this.lastLocation = {line: 0, column: 0}; 1804} 1805 1806InputStream.EOF = -1; 1807 1808InputStream.DRAIN = -2; 1809 1810InputStream.prototype = { 1811 slice: function() { 1812 if(this.start >= this.data.length) { 1813 if(!this.eof) throw InputStream.DRAIN; 1814 return InputStream.EOF; 1815 } 1816 return this.data.slice(this.start, this.data.length); 1817 }, 1818 char: function() { 1819 if(!this.eof && this.start >= this.data.length - 1) throw InputStream.DRAIN; 1820 if(this.start >= this.data.length) { 1821 return InputStream.EOF; 1822 } 1823 var ch = this.data[this.start++]; 1824 if (ch === '\r') 1825 ch = '\n'; 1826 return ch; 1827 }, 1828 advance: function(amount) { 1829 this.start += amount; 1830 if(this.start >= this.data.length) { 1831 if(!this.eof) throw InputStream.DRAIN; 1832 return InputStream.EOF; 1833 } else { 1834 if(this.committed > this.data.length / 2) { 1835 this.lastLocation = this.location(); 1836 this.data = this.data.slice(this.committed); 1837 this.start = this.start - this.committed; 1838 this.committed = 0; 1839 } 1840 } 1841 }, 1842 matchWhile: function(re) { 1843 if(this.eof && this.start >= this.data.length ) return ''; 1844 var r = new RegExp("^"+re+"+"); 1845 var m = r.exec(this.slice()); 1846 if(m) { 1847 if(!this.eof && m[0].length == this.data.length - this.start) throw InputStream.DRAIN; 1848 this.advance(m[0].length); 1849 return m[0]; 1850 } else { 1851 return ''; 1852 } 1853 }, 1854 matchUntil: function(re) { 1855 var m, s; 1856 s = this.slice(); 1857 if(s === InputStream.EOF) { 1858 return ''; 1859 } else if(m = new RegExp(re + (this.eof ? "|$" : "")).exec(s)) { 1860 var t = this.data.slice(this.start, this.start + m.index); 1861 this.advance(m.index); 1862 return t.replace(/\r/g, '\n').replace(/\n{2,}/g, '\n'); 1863 } else { 1864 throw InputStream.DRAIN; 1865 } 1866 }, 1867 append: function(data) { 1868 this.data += data; 1869 }, 1870 shift: function(n) { 1871 if(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN; 1872 if(this.eof && this.start >= this.data.length) return InputStream.EOF; 1873 var d = this.data.slice(this.start, this.start + n).toString(); 1874 this.advance(Math.min(n, this.data.length - this.start)); 1875 return d; 1876 }, 1877 peek: function(n) { 1878 if(!this.eof && this.start + n >= this.data.length) throw InputStream.DRAIN; 1879 if(this.eof && this.start >= this.data.length) return InputStream.EOF; 1880 return this.data.slice(this.start, Math.min(this.start + n, this.data.length)).toString(); 1881 }, 1882 length: function() { 1883 return this.data.length - this.start - 1; 1884 }, 1885 unget: function(d) { 1886 if(d === InputStream.EOF) return; 1887 this.start -= (d.length); 1888 }, 1889 undo: function() { 1890 this.start = this.committed; 1891 }, 1892 commit: function() { 1893 this.committed = this.start; 1894 }, 1895 location: function() { 1896 var lastLine = this.lastLocation.line; 1897 var lastColumn = this.lastLocation.column; 1898 var read = this.data.slice(0, this.committed); 1899 var newlines = read.match(/\n/g); 1900 var line = newlines ? lastLine + newlines.length : lastLine; 1901 var column = newlines ? read.length - read.lastIndexOf('\n') - 1 : lastColumn + read.length; 1902 return {line: line, column: column}; 1903 } 1904}; 1905 1906exports.InputStream = InputStream; 1907 1908}, 1909{}], 19104:[function(_dereq_,module,exports){ 1911var SpecialElements = { 1912 "http://www.w3.org/1999/xhtml": [ 1913 'address', 1914 'applet', 1915 'area', 1916 'article', 1917 'aside', 1918 'base', 1919 'basefont', 1920 'bgsound', 1921 'blockquote', 1922 'body', 1923 'br', 1924 'button', 1925 'caption', 1926 'center', 1927 'col', 1928 'colgroup', 1929 'dd', 1930 'details', 1931 'dir', 1932 'div', 1933 'dl', 1934 'dt', 1935 'embed', 1936 'fieldset', 1937 'figcaption', 1938 'figure', 1939 'footer', 1940 'form', 1941 'frame', 1942 'frameset', 1943 'h1', 1944 'h2', 1945 'h3', 1946 'h4', 1947 'h5', 1948 'h6', 1949 'head', 1950 'header', 1951 'hgroup', 1952 'hr', 1953 'html', 1954 'iframe', 1955 'img', 1956 'input', 1957 'isindex', 1958 'li', 1959 'link', 1960 'listing', 1961 'main', 1962 'marquee', 1963 'menu', 1964 'menuitem', 1965 'meta', 1966 'nav', 1967 'noembed', 1968 'noframes', 1969 'noscript', 1970 'object', 1971 'ol', 1972 'p', 1973 'param', 1974 'plaintext', 1975 'pre', 1976 'script', 1977 'section', 1978 'select', 1979 'source', 1980 'style', 1981 'summary', 1982 'table', 1983 'tbody', 1984 'td', 1985 'textarea', 1986 'tfoot', 1987 'th', 1988 'thead', 1989 'title', 1990 'tr', 1991 'track', 1992 'ul', 1993 'wbr', 1994 'xmp' 1995 ], 1996 "http://www.w3.org/1998/Math/MathML": [ 1997 'mi', 1998 'mo', 1999 'mn', 2000 'ms', 2001 'mtext', 2002 'annotation-xml' 2003 ], 2004 "http://www.w3.org/2000/svg": [ 2005 'foreignObject', 2006 'desc', 2007 'title' 2008 ] 2009}; 2010 2011 2012function StackItem(namespaceURI, localName, attributes, node) { 2013 this.localName = localName; 2014 this.namespaceURI = namespaceURI; 2015 this.attributes = attributes; 2016 this.node = node; 2017} 2018StackItem.prototype.isSpecial = function() { 2019 return this.namespaceURI in SpecialElements && 2020 SpecialElements[this.namespaceURI].indexOf(this.localName) > -1; 2021}; 2022 2023StackItem.prototype.isFosterParenting = function() { 2024 if (this.namespaceURI === "http://www.w3.org/1999/xhtml") { 2025 return this.localName === 'table' || 2026 this.localName === 'tbody' || 2027 this.localName === 'tfoot' || 2028 this.localName === 'thead' || 2029 this.localName === 'tr'; 2030 } 2031 return false;
2032}; 2033 2034StackItem.prototype.isNumberedHeader = function() { 2035 if (this.namespaceURI === "http://www.w3.org/1999/xhtml") { 2036 return this.localName === 'h1' || 2037 this.localName === 'h2' || 2038 this.localName === 'h3' || 2039 this.localName === 'h4' || 2040 this.localName === 'h5' || 2041 this.localName === 'h6'; 2042 } 2043 return false; 2044}; 2045 2046StackItem.prototype.isForeign = function() { 2047 return this.namespaceURI != "http://www.w3.org/1999/xhtml"; 2048}; 2049 2050function getAttribute(item, name) { 2051 for (var i = 0; i < item.attributes.length; i++) { 2052 if (item.attributes[i].nodeName == name) 2053 return item.attributes[i].nodeValue; 2054 } 2055 return null; 2056} 2057 2058StackItem.prototype.isHtmlIntegrationPoint = function() { 2059 if (this.namespaceURI === "http://www.w3.org/1998/Math/MathML") { 2060 if (this.localName !== "annotation-xml") 2061 return false; 2062 var encoding = getAttribute(this, 'encoding'); 2063 if (!encoding) 2064 return false; 2065 encoding = encoding.toLowerCase(); 2066 return encoding === "text/html" || encoding === "application/xhtml+xml"; 2067 } 2068 if (this.namespaceURI === "http://www.w3.org/2000/svg") { 2069 return this.localName === "foreignObject" 2070 || this.localName === "desc" 2071 || this.localName === "title"; 2072 } 2073 return false; 2074}; 2075 2076StackItem.prototype.isMathMLTextIntegrationPoint = function() { 2077 if (this.namespaceURI === "http://www.w3.org/1998/Math/MathML") { 2078 return this.localName === "mi" 2079 || this.localName === "mo" 2080 || this.localName === "mn" 2081 || this.localName === "ms" 2082 || this.localName === "mtext"; 2083 } 2084 return false; 2085}; 2086 2087exports.StackItem = StackItem; 2088 2089}, 2090{}], 20915:[function(_dereq_,module,exports){ 2092var InputStream = _dereq_('./InputStream').InputStream; 2093var EntityParser = _dereq_('./EntityParser').EntityParser; 2094 2095function isWhitespace(c){ 2096 return c === " " || c === "\n" || c === "\t" || c === "\r" || c === "\f"; 2097} 2098 2099function isAlpha(c) { 2100 return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); 2101} 2102function Tokenizer(tokenHandler) { 2103 this._tokenHandler = tokenHandler; 2104 this._state = Tokenizer.DATA; 2105 this._inputStream = new InputStream(); 2106 this._currentToken = null; 2107 this._temporaryBuffer = ''; 2108 this._additionalAllowedCharacter = ''; 2109} 2110 2111Tokenizer.prototype._parseError = function(code, args) { 2112 this._tokenHandler.parseError(code, args); 2113}; 2114 2115Tokenizer.prototype._emitToken = function(token) { 2116 if (token.type === 'StartTag') { 2117 for (var i = 1; i < token.data.length; i++) { 2118 if (!token.data[i].nodeName) 2119 token.data.splice(i--, 1); 2120 } 2121 } else if (token.type === 'EndTag') { 2122 if (token.selfClosing) { 2123 this._parseError('self-closing-flag-on-end-tag'); 2124 } 2125 if (token.data.length !== 0) { 2126 this._parseError('attributes-in-end-tag'); 2127 } 2128 } 2129 this._tokenHandler.processToken(token); 2130 if (token.type === 'StartTag' && token.selfClosing && !this._tokenHandler.isSelfClosingFlagAcknowledged()) { 2131 this._parseError('non-void-element-with-trailing-solidus', {name: token.name}); 2132 } 2133}; 2134 2135Tokenizer.prototype._emitCurrentToken = function() { 2136 this._state = Tokenizer.DATA; 2137 this._emitToken(this._currentToken); 2138}; 2139 2140Tokenizer.prototype._currentAttribute = function() { 2141 return this._currentToken.data[this._currentToken.data.length - 1]; 2142}; 2143 2144Tokenizer.prototype.setState = function(state) { 2145 this._state = state; 2146}; 2147 2148Tokenizer.prototype.tokenize = function(source) { 2149 Tokenizer.DATA = data_state; 2150 Tokenizer.RCDATA = rcdata_state; 2151 Tokenizer.RAWTEXT = rawtext_state; 2152 Tokenizer.SCRIPT_DATA = script_data_state; 2153 Tokenizer.PLAINTEXT = plaintext_state; 2154 2155 2156 this._state = Tokenizer.DATA; 2157 2158 this._inputStream.append(source); 2159 2160 this._tokenHandler.startTokenization(this); 2161 2162 this._inputStream.eof = true; 2163 2164 var tokenizer = this; 2165 2166 while (this._state.call(this, this._inputStream)); 2167 2168 2169 function data_state(buffer) { 2170 var data = buffer.char(); 2171 if (data === InputStream.EOF) { 2172 tokenizer._emitToken({type: 'EOF', data: null}); 2173 return false; 2174 } else if (data === '&') { 2175 tokenizer.setState(character_reference_in_data_state); 2176 } else if (data === '<') { 2177 tokenizer.setState(tag_open_state); 2178 } else if (data === '\u0000') { 2179 tokenizer._emitToken({type: 'Characters', data: data}); 2180 buffer.commit(); 2181 } else { 2182 var chars = buffer.matchUntil("&|<|\u0000"); 2183 tokenizer._emitToken({type: 'Characters', data: data + chars}); 2184 buffer.commit(); 2185 } 2186 return true; 2187 } 2188 2189 function character_reference_in_data_state(buffer) { 2190 var character = EntityParser.consumeEntity(buffer, tokenizer); 2191 tokenizer.setState(data_state); 2192 tokenizer._emitToken({type: 'Characters', data: character || '&'}); 2193 return true; 2194 } 2195 2196 function rcdata_state(buffer) { 2197 var data = buffer.char(); 2198 if (data === InputStream.EOF) { 2199 tokenizer._emitToken({type: 'EOF', data: null}); 2200 return false;
2201 } else if (data === '&') { 2202 tokenizer.setState(character_reference_in_rcdata_state); 2203 } else if (data === '<') { 2204 tokenizer.setState(rcdata_less_than_sign_state); 2205 } else if (data === "\u0000") { 2206 tokenizer._parseError("invalid-codepoint"); 2207 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2208 buffer.commit(); 2209 } else { 2210 var chars = buffer.matchUntil("&|<|\u0000"); 2211 tokenizer._emitToken({type: 'Characters', data: data + chars}); 2212 buffer.commit(); 2213 } 2214 return true; 2215 } 2216 2217 function character_reference_in_rcdata_state(buffer) { 2218 var character = EntityParser.consumeEntity(buffer, tokenizer); 2219 tokenizer.setState(rcdata_state); 2220 tokenizer._emitToken({type: 'Characters', data: character || '&'}); 2221 return true; 2222 } 2223 2224 function rawtext_state(buffer) { 2225 var data = buffer.char(); 2226 if (data === InputStream.EOF) { 2227 tokenizer._emitToken({type: 'EOF', data: null}); 2228 return false; 2229 } else if (data === '<') { 2230 tokenizer.setState(rawtext_less_than_sign_state); 2231 } else if (data === "\u0000") { 2232 tokenizer._parseError("invalid-codepoint"); 2233 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2234 buffer.commit(); 2235 } else { 2236 var chars = buffer.matchUntil("<|\u0000"); 2237 tokenizer._emitToken({type: 'Characters', data: data + chars}); 2238 } 2239 return true; 2240 } 2241 2242 function plaintext_state(buffer) { 2243 var data = buffer.char(); 2244 if (data === InputStream.EOF) { 2245 tokenizer._emitToken({type: 'EOF', data: null}); 2246 return false; 2247 } else if (data === "\u0000") { 2248 tokenizer._parseError("invalid-codepoint"); 2249 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2250 buffer.commit(); 2251 } else { 2252 var chars = buffer.matchUntil("\u0000"); 2253 tokenizer._emitToken({type: 'Characters', data: data + chars}); 2254 } 2255 return true; 2256 } 2257 2258 2259 function script_data_state(buffer) { 2260 var data = buffer.char(); 2261 if (data === InputStream.EOF) { 2262 tokenizer._emitToken({type: 'EOF', data: null}); 2263 return false; 2264 } else if (data === '<') { 2265 tokenizer.setState(script_data_less_than_sign_state); 2266 } else if (data === '\u0000') { 2267 tokenizer._parseError("invalid-codepoint"); 2268 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2269 buffer.commit(); 2270 } else { 2271 var chars = buffer.matchUntil("<|\u0000"); 2272 tokenizer._emitToken({type: 'Characters', data: data + chars}); 2273 } 2274 return true; 2275 } 2276 2277 function rcdata_less_than_sign_state(buffer) { 2278 var data = buffer.char(); 2279 if (data === "/") { 2280 this._temporaryBuffer = ''; 2281 tokenizer.setState(rcdata_end_tag_open_state); 2282 } else { 2283 tokenizer._emitToken({type: 'Characters', data: '<'}); 2284 buffer.unget(data); 2285 tokenizer.setState(rcdata_state); 2286 } 2287 return true; 2288 } 2289 2290 function rcdata_end_tag_open_state(buffer) { 2291 var data = buffer.char(); 2292 if (isAlpha(data)) { 2293 this._temporaryBuffer += data; 2294 tokenizer.setState(rcdata_end_tag_name_state); 2295 } else { 2296 tokenizer._emitToken({type: 'Characters', data: '</'}); 2297 buffer.unget(data); 2298 tokenizer.setState(rcdata_state); 2299 } 2300 return true; 2301 } 2302 2303 function rcdata_end_tag_name_state(buffer) { 2304 var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase()); 2305 var data = buffer.char(); 2306 if (isWhitespace(data) && appropriate) { 2307 tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; 2308 tokenizer.setState(before_attribute_name_state); 2309 } else if (data === '/' && appropriate) { 2310 tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; 2311 tokenizer.setState(self_closing_tag_state); 2312 } else if (data === '>' && appropriate) { 2313 tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; 2314 tokenizer._emitCurrentToken(); 2315 tokenizer.setState(data_state); 2316 } else if (isAlpha(data)) { 2317 this._temporaryBuffer += data; 2318 buffer.commit(); 2319 } else { 2320 tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer}); 2321 buffer.unget(data); 2322 tokenizer.setState(rcdata_state); 2323 } 2324 return true; 2325 } 2326 2327 function rawtext_less_than_sign_state(buffer) { 2328 var data = buffer.char(); 2329 if (data === "/") { 2330 this._temporaryBuffer = ''; 2331 tokenizer.setState(rawtext_end_tag_open_state); 2332 } else { 2333 tokenizer._emitToken({type: 'Characters', data: '<'});
2334 buffer.unget(data); 2335 tokenizer.setState(rawtext_state); 2336 } 2337 return true; 2338 } 2339 2340 function rawtext_end_tag_open_state(buffer) { 2341 var data = buffer.char(); 2342 if (isAlpha(data)) { 2343 this._temporaryBuffer += data; 2344 tokenizer.setState(rawtext_end_tag_name_state); 2345 } else { 2346 tokenizer._emitToken({type: 'Characters', data: '</'}); 2347 buffer.unget(data); 2348 tokenizer.setState(rawtext_state); 2349 } 2350 return true; 2351 } 2352 2353 function rawtext_end_tag_name_state(buffer) { 2354 var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase()); 2355 var data = buffer.char(); 2356 if (isWhitespace(data) && appropriate) { 2357 tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; 2358 tokenizer.setState(before_attribute_name_state); 2359 } else if (data === '/' && appropriate) { 2360 tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; 2361 tokenizer.setState(self_closing_tag_state); 2362 } else if (data === '>' && appropriate) { 2363 tokenizer._currentToken = {type: 'EndTag', name: this._temporaryBuffer, data: [], selfClosing: false}; 2364 tokenizer._emitCurrentToken(); 2365 tokenizer.setState(data_state); 2366 } else if (isAlpha(data)) { 2367 this._temporaryBuffer += data; 2368 buffer.commit(); 2369 } else { 2370 tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer}); 2371 buffer.unget(data); 2372 tokenizer.setState(rawtext_state); 2373 } 2374 return true; 2375 } 2376 2377 function script_data_less_than_sign_state(buffer) { 2378 var data = buffer.char(); 2379 if (data === "/") { 2380 this._temporaryBuffer = ''; 2381 tokenizer.setState(script_data_end_tag_open_state); 2382 } else if (data === '!') { 2383 tokenizer._emitToken({type: 'Characters', data: '<!'}); 2384 tokenizer.setState(script_data_escape_start_state); 2385 } else { 2386 tokenizer._emitToken({type: 'Characters', data: '<'}); 2387 buffer.unget(data); 2388 tokenizer.setState(script_data_state); 2389 } 2390 return true; 2391 } 2392 2393 function script_data_end_tag_open_state(buffer) { 2394 var data = buffer.char(); 2395 if (isAlpha(data)) { 2396 this._temporaryBuffer += data; 2397 tokenizer.setState(script_data_end_tag_name_state); 2398 } else { 2399 tokenizer._emitToken({type: 'Characters', data: '</'}); 2400 buffer.unget(data); 2401 tokenizer.setState(script_data_state); 2402 } 2403 return true; 2404 } 2405 2406 function script_data_end_tag_name_state(buffer) { 2407 var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase()); 2408 var data = buffer.char(); 2409 if (isWhitespace(data) && appropriate) { 2410 tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; 2411 tokenizer.setState(before_attribute_name_state); 2412 } else if (data === '/' && appropriate) { 2413 tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; 2414 tokenizer.setState(self_closing_tag_state); 2415 } else if (data === '>' && appropriate) { 2416 tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; 2417 tokenizer._emitCurrentToken(); 2418 } else if (isAlpha(data)) { 2419 this._temporaryBuffer += data; 2420 buffer.commit(); 2421 } else { 2422 tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer}); 2423 buffer.unget(data); 2424 tokenizer.setState(script_data_state); 2425 } 2426 return true; 2427 } 2428 2429 function script_data_escape_start_state(buffer) { 2430 var data = buffer.char(); 2431 if (data === '-') { 2432 tokenizer._emitToken({type: 'Characters', data: '-'}); 2433 tokenizer.setState(script_data_escape_start_dash_state); 2434 } else { 2435 buffer.unget(data); 2436 tokenizer.setState(script_data_state); 2437 } 2438 return true; 2439 } 2440 2441 function script_data_escape_start_dash_state(buffer) { 2442 var data = buffer.char(); 2443 if (data === '-') { 2444 tokenizer._emitToken({type: 'Characters', data: '-'}); 2445 tokenizer.setState(script_data_escaped_dash_dash_state); 2446 } else { 2447 buffer.unget(data); 2448 tokenizer.setState(script_data_state); 2449 } 2450 return true; 2451 } 2452 2453 function script_data_escaped_state(buffer) { 2454 var data = buffer.char(); 2455 if (data === InputStream.EOF) {
2456 buffer.unget(data); 2457 tokenizer.setState(data_state); 2458 } else if (data === '-') { 2459 tokenizer._emitToken({type: 'Characters', data: '-'}); 2460 tokenizer.setState(script_data_escaped_dash_state); 2461 } else if (data === '<') { 2462 tokenizer.setState(script_data_escaped_less_then_sign_state); 2463 } else if (data === '\u0000') { 2464 tokenizer._parseError("invalid-codepoint"); 2465 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2466 buffer.commit(); 2467 } else { 2468 var chars = buffer.matchUntil('<|-|\u0000'); 2469 tokenizer._emitToken({type: 'Characters', data: data + chars}); 2470 } 2471 return true; 2472 } 2473 2474 function script_data_escaped_dash_state(buffer) { 2475 var data = buffer.char(); 2476 if (data === InputStream.EOF) { 2477 buffer.unget(data); 2478 tokenizer.setState(data_state); 2479 } else if (data === '-') { 2480 tokenizer._emitToken({type: 'Characters', data: '-'}); 2481 tokenizer.setState(script_data_escaped_dash_dash_state); 2482 } else if (data === '<') { 2483 tokenizer.setState(script_data_escaped_less_then_sign_state); 2484 } else if (data === '\u0000') { 2485 tokenizer._parseError("invalid-codepoint"); 2486 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2487 tokenizer.setState(script_data_escaped_state); 2488 } else { 2489 tokenizer._emitToken({type: 'Characters', data: data}); 2490 tokenizer.setState(script_data_escaped_state); 2491 } 2492 return true; 2493 } 2494 2495 function script_data_escaped_dash_dash_state(buffer) { 2496 var data = buffer.char(); 2497 if (data === InputStream.EOF) { 2498 tokenizer._parseError('eof-in-script'); 2499 buffer.unget(data); 2500 tokenizer.setState(data_state); 2501 } else if (data === '<') { 2502 tokenizer.setState(script_data_escaped_less_then_sign_state); 2503 } else if (data === '>') { 2504 tokenizer._emitToken({type: 'Characters', data: '>'}); 2505 tokenizer.setState(script_data_state); 2506 } else if (data === '\u0000') { 2507 tokenizer._parseError("invalid-codepoint"); 2508 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2509 tokenizer.setState(script_data_escaped_state); 2510 } else { 2511 tokenizer._emitToken({type: 'Characters', data: data}); 2512 tokenizer.setState(script_data_escaped_state); 2513 } 2514 return true; 2515 } 2516 2517 function script_data_escaped_less_then_sign_state(buffer) { 2518 var data = buffer.char(); 2519 if (data === '/') { 2520 this._temporaryBuffer = ''; 2521 tokenizer.setState(script_data_escaped_end_tag_open_state); 2522 } else if (isAlpha(data)) { 2523 tokenizer._emitToken({type: 'Characters', data: '<' + data}); 2524 this._temporaryBuffer = data; 2525 tokenizer.setState(script_data_double_escape_start_state); 2526 } else { 2527 tokenizer._emitToken({type: 'Characters', data: '<'}); 2528 buffer.unget(data); 2529 tokenizer.setState(script_data_escaped_state); 2530 } 2531 return true; 2532 } 2533 2534 function script_data_escaped_end_tag_open_state(buffer) { 2535 var data = buffer.char(); 2536 if (isAlpha(data)) { 2537 this._temporaryBuffer = data; 2538 tokenizer.setState(script_data_escaped_end_tag_name_state); 2539 } else { 2540 tokenizer._emitToken({type: 'Characters', data: '</'}); 2541 buffer.unget(data); 2542 tokenizer.setState(script_data_escaped_state); 2543 } 2544 return true; 2545 } 2546 2547 function script_data_escaped_end_tag_name_state(buffer) { 2548 var appropriate = tokenizer._currentToken && (tokenizer._currentToken.name === this._temporaryBuffer.toLowerCase()); 2549 var data = buffer.char(); 2550 if (isWhitespace(data) && appropriate) { 2551 tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; 2552 tokenizer.setState(before_attribute_name_state); 2553 } else if (data === '/' && appropriate) { 2554 tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; 2555 tokenizer.setState(self_closing_tag_state); 2556 } else if (data === '>' && appropriate) { 2557 tokenizer._currentToken = {type: 'EndTag', name: 'script', data: [], selfClosing: false}; 2558 tokenizer.setState(data_state); 2559 tokenizer._emitCurrentToken(); 2560 } else if (isAlpha(data)) { 2561 this._temporaryBuffer += data; 2562 buffer.commit(); 2563 } else { 2564 tokenizer._emitToken({type: 'Characters', data: '</' + this._temporaryBuffer}); 2565 buffer.unget(data); 2566 tokenizer.setState(script_data_escaped_state); 2567 } 2568 return true; 2569 } 2570 2571 function script_data_double_escape_start_state(buffer) { 2572 var data = buffer.char(); 2573 if (isWhitespace(data) || data === '/' || data === '>') { 2574 tokenizer._emitToken({type: 'Characters', data: data}); 2575 if (this._temporaryBuffer.toLowerCase() === 'script') 2576 tokenizer.setState(script_data_double_escaped_state); 2577 else 2578 tokenizer.setState(script_data_escaped_state); 2579 } else if (isAlpha(data)) { 2580 tokenizer._emitToken({type: 'Characters', data: data}); 2581 this._temporaryBuffer += data; 2582 buffer.commit(); 2583 } else {
2584 buffer.unget(data); 2585 tokenizer.setState(script_data_escaped_state); 2586 } 2587 return true; 2588 } 2589 2590 function script_data_double_escaped_state(buffer) { 2591 var data = buffer.char(); 2592 if (data === InputStream.EOF) { 2593 tokenizer._parseError('eof-in-script'); 2594 buffer.unget(data); 2595 tokenizer.setState(data_state); 2596 } else if (data === '-') { 2597 tokenizer._emitToken({type: 'Characters', data: '-'}); 2598 tokenizer.setState(script_data_double_escaped_dash_state); 2599 } else if (data === '<') { 2600 tokenizer._emitToken({type: 'Characters', data: '<'}); 2601 tokenizer.setState(script_data_double_escaped_less_than_sign_state); 2602 } else if (data === '\u0000') { 2603 tokenizer._parseError('invalid-codepoint'); 2604 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2605 buffer.commit(); 2606 } else { 2607 tokenizer._emitToken({type: 'Characters', data: data}); 2608 buffer.commit(); 2609 } 2610 return true; 2611 } 2612 2613 function script_data_double_escaped_dash_state(buffer) { 2614 var data = buffer.char(); 2615 if (data === InputStream.EOF) { 2616 tokenizer._parseError('eof-in-script'); 2617 buffer.unget(data); 2618 tokenizer.setState(data_state); 2619 } else if (data === '-') { 2620 tokenizer._emitToken({type: 'Characters', data: '-'}); 2621 tokenizer.setState(script_data_double_escaped_dash_dash_state); 2622 } else if (data === '<') { 2623 tokenizer._emitToken({type: 'Characters', data: '<'}); 2624 tokenizer.setState(script_data_double_escaped_less_than_sign_state); 2625 } else if (data === '\u0000') { 2626 tokenizer._parseError('invalid-codepoint'); 2627 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2628 tokenizer.setState(script_data_double_escaped_state); 2629 } else { 2630 tokenizer._emitToken({type: 'Characters', data: data}); 2631 tokenizer.setState(script_data_double_escaped_state); 2632 } 2633 return true; 2634 } 2635 2636 function script_data_double_escaped_dash_dash_state(buffer) { 2637 var data = buffer.char(); 2638 if (data === InputStream.EOF) { 2639 tokenizer._parseError('eof-in-script'); 2640 buffer.unget(data); 2641 tokenizer.setState(data_state); 2642 } else if (data === '-') { 2643 tokenizer._emitToken({type: 'Characters', data: '-'}); 2644 buffer.commit(); 2645 } else if (data === '<') { 2646 tokenizer._emitToken({type: 'Characters', data: '<'}); 2647 tokenizer.setState(script_data_double_escaped_less_than_sign_state); 2648 } else if (data === '>') { 2649 tokenizer._emitToken({type: 'Characters', data: '>'}); 2650 tokenizer.setState(script_data_state); 2651 } else if (data === '\u0000') { 2652 tokenizer._parseError('invalid-codepoint'); 2653 tokenizer._emitToken({type: 'Characters', data: '\uFFFD'}); 2654 tokenizer.setState(script_data_double_escaped_state); 2655 } else { 2656 tokenizer._emitToken({type: 'Characters', data: data}); 2657 tokenizer.setState(script_data_double_escaped_state); 2658 } 2659 return true; 2660 } 2661 2662 function script_data_double_escaped_less_than_sign_state(buffer) { 2663 var data = buffer.char(); 2664 if (data === '/') { 2665 tokenizer._emitToken({type: 'Characters', data: '/'}); 2666 this._temporaryBuffer = ''; 2667 tokenizer.setState(script_data_double_escape_end_state); 2668 } else { 2669 buffer.unget(data); 2670 tokenizer.setState(script_data_double_escaped_state); 2671 } 2672 return true; 2673 } 2674 2675 function script_data_double_escape_end_state(buffer) { 2676 var data = buffer.char(); 2677 if (isWhitespace(data) || data === '/' || data === '>') { 2678 tokenizer._emitToken({type: 'Characters', data: data}); 2679 if (this._temporaryBuffer.toLowerCase() === 'script') 2680 tokenizer.setState(script_data_escaped_state); 2681 else 2682 tokenizer.setState(script_data_double_escaped_state); 2683 } else if (isAlpha(data)) { 2684 tokenizer._emitToken({type: 'Characters', data: data}); 2685 this._temporaryBuffer += data; 2686 buffer.commit(); 2687 } else { 2688 buffer.unget(data); 2689 tokenizer.setState(script_data_double_escaped_state); 2690 } 2691 return true; 2692 } 2693 2694 function tag_open_state(buffer) { 2695 var data = buffer.char(); 2696 if (data === InputStream.EOF) { 2697 tokenizer._parseError("bare-less-than-sign-at-eof"); 2698 tokenizer._emitToken({type: 'Characters', data: '<'}); 2699 buffer.unget(data); 2700 tokenizer.setState(data_state); 2701 } else if (isAlpha(data)) { 2702 tokenizer._currentToken = {type: 'StartTag', name: data.toLowerCase(), data: []}; 2703 tokenizer.setState(tag_name_state); 2704 } else if (data === '!') { 2705 tokenizer.setState(markup_declaration_open_state); 2706 } else if (data === '/') { 2707 tokenizer.setState(close_tag_open_state); 2708 } else if (data === '>') { 2709 tokenizer._parseError("expected-tag-name-but-got-right-bracket"); 2710 tokenizer._emitToken({type: 'Characters', data: "<>"}); 2711 tokenizer.setState(data_state); 2712 } else if (data === '?') { 2713 tokenizer._parseError("expected-tag-name-but-got-question-mark");
2714 buffer.unget(data); 2715 tokenizer.setState(bogus_comment_state); 2716 } else { 2717 tokenizer._parseError("expected-tag-name"); 2718 tokenizer._emitToken({type: 'Characters', data: "<"}); 2719 buffer.unget(data); 2720 tokenizer.setState(data_state); 2721 } 2722 return true; 2723 } 2724 2725 function close_tag_open_state(buffer) { 2726 var data = buffer.char(); 2727 if (data === InputStream.EOF) { 2728 tokenizer._parseError("expected-closing-tag-but-got-eof"); 2729 tokenizer._emitToken({type: 'Characters', data: '</'}); 2730 buffer.unget(data); 2731 tokenizer.setState(data_state); 2732 } else if (isAlpha(data)) { 2733 tokenizer._currentToken = {type: 'EndTag', name: data.toLowerCase(), data: []}; 2734 tokenizer.setState(tag_name_state); 2735 } else if (data === '>') { 2736 tokenizer._parseError("expected-closing-tag-but-got-right-bracket"); 2737 tokenizer.setState(data_state); 2738 } else { 2739 tokenizer._parseError("expected-closing-tag-but-got-char", {data: data}); // param 1 is datavars: 2740 buffer.unget(data); 2741 tokenizer.setState(bogus_comment_state); 2742 } 2743 return true; 2744 } 2745 2746 function tag_name_state(buffer) { 2747 var data = buffer.char(); 2748 if (data === InputStream.EOF) { 2749 tokenizer._parseError('eof-in-tag-name'); 2750 buffer.unget(data); 2751 tokenizer.setState(data_state); 2752 } else if (isWhitespace(data)) { 2753 tokenizer.setState(before_attribute_name_state); 2754 } else if (isAlpha(data)) { 2755 tokenizer._currentToken.name += data.toLowerCase(); 2756 } else if (data === '>') { 2757 tokenizer._emitCurrentToken(); 2758 } else if (data === '/') { 2759 tokenizer.setState(self_closing_tag_state); 2760 } else if (data === '\u0000') { 2761 tokenizer._parseError("invalid-codepoint"); 2762 tokenizer._currentToken.name += "\uFFFD"; 2763 } else { 2764 tokenizer._currentToken.name += data; 2765 } 2766 buffer.commit(); 2767 2768 return true; 2769 } 2770 2771 function before_attribute_name_state(buffer) { 2772 var data = buffer.char(); 2773 if (data === InputStream.EOF) { 2774 tokenizer._parseError("expected-attribute-name-but-got-eof"); 2775 buffer.unget(data); 2776 tokenizer.setState(data_state); 2777 } else if (isWhitespace(data)) { 2778 return true; 2779 } else if (isAlpha(data)) { 2780 tokenizer._currentToken.data.push({nodeName: data.toLowerCase(), nodeValue: ""}); 2781 tokenizer.setState(attribute_name_state); 2782 } else if (data === '>') { 2783 tokenizer._emitCurrentToken(); 2784 } else if (data === '/') { 2785 tokenizer.setState(self_closing_tag_state); 2786 } else if (data === "'" || data === '"' || data === '=' || data === '<') { 2787 tokenizer._parseError("invalid-character-in-attribute-name"); 2788 tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); 2789 tokenizer.setState(attribute_name_state); 2790 } else if (data === '\u0000') { 2791 tokenizer._parseError("invalid-codepoint"); 2792 tokenizer._currentToken.data.push({nodeName: "\uFFFD", nodeValue: ""}); 2793 } else { 2794 tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); 2795 tokenizer.setState(attribute_name_state); 2796 } 2797 return true; 2798 } 2799 2800 function attribute_name_state(buffer) { 2801 var data = buffer.char(); 2802 var leavingThisState = true; 2803 var shouldEmit = false; 2804 if (data === InputStream.EOF) { 2805 tokenizer._parseError("eof-in-attribute-name"); 2806 buffer.unget(data); 2807 tokenizer.setState(data_state); 2808 shouldEmit = true; 2809 } else if (data === '=') { 2810 tokenizer.setState(before_attribute_value_state); 2811 } else if (isAlpha(data)) { 2812 tokenizer._currentAttribute().nodeName += data.toLowerCase(); 2813 leavingThisState = false; 2814 } else if (data === '>') { 2815 shouldEmit = true; 2816 } else if (isWhitespace(data)) { 2817 tokenizer.setState(after_attribute_name_state); 2818 } else if (data === '/') { 2819 tokenizer.setState(self_closing_tag_state); 2820 } else if (data === "'" || data === '"') { 2821 tokenizer._parseError("invalid-character-in-attribute-name"); 2822 tokenizer._currentAttribute().nodeName += data; 2823 leavingThisState = false; 2824 } else if (data === '\u0000') { 2825 tokenizer._parseError("invalid-codepoint"); 2826 tokenizer._currentAttribute().nodeName += "\uFFFD"; 2827 } else { 2828 tokenizer._currentAttribute().nodeName += data; 2829 leavingThisState = false; 2830 } 2831 2832 if (leavingThisState) { 2833 var attributes = tokenizer._currentToken.data; 2834 var currentAttribute = attributes[attributes.length - 1]; 2835 for (var i = attributes.length - 2; i >= 0; i--) {
2836 if (currentAttribute.nodeName === attributes[i].nodeName) { 2837 tokenizer._parseError("duplicate-attribute", {name: currentAttribute.nodeName}); 2838 currentAttribute.nodeName = null; 2839 break; 2840 } 2841 } 2842 if (shouldEmit) 2843 tokenizer._emitCurrentToken(); 2844 } else { 2845 buffer.commit(); 2846 } 2847 return true; 2848 } 2849 2850 function after_attribute_name_state(buffer) { 2851 var data = buffer.char(); 2852 if (data === InputStream.EOF) { 2853 tokenizer._parseError("expected-end-of-tag-but-got-eof"); 2854 buffer.unget(data); 2855 tokenizer.setState(data_state); 2856 } else if (isWhitespace(data)) { 2857 return true; 2858 } else if (data === '=') { 2859 tokenizer.setState(before_attribute_value_state); 2860 } else if (data === '>') { 2861 tokenizer._emitCurrentToken(); 2862 } else if (isAlpha(data)) { 2863 tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); 2864 tokenizer.setState(attribute_name_state); 2865 } else if (data === '/') { 2866 tokenizer.setState(self_closing_tag_state); 2867 } else if (data === "'" || data === '"' || data === '<') { 2868 tokenizer._parseError("invalid-character-after-attribute-name"); 2869 tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); 2870 tokenizer.setState(attribute_name_state); 2871 } else if (data === '\u0000') { 2872 tokenizer._parseError("invalid-codepoint"); 2873 tokenizer._currentToken.data.push({nodeName: "\uFFFD", nodeValue: ""}); 2874 } else { 2875 tokenizer._currentToken.data.push({nodeName: data, nodeValue: ""}); 2876 tokenizer.setState(attribute_name_state); 2877 } 2878 return true; 2879 } 2880 2881 function before_attribute_value_state(buffer) { 2882 var data = buffer.char(); 2883 if (data === InputStream.EOF) { 2884 tokenizer._parseError("expected-attribute-value-but-got-eof"); 2885 buffer.unget(data); 2886 tokenizer.setState(data_state); 2887 } else if (isWhitespace(data)) { 2888 return true; 2889 } else if (data === '"') { 2890 tokenizer.setState(attribute_value_double_quoted_state); 2891 } else if (data === '&') { 2892 tokenizer.setState(attribute_value_unquoted_state); 2893 buffer.unget(data); 2894 } else if (data === "'") { 2895 tokenizer.setState(attribute_value_single_quoted_state); 2896 } else if (data === '>') { 2897 tokenizer._parseError("expected-attribute-value-but-got-right-bracket"); 2898 tokenizer._emitCurrentToken(); 2899 } else if (data === '=' || data === '<' || data === '`') { 2900 tokenizer._parseError("unexpected-character-in-unquoted-attribute-value"); 2901 tokenizer._currentAttribute().nodeValue += data; 2902 tokenizer.setState(attribute_value_unquoted_state); 2903 } else if (data === '\u0000') { 2904 tokenizer._parseError("invalid-codepoint"); 2905 tokenizer._currentAttribute().nodeValue += "\uFFFD"; 2906 } else { 2907 tokenizer._currentAttribute().nodeValue += data; 2908 tokenizer.setState(attribute_value_unquoted_state); 2909 } 2910 2911 return true; 2912 } 2913 2914 function attribute_value_double_quoted_state(buffer) { 2915 var data = buffer.char(); 2916 if (data === InputStream.EOF) { 2917 tokenizer._parseError("eof-in-attribute-value-double-quote"); 2918 buffer.unget(data); 2919 tokenizer.setState(data_state); 2920 } else if (data === '"') { 2921 tokenizer.setState(after_attribute_value_state); 2922 } else if (data === '&') { 2923 this._additionalAllowedCharacter = '"'; 2924 tokenizer.setState(character_reference_in_attribute_value_state); 2925 } else if (data === '\u0000') { 2926 tokenizer._parseError("invalid-codepoint"); 2927 tokenizer._currentAttribute().nodeValue += "\uFFFD"; 2928 } else { 2929 var s = buffer.matchUntil('[\0"&]'); 2930 data = data + s; 2931 tokenizer._currentAttribute().nodeValue += data; 2932 } 2933 return true; 2934 } 2935 2936 function attribute_value_single_quoted_state(buffer) { 2937 var data = buffer.char(); 2938 if (data === InputStream.EOF) { 2939 tokenizer._parseError("eof-in-attribute-value-single-quote"); 2940 buffer.unget(data); 2941 tokenizer.setState(data_state); 2942 } else if (data === "'") { 2943 tokenizer.setState(after_attribute_value_state); 2944 } else if (data === '&') { 2945 this._additionalAllowedCharacter = "'"; 2946 tokenizer.setState(character_reference_in_attribute_value_state); 2947 } else if (data === '\u0000') { 2948 tokenizer._parseError("invalid-codepoint"); 2949 tokenizer._currentAttribute().nodeValue += "\uFFFD"; 2950 } else { 2951 tokenizer._currentAttribute().nodeValue += data + buffer.matchUntil("\u0000|['&]"); 2952 } 2953 return true; 2954 } 2955 2956 function attribute_value_unquoted_state(buffer) { 2957 var data = buffer.char(); 2958 if (data === InputStream.EOF) { 2959 tokenizer._parseError("eof-after-attribute-value");
2960 buffer.unget(data); 2961 tokenizer.setState(data_state); 2962 } else if (isWhitespace(data)) { 2963 tokenizer.setState(before_attribute_name_state); 2964 } else if (data === '&') { 2965 this._additionalAllowedCharacter = ">"; 2966 tokenizer.setState(character_reference_in_attribute_value_state); 2967 } else if (data === '>') { 2968 tokenizer._emitCurrentToken(); 2969 } else if (data === '"' || data === "'" || data === '=' || data === '`' || data === '<') { 2970 tokenizer._parseError("unexpected-character-in-unquoted-attribute-value"); 2971 tokenizer._currentAttribute().nodeValue += data; 2972 buffer.commit(); 2973 } else if (data === '\u0000') { 2974 tokenizer._parseError("invalid-codepoint"); 2975 tokenizer._currentAttribute().nodeValue += "\uFFFD"; 2976 } else { 2977 var o = buffer.matchUntil("\u0000|["+ "\t\n\v\f\x20\r" + "&<>\"'=`" +"]"); 2978 if (o === InputStream.EOF) { 2979 tokenizer._parseError("eof-in-attribute-value-no-quotes"); 2980 tokenizer._emitCurrentToken(); 2981 } 2982 buffer.commit(); 2983 tokenizer._currentAttribute().nodeValue += data + o; 2984 } 2985 return true; 2986 } 2987 2988 function character_reference_in_attribute_value_state(buffer) { 2989 var character = EntityParser.consumeEntity(buffer, tokenizer, this._additionalAllowedCharacter); 2990 this._currentAttribute().nodeValue += character || '&'; 2991 if (this._additionalAllowedCharacter === '"') 2992 tokenizer.setState(attribute_value_double_quoted_state); 2993 else if (this._additionalAllowedCharacter === '\'') 2994 tokenizer.setState(attribute_value_single_quoted_state); 2995 else if (this._additionalAllowedCharacter === '>') 2996 tokenizer.setState(attribute_value_unquoted_state); 2997 return true; 2998 } 2999 3000 function after_attribute_value_state(buffer) { 3001 var data = buffer.char(); 3002 if (data === InputStream.EOF) { 3003 tokenizer._parseError("eof-after-attribute-value"); 3004 buffer.unget(data); 3005 tokenizer.setState(data_state); 3006 } else if (isWhitespace(data)) { 3007 tokenizer.setState(before_attribute_name_state); 3008 } else if (data === '>') { 3009 tokenizer.setState(data_state); 3010 tokenizer._emitCurrentToken(); 3011 } else if (data === '/') { 3012 tokenizer.setState(self_closing_tag_state); 3013 } else { 3014 tokenizer._parseError("unexpected-character-after-attribute-value"); 3015 buffer.unget(data); 3016 tokenizer.setState(before_attribute_name_state); 3017 } 3018 return true; 3019 } 3020 3021 function self_closing_tag_state(buffer) { 3022 var c = buffer.char(); 3023 if (c === InputStream.EOF) { 3024 tokenizer._parseError("unexpected-eof-after-solidus-in-tag"); 3025 buffer.unget(c); 3026 tokenizer.setState(data_state); 3027 } else if (c === '>') { 3028 tokenizer._currentToken.selfClosing = true; 3029 tokenizer.setState(data_state); 3030 tokenizer._emitCurrentToken(); 3031 } else { 3032 tokenizer._parseError("unexpected-character-after-solidus-in-tag"); 3033 buffer.unget(c); 3034 tokenizer.setState(before_attribute_name_state); 3035 } 3036 return true; 3037 } 3038 3039 function bogus_comment_state(buffer) { 3040 var data = buffer.matchUntil('>'); 3041 data = data.replace(/\u0000/g, "\uFFFD"); 3042 buffer.char(); 3043 tokenizer._emitToken({type: 'Comment', data: data}); 3044 tokenizer.setState(data_state); 3045 return true; 3046 } 3047 3048 function markup_declaration_open_state(buffer) { 3049 var chars = buffer.shift(2); 3050 if (chars === '--') { 3051 tokenizer._currentToken = {type: 'Comment', data: ''}; 3052 tokenizer.setState(comment_start_state); 3053 } else { 3054 var newchars = buffer.shift(5); 3055 if (newchars === InputStream.EOF || chars === InputStream.EOF) { 3056 tokenizer._parseError("expected-dashes-or-doctype"); 3057 tokenizer.setState(bogus_comment_state); 3058 buffer.unget(chars); 3059 return true; 3060 } 3061 3062 chars += newchars; 3063 if (chars.toUpperCase() === 'DOCTYPE') { 3064 tokenizer._currentToken = {type: 'Doctype', name: '', publicId: null, systemId: null, forceQuirks: false}; 3065 tokenizer.setState(doctype_state); 3066 } else if (tokenizer._tokenHandler.isCdataSectionAllowed() && chars === '[CDATA[') { 3067 tokenizer.setState(cdata_section_state); 3068 } else { 3069 tokenizer._parseError("expected-dashes-or-doctype"); 3070 buffer.unget(chars); 3071 tokenizer.setState(bogus_comment_state); 3072 } 3073 } 3074 return true; 3075 } 3076 3077 function cdata_section_state(buffer) { 3078 var data = buffer.matchUntil(']]>'); 3079 buffer.shift(3); 3080 if (data) { 3081 tokenizer._emitToken({type: 'Characters', data: data}); 3082 } 3083 tokenizer.setState(data_state); 3084 return true; 3085 } 3086 3087 function comment_start_state(buffer) { 3088 var data = buffer.char(); 3089 if (data === InputStream.EOF) { 3090 tokenizer._parseError("eof-in-comment"); 3091 tokenizer._emitToken(tokenizer._currentToken);
3092 buffer.unget(data); 3093 tokenizer.setState(data_state); 3094 } else if (data === '-') { 3095 tokenizer.setState(comment_start_dash_state); 3096 } else if (data === '>') { 3097 tokenizer._parseError("incorrect-comment"); 3098 tokenizer._emitToken(tokenizer._currentToken); 3099 tokenizer.setState(data_state); 3100 } else if (data === '\u0000') { 3101 tokenizer._parseError("invalid-codepoint"); 3102 tokenizer._currentToken.data += "\uFFFD"; 3103 } else { 3104 tokenizer._currentToken.data += data; 3105 tokenizer.setState(comment_state); 3106 } 3107 return true; 3108 } 3109 3110 function comment_start_dash_state(buffer) { 3111 var data = buffer.char(); 3112 if (data === InputStream.EOF) { 3113 tokenizer._parseError("eof-in-comment"); 3114 tokenizer._emitToken(tokenizer._currentToken); 3115 buffer.unget(data); 3116 tokenizer.setState(data_state); 3117 } else if (data === '-') { 3118 tokenizer.setState(comment_end_state); 3119 } else if (data === '>') { 3120 tokenizer._parseError("incorrect-comment"); 3121 tokenizer._emitToken(tokenizer._currentToken); 3122 tokenizer.setState(data_state); 3123 } else if (data === '\u0000') { 3124 tokenizer._parseError("invalid-codepoint"); 3125 tokenizer._currentToken.data += "\uFFFD"; 3126 } else { 3127 tokenizer._currentToken.data += '-' + data; 3128 tokenizer.setState(comment_state); 3129 } 3130 return true; 3131 } 3132 3133 function comment_state(buffer) { 3134 var data = buffer.char(); 3135 if (data === InputStream.EOF) { 3136 tokenizer._parseError("eof-in-comment"); 3137 tokenizer._emitToken(tokenizer._currentToken); 3138 buffer.unget(data); 3139 tokenizer.setState(data_state); 3140 } else if (data === '-') { 3141 tokenizer.setState(comment_end_dash_state); 3142 } else if (data === '\u0000') { 3143 tokenizer._parseError("invalid-codepoint"); 3144 tokenizer._currentToken.data += "\uFFFD"; 3145 } else { 3146 tokenizer._currentToken.data += data; 3147 buffer.commit(); 3148 } 3149 return true; 3150 } 3151 3152 function comment_end_dash_state(buffer) { 3153 var data = buffer.char(); 3154 if (data === InputStream.EOF) { 3155 tokenizer._parseError("eof-in-comment-end-dash"); 3156 tokenizer._emitToken(tokenizer._currentToken); 3157 buffer.unget(data); 3158 tokenizer.setState(data_state); 3159 } else if (data === '-') { 3160 tokenizer.setState(comment_end_state); 3161 } else if (data === '\u0000') { 3162 tokenizer._parseError("invalid-codepoint"); 3163 tokenizer._currentToken.data += "-\uFFFD"; 3164 tokenizer.setState(comment_state); 3165 } else { 3166 tokenizer._currentToken.data += '-' + data + buffer.matchUntil('\u0000|-'); 3167 buffer.char(); 3168 } 3169 return true; 3170 } 3171 3172 function comment_end_state(buffer) { 3173 var data = buffer.char(); 3174 if (data === InputStream.EOF) { 3175 tokenizer._parseError("eof-in-comment-double-dash"); 3176 tokenizer._emitToken(tokenizer._currentToken); 3177 buffer.unget(data); 3178 tokenizer.setState(data_state); 3179 } else if (data === '>') { 3180 tokenizer._emitToken(tokenizer._currentToken); 3181 tokenizer.setState(data_state); 3182 } else if (data === '!') { 3183 tokenizer._parseError("unexpected-bang-after-double-dash-in-comment"); 3184 tokenizer.setState(comment_end_bang_state); 3185 } else if (data === '-') { 3186 tokenizer._parseError("unexpected-dash-after-double-dash-in-comment"); 3187 tokenizer._currentToken.data += data; 3188 } else if (data === '\u0000') { 3189 tokenizer._parseError("invalid-codepoint"); 3190 tokenizer._currentToken.data += "--\uFFFD"; 3191 tokenizer.setState(comment_state); 3192 } else { 3193 tokenizer._parseError("unexpected-char-in-comment"); 3194 tokenizer._currentToken.data += '--' + data; 3195 tokenizer.setState(comment_state); 3196 } 3197 return true; 3198 } 3199 3200 function comment_end_bang_state(buffer) { 3201 var data = buffer.char(); 3202 if (data === InputStream.EOF) { 3203 tokenizer._parseError("eof-in-comment-end-bang-state"); 3204 tokenizer._emitToken(tokenizer._currentToken); 3205 buffer.unget(data); 3206 tokenizer.setState(data_state); 3207 } else if (data === '>') { 3208 tokenizer._emitToken(tokenizer._currentToken); 3209 tokenizer.setState(data_state); 3210 } else if (data === '-') { 3211 tokenizer._currentToken.data += '--!'; 3212 tokenizer.setState(comment_end_dash_state); 3213 } else { 3214 tokenizer._currentToken.data += '--!' + data; 3215 tokenizer.setState(comment_state); 3216 } 3217 return true; 3218 } 3219 3220 function doctype_state(buffer) { 3221 var data = buffer.char(); 3222 if (data === InputStream.EOF) { 3223 tokenizer._parseError("expected-doctype-name-but-got-eof"); 3224 tokenizer._currentToken.forceQuirks = true;
3225 buffer.unget(data); 3226 tokenizer.setState(data_state); 3227 tokenizer._emitCurrentToken(); 3228 } else if (isWhitespace(data)) { 3229 tokenizer.setState(before_doctype_name_state); 3230 } else { 3231 tokenizer._parseError("need-space-after-doctype"); 3232 buffer.unget(data); 3233 tokenizer.setState(before_doctype_name_state); 3234 } 3235 return true; 3236 } 3237 3238 function before_doctype_name_state(buffer) { 3239 var data = buffer.char(); 3240 if (data === InputStream.EOF) { 3241 tokenizer._parseError("expected-doctype-name-but-got-eof"); 3242 tokenizer._currentToken.forceQuirks = true; 3243 buffer.unget(data); 3244 tokenizer.setState(data_state); 3245 tokenizer._emitCurrentToken(); 3246 } else if (isWhitespace(data)) { 3247 } else if (data === '>') { 3248 tokenizer._parseError("expected-doctype-name-but-got-right-bracket"); 3249 tokenizer._currentToken.forceQuirks = true; 3250 tokenizer.setState(data_state); 3251 tokenizer._emitCurrentToken(); 3252 } else { 3253 if (isAlpha(data)) 3254 data = data.toLowerCase(); 3255 tokenizer._currentToken.name = data; 3256 tokenizer.setState(doctype_name_state); 3257 } 3258 return true; 3259 } 3260 3261 function doctype_name_state(buffer) { 3262 var data = buffer.char(); 3263 if (data === InputStream.EOF) { 3264 tokenizer._currentToken.forceQuirks = true; 3265 buffer.unget(data); 3266 tokenizer._parseError("eof-in-doctype-name"); 3267 tokenizer.setState(data_state); 3268 tokenizer._emitCurrentToken(); 3269 } else if (isWhitespace(data)) { 3270 tokenizer.setState(after_doctype_name_state); 3271 } else if (data === '>') { 3272 tokenizer.setState(data_state); 3273 tokenizer._emitCurrentToken(); 3274 } else { 3275 if (isAlpha(data)) 3276 data = data.toLowerCase(); 3277 tokenizer._currentToken.name += data; 3278 buffer.commit(); 3279 } 3280 return true; 3281 } 3282 3283 function after_doctype_name_state(buffer) { 3284 var data = buffer.char(); 3285 if (data === InputStream.EOF) { 3286 tokenizer._currentToken.forceQuirks = true; 3287 buffer.unget(data); 3288 tokenizer._parseError("eof-in-doctype"); 3289 tokenizer.setState(data_state); 3290 tokenizer._emitCurrentToken(); 3291 } else if (isWhitespace(data)) { 3292 } else if (data === '>') { 3293 tokenizer.setState(data_state); 3294 tokenizer._emitCurrentToken(); 3295 } else { 3296 if (['p', 'P'].indexOf(data) > -1) { 3297 var expected = [['u', 'U'], ['b', 'B'], ['l', 'L'], ['i', 'I'], ['c', 'C']]; 3298 var matched = expected.every(function(expected){ 3299 data = buffer.char(); 3300 return expected.indexOf(data) > -1; 3301 }); 3302 if (matched) { 3303 tokenizer.setState(after_doctype_public_keyword_state); 3304 return true; 3305 } 3306 } else if (['s', 'S'].indexOf(data) > -1) { 3307 var expected = [['y', 'Y'], ['s', 'S'], ['t', 'T'], ['e', 'E'], ['m', 'M']]; 3308 var matched = expected.every(function(expected){ 3309 data = buffer.char(); 3310 return expected.indexOf(data) > -1; 3311 }); 3312 if (matched) { 3313 tokenizer.setState(after_doctype_system_keyword_state); 3314 return true; 3315 } 3316 } 3317 buffer.unget(data); 3318 tokenizer._currentToken.forceQuirks = true; 3319 3320 if (data === InputStream.EOF) { 3321 tokenizer._parseError("eof-in-doctype"); 3322 buffer.unget(data); 3323 tokenizer.setState(data_state); 3324 tokenizer._emitCurrentToken(); 3325 } else { 3326 tokenizer._parseError("expected-space-or-right-bracket-in-doctype", {data: data}); 3327 tokenizer.setState(bogus_doctype_state); 3328 } 3329 } 3330 return true; 3331 } 3332 3333 function after_doctype_public_keyword_state(buffer) { 3334 var data = buffer.char(); 3335 if (data === InputStream.EOF) { 3336 tokenizer._parseError("eof-in-doctype"); 3337 tokenizer._currentToken.forceQuirks = true; 3338 buffer.unget(data); 3339 tokenizer.setState(data_state); 3340 tokenizer._emitCurrentToken(); 3341 } else if (isWhitespace(data)) { 3342 tokenizer.setState(before_doctype_public_identifier_state); 3343 } else if (data === "'" || data === '"') { 3344 tokenizer._parseError("unexpected-char-in-doctype"); 3345 buffer.unget(data); 3346 tokenizer.setState(before_doctype_public_identifier_state); 3347 } else { 3348 buffer.unget(data); 3349 tokenizer.setState(before_doctype_public_identifier_state); 3350 } 3351 return true; 3352 } 3353 3354 function before_doctype_public_identifier_state(buffer) { 3355 var data = buffer.char(); 3356 if (data === InputStream.EOF) { 3357 tokenizer._parseError("eof-in-doctype"); 3358 tokenizer._currentToken.forceQuirks = true;
3359 buffer.unget(data); 3360 tokenizer.setState(data_state); 3361 tokenizer._emitCurrentToken(); 3362 } else if (isWhitespace(data)) { 3363 } else if (data === '"') { 3364 tokenizer._currentToken.publicId = ''; 3365 tokenizer.setState(doctype_public_identifier_double_quoted_state); 3366 } else if (data === "'") { 3367 tokenizer._currentToken.publicId = ''; 3368 tokenizer.setState(doctype_public_identifier_single_quoted_state); 3369 } else if (data === '>') { 3370 tokenizer._parseError("unexpected-end-of-doctype"); 3371 tokenizer._currentToken.forceQuirks = true; 3372 tokenizer.setState(data_state); 3373 tokenizer._emitCurrentToken(); 3374 } else { 3375 tokenizer._parseError("unexpected-char-in-doctype"); 3376 tokenizer._currentToken.forceQuirks = true; 3377 tokenizer.setState(bogus_doctype_state); 3378 } 3379 return true; 3380 } 3381 3382 function doctype_public_identifier_double_quoted_state(buffer) { 3383 var data = buffer.char(); 3384 if (data === InputStream.EOF) { 3385 tokenizer._parseError("eof-in-doctype"); 3386 tokenizer._currentToken.forceQuirks = true; 3387 buffer.unget(data); 3388 tokenizer.setState(data_state); 3389 tokenizer._emitCurrentToken(); 3390 } else if (data === '"') { 3391 tokenizer.setState(after_doctype_public_identifier_state); 3392 } else if (data === '>') { 3393 tokenizer._parseError("unexpected-end-of-doctype"); 3394 tokenizer._currentToken.forceQuirks = true; 3395 tokenizer.setState(data_state); 3396 tokenizer._emitCurrentToken(); 3397 } else { 3398 tokenizer._currentToken.publicId += data; 3399 } 3400 return true; 3401 } 3402 3403 function doctype_public_identifier_single_quoted_state(buffer) { 3404 var data = buffer.char(); 3405 if (data === InputStream.EOF) { 3406 tokenizer._parseError("eof-in-doctype"); 3407 tokenizer._currentToken.forceQuirks = true; 3408 buffer.unget(data); 3409 tokenizer.setState(data_state); 3410 tokenizer._emitCurrentToken(); 3411 } else if (data === "'") { 3412 tokenizer.setState(after_doctype_public_identifier_state); 3413 } else if (data === '>') { 3414 tokenizer._parseError("unexpected-end-of-doctype"); 3415 tokenizer._currentToken.forceQuirks = true; 3416 tokenizer.setState(data_state); 3417 tokenizer._emitCurrentToken(); 3418 } else { 3419 tokenizer._currentToken.publicId += data; 3420 } 3421 return true; 3422 } 3423 3424 function after_doctype_public_identifier_state(buffer) { 3425 var data = buffer.char(); 3426 if (data === InputStream.EOF) { 3427 tokenizer._parseError("eof-in-doctype"); 3428 tokenizer._currentToken.forceQuirks = true; 3429 tokenizer._emitCurrentToken(); 3430 buffer.unget(data); 3431 tokenizer.setState(data_state); 3432 } else if (isWhitespace(data)) { 3433 tokenizer.setState(between_doctype_public_and_system_identifiers_state); 3434 } else if (data === '>') { 3435 tokenizer.setState(data_state); 3436 tokenizer._emitCurrentToken(); 3437 } else if (data === '"') { 3438 tokenizer._parseError("unexpected-char-in-doctype"); 3439 tokenizer._currentToken.systemId = ''; 3440 tokenizer.setState(doctype_system_identifier_double_quoted_state); 3441 } else if (data === "'") { 3442 tokenizer._parseError("unexpected-char-in-doctype"); 3443 tokenizer._currentToken.systemId = ''; 3444 tokenizer.setState(doctype_system_identifier_single_quoted_state); 3445 } else { 3446 tokenizer._parseError("unexpected-char-in-doctype"); 3447 tokenizer._currentToken.forceQuirks = true; 3448 tokenizer.setState(bogus_doctype_state); 3449 } 3450 return true; 3451 } 3452 3453 function between_doctype_public_and_system_identifiers_state(buffer) { 3454 var data = buffer.char(); 3455 if (data === InputStream.EOF) { 3456 tokenizer._parseError("eof-in-doctype"); 3457 tokenizer._currentToken.forceQuirks = true; 3458 tokenizer._emitCurrentToken(); 3459 buffer.unget(data); 3460 tokenizer.setState(data_state); 3461 } else if (isWhitespace(data)) { 3462 } else if (data === '>') { 3463 tokenizer._emitCurrentToken(); 3464 tokenizer.setState(data_state); 3465 } else if (data === '"') { 3466 tokenizer._currentToken.systemId = ''; 3467 tokenizer.setState(doctype_system_identifier_double_quoted_state); 3468 } else if (data === "'") { 3469 tokenizer._currentToken.systemId = ''; 3470 tokenizer.setState(doctype_system_identifier_single_quoted_state); 3471 } else { 3472 tokenizer._parseError("unexpected-char-in-doctype"); 3473 tokenizer._currentToken.forceQuirks = true; 3474 tokenizer.setState(bogus_doctype_state); 3475 } 3476 return true; 3477 } 3478 3479 function after_doctype_system_keyword_state(buffer) { 3480 var data = buffer.char(); 3481 if (data === InputStream.EOF) { 3482 tokenizer._parseError("eof-in-doctype"); 3483 tokenizer._currentToken.forceQuirks = true; 3484 tokenizer._emitCurrentToken();
3485 buffer.unget(data); 3486 tokenizer.setState(data_state); 3487 } else if (isWhitespace(data)) { 3488 tokenizer.setState(before_doctype_system_identifier_state); 3489 } else if (data === "'" || data === '"') { 3490 tokenizer._parseError("unexpected-char-in-doctype"); 3491 buffer.unget(data); 3492 tokenizer.setState(before_doctype_system_identifier_state); 3493 } else { 3494 buffer.unget(data); 3495 tokenizer.setState(before_doctype_system_identifier_state); 3496 } 3497 return true; 3498 } 3499 3500 function before_doctype_system_identifier_state(buffer) { 3501 var data = buffer.char(); 3502 if (data === InputStream.EOF) { 3503 tokenizer._parseError("eof-in-doctype"); 3504 tokenizer._currentToken.forceQuirks = true; 3505 tokenizer._emitCurrentToken(); 3506 buffer.unget(data); 3507 tokenizer.setState(data_state); 3508 } else if (isWhitespace(data)) { 3509 } else if (data === '"') { 3510 tokenizer._currentToken.systemId = ''; 3511 tokenizer.setState(doctype_system_identifier_double_quoted_state); 3512 } else if (data === "'") { 3513 tokenizer._currentToken.systemId = ''; 3514 tokenizer.setState(doctype_system_identifier_single_quoted_state); 3515 } else if (data === '>') { 3516 tokenizer._parseError("unexpected-end-of-doctype"); 3517 tokenizer._currentToken.forceQuirks = true; 3518 tokenizer._emitCurrentToken(); 3519 tokenizer.setState(data_state); 3520 } else { 3521 tokenizer._parseError("unexpected-char-in-doctype"); 3522 tokenizer._currentToken.forceQuirks = true; 3523 tokenizer.setState(bogus_doctype_state); 3524 } 3525 return true; 3526 } 3527 3528 function doctype_system_identifier_double_quoted_state(buffer) { 3529 var data = buffer.char(); 3530 if (data === InputStream.EOF) { 3531 tokenizer._parseError("eof-in-doctype"); 3532 tokenizer._currentToken.forceQuirks = true; 3533 tokenizer._emitCurrentToken(); 3534 buffer.unget(data); 3535 tokenizer.setState(data_state); 3536 } else if (data === '"') { 3537 tokenizer.setState(after_doctype_system_identifier_state); 3538 } else if (data === '>') { 3539 tokenizer._parseError("unexpected-end-of-doctype"); 3540 tokenizer._currentToken.forceQuirks = true; 3541 tokenizer._emitCurrentToken(); 3542 tokenizer.setState(data_state); 3543 } else { 3544 tokenizer._currentToken.systemId += data; 3545 } 3546 return true; 3547 } 3548 3549 function doctype_system_identifier_single_quoted_state(buffer) { 3550 var data = buffer.char(); 3551 if (data === InputStream.EOF) { 3552 tokenizer._parseError("eof-in-doctype"); 3553 tokenizer._currentToken.forceQuirks = true; 3554 tokenizer._emitCurrentToken(); 3555 buffer.unget(data); 3556 tokenizer.setState(data_state); 3557 } else if (data === "'") { 3558 tokenizer.setState(after_doctype_system_identifier_state); 3559 } else if (data === '>') { 3560 tokenizer._parseError("unexpected-end-of-doctype"); 3561 tokenizer._currentToken.forceQuirks = true; 3562 tokenizer._emitCurrentToken(); 3563 tokenizer.setState(data_state); 3564 } else { 3565 tokenizer._currentToken.systemId += data; 3566 } 3567 return true; 3568 } 3569 3570 function after_doctype_system_identifier_state(buffer) { 3571 var data = buffer.char(); 3572 if (data === InputStream.EOF) { 3573 tokenizer._parseError("eof-in-doctype"); 3574 tokenizer._currentToken.forceQuirks = true; 3575 tokenizer._emitCurrentToken(); 3576 buffer.unget(data); 3577 tokenizer.setState(data_state); 3578 } else if (isWhitespace(data)) { 3579 } else if (data === '>') { 3580 tokenizer._emitCurrentToken(); 3581 tokenizer.setState(data_state); 3582 } else { 3583 tokenizer._parseError("unexpected-char-in-doctype"); 3584 tokenizer.setState(bogus_doctype_state); 3585 } 3586 return true; 3587 } 3588 3589 function bogus_doctype_state(buffer) { 3590 var data = buffer.char(); 3591 if (data === InputStream.EOF) { 3592 buffer.unget(data); 3593 tokenizer._emitCurrentToken(); 3594 tokenizer.setState(data_state); 3595 } else if (data === '>') { 3596 tokenizer._emitCurrentToken(); 3597 tokenizer.setState(data_state); 3598 } 3599 return true; 3600 } 3601}; 3602 3603Object.defineProperty(Tokenizer.prototype, 'lineNumber', { 3604 get: function() { 3605 return this._inputStream.location().line; 3606 } 3607}); 3608 3609Object.defineProperty(Tokenizer.prototype, 'columnNumber', { 3610 get: function() { 3611 return this._inputStream.location().column; 3612 } 3613}); 3614 3615exports.Tokenizer = Tokenizer; 3616 3617}, 3618{"./EntityParser":2,"./InputStream":3}], 36196:[function(_dereq_,module,exports){ 3620var assert = _dereq_('assert'); 3621 3622var messages = _dereq_('./messages.json'); 3623var constants = _dereq_('./constants'); 3624 3625var EventEmitter = _dereq_('events').EventEmitter; 3626 3627var Tokenizer = _dereq_('./Tokenizer').Tokenizer; 3628var ElementStack = _dereq_('./ElementStack').ElementStack; 3629var StackItem = _dereq_('./StackItem').StackItem; 3630 3631var Marker = {}; 3632 3633function isWhitespace(ch) { 3634 return ch === " " || ch === "\n" || ch === "\t" || ch === "\r" || ch === "\f"; 3635} 3636 3637function isWhitespaceOrReplacementCharacter(ch) { 3638 return isWhitespace(ch) || ch === '\uFFFD'; 3639} 3640 3641function isAllWhitespace(characters) { 3642 for (var i = 0; i < characters.length; i++) { 3643 var ch = characters[i]; 3644 if (!isWhitespace(ch)) 3645 return false;
3646 } 3647 return true; 3648} 3649 3650function isAllWhitespaceOrReplacementCharacters(characters) { 3651 for (var i = 0; i < characters.length; i++) { 3652 var ch = characters[i]; 3653 if (!isWhitespaceOrReplacementCharacter(ch)) 3654 return false; 3655 } 3656 return true; 3657} 3658 3659function getAttribute(node, name) { 3660 for (var i = 0; i < node.attributes.length; i++) { 3661 var attribute = node.attributes[i]; 3662 if (attribute.nodeName === name) { 3663 return attribute; 3664 } 3665 } 3666 return null; 3667} 3668 3669function CharacterBuffer(characters) { 3670 this.characters = characters; 3671 this.current = 0; 3672 this.end = this.characters.length; 3673} 3674 3675CharacterBuffer.prototype.skipAtMostOneLeadingNewline = function() { 3676 if (this.characters[this.current] === '\n') 3677 this.current++; 3678}; 3679 3680CharacterBuffer.prototype.skipLeadingWhitespace = function() { 3681 while (isWhitespace(this.characters[this.current])) { 3682 if (++this.current == this.end) 3683 return; 3684 } 3685}; 3686 3687CharacterBuffer.prototype.skipLeadingNonWhitespace = function() { 3688 while (!isWhitespace(this.characters[this.current])) { 3689 if (++this.current == this.end) 3690 return; 3691 } 3692}; 3693 3694CharacterBuffer.prototype.takeRemaining = function() { 3695 return this.characters.substring(this.current); 3696}; 3697 3698CharacterBuffer.prototype.takeLeadingWhitespace = function() { 3699 var start = this.current; 3700 this.skipLeadingWhitespace(); 3701 if (start === this.current) 3702 return ""; 3703 return this.characters.substring(start, this.current - start); 3704}; 3705 3706Object.defineProperty(CharacterBuffer.prototype, 'length', { 3707 get: function(){ 3708 return this.end - this.current; 3709 } 3710}); 3711function TreeBuilder() { 3712 this.tokenizer = null; 3713 this.errorHandler = null; 3714 this.scriptingEnabled = false; 3715 this.document = null; 3716 this.head = null; 3717 this.form = null; 3718 this.openElements = new ElementStack(); 3719 this.activeFormattingElements = []; 3720 this.insertionMode = null; 3721 this.insertionModeName = ""; 3722 this.originalInsertionMode = ""; 3723 this.inQuirksMode = false; // TODO quirks mode 3724 this.compatMode = "no quirks"; 3725 this.framesetOk = true; 3726 this.redirectAttachToFosterParent = false; 3727 this.selfClosingFlagAcknowledged = false; 3728 this.context = ""; 3729 this.pendingTableCharacters = []; 3730 this.shouldSkipLeadingNewline = false; 3731 3732 var tree = this; 3733 var modes = this.insertionModes = {}; 3734 modes.base = { 3735 end_tag_handlers: {"-default": 'endTagOther'}, 3736 start_tag_handlers: {"-default": 'startTagOther'}, 3737 processEOF: function() { 3738 tree.generateImpliedEndTags(); 3739 if (tree.openElements.length > 2) { 3740 tree.parseError('expected-closing-tag-but-got-eof'); 3741 } else if (tree.openElements.length == 2 && 3742 tree.openElements.item(1).localName != 'body') { 3743 tree.parseError('expected-closing-tag-but-got-eof'); 3744 } else if (tree.context && tree.openElements.length > 1) { 3745 } 3746 }, 3747 processComment: function(data) { 3748 tree.insertComment(data, tree.currentStackItem().node); 3749 }, 3750 processDoctype: function(name, publicId, systemId, forceQuirks) { 3751 tree.parseError('unexpected-doctype'); 3752 }, 3753 processStartTag: function(name, attributes, selfClosing) { 3754 if (this[this.start_tag_handlers[name]]) { 3755 this[this.start_tag_handlers[name]](name, attributes, selfClosing); 3756 } else if (this[this.start_tag_handlers["-default"]]) { 3757 this[this.start_tag_handlers["-default"]](name, attributes, selfClosing); 3758 } else { 3759 throw(new Error("No handler found for "+name)); 3760 } 3761 }, 3762 processEndTag: function(name) { 3763 if (this[this.end_tag_handlers[name]]) { 3764 this[this.end_tag_handlers[name]](name); 3765 } else if (this[this.end_tag_handlers["-default"]]) { 3766 this[this.end_tag_handlers["-default"]](name); 3767 } else { 3768 throw(new Error("No handler found for "+name)); 3769 } 3770 }, 3771 startTagHtml: function(name, attributes) { 3772 modes.inBody.startTagHtml(name, attributes); 3773 } 3774 }; 3775 3776 modes.initial = Object.create(modes.base); 3777 3778 modes.initial.processEOF = function() { 3779 tree.parseError("expected-doctype-but-got-eof"); 3780 this.anythingElse(); 3781 tree.insertionMode.processEOF(); 3782 }; 3783 3784 modes.initial.processComment = function(data) { 3785 tree.insertComment(data, tree.document); 3786 }; 3787 3788 modes.initial.processDoctype = function(name, publicId, systemId, forceQuirks) { 3789 tree.insertDoctype(name || '', publicId || '', systemId || ''); 3790 3791 if (forceQuirks || name != 'html' || (publicId != null && ([ 3792 "+//silmaril//dtd html pro v0r11 19970101//", 3793 "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", 3794 "-//as//dtd html 3.0 aswedit + extensions//", 3795 "-//ietf//dtd html 2.0 level 1//", 3796 "-//ietf//dtd html 2.0 level 2//", 3797 "-//ietf//dtd html 2.0 strict level 1//", 3798 "-//ietf//dtd html 2.0 strict level 2//", 3799 "-//ietf//dtd html 2.0 strict//", 3800 "-//ietf//dtd html 2.0//", 3801 "-//ietf//dtd html 2.1e//", 3802 "-//ietf//dtd html 3.0//", 3803 "-//ietf//dtd html 3.0//", 3804 "-//ietf//dtd html 3.2 final//", 3805 "-//ietf//dtd html 3.2//", 3806 "-//ietf//dtd html 3//", 3807 "-//ietf//dtd html level 0//", 3808 "-//ietf//dtd html level 0//", 3809 "-//ietf//dtd html level 1//", 3810 "-//ietf//dtd html level 1//", 3811 "-//ietf//dtd html level 2//", 3812 "-//ietf//dtd html level 2//", 3813 "-//ietf//dtd html level 3//", 3814 "-//ietf//dtd html level 3//", 3815 "-//ietf//dtd html strict level 0//", 3816 "-//ietf//dtd html strict level 0//", 3817 "-//ietf//dtd html strict level 1//", 3818 "-//ietf//dtd html strict level 1//", 3819 "-//ietf//dtd html strict level 2//", 3820 "-//ietf//dtd html strict level 2//", 3821 "-//ietf//dtd html strict level 3//", 3822 "-//ietf//dtd html strict level 3//", 3823 "-//ietf//dtd html strict//", 3824 "-//ietf//dtd html strict//", 3825 "-//ietf//dtd html strict//", 3826 "-//ietf//dtd html//", 3827 "-//ietf//dtd html//", 3828 "-//ietf//dtd html//", 3829 "-//metrius//dtd metrius presentational//", 3830 "-//microsoft//dtd internet explorer 2.0 html strict//", 3831 "-//microsoft//dtd internet explorer 2.0 html//", 3832 "-//microsoft//dtd internet explorer 2.0 tables//", 3833 "-//microsoft//dtd internet explorer 3.0 html strict//", 3834 "-//microsoft//dtd internet explorer 3.0 html//", 3835 "-//microsoft//dtd internet explorer 3.0 tables//", 3836 "-//netscape comm. corp.//dtd html//", 3837 "-//netscape comm. corp.//dtd strict html//", 3838 "-//o'reilly and associates//dtd html 2.0//", 3839 "-//o'reilly and associates//dtd html extended 1.0//", 3840 "-//spyglass//dtd html 2.0 extended//", 3841 "-//sq//dtd html 2.0 hotmetal + extensions//", 3842 "-//sun microsystems corp.//dtd hotjava html//", 3843 "-//sun microsystems corp.//dtd hotjava strict html//", 3844 "-//w3c//dtd html 3 1995-03-24//", 3845 "-//w3c//dtd html 3.2 draft//", 3846 "-//w3c//dtd html 3.2 final//", 3847 "-//w3c//dtd html 3.2//", 3848 "-//w3c//dtd html 3.2s draft//", 3849 "-//w3c//dtd html 4.0 frameset//", 3850 "-//w3c//dtd html 4.0 transitional//", 3851 "-//w3c//dtd html experimental 19960712//", 3852 "-//w3c//dtd html experimental 970421//", 3853 "-//w3c//dtd w3 html//", 3854 "-//w3o//dtd w3 html 3.0//", 3855 "-//webtechs//dtd mozilla html 2.0//", 3856 "-//webtechs//dtd mozilla html//", 3857 "html" 3858 ].some(publicIdStartsWith) 3859 || [ 3860 "-//w3o//dtd w3 html strict 3.0//en//", 3861 "-/w3c/dtd html 4.0 transitional/en", 3862 "html" 3863 ].indexOf(publicId.toLowerCase()) > -1 3864 || (systemId == null && [ 3865 "-//w3c//dtd html 4.01 transitional//", 3866 "-//w3c//dtd html 4.01 frameset//" 3867 ].some(publicIdStartsWith))) 3868 ) 3869 || (systemId != null && (systemId.toLowerCase() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd")) 3870 ) { 3871 tree.compatMode = "quirks"; 3872 tree.parseError("quirky-doctype"); 3873 } else if (publicId != null && ([ 3874 "-//w3c//dtd xhtml 1.0 transitional//", 3875 "-//w3c//dtd xhtml 1.0 frameset//" 3876 ].some(publicIdStartsWith) 3877 || (systemId != null && [ 3878 "-//w3c//dtd html 4.01 transitional//", 3879 "-//w3c//dtd html 4.01 frameset//" 3880 ].indexOf(publicId.toLowerCase()) > -1)) 3881 ) { 3882 tree.compatMode = "limited quirks"; 3883 tree.parseError("almost-standards-doctype"); 3884 } else { 3885 if ((publicId == "-//W3C//DTD HTML 4.0//EN" && (systemId == null || systemId == "http://www.w3.org/TR/REC-html40/strict.dtd")) 3886 || (publicId == "-//W3C//DTD HTML 4.01//EN" && (systemId == null || systemId == "http://www.w3.org/TR/html4/strict.dtd")) 3887 || (publicId == "-//W3C//DTD XHTML 1.0 Strict//EN" && (systemId == "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")) 3888 || (publicId == "-//W3C//DTD XHTML 1.1//EN" && (systemId == "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd")) 3889 ) { 3890 } else if (!((systemId == null || systemId == "about:legacy-compat") && publicId == null)) { 3891 tree.parseError("unknown-doctype"); 3892 } 3893 } 3894 tree.setInsertionMode('beforeHTML'); 3895 function publicIdStartsWith(string) { 3896 return publicId.toLowerCase().indexOf(string) === 0; 3897 } 3898 }; 3899 3900 modes.initial.processCharacters = function(buffer) { 3901 buffer.skipLeadingWhitespace(); 3902 if (!buffer.length) 3903 return; 3904 tree.parseError('expected-doctype-but-got-chars'); 3905 this.anythingElse(); 3906 tree.insertionMode.processCharacters(buffer); 3907 }; 3908 3909 modes.initial.processStartTag = function(name, attributes, selfClosing) { 3910 tree.parseError('expected-doctype-but-got-start-tag', {name: name}); 3911 this.anythingElse(); 3912 tree.insertionMode.processStartTag(name, attributes, selfClosing); 3913 }; 3914 3915 modes.initial.processEndTag = function(name) { 3916 tree.parseError('expected-doctype-but-got-end-tag', {name: name}); 3917 this.anythingElse(); 3918 tree.insertionMode.processEndTag(name); 3919 }; 3920 3921 modes.initial.anythingElse = function() { 3922 tree.compatMode = 'quirks'; 3923 tree.setInsertionMode('beforeHTML'); 3924 }; 3925 3926 modes.beforeHTML = Object.create(modes.base); 3927 3928 modes.beforeHTML.start_tag_handlers = { 3929 html: 'startTagHtml', 3930 '-default': 'startTagOther' 3931 }; 3932 3933 modes.beforeHTML.processEOF = function() { 3934 this.anythingElse(); 3935 tree.insertionMode.processEOF(); 3936 }; 3937 3938 modes.beforeHTML.processComment = function(data) { 3939 tree.insertComment(data, tree.document); 3940 }; 3941 3942 modes.beforeHTML.processCharacters = function(buffer) { 3943 buffer.skipLeadingWhitespace(); 3944 if (!buffer.length) 3945 return; 3946 this.anythingElse(); 3947 tree.insertionMode.processCharacters(buffer); 3948 }; 3949 3950 modes.beforeHTML.startTagHtml = function(name, attributes, selfClosing) { 3951 tree.insertHtmlElement(attributes); 3952 tree.setInsertionMode('beforeHead'); 3953 }; 3954 3955 modes.beforeHTML.startTagOther = function(name, attributes, selfClosing) { 3956 this.anythingElse(); 3957 tree.insertionMode.processStartTag(name, attributes, selfClosing); 3958 }; 3959 3960 modes.beforeHTML.processEndTag = function(name) { 3961 this.anythingElse(); 3962 tree.insertionMode.processEndTag(name); 3963 }; 3964 3965 modes.beforeHTML.anythingElse = function() { 3966 tree.insertHtmlElement(); 3967 tree.setInsertionMode('beforeHead'); 3968 }; 3969 3970 modes.afterAfterBody = Object.create(modes.base); 3971 3972 modes.afterAfterBody.start_tag_handlers = { 3973 html: 'startTagHtml', 3974 '-default': 'startTagOther' 3975 }; 3976 3977 modes.afterAfterBody.processComment = function(data) { 3978 tree.insertComment(data, tree.document); 3979 }; 3980 3981 modes.afterAfterBody.processDoctype = function(data) { 3982 modes.inBody.processDoctype(data); 3983 }; 3984 3985 modes.afterAfterBody.startTagHtml = function(data, attributes) { 3986 modes.inBody.startTagHtml(data, attributes); 3987 }; 3988 3989 modes.afterAfterBody.startTagOther = function(name, attributes, selfClosing) { 3990 tree.parseError('unexpected-start-tag', {name: name}); 3991 tree.setInsertionMode('inBody'); 3992 tree.insertionMode.processStartTag(name, attributes, selfClosing); 3993 }; 3994 3995 modes.afterAfterBody.endTagOther = function(name) { 3996 tree.parseError('unexpected-end-tag', {name: name}); 3997 tree.setInsertionMode('inBody'); 3998 tree.insertionMode.processEndTag(name); 3999 }; 4000 4001 modes.afterAfterBody.processCharacters = function(data) { 4002 if (!isAllWhitespace(data.characters)) { 4003 tree.parseError('unexpected-char-after-body'); 4004 tree.setInsertionMode('inBody'); 4005 return tree.insertionMode.processCharacters(data); 4006 } 4007 modes.inBody.processCharacters(data); 4008 }; 4009 4010 modes.afterBody = Object.create(modes.base); 4011 4012 modes.afterBody.end_tag_handlers = { 4013 html: 'endTagHtml', 4014 '-default': 'endTagOther' 4015 }; 4016 4017 modes.afterBody.processComment = function(data) { 4018 tree.insertComment(data, tree.openElements.rootNode); 4019 }; 4020 4021 modes.afterBody.processCharacters = function(data) { 4022 if (!isAllWhitespace(data.characters)) { 4023 tree.parseError('unexpected-char-after-body'); 4024 tree.setInsertionMode('inBody'); 4025 return tree.insertionMode.processCharacters(data); 4026 } 4027 modes.inBody.processCharacters(data); 4028 }; 4029 4030 modes.afterBody.processStartTag = function(name, attributes, selfClosing) { 4031 tree.parseError('unexpected-start-tag-after-body', {name: name}); 4032 tree.setInsertionMode('inBody'); 4033 tree.insertionMode.processStartTag(name, attributes, selfClosing); 4034 }; 4035 4036 modes.afterBody.endTagHtml = function(name) { 4037 if (tree.context) { 4038 tree.parseError('end-html-in-innerhtml'); 4039 } else { 4040 tree.setInsertionMode('afterAfterBody'); 4041 } 4042 }; 4043 4044 modes.afterBody.endTagOther = function(name) { 4045 tree.parseError('unexpected-end-tag-after-body', {name: name}); 4046 tree.setInsertionMode('inBody'); 4047 tree.insertionMode.processEndTag(name); 4048 }; 4049 4050 modes.afterFrameset = Object.create(modes.base); 4051 4052 modes.afterFrameset.start_tag_handlers = { 4053 html: 'startTagHtml', 4054 noframes: 'startTagNoframes', 4055 '-default': 'startTagOther' 4056 }; 4057 4058 modes.afterFrameset.end_tag_handlers = { 4059 html: 'endTagHtml', 4060 '-default': 'endTagOther' 4061 }; 4062 4063 modes.afterFrameset.processCharacters = function(buffer) { 4064 var characters = buffer.takeRemaining(); 4065 var whitespace = ""; 4066 for (var i = 0; i < characters.length; i++) { 4067 var ch = characters[i]; 4068 if (isWhitespace(ch)) 4069 whitespace += ch; 4070 } 4071 if (whitespace) { 4072 tree.insertText(whitespace); 4073 } 4074 if (whitespace.length < characters.length) 4075 tree.parseError('expected-eof-but-got-char'); 4076 }; 4077 4078 modes.afterFrameset.startTagNoframes = function(name, attributes) { 4079 modes.inHead.processStartTag(name, attributes); 4080 }; 4081 4082 modes.afterFrameset.startTagOther = function(name, attributes) { 4083 tree.parseError("unexpected-start-tag-after-frameset", {name: name}); 4084 }; 4085 4086 modes.afterFrameset.endTagHtml = function(name) { 4087 tree.setInsertionMode('afterAfterFrameset'); 4088 }; 4089 4090 modes.afterFrameset.endTagOther = function(name) { 4091 tree.parseError("unexpected-end-tag-after-frameset", {name: name}); 4092 }; 4093 4094 modes.beforeHead = Object.create(modes.base); 4095 4096 modes.beforeHead.start_tag_handlers = { 4097 html: 'startTagHtml', 4098 head: 'startTagHead', 4099 '-default': 'startTagOther' 4100 }; 4101 4102 modes.beforeHead.end_tag_handlers = { 4103 html: 'endTagImplyHead', 4104 head: 'endTagImplyHead', 4105 body: 'endTagImplyHead', 4106 br: 'endTagImplyHead', 4107 '-default': 'endTagOther' 4108 }; 4109 4110 modes.beforeHead.processEOF = function() { 4111 this.startTagHead('head', []); 4112 tree.insertionMode.processEOF(); 4113 }; 4114 4115 modes.beforeHead.processCharacters = function(buffer) { 4116 buffer.skipLeadingWhitespace(); 4117 if (!buffer.length) 4118 return; 4119 this.startTagHead('head', []); 4120 tree.insertionMode.processCharacters(buffer); 4121 }; 4122 4123 modes.beforeHead.startTagHead = function(name, attributes) { 4124 tree.insertHeadElement(attributes); 4125 tree.setInsertionMode('inHead'); 4126 }; 4127 4128 modes.beforeHead.startTagOther = function(name, attributes, selfClosing) { 4129 this.startTagHead('head', []); 4130 tree.insertionMode.processStartTag(name, attributes, selfClosing); 4131 }; 4132 4133 modes.beforeHead.endTagImplyHead = function(name) { 4134 this.startTagHead('head', []); 4135 tree.insertionMode.processEndTag(name); 4136 }; 4137 4138 modes.beforeHead.endTagOther = function(name) { 4139 tree.parseError('end-tag-after-implied-root', {name: name}); 4140 }; 4141 4142 modes.inHead = Object.create(modes.base); 4143 4144 modes.inHead.start_tag_handlers = { 4145 html: 'startTagHtml', 4146 head: 'startTagHead', 4147 title: 'startTagTitle', 4148 script: 'startTagScript', 4149 style: 'startTagNoFramesStyle', 4150 noscript: 'startTagNoScript', 4151 noframes: 'startTagNoFramesStyle', 4152 base: 'startTagBaseBasefontBgsoundLink', 4153 basefont: 'startTagBaseBasefontBgsoundLink', 4154 bgsound: 'startTagBaseBasefontBgsoundLink', 4155 link: 'startTagBaseBasefontBgsoundLink', 4156 meta: 'startTagMeta', 4157 "-default": 'startTagOther' 4158 }; 4159 4160 modes.inHead.end_tag_handlers = { 4161 head: 'endTagHead', 4162 html: 'endTagHtmlBodyBr', 4163 body: 'endTagHtmlBodyBr', 4164 br: 'endTagHtmlBodyBr',
4165 "-default": 'endTagOther' 4166 }; 4167 4168 modes.inHead.processEOF = function() { 4169 var name = tree.currentStackItem().localName; 4170 if (['title', 'style', 'script'].indexOf(name) != -1) { 4171 tree.parseError("expected-named-closing-tag-but-got-eof", {name: name}); 4172 tree.popElement(); 4173 } 4174 4175 this.anythingElse(); 4176 4177 tree.insertionMode.processEOF(); 4178 }; 4179 4180 modes.inHead.processCharacters = function(buffer) { 4181 var leadingWhitespace = buffer.takeLeadingWhitespace(); 4182 if (leadingWhitespace) 4183 tree.insertText(leadingWhitespace); 4184 if (!buffer.length) 4185 return; 4186 this.anythingElse(); 4187 tree.insertionMode.processCharacters(buffer); 4188 }; 4189 4190 modes.inHead.startTagHtml = function(name, attributes) { 4191 modes.inBody.processStartTag(name, attributes); 4192 }; 4193 4194 modes.inHead.startTagHead = function(name, attributes) { 4195 tree.parseError('two-heads-are-not-better-than-one'); 4196 }; 4197 4198 modes.inHead.startTagTitle = function(name, attributes) { 4199 tree.processGenericRCDATAStartTag(name, attributes); 4200 }; 4201 4202 modes.inHead.startTagNoScript = function(name, attributes) { 4203 if (tree.scriptingEnabled) 4204 return tree.processGenericRawTextStartTag(name, attributes); 4205 tree.insertElement(name, attributes); 4206 tree.setInsertionMode('inHeadNoscript'); 4207 }; 4208 4209 modes.inHead.startTagNoFramesStyle = function(name, attributes) { 4210 tree.processGenericRawTextStartTag(name, attributes); 4211 }; 4212 4213 modes.inHead.startTagScript = function(name, attributes) { 4214 tree.insertElement(name, attributes); 4215 tree.tokenizer.setState(Tokenizer.SCRIPT_DATA); 4216 tree.originalInsertionMode = tree.insertionModeName; 4217 tree.setInsertionMode('text'); 4218 }; 4219 4220 modes.inHead.startTagBaseBasefontBgsoundLink = function(name, attributes) { 4221 tree.insertSelfClosingElement(name, attributes); 4222 }; 4223 4224 modes.inHead.startTagMeta = function(name, attributes) { 4225 tree.insertSelfClosingElement(name, attributes); 4226 }; 4227 4228 modes.inHead.startTagOther = function(name, attributes, selfClosing) { 4229 this.anythingElse(); 4230 tree.insertionMode.processStartTag(name, attributes, selfClosing); 4231 }; 4232 4233 modes.inHead.endTagHead = function(name) { 4234 if (tree.openElements.item(tree.openElements.length - 1).localName == 'head') { 4235 tree.openElements.pop(); 4236 } else { 4237 tree.parseError('unexpected-end-tag', {name: 'head'}); 4238 } 4239 tree.setInsertionMode('afterHead'); 4240 }; 4241 4242 modes.inHead.endTagHtmlBodyBr = function(name) { 4243 this.anythingElse(); 4244 tree.insertionMode.processEndTag(name); 4245 }; 4246 4247 modes.inHead.endTagOther = function(name) { 4248 tree.parseError('unexpected-end-tag', {name: name}); 4249 }; 4250 4251 modes.inHead.anythingElse = function() { 4252 this.endTagHead('head'); 4253 }; 4254 4255 modes.afterHead = Object.create(modes.base); 4256 4257 modes.afterHead.start_tag_handlers = { 4258 html: 'startTagHtml', 4259 head: 'startTagHead', 4260 body: 'startTagBody', 4261 frameset: 'startTagFrameset', 4262 base: 'startTagFromHead', 4263 link: 'startTagFromHead', 4264 meta: 'startTagFromHead', 4265 script: 'startTagFromHead', 4266 style: 'startTagFromHead', 4267 title: 'startTagFromHead', 4268 "-default": 'startTagOther' 4269 }; 4270 4271 modes.afterHead.end_tag_handlers = { 4272 body: 'endTagBodyHtmlBr', 4273 html: 'endTagBodyHtmlBr', 4274 br: 'endTagBodyHtmlBr', 4275 "-default": 'endTagOther' 4276 }; 4277 4278 modes.afterHead.processEOF = function() { 4279 this.anythingElse(); 4280 tree.insertionMode.processEOF(); 4281 }; 4282 4283 modes.afterHead.processCharacters = function(buffer) { 4284 var leadingWhitespace = buffer.takeLeadingWhitespace(); 4285 if (leadingWhitespace) 4286 tree.insertText(leadingWhitespace); 4287 if (!buffer.length) 4288 return; 4289 this.anythingElse(); 4290 tree.insertionMode.processCharacters(buffer); 4291 }; 4292 4293 modes.afterHead.startTagHtml = function(name, attributes) { 4294 modes.inBody.processStartTag(name, attributes); 4295 }; 4296 4297 modes.afterHead.startTagBody = function(name, attributes) { 4298 tree.framesetOk = false; 4299 tree.insertBodyElement(attributes); 4300 tree.setInsertionMode('inBody'); 4301 }; 4302 4303 modes.afterHead.startTagFrameset = function(name, attributes) { 4304 tree.insertElement(name, attributes); 4305 tree.setInsertionMode('inFrameset'); 4306 }; 4307 4308 modes.afterHead.startTagFromHead = function(name, attributes, selfClosing) { 4309 tree.parseError("unexpected-start-tag-out-of-my-head", {name: name}); 4310 tree.openElements.push(tree.head); 4311 modes.inHead.processStartTag(name, attributes, selfClosing); 4312 tree.openElements.remove(tree.head); 4313 }; 4314 4315 modes.afterHead.startTagHead = function(name, attributes, selfClosing) { 4316 tree.parseError('unexpected-start-tag', {name: name}); 4317 }; 4318 4319 modes.afterHead.startTagOther = function(name, attributes, selfClosing) { 4320 this.anythingElse(); 4321 tree.insertionMode.processStartTag(name, attributes, selfClosing); 4322 }; 4323 4324 modes.afterHead.endTagBodyHtmlBr = function(name) { 4325 this.anythingElse(); 4326 tree.insertionMode.processEndTag(name); 4327 }; 4328 4329 modes.afterHead.endTagOther = function(name) { 4330 tree.parseError('unexpected-end-tag', {name: name}); 4331 }; 4332 4333 modes.afterHead.anythingElse = function() { 4334 tree.insertBodyElement([]); 4335 tree.setInsertionMode('inBody'); 4336 tree.framesetOk = true; 4337 } 4338 4339 modes.inBody = Object.create(modes.base); 4340 4341 modes.inBody.start_tag_handlers = { 4342 html: 'startTagHtml', 4343 head: 'startTagMisplaced', 4344 base: 'startTagProcessInHead', 4345 basefont: 'startTagProcessInHead', 4346 bgsound: 'startTagProcessInHead', 4347 link: 'startTagProcessInHead', 4348 meta: 'startTagProcessInHead', 4349 noframes: 'startTagProcessInHead', 4350 script: 'startTagProcessInHead', 4351 style: 'startTagProcessInHead', 4352 title: 'startTagProcessInHead', 4353 body: 'startTagBody', 4354 form: 'startTagForm', 4355 plaintext: 'startTagPlaintext', 4356 a: 'startTagA', 4357 button: 'startTagButton', 4358 xmp: 'startTagXmp', 4359 table: 'startTagTable', 4360 hr: 'startTagHr', 4361 image: 'startTagImage', 4362 input: 'startTagInput', 4363 textarea: 'startTagTextarea', 4364 select: 'startTagSelect', 4365 isindex: 'startTagIsindex', 4366 applet: 'startTagAppletMarqueeObject', 4367 marquee: 'startTagAppletMarqueeObject', 4368 object: 'startTagAppletMarqueeObject', 4369 li: 'startTagListItem', 4370 dd: 'startTagListItem', 4371 dt: 'startTagListItem', 4372 address: 'startTagCloseP', 4373 article: 'startTagCloseP', 4374 aside: 'startTagCloseP', 4375 blockquote: 'startTagCloseP', 4376 center: 'startTagCloseP', 4377 details: 'startTagCloseP', 4378 dir: 'startTagCloseP', 4379 div: 'startTagCloseP', 4380 dl: 'startTagCloseP', 4381 fieldset: 'startTagCloseP', 4382 figcaption: 'startTagCloseP', 4383 figure: 'startTagCloseP', 4384 footer: 'startTagCloseP',
4385 header: 'startTagCloseP', 4386 hgroup: 'startTagCloseP', 4387 main: 'startTagCloseP', 4388 menu: 'startTagCloseP', 4389 nav: 'startTagCloseP', 4390 ol: 'startTagCloseP', 4391 p: 'startTagCloseP', 4392 section: 'startTagCloseP', 4393 summary: 'startTagCloseP', 4394 ul: 'startTagCloseP', 4395 listing: 'startTagPreListing', 4396 pre: 'startTagPreListing', 4397 b: 'startTagFormatting', 4398 big: 'startTagFormatting', 4399 code: 'startTagFormatting', 4400 em: 'startTagFormatting', 4401 font: 'startTagFormatting', 4402 i: 'startTagFormatting', 4403 s: 'startTagFormatting', 4404 small: 'startTagFormatting', 4405 strike: 'startTagFormatting', 4406 strong: 'startTagFormatting', 4407 tt: 'startTagFormatting', 4408 u: 'startTagFormatting', 4409 nobr: 'startTagNobr', 4410 area: 'startTagVoidFormatting', 4411 br: 'startTagVoidFormatting', 4412 embed: 'startTagVoidFormatting', 4413 img: 'startTagVoidFormatting', 4414 keygen: 'startTagVoidFormatting', 4415 wbr: 'startTagVoidFormatting', 4416 param: 'startTagParamSourceTrack', 4417 source: 'startTagParamSourceTrack', 4418 track: 'startTagParamSourceTrack', 4419 iframe: 'startTagIFrame', 4420 noembed: 'startTagRawText', 4421 noscript: 'startTagRawText', 4422 h1: 'startTagHeading', 4423 h2: 'startTagHeading', 4424 h3: 'startTagHeading', 4425 h4: 'startTagHeading', 4426 h5: 'startTagHeading', 4427 h6: 'startTagHeading', 4428 caption: 'startTagMisplaced', 4429 col: 'startTagMisplaced', 4430 colgroup: 'startTagMisplaced', 4431 frame: 'startTagMisplaced', 4432 frameset: 'startTagFrameset', 4433 tbody: 'startTagMisplaced', 4434 td: 'startTagMisplaced', 4435 tfoot: 'startTagMisplaced', 4436 th: 'startTagMisplaced', 4437 thead: 'startTagMisplaced', 4438 tr: 'startTagMisplaced', 4439 option: 'startTagOptionOptgroup', 4440 optgroup: 'startTagOptionOptgroup', 4441 math: 'startTagMath', 4442 svg: 'startTagSVG', 4443 rt: 'startTagRpRt', 4444 rp: 'startTagRpRt', 4445 "-default": 'startTagOther' 4446 }; 4447 4448 modes.inBody.end_tag_handlers = { 4449 p: 'endTagP', 4450 body: 'endTagBody', 4451 html: 'endTagHtml', 4452 address: 'endTagBlock', 4453 article: 'endTagBlock', 4454 aside: 'endTagBlock', 4455 blockquote: 'endTagBlock', 4456 button: 'endTagBlock', 4457 center: 'endTagBlock', 4458 details: 'endTagBlock', 4459 dir: 'endTagBlock', 4460 div: 'endTagBlock', 4461 dl: 'endTagBlock', 4462 fieldset: 'endTagBlock', 4463 figcaption: 'endTagBlock', 4464 figure: 'endTagBlock', 4465 footer: 'endTagBlock', 4466 header: 'endTagBlock', 4467 hgroup: 'endTagBlock', 4468 listing: 'endTagBlock', 4469 main: 'endTagBlock', 4470 menu: 'endTagBlock', 4471 nav: 'endTagBlock', 4472 ol: 'endTagBlock', 4473 pre: 'endTagBlock', 4474 section: 'endTagBlock', 4475 summary: 'endTagBlock', 4476 ul: 'endTagBlock', 4477 form: 'endTagForm', 4478 applet: 'endTagAppletMarqueeObject', 4479 marquee: 'endTagAppletMarqueeObject', 4480 object: 'endTagAppletMarqueeObject', 4481 dd: 'endTagListItem', 4482 dt: 'endTagListItem', 4483 li: 'endTagListItem', 4484 h1: 'endTagHeading', 4485 h2: 'endTagHeading', 4486 h3: 'endTagHeading', 4487 h4: 'endTagHeading', 4488 h5: 'endTagHeading', 4489 h6: 'endTagHeading', 4490 a: 'endTagFormatting', 4491 b: 'endTagFormatting', 4492 big: 'endTagFormatting', 4493 code: 'endTagFormatting', 4494 em: 'endTagFormatting', 4495 font: 'endTagFormatting', 4496 i: 'endTagFormatting', 4497 nobr: 'endTagFormatting', 4498 s: 'endTagFormatting', 4499 small: 'endTagFormatting', 4500 strike: 'endTagFormatting', 4501 strong: 'endTagFormatting', 4502 tt: 'endTagFormatting', 4503 u: 'endTagFormatting', 4504 br: 'endTagBr', 4505 "-default": 'endTagOther' 4506 }; 4507 4508 modes.inBody.processCharacters = function(buffer) { 4509 if (tree.shouldSkipLeadingNewline) { 4510 tree.shouldSkipLeadingNewline = false; 4511 buffer.skipAtMostOneLeadingNewline(); 4512 } 4513 tree.reconstructActiveFormattingElements(); 4514 var characters = buffer.takeRemaining(); 4515 characters = characters.replace(/\u0000/g, function(match, index){ 4516 tree.parseError("invalid-codepoint"); 4517 return ''; 4518 }); 4519 if (!characters) 4520 return; 4521 tree.insertText(characters); 4522 if (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters)) 4523 tree.framesetOk = false; 4524 }; 4525 4526 modes.inBody.startTagHtml = function(name, attributes) { 4527 tree.parseError('non-html-root'); 4528 tree.addAttributesToElement(tree.openElements.rootNode, attributes); 4529 }; 4530 4531 modes.inBody.startTagProcessInHead = function(name, attributes) { 4532 modes.inHead.processStartTag(name, attributes); 4533 }; 4534 4535 modes.inBody.startTagBody = function(name, attributes) { 4536 tree.parseError('unexpected-start-tag', {name: 'body'}); 4537 if (tree.openElements.length == 1 || 4538 tree.openElements.item(1).localName != 'body') { 4539 assert.ok(tree.context); 4540 } else { 4541 tree.framesetOk = false;
4542 tree.addAttributesToElement(tree.openElements.bodyElement, attributes); 4543 } 4544 }; 4545 4546 modes.inBody.startTagFrameset = function(name, attributes) { 4547 tree.parseError('unexpected-start-tag', {name: 'frameset'}); 4548 if (tree.openElements.length == 1 || 4549 tree.openElements.item(1).localName != 'body') { 4550 assert.ok(tree.context); 4551 } else if (tree.framesetOk) { 4552 tree.detachFromParent(tree.openElements.bodyElement); 4553 while (tree.openElements.length > 1) 4554 tree.openElements.pop(); 4555 tree.insertElement(name, attributes); 4556 tree.setInsertionMode('inFrameset'); 4557 } 4558 }; 4559 4560 modes.inBody.startTagCloseP = function(name, attributes) { 4561 if (tree.openElements.inButtonScope('p')) 4562 this.endTagP('p'); 4563 tree.insertElement(name, attributes); 4564 }; 4565 4566 modes.inBody.startTagPreListing = function(name, attributes) { 4567 if (tree.openElements.inButtonScope('p')) 4568 this.endTagP('p'); 4569 tree.insertElement(name, attributes); 4570 tree.framesetOk = false; 4571 tree.shouldSkipLeadingNewline = true; 4572 }; 4573 4574 modes.inBody.startTagForm = function(name, attributes) { 4575 if (tree.form) { 4576 tree.parseError('unexpected-start-tag', {name: name}); 4577 } else { 4578 if (tree.openElements.inButtonScope('p')) 4579 this.endTagP('p'); 4580 tree.insertElement(name, attributes); 4581 tree.form = tree.currentStackItem(); 4582 } 4583 }; 4584 4585 modes.inBody.startTagRpRt = function(name, attributes) { 4586 if (tree.openElements.inScope('ruby')) { 4587 tree.generateImpliedEndTags(); 4588 if (tree.currentStackItem().localName != 'ruby') { 4589 tree.parseError('unexpected-start-tag', {name: name}); 4590 } 4591 } 4592 tree.insertElement(name, attributes); 4593 }; 4594 4595 modes.inBody.startTagListItem = function(name, attributes) { 4596 var stopNames = {li: ['li'], dd: ['dd', 'dt'], dt: ['dd', 'dt']}; 4597 var stopName = stopNames[name]; 4598 4599 var els = tree.openElements; 4600 for (var i = els.length - 1; i >= 0; i--) { 4601 var node = els.item(i); 4602 if (stopName.indexOf(node.localName) != -1) { 4603 tree.insertionMode.processEndTag(node.localName); 4604 break; 4605 } 4606 if (node.isSpecial() && node.localName !== 'p' && node.localName !== 'address' && node.localName !== 'div') 4607 break; 4608 } 4609 if (tree.openElements.inButtonScope('p')) 4610 this.endTagP('p'); 4611 tree.insertElement(name, attributes); 4612 tree.framesetOk = false; 4613 }; 4614 4615 modes.inBody.startTagPlaintext = function(name, attributes) { 4616 if (tree.openElements.inButtonScope('p')) 4617 this.endTagP('p'); 4618 tree.insertElement(name, attributes); 4619 tree.tokenizer.setState(Tokenizer.PLAINTEXT); 4620 }; 4621 4622 modes.inBody.startTagHeading = function(name, attributes) { 4623 if (tree.openElements.inButtonScope('p')) 4624 this.endTagP('p'); 4625 if (tree.currentStackItem().isNumberedHeader()) { 4626 tree.parseError('unexpected-start-tag', {name: name}); 4627 tree.popElement(); 4628 } 4629 tree.insertElement(name, attributes); 4630 }; 4631 4632 modes.inBody.startTagA = function(name, attributes) { 4633 var activeA = tree.elementInActiveFormattingElements('a'); 4634 if (activeA) { 4635 tree.parseError("unexpected-start-tag-implies-end-tag", {startName: "a", endName: "a"}); 4636 tree.adoptionAgencyEndTag('a'); 4637 if (tree.openElements.contains(activeA)) 4638 tree.openElements.remove(activeA); 4639 tree.removeElementFromActiveFormattingElements(activeA); 4640 } 4641 tree.reconstructActiveFormattingElements(); 4642 tree.insertFormattingElement(name, attributes); 4643 }; 4644 4645 modes.inBody.startTagFormatting = function(name, attributes) { 4646 tree.reconstructActiveFormattingElements(); 4647 tree.insertFormattingElement(name, attributes); 4648 }; 4649 4650 modes.inBody.startTagNobr = function(name, attributes) { 4651 tree.reconstructActiveFormattingElements(); 4652 if (tree.openElements.inScope('nobr')) { 4653 tree.parseError("unexpected-start-tag-implies-end-tag", {startName: 'nobr', endName: 'nobr'}); 4654 this.processEndTag('nobr'); 4655 tree.reconstructActiveFormattingElements(); 4656 } 4657 tree.insertFormattingElement(name, attributes); 4658 }; 4659 4660 modes.inBody.startTagButton = function(name, attributes) { 4661 if (tree.openElements.inScope('button')) { 4662 tree.parseError('unexpected-start-tag-implies-end-tag', {startName: 'button', endName: 'button'}); 4663 this.processEndTag('button'); 4664 tree.insertionMode.processStartTag(name, attributes); 4665 } else { 4666 tree.framesetOk = false;
4667 tree.reconstructActiveFormattingElements(); 4668 tree.insertElement(name, attributes); 4669 } 4670 }; 4671 4672 modes.inBody.startTagAppletMarqueeObject = function(name, attributes) { 4673 tree.reconstructActiveFormattingElements(); 4674 tree.insertElement(name, attributes); 4675 tree.activeFormattingElements.push(Marker); 4676 tree.framesetOk = false; 4677 }; 4678 4679 modes.inBody.endTagAppletMarqueeObject = function(name) { 4680 if (!tree.openElements.inScope(name)) { 4681 tree.parseError("unexpected-end-tag", {name: name}); 4682 } else { 4683 tree.generateImpliedEndTags(); 4684 if (tree.currentStackItem().localName != name) { 4685 tree.parseError('end-tag-too-early', {name: name}); 4686 } 4687 tree.openElements.popUntilPopped(name); 4688 tree.clearActiveFormattingElements(); 4689 } 4690 }; 4691 4692 modes.inBody.startTagXmp = function(name, attributes) { 4693 if (tree.openElements.inButtonScope('p')) 4694 this.processEndTag('p'); 4695 tree.reconstructActiveFormattingElements(); 4696 tree.processGenericRawTextStartTag(name, attributes); 4697 tree.framesetOk = false; 4698 }; 4699 4700 modes.inBody.startTagTable = function(name, attributes) { 4701 if (tree.compatMode !== "quirks") 4702 if (tree.openElements.inButtonScope('p')) 4703 this.processEndTag('p'); 4704 tree.insertElement(name, attributes); 4705 tree.setInsertionMode('inTable'); 4706 tree.framesetOk = false; 4707 }; 4708 4709 modes.inBody.startTagVoidFormatting = function(name, attributes) { 4710 tree.reconstructActiveFormattingElements(); 4711 tree.insertSelfClosingElement(name, attributes); 4712 tree.framesetOk = false; 4713 }; 4714 4715 modes.inBody.startTagParamSourceTrack = function(name, attributes) { 4716 tree.insertSelfClosingElement(name, attributes); 4717 }; 4718 4719 modes.inBody.startTagHr = function(name, attributes) { 4720 if (tree.openElements.inButtonScope('p')) 4721 this.endTagP('p'); 4722 tree.insertSelfClosingElement(name, attributes); 4723 tree.framesetOk = false; 4724 }; 4725 4726 modes.inBody.startTagImage = function(name, attributes) { 4727 tree.parseError('unexpected-start-tag-treated-as', {originalName: 'image', newName: 'img'}); 4728 this.processStartTag('img', attributes); 4729 }; 4730 4731 modes.inBody.startTagInput = function(name, attributes) { 4732 var currentFramesetOk = tree.framesetOk; 4733 this.startTagVoidFormatting(name, attributes); 4734 for (var key in attributes) { 4735 if (attributes[key].nodeName == 'type') { 4736 if (attributes[key].nodeValue.toLowerCase() == 'hidden') 4737 tree.framesetOk = currentFramesetOk; 4738 break; 4739 } 4740 } 4741 }; 4742 4743 modes.inBody.startTagIsindex = function(name, attributes) { 4744 tree.parseError('deprecated-tag', {name: 'isindex'}); 4745 tree.selfClosingFlagAcknowledged = true; 4746 if (tree.form) 4747 return; 4748 var formAttributes = []; 4749 var inputAttributes = []; 4750 var prompt = "This is a searchable index. Enter search keywords: "; 4751 for (var key in attributes) { 4752 switch (attributes[key].nodeName) { 4753 case 'action': 4754 formAttributes.push({nodeName: 'action', 4755 nodeValue: attributes[key].nodeValue}); 4756 break; 4757 case 'prompt': 4758 prompt = attributes[key].nodeValue; 4759 break; 4760 case 'name': 4761 break; 4762 default: 4763 inputAttributes.push({nodeName: attributes[key].nodeName, 4764 nodeValue: attributes[key].nodeValue}); 4765 } 4766 } 4767 inputAttributes.push({nodeName: 'name', nodeValue: 'isindex'}); 4768 this.processStartTag('form', formAttributes); 4769 this.processStartTag('hr'); 4770 this.processStartTag('label'); 4771 this.processCharacters(new CharacterBuffer(prompt)); 4772 this.processStartTag('input', inputAttributes); 4773 this.processEndTag('label'); 4774 this.processStartTag('hr'); 4775 this.processEndTag('form'); 4776 }; 4777 4778 modes.inBody.startTagTextarea = function(name, attributes) { 4779 tree.insertElement(name, attributes); 4780 tree.tokenizer.setState(Tokenizer.RCDATA); 4781 tree.originalInsertionMode = tree.insertionModeName; 4782 tree.shouldSkipLeadingNewline = true; 4783 tree.framesetOk = false; 4784 tree.setInsertionMode('text'); 4785 }; 4786 4787 modes.inBody.startTagIFrame = function(name, attributes) { 4788 tree.framesetOk = false; 4789 this.startTagRawText(name, attributes); 4790 }; 4791 4792 modes.inBody.startTagRawText = function(name, attributes) { 4793 tree.processGenericRawTextStartTag(name, attributes); 4794 }; 4795 4796 modes.inBody.startTagSelect = function(name, attributes) { 4797 tree.reconstructActiveFormattingElements(); 4798 tree.insertElement(name, attributes); 4799 tree.framesetOk = false;
4800 var insertionModeName = tree.insertionModeName; 4801 if (insertionModeName == 'inTable' || 4802 insertionModeName == 'inCaption' || 4803 insertionModeName == 'inColumnGroup' || 4804 insertionModeName == 'inTableBody' || 4805 insertionModeName == 'inRow' || 4806 insertionModeName == 'inCell') { 4807 tree.setInsertionMode('inSelectInTable'); 4808 } else { 4809 tree.setInsertionMode('inSelect'); 4810 } 4811 }; 4812 4813 modes.inBody.startTagMisplaced = function(name, attributes) { 4814 tree.parseError('unexpected-start-tag-ignored', {name: name}); 4815 }; 4816 4817 modes.inBody.endTagMisplaced = function(name) { 4818 tree.parseError("unexpected-end-tag", {name: name}); 4819 }; 4820 4821 modes.inBody.endTagBr = function(name) { 4822 tree.parseError("unexpected-end-tag-treated-as", {originalName: "br", newName: "br element"}); 4823 tree.reconstructActiveFormattingElements(); 4824 tree.insertElement(name, []); 4825 tree.popElement(); 4826 }; 4827 4828 modes.inBody.startTagOptionOptgroup = function(name, attributes) { 4829 if (tree.currentStackItem().localName == 'option') 4830 tree.popElement(); 4831 tree.reconstructActiveFormattingElements(); 4832 tree.insertElement(name, attributes); 4833 }; 4834 4835 modes.inBody.startTagOther = function(name, attributes) { 4836 tree.reconstructActiveFormattingElements(); 4837 tree.insertElement(name, attributes); 4838 }; 4839 4840 modes.inBody.endTagOther = function(name) { 4841 var node; 4842 for (var i = tree.openElements.length - 1; i > 0; i--) { 4843 node = tree.openElements.item(i); 4844 if (node.localName == name) { 4845 tree.generateImpliedEndTags(name); 4846 if (tree.currentStackItem().localName != name) 4847 tree.parseError('unexpected-end-tag', {name: name}); 4848 tree.openElements.remove_openElements_until(function(x) {return x === node;}); 4849 break; 4850 } 4851 if (node.isSpecial()) { 4852 tree.parseError('unexpected-end-tag', {name: name}); 4853 break; 4854 } 4855 } 4856 }; 4857 4858 modes.inBody.startTagMath = function(name, attributes, selfClosing) { 4859 tree.reconstructActiveFormattingElements(); 4860 attributes = tree.adjustMathMLAttributes(attributes); 4861 attributes = tree.adjustForeignAttributes(attributes); 4862 tree.insertForeignElement(name, attributes, "http://www.w3.org/1998/Math/MathML", selfClosing); 4863 }; 4864 4865 modes.inBody.startTagSVG = function(name, attributes, selfClosing) { 4866 tree.reconstructActiveFormattingElements(); 4867 attributes = tree.adjustSVGAttributes(attributes); 4868 attributes = tree.adjustForeignAttributes(attributes); 4869 tree.insertForeignElement(name, attributes, "http://www.w3.org/2000/svg", selfClosing); 4870 }; 4871 4872 modes.inBody.endTagP = function(name) { 4873 if (!tree.openElements.inButtonScope('p')) { 4874 tree.parseError('unexpected-end-tag', {name: 'p'}); 4875 this.startTagCloseP('p', []); 4876 this.endTagP('p'); 4877 } else { 4878 tree.generateImpliedEndTags('p'); 4879 if (tree.currentStackItem().localName != 'p') 4880 tree.parseError('unexpected-implied-end-tag', {name: 'p'}); 4881 tree.openElements.popUntilPopped(name); 4882 } 4883 }; 4884 4885 modes.inBody.endTagBody = function(name) { 4886 if (!tree.openElements.inScope('body')) { 4887 tree.parseError('unexpected-end-tag', {name: name}); 4888 return; 4889 } 4890 if (tree.currentStackItem().localName != 'body') { 4891 tree.parseError('expected-one-end-tag-but-got-another', { 4892 expectedName: tree.currentStackItem().localName, 4893 gotName: name 4894 }); 4895 } 4896 tree.setInsertionMode('afterBody'); 4897 }; 4898 4899 modes.inBody.endTagHtml = function(name) { 4900 if (!tree.openElements.inScope('body')) { 4901 tree.parseError('unexpected-end-tag', {name: name}); 4902 return; 4903 } 4904 if (tree.currentStackItem().localName != 'body') { 4905 tree.parseError('expected-one-end-tag-but-got-another', { 4906 expectedName: tree.currentStackItem().localName, 4907 gotName: name 4908 }); 4909 } 4910 tree.setInsertionMode('afterBody'); 4911 tree.insertionMode.processEndTag(name); 4912 }; 4913 4914 modes.inBody.endTagBlock = function(name) { 4915 if (!tree.openElements.inScope(name)) { 4916 tree.parseError('unexpected-end-tag', {name: name}); 4917 } else { 4918 tree.generateImpliedEndTags(); 4919 if (tree.currentStackItem().localName != name) { 4920 tree.parseError('end-tag-too-early', {name: name}); 4921 } 4922 tree.openElements.popUntilPopped(name); 4923 } 4924 }; 4925 4926 modes.inBody.endTagForm = function(name) { 4927 var node = tree.form; 4928 tree.form = null; 4929 if (!node || !tree.openElements.inScope(name)) { 4930 tree.parseError('unexpected-end-tag', {name: name}); 4931 } else { 4932 tree.generateImpliedEndTags(); 4933 if (tree.currentStackItem() != node) { 4934 tree.parseError('end-tag-too-early-ignored', {name: 'form'}); 4935 } 4936 tree.openElements.remove(node); 4937 } 4938 }; 4939 4940 modes.inBody.endTagListItem = function(name) { 4941 if (!tree.openElements.inListItemScope(name)) { 4942 tree.parseError('unexpected-end-tag', {name: name}); 4943 } else { 4944 tree.generateImpliedEndTags(name); 4945 if (tree.currentStackItem().localName != name) 4946 tree.parseError('end-tag-too-early', {name: name}); 4947 tree.openElements.popUntilPopped(name); 4948 } 4949 }; 4950 4951 modes.inBody.endTagHeading = function(name) { 4952 if (!tree.openElements.hasNumberedHeaderElementInScope()) { 4953 tree.parseError('unexpected-end-tag', {name: name}); 4954 return; 4955 } 4956 tree.generateImpliedEndTags(); 4957 if (tree.currentStackItem().localName != name) 4958 tree.parseError('end-tag-too-early', {name: name}); 4959 4960 tree.openElements.remove_openElements_until(function(e) { 4961 return e.isNumberedHeader(); 4962 }); 4963 }; 4964 4965 modes.inBody.endTagFormatting = function(name, attributes) { 4966 if (!tree.adoptionAgencyEndTag(name)) 4967 this.endTagOther(name, attributes); 4968 }; 4969 4970 modes.inCaption = Object.create(modes.base); 4971 4972 modes.inCaption.start_tag_handlers = { 4973 html: 'startTagHtml', 4974 caption: 'startTagTableElement', 4975 col: 'startTagTableElement', 4976 colgroup: 'startTagTableElement', 4977 tbody: 'startTagTableElement', 4978 td: 'startTagTableElement', 4979 tfoot: 'startTagTableElement', 4980 thead: 'startTagTableElement',
4981 tr: 'startTagTableElement', 4982 '-default': 'startTagOther' 4983 }; 4984 4985 modes.inCaption.end_tag_handlers = { 4986 caption: 'endTagCaption', 4987 table: 'endTagTable', 4988 body: 'endTagIgnore', 4989 col: 'endTagIgnore', 4990 colgroup: 'endTagIgnore', 4991 html: 'endTagIgnore', 4992 tbody: 'endTagIgnore', 4993 td: 'endTagIgnore', 4994 tfood: 'endTagIgnore', 4995 thead: 'endTagIgnore', 4996 tr: 'endTagIgnore', 4997 '-default': 'endTagOther' 4998 }; 4999 5000 modes.inCaption.processCharacters = function(data) { 5001 modes.inBody.processCharacters(data); 5002 }; 5003 5004 modes.inCaption.startTagTableElement = function(name, attributes) { 5005 tree.parseError('unexpected-end-tag', {name: name}); 5006 var ignoreEndTag = !tree.openElements.inTableScope('caption'); 5007 tree.insertionMode.processEndTag('caption'); 5008 if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes); 5009 }; 5010 5011 modes.inCaption.startTagOther = function(name, attributes, selfClosing) { 5012 modes.inBody.processStartTag(name, attributes, selfClosing); 5013 }; 5014 5015 modes.inCaption.endTagCaption = function(name) { 5016 if (!tree.openElements.inTableScope('caption')) { 5017 assert.ok(tree.context); 5018 tree.parseError('unexpected-end-tag', {name: name}); 5019 } else { 5020 tree.generateImpliedEndTags(); 5021 if (tree.currentStackItem().localName != 'caption') { 5022 tree.parseError('expected-one-end-tag-but-got-another', { 5023 gotName: "caption", 5024 expectedName: tree.currentStackItem().localName 5025 }); 5026 } 5027 tree.openElements.popUntilPopped('caption'); 5028 tree.clearActiveFormattingElements(); 5029 tree.setInsertionMode('inTable'); 5030 } 5031 }; 5032 5033 modes.inCaption.endTagTable = function(name) { 5034 tree.parseError("unexpected-end-table-in-caption"); 5035 var ignoreEndTag = !tree.openElements.inTableScope('caption'); 5036 tree.insertionMode.processEndTag('caption'); 5037 if (!ignoreEndTag) tree.insertionMode.processEndTag(name); 5038 }; 5039 5040 modes.inCaption.endTagIgnore = function(name) { 5041 tree.parseError('unexpected-end-tag', {name: name}); 5042 }; 5043 5044 modes.inCaption.endTagOther = function(name) { 5045 modes.inBody.processEndTag(name); 5046 }; 5047 5048 modes.inCell = Object.create(modes.base); 5049 5050 modes.inCell.start_tag_handlers = { 5051 html: 'startTagHtml', 5052 caption: 'startTagTableOther', 5053 col: 'startTagTableOther', 5054 colgroup: 'startTagTableOther', 5055 tbody: 'startTagTableOther', 5056 td: 'startTagTableOther', 5057 tfoot: 'startTagTableOther', 5058 th: 'startTagTableOther', 5059 thead: 'startTagTableOther', 5060 tr: 'startTagTableOther', 5061 '-default': 'startTagOther' 5062 }; 5063 5064 modes.inCell.end_tag_handlers = { 5065 td: 'endTagTableCell', 5066 th: 'endTagTableCell', 5067 body: 'endTagIgnore', 5068 caption: 'endTagIgnore', 5069 col: 'endTagIgnore', 5070 colgroup: 'endTagIgnore', 5071 html: 'endTagIgnore', 5072 table: 'endTagImply', 5073 tbody: 'endTagImply', 5074 tfoot: 'endTagImply', 5075 thead: 'endTagImply', 5076 tr: 'endTagImply', 5077 '-default': 'endTagOther' 5078 }; 5079 5080 modes.inCell.processCharacters = function(data) { 5081 modes.inBody.processCharacters(data); 5082 }; 5083 5084 modes.inCell.startTagTableOther = function(name, attributes, selfClosing) { 5085 if (tree.openElements.inTableScope('td') || tree.openElements.inTableScope('th')) { 5086 this.closeCell(); 5087 tree.insertionMode.processStartTag(name, attributes, selfClosing); 5088 } else { 5089 tree.parseError('unexpected-start-tag', {name: name}); 5090 } 5091 }; 5092 5093 modes.inCell.startTagOther = function(name, attributes, selfClosing) { 5094 modes.inBody.processStartTag(name, attributes, selfClosing); 5095 }; 5096 5097 modes.inCell.endTagTableCell = function(name) { 5098 if (tree.openElements.inTableScope(name)) { 5099 tree.generateImpliedEndTags(name); 5100 if (tree.currentStackItem().localName != name.toLowerCase()) { 5101 tree.parseError('unexpected-cell-end-tag', {name: name}); 5102 tree.openElements.popUntilPopped(name); 5103 } else { 5104 tree.popElement(); 5105 } 5106 tree.clearActiveFormattingElements(); 5107 tree.setInsertionMode('inRow'); 5108 } else { 5109 tree.parseError('unexpected-end-tag', {name: name}); 5110 } 5111 }; 5112 5113 modes.inCell.endTagIgnore = function(name) { 5114 tree.parseError('unexpected-end-tag', {name: name}); 5115 }; 5116 5117 modes.inCell.endTagImply = function(name) { 5118 if (tree.openElements.inTableScope(name)) { 5119 this.closeCell(); 5120 tree.insertionMode.processEndTag(name); 5121 } else { 5122 tree.parseError('unexpected-end-tag', {name: name}); 5123 } 5124 }; 5125 5126 modes.inCell.endTagOther = function(name) { 5127 modes.inBody.processEndTag(name); 5128 }; 5129 5130 modes.inCell.closeCell = function() { 5131 if (tree.openElements.inTableScope('td')) { 5132 this.endTagTableCell('td'); 5133 } else if (tree.openElements.inTableScope('th')) { 5134 this.endTagTableCell('th'); 5135 } 5136 }; 5137 5138 5139 modes.inColumnGroup = Object.create(modes.base); 5140 5141 modes.inColumnGroup.start_tag_handlers = { 5142 html: 'startTagHtml', 5143 col: 'startTagCol', 5144 '-default': 'startTagOther' 5145 }; 5146 5147 modes.inColumnGroup.end_tag_handlers = { 5148 colgroup: 'endTagColgroup',
5149 col: 'endTagCol', 5150 '-default': 'endTagOther' 5151 }; 5152 5153 modes.inColumnGroup.ignoreEndTagColgroup = function() { 5154 return tree.currentStackItem().localName == 'html'; 5155 }; 5156 5157 modes.inColumnGroup.processCharacters = function(buffer) { 5158 var leadingWhitespace = buffer.takeLeadingWhitespace(); 5159 if (leadingWhitespace) 5160 tree.insertText(leadingWhitespace); 5161 if (!buffer.length) 5162 return; 5163 var ignoreEndTag = this.ignoreEndTagColgroup(); 5164 this.endTagColgroup('colgroup'); 5165 if (!ignoreEndTag) tree.insertionMode.processCharacters(buffer); 5166 }; 5167 5168 modes.inColumnGroup.startTagCol = function(name, attributes) { 5169 tree.insertSelfClosingElement(name, attributes); 5170 }; 5171 5172 modes.inColumnGroup.startTagOther = function(name, attributes, selfClosing) { 5173 var ignoreEndTag = this.ignoreEndTagColgroup(); 5174 this.endTagColgroup('colgroup'); 5175 if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes, selfClosing); 5176 }; 5177 5178 modes.inColumnGroup.endTagColgroup = function(name) { 5179 if (this.ignoreEndTagColgroup()) { 5180 assert.ok(tree.context); 5181 tree.parseError('unexpected-end-tag', {name: name}); 5182 } else { 5183 tree.popElement(); 5184 tree.setInsertionMode('inTable'); 5185 } 5186 }; 5187 5188 modes.inColumnGroup.endTagCol = function(name) { 5189 tree.parseError("no-end-tag", {name: 'col'}); 5190 }; 5191 5192 modes.inColumnGroup.endTagOther = function(name) { 5193 var ignoreEndTag = this.ignoreEndTagColgroup(); 5194 this.endTagColgroup('colgroup'); 5195 if (!ignoreEndTag) tree.insertionMode.processEndTag(name) ; 5196 }; 5197 5198 modes.inForeignContent = Object.create(modes.base); 5199 5200 modes.inForeignContent.processStartTag = function(name, attributes, selfClosing) { 5201 if (['b', 'big', 'blockquote', 'body', 'br', 'center', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'embed', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'i', 'img', 'li', 'listing', 'menu', 'meta', 'nobr', 'ol', 'p', 'pre', 'ruby', 's', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'table', 'tt', 'u', 'ul', 'var'].indexOf(name) != -1 5202 || (name == 'font' && attributes.some(function(attr){ return ['color', 'face', 'size'].indexOf(attr.nodeName) >= 0 }))) { 5203 tree.parseError('unexpected-html-element-in-foreign-content', {name: name}); 5204 while (tree.currentStackItem().isForeign() 5205 && !tree.currentStackItem().isHtmlIntegrationPoint() 5206 && !tree.currentStackItem().isMathMLTextIntegrationPoint()) { 5207 tree.openElements.pop(); 5208 } 5209 tree.insertionMode.processStartTag(name, attributes, selfClosing); 5210 return; 5211 } 5212 if (tree.currentStackItem().namespaceURI == "http://www.w3.org/1998/Math/MathML") { 5213 attributes = tree.adjustMathMLAttributes(attributes); 5214 } 5215 if (tree.currentStackItem().namespaceURI == "http://www.w3.org/2000/svg") { 5216 name = tree.adjustSVGTagNameCase(name); 5217 attributes = tree.adjustSVGAttributes(attributes); 5218 } 5219 attributes = tree.adjustForeignAttributes(attributes); 5220 tree.insertForeignElement(name, attributes, tree.currentStackItem().namespaceURI, selfClosing); 5221 }; 5222 5223 modes.inForeignContent.processEndTag = function(name) { 5224 var node = tree.currentStackItem(); 5225 var index = tree.openElements.length - 1; 5226 if (node.localName.toLowerCase() != name) 5227 tree.parseError("unexpected-end-tag", {name: name}); 5228 5229 while (true) { 5230 if (index === 0) 5231 break; 5232 if (node.localName.toLowerCase() == name) { 5233 while (tree.openElements.pop() != node); 5234 break; 5235 } 5236 index -= 1; 5237 node = tree.openElements.item(index); 5238 if (node.isForeign()) { 5239 continue; 5240 } else { 5241 tree.insertionMode.processEndTag(name); 5242 break; 5243 } 5244 } 5245 }; 5246 5247 modes.inForeignContent.processCharacters = function(buffer) { 5248 var characters = buffer.takeRemaining(); 5249 characters = characters.replace(/\u0000/g, function(match, index){ 5250 tree.parseError('invalid-codepoint'); 5251 return '\uFFFD'; 5252 }); 5253 if (tree.framesetOk && !isAllWhitespaceOrReplacementCharacters(characters)) 5254 tree.framesetOk = false; 5255 tree.insertText(characters); 5256 }; 5257 5258 modes.inHeadNoscript = Object.create(modes.base); 5259 5260 modes.inHeadNoscript.start_tag_handlers = { 5261 html: 'startTagHtml', 5262 basefont: 'startTagBasefontBgsoundLinkMetaNoframesStyle', 5263 bgsound: 'startTagBasefontBgsoundLinkMetaNoframesStyle', 5264 link: 'startTagBasefontBgsoundLinkMetaNoframesStyle', 5265 meta: 'startTagBasefontBgsoundLinkMetaNoframesStyle', 5266 noframes: 'startTagBasefontBgsoundLinkMetaNoframesStyle', 5267 style: 'startTagBasefontBgsoundLinkMetaNoframesStyle', 5268 head: 'startTagHeadNoscript', 5269 noscript: 'startTagHeadNoscript', 5270 "-default": 'startTagOther' 5271 }; 5272 5273 modes.inHeadNoscript.end_tag_handlers = { 5274 noscript: 'endTagNoscript', 5275 br: 'endTagBr', 5276 '-default': 'endTagOther' 5277 }; 5278 5279 modes.inHeadNoscript.processCharacters = function(buffer) { 5280 var leadingWhitespace = buffer.takeLeadingWhitespace(); 5281 if (leadingWhitespace) 5282 tree.insertText(leadingWhitespace); 5283 if (!buffer.length) 5284 return; 5285 tree.parseError("unexpected-char-in-frameset"); 5286 this.anythingElse(); 5287 tree.insertionMode.processCharacters(buffer); 5288 }; 5289 5290 modes.inHeadNoscript.processComment = function(data) { 5291 modes.inHead.processComment(data); 5292 }; 5293 5294 modes.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle = function(name, attributes) { 5295 modes.inHead.processStartTag(name, attributes); 5296 }; 5297 5298 modes.inHeadNoscript.startTagHeadNoscript = function(name, attributes) { 5299 tree.parseError("unexpected-start-tag-in-frameset", {name: name}); 5300 }; 5301 5302 modes.inHeadNoscript.startTagOther = function(name, attributes) { 5303 tree.parseError("unexpected-start-tag-in-frameset", {name: name}); 5304 this.anythingElse(); 5305 tree.insertionMode.processStartTag(name, attributes); 5306 }; 5307 5308 modes.inHeadNoscript.endTagBr = function(name, attributes) { 5309 tree.parseError("unexpected-end-tag-in-frameset", {name: name}); 5310 this.anythingElse(); 5311 tree.insertionMode.processEndTag(name, attributes); 5312 }; 5313 5314 modes.inHeadNoscript.endTagNoscript = function(name, attributes) { 5315 tree.popElement(); 5316 tree.setInsertionMode('inHead'); 5317 }; 5318 5319 modes.inHeadNoscript.endTagOther = function(name, attributes) { 5320 tree.parseError("unexpected-end-tag-in-frameset", {name: name}); 5321 }; 5322 5323 modes.inHeadNoscript.anythingElse = function() { 5324 tree.popElement(); 5325 tree.setInsertionMode('inHead'); 5326 }; 5327 5328 5329 modes.inFrameset = Object.create(modes.base); 5330 5331 modes.inFrameset.start_tag_handlers = { 5332 html: 'startTagHtml', 5333 frameset: 'startTagFrameset', 5334 frame: 'startTagFrame', 5335 noframes: 'startTagNoframes', 5336 "-default": 'startTagOther' 5337 }; 5338 5339 modes.inFrameset.end_tag_handlers = { 5340 frameset: 'endTagFrameset', 5341 noframes: 'endTagNoframes', 5342 '-default': 'endTagOther' 5343 }; 5344 5345 modes.inFrameset.processCharacters = function(data) { 5346 tree.parseError("unexpected-char-in-frameset"); 5347 }; 5348 5349 modes.inFrameset.startTagFrameset = function(name, attributes) { 5350 tree.insertElement(name, attributes); 5351 }; 5352 5353 modes.inFrameset.startTagFrame = function(name, attributes) { 5354 tree.insertSelfClosingElement(name, attributes); 5355 }; 5356 5357 modes.inFrameset.startTagNoframes = function(name, attributes) { 5358 modes.inBody.processStartTag(name, attributes); 5359 }; 5360 5361 modes.inFrameset.startTagOther = function(name, attributes) { 5362 tree.parseError("unexpected-start-tag-in-frameset", {name: name}); 5363 }; 5364 5365 modes.inFrameset.endTagFrameset = function(name, attributes) { 5366 if (tree.currentStackItem().localName == 'html') { 5367 tree.parseError("unexpected-frameset-in-frameset-innerhtml"); 5368 } else { 5369 tree.popElement(); 5370 } 5371 5372 if (!tree.context && tree.currentStackItem().localName != 'frameset') { 5373 tree.setInsertionMode('afterFrameset'); 5374 } 5375 }; 5376 5377 modes.inFrameset.endTagNoframes = function(name) { 5378 modes.inBody.processEndTag(name); 5379 }; 5380 5381 modes.inFrameset.endTagOther = function(name) { 5382 tree.parseError("unexpected-end-tag-in-frameset", {name: name}); 5383 }; 5384 5385 modes.inTable = Object.create(modes.base); 5386 5387 modes.inTable.start_tag_handlers = { 5388 html: 'startTagHtml', 5389 caption: 'startTagCaption',
5390 colgroup: 'startTagColgroup', 5391 col: 'startTagCol', 5392 table: 'startTagTable', 5393 tbody: 'startTagRowGroup', 5394 tfoot: 'startTagRowGroup', 5395 thead: 'startTagRowGroup', 5396 td: 'startTagImplyTbody', 5397 th: 'startTagImplyTbody', 5398 tr: 'startTagImplyTbody', 5399 style: 'startTagStyleScript', 5400 script: 'startTagStyleScript', 5401 input: 'startTagInput', 5402 form: 'startTagForm', 5403 '-default': 'startTagOther' 5404 }; 5405 5406 modes.inTable.end_tag_handlers = { 5407 table: 'endTagTable', 5408 body: 'endTagIgnore', 5409 caption: 'endTagIgnore', 5410 col: 'endTagIgnore', 5411 colgroup: 'endTagIgnore', 5412 html: 'endTagIgnore', 5413 tbody: 'endTagIgnore', 5414 td: 'endTagIgnore', 5415 tfoot: 'endTagIgnore', 5416 th: 'endTagIgnore', 5417 thead: 'endTagIgnore', 5418 tr: 'endTagIgnore', 5419 '-default': 'endTagOther' 5420 }; 5421 5422 modes.inTable.processCharacters = function(data) { 5423 if (tree.currentStackItem().isFosterParenting()) { 5424 var originalInsertionMode = tree.insertionModeName; 5425 tree.setInsertionMode('inTableText'); 5426 tree.originalInsertionMode = originalInsertionMode; 5427 tree.insertionMode.processCharacters(data); 5428 } else { 5429 tree.redirectAttachToFosterParent = true; 5430 modes.inBody.processCharacters(data); 5431 tree.redirectAttachToFosterParent = false; 5432 } 5433 }; 5434 5435 modes.inTable.startTagCaption = function(name, attributes) { 5436 tree.openElements.popUntilTableScopeMarker(); 5437 tree.activeFormattingElements.push(Marker); 5438 tree.insertElement(name, attributes); 5439 tree.setInsertionMode('inCaption'); 5440 }; 5441 5442 modes.inTable.startTagColgroup = function(name, attributes) { 5443 tree.openElements.popUntilTableScopeMarker(); 5444 tree.insertElement(name, attributes); 5445 tree.setInsertionMode('inColumnGroup'); 5446 }; 5447 5448 modes.inTable.startTagCol = function(name, attributes) { 5449 this.startTagColgroup('colgroup', []); 5450 tree.insertionMode.processStartTag(name, attributes); 5451 }; 5452 5453 modes.inTable.startTagRowGroup = function(name, attributes) { 5454 tree.openElements.popUntilTableScopeMarker(); 5455 tree.insertElement(name, attributes); 5456 tree.setInsertionMode('inTableBody'); 5457 }; 5458 5459 modes.inTable.startTagImplyTbody = function(name, attributes) { 5460 this.startTagRowGroup('tbody', []); 5461 tree.insertionMode.processStartTag(name, attributes); 5462 }; 5463 5464 modes.inTable.startTagTable = function(name, attributes) { 5465 tree.parseError("unexpected-start-tag-implies-end-tag", 5466 {startName: "table", endName: "table"}); 5467 tree.insertionMode.processEndTag('table'); 5468 if (!tree.context) tree.insertionMode.processStartTag(name, attributes); 5469 }; 5470 5471 modes.inTable.startTagStyleScript = function(name, attributes) { 5472 modes.inHead.processStartTag(name, attributes); 5473 }; 5474 5475 modes.inTable.startTagInput = function(name, attributes) { 5476 for (var key in attributes) { 5477 if (attributes[key].nodeName.toLowerCase() == 'type') { 5478 if (attributes[key].nodeValue.toLowerCase() == 'hidden') { 5479 tree.parseError("unexpected-hidden-input-in-table"); 5480 tree.insertElement(name, attributes); 5481 tree.openElements.pop(); 5482 return; 5483 } 5484 break; 5485 } 5486 } 5487 this.startTagOther(name, attributes); 5488 }; 5489 5490 modes.inTable.startTagForm = function(name, attributes) { 5491 tree.parseError("unexpected-form-in-table"); 5492 if (!tree.form) { 5493 tree.insertElement(name, attributes); 5494 tree.form = tree.currentStackItem(); 5495 tree.openElements.pop(); 5496 } 5497 }; 5498 5499 modes.inTable.startTagOther = function(name, attributes, selfClosing) { 5500 tree.parseError("unexpected-start-tag-implies-table-voodoo", {name: name}); 5501 tree.redirectAttachToFosterParent = true; 5502 modes.inBody.processStartTag(name, attributes, selfClosing); 5503 tree.redirectAttachToFosterParent = false; 5504 }; 5505 5506 modes.inTable.endTagTable = function(name) { 5507 if (tree.openElements.inTableScope(name)) { 5508 tree.generateImpliedEndTags(); 5509 if (tree.currentStackItem().localName != name) { 5510 tree.parseError("end-tag-too-early-named", {gotName: 'table', expectedName: tree.currentStackItem().localName}); 5511 } 5512 5513 tree.openElements.popUntilPopped('table'); 5514 tree.resetInsertionMode(); 5515 } else { 5516 assert.ok(tree.context); 5517 tree.parseError('unexpected-end-tag', {name: name}); 5518 } 5519 }; 5520 5521 modes.inTable.endTagIgnore = function(name) { 5522 tree.parseError("unexpected-end-tag", {name: name}); 5523 }; 5524 5525 modes.inTable.endTagOther = function(name) { 5526 tree.parseError("unexpected-end-tag-implies-table-voodoo", {name: name}); 5527 tree.redirectAttachToFosterParent = true; 5528 modes.inBody.processEndTag(name); 5529 tree.redirectAttachToFosterParent = false;
5530 }; 5531 5532 modes.inTableText = Object.create(modes.base); 5533 5534 modes.inTableText.flushCharacters = function() { 5535 var characters = tree.pendingTableCharacters.join(''); 5536 if (!isAllWhitespace(characters)) { 5537 tree.redirectAttachToFosterParent = true; 5538 tree.reconstructActiveFormattingElements(); 5539 tree.insertText(characters); 5540 tree.framesetOk = false; 5541 tree.redirectAttachToFosterParent = false; 5542 } else { 5543 tree.insertText(characters); 5544 } 5545 tree.pendingTableCharacters = []; 5546 }; 5547 5548 modes.inTableText.processComment = function(data) { 5549 this.flushCharacters(); 5550 tree.setInsertionMode(tree.originalInsertionMode); 5551 tree.insertionMode.processComment(data); 5552 }; 5553 5554 modes.inTableText.processEOF = function(data) { 5555 this.flushCharacters(); 5556 tree.setInsertionMode(tree.originalInsertionMode); 5557 tree.insertionMode.processEOF(); 5558 }; 5559 5560 modes.inTableText.processCharacters = function(buffer) { 5561 var characters = buffer.takeRemaining(); 5562 characters = characters.replace(/\u0000/g, function(match, index){ 5563 tree.parseError("invalid-codepoint"); 5564 return ''; 5565 }); 5566 if (!characters) 5567 return; 5568 tree.pendingTableCharacters.push(characters); 5569 }; 5570 5571 modes.inTableText.processStartTag = function(name, attributes, selfClosing) { 5572 this.flushCharacters(); 5573 tree.setInsertionMode(tree.originalInsertionMode); 5574 tree.insertionMode.processStartTag(name, attributes, selfClosing); 5575 }; 5576 5577 modes.inTableText.processEndTag = function(name, attributes) { 5578 this.flushCharacters(); 5579 tree.setInsertionMode(tree.originalInsertionMode); 5580 tree.insertionMode.processEndTag(name, attributes); 5581 }; 5582 5583 modes.inTableBody = Object.create(modes.base); 5584 5585 modes.inTableBody.start_tag_handlers = { 5586 html: 'startTagHtml',
5587 tr: 'startTagTr', 5588 td: 'startTagTableCell', 5589 th: 'startTagTableCell', 5590 caption: 'startTagTableOther', 5591 col: 'startTagTableOther', 5592 colgroup: 'startTagTableOther', 5593 tbody: 'startTagTableOther', 5594 tfoot: 'startTagTableOther', 5595 thead: 'startTagTableOther', 5596 '-default': 'startTagOther' 5597 }; 5598 5599 modes.inTableBody.end_tag_handlers = { 5600 table: 'endTagTable', 5601 tbody: 'endTagTableRowGroup', 5602 tfoot: 'endTagTableRowGroup', 5603 thead: 'endTagTableRowGroup', 5604 body: 'endTagIgnore', 5605 caption: 'endTagIgnore', 5606 col: 'endTagIgnore', 5607 colgroup: 'endTagIgnore', 5608 html: 'endTagIgnore', 5609 td: 'endTagIgnore', 5610 th: 'endTagIgnore', 5611 tr: 'endTagIgnore', 5612 '-default': 'endTagOther' 5613 }; 5614 5615 modes.inTableBody.processCharacters = function(data) { 5616 modes.inTable.processCharacters(data); 5617 }; 5618 5619 modes.inTableBody.startTagTr = function(name, attributes) { 5620 tree.openElements.popUntilTableBodyScopeMarker(); 5621 tree.insertElement(name, attributes); 5622 tree.setInsertionMode('inRow'); 5623 }; 5624 5625 modes.inTableBody.startTagTableCell = function(name, attributes) { 5626 tree.parseError("unexpected-cell-in-table-body", {name: name}); 5627 this.startTagTr('tr', []); 5628 tree.insertionMode.processStartTag(name, attributes); 5629 }; 5630 5631 modes.inTableBody.startTagTableOther = function(name, attributes) { 5632 if (tree.openElements.inTableScope('tbody') || tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) { 5633 tree.openElements.popUntilTableBodyScopeMarker(); 5634 this.endTagTableRowGroup(tree.currentStackItem().localName); 5635 tree.insertionMode.processStartTag(name, attributes); 5636 } else { 5637 tree.parseError('unexpected-start-tag', {name: name}); 5638 } 5639 }; 5640 5641 modes.inTableBody.startTagOther = function(name, attributes) { 5642 modes.inTable.processStartTag(name, attributes); 5643 }; 5644 5645 modes.inTableBody.endTagTableRowGroup = function(name) { 5646 if (tree.openElements.inTableScope(name)) { 5647 tree.openElements.popUntilTableBodyScopeMarker(); 5648 tree.popElement(); 5649 tree.setInsertionMode('inTable'); 5650 } else { 5651 tree.parseError('unexpected-end-tag-in-table-body', {name: name}); 5652 } 5653 }; 5654 5655 modes.inTableBody.endTagTable = function(name) { 5656 if (tree.openElements.inTableScope('tbody') || tree.openElements.inTableScope('thead') || tree.openElements.inTableScope('tfoot')) { 5657 tree.openElements.popUntilTableBodyScopeMarker(); 5658 this.endTagTableRowGroup(tree.currentStackItem().localName); 5659 tree.insertionMode.processEndTag(name); 5660 } else { 5661 tree.parseError('unexpected-end-tag', {name: name}); 5662 } 5663 }; 5664 5665 modes.inTableBody.endTagIgnore = function(name) { 5666 tree.parseError("unexpected-end-tag-in-table-body", {name: name}); 5667 }; 5668 5669 modes.inTableBody.endTagOther = function(name) { 5670 modes.inTable.processEndTag(name); 5671 }; 5672 5673 modes.inSelect = Object.create(modes.base); 5674 5675 modes.inSelect.start_tag_handlers = { 5676 html: 'startTagHtml', 5677 option: 'startTagOption', 5678 optgroup: 'startTagOptgroup', 5679 select: 'startTagSelect', 5680 input: 'startTagInput', 5681 keygen: 'startTagInput', 5682 textarea: 'startTagInput', 5683 script: 'startTagScript', 5684 '-default': 'startTagOther' 5685 }; 5686 5687 modes.inSelect.end_tag_handlers = { 5688 option: 'endTagOption', 5689 optgroup: 'endTagOptgroup', 5690 select: 'endTagSelect', 5691 caption: 'endTagTableElements', 5692 table: 'endTagTableElements', 5693 tbody: 'endTagTableElements', 5694 tfoot: 'endTagTableElements', 5695 thead: 'endTagTableElements', 5696 tr: 'endTagTableElements', 5697 td: 'endTagTableElements', 5698 th: 'endTagTableElements', 5699 '-default': 'endTagOther' 5700 }; 5701 5702 modes.inSelect.processCharacters = function(buffer) { 5703 var data = buffer.takeRemaining(); 5704 data = data.replace(/\u0000/g, function(match, index){ 5705 tree.parseError("invalid-codepoint"); 5706 return ''; 5707 }); 5708 if (!data) 5709 return; 5710 tree.insertText(data); 5711 }; 5712 5713 modes.inSelect.startTagOption = function(name, attributes) { 5714 if (tree.currentStackItem().localName == 'option') 5715 tree.popElement(); 5716 tree.insertElement(name, attributes); 5717 }; 5718 5719 modes.inSelect.startTagOptgroup = function(name, attributes) { 5720 if (tree.currentStackItem().localName == 'option') 5721 tree.popElement(); 5722 if (tree.currentStackItem().localName == 'optgroup') 5723 tree.popElement(); 5724 tree.insertElement(name, attributes); 5725 }; 5726 5727 modes.inSelect.endTagOption = function(name) { 5728 if (tree.currentStackItem().localName !== 'option') { 5729 tree.parseError('unexpected-end-tag-in-select', {name: name}); 5730 return; 5731 } 5732 tree.popElement(); 5733 }; 5734 5735 modes.inSelect.endTagOptgroup = function(name) { 5736 if (tree.currentStackItem().localName == 'option' && tree.openElements.item(tree.openElements.length - 2).localName == 'optgroup') { 5737 tree.popElement(); 5738 } 5739 if (tree.currentStackItem().localName == 'optgroup') { 5740 tree.popElement(); 5741 } else { 5742 tree.parseError('unexpected-end-tag-in-select', {name: 'optgroup'}); 5743 } 5744 }; 5745 5746 modes.inSelect.startTagSelect = function(name) { 5747 tree.parseError("unexpected-select-in-select"); 5748 this.endTagSelect('select'); 5749 }; 5750 5751 modes.inSelect.endTagSelect = function(name) { 5752 if (tree.openElements.inTableScope('select')) { 5753 tree.openElements.popUntilPopped('select'); 5754 tree.resetInsertionMode(); 5755 } else { 5756 tree.parseError('unexpected-end-tag', {name: name}); 5757 } 5758 }; 5759 5760 modes.inSelect.startTagInput = function(name, attributes) { 5761 tree.parseError("unexpected-input-in-select"); 5762 if (tree.openElements.inSelectScope('select')) { 5763 this.endTagSelect('select'); 5764 tree.insertionMode.processStartTag(name, attributes); 5765 } 5766 }; 5767 5768 modes.inSelect.startTagScript = function(name, attributes) { 5769 modes.inHead.processStartTag(name, attributes); 5770 }; 5771 5772 modes.inSelect.endTagTableElements = function(name) { 5773 tree.parseError('unexpected-end-tag-in-select', {name: name}); 5774 if (tree.openElements.inTableScope(name)) { 5775 this.endTagSelect('select'); 5776 tree.insertionMode.processEndTag(name); 5777 } 5778 }; 5779 5780 modes.inSelect.startTagOther = function(name, attributes) { 5781 tree.parseError("unexpected-start-tag-in-select", {name: name}); 5782 }; 5783 5784 modes.inSelect.endTagOther = function(name) { 5785 tree.parseError('unexpected-end-tag-in-select', {name: name}); 5786 }; 5787 5788 modes.inSelectInTable = Object.create(modes.base); 5789 5790 modes.inSelectInTable.start_tag_handlers = { 5791 caption: 'startTagTable', 5792 table: 'startTagTable', 5793 tbody: 'startTagTable', 5794 tfoot: 'startTagTable', 5795 thead: 'startTagTable',
5796 tr: 'startTagTable', 5797 td: 'startTagTable', 5798 th: 'startTagTable', 5799 '-default': 'startTagOther' 5800 }; 5801 5802 modes.inSelectInTable.end_tag_handlers = { 5803 caption: 'endTagTable', 5804 table: 'endTagTable', 5805 tbody: 'endTagTable', 5806 tfoot: 'endTagTable', 5807 thead: 'endTagTable', 5808 tr: 'endTagTable', 5809 td: 'endTagTable', 5810 th: 'endTagTable', 5811 '-default': 'endTagOther' 5812 }; 5813 5814 modes.inSelectInTable.processCharacters = function(data) { 5815 modes.inSelect.processCharacters(data); 5816 }; 5817 5818 modes.inSelectInTable.startTagTable = function(name, attributes) { 5819 tree.parseError("unexpected-table-element-start-tag-in-select-in-table", {name: name}); 5820 this.endTagOther("select"); 5821 tree.insertionMode.processStartTag(name, attributes); 5822 }; 5823 5824 modes.inSelectInTable.startTagOther = function(name, attributes, selfClosing) { 5825 modes.inSelect.processStartTag(name, attributes, selfClosing); 5826 }; 5827 5828 modes.inSelectInTable.endTagTable = function(name) { 5829 tree.parseError("unexpected-table-element-end-tag-in-select-in-table", {name: name}); 5830 if (tree.openElements.inTableScope(name)) { 5831 this.endTagOther("select"); 5832 tree.insertionMode.processEndTag(name); 5833 } 5834 }; 5835 5836 modes.inSelectInTable.endTagOther = function(name) { 5837 modes.inSelect.processEndTag(name); 5838 }; 5839 5840 modes.inRow = Object.create(modes.base); 5841 5842 modes.inRow.start_tag_handlers = { 5843 html: 'startTagHtml', 5844 td: 'startTagTableCell', 5845 th: 'startTagTableCell', 5846 caption: 'startTagTableOther', 5847 col: 'startTagTableOther', 5848 colgroup: 'startTagTableOther', 5849 tbody: 'startTagTableOther', 5850 tfoot: 'startTagTableOther', 5851 thead: 'startTagTableOther', 5852 tr: 'startTagTableOther', 5853 '-default': 'startTagOther' 5854 }; 5855 5856 modes.inRow.end_tag_handlers = { 5857 tr: 'endTagTr', 5858 table: 'endTagTable', 5859 tbody: 'endTagTableRowGroup', 5860 tfoot: 'endTagTableRowGroup', 5861 thead: 'endTagTableRowGroup', 5862 body: 'endTagIgnore', 5863 caption: 'endTagIgnore', 5864 col: 'endTagIgnore', 5865 colgroup: 'endTagIgnore', 5866 html: 'endTagIgnore', 5867 td: 'endTagIgnore', 5868 th: 'endTagIgnore', 5869 '-default': 'endTagOther' 5870 }; 5871 5872 modes.inRow.processCharacters = function(data) { 5873 modes.inTable.processCharacters(data); 5874 }; 5875 5876 modes.inRow.startTagTableCell = function(name, attributes) { 5877 tree.openElements.popUntilTableRowScopeMarker(); 5878 tree.insertElement(name, attributes); 5879 tree.setInsertionMode('inCell'); 5880 tree.activeFormattingElements.push(Marker); 5881 }; 5882 5883 modes.inRow.startTagTableOther = function(name, attributes) { 5884 var ignoreEndTag = this.ignoreEndTagTr(); 5885 this.endTagTr('tr'); 5886 if (!ignoreEndTag) tree.insertionMode.processStartTag(name, attributes); 5887 }; 5888 5889 modes.inRow.startTagOther = function(name, attributes, selfClosing) { 5890 modes.inTable.processStartTag(name, attributes, selfClosing); 5891 }; 5892 5893 modes.inRow.endTagTr = function(name) { 5894 if (this.ignoreEndTagTr()) { 5895 assert.ok(tree.context); 5896 tree.parseError('unexpected-end-tag', {name: name}); 5897 } else { 5898 tree.openElements.popUntilTableRowScopeMarker(); 5899 tree.popElement(); 5900 tree.setInsertionMode('inTableBody'); 5901 } 5902 }; 5903 5904 modes.inRow.endTagTable = function(name) { 5905 var ignoreEndTag = this.ignoreEndTagTr(); 5906 this.endTagTr('tr'); 5907 if (!ignoreEndTag) tree.insertionMode.processEndTag(name); 5908 }; 5909 5910 modes.inRow.endTagTableRowGroup = function(name) { 5911 if (tree.openElements.inTableScope(name)) { 5912 this.endTagTr('tr'); 5913 tree.insertionMode.processEndTag(name); 5914 } else { 5915 tree.parseError('unexpected-end-tag', {name: name}); 5916 } 5917 }; 5918 5919 modes.inRow.endTagIgnore = function(name) { 5920 tree.parseError("unexpected-end-tag-in-table-row", {name: name}); 5921 }; 5922 5923 modes.inRow.endTagOther = function(name) { 5924 modes.inTable.processEndTag(name); 5925 }; 5926 5927 modes.inRow.ignoreEndTagTr = function() { 5928 return !tree.openElements.inTableScope('tr'); 5929 }; 5930 5931 modes.afterAfterFrameset = Object.create(modes.base); 5932 5933 modes.afterAfterFrameset.start_tag_handlers = { 5934 html: 'startTagHtml', 5935 noframes: 'startTagNoFrames', 5936 '-default': 'startTagOther' 5937 }; 5938 5939 modes.afterAfterFrameset.processEOF = function() {}; 5940 5941 modes.afterAfterFrameset.processComment = function(data) { 5942 tree.insertComment(data, tree.document); 5943 }; 5944 5945 modes.afterAfterFrameset.processCharacters = function(buffer) { 5946 var characters = buffer.takeRemaining(); 5947 var whitespace = ""; 5948 for (var i = 0; i < characters.length; i++) { 5949 var ch = characters[i]; 5950 if (isWhitespace(ch)) 5951 whitespace += ch; 5952 } 5953 if (whitespace) { 5954 tree.reconstructActiveFormattingElements(); 5955 tree.insertText(whitespace); 5956 } 5957 if (whitespace.length < characters.length) 5958 tree.parseError('expected-eof-but-got-char'); 5959 }; 5960 5961 modes.afterAfterFrameset.startTagNoFrames = function(name, attributes) { 5962 modes.inHead.processStartTag(name, attributes); 5963 }; 5964 5965 modes.afterAfterFrameset.startTagOther = function(name, attributes, selfClosing) { 5966 tree.parseError('expected-eof-but-got-start-tag', {name: name}); 5967 }; 5968 5969 modes.afterAfterFrameset.processEndTag = function(name, attributes) { 5970 tree.parseError('expected-eof-but-got-end-tag', {name: name}); 5971 }; 5972 5973 modes.text = Object.create(modes.base); 5974 5975 modes.text.start_tag_handlers = { 5976 '-default': 'startTagOther' 5977 }; 5978 5979 modes.text.end_tag_handlers = { 5980 script: 'endTagScript', 5981 '-default': 'endTagOther' 5982 }; 5983 5984 modes.text.processCharacters = function(buffer) { 5985 if (tree.shouldSkipLeadingNewline) { 5986 tree.shouldSkipLeadingNewline = false;
5987 buffer.skipAtMostOneLeadingNewline(); 5988 } 5989 var data = buffer.takeRemaining(); 5990 if (!data) 5991 return; 5992 tree.insertText(data); 5993 }; 5994 5995 modes.text.processEOF = function() { 5996 tree.parseError("expected-named-closing-tag-but-got-eof", 5997 {name: tree.currentStackItem().localName}); 5998 tree.openElements.pop(); 5999 tree.setInsertionMode(tree.originalInsertionMode); 6000 tree.insertionMode.processEOF(); 6001 }; 6002 6003 modes.text.startTagOther = function(name) { 6004 throw "Tried to process start tag " + name + " in RCDATA/RAWTEXT mode"; 6005 }; 6006 6007 modes.text.endTagScript = function(name) { 6008 var node = tree.openElements.pop(); 6009 assert.ok(node.localName == 'script'); 6010 tree.setInsertionMode(tree.originalInsertionMode); 6011 }; 6012 6013 modes.text.endTagOther = function(name) { 6014 tree.openElements.pop(); 6015 tree.setInsertionMode(tree.originalInsertionMode); 6016 }; 6017} 6018 6019TreeBuilder.prototype.setInsertionMode = function(name) { 6020 this.insertionMode = this.insertionModes[name]; 6021 this.insertionModeName = name; 6022}; 6023TreeBuilder.prototype.adoptionAgencyEndTag = function(name) { 6024 var outerIterationLimit = 8; 6025 var innerIterationLimit = 3; 6026 var formattingElement; 6027 6028 function isActiveFormattingElement(el) { 6029 return el === formattingElement; 6030 } 6031 6032 var outerLoopCounter = 0; 6033 6034 while (outerLoopCounter++ < outerIterationLimit) { 6035 formattingElement = this.elementInActiveFormattingElements(name); 6036 6037 if (!formattingElement || (this.openElements.contains(formattingElement) && !this.openElements.inScope(formattingElement.localName))) { 6038 this.parseError('adoption-agency-1.1', {name: name}); 6039 return false; 6040 } 6041 if (!this.openElements.contains(formattingElement)) { 6042 this.parseError('adoption-agency-1.2', {name: name}); 6043 this.removeElementFromActiveFormattingElements(formattingElement); 6044 return true; 6045 } 6046 if (!this.openElements.inScope(formattingElement.localName)) { 6047 this.parseError('adoption-agency-4.4', {name: name}); 6048 } 6049 6050 if (formattingElement != this.currentStackItem()) { 6051 this.parseError('adoption-agency-1.3', {name: name}); 6052 } 6053 var furthestBlock = this.openElements.furthestBlockForFormattingElement(formattingElement.node); 6054 6055 if (!furthestBlock) { 6056 this.openElements.remove_openElements_until(isActiveFormattingElement); 6057 this.removeElementFromActiveFormattingElements(formattingElement); 6058 return true; 6059 } 6060 6061 var afeIndex = this.openElements.elements.indexOf(formattingElement); 6062 var commonAncestor = this.openElements.item(afeIndex - 1); 6063 6064 var bookmark = this.activeFormattingElements.indexOf(formattingElement); 6065 6066 var node = furthestBlock; 6067 var lastNode = furthestBlock; 6068 var index = this.openElements.elements.indexOf(node); 6069 6070 var innerLoopCounter = 0; 6071 while (innerLoopCounter++ < innerIterationLimit) { 6072 index -= 1; 6073 node = this.openElements.item(index); 6074 if (this.activeFormattingElements.indexOf(node) < 0) { 6075 this.openElements.elements.splice(index, 1); 6076 continue; 6077 } 6078 if (node == formattingElement) 6079 break; 6080 6081 if (lastNode == furthestBlock) 6082 bookmark = this.activeFormattingElements.indexOf(node) + 1; 6083 6084 var clone = this.createElement(node.namespaceURI, node.localName, node.attributes); 6085 var newNode = new StackItem(node.namespaceURI, node.localName, node.attributes, clone); 6086 6087 this.activeFormattingElements[this.activeFormattingElements.indexOf(node)] = newNode; 6088 this.openElements.elements[this.openElements.elements.indexOf(node)] = newNode; 6089 6090 node = newNode; 6091 this.detachFromParent(lastNode.node); 6092 this.attachNode(lastNode.node, node.node); 6093 lastNode = node; 6094 } 6095 6096 this.detachFromParent(lastNode.node); 6097 if (commonAncestor.isFosterParenting()) { 6098 this.insertIntoFosterParent(lastNode.node); 6099 } else { 6100 this.attachNode(lastNode.node, commonAncestor.node); 6101 } 6102 6103 var clone = this.createElement("http://www.w3.org/1999/xhtml", formattingElement.localName, formattingElement.attributes); 6104 var formattingClone = new StackItem(formattingElement.namespaceURI, formattingElement.localName, formattingElement.attributes, clone); 6105 6106 this.reparentChildren(furthestBlock.node, clone); 6107 this.attachNode(clone, furthestBlock.node); 6108 6109 this.removeElementFromActiveFormattingElements(formattingElement); 6110 this.activeFormattingElements.splice(Math.min(bookmark, this.activeFormattingElements.length), 0, formattingClone); 6111 6112 this.openElements.remove(formattingElement); 6113 this.openElements.elements.splice(this.openElements.elements.indexOf(furthestBlock) + 1, 0, formattingClone); 6114 } 6115 6116 return true; 6117}; 6118 6119TreeBuilder.prototype.start = function() { 6120 throw "Not mplemented"; 6121}; 6122 6123TreeBuilder.prototype.startTokenization = function(tokenizer) { 6124 this.tokenizer = tokenizer; 6125 this.compatMode = "no quirks"; 6126 this.originalInsertionMode = "initial"; 6127 this.framesetOk = true; 6128 this.openElements = new ElementStack(); 6129 this.activeFormattingElements = []; 6130 this.start(); 6131 if (this.context) { 6132 switch(this.context) { 6133 case 'title': 6134 case 'textarea': 6135 this.tokenizer.setState(Tokenizer.RCDATA); 6136 break; 6137 case 'style': 6138 case 'xmp': 6139 case 'iframe': 6140 case 'noembed': 6141 case 'noframes': 6142 this.tokenizer.setState(Tokenizer.RAWTEXT); 6143 break; 6144 case 'script': 6145 this.tokenizer.setState(Tokenizer.SCRIPT_DATA); 6146 break; 6147 case 'noscript': 6148 if (this.scriptingEnabled) 6149 this.tokenizer.setState(Tokenizer.RAWTEXT); 6150 break; 6151 case 'plaintext': 6152 this.tokenizer.setState(Tokenizer.PLAINTEXT); 6153 break; 6154 } 6155 this.insertHtmlElement(); 6156 this.resetInsertionMode(); 6157 } else { 6158 this.setInsertionMode('initial'); 6159 } 6160}; 6161 6162TreeBuilder.prototype.processToken = function(token) { 6163 this.selfClosingFlagAcknowledged = false;
6164 6165 var currentNode = this.openElements.top || null; 6166 var insertionMode; 6167 if (!currentNode || !currentNode.isForeign() || 6168 (currentNode.isMathMLTextIntegrationPoint() && 6169 ((token.type == 'StartTag' && 6170 !(token.name in {mglyph:0, malignmark:0})) || 6171 (token.type === 'Characters')) 6172 ) || 6173 (currentNode.namespaceURI == "http://www.w3.org/1998/Math/MathML" && 6174 currentNode.localName == 'annotation-xml' && 6175 token.type == 'StartTag' && token.name == 'svg' 6176 ) || 6177 (currentNode.isHtmlIntegrationPoint() && 6178 token.type in {StartTag:0, Characters:0} 6179 ) || 6180 token.type == 'EOF' 6181 ) { 6182 insertionMode = this.insertionMode; 6183 } else { 6184 insertionMode = this.insertionModes.inForeignContent; 6185 } 6186 switch(token.type) { 6187 case 'Characters': 6188 var buffer = new CharacterBuffer(token.data); 6189 insertionMode.processCharacters(buffer); 6190 break; 6191 case 'Comment': 6192 insertionMode.processComment(token.data); 6193 break; 6194 case 'StartTag': 6195 insertionMode.processStartTag(token.name, token.data, token.selfClosing); 6196 break; 6197 case 'EndTag': 6198 insertionMode.processEndTag(token.name); 6199 break; 6200 case 'Doctype': 6201 insertionMode.processDoctype(token.name, token.publicId, token.systemId, token.forceQuirks); 6202 break; 6203 case 'EOF': 6204 insertionMode.processEOF(); 6205 break; 6206 } 6207}; 6208TreeBuilder.prototype.isCdataSectionAllowed = function() { 6209 return this.openElements.length > 0 && this.currentStackItem().isForeign(); 6210}; 6211TreeBuilder.prototype.isSelfClosingFlagAcknowledged = function() { 6212 return this.selfClosingFlagAcknowledged; 6213}; 6214 6215TreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) { 6216 throw new Error("Not implemented"); 6217}; 6218 6219TreeBuilder.prototype.attachNode = function(child, parent) { 6220 throw new Error("Not implemented"); 6221}; 6222 6223TreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) { 6224 throw new Error("Not implemented"); 6225}; 6226 6227TreeBuilder.prototype.detachFromParent = function(node) { 6228 throw new Error("Not implemented"); 6229}; 6230 6231TreeBuilder.prototype.addAttributesToElement = function(element, attributes) { 6232 throw new Error("Not implemented"); 6233}; 6234 6235TreeBuilder.prototype.insertHtmlElement = function(attributes) { 6236 var root = this.createElement("http://www.w3.org/1999/xhtml", 'html', attributes); 6237 this.attachNode(root, this.document); 6238 this.openElements.pushHtmlElement(new StackItem("http://www.w3.org/1999/xhtml", 'html', attributes, root)); 6239 return root; 6240}; 6241 6242TreeBuilder.prototype.insertHeadElement = function(attributes) { 6243 var element = this.createElement("http://www.w3.org/1999/xhtml", "head", attributes); 6244 this.head = new StackItem("http://www.w3.org/1999/xhtml", "head", attributes, element); 6245 this.attachNode(element, this.openElements.top.node); 6246 this.openElements.pushHeadElement(this.head); 6247 return element; 6248}; 6249 6250TreeBuilder.prototype.insertBodyElement = function(attributes) { 6251 var element = this.createElement("http://www.w3.org/1999/xhtml", "body", attributes); 6252 this.attachNode(element, this.openElements.top.node); 6253 this.openElements.pushBodyElement(new StackItem("http://www.w3.org/1999/xhtml", "body", attributes, element)); 6254 return element; 6255}; 6256 6257TreeBuilder.prototype.insertIntoFosterParent = function(node) { 6258 var tableIndex = this.openElements.findIndex('table'); 6259 var tableElement = this.openElements.item(tableIndex).node; 6260 if (tableIndex === 0) 6261 return this.attachNode(node, tableElement); 6262 this.attachNodeToFosterParent(node, tableElement, this.openElements.item(tableIndex - 1).node); 6263}; 6264 6265TreeBuilder.prototype.insertElement = function(name, attributes, namespaceURI, selfClosing) { 6266 if (!namespaceURI) 6267 namespaceURI = "http://www.w3.org/1999/xhtml"; 6268 var element = this.createElement(namespaceURI, name, attributes); 6269 if (this.shouldFosterParent()) 6270 this.insertIntoFosterParent(element); 6271 else 6272 this.attachNode(element, this.openElements.top.node); 6273 if (!selfClosing) 6274 this.openElements.push(new StackItem(namespaceURI, name, attributes, element)); 6275}; 6276 6277TreeBuilder.prototype.insertFormattingElement = function(name, attributes) { 6278 this.insertElement(name, attributes, "http://www.w3.org/1999/xhtml"); 6279 this.appendElementToActiveFormattingElements(this.currentStackItem()); 6280}; 6281 6282TreeBuilder.prototype.insertSelfClosingElement = function(name, attributes) { 6283 this.selfClosingFlagAcknowledged = true; 6284 this.insertElement(name, attributes, "http://www.w3.org/1999/xhtml", true); 6285}; 6286 6287TreeBuilder.prototype.insertForeignElement = function(name, attributes, namespaceURI, selfClosing) { 6288 if (selfClosing) 6289 this.selfClosingFlagAcknowledged = true; 6290 this.insertElement(name, attributes, namespaceURI, selfClosing); 6291}; 6292 6293TreeBuilder.prototype.insertComment = function(data, parent) { 6294 throw new Error("Not implemented"); 6295}; 6296 6297TreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) { 6298 throw new Error("Not implemented"); 6299}; 6300 6301TreeBuilder.prototype.insertText = function(data) { 6302 throw new Error("Not implemented"); 6303}; 6304TreeBuilder.prototype.currentStackItem = function() { 6305 return this.openElements.top; 6306}; 6307TreeBuilder.prototype.popElement = function() { 6308 return this.openElements.pop(); 6309}; 6310TreeBuilder.prototype.shouldFosterParent = function() { 6311 return this.redirectAttachToFosterParent && this.currentStackItem().isFosterParenting(); 6312}; 6313TreeBuilder.prototype.generateImpliedEndTags = function(exclude) { 6314 var name = this.openElements.top.localName; 6315 if (['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'].indexOf(name) != -1 && name != exclude) { 6316 this.popElement(); 6317 this.generateImpliedEndTags(exclude); 6318 } 6319}; 6320TreeBuilder.prototype.reconstructActiveFormattingElements = function() { 6321 if (this.activeFormattingElements.length === 0) 6322 return; 6323 var i = this.activeFormattingElements.length - 1; 6324 var entry = this.activeFormattingElements[i]; 6325 if (entry == Marker || this.openElements.contains(entry)) 6326 return; 6327 6328 while (entry != Marker && !this.openElements.contains(entry)) { 6329 i -= 1; 6330 entry = this.activeFormattingElements[i]; 6331 if (!entry) 6332 break; 6333 } 6334 6335 while (true) { 6336 i += 1; 6337 entry = this.activeFormattingElements[i]; 6338 this.insertElement(entry.localName, entry.attributes); 6339 var element = this.currentStackItem(); 6340 this.activeFormattingElements[i] = element; 6341 if (element == this.activeFormattingElements[this.activeFormattingElements.length -1]) 6342 break; 6343 } 6344 6345}; 6346TreeBuilder.prototype.ensureNoahsArkCondition = function(item) { 6347 var kNoahsArkCapacity = 3; 6348 if (this.activeFormattingElements.length < kNoahsArkCapacity) 6349 return; 6350 var candidates = []; 6351 var newItemAttributeCount = item.attributes.length; 6352 for (var i = this.activeFormattingElements.length - 1; i >= 0; i--) { 6353 var candidate = this.activeFormattingElements[i]; 6354 if (candidate === Marker) 6355 break; 6356 if (item.localName !== candidate.localName || item.namespaceURI !== candidate.namespaceURI) 6357 continue; 6358 if (candidate.attributes.length != newItemAttributeCount) 6359 continue; 6360 candidates.push(candidate); 6361 } 6362 if (candidates.length < kNoahsArkCapacity) 6363 return; 6364 6365 var remainingCandidates = []; 6366 var attributes = item.attributes; 6367 for (var i = 0; i < attributes.length; i++) { 6368 var attribute = attributes[i]; 6369 6370 for (var j = 0; j < candidates.length; j++) { 6371 var candidate = candidates[j]; 6372 var candidateAttribute = getAttribute(candidate, attribute.no
6372deName); 6373 if (candidateAttribute && candidateAttribute.nodeValue === attribute.nodeValue) 6374 remainingCandidates.push(candidate); 6375 } 6376 if (remainingCandidates.length < kNoahsArkCapacity) 6377 return; 6378 candidates = remainingCandidates; 6379 remainingCandidates = []; 6380 } 6381 for (var i = kNoahsArkCapacity - 1; i < candidates.length; i++) 6382 this.removeElementFromActiveFormattingElements(candidates[i]); 6383}; 6384TreeBuilder.prototype.appendElementToActiveFormattingElements = function(item) { 6385 this.ensureNoahsArkCondition(item); 6386 this.activeFormattingElements.push(item); 6387}; 6388TreeBuilder.prototype.removeElementFromActiveFormattingElements = function(item) { 6389 var index = this.activeFormattingElements.indexOf(item); 6390 if (index >= 0) 6391 this.activeFormattingElements.splice(index, 1); 6392}; 6393 6394TreeBuilder.prototype.elementInActiveFormattingElements = function(name) { 6395 var els = this.activeFormattingElements; 6396 for (var i = els.length - 1; i >= 0; i--) { 6397 if (els[i] == Marker) break; 6398 if (els[i].localName == name) return els[i]; 6399 } 6400 return false; 6401}; 6402 6403TreeBuilder.prototype.clearActiveFormattingElements = function() { 6404 while (!(this.activeFormattingElements.length === 0 || this.activeFormattingElements.pop() == Marker)); 6405}; 6406 6407TreeBuilder.prototype.reparentChildren = function(oldParent, newParent) { 6408 throw new Error("Not implemented"); 6409}; 6410TreeBuilder.prototype.setFragmentContext = function(context) { 6411 this.context = context; 6412}; 6413TreeBuilder.prototype.parseError = function(code, args) { 6414 if (!this.errorHandler) 6415 return; 6416 var message = formatMessage(messages[code], args); 6417 this.errorHandler.error(message, this.tokenizer._inputStream.location(), code); 6418}; 6419TreeBuilder.prototype.resetInsertionMode = function() { 6420 var last = false; 6421 var node = null; 6422 for (var i = this.openElements.length - 1; i >= 0; i--) { 6423 node = this.openElements.item(i); 6424 if (i === 0) { 6425 assert.ok(this.context); 6426 last = true; 6427 node = new StackItem("http://www.w3.org/1999/xhtml", this.context, [], null); 6428 } 6429 6430 if (node.namespaceURI === "http://www.w3.org/1999/xhtml") { 6431 if (node.localName === 'select') 6432 return this.setInsertionMode('inSelect'); 6433 if (node.localName === 'td' || node.localName === 'th') 6434 return this.setInsertionMode('inCell'); 6435 if (node.localName === 'tr') 6436 return this.setInsertionMode('inRow'); 6437 if (node.localName === 'tbody' || node.localName === 'thead' || node.localName === 'tfoot') 6438 return this.setInsertionMode('inTableBody'); 6439 if (node.localName === 'caption') 6440 return this.setInsertionMode('inCaption'); 6441 if (node.localName === 'colgroup') 6442 return this.setInsertionMode('inColumnGroup'); 6443 if (node.localName === 'table') 6444 return this.setInsertionMode('inTable'); 6445 if (node.localName === 'head' && !last) 6446 return this.setInsertionMode('inHead'); 6447 if (node.localName === 'body') 6448 return this.setInsertionMode('inBody'); 6449 if (node.localName === 'frameset') 6450 return this.setInsertionMode('inFrameset'); 6451 if (node.localName === 'html') 6452 if (!this.openElements.headElement) 6453 return this.setInsertionMode('beforeHead'); 6454 else 6455 return this.setInsertionMode('afterHead'); 6456 } 6457 6458 if (last) 6459 return this.setInsertionMode('inBody'); 6460 } 6461}; 6462 6463TreeBuilder.prototype.processGenericRCDATAStartTag = function(name, attributes) { 6464 this.insertElement(name, attributes); 6465 this.tokenizer.setState(Tokenizer.RCDATA); 6466 this.originalInsertionMode = this.insertionModeName; 6467 this.setInsertionMode('text'); 6468}; 6469 6470TreeBuilder.prototype.processGenericRawTextStartTag = function(name, attributes) { 6471 this.insertElement(name, attributes); 6472 this.tokenizer.setState(Tokenizer.RAWTEXT); 6473 this.originalInsertionMode = this.insertionModeName; 6474 this.setInsertionMode('text'); 6475}; 6476 6477TreeBuilder.prototype.adjustMathMLAttributes = function(attributes) { 6478 attributes.forEach(function(a) { 6479 a.namespaceURI = "http://www.w3.org/1998/Math/MathML"; 6480 if (constants.MATHMLAttributeMap[a.nodeName]) 6481 a.nodeName = constants.MATHMLAttributeMap[a.nodeName]; 6482 }); 6483 return attributes; 6484}; 6485 6486TreeBuilder.prototype.adjustSVGTagNameCase = function(name) { 6487 return constants.SVGTagMap[name] || name; 6488}; 6489 6490TreeBuilder.prototype.adjustSVGAttributes = function(attributes) {
6491 attributes.forEach(function(a) { 6492 a.namespaceURI = "http://www.w3.org/2000/svg"; 6493 if (constants.SVGAttributeMap[a.nodeName]) 6494 a.nodeName = constants.SVGAttributeMap[a.nodeName]; 6495 }); 6496 return attributes; 6497}; 6498 6499TreeBuilder.prototype.adjustForeignAttributes = function(attributes) { 6500 for (var i = 0; i < attributes.length; i++) { 6501 var attribute = attributes[i]; 6502 var adjusted = constants.ForeignAttributeMap[attribute.nodeName]; 6503 if (adjusted) { 6504 attribute.nodeName = adjusted.localName; 6505 attribute.prefix = adjusted.prefix; 6506 attribute.namespaceURI = adjusted.namespaceURI; 6507 } 6508 } 6509 return attributes; 6510}; 6511 6512function formatMessage(format, args) { 6513 return format.replace(new RegExp('{[0-9a-z-]+}', 'gi'), function(match) { 6514 return args[match.slice(1, -1)] || match; 6515 }); 6516} 6517 6518exports.TreeBuilder = TreeBuilder; 6519 6520}, 6521{"./ElementStack":1,"./StackItem":4,"./Tokenizer":5,"./constants":7,"./messages.json":8,"assert":13,"events":16}], 65227:[function(_dereq_,module,exports){ 6523exports.SVGTagMap = { 6524 "altglyph": "altGlyph", 6525 "altglyphdef": "altGlyphDef", 6526 "altglyphitem": "altGlyphItem", 6527 "animatecolor": "animateColor", 6528 "animatemotion": "animateMotion", 6529 "animatetransform": "animateTransform", 6530 "clippath": "clipPath", 6531 "feblend": "feBlend", 6532 "fecolormatrix": "feColorMatrix", 6533 "fecomponenttransfer": "feComponentTransfer", 6534 "fecomposite": "feComposite", 6535 "feconvolvematrix": "feConvolveMatrix", 6536 "fediffuselighting": "feDiffuseLighting", 6537 "fedisplacementmap": "feDisplacementMap", 6538 "fedistantlight": "feDistantLight", 6539 "feflood": "feFlood", 6540 "fefunca": "feFuncA", 6541 "fefuncb": "feFuncB", 6542 "fefuncg": "feFuncG", 6543 "fefuncr": "feFuncR", 6544 "fegaussianblur": "feGaussianBlur", 6545 "feimage": "feImage", 6546 "femerge": "feMerge", 6547 "femergenode": "feMergeNode", 6548 "femorphology": "feMorphology", 6549 "feoffset": "feOffset", 6550 "fepointlight": "fePointLight", 6551 "fespecularlighting": "feSpecularLighting", 6552 "fespotlight": "feSpotLight", 6553 "fetile": "feTile", 6554 "feturbulence": "feTurbulence", 6555 "foreignobject": "foreignObject", 6556 "glyphref": "glyphRef", 6557 "lineargradient": "linearGradient", 6558 "radialgradient": "radialGradient", 6559 "textpath": "textPath" 6560}; 6561 6562exports.MATHMLAttributeMap = { 6563 definitionurl: 'definitionURL' 6564}; 6565 6566exports.SVGAttributeMap = { 6567 attributename: 'attributeName', 6568 attributetype: 'attributeType', 6569 basefrequency: 'baseFrequency', 6570 baseprofile: 'baseProfile', 6571 calcmode: 'calcMode', 6572 clippathunits: 'clipPathUnits', 6573 contentscripttype: 'contentScriptType', 6574 contentstyletype: 'contentStyleType', 6575 diffuseconstant: 'diffuseConstant', 6576 edgemode: 'edgeMode', 6577 externalresourcesrequired: 'externalResourcesRequired', 6578 filterres: 'filterRes', 6579 filterunits: 'filterUnits', 6580 glyphref: 'glyphRef', 6581 gradienttransform: 'gradientTransform', 6582 gradientunits: 'gradientUnits', 6583 kernelmatrix: 'kernelMatrix', 6584 kernelunitlength: 'kernelUnitLength', 6585 keypoints: 'keyPoints', 6586 keysplines: 'keySplines', 6587 keytimes: 'keyTimes', 6588 lengthadjust: 'lengthAdjust', 6589 limitingconeangle: 'limitingConeAngle', 6590 markerheight: 'markerHeight', 6591 markerunits: 'markerUnits', 6592 markerwidth: 'markerWidth', 6593 maskcontentunits: 'maskContentUnits', 6594 maskunits: 'maskUnits', 6595 numoctaves: 'numOctaves', 6596 pathlength: 'pathLength', 6597 patterncontentunits: 'patternContentUnits', 6598 patterntransform: 'patternTransform', 6599 patternunits: 'patternUnits', 6600 pointsatx: 'pointsAtX', 6601 pointsaty: 'pointsAtY', 6602 pointsatz: 'pointsAtZ', 6603 preservealpha: 'preserveAlpha', 6604 preserveaspectratio: 'preserveAspectRatio', 6605 primitiveunits: 'primitiveUnits', 6606 refx: 'refX', 6607 refy: 'refY', 6608 repeatcount: 'repeatCount', 6609 repeatdur: 'repeatDur', 6610 requiredextensions: 'requiredExtensions', 6611 requiredfeatures: 'requiredFeatures', 6612 specularconstant: 'specularConstant', 6613 specularexponent: 'specularExponent', 6614 spreadmethod: 'spreadMethod', 6615 startoffset: 'startOffset', 6616 stddeviation: 'stdDeviation', 6617 stitchtiles: 'stitchTiles', 6618 surfacescale: 'surfaceScale', 6619 systemlanguage: 'systemLanguage', 6620 tablevalues: 'tableValues', 6621 targetx: 'targetX', 6622 targety: 'targetY', 6623 textlength: 'textLength', 6624 viewbox: 'viewBox', 6625 viewtarget: 'viewTarget', 6626 xchannelselector: 'xChannelSelector', 6627 ychannelselector: 'yChannelSelector', 6628 zoomandpan: 'zoomAndPan' 6629}; 6630 6631exports.ForeignAttributeMap = { 6632 "xlink:actuate": {prefix: "xlink", localName: "actuate", namespaceURI: "http://www.w3.org/1999/xlink"}, 6633 "xlink:arcrole": {prefix: "xlink", localName: "arcrole", namespaceURI: "http://www.w3.org/1999/xlink"}, 6634 "xlink:href": {prefix: "xlink", localName: "href", namespaceURI: "http://www.w3.org/1999/xlink"}, 6635 "xlink:role": {prefix: "xlink", localName: "role", namespaceURI: "http://www.w3.org/1999/xlink"}, 6636 "xlink:show": {prefix: "xlink", localName: "show", namespaceURI: "http://www.w3.org/1999/xlink"}, 6637 "xlink:title": {prefix: "xlink", localName: "title", namespaceURI: "http://www.w3.org/1999/xlink"}, 6638 "xlink:type": {prefix: "xlink", localName: "title", namespaceURI: "http://www.w3.org/1999/xlink"}, 6639 "xml:base": {prefix: "xml", localName: "base", namespaceURI: "http://www.w3.org/XML/1998/namespace"}, 6640 "xml:lang": {prefix: "xml", localName: "lang", namespaceURI: "http://www.w3.org/XML/1998/namespace"}, 6641 "xml:space": {prefix: "xml", localName: "space", namespaceURI: "http://www.w3.org/XML/1998/namespace"}, 6642 "xmlns": {prefix: null, localName: "xmlns", namespaceURI: "http://www.w3.org/2000/xmlns/"}, 6643 "xmlns:xlink": {prefix: "xmlns", localName: "xlink", namespaceURI: "http://www.w3.org/2000/xmlns/"}, 6644}; 6645}, 6646{}], 66478:[function(_dereq_,module,exports){ 6648module.exports={ 6649 "null-character": 6650 "Null character in input stream, replaced with U+FFFD.",
6651 "invalid-codepoint": 6652 "Invalid codepoint in stream", 6653 "incorrectly-placed-solidus": 6654 "Solidus (/) incorrectly placed in tag.", 6655 "incorrect-cr-newline-entity": 6656 "Incorrect CR newline entity, replaced with LF.", 6657 "illegal-windows-1252-entity": 6658 "Entity used with illegal number (windows-1252 reference).", 6659 "cant-convert-numeric-entity": 6660 "Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).", 6661 "invalid-numeric-entity-replaced": 6662 "Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.", 6663 "numeric-entity-without-semicolon": 6664 "Numeric entity didn't end with ';'.", 6665 "expected-numeric-entity-but-got-eof": 6666 "Numeric entity expected. Got end of file instead.", 6667 "expected-numeric-entity": 6668 "Numeric entity expected but none found.", 6669 "named-entity-without-semicolon": 6670 "Named entity didn't end with ';'.", 6671 "expected-named-entity": 6672 "Named entity expected. Got none.", 6673 "attributes-in-end-tag": 6674 "End tag contains unexpected attributes.", 6675 "self-closing-flag-on-end-tag": 6676 "End tag contains unexpected self-closing flag.", 6677 "bare-less-than-sign-at-eof": 6678 "End of file after <.", 6679 "expected-tag-name-but-got-right-bracket": 6680 "Expected tag name. Got '>' instead.", 6681 "expected-tag-name-but-got-question-mark": 6682 "Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)", 6683 "expected-tag-name": 6684 "Expected tag name. Got something else instead.", 6685 "expected-closing-tag-but-got-right-bracket": 6686 "Expected closing tag. Got '>' instead. Ignoring '</>'.", 6687 "expected-closing-tag-but-got-eof": 6688 "Expected closing tag. Unexpected end of file.", 6689 "expected-closing-tag-but-got-char": 6690 "Expected closing tag. Unexpected character '{data}' found.", 6691 "eof-in-tag-name": 6692 "Unexpected end of file in the tag name.", 6693 "expected-attribute-name-but-got-eof": 6694 "Unexpected end of file. Expected attribute name instead.", 6695 "eof-in-attribute-name": 6696 "Unexpected end of file in attribute name.", 6697 "invalid-character-in-attribute-name": 6698 "Invalid character in attribute name.", 6699 "duplicate-attribute": 6700 "Dropped duplicate attribute '{name}' on tag.", 6701 "expected-end-of-tag-but-got-eof": 6702 "Unexpected end of file. Expected = or end of tag.", 6703 "expected-attribute-value-but-got-eof": 6704 "Unexpected end of file. Expected attribute value.", 6705 "expected-attribute-value-but-got-right-bracket": 6706 "Expected attribute value. Got '>' instead.", 6707 "unexpected-character-in-unquoted-attribute-value": 6708 "Unexpected character in unquoted attribute", 6709 "invalid-character-after-attribute-name": 6710 "Unexpected character after attribute name.", 6711 "unexpected-character-after-attribute-value": 6712 "Unexpected character after attribute value.", 6713 "eof-in-attribute-value-double-quote": 6714 "Unexpected end of file in attribute value (\").", 6715 "eof-in-attribute-value-single-quote": 6716 "Unexpected end of file in attribute value (').", 6717 "eof-in-attribute-value-no-quotes": 6718 "Unexpected end of file in attribute value.", 6719 "eof-after-attribute-value": 6720 "Unexpected end of file after attribute value.", 6721 "unexpected-eof-after-solidus-in-tag": 6722 "Unexpected end of file in tag. Expected >.", 6723 "unexpected-character-after-solidus-in-tag": 6724 "Unexpected character after / in tag. Expected >.", 6725 "expected-dashes-or-doctype": 6726 "Expected '--' or 'DOCTYPE'. Not found.", 6727 "unexpected-bang-after-double-dash-in-comment": 6728 "Unexpected ! after -- in comment.", 6729 "incorrect-comment": 6730 "Incorrect comment.", 6731 "eof-in-comment": 6732 "Unexpected end of file in comment.", 6733 "eof-in-comment-end-dash": 6734 "Unexpected end of file in comment (-).", 6735 "unexpected-dash-after-double-dash-in-comment": 6736 "Unexpected '-' after '--' found in comment.", 6737 "eof-in-comment-double-dash": 6738 "Unexpected end of file in comment (--).", 6739 "eof-in-comment-end-bang-state": 6740 "Unexpected end of file in comment.", 6741 "unexpected-char-in-comment": 6742 "Unexpected character in comment found.", 6743 "need-space-after-doctype": 6744 "No space after literal string 'DOCTYPE'.", 6745 "expected-doctype-name-but-got-right-bracket": 6746 "Unexpected > character. Expected DOCTYPE name.", 6747 "expected-doctype-name-but-got-eof": 6748 "Unexpected end of file. Expected DOCTYPE name.", 6749 "eof-in-doctype-name": 6750 "Unexpected end of file in DOCTYPE name.", 6751 "eof-in-doctype": 6752 "Unexpected end of file in DOCTYPE.", 6753 "expected-space-or-right-bracket-in-doctype": 6754 "Expected space or '>'. Got '{data}'.", 6755 "unexpected-end-of-doctype": 6756 "Unexpected end of DOCTYPE.", 6757 "unexpected-char-in-doctype": 6758 "Unexpected character in DOCTYPE.", 6759 "eof-in-bogus-doctype": 6760 "Unexpected end of file in bogus doctype.", 6761 "eof-in-innerhtml": 6762 "Unexpected EOF in inner html mode.", 6763 "unexpected-doctype": 6764 "Unexpected DOCTYPE. Ignored.", 6765 "non-html-root": 6766 "html needs to be the first start tag.", 6767 "expected-doctype-but-got-eof": 6768 "Unexpected End of file. Expected DOCTYPE.", 6769 "unknown-doctype": 6770 "Erroneous DOCTYPE. Expected <!DOCTYPE html>.", 6771 "quirky-doctype": 6772 "Quirky doctype. Expected <!DOCTYPE html>.", 6773 "almost-standards-doctype": 6774 "Almost standards mode doctype. Expected <!DOCTYPE html>.", 6775 "obsolete-doctype": 6776 "Obsolete doctype. Expected <!DOCTYPE html>.", 6777 "expected-doctype-but-got-chars": 6778 "Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.", 6779 "expected-doctype-but-got-start-tag": 6780 "Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.", 6781 "expected-doctype-but-got-end-tag": 6782 "End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.", 6783 "end-tag-after-implied-root": 6784 "Unexpected end tag ({name}) after the (implied) root element.", 6785 "expected-named-closing-tag-but-got-eof": 6786 "Unexpected end of file. Expected end tag ({name}).", 6787 "two-heads-are-not-better-than-one":
6788 "Unexpected start tag head in existing head. Ignored.", 6789 "unexpected-end-tag": 6790 "Unexpected end tag ({name}). Ignored.", 6791 "unexpected-implied-end-tag": 6792 "End tag {name} implied, but there were open elements.", 6793 "unexpected-start-tag-out-of-my-head": 6794 "Unexpected start tag ({name}) that can be in head. Moved.", 6795 "unexpected-start-tag": 6796 "Unexpected start tag ({name}).", 6797 "missing-end-tag": 6798 "Missing end tag ({name}).", 6799 "missing-end-tags": 6800 "Missing end tags ({name}).", 6801 "unexpected-start-tag-implies-end-tag": 6802 "Unexpected start tag ({startName}) implies end tag ({endName}).", 6803 "unexpected-start-tag-treated-as": 6804 "Unexpected start tag ({originalName}). Treated as {newName}.", 6805 "deprecated-tag": 6806 "Unexpected start tag {name}. Don't use it!", 6807 "unexpected-start-tag-ignored": 6808 "Unexpected start tag {name}. Ignored.", 6809 "expected-one-end-tag-but-got-another": 6810 "Unexpected end tag ({gotName}). Missing end tag ({expectedName}).", 6811 "end-tag-too-early": 6812 "End tag ({name}) seen too early. Expected other end tag.", 6813 "end-tag-too-early-named": 6814 "Unexpected end tag ({gotName}). Expected end tag ({expectedName}.", 6815 "end-tag-too-early-ignored": 6816 "End tag ({name}) seen too early. Ignored.", 6817 "adoption-agency-1.1": 6818 "End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.", 6819 "adoption-agency-1.2": 6820 "End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.", 6821 "adoption-agency-1.3": 6822 "End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.", 6823 "adoption-agency-4.4": 6824 "End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.", 6825 "unexpected-end-tag-treated-as": 6826 "Unexpected end tag ({originalName}). Treated as {newName}.", 6827 "no-end-tag": 6828 "This element ({name}) has no end tag.", 6829 "unexpected-implied-end-tag-in-table": 6830 "Unexpected implied end tag ({name}) in the table phase.", 6831 "unexpected-implied-end-tag-in-table-body": 6832 "Unexpected implied end tag ({name}) in the table body phase.", 6833 "unexpected-char-implies-table-voodoo": 6834 "Unexpected non-space characters in table context caused voodoo mode.", 6835 "unexpected-hidden-input-in-table": 6836 "Unexpected input with type hidden in table context.", 6837 "unexpected-form-in-table": 6838 "Unexpected form in table context.", 6839 "unexpected-start-tag-implies-table-voodoo": 6840 "Unexpected start tag ({name}) in table context caused voodoo mode.", 6841 "unexpected-end-tag-implies-table-voodoo": 6842 "Unexpected end tag ({name}) in table context caused voodoo mode.", 6843 "unexpected-cell-in-table-body": 6844 "Unexpected table cell start tag ({name}) in the table body phase.", 6845 "unexpected-cell-end-tag": 6846 "Got table cell end tag ({name}) while required end tags are missing.", 6847 "unexpected-end-tag-in-table-body": 6848 "Unexpected end tag ({name}) in the table body phase. Ignored.", 6849 "unexpected-implied-end-tag-in-table-row": 6850 "Unexpected implied end tag ({name}) in the table row phase.", 6851 "unexpected-end-tag-in-table-row": 6852 "Unexpected end tag ({name}) in the table row phase. Ignored.", 6853 "unexpected-select-in-select": 6854 "Unexpected select start tag in the select phase treated as select end tag.", 6855 "unexpected-input-in-select": 6856 "Unexpected input start tag in the select phase.", 6857 "unexpected-start-tag-in-select": 6858 "Unexpected start tag token ({name}) in the select phase. Ignored.", 6859 "unexpected-end-tag-in-select": 6860 "Unexpected end tag ({name}) in the select phase. Ignored.", 6861 "unexpected-table-element-start-tag-in-select-in-table": 6862 "Unexpected table element start tag ({name}) in the select in table phase.", 6863 "unexpected-table-element-end-tag-in-select-in-table": 6864 "Unexpected table element end tag ({name}) in the select in table phase.", 6865 "unexpected-char-after-body": 6866 "Unexpected non-space characters in the after body phase.", 6867 "unexpected-start-tag-after-body": 6868 "Unexpected start tag token ({name}) in the after body phase.", 6869 "unexpected-end-tag-after-body": 6870 "Unexpected end tag token ({name}) in the after body phase.", 6871 "unexpected-char-in-frameset": 6872 "Unepxected characters in the frameset phase. Characters ignored.", 6873 "unexpected-start-tag-in-frameset":
6874 "Unexpected start tag token ({name}) in the frameset phase. Ignored.", 6875 "unexpected-frameset-in-frameset-innerhtml": 6876 "Unexpected end tag token (frameset in the frameset phase (innerHTML).", 6877 "unexpected-end-tag-in-frameset": 6878 "Unexpected end tag token ({name}) in the frameset phase. Ignored.", 6879 "unexpected-char-after-frameset": 6880 "Unexpected non-space characters in the after frameset phase. Ignored.", 6881 "unexpected-start-tag-after-frameset": 6882 "Unexpected start tag ({name}) in the after frameset phase. Ignored.", 6883 "unexpected-end-tag-after-frameset": 6884 "Unexpected end tag ({name}) in the after frameset phase. Ignored.", 6885 "expected-eof-but-got-char": 6886 "Unexpected non-space characters. Expected end of file.", 6887 "expected-eof-but-got-start-tag": 6888 "Unexpected start tag ({name}). Expected end of file.", 6889 "expected-eof-but-got-end-tag": 6890 "Unexpected end tag ({name}). Expected end of file.", 6891 "unexpected-end-table-in-caption": 6892 "Unexpected end table tag in caption. Generates implied end caption.", 6893 "end-html-in-innerhtml": 6894 "Unexpected html end tag in inner html mode.", 6895 "eof-in-table": 6896 "Unexpected end of file. Expected table content.", 6897 "eof-in-script": 6898 "Unexpected end of file. Expected script content.", 6899 "non-void-element-with-trailing-solidus": 6900 "Trailing solidus not allowed on element {name}.", 6901 "unexpected-html-element-in-foreign-content": 6902 "HTML start tag \"{name}\" in a foreign namespace context.", 6903 "unexpected-start-tag-in-table": 6904 "Unexpected {name}. Expected table content." 6905} 6906}, 6907{}], 69089:[function(_dereq_,module,exports){ 6909var SAXTreeBuilder = _dereq_('./SAXTreeBuilder').SAXTreeBuilder; 6910var Tokenizer = _dereq_('../Tokenizer').Tokenizer; 6911var TreeParser = _dereq_('./TreeParser').TreeParser; 6912 6913function SAXParser() { 6914 this.contentHandler = null; 6915 this._errorHandler = null; 6916 this._treeBuilder = new SAXTreeBuilder(); 6917 this._tokenizer = new Tokenizer(this._treeBuilder); 6918 this._scriptingEnabled = false; 6919} 6920 6921SAXParser.prototype.parse = function(source) { 6922 this._tokenizer.tokenize(source); 6923 var document = this._treeBuilder.document; 6924 if (document) { 6925 new TreeParser(this.contentHandler).parse(document); 6926 } 6927}; 6928 6929SAXParser.prototype.parseFragment = function(source, context) { 6930 this._treeBuilder.setFragmentContext(context); 6931 this._tokenizer.tokenize(source); 6932 var fragment = this._treeBuilder.getFragment(); 6933 if (fragment) { 6934 new TreeParser(this.contentHandler).parse(fragment); 6935 } 6936}; 6937 6938Object.defineProperty(SAXParser.prototype, 'scriptingEnabled', { 6939 get: function() { 6940 return this._scriptingEnabled; 6941 }, 6942 set: function(value) { 6943 this._scriptingEnabled = value; 6944 this._treeBuilder.scriptingEnabled = value; 6945 } 6946}); 6947 6948Object.defineProperty(SAXParser.prototype, 'errorHandler', { 6949 get: function() { 6950 return this._errorHandler; 6951 }, 6952 set: function(value) { 6953 this._errorHandler = value; 6954 this._treeBuilder.errorHandler = value; 6955 } 6956}); 6957 6958exports.SAXParser = SAXParser; 6959 6960}, 6961{"../Tokenizer":5,"./SAXTreeBuilder":10,"./TreeParser":11}], 696210:[function(_dereq_,module,exports){ 6963var util = _dereq_('util'); 6964var TreeBuilder = _dereq_('../TreeBuilder').TreeBuilder; 6965 6966function SAXTreeBuilder() { 6967 TreeBuilder.call(this); 6968} 6969 6970util.inherits(SAXTreeBuilder, TreeBuilder); 6971 6972SAXTreeBuilder.prototype.start = function(tokenizer) { 6973 this.document = new Document(this.tokenizer); 6974}; 6975 6976SAXTreeBuilder.prototype.end = function() { 6977 this.document.endLocator = this.tokenizer; 6978}; 6979 6980SAXTreeBuilder.prototype.insertDoctype = function(name, publicId, systemId) { 6981 var doctype = new DTD(this.tokenizer, name, publicId, systemId); 6982 doctype.endLocator = this.tokenizer; 6983 this.document.appendChild(doctype); 6984}; 6985 6986SAXTreeBuilder.prototype.createElement = function(namespaceURI, localName, attributes) { 6987 var element = new Element(this.tokenizer, namespaceURI, localName, localName, attributes || []); 6988 return element; 6989}; 6990 6991SAXTreeBuilder.prototype.insertComment = function(data, parent) { 6992 if (!parent) 6993 parent = this.currentStackItem(); 6994 var comment = new Comment(this.tokenizer, data); 6995 parent.appendChild(comment); 6996}; 6997 6998SAXTreeBuilder.prototype.appendCharacters = function(parent, data) { 6999 var text = new Characters(this.tokenizer, data); 7000 parent.appendChild(text); 7001}; 7002 7003SAXTreeBuilder.prototype.insertText = function(data) { 7004 if (this.redirectAttachToFosterParent && this.openElements.top.isFosterParenting()) { 7005 var tableIndex = this.openElements.findIndex('table'); 7006 var tableItem = this.openElements.item(tableIndex); 7007 var table = tableItem.node;
7008 if (tableIndex === 0) { 7009 return this.appendCharacters(table, data); 7010 } 7011 var text = new Characters(this.tokenizer, data); 7012 var parent = table.parentNode; 7013 if (parent) { 7014 parent.insertBetween(text, table.previousSibling, table); 7015 return; 7016 } 7017 var stackParent = this.openElements.item(tableIndex - 1).node; 7018 stackParent.appendChild(text); 7019 return; 7020 } 7021 this.appendCharacters(this.currentStackItem().node, data); 7022}; 7023 7024SAXTreeBuilder.prototype.attachNode = function(node, parent) { 7025 parent.appendChild(node); 7026}; 7027 7028SAXTreeBuilder.prototype.attachNodeToFosterParent = function(child, table, stackParent) { 7029 var parent = table.parentNode; 7030 if (parent) 7031 parent.insertBetween(child, table.previousSibling, table); 7032 else 7033 stackParent.appendChild(child); 7034}; 7035 7036SAXTreeBuilder.prototype.detachFromParent = function(element) { 7037 element.detach(); 7038}; 7039 7040SAXTreeBuilder.prototype.reparentChildren = function(oldParent, newParent) { 7041 newParent.appendChildren(oldParent.firstChild); 7042}; 7043 7044SAXTreeBuilder.prototype.getFragment = function() { 7045 var fragment = new DocumentFragment(); 7046 this.reparentChildren(this.openElements.rootNode, fragment); 7047 return fragment; 7048}; 7049 7050function getAttribute(node, name) { 7051 for (var i = 0; i < node.attributes.length; i++) { 7052 var attribute = node.attributes[i]; 7053 if (attribute.nodeName === name) 7054 return attribute.nodeValue; 7055 } 7056} 7057 7058SAXTreeBuilder.prototype.addAttributesToElement = function(element, attributes) { 7059 for (var i = 0; i < attributes.length; i++) { 7060 var attribute = attributes[i]; 7061 if (!getAttribute(element, attribute.nodeName)) 7062 element.attributes.push(attribute); 7063 } 7064}; 7065 7066var NodeType = { 7067 CDATA: 1, 7068 CHARACTERS: 2, 7069 COMMENT: 3, 7070 DOCUMENT: 4, 7071 DOCUMENT_FRAGMENT: 5, 7072 DTD: 6, 7073 ELEMENT: 7, 7074 ENTITY: 8, 7075 IGNORABLE_WHITESPACE: 9, 7076 PROCESSING_INSTRUCTION: 10, 7077 SKIPPED_ENTITY: 11 7078}; 7079function Node(locator) { 7080 if (!locator) { 7081 this.columnNumber = -1; 7082 this.lineNumber = -1; 7083 } else { 7084 this.columnNumber = locator.columnNumber; 7085 this.lineNumber = locator.lineNumber; 7086 } 7087 this.parentNode = null; 7088 this.nextSibling = null; 7089 this.firstChild = null; 7090} 7091Node.prototype.visit = function(treeParser) { 7092 throw new Error("Not Implemented"); 7093}; 7094Node.prototype.revisit = function(treeParser) { 7095 return; 7096}; 7097Node.prototype.detach = function() { 7098 if (this.parentNode !== null) { 7099 this.parentNode.removeChild(this); 7100 this.parentNode = null; 7101 } 7102}; 7103 7104Object.defineProperty(Node.prototype, 'previousSibling', { 7105 get: function() { 7106 var prev = null; 7107 var next = this.parentNode.firstChild; 7108 for(;;) { 7109 if (this == next) { 7110 return prev; 7111 } 7112 prev = next; 7113 next = next.nextSibling; 7114 } 7115 } 7116}); 7117 7118 7119function ParentNode(locator) { 7120 Node.call(this, locator); 7121 this.lastChild = null; 7122 this._endLocator = null; 7123} 7124 7125ParentNode.prototype = Object.create(Node.prototype); 7126ParentNode.prototype.insertBefore = function(child, sibling) { 7127 if (!sibling) { 7128 return this.appendChild(child); 7129 } 7130 child.detach(); 7131 child.parentNode = this; 7132 if (this.firstChild == sibling) { 7133 child.nextSibling = sibling; 7134 this.firstChild = child; 7135 } else { 7136 var prev = this.firstChild; 7137 var next = this.firstChild.nextSibling; 7138 while (next != sibling) { 7139 prev = next; 7140 next = next.nextSibling; 7141 } 7142 prev.nextSibling = child; 7143 child.nextSibling = next; 7144 } 7145 return child; 7146}; 7147 7148ParentNode.prototype.insertBetween = function(child, prev, next) { 7149 if (!next) { 7150 return this.appendChild(child); 7151 } 7152 child.detach(); 7153 child.parentNode = this; 7154 child.nextSibling = next; 7155 if (!prev) { 7156 firstChild = child; 7157 } else { 7158 prev.nextSibling = child; 7159 } 7160 return child; 7161}; 7162ParentNode.prototype.appendChild = function(child) { 7163 child.detach(); 7164 child.parentNode = this; 7165 if (!this.firstChild) { 7166 this.firstChild = child; 7167 } else { 7168 this.lastChild.nextSibling = child; 7169 } 7170 this.lastChild = child; 7171 return child; 7172}; 7173ParentNode.prototype.appendChildren = function(parent) { 7174 var child = parent.firstChild; 7175 if (!child) { 7176 return; 7177 } 7178 var another = parent; 7179 if (!this.firstChild) { 7180 this.firstChild = child; 7181 } else { 7182 this.lastChild.nextSibling = child; 7183 } 7184 this.lastChild = another.lastChild; 7185 do { 7186 child.parentNode = this; 7187 } while ((child = child.nextSibling)); 7188 another.firstChild = null; 7189 another.lastChild = null; 7190}; 7191ParentNode.prototype.removeChild = function(node) { 7192 if (this.firstChild == node) { 7193 this.firstChild = node.nextSibling; 7194 if (this.lastChild == node) { 7195 this.lastChild = null; 7196 } 7197 } else { 7198 var prev = this.firstChild; 7199 var next = this.firstChild.nextSibling; 7200 while (next != node) { 7201 prev = next; 7202 next = next.nextSibling; 7203 } 7204 prev.nextSibling = node.nextSibling; 7205 if (this.lastChild == node) { 7206 this.lastChild = prev; 7207 } 7208 } 7209 node.parentNode = null; 7210 return node; 7211}; 7212 7213Object.defineProperty(ParentNode.prototype, 'endLocator', { 7214 get: function() { 7215 return this._endLocator; 7216 },
7217 set: function(endLocator) { 7218 this._endLocator = { 7219 lineNumber: endLocator.lineNumber, 7220 columnNumber: endLocator.columnNumber 7221 }; 7222 } 7223}); 7224function Document (locator) { 7225 ParentNode.call(this, locator); 7226 this.nodeType = NodeType.DOCUMENT; 7227} 7228 7229Document.prototype = Object.create(ParentNode.prototype); 7230Document.prototype.visit = function(treeParser) { 7231 treeParser.startDocument(this); 7232}; 7233Document.prototype.revisit = function(treeParser) { 7234 treeParser.endDocument(this.endLocator); 7235}; 7236function DocumentFragment() { 7237 ParentNode.call(this, new Locator()); 7238 this.nodeType = NodeType.DOCUMENT_FRAGMENT; 7239} 7240 7241DocumentFragment.prototype = Object.create(ParentNode.prototype); 7242DocumentFragment.prototype.visit = function(treeParser) { 7243}; 7244function Element(locator, uri, localName, qName, atts, prefixMappings) { 7245 ParentNode.call(this, locator); 7246 this.uri = uri; 7247 this.localName = localName; 7248 this.qName = qName; 7249 this.attributes = atts; 7250 this.prefixMappings = prefixMappings; 7251 this.nodeType = NodeType.ELEMENT; 7252} 7253 7254Element.prototype = Object.create(ParentNode.prototype); 7255Element.prototype.visit = function(treeParser) { 7256 if (this.prefixMappings) { 7257 for (var key in prefixMappings) { 7258 var mapping = prefixMappings[key]; 7259 treeParser.startPrefixMapping(mapping.getPrefix(), 7260 mapping.getUri(), this); 7261 } 7262 } 7263 treeParser.startElement(this.uri, this.localName, this.qName, this.attributes, this); 7264}; 7265Element.prototype.revisit = function(treeParser) { 7266 treeParser.endElement(this.uri, this.localName, this.qName, this.endLocator); 7267 if (this.prefixMappings) { 7268 for (var key in prefixMappings) { 7269 var mapping = prefixMappings[key]; 7270 treeParser.endPrefixMapping(mapping.getPrefix(), this.endLocator); 7271 } 7272 } 7273}; 7274function Characters(locator, data){ 7275 Node.call(this, locator); 7276 this.data = data; 7277 this.nodeType = NodeType.CHARACTERS; 7278} 7279 7280Characters.prototype = Object.create(Node.prototype); 7281Characters.prototype.visit = function (treeParser) { 7282 treeParser.characters(this.data, 0, this.data.length, this); 7283}; 7284function IgnorableWhitespace(locator, data) { 7285 Node.call(this, locator); 7286 this.data = data; 7287 this.nodeType = NodeType.IGNORABLE_WHITESPACE; 7288} 7289 7290IgnorableWhitespace.prototype = Object.create(Node.prototype); 7291IgnorableWhitespace.prototype.visit = function(treeParser) { 7292 treeParser.ignorableWhitespace(this.data, 0, this.data.length, this); 7293}; 7294function Comment(locator, data) { 7295 Node.call(this, locator); 7296 this.data = data; 7297 this.nodeType = NodeType.COMMENT; 7298} 7299 7300Comment.prototype = Object.create(Node.prototype); 7301Comment.prototype.visit = function(treeParser) { 7302 treeParser.comment(this.data, 0, this.data.length, this); 7303}; 7304function CDATA(locator) { 7305 ParentNode.call(this, locator); 7306 this.nodeType = NodeType.CDATA; 7307} 7308 7309CDATA.prototype = Object.create(ParentNode.prototype); 7310CDATA.prototype.visit = function(treeParser) { 7311 treeParser.startCDATA(this); 7312}; 7313CDATA.prototype.revisit = function(treeParser) { 7314 treeParser.endCDATA(this.endLocator); 7315}; 7316function Entity(name) { 7317 ParentNode.call(this); 7318 this.name = name; 7319 this.nodeType = NodeType.ENTITY; 7320} 7321 7322Entity.prototype = Object.create(ParentNode.prototype); 7323Entity.prototype.visit = function(treeParser) { 7324 treeParser.startEntity(this.name, this); 7325}; 7326Entity.prototype.revisit = function(treeParser) { 7327 treeParser.endEntity(this.name); 7328}; 7329 7330function SkippedEntity(name) { 7331 Node.call(this); 7332 this.name = name; 7333 this.nodeType = NodeType.SKIPPED_ENTITY; 7334} 7335 7336SkippedEntity.prototype = Object.create(Node.prototype); 7337SkippedEntity.prototype.visit = function(treeParser) { 7338 treeParser.skippedEntity(this.name, this); 7339}; 7340function ProcessingInstruction(target, data) { 7341 Node.call(this); 7342 this.target = target; 7343 this.data = data; 7344} 7345 7346ProcessingInstruction.prototype = Object.create(Node.prototype); 7347ProcessingInstruction.prototype.visit = function(treeParser) { 7348 treeParser.processingInstruction(this.target, this.data, this); 7349}; 7350ProcessingInstruction.prototype.getNodeType = function() { 7351 return NodeType.PROCESSING_INSTRUCTION; 7352}; 7353function DTD(name, publicIdentifier, systemIdentifier) { 7354 ParentNode.call(this); 7355 this.name = name; 7356 this.publicIdentifier = publicIdentifier; 7357 this.systemIdentifier = systemIdentifier; 7358 this.nodeType = NodeType.DTD; 7359} 7360 7361DTD.prototype = Object.create(ParentNode.prototype); 7362DTD.prototype.visit = function(treeParser) { 7363 treeParser.startDTD(this.name, this.publicIdentifier, this.systemIdentifier, this); 7364}; 7365DTD.prototype.revisit = function(treeParser) { 7366 treeParser.endDTD(); 7367}; 7368 7369exports.SAXTreeBuilder = SAXTreeBuilder; 7370 7371}, 7372{"../TreeBuilder":6,"util":20}], 737311:[function(_dereq_,module,exports){ 7374function TreeParser(contentHandler, lexicalHandler){ 7375 this.contentHandler; 7376 this.lexicalHandler; 7377 this.locatorDelegate; 7378 7379 if (!contentHandler) {
7380 throw new IllegalArgumentException("contentHandler was null."); 7381 } 7382 this.contentHandler = contentHandler; 7383 if (!lexicalHandler) { 7384 this.lexicalHandler = new NullLexicalHandler(); 7385 } else { 7386 this.lexicalHandler = lexicalHandler; 7387 } 7388} 7389TreeParser.prototype.parse = function(node) { 7390 this.contentHandler.documentLocator = this; 7391 var current = node; 7392 var next; 7393 for (;;) { 7394 current.visit(this); 7395 if (next = current.firstChild) { 7396 current = next; 7397 continue; 7398 } 7399 for (;;) { 7400 current.revisit(this); 7401 if (current == node) { 7402 return; 7403 } 7404 if (next = current.nextSibling) { 7405 current = next; 7406 break; 7407 } 7408 current = current.parentNode; 7409 } 7410 } 7411}; 7412TreeParser.prototype.characters = function(ch, start, length, locator) { 7413 this.locatorDelegate = locator; 7414 this.contentHandler.characters(ch, start, length); 7415}; 7416TreeParser.prototype.endDocument = function(locator) { 7417 this.locatorDelegate = locator; 7418 this.contentHandler.endDocument(); 7419}; 7420TreeParser.prototype.endElement = function(uri, localName, qName, locator) { 7421 this.locatorDelegate = locator; 7422 this.contentHandler.endElement(uri, localName, qName); 7423}; 7424TreeParser.prototype.endPrefixMapping = function(prefix, locator) { 7425 this.locatorDelegate = locator; 7426 this.contentHandler.endPrefixMapping(prefix); 7427}; 7428TreeParser.prototype.ignorableWhitespace = function(ch, start, length, locator) { 7429 this.locatorDelegate = locator; 7430 this.contentHandler.ignorableWhitespace(ch, start, length); 7431}; 7432TreeParser.prototype.processingInstruction = function(target, data, locator) { 7433 this.locatorDelegate = locator; 7434 this.contentHandler.processingInstruction(target, data); 7435}; 7436TreeParser.prototype.skippedEntity = function(name, locator) { 7437 this.locatorDelegate = locator; 7438 this.contentHandler.skippedEntity(name); 7439}; 7440TreeParser.prototype.startDocument = function(locator) { 7441 this.locatorDelegate = locator; 7442 this.contentHandler.startDocument(); 7443}; 7444TreeParser.prototype.startElement = function(uri, localName, qName, atts, locator) { 7445 this.locatorDelegate = locator; 7446 this.contentHandler.startElement(uri, localName, qName, atts); 7447}; 7448TreeParser.prototype.startPrefixMapping = function(prefix, uri, locator) { 7449 this.locatorDelegate = locator; 7450 this.contentHandler.startPrefixMapping(prefix, uri); 7451}; 7452TreeParser.prototype.comment = function(ch, start, length, locator) { 7453 this.locatorDelegate = locator; 7454 this.lexicalHandler.comment(ch, start, length); 7455}; 7456TreeParser.prototype.endCDATA = function(locator) { 7457 this.locatorDelegate = locator; 7458 this.lexicalHandler.endCDATA(); 7459}; 7460TreeParser.prototype.endDTD = function(locator) { 7461 this.locatorDelegate = locator; 7462 this.lexicalHandler.endDTD(); 7463}; 7464TreeParser.prototype.endEntity = function(name, locator) { 7465 this.locatorDelegate = locator; 7466 this.lexicalHandler.endEntity(name); 7467}; 7468TreeParser.prototype.startCDATA = function(locator) { 7469 this.locatorDelegate = locator; 7470 this.lexicalHandler.startCDATA(); 7471}; 7472TreeParser.prototype.startDTD = function(name, publicId, systemId, locator) { 7473 this.locatorDelegate = locator; 7474 this.lexicalHandler.startDTD(name, publicId, systemId); 7475}; 7476TreeParser.prototype.startEntity = function(name, locator) { 7477 this.locatorDelegate = locator; 7478 this.lexicalHandler.startEntity(name); 7479}; 7480 7481Object.defineProperty(TreeParser.prototype, 'columnNumber', { 7482 get: function() { 7483 if (!this.locatorDelegate) 7484 return -1; 7485 else 7486 return this.locatorDelegate.columnNumber; 7487 } 7488}); 7489 7490Object.defineProperty(TreeParser.prototype, 'lineNumber', { 7491 get: function() { 7492 if (!this.locatorDelegate) 7493 return -1; 7494 else 7495 return this.locatorDelegate.lineNumber; 7496 } 7497}); 7498function NullLexicalHandler() { 7499 7500} 7501 7502NullLexicalHandler.prototype.comment = function() {}; 7503NullLexicalHandler.prototype.endCDATA = function() {}; 7504NullLexicalHandler.prototype.endDTD = function() {}; 7505NullLexicalHandler.prototype.endEntity = function() {}; 7506NullLexicalHandler.prototype.startCDATA = function() {}; 7507NullLexicalHandler.prototype.startDTD = function() {}; 7508NullLexicalHandler.prototype.startEntity = function() {}; 7509 7510exports.TreeParser = TreeParser; 7511 7512}, 7513{}], 751412:[function(_dereq_,module,exports){ 7515module.exports = { 7516 "Aacute;": "\u00C1", 7517 "Aacute": "\u00C1", 7518 "aacute;": "\u00E1", 7519 "aacute": "\u00E1", 7520 "Abreve;": "\u0102", 7521 "abreve;": "\u0103", 7522 "ac;": "\u223E", 7523 "acd;": "\u223F", 7524 "acE;": "\u223E\u0333", 7525 "Acirc;": "\u00C2", 7526 "Acirc": "\u00C2", 7527 "acirc;": "\u00E2", 7528 "acirc": "\u00E2", 7529 "acute;": "\u00B4", 7530 "acute": "\u00B4", 7531 "Acy;": "\u0410", 7532 "acy;": "\u0430", 7533 "AElig;": "\u00C6", 7534 "AElig": "\u00C6", 7535 "aelig;": "\u00E6", 7536 "aelig": "\u00E6", 7537 "af;": "\u2061", 7538 "Afr;": "\uD835\uDD04", 7539 "afr;": "\uD835\uDD1E", 7540 "Agrave;": "\u00C0", 7541 "Agrave": "\u00C0", 7542 "agrave;": "\u00E0", 7543 "agrave": "\u00E0", 7544 "alefsym;": "\u2135", 7545 "aleph;": "\u2135", 7546 "Alpha;": "\u0391", 7547 "alpha;": "\u03B1", 7548 "Amacr;": "\u0100", 7549 "amacr;": "\u0101", 7550 "amalg;": "\u2A3F", 7551 "amp;": "\u0026", 7552 "amp": "\u0026", 7553 "AMP;": "\u0026", 7554 "AMP": "\u0026", 7555 "andand;": "\u2A55", 7556 "And;": "\u2A53", 7557 "and;": "\u2227", 7558 "andd;": "\u2A5C",
7559 "andslope;": "\u2A58", 7560 "andv;": "\u2A5A", 7561 "ang;": "\u2220", 7562 "ange;": "\u29A4", 7563 "angle;": "\u2220", 7564 "angmsdaa;": "\u29A8", 7565 "angmsdab;": "\u29A9", 7566 "angmsdac;": "\u29AA", 7567 "angmsdad;": "\u29AB", 7568 "angmsdae;": "\u29AC", 7569 "angmsdaf;": "\u29AD", 7570 "angmsdag;": "\u29AE", 7571 "angmsdah;": "\u29AF", 7572 "angmsd;": "\u2221", 7573 "angrt;": "\u221F", 7574 "angrtvb;": "\u22BE", 7575 "angrtvbd;": "\u299D", 7576 "angsph;": "\u2222", 7577 "angst;": "\u00C5", 7578 "angzarr;": "\u237C", 7579 "Aogon;": "\u0104", 7580 "aogon;": "\u0105", 7581 "Aopf;": "\uD835\uDD38", 7582 "aopf;": "\uD835\uDD52", 7583 "apacir;": "\u2A6F", 7584 "ap;": "\u2248", 7585 "apE;": "\u2A70", 7586 "ape;": "\u224A", 7587 "apid;": "\u224B", 7588 "apos;": "\u0027", 7589 "ApplyFunction;": "\u2061", 7590 "approx;": "\u2248", 7591 "approxeq;": "\u224A", 7592 "Aring;": "\u00C5", 7593 "Aring": "\u00C5", 7594 "aring;": "\u00E5", 7595 "aring": "\u00E5", 7596 "Ascr;": "\uD835\uDC9C", 7597 "ascr;": "\uD835\uDCB6", 7598 "Assign;": "\u2254", 7599 "ast;": "\u002A", 7600 "asymp;": "\u2248", 7601 "asympeq;": "\u224D", 7602 "Atilde;": "\u00C3", 7603 "Atilde": "\u00C3", 7604 "atilde;": "\u00E3", 7605 "atilde": "\u00E3", 7606 "Auml;": "\u00C4", 7607 "Auml": "\u00C4", 7608 "auml;": "\u00E4", 7609 "auml": "\u00E4", 7610 "awconint;": "\u2233", 7611 "awint;": "\u2A11", 7612 "backcong;": "\u224C", 7613 "backepsilon;": "\u03F6", 7614 "backprime;": "\u2035", 7615 "backsim;": "\u223D", 7616 "backsimeq;": "\u22CD", 7617 "Backslash;": "\u2216", 7618 "Barv;": "\u2AE7", 7619 "barvee;": "\u22BD", 7620 "barwed;": "\u2305", 7621 "Barwed;": "\u2306", 7622 "barwedge;": "\u2305", 7623 "bbrk;": "\u23B5", 7624 "bbrktbrk;": "\u23B6", 7625 "bcong;": "\u224C", 7626 "Bcy;": "\u0411", 7627 "bcy;": "\u0431", 7628 "bdquo;": "\u201E", 7629 "becaus;": "\u2235", 7630 "because;": "\u2235", 7631 "Because;": "\u2235", 7632 "bemptyv;": "\u29B0", 7633 "bepsi;": "\u03F6", 7634 "bernou;": "\u212C", 7635 "Bernoullis;": "\u212C", 7636 "Beta;": "\u0392", 7637 "beta;": "\u03B2", 7638 "beth;": "\u2136", 7639 "between;": "\u226C", 7640 "Bfr;": "\uD835\uDD05", 7641 "bfr;": "\uD835\uDD1F", 7642 "bigcap;": "\u22C2", 7643 "bigcirc;": "\u25EF", 7644 "bigcup;": "\u22C3", 7645 "bigodot;": "\u2A00", 7646 "bigoplus;": "\u2A01", 7647 "bigotimes;": "\u2A02", 7648 "bigsqcup;": "\u2A06", 7649 "bigstar;": "\u2605", 7650 "bigtriangledown;": "\u25BD", 7651 "bigtriangleup;": "\u25B3", 7652 "biguplus;": "\u2A04", 7653 "bigvee;": "\u22C1", 7654 "bigwedge;": "\u22C0", 7655 "bkarow;": "\u290D", 7656 "blacklozenge;": "\u29EB", 7657 "blacksquare;": "\u25AA", 7658 "blacktriangle;": "\u25B4", 7659 "blacktriangledown;": "\u25BE", 7660 "blacktriangleleft;": "\u25C2", 7661 "blacktriangleright;": "\u25B8", 7662 "blank;": "\u2423", 7663 "blk12;": "\u2592", 7664 "blk14;": "\u2591", 7665 "blk34;": "\u2593", 7666 "block;": "\u2588", 7667 "bne;": "\u003D\u20E5", 7668 "bnequiv;": "\u2261\u20E5", 7669 "bNot;": "\u2AED", 7670 "bnot;": "\u2310", 7671 "Bopf;": "\uD835\uDD39", 7672 "bopf;": "\uD835\uDD53", 7673 "bot;": "\u22A5", 7674 "bottom;": "\u22A5", 7675 "bowtie;": "\u22C8", 7676 "boxbox;": "\u29C9", 7677 "boxdl;": "\u2510", 7678 "boxdL;": "\u2555", 7679 "boxDl;": "\u2556", 7680 "boxDL;": "\u2557", 7681 "boxdr;": "\u250C", 7682 "boxdR;": "\u2552", 7683 "boxDr;": "\u2553", 7684 "boxDR;": "\u2554", 7685 "boxh;": "\u2500", 7686 "boxH;": "\u2550", 7687 "boxhd;": "\u252C", 7688 "boxHd;": "\u2564", 7689 "boxhD;": "\u2565", 7690 "boxHD;": "\u2566", 7691 "boxhu;": "\u2534", 7692 "boxHu;": "\u2567", 7693 "boxhU;": "\u2568", 7694 "boxHU;": "\u2569", 7695 "boxminus;": "\u229F", 7696 "boxplus;": "\u229E", 7697 "boxtimes;": "\u22A0", 7698 "boxul;": "\u2518", 7699 "boxuL;": "\u255B", 7700 "boxUl;": "\u255C", 7701 "boxUL;": "\u255D", 7702 "boxur;": "\u2514", 7703 "boxuR;": "\u2558", 7704 "boxUr;": "\u2559", 7705 "boxUR;": "\u255A", 7706 "boxv;": "\u2502", 7707 "boxV;": "\u2551", 7708 "boxvh;": "\u253C", 7709 "boxvH;": "\u256A", 7710 "boxVh;": "\u256B", 7711 "boxVH;": "\u256C", 7712 "boxvl;": "\u2524", 7713 "boxvL;": "\u2561", 7714 "boxVl;": "\u2562", 7715 "boxVL;": "\u2563", 7716 "boxvr;": "\u251C", 7717 "boxvR;": "\u255E", 7718 "boxVr;": "\u255F", 7719 "boxVR;": "\u2560", 7720 "bprime;": "\u2035", 7721 "breve;": "\u02D8", 7722 "Breve;": "\u02D8", 7723 "brvbar;": "\u00A6", 7724 "brvbar": "\u00A6", 7725 "bscr;": "\uD835\uDCB7", 7726 "Bscr;": "\u212C", 7727 "bsemi;": "\u204F", 7728 "bsim;": "\u223D", 7729 "bsime;": "\u22CD", 7730 "bsolb;": "\u29C5", 7731 "bsol;": "\u005C", 7732 "bsolhsub;": "\u27C8", 7733 "bull;": "\u2022", 7734 "bullet;": "\u2022", 7735 "bump;": "\u224E", 7736 "bumpE;": "\u2AAE", 7737 "bumpe;": "\u224F", 7738 "Bumpeq;": "\u224E", 7739 "bumpeq;": "\u224F", 7740 "Cacute;": "\u0106", 7741 "cacute;": "\u0107", 7742 "capand;": "\u2A44", 7743 "capbrcup;": "\u2A49", 7744 "capcap;": "\u2A4B", 7745 "cap;": "\u2229", 7746 "Cap;": "\u22D2", 7747 "capcup;": "\u2A47", 7748 "capdot;": "\u2A40", 7749 "CapitalDifferentialD;
7749": "\u2145", 7750 "caps;": "\u2229\uFE00", 7751 "caret;": "\u2041", 7752 "caron;": "\u02C7", 7753 "Cayleys;": "\u212D", 7754 "ccaps;": "\u2A4D", 7755 "Ccaron;": "\u010C", 7756 "ccaron;": "\u010D", 7757 "Ccedil;": "\u00C7", 7758 "Ccedil": "\u00C7", 7759 "ccedil;": "\u00E7", 7760 "ccedil": "\u00E7", 7761 "Ccirc;": "\u0108", 7762 "ccirc;": "\u0109", 7763 "Cconint;": "\u2230", 7764 "ccups;": "\u2A4C", 7765 "ccupssm;": "\u2A50", 7766 "Cdot;": "\u010A", 7767 "cdot;": "\u010B", 7768 "cedil;": "\u00B8", 7769 "cedil": "\u00B8", 7770 "Cedilla;": "\u00B8", 7771 "cemptyv;": "\u29B2", 7772 "cent;": "\u00A2", 7773 "cent": "\u00A2", 7774 "centerdot;": "\u00B7", 7775 "CenterDot;": "\u00B7", 7776 "cfr;": "\uD835\uDD20", 7777 "Cfr;": "\u212D", 7778 "CHcy;": "\u0427", 7779 "chcy;": "\u0447", 7780 "check;": "\u2713", 7781 "checkmark;": "\u2713", 7782 "Chi;": "\u03A7", 7783 "chi;": "\u03C7", 7784 "circ;": "\u02C6", 7785 "circeq;": "\u2257", 7786 "circlearrowleft;": "\u21BA", 7787 "circlearrowright;": "\u21BB", 7788 "circledast;": "\u229B", 7789 "circledcirc;": "\u229A", 7790 "circleddash;": "\u229D", 7791 "CircleDot;": "\u2299", 7792 "circledR;": "\u00AE", 7793 "circledS;": "\u24C8", 7794 "CircleMinus;": "\u2296", 7795 "CirclePlus;": "\u2295", 7796 "CircleTimes;": "\u2297", 7797 "cir;": "\u25CB", 7798 "cirE;": "\u29C3", 7799 "cire;": "\u2257", 7800 "cirfnint;": "\u2A10", 7801 "cirmid;": "\u2AEF", 7802 "cirscir;": "\u29C2", 7803 "ClockwiseContourIntegral;": "\u2232", 7804 "CloseCurlyDoubleQuote;": "\u201D", 7805 "CloseCurlyQuote;": "\u2019", 7806 "clubs;": "\u2663", 7807 "clubsuit;": "\u2663", 7808 "colon;": "\u003A", 7809 "Colon;": "\u2237", 7810 "Colone;": "\u2A74", 7811 "colone;": "\u2254", 7812 "coloneq;": "\u2254", 7813 "comma;": "\u002C", 7814 "commat;": "\u0040", 7815 "comp;": "\u2201", 7816 "compfn;": "\u2218", 7817 "complement;": "\u2201", 7818 "complexes;": "\u2102", 7819 "cong;": "\u2245", 7820 "congdot;": "\u2A6D", 7821 "Congruent;": "\u2261", 7822 "conint;": "\u222E", 7823 "Conint;": "\u222F", 7824 "ContourIntegral;": "\u222E", 7825 "copf;": "\uD835\uDD54", 7826 "Copf;": "\u2102", 7827 "coprod;": "\u2210", 7828 "Coproduct;": "\u2210", 7829 "copy;": "\u00A9", 7830 "copy": "\u00A9", 7831 "COPY;": "\u00A9", 7832 "COPY": "\u00A9", 7833 "copysr;": "\u2117", 7834 "CounterClockwiseContourIntegral;": "\u2233", 7835 "crarr;": "\u21B5", 7836 "cross;": "\u2717", 7837 "Cross;": "\u2A2F", 7838 "Cscr;": "\uD835\uDC9E", 7839 "cscr;": "\uD835\uDCB8", 7840 "csub;": "\u2ACF", 7841 "csube;": "\u2AD1", 7842 "csup;": "\u2AD0", 7843 "csupe;": "\u2AD2", 7844 "ctdot;": "\u22EF", 7845 "cudarrl;": "\u2938", 7846 "cudarrr;": "\u2935", 7847 "cuepr;": "\u22DE", 7848 "cuesc;": "\u22DF", 7849 "cularr;": "\u21B6", 7850 "cularrp;": "\u293D", 7851 "cupbrcap;": "\u2A48", 7852 "cupcap;": "\u2A46", 7853 "CupCap;": "\u224D", 7854 "cup;": "\u222A", 7855 "Cup;": "\u22D3", 7856 "cupcup;": "\u2A4A", 7857 "cupdot;": "\u228D", 7858 "cupor;": "\u2A45", 7859 "cups;": "\u222A\uFE00", 7860 "curarr;": "\u21B7", 7861 "curarrm;": "\u293C", 7862 "curlyeqprec;": "\u22DE", 7863 "curlyeqsucc;": "\u22DF", 7864 "curlyvee;": "\u22CE", 7865 "curlywedge;": "\u22CF", 7866 "curren;": "\u00A4", 7867 "curren": "\u00A4", 7868 "curvearrowleft;": "\u21B6", 7869 "curvearrowright;": "\u21B7", 7870 "cuvee;": "\u22CE", 7871 "cuwed;": "\u22CF", 7872 "cwconint;": "\u2232", 7873 "cwint;": "\u2231", 7874 "cylcty;": "\u232D", 7875 "dagger;": "\u2020", 7876 "Dagger;": "\u2021", 7877 "daleth;": "\u2138", 7878 "darr;": "\u2193", 7879 "Darr;": "\u21A1", 7880 "dArr;": "\u21D3", 7881 "dash;": "\u2010", 7882 "Dashv;": "\u2AE4", 7883 "dashv;": "\u22A3", 7884 "dbkarow;": "\u290F", 7885 "dblac;": "\u02DD", 7886 "Dcaron;": "\u010E", 7887 "dcaron;": "\u010F", 7888 "Dcy;": "\u0414", 7889 "dcy;": "\u0434", 7890 "ddagger;": "\u2021", 7891 "ddarr;": "\u21CA", 7892 "DD;": "\u2145", 7893 "dd;": "\u2146", 7894 "DDotrahd;": "\u2911", 7895 "ddotseq;": "\u2A77", 7896 "deg;": "\u00B0", 7897 "deg": "\u00B0", 7898 "Del;": "\u2207", 7899 "Delta;": "\u0394", 7900 "delta;": "\u03B4", 7901 "demptyv;": "\u29B1", 7902 "dfisht;": "\u297F", 7903 "Dfr;": "\uD835\uDD07", 7904 "dfr;": "\uD835\uDD21", 7905 "dHar;": "\u2965", 7906 "dharl;": "\u21C3", 7907 "dharr;": "\u21C2", 7908 "DiacriticalAcute;": "\u00B4", 7909 "DiacriticalDot;": "\u02D9", 7910 "DiacriticalDoubleAcute;": "\u02DD", 7911 "DiacriticalGrave;": "\u0060", 7912 "DiacriticalTilde;": "\u02DC", 7913 "diam;": "\u22C4", 7914 "diamond;": "\u22C4", 7915 "Diamond;": "\u22C4", 7916 "diamondsuit;": "\u2666", 7917 "diams;": "\u2666", 7918 "die;": "\u00A8", 7919 "DifferentialD;": "\u2146", 7920 "digamma;": "\u03DD", 7921 "disin;": "\u22F2", 7922 "div;": "\u00F7", 7923 "divide;": "\u00F7", 7924 "divide": "\u00F7", 7925 "divideontimes;": "\u22C7", 7926 "divonx;": "\u22C7", 7927 "DJcy;": "\u0402", 7928 "djcy;": "\u0452", 7929 "dlcorn;": "\u231E", 7930 "dlcrop;": "\u230D", 7931 "dollar;": "\u0024", 7932 "Dopf;": "\uD835\uDD3B", 7933 "dopf;": "\uD835\uDD55", 7934 "Dot;": "\u00A8", 7935 "dot;": "\u02D9", 7936 "DotDot;": "\u20DC", 7937 "doteq;": "\u2250", 7938 "doteqdot;": "\u2251", 7939 "DotEqual;": "\u2250", 7940 "dotminus;": "\u2238", 7941 "dotplus;": "\u2214", 7942 "dotsquare;": "\u22A1", 7943 "doublebarwedge;": "\u2306", 7944 "DoubleContourIntegral;": "\u222F", 7945 "DoubleDot;": "\u00A8", 7946 "DoubleDownArrow;": "\u21D3", 7947 "DoubleLeftArrow;
7947": "\u21D0", 7948 "DoubleLeftRightArrow;": "\u21D4", 7949 "DoubleLeftTee;": "\u2AE4", 7950 "DoubleLongLeftArrow;": "\u27F8", 7951 "DoubleLongLeftRightArrow;": "\u27FA", 7952 "DoubleLongRightArrow;": "\u27F9", 7953 "DoubleRightArrow;": "\u21D2", 7954 "DoubleRightTee;": "\u22A8", 7955 "DoubleUpArrow;": "\u21D1", 7956 "DoubleUpDownArrow;": "\u21D5", 7957 "DoubleVerticalBar;": "\u2225", 7958 "DownArrowBar;": "\u2913", 7959 "downarrow;": "\u2193", 7960 "DownArrow;": "\u2193", 7961 "Downarrow;": "\u21D3", 7962 "DownArrowUpArrow;": "\u21F5", 7963 "DownBreve;": "\u0311", 7964 "downdownarrows;": "\u21CA", 7965 "downharpoonleft;": "\u21C3", 7966 "downharpoonright;": "\u21C2", 7967 "DownLeftRightVector;": "\u2950", 7968 "DownLeftTeeVector;": "\u295E", 7969 "DownLeftVectorBar;": "\u2956", 7970 "DownLeftVector;": "\u21BD", 7971 "DownRightTeeVector;": "\u295F", 7972 "DownRightVectorBar;": "\u2957", 7973 "DownRightVector;": "\u21C1", 7974 "DownTeeArrow;": "\u21A7", 7975 "DownTee;": "\u22A4", 7976 "drbkarow;": "\u2910", 7977 "drcorn;": "\u231F", 7978 "drcrop;": "\u230C", 7979 "Dscr;": "\uD835\uDC9F", 7980 "dscr;": "\uD835\uDCB9", 7981 "DScy;": "\u0405", 7982 "dscy;": "\u0455", 7983 "dsol;": "\u29F6", 7984 "Dstrok;": "\u0110", 7985 "dstrok;": "\u0111", 7986 "dtdot;": "\u22F1", 7987 "dtri;": "\u25BF", 7988 "dtrif;": "\u25BE", 7989 "duarr;": "\u21F5", 7990 "duhar;": "\u296F", 7991 "dwangle;": "\u29A6", 7992 "DZcy;": "\u040F", 7993 "dzcy;": "\u045F", 7994 "dzigrarr;": "\u27FF", 7995 "Eacute;": "\u00C9", 7996 "Eacute": "\u00C9", 7997 "eacute;": "\u00E9", 7998 "eacute": "\u00E9", 7999 "easter;": "\u2A6E", 8000 "Ecaron;": "\u011A", 8001 "ecaron;": "\u011B", 8002 "Ecirc;": "\u00CA", 8003 "Ecirc": "\u00CA", 8004 "ecirc;": "\u00EA", 8005 "ecirc": "\u00EA", 8006 "ecir;": "\u2256", 8007 "ecolon;": "\u2255", 8008 "Ecy;": "\u042D", 8009 "ecy;": "\u044D", 8010 "eDDot;": "\u2A77", 8011 "Edot;": "\u0116", 8012 "edot;": "\u0117", 8013 "eDot;": "\u2251", 8014 "ee;": "\u2147", 8015 "efDot;": "\u2252", 8016 "Efr;": "\uD835\uDD08", 8017 "efr;": "\uD835\uDD22", 8018 "eg;": "\u2A9A", 8019 "Egrave;": "\u00C8", 8020 "Egrave": "\u00C8", 8021 "egrave;": "\u00E8", 8022 "egrave": "\u00E8", 8023 "egs;": "\u2A96", 8024 "egsdot;": "\u2A98", 8025 "el;": "\u2A99", 8026 "Element;": "\u2208", 8027 "elinters;": "\u23E7", 8028 "ell;": "\u2113", 8029 "els;": "\u2A95", 8030 "elsdot;": "\u2A97", 8031 "Emacr;": "\u0112", 8032 "emacr;": "\u0113", 8033 "empty;": "\u2205", 8034 "emptyset;": "\u2205", 8035 "EmptySmallSquare;": "\u25FB", 8036 "emptyv;": "\u2205", 8037 "EmptyVerySmallSquare;": "\u25AB", 8038 "emsp13;": "\u2004", 8039 "emsp14;": "\u2005", 8040 "emsp;": "\u2003", 8041 "ENG;": "\u014A", 8042 "eng;": "\u014B", 8043 "ensp;": "\u2002", 8044 "Eogon;": "\u0118", 8045 "eogon;": "\u0119", 8046 "Eopf;": "\uD835\uDD3C", 8047 "eopf;": "\uD835\uDD56", 8048 "epar;": "\u22D5", 8049 "eparsl;": "\u29E3", 8050 "eplus;": "\u2A71", 8051 "epsi;": "\u03B5", 8052 "Epsilon;": "\u0395", 8053 "epsilon;": "\u03B5", 8054 "epsiv;": "\u03F5", 8055 "eqcirc;": "\u2256", 8056 "eqcolon;": "\u2255", 8057 "eqsim;": "\u2242", 8058 "eqslantgtr;": "\u2A96", 8059 "eqslantless;": "\u2A95", 8060 "Equal;": "\u2A75", 8061 "equals;": "\u003D", 8062 "EqualTilde;": "\u2242", 8063 "equest;": "\u225F", 8064 "Equilibrium;": "\u21CC", 8065 "equiv;": "\u2261", 8066 "equivDD;": "\u2A78", 8067 "eqvparsl;": "\u29E5", 8068 "erarr;": "\u2971", 8069 "erDot;": "\u2253", 8070 "escr;": "\u212F", 8071 "Escr;": "\u2130", 8072 "esdot;": "\u2250", 8073 "Esim;": "\u2A73", 8074 "esim;": "\u2242", 8075 "Eta;": "\u0397", 8076 "eta;": "\u03B7", 8077 "ETH;": "\u00D0", 8078 "ETH": "\u00D0", 8079 "eth;": "\u00F0", 8080 "eth": "\u00F0", 8081 "Euml;": "\u00CB", 8082 "Euml": "\u00CB", 8083 "euml;": "\u00EB", 8084 "euml": "\u00EB", 8085 "euro;": "\u20AC", 8086 "excl;": "\u0021", 8087 "exist;": "\u2203", 8088 "Exists;": "\u2203", 8089 "expectation;": "\u2130", 8090 "exponentiale;": "\u2147", 8091 "ExponentialE;": "\u2147", 8092 "fallingdotseq;": "\u2252", 8093 "Fcy;": "\u0424", 8094 "fcy;": "\u0444", 8095 "female;": "\u2640", 8096 "ffilig;": "\uFB03", 8097 "fflig;": "\uFB00", 8098 "ffllig;": "\uFB04", 8099 "Ffr;": "\uD835\uDD09", 8100 "ffr;": "\uD835\uDD23", 8101 "filig;": "\uFB01", 8102 "FilledSmallSquare;": "\u25FC", 8103 "FilledVerySmallSquare;": "\u25AA", 8104 "fjlig;": "\u0066\u006A", 8105 "flat;": "\u266D", 8106 "fllig;": "\uFB02", 8107 "fltns;": "\u25B1", 8108 "fnof;": "\u0192", 8109 "Fopf;": "\uD835\uDD3D", 8110 "fopf;": "\uD835\uDD57", 8111 "forall;": "\u2200", 8112 "ForAll;": "\u2200", 8113 "fork;": "\u22D4", 8114 "forkv;": "\u2AD9", 8115 "Fouriertrf;": "\u2131", 8116 "fpartint;": "\u2A0D", 8117 "frac12;": "\u00BD", 8118 "frac12": "\u00BD", 8119 "frac13;": "\u2153", 8120 "frac14;": "\u00BC", 8121 "frac14": "\u00BC", 8122 "frac15;": "\u2155", 8123 "frac16;": "\u2159", 8124 "frac18;": "\u215B", 8125 "frac23;": "\u2154", 8126 "frac25;": "\u2156", 8127 "frac34;": "\u00BE", 8128 "frac34": "\u00BE", 8129 "frac35;": "\u2157", 8130 "frac38;": "\u215C", 8131 "frac45;": "\u2158", 8132 "frac56;": "\u215A", 8133 "frac58;": "\u215D", 8134 "frac78;": "\u215E", 8135 "frasl;": "\u2044", 8136 "frown;": "\u2322", 8137 "fscr;": "\uD835\uDCBB", 8138 "Fscr;": "\u2131", 8139 "gacute;": "\u01F5", 8140 "Gamma;": "\u0393", 8141 "gamma;": "\u03B3", 8142 "Gammad;": "\u03DC", 8143 "gammad;": "\u03DD", 8144 "gap;": "\u2A86", 8145 "Gbreve;": "\u011E", 8146 "gbreve;": "\u011F", 8147 "Gcedil;": "\u0122", 8148 "Gcirc;": "\u011C", 8149 "gcirc;": "\u011D", 8150 "Gcy;": "\u0413", 8151 "gcy;": "\u0433", 8152 "Gdot;": "\u0120", 8153 "gdot;": "\u0121", 8154 "ge;": "\u2265", 8155 "gE;": "\u2267", 8156 "gEl;": "\u2A8C", 8157 "gel;": "\u22DB", 8158 "geq;": "\u2265", 8159 "geqq;": "\u2267", 8160 "geqslant;": "\u2A7E", 8161 "gescc;": "\u2AA9", 8162 "ges;": "\u2A7E", 8163 "gesdot;": "\u2A80", 8164 "gesdoto;": "\u2A82", 8165 "gesdotol;": "\u2A84", 8166 "gesl;": "\u22DB\uFE00", 8167 "gesles;": "\u2A94", 8168 "Gfr;": "\uD835\uDD0A", 8169 "gfr;": "\uD835\uDD24", 8170 "gg;": "\u226B", 8171 "Gg;": "\u22D9", 8172 "ggg;": "\u22D9", 8173 "gimel;": "\u2137", 8174 "GJcy;": "\u0403", 8175 "gjcy;": "\u0453", 8176 "gla;": "\u2AA5", 8177 "gl;": "\u2277", 8178 "glE;": "\u2A92", 8179 "glj;": "\u2AA4", 8180 "gnap;": "\u2A8A", 8181 "gnapprox;": "\u2A8A", 8182 "gne;": "\u2A88", 8183 "gnE;": "\u2269", 8184 "gneq;": "\u2A88", 8185 "gneqq;": "\u2269", 8186 "gnsim;": "\u22E7", 8187 "Gopf;": "\uD835\uDD3E", 8188 "gopf;": "\uD835\uDD58", 8189 "grave;": "\u0060", 8190 "GreaterEqual;": "\u2265", 8191 "GreaterEqualLess;": "\u22DB", 8192 "GreaterFullEqual;": "\u2267", 8193 "GreaterGreater;": "\u2AA2", 8194 "GreaterLess;": "\u2277", 8195 "GreaterSlantEqual;": "\u2A7E", 8196 "GreaterTilde;": "\u2273", 8197 "Gscr;": "\uD835\uDCA2", 8198 "gscr;": "\u210A", 8199 "gsim;": "\u2273", 8200 "gsime;": "\u2A8E", 8201 "gsiml;": "\u2A90", 8202 "gtcc;": "\u2AA7", 8203 "gtcir;": "\u2A7A", 8204 "gt;": "\u003E", 8205 "gt": "\u003E", 8206 "GT;": "\u003E", 8207 "GT": "\u003E", 8208 "Gt;": "\u226B", 8209 "gtdot;": "\u22D7", 8210 "gtlPar;": "\u2995", 8211 "gtquest;": "\u2A7C", 8212 "gtrapprox;": "\u2A86", 8213 "gtrarr;": "\u2978", 8214 "gtrdot;": "\u22D7", 8215 "gtreqless;": "\u22DB", 8216 "gtreqqless;": "\u2A8C", 8217 "gtrless;": "\u2277", 8218 "gtrsim;": "\u2273", 8219 "gvertneqq;": "\u2269\uFE00", 8220 "gvnE;": "\u2269\uFE00", 8221 "Hacek;": "\u02C7", 8222 "hairsp;": "\u200A", 8223 "half;": "\u00BD", 8224 "hamilt;": "\u210B", 8225 "HARDcy;": "\u042A", 8226 "hardcy;": "\u044A", 8227 "harrcir;": "\u2948", 8228 "harr;": "\u2194", 8229 "hArr;": "\u21D4", 8230 "harrw;": "\u21AD", 8231 "Hat;": "\u005E", 8232 "hbar;": "\u210F", 8233 "Hcirc;": "\u0124", 8234 "hcirc;": "\u0125", 8235 "hearts;": "\u2665", 8236 "heartsuit;": "\u2665", 8237 "hellip;": "\u2026", 8238 "hercon;": "\u22B9", 8239 "hfr;": "\uD835\uDD25", 8240 "Hfr;": "\u210C", 8241 "HilbertSpace;": "\u210B", 8242 "hksearow;": "\u2925", 8243 "hkswarow;": "\u2926", 8244 "hoarr;": "\u21FF", 8245 "homtht;": "\u223B", 8246 "hookleftarrow;": "\u21A9", 8247 "hookrightarrow;": "\u21AA", 8248 "hopf;": "\uD835\uDD59", 8249 "Hopf;": "\u210D", 8250 "horbar;": "\u2015", 8251 "HorizontalLine;": "\u2500", 8252 "hscr;": "\uD835\uDCBD", 8253 "Hscr;": "\u210B", 8254 "hslash;": "\u210F", 8255 "Hstrok;": "\u0126", 8256 "hstrok;": "\u0127", 8257 "HumpDownHump;": "\u224E", 8258 "HumpEqual;": "\u224F", 8259 "hybull;": "\u2043", 8260 "hyphen;": "\u2010", 8261 "Iacute;": "\u00CD", 8262 "Iacute": "\u00CD", 8263 "iacute;": "\u00ED", 8264 "iacute": "\u00ED", 8265 "ic;": "\u2063", 8266 "Icirc;": "\u00CE", 8267 "Icirc": "\u00CE", 8268 "icirc;": "\u00EE", 8269 "icirc": "\u00EE", 8270 "Icy;": "\u0418", 8271 "icy;": "\u0438", 8272 "Idot;": "\u0130", 8273 "IEcy;": "\u0415", 8274 "iecy;": "\u0435", 8275 "iexcl;": "\u00A1", 8276 "iexcl": "\u00A1", 8277 "iff;": "\u21D4",
8278 "ifr;": "\uD835\uDD26", 8279 "Ifr;": "\u2111", 8280 "Igrave;": "\u00CC", 8281 "Igrave": "\u00CC", 8282 "igrave;": "\u00EC", 8283 "igrave": "\u00EC", 8284 "ii;": "\u2148", 8285 "iiiint;": "\u2A0C", 8286 "iiint;": "\u222D", 8287 "iinfin;": "\u29DC", 8288 "iiota;": "\u2129", 8289 "IJlig;": "\u0132", 8290 "ijlig;": "\u0133", 8291 "Imacr;": "\u012A", 8292 "imacr;": "\u012B", 8293 "image;": "\u2111", 8294 "ImaginaryI;": "\u2148", 8295 "imagline;": "\u2110", 8296 "imagpart;": "\u2111", 8297 "imath;": "\u0131", 8298 "Im;": "\u2111", 8299 "imof;": "\u22B7", 8300 "imped;": "\u01B5", 8301 "Implies;": "\u21D2", 8302 "incare;": "\u2105", 8303 "in;": "\u2208", 8304 "infin;": "\u221E", 8305 "infintie;": "\u29DD", 8306 "inodot;": "\u0131", 8307 "intcal;": "\u22BA", 8308 "int;": "\u222B", 8309 "Int;": "\u222C", 8310 "integers;": "\u2124", 8311 "Integral;": "\u222B", 8312 "intercal;": "\u22BA", 8313 "Intersection;": "\u22C2", 8314 "intlarhk;": "\u2A17", 8315 "intprod;": "\u2A3C", 8316 "InvisibleComma;": "\u2063", 8317 "InvisibleTimes;": "\u2062", 8318 "IOcy;": "\u0401", 8319 "iocy;": "\u0451", 8320 "Iogon;": "\u012E", 8321 "iogon;": "\u012F", 8322 "Iopf;": "\uD835\uDD40", 8323 "iopf;": "\uD835\uDD5A", 8324 "Iota;": "\u0399", 8325 "iota;": "\u03B9", 8326 "iprod;": "\u2A3C", 8327 "iquest;": "\u00BF", 8328 "iquest": "\u00BF", 8329 "iscr;": "\uD835\uDCBE", 8330 "Iscr;": "\u2110", 8331 "isin;": "\u2208", 8332 "isindot;": "\u22F5", 8333 "isinE;": "\u22F9", 8334 "isins;": "\u22F4", 8335 "isinsv;": "\u22F3", 8336 "isinv;": "\u2208", 8337 "it;": "\u2062", 8338 "Itilde;": "\u0128", 8339 "itilde;": "\u0129", 8340 "Iukcy;": "\u0406", 8341 "iukcy;": "\u0456", 8342 "Iuml;": "\u00CF", 8343 "Iuml": "\u00CF", 8344 "iuml;": "\u00EF", 8345 "iuml": "\u00EF", 8346 "Jcirc;": "\u0134", 8347 "jcirc;": "\u0135", 8348 "Jcy;": "\u0419", 8349 "jcy;": "\u0439", 8350 "Jfr;": "\uD835\uDD0D", 8351 "jfr;": "\uD835\uDD27", 8352 "jmath;": "\u0237", 8353 "Jopf;": "\uD835\uDD41", 8354 "jopf;": "\uD835\uDD5B", 8355 "Jscr;": "\uD835\uDCA5", 8356 "jscr;": "\uD835\uDCBF", 8357 "Jsercy;": "\u0408", 8358 "jsercy;": "\u0458", 8359 "Jukcy;": "\u0404", 8360 "jukcy;": "\u0454", 8361 "Kappa;": "\u039A", 8362 "kappa;": "\u03BA", 8363 "kappav;": "\u03F0", 8364 "Kcedil;": "\u0136", 8365 "kcedil;": "\u0137", 8366 "Kcy;": "\u041A", 8367 "kcy;": "\u043A", 8368 "Kfr;": "\uD835\uDD0E", 8369 "kfr;": "\uD835\uDD28", 8370 "kgreen;": "\u0138", 8371 "KHcy;": "\u0425", 8372 "khcy;": "\u0445", 8373 "KJcy;": "\u040C", 8374 "kjcy;": "\u045C", 8375 "Kopf;": "\uD835\uDD42", 8376 "kopf;": "\uD835\uDD5C", 8377 "Kscr;": "\uD835\uDCA6", 8378 "kscr;": "\uD835\uDCC0", 8379 "lAarr;": "\u21DA", 8380 "Lacute;": "\u0139", 8381 "lacute;": "\u013A", 8382 "laemptyv;": "\u29B4", 8383 "lagran;": "\u2112", 8384 "Lambda;": "\u039B", 8385 "lambda;": "\u03BB", 8386 "lang;": "\u27E8", 8387 "Lang;": "\u27EA", 8388 "langd;": "\u2991", 8389 "langle;": "\u27E8", 8390 "lap;": "\u2A85", 8391 "Laplacetrf;": "\u2112", 8392 "laquo;": "\u00AB", 8393 "laquo": "\u00AB", 8394 "larrb;": "\u21E4", 8395 "larrbfs;": "\u291F", 8396 "larr;": "\u2190", 8397 "Larr;": "\u219E", 8398 "lArr;": "\u21D0", 8399 "larrfs;": "\u291D", 8400 "larrhk;": "\u21A9", 8401 "larrlp;": "\u21AB", 8402 "larrpl;": "\u2939", 8403 "larrsim;": "\u2973", 8404 "larrtl;": "\u21A2", 8405 "latail;": "\u2919", 8406 "lAtail;": "\u291B", 8407 "lat;": "\u2AAB", 8408 "late;": "\u2AAD", 8409 "lates;": "\u2AAD\uFE00", 8410 "lbarr;": "\u290C", 8411 "lBarr;": "\u290E", 8412 "lbbrk;": "\u2772", 8413 "lbrace;": "\u007B", 8414 "lbrack;": "\u005B", 8415 "lbrke;": "\u298B", 8416 "lbrksld;": "\u298F", 8417 "lbrkslu;": "\u298D", 8418 "Lcaron;": "\u013D", 8419 "lcaron;": "\u013E", 8420 "Lcedil;": "\u013B", 8421 "lcedil;": "\u013C", 8422 "lceil;": "\u2308", 8423 "lcub;": "\u007B", 8424 "Lcy;": "\u041B", 8425 "lcy;": "\u043B", 8426 "ldca;": "\u2936", 8427 "ldquo;": "\u201C", 8428 "ldquor;": "\u201E", 8429 "ldrdhar;": "\u2967", 8430 "ldrushar;": "\u294B", 8431 "ldsh;": "\u21B2", 8432 "le;": "\u2264", 8433 "lE;": "\u2266", 8434 "LeftAngleBracket;": "\u27E8", 8435 "LeftArrowBar;": "\u21E4", 8436 "leftarrow;": "\u2190", 8437 "LeftArrow;": "\u2190", 8438 "Leftarrow;": "\u21D0", 8439 "LeftArrowRightArrow;": "\u21C6", 8440 "leftarrowtail;": "\u21A2", 8441 "LeftCeiling;": "\u2308", 8442 "LeftDoubleBracket;": "\u27E6", 8443 "LeftDownTeeVector;": "\u2961", 8444 "LeftDownVectorBar;": "\u2959", 8445 "LeftDownVector;": "\u21C3", 8446 "LeftFloor;": "\u230A", 8447 "leftharpoondown;": "\u21BD", 8448 "leftharpoonup;": "\u21BC", 8449 "leftleftarrows;": "\u21C7", 8450 "leftrightarrow;": "\u2194", 8451 "LeftRightArrow;": "\u2194", 8452 "Leftrightarrow;": "\u21D4", 8453 "leftrightarrows;": "\u21C6", 8454 "leftrightharpoons;": "\u21CB", 8455 "leftrightsquigarrow;": "\u21AD", 8456 "LeftRightVector;": "\u294E", 8457 "LeftTeeArrow;": "\u21A4", 8458 "LeftTee;": "\u22A3", 8459 "LeftTeeVector;": "\u295A", 8460 "leftthreetimes;": "\u22CB", 8461 "LeftTriangleBar;": "\u29CF", 8462 "LeftTriangle;": "\u22B2", 8463 "LeftTriangleEqual;": "\u22B4", 8464 "LeftUpDownVector;": "\u2951", 8465 "LeftUpTeeVector;": "\u2960", 8466 "LeftUpVectorBar;": "\u2958", 8467 "LeftUpVector;": "\u21BF", 8468 "LeftVectorBar;": "\u2952", 8469 "LeftVector;": "\u21BC", 8470 "lEg;": "\u2A8B", 8471 "leg;": "\u22DA", 8472 "leq;": "\u2264", 8473 "leqq;": "\u2266", 8474 "leqslant;": "\u2A7D", 8475 "lescc;": "\u2AA8", 8476 "les;": "\u2A7D", 8477 "lesdot;": "\u2A7F", 8478 "lesdoto;": "\u2A81", 8479 "lesdotor;": "\u2A83", 8480 "lesg;": "\u22DA\uFE00", 8481 "lesges;": "\u2A93", 8482 "lessapprox;": "\u2A85", 8483 "lessdot;": "\u22D6", 8484 "lesseqgtr;": "\u22DA", 8485 "lesseqqgtr;": "\u2A8B", 8486 "LessEqualGreater;": "\u22DA", 8487 "LessFullEqual;": "\u2266", 8488 "LessGreater;": "\u2276", 8489 "lessgtr;": "\u2276", 8490 "LessLess;": "\u2AA1", 8491 "lesssim;": "\u2272", 8492 "LessSlantEqual;": "\u2A7D", 8493 "LessTilde;": "\u2272", 8494 "lfisht;": "\u297C", 8495 "lfloor;": "\u230A", 8496 "Lfr;": "\uD835\uDD0F", 8497 "lfr;": "\uD835\uDD29", 8498 "lg;": "\u2276", 8499 "lgE;
8499": "\u2A91", 8500 "lHar;": "\u2962", 8501 "lhard;": "\u21BD", 8502 "lharu;": "\u21BC", 8503 "lharul;": "\u296A", 8504 "lhblk;": "\u2584", 8505 "LJcy;": "\u0409", 8506 "ljcy;": "\u0459", 8507 "llarr;": "\u21C7", 8508 "ll;": "\u226A", 8509 "Ll;": "\u22D8", 8510 "llcorner;": "\u231E", 8511 "Lleftarrow;": "\u21DA", 8512 "llhard;": "\u296B", 8513 "lltri;": "\u25FA", 8514 "Lmidot;": "\u013F", 8515 "lmidot;": "\u0140", 8516 "lmoustache;": "\u23B0", 8517 "lmoust;": "\u23B0", 8518 "lnap;": "\u2A89", 8519 "lnapprox;": "\u2A89", 8520 "lne;": "\u2A87", 8521 "lnE;": "\u2268", 8522 "lneq;": "\u2A87", 8523 "lneqq;": "\u2268", 8524 "lnsim;": "\u22E6", 8525 "loang;": "\u27EC", 8526 "loarr;": "\u21FD", 8527 "lobrk;": "\u27E6", 8528 "longleftarrow;": "\u27F5", 8529 "LongLeftArrow;": "\u27F5", 8530 "Longleftarrow;": "\u27F8", 8531 "longleftrightarrow;": "\u27F7", 8532 "LongLeftRightArrow;": "\u27F7", 8533 "Longleftrightarrow;": "\u27FA", 8534 "longmapsto;": "\u27FC", 8535 "longrightarrow;": "\u27F6", 8536 "LongRightArrow;": "\u27F6", 8537 "Longrightarrow;": "\u27F9", 8538 "looparrowleft;": "\u21AB", 8539 "looparrowright;": "\u21AC", 8540 "lopar;": "\u2985", 8541 "Lopf;": "\uD835\uDD43", 8542 "lopf;": "\uD835\uDD5D", 8543 "loplus;": "\u2A2D", 8544 "lotimes;": "\u2A34", 8545 "lowast;": "\u2217", 8546 "lowbar;": "\u005F", 8547 "LowerLeftArrow;": "\u2199", 8548 "LowerRightArrow;": "\u2198", 8549 "loz;": "\u25CA", 8550 "lozenge;": "\u25CA", 8551 "lozf;": "\u29EB", 8552 "lpar;": "\u0028", 8553 "lparlt;": "\u2993", 8554 "lrarr;": "\u21C6", 8555 "lrcorner;": "\u231F", 8556 "lrhar;": "\u21CB", 8557 "lrhard;": "\u296D", 8558 "lrm;": "\u200E", 8559 "lrtri;": "\u22BF", 8560 "lsaquo;": "\u2039", 8561 "lscr;": "\uD835\uDCC1", 8562 "Lscr;": "\u2112", 8563 "lsh;": "\u21B0", 8564 "Lsh;": "\u21B0", 8565 "lsim;": "\u2272", 8566 "lsime;": "\u2A8D", 8567 "lsimg;": "\u2A8F", 8568 "lsqb;": "\u005B", 8569 "lsquo;": "\u2018", 8570 "lsquor;": "\u201A", 8571 "Lstrok;": "\u0141", 8572 "lstrok;": "\u0142", 8573 "ltcc;": "\u2AA6", 8574 "ltcir;": "\u2A79", 8575 "lt;": "\u003C", 8576 "lt": "\u003C", 8577 "LT;": "\u003C", 8578 "LT": "\u003C", 8579 "Lt;": "\u226A", 8580 "ltdot;": "\u22D6", 8581 "lthree;": "\u22CB", 8582 "ltimes;": "\u22C9", 8583 "ltlarr;": "\u2976", 8584 "ltquest;": "\u2A7B", 8585 "ltri;": "\u25C3", 8586 "ltrie;": "\u22B4", 8587 "ltrif;": "\u25C2", 8588 "ltrPar;": "\u2996", 8589 "lurdshar;": "\u294A", 8590 "luruhar;": "\u2966", 8591 "lvertneqq;": "\u2268\uFE00", 8592 "lvnE;": "\u2268\uFE00", 8593 "macr;": "\u00AF", 8594 "macr": "\u00AF", 8595 "male;": "\u2642", 8596 "malt;": "\u2720", 8597 "maltese;": "\u2720", 8598 "Map;": "\u2905", 8599 "map;": "\u21A6", 8600 "mapsto;": "\u21A6", 8601 "mapstodown;": "\u21A7", 8602 "mapstoleft;": "\u21A4", 8603 "mapstoup;": "\u21A5", 8604 "marker;": "\u25AE", 8605 "mcomma;": "\u2A29", 8606 "Mcy;": "\u041C", 8607 "mcy;": "\u043C", 8608 "mdash;": "\u2014", 8609 "mDDot;": "\u223A", 8610 "measuredangle;": "\u2221", 8611 "MediumSpace;": "\u205F", 8612 "Mellintrf;": "\u2133", 8613 "Mfr;": "\uD835\uDD10", 8614 "mfr;": "\uD835\uDD2A", 8615 "mho;": "\u2127", 8616 "micro;": "\u00B5", 8617 "micro": "\u00B5", 8618 "midast;": "\u002A", 8619 "midcir;": "\u2AF0", 8620 "mid;": "\u2223", 8621 "middot;": "\u00B7", 8622 "middot": "\u00B7", 8623 "minusb;": "\u229F", 8624 "minus;": "\u2212", 8625 "minusd;": "\u2238", 8626 "minusdu;": "\u2A2A", 8627 "MinusPlus;": "\u2213", 8628 "mlcp;": "\u2ADB", 8629 "mldr;": "\u2026", 8630 "mnplus;": "\u2213", 8631 "models;": "\u22A7", 8632 "Mopf;": "\uD835\uDD44", 8633 "mopf;": "\uD835\uDD5E", 8634 "mp;": "\u2213", 8635 "mscr;": "\uD835\uDCC2", 8636 "Mscr;": "\u2133", 8637 "mstpos;": "\u223E", 8638 "Mu;": "\u039C", 8639 "mu;": "\u03BC", 8640 "multimap;": "\u22B8", 8641 "mumap;": "\u22B8", 8642 "nabla;": "\u2207", 8643 "Nacute;": "\u0143", 8644 "nacute;": "\u0144", 8645 "nang;": "\u2220\u20D2", 8646 "nap;": "\u2249", 8647 "napE;": "\u2A70\u0338", 8648 "napid;": "\u224B\u0338", 8649 "napos;": "\u0149", 8650 "napprox;": "\u2249", 8651 "natural;": "\u266E", 8652 "naturals;": "\u2115", 8653 "natur;": "\u266E", 8654 "nbsp;": "\u00A0", 8655 "nbsp": "\u00A0", 8656 "nbump;": "\u224E\u0338", 8657 "nbumpe;": "\u224F\u0338", 8658 "ncap;": "\u2A43", 8659 "Ncaron;": "\u0147", 8660 "ncaron;": "\u0148", 8661 "Ncedil;": "\u0145", 8662 "ncedil;": "\u0146", 8663 "ncong;": "\u2247", 8664 "ncongdot;": "\u2A6D\u0338", 8665 "ncup;": "\u2A42", 8666 "Ncy;": "\u041D", 8667 "ncy;": "\u043D", 8668 "ndash;": "\u2013", 8669 "nearhk;": "\u2924", 8670 "nearr;": "\u2197", 8671 "neArr;": "\u21D7", 8672 "nearrow;": "\u2197", 8673 "ne;": "\u2260", 8674 "nedot;": "\u2250\u0338", 8675 "NegativeMediumSpace;": "\u200B", 8676 "NegativeThickSpace;": "\u200B", 8677 "NegativeThinSpace;": "\u200B", 8678 "NegativeVeryThinSpace;": "\u200B", 8679 "nequiv;": "\u2262", 8680 "nesear;": "\u2928", 8681 "nesim;": "\u2242\u0338", 8682 "NestedGreaterGreater;": "\u226B", 8683 "NestedLessLess;": "\u226A", 8684 "NewLine;": "\u000A", 8685 "nexist;": "\u2204", 8686 "nexists;": "\u2204", 8687 "Nfr;": "\uD835\uDD11", 8688 "nfr;": "\uD835\uDD2B", 8689 "ngE;": "\u2267\u0338", 8690 "nge;": "\u2271", 8691 "ngeq;": "\u2271", 8692 "ngeqq;": "\u2267\u0338", 8693 "ngeqslant;": "\u2A7E\u0338", 8694 "nges;": "\u2A7E\u0338", 8695 "nGg;": "\u22D9\u0338", 8696 "ngsim;": "\u2275", 8697 "nGt;": "\u226B\u20D2", 8698 "ngt;": "\u226F", 8699 "ngtr;": "\u226F", 8700 "nGtv;": "\u226B\u0338", 8701 "nharr;": "\u21AE", 8702 "nhArr;": "\u21CE", 8703 "nhpar;": "\u2AF2", 8704 "ni;": "\u220B", 8705 "nis;": "\u22FC", 8706 "nisd;": "\u22FA", 8707 "niv;": "\u220B", 8708 "NJcy;": "\u040A", 8709 "njcy;": "\u045A", 8710 "nlarr;": "\u219A", 8711 "nlArr;": "\u21CD", 8712 "nldr;": "\u2025", 8713 "nlE;": "\u2266\u0338", 8714 "nle;": "\u2270", 8715 "nleftarrow;": "\u219A", 8716 "nLeftarrow;": "\u21CD", 8717 "nleftrightarrow;": "\u21AE", 8718 "nLeftrightarrow;": "\u21CE", 8719 "nleq;": "\u2270", 8720 "nleqq;": "\u2266\u0338", 8721 "nleqslant;": "\u2A7D\u0338", 8722 "nles;": "\u2A7D\u0338", 8723 "nless;": "\u226E", 8724 "nLl;": "\u22D8\u0338", 8725 "nlsim;": "\u2274", 8726 "nLt;": "\u226A\u20D2", 8727 "nlt;": "\u226E", 8728 "nltri;": "\u22EA", 8729 "nltrie;": "\u22EC", 8730 "nLtv;": "\u226A\u0338", 8731 "nmid;": "\u2224", 8732 "NoBreak;": "\u2060", 8733 "NonBreakingSpace;": "\u00A0", 8734 "nopf;": "\uD835\uDD5F", 8735 "Nopf;": "\u2115", 8736 "Not;": "\u2AEC", 8737 "not;": "\u00AC", 8738 "not": "\u00AC", 8739 "NotCongruent;": "\u2262", 8740 "NotCupCap;": "\u226D", 8741 "NotDoubleVerticalBar;": "\u2226", 8742 "NotElement;": "\u2209", 8743 "NotEqual;": "\u2260", 8744 "NotEqualTilde;": "\u2242\u0338", 8745 "NotExists;": "\u2204", 8746 "NotGreater;": "\u226F", 8747 "NotGreaterEqual;": "\u2271", 8748 "NotGreaterFullEqual;": "\u2267\u0338", 8749 "NotGreaterGreater;": "\u226B\u0338", 8750 "NotGreaterLess;": "\u2279", 8751 "NotGreaterSlantEqual;": "\u2A7E\u0338", 8752 "NotGreaterTilde;": "\u2275", 8753 "NotHumpDownHump;": "\u224E\u0338", 8754 "NotHumpEqual;": "\u224F\u0338", 8755 "notin;": "\u2209", 8756 "notindot;": "\u22F5\u0338", 8757 "notinE;": "\u22F9\u0338", 8758 "notinva;": "\u2209", 8759 "notinvb;": "\u22F7", 8760 "notinvc;": "\u22F6", 8761 "NotLeftTriangleBar;": "\u29CF\u0338", 8762 "NotLeftTriangle;": "\u22EA", 8763 "NotLeftTriangleEqual;": "\u22EC", 8764 "NotLess;": "\u226E", 8765 "NotLessEqual;": "\u2270", 8766 "NotLessGreater;": "\u2278", 8767 "NotLessLess;": "\u226A\u0338", 8768 "NotLessSlantEqual;": "\u2A7D\u0338", 8769 "NotLessTilde;": "\u2274", 8770 "NotNestedGreaterGreater;": "\u2AA2\u0338", 8771 "NotNestedLessLess;": "\u2AA1\u0338", 8772 "notni;": "\u220C", 8773 "notniva;": "\u220C", 8774 "notnivb;": "\u22FE", 8775 "notnivc;": "\u22FD", 8776 "NotPrecedes;": "\u2280", 8777 "NotPrecedesEqual;": "\u2AAF\u0338", 8778 "NotPrecedesSlantEqual;": "\u22E0", 8779 "NotReverseElement;": "\u220C", 8780 "NotRightTriangleBar;": "\u29D0\u0338", 8781 "NotRightTriangle;": "\u22EB", 8782 "NotRightTriangleEqual;": "\u22ED", 8783 "NotSquareSubset;": "\u228F\u0338", 8784 "NotSquareSubsetEqual;": "\u22E2", 8785 "NotSquareSuperset;": "\u2290\u0338", 8786 "NotSquareSupersetEqual;": "\u22E3", 8787 "NotSubset;": "\u2282\u20D2", 8788 "NotSubsetEqual;": "\u2288", 8789 "NotSucceeds;": "\u2281", 8790 "NotSucceedsEqual;": "\u2AB0\u0338", 8791 "NotSucceedsSlantEqual;": "\u22E1", 8792 "NotSucceedsTilde;": "\u227F\u0338", 8793 "NotSuperset;": "\u2283\u20D2", 8794 "NotSupersetEqual;": "\u2289", 8795 "NotTilde;": "\u2241", 8796 "NotTildeEqual;": "\u2244", 8797 "NotTildeFullEqual;": "\u2247", 8798 "NotTildeTilde;": "\u2249", 8799 "NotVerticalBar;": "\u2224", 8800 "nparallel;": "\u2226", 8801 "npar;": "\u2226", 8802 "nparsl;": "\u2AFD\u20E5", 8803 "npart;
8803": "\u2202\u0338", 8804 "npolint;": "\u2A14", 8805 "npr;": "\u2280", 8806 "nprcue;": "\u22E0", 8807 "nprec;": "\u2280", 8808 "npreceq;": "\u2AAF\u0338", 8809 "npre;": "\u2AAF\u0338", 8810 "nrarrc;": "\u2933\u0338", 8811 "nrarr;": "\u219B", 8812 "nrArr;": "\u21CF", 8813 "nrarrw;": "\u219D\u0338", 8814 "nrightarrow;": "\u219B", 8815 "nRightarrow;": "\u21CF", 8816 "nrtri;": "\u22EB", 8817 "nrtrie;": "\u22ED", 8818 "nsc;": "\u2281", 8819 "nsccue;": "\u22E1", 8820 "nsce;": "\u2AB0\u0338", 8821 "Nscr;": "\uD835\uDCA9", 8822 "nscr;": "\uD835\uDCC3", 8823 "nshortmid;": "\u2224", 8824 "nshortparallel;": "\u2226", 8825 "nsim;": "\u2241", 8826 "nsime;": "\u2244", 8827 "nsimeq;": "\u2244", 8828 "nsmid;": "\u2224", 8829 "nspar;": "\u2226", 8830 "nsqsube;": "\u22E2", 8831 "nsqsupe;": "\u22E3", 8832 "nsub;": "\u2284", 8833 "nsubE;": "\u2AC5\u0338", 8834 "nsube;": "\u2288", 8835 "nsubset;": "\u2282\u20D2", 8836 "nsubseteq;": "\u2288", 8837 "nsubseteqq;": "\u2AC5\u0338", 8838 "nsucc;": "\u2281", 8839 "nsucceq;": "\u2AB0\u0338", 8840 "nsup;": "\u2285", 8841 "nsupE;": "\u2AC6\u0338", 8842 "nsupe;": "\u2289", 8843 "nsupset;": "\u2283\u20D2", 8844 "nsupseteq;": "\u2289", 8845 "nsupseteqq;": "\u2AC6\u0338", 8846 "ntgl;": "\u2279", 8847 "Ntilde;": "\u00D1", 8848 "Ntilde": "\u00D1", 8849 "ntilde;": "\u00F1", 8850 "ntilde": "\u00F1", 8851 "ntlg;": "\u2278", 8852 "ntriangleleft;": "\u22EA", 8853 "ntrianglelefteq;": "\u22EC", 8854 "ntriangleright;": "\u22EB", 8855 "ntrianglerighteq;": "\u22ED", 8856 "Nu;": "\u039D", 8857 "nu;": "\u03BD", 8858 "num;": "\u0023", 8859 "numero;": "\u2116", 8860 "numsp;": "\u2007", 8861 "nvap;": "\u224D\u20D2", 8862 "nvdash;": "\u22AC", 8863 "nvDash;": "\u22AD", 8864 "nVdash;": "\u22AE", 8865 "nVDash;": "\u22AF", 8866 "nvge;": "\u2265\u20D2", 8867 "nvgt;": "\u003E\u20D2", 8868 "nvHarr;": "\u2904", 8869 "nvinfin;": "\u29DE", 8870 "nvlArr;": "\u2902", 8871 "nvle;": "\u2264\u20D2", 8872 "nvlt;": "\u003C\u20D2", 8873 "nvltrie;": "\u22B4\u20D2", 8874 "nvrArr;": "\u2903", 8875 "nvrtrie;": "\u22B5\u20D2", 8876 "nvsim;": "\u223C\u20D2", 8877 "nwarhk;": "\u2923", 8878 "nwarr;": "\u2196", 8879 "nwArr;": "\u21D6", 8880 "nwarrow;": "\u2196", 8881 "nwnear;": "\u2927", 8882 "Oacute;": "\u00D3", 8883 "Oacute": "\u00D3", 8884 "oacute;": "\u00F3", 8885 "oacute": "\u00F3", 8886 "oast;": "\u229B", 8887 "Ocirc;": "\u00D4", 8888 "Ocirc": "\u00D4", 8889 "ocirc;": "\u00F4", 8890 "ocirc": "\u00F4", 8891 "ocir;": "\u229A", 8892 "Ocy;": "\u041E", 8893 "ocy;": "\u043E", 8894 "odash;": "\u229D", 8895 "Odblac;": "\u0150", 8896 "odblac;": "\u0151", 8897 "odiv;": "\u2A38", 8898 "odot;": "\u2299", 8899 "odsold;": "\u29BC", 8900 "OElig;": "\u0152", 8901 "oelig;": "\u0153", 8902 "ofcir;": "\u29BF", 8903 "Ofr;": "\uD835\uDD12", 8904 "ofr;": "\uD835\uDD2C", 8905 "ogon;": "\u02DB", 8906 "Ograve;": "\u00D2", 8907 "Ograve": "\u00D2", 8908 "ograve;": "\u00F2", 8909 "ograve": "\u00F2", 8910 "ogt;": "\u29C1", 8911 "ohbar;": "\u29B5", 8912 "ohm;": "\u03A9", 8913 "oint;": "\u222E", 8914 "olarr;": "\u21BA", 8915 "olcir;": "\u29BE", 8916 "olcross;": "\u29BB", 8917 "oline;": "\u203E", 8918 "olt;": "\u29C0", 8919 "Omacr;": "\u014C", 8920 "omacr;": "\u014D", 8921 "Omega;": "\u03A9", 8922 "omega;": "\u03C9", 8923 "Omicron;": "\u039F", 8924 "omicron;": "\u03BF", 8925 "omid;": "\u29B6", 8926 "ominus;": "\u2296", 8927 "Oopf;": "\uD835\uDD46", 8928 "oopf;": "\uD835\uDD60", 8929 "opar;": "\u29B7", 8930 "OpenCurlyDoubleQuote;": "\u201C", 8931 "OpenCurlyQuote;": "\u2018", 8932 "operp;": "\u29B9", 8933 "oplus;": "\u2295", 8934 "orarr;": "\u21BB", 8935 "Or;": "\u2A54", 8936 "or;": "\u2228", 8937 "ord;": "\u2A5D", 8938 "order;": "\u2134", 8939 "orderof;": "\u2134", 8940 "ordf;": "\u00AA", 8941 "ordf": "\u00AA", 8942 "ordm;": "\u00BA", 8943 "ordm": "\u00BA", 8944 "origof;": "\u22B6", 8945 "oror;": "\u2A56", 8946 "orslope;": "\u2A57", 8947 "orv;": "\u2A5B", 8948 "oS;": "\u24C8", 8949 "Oscr;": "\uD835\uDCAA", 8950 "oscr;": "\u2134", 8951 "Oslash;": "\u00D8", 8952 "Oslash": "\u00D8", 8953 "oslash;": "\u00F8", 8954 "oslash": "\u00F8", 8955 "osol;": "\u2298", 8956 "Otilde;": "\u00D5", 8957 "Otilde": "\u00D5", 8958 "otilde;": "\u00F5", 8959 "otilde": "\u00F5", 8960 "otimesas;": "\u2A36", 8961 "Otimes;": "\u2A37", 8962 "otimes;": "\u2297", 8963 "Ouml;": "\u00D6", 8964 "Ouml": "\u00D6", 8965 "ouml;": "\u00F6", 8966 "ouml": "\u00F6", 8967 "ovbar;": "\u233D", 8968 "OverBar;": "\u203E", 8969 "OverBrace;": "\u23DE", 8970 "OverBracket;": "\u23B4", 8971 "OverParenthesis;": "\u23DC", 8972 "para;": "\u00B6", 8973 "para": "\u00B6", 8974 "parallel;": "\u2225", 8975 "par;": "\u2225", 8976 "parsim;": "\u2AF3", 8977 "parsl;": "\u2AFD", 8978 "part;": "\u2202", 8979 "PartialD;": "\u2202", 8980 "Pcy;": "\u041F", 8981 "pcy;": "\u043F", 8982 "percnt;": "\u0025", 8983 "period;": "\u002E", 8984 "permil;": "\u2030", 8985 "perp;": "\u22A5", 8986 "pertenk;": "\u2031", 8987 "Pfr;": "\uD835\uDD13", 8988 "pfr;": "\uD835\uDD2D", 8989 "Phi;": "\u03A6", 8990 "phi;": "\u03C6", 8991 "phiv;": "\u03D5", 8992 "phmmat;": "\u2133", 8993 "phone;": "\u260E", 8994 "Pi;": "\u03A0", 8995 "pi;": "\u03C0", 8996 "pitchfork;": "\u22D4", 8997 "piv;": "\u03D6", 8998 "planck;": "\u210F", 8999 "planckh;": "\u210E", 9000 "plankv;": "\u210F", 9001 "plusacir;": "\u2A23", 9002 "plusb;": "\u229E", 9003 "pluscir;": "\u2A22", 9004 "plus;": "\u002B", 9005 "plusdo;": "\u2214", 9006 "plusdu;": "\u2A25", 9007 "pluse;": "\u2A72", 9008 "PlusMinus;": "\u00B1", 9009 "plusmn;": "\u00B1", 9010 "plusmn": "\u00B1", 9011 "plussim;": "\u2A26", 9012 "plustwo;": "\u2A27", 9013 "pm;": "\u00B1", 9014 "Poincareplane;": "\u210C", 9015 "pointint;": "\u2A15", 9016 "popf;": "\uD835\uDD61", 9017 "Popf;": "\u2119", 9018 "pound;": "\u00A3", 9019 "pound": "\u00A3", 9020 "prap;": "\u2AB7", 9021 "Pr;": "\u2ABB", 9022 "pr;": "\u227A", 9023 "prcue;": "\u227C", 9024 "precapprox;": "\u2AB7", 9025 "prec;": "\u227A", 9026 "preccurlyeq;": "\u227C", 9027 "Precedes;": "\u227A", 9028 "PrecedesEqual;": "\u2AAF", 9029 "PrecedesSlantEqual;": "\u227C", 9030 "PrecedesTilde;": "\u227E", 9031 "preceq;": "\u2AAF", 9032 "precnapprox;": "\u2AB9", 9033 "precneqq;": "\u2AB5", 9034 "precnsim;": "\u22E8", 9035 "pre;": "\u2AAF", 9036 "prE;": "\u2AB3", 9037 "precsim;": "\u227E", 9038 "prime;": "\u2032", 9039 "Prime;": "\u2033", 9040 "primes;": "\u2119", 9041 "prnap;": "\u2AB9", 9042 "prnE;": "\u2AB5", 9043 "prnsim;": "\u22E8", 9044 "prod;": "\u220F", 9045 "Product;": "\u220F", 9046 "profalar;": "\u232E", 9047 "profline;": "\u2312", 9048 "profsurf;": "\u2313", 9049 "prop;": "\u221D", 9050 "Proportional;": "\u221D", 9051 "Proportion;": "\u2237", 9052 "propto;": "\u221D", 9053 "prsim;": "\u227E", 9054 "prurel;": "\u22B0", 9055 "Pscr;": "\uD835\uDCAB", 9056 "pscr;": "\uD835\uDCC5", 9057 "Psi;": "\u03A8", 9058 "psi;": "\u03C8", 9059 "puncsp;": "\u2008", 9060 "Qfr;": "\uD835\uDD14", 9061 "qfr;": "\uD835\uDD2E", 9062 "qint;": "\u2A0C", 9063 "qopf;": "\uD835\uDD62", 9064 "Qopf;": "\u211A", 9065 "qprime;": "\u2057", 9066 "Qscr;": "\uD835\uDCAC", 9067 "qscr;": "\uD835\uDCC6", 9068 "quaternions;": "\u210D", 9069 "quatint;": "\u2A16", 9070 "quest;": "\u003F", 9071 "questeq;": "\u225F", 9072 "quot;": "\u0022", 9073 "quot": "\u0022", 9074 "QUOT;": "\u0022", 9075 "QUOT": "\u0022", 9076 "rAarr;": "\u21DB", 9077 "race;": "\u223D\u0331", 9078 "Racute;": "\u0154", 9079 "racute;": "\u0155", 9080 "radic;": "\u221A", 9081 "raemptyv;": "\u29B3", 9082 "rang;": "\u27E9", 9083 "Rang;": "\u27EB", 9084 "rangd;": "\u2992", 9085 "range;": "\u29A5", 9086 "rangle;": "\u27E9", 9087 "raquo;": "\u00BB", 9088 "raquo": "\u00BB", 9089 "rarrap;": "\u2975", 9090 "rarrb;": "\u21E5",
9091 "rarrbfs;": "\u2920", 9092 "rarrc;": "\u2933", 9093 "rarr;": "\u2192", 9094 "Rarr;": "\u21A0", 9095 "rArr;": "\u21D2", 9096 "rarrfs;": "\u291E", 9097 "rarrhk;": "\u21AA", 9098 "rarrlp;": "\u21AC", 9099 "rarrpl;": "\u2945", 9100 "rarrsim;": "\u2974", 9101 "Rarrtl;": "\u2916", 9102 "rarrtl;": "\u21A3", 9103 "rarrw;": "\u219D", 9104 "ratail;": "\u291A", 9105 "rAtail;": "\u291C", 9106 "ratio;": "\u2236", 9107 "rationals;": "\u211A", 9108 "rbarr;": "\u290D", 9109 "rBarr;": "\u290F", 9110 "RBarr;": "\u2910", 9111 "rbbrk;": "\u2773", 9112 "rbrace;": "\u007D", 9113 "rbrack;": "\u005D", 9114 "rbrke;": "\u298C", 9115 "rbrksld;": "\u298E", 9116 "rbrkslu;": "\u2990", 9117 "Rcaron;": "\u0158", 9118 "rcaron;": "\u0159", 9119 "Rcedil;": "\u0156", 9120 "rcedil;": "\u0157", 9121 "rceil;": "\u2309", 9122 "rcub;": "\u007D", 9123 "Rcy;": "\u0420", 9124 "rcy;": "\u0440", 9125 "rdca;": "\u2937", 9126 "rdldhar;": "\u2969", 9127 "rdquo;": "\u201D", 9128 "rdquor;": "\u201D", 9129 "rdsh;": "\u21B3", 9130 "real;": "\u211C", 9131 "realine;": "\u211B", 9132 "realpart;": "\u211C", 9133 "reals;": "\u211D", 9134 "Re;": "\u211C", 9135 "rect;": "\u25AD", 9136 "reg;": "\u00AE", 9137 "reg": "\u00AE", 9138 "REG;": "\u00AE", 9139 "REG": "\u00AE", 9140 "ReverseElement;": "\u220B", 9141 "ReverseEquilibrium;": "\u21CB", 9142 "ReverseUpEquilibrium;": "\u296F", 9143 "rfisht;": "\u297D", 9144 "rfloor;": "\u230B", 9145 "rfr;": "\uD835\uDD2F", 9146 "Rfr;": "\u211C", 9147 "rHar;": "\u2964", 9148 "rhard;": "\u21C1", 9149 "rharu;": "\u21C0", 9150 "rharul;": "\u296C", 9151 "Rho;": "\u03A1", 9152 "rho;": "\u03C1", 9153 "rhov;": "\u03F1", 9154 "RightAngleBracket;": "\u27E9", 9155 "RightArrowBar;": "\u21E5", 9156 "rightarrow;": "\u2192", 9157 "RightArrow;": "\u2192", 9158 "Rightarrow;": "\u21D2", 9159 "RightArrowLeftArrow;": "\u21C4", 9160 "rightarrowtail;": "\u21A3", 9161 "RightCeiling;": "\u2309", 9162 "RightDoubleBracket;": "\u27E7", 9163 "RightDownTeeVector;": "\u295D", 9164 "RightDownVectorBar;": "\u2955", 9165 "RightDownVector;": "\u21C2", 9166 "RightFloor;": "\u230B", 9167 "rightharpoondown;": "\u21C1", 9168 "rightharpoonup;": "\u21C0", 9169 "rightleftarrows;": "\u21C4", 9170 "rightleftharpoons;": "\u21CC", 9171 "rightrightarrows;": "\u21C9", 9172 "rightsquigarrow;": "\u219D", 9173 "RightTeeArrow;": "\u21A6", 9174 "RightTee;": "\u22A2", 9175 "RightTeeVector;": "\u295B", 9176 "rightthreetimes;": "\u22CC", 9177 "RightTriangleBar;": "\u29D0", 9178 "RightTriangle;": "\u22B3", 9179 "RightTriangleEqual;": "\u22B5", 9180 "RightUpDownVector;": "\u294F", 9181 "RightUpTeeVector;": "\u295C", 9182 "RightUpVectorBar;": "\u2954", 9183 "RightUpVector;": "\u21BE", 9184 "RightVectorBar;": "\u2953", 9185 "RightVector;": "\u21C0", 9186 "ring;": "\u02DA", 9187 "risingdotseq;": "\u2253", 9188 "rlarr;": "\u21C4", 9189 "rlhar;": "\u21CC", 9190 "rlm;": "\u200F", 9191 "rmoustache;": "\u23B1", 9192 "rmoust;": "\u23B1", 9193 "rnmid;": "\u2AEE", 9194 "roang;": "\u27ED", 9195 "roarr;": "\u21FE", 9196 "robrk;": "\u27E7", 9197 "ropar;": "\u2986", 9198 "ropf;": "\uD835\uDD63", 9199 "Ropf;": "\u211D", 9200 "roplus;": "\u2A2E", 9201 "rotimes;": "\u2A35", 9202 "RoundImplies;": "\u2970", 9203 "rpar;": "\u0029", 9204 "rpargt;": "\u2994", 9205 "rppolint;": "\u2A12", 9206 "rrarr;": "\u21C9", 9207 "Rrightarrow;": "\u21DB", 9208 "rsaquo;": "\u203A", 9209 "rscr;": "\uD835\uDCC7", 9210 "Rscr;": "\u211B", 9211 "rsh;": "\u21B1", 9212 "Rsh;": "\u21B1", 9213 "rsqb;": "\u005D", 9214 "rsquo;": "\u2019", 9215 "rsquor;": "\u2019", 9216 "rthree;": "\u22CC", 9217 "rtimes;": "\u22CA", 9218 "rtri;": "\u25B9", 9219 "rtrie;": "\u22B5", 9220 "rtrif;": "\u25B8", 9221 "rtriltri;": "\u29CE", 9222 "RuleDelayed;": "\u29F4", 9223 "ruluhar;": "\u2968", 9224 "rx;": "\u211E", 9225 "Sacute;": "\u015A", 9226 "sacute;": "\u015B", 9227 "sbquo;": "\u201A", 9228 "scap;": "\u2AB8", 9229 "Scaron;": "\u0160", 9230 "scaron;": "\u0161", 9231 "Sc;": "\u2ABC", 9232 "sc;": "\u227B", 9233 "sccue;": "\u227D", 9234 "sce;": "\u2AB0", 9235 "scE;": "\u2AB4", 9236 "Scedil;": "\u015E", 9237 "scedil;": "\u015F", 9238 "Scirc;": "\u015C", 9239 "scirc;": "\u015D", 9240 "scnap;": "\u2ABA", 9241 "scnE;": "\u2AB6", 9242 "scnsim;": "\u22E9", 9243 "scpolint;": "\u2A13", 9244 "scsim;": "\u227F", 9245 "Scy;": "\u0421", 9246 "scy;": "\u0441", 9247 "sdotb;": "\u22A1", 9248 "sdot;": "\u22C5", 9249 "sdote;": "\u2A66", 9250 "searhk;": "\u2925", 9251 "searr;": "\u2198", 9252 "seArr;": "\u21D8", 9253 "searrow;": "\u2198", 9254 "sect;": "\u00A7", 9255 "sect": "\u00A7", 9256 "semi;": "\u003B", 9257 "seswar;": "\u2929", 9258 "setminus;": "\u2216", 9259 "setmn;": "\u2216", 9260 "sext;": "\u2736", 9261 "Sfr;": "\uD835\uDD16", 9262 "sfr;": "\uD835\uDD30", 9263 "sfrown;": "\u2322", 9264 "sharp;": "\u266F", 9265 "SHCHcy;": "\u0429", 9266 "shchcy;": "\u0449", 9267 "SHcy;": "\u0428", 9268 "shcy;": "\u0448", 9269 "ShortDownArrow;": "\u2193", 9270 "ShortLeftArrow;
9270": "\u2190", 9271 "shortmid;": "\u2223", 9272 "shortparallel;": "\u2225", 9273 "ShortRightArrow;": "\u2192", 9274 "ShortUpArrow;": "\u2191", 9275 "shy;": "\u00AD", 9276 "shy": "\u00AD", 9277 "Sigma;": "\u03A3", 9278 "sigma;": "\u03C3", 9279 "sigmaf;": "\u03C2", 9280 "sigmav;": "\u03C2", 9281 "sim;": "\u223C", 9282 "simdot;": "\u2A6A", 9283 "sime;": "\u2243", 9284 "simeq;": "\u2243", 9285 "simg;": "\u2A9E", 9286 "simgE;": "\u2AA0", 9287 "siml;": "\u2A9D", 9288 "simlE;": "\u2A9F", 9289 "simne;": "\u2246", 9290 "simplus;": "\u2A24", 9291 "simrarr;": "\u2972", 9292 "slarr;": "\u2190", 9293 "SmallCircle;": "\u2218", 9294 "smallsetminus;": "\u2216", 9295 "smashp;": "\u2A33", 9296 "smeparsl;": "\u29E4", 9297 "smid;": "\u2223", 9298 "smile;": "\u2323", 9299 "smt;": "\u2AAA", 9300 "smte;": "\u2AAC", 9301 "smtes;": "\u2AAC\uFE00", 9302 "SOFTcy;": "\u042C", 9303 "softcy;": "\u044C", 9304 "solbar;": "\u233F", 9305 "solb;": "\u29C4", 9306 "sol;": "\u002F", 9307 "Sopf;": "\uD835\uDD4A", 9308 "sopf;": "\uD835\uDD64", 9309 "spades;": "\u2660", 9310 "spadesuit;": "\u2660", 9311 "spar;": "\u2225", 9312 "sqcap;": "\u2293", 9313 "sqcaps;": "\u2293\uFE00", 9314 "sqcup;": "\u2294", 9315 "sqcups;": "\u2294\uFE00", 9316 "Sqrt;": "\u221A", 9317 "sqsub;": "\u228F", 9318 "sqsube;": "\u2291", 9319 "sqsubset;": "\u228F", 9320 "sqsubseteq;": "\u2291", 9321 "sqsup;": "\u2290", 9322 "sqsupe;": "\u2292", 9323 "sqsupset;": "\u2290", 9324 "sqsupseteq;": "\u2292", 9325 "square;": "\u25A1", 9326 "Square;": "\u25A1", 9327 "SquareIntersection;": "\u2293", 9328 "SquareSubset;": "\u228F", 9329 "SquareSubsetEqual;": "\u2291", 9330 "SquareSuperset;": "\u2290", 9331 "SquareSupersetEqual;": "\u2292", 9332 "SquareUnion;": "\u2294", 9333 "squarf;": "\u25AA", 9334 "squ;": "\u25A1", 9335 "squf;": "\u25AA", 9336 "srarr;": "\u2192", 9337 "Sscr;": "\uD835\uDCAE", 9338 "sscr;": "\uD835\uDCC8", 9339 "ssetmn;": "\u2216", 9340 "ssmile;": "\u2323", 9341 "sstarf;": "\u22C6", 9342 "Star;": "\u22C6", 9343 "star;": "\u2606", 9344 "starf;": "\u2605", 9345 "straightepsilon;": "\u03F5", 9346 "straightphi;": "\u03D5", 9347 "strns;": "\u00AF", 9348 "sub;": "\u2282", 9349 "Sub;": "\u22D0", 9350 "subdot;": "\u2ABD", 9351 "subE;": "\u2AC5", 9352 "sube;": "\u2286", 9353 "subedot;": "\u2AC3", 9354 "submult;": "\u2AC1", 9355 "subnE;": "\u2ACB", 9356 "subne;": "\u228A", 9357 "subplus;": "\u2ABF", 9358 "subrarr;": "\u2979", 9359 "subset;": "\u2282", 9360 "Subset;": "\u22D0", 9361 "subseteq;": "\u2286", 9362 "subseteqq;": "\u2AC5", 9363 "SubsetEqual;": "\u2286", 9364 "subsetneq;": "\u228A", 9365 "subsetneqq;": "\u2ACB", 9366 "subsim;": "\u2AC7", 9367 "subsub;": "\u2AD5", 9368 "subsup;": "\u2AD3", 9369 "succapprox;": "\u2AB8", 9370 "succ;": "\u227B", 9371 "succcurlyeq;": "\u227D", 9372 "Succeeds;": "\u227B", 9373 "SucceedsEqual;": "\u2AB0", 9374 "SucceedsSlantEqual;": "\u227D", 9375 "SucceedsTilde;": "\u227F", 9376 "succeq;": "\u2AB0", 9377 "succnapprox;": "\u2ABA", 9378 "succneqq;": "\u2AB6", 9379 "succnsim;": "\u22E9", 9380 "succsim;": "\u227F", 9381 "SuchThat;": "\u220B", 9382 "sum;": "\u2211", 9383 "Sum;": "\u2211", 9384 "sung;": "\u266A", 9385 "sup1;": "\u00B9", 9386 "sup1": "\u00B9", 9387 "sup2;": "\u00B2", 9388 "sup2": "\u00B2", 9389 "sup3;": "\u00B3", 9390 "sup3": "\u00B3", 9391 "sup;": "\u2283", 9392 "Sup;": "\u22D1", 9393 "supdot;": "\u2ABE", 9394 "supdsub;": "\u2AD8", 9395 "supE;": "\u2AC6", 9396 "supe;": "\u2287", 9397 "supedot;": "\u2AC4", 9398 "Superset;": "\u2283", 9399 "SupersetEqual;": "\u2287", 9400 "suphsol;": "\u27C9", 9401 "suphsub;": "\u2AD7", 9402 "suplarr;": "\u297B", 9403 "supmult;": "\u2AC2", 9404 "supnE;": "\u2ACC", 9405 "supne;": "\u228B", 9406 "supplus;": "\u2AC0", 9407 "supset;": "\u2283", 9408 "Supset;": "\u22D1", 9409 "supseteq;": "\u2287", 9410 "supseteqq;": "\u2AC6", 9411 "supsetneq;": "\u228B", 9412 "supsetneqq;": "\u2ACC", 9413 "supsim;": "\u2AC8", 9414 "supsub;": "\u2AD4", 9415 "supsup;": "\u2AD6", 9416 "swarhk;": "\u2926", 9417 "swarr;": "\u2199", 9418 "swArr;": "\u21D9", 9419 "swarrow;": "\u2199", 9420 "swnwar;": "\u292A", 9421 "szlig;": "\u00DF", 9422 "szlig": "\u00DF", 9423 "Tab;": "\u0009", 9424 "target;": "\u2316", 9425 "Tau;": "\u03A4", 9426 "tau;": "\u03C4", 9427 "tbrk;": "\u23B4", 9428 "Tcaron;": "\u0164", 9429 "tcaron;": "\u0165", 9430 "Tcedil;": "\u0162", 9431 "tcedil;": "\u0163", 9432 "Tcy;": "\u0422", 9433 "tcy;": "\u0442", 9434 "tdot;": "\u20DB", 9435 "telrec;": "\u2315", 9436 "Tfr;": "\uD835\uDD17", 9437 "tfr;": "\uD835\uDD31", 9438 "there4;": "\u2234", 9439 "therefore;": "\u2234", 9440 "Therefore;": "\u2234", 9441 "Theta;": "\u0398", 9442 "theta;": "\u03B8", 9443 "thetasym;": "\u03D1", 9444 "thetav;": "\u03D1", 9445 "thickapprox;": "\u2248", 9446 "thicksim;": "\u223C", 9447 "ThickSpace;": "\u205F\u200A", 9448 "ThinSpace;": "\u2009", 9449 "thinsp;": "\u2009", 9450 "thkap;": "\u2248", 9451 "thksim;": "\u223C", 9452 "THORN;": "\u00DE", 9453 "THORN": "\u00DE", 9454 "thorn;": "\u00FE", 9455 "thorn": "\u00FE", 9456 "tilde;": "\u02DC", 9457 "Tilde;": "\u223C", 9458 "TildeEqual;": "\u2243", 9459 "TildeFullEqual;": "\u2245", 9460 "TildeTilde;": "\u2248", 9461 "timesbar;": "\u2A31", 9462 "timesb;": "\u22A0", 9463 "times;": "\u00D7", 9464 "times": "\u00D7", 9465 "timesd;": "\u2A30", 9466 "tint;": "\u222D", 9467 "toea;": "\u2928", 9468 "topbot;": "\u2336", 9469 "topcir;": "\u2AF1", 9470 "top;": "\u22A4", 9471 "Topf;": "\uD835\uDD4B", 9472 "topf;": "\uD835\uDD65", 9473 "topfork;": "\u2ADA", 9474 "tosa;": "\u2929", 9475 "tprime;": "\u2034", 9476 "trade;": "\u2122", 9477 "TRADE;": "\u2122", 9478 "triangle;": "\u25B5", 9479 "triangledown;": "\u25BF", 9480 "triangleleft;": "\u25C3", 9481 "trianglelefteq;": "\u22B4", 9482 "triangleq;": "\u225C", 9483 "triangleright;": "\u25B9", 9484 "trianglerighteq;": "\u22B5", 9485 "tridot;": "\u25EC", 9486 "trie;": "\u225C", 9487 "triminus;": "\u2A3A", 9488 "TripleDot;": "\u20DB", 9489 "triplus;": "\u2A39", 9490 "trisb;": "\u29CD", 9491 "tritime;": "\u2A3B", 9492 "trpezium;": "\u23E2", 9493 "Tscr;": "\uD835\uDCAF", 9494 "tscr;": "\uD835\uDCC9", 9495 "TScy;": "\u0426", 9496 "tscy;": "\u0446", 9497 "TSHcy;": "\u040B", 9498 "tshcy;": "\u045B", 9499 "Tstrok;": "\u0166", 9500 "tstrok;": "\u0167", 9501 "twixt;": "\u226C", 9502 "twoheadleftarrow;": "\u219E", 9503 "twoheadrightarrow;": "\u21A0", 9504 "Uacute;": "\u00DA",
9505 "Uacute": "\u00DA", 9506 "uacute;": "\u00FA", 9507 "uacute": "\u00FA", 9508 "uarr;": "\u2191", 9509 "Uarr;": "\u219F", 9510 "uArr;": "\u21D1", 9511 "Uarrocir;": "\u2949", 9512 "Ubrcy;": "\u040E", 9513 "ubrcy;": "\u045E", 9514 "Ubreve;": "\u016C", 9515 "ubreve;": "\u016D", 9516 "Ucirc;": "\u00DB", 9517 "Ucirc": "\u00DB", 9518 "ucirc;": "\u00FB", 9519 "ucirc": "\u00FB", 9520 "Ucy;": "\u0423", 9521 "ucy;": "\u0443", 9522 "udarr;": "\u21C5", 9523 "Udblac;": "\u0170", 9524 "udblac;": "\u0171", 9525 "udhar;": "\u296E", 9526 "ufisht;": "\u297E", 9527 "Ufr;": "\uD835\uDD18", 9528 "ufr;": "\uD835\uDD32", 9529 "Ugrave;": "\u00D9", 9530 "Ugrave": "\u00D9", 9531 "ugrave;": "\u00F9", 9532 "ugrave": "\u00F9", 9533 "uHar;": "\u2963", 9534 "uharl;": "\u21BF", 9535 "uharr;": "\u21BE", 9536 "uhblk;": "\u2580", 9537 "ulcorn;": "\u231C", 9538 "ulcorner;": "\u231C", 9539 "ulcrop;": "\u230F", 9540 "ultri;": "\u25F8", 9541 "Umacr;": "\u016A", 9542 "umacr;": "\u016B", 9543 "uml;": "\u00A8", 9544 "uml": "\u00A8", 9545 "UnderBar;": "\u005F", 9546 "UnderBrace;": "\u23DF", 9547 "UnderBracket;": "\u23B5", 9548 "UnderParenthesis;": "\u23DD", 9549 "Union;": "\u22C3", 9550 "UnionPlus;": "\u228E", 9551 "Uogon;": "\u0172", 9552 "uogon;": "\u0173", 9553 "Uopf;": "\uD835\uDD4C", 9554 "uopf;": "\uD835\uDD66", 9555 "UpArrowBar;": "\u2912", 9556 "uparrow;": "\u2191", 9557 "UpArrow;": "\u2191", 9558 "Uparrow;": "\u21D1", 9559 "UpArrowDownArrow;": "\u21C5", 9560 "updownarrow;": "\u2195", 9561 "UpDownArrow;": "\u2195", 9562 "Updownarrow;": "\u21D5", 9563 "UpEquilibrium;": "\u296E", 9564 "upharpoonleft;": "\u21BF", 9565 "upharpoonright;": "\u21BE", 9566 "uplus;": "\u228E", 9567 "UpperLeftArrow;": "\u2196", 9568 "UpperRightArrow;": "\u2197", 9569 "upsi;": "\u03C5", 9570 "Upsi;": "\u03D2", 9571 "upsih;": "\u03D2", 9572 "Upsilon;": "\u03A5", 9573 "upsilon;": "\u03C5", 9574 "UpTeeArrow;": "\u21A5", 9575 "UpTee;": "\u22A5", 9576 "upuparrows;": "\u21C8", 9577 "urcorn;": "\u231D", 9578 "urcorner;": "\u231D", 9579 "urcrop;": "\u230E", 9580 "Uring;": "\u016E", 9581 "uring;": "\u016F", 9582 "urtri;": "\u25F9", 9583 "Uscr;": "\uD835\uDCB0", 9584 "uscr;": "\uD835\uDCCA", 9585 "utdot;": "\u22F0", 9586 "Utilde;": "\u0168", 9587 "utilde;": "\u0169", 9588 "utri;": "\u25B5", 9589 "utrif;": "\u25B4", 9590 "uuarr;": "\u21C8", 9591 "Uuml;": "\u00DC", 9592 "Uuml": "\u00DC", 9593 "uuml;": "\u00FC", 9594 "uuml": "\u00FC", 9595 "uwangle;": "\u29A7", 9596 "vangrt;": "\u299C", 9597 "varepsilon;": "\u03F5", 9598 "varkappa;": "\u03F0", 9599 "varnothing;": "\u2205", 9600 "varphi;": "\u03D5", 9601 "varpi;": "\u03D6", 9602 "varpropto;": "\u221D", 9603 "varr;": "\u2195", 9604 "vArr;": "\u21D5", 9605 "varrho;": "\u03F1", 9606 "varsigma;": "\u03C2", 9607 "varsubsetneq;": "\u228A\uFE00", 9608 "varsubsetneqq;": "\u2ACB\uFE00", 9609 "varsupsetneq;": "\u228B\uFE00", 9610 "varsupsetneqq;": "\u2ACC\uFE00", 9611 "vartheta;": "\u03D1", 9612 "vartriangleleft;": "\u22B2", 9613 "vartriangleright;": "\u22B3", 9614 "vBar;": "\u2AE8", 9615 "Vbar;": "\u2AEB", 9616 "vBarv;": "\u2AE9", 9617 "Vcy;": "\u0412", 9618 "vcy;": "\u0432", 9619 "vdash;": "\u22A2", 9620 "vDash;": "\u22A8", 9621 "Vdash;": "\u22A9", 9622 "VDash;": "\u22AB", 9623 "Vdashl;": "\u2AE6", 9624 "veebar;": "\u22BB", 9625 "vee;": "\u2228", 9626 "Vee;": "\u22C1", 9627 "veeeq;": "\u225A", 9628 "vellip;": "\u22EE", 9629 "verbar;": "\u007C", 9630 "Verbar;": "\u2016", 9631 "vert;": "\u007C", 9632 "Vert;": "\u2016", 9633 "VerticalBar;": "\u2223", 9634 "VerticalLine;": "\u007C", 9635 "VerticalSeparator;": "\u2758", 9636 "VerticalTilde;": "\u2240", 9637 "VeryThinSpace;": "\u200A", 9638 "Vfr;": "\uD835\uDD19", 9639 "vfr;": "\uD835\uDD33", 9640 "vltri;": "\u22B2", 9641 "vnsub;": "\u2282\u20D2", 9642 "vnsup;": "\u2283\u20D2", 9643 "Vopf;": "\uD835\uDD4D", 9644 "vopf;": "\uD835\uDD67", 9645 "vprop;": "\u221D", 9646 "vrtri;": "\u22B3", 9647 "Vscr;": "\uD835\uDCB1", 9648 "vscr;": "\uD835\uDCCB", 9649 "vsubnE;": "\u2ACB\uFE00", 9650 "vsubne;": "\u228A\uFE00", 9651 "vsupnE;": "\u2ACC\uFE00", 9652 "vsupne;": "\u228B\uFE00", 9653 "Vvdash;": "\u22AA", 9654 "vzigzag;": "\u299A", 9655 "Wcirc;": "\u0174", 9656 "wcirc;": "\u0175", 9657 "wedbar;": "\u2A5F", 9658 "wedge;": "\u2227", 9659 "Wedge;": "\u22C0", 9660 "wedgeq;": "\u2259", 9661 "weierp;": "\u2118", 9662 "Wfr;": "\uD835\uDD1A", 9663 "wfr;": "\uD835\uDD34", 9664 "Wopf;": "\uD835\uDD4E", 9665 "wopf;": "\uD835\uDD68", 9666 "wp;": "\u2118", 9667 "wr;": "\u2240", 9668 "wreath;": "\u2240", 9669 "Wscr;": "\uD835\uDCB2", 9670 "wscr;": "\uD835\uDCCC", 9671 "xcap;": "\u22C2", 9672 "xcirc;": "\u25EF", 9673 "xcup;": "\u22C3", 9674 "xdtri;": "\u25BD", 9675 "Xfr;": "\uD835\uDD1B", 9676 "xfr;": "\uD835\uDD35", 9677 "xharr;": "\u27F7", 9678 "xhArr;": "\u27FA", 9679 "Xi;": "\u039E", 9680 "xi;": "\u03BE", 9681 "xlarr;": "\u27F5", 9682 "xlArr;": "\u27F8",
9683 "xmap;": "\u27FC", 9684 "xnis;": "\u22FB", 9685 "xodot;": "\u2A00", 9686 "Xopf;": "\uD835\uDD4F", 9687 "xopf;": "\uD835\uDD69", 9688 "xoplus;": "\u2A01", 9689 "xotime;": "\u2A02", 9690 "xrarr;": "\u27F6", 9691 "xrArr;": "\u27F9", 9692 "Xscr;": "\uD835\uDCB3", 9693 "xscr;": "\uD835\uDCCD", 9694 "xsqcup;": "\u2A06", 9695 "xuplus;": "\u2A04", 9696 "xutri;": "\u25B3", 9697 "xvee;": "\u22C1", 9698 "xwedge;": "\u22C0", 9699 "Yacute;": "\u00DD", 9700 "Yacute": "\u00DD", 9701 "yacute;": "\u00FD", 9702 "yacute": "\u00FD", 9703 "YAcy;": "\u042F", 9704 "yacy;": "\u044F", 9705 "Ycirc;": "\u0176", 9706 "ycirc;": "\u0177", 9707 "Ycy;": "\u042B", 9708 "ycy;": "\u044B", 9709 "yen;": "\u00A5", 9710 "yen": "\u00A5", 9711 "Yfr;": "\uD835\uDD1C", 9712 "yfr;": "\uD835\uDD36", 9713 "YIcy;": "\u0407", 9714 "yicy;": "\u0457", 9715 "Yopf;": "\uD835\uDD50", 9716 "yopf;": "\uD835\uDD6A", 9717 "Yscr;": "\uD835\uDCB4", 9718 "yscr;": "\uD835\uDCCE", 9719 "YUcy;": "\u042E", 9720 "yucy;": "\u044E", 9721 "yuml;": "\u00FF", 9722 "yuml": "\u00FF", 9723 "Yuml;": "\u0178", 9724 "Zacute;": "\u0179", 9725 "zacute;": "\u017A", 9726 "Zcaron;": "\u017D", 9727 "zcaron;": "\u017E", 9728 "Zcy;": "\u0417", 9729 "zcy;": "\u0437", 9730 "Zdot;": "\u017B", 9731 "zdot;": "\u017C", 9732 "zeetrf;": "\u2128", 9733 "ZeroWidthSpace;": "\u200B", 9734 "Zeta;": "\u0396", 9735 "zeta;": "\u03B6", 9736 "zfr;": "\uD835\uDD37", 9737 "Zfr;": "\u2128", 9738 "ZHcy;": "\u0416", 9739 "zhcy;": "\u0436", 9740 "zigrarr;": "\u21DD", 9741 "zopf;": "\uD835\uDD6B", 9742 "Zopf;": "\u2124", 9743 "Zscr;": "\uD835\uDCB5", 9744 "zscr;": "\uD835\uDCCF", 9745 "zwj;": "\u200D", 9746 "zwnj;": "\u200C" 9747}; 9748 9749}, 9750{}], 975113:[function(_dereq_,module,exports){ 9752var util = _dereq_('util/'); 9753 9754var pSlice = Array.prototype.slice; 9755var hasOwn = Object.prototype.hasOwnProperty; 9756 9757var assert = module.exports = ok; 9758 9759assert.AssertionError = function AssertionError(options) { 9760 this.name = 'AssertionError'; 9761 this.actual = options.actual; 9762 this.expected = options.expected; 9763 this.operator = options.operator; 9764 if (options.message) { 9765 this.message = options.message; 9766 this.generatedMessage = false; 9767 } else { 9768 this.message = getMessage(this); 9769 this.generatedMessage = true; 9770 } 9771 var stackStartFunction = options.stackStartFunction || fail; 9772 9773 if (Error.captureStackTrace) { 9774 Error.captureStackTrace(this, stackStartFunction); 9775 } 9776 else { 9777 var err = new Error(); 9778 if (err.stack) { 9779 var out = err.stack; 9780 var fn_name = stackStartFunction.name; 9781 var idx = out.indexOf('\n' + fn_name); 9782 if (idx >= 0) { 9783 var next_line = out.indexOf('\n', idx + 1); 9784 out = out.substring(next_line + 1); 9785 } 9786 9787 this.stack = out; 9788 } 9789 } 9790}; 9791util.inherits(assert.AssertionError, Error); 9792 9793function replacer(key, value) { 9794 if (util.isUndefined(value)) { 9795 return '' + value; 9796 } 9797 if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) { 9798 return value.toString(); 9799 } 9800 if (util.isFunction(value) || util.isRegExp(value)) { 9801 return value.toString(); 9802 } 9803 return value; 9804} 9805 9806function truncate(s, n) { 9807 if (util.isString(s)) { 9808 return s.length < n ? s : s.slice(0, n); 9809 } else { 9810 return s; 9811 } 9812} 9813 9814function getMessage(self) { 9815 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + 9816 self.operator + ' ' + 9817 truncate(JSON.stringify(self.expected, replacer), 128); 9818} 9819 9820function fail(actual, expected, message, operator, stackStartFunction) { 9821 throw new assert.AssertionError({ 9822 message: message, 9823 actual: actual, 9824 expected: expected, 9825 operator: operator, 9826 stackStartFunction: stackStartFunction 9827 }); 9828} 9829assert.fail = fail; 9830 9831function ok(value, message) { 9832 if (!value) fail(value, true, message, '==', assert.ok); 9833} 9834assert.ok = ok; 9835 9836assert.equal = function equal(actual, expected, message) { 9837 if (actual != expected) fail(actual, expected, message, '==', assert.equal); 9838}; 9839 9840assert.notEqual = function notEqual(actual, expected, message) { 9841 if (actual == expected) { 9842 fail(actual, expected, message, '!=', assert.notEqual); 9843 } 9844}; 9845 9846assert.deepEqual = function deepEqual(actual, expected, message) { 9847 if (!_deepEqual(actual, expected)) { 9848 fail(actual, expected, message, 'deepEqual', assert.deepEqual); 9849 } 9850}; 9851 9852function _deepEqual(actual, expected) { 9853 if (actual === expected) { 9854 return true; 9855 9856 }
9856 else if (util.isBuffer(actual) && util.isBuffer(expected)) { 9857 if (actual.length != expected.length) return false; 9858 9859 for (var i = 0; i < actual.length; i++) { 9860 if (actual[i] !== expected[i]) return false; 9861 } 9862 9863 return true; 9864 } else if (util.isDate(actual) && util.isDate(expected)) { 9865 return actual.getTime() === expected.getTime(); 9866 } else if (util.isRegExp(actual) && util.isRegExp(expected)) { 9867 return actual.source === expected.source && 9868 actual.global === expected.global && 9869 actual.multiline === expected.multiline && 9870 actual.lastIndex === expected.lastIndex && 9871 actual.ignoreCase === expected.ignoreCase; 9872 } else if (!util.isObject(actual) && !util.isObject(expected)) { 9873 return actual == expected; 9874 } else { 9875 return objEquiv(actual, expected); 9876 } 9877} 9878 9879function isArguments(object) { 9880 return Object.prototype.toString.call(object) == '[object Arguments]'; 9881} 9882 9883function objEquiv(a, b) { 9884 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) 9885 return false; 9886 if (a.prototype !== b.prototype) return false; 9887 if (isArguments(a)) { 9888 if (!isArguments(b)) { 9889 return false; 9890 } 9891 a = pSlice.call(a); 9892 b = pSlice.call(b); 9893 return _deepEqual(a, b); 9894 } 9895 try { 9896 var ka = objectKeys(a), 9897 kb = objectKeys(b), 9898 key, i; 9899 } catch (e) {//happens when one is a string literal and the other isn't 9900 return false; 9901 } 9902 if (ka.length != kb.length) 9903 return false; 9904 ka.sort(); 9905 kb.sort(); 9906 for (i = ka.length - 1; i >= 0; i--) { 9907 if (ka[i] != kb[i]) 9908 return false; 9909 } 9910 for (i = ka.length - 1; i >= 0; i--) { 9911 key = ka[i]; 9912 if (!_deepEqual(a[key], b[key])) return false; 9913 } 9914 return true; 9915} 9916 9917assert.notDeepEqual = function notDeepEqual(actual, expected, message) { 9918 if (_deepEqual(actual, expected)) { 9919 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); 9920 } 9921}; 9922 9923assert.strictEqual = function strictEqual(actual, expected, message) { 9924 if (actual !== expected) { 9925 fail(actual, expected, message, '===', assert.strictEqual); 9926 } 9927}; 9928 9929assert.notStrictEqual = function notStrictEqual(actual, expected, message) { 9930 if (actual === expected) { 9931 fail(actual, expected, message, '!==', assert.notStrictEqual); 9932 } 9933}; 9934 9935function expectedException(actual, expected) { 9936 if (!actual || !expected) { 9937 return false; 9938 } 9939 9940 if (Object.prototype.toString.call(expected) == '[object RegExp]') { 9941 return expected.test(actual); 9942 } else if (actual instanceof expected) { 9943 return true; 9944 } else if (expected.call({}, actual) === true) { 9945 return true; 9946 } 9947 9948 return false; 9949} 9950 9951function _throws(shouldThrow, block, expected, message) { 9952 var actual; 9953 9954 if (util.isString(expected)) { 9955 message = expected; 9956 expected = null; 9957 } 9958 9959 try { 9960 block(); 9961 } catch (e) { 9962 actual = e; 9963 } 9964 9965 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + 9966 (message ? ' ' + message : '.'); 9967 9968 if (shouldThrow && !actual) { 9969 fail(actual, expected, 'Missing expected exception' + message); 9970 } 9971 9972 if (!shouldThrow && expectedException(actual, expected)) { 9973 fail(actual, expected, 'Got unwanted exception' + message); 9974 } 9975 9976 if ((shouldThrow && actual && expected && 9977 !expectedException(actual, expected)) || (!shouldThrow && actual)) { 9978 throw actual; 9979 } 9980} 9981 9982assert.throws = function(block, /*optional*/error, /*optional*/message) { 9983 _throws.apply(this, [true].concat(pSlice.call(arguments))); 9984}; 9985assert.doesNotThrow = function(block, /*optional*/message) { 9986 _throws.apply(this, [false].concat(pSlice.call(arguments))); 9987}; 9988 9989assert.ifError = function(err) { if (err) {throw err;}}; 9990 9991var objectKeys = Object.keys || function (obj) { 9992 var keys = []; 9993 for (var key in obj) { 9994 if (hasOwn.call(obj, key)) keys.push(key); 9995 } 9996 return keys; 9997}; 9998 9999}, 10000{"util/":15}], 1000114:[function(_dereq_,module,exports){ 10002module.exports = function isBuffer(arg) { 10003 return arg && typeof arg === 'object' 10004 && typeof arg.copy === 'function' 10005 && typeof arg.fill === 'function' 10006 && typeof arg.readUInt8 === 'function'; 10007} 10008}, 10009{}], 1001015:[function(_dereq_,module,exports){ 10011(function (process,global){ 10012 10013var formatRegExp = /%[sdj%]/g; 10014exports.format = function(f) { 10015 if (!isString(f)) { 10016 var objects = []; 10017 for (var i = 0; i < arguments.length; i++) { 10018 objects.push(inspect(arguments[i])); 10019 } 10020 return objects.join(' '); 10021 } 10022 10023 var i = 1; 10024 var args = arguments; 10025 var len = args.length; 10026 var str = String(f).replace(formatRegExp, function(x) { 10027 if (x === '%%') return '%'; 10028 if (i >= len) return x; 10029 switch (x) { 10030 case '%s': return String(args[i++]); 10031 case '%d': return Number(args[i++]); 10032 case '%j': 10033 try { 10034 return JSON.stringify(args[i++]); 10035 } catch (_) { 10036 return '[Circular]'; 10037 } 10038 default: 10039 return x; 10040 } 10041 }); 10042 for (var x = args[i]; i < len; x = args[++i]) { 10043 if (isNull(x) || !isObject(x)) { 10044 str += ' ' + x; 10045 } else { 10046 str += ' ' + inspect(x); 10047 } 10048 } 10049 return str; 10050}; 10051exports.deprecate = function(fn, msg) { 10052 if (isUndefined(global.process)) { 10053 return function() { 10054 return exports.deprecate(fn, msg).apply(this, arguments); 10055 }; 10056 } 10057 10058 if (process.noDeprecation === true) { 10059 return fn; 10060 } 10061 10062 var warned = false;
vendor: 10,616 bytes, lines 10063-10493
10063 function deprecated() { 10064 if (!warned) { 10065 if (process.throwDeprecation) { 10066 throw new Error(msg); 10067 } else if (process.traceDeprecation) { 10068 console.trace(msg); 10069 } else { 10070 console.error(msg); 10071 } 10072 warned = true; 10073 } 10074 return fn.apply(this, arguments); 10075 } 10076 10077 return deprecated; 10078}; 10079 10080 10081var debugs = {}; 10082var debugEnviron; 10083exports.debuglog = function(set) { 10084 if (isUndefined(debugEnviron)) 10085 debugEnviron = process.env.NODE_DEBUG || ''; 10086 set = set.toUpperCase(); 10087 if (!debugs[set]) { 10088 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { 10089 var pid = process.pid; 10090 debugs[set] = function() { 10091 var msg = exports.format.apply(exports, arguments); 10092 console.error('%s %d: %s', set, pid, msg); 10093 }; 10094 } else { 10095 debugs[set] = function() {}; 10096 } 10097 } 10098 return debugs[set]; 10099}; 10100function inspect(obj, opts) { 10101 var ctx = { 10102 seen: [], 10103 stylize: stylizeNoColor 10104 }; 10105 if (arguments.length >= 3) ctx.depth = arguments[2]; 10106 if (arguments.length >= 4) ctx.colors = arguments[3]; 10107 if (isBoolean(opts)) { 10108 ctx.showHidden = opts; 10109 } else if (opts) { 10110 exports._extend(ctx, opts); 10111 } 10112 if (isUndefined(ctx.showHidden)) ctx.showHidden = false; 10113 if (isUndefined(ctx.depth)) ctx.depth = 2; 10114 if (isUndefined(ctx.colors)) ctx.colors = false; 10115 if (isUndefined(ctx.customInspect)) ctx.customInspect = true; 10116 if (ctx.colors) ctx.stylize = stylizeWithColor; 10117 return formatValue(ctx, obj, ctx.depth); 10118} 10119exports.inspect = inspect; 10120inspect.colors = { 10121 'bold' : [1, 22], 10122 'italic' : [3, 23], 10123 'underline' : [4, 24], 10124 'inverse' : [7, 27], 10125 'white' : [37, 39], 10126 'grey' : [90, 39], 10127 'black' : [30, 39], 10128 'blue' : [34, 39], 10129 'cyan' : [36, 39], 10130 'green' : [32, 39], 10131 'magenta' : [35, 39], 10132 'red' : [31, 39], 10133 'yellow' : [33, 39] 10134}; 10135inspect.styles = { 10136 'special': 'cyan', 10137 'number': 'yellow', 10138 'boolean': 'yellow', 10139 'undefined': 'grey', 10140 'null': 'bold', 10141 'string': 'green', 10142 'date': 'magenta', 10143 'regexp': 'red' 10144}; 10145 10146 10147function stylizeWithColor(str, styleType) { 10148 var style = inspect.styles[styleType]; 10149 10150 if (style) { 10151 return '\u001b[' + inspect.colors[style][0] + 'm' + str + 10152 '\u001b[' + inspect.colors[style][1] + 'm'; 10153 } else { 10154 return str; 10155 } 10156} 10157 10158 10159function stylizeNoColor(str, styleType) { 10160 return str; 10161} 10162 10163 10164function arrayToHash(array) { 10165 var hash = {}; 10166 10167 array.forEach(function(val, idx) { 10168 hash[val] = true; 10169 }); 10170 10171 return hash; 10172} 10173 10174 10175function formatValue(ctx, value, recurseTimes) { 10176 if (ctx.customInspect && 10177 value && 10178 isFunction(value.inspect) && 10179 value.inspect !== exports.inspect && 10180 !(value.constructor && value.constructor.prototype === value)) { 10181 var ret = value.inspect(recurseTimes, ctx); 10182 if (!isString(ret)) { 10183 ret = formatValue(ctx, ret, recurseTimes); 10184 } 10185 return ret; 10186 } 10187 var primitive = formatPrimitive(ctx, value); 10188 if (primitive) { 10189 return primitive; 10190 } 10191 var keys = Object.keys(value); 10192 var visibleKeys = arrayToHash(keys); 10193 10194 if (ctx.showHidden) { 10195 keys = Object.getOwnPropertyNames(value); 10196 } 10197 if (isError(value) 10198 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { 10199 return formatError(value); 10200 } 10201 if (keys.length === 0) { 10202 if (isFunction(value)) { 10203 var name = value.name ? ': ' + value.name : ''; 10204 return ctx.stylize('[Function' + name + ']', 'special'); 10205 } 10206 if (isRegExp(value)) { 10207 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 10208 } 10209 if (isDate(value)) { 10210 return ctx.stylize(Date.prototype.toString.call(value), 'date'); 10211 } 10212 if (isError(value)) { 10213 return formatError(value); 10214 } 10215 } 10216 10217 var base = '', array = false, braces = ['{', '}']; 10218 if (isArray(value)) { 10219 array = true; 10220 braces = ['[', ']']; 10221 } 10222 if (isFunction(value)) { 10223 var n = value.name ? ': ' + value.name : ''; 10224 base = ' [Function' + n + ']'; 10225 } 10226 if (isRegExp(value)) { 10227 base = ' ' + RegExp.prototype.toString.call(value); 10228 } 10229 if (isDate(value)) { 10230 base = ' ' + Date.prototype.toUTCString.call(value); 10231 } 10232 if (isError(value)) { 10233 base = ' ' + formatError(value); 10234 } 10235 10236 if (keys.length === 0 && (!array || value.length == 0)) { 10237 return braces[0] + base + braces[1]; 10238 } 10239 10240 if (recurseTimes < 0) { 10241 if (isRegExp(value)) { 10242 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 10243 } else { 10244 return ctx.stylize('[Object]', 'special'); 10245 } 10246 } 10247 10248 ctx.seen.push(value); 10249 10250 var output; 10251 if (array) { 10252 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); 10253 } else { 10254 output = keys.map(function(key) { 10255 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); 10256 }); 10257 } 10258 10259 ctx.seen.pop(); 10260 10261 return reduceToSingleString(output, base, braces); 10262} 10263 10264 10265function formatPrimitive(ctx, value) { 10266 if (isUndefined(value)) 10267 return ctx.stylize('undefined', 'undefined'); 10268 if (isString(value)) { 10269 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') 10270 .replace(/'/g, "\\'") 10271 .replace(/\\"/g, '"') + '\''; 10272 return ctx.stylize(simple, 'string'); 10273 } 10274 if (isNumber(value)) 10275 return ctx.stylize('' + value, 'number'); 10276 if (isBoolean(value)) 10277 return ctx.stylize('' + value, 'boolean'); 10278 if (isNull(value)) 10279 return ctx.stylize('null', 'null'); 10280} 10281 10282 10283function formatError(value) { 10284 return '[' + Error.prototype.toString.call(value) + ']'; 10285} 10286 10287 10288function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { 10289 var output = []; 10290 for (var i = 0, l = value.length; i < l; ++i) { 10291 if (hasOwnProperty(value, String(i))) { 10292 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 10293 String(i), true)); 10294 } else { 10295 output.push(''); 10296 } 10297 } 10298 keys.forEach(function(key) { 10299 if (!key.match(/^\d+$/)) { 10300 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 10301 key, true)); 10302 } 10303 }); 10304 return output; 10305} 10306 10307 10308function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { 10309 var name, str, desc; 10310 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; 10311 if (desc.get) { 10312 if (desc.set) { 10313 str = ctx.stylize('[Getter/Setter]', 'special'); 10314 } else { 10315 str = ctx.stylize('[Getter]', 'special'); 10316 } 10317 } else { 10318 if (desc.set) { 10319 str = ctx.stylize('[Setter]', 'special'); 10320 } 10321 } 10322 if (!hasOwnProperty(visibleKeys, key)) { 10323 name = '[' + key + ']'; 10324 } 10325 if (!str) { 10326 if (ctx.seen.indexOf(desc.value) < 0) { 10327 if (isNull(recurseTimes)) { 10328 str = formatValue(ctx, desc.value, null); 10329 } else { 10330 str = formatValue(ctx, desc.value, recurseTimes - 1); 10331 } 10332 if (str.indexOf('\n') > -1) { 10333 if (array) { 10334 str = str.split('\n').map(function(line) { 10335 return ' ' + line; 10336 }).join('\n').substr(2); 10337 } else { 10338 str = '\n' + str.split('\n').map(function(line) { 10339 return ' ' + line; 10340 }).join('\n'); 10341 } 10342 } 10343 } else { 10344 str = ctx.stylize('[Circular]', 'special'); 10345 } 10346 } 10347 if (isUndefined(name)) { 10348 if (array && key.match(/^\d+$/)) { 10349 return str; 10350 } 10351 name = JSON.stringify('' + key); 10352 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { 10353 name = name.substr(1, name.length - 2); 10354 name = ctx.stylize(name, 'name'); 10355 } else { 10356 name = name.replace(/'/g, "\\'") 10357 .replace(/\\"/g, '"') 10358 .replace(/(^"|"$)/g, "'"); 10359 name = ctx.stylize(name, 'string'); 10360 } 10361 } 10362 10363 return name + ': ' + str; 10364} 10365 10366 10367function reduceToSingleString(output, base, braces) { 10368 var numLinesEst = 0; 10369 var length = output.reduce(function(prev, cur) { 10370 numLinesEst++; 10371 if (cur.indexOf('\n') >= 0) numLinesEst++; 10372 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; 10373 }, 0); 10374 10375 if (length > 60) { 10376 return braces[0] + 10377 (base === '' ? '' : base + '\n ') + 10378 ' ' + 10379 output.join(',\n ') + 10380 ' ' + 10381 braces[1]; 10382 } 10383 10384 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; 10385} 10386function isArray(ar) { 10387 return Array.isArray(ar); 10388} 10389exports.isArray = isArray; 10390 10391function isBoolean(arg) { 10392 return typeof arg === 'boolean'; 10393} 10394exports.isBoolean = isBoolean; 10395 10396function isNull(arg) { 10397 return arg === null; 10398} 10399exports.isNull = isNull; 10400 10401function isNullOrUndefined(arg) { 10402 return arg == null; 10403} 10404exports.isNullOrUndefined = isNullOrUndefined; 10405 10406function isNumber(arg) { 10407 return typeof arg === 'number'; 10408} 10409exports.isNumber = isNumber; 10410 10411function isString(arg) { 10412 return typeof arg === 'string'; 10413} 10414exports.isString = isString; 10415 10416function isSymbol(arg) { 10417 return typeof arg === 'symbol'; 10418} 10419exports.isSymbol = isSymbol; 10420 10421function isUndefined(arg) { 10422 return arg === void 0; 10423} 10424exports.isUndefined = isUndefined; 10425 10426function isRegExp(re) { 10427 return isObject(re) && objectToString(re) === '[object RegExp]'; 10428} 10429exports.isRegExp = isRegExp; 10430 10431function isObject(arg) { 10432 return typeof arg === 'object' && arg !== null; 10433} 10434exports.isObject = isObject; 10435 10436function isDate(d) { 10437 return isObject(d) && objectToString(d) === '[object Date]'; 10438} 10439exports.isDate = isDate; 10440 10441function isError(e) { 10442 return isObject(e) && 10443 (objectToString(e) === '[object Error]' || e instanceof Error); 10444} 10445exports.isError = isError; 10446 10447function isFunction(arg) { 10448 return typeof arg === 'function'; 10449} 10450exports.isFunction = isFunction; 10451 10452function isPrimitive(arg) { 10453 return arg === null || 10454 typeof arg === 'boolean' || 10455 typeof arg === 'number' || 10456 typeof arg === 'string' || 10457 typeof arg === 'symbol' || // ES6 symbol 10458 typeof arg === 'undefined'; 10459} 10460exports.isPrimitive = isPrimitive; 10461 10462exports.isBuffer = _dereq_('./support/isBuffer'); 10463 10464function objectToString(o) { 10465 return Object.prototype.toString.call(o); 10466} 10467 10468 10469function pad(n) { 10470 return n < 10 ? '0' + n.toString(10) : n.toString(10); 10471} 10472 10473 10474var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 10475 'Oct', 'Nov', 'Dec']; 10476function timestamp() { 10477 var d = new Date(); 10478 var time = [pad(d.getHours()), 10479 pad(d.getMinutes()), 10480 pad(d.getSeconds())].join(':'); 10481 return [d.getDate(), months[d.getMonth()], time].join(' '); 10482} 10483exports.log = function() { 10484 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); 10485}; 10486exports.inherits = _dereq_('inherits'); 10487 10488exports._extend = function(origin, add) { 10489 if (!add || !isObject(add)) return origin; 10490 10491 var keys = Object.keys(add); 10492 var i = keys.length; 10493 while (i--) {
10494 origin[keys[i]] = add[keys[i]]; 10495 } 10496 return origin; 10497}; 10498 10499function hasOwnProperty(obj, prop) { 10500 return Object.prototype.hasOwnProperty.call(obj, prop); 10501} 10502 10503}).call(this,_dereq_("/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 10504}, 10505{"./support/isBuffer":14,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,"inherits":17}], 1050616:[function(_dereq_,module,exports){ 10507 10508function EventEmitter() { 10509 this._events = this._events || {}; 10510 this._maxListeners = this._maxListeners || undefined; 10511} 10512module.exports = EventEmitter; 10513EventEmitter.EventEmitter = EventEmitter; 10514 10515EventEmitter.prototype._events = undefined; 10516EventEmitter.prototype._maxListeners = undefined; 10517EventEmitter.defaultMaxListeners = 10; 10518EventEmitter.prototype.setMaxListeners = function(n) { 10519 if (!isNumber(n) || n < 0 || isNaN(n)) 10520 throw TypeError('n must be a positive number'); 10521 this._maxListeners = n; 10522 return this; 10523}; 10524 10525EventEmitter.prototype.emit = function(type) { 10526 var er, handler, len, args, i, listeners; 10527 10528 if (!this._events) 10529 this._events = {}; 10530 if (type === 'error') { 10531 if (!this._events.error || 10532 (isObject(this._events.error) && !this._events.error.length)) { 10533 er = arguments[1]; 10534 if (er instanceof Error) { 10535 throw er; // Unhandled 'error' event 10536 } else { 10537 throw TypeError('Uncaught, unspecified "error" event.'); 10538 } 10539 return false; 10540 } 10541 } 10542 10543 handler = this._events[type]; 10544 10545 if (isUndefined(handler)) 10546 return false; 10547 10548 if (isFunction(handler)) { 10549 switch (arguments.length) { 10550 case 1: 10551 handler.call(this); 10552 break; 10553 case 2: 10554 handler.call(this, arguments[1]); 10555 break; 10556 case 3: 10557 handler.call(this, arguments[1], arguments[2]); 10558 break; 10559 default: 10560 len = arguments.length; 10561 args = new Array(len - 1); 10562 for (i = 1; i < len; i++) 10563 args[i - 1] = arguments[i]; 10564 handler.apply(this, args); 10565 } 10566 } else if (isObject(handler)) { 10567 len = arguments.length; 10568 args = new Array(len - 1); 10569 for (i = 1; i < len; i++) 10570 args[i - 1] = arguments[i]; 10571 10572 listeners = handler.slice(); 10573 len = listeners.length; 10574 for (i = 0; i < len; i++) 10575 listeners[i].apply(this, args); 10576 } 10577 10578 return true; 10579}; 10580 10581EventEmitter.prototype.addListener = function(type, listener) { 10582 var m; 10583 10584 if (!isFunction(listener)) 10585 throw TypeError('listener must be a function'); 10586 10587 if (!this._events) 10588 this._events = {}; 10589 if (this._events.newListener) 10590 this.emit('newListener', type, 10591 isFunction(listener.listener) ? 10592 listener.listener : listener); 10593 10594 if (!this._events[type]) 10595 this._events[type] = listener; 10596 else if (isObject(this._events[type])) 10597 this._events[type].push(listener); 10598 else 10599 this._events[type] = [this._events[type], listener]; 10600 if (isObject(this._events[type]) && !this._events[type].warned) { 10601 var m; 10602 if (!isUndefined(this._maxListeners)) { 10603 m = this._maxListeners; 10604 } else { 10605 m = EventEmitter.defaultMaxListeners; 10606 } 10607 10608 if (m && m > 0 && this._events[type].length > m) { 10609 this._events[type].warned = true; 10610 console.error('(node) warning: possible EventEmitter memory ' + 10611 'leak detected. %d listeners added. ' + 10612 'Use emitter.setMaxListeners() to increase limit.', 10613 this._events[type].length); 10614 console.trace(); 10615 } 10616 } 10617 10618 return this; 10619}; 10620 10621EventEmitter.prototype.on = EventEmitter.prototype.addListener; 10622 10623EventEmitter.prototype.once = function(type, listener) { 10624 if (!isFunction(listener)) 10625 throw TypeError('listener must be a function'); 10626 10627 var fired = false; 10628 10629 function g() { 10630 this.removeListener(type, g); 10631 10632 if (!fired) { 10633 fired = true; 10634 listener.apply(this, arguments); 10635 } 10636 } 10637 10638 g.listener = listener; 10639 this.on(type, g); 10640 10641 return this; 10642}; 10643EventEmitter.prototype.removeListener = function(type, listener) { 10644 var list, position, length, i; 10645 10646 if (!isFunction(listener)) 10647 throw TypeError('listener must be a function'); 10648 10649 if (!this._events || !this._events[type]) 10650 return this; 10651 10652 list = this._events[type]; 10653 length = list.length; 10654 position = -1; 10655 10656 if (list === listener || 10657 (isFunction(list.listener) && list.listener === listener)) { 10658 delete this._events[type]; 10659 if (this._events.removeListener)
10660 this.emit('removeListener', type, listener); 10661 10662 } else if (isObject(list)) { 10663 for (i = length; i-- > 0;) { 10664 if (list[i] === listener || 10665 (list[i].listener && list[i].listener === listener)) { 10666 position = i; 10667 break; 10668 } 10669 } 10670 10671 if (position < 0) 10672 return this; 10673 10674 if (list.length === 1) { 10675 list.length = 0; 10676 delete this._events[type]; 10677 } else { 10678 list.splice(position, 1); 10679 } 10680 10681 if (this._events.removeListener) 10682 this.emit('removeListener', type, listener); 10683 } 10684 10685 return this; 10686}; 10687 10688EventEmitter.prototype.removeAllListeners = function(type) { 10689 var key, listeners; 10690 10691 if (!this._events) 10692 return this; 10693 if (!this._events.removeListener) { 10694 if (arguments.length === 0) 10695 this._events = {}; 10696 else if (this._events[type]) 10697 delete this._events[type]; 10698 return this; 10699 } 10700 if (arguments.length === 0) { 10701 for (key in this._events) { 10702 if (key === 'removeListener') continue; 10703 this.removeAllListeners(key); 10704 } 10705 this.removeAllListeners('removeListener'); 10706 this._events = {}; 10707 return this; 10708 } 10709 10710 listeners = this._events[type]; 10711 10712 if (isFunction(listeners)) { 10713 this.removeListener(type, listeners); 10714 } else { 10715 while (listeners.length) 10716 this.removeListener(type, listeners[listeners.length - 1]); 10717 } 10718 delete this._events[type]; 10719 10720 return this; 10721}; 10722 10723EventEmitter.prototype.listeners = function(type) { 10724 var ret; 10725 if (!this._events || !this._events[type]) 10726 ret = []; 10727 else if (isFunction(this._events[type])) 10728 ret = [this._events[type]]; 10729 else 10730 ret = this._events[type].slice(); 10731 return ret; 10732}; 10733 10734EventEmitter.listenerCount = function(emitter, type) { 10735 var ret; 10736 if (!emitter._events || !emitter._events[type]) 10737 ret = 0; 10738 else if (isFunction(emitter._events[type])) 10739 ret = 1; 10740 else 10741 ret = emitter._events[type].length; 10742 return ret; 10743}; 10744 10745function isFunction(arg) { 10746 return typeof arg === 'function'; 10747} 10748 10749function isNumber(arg) { 10750 return typeof arg === 'number'; 10751} 10752 10753function isObject(arg) { 10754 return typeof arg === 'object' && arg !== null; 10755} 10756 10757function isUndefined(arg) { 10758 return arg === void 0; 10759} 10760 10761}, 10762{}], 1076317:[function(_dereq_,module,exports){ 10764if (typeof Object.create === 'function') { 10765 module.exports = function inherits(ctor, superCtor) { 10766 ctor.super_ = superCtor 10767 ctor.prototype = Object.create(superCtor.prototype, { 10768 constructor: { 10769 value: ctor, 10770 enumerable: false, 10771 writable: true, 10772 configurable: true 10773 } 10774 }); 10775 }; 10776} else { 10777 module.exports = function inherits(ctor, superCtor) { 10778 ctor.super_ = superCtor 10779 var TempCtor = function () {} 10780 TempCtor.prototype = superCtor.prototype 10781 ctor.prototype = new TempCtor() 10782 ctor.prototype.constructor = ctor 10783 } 10784} 10785 10786}, 10787{}], 1078818:[function(_dereq_,module,exports){ 10789 10790var process = module.exports = {}; 10791 10792process.nextTick = (function () { 10793 var canSetImmediate = typeof window !== 'undefined' 10794 && window.setImmediate; 10795 var canPost = typeof window !== 'undefined' 10796 && window.postMessage && window.addEventListener 10797 ; 10798 10799 if (canSetImmediate) { 10800 return function (f) { return window.setImmediate(f) }; 10801 } 10802 10803 if (canPost) { 10804 var queue = []; 10805 window.addEventListener('message', function (ev) { 10806 var source = ev.source; 10807 if ((source === window || source === null) && ev.data === 'process-tick') { 10808 ev.stopPropagation(); 10809 if (queue.length > 0) { 10810 var fn = queue.shift(); 10811 fn(); 10812 } 10813 } 10814 }, true); 10815 10816 return function nextTick(fn) { 10817 queue.push(fn); 10818 window.postMessage('process-tick', '*'); 10819 }; 10820 } 10821 10822 return function nextTick(fn) { 10823 setTimeout(fn, 0); 10824 }; 10825})(); 10826 10827process.title = 'browser'; 10828process.browser = true; 10829process.env = {}; 10830process.argv = []; 10831 10832function noop() {} 10833 10834process.on = noop; 10835process.once = noop; 10836process.off = noop; 10837process.emit = noop; 10838 10839process.binding = function (name) { 10840 throw new Error('process.binding is not supported'); 10841} 10842process.cwd = function () { return '/' }; 10843process.chdir = function (dir) { 10844 throw new Error('process.chdir is not supported'); 10845}; 10846 10847}, 10848{}], 1084919:[function(_dereq_,module,exports){ 10850module.exports=_dereq_(14) 10851}, 10852{}], 1085320:[function(_dereq_,module,exports){ 10854module.exports=_dereq_(15) 10855}, 10856{"./support/isBuffer":19,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,"inherits":17}]},{},[9]) 10857(9) 10858 10859}
10859); 10860 10861define("ace/mode/html_worker",[], function(require, exports, module) { 10862"use strict"; 10863 10864var oop = require("../lib/oop"); 10865var lang = require("../lib/lang"); 10866var Mirror = require("../worker/mirror").Mirror; 10867var SAXParser = require("./html/saxparser").SAXParser; 10868 10869var errorTypes = { 10870 "expected-doctype-but-got-start-tag": "info", 10871 "expected-doctype-but-got-chars": "info", 10872 "non-html-root": "info" 10873}; 10874 10875var Worker = exports.Worker = function(sender) { 10876 Mirror.call(this, sender); 10877 this.setTimeout(400); 10878 this.context = null; 10879}; 10880 10881oop.inherits(Worker, Mirror); 10882 10883(function() { 10884 10885 this.setOptions = function(options) { 10886 this.context = options.context; 10887 }; 10888 10889 this.onUpdate = function() { 10890 var value = this.doc.getValue(); 10891 if (!value) 10892 return; 10893 var parser = new SAXParser(); 10894 var errors = []; 10895 var noop = function(){}; 10896 parser.contentHandler = { 10897 startDocument: noop, 10898 endDocument: noop, 10899 startElement: noop, 10900 endElement: noop, 10901 characters: noop 10902 }; 10903 parser.errorHandler = { 10904 error: function(message, location, code) { 10905 errors.push({ 10906 row: location.line, 10907 column: location.column, 10908 text: message, 10909 type: errorTypes[code] || "error" 10910 }); 10911 } 10912 }; 10913 if (this.context) 10914 parser.parseFragment(value, this.context); 10915 else 10916 parser.parse(value); 10917 this.sender.emit("error", errors); 10918 }; 10919 10920}).call(Worker.prototype); 10921 10922});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.