/**
         * Decodes a single CID (represented by one or two bytes) to a unicode String.
         * @param bytes     the bytes making up the character code to convert
         * @param offset    an offset
         * @param len       a length
         * @return  a String containing the encoded form of the input bytes using the font's encoding.
         */
        private String DecodeSingleCID(byte[] bytes, int offset, int len)
        {
            if (toUnicodeCmap != null)
            {
                if (offset + len > bytes.Length)
                {
                    throw new  IndexOutOfRangeException(MessageLocalization.GetComposedMessage("invalid.index.1", offset + len));
                }
                string s = toUnicodeCmap.Lookup(bytes, offset, len);
                if (s != null)
                {
                    return(s);
                }
                if (len != 1 || cidbyte2uni == null)
                {
                    return(null);
                }
            }

            if (len == 1)
            {
                if (cidbyte2uni == null)
                {
                    return("");
                }
                else
                {
                    return(new String(cidbyte2uni, 0xff & bytes[offset], 1));
                }
            }

            throw new ArgumentException("Multi-byte glyphs not implemented yet");
        }