mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Reference CHARSETS using codes
This commit is contained in:
+23
-18
@@ -2,13 +2,17 @@
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
// TODO: Give CHARSETS a proper type
|
||||
/**
|
||||
* The character sets supported by the terminal. These enable several languages
|
||||
* to be represented within the terminal with only 8-bit encoding. See ISO 2022
|
||||
* for a discussion on character sets.
|
||||
* for a discussion on character sets. Only VT100 character sets are supported.
|
||||
*/
|
||||
export const CHARSETS: any = {};
|
||||
export const CHARSETS: {[key: string]: {[key: string]: string}} = {};
|
||||
|
||||
/**
|
||||
* The default character set, US.
|
||||
*/
|
||||
export const DEFAULT_CHARSET = CHARSETS['B'];
|
||||
|
||||
// DEC Special Character and Line Drawing Set.
|
||||
// http://vt100.net/docs/vt102-ug/table5-13.html
|
||||
@@ -18,7 +22,7 @@ export const CHARSETS: any = {};
|
||||
// reference above. xterm seems in line with the reference
|
||||
// when running vttest however.
|
||||
// The table below now uses xterm's output from vttest.
|
||||
CHARSETS.SCLD = { // (0
|
||||
CHARSETS['0'] = {
|
||||
'`': '\u25c6', // '◆'
|
||||
'a': '\u2592', // '▒'
|
||||
'b': '\u0009', // '\t'
|
||||
@@ -57,7 +61,7 @@ CHARSETS.SCLD = { // (0
|
||||
* ESC (A
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-5.html
|
||||
*/
|
||||
CHARSETS.UK = {
|
||||
CHARSETS['A'] = {
|
||||
'#': '£'
|
||||
};
|
||||
|
||||
@@ -65,14 +69,14 @@ CHARSETS.UK = {
|
||||
* United States character set
|
||||
* ESC (B
|
||||
*/
|
||||
CHARSETS.US = null;
|
||||
CHARSETS['B'] = null;
|
||||
|
||||
/**
|
||||
* Dutch character set
|
||||
* ESC (4
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-6.html
|
||||
*/
|
||||
CHARSETS.Dutch = { // (4
|
||||
CHARSETS['4'] = {
|
||||
'#': '£',
|
||||
'@': '¾',
|
||||
'[': 'ij',
|
||||
@@ -89,7 +93,8 @@ CHARSETS.Dutch = { // (4
|
||||
* ESC (C or ESC (5
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-7.html
|
||||
*/
|
||||
CHARSETS.Finnish = {
|
||||
CHARSETS['C'] =
|
||||
CHARSETS['5'] = {
|
||||
'[': 'Ä',
|
||||
'\\': 'Ö',
|
||||
']': 'Å',
|
||||
@@ -106,7 +111,7 @@ CHARSETS.Finnish = {
|
||||
* ESC (R
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-8.html
|
||||
*/
|
||||
CHARSETS.French = {
|
||||
CHARSETS['R'] = {
|
||||
'#': '£',
|
||||
'@': 'à',
|
||||
'[': '°',
|
||||
@@ -123,7 +128,7 @@ CHARSETS.French = {
|
||||
* ESC (Q
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-9.html
|
||||
*/
|
||||
CHARSETS.FrenchCanadian = {
|
||||
CHARSETS['Q'] = {
|
||||
'@': 'à',
|
||||
'[': 'â',
|
||||
'\\': 'ç',
|
||||
@@ -141,7 +146,7 @@ CHARSETS.FrenchCanadian = {
|
||||
* ESC (K
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-10.html
|
||||
*/
|
||||
CHARSETS.German = {
|
||||
CHARSETS['K'] = {
|
||||
'@': '§',
|
||||
'[': 'Ä',
|
||||
'\\': 'Ö',
|
||||
@@ -157,7 +162,7 @@ CHARSETS.German = {
|
||||
* ESC (Y
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-11.html
|
||||
*/
|
||||
CHARSETS.Italian = {
|
||||
CHARSETS['Y'] = {
|
||||
'#': '£',
|
||||
'@': '§',
|
||||
'[': '°',
|
||||
@@ -175,7 +180,8 @@ CHARSETS.Italian = {
|
||||
* ESC (E or ESC (6
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-12.html
|
||||
*/
|
||||
CHARSETS.NorwegianDanish = {
|
||||
CHARSETS['E'] =
|
||||
CHARSETS['6'] = {
|
||||
'@': 'Ä',
|
||||
'[': 'Æ',
|
||||
'\\': 'Ø',
|
||||
@@ -193,7 +199,7 @@ CHARSETS.NorwegianDanish = {
|
||||
* ESC (Z
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-13.html
|
||||
*/
|
||||
CHARSETS.Spanish = {
|
||||
CHARSETS['Z'] = {
|
||||
'#': '£',
|
||||
'@': '§',
|
||||
'[': '¡',
|
||||
@@ -209,7 +215,8 @@ CHARSETS.Spanish = {
|
||||
* ESC (H or ESC (7
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-14.html
|
||||
*/
|
||||
CHARSETS.Swedish = {
|
||||
CHARSETS['H'] =
|
||||
CHARSETS['7'] = {
|
||||
'@': 'É',
|
||||
'[': 'Ä',
|
||||
'\\': 'Ö',
|
||||
@@ -227,7 +234,7 @@ CHARSETS.Swedish = {
|
||||
* ESC (=
|
||||
* Reference: http://vt100.net/docs/vt220-rm/table2-15.html
|
||||
*/
|
||||
CHARSETS.Swiss = {
|
||||
CHARSETS['='] = {
|
||||
'#': 'ù',
|
||||
'@': 'à',
|
||||
'[': 'é',
|
||||
@@ -241,5 +248,3 @@ CHARSETS.Swiss = {
|
||||
'}': 'ü',
|
||||
'~': 'û'
|
||||
};
|
||||
|
||||
CHARSETS.ISOLatin = null; // /A
|
||||
|
||||
+5
-5
@@ -4,7 +4,7 @@
|
||||
|
||||
import { IInputHandler, ITerminal } from './Interfaces';
|
||||
import { C0 } from './EscapeSequences';
|
||||
import { CHARSETS } from './Charsets';
|
||||
import { DEFAULT_CHARSET } from './Charsets';
|
||||
|
||||
/**
|
||||
* The terminal's standard implementation of IInputHandler, this handles all
|
||||
@@ -842,10 +842,10 @@ export class InputHandler implements IInputHandler {
|
||||
this._terminal.applicationCursor = true;
|
||||
break;
|
||||
case 2:
|
||||
this._terminal.setgCharset(0, CHARSETS.US);
|
||||
this._terminal.setgCharset(1, CHARSETS.US);
|
||||
this._terminal.setgCharset(2, CHARSETS.US);
|
||||
this._terminal.setgCharset(3, CHARSETS.US);
|
||||
this._terminal.setgCharset(0, DEFAULT_CHARSET);
|
||||
this._terminal.setgCharset(1, DEFAULT_CHARSET);
|
||||
this._terminal.setgCharset(2, DEFAULT_CHARSET);
|
||||
this._terminal.setgCharset(3, DEFAULT_CHARSET);
|
||||
// set VT100 mode here
|
||||
break;
|
||||
case 3: // 132 col mode
|
||||
|
||||
+5
-27
@@ -4,7 +4,7 @@
|
||||
|
||||
import { C0 } from './EscapeSequences';
|
||||
import { IInputHandler } from './Interfaces';
|
||||
import { CHARSETS } from './Charsets';
|
||||
import { CHARSETS, DEFAULT_CHARSET } from './Charsets';
|
||||
|
||||
const normalStateHandler: {[key: string]: (parser: Parser, handler: IInputHandler) => void} = {};
|
||||
normalStateHandler[C0.BEL] = (parser, handler) => handler.bell();
|
||||
@@ -70,7 +70,7 @@ escapedStateHandler['%'] = (parser, terminal) => {
|
||||
// ESC % Select default/utf-8 character set.
|
||||
// @ = default, G = utf-8
|
||||
terminal.setgLevel(0);
|
||||
terminal.setgCharset(0, CHARSETS.US);
|
||||
terminal.setgCharset(0, DEFAULT_CHARSET); // US (default)
|
||||
parser.setState(ParserState.NORMAL);
|
||||
parser.skipNextChar();
|
||||
};
|
||||
@@ -145,28 +145,6 @@ csiStateHandler['r'] = (handler, params) => handler.setScrollRegion(params);
|
||||
csiStateHandler['s'] = (handler, params) => handler.saveCursor(params);
|
||||
csiStateHandler['u'] = (handler, params) => handler.restoreCursor(params);
|
||||
|
||||
// TODO: Many codes/charsets appear to not be supported
|
||||
// See: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
|
||||
const charsetMap = {
|
||||
'0': CHARSETS.SCLD,
|
||||
'A': CHARSETS.UK, // United Kingdom
|
||||
'B': CHARSETS.US, // United States (USASCII)
|
||||
'4': CHARSETS.Dutch,
|
||||
'C': CHARSETS.Finnish,
|
||||
'5': CHARSETS.Finnish,
|
||||
'f': CHARSETS.French,
|
||||
'Q': CHARSETS.FrenchCanadian,
|
||||
'K': CHARSETS.German,
|
||||
'Y': CHARSETS.Italian,
|
||||
'E': CHARSETS.NorwegianDanish,
|
||||
'6': CHARSETS.NorwegianDanish,
|
||||
'Z': CHARSETS.Spanish,
|
||||
'H': CHARSETS.Swedish,
|
||||
'7': CHARSETS.Swedish,
|
||||
'=': CHARSETS.Swiss,
|
||||
'/': CHARSETS.ISOLatin // ISOLatin is actually /A
|
||||
};
|
||||
|
||||
enum ParserState {
|
||||
NORMAL = 0,
|
||||
ESCAPED = 1,
|
||||
@@ -371,13 +349,13 @@ export class Parser {
|
||||
break;
|
||||
|
||||
case ParserState.CHARSET:
|
||||
if (ch in charsetMap) {
|
||||
cs = charsetMap[ch];
|
||||
if (ch in CHARSETS) {
|
||||
cs = CHARSETS[ch];
|
||||
if (ch === '/') { // ISOLatin is actually /A
|
||||
this.skipNextChar();
|
||||
}
|
||||
} else {
|
||||
cs = CHARSETS.US; // Default
|
||||
cs = DEFAULT_CHARSET;
|
||||
}
|
||||
this._terminal.setgCharset(this._terminal.gcharset, cs);
|
||||
this._terminal.gcharset = null;
|
||||
|
||||
Reference in New Issue
Block a user