Commit 0b5dc4df888df9006e4544219c7866d53af28150

David Turner 2006-02-21T22:36:23

* include/freetype/ftmodapi.h, include/internal/ftserv.h, include/internal/services/svtteng.h, src/base/ftobjs.c, src/truetype/ttdriver.c: adding a new API named FT_Get_TrueType_Engine_Type to determine wether we have a patented, unpatented or unimplemented TrueType bytecode interpreter. the FT_Get_Module_Flags API was removed consequently.

diff --git a/ChangeLog b/ChangeLog
index 36d983e..fcbc5e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2006-02-21  David Turner  <david@freetype.org>
 
+    * include/freetype/ftmodapi.h, include/internal/ftserv.h,
+    include/internal/services/svtteng.h, src/base/ftobjs.c,
+    src/truetype/ttdriver.c:
+
+    adding a new API named FT_Get_TrueType_Engine_Type to determine
+    wether we have a patented, unpatented or unimplemented TrueType
+    bytecode interpreter.
+
+    the FT_Get_Module_Flags API was removed consequently.
+
     * src/sfnt/sfobjs.c (sfnt_face_load): fixed silly bug that
     prevented embedded bitmaps from being correctly listed and used
 
@@ -11,7 +21,7 @@
 
 2006-02-20  David Turner  <david@freetype.org>
 
-	Support binary compatibility with the X.Org server's Xfont library. 
+	Support binary compatibility with the X.Org server's Xfont library.
 	Note that this change unfortunately prevents memory optimizations
 	for the embedded bitmap loader.
 
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index bb1bbee..28e82e2 100644
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -448,7 +448,7 @@ FT_BEGIN_HEADER
   /* FT_PARAM_TAG_UNPATENTED_HINTING; or when the debug hook               */
   /* FT_DEBUG_HOOK_UNPATENTED_HINTING is globally activated.               */
   /*                                                                       */
-#define TT_CONFIG_OPTION_UNPATENTED_HINTING
+#define xxTT_CONFIG_OPTION_UNPATENTED_HINTING
 
 
   /*************************************************************************/
diff --git a/include/freetype/ftmodapi.h b/include/freetype/ftmodapi.h
index 6f25794..6f41779 100644
--- a/include/freetype/ftmodapi.h
+++ b/include/freetype/ftmodapi.h
@@ -84,7 +84,7 @@ FT_BEGIN_HEADER
   typedef void
   (*FT_Module_Destructor)( FT_Module  module );
 
-  typedef FT_Module_Interface 
+  typedef FT_Module_Interface
   (*FT_Module_Requester)( FT_Module    module,
                           const char*  name );
 
@@ -216,28 +216,6 @@ FT_BEGIN_HEADER
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    FT_Module_Get_Flags                                                */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Gets the module flags for a given module.                          */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    module :: A handle to a module object.                             */
-  /*                                                                       */
-  /* <Output>                                                              */
-  /*    flags  :: The module's flags.                                      */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    FreeType error code.  0 means success.                             */
-  /*                                                                       */
-  FT_EXPORT( FT_Error )
-  FT_Module_Get_Flags( FT_Module  module,
-                       FT_ULong*  flags );
-
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
   /*    FT_New_Library                                                     */
   /*                                                                       */
   /* <Description>                                                         */
@@ -329,6 +307,61 @@ FT_BEGIN_HEADER
   FT_Add_Default_Modules( FT_Library  library );
 
 
+ /**
+  * @enum: FT_TrueTypeEngineType
+  *
+  * @description:
+  *    a list of values describing which kind of truetype bytecode
+  *    engine is implemented in a given FT_Library instance. It is used
+  *    by the @FT_Get_TrueType_Engine_Type function
+  *
+  * @values:
+  *    FT_TRUETYPE_ENGINE_TYPE_NONE ::
+  *      the library doesn't implement any kind of bytecode interpreter
+  *
+  *    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
+  *      the library implements a bytecode interpreter that doesn't
+  *      support the patented operations of the TrueType virtual machine.
+  *
+  *      this interpreter can only be used to load certain Asian fonts
+  *      from Dynalabs. It will produce crap output for any other font.
+  *      see @
+  *
+  *   FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
+  *      the library implements a bytecode interpreter that covers
+  *      the full instruction set of the TrueType virtual machine.
+  *      Better check your legal department for license compliance !!
+  *
+  * @since: 2.2
+  */
+  typedef enum
+  {
+    FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
+    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
+    FT_TRUETYPE_ENGINE_TYPE_PATENTED
+
+  } FT_TrueTypeEngineType;
+
+
+ /**
+  * @func: FT_Get_TrueType_Engine_Type
+  *
+  * @description:
+  *   this function returns a @FT_TrueTypeEngineType value to indicates
+  *   which level of the TrueType virtual machine a given library instance
+  *   supports.
+  *
+  * @input:
+  *   library :: a library instance
+  *
+  * @return:
+  *   a value indicating which level is supported
+  *
+  * @since: 2.2
+  */
+  FT_EXPORT( FT_TrueTypeEngineType )
+  FT_Get_TrueType_Engine_Type( FT_Library  library );
+
   /* */
 
 
