/*
 * $Id$
 *
 * Copyright © 2003 Keith Packard
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Keith Packard not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Keith Packard makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

@SYNOPSIS@
#include &lt;fontconfig.h&gt;
#include &lt;fcfreetype.h&gt;
@RET@           FT_UInt       
@FUNC@          FcFreeTypeCharIndex 
@TYPE1@         FT_Face				@ARG1@          face      
@TYPE2@         FcChar32			@ARG2@          ucs4      
@PURPOSE@	map Unicode to glyph id
@DESC@
Maps a Unicode char to a glyph index.  This function uses information from
several possible underlying encoding tables to work around broken fonts.
As a result, this function isn't designed to be used in performance
sensitive areas; results from this function are intended to be cached by
higher level functions.
@@

@SYNOPSIS@
#include &lt;fontconfig.h&gt;
#include &lt;fcfreetype.h&gt;
@RET@           FcCharSet *      
@FUNC@          FcFreeTypeCharSet 
@TYPE1@         FT_Face				@ARG1@          face      
@TYPE2@         FcBlanks *			@ARG2@          blanks
@PURPOSE@	compute unicode coverage
@DESC@
Scans a FreeType face and returns the set of encoded Unicode chars.  This scans
several encoding tables to build as complete a list as possible.  
If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
not in 'blanks' are not placed in the returned FcCharSet.
@@

@SYNOPSIS@
#include &lt;fontconfig.h&gt;
#include &lt;fcfreetype.h&gt;
@RET@           FcPattern *      
@FUNC@          FcFreeTypeQuery 
@TYPE1@         const char *			@ARG1@          file      
@TYPE2@         int				@ARG2@          id      
@TYPE3@         FcBlanks *			@ARG3@          blanks      
@TYPE4@         int *				@ARG4@          count      
@PURPOSE@	compute font file pattern
@DESC@
Constructs a pattern representing the 'id'th font in 'file'.  The number
of fonts in 'file' is returned in 'count'.
@@
