Formatting; adding file headers.

This commit is contained in:
Werner Lemberg 2002-10-07 10:12:43 +00:00
parent c4c373cee5
commit eacb9306c0
11 changed files with 291 additions and 207 deletions

View File

@ -7,21 +7,38 @@
2002-10-05 David Turner <david@freetype.org>
* src/pfr/pfrsbit.h, src/pfr/pfrsbit.c, src/pfr/pfrload.c,
src/pfr/pfrgload.c, src/pfr/pfrobjs.c, src/pfr/pfrtypes.h,
Jamfile, src/base/ftobjs.c: adding support for embedded bitmaps to
the PFR driver, and rewriting its kerning loader / handler to use all
kerning pairs in a physical font (and not just the first item).
Adding support for embedded bitmaps to the PFR driver, and rewriting
its kerning loader/handler to use all kerning pairs in a physical
font (and not just the first item).
* src/tools/docmaker/content.py, src/tools/docmaker/sources.py,
src/tools/docmaker/tohtml.py: fixing a few nasty bugs
* src/pfr/pfr.c: Include `pfrsbit.c'.
* src/pfr/pfrgload.c: Include `pfrsbit.h'.
* src/pfr/pfrload.c (pfr_extra_item_load_kerning_pairs): Rewritten.
(pfr_phy_font_done, pfr_phy_font_load): Updated.
* src/pfr/pfrobks.c: Include `pfrsbit.h'.
(pfr_face_init): Handle kerning and embedded bitmaps.
(pfr_slot_load): Load embedded bitmaps.
(PFR_KERN_INDEX): Removed.
(pfr_face_get_kerning): Rewritten.
* src/pfr/pfrsbit.c, src/pfr/pfrsbit.h: New files.
* src/pfr/pfrtypes.h (PFR_KernItemRec): New structure.
(PFR_KERN_INDEX): New macro.
(PFR_PhyFontRec): Add items for kerning and embedded bitmaps.
* src/pfr/Jamfile (_sources) [FT2_MULTI]: Add `pfrsbit'.
* src/sfnt/ttcmap0.c: the validator for format 4 sub-tables is
now capable of dealing with invalid "length" fields at the start
of the sub-table. This allows fonts like "mg______.ttf" (i.e.
Marriage) to return accurate charmaps.
* src/base/ftobjs.c (FT_Load_Glyph): Don't load bitmap fonts if
FT_LOAD_NO_RECURSE is set.
Load embedded bitmaps only if FT_LOAD_NO_BITMAP isn't set.
* docs/CHANGES: updating
* src/tools/docmaker/content.py, src/tools/docmaker/sources.py,
src/tools/docmaker/tohtml.py: Fixing a few nasty bugs.
* src/sfnt/ttcmap0.c (tt_cmap4_validate): The validator for format 4
sub-tables is now capable of dealing with invalid "length" fields at
the start of the sub-table. This allows fonts like "mg______.ttf"
(i.e. Marriage) to return accurate charmaps.
* docs/CHANGES: Updated.
2002-10-05 Werner Lemberg <wl@gnu.org>

View File

