* docs/docmaker.py: Minor improvements to reduce unwanted spaces

and empty lines in output.
* docs/docmaker.py: Improved script to generate table of contents
and index pages.  It also supports wildcards on non Unix systems.

* include/freetype/*.h, include/freetype/cache/*.h: Updated comments
to include section definitions/delimitations for the API Reference
generator.

* include/freetype/freetype.h: Moved declaration of
`FT_Generic_Finalizer' and the `FT_Generic' structure to...
* include/freetype/fttypes.h: here.
This commit is contained in:
Werner Lemberg 2001-01-11 09:27:49 +00:00
parent 0f5616a801
commit 38208a6e6b
21 changed files with 554 additions and 408 deletions

View File

@ -1,13 +1,22 @@
2000-01-09 David Turner <david.turner@freetype.org> 2001-01-10 Werner Lemberg <wl@gnu.org>
* docs/docmaker.py: improved script to generate table of contents and * docs/docmaker.py: Minor improvements to reduce unwanted spaces
index pages. it also supports wildcards on non Unix systems and empty lines in output.
* include/freetype/*.h, include/freetype/cache/*.h: updated comments 2001-01-09 David Turner <david.turner@freetype.org>
to include section definitions / delimitations for the API Reference
generator..
2000-01-04 Werner Lemberg <wl@gnu.org> * docs/docmaker.py: Improved script to generate table of contents
and index pages. It also supports wildcards on non Unix systems.
* include/freetype/*.h, include/freetype/cache/*.h: Updated comments
to include section definitions/delimitations for the API Reference
generator.
* include/freetype/freetype.h: Moved declaration of
`FT_Generic_Finalizer' and the `FT_Generic' structure to...
* include/freetype/fttypes.h: here.
2001-01-04 Werner Lemberg <wl@gnu.org>
* include/freetype/ttnameid.h: Updated Unicode code range comments. * include/freetype/ttnameid.h: Updated Unicode code range comments.

View File

@ -10,7 +10,7 @@
import fileinput, sys, string, glob import fileinput, sys, string, glob
html_header = """ html_header = """\
<html> <html>
<header> <header>
<title>FreeType 2 API Reference</title> <title>FreeType 2 API Reference</title>
@ -21,54 +21,39 @@ html_header = """
LI { text-align=justify } LI { text-align=justify }
</style> </style>
</header> </header>
<body text="#000000" <body text=#000000
bgcolor="#FFFFFF" bgcolor=#FFFFFF
link="#0000EF" link=#0000EF
vlink="#51188E" vlink=#51188E
alink="#FF0000"> alink=#FF0000>
<center><h1>FreeType 2 API Reference</h1></center> <center><h1>FreeType 2 API Reference</h1></center>
""" """
html_footer = """ html_footer = """\
</body> </body>
</html> </html>"""
"""
section_title_header = """ section_title_header = "<center><h1>"
<center><h1> section_title_footer = "</h1></center>"
"""
section_title_footer = """ code_header = "<font color=blue><pre>"
</h1></center> code_footer = "</pre></font>"
"""
code_header = """
<font color=blue><pre>
"""
code_footer = """
</pre></font>
"""
para_header = "<p>" para_header = "<p>"
para_footer = "</p>" para_footer = "</p>"
block_header = """<center><hr width="750"><table width="750"><tr><td>""" block_header = "<center><hr width=75%><table width=75%><tr><td>"
block_footer = "</td></tr></table></center>" block_footer = "</td></tr></table></center>"
description_header = """<center><table width="650"><tr><td>""" description_header = "<center><table width=65%><tr><td>"
description_footer = """</td></tr></table></center><br>""" description_footer = "</td></tr></table></center><br>"
marker_header = """<center><table width="650" cellpadding=5><tr bgcolor="#EEEEFF"><td><em><b>""" marker_header = "<center><table width=65% cellpadding=5><tr bgcolor=#EEEEFF><td><em><b>"
marker_inter = "</b></em></td></tr><tr><td>" marker_inter = "</b></em></td></tr><tr><td>"
marker_footer = "</td></tr></table></center>" marker_footer = "</td></tr></table></center>"
source_header = """<center><table width="650"><tr bgcolor="#D6E8FF" width="100%"><td><pre> source_header = "<center><table width=65%><tr bgcolor=#D6E8FF width=100%><td><pre>"
""" source_footer = "</pre></table></center><br>"
source_footer = """</pre></table></center>
<br>
"""
current_section = None current_section = None
@ -206,10 +191,14 @@ class DocCode:
while l > 0 and string.strip( self.lines[l - 1] ) == "": while l > 0 and string.strip( self.lines[l - 1] ) == "":
l = l - 1 l = l - 1
print code_header # the code footer should be directly appended to the last code
# line to avoid an additional blank line
#
sys.stdout.write( code_header )
for line in self.lines[0 : l]: for line in self.lines[0 : l]:
print line sys.stdout.write( '\n' + line )
print code_footer sys.stdout.write( code_footer )
############################################################################# #############################################################################
@ -219,7 +208,6 @@ class DocCode:
# #
# The paragraph is filled line by line by the parser. # The paragraph is filled line by line by the parser.
# #
class DocParagraph: class DocParagraph:
def __init__( self ): def __init__( self ):
@ -229,13 +217,13 @@ class DocParagraph:
def add( self, line ): def add( self, line ):
# Get rid of unwanted spaces in the paragraph. # Get rid of unwanted spaces in the paragraph.
# #
# The following line is the same as # The following two lines are the same as
# #
# self.words.extend( string.split( line ) ) # self.words.extend( string.split( line ) )
# #
# but older Python versions don't have the `extend' attribute. # but older Python versions don't have the `extend' attribute.
# #
last = len(self.words) last = len( self.words )
self.words[last:last] = string.split( line ) self.words[last:last] = string.split( line )
@ -287,6 +275,7 @@ class DocParagraph:
print para_footer print para_footer
############################################################################# #############################################################################
# #
# DocContent is used to store the content of a given marker. # DocContent is used to store the content of a given marker.
@ -320,8 +309,6 @@ class DocParagraph:
# The DocContent object is entirely built at creation time; you must # The DocContent object is entirely built at creation time; you must
# pass a list of input text lines in the "lines_list" parameter. # pass a list of input text lines in the "lines_list" parameter.
# #
#
class DocContent: class DocContent:
def __init__( self, lines_list ): def __init__( self, lines_list ):
@ -390,7 +377,7 @@ class DocContent:
paragraph.add( line ) paragraph.add( line )
else: else:
# we're in code mode... # we are in code mode...
# #
line = aline line = aline
@ -454,7 +441,7 @@ class DocContent:
element.dump() element.dump()
if field: if field:
print "</field> " print "</field>"
def dump_html( self ): def dump_html( self ):
@ -475,7 +462,7 @@ class DocContent:
else: else:
if not in_table: if not in_table:
print '<table cellpadding=4><tr valign=top><td>' print "<table cellpadding=4><tr valign=top><td>"
in_table = 1 in_table = 1
else: else:
print "</td></tr><tr valign=top><td>" print "</td></tr><tr valign=top><td>"
@ -514,7 +501,7 @@ class DocContent:
###################################################################################### #############################################################################
# #
# #
# The DocBlock class is used to store a given comment block. It contains # The DocBlock class is used to store a given comment block. It contains
@ -527,9 +514,9 @@ class DocContent:
# "self.source" is simply a list of text lines taken from the # "self.source" is simply a list of text lines taken from the
# uncommented source itself. # uncommented source itself.
# #
# Finally, "self.name" is a simple identifier used to # Finally, "self.name" is a simple identifier used to uniquely identify
# uniquely identify the block. it is taken from the first word of the first # the block. It is taken from the first word of the first
# paragraphe of the first marker of a given block, i.e: # paragraph of the first marker of a given block, i.e:
# #
# <Type> Goo # <Type> Goo
# <Description> Bla bla bla # <Description> Bla bla bla
@ -539,13 +526,13 @@ class DocContent:
class DocBlock: class DocBlock:
def __init__( self, block_line_list = [], source_line_list = [] ): def __init__( self, block_line_list = [], source_line_list = [] ):
self.items = [] # current ( marker, contents ) list self.items = [] # current ( marker, contents ) list
self.section = None # section this block belongs to self.section = None # section this block belongs to
marker = None # current marker marker = None # current marker
content = [] # current content lines list content = [] # current content lines list
alphanum = string.letters + string.digits + "_" alphanum = string.letters + string.digits + "_"
self.name = None self.name = None
for line in block_line_list: for line in block_line_list:
line2 = string.lstrip( line ) line2 = string.lstrip( line )
@ -613,7 +600,7 @@ class DocBlock:
content = DocContent( lines ) content = DocContent( lines )
self.items.append( ( string.lower( marker ), content ) ) self.items.append( ( string.lower( marker ), content ) )
def find_content( self, marker ): def find_content( self, marker ):
for item in self.items: for item in self.items:
if ( item[0] == marker ): if ( item[0] == marker ):
@ -629,23 +616,24 @@ class DocBlock:
def dump_html( self ): def dump_html( self ):
types = [ 'type', 'struct', 'functype', 'function', 'constant', types = [ 'type', 'struct', 'functype', 'function',
'enum', 'macro' ] 'constant', 'enum', 'macro' ]
parameters = [ 'input', 'inout', 'output', 'return' ] parameters = [ 'input', 'inout', 'output', 'return' ]
if not self.items: if not self.items:
return return
# place html anchor when needed
if self.name:
print '<a name="'+self.name+'">'
# start of a block # start of a block
# #
print block_header print block_header
print "<h4>" + self.name + "</h4>" # place html anchor if needed
#
if self.name:
print '<a name="' + self.name + '">'
print "<h4>" + self.name + "</h4>"
print "</a>"
# print source code # print source code
# #
@ -657,12 +645,13 @@ class DocBlock:
while l >= 0 and string.strip( lines[l] ) == "": while l >= 0 and string.strip( lines[l] ) == "":
l = l - 1 l = l - 1
print source_header print source_header
print ""
for line in lines[0 : l + 1]: for line in lines[0 : l + 1]:
print line print line
print source_footer print source_footer
in_table = 0 in_table = 0
# dump each (marker,content) element # dump each (marker,content) element
# #
for element in self.items: for element in self.items:
@ -675,19 +664,19 @@ class DocBlock:
print description_footer print description_footer
elif not ( marker in types ): elif not ( marker in types ):
sys.stdout.write( marker_header )
print marker_header sys.stdout.write( marker )
print marker sys.stdout.write( marker_inter + '\n' )
print marker_inter
content.dump_html() content.dump_html()
print marker_footer print marker_footer
print "" print ""
print block_footer print block_footer
######################################################################################
#############################################################################
# #
# The DocSection class is used to store a given documentation section. # The DocSection class is used to store a given documentation section.
# #
@ -725,7 +714,7 @@ class DocSection:
# section # section
# #
if self.elements.has_key( block.name ): if self.elements.has_key( block.name ):
sys.stderr.write( "ERROR - duplicate element definition for " + sys.stderr.write( "ERROR - duplicate element definition for " +
"'" + block.name + "' in section '" + "'" + block.name + "' in section '" +
section.name + "'" ) section.name + "'" )
sys.quit() sys.quit()
@ -767,8 +756,8 @@ class DocSectionList:
self.sections = {} self.sections = {}
self.list = [] self.list = []
self.current_section = None self.current_section = None
self.index = [] # sorted list of blocks that are not sections self.index = [] # sorted list of blocks that
# are not sections
def append_section( self, block ): def append_section( self, block ):
name = string.lower( block.name ) name = string.lower( block.name )
@ -776,7 +765,7 @@ class DocSectionList:
if self.sections.has_key( name ): if self.sections.has_key( name ):
# There is already a section with this name in our # There is already a section with this name in our
# list. We'll try to complete it. # list. We will try to complete it.
# #
section = self.sections[name] section = self.sections[name]
if section.abstract: if section.abstract:
@ -789,7 +778,7 @@ class DocSectionList:
" for '" + name + "'" ) " for '" + name + "'" )
sys.quit() sys.quit()
else: else:
# The old section didn't contain an abstract; we're # The old section didn't contain an abstract; we are
# now going to replace it. # now going to replace it.
# #
section.abstract = abstract section.abstract = abstract
@ -802,7 +791,7 @@ class DocSectionList:
section = DocSection( block ) section = DocSection( block )
self.sections[name] = section self.sections[name] = section
self.list.append( section ) self.list.append( section )
self.current_section = section self.current_section = section
@ -822,12 +811,14 @@ class DocSectionList:
def prepare_files( self, file_prefix = None ): def prepare_files( self, file_prefix = None ):
# prepare the section list, by computing section filenames # prepare the section list, by computing section filenames
# and the index # and the index
#
if file_prefix: if file_prefix:
prefix = file_prefix + "-" prefix = file_prefix + "-"
else: else:
prefix = "" prefix = ""
# compute section names # compute section names
#
for section in self.sections.values(): for section in self.sections.values():
title_content = section.block.find_content( "title" ) title_content = section.block.find_content( "title" )
if title_content: if title_content:
@ -835,7 +826,8 @@ class DocSectionList:
else: else:
section.title = "UNKNOWN_SECTION_TITLE!" section.title = "UNKNOWN_SECTION_TITLE!"
# compute section filenames # compute section filenames
#
for section in self.sections.values(): for section in self.sections.values():
section.filename = prefix + section.name + ".html" section.filename = prefix + section.name + ".html"
@ -843,8 +835,9 @@ class DocSectionList:
self.index_filename = prefix + "index.html" self.index_filename = prefix + "index.html"
# compute the sorted block list for the index # compute the sorted block list for the index
#
self.index.sort( block_lexicographical_compare ) self.index.sort( block_lexicographical_compare )
def dump_html_toc( self ): def dump_html_toc( self ):
# dump an html table of contents # dump an html table of contents
@ -852,7 +845,7 @@ class DocSectionList:
old_stdout = sys.stdout old_stdout = sys.stdout
new_file = open( self.toc_filename, "w" ) new_file = open( self.toc_filename, "w" )
sys.stdout = new_file sys.stdout = new_file
print html_header print html_header
print "<center><h1>Table of Contents</h1></center>" print "<center><h1>Table of Contents</h1></center>"
@ -861,9 +854,9 @@ class DocSectionList:
for section in self.list: for section in self.list:
if section.abstract: if section.abstract:
print "<tr valign=top><td>" print "<tr valign=top><td>"
print '<a href="' + section.filename + '">' sys.stdout.write( '<a href="' + section.filename + '">' )
print section.title sys.stdout.write( section.title )
print "</a></td><td>" sys.stdout.write( "</a></td><td>" + '\n' )
section.abstract.dump_html() section.abstract.dump_html()
print "</td></tr>" print "</td></tr>"
@ -878,7 +871,6 @@ class DocSectionList:
old_stdout = sys.stdout old_stdout = sys.stdout
for section in self.sections.values(): for section in self.sections.values():
if section.filename: if section.filename:
new_file = open( section.filename, "w" ) new_file = open( section.filename, "w" )
sys.stdout = new_file sys.stdout = new_file
@ -889,7 +881,6 @@ class DocSectionList:
def dump_html_index( self ): def dump_html_index( self ):
old_stdout = sys.stdout old_stdout = sys.stdout
new_file = open( self.index_filename, "w" ) new_file = open( self.index_filename, "w" )
sys.stdout = new_file sys.stdout = new_file
@ -899,36 +890,32 @@ class DocSectionList:
line = 0 line = 0
print html_header print html_header
print "<center><h1>General Index</h1></center>" print "<center><h1>General Index</h1></center>"
print "<center><table cellpadding=5><tr valign=top><td>" print "<center><table cellpadding=5><tr valign=top><td>"
for block in self.index: for block in self.index:
sys.stdout.write( '<a href="' + block.section.filename +
'#' + block.name + '">' )
sys.stdout.write( block.name )
sys.stdout.write( "</a><br>" + '\n' )
print '<a href="'+block.section.filename+'#'+block.name+'">' if line * num_columns >= total:
print block.name
print "</a><br>"
if line*num_columns >= total:
print "</td><td>" print "</td><td>"
line = 0 line = 0
else: else:
line = line+1 line = line + 1
print "</tr></table></center>" print "</tr></table></center>"
print html_footer print html_footer
sys.stdout = old_stdout sys.stdout = old_stdout
# Filter a given list of DocBlocks. Returns a new list # Filter a given list of DocBlocks. Returns a new list
# of DocBlock objects that only contains element whose # of DocBlock objects that only contains element whose
# "type" (i.e. first marker) is in the "types" parameter. # "type" (i.e. first marker) is in the "types" parameter.
# #
def filter_blocks_by_type( block_list, types ): def filter_blocks_by_type( block_list, types ):
new_list = [] new_list = []
for block in block_list: for block in block_list:
if block.items: if block.items:
@ -964,7 +951,6 @@ def block_lexicographical_compare( b1, b2 ):
return 1 return 1
# dump a list block as a single HTML page # dump a list block as a single HTML page
# #
def dump_html_1( block_list ): def dump_html_1( block_list ):
@ -976,18 +962,16 @@ def dump_html_1( block_list ):
print html_footer print html_footer
def make_block_list_inner(): def make_block_list_inner():
"""parse a file and extract comments blocks from it""" """parse a file and extract comments blocks from it"""
file_list = [] file_list = []
sys.stderr.write( repr( sys.argv[1:] ) + '\n' ) sys.stderr.write( repr( sys.argv[1:] ) + '\n' )
for pathname in sys.argv[1:]: for pathname in sys.argv[1:]:
newpath = glob.glob( pathname ) newpath = glob.glob( pathname )
sys.stderr.write ( repr(newpath) + '\n' ) sys.stderr.write( repr(newpath) + '\n' )
last = len(file_list) last = len( file_list )
file_list[last:last] = newpath file_list[last:last] = newpath
if len( file_list ) == 0: if len( file_list ) == 0:
@ -1006,9 +990,9 @@ def make_block_list_inner():
# 4 - wait for beginning of source (or comment ??) # 4 - wait for beginning of source (or comment ??)
# 5 - process source # 5 - process source
# #
comment = [] comment = []
source = [] source = []
state = 0 state = 0
for line in fileinput.input( file_list ): for line in fileinput.input( file_list ):
l = len( line ) l = len( line )
@ -1144,7 +1128,6 @@ def make_block_list_inner():
# create a list of DocBlock elements # create a list of DocBlock elements
# #
def make_block_list(): def make_block_list():
source_block_list = make_block_list_inner() source_block_list = make_block_list_inner()
list = [] list = []
@ -1155,7 +1138,6 @@ def make_block_list():
return list return list
# This function is only used for debugging # This function is only used for debugging
# #
def dump_block_list( list ): def dump_block_list( list ):
@ -1191,8 +1173,8 @@ def main( argv ):
section_list.dump_html_toc() section_list.dump_html_toc()
section_list.dump_html_sections() section_list.dump_html_sections()
section_list.dump_html_index() section_list.dump_html_index()
# list2 = filter_blocks( list, ['type','macro','enum','constant', 'functype'] ) # list2 = filter_blocks( list, ['type','macro','enum','constant','functype'] )
# list2 = list # list2 = list
# list2.sort( block_lexicographical_compare ) # list2.sort( block_lexicographical_compare )
@ -1203,6 +1185,7 @@ def main( argv ):
# If called from the command line # If called from the command line
#
if __name__ == '__main__': if __name__ == '__main__':
main( sys.argv ) main( sys.argv )

View File

@ -35,9 +35,13 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/*** /*************************************************************************/
* <Section> cache_subsystem /* */
*/ /* <Section> */
/* cache_subsystem */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/*************************************************************************/ /*************************************************************************/
@ -163,8 +167,10 @@ FT_BEGIN_HEADER
FT_UInt gindex, FT_UInt gindex,
FT_Glyph *aglyph ); FT_Glyph *aglyph );
/* */ /* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTCIMAGE_H__ */ #endif /* __FTCIMAGE_H__ */

