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