UNPKG

mbed-simulator

Version:
1,333 lines (1,309 loc) 283 kB
(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 += '&nbsp;'; } 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