View File

@ -70,9 +70,14 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/***
* <Section> cache_subsystem /*************************************************************************/
*/ /* */
/* <Section> */
/* cache_subsystem */
/* */
/*************************************************************************/
#define FTC_MAX_FACES_DEFAULT 2 #define FTC_MAX_FACES_DEFAULT 2
#define FTC_MAX_SIZES_DEFAULT 4 #define FTC_MAX_SIZES_DEFAULT 4
@ -363,6 +368,7 @@ FT_BEGIN_HEADER
} FTC_CacheRec; } FTC_CacheRec;
/* */ /* */

View File

@ -26,63 +26,76 @@
#include FT_CACHE_IMAGE_H #include FT_CACHE_IMAGE_H
FT_BEGIN_HEADER FT_BEGIN_HEADER
/***
* <Section> cache_subsystem
*/
/*********************************************************************** /*************************************************************************/
* /* */
* <Type> FTC_SBit /* <Section> */
* /* cache_subsystem */
* <Description> /* */
* handle to a small bitmap descriptor. see the FTC_SBitRec /*************************************************************************/
* structure for details..
*/
/*************************************************************************/
/* */
/* <Type> */
/* FTC_SBit */
/* */
/* <Description> */
/* A handle to a small bitmap descriptor. See the FTC_SBitRec */
/* structure for details. */
/* */
typedef struct FTC_SBitRec_* FTC_SBit; typedef struct FTC_SBitRec_* FTC_SBit;
/***********************************************************************
* /*************************************************************************/
* <Type> FTC_SBit_Cache /* */
* /* <Type> */
* <Description> /* FTC_SBit_Cache */
* handle to a small bitmap cache. These are special cache objects /* */
* used to store small glyph bitmaps (and anti-aliased pixmaps) in /* <Description> */
* a much more efficient way than the traditional glyph image cache /* A handle to a small bitmap cache. These are special cache objects */
* implemented by FTC_Image_Cache /* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */
*/ /* much more efficient way than the traditional glyph image cache */
/* implemented by FTC_Image_Cache. */
/* */
typedef struct FTC_SBit_CacheRec_* FTC_SBit_Cache; typedef struct FTC_SBit_CacheRec_* FTC_SBit_Cache;
/***********************************************************************
* /*************************************************************************/
* <Struct> FTC_SBitRec /* */
* /* <Struct> */
* <Description> /* FTC_SBitRec */
* a very compact structure used to describe a small glyph bitmap /* */
* /* <Description> */
* <Fields> /* A very compact structure used to describe a small glyph bitmap. */
* width :: bitmap width in pixels /* */
* height :: bitmap height in pixels /* <Fields> */
* /* width :: The bitmap width in pixels. */
* left :: horizontal distance from pen position to left bitmap /* */
* border (a.k.a. "left side bearing", or "lsb") /* height :: The bitmap height in pixels. */
* /* */
* top :: vertical distance from pen position (on the baseline) /* left :: The horizontal distance from the pen position to the */
* to the upper bitmap border (a.k.a. "top side bearing") /* left bitmap border (a.k.a. `left side bearing', or */
* the distance is positive for upwards Y coordinates. /* `lsb'). */
* /* */
* format :: format of glyph bitmap (mono or gray) /* top :: The vertical distance from the pen position (on the */
* /* baseline) to the upper bitmap border (a.k.a. `top side */
* pitch :: number of bytes per bitmap lines. may be positive or /* bearing'). The distance is positive for upwards */
* negative /* Y coordinates. */
* /* */
* xadvance :: horizontal advance width in pixels /* format :: The format of the glyph bitmap (monochrome or gray). */
* yadvance :: vertical advance height in pixels /* */
* /* pitch :: The number of bytes per bitmap line. May be positive */
* buffer :: pointer to bitmap pixels /* or negative. */
*/ /* */
/* xadvance :: The horizontal advance width in pixels. */
/* */
/* yadvance :: The vertical advance height in pixels. */
/* */
/* buffer :: A pointer to the bitmap pixels. */
/* */
typedef struct FTC_SBitRec_ typedef struct FTC_SBitRec_
{ {
FT_Byte width; FT_Byte width;
@ -100,59 +113,64 @@ FT_BEGIN_HEADER
} FTC_SBitRec; } FTC_SBitRec;
/************************************************************************* /*************************************************************************/
* /* */
* <Section> FTC_SBit_Cache_New /* <Function> */
* /* FTC_SBit_Cache_New */
* <Description> /* */
* Create a new cache to store small glyph bitmaps /* <Description> */
* /* Creates a new cache to store small glyph bitmaps. */
* <Input> /* */
* manager :: handle to source cache manager /* <Input> */
* /* manager :: A handle to the source cache manager. */
* <Output> /* */
* acache :: handle to new sbit cache. NULL in case of error /* <Output> */
* /* acache :: A handle to the new sbit cache. NULL in case of error. */
* <Return> /* */
* error code. 0 means success /* <Return> */
*/ /* FreeType error code. 0 means success. */
/* */
FT_EXPORT( FT_Error ) FTC_SBit_Cache_New( FTC_Manager manager, FT_EXPORT( FT_Error ) FTC_SBit_Cache_New( FTC_Manager manager,
FTC_SBit_Cache *acache ); FTC_SBit_Cache *acache );
/*************************************************************************
* /*************************************************************************/
* <Section> FTC_SBit_Cache_Lookup /* */
* /* <Function> */
* <Description> /* FTC_SBit_Cache_Lookup */
* Lookup a given small glyph bitmap in a given sbit cache /* */
* /* <Description> */
* <Input> /* Looks up a given small glyph bitmap in a given sbit cache. */
* cache :: handle to source sbit cache /* */
* desc :: pointer to glyph image descriptor /* <Input> */
* gindex :: glyph index /* cache :: A handle to the source sbit cache. */
* /* desc :: A pointer to the glyph image descriptor. */
* <Output> /* gindex :: The glyph index. */
* sbit :: handle to a small bitmap descriptor /* */
* /* <Output> */
* <Return> /* sbit :: A handle to a small bitmap descriptor. */
* error code. 0 means success /* */
* /* <Return> */
* <Note> /* FreeType error code. 0 means success. */
* the small bitmap descriptor, and its bit buffer are owned by the /* */
* cache and should never be freed by the application. They might /* <Note> */
* as well disappear from memory on the next cache lookup, so don't /* The small bitmap descriptor and its bit buffer are owned by the */
* treat them like persistent data.. /* cache and should never be freed by the application. They might */
* /* as well disappear from memory on the next cache lookup, so don't */
* the descriptor's "buffer" field is set to 0 to indicate a missing /* treat them as persistent data. */
* glyph bitmap. /* */
*/ /* The descriptor's `buffer' field is set to 0 to indicate a missing */
/* glyph bitmap. */
/* */
FT_EXPORT( FT_Error ) FTC_SBit_Cache_Lookup( FTC_SBit_Cache cache, FT_EXPORT( FT_Error ) FTC_SBit_Cache_Lookup( FTC_SBit_Cache cache,
FTC_Image_Desc* desc, FTC_Image_Desc* desc,
FT_UInt gindex, FT_UInt gindex,
FTC_SBit *sbit ); FTC_SBit *sbit );
/* */ /* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTCSBITS_H__ */ #endif /* __FTCSBITS_H__ */

