private FontMetrics parseFontMetric()

in fontbox/src/main/java/org/apache/fontbox/afm/AFMParser.java [334:460]


    private FontMetrics parseFontMetric(boolean reducedDataset) throws IOException
    {
        readCommand(START_FONT_METRICS);
        FontMetrics fontMetrics = new FontMetrics();
        fontMetrics.setAFMVersion( readFloat() );
        String nextCommand;
        boolean charMetricsRead = false;
        while (!END_FONT_METRICS.equals(nextCommand = readString()))
        {
            switch (nextCommand)
            {
            case FONT_NAME:
                fontMetrics.setFontName( readLine() );
                break;
            case FULL_NAME:
                fontMetrics.setFullName( readLine() );
                break;
            case FAMILY_NAME:
                fontMetrics.setFamilyName( readLine() );
                break;
            case WEIGHT:
                fontMetrics.setWeight( readLine() );
                break;
            case FONT_BBOX:
                BoundingBox bBox = new BoundingBox();
                bBox.setLowerLeftX( readFloat() );
                bBox.setLowerLeftY( readFloat() );
                bBox.setUpperRightX( readFloat() );
                bBox.setUpperRightY( readFloat() );
                fontMetrics.setFontBBox( bBox );
                break;
            case VERSION:
                fontMetrics.setFontVersion( readLine() );
                break;
            case NOTICE:
                fontMetrics.setNotice( readLine() );
                break;
            case ENCODING_SCHEME:
                fontMetrics.setEncodingScheme( readLine() );
                break;
            case MAPPING_SCHEME:
                fontMetrics.setMappingScheme( readInt() );
                break;
            case ESC_CHAR:
                fontMetrics.setEscChar( readInt() );
                break;
            case CHARACTER_SET:
                fontMetrics.setCharacterSet( readLine() );
                break;
            case CHARACTERS:
                fontMetrics.setCharacters( readInt() );
                break;
            case IS_BASE_FONT:
                fontMetrics.setIsBaseFont( readBoolean() );
                break;
            case V_VECTOR:
                float[] vector = new float[2];
                vector[0] = readFloat();
                vector[1] = readFloat();
                fontMetrics.setVVector( vector );
                break;
            case IS_FIXED_V:
                fontMetrics.setIsFixedV( readBoolean() );
                break;
            case CAP_HEIGHT:
                fontMetrics.setCapHeight( readFloat() );
                break;
            case X_HEIGHT:
                fontMetrics.setXHeight( readFloat() );
                break;
            case ASCENDER:
                fontMetrics.setAscender( readFloat() );
                break;
            case DESCENDER:
                fontMetrics.setDescender( readFloat() );
                break;
            case STD_HW:
                fontMetrics.setStandardHorizontalWidth( readFloat() );
                break;
            case STD_VW:
                fontMetrics.setStandardVerticalWidth( readFloat() );
                break;
            case COMMENT:
                fontMetrics.addComment( readLine() );
                break;
            case UNDERLINE_POSITION:
                fontMetrics.setUnderlinePosition( readFloat() );
                break;
            case UNDERLINE_THICKNESS:
                fontMetrics.setUnderlineThickness( readFloat() );
                break;
            case ITALIC_ANGLE:
                fontMetrics.setItalicAngle( readFloat() );
                break;
            case CHAR_WIDTH:
                float[] widths = new float[2];
                widths[0] = readFloat();
                widths[1] = readFloat();
                fontMetrics.setCharWidth( widths );
                break;
            case IS_FIXED_PITCH:
                fontMetrics.setFixedPitch( readBoolean() );
                break;
            case START_CHAR_METRICS:
                charMetricsRead = parseCharMetrics(fontMetrics);
                break;
            case START_KERN_DATA:
                if( !reducedDataset)
                {
                    parseKernData(fontMetrics);
                }
                break;
            case START_COMPOSITES:
                if( !reducedDataset)
                {
                    parseComposites(fontMetrics);
                }
                break;
            default:
                if (!reducedDataset || !charMetricsRead)
                {
                    throw new IOException("Unknown AFM key '" + nextCommand + "'");
                }
            }
        }
        return fontMetrics;
    }