Blame pango/pango-engine.h

Packit 0ec9dd
/* Pango
Packit 0ec9dd
 * pango-engine.h: Engines for script and language specific processing
Packit 0ec9dd
 *
Packit 0ec9dd
 * Copyright (C) 2000,2003 Red Hat Software
Packit 0ec9dd
 *
Packit 0ec9dd
 * This library is free software; you can redistribute it and/or
Packit 0ec9dd
 * modify it under the terms of the GNU Library General Public
Packit 0ec9dd
 * License as published by the Free Software Foundation; either
Packit 0ec9dd
 * version 2 of the License, or (at your option) any later version.
Packit 0ec9dd
 *
Packit 0ec9dd
 * This library is distributed in the hope that it will be useful,
Packit 0ec9dd
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 0ec9dd
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
Packit 0ec9dd
 * Library General Public License for more details.
Packit 0ec9dd
 *
Packit 0ec9dd
 * You should have received a copy of the GNU Library General Public
Packit 0ec9dd
 * License along with this library; if not, write to the
Packit 0ec9dd
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 0ec9dd
 * Boston, MA 02111-1307, USA.
Packit 0ec9dd
 */
Packit 0ec9dd
Packit 0ec9dd
#ifndef __PANGO_ENGINE_H__
Packit 0ec9dd
#define __PANGO_ENGINE_H__
Packit 0ec9dd
Packit 0ec9dd
#include <pango/pango-types.h>
Packit 0ec9dd
#include <pango/pango-item.h>
Packit 0ec9dd
#include <pango/pango-font.h>
Packit 0ec9dd
#include <pango/pango-glyph.h>
Packit 0ec9dd
#include <pango/pango-script.h>
Packit 0ec9dd
Packit 0ec9dd
G_BEGIN_DECLS
Packit 0ec9dd
Packit 0ec9dd
#ifdef PANGO_ENABLE_ENGINE
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PANGO_RENDER_TYPE_NONE:
Packit 0ec9dd
 *
Packit 0ec9dd
 * A string constant defining the render type
Packit 0ec9dd
 * for engines that are not rendering-system specific.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 */
Packit 0ec9dd
#define PANGO_RENDER_TYPE_NONE "PangoRenderNone"
Packit 0ec9dd
Packit 0ec9dd
#define PANGO_TYPE_ENGINE              (pango_engine_get_type ())
Packit 0ec9dd
#define PANGO_ENGINE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ENGINE, PangoEngine))
Packit 0ec9dd
#define PANGO_IS_ENGINE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ENGINE))
Packit 0ec9dd
#define PANGO_ENGINE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ENGINE, PangoEngineClass))
Packit 0ec9dd
#define PANGO_IS_ENGINE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ENGINE))
Packit 0ec9dd
#define PANGO_ENGINE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ENGINE, PangoEngineClass))
Packit 0ec9dd
Packit 0ec9dd
typedef struct _PangoEngine PangoEngine;
Packit 0ec9dd
typedef struct _PangoEngineClass PangoEngineClass;
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngine:
Packit 0ec9dd
 *
Packit 0ec9dd
 * #PangoEngine is the base class for all types of language and
Packit 0ec9dd
 * script specific engines. It has no functionality by itself.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
