[BACK]Return to mdoc.h CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc.h between version 1.1 and 1.30

version 1.1, 2008/12/15 01:54:58 version 1.30, 2009/02/21 21:00:06
Line 19 
Line 19 
 #ifndef MDOC_H  #ifndef MDOC_H
 #define MDOC_H  #define MDOC_H
   
 #define MDOC_LINEARG_MAX 9  /* What follows is a list of ALL possible macros. */
   
 #define MDOC___          0  #define MDOC___          0
 #define MDOC_Dd          1  #define MDOC_Dd          1
Line 129 
Line 129 
 #define MDOC_Ud          105  #define MDOC_Ud          105
 #define MDOC_MAX         106  #define MDOC_MAX         106
   
   /* What follows is a list of ALL possible macro arguments. */
   
 #define MDOC_Split       0  #define MDOC_Split       0
 #define MDOC_Nosplit     1  #define MDOC_Nosplit     1
 #define MDOC_Ragged      2  #define MDOC_Ragged      2
Line 189 
Line 191 
 #define MDOC_svid4       57  #define MDOC_svid4       57
 #define MDOC_Filled      58  #define MDOC_Filled      58
 #define MDOC_Words       59  #define MDOC_Words       59
 #define MDOC_ARG_MAX     60  #define MDOC_Emphasis    60
   #define MDOC_Symbolic    61
   #define MDOC_ARG_MAX     62
   
 enum    mdoc_err {  /* Warnings are either syntax or groff-compatibility. */
         ERR_SYNTAX_QUOTE,  enum    mdoc_warn {
         ERR_SYNTAX_WS,          WARN_SYNTAX,
         ERR_MACRO_NOTSUP,          WARN_COMPAT
         ERR_MACRO_NOTCALL,  
         ERR_SCOPE_BREAK,  
         ERR_ARGS_GE1  
 };  };
   
 enum    mdoc_warn {  /* Possible values for the `At' macro. */
         WARN_SYNTAX_WS_EOLN,  enum    mdoc_att {
         WARN_SYNTAX_MACLIKE,          ATT_DEFAULT = 0,
         WARN_ARGS_GE1          ATT_v1,
           ATT_v2,
           ATT_v3,
           ATT_v4,
           ATT_v5,
           ATT_v6,
           ATT_v7,
           ATT_32v,
           ATT_V1,
           ATT_V2,
           ATT_V3,
           ATT_V4
 };  };
   
   /* An argument to a macro (multiple values = `It -column'). */
 struct  mdoc_arg {  struct  mdoc_arg {
         int               arg;          int               arg;
           int               line;
           int               pos;
         size_t            sz;          size_t            sz;
         char            **value;          char            **value;
 };  };
   
   /* Type of a syntax node. */
 enum    mdoc_type {  enum    mdoc_type {
         MDOC_TEXT,          MDOC_TEXT,
         MDOC_ELEM,          MDOC_ELEM,
         MDOC_HEAD,          MDOC_HEAD,
           MDOC_TAIL,
         MDOC_BODY,          MDOC_BODY,
         MDOC_BLOCK          MDOC_BLOCK,
           MDOC_ROOT
 };  };
   
   /* Manual section. */
   enum    mdoc_msec {
           MSEC_DEFAULT = 0,
           MSEC_1,
           MSEC_2,
           MSEC_3,
           MSEC_3f,
           MSEC_3p,
           MSEC_4,
           MSEC_5,
           MSEC_6,
           MSEC_7,
           MSEC_8,
           MSEC_9,
           MSEC_X11,
           MSEC_X11R6,
           MSEC_local,
           MSEC_n,
           MSEC_unass,
           MSEC_draft,
           MSEC_paper
   };
   
   /* Section (named/unnamed) of `Ss'. */
   enum    mdoc_sec {
           SEC_PROLOGUE = 0,
           SEC_BODY,
           SEC_NAME,
           SEC_SYNOPSIS,
           SEC_DESCRIPTION,
           SEC_RETURN_VALUES,
           SEC_ENVIRONMENT,
           SEC_FILES,
           SEC_EXAMPLES,
           SEC_DIAGNOSTICS,
           SEC_ERRORS,
           SEC_SEE_ALSO,
           SEC_STANDARDS,
           SEC_HISTORY,
           SEC_AUTHORS,
           SEC_CAVEATS,
           SEC_BUGS,
           SEC_CUSTOM
   };
   
   /* Volume of `Dt'. */
   enum    mdoc_vol {
           VOL_DEFAULT = 0,
           VOL_AMD,
           VOL_IND,
           VOL_KM,
           VOL_LOCAL,
           VOL_PRM,
           VOL_PS1,
           VOL_SMM,
           VOL_URM,
           VOL_USD
   };
   
   /* Architecture of `Dt'. */
   enum    mdoc_arch {
           ARCH_DEFAULT = 0,
           ARCH_alpha,
           ARCH_amd64,
           ARCH_amiga,
           ARCH_arc,
           ARCH_arm,
           ARCH_armish,
           ARCH_aviion,
           ARCH_hp300,
           ARCH_hppa,
           ARCH_hppa64,
           ARCH_i386,
           ARCH_landisk,
           ARCH_luna88k,
           ARCH_mac68k,
           ARCH_macppc,
           ARCH_mvme68k,
           ARCH_mvme88k,
           ARCH_mvmeppc,
           ARCH_pmax,
           ARCH_sgi,
           ARCH_socppc,
           ARCH_sparc,
           ARCH_sparc64,
           ARCH_sun3,
           ARCH_vax,
           ARCH_zaurus
   };
   
   /* Information from prologue. */
   struct  mdoc_meta {
           enum mdoc_msec    msec;
           enum mdoc_vol     vol;
           enum mdoc_arch    arch;
           time_t            date;
           char             *title;
           char             *os;
           char             *name;
   };
   
   /* Text-only node. */
 struct  mdoc_text {  struct  mdoc_text {
         char             *string;          char             *string;
 };  };
   
   /* Block (scoped) node. */
 struct  mdoc_block {  struct  mdoc_block {
         int               tok;  
         size_t            argc;          size_t            argc;
         struct mdoc_arg  *argv;          struct mdoc_arg  *argv;
           struct mdoc_node *head;
           struct mdoc_node *body;
           struct mdoc_node *tail;
 };  };
   
 struct  mdoc_head {  /* In-line element node. */
         size_t            sz;  
         char            **args;  
         int               tok;  
 };  
   
 struct  mdoc_body {  
         int               tok;  
 };  
   
 struct  mdoc_elem {  struct  mdoc_elem {
         size_t            sz;          size_t            sz;
         char            **args;          char            **args;
         int               tok;  
         size_t            argc;          size_t            argc;
         struct mdoc_arg  *argv;          struct mdoc_arg  *argv;
 };  };
   
   /* Typed nodes of an AST node. */
 union   mdoc_data {  union   mdoc_data {
         struct mdoc_text  text;          struct mdoc_text  text;
         struct mdoc_elem  elem;          struct mdoc_elem  elem;
         struct mdoc_body  body;  
         struct mdoc_head  head;  
         struct mdoc_block block;          struct mdoc_block block;
 };  };
   
   /* Node in AST. */
 struct  mdoc_node {  struct  mdoc_node {
         struct mdoc_node *parent;          struct mdoc_node *parent;
         struct mdoc_node *child;          struct mdoc_node *child;
         struct mdoc_node *next;          struct mdoc_node *next;
           struct mdoc_node *prev;
           int               line;
           int               pos;
           int               tok;
           int               flags;
   #define MDOC_VALID       (1 << 0)
   #define MDOC_ACTED       (1 << 1)
         enum mdoc_type    type;          enum mdoc_type    type;
         union mdoc_data   data;          union mdoc_data   data;
           /* FIXME: have an enum mdoc_sec. */
 };  };
   
   /* Call-backs for parse messages. */
 struct  mdoc_cb {  struct  mdoc_cb {
         int     (*mdoc_err)(void *, int, int, enum mdoc_err);          void    (*mdoc_msg)(void *, int, int, const char *);
         int     (*mdoc_warn)(void *, int, int, enum mdoc_warn);          int     (*mdoc_err)(void *, int, int, const char *);
         void    (*mdoc_msg)(void *, int, const char *);          int     (*mdoc_warn)(void *, int, int,
                           enum mdoc_warn, const char *);
 };  };
   
   /* Global table of macro names (`Bd', `Ed', etc.). */
 extern  const char *const *mdoc_macronames;  extern  const char *const *mdoc_macronames;
   
   /* Global table of argument names (`column', `tag', etc.). */
 extern  const char *const *mdoc_argnames;  extern  const char *const *mdoc_argnames;
   
 __BEGIN_DECLS  __BEGIN_DECLS
   
 struct  mdoc;  struct  mdoc;
   
   /* Free memory allocated with mdoc_alloc. */
 void              mdoc_free(struct mdoc *);  void              mdoc_free(struct mdoc *);
   
   /* Allocate a new parser instance. */
 struct  mdoc     *mdoc_alloc(void *data, const struct mdoc_cb *);  struct  mdoc     *mdoc_alloc(void *data, const struct mdoc_cb *);
 int               mdoc_parseln(struct mdoc *, char *buf);  
   
 const struct mdoc_node  /* Parse a single line in a stream (boolean retval). */
                  *mdoc_result(struct mdoc *);  int               mdoc_parseln(struct mdoc *, int, char *buf);
   
   /* Get result first node (after mdoc_endparse!). */
   const struct mdoc_node *mdoc_node(struct mdoc *);
   
   /* Get result meta-information (after mdoc_endparse!). */
   const struct mdoc_meta *mdoc_meta(struct mdoc *);
   
   /* Signal end of parse sequence (boolean retval). */
   int               mdoc_endparse(struct mdoc *);
   
   const char       *mdoc_arch2a(enum mdoc_arch);
   
   const char       *mdoc_vol2a(enum mdoc_vol);
   
   const char       *mdoc_msec2a(enum mdoc_msec);
   
   int               mdoc_isdelim(const char *);
   
 __END_DECLS  __END_DECLS
   

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.30

CVSweb