mbed-simulator
Version:
Mbed OS 5 simulator
1,333 lines (1,309 loc) • 283 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Terminal = f()}})(function(){var define,module,exports;return (function(){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);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.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}return e})()({1:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Strings = require("./Strings");
var Browser_1 = require("./shared/utils/Browser");
var RenderDebouncer_1 = require("./utils/RenderDebouncer");
var Dom_1 = require("./utils/Dom");
var MAX_ROWS_TO_READ = 20;
var BoundaryPosition;
(function (BoundaryPosition) {
BoundaryPosition[BoundaryPosition["Top"] = 0] = "Top";
BoundaryPosition[BoundaryPosition["Bottom"] = 1] = "Bottom";
})(BoundaryPosition || (BoundaryPosition = {}));
var AccessibilityManager = (function () {
function AccessibilityManager(_terminal) {
var _this = this;
this._terminal = _terminal;
this._liveRegionLineCount = 0;
this._disposables = [];
this._charsToConsume = [];
this._accessibilityTreeRoot = document.createElement('div');
this._accessibilityTreeRoot.classList.add('xterm-accessibility');
this._rowContainer = document.createElement('div');
this._rowContainer.classList.add('xterm-accessibility-tree');
this._rowElements = [];
for (var i = 0; i < this._terminal.rows; i++) {
this._rowElements[i] = this._createAccessibilityTreeNode();
this._rowContainer.appendChild(this._rowElements[i]);
}
this._topBoundaryFocusListener = function (e) { return _this._onBoundaryFocus(e, BoundaryPosition.Top); };
this._bottomBoundaryFocusListener = function (e) { return _this._onBoundaryFocus(e, BoundaryPosition.Bottom); };
this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);
this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);
this._refreshRowsDimensions();
this._accessibilityTreeRoot.appendChild(this._rowContainer);
this._renderRowsDebouncer = new RenderDebouncer_1.RenderDebouncer(this._terminal, this._renderRows.bind(this));
this._refreshRows();
this._liveRegion = document.createElement('div');
this._liveRegion.classList.add('live-region');
this._liveRegion.setAttribute('aria-live', 'assertive');
this._accessibilityTreeRoot.appendChild(this._liveRegion);
this._terminal.element.insertAdjacentElement('afterbegin', this._accessibilityTreeRoot);
this._disposables.push(this._renderRowsDebouncer);
this._disposables.push(this._terminal.addDisposableListener('resize', function (data) { return _this._onResize(data.cols, data.rows); }));
this._disposables.push(this._terminal.addDisposableListener('refresh', function (data) { return _this._refreshRows(data.start, data.end); }));
this._disposables.push(this._terminal.addDisposableListener('scroll', function (data) { return _this._refreshRows(); }));
this._disposables.push(this._terminal.addDisposableListener('a11y.char', function (char) { return _this._onChar(char); }));
this._disposables.push(this._terminal.addDisposableListener('linefeed', function () { return _this._onChar('\n'); }));
this._disposables.push(this._terminal.addDisposableListener('a11y.tab', function (spaceCount) { return _this._onTab(spaceCount); }));
this._disposables.push(this._terminal.addDisposableListener('key', function (keyChar) { return _this._onKey(keyChar); }));
this._disposables.push(this._terminal.addDisposableListener('blur', function () { return _this._clearLiveRegion(); }));
this._disposables.push(this._terminal.addDisposableListener('dprchange', function () { return _this._refreshRowsDimensions(); }));
this._disposables.push(this._terminal.renderer.addDisposableListener('resize', function () { return _this._refreshRowsDimensions(); }));
this._disposables.push(Dom_1.addDisposableListener(window, 'resize', function () { return _this._refreshRowsDimensions(); }));
}
AccessibilityManager.prototype.dispose = function () {
this._disposables.forEach(function (d) { return d.dispose(); });
this._disposables.length = 0;
this._terminal.element.removeChild(this._accessibilityTreeRoot);
this._rowElements.length = 0;
};
AccessibilityManager.prototype._onBoundaryFocus = function (e, position) {
var boundaryElement = e.target;
var beforeBoundaryElement = this._rowElements[position === BoundaryPosition.Top ? 1 : this._rowElements.length - 2];
var posInSet = boundaryElement.getAttribute('aria-posinset');
var lastRowPos = position === BoundaryPosition.Top ? '1' : "" + this._terminal.buffer.lines.length;
if (posInSet === lastRowPos) {
return;
}
if (e.relatedTarget !== beforeBoundaryElement) {
return;
}
var topBoundaryElement;
var bottomBoundaryElement;
if (position === BoundaryPosition.Top) {
topBoundaryElement = boundaryElement;
bottomBoundaryElement = this._rowElements.pop();
this._rowContainer.removeChild(bottomBoundaryElement);
}
else {
topBoundaryElement = this._rowElements.shift();
bottomBoundaryElement = boundaryElement;
this._rowContainer.removeChild(topBoundaryElement);
}
topBoundaryElement.removeEventListener('focus', this._topBoundaryFocusListener);
bottomBoundaryElement.removeEventListener('focus', this._bottomBoundaryFocusListener);
if (position === BoundaryPosition.Top) {
var newElement = this._createAccessibilityTreeNode();
this._rowElements.unshift(newElement);
this._rowContainer.insertAdjacentElement('afterbegin', newElement);
}
else {
var newElement = this._createAccessibilityTreeNode();
this._rowElements.push(newElement);
this._rowContainer.appendChild(newElement);
}
this._rowElements[0].addEventListener('focus', this._topBoundaryFocusListener);
this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);
this._terminal.scrollLines(position === BoundaryPosition.Top ? -1 : 1);
this._rowElements[position === BoundaryPosition.Top ? 1 : this._rowElements.length - 2].focus();
e.preventDefault();
e.stopImmediatePropagation();
};
AccessibilityManager.prototype._onResize = function (cols, rows) {
this._rowElements[this._rowElements.length - 1].removeEventListener('focus', this._bottomBoundaryFocusListener);
for (var i = this._rowContainer.children.length; i < this._terminal.rows; i++) {
this._rowElements[i] = this._createAccessibilityTreeNode();
this._rowContainer.appendChild(this._rowElements[i]);
}
while (this._rowElements.length > rows) {
this._rowContainer.removeChild(this._rowElements.pop());
}
this._rowElements[this._rowElements.length - 1].addEventListener('focus', this._bottomBoundaryFocusListener);
this._refreshRowsDimensions();
};
AccessibilityManager.prototype._createAccessibilityTreeNode = function () {
var element = document.createElement('div');
element.setAttribute('role', 'listitem');
element.tabIndex = -1;
this._refreshRowDimensions(element);
return element;
};
AccessibilityManager.prototype._onTab = function (spaceCount) {
for (var i = 0; i < spaceCount; i++) {
this._onChar(' ');
}
};
AccessibilityManager.prototype._onChar = function (char) {
var _this = this;
if (this._liveRegionLineCount < MAX_ROWS_TO_READ + 1) {
if (this._charsToConsume.length > 0) {
var shiftedChar = this._charsToConsume.shift();
if (shiftedChar !== char) {
this._announceCharacter(char);
}
}
else {
this._announceCharacter(char);
}
if (char === '\n') {
this._liveRegionLineCount++;
if (this._liveRegionLineCount === MAX_ROWS_TO_READ + 1) {
this._liveRegion.textContent += Strings.tooMuchOutput;
}
}
if (Browser_1.isMac) {
if (this._liveRegion.textContent && this._liveRegion.textContent.length > 0 && !this._liveRegion.parentNode) {
setTimeout(function () {
_this._accessibilityTreeRoot.appendChild(_this._liveRegion);
}, 0);
}
}
}
};
AccessibilityManager.prototype._clearLiveRegion = function () {
this._liveRegion.textContent = '';
this._liveRegionLineCount = 0;
if (Browser_1.isMac) {
if (this._liveRegion.parentNode) {
this._accessibilityTreeRoot.removeChild(this._liveRegion);
}
}
};
AccessibilityManager.prototype._onKey = function (keyChar) {
this._clearLiveRegion();
this._charsToConsume.push(keyChar);
};
AccessibilityManager.prototype._refreshRows = function (start, end) {
this._renderRowsDebouncer.refresh(start, end);
};
AccessibilityManager.prototype._renderRows = function (start, end) {
var buffer = this._terminal.buffer;
var setSize = buffer.lines.length.toString();
for (var i = start; i <= end; i++) {
var lineData = buffer.translateBufferLineToString(buffer.ydisp + i, true);
var posInSet = (buffer.ydisp + i + 1).toString();
var element = this._rowElements[i];
element.textContent = lineData.length === 0 ? Strings.blankLine : lineData;
element.setAttribute('aria-posinset', posInSet);
element.setAttribute('aria-setsize', setSize);
}
};
AccessibilityManager.prototype._refreshRowsDimensions = function () {
if (!this._terminal.renderer.dimensions.actualCellHeight) {
return;
}
for (var i = 0; i < this._terminal.rows; i++) {
this._refreshRowDimensions(this._rowElements[i]);
}
};
AccessibilityManager.prototype._refreshRowDimensions = function (element) {
element.style.height = this._terminal.renderer.dimensions.actualCellHeight + "px";
};
AccessibilityManager.prototype._announceCharacter = function (char) {
if (char === ' ') {
this._liveRegion.innerHTML += ' ';
}
else {
this._liveRegion.textContent += char;
}
};
return AccessibilityManager;
}());
exports.AccessibilityManager = AccessibilityManager;
},{"./Strings":15,"./shared/utils/Browser":36,"./utils/Dom":40,"./utils/RenderDebouncer":42}],2:[function(require,module,exports){
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var CircularList_1 = require("./utils/CircularList");
var EventEmitter_1 = require("./EventEmitter");
exports.CHAR_DATA_ATTR_INDEX = 0;
exports.CHAR_DATA_CHAR_INDEX = 1;
exports.CHAR_DATA_WIDTH_INDEX = 2;
exports.CHAR_DATA_CODE_INDEX = 3;
exports.MAX_BUFFER_SIZE = 4294967295;
var Buffer = (function () {
function Buffer(_terminal, _hasScrollback) {
this._terminal = _terminal;
this._hasScrollback = _hasScrollback;
this.markers = [];
this.clear();
}
Object.defineProperty(Buffer.prototype, "lines", {
get: function () {
return this._lines;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Buffer.prototype, "hasScrollback", {
get: function () {
return this._hasScrollback && this.lines.maxLength > this._terminal.rows;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Buffer.prototype, "isCursorInViewport", {
get: function () {
var absoluteY = this.ybase + this.y;
var relativeY = absoluteY - this.ydisp;
return (relativeY >= 0 && relativeY < this._terminal.rows);
},
enumerable: true,
configurable: true
});
Buffer.prototype._getCorrectBufferLength = function (rows) {
if (!this._hasScrollback) {
return rows;
}
var correctBufferLength = rows + this._terminal.options.scrollback;
return correctBufferLength > exports.MAX_BUFFER_SIZE ? exports.MAX_BUFFER_SIZE : correctBufferLength;
};
Buffer.prototype.fillViewportRows = function () {
if (this._lines.length === 0) {
var i = this._terminal.rows;
while (i--) {
this.lines.push(this._terminal.blankLine());
}
}
};
Buffer.prototype.clear = function () {
this.ydisp = 0;
this.ybase = 0;
this.y = 0;
this.x = 0;
this._lines = new CircularList_1.CircularList(this._getCorrectBufferLength(this._terminal.rows));
this.scrollTop = 0;
this.scrollBottom = this._terminal.rows - 1;
this.setupTabStops();
};
Buffer.prototype.resize = function (newCols, newRows) {
var newMaxLength = this._getCorrectBufferLength(newRows);
if (newMaxLength > this._lines.maxLength) {
this._lines.maxLength = newMaxLength;
}
if (this._lines.length > 0) {
if (this._terminal.cols < newCols) {
var ch = [this._terminal.defAttr, ' ', 1, 32];
for (var i = 0; i < this._lines.length; i++) {
while (this._lines.get(i).length < newCols) {
this._lines.get(i).push(ch);
}
}
}
var addToY = 0;
if (this._terminal.rows < newRows) {
for (var y = this._terminal.rows; y < newRows; y++) {
if (this._lines.length < newRows + this.ybase) {
if (this.ybase > 0 && this._lines.length <= this.ybase + this.y + addToY + 1) {
this.ybase--;
addToY++;
if (this.ydisp > 0) {
this.ydisp--;
}
}
else {
this._lines.push(this._terminal.blankLine(undefined, undefined, newCols));
}
}
}
}
else {
for (var y = this._terminal.rows; y > newRows; y--) {
if (this._lines.length > newRows + this.ybase) {
if (this._lines.length > this.ybase + this.y + 1) {
this._lines.pop();
}
else {
this.ybase++;
this.ydisp++;
}
}
}
}
if (newMaxLength < this._lines.maxLength) {
var amountToTrim = this._lines.length - newMaxLength;
if (amountToTrim > 0) {
this._lines.trimStart(amountToTrim);
this.ybase = Math.max(this.ybase - amountToTrim, 0);
this.ydisp = Math.max(this.ydisp - amountToTrim, 0);
}
this._lines.maxLength = newMaxLength;
}
this.x = Math.min(this.x, newCols - 1);
this.y = Math.min(this.y, newRows - 1);
if (addToY) {
this.y += addToY;
}
this.savedY = Math.min(this.savedY, newRows - 1);
this.savedX = Math.min(this.savedX, newCols - 1);
this.scrollTop = 0;
}
this.scrollBottom = newRows - 1;
};
Buffer.prototype.translateBufferLineToString = function (lineIndex, trimRight, startCol, endCol) {
if (startCol === void 0) { startCol = 0; }
if (endCol === void 0) { endCol = null; }
var lineString = '';
var line = this.lines.get(lineIndex);
if (!line) {
return '';
}
var startIndex = startCol;
if (endCol === null) {
endCol = line.length;
}
var endIndex = endCol;
for (var i = 0; i < line.length; i++) {
var char = line[i];
lineString += char[exports.CHAR_DATA_CHAR_INDEX];
if (char[exports.CHAR_DATA_WIDTH_INDEX] === 0) {
if (startCol >= i) {
startIndex--;
}
if (endCol >= i) {
endIndex--;
}
}
else {
if (char[exports.CHAR_DATA_CHAR_INDEX].length > 1) {
if (startCol > i) {
startIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1;
}
if (endCol > i) {
endIndex += char[exports.CHAR_DATA_CHAR_INDEX].length - 1;
}
}
}
}
if (trimRight) {
var rightWhitespaceIndex = lineString.search(/\s+$/);
if (rightWhitespaceIndex !== -1) {
endIndex = Math.min(endIndex, rightWhitespaceIndex);
}
if (endIndex <= startIndex) {
return '';
}
}
return lineString.substring(startIndex, endIndex);
};
Buffer.prototype.setupTabStops = function (i) {
if (i != null) {
if (!this.tabs[i]) {
i = this.prevStop(i);
}
}
else {
this.tabs = {};
i = 0;
}
for (; i < this._terminal.cols; i += this._terminal.options.tabStopWidth) {
this.tabs[i] = true;
}
};
Buffer.prototype.prevStop = function (x) {
if (x == null) {
x = this.x;
}
while (!this.tabs[--x] && x > 0)
;
return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;
};
Buffer.prototype.nextStop = function (x) {
if (x == null) {
x = this.x;
}
while (!this.tabs[++x] && x < this._terminal.cols)
;
return x >= this._terminal.cols ? this._terminal.cols - 1 : x < 0 ? 0 : x;
};
Buffer.prototype.addMarker = function (y) {
var _this = this;
var marker = new Marker(y);
this.markers.push(marker);
marker.disposables.push(this._lines.addDisposableListener('trim', function (amount) {
marker.line -= amount;
if (marker.line < 0) {
marker.dispose();
}
}));
marker.on('dispose', function () { return _this._removeMarker(marker); });
return marker;
};
Buffer.prototype._removeMarker = function (marker) {
this.markers.splice(this.markers.indexOf(marker), 1);
};
return Buffer;
}());
exports.Buffer = Buffer;
var Marker = (function (_super) {
__extends(Marker, _super);
function Marker(line) {
var _this = _super.call(this) || this;
_this.line = line;
_this._id = Marker.NEXT_ID++;
_this.isDisposed = false;
_this.disposables = [];
return _this;
}
Object.defineProperty(Marker.prototype, "id", {
get: function () { return this._id; },
enumerable: true,
configurable: true
});
Marker.prototype.dispose = function () {
if (this.isDisposed) {
return;
}
this.isDisposed = true;
this.disposables.forEach(function (d) { return d.dispose(); });
this.disposables.length = 0;
this.emit('dispose');
};
Marker.NEXT_ID = 1;
return Marker;
}(EventEmitter_1.EventEmitter));
exports.Marker = Marker;
},{"./EventEmitter":8,"./utils/CircularList":38}],3:[function(require,module,exports){
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var Buffer_1 = require("./Buffer");
var EventEmitter_1 = require("./EventEmitter");
var BufferSet = (function (_super) {
__extends(BufferSet, _super);
function BufferSet(_terminal) {
var _this = _super.call(this) || this;
_this._terminal = _terminal;
_this._normal = new Buffer_1.Buffer(_this._terminal, true);
_this._normal.fillViewportRows();
_this._alt = new Buffer_1.Buffer(_this._terminal, false);
_this._activeBuffer = _this._normal;
_this.setupTabStops();
return _this;
}
Object.defineProperty(BufferSet.prototype, "alt", {
get: function () {
return this._alt;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BufferSet.prototype, "active", {
get: function () {
return this._activeBuffer;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BufferSet.prototype, "normal", {
get: function () {
return this._normal;
},
enumerable: true,
configurable: true
});
BufferSet.prototype.activateNormalBuffer = function () {
if (this._activeBuffer === this._normal) {
return;
}
this._alt.clear();
this._activeBuffer = this._normal;
this.emit('activate', {
activeBuffer: this._normal,
inactiveBuffer: this._alt
});
};
BufferSet.prototype.activateAltBuffer = function () {
if (this._activeBuffer === this._alt) {
return;
}
this._alt.fillViewportRows();
this._activeBuffer = this._alt;
this.emit('activate', {
activeBuffer: this._alt,
inactiveBuffer: this._normal
});
};
BufferSet.prototype.resize = function (newCols, newRows) {
this._normal.resize(newCols, newRows);
this._alt.resize(newCols, newRows);
};
BufferSet.prototype.setupTabStops = function (i) {
this._normal.setupTabStops(i);
this._alt.setupTabStops(i);
};
return BufferSet;
}(EventEmitter_1.EventEmitter));
exports.BufferSet = BufferSet;
},{"./Buffer":2,"./EventEmitter":8}],4:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.wcwidth = (function (opts) {
var COMBINING_BMP = [
[0x0300, 0x036F], [0x0483, 0x0486], [0x0488, 0x0489],
[0x0591, 0x05BD], [0x05BF, 0x05BF], [0x05C1, 0x05C2],
[0x05C4, 0x05C5], [0x05C7, 0x05C7], [0x0600, 0x0603],
[0x0610, 0x0615], [0x064B, 0x065E], [0x0670, 0x0670],
[0x06D6, 0x06E4], [0x06E7, 0x06E8], [0x06EA, 0x06ED],
[0x070F, 0x070F], [0x0711, 0x0711], [0x0730, 0x074A],
[0x07A6, 0x07B0], [0x07EB, 0x07F3], [0x0901, 0x0902],
[0x093C, 0x093C], [0x0941, 0x0948], [0x094D, 0x094D],
[0x0951, 0x0954], [0x0962, 0x0963], [0x0981, 0x0981],
[0x09BC, 0x09BC], [0x09C1, 0x09C4], [0x09CD, 0x09CD],
[0x09E2, 0x09E3], [0x0A01, 0x0A02], [0x0A3C, 0x0A3C],
[0x0A41, 0x0A42], [0x0A47, 0x0A48], [0x0A4B, 0x0A4D],
[0x0A70, 0x0A71], [0x0A81, 0x0A82], [0x0ABC, 0x0ABC],
[0x0AC1, 0x0AC5], [0x0AC7, 0x0AC8], [0x0ACD, 0x0ACD],
[0x0AE2, 0x0AE3], [0x0B01, 0x0B01], [0x0B3C, 0x0B3C],
[0x0B3F, 0x0B3F], [0x0B41, 0x0B43], [0x0B4D, 0x0B4D],
[0x0B56, 0x0B56], [0x0B82, 0x0B82], [0x0BC0, 0x0BC0],
[0x0BCD, 0x0BCD], [0x0C3E, 0x0C40], [0x0C46, 0x0C48],
[0x0C4A, 0x0C4D], [0x0C55, 0x0C56], [0x0CBC, 0x0CBC],
[0x0CBF, 0x0CBF], [0x0CC6, 0x0CC6], [0x0CCC, 0x0CCD],
[0x0CE2, 0x0CE3], [0x0D41, 0x0D43], [0x0D4D, 0x0D4D],
[0x0DCA, 0x0DCA], [0x0DD2, 0x0DD4], [0x0DD6, 0x0DD6],
[0x0E31, 0x0E31], [0x0E34, 0x0E3A], [0x0E47, 0x0E4E],
[0x0EB1, 0x0EB1], [0x0EB4, 0x0EB9], [0x0EBB, 0x0EBC],
[0x0EC8, 0x0ECD], [0x0F18, 0x0F19], [0x0F35, 0x0F35],
[0x0F37, 0x0F37], [0x0F39, 0x0F39], [0x0F71, 0x0F7E],
[0x0F80, 0x0F84], [0x0F86, 0x0F87], [0x0F90, 0x0F97],
[0x0F99, 0x0FBC], [0x0FC6, 0x0FC6], [0x102D, 0x1030],
[0x1032, 0x1032], [0x1036, 0x1037], [0x1039, 0x1039],
[0x1058, 0x1059], [0x1160, 0x11FF], [0x135F, 0x135F],
[0x1712, 0x1714], [0x1732, 0x1734], [0x1752, 0x1753],
[0x1772, 0x1773], [0x17B4, 0x17B5], [0x17B7, 0x17BD],
[0x17C6, 0x17C6], [0x17C9, 0x17D3], [0x17DD, 0x17DD],
[0x180B, 0x180D], [0x18A9, 0x18A9], [0x1920, 0x1922],
[0x1927, 0x1928], [0x1932, 0x1932], [0x1939, 0x193B],
[0x1A17, 0x1A18], [0x1B00, 0x1B03], [0x1B34, 0x1B34],
[0x1B36, 0x1B3A], [0x1B3C, 0x1B3C], [0x1B42, 0x1B42],
[0x1B6B, 0x1B73], [0x1DC0, 0x1DCA], [0x1DFE, 0x1DFF],
[0x200B, 0x200F], [0x202A, 0x202E], [0x2060, 0x2063],
[0x206A, 0x206F], [0x20D0, 0x20EF], [0x302A, 0x302F],
[0x3099, 0x309A], [0xA806, 0xA806], [0xA80B, 0xA80B],
[0xA825, 0xA826], [0xFB1E, 0xFB1E], [0xFE00, 0xFE0F],
[0xFE20, 0xFE23], [0xFEFF, 0xFEFF], [0xFFF9, 0xFFFB]
];
var COMBINING_HIGH = [
[0x10A01, 0x10A03], [0x10A05, 0x10A06], [0x10A0C, 0x10A0F],
[0x10A38, 0x10A3A], [0x10A3F, 0x10A3F], [0x1D167, 0x1D169],
[0x1D173, 0x1D182], [0x1D185, 0x1D18B], [0x1D1AA, 0x1D1AD],
[0x1D242, 0x1D244], [0xE0001, 0xE0001], [0xE0020, 0xE007F],
[0xE0100, 0xE01EF]
];
function bisearch(ucs, data) {
var min = 0;
var max = data.length - 1;
var mid;
if (ucs < data[0][0] || ucs > data[max][1]) {
return false;
}
while (max >= min) {
mid = (min + max) >> 1;
if (ucs > data[mid][1]) {
min = mid + 1;
}
else if (ucs < data[mid][0]) {
max = mid - 1;
}
else {
return true;
}
}
return false;
}
function wcwidthBMP(ucs) {
if (ucs === 0) {
return opts.nul;
}
if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) {
return opts.control;
}
if (bisearch(ucs, COMBINING_BMP)) {
return 0;
}
if (isWideBMP(ucs)) {
return 2;
}
return 1;
}
function isWideBMP(ucs) {
return (ucs >= 0x1100 && (ucs <= 0x115f ||
ucs === 0x2329 ||
ucs === 0x232a ||
(ucs >= 0x2e80 && ucs <= 0xa4cf && ucs !== 0x303f) ||
(ucs >= 0xac00 && ucs <= 0xd7a3) ||
(ucs >= 0xf900 && ucs <= 0xfaff) ||
(ucs >= 0xfe10 && ucs <= 0xfe19) ||
(ucs >= 0xfe30 && ucs <= 0xfe6f) ||
(ucs >= 0xff00 && ucs <= 0xff60) ||
(ucs >= 0xffe0 && ucs <= 0xffe6)));
}
function wcwidthHigh(ucs) {
if (bisearch(ucs, COMBINING_HIGH)) {
return 0;
}
if ((ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd)) {
return 2;
}
return 1;
}
var control = opts.control | 0;
var table = null;
function init_table() {
var CODEPOINTS = 65536;
var BITWIDTH = 2;
var ITEMSIZE = 32;
var CONTAINERSIZE = CODEPOINTS * BITWIDTH / ITEMSIZE;
var CODEPOINTS_PER_ITEM = ITEMSIZE / BITWIDTH;
table = (typeof Uint32Array === 'undefined')
? new Array(CONTAINERSIZE)
: new Uint32Array(CONTAINERSIZE);
for (var i = 0; i < CONTAINERSIZE; ++i) {
var num = 0;
var pos = CODEPOINTS_PER_ITEM;
while (pos--) {
num = (num << 2) | wcwidthBMP(CODEPOINTS_PER_ITEM * i + pos);
}
table[i] = num;
}
return table;
}
return function (num) {
num = num | 0;
if (num < 32) {
return control | 0;
}
if (num < 127) {
return 1;
}
var t = table || init_table();
if (num < 65536) {
return t[num >> 4] >> ((num & 15) << 1) & 3;
}
return wcwidthHigh(num);
};
})({ nul: 0, control: 0 });
},{}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CHARSETS = {};
exports.DEFAULT_CHARSET = exports.CHARSETS['B'];
exports.CHARSETS['0'] = {
'`': '\u25c6',
'a': '\u2592',
'b': '\u0009',
'c': '\u000c',
'd': '\u000d',
'e': '\u000a',
'f': '\u00b0',
'g': '\u00b1',
'h': '\u2424',
'i': '\u000b',
'j': '\u2518',
'k': '\u2510',
'l': '\u250c',
'm': '\u2514',
'n': '\u253c',
'o': '\u23ba',
'p': '\u23bb',
'q': '\u2500',
'r': '\u23bc',
's': '\u23bd',
't': '\u251c',
'u': '\u2524',
'v': '\u2534',
'w': '\u252c',
'x': '\u2502',
'y': '\u2264',
'z': '\u2265',
'{': '\u03c0',
'|': '\u2260',
'}': '\u00a3',
'~': '\u00b7'
};
exports.CHARSETS['A'] = {
'#': '£'
};
exports.CHARSETS['B'] = null;
exports.CHARSETS['4'] = {
'#': '£',
'@': '¾',
'[': 'ij',
'\\': '½',
']': '|',
'{': '¨',
'|': 'f',
'}': '¼',
'~': '´'
};
exports.CHARSETS['C'] =
exports.CHARSETS['5'] = {
'[': 'Ä',
'\\': 'Ö',
']': 'Å',
'^': 'Ü',
'`': 'é',
'{': 'ä',
'|': 'ö',
'}': 'å',
'~': 'ü'
};
exports.CHARSETS['R'] = {
'#': '£',
'@': 'à',
'[': '°',
'\\': 'ç',
']': '§',
'{': 'é',
'|': 'ù',
'}': 'è',
'~': '¨'
};
exports.CHARSETS['Q'] = {
'@': 'à',
'[': 'â',
'\\': 'ç',
']': 'ê',
'^': 'î',
'`': 'ô',
'{': 'é',
'|': 'ù',
'}': 'è',
'~': 'û'
};
exports.CHARSETS['K'] = {
'@': '§',
'[': 'Ä',
'\\': 'Ö',
']': 'Ü',
'{': 'ä',
'|': 'ö',
'}': 'ü',
'~': 'ß'
};
exports.CHARSETS['Y'] = {
'#': '£',
'@': '§',
'[': '°',
'\\': 'ç',
']': 'é',
'`': 'ù',
'{': 'à',
'|': 'ò',
'}': 'è',
'~': 'ì'
};
exports.CHARSETS['E'] =
exports.CHARSETS['6'] = {
'@': 'Ä',
'[': 'Æ',
'\\': 'Ø',
']': 'Å',
'^': 'Ü',
'`': 'ä',
'{': 'æ',
'|': 'ø',
'}': 'å',
'~': 'ü'
};
exports.CHARSETS['Z'] = {
'#': '£',
'@': '§',
'[': '¡',
'\\': 'Ñ',
']': '¿',
'{': '°',
'|': 'ñ',
'}': 'ç'
};
exports.CHARSETS['H'] =
exports.CHARSETS['7'] = {
'@': 'É',
'[': 'Ä',
'\\': 'Ö',
']': 'Å',
'^': 'Ü',
'`': 'é',
'{': 'ä',
'|': 'ö',
'}': 'å',
'~': 'ü'
};
exports.CHARSETS['='] = {
'#': 'ù',
'@': 'à',
'[': 'é',
'\\': 'ç',
']': 'ê',
'^': 'î',
'_': 'è',
'`': 'ô',
'{': 'ä',
'|': 'ö',
'}': 'ü',
'~': 'û'
};
},{}],6:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CompositionHelper = (function () {
function CompositionHelper(_textarea, _compositionView, _terminal) {
this._textarea = _textarea;
this._compositionView = _compositionView;
this._terminal = _terminal;
this._isComposing = false;
this._isSendingComposition = false;
this._compositionPosition = { start: null, end: null };
}
CompositionHelper.prototype.compositionstart = function () {
this._isComposing = true;
this._compositionPosition.start = this._textarea.value.length;
this._compositionView.textContent = '';
this._compositionView.classList.add('active');
};
CompositionHelper.prototype.compositionupdate = function (ev) {
var _this = this;
this._compositionView.textContent = ev.data;
this.updateCompositionElements();
setTimeout(function () {
_this._compositionPosition.end = _this._textarea.value.length;
}, 0);
};
CompositionHelper.prototype.compositionend = function () {
this._finalizeComposition(true);
};
CompositionHelper.prototype.keydown = function (ev) {
if (this._isComposing || this._isSendingComposition) {
if (ev.keyCode === 229) {
return false;
}
else if (ev.keyCode === 16 || ev.keyCode === 17 || ev.keyCode === 18) {
return false;
}
else {
this._finalizeComposition(false);
}
}
if (ev.keyCode === 229) {
this._handleAnyTextareaChanges();
return false;
}
return true;
};
CompositionHelper.prototype._finalizeComposition = function (waitForPropogation) {
var _this = this;
this._compositionView.classList.remove('active');
this._isComposing = false;
this._clearTextareaPosition();
if (!waitForPropogation) {
this._isSendingComposition = false;
var input = this._textarea.value.substring(this._compositionPosition.start, this._compositionPosition.end);
this._terminal.handler(input);
}
else {
var currentCompositionPosition_1 = {
start: this._compositionPosition.start,
end: this._compositionPosition.end
};
this._isSendingComposition = true;
setTimeout(function () {
if (_this._isSendingComposition) {
_this._isSendingComposition = false;
var input = void 0;
if (_this._isComposing) {
input = _this._textarea.value.substring(currentCompositionPosition_1.start, currentCompositionPosition_1.end);
}
else {
input = _this._textarea.value.substring(currentCompositionPosition_1.start);
}
_this._terminal.handler(input);
}
}, 0);
}
};
CompositionHelper.prototype._handleAnyTextareaChanges = function () {
var _this = this;
var oldValue = this._textarea.value;
setTimeout(function () {
if (!_this._isComposing) {
var newValue = _this._textarea.value;
var diff = newValue.replace(oldValue, '');
if (diff.length > 0) {
_this._terminal.handler(diff);
}
}
}, 0);
};
CompositionHelper.prototype.updateCompositionElements = function (dontRecurse) {
var _this = this;
if (!this._isComposing) {
return;
}
if (this._terminal.buffer.isCursorInViewport) {
var cellHeight = Math.ceil(this._terminal.charMeasure.height * this._terminal.options.lineHeight);
var cursorTop = this._terminal.buffer.y * cellHeight;
var cursorLeft = this._terminal.buffer.x * this._terminal.charMeasure.width;
this._compositionView.style.left = cursorLeft + 'px';
this._compositionView.style.top = cursorTop + 'px';
this._compositionView.style.height = cellHeight + 'px';
this._compositionView.style.lineHeight = cellHeight + 'px';
var compositionViewBounds = this._compositionView.getBoundingClientRect();
this._textarea.style.left = cursorLeft + 'px';
this._textarea.style.top = cursorTop + 'px';
this._textarea.style.width = compositionViewBounds.width + 'px';
this._textarea.style.height = compositionViewBounds.height + 'px';
this._textarea.style.lineHeight = compositionViewBounds.height + 'px';
}
if (!dontRecurse) {
setTimeout(function () { return _this.updateCompositionElements(true); }, 0);
}
};
CompositionHelper.prototype._clearTextareaPosition = function () {
this._textarea.style.left = '';
this._textarea.style.top = '';
};
return CompositionHelper;
}());
exports.CompositionHelper = CompositionHelper;
},{}],7:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var C0;
(function (C0) {
C0.NUL = '\x00';
C0.SOH = '\x01';
C0.STX = '\x02';
C0.ETX = '\x03';
C0.EOT = '\x04';
C0.ENQ = '\x05';
C0.ACK = '\x06';
C0.BEL = '\x07';
C0.BS = '\x08';
C0.HT = '\x09';
C0.LF = '\x0a';
C0.VT = '\x0b';
C0.FF = '\x0c';
C0.CR = '\x0d';
C0.SO = '\x0e';
C0.SI = '\x0f';
C0.DLE = '\x10';
C0.DC1 = '\x11';
C0.DC2 = '\x12';
C0.DC3 = '\x13';
C0.DC4 = '\x14';
C0.NAK = '\x15';
C0.SYN = '\x16';
C0.ETB = '\x17';
C0.CAN = '\x18';
C0.EM = '\x19';
C0.SUB = '\x1a';
C0.ESC = '\x1b';
C0.FS = '\x1c';
C0.GS = '\x1d';
C0.RS = '\x1e';
C0.US = '\x1f';
C0.SP = '\x20';
C0.DEL = '\x7f';
})(C0 = exports.C0 || (exports.C0 = {}));
},{}],8:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var EventEmitter = (function () {
function EventEmitter() {
this._events = this._events || {};
}
EventEmitter.prototype.on = function (type, listener) {
this._events[type] = this._events[type] || [];
this._events[type].push(listener);
};
EventEmitter.prototype.addDisposableListener = function (type, handler) {
var _this = this;
this.on(type, handler);
return {
dispose: function () {
if (!handler) {
return;
}
_this.off(type, handler);
handler = null;
}
};
};
EventEmitter.prototype.off = function (type, listener) {
if (!this._events[type]) {
return;
}
var obj = this._events[type];
var i = obj.length;
while (i--) {
if (obj[i] === listener) {
obj.splice(i, 1);
return;
}
}
};
EventEmitter.prototype.removeAllListeners = function (type) {
if (this._events[type]) {
delete this._events[type];
}
};
EventEmitter.prototype.emit = function (type) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (!this._events[type]) {
return;
}
var obj = this._events[type];
for (var i = 0; i < obj.length; i++) {
obj[i].apply(this, args);
}
};
EventEmitter.prototype.listeners = function (type) {
return this._events[type] || [];
};
EventEmitter.prototype.destroy = function () {
this._events = {};
};
return EventEmitter;
}());
exports.EventEmitter = EventEmitter;
},{}],9:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var EscapeSequences_1 = require("./EscapeSequences");
var Charsets_1 = require("./Charsets");
var Buffer_1 = require("./Buffer");
var Types_1 = require("./renderer/Types");
var CharWidth_1 = require("./CharWidth");
var InputHandler = (function () {
function InputHandler(_terminal) {
this._terminal = _terminal;
}
InputHandler.prototype.addChar = function (char, code) {
if (char >= ' ') {
var chWidth = CharWidth_1.wcwidth(code);
if (this._terminal.charset && this._terminal.charset[char]) {
char = this._terminal.charset[char];
}
if (this._terminal.options.screenReaderMode) {
this._terminal.emit('a11y.char', char);
}
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
if (!chWidth && this._terminal.buffer.x) {
if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) {
if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_WIDTH_INDEX]) {
if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2]) {
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][Buffer_1.CHAR_DATA_CHAR_INDEX] += char;
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 2][3] = char.charCodeAt(0);
}
}
else {
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][Buffer_1.CHAR_DATA_CHAR_INDEX] += char;
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][3] = char.charCodeAt(0);
}
this._terminal.updateRange(this._terminal.buffer.y);
}
return;
}
if (this._terminal.buffer.x + chWidth - 1 >= this._terminal.cols) {
if (this._terminal.wraparoundMode) {
this._terminal.buffer.x = 0;
this._terminal.buffer.y++;
if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {
this._terminal.buffer.y--;
this._terminal.scroll(true);
}
else {
this._terminal.buffer.lines.get(this._terminal.buffer.y).isWrapped = true;
}
}
else {
if (chWidth === 2) {
return;
}
}
}
row = this._terminal.buffer.y + this._terminal.buffer.ybase;
if (this._terminal.insertMode) {
for (var moves = 0; moves < chWidth; ++moves) {
var removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop();
if (removed[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 0
&& this._terminal.buffer.lines.get(row)[this._terminal.cols - 2]
&& this._terminal.buffer.lines.get(row)[this._terminal.cols - 2][Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) {
this._terminal.buffer.lines.get(row)[this._terminal.cols - 2] = [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)];
}
this._terminal.buffer.lines.get(row).splice(this._terminal.buffer.x, 0, [this._terminal.curAttr, ' ', 1, ' '.charCodeAt(0)]);
}
}
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, chWidth, char.charCodeAt(0)];
this._terminal.buffer.x++;
this._terminal.updateRange(this._terminal.buffer.y);
if (chWidth === 2) {
this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined];
this._terminal.buffer.x++;
}
}
};
InputHandler.prototype.bell = function () {
this._terminal.bell();
};
InputHandler.prototype.lineFeed = function () {
if (this._terminal.convertEol) {
this._terminal.buffer.x = 0;
}
this._terminal.buffer.y++;
if (this._terminal.buffer.y > this._terminal.buffer.scrollBottom) {
this._terminal.buffer.y--;
this._terminal.scroll();
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
this._terminal.emit('linefeed');
};
InputHandler.prototype.carriageReturn = function () {
this._terminal.buffer.x = 0;
};
InputHandler.prototype.backspace = function () {
if (this._terminal.buffer.x > 0) {
this._terminal.buffer.x--;
}
};
InputHandler.prototype.tab = function () {
var originalX = this._terminal.buffer.x;
this._terminal.buffer.x = this._terminal.buffer.nextStop();
if (this._terminal.options.screenReaderMode) {
this._terminal.emit('a11y.tab', this._terminal.buffer.x - originalX);
}
};
InputHandler.prototype.shiftOut = function () {
this._terminal.setgLevel(1);
};
InputHandler.prototype.shiftIn = function () {
this._terminal.setgLevel(0);
};
InputHandler.prototype.insertChars = function (params) {
var param = params[0];
if (param < 1)
param = 1;
var row = this._terminal.buffer.y + this._terminal.buffer.ybase;
var j = this._terminal.buffer.x;
var ch = [this._terminal.eraseAttr(), ' ', 1, 32];
while (param-- && j < this._terminal.cols) {
this._terminal.buffer.lines.get(row).splice(j++, 0, ch);
this._terminal.buffer.lines.get(row).pop();
}
};
InputHandler.prototype.cursorUp = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y -= param;
if (this._terminal.buffer.y < 0) {
this._terminal.buffer.y = 0;
}
};
InputHandler.prototype.cursorDown = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y += param;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
};
InputHandler.prototype.cursorForward = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.x += param;
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x = this._terminal.cols - 1;
}
};
InputHandler.prototype.cursorBackward = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
if (this._terminal.buffer.x >= this._terminal.cols) {
this._terminal.buffer.x--;
}
this._terminal.buffer.x -= param;
if (this._terminal.buffer.x < 0) {
this._terminal.buffer.x = 0;
}
};
InputHandler.prototype.cursorNextLine = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y += param;
if (this._terminal.buffer.y >= this._terminal.rows) {
this._terminal.buffer.y = this._terminal.rows - 1;
}
this._terminal.buffer.x = 0;
};
InputHandler.prototype.cursorPrecedingLine = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.y -= param;
if (this._terminal.buffer.y < 0) {
this._terminal.buffer.y = 0;
}
this._terminal.buffer.x = 0;
};
InputHandler.prototype.cursorCharAbsolute = function (params) {
var param = params[0];
if (param < 1) {
param = 1;
}
this._terminal.buffer.x = param - 1;
};
InputHandler.prototype.cursorPosition = function (params) {
var col;
var row = params[0] - 1;
if (params.length >= 2) {
col = params[1] - 1;
}
else {
col = 0;
}
if (row < 0) {
row = 0;
}
else if (row >= this._terminal.rows) {
row = this._terminal.rows - 1;
}
if (col < 0) {
col = 0;
}
else if (col >= this._terminal.cols) {
col = this._terminal.cols - 1;
}
this._terminal.buffer.x = col;
this._terminal.buffer.y = row;
};
InputHandler.prototype.curso