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

Diff for /mandoc/libmdoc.h between version 1.17 and 1.99

version 1.17, 2009/07/12 20:30:35 version 1.99, 2015/04/02 23:48:19
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
    * Copyright (c) 2013, 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 LIBMDOC_H  
 #define LIBMDOC_H  
   
 #include "mdoc.h"  
   
 enum    mdoc_next {  enum    mdoc_next {
         MDOC_NEXT_SIBLING = 0,          MDOC_NEXT_SIBLING = 0,
         MDOC_NEXT_CHILD          MDOC_NEXT_CHILD
 };  };
   
 struct  mdoc {  struct  mdoc {
         void             *data;          struct mparse    *parse; /* parse pointer */
         struct mdoc_cb    cb;          const char       *defos; /* default argument for .Os */
         void             *htab;          int               quick; /* abort parse early */
         int               flags;          int               flags; /* parse flags */
 #define MDOC_HALT        (1 << 0)       /* Error in parse. Halt. */  #define MDOC_LITERAL     (1 << 1) /* in a literal scope */
 #define MDOC_LITERAL     (1 << 1)       /* In a literal scope. */  #define MDOC_PBODY       (1 << 2) /* in the document body */
 #define MDOC_PBODY       (1 << 2)       /* In the document body. */  #define MDOC_NEWLINE     (1 << 3) /* first macro/text in a line */
         int               pflags;  #define MDOC_PHRASELIT   (1 << 4) /* literal within a partila phrase */
         enum mdoc_next    next;  #define MDOC_PPHRASE     (1 << 5) /* within a partial phrase */
         struct mdoc_node *last;  #define MDOC_FREECOL     (1 << 6) /* `It' invocation should close */
         struct mdoc_node *first;  #define MDOC_SYNOPSIS    (1 << 7) /* SYNOPSIS-style formatting */
         struct mdoc_meta  meta;  #define MDOC_KEEP        (1 << 8) /* in a word keep */
         enum mdoc_sec     lastnamed;  #define MDOC_SMOFF       (1 << 9) /* spacing is off */
         enum mdoc_sec     lastsec;  #define MDOC_NODELIMC    (1 << 10) /* disable closing delimiter handling */
           enum mdoc_next    next; /* where to put the next node */
           struct roff_node *last; /* the last node parsed */
           struct roff_node *first; /* the first node parsed */
           struct roff_node *last_es; /* the most recent Es node */
           struct roff_meta  meta; /* document meta-data */
           enum roff_sec     lastnamed;
           enum roff_sec     lastsec;
           struct roff      *roff;
 };  };
   
 enum    merr {  #define MACRO_PROT_ARGS struct mdoc *mdoc, \
         ETAILWS = 0,                          int tok, \
         ECOLEMPTY,                          int line, \
         EARGVPARM,                          int ppos, \
         EQUOTPARM,                          int *pos, \
         EQUOTTERM,                          char *buf
         EMALLOC,  
         EARGVAL,  
         ENOCALL,  
         EBODYPROL,  
         EPROLBODY,  
         ETEXTPROL,  
         ENOBLANK,  
         ETOOLONG,  
         EESCAPE,  
         EPRINT,  
         ENODAT,  
         ENOPROLOGUE,  
         ELINE,  
         EATT,  
         ENAME,  
         ELISTTYPE,  
         EDISPTYPE,  
         EMULTIDISP,  
         EMULTILIST,  
         ESECNAME,  
         ENAMESECINC,  
         EARGREP,  
         EBOOL,  
         ECOLMIS,  
         ENESTDISP,  
         EMISSWIDTH,  
         EWRONGMSEC,  
         ESECOOO,  
         ESECREP,  
         EBADSTAND,  
         ENOMULTILINE,  
         EMULTILINE,  
         ENOLINE,  
         EPROLOOO,  
         EPROLREP,  
         EBADMSEC,  
         EBADSEC,  
         EFONT,  
         EBADDATE,  
         ENUMFMT,  
         ENOWIDTH,  
         EUTSNAME,  
         EOBS,  
         EMACPARM,  
         EIMPBRK,  
         EIGNE,  
         EOPEN,  
         EQUOTPHR,  
         ENOCTX,  
         ESPACE,  
         MERRMAX  
 };  
   
 #define MACRO_PROT_ARGS struct mdoc *mdoc, int tok, int line, \  
                         int ppos, int *pos, char *buf  
   
 struct  mdoc_macro {  struct  mdoc_macro {
         int             (*fp)(MACRO_PROT_ARGS);          void            (*fp)(MACRO_PROT_ARGS);
         int               flags;          int               flags;
 #define MDOC_CALLABLE    (1 << 0)  #define MDOC_CALLABLE    (1 << 0)
 #define MDOC_PARSED      (1 << 1)  #define MDOC_PARSED      (1 << 1)
 #define MDOC_EXPLICIT    (1 << 2)  #define MDOC_EXPLICIT    (1 << 2)
 #define MDOC_PROLOGUE    (1 << 3)  #define MDOC_PROLOGUE    (1 << 3)
 #define MDOC_IGNDELIM    (1 << 4)  #define MDOC_IGNDELIM    (1 << 4)
         /* Reserved words in arguments treated as text. */  #define MDOC_JOIN        (1 << 5)
 };  };
   
   enum    margserr {
           ARGS_ERROR,
           ARGS_EOLN, /* end-of-line */
           ARGS_WORD, /* normal word */
           ARGS_PUNCT, /* series of punctuation */
           ARGS_QWORD, /* quoted word */
           ARGS_PHRASE, /* Ta'd phrase (-column) */
           ARGS_PPHRASE, /* tabbed phrase (-column) */
           ARGS_PEND /* last phrase (-column) */
   };
   
   /*
    * A punctuation delimiter is opening, closing, or "middle mark"
    * punctuation.  These govern spacing.
    * Opening punctuation (e.g., the opening parenthesis) suppresses the
    * following space; closing punctuation (e.g., the closing parenthesis)
    * suppresses the leading space; middle punctuation (e.g., the vertical
    * bar) can do either.  The middle punctuation delimiter bends the rules
    * depending on usage.
    */
   enum    mdelim {
           DELIM_NONE = 0,
           DELIM_OPEN,
           DELIM_MIDDLE,
           DELIM_CLOSE,
           DELIM_MAX
   };
   
 extern  const struct mdoc_macro *const mdoc_macros;  extern  const struct mdoc_macro *const mdoc_macros;
   
 __BEGIN_DECLS  __BEGIN_DECLS
   
 #define           mdoc_perr(m, l, p, t) \  void              mdoc_macro(MACRO_PROT_ARGS);
                   mdoc_err((m), (l), (p), 1, (t))  void              mdoc_word_alloc(struct mdoc *, int, int, const char *);
 #define           mdoc_pwarn(m, l, p, t) \  void              mdoc_word_append(struct mdoc *, const char *);
                   mdoc_err((m), (l), (p), 0, (t))  void              mdoc_elem_alloc(struct mdoc *, int, int,
 #define           mdoc_nerr(m, n, t) \  
                   mdoc_err((m), (n)->line, (n)->pos, 1, (t))  
 #define           mdoc_nwarn(m, n, t) \  
                   mdoc_err((m), (n)->line, (n)->pos, 0, (t))  
   
 int               mdoc_err(struct mdoc *, int, int, int, enum merr);  
 int               mdoc_verr(struct mdoc *, int, int, const char *, ...);  
 int               mdoc_vwarn(struct mdoc *, int, int, const char *, ...);  
   
 int               mdoc_macro(MACRO_PROT_ARGS);  
 int               mdoc_word_alloc(struct mdoc *,  
                         int, int, const char *);  
 int               mdoc_elem_alloc(struct mdoc *, int, int,  
                         int, struct mdoc_arg *);                          int, struct mdoc_arg *);
 int               mdoc_block_alloc(struct mdoc *, int, int,  struct roff_node *mdoc_block_alloc(struct mdoc *, int, int,
                         int, struct mdoc_arg *);                          int, struct mdoc_arg *);
 int               mdoc_head_alloc(struct mdoc *, int, int, int);  struct roff_node *mdoc_head_alloc(struct mdoc *, int, int, int);
 int               mdoc_tail_alloc(struct mdoc *, int, int, int);  void              mdoc_tail_alloc(struct mdoc *, int, int, int);
 int               mdoc_body_alloc(struct mdoc *, int, int, int);  struct roff_node *mdoc_body_alloc(struct mdoc *, int, int, int);
 void              mdoc_node_free(struct mdoc_node *);  struct roff_node *mdoc_endbody_alloc(struct mdoc *, int, int, int,
 void              mdoc_node_freelist(struct mdoc_node *);                          struct roff_node *, enum mdoc_endbody);
 void             *mdoc_hash_alloc(void);  void              mdoc_node_delete(struct mdoc *, struct roff_node *);
 int               mdoc_hash_find(const void *, const char *);  void              mdoc_node_relink(struct mdoc *, struct roff_node *);
 void              mdoc_hash_free(void *);  void              mdoc_hash_init(void);
 int               mdoc_iscdelim(char);  int               mdoc_hash_find(const char *);
 int               mdoc_isdelim(const char *);  
 size_t            mdoc_isescape(const char *);  
 enum    mdoc_sec  mdoc_atosec(const char *);  
 time_t            mdoc_atotime(const char *);  
   
 size_t            mdoc_macro2len(int);  
 const char       *mdoc_a2att(const char *);  const char       *mdoc_a2att(const char *);
   const char       *mdoc_a2lib(const char *);
 const char       *mdoc_a2st(const char *);  const char       *mdoc_a2st(const char *);
 const char       *mdoc_a2arch(const char *);  const char       *mdoc_a2arch(const char *);
 const char       *mdoc_a2vol(const char *);  void              mdoc_valid_pre(struct mdoc *, struct roff_node *);
 const char       *mdoc_a2msec(const char *);  void              mdoc_valid_post(struct mdoc *);
 int               mdoc_valid_pre(struct mdoc *,  void              mdoc_argv(struct mdoc *, int, int,
                         const struct mdoc_node *);  
 int               mdoc_valid_post(struct mdoc *);  
 int               mdoc_action_pre(struct mdoc *,  
                         const struct mdoc_node *);  
 int               mdoc_action_post(struct mdoc *);  
 int               mdoc_argv(struct mdoc *, int, int,  
                         struct mdoc_arg **, int *, char *);                          struct mdoc_arg **, int *, char *);
 #define ARGV_ERROR      (-1)  
 #define ARGV_EOLN       (0)  
 #define ARGV_ARG        (1)  
 #define ARGV_WORD       (2)  
 void              mdoc_argv_free(struct mdoc_arg *);  void              mdoc_argv_free(struct mdoc_arg *);
 int               mdoc_args(struct mdoc *, int,  enum margserr     mdoc_args(struct mdoc *, int,
                         int *, char *, int, char **);                          int *, char *, int, char **);
 #define ARGS_ERROR      (-1)  void              mdoc_macroend(struct mdoc *);
 #define ARGS_EOLN       (0)  enum mdelim       mdoc_isdelim(const char *);
 #define ARGS_WORD       (1)  
 #define ARGS_PUNCT      (2)  
 #define ARGS_QWORD      (3)  
 #define ARGS_PHRASE     (4)  
   
 int               mdoc_macroend(struct mdoc *);  
   
 __END_DECLS  __END_DECLS
   
 #endif /*!LIBMDOC_H*/  

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.99

CVSweb