@ -72,9 +72,9 @@ LATEST CHANGES BETWEEN 2.1.3 and 2.1.2
has been updated to support LCD-optimized display on non-paletted
displays (under Win32 and X11)
- the PFR driver now supports embedded bitmaps (all formats supported)
- The PFR driver now supports embedded bitmaps (all formats supported).
- the TrueType charmap loader now supports certain "broken" fonts that
- The TrueType charmap loader now supports certain "broken" fonts that
load under Windows without problems.
- The cache API has been slightly modified (it's still a beta!):

View File

@ -467,7 +467,7 @@
/* XXX: This is really a temporary hack that should disappear */
/* promptly with FreeType 2.1! */
/* */
if ( FT_HAS_FIXED_SIZES( face ) &&
if ( FT_HAS_FIXED_SIZES( face ) &&
( load_flags & FT_LOAD_NO_BITMAP ) == 0 )
{
error = driver->clazz->load_glyph( slot, face->size,

View File

@ -44,3 +44,6 @@ FT_END_HEADER
#endif /* __PFRGLOAD_H__ */
/* END */

View File

@ -501,8 +501,8 @@
}
#if 0
/* load kerning pair data */
FT_CALLBACK_DEF( FT_Error )
pfr_extra_item_load_kerning_pairs( FT_Byte* p,
@ -582,7 +582,9 @@
"invalid kerning pairs table\n" ));
goto Exit;
}
#else
#else /* 0 */
/* load kerning pair data */
FT_CALLBACK_DEF( FT_Error )
pfr_extra_item_load_kerning_pairs( FT_Byte* p,
@ -593,6 +595,7 @@
FT_Error error = 0;
FT_Memory memory = phy_font->memory;
FT_TRACE2(( "pfr_extra_item_load_kerning_pairs()\n" ));
if ( FT_NEW( item ) )
@ -624,33 +627,34 @@
FT_UInt char1, char2;
FT_Byte* q;
if ( item->flags & PFR_KERN_2BYTE_CHAR )
{
q = p;
char1 = PFR_NEXT_USHORT(q);
char2 = PFR_NEXT_USHORT(q);
char1 = PFR_NEXT_USHORT( q );
char2 = PFR_NEXT_USHORT( q );
item->pair1 = PFR_KERN_INDEX(char1,char2);
item->pair1 = PFR_KERN_INDEX( char1, char2 );
q = p + item->pair_size*(item->pair_count-1);
char1 = PFR_NEXT_USHORT(q);
char2 = PFR_NEXT_USHORT(q);
q = p + item->pair_size * ( item->pair_count - 1 );
char1 = PFR_NEXT_USHORT( q );
char2 = PFR_NEXT_USHORT( q );
item->pair2 = PFR_KERN_INDEX(char1,char2);
item->pair2 = PFR_KERN_INDEX( char1, char2 );
}
else
{
q = p;
char1 = PFR_NEXT_BYTE(q);
char2 = PFR_NEXT_BYTE(q);
char1 = PFR_NEXT_BYTE( q );
char2 = PFR_NEXT_BYTE( q );
item->pair1 = PFR_KERN_INDEX(char1,char2);
item->pair1 = PFR_KERN_INDEX( char1, char2 );
q = p + item->pair_size*(item->pair_count-1);
char1 = PFR_NEXT_BYTE(q);
char2 = PFR_NEXT_BYTE(q);
q = p + item->pair_size * ( item->pair_count - 1 );
char1 = PFR_NEXT_BYTE( q );
char2 = PFR_NEXT_BYTE( q );
item->pair2 = PFR_KERN_INDEX(char1,char2);
item->pair2 = PFR_KERN_INDEX( char1, char2 );
}
/* add new item to the current list */
@ -661,7 +665,7 @@
}
else
{
/* empty item !! */
/* empty item! */
FT_FREE( item );
}
@ -676,7 +680,8 @@
"invalid kerning pairs table\n" ));
goto Exit;
}
#endif
#endif /* 0 */
static const PFR_ExtraItemRec pfr_phy_font_extra_items[] =
{
@ -715,8 +720,9 @@
{
PFR_KernItem item, next;
item = phy_font->kern_items;
while (item)
while ( item )
{
next = item->next;
FT_FREE( item );
@ -725,6 +731,7 @@
phy_font->kern_items = NULL;
phy_font->kern_items_tail = NULL;
}
phy_font->num_kern_pairs = 0;
}

View File

@ -248,7 +248,7 @@
FT_ASSERT( gindex < face->phy_font.num_chars );
/* try to load an embedded bitmap */
if ( (load_flags & (FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP)) == 0 )
if ( ( load_flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP ) ) == 0 )
{
error = pfr_slot_load_bitmap( slot, size, gindex );
if ( error == 0 )
@ -356,6 +356,7 @@
sure */
#if 0
/* find the kerning for a given glyph pair */
FT_LOCAL_DEF( FT_Error )
pfr_face_get_kerning( PFR_Face face,
@ -398,7 +399,9 @@
Exit:
return 0;
}
#else
#else /* 0 */
/* find the kerning for a given glyph pair */
FT_LOCAL_DEF( FT_Error )
pfr_face_get_kerning( PFR_Face face,
@ -411,6 +414,7 @@
PFR_KernItem item = phy_font->kern_items;
FT_UInt32 idx = PFR_KERN_INDEX( glyph1, glyph2 );
kerning->x = 0;
kerning->y = 0;
@ -433,6 +437,7 @@
FT_Stream stream = face->root.stream;
FT_Byte* p;
if ( FT_STREAM_SEEK( item->offset ) ||
FT_FRAME_ENTER( item->pair_count * item->pair_size ) )
goto Exit;
@ -443,32 +448,33 @@
{
FT_UInt char1, char2, charcode;
mid = (min + max) >> 1;
mid = ( min + max ) >> 1;
p = stream->cursor + mid*item->pair_size;
if ( item->flags & PFR_KERN_2BYTE_CHAR )
{
char1 = FT_NEXT_USHORT(p);
char2 = FT_NEXT_USHORT(p);
char1 = FT_NEXT_USHORT( p );
char2 = FT_NEXT_USHORT( p );
}
else
{
char1 = FT_NEXT_USHORT(p);
char2 = FT_NEXT_USHORT(p);
char1 = FT_NEXT_USHORT( p );
char2 = FT_NEXT_USHORT( p );
}
charcode = PFR_KERN_INDEX(char1,char2);
charcode = PFR_KERN_INDEX( char1, char2 );
if ( idx == charcode )
{
if ( item->flags & PFR_KERN_2BYTE_ADJ )
kerning->x = item->base_adj + FT_NEXT_SHORT(p);
kerning->x = item->base_adj + FT_NEXT_SHORT( p );
else
kerning->x = item->base_adj + FT_NEXT_CHAR(p);
kerning->x = item->base_adj + FT_NEXT_CHAR( p );
break;
}
if ( idx > charcode )
min = mid+1;
min = mid + 1;
else
max = mid;
}

View File

@ -91,3 +91,6 @@ FT_BEGIN_HEADER
FT_END_HEADER
#endif /* __PFROBJS_H__ */
/* END */

View File

@ -1,3 +1,21 @@
/***************************************************************************/
/* */
/* pfrsbit.c */
/* */
/* FreeType PFR bitmap loader (body). */
/* */
/* Copyright 2002 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#include "pfrsbit.h"
#include "pfrload.h"
#include FT_INTERNAL_DEBUG_H
@ -8,6 +26,7 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_pfr
/*************************************************************************/
/*************************************************************************/
/***** *****/
@ -16,7 +35,7 @@
/*************************************************************************/
/*************************************************************************/
typedef struct PFR_BitWriter_
typedef struct PFR_BitWriter_
{
FT_Byte* line; /* current line start */
FT_Int pitch; /* line size in bytes */
@ -58,7 +77,8 @@
FT_UInt val = 0;
FT_UInt c = 0;
n = (FT_Int)(limit - p)*8;
n = (FT_Int)( limit - p ) * 8;
if ( n > writer->total )
n = writer->total;
@ -66,7 +86,7 @@
for ( ; n > 0; n-- )
{
if ( (n & 7) == reload )
if ( ( n & 7 ) == reload )
val = *p++;
if ( val & 0x80 )
@ -77,7 +97,7 @@
if ( --left <= 0 )
{
cur[0] = (FT_Byte) c;
cur[0] = (FT_Byte)c;
left = writer->width;
mask = 0x80;
@ -110,6 +130,7 @@
FT_UInt mask = 0x80;
FT_UInt c = 0;
n = writer->total;
phase = 1;
@ -128,12 +149,13 @@
{
FT_Int v;
if ( p >= limit )
break;
v = *p++;
counts[0] = (v >> 4);
counts[1] = (v & 15);
counts[0] = v >> 4;
counts[1] = v & 15;
phase = 0;
count = counts[0];
}
@ -142,8 +164,8 @@
phase = 1;
count = counts[1];
}
}
while ( count == 0 );
} while ( count == 0 );
}
if ( phase )
@ -188,11 +210,12 @@
FT_UInt mask = 0x80;
FT_UInt c = 0;
n = writer->total;
phase = 1;
count = 0;
reload = 1;
phase = 1;
count = 0;
reload = 1;
for ( ; n > 0; n-- )
{
@ -205,8 +228,8 @@
count = *p++;
phase = phase ^ 1;
}
while ( count == 0 );
} while ( count == 0 );
}
if ( phase )
@ -249,40 +272,44 @@
/*************************************************************************/
static void
pfr_lookup_bitmap_data( FT_Byte* base,
FT_Byte* limit,
FT_Int count,
FT_Byte flags,
FT_UInt char_code,
FT_ULong* found_offset,
FT_ULong* found_size )
pfr_lookup_bitmap_data( FT_Byte* base,
FT_Byte* limit,
FT_Int count,
FT_Byte flags,
FT_UInt char_code,
FT_ULong* found_offset,
FT_ULong* found_size )
{
FT_UInt left, right, char_len;
FT_Bool two = (flags & 1);
FT_Byte* buff;
FT_UInt left, right, char_len;
FT_Bool two = flags & 1;
FT_Byte* buff;
char_len = 4;
if ( two ) char_len += 1;
if ( flags & 2) char_len += 1;
if ( flags & 4) char_len += 1;
if ( two ) char_len += 1;
if ( flags & 2 ) char_len += 1;
if ( flags & 4 ) char_len += 1;
left = 0;
right = count;
left = 0;
right = count;
while ( left < right )
{
FT_UInt middle, code;
middle = (left + right) >> 1;
buff = base + middle*char_len;
/* check that we're not outside of the table */
/* this is possible with broken fonts... */
middle = ( left + right ) >> 1;
buff = base + middle * char_len;
/* check that we are not outside of the table -- */
/* this is possible with broken fonts... */
if ( buff + char_len > limit )
goto Fail;
if (two) code = PFR_NEXT_USHORT(buff);
else code = PFR_NEXT_BYTE(buff);
if ( two )
code = PFR_NEXT_USHORT( buff );
else
code = PFR_NEXT_BYTE( buff );
if ( code == char_code )
goto Found_It;
@ -300,37 +327,42 @@
return;
Found_It:
if (flags & 2) *found_size = PFR_NEXT_USHORT(buff);
else *found_size = PFR_NEXT_BYTE(buff);
if ( flags & 2 )
*found_size = PFR_NEXT_USHORT( buff );
else
*found_size = PFR_NEXT_BYTE( buff );
if (flags & 4) *found_offset = PFR_NEXT_ULONG(buff);
else *found_offset = PFR_NEXT_USHORT(buff);
if ( flags & 4 )
*found_offset = PFR_NEXT_ULONG( buff );
else
*found_offset = PFR_NEXT_USHORT( buff );
}
/* load bitmap metrics. "*padvance" must be set to the default value */
/* before calling this function... */
/* */
/* load bitmap metrics. "*padvance" must be set to the default value */
/* before calling this function... */
/* */
static FT_Error
pfr_load_bitmap_metrics( FT_Byte** pdata,
FT_Byte* limit,
FT_Long scaled_advance,
FT_Long *axpos,
FT_Long *aypos,
FT_UInt *axsize,
FT_UInt *aysize,
FT_Long *aadvance,
FT_UInt *aformat )
pfr_load_bitmap_metrics( FT_Byte** pdata,
FT_Byte* limit,
FT_Long scaled_advance,
FT_Long *axpos,
FT_Long *aypos,
FT_UInt *axsize,
FT_UInt *aysize,
FT_Long *aadvance,
FT_UInt *aformat )
{
FT_Error error = 0;
FT_Byte flags;
FT_Char b;
FT_Byte* p = *pdata;
FT_Long xpos, ypos, advance;
FT_UInt xsize, ysize;
FT_Byte flags;
FT_Char b;
FT_Byte* p = *pdata;
FT_Long xpos, ypos, advance;
FT_UInt xsize, ysize;
PFR_CHECK(1);
flags = PFR_NEXT_BYTE(p);
PFR_CHECK( 1 );
flags = PFR_NEXT_BYTE( p );
xpos = 0;
ypos = 0;
@ -338,93 +370,93 @@
ysize = 0;
advance = 0;
switch (flags & 3)
switch ( flags & 3 )
{
case 0:
PFR_CHECK(1);
b = PFR_NEXT_INT8(p);
xpos = b >> 4;
ypos = ((FT_Char)(b << 4)) >> 4;
break;
case 0:
PFR_CHECK( 1 );
b = PFR_NEXT_INT8( p );
xpos = b >> 4;
ypos = ( (FT_Char)( b << 4 ) ) >> 4;
break;
case 1:
PFR_CHECK(2);
xpos = PFR_NEXT_INT8(p);
ypos = PFR_NEXT_INT8(p);
break;
case 1:
PFR_CHECK( 2 );
xpos = PFR_NEXT_INT8( p );
ypos = PFR_NEXT_INT8( p );
break;
case 2:
PFR_CHECK(4);
xpos = PFR_NEXT_SHORT(p);
ypos = PFR_NEXT_SHORT(p);
break;
case 2:
PFR_CHECK( 4 );
xpos = PFR_NEXT_SHORT( p );
ypos = PFR_NEXT_SHORT( p );
break;
case 3:
PFR_CHECK(6);
xpos = PFR_NEXT_LONG(p);
ypos = PFR_NEXT_LONG(p);
break;
case 3:
PFR_CHECK( 6 );
xpos = PFR_NEXT_LONG( p );
ypos = PFR_NEXT_LONG( p );
break;
default:
;
default:
;
}
flags >>= 2;
switch (flags & 3)
switch ( flags & 3 )
{
case 0:
/* blank image */
xsize = 0;
ysize = 0;
break;
case 0:
/* blank image */
xsize = 0;
ysize = 0;
break;
case 1:
PFR_CHECK(1);
b = PFR_NEXT_BYTE(p);
xsize = (b >> 4) & 0xF;
ysize = b & 0xF;
break;
case 1:
PFR_CHECK( 1 );
b = PFR_NEXT_BYTE( p );
xsize = ( b >> 4 ) & 0xF;
ysize = b & 0xF;
break;
case 2:
PFR_CHECK(2);
xsize = PFR_NEXT_BYTE(p);
ysize = PFR_NEXT_BYTE(p);
break;
case 2:
PFR_CHECK( 2 );
xsize = PFR_NEXT_BYTE( p );
ysize = PFR_NEXT_BYTE( p );
break;
case 3:
PFR_CHECK(4);
xsize = PFR_NEXT_USHORT(p);
ysize = PFR_NEXT_USHORT(p);
break;
case 3:
PFR_CHECK( 4 );
xsize = PFR_NEXT_USHORT( p );
ysize = PFR_NEXT_USHORT( p );
break;
default:
;
default:
;
}
flags >>= 2;
switch (flags & 3)
switch ( flags & 3 )
{
case 0:
advance = scaled_advance;
break;
case 0:
advance = scaled_advance;
break;
case 1:
PFR_CHECK(1);
advance = PFR_NEXT_INT8(p) << 8;
break;
case 1:
PFR_CHECK( 1 );
advance = PFR_NEXT_INT8( p ) << 8;
break;
case 2:
PFR_CHECK(2);
advance = PFR_NEXT_SHORT(p);
break;
case 2:
PFR_CHECK( 2 );
advance = PFR_NEXT_SHORT( p );
break;
case 3:
PFR_CHECK(3);
advance = PFR_NEXT_LONG(p);
break;
case 3:
PFR_CHECK( 3 );
advance = PFR_NEXT_LONG( p );
break;
default:
;
default:
;
}
*axpos = xpos;
@ -446,36 +478,37 @@
static FT_Error
pfr_load_bitmap_bits( FT_Byte* p,
FT_Byte* limit,
FT_UInt format,
FT_UInt decreasing,
FT_Bitmap* target )
pfr_load_bitmap_bits( FT_Byte* p,
FT_Byte* limit,
FT_UInt format,
FT_UInt decreasing,
FT_Bitmap* target )
{
FT_Error error = 0;
PFR_BitWriterRec writer;
if ( target->rows > 0 && target->width > 0 )
{
pfr_bitwriter_init( &writer, target, decreasing );
switch (format)
switch ( format )
{
case 0: /* packed bits */
pfr_bitwriter_decode_bytes( &writer, p, limit );
break;
case 0: /* packed bits */
pfr_bitwriter_decode_bytes( &writer, p, limit );
break;
case 1: /* RLE1 */
pfr_bitwriter_decode_rle1( &writer, p, limit );
break;
case 1: /* RLE1 */
pfr_bitwriter_decode_rle1( &writer, p, limit );
break;
case 2: /* RLE2 */
pfr_bitwriter_decode_rle2( &writer, p, limit );
break;
case 2: /* RLE2 */
pfr_bitwriter_decode_rle2( &writer, p, limit );
break;
default:
FT_ERROR(( "pfr_read_bitmap_data: invalid image type\n" ));
error = FT_Err_Invalid_File_Format;
default:
FT_ERROR(( "pfr_read_bitmap_data: invalid image type\n" ));
error = FT_Err_Invalid_File_Format;
}
}
@ -505,22 +538,24 @@
PFR_Char character;
PFR_Strike strike;
character = &phys->chars[glyph_index];
/* Look-up a bitmap strike corresponding to the current */
/* character dimensions */
{
FT_UInt n;
FT_UInt n;
strike = phys->strikes;
for ( n = 0; n < phys->num_strikes; n++ )
{
if ( strike->x_ppm == (FT_UInt) size->root.metrics.x_ppem &&
strike->y_ppm == (FT_UInt) size->root.metrics.y_ppem )
if ( strike->x_ppm == (FT_UInt)size->root.metrics.x_ppem &&
strike->y_ppm == (FT_UInt)size->root.metrics.y_ppem )
{
goto Found_Strike;
}
strike++;
}
@ -532,7 +567,8 @@
/* Now lookup the glyph's position within the file */
{
FT_UInt char_len;
FT_UInt char_len;
char_len = 4;
if ( strike->flags & 1 ) char_len += 1;
@ -541,7 +577,7 @@
/* Access data directly in the frame to speed lookups */
if ( FT_STREAM_SEEK( phys->bct_offset + strike->bct_offset ) ||
FT_FRAME_ENTER( char_len * strike->num_bitmaps ) )
FT_FRAME_ENTER( char_len * strike->num_bitmaps ) )
goto Exit;
pfr_lookup_bitmap_data( stream->cursor,
@ -554,7 +590,7 @@
FT_FRAME_EXIT();
if (gps_size == 0)
if ( gps_size == 0 )
{
/* Could not find a bitmap program string for this glyph */
error = FT_Err_Invalid_Argument;
@ -568,14 +604,15 @@
FT_UInt xsize, ysize, format;
FT_Byte* p;
advance = FT_MulDiv( size->root.metrics.x_ppem << 8,
character->advance,
phys->metrics_resolution );
/* XXX: handle linearHoriAdvance correctly !! */
/* XXX: handle linearHoriAdvance correctly! */
if ( FT_STREAM_SEEK( face->header.gps_section_offset + gps_offset ) ||
FT_FRAME_ENTER( gps_size ) )
FT_FRAME_ENTER( gps_size ) )
goto Exit;
p = stream->cursor;
@ -589,16 +626,16 @@
glyph->root.format = FT_GLYPH_FORMAT_BITMAP;
/* Set up glyph bitmap and metrics */
glyph->root.bitmap.width = (FT_Int) xsize;
glyph->root.bitmap.rows = (FT_Int) ysize;
glyph->root.bitmap.pitch = (FT_Long)(xsize+7) >> 3;
glyph->root.bitmap.width = (FT_Int)xsize;
glyph->root.bitmap.rows = (FT_Int)ysize;
glyph->root.bitmap.pitch = (FT_Long)( xsize + 7 ) >> 3;
glyph->root.bitmap.pixel_mode = FT_PIXEL_MODE_MONO;
glyph->root.metrics.width = (FT_Long)xsize << 6;
glyph->root.metrics.height = (FT_Long)ysize << 6;
glyph->root.metrics.horiBearingX = xpos << 6;
glyph->root.metrics.horiBearingY = ypos << 6;
glyph->root.metrics.horiAdvance = ((advance >> 2) + 32) & -64;
glyph->root.metrics.horiAdvance = ( ( advance >> 2 ) + 32 ) & -64;
glyph->root.metrics.vertBearingX = - glyph->root.metrics.width >> 1;
glyph->root.metrics.vertBearingY = 0;
glyph->root.metrics.vertAdvance = size->root.metrics.height;
@ -609,21 +646,25 @@
/* Allocate and read bitmap data */
{
FT_Memory memory = face->root.memory;
FT_Long len = glyph->root.bitmap.pitch*ysize;
FT_Long len = glyph->root.bitmap.pitch * ysize;
if ( !FT_ALLOC( glyph->root.bitmap.buffer, len ) )
{
error = pfr_load_bitmap_bits( p,
stream->limit,
format,
(face->header.color_flags & 2),
face->header.color_flags & 2,
&glyph->root.bitmap );
}
}
}
FT_FRAME_EXIT();
}
Exit:
return error;
}
/* END */

View File

@ -1,8 +1,8 @@
/***************************************************************************/
/* */
/* pfrsbit.c */
/* pfrsbit.h */
/* */
/* FreeType PFR bitmap loader */
/* FreeType PFR bitmap loader (specification). */
/* */
/* Copyright 2002 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
@ -15,6 +15,7 @@
/* */
/***************************************************************************/
#ifndef __PFRSBIT_H__
#define __PFRSBIT_H__
@ -30,3 +31,6 @@ FT_BEGIN_HEADER
FT_END_HEADER
#endif /* __PFR_SBIT_H__ */
/* END */

View File

@ -192,7 +192,8 @@ FT_BEGIN_HEADER
/************************************************************************/
typedef struct PFR_KernItemRec_* PFR_KernItem;
typedef struct PFR_KernItemRec_
typedef struct PFR_KernItemRec_
{
PFR_KernItem next;
FT_UInt pair_count;
@ -205,7 +206,8 @@ FT_BEGIN_HEADER
} PFR_KernItemRec;
#define PFR_KERN_INDEX( g1, g2 ) ( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) )
#define PFR_KERN_INDEX( g1, g2 ) \
( ( (FT_UInt32)(g1) << 16 ) | (FT_UInt16)(g2) )
typedef struct PFR_KernPairRec_
{

View File

@ -597,8 +597,9 @@
FT_Byte *ends, *starts, *offsets, *deltas, *glyph_ids;
FT_UInt num_segs;
/* in certain fonts, the 'length' field is invalid and goes */
/* out of bound. We try to correct this here... */
/* in certain fonts, the `length' field is invalid and goes */
/* out of bound. We try to correct this here... */
if ( length < 16 )
FT_INVALID_TOO_SHORT;