/***************************************************************************/
/*                                                                         */
/*  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 */
