]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc.h
While we do not recommend the idiom ".Fl Fl long" for long options
[mandoc.git] / mandoc.h
index f1ab489e0f531ba0a98e250ac3d821c9f97e7caf..1c00bf437b3d763e967ab7110b68f67e0462b824 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,7 +1,7 @@
-/*     $Id: mandoc.h,v 1.258 2018/12/13 11:55:46 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.268 2020/04/24 12:02:33 schwarze Exp $ */
 /*
 /*
+ * Copyright (c) 2012-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012-2018 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * Error handling, escape sequence, and character utilities.
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * Error handling, escape sequence, and character utilities.
+ * Can be used by all code in the mandoc package.
  */
 
 #define ASCII_NBRSP     31  /* non-breaking space */
  */
 
 #define ASCII_NBRSP     31  /* non-breaking space */
@@ -83,7 +84,8 @@ enum  mandocerr {
        MANDOCERR_TH_NOTITLE, /* missing manual title, using "": [macro] */
        MANDOCERR_MSEC_MISSING, /* missing manual section, using "": macro */
        MANDOCERR_MSEC_BAD, /* unknown manual section: Dt ... section */
        MANDOCERR_TH_NOTITLE, /* missing manual title, using "": [macro] */
        MANDOCERR_MSEC_MISSING, /* missing manual section, using "": macro */
        MANDOCERR_MSEC_BAD, /* unknown manual section: Dt ... section */
-       MANDOCERR_DATE_MISSING, /* missing date, using today's date */
+       MANDOCERR_MSEC_FILE, /* filename/section mismatch: ... */
+       MANDOCERR_DATE_MISSING, /* missing date, using "": [macro] */
        MANDOCERR_DATE_BAD, /* cannot parse date, using it verbatim: date */
        MANDOCERR_DATE_FUTURE, /* date in the future, using it anyway: date */
        MANDOCERR_OS_MISSING, /* missing Os macro, using "" */
        MANDOCERR_DATE_BAD, /* cannot parse date, using it verbatim: date */
        MANDOCERR_DATE_FUTURE, /* date in the future, using it anyway: date */
        MANDOCERR_OS_MISSING, /* missing Os macro, using "" */
@@ -169,6 +171,7 @@ enum        mandocerr {
        MANDOCERR_FI_TAB, /* tab in filled text */
        MANDOCERR_EOS, /* new sentence, new line */
        MANDOCERR_ESC_BAD, /* invalid escape sequence: esc */
        MANDOCERR_FI_TAB, /* tab in filled text */
        MANDOCERR_EOS, /* new sentence, new line */
        MANDOCERR_ESC_BAD, /* invalid escape sequence: esc */
+       MANDOCERR_ESC_UNDEF, /* undefined escape, printing literally: char */
        MANDOCERR_STR_UNDEF, /* undefined string, using "": name */
 
        /* related to tables */
        MANDOCERR_STR_UNDEF, /* undefined string, using "": name */
 
        /* related to tables */
@@ -192,7 +195,6 @@ enum        mandocerr {
        MANDOCERR_TBLDATA_BLK, /* data block open at end of tbl: macro */
 
        /* related to document structure and macros */
        MANDOCERR_TBLDATA_BLK, /* data block open at end of tbl: macro */
 
        /* related to document structure and macros */
-       MANDOCERR_FILE, /* cannot open file */
        MANDOCERR_PROLOG_REP, /* duplicate prologue macro: macro */
        MANDOCERR_DT_LATE, /* skipping late title macro: Dt args */
        MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
        MANDOCERR_PROLOG_REP, /* duplicate prologue macro: macro */
        MANDOCERR_DT_LATE, /* skipping late title macro: Dt args */
        MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
@@ -223,6 +225,7 @@ enum        mandocerr {
        MANDOCERR_SHIFT, /* excessive shift: ..., but max is ... */
        MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */
        MANDOCERR_SO_FAIL, /* .so request failed */
        MANDOCERR_SHIFT, /* excessive shift: ..., but max is ... */
        MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */
        MANDOCERR_SO_FAIL, /* .so request failed */
+       MANDOCERR_TG_SPC, /* skipping tag containing whitespace: tag */
        MANDOCERR_ARG_SKIP, /* skipping all arguments: macro args */
        MANDOCERR_ARG_EXCESS, /* skipping excess arguments: macro ... args */
        MANDOCERR_DIVZERO, /* divide by zero */
        MANDOCERR_ARG_SKIP, /* skipping all arguments: macro args */
        MANDOCERR_ARG_EXCESS, /* skipping excess arguments: macro ... args */
        MANDOCERR_DIVZERO, /* divide by zero */
@@ -231,6 +234,7 @@ enum        mandocerr {
 
        MANDOCERR_TOOLARGE, /* input too large */
        MANDOCERR_CHAR_UNSUPP, /* unsupported control character: number */
 
        MANDOCERR_TOOLARGE, /* input too large */
        MANDOCERR_CHAR_UNSUPP, /* unsupported control character: number */
+       MANDOCERR_ESC_UNSUPP, /* unsupported escape sequence: escape */
        MANDOCERR_REQ_UNSUPP, /* unsupported roff request: request */
        MANDOCERR_WHILE_NEST, /* nested .while loops */
        MANDOCERR_WHILE_OUTOF, /* end of scope with open .while loop */
        MANDOCERR_REQ_UNSUPP, /* unsupported roff request: request */
        MANDOCERR_WHILE_NEST, /* nested .while loops */
        MANDOCERR_WHILE_OUTOF, /* end of scope with open .while loop */
@@ -240,12 +244,43 @@ enum      mandocerr {
        MANDOCERR_TBLLAYOUT_MOD, /* unsupported tbl layout modifier: m */
        MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */
 
        MANDOCERR_TBLLAYOUT_MOD, /* unsupported tbl layout modifier: m */
        MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */
 
+       MANDOCERR_BADARG, /* ===== start of bad invocations ===== */
+
+       MANDOCERR_BADARG_BAD, /* bad argument */
+       MANDOCERR_BADARG_DUPE, /* duplicate argument */
+       MANDOCERR_BADVAL, /* does not take a value */
+       MANDOCERR_BADVAL_MISS, /* missing argument value */
+       MANDOCERR_BADVAL_BAD, /* bad argument value */
+       MANDOCERR_BADVAL_DUPE, /* duplicate argument value */
+       MANDOCERR_TAG, /* no such tag */
+
+       MANDOCERR_SYSERR, /* ===== start of system errors ===== */
+
+       MANDOCERR_DUP,
+       MANDOCERR_EXEC,
+       MANDOCERR_FDOPEN,
+       MANDOCERR_FFLUSH,
+       MANDOCERR_FORK,
+       MANDOCERR_FSTAT,
+       MANDOCERR_GETLINE,
+       MANDOCERR_GLOB,
+       MANDOCERR_GZCLOSE,
+       MANDOCERR_GZDOPEN,
+       MANDOCERR_MKSTEMP,
+       MANDOCERR_OPEN,
+       MANDOCERR_PLEDGE,
+       MANDOCERR_READ,
+       MANDOCERR_WAIT,
+       MANDOCERR_WRITE,
+
        MANDOCERR_MAX
 };
 
 enum   mandoc_esc {
        ESCAPE_ERROR = 0, /* bail! unparsable escape */
        MANDOCERR_MAX
 };
 
 enum   mandoc_esc {
        ESCAPE_ERROR = 0, /* bail! unparsable escape */
+       ESCAPE_UNSUPP, /* unsupported escape; ignore it */
        ESCAPE_IGNORE, /* escape to be ignored */
        ESCAPE_IGNORE, /* escape to be ignored */
+       ESCAPE_UNDEF, /* undefined escape; print literal character */
        ESCAPE_SPECIAL, /* a regular special character */
        ESCAPE_FONT, /* a generic font mode */
        ESCAPE_FONTBOLD, /* bold font mode */
        ESCAPE_SPECIAL, /* a regular special character */
        ESCAPE_FONT, /* a generic font mode */
        ESCAPE_FONTBOLD, /* bold font mode */
@@ -265,11 +300,19 @@ enum      mandoc_esc {
        ESCAPE_OVERSTRIKE /* overstrike all chars in the argument */
 };
 
        ESCAPE_OVERSTRIKE /* overstrike all chars in the argument */
 };
 
-typedef        void    (*mandocmsg)(enum mandocerr, enum mandoclevel,
-                       const char *, int, int, const char *);
-
 
 
+enum mandoc_esc          mandoc_font(const char *, int);
 enum mandoc_esc          mandoc_escape(const char **, const char **, int *);
 enum mandoc_esc          mandoc_escape(const char **, const char **, int *);
+void             mandoc_msg_setoutfile(FILE *);
+const char      *mandoc_msg_getinfilename(void);
+void             mandoc_msg_setinfilename(const char *);
+enum mandocerr   mandoc_msg_getmin(void);
+void             mandoc_msg_setmin(enum mandocerr);
+enum mandoclevel  mandoc_msg_getrc(void);
+void             mandoc_msg_setrc(enum mandoclevel);
+void             mandoc_msg(enum mandocerr, int, int, const char *, ...)
+                       __attribute__((__format__ (__printf__, 4, 5)));
+void             mandoc_msg_summary(void);
 void             mchars_alloc(void);
 void             mchars_free(void);
 int              mchars_num2char(const char *, size_t);
 void             mchars_alloc(void);
 void             mchars_free(void);
 int              mchars_num2char(const char *, size_t);