diff --git a/include/freetype/internal/ftserv.h b/include/freetype/internal/ftserv.h
index 3e81270..aaadf01 100644
--- a/include/freetype/internal/ftserv.h
+++ b/include/freetype/internal/ftserv.h
@@ -314,6 +314,7 @@ FT_BEGIN_HEADER
 #define FT_SERVICE_WINFNT_H             <freetype/internal/services/svwinfnt.h>
 #define FT_SERVICE_XFREE86_NAME_H       <freetype/internal/services/svxf86nm.h>
 #define FT_SERVICE_KERNING_H            <freetype/internal/services/svkern.h>
+#define FT_SERVICE_TRUETYPE_ENGINE_H    <freetype/internal/services/svtteng.h>
 
  /* */
 
diff --git a/include/freetype/internal/services/svsfnt.h b/include/freetype/internal/services/svsfnt.h
index 87346c6..123008e 100644
--- a/include/freetype/internal/services/svsfnt.h
+++ b/include/freetype/internal/services/svsfnt.h
@@ -63,14 +63,14 @@ FT_BEGIN_HEADER
 
   FT_DEFINE_SERVICE( SFNT_Table )
   {
-    FT_SFNT_TableLoadFunc  load_table;
-    FT_SFNT_TableGetFunc   get_table;
-    FT_SFNT_TableInfoFunc  table_info;
+    FT_SFNT_TableLoadFunc    load_table;
+    FT_SFNT_TableGetFunc     get_table;
+    FT_SFNT_TableInfoFunc    table_info;
   };
 
   /* */
 
- 
+
 FT_END_HEADER
 
 
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index e7b6666..e2102e7 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -34,6 +34,7 @@
 #include FT_SERVICE_GLYPH_DICT_H
 #include FT_SERVICE_TT_CMAP_H
 #include FT_SERVICE_KERNING_H
+#include FT_SERVICE_TRUETYPE_ENGINE_H
 
 
   FT_BASE_DEF( FT_Pointer )
@@ -3408,23 +3409,6 @@
   }
 
 
-  /* documentation is in ftmodapi.h */
-
-  FT_EXPORT_DEF( FT_Error )
-  FT_Module_Get_Flags( FT_Module  module,
-                       FT_ULong*  flags )
-  {
-    if ( !module )
-      return FT_Err_Invalid_Driver_Handle;
-
-    if ( !flags )
-      return FT_Err_Invalid_Argument;
-
-    *flags = module->clazz->module_flags;
-    return FT_Err_Ok;
-  }
-
-
   /* documentation is in ftobjs.h */
 
   FT_BASE_DEF( const void* )
@@ -3675,6 +3659,29 @@
   }
 
 
+  /* documentation is in ftmodapi.h */
+
+  FT_EXPORT_DEF( FT_TrueTypeEngineType )
+  FT_Get_TrueType_Engine_Type( FT_Library  library )
+  {
+    FT_TrueTypeEngineType  result = FT_TRUETYPE_ENGINE_TYPE_NONE;
+
+    if ( library )
+    {
+      FT_Module  module = FT_Get_Module( library, "truetype" );
+
+      if ( module )
+      {
+        FT_Service_TrueTypeEngine  service;
+
+        service = ft_module_get_service( module, FT_SERVICE_ID_TRUETYPE_ENGINE );
+        if ( service )
+          result = service->engine_type;
+      }
+    }
+    return result;
+  }
+
 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
 
   FT_BASE_DEF( FT_Error )
diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c
index 4a7e66b..4324d6f 100644
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -28,6 +28,8 @@
 #include FT_SERVICE_MULTIPLE_MASTERS_H
 #endif
 
+#include FT_SERVICE_TRUETYPE_ENGINE_H
+
 #include "ttdriver.h"
 #include "ttgload.h"
 
@@ -290,6 +292,18 @@
   };
 #endif
 
+  static const FT_Service_TrueTypeEngineRec  tt_service_truetype_engine =
+  {
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+#  ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
+    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED
+#  else
+    FT_TRUETYPE_ENGINE_TYPE_PATENTED
+#  endif
+#else
+    FT_TRUETYPE_ENGINE_TYPE_NONE
+#endif
+  };
 
   static const FT_ServiceDescRec  tt_services[] =
   {
@@ -297,6 +311,7 @@
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
     { FT_SERVICE_ID_MULTI_MASTERS, &tt_service_gx_multi_masters },
 #endif
+    { FT_SERVICE_ID_TRUETYPE_ENGINE, &tt_service_truetype_engine },
     { NULL, NULL }
   };