struct _PangoEngine
Packit 0ec9dd
{
Packit 0ec9dd
  /*< private >*/
Packit 0ec9dd
  GObject parent_instance;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineClass:
Packit 0ec9dd
 *
Packit 0ec9dd
 * Class structure for #PangoEngine
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
struct _PangoEngineClass
Packit 0ec9dd
{
Packit 0ec9dd
  /*< private >*/
Packit 0ec9dd
  GObjectClass parent_class;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
GType pango_engine_get_type (void) G_GNUC_CONST;
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PANGO_ENGINE_TYPE_LANG:
Packit 0ec9dd
 *
Packit 0ec9dd
 * A string constant defining the engine type for language engines.
Packit 0ec9dd
 * These engines derive from #PangoEngineLang.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 */
Packit 0ec9dd
#define PANGO_ENGINE_TYPE_LANG "PangoEngineLang"
Packit 0ec9dd
Packit 0ec9dd
#define PANGO_TYPE_ENGINE_LANG              (pango_engine_lang_get_type ())
Packit 0ec9dd
#define PANGO_ENGINE_LANG(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ENGINE_LANG, PangoEngineLang))
Packit 0ec9dd
#define PANGO_IS_ENGINE_LANG(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ENGINE_LANG))
Packit 0ec9dd
#define PANGO_ENGINE_LANG_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ENGINE_LANG, PangoEngineLangClass))
Packit 0ec9dd
#define PANGO_IS_ENGINE_LANG_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ENGINE_LANG))
Packit 0ec9dd
#define PANGO_ENGINE_LANG_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ENGINE_LANG, PangoEngineLangClass))
Packit 0ec9dd
Packit 0ec9dd
typedef struct _PangoEngineLangClass PangoEngineLangClass;
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineLang:
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoEngineLang class is implemented by engines that
Packit 0ec9dd
 * customize the rendering-system independent part of the
Packit 0ec9dd
 * Pango pipeline for a particular script or language. For
Packit 0ec9dd
 * instance, a custom #PangoEngineLang could be provided for
Packit 0ec9dd
 * Thai to implement the dictionary-based word boundary
Packit 0ec9dd
 * lookups needed for that language.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
struct _PangoEngineLang
Packit 0ec9dd
{
Packit 0ec9dd
  /*< private >*/
Packit 0ec9dd
  PangoEngine parent_instance;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineLangClass:
Packit 0ec9dd
 * @script_break: (nullable): Provides a custom implementation of
Packit 0ec9dd
 * pango_break().  If %NULL, pango_default_break() is used instead. If
Packit 0ec9dd
 * not %NULL, for Pango versions before 1.16 (module interface version
Packit 0ec9dd
 * before 1.6.0), this was called instead of pango_default_break(),
Packit 0ec9dd
 * but in newer versions, pango_default_break() is always called and
Packit 0ec9dd
 * this is called after that to allow tailoring the breaking results.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Class structure for #PangoEngineLang
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
struct _PangoEngineLangClass
Packit 0ec9dd
{
Packit 0ec9dd
  /*< private >*/
Packit 0ec9dd
  PangoEngineClass parent_class;
Packit 0ec9dd
Packit 0ec9dd
  /*< public >*/
Packit 0ec9dd
  void (*script_break) (PangoEngineLang *engine,
Packit 0ec9dd
			const char    *text,
Packit 0ec9dd
			int            len,
Packit 0ec9dd
			PangoAnalysis *analysis,
Packit 0ec9dd
			PangoLogAttr  *attrs,
Packit 0ec9dd
			int            attrs_len);
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
GType pango_engine_lang_get_type (void) G_GNUC_CONST;
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PANGO_ENGINE_TYPE_SHAPE:
Packit 0ec9dd
 *
Packit 0ec9dd
 * A string constant defining the engine type for shaping engines.
Packit 0ec9dd
 * These engines derive from #PangoEngineShape.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 */
Packit 0ec9dd
#define PANGO_ENGINE_TYPE_SHAPE "PangoEngineShape"
Packit 0ec9dd
Packit 0ec9dd
#define PANGO_TYPE_ENGINE_SHAPE              (pango_engine_shape_get_type ())
Packit 0ec9dd
#define PANGO_ENGINE_SHAPE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_ENGINE_SHAPE, PangoEngineShape))
Packit 0ec9dd
#define PANGO_IS_ENGINE_SHAPE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_ENGINE_SHAPE))
Packit 0ec9dd
#define PANGO_ENGINE_SHAPE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_ENGINE_SHAPE, PangoEngine_ShapeClass))
Packit 0ec9dd
#define PANGO_IS_ENGINE_SHAPE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_ENGINE_SHAPE))
Packit 0ec9dd
#define PANGO_ENGINE_SHAPE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_ENGINE_SHAPE, PangoEngineShapeClass))
Packit 0ec9dd
Packit 0ec9dd
typedef struct _PangoEngineShapeClass PangoEngineShapeClass;
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineShape:
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoEngineShape class is implemented by engines that
Packit 0ec9dd
 * customize the rendering-system dependent part of the
Packit 0ec9dd
 * Pango pipeline for a particular script or language.
Packit 0ec9dd
 * A #PangoEngineShape implementation is then specific to both
Packit 0ec9dd
 * a particular rendering system or group of rendering systems
Packit 0ec9dd
 * and to a particular script. For instance, there is one
Packit 0ec9dd
 * #PangoEngineShape implementation to handle shaping Arabic
Packit 0ec9dd
 * for Fontconfig-based backends.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
struct _PangoEngineShape
Packit 0ec9dd
{
Packit 0ec9dd
  PangoEngine parent_instance;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineShapeClass:
Packit 0ec9dd
 * @script_shape: Given a font, a piece of text, and a #PangoAnalysis
Packit 0ec9dd
 *   structure, converts characters to glyphs and positions the
Packit 0ec9dd
 *   resulting glyphs. The results are stored in the #PangoGlyphString
Packit 0ec9dd
 *   that is passed in. (The implementation should resize it
Packit 0ec9dd
 *   appropriately using pango_glyph_string_set_size()). All fields
Packit 0ec9dd
 *   of the @log_clusters and @glyphs array must be filled in, with
Packit 0ec9dd
 *   the exception that Pango will automatically generate
Packit 0ec9dd
 *   <literal>glyphs->glyphs[i].attr.is_cluster_start</literal>
Packit 0ec9dd
 *   using the @log_clusters array. Each input character must occur in one
Packit 0ec9dd
 *   of the output logical clusters;
Packit 0ec9dd
 *   if no rendering is desired for a character, this may involve
Packit 0ec9dd
 *   inserting glyphs with the #PangoGlyph ID #PANGO_GLYPH_EMPTY, which
Packit 0ec9dd
 *   is guaranteed never to render. If the shaping fails for any reason,
Packit 0ec9dd
 *   the shaper should return with an empty (zero-size) glyph string.
Packit 0ec9dd
 *   If the shaper has not set the size on the glyph string yet, simply
Packit 0ec9dd
 *   returning signals the failure too.
Packit 0ec9dd
 * @covers: Returns the characters that this engine can cover
Packit 0ec9dd
 *   with a given font for a given language. If not overridden, the default
Packit 0ec9dd
 *   implementation simply returns the coverage information for the
Packit 0ec9dd
 *   font itself unmodified.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Class structure for #PangoEngineShape
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
struct _PangoEngineShapeClass
Packit 0ec9dd
{
Packit 0ec9dd
  /*< private >*/
Packit 0ec9dd
  PangoEngineClass parent_class;
Packit 0ec9dd
Packit 0ec9dd
  /*< public >*/
Packit 0ec9dd
  void (*script_shape) (PangoEngineShape    *engine,
Packit 0ec9dd
			PangoFont           *font,
Packit 0ec9dd
			const char          *item_text,
Packit 0ec9dd
			unsigned int         item_length,
Packit 0ec9dd
			const PangoAnalysis *analysis,
Packit 0ec9dd
			PangoGlyphString    *glyphs,
Packit 0ec9dd
			const char          *paragraph_text,
Packit 0ec9dd
			unsigned int         paragraph_length);
Packit 0ec9dd
  PangoCoverageLevel (*covers)   (PangoEngineShape *engine,
Packit 0ec9dd
				  PangoFont        *font,
Packit 0ec9dd
				  PangoLanguage    *language,
Packit 0ec9dd
				  gunichar          wc);
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
GType pango_engine_shape_get_type (void) G_GNUC_CONST;
Packit 0ec9dd
Packit 0ec9dd
typedef struct _PangoEngineInfo PangoEngineInfo;
Packit 0ec9dd
typedef struct _PangoEngineScriptInfo PangoEngineScriptInfo;
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineScriptInfo:
Packit 0ec9dd
 * @script: a #PangoScript. The value %PANGO_SCRIPT_COMMON has
Packit 0ec9dd
 * the special meaning here of "all scripts"
Packit 0ec9dd
 * @langs: a semicolon separated list of languages that this
Packit 0ec9dd
 * engine handles for this script. This may be empty,
Packit 0ec9dd
 * in which case the engine is saying that it is a
Packit 0ec9dd
 * fallback choice for all languages for this range,
Packit 0ec9dd
 * but should not be used if another engine
Packit 0ec9dd
 * indicates that it is specific for the language for
Packit 0ec9dd
 * a given code point. An entry in this list of "*"
Packit 0ec9dd
 * indicates that this engine is specific to all
Packit 0ec9dd
 * languages for this range.
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoEngineScriptInfo structure contains
Packit 0ec9dd
 * information about how the shaper covers a particular script.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 */
Packit 0ec9dd
struct _PangoEngineScriptInfo
Packit 0ec9dd
{
Packit 0ec9dd
  PangoScript script;
Packit 0ec9dd
  const gchar *langs;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PangoEngineInfo:
Packit 0ec9dd
 * @id: a unique string ID for the engine.
Packit 0ec9dd
 * @engine_type: a string identifying the engine type.
Packit 0ec9dd
 * @render_type: a string identifying the render type.
Packit 0ec9dd
 * @scripts: array of scripts this engine supports.
Packit 0ec9dd
 * @n_scripts: number of items in @scripts.
Packit 0ec9dd
 *
Packit 0ec9dd
 * The #PangoEngineInfo structure contains information about a particular
Packit 0ec9dd
 * engine. It contains the following fields:
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 */
Packit 0ec9dd
struct _PangoEngineInfo
Packit 0ec9dd
{
Packit 0ec9dd
  const gchar *id;
Packit 0ec9dd
  const gchar *engine_type;
Packit 0ec9dd
  const gchar *render_type;
Packit 0ec9dd
  PangoEngineScriptInfo *scripts;
Packit 0ec9dd
  gint n_scripts;
Packit 0ec9dd
};
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * script_engine_list: (skip)
Packit 0ec9dd
 * @engines: location to store a pointer to an array of engines.
Packit 0ec9dd
 * @n_engines: location to store the number of elements in @engines.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Do not use.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
void script_engine_list (PangoEngineInfo **engines,
Packit 0ec9dd
			 int              *n_engines);
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * script_engine_init: (skip)
Packit 0ec9dd
 * @module: a #GTypeModule structure used to associate any
Packit 0ec9dd
 *  GObject types created in this module with the module.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Do not use.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
void script_engine_init (GTypeModule *module);
Packit 0ec9dd
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * script_engine_exit: (skip)
Packit 0ec9dd
 *
Packit 0ec9dd
 * Do not use.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
void script_engine_exit (void);
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * script_engine_create: (skip)
Packit 0ec9dd
 * @id: the ID of an engine as reported by script_engine_list.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Do not use.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
PANGO_DEPRECATED_IN_1_38
Packit 0ec9dd
PangoEngine *script_engine_create (const char *id);
Packit 0ec9dd
Packit 0ec9dd
/* Utility macro used by PANGO_ENGINE_LANG_DEFINE_TYPE and
Packit 0ec9dd
 * PANGO_ENGINE_LANG_DEFINE_TYPE
Packit 0ec9dd
 */
Packit 0ec9dd
#define PANGO_ENGINE_DEFINE_TYPE(name, prefix, class_init, instance_init, parent_type) \
Packit 0ec9dd
static GType prefix ## _type;						  \
Packit 0ec9dd
static void								  \
Packit 0ec9dd
prefix ## _register_type (GTypeModule *module)				  \
Packit 0ec9dd
{									  \
Packit 0ec9dd
  const GTypeInfo object_info =						  \
Packit 0ec9dd
    {									  \
Packit 0ec9dd
      sizeof (name ## Class),						  \
Packit 0ec9dd
      (GBaseInitFunc) NULL,						  \
Packit 0ec9dd
      (GBaseFinalizeFunc) NULL,						  \
Packit 0ec9dd
      (GClassInitFunc) class_init,					  \
Packit 0ec9dd
      (GClassFinalizeFunc) NULL,					  \
Packit 0ec9dd
      NULL,          /* class_data */					  \
Packit 0ec9dd
      sizeof (name),							  \
Packit 0ec9dd
      0,             /* n_prelocs */					  \
Packit 0ec9dd
      (GInstanceInitFunc) instance_init,				  \
Packit 0ec9dd
      NULL           /* value_table */					  \
Packit 0ec9dd
    };									  \
Packit 0ec9dd
									  \
Packit 0ec9dd
  prefix ## _type =  g_type_module_register_type (module, parent_type,	  \
Packit 0ec9dd
						  # name,		  \
Packit 0ec9dd
						  &object_info, 0);	  \
Packit 0ec9dd
}
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PANGO_ENGINE_LANG_DEFINE_TYPE:
Packit 0ec9dd
 * @name: Name of the the type to register (for example:, <literal>ArabicEngineFc</literal>
Packit 0ec9dd
 * @prefix: Prefix for symbols that will be defined (for example:, <literal>arabic_engine_fc</literal>
Packit 0ec9dd
 * @class_init: (nullable): Class initialization function for the new type, or %NULL
Packit 0ec9dd
 * @instance_init: (nullable): Instance initialization function for the new type, or %NULL
Packit 0ec9dd
 *
Packit 0ec9dd
 * Outputs the necessary code for GObject type registration for a
Packit 0ec9dd
 * #PangoEngineLang class defined in a module. Two static symbols
Packit 0ec9dd
 * are defined.
Packit 0ec9dd
 *
Packit 0ec9dd
 * <programlisting>
Packit 0ec9dd
 *  static GType <replaceable>prefix</replaceable>_type;
Packit 0ec9dd
 *  static void <replaceable>prefix</replaceable>_register_type (GTypeModule module);
Packit 0ec9dd
 * </programlisting>
Packit 0ec9dd
 *
Packit 0ec9dd
 * The <function><replaceable>prefix</replaceable>_register_type()</function>
Packit 0ec9dd
 * function should be called in your script_engine_init() function for
Packit 0ec9dd
 * each type that your module implements, and then your script_engine_create()
Packit 0ec9dd
 * function can create instances of the object as follows:
Packit 0ec9dd
 *
Packit 0ec9dd
 * <informalexample><programlisting>
Packit 0ec9dd
 *  PangoEngine *engine = g_object_new (<replaceable>prefix</replaceable>_type, NULL);
Packit 0ec9dd
 * </programlisting></informalexample>
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
#define PANGO_ENGINE_LANG_DEFINE_TYPE(name, prefix, class_init, instance_init)	\
Packit 0ec9dd
  PANGO_ENGINE_DEFINE_TYPE (name, prefix,				\
Packit 0ec9dd
			    class_init, instance_init,			\
Packit 0ec9dd
			    PANGO_TYPE_ENGINE_LANG)
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * PANGO_ENGINE_SHAPE_DEFINE_TYPE:
Packit 0ec9dd
 * @name: Name of the the type to register (for example:, <literal>ArabicEngineFc</literal>
Packit 0ec9dd
 * @prefix: Prefix for symbols that will be defined (for example:, <literal>arabic_engine_fc</literal>
Packit 0ec9dd
 * @class_init: (nullable): Class initialization function for the new type, or %NULL
Packit 0ec9dd
 * @instance_init: (nullable): Instance initialization function for the new type, or %NULL
Packit 0ec9dd
 *
Packit 0ec9dd
 * Outputs the necessary code for GObject type registration for a
Packit 0ec9dd
 * #PangoEngineShape class defined in a module. Two static symbols
Packit 0ec9dd
 * are defined.
Packit 0ec9dd
 *
Packit 0ec9dd
 * <programlisting>
Packit 0ec9dd
 *  static GType <replaceable>prefix</replaceable>_type;
Packit 0ec9dd
 *  static void <replaceable>prefix</replaceable>_register_type (GTypeModule module);
Packit 0ec9dd
 * </programlisting>
Packit 0ec9dd
 *
Packit 0ec9dd
 * The <function><replaceable>prefix</replaceable>_register_type()</function>
Packit 0ec9dd
 * function should be called in your script_engine_init() function for
Packit 0ec9dd
 * each type that your module implements, and then your script_engine_create()
Packit 0ec9dd
 * function can create instances of the object as follows:
Packit 0ec9dd
 *
Packit 0ec9dd
 * <informalexample><programlisting>
Packit 0ec9dd
 *  PangoEngine *engine = g_object_new (<replaceable>prefix</replaceable>_type, NULL);
Packit 0ec9dd
 * </programlisting></informalexample>
Packit 0ec9dd
 *
Packit 0ec9dd
 * Deprecated: 1.38
Packit 0ec9dd
 **/
Packit 0ec9dd
#define PANGO_ENGINE_SHAPE_DEFINE_TYPE(name, prefix, class_init, instance_init)	\
Packit 0ec9dd
  PANGO_ENGINE_DEFINE_TYPE (name, prefix,				\
Packit 0ec9dd
			    class_init, instance_init,			\
Packit 0ec9dd
			    PANGO_TYPE_ENGINE_SHAPE)
Packit 0ec9dd
Packit 0ec9dd
/* Macro used for possibly builtin Pango modules. Not useful
Packit 0ec9dd
 * for externally build modules. If we are compiling a module standalone,
Packit 0ec9dd
 * then we name the entry points script_engine_list, etc. But if we
Packit 0ec9dd
 * are compiling it for inclusion directly in Pango, then we need them to
Packit 0ec9dd
 * to have distinct names for this module, so we prepend a prefix.
Packit 0ec9dd
 *
Packit 0ec9dd
 * The two intermediate macros are to deal with details of the C
Packit 0ec9dd
 * preprocessor; token pasting tokens must be function arguments,
Packit 0ec9dd
 * and macro substitution isn't used on function arguments that
Packit 0ec9dd
 * are used for token pasting.
Packit 0ec9dd
 */
Packit 0ec9dd
#ifdef PANGO_MODULE_PREFIX
Packit 0ec9dd
#define PANGO_MODULE_ENTRY(func) _PANGO_MODULE_ENTRY2(PANGO_MODULE_PREFIX,func)
Packit 0ec9dd
#define _PANGO_MODULE_ENTRY2(prefix,func) _PANGO_MODULE_ENTRY3(prefix,func)
Packit 0ec9dd
#define _PANGO_MODULE_ENTRY3(prefix,func) prefix##_script_engine_##func
Packit 0ec9dd
#else
Packit 0ec9dd
#define PANGO_MODULE_ENTRY(func) script_engine_##func
Packit 0ec9dd
#endif
Packit 0ec9dd
Packit 0ec9dd
#endif /* PANGO_ENABLE_ENGINE */
Packit 0ec9dd
Packit 0ec9dd
G_END_DECLS
Packit 0ec9dd
Packit 0ec9dd
#endif /* __PANGO_ENGINE_H__ */