parse static method
Implementation
static Map<String,dynamic> parse(Uint8List buffer, int offset, int length) {
final data = buffer.sublist(offset, offset + length);
offset = 0;
// Header
offset++;
offset++;
offset++;
offset++;
// Name INDEX
List<int> ninds = [];
offset = readIndex(data, offset, ninds);
var names = [];
for (int i = 0; i < ninds.length - 1; i++){
names.add(TyprBin.readASCII(data, offset + ninds[i], ninds[i + 1] - ninds[i]));
}
offset += ninds[ninds.length - 1];
// Top DICT INDEX
List<int> tdinds = [];
offset = readIndex(data, offset, tdinds); //console.warn(tdinds);
// Top DICT Data
var topDicts = [];
for (int i = 0; i < tdinds.length - 1; i++)
topDicts.add(readDict(data, offset + tdinds[i], offset + tdinds[i + 1]));
offset += tdinds[tdinds.length - 1];
Map<String, dynamic> topdict = Map<String, dynamic>.from(topDicts[0]);
//console.warn(topdict);
// String INDEX
List<int> sinds = [];
offset = readIndex(data, offset, sinds);
// String Data
List<String> strings = [];
for (int i = 0; i < sinds.length - 1; i++){
strings.add(TyprBin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
}
offset += sinds[sinds.length - 1];
// Global Subr INDEX (subroutines)
readSubrs(data, offset, topdict);
// charstrings
if (topdict["CharStrings"] != null) {
offset = topdict["CharStrings"];
List<int> sinds = [];
offset = readIndex(data, offset, sinds);
List<List<int>> cstr = [];
for (int i = 0; i < sinds.length - 1; i++){
cstr.add(TyprBin.readBytes(
data, offset + sinds[i], sinds[i + 1] - sinds[i]));
}
//offset += sinds[sinds.length-1];
topdict["CharStrings"] = cstr;
//console.warn(topdict.CharStrings);
}
// CID font
if (topdict["ROS"] != null) {
offset = topdict["FDArray"];
List<int> fdind = [];
offset = readIndex(data, offset, fdind);
topdict["FDArray"] = [];
for (int i = 0; i < fdind.length - 1; i++) {
var dict = readDict(data, offset + fdind[i], offset + fdind[i + 1]);
_readFDict(data, dict, strings);
topdict["FDArray"].add(dict);
}
offset += fdind[fdind.length - 1];
offset = topdict["FDSelect"];
topdict["FDSelect"] = [];
var fmt = data[offset];
offset++;
if (fmt == 3) {
var rns = TyprBin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < rns + 1; i++) {
topdict["FDSelect"]
.addAll([TyprBin.readUshort(data, offset), data[offset + 2]]);
offset += 3;
}
} else
throw fmt;
}
// Encoding
if (topdict["Encoding"] != null) {
topdict["Encoding"] = readEncoding(
data, topdict["Encoding"], topdict["CharStrings"].length);
}
// charset
if (topdict["charset"] != null) {
topdict["charset"] =
readCharset(data, topdict["charset"], topdict["CharStrings"].length);
}
_readFDict(data, topdict, strings);
return topdict;
}