ref: dd21301ef2c46c6b3f9c78afb2cd0a6c0ea2a6af
parent: 5e225b7c15e6c6ff8b4b7059597319b26271bc67
author: Dave Arnold <[email protected]>
date: Fri Nov 8 05:52:51 EST 2013
[cff] Fix for hints that touch. * src/cff/cf2hints.c (cf2_hintmap_insertHint): Fix condition for finding index value of insertion point.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-08 Dave Arnold <[email protected]>
+
+ [cff] Fix for hints that touch.
+
+ * src/cff/cf2hints.c (cf2_hintmap_insertHint): Fix condition for
+ finding index value of insertion point.
+
2013-11-06 Werner Lemberg <[email protected]>
[truetype] Fix handling of phantom points in composite glyphs.
--- a/src/cff/cf2hints.c
+++ b/src/cff/cf2hints.c
@@ -596,22 +596,31 @@
indexInsert = 0;
for ( ; indexInsert < hintmap->count; indexInsert++ )
{
- if ( hintmap->edge[indexInsert].csCoord > firstHintEdge->csCoord )
+ if ( hintmap->edge[indexInsert].csCoord >= firstHintEdge->csCoord )
break;
}
/*
- * Discard any hints that overlap in character space. Most often,
- * this is while building the initial map, but in theory, it can also
- * occur because of darkening.
+ * Discard any hints that overlap in character space. Most often, this
+ * is while building the initial map, where captured hints from all
+ * zones are combined. Define overlap to include hints that `touch'
+ * (overlap zero). Hiragino Sans/Gothic fonts have numerous hints that
+ * touch. Some fonts have non-ideographic glyphs that overlap our
+ * synthetic hints.
*
+ * Overlap also occurs when darkening stem hints that are close.
+ *
*/
if ( indexInsert < hintmap->count )
{
- /* we are inserting before an existing edge: */
+ /* we are inserting before an existing edge: */
+ /* verify that an existing edge is not the same */
+ if ( hintmap->edge[indexInsert].csCoord == firstHintEdge->csCoord )
+ return; /* ignore overlapping stem hint */
+
/* verify that a new pair does not straddle the next edge */
- if ( isPair &&
- hintmap->edge[indexInsert].csCoord < secondHintEdge->csCoord )
+ if ( isPair &&
+ hintmap->edge[indexInsert].csCoord <= secondHintEdge->csCoord )
return; /* ignore overlapping stem hint */
/* verify that we are not inserting between paired edges */