View File

@ -55,18 +55,23 @@ FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/*************************************************************************
* /*************************************************************************/
* <Section> base_interface /* */
* /* <Section> */
* <Title> Base Interface /* base_interface */
* /* */
* <Abstract> /* <Title> */
* The FreeType 2 base font interface /* Base Interface */
* /* */
* <Description> /* <Abstract> */
* This sections details the public high-level API of FreeType 2 /* The FreeType 2 base font interface. */
*/ /* */
/* <Description> */
/* This section describes the public high-level API of FreeType 2. */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -2243,6 +2248,7 @@ FT_BEGIN_HEADER
FT_EXPORT( void ) FT_Vector_Transform( FT_Vector* vec, FT_EXPORT( void ) FT_Vector_Transform( FT_Vector* vec,
FT_Matrix* matrix ); FT_Matrix* matrix );
/* */ /* */

View File

@ -38,9 +38,13 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/******************************** /*************************************************************************/
* <Section> outline_processing /* */
*/ /* <Section> */
/* outline_processing */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */

View File

@ -50,19 +50,24 @@ FT_BEGIN_HEADER
#define FT_CACHE_INTERNAL_GLYPH_H FT2_PUBLIC_FILE(cache/ftcglyph.h) #define FT_CACHE_INTERNAL_GLYPH_H FT2_PUBLIC_FILE(cache/ftcglyph.h)
#define FT_CACHE_INTERNAL_CHUNK_H FT2_PUBLIC_FILE(cache/ftcchunk.h) #define FT_CACHE_INTERNAL_CHUNK_H FT2_PUBLIC_FILE(cache/ftcchunk.h)
/**************************************************************************
* /*************************************************************************/
* <Section> cache_subsystem /* */
* /* <Section> */
* <Title> Cache Sub-System /* cache_subsystem */
* /* */
* <Abstract> /* <Title> */
* How to cache face, size and glyph data with FreeType 2 /* Cache Sub-System */
* /* */
* <Description> /* <Abstract> */
* This section details the FreeType 2 cache sub-system which is still /* How to cache face, size, and glyph data with FreeType 2. */
* in beta. /* */
*/ /* <Description> */
/* This section describes the FreeType 2 cache sub-system which is */
/* stile in beta. */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/*************************************************************************/ /*************************************************************************/
@ -345,6 +350,9 @@ FT_BEGIN_HEADER
FTC_Cache *acache ); FTC_Cache *acache );
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTCACHE_H__ */ #endif /* __FTCACHE_H__ */

