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

Diff for /mandoc/mdoc.h between version 1.108 and 1.146

version 1.108, 2010/12/16 17:14:48 version 1.146, 2018/12/30 00:49:55
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>
    * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * 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
  * copyright notice and this permission notice appear in all copies.   * copyright notice and this permission notice appear in all copies.
  *   *
  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * 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  
   
 /*  struct  roff_node;
  * What follows is a list of ALL possible macros.  struct  roff_man;
  */  
 enum    mdoct {  
         MDOC_Ap = 0,  
         MDOC_Dd,  
         MDOC_Dt,  
         MDOC_Os,  
         MDOC_Sh,  
         MDOC_Ss,  
         MDOC_Pp,  
         MDOC_D1,  
         MDOC_Dl,  
         MDOC_Bd,  
         MDOC_Ed,  
         MDOC_Bl,  
         MDOC_El,  
         MDOC_It,  
         MDOC_Ad,  
         MDOC_An,  
         MDOC_Ar,  
         MDOC_Cd,  
         MDOC_Cm,  
         MDOC_Dv,  
         MDOC_Er,  
         MDOC_Ev,  
         MDOC_Ex,  
         MDOC_Fa,  
         MDOC_Fd,  
         MDOC_Fl,  
         MDOC_Fn,  
         MDOC_Ft,  
         MDOC_Ic,  
         MDOC_In,  
         MDOC_Li,  
         MDOC_Nd,  
         MDOC_Nm,  
         MDOC_Op,  
         MDOC_Ot,  
         MDOC_Pa,  
         MDOC_Rv,  
         MDOC_St,  
         MDOC_Va,  
         MDOC_Vt,  
         MDOC_Xr,  
         MDOC__A,  
         MDOC__B,  
         MDOC__D,  
         MDOC__I,  
         MDOC__J,  
         MDOC__N,  
         MDOC__O,  
         MDOC__P,  
         MDOC__R,  
         MDOC__T,  
         MDOC__V,  
         MDOC_Ac,  
         MDOC_Ao,  
         MDOC_Aq,  
         MDOC_At,  
         MDOC_Bc,  
         MDOC_Bf,  
         MDOC_Bo,  
         MDOC_Bq,  
         MDOC_Bsx,  
         MDOC_Bx,  
         MDOC_Db,  
         MDOC_Dc,  
         MDOC_Do,  
         MDOC_Dq,  
         MDOC_Ec,  
         MDOC_Ef,  
         MDOC_Em,  
         MDOC_Eo,  
         MDOC_Fx,  
         MDOC_Ms,  
         MDOC_No,  
         MDOC_Ns,  
         MDOC_Nx,  
         MDOC_Ox,  
         MDOC_Pc,  
         MDOC_Pf,  
         MDOC_Po,  
         MDOC_Pq,  
         MDOC_Qc,  
         MDOC_Ql,  
         MDOC_Qo,  
         MDOC_Qq,  
         MDOC_Re,  
         MDOC_Rs,  
         MDOC_Sc,  
         MDOC_So,  
         MDOC_Sq,  
         MDOC_Sm,  
         MDOC_Sx,  
         MDOC_Sy,  
         MDOC_Tn,  
         MDOC_Ux,  
         MDOC_Xc,  
         MDOC_Xo,  
         MDOC_Fo,  
         MDOC_Fc,  
         MDOC_Oo,  
         MDOC_Oc,  
         MDOC_Bk,  
         MDOC_Ek,  
         MDOC_Bt,  
         MDOC_Hf,  
         MDOC_Fr,  
         MDOC_Ud,  
         MDOC_Lb,  
         MDOC_Lp,  
         MDOC_Lk,  
         MDOC_Mt,  
         MDOC_Brq,  
         MDOC_Bro,  
         MDOC_Brc,  
         MDOC__C,  
         MDOC_Es,  
         MDOC_En,  
         MDOC_Dx,  
         MDOC__Q,  
         MDOC_br,  
         MDOC_sp,  
         MDOC__U,  
         MDOC_Ta,  
         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.   * An argument to a macro (multiple values = `-column xxx yyy').
  */   */
 enum    mdoc_type {  
         MDOC_TEXT,  
         MDOC_ELEM,  
         MDOC_HEAD,  
         MDOC_TAIL,  
         MDOC_BODY,  
         MDOC_BLOCK,  
         MDOC_ROOT  
 };  
   
 /*  
  * Section (named/unnamed) of `Sh'.   Note that these appear in the  
  * conventional order imposed by mdoc.7.  
  */  
 enum    mdoc_sec {  
         SEC_NONE = 0, /* No section, yet. */  
         SEC_NAME,  
         SEC_LIBRARY,  
         SEC_SYNOPSIS,  
         SEC_DESCRIPTION,  
         SEC_IMPLEMENTATION,  
         SEC_RETURN_VALUES,  
         SEC_ENVIRONMENT,  
         SEC_FILES,  
         SEC_EXIT_STATUS,  
         SEC_EXAMPLES,  
         SEC_DIAGNOSTICS,  
         SEC_COMPATIBILITY,  
         SEC_ERRORS,  
         SEC_SEE_ALSO,  
         SEC_STANDARDS,  
         SEC_HISTORY,  
         SEC_AUTHORS,  
         SEC_CAVEATS,  
         SEC_BUGS,  
         SEC_SECURITY,  
         SEC_CUSTOM, /* User-defined. */  
         SEC__MAX  
 };  
   
 /*  
  * Information from prologue.  
  */  
 struct  mdoc_meta {  
         char             *msec; /* `Dt' section (1, 3p, etc.) */  
         char             *vol; /* `Dt' volume (implied) */  
         char             *arch; /* `Dt' arch (i386, etc.) */  
         time_t            date; /* `Dd' normalised date */  
         char             *title; /* `Dt' title (FOO, etc.) */  
         char             *os; /* `Os' system (OpenBSD, etc.) */  
         char             *name; /* leading `Nm' name */  
 };  
   
 /*  
  * 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 66  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;
 };  };
   
 /*  
  * Indicates that a BODY's formatting has ended, but the scope is still  
  * open.  Used for syntax-broken blocks.  
  */  
 enum    mdoc_endbody {  
         ENDBODY_NOT = 0,  
         ENDBODY_SPACE, /* is broken: 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 123  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 {
           int               quote_T; /* whether to quote %T */
   };
   
 /*  /*
  * Consists of normalised node arguments.  These should be used instead   * Consists of normalised node arguments.  These should be used instead
  * of iterating through the mdoc_arg pointers of a node: defaults are   * of iterating through the mdoc_arg pointers of a node: defaults are
  * 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 roff_node *Es;
           struct mdoc_rs    Rs;
 };  };
   
 /*  /* Names of macro args.  Index is enum mdocargt. */
  * Single node in tree-linked AST.  
  */  
 struct  mdoc_node {  
         struct mdoc_node *parent; /* parent AST node */  
         struct mdoc_node *child; /* first child AST node */  
         struct mdoc_node *last; /* last child AST node */  
         struct mdoc_node *next; /* sibling AST node */  
         struct mdoc_node *prev; /* prior sibling AST node */  
         int               nchild; /* number children */  
         int               line; /* parse line */  
         int               pos; /* parse column */  
         enum mdoct        tok; /* tok or MDOC__MAX if none */  
         int               flags;  
 #define MDOC_VALID       (1 << 0) /* has been validated */  
 #define MDOC_ACTED       (1 << 1) /* has been acted upon */  
 #define MDOC_EOS         (1 << 2) /* at sentence boundary */  
 #define MDOC_LINE        (1 << 3) /* first macro/text on line */  
 #define MDOC_SYNPRETTY   (1 << 4) /* SYNOPSIS-style formatting */  
 #define MDOC_ENDED       (1 << 5) /* rendering has been ended */  
         enum mdoc_type    type; /* AST node type */  
         enum mdoc_sec     sec; /* current named section */  
         /* FIXME: these can be union'd to shave a few bytes. */  
         struct mdoc_arg  *args; /* BLOCK/ELEM */  
         struct mdoc_node *pending; /* BLOCK */  
         struct mdoc_node *head; /* BLOCK */  
         struct mdoc_node *body; /* BLOCK */  
         struct mdoc_node *tail; /* BLOCK */  
         char             *string; /* TEXT */  
         enum mdoc_endbody end; /* BODY */  
         union mdoc_data   data;  
 };  
   
 /*  
  * 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;  
   
 /*  
  * 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  void             mdoc_validate(struct roff_man *);
   
 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_meta *mdoc_meta(const struct mdoc *);  
 int               mdoc_endparse(struct mdoc *);  
   
 __END_DECLS  
   
 #endif /*!MDOC_H*/  

Legend:
Removed from v.1.108  
changed lines
  Added in v.1.146

CVSweb