glyphIdFor method

int glyphIdFor(
  1. UPdfCodePoint point
)

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;
}