/// <param name="cidBytes"/> /// <param name="offset"/> /// <param name="length"/> public virtual String DecodeSequence(byte[] cidBytes, int offset, int length) { StringBuilder sb = new StringBuilder(); CMapByteCid.Cursor cursor = new CMapByteCid.Cursor(offset, length); int cid; while ((cid = DecodeSingle(cidBytes, cursor)) >= 0) { sb.Append((char)cid); } return(sb.ToString()); }
protected internal virtual int DecodeSingle(byte[] cidBytes, CMapByteCid.Cursor cursor) { int end = cursor.offset + cursor.length; int currentPlane = 0; while (cursor.offset < end) { int one = cidBytes[cursor.offset++] & 0xff; cursor.length--; char[] plane = planes[currentPlane]; int cid = plane[one]; if ((cid & 0x8000) == 0) { return(cid); } else { currentPlane = cid & 0x7fff; } } return(-1); }