ref: 960ba59ad95d67c56df4bf22aa1881c48548b2ee
parent: 3a18c5e29efbb463f360c0951530572a5020535f
author: Werner Lemberg <[email protected]>
date: Fri Dec 1 03:20:47 EST 2006
* src/sfnt/sfobjs.c (tt_face_get_name): All Unicode strings are encoded in UTF-16BE. Patch from Rajeev Pahuja <[email protected]>. (tt_name_entry_ascii_from_ucs4): Removed. * include/freetype/ftxf86.h: Fix and extend comment so that it appears in the documentation. * include/freetype/ftchapters.h: Add `font_format' section. * src/tools/docmaker/tohtml.py (HtmlFormatter::index_exit): Add link to TOC in index page. Formatting.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,30 +1,61 @@
-2006-11-28 David Turner <[email protected]>
+2006-12-01 Werner Lemberg <[email protected]>
- * src/smooth/ftgrays.c (gray_raster_render): return 0 when we're
- trying to rendering into a zero-width/height bitmap, instead of an
- error code.
+ * src/sfnt/sfobjs.c (tt_face_get_name): All Unicode strings are
+ encoded in UTF-16BE. Patch from Rajeev Pahuja <[email protected]>.
+ (tt_name_entry_ascii_from_ucs4): Removed.
- * src/truetype/ttobjs.c (tt_face_init): Fix typo in previous patch
- * src/smooth/ftgrays.c: remove hard-coded error values, use FreeType
- ones instead
+ * include/freetype/ftxf86.h: Fix and extend comment so that it
+ appears in the documentation.
- * src/autofit/afhints.c (af_glyph_hints_dump_segments): remove unused
- variable
+ * include/freetype/ftchapters.h: Add `font_format' section.
+
+ * src/tools/docmaker/tohtml.py (HtmlFormatter::index_exit): Add link
+ to TOC in index page.
+
+2006-11-28 David Turner <[email protected]>
+
+ * src/smooth/ftgrays.c (gray_raster_render): Return 0 when we are
+ trying to render into a zero-width/height bitmap, not an error code.
+
+ * src/truetype/ttobjs.c (tt_face_init): Fix typo in previous patch.
+
+ * src/smooth/ftgrays.c: Remove hard-coded error values; use FreeType
+ ones instead.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_segments): Remove unused
+ variable.
+
2006-11-26 Pierre Hanser <[email protected]>
* src/truetype/ttobjs.c (tt_face_init): Protect against NULL pointer.
-2006-11-25 David Turner <[email protected]>
+2006-11-25 David Turner <[email protected]>
- * src/autofit/afhints.c: add stubs to link the "ftgrid" test program
- when debugging is disabled in the auto-hinter
+ * src/autofit/afhints.c (af_glyph_hints_dump_points,
+ af_glyph_hints_dump_segments, af_glyph_hints_dumpedges) [!AF_DEBUG]:
+ Add stubs to link the `ftgrid' test program when debugging is
+ disabled in the auto-hinter.
-2006-11-23 David Turner <[email protected]>
+2006-11-23 David Turner <[email protected]>
* src/autofit/afhints.c, src/autofit/afhints.h, src/autofit/aflatin.c,
- src/autofit/aftypes.h: Misc. auto-hinter improvements
+ src/autofit/aftypes.h: Miscellaneous auto-hinter improvements.
+
+ * src/autofit/afhints.c (af_glyph_hints_dump_segments) [AF_DEBUG]:
+ Emit more sensible information.
+
+ * src/autofit/afhints.h (AF_SegmentRec): Add `height' member.
+
+ * src/autofit/aflatin.c (af_latin_metrics_scale_dim): Improve
+ rounding of blue values.
+ (af_latin_hints_compute_segments): Hint segment heights.
+ (af_latin_hints_link_segments): Reduce `len_score' value.
+ (af_latin_hints_compute_edges): Increase `segment_length_threshold'
+ value and use `height' member for comparisons.
+ (af_latin_hint_edges): Extend logging message.
+ Improve handling of remaining edges.
2006-11-22 Werner Lemberg <[email protected]>
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -77,7 +77,7 @@
/*************************************************************************/
/* */
- /* Uncomment the line below if you want to active sub-pixel rendering */
+ /* Uncomment the line below if you want to activate sub-pixel rendering */
/* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
/* */
/* Note that this feature is covered by several Microsoft patents */
--- a/include/freetype/ftchapters.h
+++ b/include/freetype/ftchapters.h
@@ -56,6 +56,7 @@
/* bdf_fonts */
/* pfr_fonts */
/* winfnt_fonts */
+/* font_formats */
/* */
/***************************************************************************/
--- a/include/freetype/ftlcdfil.h
+++ b/include/freetype/ftlcdfil.h
@@ -102,13 +102,13 @@
* @FT_LCD_FILTER_NONE in order to enable it.
*
* Due to *PATENTS* covering subpixel rendering, this function doesn't
- * do anything except returning @FT_Err_Unimplemented_Feature if the
+ * do anything except returning `FT_Err_Unimplemented_Feature' if the
* configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
* defined in your build of the library, which should correspond to all
* default builds of the library.
*
* The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
- * @FT_Glyph_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char.
+ * @FT_Outline_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char.
*
* It does _not_ affect the output of @FT_Outline_Render and
* @FT_Outline_Get_Bitmap.
--- a/include/freetype/ftxf86.h
+++ b/include/freetype/ftxf86.h
@@ -4,7 +4,7 @@
/* */
/* Support functions for X11. */
/* */
-/* Copyright 2002, 2003, 2004 by */
+/* Copyright 2002, 2003, 2004, 2006 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -31,24 +31,44 @@
FT_BEGIN_HEADER
- /* this comment is intentionally disabled for now, to prevent this */
- /* function from appearing in the API Reference. */
- /*@***********************************************************************/
+ /*************************************************************************/
/* */
+ /* <Section> */
+ /* font_formats */
+ /* */
+ /* <Title> */
+ /* Font Formats */
+ /* */
+ /* <Abstract> */
+ /* Getting the font format. */
+ /* */
+ /* <Description> */
+ /* The single function in this section can be used to get the font */
+ /* format. Note that this information is not needed normally; */
+ /* however, there are special cases (like in PDF devices) where it is */
+ /* important to differentiate, inspite of FreeType's uniform API. */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
/* <Function> */
- /* FT_Get_X11_Font_Format */
+ /* FT_Get_X11_Font_Format */
/* */
/* <Description> */
- /* Return a string describing the format of a given face as an X11 */
- /* FONT_PROPERTY. It should only be used by the FreeType 2 font */
- /* backend of the XFree86 font server. */
+ /* Return a string describing the format of a given face, using values */
+ /* which can be used as an X11 FONT_PROPERTY. Possible values are */
+ /* `TrueType', `Type 1', `BDF', `PCF', `Type 42', `CID Type 1', `CFF', */
+ /* `PFR', and `Windows FNT'. */
/* */
/* <Input> */
- /* face :: Input face handle. */
+ /* face :: */
+ /* Input face handle. */
/* */
/* <Return> */
- /* Font format string. NULL in case of error. */
+ /* Font format string. NULL in case of error. */
/* */
FT_EXPORT( const char* )
FT_Get_X11_Font_Format( FT_Face face );
--- a/src/autofit/afhints.c
+++ b/src/autofit/afhints.c
@@ -216,7 +216,7 @@
AF_INDEX_NUM( seg->link, segments ),
AF_INDEX_NUM( seg->serif, segments ),
seg->height,
- seg->height - (seg->max_coord - seg->min_coord) );
+ seg->height - ( seg->max_coord - seg->min_coord ) );
}
printf( "\n" );
}
@@ -263,29 +263,32 @@
}
}
-#else
- /* these empty stubs are only used to link the "ftgrid" test program
- * when debugging is disabled
- */
+#else /* !AF_DEBUG */
+
+ /* these empty stubs are only used to link the `ftgrid' test program */
+ /* when debugging is disabled */
+
void
af_glyph_hints_dump_points( AF_GlyphHints hints )
{
- FT_UNUSED(hints);
+ FT_UNUSED( hints );
}
+
void
af_glyph_hints_dump_segments( AF_GlyphHints hints )
{
- FT_UNUSED(hints);
+ FT_UNUSED( hints );
}
+
void
af_glyph_hints_dump_edges( AF_GlyphHints hints )
{
- FT_UNUSED(hints);
+ FT_UNUSED( hints );
}
-#endif /* AF_DEBUG */
+#endif /* !AF_DEBUG */
/* compute the direction value of a given vector */
--- a/src/autofit/afhints.h
+++ b/src/autofit/afhints.h
@@ -125,7 +125,7 @@
FT_Short pos; /* position of segment */
FT_Short min_coord; /* minimum coordinate of segment */
FT_Short max_coord; /* maximum coordinate of segment */
- FT_Short height;
+ FT_Short height; /* the hinted segment height */
AF_Edge edge; /* the segment's parent edge */
AF_Segment edge_next; /* link to next segment in parent edge */
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -471,7 +471,7 @@
if ( blue )
{
FT_Pos scaled = FT_MulFix( blue->shoot.org, scaler->y_scale );
- FT_Pos fitted = (scaled + 40) & ~63;
+ FT_Pos fitted = ( scaled + 40 ) & ~63;
if ( scaled != fitted )
@@ -772,20 +772,21 @@
} /* contours */
- /* now slightly increase the height of segments when this makes sense
- * this is used to better detect and ignore serifs
- */
+ /* now slightly increase the height of segments when this makes */
+ /* sense -- this is used to better detect and ignore serifs */
{
- AF_Segment segments = axis->segments;
+ AF_Segment segments = axis->segments;
AF_Segment segments_end = segments + axis->num_segments;
+
for ( segment = segments; segment < segments_end; segment++ )
{
- AF_Point first = segment->first;
- AF_Point last = segment->last;
+ AF_Point first = segment->first;
+ AF_Point last = segment->last;
FT_Pos first_v = first->v;
FT_Pos last_v = last->v;
+
if ( first == last )
continue;
@@ -793,25 +794,27 @@
{
AF_Point p;
+
p = first->prev;
if ( p->v < first_v )
- segment->height += (first_v - p->v) >> 1;
+ segment->height += ( first_v - p->v ) >> 1;
p = last->next;
if ( p->v > last_v )
- segment->height += (p->v - last_v) >> 1;
+ segment->height += ( p->v - last_v ) >> 1;
}
else
{
AF_Point p;
+
p = first->prev;
if ( p->v > first_v )
- segment->height += (p->v - first_v) >> 1;
+ segment->height += ( p->v - first_v ) >> 1;
p = last->next;
if ( p->v < last_v )
- segment->height += (last_v - p->v) >> 1;
+ segment->height += ( last_v - p->v ) >> 1;
}
}
}
@@ -1841,9 +1844,11 @@
else
edge->pos = FT_PIX_ROUND( edge->opos );
- AF_LOG(( "ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f) snapped to (%.2f) (%.2f)\n",
- edge-edges, edge->opos / 64., edge2-edges, edge2->opos/64.,
- edge->pos / 64., edge2->pos / 64. ));
+ AF_LOG(( "ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f) "
+ "snapped to (%.2f) (%.2f)\n",
+ edge-edges, edge->opos / 64.0,
+ edge2-edges, edge2->opos / 64.0,
+ edge->pos / 64.0, edge2->pos / 64.0 ));
anchor = edge;
edge->flags |= AF_EDGE_DONE;
@@ -2020,10 +2025,12 @@
{
FT_Pos delta;
+
if ( edge->flags & AF_EDGE_DONE )
continue;
delta = 1000;
+
if ( edge->serif )
{
delta = edge->serif->opos - edge->opos;
@@ -2031,45 +2038,49 @@
delta = -delta;
}
- if ( delta < 64+16 )
+ if ( delta < 64 + 16 )
{
af_latin_align_serif_edge( hints, edge->serif, edge );
- AF_LOG(( "SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f) aligned to (%.2f)\n", edge-edges,
- edge->opos/64., edge->serif - edges, edge->serif->opos/64., edge->pos/64.0 ));
+ AF_LOG(( "SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f) "
+ "aligned to (%.2f)\n",
+ edge-edges, edge->opos / 64.0,
+ edge->serif - edges, edge->serif->opos / 64.0,
+ edge->pos / 64.0 ));
}
else if ( !anchor )
{
AF_LOG(( "SERIF_ANCHOR: edge %d (opos=%.2f) snapped to (%.2f)\n",
- edge-edges, edge->opos/64., edge->pos/64. ));
+ edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
edge->pos = FT_PIX_ROUND( edge->opos );
anchor = edge;
}
else
{
- AF_Edge before, after;
+ AF_Edge before, after;
- for ( before = edge-1; before >= edges; before-- )
+
+ for ( before = edge - 1; before >= edges; before-- )
if ( before->flags & AF_EDGE_DONE )
- break;
+ break;
- for ( after = edge+1; after < edge_limit; after++ )
+ for ( after = edge + 1; after < edge_limit; after++ )
if ( after->flags & AF_EDGE_DONE )
- break;
+ break;
- if ( before >= edges && before < edge &&
- after < edge_limit && after > edge )
- {
- edge->pos = before->pos + FT_MulDiv( edge->opos - before->opos,
- after->pos - before->pos,
- after->opos - before->opos );
- }
+ if ( before >= edges && before < edge &&
+ after < edge_limit && after > edge )
+ edge->pos = before->pos +
+ FT_MulDiv( edge->opos - before->opos,
+ after->pos - before->pos,
+ after->opos - before->opos );
else
- edge->pos = anchor->pos +
+ edge->pos = anchor->pos +
FT_PIX_ROUND( edge->opos - anchor->opos );
AF_LOG(( "SERIF_LINK: edge %d (opos=%.2f) snapped to (%.2f)\n",
- edge-edges, edge->opos/64., edge->pos/64. ));
+ edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
}
+
edge->flags |= AF_EDGE_DONE;
if ( edge > edges && edge->pos < edge[-1].pos )
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -75,37 +75,6 @@
}
- /* convert a UCS-4 name entry to ASCII */
- static FT_String*
- tt_name_entry_ascii_from_ucs4( TT_NameEntry entry,
- FT_Memory memory )
- {
- FT_String* string;
- FT_UInt len, code, n;
- FT_Byte* read = (FT_Byte*)entry->string;
- FT_Error error;
-
-
- len = (FT_UInt)entry->stringLength / 4;
-
- if ( FT_NEW_ARRAY( string, len + 1 ) )
- return NULL;
-
- for ( n = 0; n < len; n++ )
- {
- code = (FT_UInt)FT_NEXT_ULONG( read );
- if ( code < 32 || code > 127 )
- code = '?';
-
- string[n] = (char)code;
- }
-
- string[len] = 0;
-
- return string;
- }
-
-
/* convert an Apple Roman or symbol name entry to ASCII */
static FT_String*
tt_name_entry_ascii_from_other( TT_NameEntry entry,
@@ -253,13 +222,11 @@
rec = face->name_table.names + found_win;
switch ( rec->encodingID )
{
+ /* all Unicode strings are encoded using UTF-16BE */
case TT_MS_ID_UNICODE_CS:
case TT_MS_ID_SYMBOL_CS:
- convert = tt_name_entry_ascii_from_utf16;
- break;
-
case TT_MS_ID_UCS_4:
- convert = tt_name_entry_ascii_from_ucs4;
+ convert = tt_name_entry_ascii_from_utf16;
break;
default:
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -1783,17 +1783,17 @@
return ErrRaster_Invalid_Outline;
/* if direct mode is not set, we must have a target bitmap */
- if ( (params->flags & FT_RASTER_FLAG_DIRECT) == 0 )
+ if ( ( params->flags & FT_RASTER_FLAG_DIRECT ) == 0 )
{
- if ( !target_map )
- return ErrRaster_Invalid_Argument;
+ if ( !target_map )
+ return ErrRaster_Invalid_Argument;
- /* nothing to do */
- if ( !target_map->width || !target_map->rows )
- return 0;
+ /* nothing to do */
+ if ( !target_map->width || !target_map->rows )
+ return 0;
- if ( !target_map->buffer )
- return ErrRaster_Invalid_Argument;
+ if ( !target_map->buffer )
+ return ErrRaster_Invalid_Argument;
}
/* this version does not support monochrome rendering */
--- a/src/tools/docmaker/tohtml.py
+++ b/src/tools/docmaker/tohtml.py
@@ -107,7 +107,17 @@
chapter_inter = '</h2><ul class="empty"><li>'
chapter_footer = '</li></ul></td></tr></table>'
+# Index footer.
+index_footer_start = """\
+<hr>
+<table><tr><td width="100%"></td>
+<td><font size=-2>[<a href="
+"""
+index_footer_end = """\
+">TOC</a>]</font></td></tr></table>
+"""
+
# source language keyword coloration/styling
#
keyword_prefix = '<span class="keyword">'
@@ -360,7 +370,7 @@
# block_index already contains the sorted list of index names
count = len( self.block_index )
- rows = (count + self.columns - 1)/self.columns
+ rows = (count + self.columns - 1) / self.columns
print "<table align=center border=0 cellpadding=0 cellspacing=0>"
for r in range(rows):
@@ -377,7 +387,11 @@
print line
print "</table>"
- print self.html_footer
+
+ print index_footer_start + \
+ self.file_prefix + "toc.html" + \
+ index_footer_end
+
self.index_items = {}
def index_dump( self, index_filename = None ):