diff --git a/[priyesh]ChangeLog b/[priyesh]ChangeLog index f58db7792..9b6bbd585 100644 --- a/[priyesh]ChangeLog +++ b/[priyesh]ChangeLog @@ -1,3 +1,28 @@ +2020-07-02 Priyesh Kumar + + * Fixed some code layout + + * Added a new header- `include/freetype/ftlogging.h` for public APIs to + use when using logging: + 1. FT_Trace_Set_Level(): Used to change trace level of components at + runtime. + 2. FT_Trace_Set_Default_Level(): Used to set the default value of trace + level(which is supplied by env FT2_DEBUG) + + * include/freetype/internal/ftdebug.h: + 1. Added dlg support for FT_ERROR, now error messages are also written + on file if FT_LOGGING is enabled. + 2. Changed `ft_debug_init()`: now it takes an argument of type const + char* which is used to specify trace level. + + * src/base/ftobjs.c: Changed `ft_debug_init()`, now it passes an argument + to define trace level. + + * src/base/ftdebug.c: Added definitions of public APIs + `FT_Trace_Set_Default_Level()` and `FT_Trace_Set_Level()` + + * Strated working on Callback. + 2020-06-30 Priyesh Kumar * Adding new line at end of file diff --git a/include/freetype/ftlogging.h b/include/freetype/ftlogging.h new file mode 100644 index 000000000..6c0b59217 --- /dev/null +++ b/include/freetype/ftlogging.h @@ -0,0 +1,30 @@ +#include FT_CONFIG_CONFIG_H + +FT_BEGIN_HEADER + + /*************************************************************************** + * + * If FT_LOGGING is enabled, user can change the trace level at run time + * using the function `FT_Trace_Set_Level()` by passing the desired trace + * level as an argument. + * User can also set the default trace level which is supplied by + * environment variable `FT2_DEBUG` + * + */ + + typedef void + (*ft_ouput_handler)( const char* string ); + + FT_EXPORT( void ) + FT_Trace_Set_Level( const char* level ); + + FT_EXPORT( void ) + FT_Trace_Set_Default_Level( void ); + + FT_EXPORT( void ) + FT_Trace_Set_Output( ft_ouput_handler handler ); + + FT_EXPORT( void ) + FT_Trace_Set_Default_Output(); + +FT_END_HEADER diff --git a/include/freetype/internal/ftdebug.h b/include/freetype/internal/ftdebug.h index 00afb358a..5524167e4 100644 --- a/include/freetype/internal/ftdebug.h +++ b/include/freetype/internal/ftdebug.h @@ -29,11 +29,18 @@ #include FT_CONFIG_CONFIG_H #include - /* Additional include files for supporting logging in FreeType using */ - /* external logging library ~ src/dlg */ - /* */ + /************************************************************************** + * + * Additional include files for supporting logging in FreeType using + * external logging library ~ src/dlg and freetype/ftlogging.h + * + */ + +#ifdef FT_LOGGING #include <../src/dlg/include/dlg/dlg.h> #include <../src/dlg/include/dlg/output.h> +#include +#endif /* FT_LOGGING */ FT_BEGIN_HEADER @@ -104,6 +111,8 @@ FT_BEGIN_HEADER #ifdef FT_LOGGING + static ft_ouput_handler freetype_output_handler = NULL; + #undef FT_Log #define FT_Log dlg_trace @@ -117,7 +126,7 @@ FT_BEGIN_HEADER */ FT_BASE( void ) - ft_freetype_output_handler( const struct dlg_origin* origin, + ft_default_output_handler( const struct dlg_origin* origin, const char* string, void* data ); #else @@ -247,8 +256,22 @@ FT_BEGIN_HEADER #ifdef FT_DEBUG_LEVEL_ERROR +#ifdef FT_LOGGING + +#define FT_ERROR( varformat ) \ + do \ + { \ + dlg_add_tag( "error_log", NULL ); \ + dlg_trace varformat; \ + dlg_remove_tag( "error_log", NULL ); \ + } while ( 0 ) + +#else + #define FT_ERROR( varformat ) FT_Message varformat +#endif /* FT_LOGGING */ + #else /* !FT_DEBUG_LEVEL_ERROR */ #define FT_ERROR( varformat ) do { } while ( 0 ) /* nothing */ @@ -318,7 +341,7 @@ FT_BEGIN_HEADER FT_BASE( void ) - ft_debug_init( void ); + ft_debug_init( const char* level ); #ifdef FT_LOGGING diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c index 7b2550e66..544749040 100644 --- a/src/base/ftdebug.c +++ b/src/base/ftdebug.c @@ -193,9 +193,9 @@ * runtime errors), and 7 means _very_ verbose. */ FT_BASE_DEF( void ) - ft_debug_init( void ) + ft_debug_init( const char* level ) { - const char* ft2_debug = ft_getenv( "FT2_DEBUG" ); + const char* ft2_debug = level; if ( ft2_debug ) @@ -274,7 +274,7 @@ FT_BASE_DEF( void ) - ft_debug_init( void ) + ft_debug_init( const char* level ) { /* nothing */ } @@ -337,10 +337,10 @@ ft_logging_init( void ) { fileptr = fopen( "freetype2.log", "w" ); - ft_debug_init(); + FT_Trace_Set_Default_Level(); /* We need to set the default FreeType specific dlg's output handler */ - dlg_set_handler( &ft_freetype_output_handler, NULL ); + dlg_set_handler( &ft_default_output_handler, NULL ); } FT_BASE_DEF( void ) @@ -349,15 +349,14 @@ fclose( fileptr ); } - FT_BASE_DEF( void ) - /************************************************************************* * * TODO: * 1. Add support for priniting FT_COMPONENT * - */ - ft_freetype_output_handler( const struct dlg_origin* origin, + */ + FT_BASE_DEF( void ) + ft_default_output_handler( const struct dlg_origin* origin, const char* string, void* data ) { unsigned int features = dlg_output_threadsafe /*| dlg_output_tags*/ ; @@ -365,6 +364,41 @@ dlg_default_output_styles ); } + /************************************************************************** + * + * + * + */ + FT_EXPORT_DEF( void ) + FT_Trace_Set_Level( const char* level ) + { + ft_debug_init( level ); + } + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Default_Level( void ) + { + ft_debug_init( ft_getenv( "FT2_DEBUG" ) ); + } + +/**************************************************************************** + * + * + * + */ + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Output( ft_ouput_handler handler ) + { + freetype_output_handler = handler; + } + + FT_EXPORT_DEF( void ) + FT_Trace_Set_Default_Output() + { + freetype_output_handler = NULL; + } + #endif /* FT_LOGGING */ /* END */ diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 0217c5172..9de8ac114 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -5276,7 +5276,7 @@ #ifndef FT_LOGGING #ifdef FT_DEBUG_LEVEL_ERROR /* init debugging support */ - ft_debug_init(); + ft_debug_init( ft_getenv( "FT2_DEBUG" ) ); #endif /* FT_DEBUG_LEVEL_ERROR */ #endif /* FT_LOGGING */