Exemplo n.º 1
0
        bool Validate_indexSubTable_format2(Validator v, indexSubTable2 ist2, indexSubTableArray ista, string sID, OTFontVal fontOwner)
        {
            bool bOk = true;

            Table_EBDT EBDTTable = (Table_EBDT)fontOwner.GetTable("EBDT");

            // header has already been validated


            // validate the image size

            uint nGlyphsInRange = (uint)ista.lastGlyphIndex - ista.firstGlyphIndex + 1;

            if (nGlyphsInRange * ist2.imageSize > EBDTTable.GetLength())
            {
                string sDetails = "images extend past end of EBDT table: " + sID + ", imageSize = " + ist2.imageSize
                                  + ", EBDT length = " + EBDTTable.GetLength();
                v.Error(T.EBLC_indexSubTables, E.EBLC_E_indexSubTables, m_tag, sDetails);
                bOk = false;
            }

            // validate the bigGlyphMetrics
            val_EBDT.bigGlyphMetrics_val bgm = val_EBDT.bigGlyphMetrics_val.CreateFromBigGlyphMetrics(ist2.bigMetrics);
            bgm.Validate(v, sID, this);

            return(bOk);
        }
Exemplo n.º 2
0
            public indexSubTable GetIndexSubTable(indexSubTableArray ista)
            {
                indexSubTable ist = null;

                uint offset = indexSubTableArrayOffset + ista.additionalOffsetToIndexSubtable;

                if (offset + (uint)indexSubHeader.FieldOffsets.indexFormat + 2 <= m_bufTable.GetLength())
                {

                    ushort indexFormat = m_bufTable.GetUshort(offset + (uint)indexSubHeader.FieldOffsets.indexFormat);

                    switch(indexFormat)
                    {
                        case 1:
                        {
                            indexSubTable1 ist1 = new indexSubTable1(offset, m_bufTable, ista);
                            ist = ist1;
                            break;
                        }
                        case 2:
                        {
                            indexSubTable2 ist2 = new indexSubTable2(offset, m_bufTable, ista);
                            ist = ist2;
                            ist2.bigMetrics = new Table_EBDT.bigGlyphMetrics();
                            ist2.imageSize             = m_bufTable.GetUint(offset + indexSubTable.headerLength);
                            ist2.bigMetrics.height       = m_bufTable.GetByte (offset + indexSubTable.headerLength + 4);
                            ist2.bigMetrics.width        = m_bufTable.GetByte (offset + indexSubTable.headerLength + 5);
                            ist2.bigMetrics.horiBearingX = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 6);
                            ist2.bigMetrics.horiBearingY = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 7);
                            ist2.bigMetrics.horiAdvance  = m_bufTable.GetByte (offset + indexSubTable.headerLength + 8);
                            ist2.bigMetrics.vertBearingX = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 9);
                            ist2.bigMetrics.vertBearingY = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 10);
                            ist2.bigMetrics.vertAdvance  = m_bufTable.GetByte (offset + indexSubTable.headerLength + 11);
                            break;
                        }
                        case 3:
                        {
                            indexSubTable3 ist3 = new indexSubTable3(offset, m_bufTable, ista);
                            ist = ist3;
                            break;
                        }
                        case 4:
                        {
                            indexSubTable4 ist4 = new indexSubTable4(offset, m_bufTable, ista);
                            ist = ist4;
                            ist4.numGlyphs = m_bufTable.GetUint(offset + indexSubTable.headerLength);
                            break;
                        }
                        case 5:
                        {
                            indexSubTable5 ist5 = new indexSubTable5(offset, m_bufTable, ista);
                            ist = ist5;
                            ist5.bigMetrics = new Table_EBDT.bigGlyphMetrics();
                            ist5.imageSize               = m_bufTable.GetUint(offset + indexSubTable.headerLength);
                            ist5.bigMetrics.height       = m_bufTable.GetByte (offset + indexSubTable.headerLength + 4);
                            ist5.bigMetrics.width        = m_bufTable.GetByte (offset + indexSubTable.headerLength + 5);
                            ist5.bigMetrics.horiBearingX = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 6);
                            ist5.bigMetrics.horiBearingY = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 7);
                            ist5.bigMetrics.horiAdvance  = m_bufTable.GetByte (offset + indexSubTable.headerLength + 8);
                            ist5.bigMetrics.vertBearingX = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 9);
                            ist5.bigMetrics.vertBearingY = m_bufTable.GetSbyte(offset + indexSubTable.headerLength + 10);
                            ist5.bigMetrics.vertAdvance  = m_bufTable.GetByte (offset + indexSubTable.headerLength + 11);
                            ist5.numGlyphs               = m_bufTable.GetUint(offset + indexSubTable.headerLength + 12);
                            break;
                        }
                    }
                }

                return ist;
            }
Exemplo n.º 3
0
        bool Validate_indexSubTable_format2(Validator v, indexSubTable2 ist2, indexSubTableArray ista, string sID, OTFontVal fontOwner)
        {
            bool bOk = true;

            Table_EBDT EBDTTable = (Table_EBDT)fontOwner.GetTable("EBDT");

            // header has already been validated


            // validate the image size

            uint nGlyphsInRange = (uint)ista.lastGlyphIndex - ista.firstGlyphIndex + 1;
            if (nGlyphsInRange*ist2.imageSize > EBDTTable.GetLength())
            {
                string sDetails = "images extend past end of EBDT table: " + sID + ", imageSize = " + ist2.imageSize 
                    + ", EBDT length = " + EBDTTable.GetLength();
                v.Error(T.EBLC_indexSubTables, E.EBLC_E_indexSubTables, m_tag, sDetails);
                bOk = false;
            }

            // validate the bigGlyphMetrics
            val_EBDT.bigGlyphMetrics_val bgm = val_EBDT.bigGlyphMetrics_val.CreateFromBigGlyphMetrics(ist2.bigMetrics);
            bgm.Validate(v, sID, this);

            return bOk;
        }