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

Diff for /mandoc/mdoc.h between version 1.111 and 1.133

version 1.111, 2010/12/25 13:50:37 version 1.133, 2014/12/18 03:10:11
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 14 
Line 14 
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */   */
 #ifndef MDOC_H  
 #define MDOC_H  
   
 /*  
  * What follows is a list of ALL possible macros.  
  */  
 enum    mdoct {  enum    mdoct {
         MDOC_Ap = 0,          MDOC_Ap = 0,
         MDOC_Dd,          MDOC_Dd,
Line 143  enum mdoct {
Line 138  enum mdoct {
         MDOC_sp,          MDOC_sp,
         MDOC__U,          MDOC__U,
         MDOC_Ta,          MDOC_Ta,
           MDOC_ll,
         MDOC_MAX          MDOC_MAX
 };  };
   
 /*  
  * What follows is a list of ALL possible macro arguments.  
  */  
 enum    mdocargt {  enum    mdocargt {
         MDOC_Split,          MDOC_Split, /* -split */
         MDOC_Nosplit,          MDOC_Nosplit, /* -nospli */
         MDOC_Ragged,          MDOC_Ragged, /* -ragged */
         MDOC_Unfilled,          MDOC_Unfilled, /* -unfilled */
         MDOC_Literal,          MDOC_Literal, /* -literal */
         MDOC_File,          MDOC_File, /* -file */
         MDOC_Offset,          MDOC_Offset, /* -offset */
         MDOC_Bullet,          MDOC_Bullet, /* -bullet */
         MDOC_Dash,          MDOC_Dash, /* -dash */
         MDOC_Hyphen,          MDOC_Hyphen, /* -hyphen */
         MDOC_Item,          MDOC_Item, /* -item */
         MDOC_Enum,          MDOC_Enum, /* -enum */
         MDOC_Tag,          MDOC_Tag, /* -tag */
         MDOC_Diag,          MDOC_Diag, /* -diag */
         MDOC_Hang,          MDOC_Hang, /* -hang */
         MDOC_Ohang,          MDOC_Ohang, /* -ohang */
         MDOC_Inset,          MDOC_Inset, /* -inset */
         MDOC_Column,          MDOC_Column, /* -column */
         MDOC_Width,          MDOC_Width, /* -width */
         MDOC_Compact,          MDOC_Compact, /* -compact */
         MDOC_Std,          MDOC_Std, /* -std */
         MDOC_Filled,          MDOC_Filled, /* -filled */
         MDOC_Words,          MDOC_Words, /* -words */
         MDOC_Emphasis,          MDOC_Emphasis, /* -emphasis */
         MDOC_Symbolic,          MDOC_Symbolic, /* -symbolic */
         MDOC_Nested,          MDOC_Nested, /* -nested */
         MDOC_Centred,          MDOC_Centred, /* -centered */
         MDOC_ARG_MAX          MDOC_ARG_MAX
 };  };
   
 /*  
  * Type of a syntax node.  
  */  
 enum    mdoc_type {  enum    mdoc_type {
         MDOC_TEXT,          MDOC_TEXT,
         MDOC_ELEM,          MDOC_ELEM,
Line 190  enum mdoc_type {
Line 180  enum mdoc_type {
         MDOC_TAIL,          MDOC_TAIL,
         MDOC_BODY,          MDOC_BODY,
         MDOC_BLOCK,          MDOC_BLOCK,
           MDOC_TBL,
           MDOC_EQN,
         MDOC_ROOT          MDOC_ROOT
 };  };
   
 /*  /*
  * Section (named/unnamed) of `Sh'.   Note that these appear in the   * Section (named/unnamed) of `Sh'.   Note that these appear in the
  * conventional order imposed by mdoc.7.   * conventional order imposed by mdoc.7.  In the case of SEC_NONE, no
    * section has been invoked (this shouldn't happen).  SEC_CUSTOM refers
    * to other sections.
  */   */
 enum    mdoc_sec {  enum    mdoc_sec {
         SEC_NONE = 0, /* No section, yet. */          SEC_NONE = 0,
         SEC_NAME,          SEC_NAME, /* NAME */
         SEC_LIBRARY,          SEC_LIBRARY, /* LIBRARY */
         SEC_SYNOPSIS,          SEC_SYNOPSIS, /* SYNOPSIS */
         SEC_DESCRIPTION,          SEC_DESCRIPTION, /* DESCRIPTION */
         SEC_IMPLEMENTATION,          SEC_CONTEXT, /* CONTEXT */
         SEC_RETURN_VALUES,          SEC_IMPLEMENTATION, /* IMPLEMENTATION NOTES */
         SEC_ENVIRONMENT,          SEC_RETURN_VALUES, /* RETURN VALUES */
         SEC_FILES,          SEC_ENVIRONMENT,  /* ENVIRONMENT */
         SEC_EXIT_STATUS,          SEC_FILES, /* FILES */
         SEC_EXAMPLES,          SEC_EXIT_STATUS, /* EXIT STATUS */
         SEC_DIAGNOSTICS,          SEC_EXAMPLES, /* EXAMPLES */
         SEC_COMPATIBILITY,          SEC_DIAGNOSTICS, /* DIAGNOSTICS */
         SEC_ERRORS,          SEC_COMPATIBILITY, /* COMPATIBILITY */
         SEC_SEE_ALSO,          SEC_ERRORS, /* ERRORS */
         SEC_STANDARDS,          SEC_SEE_ALSO, /* SEE ALSO */
         SEC_HISTORY,          SEC_STANDARDS, /* STANDARDS */
         SEC_AUTHORS,          SEC_HISTORY, /* HISTORY */
         SEC_CAVEATS,          SEC_AUTHORS, /* AUTHORS */
         SEC_BUGS,          SEC_CAVEATS, /* CAVEATS */
         SEC_SECURITY,          SEC_BUGS, /* BUGS */
         SEC_CUSTOM, /* User-defined. */          SEC_SECURITY, /* SECURITY */
           SEC_CUSTOM,
         SEC__MAX          SEC__MAX
 };  };
   
 /*  
  * Information from prologue.  
  */  
 struct  mdoc_meta {  struct  mdoc_meta {
         char             *msec; /* `Dt' section (1, 3p, etc.) */          char             *msec; /* `Dt' section (1, 3p, etc.) */
         char             *vol; /* `Dt' volume (implied) */          char             *vol; /* `Dt' volume (implied) */
         char             *arch; /* `Dt' arch (i386, etc.) */          char             *arch; /* `Dt' arch (i386, etc.) */
         time_t            date; /* `Dd' normalised date */          char             *date; /* `Dd' normalised date */
         char             *title; /* `Dt' title (FOO, etc.) */          char             *title; /* `Dt' title (FOO, etc.) */
         char             *os; /* `Os' system (OpenBSD, etc.) */          char             *os; /* `Os' system (OpenBSD, etc.) */
         char             *name; /* leading `Nm' name */          char             *name; /* leading `Nm' name */
 };  };
   
 /*  /*
  * An argument to a macro (multiple values = `-column xxx yyy').   * An argument to a macro (multiple values = `-column xxx yyy').
  */   */
 struct  mdoc_argv {  struct  mdoc_argv {
         enum mdocargt     arg; /* type of argument */          enum mdocargt     arg; /* type of argument */
         int               line;          int               line;
         int               pos;          int               pos;
         size_t            sz; /* elements in "value" */          size_t            sz; /* elements in "value" */
Line 252  struct mdoc_argv {
Line 244  struct mdoc_argv {
  * blocks have multiple instances of the same arguments spread across   * blocks have multiple instances of the same arguments spread across
  * the HEAD, BODY, TAIL, and BLOCK node types.   * the HEAD, BODY, TAIL, and BLOCK node types.
  */   */
 struct  mdoc_arg {  struct  mdoc_arg {
         size_t            argc;          size_t            argc;
         struct mdoc_argv *argv;          struct mdoc_argv *argv;
         unsigned int      refcnt;          unsigned int      refcnt;
Line 268  enum mdoc_endbody {
Line 260  enum mdoc_endbody {
         ENDBODY_NOSPACE /* is broken: don't append a space */          ENDBODY_NOSPACE /* is broken: don't append a space */
 };  };
   
 /*  
  * Normalised `Bl' list type.  
  */  
 enum    mdoc_list {  enum    mdoc_list {
         LIST__NONE = 0,          LIST__NONE = 0,
         LIST_bullet,          LIST_bullet, /* -bullet */
         LIST_column,          LIST_column, /* -column */
         LIST_dash,          LIST_dash, /* -dash */
         LIST_diag,          LIST_diag, /* -diag */
         LIST_enum,          LIST_enum, /* -enum */
         LIST_hang,          LIST_hang, /* -hang */
         LIST_hyphen,          LIST_hyphen, /* -hyphen */
         LIST_inset,          LIST_inset, /* -inset */
         LIST_item,          LIST_item, /* -item */
         LIST_ohang,          LIST_ohang, /* -ohang */
         LIST_tag,          LIST_tag, /* -tag */
         LIST_MAX          LIST_MAX
 };  };
   
 /*  
  * Normalised `Bd' display type.  
  */  
 enum    mdoc_disp {  enum    mdoc_disp {
         DISP__NONE = 0,          DISP__NONE = 0,
         DISP_centred,          DISP_centered, /* -centered */
         DISP_ragged,          DISP_ragged, /* -ragged */
         DISP_unfilled,          DISP_unfilled, /* -unfilled */
         DISP_filled,          DISP_filled, /* -filled */
         DISP_literal          DISP_literal /* -literal */
 };  };
   
 /*  
  * Normalised `An' splitting argument.  
  */  
 enum    mdoc_auth {  enum    mdoc_auth {
         AUTH__NONE = 0,          AUTH__NONE = 0,
         AUTH_split,          AUTH_split, /* -split */
         AUTH_nosplit          AUTH_nosplit /* -nosplit */
 };  };
   
 /*  
  * Normalised `Bf' font type.  
  */  
 enum    mdoc_font {  enum    mdoc_font {
         FONT__NONE = 0,          FONT__NONE = 0,
         FONT_Em,          FONT_Em, /* Em, -emphasis */
         FONT_Li,          FONT_Li, /* Li, -literal */
         FONT_Sy          FONT_Sy /* Sy, -symbolic */
 };  };
   
 /*  
  * Normalised arguments for `Bd'.  
  */  
 struct  mdoc_bd {  struct  mdoc_bd {
         const char       *offs; /* -offset */          const char       *offs; /* -offset */
         enum mdoc_disp    type; /* -ragged, etc. */          enum mdoc_disp    type; /* -ragged, etc. */
         int               comp; /* -compact */          int               comp; /* -compact */
 };  };
   
 /*  
  * Normalised arguments for `Bl'.  
  */  
 struct  mdoc_bl {  struct  mdoc_bl {
         const char       *width; /* -width */          const char       *width; /* -width */
         const char       *offs; /* -offset */          const char       *offs; /* -offset */
Line 337  struct mdoc_bl {
Line 311  struct mdoc_bl {
         int               comp; /* -compact */          int               comp; /* -compact */
         size_t            ncols; /* -column arg count */          size_t            ncols; /* -column arg count */
         const char      **cols; /* -column val ptr */          const char      **cols; /* -column val ptr */
           int               count; /* -enum counter */
 };  };
   
 /*  
  * Normalised arguments for `Bf'.  
  */  
 struct  mdoc_bf {  struct  mdoc_bf {
         enum mdoc_font    font; /* font */          enum mdoc_font    font; /* font */
 };  };
   
 /*  
  * Normalised arguments for `An'.  
  */  
 struct  mdoc_an {  struct  mdoc_an {
         enum mdoc_auth    auth; /* -split, etc. */          enum mdoc_auth    auth; /* -split, etc. */
 };  };
   
 struct  mdoc_rs {  struct  mdoc_rs {
         int               titlejournal; /* whether %T and %J */          int               quote_T; /* whether to quote %T */
 };  };
   
 /*  /*
Line 363  struct mdoc_rs {
Line 332  struct mdoc_rs {
  * provided, etc.   * provided, etc.
  */   */
 union   mdoc_data {  union   mdoc_data {
         struct mdoc_an    An;          struct mdoc_an    An;
         struct mdoc_bd    Bd;          struct mdoc_bd    Bd;
         struct mdoc_bf    Bf;          struct mdoc_bf    Bf;
         struct mdoc_bl    Bl;          struct mdoc_bl    Bl;
           struct mdoc_node *Es;
         struct mdoc_rs    Rs;          struct mdoc_rs    Rs;
 };  };
   
 /*  /*
  * Single node in tree-linked AST.   * Single node in tree-linked AST.
  */   */
 struct  mdoc_node {  struct  mdoc_node {
         struct mdoc_node *parent; /* parent AST node */          struct mdoc_node *parent; /* parent AST node */
Line 382  struct mdoc_node {
Line 352  struct mdoc_node {
         int               nchild; /* number children */          int               nchild; /* number children */
         int               line; /* parse line */          int               line; /* parse line */
         int               pos; /* parse column */          int               pos; /* parse column */
           int               lastline; /* the node ends on this line */
         enum mdoct        tok; /* tok or MDOC__MAX if none */          enum mdoct        tok; /* tok or MDOC__MAX if none */
         int               flags;          int               flags;
 #define MDOC_VALID       (1 << 0) /* has been validated */  #define MDOC_VALID       (1 << 0) /* has been validated */
 #define MDOC_ACTED       (1 << 1) /* has been acted upon */  #define MDOC_BREAK       (1 << 1) /* has broken another block */
 #define MDOC_EOS         (1 << 2) /* at sentence boundary */  #define MDOC_EOS         (1 << 2) /* at sentence boundary */
 #define MDOC_LINE        (1 << 3) /* first macro/text on line */  #define MDOC_LINE        (1 << 3) /* first macro/text on line */
 #define MDOC_SYNPRETTY   (1 << 4) /* SYNOPSIS-style formatting */  #define MDOC_SYNPRETTY   (1 << 4) /* SYNOPSIS-style formatting */
 #define MDOC_ENDED       (1 << 5) /* rendering has been ended */  #define MDOC_ENDED       (1 << 5) /* rendering has been ended */
   #define MDOC_DELIMO      (1 << 6)
   #define MDOC_DELIMC      (1 << 7)
         enum mdoc_type    type; /* AST node type */          enum mdoc_type    type; /* AST node type */
         enum mdoc_sec     sec; /* current named section */          enum mdoc_sec     sec; /* current named section */
         union mdoc_data  *norm; /* normalised args */          union mdoc_data  *norm; /* normalised args */
           const void       *prev_font; /* before entering this node */
         /* FIXME: these can be union'd to shave a few bytes. */          /* FIXME: these can be union'd to shave a few bytes. */
         struct mdoc_arg  *args; /* BLOCK/ELEM */          struct mdoc_arg  *args; /* BLOCK/ELEM */
         struct mdoc_node *pending; /* BLOCK */          struct mdoc_node *pending; /* BLOCK */
Line 400  struct mdoc_node {
Line 374  struct mdoc_node {
         struct mdoc_node *body; /* BLOCK */          struct mdoc_node *body; /* BLOCK */
         struct mdoc_node *tail; /* BLOCK */          struct mdoc_node *tail; /* BLOCK */
         char             *string; /* TEXT */          char             *string; /* TEXT */
           const struct tbl_span *span; /* TBL */
           const struct eqn *eqn; /* EQN */
         enum mdoc_endbody end; /* BODY */          enum mdoc_endbody end; /* BODY */
 };  };
   
 /*  /* Names of macros.  Index is enum mdoct. */
  * Names of macros.  Index is enum mdoct.  Indexing into this returns  
  * the normalised name, e.g., mdoc_macronames[MDOC_Sh] -> "Sh".  
  */  
 extern  const char *const *mdoc_macronames;  extern  const char *const *mdoc_macronames;
   
 /*  /* Names of macro args.  Index is enum mdocargt. */
  * Names of macro args.  Index is enum mdocargt.  Indexing into this  
  * returns the normalised name, e.g., mdoc_argnames[MDOC_File] ->  
  * "file".  
  */  
 extern  const char *const *mdoc_argnames;  extern  const char *const *mdoc_argnames;
   
 __BEGIN_DECLS  __BEGIN_DECLS
   
 struct  mdoc;  struct  mdoc;
   
 void              mdoc_free(struct mdoc *);  
 struct  mdoc     *mdoc_alloc(struct regset *, void *, mandocmsg);  
 void              mdoc_reset(struct mdoc *);  
 int               mdoc_parseln(struct mdoc *, int, char *, int);  
 const struct mdoc_node *mdoc_node(const struct mdoc *);  const struct mdoc_node *mdoc_node(const struct mdoc *);
 const struct mdoc_meta *mdoc_meta(const struct mdoc *);  const struct mdoc_meta *mdoc_meta(const struct mdoc *);
 int               mdoc_endparse(struct mdoc *);  void mdoc_deroff(char **, const struct mdoc_node *);
   
 __END_DECLS  __END_DECLS
   
 #endif /*!MDOC_H*/  

Legend:
Removed from v.1.111  
changed lines
  Added in v.1.133

CVSweb