encodeForCodeTable function

Uint8List encodeForCodeTable(
  1. String text,
  2. CodeTableId table
)

Wandelt Text in die Bytes einer Code-Tabelle: erst die vorhandenen Ersetzungen (’ ´ •), dann die zehn deutschen Zeichen je Tabelle (Byte oder Ersatzbuchstaben), ASCII unveraendert, alles uebrige ueber die Abbildung der Tabelle, sonst ?. Ein Zeichen, das die Tabelle nicht kennt, ist genau ein Byte (auch ausserhalb der BMP); nur die Ersatzbuchstaben machen aus einem Zeichen mehrere. Spalten darum immer an den fertigen Bytes messen.

Implementation

Uint8List encodeForCodeTable(String text, CodeTableId table) {
  var aufbereitet = text;
  for (final (von, nach) in _zeichenErsatz) {
    aufbereitet = aufbereitet.replaceAll(von, nach);
  }
  final bytesDerTabelle = _bytesJeTabelle[table]!;
  final bytes = <int>[];
  for (final codepunkt in aufbereitet.runes) {
    if (codepunkt < 0x80) {
      bytes.add(codepunkt);
      continue;
    }
    final zeichen = String.fromCharCode(codepunkt);
    final byte = bytesDerTabelle[zeichen];
    if (byte != null) {
      bytes.add(byte);
      continue;
    }
    final ersatz = _ersatzBuchstaben[zeichen];
    if (ersatz != null) {
      bytes.addAll(ersatz.codeUnits);
      continue;
    }
    bytes.add(_uebrigesZeichen(codepunkt, table));
  }
  return Uint8List.fromList(bytes);
}