shithub: freetype+ttf2subf

Download patch

ref: 17d6bdec92ba9d83b33f2d9bfd7bf904c6ca7528
parent: 442005b73687a5f139466b907bc91178705ccb15
author: David Turner <[email protected]>
date: Mon Jan 31 13:18:56 EST 2000

removed obsolete documentation files

git/fs: mount .git/fs: mount/attach disallowed
--- a/docs/BUILD
+++ /dev/null
@@ -1,375 +1,0 @@
-                       The FreeType Build System Internals
-                       -----------------------------------
-
-Introduction:
-
-  This document describes the details of the FreeType build system. The
-  build system is a set of Makefiles and other configuration files used
-  to select, compile and link together the various FreeType components
-  according to the current platform, compiler and requested feature set.
-
-  This document also explains how to use the build system to develop
-  third-party font drivers or extensions to the engine, without altering
-  the general FreeType hierarchy;
-
-
-I. Portability issues :
-
-  Given that the design of FreeType 2 is much more modular and flexible than
-  in previous versions, its build system is entirely based on GNU Make. There
-  are several reasons for this :
-
-    - It is by far the most available make tool on the planet, and
-      has probably been ported to every development environment known
-      to homo programmaticus.
-
-    - It provides useful features (like conditional defines, pattern
-      and wildcard matching) which are essential when implementing a
-      flexible configuration system, as described below
-
-  Note that you do not need to have a unix-like shell (like "sh" or "csh")
-  on your system in order to build FreeType.
-  
-
-
-
-II. The library design :
-
-  FreeType is made of several components, each with a specific role :
-
-    - THE BASE LAYER:
-      It is used to implement generic font services as well as provide
-      the high-level API used by client applications.
-
-    - ONE OR MORE FONT DRIVERS:
-      Each driver is a small component used to read and process a given
-      font format. Note that with FreeType 2, it is possible to add,
-      remove or upgrade a font driver at *runtime*.
-
-    - ONE OR MORE RASTERS:
-      A raster is a module used to render a vectorial glyph outline into
-      a bitmap or an anti-aliased pixmap. They differ in their output
-      quality, speed and memory usage.
-
-    - A LOW-LEVEL MODULE, CALLED "FTSYSTEM":
-      It is used to implement memory management and file i/o. Uses the
-      Ansi C Library by default, though some system-specific replacements
-      are provided in order to improve performance.
-
-    - AN "INIT" LAYER:
-      A tiny module used to implement the library initialisation routine,
-      i.e. FT_Init_FreeType. It is in charge of registering the font drivers
-      and rasters selected at build time.
-
-    - AN "OLD API" LAYER:
-      A simple layer used to link legacy applications using the FreeType
-      1.x API. Note that it is binary backwards compatible, which means that
-      applications do not need to be recompiled, only re-linked to this
-      layer.
-
-  For more details, please read the "FreeType Internals" Document.      
-
-
-  The FreeType build system is in charge of the following tasks :
-
-    - detect (or select) the current platform in order to select the
-      best version of the "ftsystem" module. By default, it will use
-      the pure-ANSI version.
-
-    - determine which font drivers, and which rasters, should be
-      statically linked to the library at build time. These will always
-      be available after the library has been initialised through a call
-      to FT_Init_FreeType.
-
-    - eventually compile other font drivers or rasters in order to later
-      link them dynamically to the library at runtime, through
-      FT_Add_Driver / FT_Upgrade_Driver..
-
-    - compile the "init" layer, putting code in the implementation of
-      the FT_Init_FreeType function to register each selected font driver
-      or raster to the library.
-
-
-
-III. General overview :
-
-  The FreeType build system uses a hierarchy of included sub-Makefiles
-  to compile and link the library.
-
-  Each included sub-Makefile is called a "rules" file, and has a very
-  specific purpose. The suffix for rules files is ".mk" as in :
-
-       detect.mk
-       config.mk
-       rules.mk
-       etc...
-
-
-  Here's a simple diagram of the build hierarchy, which is then explained
-  with details :
-
-
-
-                       Makefile            ( ./Makefile )
-
-                          |
-                          |
-                          v
-
-                     Config Rules          ( ./config/<system>/config.mk )
-
-                          |
-                          |
-                          v
-
-                    Library  Rules         ( ./config/freetype.mk )
-
-                      |   |   |
-                      |   |   |
-                      v   v   v
-
-                  Component(s) Rules       ( ./src/<component>/rules.mk )
-
-
-
-  1. The "root" Makefile :
-
-     This file must be invoked from the "freetype" directory with GNU Make.
-
-     a. Host platform auto-detection:
-
-       When run for the first time, this Makefile will try to auto-detect
-       the current host platform, by running the rules file named
-       `./config/detect.mk'. If the host system cannot be detected,
-       it will default to the `ansi' system.
-
-       It will then copy the rules file `./config/<system>/config.mk' to
-       the current directory and display the results of the auto-detection.
-
-       You can, at any time, re-run the auto-detection routine by invoking
-       the root Makefile with the "setup" target, as in :
-
-              % make setup
-
-       Note also that it is possible to use a second argument to indicate
-	   a specific compiler. For example, here are the lignes to be used
-	   in order to configure a build with LCC, Visual C++ and Visual Age
-	   on a Win32 machine
-	   
-	          > gmake setup lcc
-			  > gmake setup visualc
-			  > gmake setup visualage
-
-       The list of compilers is platform-specific and should be contained
-	   in `config/<system>/detect.mk'.
-
-       If the detection results do not correspond to your platform or
-       settings, refer to chapter VI which describes the auto-detection
-       system in great details..
-
-
-     b. Building the library:
-
-       Once the host platform has been detected, you can run `make' once
-       again. The root Makefile will then detect the configuration rules
-       file in the current directory then include it.
-
-     Note also that the root Makefile is responsible for defining, if it
-     is not already part of the current environment, the variable TOP, which
-     designates the top of the FreeType source hierarchy.
-
-     When undefined, it defaults to `.'
-
-
-  2. The Configuration file :
-
-     The configuration rules file is used to set many important variables
-     before including/calling the library rules file (see below).
-
-     These variables are mainly used to describe the host environment
-     and compilers. Indeed, this file defines, among others, the following:
-
-       SEP     The directory path separator. This can be `/',`\' or ':'
-               depending on the current platform. Note that all pathnames
-               are composed with $(SEP) in all rules file (except in
-               `include' statements which work well with '/' on all
-               platforms)
-
-       CC      The compiler to use
-
-       CFLAGS  The compiler flags used to compile a given source to an
-               object file. Usually contains flags for optimisation,
-               debugging and/or ansi-compliance
-
-       I       The flag to be used to indicate an additionnal include path
-               to the compiler. This defaults to `-I' for an "ansi" system,
-               but can be different for others (e.g. `/i=',`-J ', etc..)
-
-       D       The flag to be used to indicate a macro definition to the
-               compiler. This defaults to `-D' for an ANSI system.
-
-       T       The flag to be used to indicate a target object file to the
-               compiler. This defaults to `-o ' for an ANSI system. Note the
-               space after the `o'.        
-
-       O       The object file extension to be used on the current platform.
-               Defaults to `o' for an ANSI system, but can be `obj', `coff'
-               or others.. There is no dot in the extension !
-
-       A       The library file extension to be used on the current platform.
-               Defaults to 'a' for an ANSI system, but can be `lib', `so',
-               `dll' or others.. There is no dot in the extension !
-
-
-       BUILD   The directory where the build system should grab the
-               configuration header file `ftconfig.h' as well as the
-               system-specific implementation of `ftsystem'.
-
-       OBJ     The directory where all object files will be placed
-
-
-  3. The Library Rules files :
-
-     Once the variables defined in the configuration rules file, the
-     library rules file is included. This one contains all rules required
-     to build the library objects into OBJ
-
-     Its structure works as follows:
-
-       - provide rules to compile the low-level `ftsystem' module
-
-       - include the rules files from each font driver or component
-
-       - include the rules file for the "old api" layer
-
-       - provide rules to compile the initialisation layer
-
-       - provide additional targets like `clean', ..
-
-
-     Note that linking all objects files together into a library is not
-     performed in this file, though it might seem reasonable at first
-     glance. The reason for this is that not all linkers have a simple
-     syntax of the form:
-
-         librarian archive_file  object1 object2 ....
-
-     hence, linking is performed through rules provided in the configuration
-     rules file, using the phony `library' target, which has been defined for
-     this very specific purpose.
-
-
-  4. The Components Rules files :
-
-     Each font driver has its own rules file, called `rules.mk' located
-     in its own directory. The library rules file includes these component
-     rules for each font driver.
-
-     These rules must perform the following:
-
-       - provide rules to compile the component, either into a single `large'
-         object, or into multiple small ones
-
-       - for font drivers and rasters, update some variables, that are
-         initially defined in the library rules file, which indicate wether
-         the component must be registered in the library initialisation code
-
-
-     a. Component Compile Modes :     
-
-       There are two ways to compile a given component :
-
-         i. Single-object compilation:
-
-            In this mode, the component is compiled into a single object
-            file. This is performed easily by defining a single C file whose
-            sole purpose is to include all other component sources. For
-            example, the truetype driver is compiled as a single object
-            named `truetype.o'.
-
-
-         ii. Multiple objects compilation:
-
-            In this mode, all source files for a single component are compiled
-            individually into an object file.
-
-       Due to the way the FreeType source code is written, single mode
-       has the following advantages over multiple mode:
-
-         - with many compilers, the resulting object code is smaller than
-           the concatenation of all individual objects from multiple mode.
-           this, because all functions internal to the component as a whole
-           are declared static, allowing more optimisation. It often also
-           compiles much faster.
-
-
-         - most importantly, the single object only contains the external
-           symbols it needs to be linked to the base layer (all extern that
-           are due to inter-source calls within the component are removed).
-           this can reduce tremendously the size of dynamic libraries on
-           some platforms
-
-       Multiple mode is useful however to check some dependencies problems
-       that might not appear when compiling in single mode, so it has been
-       kept as a possibility.
-
-
-     b. Driver initialisation code :
-
-       The source file `./src/base/ftinit.c' contains the implementation
-       of the FT_Init_FreeType function which must, among other things,
-       register all font drivers that are statically linked to the library.
-
-       Controlling which drivers are registered at initialisation time is
-	   performed by exploiting the state of the C-preprocessor in order to
-	   build a linked list (a "chain") of driver interfaces.
-
-       More precisely, each font driver interface file (like `ttdriver.h'
-	   or `t1driver.h') has some special lines that look like this :
-	   
-  			
-    			#ifdef FTINIT_DRIVER_CHAIN
- 			
-    			static
-    			const FT_DriverChain  ftinit_<FORMAT>_driver_chain =
-    			{
-      			FT_INIT_LAST_DRIVER_CHAIN,
-      			&<FORMAT>_driver_interface
-    			};
-  			
-    			#undef  FT_INIT_LAST_DRIVER_CHAIN
-    			#define FT_INIT_LAST_DRIVER_CHAIN   &ftinit_<FORMAT>_driver_chain
- 			
-    			#endif 
-				
-  		As one can see, this code is strictly reserved for `ftinit.c' which
-		defines FTINIT_DRIVER_CHAIN before including all font driver header
-		files.
-		
-		When the C-processor parses these headers, it builds a linked list of
-		FT_DriverChain element. For exemple, the sequence :
-		
-		   #define FTINIT_DRIVER_CHAIN
-		   #include <ttdriver.h>
-		   #include <t1driver.h>
-		   
-		Will really generate something like:
-		
-    			static
-    	*---->	const FT_DriverChain  ftinit_tt_driver_chain =
-    	|		{
-      	|		0,
-      	|		&tt_driver_interface
-    	|		};
-  		|	
-    	|		static
-    	|		const FT_DriverChain  ftinit_t1_driver_chain =
-    	|		{
-      	*------	&ftinit_tt_driver_chain,
-      			&t1_driver_interface
-    			};
- 	   
-	   with the FT_INIT_LAST_DRIVER_CHAIN set to "&ftinit_t1_driver_chain"
-	   
-	   Hence, the last included driver will be registered first in the library
-	   
--- a/docs/DESIGN
+++ /dev/null
@@ -1,216 +1,0 @@
-The Design of FreeType 2.0
-==========================
-
-Introduction:
-
-  This short document presents the design of version 2 of the FreeType
-  library. It is a must read for anyone willing to port, debug or hack
-  the FreeType sources.
-
-
-I. Goals :
-
-  FreeType 2 was designed to provide a unified and universal API to
-  manage (i.e. read) the content of font files.
-
-  Its main features are :
-
-
-    - A FORMAT-INDEPENDENT HIGH-LEVEL API
-
-        Used to open, read and manage font files.
-
-
-    - THE USE OF PLUGGABLE "FONT DRIVERS"
-
-        Each font driver is used to support a given font format. For
-        example, the default build of FreeType 2 comes with drivers for the
-        TrueType and Type 1 font formats.
-
-        Font drivers can also be added, removed or upgraded at *runtime*,
-        in order to support more font formats, or improve the current ones.
-
-        Each font driver also provides its own "public interface" to client
-        applications who would like to use format-specific features.
-
-   
-    - THE USE OF PLUGGABLE "RASTERS"
-
-        A raster is a tiny module used to render a glyph image
-        into a bitmap or anti-aliased pixmap. Rasters differ in their
-        output quality (especially with regards to anti-aliasing), speed
-        and memory usage.
-
-        An application can also provide its own raster if it needs to.
-
-        
-    - HIGH PORTABILITY AND PERFORMANCE
-
-        The FreeType source code is written in industry-standard ANSI C.
-
-        Moreover, it abstracts memory management and i/o operations within
-        a single module, called "ftsystem". The FreeType build system tries
-        to auto-detect the host platform in order to select its most
-        efficient implementation. It defaults otherwise to using the
-        standard ANSI C Library.
-        
-        Note that, independently of the host platform and build, an
-        application is able to provide its own memory and i/o routines.
-
-        This make FreeType suitable for use in any kind of environment,
-        from embedded to distributed systems.
-
-
-II. Components Layout :
-
-  FreeType 2 is made of distinct components which relate directly to the
-  design described previously:
-
-
-  1. THE BASE LAYER:
-
-     The base layer implements the high-level API, as well as provide
-     generic font services that can be used by each font driver.
-     
-
-  2. THE FONT DRIVERS:
-
-     Each font driver can be registered in the base layer by providing
-     an "interface", which really is a table of function pointers.
-
-     At build time, the set of default font drivers is selected. These
-     drivers are then compiled and statically linked to the library.
-
-     They will then be available after the library initialisation.
-
-
-  3. THE RASTERS:
-
-     FreeType 2 provides the ability to hook various raster modules into
-     its base layer. This provides several advantages :
-
-       - different systems mean different requirements, hence the need for
-         flexibility.
-
-       - for now, FreeType 2 only supports glyph images stored in the
-         following formats :
-
-           * bitmaps
-           * gray-level pixmaps
-           * monochrome vectorial outlines (using bezier control points)
-
-         should a new "technology" come for glyph images, it is possible
-         to write a new raster for it, without altering the rest of the
-         engine. Some examples could be :
-
-           * multi-colored vectorial outlines
-           * on-the-fly rendering of TeX's MetaFonts !!
-
-
-
-  4. THE SYSTEM MODULE "FTSYSTEM":
-
-     The system module is used to implement basic memory and i/o management
-     services. By default, it uses the ANSI C library, but some replacements
-     are also provided (and automatically selected by the build system) when
-     available.
-
-     As a simple example, the unix build uses memory-mapped files to read
-     font files, instead of the slow ANSI "fopen/fseek/fread". This results
-     in tremendous performance enhancements.
-
-     Note that, even if the build system chooses an implementation for
-     "ftsystem" at compile time, an application is still able to provide
-     its own memory or i/o routines to the library at runtime.
-
-
-
-
-  5. THE "INIT" LAYER:
-
-     A tiny module used to implement the function FT_Init_FreeType.
-
-     As its name suggests, it is responsible for initialising the library,
-     which really means the following :
-
-        - bind the implementation of "ftsystem" that best matches the
-          host platform to the library. This choice can be overriden
-          later by client applications however.
-
-        - register the set of default font drivers within the base layer.
-          these drivers are statically linked to the library. Other drivers
-          can be added at runtime later through FT_Add_Driver though..
-
-        - register the set of default rasters. Client applications are
-          able to add their own rasters at runtime though.
-
-     The details regarding these operations is given in the document
-     named "FreeType Build Internals"
-
-
-
-III. Objects Layout :
-
-  Even though it is written in ANSI C, the desing of FreeType 2 is object
-  oriented, as it's the best way to implement the flexible font format
-  support that we wanted.
-
-  Indeed, the base layer defines a set of base classes that can be derived
-  by each font driver in order to support a given format. The base layer
-  also includes many book-keeping routines that need not be included in the
-  drivers.
-
-  The base classes are the following:
-
-
-  1. FACE OBJECTS:
-
-    As in FreeType 1.x, a face object models the content of a given font
-    that isn't dependent on a given size, transformation or glyph index.
-
-    This includes, for example, the font name, font style(s), available
-    charmaps and encodings, and all other kinds of data and tables that
-    help describe the font as a whole.
-
-
-  2. SIZE OBJECTS: (previously known as INSTANCE OBJECTS in 1.x)
-
-    A face object can have one or more associated size objects. A Size
-    object is used to stored the font data that is dependent on the current
-    character size or transform used to load glyphs.
-
-    Typical data in a size object include scaled metrics, factors, and
-    various kind of control data related to grid-fitting. The size object
-    is changed each time the character size is modified.
-
-
-  3. GLYPH SLOT OBJECTS:
-
-    Each face object has one "glyph slot", which is a simple container
-    where individual glyph images can be loaded and processed.
-
-    The glyph image can be stored in the following formats in the glyph
-    slot :
-
-        - monochrome bitmaps
-        - gray-level pixmaps
-        - vectorial glyph outlines (defined with bezier control points)
-
-    Note that a module, called the "raster" is provided to convert vector
-    outlines into either monochrome or anti-aliased bitmaps. The outline
-    is also directly accessible and can be walked or processed freely by
-    client applications.
-
-    more glyph images formats can be defined, but they will require
-    a specific raster module if one wants to display them on a typical
-    display surface.
-
-  4. CHARMAP OBJECTS:
-
-    A charmap is used to convert character codes, for a given encoding,
-    into glyph indices. A given face might contain several charmaps, for
-    example, most TrueType fonts contain both the "Windows Unicode" and
-    "
-    it is not rare to see TrueType fonts with both the
-    "Windows Unicode" and "Apple Roman" charmap
-
--- a/docs/essai
+++ /dev/null
@@ -1,173 +1,0 @@
-Un apercu du layout des fichiers sources de FreeType 2:
-
-  docs/            - documentation
-      html/        - documentation au format html
-      
-      txt/         - documentation au format texte
-    
-    
-  include/         - les headers publiques de la librairie, ce sont ceux
-                     qui sont installes avec le paquet freetype-devel.rpm
-
-  config/          - le repertoire de configuration.
-      ansi/       
-        ft_conf.h  - fichier de configuration
-	ftsys.c    - fichier implementation bas-niveau
-
-      unix/
-      
-      os2/
-      
-      dos/
-      
-      amiga/
-      
-      debug/
-      
-      
-  src/              - sources de la librairie
-      base/         - couche de base (services generiques + API)
-      
-      truetype/     - pilote truetype
-          options/  - options du pilote truetype
-          extend/   - extensions du pilote truetype
-      
-      type1/        - pilote type 1
-          options/  - options du pilote type 1
-	  extend/   - extensions du pilote type 1
-      
-      type2/        - pilote type 2
-      
-      speedo/       - pilote speedo
-      
-      shared/       - sources partagees par plusieurs pilotes
-      
-
-  tests/            - programmes de test
-      data/         - donnees des tests = fichiers de police => copies dans bin
-      test1/        - source du test numero 1
-      test2/        - source du test numero 2
-      test3/        - ...
-      ...
-
-  obj/              - emplacement des fichiers objets compiles + librairie ?
-  bin/              - emplacement des executables (demos+tests)
-  
-  demos/            - programmes de demonstration
-      graph/        - sous-systeme graphique des programmes de demo
-      
-  
-  contrib/          - contributions de toutes sortes..
-
-
-=============================================================================
-Quelques autres idees au hasard :
-
-- virer le controle des threads, on s'en tape magistralement
-
-- separer l'allocation memoire de l'acces disque (+flexible)
-
-- l'api de base doit permettre "d'ouvrir" un fichier de police se trouvant
-  deja en memoire..  
-  
-- expliquer les differents types de dictionnaires :
-
-    char_code    ->  glyph_index         charmap    (truetype)
-    char_code    ->  glyph_name          encoding   (type 1)
-    glyph_index  ->  glyph_name          repertoire (...)
-
-- plusieurs "raster" possibles (le raster par defaut peut etre d�termin� � la compilation,
-  sinon l'ajout se fait simplement en passant un pointeur d'interface..)
-
-
-- l'api de base doit etre simplifiee. La plupart des developpeurs ne veulent
-  pas savoir ce qu'est une "size", un "glyph_slot", etc.., on conseille donc
-  d'en creer une par defaut, lors de l'appel de :
-  
-     ------------------- initialisation et lecture des polices ------------
-  
-     FT_Init_FreeType( &library );
-     
-     FT_Set_Memory_Manager( library, &mem_manager_rec );
-     
-     FT_Set_IO_Manager( library, &io_manager_rec );
-  
-  
-     FT_New_Face( library, file_pathname, face_index, &face );
-     
-     FT_New_Memory_Face( library, first_byte, length, face_index, &face );
-
-     ou encore:
-     
-       FT_New_Face( library, &new_face_rec, &face );
-       
-       avec new_face_rec ::
-       
-          face_index
-       
-          pathname
-	  
-	  memory_address
-	  bytes_size
-     
-
-     FT_Flush_Face( face );   // ferme le stream correspondant..
-
-
-     ------------------------------------------ changement de taille ------
-     
-     FT_Set_Size( face, &face_size_rec );
-     
-       face_size_rec ::
-         char_height
-	 char_width
-	 horz_resolution
-	 vert_resolution
-     
-     FT_Set_Pixel_Sizes( face, 64, 64 );
-
-
-     ----------------------------------------- selection de la charmap ----
-     
-     FT_Select_Charmap( face, ft_charmap_unicode );
-     
-     FT_Select_Charmap_Index( face, index );
-     
-     FT_List_Charmaps( face, buffer, max, first );
-
-     face->charmap => pointe vers la charmap actuelle..
-
-
-     -------------------------------------- chargement des glyphes --------
-     
-     FT_Load_Glyph( face, glyph_index ); 
-     
-     FT_Load_Char( face, char_code );
-     
-     FT_Transform_Glyph( face->glyph, &trans );
-     
-     
-     ---------------------------------------------- rendu final -----------
-     
-     FT_Get_Outline_Bitmap( library, face->glyph, &bit );
-     
-     FT_Set_Raster( library, "default" );
-     
-     FT_Set_Raster_Mode( library, major_mode, minor_mode );
-     
-     
-     
-     
-=======================================================================================
-
-Syst�me de configuration automatique
-
- freetype2/
-     Makefile
-     config/
-         ansi/
-            config.mk
-
-  make setup  => autodetection du syst�me + copie de fichier include ???
-
-  make