View File

@ -39,20 +39,25 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* <Section> glyph_management */ /* <Section> */
/* glyph_management */
/* */ /* */
/* <Title> Glyph Management */ /* <Title> */
/* Glyph Management */
/* */ /* */
/* <Abstract> */ /* <Abstract> */
/* Generic interface to manage individual glyph data */ /* Generic interface to manage individual glyph data. */
/* */ /* */
/* <Description> */ /* <Description> */
/* This section contains definitions used to manage glyph data */ /* This section contains definitions used to manage glyph data */
/* through generic FT_Glyph objects. Each one of them can contain */ /* through generic FT_Glyph objects. Each of them can contain a */
/* a bitmap, a vector outline, or even images in other formats. */ /* bitmap, a vector outline, or even images in other formats. */
/* */ /* */
/*************************************************************************/
/* forward declaration to a private type */ /* forward declaration to a private type */
typedef struct FT_Glyph_Class_ FT_Glyph_Class; typedef struct FT_Glyph_Class_ FT_Glyph_Class;
@ -296,7 +301,6 @@ FT_BEGIN_HEADER
/* */ /* */
/* The default value for `bbox_mode' is `ft_glyph_bbox_pixels'. */ /* The default value for `bbox_mode' is `ft_glyph_bbox_pixels'. */
/* */ /* */
enum enum
{ {
ft_glyph_bbox_unscaled = 0, /* return unscaled font units */ ft_glyph_bbox_unscaled = 0, /* return unscaled font units */
@ -405,9 +409,13 @@ FT_BEGIN_HEADER
/* other helpful functions */ /* other helpful functions */
/***** /*************************************************************************/
* <Section> base_interface /* */
*/ /* <Section> */
/* base_interface */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -448,6 +456,9 @@ FT_BEGIN_HEADER
FT_EXPORT( FT_Error ) FT_Matrix_Invert( FT_Matrix* matrix ); FT_EXPORT( FT_Error ) FT_Matrix_Invert( FT_Matrix* matrix );
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTGLYPH_H__ */ #endif /* __FTGLYPH_H__ */

View File

@ -33,11 +33,14 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/***********************************************************************
* /*************************************************************************/
* <Section> basic_types /* */
* /* <Section> */
*/ /* basic_types */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -231,11 +234,13 @@ FT_BEGIN_HEADER
} FT_Bitmap; } FT_Bitmap;
/*********************************************************************** /*************************************************************************/
* /* */
* <Section> outline_processing /* <Section> */
* /* outline_processing */
*/ /* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -528,11 +533,13 @@ FT_BEGIN_HEADER
} FT_Outline_Funcs; } FT_Outline_Funcs;
/*********************************************************************** /*************************************************************************/
* /* */
* <Section> Basic_Types /* <Section> */
* /* basic_types */
*/ /* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -612,18 +619,23 @@ FT_BEGIN_HEADER
/* */ /* */
/*************************************************************************/ /*************************************************************************/
/************************************************************************
* /*************************************************************************/
* <Section> Raster /* */
* /* <Section> */
* <Title> Scanline converter /* Raster */
* /* */
* <Abstract> /* <Title> */
* How vectorial outlines are converted into bitmaps and pixmaps /* Scanline converter */
* /* */
* <Description> /* <Abstract> */
* This section contains technical definitions /* How vectorial outlines are converted into bitmaps and pixmaps. */
*/ /* */
/* <Description> */
/* This section contains technical definitions. */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -692,9 +704,9 @@ FT_BEGIN_HEADER
/* */ /* */
typedef struct FT_Span_ typedef struct FT_Span_
{ {
short x; short x;
unsigned short len; unsigned short len;
unsigned char coverage; unsigned char coverage;
} FT_Span; } FT_Span;
@ -804,28 +816,33 @@ FT_BEGIN_HEADER
/* <Fields> */ /* <Fields> */
/* ft_raster_flag_default :: This value is 0. */ /* ft_raster_flag_default :: This value is 0. */
/* */ /* */
/* ft_raster_flag_aa :: */ /* ft_raster_flag_aa :: This flag is set to indicate that an */
/* this flag is set to indicate that a anti-aliased glyph image */ /* anti-aliased glyph image should be */
/* should be generated. Otherwise, it will be monochrome (1-bit) */ /* generated. Otherwise, it will be */
/* monochrome (1-bit) */
/* */ /* */
/* ft_raster_flag_direct :: */ /* ft_raster_flag_direct :: This flag is set to indicate direct */
/* this flag is set to indicate direct rendering. In this mode, */ /* rendering. In this mode, client */
/* client applications must provide their own span callback. */ /* applications must provide their own span */
/* this let them direct drawing or composition over an existing */ /* callback. This lets them directly */
/* bitmap. If this bit is not set, the target pixmap's buffer */ /* draw or compose over an existing bitmap. */
/* _must_ be zeroed before rendering. */ /* If this bit is not set, the target */
/* pixmap's buffer _must_ be zeroed before */
/* rendering. */
/* */ /* */
/* note that for now, direct rendering is only possible with */ /* Note that for now, direct rendering is */
/* anti-aliased glyphs only.. */ /* only possible with anti-aliased glyphs. */
/* */ /* */
/* ft_raster_flag_clip :: */ /* ft_raster_flag_clip :: This flag is only used in direct */
/* this flag is only used in direct rendering mode. When set, */ /* rendering mode. If set, the output will */
/* the output will be clipped to a box specified in the "clip_box" */ /* be clipped to a box specified in the */
/* field of the FT_Raster_Params structure. */ /* "clip_box" field of the FT_Raster_Params */
/* structure. */
/* */ /* */
/* note that by default, the glyph bitmap is clipped to the */ /* Note that by default, the glyph bitmap */
/* target pixmap, except in direct rendering mode where all */ /* is clipped to the target pixmap, except */
/* spans are generated if no clipping box is set. */ /* in direct rendering mode where all spans */
/* are generated if no clipping box is set. */
/* */ /* */
typedef enum typedef enum
{ {
@ -1066,6 +1083,9 @@ FT_BEGIN_HEADER
} FT_Raster_Funcs; } FT_Raster_Funcs;
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTIMAGE_H__ */ #endif /* __FTIMAGE_H__ */

