Print this page
5051 import mdocml-1.12.3
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Approved by: TBD

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/mandoc/mandoc.h
          +++ new/usr/src/cmd/mandoc/mandoc.h
   1      -/*      $Id: mandoc.h,v 1.99 2012/02/16 20:51:31 joerg Exp $ */
        1 +/*      $Id: mandoc.h,v 1.112 2013/12/30 18:30:32 schwarze Exp $ */
   2    2  /*
   3    3   * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
        4 + * Copyright (c) 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>
   4    5   *
   5    6   * Permission to use, copy, modify, and distribute this software for any
   6    7   * purpose with or without fee is hereby granted, provided that the above
   7    8   * copyright notice and this permission notice appear in all copies.
   8    9   *
   9   10   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10   11   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11   12   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12   13   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13   14   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
↓ open down ↓ 29 lines elided ↑ open up ↑
  43   44   */
  44   45  enum    mandocerr {
  45   46          MANDOCERR_OK,
  46   47  
  47   48          MANDOCERR_WARNING, /* ===== start of warnings ===== */
  48   49  
  49   50          /* related to the prologue */
  50   51          MANDOCERR_NOTITLE, /* no title in document */
  51   52          MANDOCERR_UPPERCASE, /* document title should be all caps */
  52   53          MANDOCERR_BADMSEC, /* unknown manual section */
       54 +        MANDOCERR_BADVOLARCH, /* unknown manual volume or arch */
  53   55          MANDOCERR_NODATE, /* date missing, using today's date */
  54   56          MANDOCERR_BADDATE, /* cannot parse date, using it verbatim */
  55   57          MANDOCERR_PROLOGOOO, /* prologue macros out of order */
  56   58          MANDOCERR_PROLOGREP, /* duplicate prologue macro */
  57   59          MANDOCERR_BADPROLOG, /* macro not allowed in prologue */
  58   60          MANDOCERR_BADBODY, /* macro not allowed in body */
  59   61  
  60   62          /* related to document structure */
  61   63          MANDOCERR_SO, /* .so is fragile, better use ln(1) */
  62   64          MANDOCERR_NAMESECFIRST, /* NAME section must come first */
  63   65          MANDOCERR_BADNAMESEC, /* bad NAME section contents */
  64      -        MANDOCERR_NONAME, /* manual name not yet set */
  65   66          MANDOCERR_SECOOO, /* sections out of conventional order */
  66   67          MANDOCERR_SECREP, /* duplicate section name */
  67      -        MANDOCERR_SECMSEC, /* section not in conventional manual section */
       68 +        MANDOCERR_SECMSEC, /* section header suited to sections ... */
  68   69  
  69   70          /* related to macros and nesting */
  70   71          MANDOCERR_MACROOBS, /* skipping obsolete macro */
  71   72          MANDOCERR_IGNPAR, /* skipping paragraph macro */
       73 +        MANDOCERR_MOVEPAR, /* moving paragraph macro out of list */
  72   74          MANDOCERR_IGNNS, /* skipping no-space macro */
  73   75          MANDOCERR_SCOPENEST, /* blocks badly nested */
  74   76          MANDOCERR_CHILD, /* child violates parent syntax */
  75   77          MANDOCERR_NESTEDDISP, /* nested displays are not portable */
  76   78          MANDOCERR_SCOPEREP, /* already in literal mode */
  77   79          MANDOCERR_LINESCOPE, /* line scope broken */
  78   80  
  79   81          /* related to missing macro arguments */
  80   82          MANDOCERR_MACROEMPTY, /* skipping empty macro */
  81   83          MANDOCERR_ARGCWARN, /* argument count wrong */
↓ open down ↓ 40 lines elided ↑ open up ↑
 122  124          MANDOCERR_TBLLAYOUT, /* bad table layout */
 123  125          MANDOCERR_TBLNOLAYOUT, /* no table layout cells specified */
 124  126          MANDOCERR_TBLNODATA, /* no table data cells specified */
 125  127          MANDOCERR_TBLIGNDATA, /* ignore data in cell */
 126  128          MANDOCERR_TBLBLOCK, /* data block still open */
 127  129          MANDOCERR_TBLEXTRADAT, /* ignoring extra data cells */
 128  130  
 129  131          MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */
 130  132          MANDOCERR_BADCHAR, /* skipping bad character */
 131  133          MANDOCERR_NAMESC, /* escaped character not allowed in a name */
      134 +        MANDOCERR_NONAME, /* manual name not yet set */
 132  135          MANDOCERR_NOTEXT, /* skipping text before the first section header */
 133  136          MANDOCERR_MACRO, /* skipping unknown macro */
 134  137          MANDOCERR_REQUEST, /* NOT IMPLEMENTED: skipping request */
 135  138          MANDOCERR_ARGCOUNT, /* argument count wrong */
      139 +        MANDOCERR_STRAYTA, /* skipping column outside column list */
 136  140          MANDOCERR_NOSCOPE, /* skipping end of block that is not open */
 137  141          MANDOCERR_SCOPEBROKEN, /* missing end of block */
 138  142          MANDOCERR_SCOPEEXIT, /* scope open on exit */
 139  143          MANDOCERR_UNAME, /* uname(3) system call failed */
 140  144          /* FIXME: merge following with MANDOCERR_ARGCOUNT */
 141  145          MANDOCERR_NOARGS, /* macro requires line argument(s) */
 142  146          MANDOCERR_NOBODY, /* macro requires body argument(s) */
 143  147          MANDOCERR_NOARGV, /* macro requires argument(s) */
      148 +        MANDOCERR_NUMERIC, /* request requires a numeric argument */
 144  149          MANDOCERR_LISTTYPE, /* missing list type */
 145  150          MANDOCERR_ARGSLOST, /* line argument(s) will be lost */
 146  151          MANDOCERR_BODYLOST, /* body argument(s) will be lost */
 147  152  
 148  153          MANDOCERR_FATAL, /* ===== start of fatal errors ===== */
 149  154  
 150  155          MANDOCERR_NOTMANUAL, /* manual isn't really a manual */
 151  156          MANDOCERR_COLUMNS, /* column syntax is inconsistent */
 152  157          MANDOCERR_BADDISP, /* NOT IMPLEMENTED: .Bd -file */
 153  158          MANDOCERR_SYNTARGVCOUNT, /* argument count wrong, violates syntax */
 154  159          MANDOCERR_SYNTCHILD, /* child violates parent syntax */
 155  160          MANDOCERR_SYNTARGCOUNT, /* argument count wrong, violates syntax */
 156  161          MANDOCERR_SOPATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */
 157  162          MANDOCERR_NODOCBODY, /* no document body */
 158  163          MANDOCERR_NODOCPROLOG, /* no document prologue */
 159  164          MANDOCERR_MEM, /* static buffer exhausted */
 160  165          MANDOCERR_MAX
 161  166  };
 162  167  
 163      -struct  tbl {
      168 +struct  tbl_opts {
 164  169          char              tab; /* cell-separator */
 165  170          char              decimal; /* decimal point */
 166  171          int               linesize;
 167  172          int               opts;
 168  173  #define TBL_OPT_CENTRE   (1 << 0)
 169  174  #define TBL_OPT_EXPAND   (1 << 1)
 170  175  #define TBL_OPT_BOX      (1 << 2)
 171  176  #define TBL_OPT_DBOX     (1 << 3)
 172  177  #define TBL_OPT_ALLBOX   (1 << 4)
 173  178  #define TBL_OPT_NOKEEP   (1 << 5)
 174  179  #define TBL_OPT_NOSPACE  (1 << 6)
 175  180          int               cols; /* number of columns */
 176  181  };
 177  182  
 178      -enum    tbl_headt {
 179      -        TBL_HEAD_DATA, /* plug in data from tbl_dat */
 180      -        TBL_HEAD_VERT, /* vertical spacer */
 181      -        TBL_HEAD_DVERT  /* double-vertical spacer */
 182      -};
 183      -
 184  183  /*
 185  184   * The head of a table specifies all of its columns.  When formatting a
 186  185   * tbl_span, iterate over these and plug in data from the tbl_span when
 187  186   * appropriate, using tbl_cell as a guide to placement.
 188  187   */
 189  188  struct  tbl_head {
 190      -        enum tbl_headt    pos;
 191  189          int               ident; /* 0 <= unique id < cols */
      190 +        int               vert; /* width of preceding vertical line */
 192  191          struct tbl_head  *next;
 193  192          struct tbl_head  *prev;
 194  193  };
 195  194  
 196  195  enum    tbl_cellt {
 197  196          TBL_CELL_CENTRE, /* c, C */
 198  197          TBL_CELL_RIGHT, /* r, R */
 199  198          TBL_CELL_LEFT, /* l, L */
 200  199          TBL_CELL_NUMBER, /* n, N */
 201  200          TBL_CELL_SPAN, /* s, S */
 202  201          TBL_CELL_LONG, /* a, A */
 203  202          TBL_CELL_DOWN, /* ^ */
 204  203          TBL_CELL_HORIZ, /* _, - */
 205  204          TBL_CELL_DHORIZ, /* = */
 206      -        TBL_CELL_VERT, /* | */
 207      -        TBL_CELL_DVERT, /* || */
 208  205          TBL_CELL_MAX
 209  206  };
 210  207  
 211  208  /*
 212  209   * A cell in a layout row.
 213  210   */
 214  211  struct  tbl_cell {
 215  212          struct tbl_cell  *next;
      213 +        int               vert; /* width of preceding vertical line */
 216  214          enum tbl_cellt    pos;
 217  215          size_t            spacing;
 218  216          int               flags;
 219  217  #define TBL_CELL_TALIGN  (1 << 0) /* t, T */
 220  218  #define TBL_CELL_BALIGN  (1 << 1) /* d, D */
 221  219  #define TBL_CELL_BOLD    (1 << 2) /* fB, B, b */
 222  220  #define TBL_CELL_ITALIC  (1 << 3) /* fI, I, i */
 223  221  #define TBL_CELL_EQUAL   (1 << 4) /* e, E */
 224  222  #define TBL_CELL_UP      (1 << 5) /* u, U */
 225  223  #define TBL_CELL_WIGN    (1 << 6) /* z, Z */
↓ open down ↓ 33 lines elided ↑ open up ↑
 259  257  enum    tbl_spant {
 260  258          TBL_SPAN_DATA, /* span consists of data */
 261  259          TBL_SPAN_HORIZ, /* span is horizontal line */
 262  260          TBL_SPAN_DHORIZ /* span is double horizontal line */
 263  261  };
 264  262  
 265  263  /*
 266  264   * A row of data in a table.
 267  265   */
 268  266  struct  tbl_span {
 269      -        struct tbl       *tbl;
      267 +        struct tbl_opts  *opts;
 270  268          struct tbl_head  *head;
 271  269          struct tbl_row   *layout; /* layout row */
 272  270          struct tbl_dat   *first;
 273  271          struct tbl_dat   *last;
 274  272          int               line; /* parse line */
 275  273          int               flags;
 276  274  #define TBL_SPAN_FIRST   (1 << 0)
 277  275  #define TBL_SPAN_LAST    (1 << 1)
 278  276          enum tbl_spant    pos;
 279  277          struct tbl_span  *next;
↓ open down ↓ 95 lines elided ↑ open up ↑
 375  373          MPARSE_MAN /* assume -man */
 376  374  };
 377  375  
 378  376  enum    mandoc_esc {
 379  377          ESCAPE_ERROR = 0, /* bail! unparsable escape */
 380  378          ESCAPE_IGNORE, /* escape to be ignored */
 381  379          ESCAPE_SPECIAL, /* a regular special character */
 382  380          ESCAPE_FONT, /* a generic font mode */
 383  381          ESCAPE_FONTBOLD, /* bold font mode */
 384  382          ESCAPE_FONTITALIC, /* italic font mode */
      383 +        ESCAPE_FONTBI, /* bold italic font mode */
 385  384          ESCAPE_FONTROMAN, /* roman font mode */
 386  385          ESCAPE_FONTPREV, /* previous font mode */
 387  386          ESCAPE_NUMBERED, /* a numbered glyph */
 388  387          ESCAPE_UNICODE, /* a unicode codepoint */
 389      -        ESCAPE_NOSPACE /* suppress space if the last on a line */
      388 +        ESCAPE_NOSPACE, /* suppress space if the last on a line */
      389 +        ESCAPE_SKIPCHAR /* skip the next character */
 390  390  };
 391  391  
 392  392  typedef void    (*mandocmsg)(enum mandocerr, enum mandoclevel,
 393  393                          const char *, int, int, const char *);
 394  394  
 395  395  struct  mparse;
 396  396  struct  mchars;
 397  397  struct  mdoc;
 398  398  struct  man;
 399  399  
↓ open down ↓ 6 lines elided ↑ open up ↑
 406  406  char             *mandoc_strdup(const char *);
 407  407  char             *mandoc_strndup(const char *, size_t);
 408  408  struct mchars    *mchars_alloc(void);
 409  409  void              mchars_free(struct mchars *);
 410  410  char              mchars_num2char(const char *, size_t);
 411  411  int               mchars_num2uc(const char *, size_t);
 412  412  int               mchars_spec2cp(const struct mchars *, 
 413  413                          const char *, size_t);
 414  414  const char       *mchars_spec2str(const struct mchars *, 
 415  415                          const char *, size_t, size_t *);
 416      -struct mparse    *mparse_alloc(enum mparset, 
 417      -                        enum mandoclevel, mandocmsg, void *);
      416 +struct mparse    *mparse_alloc(enum mparset, enum mandoclevel,
      417 +                        mandocmsg, void *, char *);
 418  418  void              mparse_free(struct mparse *);
 419  419  void              mparse_keep(struct mparse *);
 420  420  enum mandoclevel  mparse_readfd(struct mparse *, int, const char *);
 421  421  enum mandoclevel  mparse_readmem(struct mparse *, const void *, size_t,
 422  422                          const char *);
 423  423  void              mparse_reset(struct mparse *);
 424  424  void              mparse_result(struct mparse *, 
 425  425                          struct mdoc **, struct man **);
 426  426  const char       *mparse_getkeep(const struct mparse *);
 427  427  const char       *mparse_strerror(enum mandocerr);
 428  428  const char       *mparse_strlevel(enum mandoclevel);
 429  429  
 430  430  __END_DECLS
 431  431  
 432  432  #endif /*!MANDOC_H*/
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX