glyphIdFor method
Implementation
int glyphIdFor(UPdfCodePoint point) {
final UPdfGlyphSource? source = glyphs;
if (source == null) return 0;
if (isType0) {
final Map<int, int>? map = cidToGid;
if (map != null) return map[point.cid] ?? 0;
if (source is UPdfCff && source.isCid) return source.glyphForCid(point.cid);
return point.cid;
}
final String name = point.code < encodingNames.length ? encodingNames[point.code] : "";
if (source is UPdfType1) {
if (name.isNotEmpty) {
final int index = source.glyphForName(name);
if (index >= 0) return index;
}
final String builtin = point.code < source.builtinEncoding.length ? source.builtinEncoding[point.code] : "";
return builtin.isEmpty ? 0 : source.glyphForName(builtin);
}
if (source is UPdfCff) {
if (name.isNotEmpty) {
final int gid = source.glyphForName(name);
if (gid > 0) return gid;
}
return source.glyphForStandardCode(point.code);
}
if (source is UPdfTrueType) {
if (symbolic || name.isEmpty) {
final int direct = source.glyphForUnicode(0xF000 + point.code);
if (direct > 0) return direct;
final int plain = source.glyphForUnicode(point.code);
if (plain > 0) return plain;
final int mac = source.glyphForMacRoman(point.code);
if (mac > 0) return mac;
}
if (name.isNotEmpty) {
final int unicode = UPdfStandardNames.unicodeForGlyphName(name);
if (unicode >= 0) {
final int gid = source.glyphForUnicode(unicode);
if (gid > 0) return gid;
}
final int byName = source.glyphForName(name);
if (byName > 0) return byName;
final RegExpMatch? indexed = RegExp(r"^(?:g|glyph|index|cid)(\d+)$").firstMatch(name);
if (indexed != null) return int.tryParse(indexed.group(1) ?? "") ?? 0;
}
final int fallback = source.glyphForUnicode(point.code);
if (fallback > 0) return fallback;
return point.code < source.glyphCount ? point.code : 0;
}
return 0;
}