View File

@ -34,20 +34,24 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/**************************************************************************
* /*************************************************************************/
* <Section> list_processing /* */
* /* <Section> */
* <Title> List Processing /* list_processing */
* /* */
* <Abstract> /* <Title> */
* simple management of lists /* List Processing */
* /* */
* <Description> /* <Abstract> */
* This section contains various definitions related to list processing /* Simple management of lists. */
* using doubly-linked nodes. /* */
* /* <Description> */
*/ /* This section contains various definitions related to list */
/* processing using doubly-linked nodes. */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -227,7 +231,9 @@ FT_BEGIN_HEADER
FT_Memory memory, FT_Memory memory,
void* user ); void* user );
/* */ /* */
FT_END_HEADER FT_END_HEADER

View File

@ -34,19 +34,24 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/*******************************************************************
* /*************************************************************************/
* <Section> Mac_Specific /* */
* /* <Section> */
* <Title> Mac-Specific Interface /* Mac_Specific */
* /* */
* <Abstract> /* <Title> */
* Only available on the Macintosh /* Mac-Specific Interface */
* /* */
* <Description> /* <Abstract> */
* The following definitions are only available when FreeType /* Only available on the Macintosh. */
* is compiled on a Macintosh. /* */
*/ /* <Description> */
/* The following definitions are only available if FreeType is */
/* compiled on a Macintosh. */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -78,7 +83,6 @@ FT_BEGIN_HEADER
/* { */ /* { */
/* fond = GetResource( 'FOND', fontName ); */ /* fond = GetResource( 'FOND', fontName ); */
/* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */ /* error = FT_New_Face_From_FOND( library, fond, 0, &face ); */
/* */
/* } */ /* } */
/* */ /* */
FT_EXPORT( FT_Error ) FT_New_Face_From_FOND( FT_Library library, FT_EXPORT( FT_Error ) FT_New_Face_From_FOND( FT_Library library,
@ -86,8 +90,10 @@ FT_BEGIN_HEADER
FT_Long face_index, FT_Long face_index,
FT_Face *aface ); FT_Face *aface );
/* */ /* */
FT_END_HEADER FT_END_HEADER

