encodeForCodeTable function
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);
}