예제 #1
0
        /// <summary>Get <c>ith</c> encoding table, or null if <c>i</c> out
        /// of range.</summary>
        public EncodingTableEntry GetEncodingTableEntry(uint i)
        {
            uint SIZEOF_ENCODINGTABLEENTRY = 8;

            EncodingTableEntry ete = null;
            if ( i < NumberOfEncodingTables && 
                 (uint)FieldOffsets.EncodingTableEntries + 
                 (i+1)*SIZEOF_ENCODINGTABLEENTRY <= m_bufTable.GetLength())
            {
                ete = new EncodingTableEntry();
                ete.platformID = 
                    m_bufTable.GetUshort((uint)
                                         FieldOffsets.EncodingTableEntries + 
                                         i*SIZEOF_ENCODINGTABLEENTRY);
                ete.encodingID = 
                    m_bufTable.GetUshort((uint)
                                         FieldOffsets.EncodingTableEntries + 
                                         i*SIZEOF_ENCODINGTABLEENTRY + 2);
                ete.offset = 
                    m_bufTable.GetUint((uint)
                                       FieldOffsets.EncodingTableEntries + 
                                       i*SIZEOF_ENCODINGTABLEENTRY + 4);
            }

            return ete;
        }
예제 #2
0
        /************************
         * public methods
         */
        
        public override Subtable GetSubtable(EncodingTableEntry ete)
        {
            Subtable st = null;

            // identify the format of the table
            ushort format = 0xffff;
            
            try
            {
                format = m_bufTable.GetUshort(ete.offset);
            }
            catch
            {
            }

            switch(format)
            {
                case 0:  st = new Format0_val (ete, m_bufTable); break;
                case 2:  st = new Format2_val (ete, m_bufTable); break;
                case 4:  st = new Format4_val (ete, m_bufTable); break;
                case 6:  st = new Format6_val (ete, m_bufTable); break;
                case 8:  st = new Format8_val (ete, m_bufTable); break;
                case 10: st = new Format10_val(ete, m_bufTable); break;
                case 12: st = new Format12_val(ete, m_bufTable); break;
                case 14: st = new Format14_val(ete, m_bufTable); break;
            }

            return st;
        }
예제 #3
0
 public Format4_val(EncodingTableEntry ete, MBOBuffer bufTable) 
     : base(ete, bufTable)
 {
 }
예제 #4
0
 /// <summary>Abstract base class stores <c>platformID</c>,
 /// <c>encodingID</c>, <c>offset</c> and MBO byte array for whole
 /// cmap table.
 /// </summary>
 public Subtable(EncodingTableEntry ete, MBOBuffer bufTable)
 {
     m_ete = ete;
     m_bufTable = bufTable;
 }