Example #1
0
        /// <summary>
        /// Reads a <see cref="FontDescription" /> from the specified stream.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns>
        /// a <see cref="FontDescription" />.
        /// </returns>
        internal static FontDescription LoadDescription(FontReader reader)
        {
            DebugGuard.NotNull(reader, nameof(reader));

            // NOTE: These fields are read in their optimized order
            // https://docs.microsoft.com/en-gb/typography/opentype/spec/recom#optimized-table-ordering
            HeadTable?head      = reader.TryGetTable <HeadTable>();
            OS2Table? os2       = reader.TryGetTable <OS2Table>();
            NameTable nameTable = reader.GetTable <NameTable>();

            return(new FontDescription(nameTable, os2, head));
        }
Example #2
0
        internal static FontInstance LoadFont(FontReader reader)
        {
            // https://www.microsoft.com/typography/otspec/recom.htm#TableOrdering
            // recomended order
            HeadTable           head = reader.GetTable <HeadTable>();                              // head - not saving but loading in suggested order
            HorizontalHeadTable hhea = reader.GetTable <HorizontalHeadTable>();                    // hhea

            reader.GetTable <MaximumProfileTable>();                                               // maxp
            OS2Table os2 = reader.GetTable <OS2Table>();                                           // OS/2
            HorizontalMetricsTable horizontalMetrics = reader.GetTable <HorizontalMetricsTable>(); // hmtx

            // LTSH - Linear threshold data
            // VDMX - Vertical device metrics
            // hdmx - Horizontal device metrics
            CMapTable cmap = reader.GetTable <CMapTable>(); // cmap

            // fpgm - Font Program
            // prep - Control Value Program
            // cvt  - Control Value Table
            reader.GetTable <IndexLocationTable>();                    // loca
            GlyphTable   glyphs    = reader.GetTable <GlyphTable>();   // glyf
            KerningTable kern      = reader.GetTable <KerningTable>(); // kern - Kerning
            NameTable    nameTable = reader.GetTable <NameTable>();    // name

            ColrTable?colrTable = reader.TryGetTable <ColrTable>();    // colr
            CpalTable?cpalTable;

            if (colrTable != null)
            {
                cpalTable = reader.GetTable <CpalTable>(); // CPAL - required if COLR is provided
            }
            else
            {
                cpalTable = reader.TryGetTable <CpalTable>(); // colr
            }

            // post - PostScript information
            // gasp - Grid-fitting/Scan-conversion (optional table)
            // PCLT - PCL 5 data
            // DSIG - Digital signature
            return(new FontInstance(
                       nameTable,
                       cmap,
                       glyphs,
                       os2,
                       hhea,
                       horizontalMetrics,
                       head,
                       kern,
                       colrTable,
                       cpalTable));
        }