2006-02-09 15:17:04 +01:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* afcjk.c */
|
|
|
|
/* */
|
|
|
|
/* Auto-fitter hinting routines for CJK script (body). */
|
|
|
|
/* */
|
2013-03-14 11:21:17 +01:00
|
|
|
/* Copyright 2006-2013 by */
|
2006-02-09 15:17:04 +01:00
|
|
|
/* 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. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
/*
|
|
|
|
* The algorithm is based on akito's autohint patch, available here:
|
|
|
|
*
|
|
|
|
* http://www.kde.gr.jp/~akito/patch/freetype2/
|
|
|
|
*
|
|
|
|
*/
|
2006-02-09 15:17:04 +01:00
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_ADVANCES_H
|
|
|
|
#include FT_INTERNAL_DEBUG_H
|
|
|
|
|
2006-02-15 07:05:52 +01:00
|
|
|
#include "aftypes.h"
|
|
|
|
#include "aflatin.h"
|
|
|
|
|
|
|
|
|
2006-02-11 13:12:02 +01:00
|
|
|
#ifdef AF_CONFIG_OPTION_CJK
|
2006-02-09 15:17:04 +01:00
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
#undef AF_CONFIG_OPTION_CJK_BLUE_HANI_VERT
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
#include "afcjk.h"
|
|
|
|
#include "aferrors.h"
|
|
|
|
|
|
|
|
|
2011-03-02 03:52:36 +01:00
|
|
|
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
2006-02-09 15:17:04 +01:00
|
|
|
#include "afwarp.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
|
|
|
|
/* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
|
|
|
|
/* messages during execution. */
|
|
|
|
/* */
|
|
|
|
#undef FT_COMPONENT
|
|
|
|
#define FT_COMPONENT trace_afcjk
|
|
|
|
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
2006-02-10 23:15:22 +01:00
|
|
|
/***** C J K G L O B A L M E T R I C S *****/
|
2006-02-09 15:17:04 +01:00
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
/* Basically the Latin version with AF_CJKMetrics */
|
|
|
|
/* to replace AF_LatinMetrics. */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
FT_LOCAL_DEF( void )
|
|
|
|
af_cjk_metrics_init_widths( AF_CJKMetrics metrics,
|
2012-10-24 14:22:14 +02:00
|
|
|
FT_Face face )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
|
|
|
/* scan the array of segments in each direction */
|
|
|
|
AF_GlyphHintsRec hints[1];
|
|
|
|
|
|
|
|
|
2013-08-26 18:54:05 +02:00
|
|
|
FT_TRACE5(( "\n"
|
|
|
|
"cjk standard widths computation (script %d)\n"
|
|
|
|
"===========================================\n"
|
|
|
|
"\n",
|
|
|
|
metrics->root.script_class->script ));
|
2013-08-25 13:07:08 +02:00
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_glyph_hints_init( hints, face->memory );
|
|
|
|
|
|
|
|
metrics->axis[AF_DIMENSION_HORZ].width_count = 0;
|
|
|
|
metrics->axis[AF_DIMENSION_VERT].width_count = 0;
|
|
|
|
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
FT_Error error;
|
|
|
|
FT_UInt glyph_index;
|
|
|
|
int dim;
|
|
|
|
AF_CJKMetricsRec dummy[1];
|
|
|
|
AF_Scaler scaler = &dummy->root.scaler;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
|
2013-07-30 23:17:04 +02:00
|
|
|
glyph_index = FT_Get_Char_Index(
|
|
|
|
face,
|
|
|
|
metrics->root.script_class->standard_char );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
if ( glyph_index == 0 )
|
|
|
|
goto Exit;
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
|
|
|
|
metrics->root.script_class->standard_char, glyph_index ));
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
|
|
|
|
if ( error || face->glyph->outline.n_points <= 0 )
|
|
|
|
goto Exit;
|
|
|
|
|
|
|
|
FT_ZERO( dummy );
|
|
|
|
|
|
|
|
dummy->units_per_em = metrics->units_per_em;
|
|
|
|
|
|
|
|
scaler->x_scale = 0x10000L;
|
|
|
|
scaler->y_scale = 0x10000L;
|
|
|
|
scaler->x_delta = 0;
|
|
|
|
scaler->y_delta = 0;
|
|
|
|
|
|
|
|
scaler->face = face;
|
|
|
|
scaler->render_mode = FT_RENDER_MODE_NORMAL;
|
|
|
|
scaler->flags = 0;
|
|
|
|
|
|
|
|
af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy );
|
|
|
|
|
|
|
|
error = af_glyph_hints_reload( hints, &face->glyph->outline );
|
|
|
|
if ( error )
|
|
|
|
goto Exit;
|
|
|
|
|
|
|
|
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
|
|
|
|
{
|
|
|
|
AF_CJKAxis axis = &metrics->axis[dim];
|
|
|
|
AF_AxisHints axhints = &hints->axis[dim];
|
|
|
|
AF_Segment seg, limit, link;
|
|
|
|
FT_UInt num_widths = 0;
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
error = af_latin_hints_compute_segments( hints,
|
|
|
|
(AF_Dimension)dim );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
if ( error )
|
|
|
|
goto Exit;
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
af_latin_hints_link_segments( hints,
|
|
|
|
(AF_Dimension)dim );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
seg = axhints->segments;
|
|
|
|
limit = seg + axhints->num_segments;
|
|
|
|
|
|
|
|
for ( ; seg < limit; seg++ )
|
|
|
|
{
|
|
|
|
link = seg->link;
|
|
|
|
|
|
|
|
/* we only consider stem segments there! */
|
|
|
|
if ( link && link->link == seg && link > seg )
|
|
|
|
{
|
|
|
|
FT_Pos dist;
|
|
|
|
|
|
|
|
|
|
|
|
dist = seg->pos - link->pos;
|
|
|
|
if ( dist < 0 )
|
|
|
|
dist = -dist;
|
|
|
|
|
|
|
|
if ( num_widths < AF_CJK_MAX_WIDTHS )
|
|
|
|
axis->widths[num_widths++].org = dist;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-07-03 11:54:12 +02:00
|
|
|
/* this also replaces multiple almost identical stem widths */
|
2013-08-25 13:07:08 +02:00
|
|
|
/* with a single one (the value 100 is heuristic) */
|
2012-07-03 11:54:12 +02:00
|
|
|
af_sort_and_quantize_widths( &num_widths, axis->widths,
|
|
|
|
dummy->units_per_em / 100 );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
axis->width_count = num_widths;
|
|
|
|
}
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
Exit:
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
AF_CJKAxis axis = &metrics->axis[dim];
|
|
|
|
FT_Pos stdw;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
stdw = ( axis->width_count > 0 ) ? axis->widths[0].org
|
|
|
|
: AF_LATIN_CONSTANT( metrics, 50 );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
/* let's try 20% of the smallest width */
|
|
|
|
axis->edge_distance_threshold = stdw / 5;
|
|
|
|
axis->standard_width = stdw;
|
|
|
|
axis->extra_light = 0;
|
2013-08-25 13:07:08 +02:00
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
{
|
|
|
|
FT_UInt i;
|
|
|
|
|
|
|
|
|
|
|
|
FT_TRACE5(( "%s widths:\n",
|
|
|
|
dim == AF_DIMENSION_VERT ? "horizontal"
|
|
|
|
: "vertical" ));
|
|
|
|
|
|
|
|
FT_TRACE5(( " %d (standard)", axis->standard_width ));
|
|
|
|
for ( i = 1; i < axis->width_count; i++ )
|
|
|
|
FT_TRACE5(( " %d", axis->widths[i].org ));
|
|
|
|
|
|
|
|
FT_TRACE5(( "\n" ));
|
|
|
|
}
|
|
|
|
#endif
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
FT_TRACE5(( "\n" ));
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_glyph_hints_done( hints );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
/* Find all blue zones. */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
static void
|
2013-08-25 13:07:08 +02:00
|
|
|
af_cjk_metrics_init_blues( AF_CJKMetrics metrics,
|
|
|
|
FT_Face face )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_Pos fills[AF_BLUE_STRING_MAX_LEN];
|
|
|
|
FT_Pos flats[AF_BLUE_STRING_MAX_LEN];
|
2011-05-09 09:48:49 +02:00
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
FT_Int num_fills;
|
|
|
|
FT_Int num_flats;
|
2011-05-09 09:48:49 +02:00
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
AF_CJKBlue blue;
|
|
|
|
FT_Error error;
|
|
|
|
AF_CJKAxis axis;
|
|
|
|
FT_Outline outline;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
AF_Blue_Stringset bss = metrics->root.script_class->blue_stringset;
|
|
|
|
const AF_Blue_StringRec* bs = &af_blue_stringsets[bss];
|
|
|
|
|
2011-05-12 07:30:15 +02:00
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_String* cjk_blue_name[4] =
|
|
|
|
{
|
|
|
|
(FT_String*)"bottom", /* -- , -- */
|
|
|
|
(FT_String*)"top", /* -- , TOP */
|
|
|
|
(FT_String*)"left", /* HORIZ, -- */
|
|
|
|
(FT_String*)"right" /* HORIZ, TOP */
|
2011-05-30 07:20:37 +02:00
|
|
|
};
|
2013-08-25 19:47:26 +02:00
|
|
|
|
|
|
|
FT_String* cjk_blue_type_name[2] =
|
|
|
|
{
|
|
|
|
(FT_String*)"unfilled", /* -- */
|
|
|
|
(FT_String*)"filled" /* FILL */
|
2011-05-30 07:20:37 +02:00
|
|
|
};
|
2011-05-12 07:30:15 +02:00
|
|
|
#endif
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
/* we walk over the blue character strings as specified in the */
|
|
|
|
/* script's entry in the `af_blue_stringset' array, computing its */
|
|
|
|
/* extremum points (depending on the string properties) */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
FT_TRACE5(( "cjk blue zones computation\n"
|
|
|
|
"==========================\n"
|
|
|
|
"\n" ));
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
for ( ; bs->string != AF_BLUE_STRING_MAX; bs++ )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
2013-08-25 19:47:26 +02:00
|
|
|
const char* p = &af_blue_strings[bs->string];
|
|
|
|
FT_Pos* blue_ref;
|
|
|
|
FT_Pos* blue_shoot;
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-26 18:54:05 +02:00
|
|
|
if ( AF_CJK_IS_HORIZ_BLUE( bs ) )
|
|
|
|
axis = &metrics->axis[AF_DIMENSION_HORZ];
|
|
|
|
else
|
|
|
|
axis = &metrics->axis[AF_DIMENSION_VERT];
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_TRACE5(( "blue zone %d:\n", axis->blue_count ));
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
num_fills = 0;
|
|
|
|
num_flats = 0;
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_TRACE5(( " cjk blue %s/%s\n",
|
|
|
|
cjk_blue_name[AF_CJK_IS_HORIZ_BLUE( bs ) |
|
|
|
|
AF_CJK_IS_TOP_BLUE( bs ) ],
|
|
|
|
cjk_blue_type_name[!!AF_CJK_IS_FILLED_BLUE( bs )] ));
|
|
|
|
|
|
|
|
while ( *p )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_ULong ch;
|
|
|
|
FT_UInt glyph_index;
|
|
|
|
FT_Pos best_pos; /* same as points.y or points.x, resp. */
|
|
|
|
FT_Int best_point;
|
|
|
|
FT_Vector* points;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
GET_UTF8_CHAR( ch, p );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
/* load the character in the face -- skip unknown or empty ones */
|
|
|
|
glyph_index = FT_Get_Char_Index( face, ch );
|
|
|
|
if ( glyph_index == 0 )
|
|
|
|
{
|
2013-08-26 18:54:05 +02:00
|
|
|
FT_TRACE5(( " U+%04lX unavailable\n", ch ));
|
2013-08-25 19:47:26 +02:00
|
|
|
continue;
|
|
|
|
}
|
2011-05-09 09:48:49 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
|
|
|
|
outline = face->glyph->outline;
|
|
|
|
if ( error || outline.n_points <= 0 )
|
|
|
|
{
|
2013-08-26 18:54:05 +02:00
|
|
|
FT_TRACE5(( " U+%04lX contains no outlines\n", ch ));
|
2013-08-25 19:47:26 +02:00
|
|
|
continue;
|
|
|
|
}
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
/* now compute min or max point indices and coordinates */
|
|
|
|
points = outline.points;
|
|
|
|
best_point = -1;
|
|
|
|
best_pos = 0; /* make compiler happy */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
{
|
|
|
|
FT_Int nn;
|
|
|
|
FT_Int first = 0;
|
|
|
|
FT_Int last = -1;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
for ( nn = 0; nn < outline.n_contours; first = last + 1, nn++ )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_Int pp;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
last = outline.contours[nn];
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
/* Avoid single-point contours since they are never rasterized. */
|
|
|
|
/* In some fonts, they correspond to mark attachment points */
|
|
|
|
/* which are way outside of the glyph's real outline. */
|
|
|
|
if ( last <= first )
|
|
|
|
continue;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
if ( AF_CJK_IS_HORIZ_BLUE( bs ) )
|
|
|
|
{
|
|
|
|
if ( AF_CJK_IS_RIGHT_BLUE( bs ) )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
for ( pp = first; pp <= last; pp++ )
|
2013-08-25 19:47:26 +02:00
|
|
|
if ( best_point < 0 || points[pp].x > best_pos )
|
2011-05-09 09:48:49 +02:00
|
|
|
{
|
|
|
|
best_point = pp;
|
2013-08-25 19:47:26 +02:00
|
|
|
best_pos = points[pp].x;
|
2011-05-09 09:48:49 +02:00
|
|
|
}
|
2013-08-25 19:47:26 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
for ( pp = first; pp <= last; pp++ )
|
2013-08-25 19:47:26 +02:00
|
|
|
if ( best_point < 0 || points[pp].x < best_pos )
|
2011-05-09 09:48:49 +02:00
|
|
|
{
|
|
|
|
best_point = pp;
|
2013-08-25 19:47:26 +02:00
|
|
|
best_pos = points[pp].x;
|
2011-05-09 09:48:49 +02:00
|
|
|
}
|
2013-08-25 19:47:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( AF_CJK_IS_TOP_BLUE( bs ) )
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
for ( pp = first; pp <= last; pp++ )
|
2013-08-25 19:47:26 +02:00
|
|
|
if ( best_point < 0 || points[pp].y > best_pos )
|
2011-05-09 09:48:49 +02:00
|
|
|
{
|
|
|
|
best_point = pp;
|
2013-08-25 19:47:26 +02:00
|
|
|
best_pos = points[pp].y;
|
2011-05-09 09:48:49 +02:00
|
|
|
}
|
2013-08-25 19:47:26 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
for ( pp = first; pp <= last; pp++ )
|
2013-08-25 19:47:26 +02:00
|
|
|
if ( best_point < 0 || points[pp].y < best_pos )
|
2011-05-09 09:48:49 +02:00
|
|
|
{
|
|
|
|
best_point = pp;
|
2013-08-25 19:47:26 +02:00
|
|
|
best_pos = points[pp].y;
|
2011-05-09 09:48:49 +02:00
|
|
|
}
|
|
|
|
}
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-26 18:54:05 +02:00
|
|
|
FT_TRACE5(( " U+%04lX: best_pos = %5ld\n", ch, best_pos ));
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
2013-08-25 19:47:26 +02:00
|
|
|
|
|
|
|
if ( AF_CJK_IS_FILLED_BLUE( bs ) )
|
|
|
|
fills[num_fills++] = best_pos;
|
|
|
|
else
|
|
|
|
flats[num_flats++] = best_pos;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
if ( num_flats == 0 && num_fills == 0 )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
* we couldn't find a single glyph to compute this blue zone,
|
|
|
|
* we will simply ignore it then
|
|
|
|
*/
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_TRACE5(( " empty\n" ));
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* we have computed the contents of the `fill' and `flats' tables, */
|
2013-08-25 13:07:08 +02:00
|
|
|
/* now determine the reference position of the blue zone -- */
|
2011-05-09 09:48:49 +02:00
|
|
|
/* we simply take the median value after a simple sort */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_sort_pos( num_flats, flats );
|
|
|
|
af_sort_pos( num_fills, fills );
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
blue = &axis->blues[axis->blue_count];
|
|
|
|
blue_ref = &blue->ref.org;
|
|
|
|
blue_shoot = &blue->shoot.org;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
axis->blue_count++;
|
2013-08-25 13:07:08 +02:00
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
if ( num_flats == 0 )
|
|
|
|
{
|
2013-08-25 13:07:08 +02:00
|
|
|
*blue_ref =
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
*blue_shoot = fills[num_fills / 2];
|
|
|
|
}
|
|
|
|
else if ( num_fills == 0 )
|
|
|
|
{
|
2013-08-25 13:07:08 +02:00
|
|
|
*blue_ref =
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
*blue_shoot = flats[num_flats / 2];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
*blue_ref = fills[num_fills / 2];
|
|
|
|
*blue_shoot = flats[num_flats / 2];
|
|
|
|
}
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
/* make sure blue_ref >= blue_shoot for top/right or */
|
|
|
|
/* vice versa for bottom/left */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
if ( *blue_shoot != *blue_ref )
|
|
|
|
{
|
|
|
|
FT_Pos ref = *blue_ref;
|
|
|
|
FT_Pos shoot = *blue_shoot;
|
|
|
|
FT_Bool under_ref = FT_BOOL( shoot < ref );
|
|
|
|
|
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
/* AF_CJK_IS_TOP_BLUE covers `right' and `top' */
|
|
|
|
if ( AF_CJK_IS_TOP_BLUE( bs ) ^ under_ref )
|
2013-08-25 13:07:08 +02:00
|
|
|
{
|
|
|
|
*blue_ref =
|
|
|
|
*blue_shoot = ( shoot + ref ) / 2;
|
|
|
|
|
|
|
|
FT_TRACE5(( " [overshoot smaller than reference,"
|
|
|
|
" taking mean value]\n" ));
|
|
|
|
}
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
blue->flags = 0;
|
2013-08-25 19:47:26 +02:00
|
|
|
if ( AF_CJK_IS_TOP_BLUE( bs ) )
|
|
|
|
blue->flags |= AF_CJK_BLUE_TOP;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
2013-08-25 19:47:26 +02:00
|
|
|
FT_TRACE5(( " -> reference = %ld\n"
|
2013-08-25 13:07:08 +02:00
|
|
|
" overshoot = %ld\n",
|
2013-08-25 19:47:26 +02:00
|
|
|
*blue_ref, *blue_shoot ));
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
2011-05-09 09:48:49 +02:00
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
FT_TRACE5(( "\n" ));
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Basically the Latin version with type AF_CJKMetrics for metrics. */
|
2013-08-25 13:07:08 +02:00
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
FT_LOCAL_DEF( void )
|
|
|
|
af_cjk_metrics_check_digits( AF_CJKMetrics metrics,
|
|
|
|
FT_Face face )
|
|
|
|
{
|
|
|
|
FT_UInt i;
|
|
|
|
FT_Bool started = 0, same_width = 1;
|
|
|
|
FT_Fixed advance, old_advance = 0;
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* digit `0' is 0x30 in all supported charmaps */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
for ( i = 0x30; i <= 0x39; i++ )
|
|
|
|
{
|
|
|
|
FT_UInt glyph_index;
|
|
|
|
|
|
|
|
|
|
|
|
glyph_index = FT_Get_Char_Index( face, i );
|
|
|
|
if ( glyph_index == 0 )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( FT_Get_Advance( face, glyph_index,
|
|
|
|
FT_LOAD_NO_SCALE |
|
|
|
|
FT_LOAD_NO_HINTING |
|
|
|
|
FT_LOAD_IGNORE_TRANSFORM,
|
|
|
|
&advance ) )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( started )
|
|
|
|
{
|
|
|
|
if ( advance != old_advance )
|
|
|
|
{
|
|
|
|
same_width = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
old_advance = advance;
|
|
|
|
started = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
metrics->root.digits_have_same_width = same_width;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Initialize global metrics. */
|
|
|
|
|
2007-07-07 09:30:40 +02:00
|
|
|
FT_LOCAL_DEF( FT_Error )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_cjk_metrics_init( AF_CJKMetrics metrics,
|
|
|
|
FT_Face face )
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
|
|
|
FT_CharMap oldmap = face->charmap;
|
|
|
|
|
|
|
|
|
|
|
|
metrics->units_per_em = face->units_per_EM;
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
if ( !FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
|
2009-04-27 19:40:35 +02:00
|
|
|
{
|
2012-10-24 14:22:14 +02:00
|
|
|
af_cjk_metrics_init_widths( metrics, face );
|
2013-08-25 13:07:08 +02:00
|
|
|
af_cjk_metrics_init_blues( metrics, face );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_cjk_metrics_check_digits( metrics, face );
|
2009-04-27 19:40:35 +02:00
|
|
|
}
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
FT_Set_Charmap( face, oldmap );
|
2013-03-14 11:21:17 +01:00
|
|
|
return FT_Err_Ok;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Adjust scaling value, then scale and shift widths */
|
|
|
|
/* and blue zones (if applicable) for given dimension. */
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
static void
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_cjk_metrics_scale_dim( AF_CJKMetrics metrics,
|
|
|
|
AF_Scaler scaler,
|
|
|
|
AF_Dimension dim )
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
FT_Fixed scale;
|
|
|
|
FT_Pos delta;
|
|
|
|
AF_CJKAxis axis;
|
|
|
|
FT_UInt nn;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
|
|
|
|
if ( dim == AF_DIMENSION_HORZ )
|
|
|
|
{
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
scale = scaler->x_scale;
|
|
|
|
delta = scaler->x_delta;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
scale = scaler->y_scale;
|
|
|
|
delta = scaler->y_delta;
|
|
|
|
}
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
axis = &metrics->axis[dim];
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
if ( axis->org_scale == scale && axis->org_delta == delta )
|
|
|
|
return;
|
|
|
|
|
|
|
|
axis->org_scale = scale;
|
|
|
|
axis->org_delta = delta;
|
|
|
|
|
|
|
|
axis->scale = scale;
|
|
|
|
axis->delta = delta;
|
|
|
|
|
|
|
|
/* scale the blue zones */
|
|
|
|
for ( nn = 0; nn < axis->blue_count; nn++ )
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
AF_CJKBlue blue = &axis->blues[nn];
|
|
|
|
FT_Pos dist;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
blue->ref.cur = FT_MulFix( blue->ref.org, scale ) + delta;
|
|
|
|
blue->ref.fit = blue->ref.cur;
|
|
|
|
blue->shoot.cur = FT_MulFix( blue->shoot.org, scale ) + delta;
|
|
|
|
blue->shoot.fit = blue->shoot.cur;
|
|
|
|
blue->flags &= ~AF_CJK_BLUE_ACTIVE;
|
|
|
|
|
|
|
|
/* a blue zone is only active if it is less than 3/4 pixels tall */
|
|
|
|
dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
|
|
|
|
if ( dist <= 48 && dist >= -48 )
|
|
|
|
{
|
|
|
|
FT_Pos delta1, delta2;
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
|
|
|
|
blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
/* shoot is under shoot for cjk */
|
2011-05-09 09:48:49 +02:00
|
|
|
delta1 = FT_DivFix( blue->ref.fit, scale ) - blue->shoot.org;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
delta2 = delta1;
|
|
|
|
if ( delta1 < 0 )
|
|
|
|
delta2 = -delta2;
|
|
|
|
|
|
|
|
delta2 = FT_MulFix( delta2, scale );
|
|
|
|
|
|
|
|
FT_TRACE5(( "delta: %d", delta1 ));
|
|
|
|
if ( delta2 < 32 )
|
|
|
|
delta2 = 0;
|
2011-05-09 09:48:49 +02:00
|
|
|
#if 0
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
else if ( delta2 < 64 )
|
|
|
|
delta2 = 32 + ( ( ( delta2 - 32 ) + 16 ) & ~31 );
|
2011-05-09 09:48:49 +02:00
|
|
|
#endif
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
else
|
|
|
|
delta2 = FT_PIX_ROUND( delta2 );
|
|
|
|
FT_TRACE5(( "/%d\n", delta2 ));
|
|
|
|
|
|
|
|
if ( delta1 < 0 )
|
|
|
|
delta2 = -delta2;
|
|
|
|
|
|
|
|
blue->shoot.fit = blue->ref.fit - delta2;
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
FT_TRACE5(( ">> active cjk blue zone %c%d[%ld/%ld]:\n"
|
|
|
|
" ref: cur=%.2f fit=%.2f\n"
|
|
|
|
" shoot: cur=%.2f fit=%.2f\n",
|
|
|
|
( dim == AF_DIMENSION_HORZ ) ? 'H' : 'V',
|
|
|
|
nn, blue->ref.org, blue->shoot.org,
|
|
|
|
blue->ref.cur / 64.0, blue->ref.fit / 64.0,
|
|
|
|
blue->shoot.cur / 64.0, blue->shoot.fit / 64.0 ));
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
blue->flags |= AF_CJK_BLUE_ACTIVE;
|
|
|
|
}
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Scale global values in both directions. */
|
|
|
|
|
2007-07-07 09:30:40 +02:00
|
|
|
FT_LOCAL_DEF( void )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
af_cjk_metrics_scale( AF_CJKMetrics metrics,
|
|
|
|
AF_Scaler scaler )
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
2013-08-25 13:07:08 +02:00
|
|
|
metrics->root.scaler.render_mode = scaler->render_mode;
|
|
|
|
metrics->root.scaler.face = scaler->face;
|
|
|
|
metrics->root.scaler.flags = scaler->flags;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
af_cjk_metrics_scale_dim( metrics, scaler, AF_DIMENSION_HORZ );
|
|
|
|
af_cjk_metrics_scale_dim( metrics, scaler, AF_DIMENSION_VERT );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
2006-02-10 23:15:22 +01:00
|
|
|
/***** C J K G L Y P H A N A L Y S I S *****/
|
2006-02-09 15:17:04 +01:00
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
|
|
|
|
/* Walk over all contours and compute its segments. */
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
static FT_Error
|
|
|
|
af_cjk_hints_compute_segments( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
|
|
|
AF_AxisHints axis = &hints->axis[dim];
|
|
|
|
AF_Segment segments = axis->segments;
|
|
|
|
AF_Segment segment_limit = segments + axis->num_segments;
|
|
|
|
FT_Error error;
|
|
|
|
AF_Segment seg;
|
|
|
|
|
|
|
|
|
|
|
|
error = af_latin_hints_compute_segments( hints, dim );
|
|
|
|
if ( error )
|
|
|
|
return error;
|
|
|
|
|
|
|
|
/* a segment is round if it doesn't have successive */
|
|
|
|
/* on-curve points. */
|
|
|
|
for ( seg = segments; seg < segment_limit; seg++ )
|
|
|
|
{
|
|
|
|
AF_Point pt = seg->first;
|
|
|
|
AF_Point last = seg->last;
|
2013-03-23 14:25:43 +01:00
|
|
|
AF_Flags f0 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
|
2006-02-09 15:17:04 +01:00
|
|
|
AF_Flags f1;
|
|
|
|
|
|
|
|
|
|
|
|
seg->flags &= ~AF_EDGE_ROUND;
|
|
|
|
|
|
|
|
for ( ; pt != last; f0 = f1 )
|
|
|
|
{
|
|
|
|
pt = pt->next;
|
2013-03-23 14:25:43 +01:00
|
|
|
f1 = (AF_Flags)( pt->flags & AF_FLAG_CONTROL );
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
if ( !f0 && !f1 )
|
|
|
|
break;
|
|
|
|
|
|
|
|
if ( pt == last )
|
|
|
|
seg->flags |= AF_EDGE_ROUND;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-14 11:21:17 +01:00
|
|
|
return FT_Err_Ok;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
af_cjk_hints_link_segments( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
|
|
|
AF_AxisHints axis = &hints->axis[dim];
|
|
|
|
AF_Segment segments = axis->segments;
|
|
|
|
AF_Segment segment_limit = segments + axis->num_segments;
|
|
|
|
AF_Direction major_dir = axis->major_dir;
|
|
|
|
AF_Segment seg1, seg2;
|
* builds/win32/visualc/freetype.dsp: updating the project file, adding
missing base source files (e.g. ftstroke.c, ftxf86.c, etc...)
* src/autofit/afcjk.c, src/autofit/aflatin.c, src/base/ftobjs.c,
src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrobjs.c,
src/sfnt/sfobjs.c, src/sfnt/ttmtx.c, src/truetype/ttpload.c,
src/truetype/ttpload.h, src/type1/t1afm.c, src/type1/t1objs.c:
removing compiler warnings when building with Visual C++ 6 and /W4
2006-03-20 14:32:33 +01:00
|
|
|
FT_Pos len_threshold;
|
2006-02-09 15:17:04 +01:00
|
|
|
FT_Pos dist_threshold;
|
|
|
|
|
|
|
|
|
2006-02-11 13:12:02 +01:00
|
|
|
len_threshold = AF_LATIN_CONSTANT( hints->metrics, 8 );
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
dist_threshold = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
|
|
|
|
: hints->y_scale;
|
2006-02-09 15:17:04 +01:00
|
|
|
dist_threshold = FT_DivFix( 64 * 3, dist_threshold );
|
|
|
|
|
|
|
|
/* now compare each segment to the others */
|
|
|
|
for ( seg1 = segments; seg1 < segment_limit; seg1++ )
|
|
|
|
{
|
|
|
|
/* the fake segments are for metrics hinting only */
|
|
|
|
if ( seg1->first == seg1->last )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( seg1->dir != major_dir )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
for ( seg2 = segments; seg2 < segment_limit; seg2++ )
|
|
|
|
if ( seg2 != seg1 && seg1->dir + seg2->dir == 0 )
|
|
|
|
{
|
|
|
|
FT_Pos dist = seg2->pos - seg1->pos;
|
|
|
|
|
|
|
|
|
|
|
|
if ( dist < 0 )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
{
|
|
|
|
FT_Pos min = seg1->min_coord;
|
|
|
|
FT_Pos max = seg1->max_coord;
|
|
|
|
FT_Pos len;
|
|
|
|
|
|
|
|
|
|
|
|
if ( min < seg2->min_coord )
|
|
|
|
min = seg2->min_coord;
|
|
|
|
|
|
|
|
if ( max > seg2->max_coord )
|
|
|
|
max = seg2->max_coord;
|
|
|
|
|
|
|
|
len = max - min;
|
|
|
|
if ( len >= len_threshold )
|
|
|
|
{
|
2006-02-10 23:15:22 +01:00
|
|
|
if ( dist * 8 < seg1->score * 9 &&
|
2006-02-09 15:17:04 +01:00
|
|
|
( dist * 8 < seg1->score * 7 || seg1->len < len ) )
|
|
|
|
{
|
|
|
|
seg1->score = dist;
|
|
|
|
seg1->len = len;
|
|
|
|
seg1->link = seg2;
|
|
|
|
}
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
if ( dist * 8 < seg2->score * 9 &&
|
2006-02-09 15:17:04 +01:00
|
|
|
( dist * 8 < seg2->score * 7 || seg2->len < len ) )
|
|
|
|
{
|
|
|
|
seg2->score = dist;
|
|
|
|
seg2->len = len;
|
|
|
|
seg2->link = seg1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2006-02-10 23:15:22 +01:00
|
|
|
* now compute the `serif' segments
|
|
|
|
*
|
|
|
|
* In Hanzi, some strokes are wider on one or both of the ends.
|
|
|
|
* We either identify the stems on the ends as serifs or remove
|
|
|
|
* the linkage, depending on the length of the stems.
|
2006-02-09 15:17:04 +01:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
{
|
|
|
|
AF_Segment link1, link2;
|
|
|
|
|
|
|
|
|
|
|
|
for ( seg1 = segments; seg1 < segment_limit; seg1++ )
|
|
|
|
{
|
|
|
|
link1 = seg1->link;
|
|
|
|
if ( !link1 || link1->link != seg1 || link1->pos <= seg1->pos )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( seg1->score >= dist_threshold )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
for ( seg2 = segments; seg2 < segment_limit; seg2++ )
|
|
|
|
{
|
|
|
|
if ( seg2->pos > seg1->pos || seg1 == seg2 )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
link2 = seg2->link;
|
|
|
|
if ( !link2 || link2->link != seg2 || link2->pos < link1->pos )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( seg1->pos == seg2->pos && link1->pos == link2->pos )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( seg2->score <= seg1->score || seg1->score * 4 <= seg2->score )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
/* seg2 < seg1 < link1 < link2 */
|
|
|
|
|
|
|
|
if ( seg1->len >= seg2->len * 3 )
|
|
|
|
{
|
|
|
|
AF_Segment seg;
|
|
|
|
|
|
|
|
|
|
|
|
for ( seg = segments; seg < segment_limit; seg++ )
|
|
|
|
{
|
|
|
|
AF_Segment link = seg->link;
|
|
|
|
|
|
|
|
|
|
|
|
if ( link == seg2 )
|
|
|
|
{
|
|
|
|
seg->link = 0;
|
|
|
|
seg->serif = link1;
|
|
|
|
}
|
|
|
|
else if ( link == link2 )
|
|
|
|
{
|
|
|
|
seg->link = 0;
|
|
|
|
seg->serif = seg1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
seg1->link = link1->link = 0;
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for ( seg1 = segments; seg1 < segment_limit; seg1++ )
|
|
|
|
{
|
|
|
|
seg2 = seg1->link;
|
|
|
|
|
|
|
|
if ( seg2 )
|
|
|
|
{
|
|
|
|
seg2->num_linked++;
|
|
|
|
if ( seg2->link != seg1 )
|
|
|
|
{
|
|
|
|
seg1->link = 0;
|
|
|
|
|
|
|
|
if ( seg2->score < dist_threshold || seg1->score < seg2->score * 4 )
|
|
|
|
seg1->serif = seg2->link;
|
|
|
|
else
|
|
|
|
seg2->num_linked--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static FT_Error
|
|
|
|
af_cjk_hints_compute_edges( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
|
|
|
AF_AxisHints axis = &hints->axis[dim];
|
2013-03-14 11:21:17 +01:00
|
|
|
FT_Error error = FT_Err_Ok;
|
2006-02-09 15:17:04 +01:00
|
|
|
FT_Memory memory = hints->memory;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
AF_CJKAxis laxis = &((AF_CJKMetrics)hints->metrics)->axis[dim];
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
AF_Segment segments = axis->segments;
|
|
|
|
AF_Segment segment_limit = segments + axis->num_segments;
|
|
|
|
AF_Segment seg;
|
|
|
|
|
|
|
|
FT_Fixed scale;
|
|
|
|
FT_Pos edge_distance_threshold;
|
|
|
|
|
|
|
|
|
|
|
|
axis->num_edges = 0;
|
|
|
|
|
|
|
|
scale = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
|
|
|
|
: hints->y_scale;
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
|
|
/* */
|
2006-02-10 23:15:22 +01:00
|
|
|
/* We begin by generating a sorted table of edges for the current */
|
|
|
|
/* direction. To do so, we simply scan each segment and try to find */
|
|
|
|
/* an edge in our table that corresponds to its position. */
|
2006-02-09 15:17:04 +01:00
|
|
|
/* */
|
|
|
|
/* If no edge is found, we create and insert a new edge in the */
|
|
|
|
/* sorted table. Otherwise, we simply add the segment to the edge's */
|
2006-02-10 23:15:22 +01:00
|
|
|
/* list which is then processed in the second step to compute the */
|
2006-02-09 15:17:04 +01:00
|
|
|
/* edge's properties. */
|
|
|
|
/* */
|
|
|
|
/* Note that the edges table is sorted along the segment/edge */
|
|
|
|
/* position. */
|
|
|
|
/* */
|
|
|
|
/*********************************************************************/
|
|
|
|
|
|
|
|
edge_distance_threshold = FT_MulFix( laxis->edge_distance_threshold,
|
|
|
|
scale );
|
|
|
|
if ( edge_distance_threshold > 64 / 4 )
|
2006-02-11 13:12:02 +01:00
|
|
|
edge_distance_threshold = FT_DivFix( 64 / 4, scale );
|
2006-02-09 15:17:04 +01:00
|
|
|
else
|
|
|
|
edge_distance_threshold = laxis->edge_distance_threshold;
|
|
|
|
|
|
|
|
for ( seg = segments; seg < segment_limit; seg++ )
|
|
|
|
{
|
2013-08-25 13:07:08 +02:00
|
|
|
AF_Edge found = NULL;
|
2006-02-09 15:17:04 +01:00
|
|
|
FT_Pos best = 0xFFFFU;
|
|
|
|
FT_Int ee;
|
|
|
|
|
|
|
|
|
|
|
|
/* look for an edge corresponding to the segment */
|
|
|
|
for ( ee = 0; ee < axis->num_edges; ee++ )
|
|
|
|
{
|
|
|
|
AF_Edge edge = axis->edges + ee;
|
|
|
|
FT_Pos dist;
|
|
|
|
|
|
|
|
|
|
|
|
if ( edge->dir != seg->dir )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
dist = seg->pos - edge->fpos;
|
|
|
|
if ( dist < 0 )
|
|
|
|
dist = -dist;
|
|
|
|
|
|
|
|
if ( dist < edge_distance_threshold && dist < best )
|
|
|
|
{
|
|
|
|
AF_Segment link = seg->link;
|
|
|
|
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
/* check whether all linked segments of the candidate edge */
|
|
|
|
/* can make a single edge. */
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( link )
|
|
|
|
{
|
2013-06-04 10:30:48 +02:00
|
|
|
AF_Segment seg1 = edge->first;
|
2006-02-09 15:17:04 +01:00
|
|
|
FT_Pos dist2 = 0;
|
|
|
|
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
2013-06-04 10:30:48 +02:00
|
|
|
AF_Segment link1 = seg1->link;
|
|
|
|
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( link1 )
|
|
|
|
{
|
|
|
|
dist2 = AF_SEGMENT_DIST( link, link1 );
|
|
|
|
if ( dist2 >= edge_distance_threshold )
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
} while ( ( seg1 = seg1->edge_next ) != edge->first );
|
|
|
|
|
|
|
|
if ( dist2 >= edge_distance_threshold )
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
best = dist;
|
2006-02-09 15:17:04 +01:00
|
|
|
found = edge;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !found )
|
|
|
|
{
|
2006-02-10 23:15:22 +01:00
|
|
|
AF_Edge edge;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* insert a new edge in the list and */
|
|
|
|
/* sort according to the position */
|
2007-07-07 09:30:40 +02:00
|
|
|
error = af_axis_hints_new_edge( axis, seg->pos,
|
|
|
|
(AF_Direction)seg->dir,
|
|
|
|
memory, &edge );
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( error )
|
|
|
|
goto Exit;
|
|
|
|
|
|
|
|
/* add the segment to the new edge's list */
|
|
|
|
FT_ZERO( edge );
|
|
|
|
|
|
|
|
edge->first = seg;
|
|
|
|
edge->last = seg;
|
|
|
|
edge->fpos = seg->pos;
|
|
|
|
edge->opos = edge->pos = FT_MulFix( seg->pos, scale );
|
|
|
|
seg->edge_next = seg;
|
|
|
|
edge->dir = seg->dir;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* if an edge was found, simply add the segment to the edge's */
|
|
|
|
/* list */
|
|
|
|
seg->edge_next = found->first;
|
|
|
|
found->last->edge_next = seg;
|
|
|
|
found->last = seg;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/******************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Good, we now compute each edge's properties according to the */
|
|
|
|
/* segments found on its position. Basically, these are */
|
|
|
|
/* */
|
|
|
|
/* - the edge's main direction */
|
|
|
|
/* - stem edge, serif edge or both (which defaults to stem then) */
|
|
|
|
/* - rounded edge, straight or both (which defaults to straight) */
|
|
|
|
/* - link for edge */
|
|
|
|
/* */
|
|
|
|
/******************************************************************/
|
|
|
|
|
|
|
|
/* first of all, set the `edge' field in each segment -- this is */
|
|
|
|
/* required in order to compute edge links */
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/*
|
|
|
|
* Note that removing this loop and setting the `edge' field of each
|
|
|
|
* segment directly in the code above slows down execution speed for
|
|
|
|
* some reasons on platforms like the Sun.
|
|
|
|
*/
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
|
|
|
AF_Edge edges = axis->edges;
|
|
|
|
AF_Edge edge_limit = edges + axis->num_edges;
|
|
|
|
AF_Edge edge;
|
|
|
|
|
|
|
|
|
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
seg = edge->first;
|
|
|
|
if ( seg )
|
|
|
|
do
|
|
|
|
{
|
|
|
|
seg->edge = edge;
|
|
|
|
seg = seg->edge_next;
|
|
|
|
|
|
|
|
} while ( seg != edge->first );
|
|
|
|
}
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
/* now compute each edge properties */
|
2006-02-09 15:17:04 +01:00
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
FT_Int is_round = 0; /* does it contain round segments? */
|
|
|
|
FT_Int is_straight = 0; /* does it contain straight segments? */
|
|
|
|
|
|
|
|
|
|
|
|
seg = edge->first;
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
FT_Bool is_serif;
|
|
|
|
|
|
|
|
|
|
|
|
/* check for roundness of segment */
|
|
|
|
if ( seg->flags & AF_EDGE_ROUND )
|
|
|
|
is_round++;
|
|
|
|
else
|
|
|
|
is_straight++;
|
|
|
|
|
|
|
|
/* check for links -- if seg->serif is set, then seg->link must */
|
|
|
|
/* be ignored */
|
|
|
|
is_serif = (FT_Bool)( seg->serif && seg->serif->edge != edge );
|
|
|
|
|
|
|
|
if ( seg->link || is_serif )
|
|
|
|
{
|
|
|
|
AF_Edge edge2;
|
|
|
|
AF_Segment seg2;
|
|
|
|
|
|
|
|
|
|
|
|
edge2 = edge->link;
|
|
|
|
seg2 = seg->link;
|
|
|
|
|
|
|
|
if ( is_serif )
|
|
|
|
{
|
|
|
|
seg2 = seg->serif;
|
|
|
|
edge2 = edge->serif;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( edge2 )
|
|
|
|
{
|
|
|
|
FT_Pos edge_delta;
|
|
|
|
FT_Pos seg_delta;
|
|
|
|
|
|
|
|
|
|
|
|
edge_delta = edge->fpos - edge2->fpos;
|
|
|
|
if ( edge_delta < 0 )
|
|
|
|
edge_delta = -edge_delta;
|
|
|
|
|
|
|
|
seg_delta = AF_SEGMENT_DIST( seg, seg2 );
|
|
|
|
|
|
|
|
if ( seg_delta < edge_delta )
|
|
|
|
edge2 = seg2->edge;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
edge2 = seg2->edge;
|
|
|
|
|
|
|
|
if ( is_serif )
|
|
|
|
{
|
|
|
|
edge->serif = edge2;
|
|
|
|
edge2->flags |= AF_EDGE_SERIF;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
edge->link = edge2;
|
|
|
|
}
|
|
|
|
|
|
|
|
seg = seg->edge_next;
|
|
|
|
|
|
|
|
} while ( seg != edge->first );
|
|
|
|
|
|
|
|
/* set the round/straight flags */
|
|
|
|
edge->flags = AF_EDGE_NORMAL;
|
|
|
|
|
|
|
|
if ( is_round > 0 && is_round >= is_straight )
|
|
|
|
edge->flags |= AF_EDGE_ROUND;
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
/* get rid of serifs if link is set */
|
2006-02-09 15:17:04 +01:00
|
|
|
/* XXX: This gets rid of many unpleasant artefacts! */
|
|
|
|
/* Example: the `c' in cour.pfa at size 13 */
|
|
|
|
|
|
|
|
if ( edge->serif && edge->link )
|
|
|
|
edge->serif = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Exit:
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Detect segments and edges for given dimension. */
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
static FT_Error
|
|
|
|
af_cjk_hints_detect_features( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
|
|
|
FT_Error error;
|
|
|
|
|
|
|
|
|
|
|
|
error = af_cjk_hints_compute_segments( hints, dim );
|
|
|
|
if ( !error )
|
|
|
|
{
|
|
|
|
af_cjk_hints_link_segments( hints, dim );
|
|
|
|
|
|
|
|
error = af_cjk_hints_compute_edges( hints, dim );
|
|
|
|
}
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Compute all edges which lie within blue zones. */
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
FT_LOCAL_DEF( void )
|
2011-05-09 09:48:49 +02:00
|
|
|
af_cjk_hints_compute_blue_edges( AF_GlyphHints hints,
|
|
|
|
AF_CJKMetrics metrics,
|
|
|
|
AF_Dimension dim )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
AF_AxisHints axis = &hints->axis[dim];
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
AF_Edge edge = axis->edges;
|
|
|
|
AF_Edge edge_limit = edge + axis->num_edges;
|
2011-05-09 09:48:49 +02:00
|
|
|
AF_CJKAxis cjk = &metrics->axis[dim];
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
FT_Fixed scale = cjk->scale;
|
|
|
|
FT_Pos best_dist0; /* initial threshold */
|
|
|
|
|
|
|
|
|
|
|
|
/* compute the initial threshold as a fraction of the EM size */
|
|
|
|
best_dist0 = FT_MulFix( metrics->units_per_em / 40, scale );
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
if ( best_dist0 > 64 / 2 ) /* maximum 1/2 pixel */
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
best_dist0 = 64 / 2;
|
|
|
|
|
|
|
|
/* compute which blue zones are active, i.e. have their scaled */
|
|
|
|
/* size < 3/4 pixels */
|
|
|
|
|
2011-05-09 09:48:49 +02:00
|
|
|
/* If the distant between an edge and a blue zone is shorter than */
|
|
|
|
/* best_dist0, set the blue zone for the edge. Then search for */
|
|
|
|
/* the blue zone with the smallest best_dist to the edge. */
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
for ( ; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
FT_UInt bb;
|
|
|
|
AF_Width best_blue = NULL;
|
|
|
|
FT_Pos best_dist = best_dist0;
|
|
|
|
|
|
|
|
|
|
|
|
for ( bb = 0; bb < cjk->blue_count; bb++ )
|
|
|
|
{
|
2011-05-09 09:48:49 +02:00
|
|
|
AF_CJKBlue blue = cjk->blues + bb;
|
|
|
|
FT_Bool is_top_right_blue, is_major_dir;
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
/* skip inactive blue zones (i.e., those that are too small) */
|
|
|
|
if ( !( blue->flags & AF_CJK_BLUE_ACTIVE ) )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
/* if it is a top zone, check for right edges -- if it is a bottom */
|
|
|
|
/* zone, check for left edges */
|
|
|
|
/* */
|
|
|
|
/* of course, that's for TrueType */
|
2013-08-25 19:47:26 +02:00
|
|
|
is_top_right_blue = FT_BOOL( blue->flags & AF_CJK_BLUE_TOP );
|
|
|
|
is_major_dir = FT_BOOL( edge->dir == axis->major_dir );
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
/* if it is a top zone, the edge must be against the major */
|
|
|
|
/* direction; if it is a bottom zone, it must be in the major */
|
|
|
|
/* direction */
|
|
|
|
if ( is_top_right_blue ^ is_major_dir )
|
|
|
|
{
|
|
|
|
FT_Pos dist;
|
|
|
|
AF_Width compare;
|
|
|
|
|
|
|
|
|
|
|
|
/* Compare the edge to the closest blue zone type */
|
|
|
|
if ( FT_ABS( edge->fpos - blue->ref.org ) >
|
|
|
|
FT_ABS( edge->fpos - blue->shoot.org ) )
|
|
|
|
compare = &blue->shoot;
|
|
|
|
else
|
|
|
|
compare = &blue->ref;
|
|
|
|
|
|
|
|
dist = edge->fpos - compare->org;
|
2011-05-09 09:48:49 +02:00
|
|
|
if ( dist < 0 )
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
dist = -dist;
|
|
|
|
|
|
|
|
dist = FT_MulFix( dist, scale );
|
|
|
|
if ( dist < best_dist )
|
|
|
|
{
|
|
|
|
best_dist = dist;
|
|
|
|
best_blue = compare;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( best_blue )
|
|
|
|
edge->blue_edge = best_blue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Initalize hinting engine. */
|
|
|
|
|
2007-07-07 09:30:40 +02:00
|
|
|
FT_LOCAL_DEF( FT_Error )
|
2011-05-09 09:48:49 +02:00
|
|
|
af_cjk_hints_init( AF_GlyphHints hints,
|
|
|
|
AF_CJKMetrics metrics )
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
|
|
|
FT_Render_Mode mode;
|
|
|
|
FT_UInt32 scaler_flags, other_flags;
|
|
|
|
|
|
|
|
|
|
|
|
af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* correct x_scale and y_scale when needed, since they may have
|
|
|
|
* been modified af_cjk_scale_dim above
|
|
|
|
*/
|
|
|
|
hints->x_scale = metrics->axis[AF_DIMENSION_HORZ].scale;
|
|
|
|
hints->x_delta = metrics->axis[AF_DIMENSION_HORZ].delta;
|
|
|
|
hints->y_scale = metrics->axis[AF_DIMENSION_VERT].scale;
|
|
|
|
hints->y_delta = metrics->axis[AF_DIMENSION_VERT].delta;
|
|
|
|
|
|
|
|
/* compute flags depending on render mode, etc. */
|
|
|
|
mode = metrics->root.scaler.render_mode;
|
|
|
|
|
2011-03-02 03:52:36 +01:00
|
|
|
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
|
|
|
|
metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
scaler_flags = hints->scaler_flags;
|
|
|
|
other_flags = 0;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We snap the width of vertical stems for the monochrome and
|
|
|
|
* horizontal LCD rendering targets only.
|
|
|
|
*/
|
|
|
|
if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD )
|
|
|
|
other_flags |= AF_LATIN_HINTS_HORZ_SNAP;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We snap the width of horizontal stems for the monochrome and
|
|
|
|
* vertical LCD rendering targets only.
|
|
|
|
*/
|
|
|
|
if ( mode == FT_RENDER_MODE_MONO || mode == FT_RENDER_MODE_LCD_V )
|
|
|
|
other_flags |= AF_LATIN_HINTS_VERT_SNAP;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* We adjust stems to full pixels only if we don't use the `light' mode.
|
|
|
|
*/
|
|
|
|
if ( mode != FT_RENDER_MODE_LIGHT )
|
|
|
|
other_flags |= AF_LATIN_HINTS_STEM_ADJUST;
|
|
|
|
|
|
|
|
if ( mode == FT_RENDER_MODE_MONO )
|
|
|
|
other_flags |= AF_LATIN_HINTS_MONO;
|
|
|
|
|
|
|
|
scaler_flags |= AF_SCALER_FLAG_NO_ADVANCE;
|
|
|
|
|
|
|
|
hints->scaler_flags = scaler_flags;
|
|
|
|
hints->other_flags = other_flags;
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
return FT_Err_Ok;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
2006-02-10 23:15:22 +01:00
|
|
|
/***** C J K G L Y P H G R I D - F I T T I N G *****/
|
2006-02-09 15:17:04 +01:00
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Snap a given width in scaled coordinates to one of the */
|
|
|
|
/* current standard widths. */
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
static FT_Pos
|
|
|
|
af_cjk_snap_width( AF_Width widths,
|
|
|
|
FT_Int count,
|
|
|
|
FT_Pos width )
|
|
|
|
{
|
|
|
|
int n;
|
|
|
|
FT_Pos best = 64 + 32 + 2;
|
|
|
|
FT_Pos reference = width;
|
|
|
|
FT_Pos scaled;
|
|
|
|
|
|
|
|
|
|
|
|
for ( n = 0; n < count; n++ )
|
|
|
|
{
|
|
|
|
FT_Pos w;
|
|
|
|
FT_Pos dist;
|
|
|
|
|
|
|
|
|
|
|
|
w = widths[n].cur;
|
|
|
|
dist = width - w;
|
|
|
|
if ( dist < 0 )
|
|
|
|
dist = -dist;
|
|
|
|
if ( dist < best )
|
|
|
|
{
|
|
|
|
best = dist;
|
|
|
|
reference = w;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
scaled = FT_PIX_ROUND( reference );
|
|
|
|
|
|
|
|
if ( width >= reference )
|
|
|
|
{
|
|
|
|
if ( width < scaled + 48 )
|
|
|
|
width = reference;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( width > scaled - 48 )
|
|
|
|
width = reference;
|
|
|
|
}
|
|
|
|
|
|
|
|
return width;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Compute the snapped width of a given stem. */
|
|
|
|
/* There is a lot of voodoo in this function; changing the hard-coded */
|
|
|
|
/* parameters influence the whole hinting process. */
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
static FT_Pos
|
|
|
|
af_cjk_compute_stem_width( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim,
|
|
|
|
FT_Pos width,
|
|
|
|
AF_Edge_Flags base_flags,
|
|
|
|
AF_Edge_Flags stem_flags )
|
|
|
|
{
|
2013-08-25 13:07:08 +02:00
|
|
|
AF_CJKMetrics metrics = (AF_CJKMetrics)hints->metrics;
|
|
|
|
AF_CJKAxis axis = &metrics->axis[dim];
|
2011-05-09 09:48:49 +02:00
|
|
|
FT_Pos dist = width;
|
|
|
|
FT_Int sign = 0;
|
|
|
|
FT_Bool vertical = FT_BOOL( dim == AF_DIMENSION_VERT );
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
FT_UNUSED( base_flags );
|
|
|
|
FT_UNUSED( stem_flags );
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
|
|
|
return width;
|
|
|
|
|
|
|
|
if ( dist < 0 )
|
|
|
|
{
|
|
|
|
dist = -width;
|
|
|
|
sign = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ( vertical && !AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) ||
|
|
|
|
( !vertical && !AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) )
|
|
|
|
{
|
|
|
|
/* smooth hinting process: very lightly quantize the stem width */
|
|
|
|
|
|
|
|
if ( axis->width_count > 0 )
|
|
|
|
{
|
|
|
|
if ( FT_ABS( dist - axis->widths[0].cur ) < 40 )
|
|
|
|
{
|
|
|
|
dist = axis->widths[0].cur;
|
|
|
|
if ( dist < 48 )
|
|
|
|
dist = 48;
|
|
|
|
|
|
|
|
goto Done_Width;
|
|
|
|
}
|
|
|
|
}
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( dist < 54 )
|
|
|
|
dist += ( 54 - dist ) / 2 ;
|
|
|
|
else if ( dist < 3 * 64 )
|
|
|
|
{
|
|
|
|
FT_Pos delta;
|
|
|
|
|
|
|
|
|
|
|
|
delta = dist & 63;
|
|
|
|
dist &= -64;
|
|
|
|
|
|
|
|
if ( delta < 10 )
|
|
|
|
dist += delta;
|
|
|
|
else if ( delta < 22 )
|
|
|
|
dist += 10;
|
|
|
|
else if ( delta < 42 )
|
|
|
|
dist += delta;
|
|
|
|
else if ( delta < 54 )
|
|
|
|
dist += 54;
|
|
|
|
else
|
|
|
|
dist += delta;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* strong hinting process: snap the stem width to integer pixels */
|
|
|
|
|
|
|
|
dist = af_cjk_snap_width( axis->widths, axis->width_count, dist );
|
|
|
|
|
|
|
|
if ( vertical )
|
|
|
|
{
|
|
|
|
/* in the case of vertical hinting, always round */
|
|
|
|
/* the stem heights to integer pixels */
|
|
|
|
|
|
|
|
if ( dist >= 64 )
|
|
|
|
dist = ( dist + 16 ) & ~63;
|
|
|
|
else
|
|
|
|
dist = 64;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( AF_LATIN_HINTS_DO_MONO( hints ) )
|
|
|
|
{
|
|
|
|
/* monochrome horizontal hinting: snap widths to integer pixels */
|
|
|
|
/* with a different threshold */
|
|
|
|
|
|
|
|
if ( dist < 64 )
|
|
|
|
dist = 64;
|
|
|
|
else
|
|
|
|
dist = ( dist + 32 ) & ~63;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* for horizontal anti-aliased hinting, we adopt a more subtle */
|
|
|
|
/* approach: we strengthen small stems, round stems whose size */
|
|
|
|
/* is between 1 and 2 pixels to an integer, otherwise nothing */
|
|
|
|
|
|
|
|
if ( dist < 48 )
|
|
|
|
dist = ( dist + 64 ) >> 1;
|
|
|
|
|
|
|
|
else if ( dist < 128 )
|
|
|
|
dist = ( dist + 22 ) & ~63;
|
|
|
|
else
|
|
|
|
/* round otherwise to prevent color fringes in LCD mode */
|
|
|
|
dist = ( dist + 32 ) & ~63;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Done_Width:
|
|
|
|
if ( sign )
|
|
|
|
dist = -dist;
|
|
|
|
|
|
|
|
return dist;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Align one stem edge relative to the previous stem edge. */
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
static void
|
|
|
|
af_cjk_align_linked_edge( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim,
|
|
|
|
AF_Edge base_edge,
|
|
|
|
AF_Edge stem_edge )
|
|
|
|
{
|
|
|
|
FT_Pos dist = stem_edge->opos - base_edge->opos;
|
|
|
|
|
|
|
|
FT_Pos fitted_width = af_cjk_compute_stem_width(
|
|
|
|
hints, dim, dist,
|
|
|
|
(AF_Edge_Flags)base_edge->flags,
|
|
|
|
(AF_Edge_Flags)stem_edge->flags );
|
|
|
|
|
|
|
|
|
|
|
|
stem_edge->pos = base_edge->pos + fitted_width;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Shift the coordinates of the `serif' edge by the same amount */
|
|
|
|
/* as the corresponding `base' edge has been moved already. */
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
static void
|
|
|
|
af_cjk_align_serif_edge( AF_GlyphHints hints,
|
|
|
|
AF_Edge base,
|
|
|
|
AF_Edge serif )
|
|
|
|
{
|
|
|
|
FT_UNUSED( hints );
|
|
|
|
|
|
|
|
serif->pos = base->pos + ( serif->opos - base->opos );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/**** ****/
|
|
|
|
/**** E D G E H I N T I N G ****/
|
|
|
|
/**** ****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
#define AF_LIGHT_MODE_MAX_HORZ_GAP 9
|
|
|
|
#define AF_LIGHT_MODE_MAX_VERT_GAP 15
|
|
|
|
#define AF_LIGHT_MODE_MAX_DELTA_ABS 14
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
static FT_Pos
|
|
|
|
af_hint_normal_stem( AF_GlyphHints hints,
|
|
|
|
AF_Edge edge,
|
|
|
|
AF_Edge edge2,
|
|
|
|
FT_Pos anchor,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
2006-02-10 23:15:22 +01:00
|
|
|
FT_Pos org_len, cur_len, org_center;
|
|
|
|
FT_Pos cur_pos1, cur_pos2;
|
|
|
|
FT_Pos d_off1, u_off1, d_off2, u_off2, delta;
|
|
|
|
FT_Pos offset;
|
|
|
|
FT_Pos threshold = 64;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
|
|
|
|
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
|
|
|
{
|
|
|
|
if ( ( edge->flags & AF_EDGE_ROUND ) &&
|
2006-02-10 23:15:22 +01:00
|
|
|
( edge2->flags & AF_EDGE_ROUND ) )
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
|
|
|
if ( dim == AF_DIMENSION_VERT )
|
|
|
|
threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP;
|
|
|
|
else
|
|
|
|
threshold = 64 - AF_LIGHT_MODE_MAX_VERT_GAP;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( dim == AF_DIMENSION_VERT )
|
2006-02-10 23:15:22 +01:00
|
|
|
threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP / 3;
|
2006-02-09 15:17:04 +01:00
|
|
|
else
|
2006-02-10 23:15:22 +01:00
|
|
|
threshold = 64 - AF_LIGHT_MODE_MAX_VERT_GAP / 3;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
org_len = edge2->opos - edge->opos;
|
|
|
|
cur_len = af_cjk_compute_stem_width( hints, dim, org_len,
|
2006-02-25 13:49:40 +01:00
|
|
|
(AF_Edge_Flags)edge->flags,
|
|
|
|
(AF_Edge_Flags)edge2->flags );
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
org_center = ( edge->opos + edge2->opos ) / 2 + anchor;
|
|
|
|
cur_pos1 = org_center - cur_len / 2;
|
|
|
|
cur_pos2 = cur_pos1 + cur_len;
|
|
|
|
d_off1 = cur_pos1 - FT_PIX_FLOOR( cur_pos1 );
|
|
|
|
d_off2 = cur_pos2 - FT_PIX_FLOOR( cur_pos2 );
|
|
|
|
u_off1 = 64 - d_off1;
|
|
|
|
u_off2 = 64 - d_off2;
|
|
|
|
delta = 0;
|
|
|
|
|
|
|
|
|
|
|
|
if ( d_off1 == 0 || d_off2 == 0 )
|
|
|
|
goto Exit;
|
|
|
|
|
|
|
|
if ( cur_len <= threshold )
|
|
|
|
{
|
|
|
|
if ( d_off2 < cur_len )
|
|
|
|
{
|
|
|
|
if ( u_off1 <= d_off2 )
|
|
|
|
delta = u_off1;
|
|
|
|
else
|
|
|
|
delta = -d_off2;
|
|
|
|
}
|
|
|
|
|
|
|
|
goto Exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( threshold < 64 )
|
|
|
|
{
|
|
|
|
if ( d_off1 >= threshold || u_off1 >= threshold ||
|
|
|
|
d_off2 >= threshold || u_off2 >= threshold )
|
|
|
|
goto Exit;
|
|
|
|
}
|
|
|
|
|
2012-02-29 13:45:24 +01:00
|
|
|
offset = cur_len & 63;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
if ( offset < 32 )
|
|
|
|
{
|
|
|
|
if ( u_off1 <= offset || d_off2 <= offset )
|
|
|
|
goto Exit;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
offset = 64 - threshold;
|
|
|
|
|
|
|
|
d_off1 = threshold - u_off1;
|
|
|
|
u_off1 = u_off1 - offset;
|
|
|
|
u_off2 = threshold - d_off2;
|
|
|
|
d_off2 = d_off2 - offset;
|
|
|
|
|
|
|
|
if ( d_off1 <= u_off1 )
|
|
|
|
u_off1 = -d_off1;
|
|
|
|
|
|
|
|
if ( d_off2 <= u_off2 )
|
|
|
|
u_off2 = -d_off2;
|
|
|
|
|
|
|
|
if ( FT_ABS( u_off1 ) <= FT_ABS( u_off2 ) )
|
|
|
|
delta = u_off1;
|
|
|
|
else
|
|
|
|
delta = u_off2;
|
|
|
|
|
|
|
|
Exit:
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
#if 1
|
|
|
|
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
|
|
|
{
|
|
|
|
if ( delta > AF_LIGHT_MODE_MAX_DELTA_ABS )
|
|
|
|
delta = AF_LIGHT_MODE_MAX_DELTA_ABS;
|
|
|
|
else if ( delta < -AF_LIGHT_MODE_MAX_DELTA_ABS )
|
|
|
|
delta = -AF_LIGHT_MODE_MAX_DELTA_ABS;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
cur_pos1 += delta;
|
|
|
|
|
|
|
|
if ( edge->opos < edge2->opos )
|
|
|
|
{
|
|
|
|
edge->pos = cur_pos1;
|
|
|
|
edge2->pos = cur_pos1 + cur_len;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edge->pos = cur_pos1 + cur_len;
|
|
|
|
edge2->pos = cur_pos1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return delta;
|
|
|
|
}
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* The main grid-fitting routine. */
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
static void
|
|
|
|
af_cjk_hint_edges( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
|
|
|
AF_AxisHints axis = &hints->axis[dim];
|
|
|
|
AF_Edge edges = axis->edges;
|
|
|
|
AF_Edge edge_limit = edges + axis->num_edges;
|
2009-07-31 17:32:07 +02:00
|
|
|
FT_PtrDist n_edges;
|
2006-02-09 15:17:04 +01:00
|
|
|
AF_Edge edge;
|
|
|
|
AF_Edge anchor = 0;
|
|
|
|
FT_Pos delta = 0;
|
|
|
|
FT_Int skipped = 0;
|
2011-04-21 03:58:33 +02:00
|
|
|
FT_Bool has_last_stem = FALSE;
|
|
|
|
FT_Pos last_stem_pos = 0;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2013-08-26 18:54:05 +02:00
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
FT_UInt num_actions = 0;
|
|
|
|
#endif
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2013-08-26 20:20:03 +02:00
|
|
|
FT_TRACE5(( "cjk %s edge hinting (script %d)\n",
|
|
|
|
dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
|
|
|
|
hints->metrics->script_class->script ));
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
/* we begin by aligning all stems relative to the blue zone */
|
|
|
|
|
|
|
|
if ( AF_HINTS_DO_BLUES( hints ) )
|
|
|
|
{
|
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
AF_Width blue;
|
|
|
|
AF_Edge edge1, edge2;
|
|
|
|
|
|
|
|
|
|
|
|
if ( edge->flags & AF_EDGE_DONE )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
blue = edge->blue_edge;
|
|
|
|
edge1 = NULL;
|
|
|
|
edge2 = edge->link;
|
|
|
|
|
|
|
|
if ( blue )
|
|
|
|
{
|
|
|
|
edge1 = edge;
|
|
|
|
}
|
|
|
|
else if ( edge2 && edge2->blue_edge )
|
|
|
|
{
|
|
|
|
blue = edge2->blue_edge;
|
|
|
|
edge1 = edge2;
|
|
|
|
edge2 = edge;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !edge1 )
|
|
|
|
continue;
|
|
|
|
|
2013-08-26 18:54:05 +02:00
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
FT_TRACE5(( " CJKBLUE: edge %d @%d (opos=%.2f) snapped to %.2f,"
|
|
|
|
" was %.2f\n",
|
|
|
|
edge1 - edges, edge1->fpos, edge1->opos / 64.0,
|
|
|
|
blue->fit / 64.0, edge1->pos / 64.0 ));
|
|
|
|
|
|
|
|
num_actions++;
|
|
|
|
#endif
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
edge1->pos = blue->fit;
|
|
|
|
edge1->flags |= AF_EDGE_DONE;
|
|
|
|
|
|
|
|
if ( edge2 && !edge2->blue_edge )
|
|
|
|
{
|
|
|
|
af_cjk_align_linked_edge( hints, dim, edge1, edge2 );
|
|
|
|
edge2->flags |= AF_EDGE_DONE;
|
2013-08-26 18:54:05 +02:00
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
num_actions++;
|
|
|
|
#endif
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( !anchor )
|
|
|
|
anchor = edge;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
/* now we align all stem edges. */
|
2006-02-09 15:17:04 +01:00
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
AF_Edge edge2;
|
|
|
|
|
|
|
|
|
|
|
|
if ( edge->flags & AF_EDGE_DONE )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
/* skip all non-stem edges */
|
|
|
|
edge2 = edge->link;
|
|
|
|
if ( !edge2 )
|
|
|
|
{
|
|
|
|
skipped++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2011-04-21 03:58:33 +02:00
|
|
|
/* Some CJK characters have so many stems that
|
|
|
|
* the hinter is likely to merge two adjacent ones.
|
|
|
|
* To solve this problem, if either edge of a stem
|
|
|
|
* is too close to the previous one, we avoid
|
|
|
|
* aligning the two edges, but rather interpolate
|
|
|
|
* their locations at the end of this function in
|
|
|
|
* order to preserve the space between the stems.
|
|
|
|
*/
|
|
|
|
if ( has_last_stem &&
|
|
|
|
( edge->pos < last_stem_pos + 64 ||
|
|
|
|
edge2->pos < last_stem_pos + 64 ) )
|
|
|
|
{
|
|
|
|
skipped++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
/* now align the stem */
|
2013-08-26 18:54:05 +02:00
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
/* this should not happen, but it's better to be safe */
|
|
|
|
if ( edge2->blue_edge )
|
|
|
|
{
|
|
|
|
FT_TRACE5(( "ASSERTION FAILED for edge %d\n", edge2-edges ));
|
|
|
|
|
|
|
|
af_cjk_align_linked_edge( hints, dim, edge2, edge );
|
|
|
|
edge->flags |= AF_EDGE_DONE;
|
2013-08-26 18:54:05 +02:00
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
num_actions++;
|
|
|
|
#endif
|
|
|
|
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
continue;
|
|
|
|
}
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
if ( edge2 < edge )
|
|
|
|
{
|
|
|
|
af_cjk_align_linked_edge( hints, dim, edge2, edge );
|
|
|
|
edge->flags |= AF_EDGE_DONE;
|
2013-08-26 18:54:05 +02:00
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
num_actions++;
|
|
|
|
#endif
|
|
|
|
|
2011-04-21 03:58:33 +02:00
|
|
|
/* We rarely reaches here it seems;
|
|
|
|
* usually the two edges belonging
|
|
|
|
* to one stem are marked as DONE together
|
|
|
|
*/
|
|
|
|
has_last_stem = TRUE;
|
|
|
|
last_stem_pos = edge->pos;
|
2006-02-09 15:17:04 +01:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( dim != AF_DIMENSION_VERT && !anchor )
|
|
|
|
{
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
#if 0
|
|
|
|
if ( fixedpitch )
|
|
|
|
{
|
|
|
|
AF_Edge left = edge;
|
|
|
|
AF_Edge right = edge_limit - 1;
|
|
|
|
AF_EdgeRec left1, left2, right1, right2;
|
|
|
|
FT_Pos target, center1, center2;
|
|
|
|
FT_Pos delta1, delta2, d1, d2;
|
|
|
|
|
|
|
|
|
|
|
|
while ( right > left && !right->link )
|
|
|
|
right--;
|
|
|
|
|
|
|
|
left1 = *left;
|
|
|
|
left2 = *left->link;
|
|
|
|
right1 = *right->link;
|
|
|
|
right2 = *right;
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
delta = ( ( ( hinter->pp2.x + 32 ) & -64 ) - hinter->pp2.x ) / 2;
|
|
|
|
target = left->opos + ( right->opos - left->opos ) / 2 + delta - 16;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
delta1 = delta;
|
|
|
|
delta1 += af_hint_normal_stem( hints, left, left->link,
|
2006-02-10 23:15:22 +01:00
|
|
|
delta1, 0 );
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
if ( left->link != right )
|
|
|
|
af_hint_normal_stem( hints, right->link, right, delta1, 0 );
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
center1 = left->pos + ( right->pos - left->pos ) / 2;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
if ( center1 >= target )
|
|
|
|
delta2 = delta - 32;
|
|
|
|
else
|
|
|
|
delta2 = delta + 32;
|
|
|
|
|
|
|
|
delta2 += af_hint_normal_stem( hints, &left1, &left2, delta2, 0 );
|
|
|
|
|
|
|
|
if ( delta1 != delta2 )
|
|
|
|
{
|
|
|
|
if ( left->link != right )
|
|
|
|
af_hint_normal_stem( hints, &right1, &right2, delta2, 0 );
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
center2 = left1.pos + ( right2.pos - left1.pos ) / 2;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
d1 = center1 - target;
|
|
|
|
d2 = center2 - target;
|
|
|
|
|
|
|
|
if ( FT_ABS( d2 ) < FT_ABS( d1 ) )
|
|
|
|
{
|
|
|
|
left->pos = left1.pos;
|
|
|
|
left->link->pos = left2.pos;
|
|
|
|
|
|
|
|
if ( left->link != right )
|
|
|
|
{
|
|
|
|
right->link->pos = right1.pos;
|
|
|
|
right->pos = right2.pos;
|
|
|
|
}
|
|
|
|
|
|
|
|
delta1 = delta2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
delta = delta1;
|
|
|
|
right->link->flags |= AF_EDGE_DONE;
|
|
|
|
right->flags |= AF_EDGE_DONE;
|
|
|
|
}
|
|
|
|
else
|
2006-02-10 23:15:22 +01:00
|
|
|
|
|
|
|
#endif /* 0 */
|
|
|
|
|
2006-02-25 13:49:40 +01:00
|
|
|
delta = af_hint_normal_stem( hints, edge, edge2, 0,
|
|
|
|
AF_DIMENSION_HORZ );
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
af_hint_normal_stem( hints, edge, edge2, delta, dim );
|
|
|
|
|
|
|
|
#if 0
|
2006-02-10 23:15:22 +01:00
|
|
|
printf( "stem (%d,%d) adjusted (%.1f,%.1f)\n",
|
|
|
|
edge - edges, edge2 - edges,
|
|
|
|
( edge->pos - edge->opos ) / 64.0,
|
|
|
|
( edge2->pos - edge2->opos ) / 64.0 );
|
2006-02-09 15:17:04 +01:00
|
|
|
#endif
|
|
|
|
|
|
|
|
anchor = edge;
|
|
|
|
edge->flags |= AF_EDGE_DONE;
|
|
|
|
edge2->flags |= AF_EDGE_DONE;
|
2011-04-21 03:58:33 +02:00
|
|
|
has_last_stem = TRUE;
|
|
|
|
last_stem_pos = edge2->pos;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* make sure that lowercase m's maintain their symmetry */
|
|
|
|
|
|
|
|
/* In general, lowercase m's have six vertical edges if they are sans */
|
|
|
|
/* serif, or twelve if they are with serifs. This implementation is */
|
|
|
|
/* based on that assumption, and seems to work very well with most */
|
|
|
|
/* faces. However, if for a certain face this assumption is not */
|
|
|
|
/* true, the m is just rendered like before. In addition, any stem */
|
|
|
|
/* correction will only be applied to symmetrical glyphs (even if the */
|
|
|
|
/* glyph is not an m), so the potential for unwanted distortion is */
|
|
|
|
/* relatively low. */
|
|
|
|
|
|
|
|
/* We don't handle horizontal edges since we can't easily assure that */
|
|
|
|
/* the third (lowest) stem aligns with the base line; it might end up */
|
|
|
|
/* one pixel higher or lower. */
|
|
|
|
|
|
|
|
n_edges = edge_limit - edges;
|
|
|
|
if ( dim == AF_DIMENSION_HORZ && ( n_edges == 6 || n_edges == 12 ) )
|
|
|
|
{
|
|
|
|
AF_Edge edge1, edge2, edge3;
|
|
|
|
FT_Pos dist1, dist2, span;
|
|
|
|
|
|
|
|
|
|
|
|
if ( n_edges == 6 )
|
|
|
|
{
|
|
|
|
edge1 = edges;
|
|
|
|
edge2 = edges + 2;
|
|
|
|
edge3 = edges + 4;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edge1 = edges + 1;
|
|
|
|
edge2 = edges + 5;
|
|
|
|
edge3 = edges + 9;
|
|
|
|
}
|
|
|
|
|
|
|
|
dist1 = edge2->opos - edge1->opos;
|
|
|
|
dist2 = edge3->opos - edge2->opos;
|
|
|
|
|
|
|
|
span = dist1 - dist2;
|
|
|
|
if ( span < 0 )
|
|
|
|
span = -span;
|
|
|
|
|
|
|
|
if ( edge1->link == edge1 + 1 &&
|
|
|
|
edge2->link == edge2 + 1 &&
|
|
|
|
edge3->link == edge3 + 1 && span < 8 )
|
|
|
|
{
|
|
|
|
delta = edge3->pos - ( 2 * edge2->pos - edge1->pos );
|
|
|
|
edge3->pos -= delta;
|
|
|
|
if ( edge3->link )
|
|
|
|
edge3->link->pos -= delta;
|
|
|
|
|
|
|
|
/* move the serifs along with the stem */
|
|
|
|
if ( n_edges == 12 )
|
|
|
|
{
|
|
|
|
( edges + 8 )->pos -= delta;
|
|
|
|
( edges + 11 )->pos -= delta;
|
|
|
|
}
|
|
|
|
|
|
|
|
edge3->flags |= AF_EDGE_DONE;
|
|
|
|
if ( edge3->link )
|
|
|
|
edge3->link->flags |= AF_EDGE_DONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !skipped )
|
2013-08-26 18:54:05 +02:00
|
|
|
goto Exit;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* now hint the remaining edges (serifs and single) in order
|
|
|
|
* to complete our processing
|
|
|
|
*/
|
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
if ( edge->flags & AF_EDGE_DONE )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ( edge->serif )
|
|
|
|
{
|
|
|
|
af_cjk_align_serif_edge( hints, edge->serif, edge );
|
|
|
|
edge->flags |= AF_EDGE_DONE;
|
|
|
|
skipped--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !skipped )
|
2013-08-26 18:54:05 +02:00
|
|
|
goto Exit;
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
AF_Edge before, after;
|
|
|
|
|
|
|
|
|
|
|
|
if ( edge->flags & AF_EDGE_DONE )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
before = after = edge;
|
|
|
|
|
|
|
|
while ( --before >= edges )
|
|
|
|
if ( before->flags & AF_EDGE_DONE )
|
|
|
|
break;
|
|
|
|
|
|
|
|
while ( ++after < edge_limit )
|
|
|
|
if ( after->flags & AF_EDGE_DONE )
|
|
|
|
break;
|
|
|
|
|
|
|
|
if ( before >= edges || after < edge_limit )
|
|
|
|
{
|
|
|
|
if ( before < edges )
|
|
|
|
af_cjk_align_serif_edge( hints, after, edge );
|
|
|
|
else if ( after >= edge_limit )
|
|
|
|
af_cjk_align_serif_edge( hints, before, edge );
|
|
|
|
else
|
2008-12-21 10:46:31 +01:00
|
|
|
{
|
|
|
|
if ( after->fpos == before->fpos )
|
|
|
|
edge->pos = before->pos;
|
|
|
|
else
|
|
|
|
edge->pos = before->pos +
|
|
|
|
FT_MulDiv( edge->fpos - before->fpos,
|
|
|
|
after->pos - before->pos,
|
|
|
|
after->fpos - before->fpos );
|
|
|
|
}
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
}
|
2013-08-26 18:54:05 +02:00
|
|
|
|
|
|
|
Exit:
|
|
|
|
|
|
|
|
#ifdef FT_DEBUG_LEVEL_TRACE
|
|
|
|
if ( !num_actions )
|
|
|
|
FT_TRACE5(( " (none)\n" ));
|
|
|
|
FT_TRACE5(( "\n" ));
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return;
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
af_cjk_align_edge_points( AF_GlyphHints hints,
|
|
|
|
AF_Dimension dim )
|
|
|
|
{
|
|
|
|
AF_AxisHints axis = & hints->axis[dim];
|
|
|
|
AF_Edge edges = axis->edges;
|
|
|
|
AF_Edge edge_limit = edges + axis->num_edges;
|
|
|
|
AF_Edge edge;
|
|
|
|
FT_Bool snapping;
|
|
|
|
|
|
|
|
|
* builds/win32/visualc/freetype.dsp: updating the project file, adding
missing base source files (e.g. ftstroke.c, ftxf86.c, etc...)
* src/autofit/afcjk.c, src/autofit/aflatin.c, src/base/ftobjs.c,
src/cff/cffobjs.c, src/cid/cidobjs.c, src/pfr/pfrobjs.c,
src/sfnt/sfobjs.c, src/sfnt/ttmtx.c, src/truetype/ttpload.c,
src/truetype/ttpload.h, src/type1/t1afm.c, src/type1/t1objs.c:
removing compiler warnings when building with Visual C++ 6 and /W4
2006-03-20 14:32:33 +01:00
|
|
|
snapping = FT_BOOL( ( dim == AF_DIMENSION_HORZ &&
|
|
|
|
AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) ||
|
|
|
|
( dim == AF_DIMENSION_VERT &&
|
|
|
|
AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) );
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
for ( edge = edges; edge < edge_limit; edge++ )
|
|
|
|
{
|
|
|
|
/* move the points of each segment */
|
|
|
|
/* in each edge to the edge's position */
|
|
|
|
AF_Segment seg = edge->first;
|
|
|
|
|
|
|
|
|
|
|
|
if ( snapping )
|
|
|
|
{
|
|
|
|
do
|
|
|
|
{
|
|
|
|
AF_Point point = seg->first;
|
|
|
|
|
|
|
|
|
|
|
|
for (;;)
|
|
|
|
{
|
|
|
|
if ( dim == AF_DIMENSION_HORZ )
|
|
|
|
{
|
|
|
|
point->x = edge->pos;
|
|
|
|
point->flags |= AF_FLAG_TOUCH_X;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
point->y = edge->pos;
|
|
|
|
point->flags |= AF_FLAG_TOUCH_Y;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( point == seg->last )
|
|
|
|
break;
|
|
|
|
|
|
|
|
point = point->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
seg = seg->edge_next;
|
|
|
|
|
|
|
|
} while ( seg != edge->first );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FT_Pos delta = edge->pos - edge->opos;
|
|
|
|
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
AF_Point point = seg->first;
|
|
|
|
|
|
|
|
|
|
|
|
for (;;)
|
|
|
|
{
|
|
|
|
if ( dim == AF_DIMENSION_HORZ )
|
|
|
|
{
|
|
|
|
point->x += delta;
|
|
|
|
point->flags |= AF_FLAG_TOUCH_X;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
point->y += delta;
|
|
|
|
point->flags |= AF_FLAG_TOUCH_Y;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( point == seg->last )
|
|
|
|
break;
|
|
|
|
|
|
|
|
point = point->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
seg = seg->edge_next;
|
|
|
|
|
|
|
|
} while ( seg != edge->first );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-08-25 13:07:08 +02:00
|
|
|
/* Apply the complete hinting algorithm to a CJK glyph. */
|
|
|
|
|
2007-07-07 09:30:40 +02:00
|
|
|
FT_LOCAL_DEF( FT_Error )
|
2011-05-09 09:48:49 +02:00
|
|
|
af_cjk_hints_apply( AF_GlyphHints hints,
|
|
|
|
FT_Outline* outline,
|
|
|
|
AF_CJKMetrics metrics )
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
|
|
|
FT_Error error;
|
|
|
|
int dim;
|
|
|
|
|
|
|
|
FT_UNUSED( metrics );
|
|
|
|
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2010-05-22 07:43:22 +02:00
|
|
|
error = af_glyph_hints_reload( hints, outline );
|
2006-02-09 15:17:04 +01:00
|
|
|
if ( error )
|
|
|
|
goto Exit;
|
|
|
|
|
|
|
|
/* analyze glyph outline */
|
|
|
|
if ( AF_HINTS_DO_HORIZONTAL( hints ) )
|
|
|
|
{
|
|
|
|
error = af_cjk_hints_detect_features( hints, AF_DIMENSION_HORZ );
|
|
|
|
if ( error )
|
|
|
|
goto Exit;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
af_cjk_hints_compute_blue_edges( hints, metrics, AF_DIMENSION_HORZ );
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( AF_HINTS_DO_VERTICAL( hints ) )
|
|
|
|
{
|
|
|
|
error = af_cjk_hints_detect_features( hints, AF_DIMENSION_VERT );
|
|
|
|
if ( error )
|
|
|
|
goto Exit;
|
[autofit] Add bluezones for CJK Ideographs.
To remove extremas of vertical strokes of CJK Ideographs at
low resolution and make the top and bottom horizontal stems
aligned, bluezones for CJK Ideographs are calculated from
sample glyphs. At present, vertical bluezones (bluezones
to align vertical stems) are disabled by default. For detail, see
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00070.html
http://lists.gnu.org/archive/html/freetype-devel/2011-04/msg00092.html
http://lists.gnu.org/archive/html/freetype-devel/2011-05/msg00001.html
* include/freetype/internal/fttrace.h: New trace component `afcjk'.
* src/autofit/afcjk.h (AF_CJK{Blue,Axis,Metric}Rec): Add CJK version
for AF_Latin{Blue,Axis,Metric}Rec.
(af_cjk_metrics_check_digits): Ditto, shared with Indic module.
(af_cjk_metrics_init_widths): Ditto.
(af_cjk_metrics_init): Take AF_CJKMetric instead of AF_LatinMetric.
(af_cjk_metrics_scale): Ditto (declaration).
(af_cjk_hints_init): Ditto (declaration).
(af_cjk_hints_apply): Ditto (declaration).
* src/autofit/afcjk.c (af_cjk_metrics_scale): Ditto (body).
(af_cjk_hints_init): Ditto (body).
(af_cjk_hints_apply): Ditto (body).
(af_cjk_metrics_init_widths): Duplicate af_latin_metrics_init_widths.
(af_cjk_metrics_check_digits): Duplicate af_latin_metrics_check_digits.
(af_cjk_metrics_init): Call CJK bluezone initializer.
(af_cjk_metrics_scale_dim): Add code to scale bluezones.
(af_cjk_hints_compute_blue_edges): New function, CJK version of
af_latin_hints_compute_blue_edges.
(af_cjk_metrics_init_blues): New function, CJK version of
af_latin_metrics_init_blues.
(af_cjk_hints_edges): Add code to align the edge stems to blue zones.
* src/autofit/afindic.c (af_indic_metrics_init): Take AF_CJKMetric
instead of AF_LatinMetric, and initialize as af_cjk_metrics_init.
However bluezones are not initialized.
(af_indic_metrics_scale): Take AF_CJKMetric instead of AF_LatinMetric.
(af_indic_hints_init): Ditto.
(af_indic_hints_apply): Ditto.
* docs/CHANGES: Note about CJK bluezone support.
2011-05-08 12:07:13 +02:00
|
|
|
|
|
|
|
af_cjk_hints_compute_blue_edges( hints, metrics, AF_DIMENSION_VERT );
|
2006-02-09 15:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* grid-fit the outline */
|
|
|
|
for ( dim = 0; dim < AF_DIMENSION_MAX; dim++ )
|
|
|
|
{
|
|
|
|
if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
|
|
|
|
( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
|
|
|
|
{
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2011-03-02 03:52:36 +01:00
|
|
|
#ifdef AF_CONFIG_OPTION_USE_WARPER
|
2006-02-10 23:15:22 +01:00
|
|
|
if ( dim == AF_DIMENSION_HORZ &&
|
2006-02-09 15:17:04 +01:00
|
|
|
metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL )
|
|
|
|
{
|
|
|
|
AF_WarperRec warper;
|
|
|
|
FT_Fixed scale;
|
|
|
|
FT_Pos delta;
|
|
|
|
|
|
|
|
|
2011-03-19 02:28:21 +01:00
|
|
|
af_warper_compute( &warper, hints, (AF_Dimension)dim,
|
|
|
|
&scale, &delta );
|
|
|
|
af_glyph_hints_scale_dim( hints, (AF_Dimension)dim,
|
|
|
|
scale, delta );
|
2006-02-09 15:17:04 +01:00
|
|
|
continue;
|
|
|
|
}
|
2011-03-02 03:52:36 +01:00
|
|
|
#endif /* AF_CONFIG_OPTION_USE_WARPER */
|
2006-02-10 23:15:22 +01:00
|
|
|
|
2006-02-09 15:17:04 +01:00
|
|
|
af_cjk_hint_edges( hints, (AF_Dimension)dim );
|
|
|
|
af_cjk_align_edge_points( hints, (AF_Dimension)dim );
|
|
|
|
af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
|
|
|
|
af_glyph_hints_align_weak_points( hints, (AF_Dimension)dim );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
af_glyph_hints_dump_points( hints );
|
|
|
|
af_glyph_hints_dump_segments( hints );
|
|
|
|
af_glyph_hints_dump_edges( hints );
|
|
|
|
#endif
|
|
|
|
|
|
|
|
af_glyph_hints_save( hints, outline );
|
|
|
|
|
|
|
|
Exit:
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
2006-02-10 23:15:22 +01:00
|
|
|
/***** C J K S C R I P T C L A S S *****/
|
2006-02-09 15:17:04 +01:00
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
AF_DEFINE_WRITING_SYSTEM_CLASS(
|
|
|
|
af_cjk_writing_system_class,
|
|
|
|
|
|
|
|
AF_WRITING_SYSTEM_CJK,
|
|
|
|
|
|
|
|
sizeof ( AF_CJKMetricsRec ),
|
|
|
|
|
|
|
|
(AF_Script_InitMetricsFunc) af_cjk_metrics_init,
|
|
|
|
(AF_Script_ScaleMetricsFunc)af_cjk_metrics_scale,
|
|
|
|
(AF_Script_DoneMetricsFunc) NULL,
|
|
|
|
|
|
|
|
(AF_Script_InitHintsFunc) af_cjk_hints_init,
|
|
|
|
(AF_Script_ApplyHintsFunc) af_cjk_hints_apply
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2011-04-07 07:20:38 +02:00
|
|
|
/* this corresponds to Unicode 6.0 */
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
/* XXX: this should probably fine tuned to differentiate better between */
|
|
|
|
/* scripts... */
|
|
|
|
|
|
|
|
static const AF_Script_UniRangeRec af_hani_uniranges[] =
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
2012-09-14 14:10:01 +02:00
|
|
|
AF_UNIRANGE_REC( 0x1100UL, 0x11FFUL ), /* Hangul Jamo */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0x2E80UL, 0x2EFFUL ), /* CJK Radicals Supplement */
|
|
|
|
AF_UNIRANGE_REC( 0x2F00UL, 0x2FDFUL ), /* Kangxi Radicals */
|
2011-04-07 07:20:38 +02:00
|
|
|
AF_UNIRANGE_REC( 0x2FF0UL, 0x2FFFUL ), /* Ideographic Description Characters */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0x3000UL, 0x303FUL ), /* CJK Symbols and Punctuation */
|
|
|
|
AF_UNIRANGE_REC( 0x3040UL, 0x309FUL ), /* Hiragana */
|
|
|
|
AF_UNIRANGE_REC( 0x30A0UL, 0x30FFUL ), /* Katakana */
|
|
|
|
AF_UNIRANGE_REC( 0x3100UL, 0x312FUL ), /* Bopomofo */
|
|
|
|
AF_UNIRANGE_REC( 0x3130UL, 0x318FUL ), /* Hangul Compatibility Jamo */
|
2011-04-07 07:20:38 +02:00
|
|
|
AF_UNIRANGE_REC( 0x3190UL, 0x319FUL ), /* Kanbun */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0x31A0UL, 0x31BFUL ), /* Bopomofo Extended */
|
|
|
|
AF_UNIRANGE_REC( 0x31C0UL, 0x31EFUL ), /* CJK Strokes */
|
|
|
|
AF_UNIRANGE_REC( 0x31F0UL, 0x31FFUL ), /* Katakana Phonetic Extensions */
|
|
|
|
AF_UNIRANGE_REC( 0x3200UL, 0x32FFUL ), /* Enclosed CJK Letters and Months */
|
|
|
|
AF_UNIRANGE_REC( 0x3300UL, 0x33FFUL ), /* CJK Compatibility */
|
|
|
|
AF_UNIRANGE_REC( 0x3400UL, 0x4DBFUL ), /* CJK Unified Ideographs Extension A */
|
|
|
|
AF_UNIRANGE_REC( 0x4DC0UL, 0x4DFFUL ), /* Yijing Hexagram Symbols */
|
|
|
|
AF_UNIRANGE_REC( 0x4E00UL, 0x9FFFUL ), /* CJK Unified Ideographs */
|
2011-04-07 07:20:38 +02:00
|
|
|
AF_UNIRANGE_REC( 0xA960UL, 0xA97FUL ), /* Hangul Jamo Extended-A */
|
|
|
|
AF_UNIRANGE_REC( 0xAC00UL, 0xD7AFUL ), /* Hangul Syllables */
|
|
|
|
AF_UNIRANGE_REC( 0xD7B0UL, 0xD7FFUL ), /* Hangul Jamo Extended-B */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0xF900UL, 0xFAFFUL ), /* CJK Compatibility Ideographs */
|
2011-04-07 07:20:38 +02:00
|
|
|
AF_UNIRANGE_REC( 0xFE10UL, 0xFE1FUL ), /* Vertical forms */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0xFE30UL, 0xFE4FUL ), /* CJK Compatibility Forms */
|
|
|
|
AF_UNIRANGE_REC( 0xFF00UL, 0xFFEFUL ), /* Halfwidth and Fullwidth Forms */
|
2011-04-07 07:20:38 +02:00
|
|
|
AF_UNIRANGE_REC( 0x1B000UL, 0x1B0FFUL ), /* Kana Supplement */
|
|
|
|
AF_UNIRANGE_REC( 0x1D300UL, 0x1D35FUL ), /* Tai Xuan Hing Symbols */
|
|
|
|
AF_UNIRANGE_REC( 0x1F200UL, 0x1F2FFUL ), /* Enclosed Ideographic Supplement */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0x20000UL, 0x2A6DFUL ), /* CJK Unified Ideographs Extension B */
|
2011-04-07 07:20:38 +02:00
|
|
|
AF_UNIRANGE_REC( 0x2A700UL, 0x2B73FUL ), /* CJK Unified Ideographs Extension C */
|
|
|
|
AF_UNIRANGE_REC( 0x2B740UL, 0x2B81FUL ), /* CJK Unified Ideographs Extension D */
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0x2F800UL, 0x2FA1FUL ), /* CJK Compatibility Ideographs Supplement */
|
|
|
|
AF_UNIRANGE_REC( 0UL, 0UL )
|
2006-02-09 15:17:04 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
#else /* !AF_CONFIG_OPTION_CJK */
|
|
|
|
|
|
|
|
AF_DEFINE_WRITING_SYSTEM_CLASS(
|
|
|
|
af_cjk_writing_system_class,
|
|
|
|
|
|
|
|
AF_WRITING_SYSTEM_CJK,
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2011-11-30 10:46:53 +01:00
|
|
|
sizeof ( AF_CJKMetricsRec ),
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
(AF_Script_InitMetricsFunc) NULL,
|
|
|
|
(AF_Script_ScaleMetricsFunc)NULL,
|
2006-02-09 15:17:04 +01:00
|
|
|
(AF_Script_DoneMetricsFunc) NULL,
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
(AF_Script_InitHintsFunc) NULL,
|
|
|
|
(AF_Script_ApplyHintsFunc) NULL
|
2009-04-05 17:23:38 +02:00
|
|
|
)
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
static const AF_Script_UniRangeRec af_hani_uniranges[] =
|
2006-02-09 15:17:04 +01:00
|
|
|
{
|
2009-07-31 17:30:21 +02:00
|
|
|
AF_UNIRANGE_REC( 0UL, 0UL )
|
2006-02-09 15:17:04 +01:00
|
|
|
};
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
#endif /* !AF_CONFIG_OPTION_CJK */
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
AF_DEFINE_SCRIPT_CLASS(
|
|
|
|
af_hani_script_class,
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
AF_SCRIPT_HANI,
|
2013-08-25 08:23:22 +02:00
|
|
|
AF_BLUE_STRINGSET_HANI,
|
2013-07-31 22:49:29 +02:00
|
|
|
AF_WRITING_SYSTEM_CJK,
|
2006-02-09 15:17:04 +01:00
|
|
|
|
2013-07-31 22:49:29 +02:00
|
|
|
af_hani_uniranges,
|
|
|
|
0x7530 /* 田 */
|
2009-04-05 17:23:38 +02:00
|
|
|
)
|
2006-02-09 15:17:04 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* END */
|