Пример #1
0
        public static GlyphPath Load(uint gid, FontModel fontModel, byte[] fontSource)
        {
            var cff = new CffCharString();

            if (fontModel.IsCidFont)
            {
                var fdIndex = fontModel.TopDict.FDSelect[gid];
                var fdDict  = fontModel.TopDict.FDArray[fdIndex];
                cff._lsubrs       = fdDict.Subrs;
                cff._lsubrsBias   = cff._lsubrs == null ? 0 : CompactFontFormatTable.GetSubrBias(cff._lsubrs.Length);
                cff._width        = fdDict.DefaultWidthX;
                cff._normalWidthX = fdDict.NormalWidthX;
            }
            else
            {
                cff._lsubrs       = fontModel.TopDict.Subrs;
                cff._lsubrsBias   = cff._lsubrs == null ? 0 : CompactFontFormatTable.GetSubrBias(cff._lsubrs.Length);
                cff._width        = fontModel.TopDict.DefaultWidthX;
                cff._normalWidthX = fontModel.TopDict.NormalWidthX;
            }

            cff._gsubrs = fontModel.GSubrs;

            if (cff._gsubrs != null)
            {
                cff._gsubrsBias = CompactFontFormatTable.GetSubrBias(cff._gsubrs.Length);
            }

            var seg = fontModel.GetCharString(gid);

            cff.Load(seg, fontSource);
            fontModel._glyphs[gid] = new GlyphInfo((ushort)cff._width, fontModel._glyphs[gid].LeftSideBearing);

            return(cff._path);
        }