Commit 2ecf35a0 authored by Andrey's avatar Andrey

Added printlnMixedKanji method

parent e634b71b
......@@ -57,6 +57,12 @@ void main() {
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
printer.printBarcode(Barcode.upcA(barData));
// Print mixed (chinese + latin) text. Only for printers supporting Kanji mode
// printer.printlnMixedKanji(
// 'hello ! 中文字 # world @ éphémère &',
// styles: PosStyles(codeTable: PosCodeTable.westEur),
// );
printer.cut();
printer.disconnect();
});
......
......@@ -161,6 +161,50 @@ class Printer {
reset();
}
/// Prints one line of styled mixed (chinese and latin symbols) text
void printlnMixedKanji(
String text, {
PosStyles styles = const PosStyles(),
int linesAfter = 0,
}) {
// Break text into lexemes
final List<String> lexemes = [];
final List<bool> isLexemeChinese = [];
bool _isChinese(String ch) {
return ch.codeUnitAt(0) > 255 ? true : false;
}
int start = 0;
int end = 0;
bool curLexemeChinese = _isChinese(text[0]);
for (var i = 1; i < text.length; ++i) {
if (curLexemeChinese == _isChinese(text[i])) {
end += 1;
} else {
lexemes.add(text.substring(start, end + 1));
isLexemeChinese.add(curLexemeChinese);
start = i;
end = i;
curLexemeChinese = !curLexemeChinese;
}
}
lexemes.add(text.substring(start, end + 1));
isLexemeChinese.add(curLexemeChinese);
// Print each lexeme using codetable OR kanji
for (var i = 0; i < lexemes.length; ++i) {
_print(
lexemes[i],
styles: styles,
kanjiOff: !isLexemeChinese[i],
);
}
_socket.writeln();
emptyLines(linesAfter);
reset();
}
/// Print selected code table.
///
/// If [codeTable] is null, global code table is used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment