readDict static method
Implementation
static readDict(Uint8List data, int offset, int end) {
Map<String,dynamic> dict = {};
var carr = [];
int _len = data.length;
while (offset < end) {
int? b0 = null;
if (offset < _len) {
b0 = data[offset];
}
int _offset1 = offset + 1;
int? b1 = null;
if (_offset1 < _len) {
b1 = data[_offset1];
}
int vs = 1;
var key = null, val = null;
// operand
if (b0 == 28) {
val = TyprBin.readShort(data, offset + 1);
vs = 3;
}
if (b0 == 29) {
val = TyprBin.readInt(data, offset + 1);
vs = 5;
}
if (b0 != null && 32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (b0 != null && b1 != null && 247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (b0 != null && b1 != null && 251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = TyprBin.readInt(data, offset + 1) / 0xffff;
vs = 5;
throw "unknown number";
}
if (b0 == 30) {
var nibs = [];
vs = 1;
while (true) {
int b = data[offset + vs];
vs++;
int nib0 = b >> 4, nib1 = b & 0xf;
if (nib0 != 0xf) nibs.add(nib0);
if (nib1 != 0xf) nibs.add(nib1);
if (nib1 == 0xf) break;
}
String s = "";
List chars = [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
".",
"e",
"e-",
"reserved",
"-",
"endOfNumber"
];
for (int i = 0; i < nibs.length; i++) s += chars[nibs[i]].toString();
//console.warn(nibs);
val = double.parse(s);
}
if (b0 != null && b0 <= 21){
List keys = [
"version",
"Notice",
"FullName",
"FamilyName",
"Weight",
"FontBBox",
"BlueValues",
"OtherBlues",
"FamilyBlues",
"FamilyOtherBlues",
"StdHW",
"StdVW",
"escape",
"UniqueID",
"XUID",
"charset",
"Encoding",
"CharStrings",
"Private",
"Subrs",
"defaultWidthX",
"nominalWidthX"
];
key = keys[b0];
vs = 1;
if (b0 == 12) {
List keys = [
"Copyright",
"isFixedPitch",
"ItalicAngle",
"UnderlinePosition",
"UnderlineThickness",
"PaintType",
"CharstringType",
"FontMatrix",
"StrokeWidth",
"BlueScale",
"BlueShift",
"BlueFuzz",
"StemSnapH",
"StemSnapV",
"ForceBold",
0,
0,
"LanguageGroup",
"ExpansionFactor",
"initialRandomSeed",
"SyntheticBase",
"PostScript",
"BaseFontName",
"BaseFontBlend",
0,
0,
0,
0,
0,
0,
"ROS",
"CIDFontVersion",
"CIDFontRevision",
"CIDFontType",
"CIDCount",
"UIDBase",
"FDArray",
"FDSelect",
"FontName"
];
key = keys[b1!];
vs = 2;
}
}
if (key != null) {
dict[key] = carr.length == 1 ? carr[0] : carr;
carr = [];
} else
carr.add(val);
offset += vs;
}
return dict;
}