/***************************************************************************/
/*                                                                         */
/*  ttcmap.h                                                               */
/*                                                                         */
/*    TrueType character mapping table (cmap) support (specification).     */
/*                                                                         */
/*  Copyright 2002, 2003, 2004, 2005 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 __TTCMAP_H__
#define __TTCMAP_H__


#include <ft2build.h>
#include FT_INTERNAL_TRUETYPE_TYPES_H
#include FT_INTERNAL_VALIDATE_H
#include FT_SERVICE_TT_CMAP_H

FT_BEGIN_HEADER


#define TT_CMAP_FLAG_UNSORTED     1
#define TT_CMAP_FLAG_OVERLAPPING  2

  typedef struct  TT_CMapRec_
  {
    FT_CMapRec  cmap;
    FT_Byte*    data;           /* pointer to in-memory cmap table */
    FT_Int      flags;          /* for format 4 only               */

  } TT_CMapRec, *TT_CMap;

  typedef const struct TT_CMap_ClassRec_*  TT_CMap_Class;


  typedef FT_Error
  (*TT_CMap_ValidateFunc)( FT_Byte*      data,
                           FT_Validator  valid );

  typedef struct  TT_CMap_ClassRec_
  {
    FT_CMap_ClassRec      clazz;
    FT_UInt               format;
    TT_CMap_ValidateFunc  validate;
    TT_CMap_Info_GetFunc  get_cmap_info;

  } TT_CMap_ClassRec;

#ifndef FT_CONFIG_OPTION_PIC

#define FT_DEFINE_TT_CMAP(class_, size_, init_, done_, char_index_,          \
    char_next_, char_var_index_, char_var_default_, variant_list_,           \
    charvariant_list_,variantchar_list_,                                     \
    format_, validate_, get_cmap_info_)                                      \
  FT_CALLBACK_TABLE_DEF                                                      \
  const TT_CMap_ClassRec class_ =                                            \
  {                                                                          \
    {size_, init_, done_, char_index_,                                       \
     char_next_, char_var_index_, char_var_default_, variant_list_,          \
     charvariant_list_, variantchar_list_},                                  \
    format_, validate_, get_cmap_info_                                       \
  };

#else /* FT_CONFIG_OPTION_PIC */

#define FT_DEFINE_TT_CMAP(class_, size_, init_, done_, char_index_,          \
    char_next_, char_var_index_, char_var_default_, variant_list_,           \
    charvariant_list_,variantchar_list_,                                     \
    format_, validate_, get_cmap_info_)                                      \
  void                                                                       \
  FT_Init_Class_##class_( TT_CMap_ClassRec*  clazz )                         \
  {                                                                          \
    clazz->clazz.size = size_;                                               \
    clazz->clazz.init = init_;                                               \
    clazz->clazz.done = done_;                                               \
    clazz->clazz.char_index = char_index_;                                   \
    clazz->clazz.char_next = char_next_;                                     \
    clazz->clazz.char_var_index = char_var_index_;                           \
    clazz->clazz.char_var_default = char_var_default_;                       \
    clazz->clazz.variant_list = variant_list_;                               \
    clazz->clazz.charvariant_list = charvariant_list_;                       \
    clazz->clazz.variantchar_list = variantchar_list_;                       \
    clazz->format = format_;                                                 \
    clazz->validate = validate_;                                             \
    clazz->get_cmap_info = get_cmap_info_;                                   \
  }

#endif /* FT_CONFIG_OPTION_PIC */

  typedef struct  TT_ValidatorRec_
  {
    FT_ValidatorRec  validator;
    FT_UInt          num_glyphs;

  } TT_ValidatorRec, *TT_Validator;


#define TT_VALIDATOR( x )          ((TT_Validator)( x ))
#define TT_VALID_GLYPH_COUNT( x )  TT_VALIDATOR( x )->num_glyphs


  FT_LOCAL( FT_Error )
  tt_face_build_cmaps( TT_Face  face );

  /* used in tt-cmaps service */
  FT_LOCAL( FT_Error )
  tt_get_cmap_info( FT_CharMap    charmap,
                    TT_CMapInfo  *cmap_info );


FT_END_HEADER

#endif /* __TTCMAP_H__ */


/* END */
