public static List<File> unpack( File file, FileGarbage garbage ) throws IOException {
        if( !file.exists() || file.isHidden() || !file.isFile() ) {
            return new ArrayList<File>();
        }
        
        FontFormat format = FontFormat.forFile( file );
        if( format.awtSupported() ) {
            return Arrays.asList( file );
        }
        
        List<File> files = null;
        switch( format ) {
        case TTC:
            files = execTtc2Ttf( file, garbage );
            break;
        case WOFF:
            files = unpackWoff( file, garbage );
            break;
        default:
            files = execFondu( file, garbage );
            break;
        }

        Iterator<File> iter = files.iterator();
        while( iter.hasNext() ) {
            File f = iter.next();
            format = FontFormat.forFile( f );

            if( format == FontFormat.NONE ) {
                iter.remove();
            }
        }

        return files;
    }