/*
 * fontconfig/doc/fcfreetype.fncs
 *
 * 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 the author(s) not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  The authors make no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL THE AUTHOR(S) 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@           FcCharSet *      
@FUNC@          FcFreeTypeCharSetAndSpacing 
@TYPE1@         FT_Face%			@ARG1@          face      
@TYPE2@         FcBlanks *			@ARG2@          blanks
@TYPE3@		int *				@ARG3@		spacing
@PURPOSE@	compute Unicode coverage and spacing type
@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.
<parameter>spacing</parameter> receives the computed spacing type of the
font, one of FC_MONO for a font where all glyphs have the same width,
FC_DUAL, where the font has glyphs in precisely two widths, one twice as
wide as the other, or FC_PROPORTIONAL where the font has glyphs of many
widths.  
@@

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

@SYNOPSIS@
#include &lt;fontconfig.h&gt;
#include &lt;fcfreetype.h&gt;
@RET@           FcPattern *      
@FUNC@          FcFreeTypeQueryFace
@TYPE1@		const FT_Face%			@ARG1@		face
@TYPE2@         const FcChar8 *			@ARG2@          file
@TYPE3@         int%				@ARG3@          id
@TYPE4@         FcBlanks *			@ARG4@          blanks
@PURPOSE@	compute pattern from FT_Face
@DESC@
Constructs a pattern representing 'face'. 'file' and 'id' are used solely as
data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY).
@@