View File

@ -26,20 +26,25 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/**********************************************************************
* /*************************************************************************/
* <Section> Multiple_Masters /* */
* /* <Section> */
* <Title> Multiple Masters /* multiple_masters */
* /* */
* <Abstract> /* <Title> */
* How to manage multiple masters fonts /* Multiple Masters */
* /* */
* <Description> /* <Abstract> */
* The following types and functions are used to manage multiple /* How to manage Multiple Masters fonts. */
* master fonts, i.e. choose specific design instances by setting /* */
* design axis coordinates. /* <Description> */
*/ /* The following types and functions are used to manage Multiple */
/* Master fonts, i.e. the selection of specific design instances by */
/* setting design axis coordinates. */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -182,6 +187,9 @@ FT_BEGIN_HEADER
FT_Fixed* coords ); FT_Fixed* coords );
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTMM_H__ */ #endif /* __FTMM_H__ */

View File

@ -26,18 +26,24 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/**************************************************************************
* /*************************************************************************/
* <Section> Module_Management /* */
* /* <Section> */
* <Title> Module Management /* module_management */
* /* */
* <Abstract> How to add, upgrade and remove modules from FreeType /* <Title> */
* /* Module Management */
* <Description> /* */
* The definitions below are used to manage modules within FreeType. /* <Abstract> */
* Modules can be added, upgraded and removed at runtime. /* How to add, upgrade, and remove modules from FreeType. */
*/ /* */
/* <Description> */
/* The definitions below are used to manage modules within FreeType. */
/* Modules can be added, upgraded, and removed at runtime. */
/* */
/*************************************************************************/
/* module bit flags */ /* module bit flags */
typedef enum FT_Module_Flags_ typedef enum FT_Module_Flags_
@ -278,6 +284,9 @@ FT_BEGIN_HEADER
FT_EXPORT( void ) FT_Add_Default_Modules( FT_Library library ); FT_EXPORT( void ) FT_Add_Default_Modules( FT_Library library );
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTMODULE_H__ */ #endif /* __FTMODULE_H__ */

