/** * Katalog der Code-Tabellen fuer Bondrucker und die Umwandlung von Text in * Bytes je Tabelle. * * Warum ein Katalog: `ESC t n` waehlt die Zeichentabelle, aber die Nummer n * ist nicht einheitlich. Epson legt WPC1252 auf 16, viele guenstige Drucker * nummerieren anders oder kennen die Tabelle gar nicht. Wer am Testblatt * sieht, welche Nummer seine Umlaute richtig druckt, waehlt hier die * passende Tabelle. Gemeinsamer Prueffall mit dem Dart-Zwilling: * `fixtures/code-tables.json`. * * Jede Tabelle setzt die zehn deutschen Zeichen (Umlaute, ß, €, §, °) auf * ein Byte oder, wo die Tabelle das Zeichen nicht hat, auf Ersatzbuchstaben * (`€` -> `EUR`). Fuer diese zehn Zeichen kommt nie `?` heraus. */ /** Kennung einer Code-Tabelle. */ export type CodeTableId = 'wpc1252' | 'pc858' | 'pc850' | 'pc437' | 'iso8859_15' | 'replacement'; /** Eine Code-Tabelle des Katalogs. */ export interface CodeTable { /** Kennung. */ id: CodeTableId; /** Nummer auf dem Testblatt (1-6). */ number: 1 | 2 | 3 | 4 | 5 | 6; /** n fuer `ESC t n`. */ escT: number; /** Zeichen der zehn, die diese Tabelle nicht hat und durch Ersatzbuchstaben druckt. */ missing: readonly string[]; } /** * Ersatzbuchstaben fuer eines der zehn Zeichen (paketintern, fuer * `escPosPrintableText` mit gewaehlter Tabelle). */ export declare function ersatzBuchstaben(zeichen: string): string; /** Alle Code-Tabellen in der Reihenfolge des Testblatts (Nummer 1-6). */ export declare const CODE_TABLES: readonly CodeTable[]; /** Die Tabelle zu einer Kennung; eine unbekannte Kennung wird gemeldet. */ export declare function codeTableById(id: CodeTableId): CodeTable; /** * Tabelle aus der gespeicherten Einstellung (`cp1252`/`cp437`). Alles andere, * auch keine Einstellung, ist die Vorgabe `wpc1252`. */ export declare function codeTableFromSetting(setting: 'cp1252' | 'cp437' | null | undefined): CodeTableId; /** * Zeichen, die das Vorbild vor dem Kodieren ersetzt (generator.dart `_encode`). * * **Eine bewusste Abweichung:** Fuer `•` sagt generator.dart `.`, * print_paper.dart (portiert als `escPosPrintableText`) dagegen `*`. In Darts * eigener Kette faellt das nie auf, weil print_paper vor dem Erzeuger ersetzt * und der Erzeuger den Punkt nie zu sehen bekommt -- die gedruckte Antwort ist * dort also `*`. Ein Verbraucher dieses Pakets kann `escPosText` aber auch * direkt aufrufen, und dann duerfen nicht zwei Zeichen fuer dasselbe Zeichen * herauskommen. Deshalb gilt hier dieselbe Antwort wie dort. */ export declare const ZEICHEN_ERSATZ: ReadonlyArray; /** * Latin-1-Byte -> CP437-Byte fuer die Zeichen, die CP437 kennt (deutsche * Umlaute, ß, westeuropaeische Akzente, Waehrungs-/Sonderzeichen). Alles * andere ab 0x80 hat in CP437 keinen Platz und wird zu "?". */ export declare const CP437_AUS_LATIN1: ReadonlyMap; /** * Wandelt Text in die Bytes einer Code-Tabelle: erst die vorhandenen * Ersetzungen (`ZEICHEN_ERSATZ`), 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; nur die Ersatzbuchstaben machen aus einem * Zeichen mehrere. Spalten darum immer an den fertigen Bytes messen. */ export declare function encodeForCodeTable(text: string, table: CodeTableId): Uint8Array; /** Wendet `ZEICHEN_ERSATZ` an (paketintern, nicht exportiert ueber den Einstieg). */ export declare function replaceKnownCharacters(text: string): string; /** * Wie `encodeForCodeTable`, aber fuer Text, der `ZEICHEN_ERSATZ` schon hinter * sich hat (paketintern: der alte Pfad in `encodeEscPosText` ersetzt vor der * Latin-1-Pruefung und soll nicht zweimal ersetzen). */ export declare function encodeReplaced(aufbereitet: string, table: CodeTableId): Uint8Array;