[autofit] Move declaration of writing systems into separate file.

This has the benefit that we don't need to duplicate the data at
different places.

* src/autofit/afwrtsys.h: New file.

* src/autofit/aftypes.h (AF_WritingSystem): Include `afwrtsys.h' to
define the enumeration values.

* src/autofit/afglobal.c: Include `afwrtsys.h' to get the writing
system specific header files.
Include `afpic.h'.
(af_writing_system_classes): Include `afwrtsys.h' to fill this
array.

* src/autofit/afpic.c: Include `afwrtsys.h' to get the writing
system specific header files.
(autofit_module_class_pic_init): Include `afwrtsys.h' for
initialization.
* src/autofit/afpic.h (AF_WRITING_SYSTEM_CLASSES_COUNT,
AF_WRITING_SYSTEM_CLASSES_REC_COUNT): Removed.  Use
`AF_WRITING_SYSTEM_MAX' instead.
This commit is contained in:
Werner Lemberg 2013-08-02 19:51:17 +02:00
parent 74a9b670e9
commit 773601da12
6 changed files with 114 additions and 53 deletions

View File

@ -1,3 +1,29 @@
2013-08-02 Werner Lemberg <wl@gnu.org>
[autofit] Move declaration of writing systems into separate file.
This has the benefit that we don't need to duplicate the data at
different places.
* src/autofit/afwrtsys.h: New file.
* src/autofit/aftypes.h (AF_WritingSystem): Include `afwrtsys.h' to
define the enumeration values.
* src/autofit/afglobal.c: Include `afwrtsys.h' to get the writing
system specific header files.
Include `afpic.h'.
(af_writing_system_classes): Include `afwrtsys.h' to fill this
array.
* src/autofit/afpic.c: Include `afwrtsys.h' to get the writing
system specific header files.
(autofit_module_class_pic_init): Include `afwrtsys.h' for
initialization.
* src/autofit/afpic.h (AF_WRITING_SYSTEM_CLASSES_COUNT,
AF_WRITING_SYSTEM_CLASSES_REC_COUNT): Removed. Use
`AF_WRITING_SYSTEM_MAX' instead.
2013-08-02 Werner Lemberg <wl@gnu.org> 2013-08-02 Werner Lemberg <wl@gnu.org>
[sfnt] Fix compilation with g++. [sfnt] Fix compilation with g++.

View File

@ -17,11 +17,11 @@
#include "afglobal.h" #include "afglobal.h"
#include "afdummy.h"
#include "aflatin.h" /* get writing system specific header files */
#include "afcjk.h" #undef WRITING_SYSTEM
#include "afindic.h" #define WRITING_SYSTEM( ws, WS ) /* empty */
#include "afpic.h" #include "afwrtsys.h"
#include "aferrors.h" #include "aferrors.h"
@ -29,22 +29,23 @@
#include "aflatin2.h" #include "aflatin2.h"
#endif #endif
#include "afpic.h"
#ifndef FT_CONFIG_OPTION_PIC #ifndef FT_CONFIG_OPTION_PIC
/* when updating this table, don't forget to update */ /* when updating this table, don't forget to update */
/* AF_WRITING_SYSTEM_CLASSES_COUNT and autofit_module_class_pic_init */ /* AF_WRITING_SYSTEM_CLASSES_COUNT and autofit_module_class_pic_init */
/* populate this list when you add new writing systems */ #undef WRITING_SYSTEM
#define WRITING_SYSTEM( ws, WS ) \
&af_ ## ws ## _writing_system_class,
FT_LOCAL_ARRAY_DEF( AF_WritingSystemClass ) FT_LOCAL_ARRAY_DEF( AF_WritingSystemClass )
af_writing_system_classes[] = af_writing_system_classes[] =
{ {
&af_dummy_writing_system_class,
&af_latin_writing_system_class, #include "afwrtsys.h"
&af_cjk_writing_system_class,
&af_indic_writing_system_class,
#ifdef FT_OPTION_AUTOFIT2
&af_latin2_writing_system_class,
#endif
NULL /* do not remove */ NULL /* do not remove */
}; };