View File

@ -30,24 +30,29 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/************************************************************************** /*************************************************************************/
* /* */
* <Section> SFNT_Names /* <Section> */
* /* sfnt_names */
* <Title> SFNT Names /* */
* /* <Title> */
* <Abstract> Access the names embedded in TrueType and OpenType files /* SFNT Names */
* /* */
* <Description> /* <Abstract> */
* The TrueType and OpenType specification allow the inclusion of /* Access the names embedded in TrueType and OpenType files. */
* a special "names table" in font files. This table contains textual /* */
* (and internationalised) information regarding the font, like /* <Description> */
* family name, copyright, version, etc.. /* The TrueType and OpenType specification allow the inclusion of */
* /* a special `names table' in font files. This table contains */
* the definitions below are used to access them when available /* textual (and internationalized) information regarding the font, */
* /* like family name, copyright, version, etc. */
* note that this has nothing to do with "glyph names" !! /* */
*/ /* The definitions below are used to access them if available. */
/* */
/* Note that this has nothing to do with glyph names! */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -137,8 +142,11 @@ FT_BEGIN_HEADER
FT_EXPORT( FT_Error ) FT_Get_Sfnt_Name( FT_Face face, FT_EXPORT( FT_Error ) FT_Get_Sfnt_Name( FT_Face face,
FT_UInt index, FT_UInt index,
FT_SfntName *aname ); FT_SfntName *aname );
/* */ /* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTNAMES_H__ */ #endif /* __FTNAMES_H__ */

