home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gettext-0.10.24-src.tgz / tar.out / fsf / gettext / src / po.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  5KB  |  130 lines

  1. /* GNU gettext - internationalization aids
  2.    Copyright (C) 1995, 1996 Free Software Foundation, Inc.
  3.  
  4.    This file was written by Peter Miller <pmiller@agso.gov.au>
  5.  
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
  19.  
  20. #ifndef SRC_PO_H
  21. #define SRC_PO_H
  22.  
  23. #include "po-lex.h"
  24.  
  25. /* Note: the _t suffix is reserved by ANSI C, so the _ty suffix is
  26.    used to indicate a type name  */
  27.  
  28. /* The following pair of structures cooperate to create an "Object" in
  29.    the OO sense, we are simply doing it manually, rather than with the
  30.    help of an OO compiler.  This implementation allows polymorphism
  31.    and inheritance - more than enough for the immediate needs.
  32.  
  33.    This first structure contains pointers to functions.  Each function
  34.    is a method for the class (base or derived).
  35.  
  36.    Use a NULL pointer where no action is required.  */
  37.  
  38. /* Forward decaration.  */
  39. struct po_ty;
  40.  
  41.  
  42. typedef struct po_method_ty po_method_ty;
  43. struct po_method_ty
  44. {
  45.   /* how many bytes to malloc for this class */
  46.   size_t size;
  47.  
  48.   /* what to do immediately after the instance is malloc()ed */
  49.   void (*constructor) PARAMS ((struct po_ty *__pop));
  50.  
  51.   /* what to do immediately before the instance is free()ed */
  52.   void (*destructor) PARAMS ((struct po_ty *__pop));
  53.  
  54.   /* what to do with a domain directive */
  55.   void (*directive_domain) PARAMS ((struct po_ty *__pop, char *__name));
  56.  
  57.   /* what to do with a message directive */
  58.   void (*directive_message) PARAMS ((struct po_ty *__pop, char *__msgid,
  59.                      lex_pos_ty *__msgid_pos, char *__msgstr,
  60.                      lex_pos_ty *__msgstr_pos));
  61.  
  62.   /* This method is invoked before the parse, but after the file is
  63.      opened by the lexer.  */
  64.   void (*parse_brief) PARAMS ((struct po_ty *__pop));
  65.  
  66.   /* This method is invoked after the parse, but before the file is
  67.      closed by the lexer.  The intention is to make consistency checks
  68.      against the file here, and emit the errors through the lex_error*
  69.      functions.  */
  70.   void (*parse_debrief) PARAMS ((struct po_ty *__pop));
  71.  
  72.   /* What to do with a plain-vanilla comment - the expectation is that
  73.      they will be accumulated, and added to the next message
  74.      definition seen.  Or completely ignored.  */
  75.   void (*comment) PARAMS ((struct po_ty *__pop, const char *__s));
  76.  
  77.   /* What to do with a comment that starts with a dot (i.e.  extracted
  78.      by xgettext) - the expectation is that they will be accumulated,
  79.      and added to the next message definition seen.  Or completely
  80.      ignored.  */
  81.   void (*comment_dot) PARAMS ((struct po_ty *__pop, const char *__s));
  82.  
  83.   /* What to do with a file position seen in a comment (i.e. a message
  84.      location comment extracted by xgettext) - the expectation is that
  85.      they will be accumulated, and added to the next message
  86.      definition seen.  Or completely ignored.  */
  87.   void (*comment_filepos) PARAMS ((struct po_ty *__pop, const char *__s,
  88.                    int __line));
  89.  
  90.   /* What to do with a comment that starts with a `!' - this is a
  91.      special comment.  One of the possible uses is to indicate a
  92.      inexact translation.  */
  93.   void (*comment_special) PARAMS ((struct po_ty *__pop, const char *__s));
  94. };
  95.  
  96.  
  97. /* This next structure defines the base class passed to the methods.
  98.    Derived methods will often need to cast their first argument before
  99.    using it (this correponds to the implicit ``this'' argument of many
  100.    C++ implementations).
  101.  
  102.    When declaring derived classes, use the PO_BASE_TY define at the
  103.    start of the structure, to declare inherited instance variables,
  104.    etc.  */
  105.  
  106. #define PO_BASE_TY \
  107.   po_method_ty *method;
  108.  
  109. typedef struct po_ty po_ty;
  110. struct po_ty
  111. {
  112.   PO_BASE_TY
  113. };
  114.  
  115.  
  116. po_ty *po_alloc PARAMS ((po_method_ty *__jtable));
  117. void po_scan PARAMS ((po_ty *__pop, const char *__filename));
  118. void po_free PARAMS ((po_ty *__pop));
  119.  
  120. /* Callbacks used by po-gram.y or po-hash.y or po-lex.c, indirectly
  121.    from po_scan.  */
  122. void po_callback_domain PARAMS ((char *__name));
  123. void po_callback_message PARAMS ((char *__msgid, lex_pos_ty *__msgid_pos,
  124.                   char *__msgstr, lex_pos_ty *__msgstr_pos));
  125. void po_callback_comment PARAMS ((const char *__s));
  126. void po_callback_comment_dot PARAMS ((const char *__s));
  127. void po_callback_comment_filepos PARAMS ((const char *__s, int __line));
  128.  
  129. #endif
  130.