freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] logging ce43d80 05/16: [base] Implement vertical alignment o


From: Werner LEMBERG
Subject: [freetype2] logging ce43d80 05/16: [base] Implement vertical alignment of log printing.
Date: Fri, 4 Dec 2020 10:21:44 -0500 (EST)

branch: logging
commit ce43d808dc0ab015cf91b7aca9bd2b48cc717dd2
Author: Werner Lemberg <wl@gnu.org>
Commit: Werner Lemberg <wl@gnu.org>

    [base] Implement vertical alignment of log printing.
    
    Based on a patch by Priyesh.
    
    * include/freetype/internal/fttrace.h (FT_MAX_TRACE_LEVEL_LENGTH):
    New macro.
    
    * src/base/ftdebug.c, builds/windows/ftdebug.c (ft_log_handler):
    Print logs after a fixed width to handle different lengths of
    `FT_COMPONENT` entries.
    Use `ft_strrchr` to check for final newline character.
---
 ChangeLog                           | 14 +++++++
 builds/windows/ftdebug.c            | 73 +++++++++++++++++++++++++++++++------
 include/freetype/internal/fttrace.h |  4 ++
 src/base/ftdebug.c                  | 73 +++++++++++++++++++++++++++++++------
 4 files changed, 140 insertions(+), 24 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index fb6da40..b657c66 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2020-12-01  Werner Lemberg  <wl@gnu.org>
+
+       [base] Implement vertical alignment of log printing.
+
+       Based on a patch by Priyesh.
+
+       * include/freetype/internal/fttrace.h (FT_MAX_TRACE_LEVEL_LENGTH):
+       New macro.
+
+       * src/base/ftdebug.c, builds/windows/ftdebug.c (ft_log_handler):
+       Print logs after a fixed width to handle different lengths of
+       `FT_COMPONENT` entries.
+       Use `ft_strrchr` to check for final newline character.
+
 2020-11-30  Priyesh Kumar  <priyeshkkumar@gmail.com>
 
        Update logging related documentation.
