(aspell-dev.info.gz) Mk-Src Script

Info Catalog (aspell-dev.info.gz) Data Structures (aspell-dev.info.gz) Top (aspell-dev.info.gz) How It All Works
 
 14 Mk-Src Script
 ****************
 
 A good deal of interface code is automatically generated by the
 `mk-src.pl' Perl script.  I am doing it this way to avoid having to
 write a lot of relative code for the C++ interface.  This should also
 make adding interface for other languages a lot less tedious and will
 allow the interface to automatically take advantage of new Aspell
 functionality as it is made available.  The `mk-src.pl' script uses
 `mk-src.in' as its input.
 
 14.1 mk-src.in
 ==============
 
 NOTE: This section may not always be up to date since it is manually
 converted from the pod source.
 
    The format of `mk-src.in' is as follows:
 
 
     The following characters are literals: { } / '\ ' \n = >
 
     <items>
     <items> := (<item>\n)+
     <items> := <category>:\ <name> {\n<details>\n} | <<tab>><details>
     <details> := <options>\n /\n <items>
     <options> := (<option>\n)*
     <option> := <key> [=> <value>]
 
     <<tab>> means everything should be indented by one tab
 
    See MkSrc::Info for a description of the categories and options
 
 14.2 MkSrc::Info
 ================
 
 `%info'
 
    The info array contains information on how to process the info in
 `mk-src.pl'. It has the following layout
 
 
     <catagory> => options => []
                   groups => [] # if undef than anything is accepted
                   creates_type => "" # the object will create a new type
                                      # as specified
                   proc => <impl type> => sub {}
      where <impl type> is one of:
 
     cc: for "aspell.h" header file
     cxx: for C++ interface implemented on top of cc interface
     native: for creation of header files used internally by aspell
     impl: for defination of functions declared in cc interface.
           the definations use the native hedaer files
     native_impl: for implementations of stuff declared in the native
                   header files
      each proc sub should take the following argv
 
     $data: a subtree of $master_data
     $accum:
      <options> is one of:
 
     desc: description of the object
     prefix:
     posib err: the method may return an error condition
     c func:
     const: the method is a const member
     c only: only include in the external interface
     c impl headers: extra headers that need to be included in the C impl
     c impl: use this as the c impl instead of the default
     cxx impl: use this as the cxx impl instead of the default
     returns alt type: the constructor returns some type other than
       the object from which it is a member of
     no native: do not attemt to create a native implementation
     treat as object: treat as a object rather than a pointer
      The `%info' structure is initialized as follows:
 
     our %info =
     (
      root => {
        options => [],
        groups => ['methods', 'group']},
      methods => {
        # methods is a collection of methods which will be inserted into
        # a class after some simple substation rules.  A $ will be
        # replaced with name of the class.
        options => ['strip', 'prefix', 'c impl headers'],
        groups => undef},
      group => {
        # a group is a colection of objects which should be grouped together
        # this generally means they will be in the same source file
        options => ['no native'],
        groups => ['enum', 'struct', 'union', 'func', 'class', 'errors']},
      enum => {
        # basic C enum
        options => ['desc', 'prefix'],
        creates_type => 'enum'},
      struct => {
        # basic c struct
        options => ['desc', 'treat as object'],
        groups => undef,
        creates_type => 'struct',},
      union => {
        # basic C union
        options => ['desc', 'treat as object'],
        groups => undef,
        creates_type => 'union'},
      class => {
        # C++ class
        options => ['c impl headers'],
        groups => undef,
        creates_type => 'class'},
      errors => {}, # possible errors
      method => {
        # A class method
        options => ['desc', 'posib err', 'c func', 'const',
                    'c only', 'c impl', 'cxx impl'],
        groups => undef},
      constructor => {
        # A class constructor
        options => ['returns alt type', 'c impl', 'desc'],
        groups => 'types'},
      destructor => {
        # A class destructor
        options => [],
        groups => undef},
      );
      In addition to the categories listed above a "methods" category by
 be     specified in under the class category. A "methods" category is
 created     for each methods group under the name "<methods name>
 methods". When     groups is undefined a type name may be specified in
 place of a category.
 
    `%types'
 
    types contains a master list of all types. This includes basic types
 and     ones created in `mk-src.in'. The basic types include:
 
     'void', 'bool', 'pointer', 'double',
     'string', 'encoded string', 'string obj',
     'char', 'unsigned char',
     'short', 'unsigned short',
     'int', 'unsigned int',
     'long', 'unsigned long'
    %methods
 
    `%methods' is used for holding the "methods" information
 
 14.3 MkSrc::Util
 ================
 
 This module contains various useful utility functions:
 `false'
      Returns 0.
 
 `true'
      Returns 1.
 
 `cmap EXPR LIST'
      Apply EXPR to each item in LIST and than concatenate the result
      into         a string
 
 `one_of STR LIST'
      Returns true if LIST contains at least one of STR.
 
 `to_upper STR'
      Convert STR to all uppercase and substitute spaces with
      underscores.
 
 `to_lower STR'
      Convert STR to all lowercase and substitute spaces with
      underscores.
 
 `to_mixed STR'
      Convert STR to mixed case where each new word startes with a
       uppercase letter. For example "feed me" would become "FeedMe".
 
 14.4 MkSrc::Read
 ================
 
 `read'         Read in `mk-src.in' and return a data structure which
 has the         following format:
 
       <tree>
       <tree> := <options>
                 data => <tree>
     where each tree represents an entry in mk-src.in.
     The following two options are always provided:
       name: the name of the entry
       type: the catagory or type name
     Additional options are the same as specified in %info
 
 14.5 MKSrc::Create
 ==================
 
 `create_cc_file PARMS'
      Create a source file.
                Required Parms: type, dir, name, data
                Boolean Parms:  header, cxx
                Optional Parms: namespace (required if cxx), pre_ext,
                                accum
 
 `create_file FILENAME DATA'
      Writes DATA to FILENAME but only if DATA differs from the content
      of         the file and the string:
                Automatically generated file.
 
      is present in the existing file if it already exists.
 
 14.6 Code Generation Modes
 ==========================
 
 The code generation modes are currently one of the following:
           cc:     Mode used to create types suitable for C interface
           cc_cxx: Like cc but typenames don't have a leading Aspell prefix
           cxx:    Mode used to create types suitable for CXX interface
           native: Mode in which types are suitable for the internal
                   implementation
           native_no_err: Like Native but with out PosibErr return types
 
 14.7 MkSrc::CcHelper
 ====================
 
 Helper functions used by interface generation code:
          to_c_return_type ITEM
              .
 
          c_error_cond ITEM
              .
 
 `make_func NAME @TYPES PARMS ; %ACCUM'
      Creates a function prototype
 
      Parms can be any of:
                     mode: code generation mode
 
 `call_func NAME @TYPES PARMS ; %ACCUM'
      Return a string to call a func. Will prefix the function with
      return         if the functions returns a non-void type;
 
      Parms can be any of:
                     mode: code generation mode
 
 `to_type_name ITEM PARMS ; %ACCUM'
      Converts item into a type name.
 
      Parms can be any of:
                mode: code generation mode
                use_type: include the actual type
                use_name: include the name on the type
                pos: either "return" or "other"
 
 `make_desc DESC ; LEVEL'
      Make a C comment out of DESC optionally indenting it LEVEL spaces.
 
 `make_c_method CLASS ITEM PARMS ; %ACCUM'
      Create the phototype for a C method which is really a function.
 
      Parms is any of:
                mode:      code generation mode
                no_aspell: if true do not include aspell in the name
                this_name: name for the parameter representing the
                           current object
 
 `call_c_method CLASS ITEM PARMS ; %ACCUM'
      Like make_c_method but instead returns the appropriate string to
           call the function. If the function returns a non-void type
      the         string will be prefixed with a return statement.
 
 `form_c_method CLASS ITEM PARMS ; %ACCUM'
      Like make_c_method except that it returns the array:
                ($func, $data, $parms, $accum)
 
      which is suitable for passing into make_func. It will return an
          empty array if it can not make a method from ITEM.
 
 `make_cxx_method ITEM PARMS ; %ACCUM'
      Create the phototype for a C++ method.
 
      Parms is one of:
                mode: code generation mode
 
Info Catalog (aspell-dev.info.gz) Data Structures (aspell-dev.info.gz) Top (aspell-dev.info.gz) How It All Works
automatically generated by info2html