/***************************************************************************/
/*                                                                         */
/*  psobjs.h                                                               */
/*                                                                         */
/*    Auxiliary functions for PostScript fonts (specification).            */
/*                                                                         */
/*  Copyright 1996-2001 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 __PSOBJS_H__
#define __PSOBJS_H__


#include <ft2build.h>
#include FT_INTERNAL_POSTSCRIPT_AUX_H


FT_BEGIN_HEADER


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                             T1_TABLE                          *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/


  FT_CALLBACK_TABLE
  const PS_Table_Funcs  ps_table_funcs;

  FT_CALLBACK_TABLE
  const T1_Parser_Funcs  t1_parser_funcs;

  FT_CALLBACK_TABLE
  const T1_Builder_Funcs  t1_builder_funcs;


  FT_LOCAL FT_Error
  PS_Table_New( PS_Table*  table,
                FT_Int     count,
                FT_Memory  memory );

  FT_LOCAL FT_Error
  PS_Table_Add( PS_Table*  table,
                FT_Int     index,
                void*      object,
                FT_Int     length );

  FT_LOCAL void
  PS_Table_Done( PS_Table*  table );


  FT_LOCAL void
  PS_Table_Release( PS_Table*  table );


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                            T1 PARSER                          *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/


  FT_LOCAL void
  T1_Skip_Spaces( T1_Parser*  parser );

  FT_LOCAL void
  T1_Skip_Alpha( T1_Parser*  parser );

  FT_LOCAL void
  T1_ToToken( T1_Parser*  parser,
              T1_Token*   token );

  FT_LOCAL void
  T1_ToTokenArray( T1_Parser*  parser,
                   T1_Token*   tokens,
                   FT_UInt     max_tokens,
                   FT_Int*     pnum_tokens );

  FT_LOCAL FT_Error
  T1_Load_Field( T1_Parser*       parser,
                 const T1_Field*  field,
                 void**           objects,
                 FT_UInt          max_objects,
                 FT_ULong*        pflags );

  FT_LOCAL FT_Error
  T1_Load_Field_Table( T1_Parser*       parser,
                       const T1_Field*  field,
                       void**           objects,
                       FT_UInt          max_objects,
                       FT_ULong*        pflags );

  FT_LOCAL FT_Long
  T1_ToInt( T1_Parser*  parser );


  FT_LOCAL FT_Fixed
  T1_ToFixed( T1_Parser*  parser,
              FT_Int      power_ten );


  FT_LOCAL FT_Int
  T1_ToCoordArray( T1_Parser*  parser,
                   FT_Int      max_coords,
                   FT_Short*   coords );

  FT_LOCAL FT_Int
  T1_ToFixedArray( T1_Parser*  parser,
                   FT_Int      max_values,
                   FT_Fixed*   values,
                   FT_Int      power_ten );


  FT_LOCAL void
  T1_Init_Parser( T1_Parser*  parser,
                  FT_Byte*    base,
                  FT_Byte*    limit,
                  FT_Memory   memory );

  FT_LOCAL void
  T1_Done_Parser( T1_Parser*  parser );


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                            T1 BUILDER                         *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  FT_LOCAL void
  T1_Builder_Init( T1_Builder*   builder,
                   FT_Face       face,
                   FT_Size       size,
                   FT_GlyphSlot  glyph );

  FT_LOCAL void
  T1_Builder_Done( T1_Builder*  builder );

  FT_LOCAL FT_Error
  T1_Builder_Check_Points( T1_Builder*  builder,
                           FT_Int       count );

  FT_LOCAL void
  T1_Builder_Add_Point( T1_Builder*  builder,
                        FT_Pos       x,
                        FT_Pos       y,
                        FT_Byte      flag );

  FT_LOCAL FT_Error
  T1_Builder_Add_Point1( T1_Builder*  builder,
                         FT_Pos       x,
                         FT_Pos       y );

  FT_LOCAL FT_Error
  T1_Builder_Add_Contour( T1_Builder*  builder );


  FT_LOCAL FT_Error
  T1_Builder_Start_Point( T1_Builder*  builder,
                          FT_Pos       x,
                          FT_Pos       y );


  FT_LOCAL void
  T1_Builder_Close_Contour( T1_Builder*  builder );


  /*************************************************************************/
  /*************************************************************************/
  /*****                                                               *****/
  /*****                            OTHER                              *****/
  /*****                                                               *****/
  /*************************************************************************/
  /*************************************************************************/

  FT_LOCAL void
  T1_Decrypt( FT_Byte*   buffer,
              FT_Offset  length,
              FT_UShort  seed );


FT_END_HEADER

#endif /* __PSOBJS_H__ */


/* END */