diff --git a/builds/windows/ftdebug.c b/builds/windows/ftdebug.c
index abbe322..c8e811e 100644
--- a/builds/windows/ftdebug.c
+++ b/builds/windows/ftdebug.c
@@ -466,24 +466,73 @@
                   const char*               string,
                   void*                     data )
   {
-    const char*  features;
+    char         features_buf[128];
+    char*        bufp = features_buf;
 
     FT_UNUSED( data );
 
 
-    if ( ft_timestamp_flag && ft_component_flag && ft_have_newline_char )
-      features = "[%h:%m  %t]    %c";
-    else if ( ft_component_flag && ft_have_newline_char )
-      features = "[%t]    %c";
-    else if ( ft_timestamp_flag && ft_have_newline_char )
-      features = "[%h:%m]    %c";
-    else
-      features = "%c";
+    if ( ft_have_newline_char )
+    {
+      const char*  features        = NULL;
+      size_t       features_length = 0;
+
+
+#define FEATURES_TIMESTAMP            "[%h:%m] "
+#define FEATURES_COMPONENT            "[%t] "
+#define FEATURES_TIMESTAMP_COMPONENT  "[%h:%m %t] "
+
+      if ( ft_timestamp_flag && ft_component_flag )
+      {
+        features        = FEATURES_TIMESTAMP_COMPONENT;
+        features_length = sizeof ( FEATURES_TIMESTAMP_COMPONENT );
+      }
+      else if ( ft_timestamp_flag )
+      {
+        features        = FEATURES_TIMESTAMP;
+        features_length = sizeof ( FEATURES_TIMESTAMP );
+      }
+      else if ( ft_component_flag )
+      {
+        features        = FEATURES_COMPONENT;
+        features_length = sizeof ( FEATURES_COMPONENT );
+      }
+
+      if ( ft_component_flag || ft_timestamp_flag )
+      {
+        ft_strncpy( features_buf, features, features_length );
+        bufp += features_length - 1;
+      }
+
+      if ( ft_component_flag )
+      {
+        size_t  tag_length = ft_strlen( *origin->tags );
+        size_t  i;
+
+
+        /* To vertically align tracing messages we compensate the */
+        /* different FT_COMPONENT string lengths by inserting an  */
+        /* appropriate amount of space characters.                */
+        for ( i = 0;
+              i < FT_MAX_TRACE_LEVEL_LENGTH - tag_length;
+              i++ )
+          *bufp++ = ' ';
+      }
+    }
+
+    /* Finally add the format string for the tracing message. */
+    *bufp++ = '%';
+    *bufp++ = 'c';
+    *bufp   = '\0';
 
-    dlg_generic_outputf_stream( ft_fileptr, features, origin, string,
-                                dlg_default_output_styles, true );
+    dlg_generic_outputf_stream( ft_fileptr,
+                                (const char*)features_buf,
+                                origin,
+                                string,
+                                dlg_default_output_styles,
+                                true );
 
-    if ( strchr( string, '\n' ) )
+    if ( ft_strrchr( string, '\n' ) )
       ft_have_newline_char = TRUE;
     else
       ft_have_newline_char = FALSE;
diff --git a/include/freetype/internal/fttrace.h 
b/include/freetype/internal/fttrace.h
index 58bd774..2df2045 100644
--- a/include/freetype/internal/fttrace.h
+++ b/include/freetype/internal/fttrace.h
@@ -18,6 +18,10 @@
 
   /* definitions of trace levels for FreeType 2 */
 
+  /* the maximum string length (if the argument to `FT_TRACE_DEF` */
+  /* gets used as a string)                                       */
+#define FT_MAX_TRACE_LEVEL_LENGTH  9
+
   /* the first level must always be `trace_any' */
 FT_TRACE_DEF( any )
 
diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c
index c84b887..e0b050d 100644
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -453,24 +453,73 @@
                   const char*               string,
                   void*                     data )
   {
-    const char*  features;
+    char         features_buf[128];
+    char*        bufp = features_buf;
 
     FT_UNUSED( data );
 
 
-    if ( ft_timestamp_flag && ft_component_flag && ft_have_newline_char )
-      features = "[%h:%m  %t]    %c";
-    else if ( ft_component_flag && ft_have_newline_char )
-      features = "[%t]    %c";
-    else if ( ft_timestamp_flag && ft_have_newline_char )
-      features = "[%h:%m]    %c";
-    else
-      features = "%c";
+    if ( ft_have_newline_char )
+    {
+      const char*  features        = NULL;
+      size_t       features_length = 0;
+
+
+#define FEATURES_TIMESTAMP            "[%h:%m] "
+#define FEATURES_COMPONENT            "[%t] "
+#define FEATURES_TIMESTAMP_COMPONENT  "[%h:%m %t] "
+
+      if ( ft_timestamp_flag && ft_component_flag )
+      {
+        features        = FEATURES_TIMESTAMP_COMPONENT;
+        features_length = sizeof ( FEATURES_TIMESTAMP_COMPONENT );
+      }
+      else if ( ft_timestamp_flag )
+      {
+        features        = FEATURES_TIMESTAMP;
+        features_length = sizeof ( FEATURES_TIMESTAMP );
+      }
+      else if ( ft_component_flag )
+      {
+        features        = FEATURES_COMPONENT;
+        features_length = sizeof ( FEATURES_COMPONENT );
+      }
+
+      if ( ft_component_flag || ft_timestamp_flag )
+      {
+        ft_strncpy( features_buf, features, features_length );
+        bufp += features_length - 1;
+      }
+
+      if ( ft_component_flag )
+      {
+        size_t  tag_length = ft_strlen( *origin->tags );
+        size_t  i;
+
+
+        /* To vertically align tracing messages we compensate the */
+        /* different FT_COMPONENT string lengths by inserting an  */
+        /* appropriate amount of space characters.                */
+        for ( i = 0;
+              i < FT_MAX_TRACE_LEVEL_LENGTH - tag_length;
+              i++ )
+          *bufp++ = ' ';
+      }
+    }
+
+    /* Finally add the format string for the tracing message. */
+    *bufp++ = '%';
+    *bufp++ = 'c';
+    *bufp   = '\0';
 
-    dlg_generic_outputf_stream( ft_fileptr, features, origin, string,
-                                dlg_default_output_styles, true );
+    dlg_generic_outputf_stream( ft_fileptr,
+                                (const char*)features_buf,
+                                origin,
+                                string,
+                                dlg_default_output_styles,
+                                true );
 
-    if ( strchr( string, '\n' ) )
+    if ( ft_strrchr( string, '\n' ) )
       ft_have_newline_char = TRUE;
     else
       ft_have_newline_char = FALSE;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]