]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc.h
Multiple parser and formatter fixes for line drawing in tbl(7).
[mandoc.git] / mandoc.h
index b7db22720798cacfa0fcd085a1503d5d81f98e25..82d6fd7a591803fa2bf44ebc227ff49ee9d7080f 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,7 +1,7 @@
-/*     $Id: mandoc.h,v 1.180 2015/01/14 22:58:16 schwarze Exp $ */
+/*     $Id: mandoc.h,v 1.190 2015/01/27 05:21:44 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2015 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
@@ -31,7 +31,7 @@ enum  mandoclevel {
        MANDOCLEVEL_RESERVED,
        MANDOCLEVEL_WARNING, /* warnings: syntax, whitespace, etc. */
        MANDOCLEVEL_ERROR, /* input has been thrown away */
-       MANDOCLEVEL_FATAL, /* input is borked */
+       MANDOCLEVEL_UNSUPP, /* input needs unimplemented features */
        MANDOCLEVEL_BADARG, /* bad argument in invocation */
        MANDOCLEVEL_SYSERR, /* system error */
        MANDOCLEVEL_MAX
@@ -127,6 +127,11 @@ enum       mandocerr {
        MANDOCERR_ESC_BAD, /* invalid escape sequence: esc */
        MANDOCERR_STR_UNDEF, /* undefined string, using "": name */
 
+       /* related to tables */
+       MANDOCERR_TBLLAYOUT_SPAN, /* tbl line starts with span */
+       MANDOCERR_TBLLAYOUT_DOWN, /* tbl column starts with span */
+       MANDOCERR_TBLLAYOUT_VERT, /* skipping vertical bar in tbl layout */
+
        MANDOCERR_ERROR, /* ===== start of errors ===== */
 
        /* related to equations */
@@ -136,24 +141,28 @@ enum      mandocerr {
        MANDOCERR_EQNEOF, /* unexpected end of equation */
 
        /* related to tables */
-       MANDOCERR_TBL, /* bad table syntax */
-       MANDOCERR_TBLOPT, /* bad table option */
-       MANDOCERR_TBLLAYOUT, /* bad table layout */
-       MANDOCERR_TBLNOLAYOUT, /* no table layout cells specified */
+       MANDOCERR_TBLOPT_ALPHA, /* non-alphabetic character in tbl options */
+       MANDOCERR_TBLOPT_BAD, /* skipping unknown tbl option: option */
+       MANDOCERR_TBLOPT_NOARG, /* missing tbl option argument */
+       MANDOCERR_TBLOPT_ARGSZ, /* wrong tbl option argument size */
+       MANDOCERR_TBLLAYOUT_NONE, /* empty tbl layout */
+       MANDOCERR_TBLLAYOUT_CHAR, /* invalid character in tbl layout: char */
+       MANDOCERR_TBLLAYOUT_PAR, /* unmatched parenthesis in tbl layout */
        MANDOCERR_TBLNODATA, /* no table data cells specified */
        MANDOCERR_TBLIGNDATA, /* ignore data in cell */
        MANDOCERR_TBLBLOCK, /* data block still open */
        MANDOCERR_TBLEXTRADAT, /* ignoring extra data cells */
-       MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */
 
        /* related to document structure and macros */
        MANDOCERR_FILE, /* cannot open file */
        MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
-       MANDOCERR_BADCHAR, /* skipping bad character: number */
+       MANDOCERR_CHAR_BAD, /* skipping bad character: number */
        MANDOCERR_MACRO, /* skipping unknown macro: macro */
+       MANDOCERR_REQ_INSEC, /* skipping insecure request: request */
        MANDOCERR_IT_STRAY, /* skipping item outside list: It ... */
        MANDOCERR_TA_STRAY, /* skipping column outside column list: Ta */
        MANDOCERR_BLK_NOTOPEN, /* skipping end of block that is not open */
+       MANDOCERR_RE_NOTOPEN, /* fewer RS blocks open, skipping: RE arg */
        MANDOCERR_BLK_BROKEN, /* inserting missing end of block: macro ... */
        MANDOCERR_BLK_NOEND, /* appending missing end of block: macro */
 
@@ -167,14 +176,19 @@ enum      mandocerr {
        MANDOCERR_ST_BAD, /* unknown standard specifier: St standard */
        MANDOCERR_IT_NONUM, /* skipping request without numeric argument */
        MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */
+       MANDOCERR_SO_FAIL, /* .so request failed */
        MANDOCERR_ARG_SKIP, /* skipping all arguments: macro args */
        MANDOCERR_ARG_EXCESS, /* skipping excess arguments: macro ... args */
        MANDOCERR_DIVZERO, /* divide by zero */
 
-       MANDOCERR_FATAL, /* ===== start of fatal errors ===== */
+       MANDOCERR_UNSUPP, /* ===== start of unsupported features ===== */
 
        MANDOCERR_TOOLARGE, /* input too large */
-       MANDOCERR_SO_FAIL, /* .so request failed */
+       MANDOCERR_CHAR_UNSUPP, /* unsupported control character: number */
+       MANDOCERR_REQ_UNSUPP, /* unsupported roff request: request */
+       MANDOCERR_TBLLAYOUT_MOD, /* unsupported tbl layout modifier: m */
+       MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */
+       MANDOCERR_TBLEQN, /* eqn in tbl */
 
        MANDOCERR_MAX
 };
@@ -182,7 +196,6 @@ enum        mandocerr {
 struct tbl_opts {
        char              tab; /* cell-separator */
        char              decimal; /* decimal point */
-       int               linesize;
        int               opts;
 #define        TBL_OPT_CENTRE   (1 << 0)
 #define        TBL_OPT_EXPAND   (1 << 1)
@@ -191,7 +204,10 @@ struct     tbl_opts {
 #define        TBL_OPT_ALLBOX   (1 << 4)
 #define        TBL_OPT_NOKEEP   (1 << 5)
 #define        TBL_OPT_NOSPACE  (1 << 6)
+#define        TBL_OPT_NOWARN   (1 << 7)
        int               cols; /* number of columns */
+       int               lvert; /* width of left vertical line */
+       int               rvert; /* width of right vertical line */
 };
 
 /*
@@ -201,7 +217,6 @@ struct      tbl_opts {
  */
 struct tbl_head {
        int               ident; /* 0 <= unique id < cols */
-       int               vert; /* width of preceding vertical line */
        struct tbl_head  *next;
        struct tbl_head  *prev;
 };
@@ -224,7 +239,7 @@ enum        tbl_cellt {
  */
 struct tbl_cell {
        struct tbl_cell  *next;
-       int               vert; /* width of preceding vertical line */
+       int               vert; /* width of subsequent vertical line */
        enum tbl_cellt    pos;
        size_t            spacing;
        int               flags;
@@ -246,7 +261,7 @@ struct      tbl_row {
        struct tbl_row   *next;
        struct tbl_cell  *first;
        struct tbl_cell  *last;
-       int               vert; /* trailing vertical line */
+       int               vert; /* width of left vertical line */
 };
 
 enum   tbl_datt {
@@ -285,12 +300,13 @@ struct    tbl_span {
        struct tbl_row   *layout; /* layout row */
        struct tbl_dat   *first;
        struct tbl_dat   *last;
+       struct tbl_span  *prev;
+       struct tbl_span  *next;
        int               line; /* parse line */
        int               flags;
 #define        TBL_SPAN_FIRST   (1 << 0)
 #define        TBL_SPAN_LAST    (1 << 1)
        enum tbl_spant    pos;
-       struct tbl_span  *next;
 };
 
 enum   eqn_boxt {
@@ -397,7 +413,8 @@ enum        mandoc_esc {
        ESCAPE_NUMBERED, /* a numbered glyph */
        ESCAPE_UNICODE, /* a unicode codepoint */
        ESCAPE_NOSPACE, /* suppress space if the last on a line */
-       ESCAPE_SKIPCHAR /* skip the next character */
+       ESCAPE_SKIPCHAR, /* skip the next character */
+       ESCAPE_OVERSTRIKE /* overstrike all chars in the argument */
 };
 
 typedef        void    (*mandocmsg)(enum mandocerr, enum mandoclevel,