You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2009/03/11 23:40:34 UTC

svn commit: r752669 [4/4] - in /incubator/pdfbox/fontbox/trunk/src/main/java/org: ./ apache/ apache/fontbox/ apache/fontbox/afm/ apache/fontbox/cmap/ apache/fontbox/encoding/ apache/fontbox/pfb/ apache/fontbox/ttf/ apache/fontbox/util/

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFParser.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFParser.java?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFParser.java (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFParser.java Wed Mar 11 22:40:33 2009
@@ -0,0 +1,217 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fontbox.ttf;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A true type font file parser.
+ * 
+ * @author Ben Litchfield (ben@benlitchfield.com)
+ * @version $Revision: 1.2 $
+ */
+public class TTFParser
+{   
+    /**
+     * A simple command line program to test parsing of a TTF file. <br/>
+     * usage: java org.pdfbox.ttf.TTFParser &lt;ttf-file&gt;
+     * 
+     * @param args The command line arguments.
+     * 
+     * @throws IOException If there is an error while parsing the font file.
+     */
+    public static void main( String[] args ) throws IOException
+    {
+        if( args.length != 1 )
+        {
+            System.err.println( "usage: java org.pdfbox.ttf.TTFParser <ttf-file>" );
+            System.exit( -1 );
+        }
+        TTFParser parser = new TTFParser();
+        TrueTypeFont font = parser.parseTTF( args[0] );
+        System.out.println( "Font:" + font );
+    }
+    
+    /**
+     * Parse a file and get a true type font.
+     * @param ttfFile The TTF file.
+     * @return A true type font.
+     * @throws IOException If there is an error parsing the true type font.
+     */
+    public TrueTypeFont parseTTF( String ttfFile ) throws IOException
+    {
+        RAFDataStream raf = new RAFDataStream( ttfFile, "r" );
+        return parseTTF( raf );
+    }
+    
+    /**
+     * Parse a file and get a true type font.
+     * @param ttfFile The TTF file.
+     * @return A true type font.
+     * @throws IOException If there is an error parsing the true type font.
+     */
+    public TrueTypeFont parseTTF( File ttfFile ) throws IOException
+    {
+        RAFDataStream raf = new RAFDataStream( ttfFile, "r" );
+        return parseTTF( raf );
+    }
+    
+    /**
+     * Parse a file and get a true type font.
+     * @param ttfData The TTF data to parse.
+     * @return A true type font.
+     * @throws IOException If there is an error parsing the true type font.
+     */
+    public TrueTypeFont parseTTF( InputStream ttfData ) throws IOException
+    {
+        return parseTTF( new MemoryTTFDataStream( ttfData ));
+    }
+    
+    /**
+     * Parse a file and get a true type font.
+     * @param raf The TTF file.
+     * @return A true type font.
+     * @throws IOException If there is an error parsing the true type font.
+     */
+    public TrueTypeFont parseTTF( TTFDataStream raf ) throws IOException
+    {
+        TrueTypeFont font = new TrueTypeFont( raf );
+        font.setVersion( raf.read32Fixed() );
+        int numberOfTables = raf.readUnsignedShort();
+        int searchRange = raf.readUnsignedShort();
+        int entrySelector = raf.readUnsignedShort();
+        int rangeShift = raf.readUnsignedShort();
+        for( int i=0; i<numberOfTables; i++ )
+        {
+            TTFTable table = readTableDirectory( raf );   
+            font.addTable( table );
+        }
+        List initialized = new ArrayList();
+        //need to initialize a couple tables in a certain order
+        HeaderTable head = font.getHeader();
+        raf.seek( head.getOffset() );
+        head.initData( font, raf );
+        initialized.add( head );
+        
+        
+        HorizontalHeaderTable hh = font.getHorizontalHeader();
+        raf.seek( hh.getOffset() );
+        hh.initData( font, raf );
+        initialized.add( hh );
+        
+        MaximumProfileTable maxp = font.getMaximumProfile();
+        raf.seek( maxp.getOffset() );
+        maxp.initData( font, raf );
+        initialized.add( maxp );
+        
+        PostScriptTable post = font.getPostScript();
+        raf.seek( post.getOffset() );
+        post.initData( font, raf );
+        initialized.add( post );
+        
+        IndexToLocationTable loc = font.getIndexToLocation();
+        raf.seek( loc.getOffset() );
+        loc.initData( font, raf );
+        initialized.add( loc );
+        
+        Iterator iter = font.getTables().iterator();
+        while( iter.hasNext() )
+        {
+            TTFTable table = (TTFTable)iter.next();
+            if( !initialized.contains( table ) )
+            {
+                raf.seek( table.getOffset() );
+                table.initData( font, raf );
+            }
+        }
+        return font;
+    }
+    
+    private TTFTable readTableDirectory( TTFDataStream raf ) throws IOException
+    {
+        TTFTable retval = null;
+        String tag = raf.readString( 4 );
+        if( tag.equals( CMAPTable.TAG ) )
+        {
+            retval = new CMAPTable();
+        }
+        else if( tag.equals( GlyphTable.TAG ) )
+        {
+            retval = new GlyphTable();
+        }
+        else if( tag.equals( HeaderTable.TAG ) )
+        {
+            retval = new HeaderTable();
+        }
+        else if( tag.equals( HorizontalHeaderTable.TAG ) )
+        {
+            retval = new HorizontalHeaderTable();
+        }
+        else if( tag.equals( HorizontalMetricsTable.TAG ) )
+        {
+            retval = new HorizontalMetricsTable();
+        }
+        else if( tag.equals( IndexToLocationTable.TAG ) )
+        {
+            retval = new IndexToLocationTable();
+        }
+        else if( tag.equals( MaximumProfileTable.TAG ) )
+        {
+            retval = new MaximumProfileTable();
+        }
+        else if( tag.equals( NamingTable.TAG ) )
+        {
+            retval = new NamingTable();
+        }
+        else if( tag.equals( OS2WindowsMetricsTable.TAG ) )
+        {
+            retval = new OS2WindowsMetricsTable();
+        }
+        else if( tag.equals( PostScriptTable.TAG ) )
+        {
+            retval = new PostScriptTable();
+        }
+        else if( tag.equals( GlyphTable.TAG ) )
+        {
+            retval = new GlyphTable();
+        }
+        else if( tag.equals( GlyphTable.TAG ) )
+        {
+            retval = new GlyphTable();
+        }
+        else if( tag.equals( DigitalSignatureTable.TAG ) )
+        {
+            retval = new DigitalSignatureTable();
+        }
+        else
+        {
+            //unknown table type but read it anyway.
+            retval = new TTFTable();
+        }
+        retval.setTag( tag );
+        retval.setCheckSum( raf.readUnsignedInt() );
+        retval.setOffset( raf.readUnsignedInt() );
+        retval.setLength( raf.readUnsignedInt() );
+        return retval;
+    }
+}
\ No newline at end of file

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFTable.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFTable.java?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFTable.java (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFTable.java Wed Mar 11 22:40:33 2009
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fontbox.ttf;
+
+import java.io.IOException;
+
+/**
+ * A table in a true type font.
+ * 
+ * @author Ben Litchfield (ben@benlitchfield.com)
+ * @version $Revision: 1.1 $
+ */
+public class TTFTable 
+{
+    private String tag;
+    private long checkSum;
+    private long offset;
+    private long length;
+      
+    /**
+     * @return Returns the checkSum.
+     */
+    public long getCheckSum() 
+    {
+        return checkSum;
+    }
+    /**
+     * @param checkSumValue The checkSum to set.
+     */
+    public void setCheckSum(long checkSumValue) 
+    {
+        this.checkSum = checkSumValue;
+    }
+    /**
+     * @return Returns the length.
+     */
+    public long getLength() 
+    {
+        return length;
+    }
+    /**
+     * @param lengthValue The length to set.
+     */
+    public void setLength(long lengthValue) 
+    {
+        this.length = lengthValue;
+    }
+    /**
+     * @return Returns the offset.
+     */
+    public long getOffset() 
+    {
+        return offset;
+    }
+    /**
+     * @param offsetValue The offset to set.
+     */
+    public void setOffset(long offsetValue) 
+    {
+        this.offset = offsetValue;
+    }
+    /**
+     * @return Returns the tag.
+     */
+    public String getTag() 
+    {
+        return tag;
+    }
+    /**
+     * @param tagValue The tag to set.
+     */
+    public void setTag(String tagValue) 
+    {
+        this.tag = tagValue;
+    }
+    
+    /**
+     * This will read the required data from the stream.
+     * 
+     * @param ttf The font that is being read.
+     * @param data The stream to read the data from.
+     * @throws IOException If there is an error reading the data.
+     */
+    public void initData( TrueTypeFont ttf, TTFDataStream data ) throws IOException
+    {
+    }
+}

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TTFTable.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java Wed Mar 11 22:40:33 2009
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fontbox.ttf;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * A class to hold true type font information.
+ * 
+ * @author Ben Litchfield (ben@benlitchfield.com)
+ * @version $Revision: 1.2 $
+ */
+public class TrueTypeFont 
+{
+    private float version; 
+    
+    private Map tables = new HashMap();
+    
+    private TTFDataStream data;
+    
+    /**
+     * Constructor.  Clients should use the TTFParser to create a new TrueTypeFont object.
+     * 
+     * @param fontData The font data.
+     */
+    TrueTypeFont( TTFDataStream fontData )
+    {
+        data = fontData;
+    }
+    
+    /**
+     * Close the underlying resources.
+     * 
+     * @throws IOException If there is an error closing the resources.
+     */
+    public void close() throws IOException
+    {
+        data.close();
+    }
+
+    /**
+     * @return Returns the version.
+     */
+    public float getVersion() 
+    {
+        return version;
+    }
+    /**
+     * @param versionValue The version to set.
+     */
+    public void setVersion(float versionValue) 
+    {
+        version = versionValue;
+    }
+    
+    /**
+     * Add a table definition.
+     * 
+     * @param table The table to add.
+     */
+    public void addTable( TTFTable table )
+    {
+        tables.put( table.getTag(), table );
+    }
+    
+    /**
+     * Get all of the tables.
+     * 
+     * @return All of the tables.
+     */
+    public Collection getTables()
+    {
+        return tables.values();
+    }
+    
+    /**
+     * This will get the naming table for the true type font.
+     * 
+     * @return The naming table.
+     */
+    public NamingTable getNaming()
+    {
+        return (NamingTable)tables.get( NamingTable.TAG );
+    }
+    
+    /**
+     * Get the postscript table for this TTF.
+     * 
+     * @return The postscript table.
+     */
+    public PostScriptTable getPostScript()
+    {
+        return (PostScriptTable)tables.get( PostScriptTable.TAG );
+    }
+    
+    /**
+     * Get the OS/2 table for this TTF.
+     * 
+     * @return The OS/2 table.
+     */
+    public OS2WindowsMetricsTable getOS2Windows()
+    {
+        return (OS2WindowsMetricsTable)tables.get( OS2WindowsMetricsTable.TAG );
+    }
+    
+    /**
+     * Get the maxp table for this TTF.
+     * 
+     * @return The maxp table.
+     */
+    public MaximumProfileTable getMaximumProfile()
+    {
+        return (MaximumProfileTable)tables.get( MaximumProfileTable.TAG );
+    }
+    
+    /**
+     * Get the head table for this TTF.
+     * 
+     * @return The head table.
+     */
+    public HeaderTable getHeader()
+    {
+        return (HeaderTable)tables.get( HeaderTable.TAG );
+    }
+    
+    /**
+     * Get the hhea table for this TTF.
+     * 
+     * @return The hhea table.
+     */
+    public HorizontalHeaderTable getHorizontalHeader()
+    {
+        return (HorizontalHeaderTable)tables.get( HorizontalHeaderTable.TAG );
+    }
+    
+    /**
+     * Get the hmtx table for this TTF.
+     * 
+     * @return The hmtx table.
+     */
+    public HorizontalMetricsTable getHorizontalMetrics()
+    {
+        return (HorizontalMetricsTable)tables.get( HorizontalMetricsTable.TAG );
+    }
+    
+    /**
+     * Get the loca table for this TTF.
+     * 
+     * @return The loca table.
+     */
+    public IndexToLocationTable getIndexToLocation()
+    {
+        return (IndexToLocationTable)tables.get( IndexToLocationTable.TAG );
+    }
+    
+    /**
+     * Get the glyf table for this TTF.
+     * 
+     * @return The glyf table.
+     */
+    public GlyphTable getGlyph()
+    {
+        return (GlyphTable)tables.get( GlyphTable.TAG );
+    }
+    
+    /**
+     * Get the cmap table for this TTF.
+     * 
+     * @return The cmap table.
+     */
+    public CMAPTable getCMAP()
+    {
+        return (CMAPTable)tables.get( CMAPTable.TAG );
+    }
+    
+    /**
+     * This permit to get the data of the True Type Font
+     * program representing the stream used to build this 
+     * object (normally from the TTFParser object).
+     * 
+     * @return COSStream True type font program stream
+     * 
+     * @throws IOException If there is an error getting the font data.
+     */
+    public InputStream getOriginalData() throws IOException 
+    {
+       return data.getOriginalData(); 
+    }
+}

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/package.html
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/package.html?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/package.html (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/package.html Wed Mar 11 22:40:33 2009
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+</head>
+<body>
+This package contains classes to parse a TTF file.
+</body>
+</html>

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/ttf/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/BoundingBox.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/BoundingBox.java?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/BoundingBox.java (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/BoundingBox.java Wed Mar 11 22:40:33 2009
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fontbox.util;
+
+import java.awt.Point;
+
+/**
+ * This is an implementation of a bounding box.  This was originally written for the
+ * AMF parser.
+ *
+ * @author Ben Litchfield (ben@benlitchfield.com)
+ * @version $Revision: 1.1 $
+ */
+public class BoundingBox
+{
+    private float lowerLeftX;
+    private float lowerLeftY;
+    private float upperRightX;
+    private float upperRightY;
+
+    /**
+     * Getter for property lowerLeftX.
+     *
+     * @return Value of property lowerLeftX.
+     */
+    public float getLowerLeftX()
+    {
+        return lowerLeftX;
+    }
+
+    /**
+     * Setter for property lowerLeftX.
+     *
+     * @param lowerLeftXValue New value of property lowerLeftX.
+     */
+    public void setLowerLeftX(float lowerLeftXValue)
+    {
+        this.lowerLeftX = lowerLeftXValue;
+    }
+
+    /**
+     * Getter for property lowerLeftY.
+     *
+     * @return Value of property lowerLeftY.
+     */
+    public float getLowerLeftY()
+    {
+        return lowerLeftY;
+    }
+
+    /**
+     * Setter for property lowerLeftY.
+     *
+     * @param lowerLeftYValue New value of property lowerLeftY.
+     */
+    public void setLowerLeftY(float lowerLeftYValue)
+    {
+        this.lowerLeftY = lowerLeftYValue;
+    }
+
+    /**
+     * Getter for property upperRightX.
+     *
+     * @return Value of property upperRightX.
+     */
+    public float getUpperRightX()
+    {
+        return upperRightX;
+    }
+
+    /**
+     * Setter for property upperRightX.
+     *
+     * @param upperRightXValue New value of property upperRightX.
+     */
+    public void setUpperRightX(float upperRightXValue)
+    {
+        this.upperRightX = upperRightXValue;
+    }
+
+    /**
+     * Getter for property upperRightY.
+     *
+     * @return Value of property upperRightY.
+     */
+    public float getUpperRightY()
+    {
+        return upperRightY;
+    }
+
+    /**
+     * Setter for property upperRightY.
+     *
+     * @param upperRightYValue New value of property upperRightY.
+     */
+    public void setUpperRightY(float upperRightYValue)
+    {
+        this.upperRightY = upperRightYValue;
+    }
+    
+    /**
+     * This will get the width of this rectangle as calculated by
+     * upperRightX - lowerLeftX.
+     *
+     * @return The width of this rectangle.
+     */
+    public float getWidth()
+    {
+        return getUpperRightX() - getLowerLeftX();
+    }
+
+    /**
+     * This will get the height of this rectangle as calculated by
+     * upperRightY - lowerLeftY.
+     *
+     * @return The height of this rectangle.
+     */
+    public float getHeight()
+    {
+        return getUpperRightY() - getLowerLeftY();
+    }
+    
+    /**
+     * Checks if a point is inside this rectangle.
+     * 
+     * @param x The x coordinate.
+     * @param y The y coordinate.
+     * 
+     * @return true If the point is on the edge or inside the rectangle bounds. 
+     */
+    public boolean contains( float x, float y )
+    {
+        return x >= lowerLeftX && x <= upperRightX &&
+               y >= lowerLeftY && y <= upperRightY;
+    }
+    
+    /**
+     * Checks if a point is inside this rectangle.
+     * 
+     * @param point The point to check
+     * 
+     * @return true If the point is on the edge or inside the rectangle bounds. 
+     */
+    public boolean contains( Point point )
+    {
+        return contains( (float)point.getX(), (float)point.getY() );
+    }
+    
+    /**
+     * This will return a string representation of this rectangle.
+     *
+     * @return This object as a string.
+     */
+    public String toString()
+    {
+        return "[" + getLowerLeftX() + "," + getLowerLeftY() + "," +
+                     getUpperRightX() + "," + getUpperRightY() +"]";
+    }
+
+}
\ No newline at end of file

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/BoundingBox.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/ResourceLoader.java
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/ResourceLoader.java?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/ResourceLoader.java (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/ResourceLoader.java Wed Mar 11 22:40:33 2009
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.fontbox.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+
+import java.util.Properties;
+
+/**
+ * This class will handle loading resource files(AFM/CMAP).  This was originally
+ * written for PDFBox but FontBox uses it as well.  For now each project will
+ * have their own version.
+ *
+ * @author <a href="mailto:ben@benlitchfield.com">Ben Litchfield</a>
+ * @version $Revision: 1.1 $
+ */
+public class ResourceLoader
+{
+    
+    /**
+     * private constructor for utility class.
+     */
+    private ResourceLoader()
+    {
+        //private utility class
+    }
+
+    /**
+     * This will attempt to load the resource given the resource name.
+     *
+     * @param resourceName The resource to try and load.
+     *
+     * @return The resource as a stream or null if it could not be found.
+     * 
+     * @throws IOException If there is an error while attempting to load the resource.
+     */
+    public static InputStream loadResource( String resourceName ) throws IOException
+    {
+        ClassLoader loader = ResourceLoader.class.getClassLoader();
+
+        InputStream is = null;
+        
+        if( loader != null )
+        {
+            is = loader.getResourceAsStream( resourceName );
+        }
+        
+        //see sourceforge bug 863053, this is a fix for a user that
+        //needed to have PDFBox loaded by the bootstrap classloader
+        if( is == null )
+        {
+            loader = ClassLoader.getSystemClassLoader();
+            if( loader != null )
+            {
+                is = loader.getResourceAsStream( resourceName );
+            }
+        }
+        
+        if( is == null )
+        {
+            File f = new File( resourceName );
+            if( f.exists() )
+            {
+                is = new FileInputStream( f );
+            }
+        }
+
+        return is;
+    }
+    
+    /**
+     * This will attempt to load the resource given the resource name.
+     *
+     * @param resourceName The resource to try and load.
+     *
+     * @return The resource as a stream or null if it could not be found.
+     * 
+     * @throws IOException If there is an error loading the properties.
+     */
+    public static Properties loadProperties( String resourceName ) throws IOException
+    {
+        Properties properties = null;
+        InputStream is = null;
+        try
+        {
+            is = loadResource( resourceName );
+            if( is != null )
+            {
+                properties = new Properties();
+                properties.load( is );
+            }
+        }
+        finally
+        {
+            if( is != null )
+            {
+                is.close();
+            }
+        }
+        return properties;
+    }
+    
+    /**
+     * This will attempt to load the resource given the resource name.
+     *
+     * @param resourceName The resource to try and load.
+     * @param defaults A stream of default properties.
+     *
+     * @return The resource as a stream or null if it could not be found.
+     * 
+     * @throws IOException If there is an error loading the properties.
+     */
+    public static Properties loadProperties( String resourceName, Properties defaults ) throws IOException
+    {
+        InputStream is = null;
+        try
+        {
+            is = loadResource( resourceName );
+            if( is != null )
+            {
+                defaults.load( is );
+            }
+        }
+        finally
+        {
+            if( is != null )
+            {
+                is.close();
+            }
+        }
+        return defaults;
+    }
+}
\ No newline at end of file

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/ResourceLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/package.html
URL: http://svn.apache.org/viewvc/incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/package.html?rev=752669&view=auto
==============================================================================
--- incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/package.html (added)
+++ incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/package.html Wed Mar 11 22:40:33 2009
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+</head>
+<body>
+This package contains utility classes used by various font types.
+</body>
+</html>

Propchange: incubator/pdfbox/fontbox/trunk/src/main/java/org/apache/fontbox/util/package.html
------------------------------------------------------------------------------
    svn:eol-style = native