PdfSharp.Fonts.TrueType.TrueTypeDescriptor.CharCodeToGlyphIndex C# (CSharp) Method

CharCodeToGlyphIndex() public method

Maps a unicode to the index of the corresponding glyph. See OpenType spec "cmap - Character To Glyph Index Mapping Table / Format 4: Segment mapping to delta values" for details about this a little bit strange looking algorythm.
public CharCodeToGlyphIndex ( char value ) : int
value char
return int
    public int CharCodeToGlyphIndex(char value)
    {
      try
      {
        CMap4 cmap = this.fontData.cmap.cmap4;
        int segCount = cmap.segCountX2 / 2;
        int seg;
        for (seg = 0; seg < segCount; seg++)
        {
          if (value <= cmap.endCount[seg])
            break;
        }
        Debug.Assert(seg < segCount);

        if (value < cmap.startCount[seg])
          return 0;

        if (cmap.idRangeOffs[seg] == 0)
          return (value + cmap.idDelta[seg]) & 0xFFFF;

        int idx = cmap.idRangeOffs[seg] / 2 + (value - cmap.startCount[seg]) - (segCount - seg);
        Debug.Assert(idx >= 0 && idx < cmap.glyphCount);

        if (cmap.glyphIdArray[idx] == 0)
          return 0;
        else
          return (cmap.glyphIdArray[idx] + cmap.idDelta[seg]) & 0xFFFF;
      }
      catch (Exception ex)
      {
        throw ex;
      }
    }