src/Tools/VSCode/patches/isabelle_encoding.ts
author wenzelm
Wed, 22 Jan 2025 22:22:19 +0100
changeset 81954 6f2bcdfa9a19
parent 75261 ed83c58c612a
permissions -rw-r--r--
misc tuning: more concise operations on prems (without change of exceptions); discontinue odd clone Drule.cprems_of (see also 991a3feaf270);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
75240
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     1
/*  Author:     Makarius
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     2
75246
f32e5d4cf1a3 patch for vscode encoding "UTF-8-Isabelle": clone of "utf8", no symbols yet;
wenzelm
parents: 75245
diff changeset
     3
UTF-8-Isabelle symbol encoding: for use inside VSCode.
75240
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     4
*/
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     5
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     6
'use strict';
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     7
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
     8
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
     9
/* VSCode interfaces */
75240
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    10
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    11
export interface Options {
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    12
  stripBOM?: boolean;
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    13
  addBOM?: boolean;
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    14
  defaultEncoding?: string;
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    15
}
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    16
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
    17
export interface IDecoderStream {
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
    18
  write(input: Uint8Array): string;
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
    19
  end(): string | undefined;
75240
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    20
}
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
    21
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    22
export interface IEncoderStream {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    23
  write(input: string): Uint8Array;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    24
  end(): Uint8Array | undefined;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    25
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    26
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    27
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    28
/* ASCII characters */
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    29
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    30
function is_ascii(c: number): boolean {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    31
  return 0 <= c && c <= 127;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    32
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    33
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    34
function is_ascii_letter(c: number): boolean {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    35
  return 65 <= c && c <= 90 || 97 <= c && c <= 122;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    36
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    37
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    38
function is_ascii_digit(c: number): boolean {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    39
  return 48 <= c && c <= 57;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    40
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    41
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    42
function is_ascii_quasi(c: number): boolean {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    43
  return c === 95 || c === 39;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    44
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    45
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    46
function is_ascii_letdig(c: number): boolean {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    47
  return is_ascii_letter(c) || is_ascii_digit(c) || is_ascii_quasi(c);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    48
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    49
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    50
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    51
/* string buffer */
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    52
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    53
class String_Buffer {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    54
  state: string[]
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    55
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    56
  constructor() {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    57
    this.state = [];
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    58
  }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    59
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    60
  add(s: string) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    61
    this.state.push(s);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    62
  }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    63
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    64
  end(): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    65
    const s = this.state.join('');
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    66
    this.state = [];
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    67
    return s;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    68
  }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    69
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    70
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    71
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    72
/* Isabelle symbol codes */
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    73
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    74
function codepoint_string(c: number): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    75
  return String.fromCodePoint(c);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    76
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    77
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    78
const backslash: number = 92;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    79
const caret: number = 94;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    80
const bg_symbol: number = 60;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    81
const en_symbol: number = 62;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    82
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    83
interface Symbol_Code {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    84
  symbol: string;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    85
  code: number;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    86
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    87
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    88
export class Symbol_Codes {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    89
  decode_table: Map<string, string>;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    90
  encode_table: Map<string, string>;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    91
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    92
  constructor(symbols: Symbol_Code[]) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    93
    this.decode_table = new Map(symbols.map(s => [s.symbol, codepoint_string(s.code)]));
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    94
    this.encode_table = new Map(symbols.map(s => [codepoint_string(s.code), s.symbol]));
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    95
  }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    96
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    97
  recode(str: string, do_encode: boolean): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    98
    function ok(i: number): boolean {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
    99
      return 0 <= i && i < str.length;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   100
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   101
    function char(i: number): number {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   102
      return ok(i) ? str.charCodeAt(i) : 0;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   103
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   104
    function maybe_char(c: number, i: number): number {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   105
      return char(i) === c ? i + 1 : i;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   106
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   107
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   108
    function many_ascii_letdig(i: number): number {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   109
      let k = i;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   110
      while (is_ascii_letdig(char(k))) { k += 1 };
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   111
      return k;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   112
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   113
    function maybe_ascii_id(i: number): number {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   114
      return is_ascii_letter(char(i)) ? many_ascii_letdig(i + 1) : i
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   115
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   116
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   117
    function scan_ascii(start: number): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   118
      let i = start;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   119
      while (ok(i)) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   120
        const a = char(i);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   121
        const b = char(i + 1);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   122
        if (!is_ascii(a) || a === backslash && b === bg_symbol) { break; }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   123
        else { i += 1; }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   124
      }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   125
      return str.substring(start, i);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   126
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   127
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   128
    function scan_symbol(i: number): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   129
      const a = char(i);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   130
      const b = char(i + 1);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   131
      if (a === backslash && b === bg_symbol) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   132
        const j = maybe_char(en_symbol, maybe_ascii_id(maybe_char(caret, i + 2)));
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   133
        return str.substring(i, j);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   134
      }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   135
      else { return ''; }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   136
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   137
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   138
    function scan_codepoint(i: number): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   139
      const c = str.codePointAt(i);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   140
      return c === undefined ? '' : codepoint_string(c);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   141
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   142
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   143
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   144
    const table = do_encode ? this.encode_table : this.decode_table;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   145
    const result = new String_Buffer();
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   146
    let i = 0;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   147
    while (ok(i)) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   148
      const ascii = scan_ascii(i)
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   149
      if (ascii) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   150
        result.add(ascii)
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   151
        i += ascii.length
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   152
      }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   153
      else {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   154
        const s = scan_symbol(i) || scan_codepoint(i);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   155
        if (s) {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   156
          const r = table.get(s);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   157
          result.add(r === undefined ? s : r);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   158
          i += s.length;
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   159
        }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   160
      }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   161
    }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   162
    return result.end();
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   163
  }
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   164
}
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   165
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   166
const symbol_codes: Symbol_Codes = new Symbol_Codes([/*symbols*/]);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   167
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   168
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   169
/* main API */
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   170
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   171
export const ENCODING = 'utf8isabelle';
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   172
export const LABEL = 'UTF-8-Isabelle';
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   173
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   174
export function getDecoder(): IDecoderStream {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   175
  const utf8_decoder = new TextDecoder();
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   176
  const buffer = new String_Buffer();
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   177
  return {
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   178
    write(input: Uint8Array): string {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   179
      buffer.add(utf8_decoder.decode(input, { stream: true }));
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   180
      return '';
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   181
    },
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   182
    end(): string | undefined {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   183
      buffer.add(utf8_decoder.decode());
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   184
      const s = buffer.end();
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   185
      return symbol_codes.recode(s, false);
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   186
    }
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   187
  };
75240
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
   188
}
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
   189
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   190
export function getEncoder(): IEncoderStream {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   191
  const utf8_encoder = new TextEncoder();
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   192
  const empty = new Uint8Array(0);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   193
  const buffer = new String_Buffer();
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   194
  return {
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   195
    write(input: string): Uint8Array {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   196
      buffer.add(input);
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   197
      return empty;
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   198
    },
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   199
    end(): Uint8Array | undefined {
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   200
      const s = buffer.end();
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   201
      return utf8_encoder.encode(symbol_codes.recode(s, true));
75245
0fc0ed9a3ad7 fit into vscode source conventions;
wenzelm
parents: 75240
diff changeset
   202
    }
75261
ed83c58c612a actually decode/encode symbols;
wenzelm
parents: 75253
diff changeset
   203
  }
75240
83197a0ac6df towards UTF-8-Isabelle symbol encoding;
wenzelm
parents:
diff changeset
   204
}