View File

@ -43,13 +43,10 @@
/* forward declaration of PIC init functions from script classes */ /* forward declaration of PIC init functions from script classes */
#include "aflatin.h" #undef WRITING_SYSTEM
#ifdef FT_OPTION_AUTOFIT2 #define WRITING_SYSTEM( ws, WS ) /* empty */
#include "aflatin2.h"
#endif #include "afwrtsys.h"
#include "afcjk.h"
#include "afdummy.h"
#include "afindic.h"
void void
@ -100,11 +97,11 @@
FT_Init_Class_af_service_properties( &container->af_service_properties ); FT_Init_Class_af_service_properties( &container->af_service_properties );
for ( ss = 0; ss < AF_WRITING_SYSTEM_CLASSES_REC_COUNT; ss++ ) for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX - 1; ss++ )
container->af_writing_system_classes[ss] = container->af_writing_system_classes[ss] =
&container->af_writing_system_classes_rec[ss]; &container->af_writing_system_classes_rec[ss];
container->af_writing_system_classes container->af_writing_system_classes
[AF_WRITING_SYSTEM_CLASSES_COUNT - 1] = NULL; [AF_WRITING_SYSTEM_MAX - 1] = NULL;
for ( ss = 0; ss < AF_SCRIPT_CLASSES_REC_COUNT; ss++ ) for ( ss = 0; ss < AF_SCRIPT_CLASSES_REC_COUNT; ss++ )
container->af_script_classes[ss] = container->af_script_classes[ss] =
@ -112,21 +109,14 @@
container->af_script_classes container->af_script_classes
[AF_SCRIPT_CLASSES_COUNT - 1] = NULL; [AF_SCRIPT_CLASSES_COUNT - 1] = NULL;
/* add call to initialization function when you add new scripts */ #undef WRITING_SYSTEM
/* or writing systems */ #define WRITING_SYSTEM( ws, WS ) \
FT_Init_Class_af_ ## ws ## _writing_system_class( \
&container->af_writing_system_classes_rec[ss++] );
ss = 0; ss = 0;
FT_Init_Class_af_dummy_writing_system_class(
&container->af_writing_system_classes_rec[ss++] ); #include "afwrtsys.h"
FT_Init_Class_af_latin_writing_system_class(
&container->af_writing_system_classes_rec[ss++] );
FT_Init_Class_af_cjk_writing_system_class(
&container->af_writing_system_classes_rec[ss++] );
FT_Init_Class_af_indic_writing_system_class(
&container->af_writing_system_classes_rec[ss++] );
#ifdef FT_OPTION_AUTOFIT2
FT_Init_Class_af_latin2_writing_system_class(
&container->af_writing_system_classes_rec[ss++] );
#endif
ss = 0; ss = 0;
FT_Init_Class_af_dflt_script_class( FT_Init_Class_af_dflt_script_class(

View File

@ -41,20 +41,14 @@ FT_BEGIN_HEADER
#include "aftypes.h" #include "aftypes.h"
/* increase these when you add new scripts or writing systems, */
/* and update autofit_module_class_pic_init */
#ifdef FT_OPTION_AUTOFIT2 #ifdef FT_OPTION_AUTOFIT2
#define AF_WRITING_SYSTEM_CLASSES_COUNT 6
#define AF_SCRIPT_CLASSES_COUNT 6 #define AF_SCRIPT_CLASSES_COUNT 6
#else #else
#define AF_WRITING_SYSTEM_CLASSES_COUNT 5
#define AF_SCRIPT_CLASSES_COUNT 5 #define AF_SCRIPT_CLASSES_COUNT 5
#endif #endif
#define AF_SCRIPT_CLASSES_REC_COUNT \ #define AF_SCRIPT_CLASSES_REC_COUNT \
( AF_SCRIPT_CLASSES_COUNT - 1 ) ( AF_SCRIPT_CLASSES_COUNT - 1 )
#define AF_WRITING_SYSTEM_CLASSES_REC_COUNT \
( AF_WRITING_SYSTEM_CLASSES_COUNT - 1 )
typedef struct AFModulePIC_ typedef struct AFModulePIC_
@ -63,9 +57,9 @@ FT_BEGIN_HEADER
FT_Service_PropertiesRec af_service_properties; FT_Service_PropertiesRec af_service_properties;
AF_WritingSystemClass af_writing_system_classes AF_WritingSystemClass af_writing_system_classes
[AF_WRITING_SYSTEM_CLASSES_COUNT]; [AF_WRITING_SYSTEM_MAX];
AF_WritingSystemClassRec af_writing_system_classes_rec AF_WritingSystemClassRec af_writing_system_classes_rec
[AF_WRITING_SYSTEM_CLASSES_REC_COUNT]; [AF_WRITING_SYSTEM_MAX - 1];
AF_ScriptClass af_script_classes AF_ScriptClass af_script_classes
[AF_SCRIPT_CLASSES_COUNT]; [AF_SCRIPT_CLASSES_COUNT];

View File

@ -273,24 +273,23 @@ extern void* _af_debug_hints;
* outline according to the results of the glyph analyzer. * outline according to the results of the glyph analyzer.
*/ */
#define __AFWRTSYS_H__ /* don't load header files */
#undef WRITING_SYSTEM
#define WRITING_SYSTEM( ws, WS ) \
AF_WRITING_SYSTEM_ ## WS,
/* The list of known writing systems. */ /* The list of known writing systems. */
typedef enum AF_WritingSystem_ typedef enum AF_WritingSystem_
{ {
AF_WRITING_SYSTEM_DUMMY = 0,
AF_WRITING_SYSTEM_LATIN = 1,
AF_WRITING_SYSTEM_CJK = 2,
AF_WRITING_SYSTEM_INDIC = 3,
#ifdef FT_OPTION_AUTOFIT2
AF_WRITING_SYSTEM_LATIN2 = 4,
#endif
/* Add new writing systems here. Don't forget to update */ #include "afwrtsys.h"
/* the list in `afglobal.c'. */
AF_WRITING_SYSTEM_MAX /* do not remove */ AF_WRITING_SYSTEM_MAX /* do not remove */
} AF_WritingSystem; } AF_WritingSystem;
#undef __AFWRTSYS_H__
typedef struct AF_WritingSystemClassRec_ typedef struct AF_WritingSystemClassRec_
{ {

51
src/autofit/afwrtsys.h Normal file
View File

@ -0,0 +1,51 @@
/***************************************************************************/
/* */
/* afwrtsys.h */
/* */
/* Auto-fitter writing systems (specification only). */
/* */
/* Copyright 2013 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
/* this file you indicate that you have read the license and */
/* understand and accept it fully. */
/* */
/***************************************************************************/
#ifndef __AFWRTSYS_H__
#define __AFWRTSYS_H__
/* Since preprocessor directives can't create other preprocessor */
/* directives, we have to include the header files manually. */
#include "afdummy.h"
#include "aflatin.h"
#include "afcjk.h"
#include "afindic.h"
#ifdef FT_OPTION_AUTOFIT2
#include "aflatin2.h"
#endif
#endif /* __AFWRTSYS_H__ */
/* The following part can be included multiple times. */
/* Define `WRITING_SYSTEM' as needed. */
/* Add new writing systems here. */
WRITING_SYSTEM( dummy, DUMMY )
WRITING_SYSTEM( latin, LATIN )
WRITING_SYSTEM( cjk, CJK )
WRITING_SYSTEM( indic, INDIC )
#ifdef FT_OPTION_AUTOFIT2
WRITING_SYSTEM( latin2, LATIN2 )
#endif
/* END */