David PHAM-VAN

Remove dependency to the deprecated utf library

... ... @@ -16,6 +16,7 @@
- Improve gradient functions
- Add blend mode
- Add soft mask
- Remove dependency to the deprecated utf library
## 1.12.0
... ...
... ... @@ -18,7 +18,6 @@ import 'dart:convert';
import 'dart:typed_data';
import 'package:meta/meta.dart';
import 'package:utf/utf.dart';
import 'color.dart';
import 'object.dart';
... ... @@ -120,7 +119,7 @@ class PdfString extends PdfDataType {
try {
return latin1.encode(value);
} catch (e) {
return Uint8List.fromList(<int>[0xfe, 0xff] + encodeUtf16be(value));
return Uint8List.fromList(<int>[0xfe, 0xff] + _encodeUtf16be(value));
}
}
... ... @@ -135,6 +134,46 @@ class PdfString extends PdfDataType {
return _string('D:$year$month$day$hour$minute${second}Z');
}
/// Produce a list of UTF-16BE encoded bytes.
static List<int> _encodeUtf16be(String str) {
const UNICODE_REPLACEMENT_CHARACTER_CODEPOINT = 0xfffd;
const UNICODE_BYTE_ZERO_MASK = 0xff;
const UNICODE_BYTE_ONE_MASK = 0xff00;
const UNICODE_VALID_RANGE_MAX = 0x10ffff;
const UNICODE_PLANE_ONE_MAX = 0xffff;
const UNICODE_UTF16_RESERVED_LO = 0xd800;
const UNICODE_UTF16_RESERVED_HI = 0xdfff;
const UNICODE_UTF16_OFFSET = 0x10000;
const UNICODE_UTF16_SURROGATE_UNIT_0_BASE = 0xd800;
const UNICODE_UTF16_SURROGATE_UNIT_1_BASE = 0xdc00;
const UNICODE_UTF16_HI_MASK = 0xffc00;
const UNICODE_UTF16_LO_MASK = 0x3ff;
final encoding = <int>[];
final add = (int unit) {
encoding.add((unit & UNICODE_BYTE_ONE_MASK) >> 8);
encoding.add(unit & UNICODE_BYTE_ZERO_MASK);
};
for (var unit in str.codeUnits) {
if ((unit >= 0 && unit < UNICODE_UTF16_RESERVED_LO) ||
(unit > UNICODE_UTF16_RESERVED_HI && unit <= UNICODE_PLANE_ONE_MAX)) {
add(unit);
} else if (unit > UNICODE_PLANE_ONE_MAX &&
unit <= UNICODE_VALID_RANGE_MAX) {
final base = unit - UNICODE_UTF16_OFFSET;
add(UNICODE_UTF16_SURROGATE_UNIT_0_BASE +
((base & UNICODE_UTF16_HI_MASK) >> 10));
add(UNICODE_UTF16_SURROGATE_UNIT_1_BASE +
(base & UNICODE_UTF16_LO_MASK));
} else {
add(UNICODE_REPLACEMENT_CHARACTER_CODEPOINT);
}
}
return encoding;
}
/// Escape special characters
/// \ddd Character code ddd (octal)
void _putTextBytes(PdfStream s, List<int> b) {
... ...
... ... @@ -19,7 +19,6 @@ import 'dart:math' as math;
import 'dart:typed_data';
import 'package:meta/meta.dart';
import 'package:utf/utf.dart';
import 'font_metrics.dart';
... ... @@ -125,7 +124,7 @@ class TtfParser {
}
if (platformID == 3 && nameID == 6) {
try {
_fontName = decodeUtf16(bytes.buffer
_fontName = _decodeUtf16(bytes.buffer
.asUint8List(basePosition + stringOffset + offset, length));
return;
} catch (a) {
... ... @@ -403,4 +402,12 @@ class TtfParser {
components,
);
}
String _decodeUtf16(Uint8List bytes) {
final charCodes = <int>[];
for (var i = 0; i < bytes.length; i += 2) {
charCodes.add((bytes[i] << 8) | bytes[i + 1]);
}
return String.fromCharCodes(charCodes);
}
}
... ...
... ... @@ -16,7 +16,6 @@ dependencies:
image: ^2.1.10
meta: ^1.1.5
path_parsing: ^0.1.4
utf: ^0.9.0
vector_math: ^2.0.0
dev_dependencies:
... ...