40 lines
883 B
Dart
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);
|
|
}
|
|
}
|
|
}
|