View File

@ -27,21 +27,25 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* <Section> outline_processing */ /* <Section> */
/* outline_processing */
/* */ /* */
/* <Title> Outline Processing */ /* <Title> */
/* Outline Processing */
/* */ /* */
/* <Abstract> */ /* <Abstract> */
/* Functions to create, transform and render vectorial glyph images */ /* Functions to create, transform, and render vectorial glyph images. */
/* */ /* */
/* <Description> */ /* <Description> */
/* This sections contains routines used to create and destroy */ /* This section contains routines used to create and destroy scalable */
/* scalable glyph images known as "outlines". These can also be */ /* glyph images known as `outlines'. These can also be measured, */
/* measured, transformed and converted into bitmaps, pixmaps and */ /* transformed, and converted into bitmaps and pixmaps. */
/* */
/* */ /* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -331,6 +335,9 @@ FT_BEGIN_HEADER
FT_Raster_Params* params ); FT_Raster_Params* params );
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTOUTLN_H__ */ #endif /* __FTOUTLN_H__ */

View File

@ -27,9 +27,14 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/****
* <Section> Module_Management /*************************************************************************/
*/ /* */
/* <Section> */
/* module_management */
/* */
/*************************************************************************/
/* create a new glyph object */ /* create a new glyph object */
typedef FT_Error (*FT_Glyph_Init_Func) ( FT_Glyph glyph, typedef FT_Error (*FT_Glyph_Init_Func) ( FT_Glyph glyph,
@ -183,6 +188,7 @@ FT_BEGIN_HEADER
FT_UInt num_params, FT_UInt num_params,
FT_Parameter* parameters ); FT_Parameter* parameters );
/* */ /* */

View File

@ -264,8 +264,10 @@ FT_BEGIN_HEADER
unsigned char* limit; unsigned char* limit;
}; };
/* */ /* */
FT_END_HEADER FT_END_HEADER
#endif /* __FTSYSTEM_H__ */ #endif /* __FTSYSTEM_H__ */

View File

@ -29,19 +29,24 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* <Section> basic_types */ /* <Section> */
/* basic_types */
/* */ /* */
/* <Title> Basic Data Types */ /* <Title> */
/* Basic Data Types */
/* */ /* */
/* <Abstract> */ /* <Abstract> */
/* The basic data types defined by the library */ /* The basic data types defined by the library. */
/* */ /* */
/* <Description> */ /* <Description> */
/* This sections contains the basic data types defined by FreeType 2, */ /* This section contains the basic data types defined by FreeType 2, */
/* rangine from simple scalar types to font specific ones */ /* ranging from simple scalar types to font specific ones. */
/* */ /* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -341,7 +346,6 @@ FT_BEGIN_HEADER
} FT_Generic; } FT_Generic;
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* <Macro> */ /* <Macro> */
@ -366,10 +370,14 @@ FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/**************************************************************************
* /*************************************************************************/
* <Section> list_processing /* */
*/ /* <Section> */
/* list_processing */
/* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -440,6 +448,7 @@ FT_BEGIN_HEADER
} FT_ListRec; } FT_ListRec;
/* */ /* */
#define FT_IS_EMPTY( list ) ( (list).head == 0 ) #define FT_IS_EMPTY( list ) ( (list).head == 0 )

View File

@ -28,18 +28,24 @@
FT_BEGIN_HEADER FT_BEGIN_HEADER
/******************************************************************** /*************************************************************************/
* /* */
* <Section> Type1_Tables /* <Section> */
* /* type1_tables */
* <Title> Type 1 Tables /* */
* /* <Title> */
* <Abstract> Type 1 (Postscript) specific font tables /* Type 1 Tables */
* /* */
* <Description> /* <Abstract> */
* This section .... /* Type 1 (PostScript) specific font tables. */
*/ /* */
/* <Description> */
/* This section contains the definition of Type 1-specific tables, */
/* including structures related to other PostScript font formats. */
/* */
/*************************************************************************/
/* Note that we separate font data in T1_FontInfo and T1_Private */ /* Note that we separate font data in T1_FontInfo and T1_Private */
/* structures in order to support Multiple Master fonts. */ /* structures in order to support Multiple Master fonts. */
@ -246,6 +252,9 @@ FT_BEGIN_HEADER
} CID_Info; } CID_Info;
/* */
FT_END_HEADER FT_END_HEADER
#endif /* __T1TABLES_H__ */ #endif /* __T1TABLES_H__ */

View File

@ -29,17 +29,21 @@ FT_BEGIN_HEADER
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* <Section> TrueType_Tables */ /* <Section> */
/* truetype_tables */
/* */ /* */
/* <Title> TrueType Tables */ /* <Title> */
/* TrueType Tables */
/* */ /* */
/* <Abstract> */ /* <Abstract> */
/* TrueType-specific table types and functions */ /* TrueType-specific table types and functions. */
/* */ /* */
/* <Description> */ /* <Description> */
/* This sections contains the definition of TrueType-specific tables */ /* This section contains the definition of TrueType-specific tables */
/* as well as some routines used to access and process them. */ /* as well as some routines used to access and process them. */
/* */ /* */
/*************************************************************************/
/*************************************************************************/ /*************************************************************************/
/* */ /* */
@ -586,6 +590,7 @@ FT_BEGIN_HEADER
/* */ /* */
FT_END_HEADER FT_END_HEADER
#endif /* __TTTABLES_H__ */ #endif /* __TTTABLES_H__ */