twonly-app-dependencies/qr/lib/src/eci.dart
2026-02-12 22:01:59 +01:00

40 lines
883 B
Dart

import 'bit_buffer.dart';
import 'byte.dart';
import 'mode.dart';
/// Extended Channel Interpretation (ECI) mode data.
///
/// Use this to specify a different character encoding for the following data.
class QrEci implements QrDatum {
final int value;
factory QrEci(int value) {
if (value < 0 || value > 999999) {
throw RangeError.range(value, 0, 999999, 'value');
}
return QrEci._(value);
}
QrEci._(this.value);
@override
QrMode get mode => QrMode.eci;
@override
int get length => 0; // ECI segments do not have a length field
@override
void write(QrBitBuffer buffer) {
if (value < 128) {
// 0xxxxxxx
buffer.put(value, 8);
} else if (value < 16384) {
// 10xxxxxx xxxxxxxx
buffer.put(0x8000 | value, 16);
} else {
// 110xxxxx xxxxxxxx xxxxxxxx
buffer.put(0xC00000 | value, 24);
}
}
}