1*4d131170SRobert Mustacchi /* $Id: mandoc.h,v 1.274 2021/08/14 13:53:08 schwarze Exp $ */ 295c635efSGarrett D'Amore /* 3*4d131170SRobert Mustacchi * Copyright (c) 2012-2021 Ingo Schwarze <schwarze@openbsd.org> 4260e9a87SYuri Pankov * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> 595c635efSGarrett D'Amore * 695c635efSGarrett D'Amore * Permission to use, copy, modify, and distribute this software for any 795c635efSGarrett D'Amore * purpose with or without fee is hereby granted, provided that the above 895c635efSGarrett D'Amore * copyright notice and this permission notice appear in all copies. 995c635efSGarrett D'Amore * 10371584c2SYuri Pankov * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES 1195c635efSGarrett D'Amore * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12371584c2SYuri Pankov * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR 1395c635efSGarrett D'Amore * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1495c635efSGarrett D'Amore * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1595c635efSGarrett D'Amore * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1695c635efSGarrett D'Amore * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17cec8643bSMichal Nowak * 18cec8643bSMichal Nowak * Error handling, escape sequence, and character utilities. 19*4d131170SRobert Mustacchi * Can be used by all code in the mandoc package. 2095c635efSGarrett D'Amore */ 2195c635efSGarrett D'Amore 2295c635efSGarrett D'Amore #define ASCII_NBRSP 31 /* non-breaking space */ 2395c635efSGarrett D'Amore #define ASCII_HYPH 30 /* breakable hyphen */ 24260e9a87SYuri Pankov #define ASCII_BREAK 29 /* breakable zero-width space */ 2595c635efSGarrett D'Amore 2695c635efSGarrett D'Amore /* 2795c635efSGarrett D'Amore * Status level. This refers to both internal status (i.e., whilst 2895c635efSGarrett D'Amore * running, when warnings/errors are reported) and an indicator of a 2995c635efSGarrett D'Amore * threshold of when to halt (when said internal state exceeds the 3095c635efSGarrett D'Amore * threshold). 3195c635efSGarrett D'Amore */ 3295c635efSGarrett D'Amore enum mandoclevel { 3395c635efSGarrett D'Amore MANDOCLEVEL_OK = 0, 34c66b8046SYuri Pankov MANDOCLEVEL_STYLE, /* style suggestions */ 3595c635efSGarrett D'Amore MANDOCLEVEL_WARNING, /* warnings: syntax, whitespace, etc. */ 3695c635efSGarrett D'Amore MANDOCLEVEL_ERROR, /* input has been thrown away */ 37260e9a87SYuri Pankov MANDOCLEVEL_UNSUPP, /* input needs unimplemented features */ 3895c635efSGarrett D'Amore MANDOCLEVEL_BADARG, /* bad argument in invocation */ 3995c635efSGarrett D'Amore MANDOCLEVEL_SYSERR, /* system error */ 4095c635efSGarrett D'Amore MANDOCLEVEL_MAX 4195c635efSGarrett D'Amore }; 4295c635efSGarrett D'Amore 4395c635efSGarrett D'Amore /* 4495c635efSGarrett D'Amore * All possible things that can go wrong within a parse, be it libroff, 4595c635efSGarrett D'Amore * libmdoc, or libman. 4695c635efSGarrett D'Amore */ 4795c635efSGarrett D'Amore enum mandocerr { 4895c635efSGarrett D'Amore MANDOCERR_OK, 4995c635efSGarrett D'Amore 50c66b8046SYuri Pankov MANDOCERR_BASE, /* ===== start of base system conventions ===== */ 51c66b8046SYuri Pankov 52c66b8046SYuri Pankov MANDOCERR_MDOCDATE, /* Mdocdate found: Dd ... */ 53c66b8046SYuri Pankov MANDOCERR_MDOCDATE_MISSING, /* Mdocdate missing: Dd ... */ 54c66b8046SYuri Pankov MANDOCERR_ARCH_BAD, /* unknown architecture: Dt ... arch */ 55c66b8046SYuri Pankov MANDOCERR_OS_ARG, /* operating system explicitly specified: Os ... */ 56c66b8046SYuri Pankov MANDOCERR_RCS_MISSING, /* RCS id missing */ 57c66b8046SYuri Pankov 58c66b8046SYuri Pankov MANDOCERR_STYLE, /* ===== start of style suggestions ===== */ 59c66b8046SYuri Pankov 60c66b8046SYuri Pankov MANDOCERR_DATE_LEGACY, /* legacy man(7) date format: Dd ... */ 616640c13bSYuri Pankov MANDOCERR_DATE_NORM, /* normalizing date format to: ... */ 62c66b8046SYuri Pankov MANDOCERR_TITLE_CASE, /* lower case character in document title */ 63c66b8046SYuri Pankov MANDOCERR_RCS_REP, /* duplicate RCS id: ... */ 646640c13bSYuri Pankov MANDOCERR_SEC_TYPO, /* possible typo in section name: Sh ... */ 65c66b8046SYuri Pankov MANDOCERR_ARG_QUOTE, /* unterminated quoted argument */ 66c66b8046SYuri Pankov MANDOCERR_MACRO_USELESS, /* useless macro: macro */ 67c66b8046SYuri Pankov MANDOCERR_BX, /* consider using OS macro: macro */ 68c66b8046SYuri Pankov MANDOCERR_ER_ORDER, /* errnos out of order: Er ... */ 69c66b8046SYuri Pankov MANDOCERR_ER_REP, /* duplicate errno: Er ... */ 70*4d131170SRobert Mustacchi MANDOCERR_XR_BAD, /* referenced manual not found: Xr name sec */ 71c66b8046SYuri Pankov MANDOCERR_DELIM, /* trailing delimiter: macro ... */ 72c66b8046SYuri Pankov MANDOCERR_DELIM_NB, /* no blank before trailing delimiter: macro ... */ 73c66b8046SYuri Pankov MANDOCERR_FI_SKIP, /* fill mode already enabled, skipping: fi */ 74c66b8046SYuri Pankov MANDOCERR_NF_SKIP, /* fill mode already disabled, skipping: nf */ 75*4d131170SRobert Mustacchi MANDOCERR_TEXT_LONG, /* input text line longer than 80 bytes */ 766640c13bSYuri Pankov MANDOCERR_DASHDASH, /* verbatim "--", maybe consider using \(em */ 77c66b8046SYuri Pankov MANDOCERR_FUNC, /* function name without markup: name() */ 78c66b8046SYuri Pankov MANDOCERR_SPACE_EOL, /* whitespace at end of input line */ 79c66b8046SYuri Pankov MANDOCERR_COMMENT_BAD, /* bad comment style */ 80c66b8046SYuri Pankov 8195c635efSGarrett D'Amore MANDOCERR_WARNING, /* ===== start of warnings ===== */ 8295c635efSGarrett D'Amore 8395c635efSGarrett D'Amore /* related to the prologue */ 84260e9a87SYuri Pankov MANDOCERR_DT_NOTITLE, /* missing manual title, using UNTITLED: line */ 85260e9a87SYuri Pankov MANDOCERR_TH_NOTITLE, /* missing manual title, using "": [macro] */ 86260e9a87SYuri Pankov MANDOCERR_MSEC_MISSING, /* missing manual section, using "": macro */ 87260e9a87SYuri Pankov MANDOCERR_MSEC_BAD, /* unknown manual section: Dt ... section */ 88*4d131170SRobert Mustacchi MANDOCERR_MSEC_FILE, /* filename/section mismatch: ... */ 89*4d131170SRobert Mustacchi MANDOCERR_DATE_MISSING, /* missing date, using "": [macro] */ 90260e9a87SYuri Pankov MANDOCERR_DATE_BAD, /* cannot parse date, using it verbatim: date */ 91c66b8046SYuri Pankov MANDOCERR_DATE_FUTURE, /* date in the future, using it anyway: date */ 92260e9a87SYuri Pankov MANDOCERR_OS_MISSING, /* missing Os macro, using "" */ 93260e9a87SYuri Pankov MANDOCERR_PROLOG_LATE, /* late prologue macro: macro */ 94260e9a87SYuri Pankov MANDOCERR_PROLOG_ORDER, /* prologue macros out of order: macros */ 9595c635efSGarrett D'Amore 9695c635efSGarrett D'Amore /* related to document structure */ 97260e9a87SYuri Pankov MANDOCERR_SO, /* .so is fragile, better use ln(1): so path */ 98260e9a87SYuri Pankov MANDOCERR_DOC_EMPTY, /* no document body */ 99260e9a87SYuri Pankov MANDOCERR_SEC_BEFORE, /* content before first section header: macro */ 100260e9a87SYuri Pankov MANDOCERR_NAMESEC_FIRST, /* first section is not NAME: Sh title */ 101a5934736SYuri Pankov MANDOCERR_NAMESEC_NONM, /* NAME section without Nm before Nd */ 102260e9a87SYuri Pankov MANDOCERR_NAMESEC_NOND, /* NAME section without description */ 103260e9a87SYuri Pankov MANDOCERR_NAMESEC_ND, /* description not at the end of NAME */ 104260e9a87SYuri Pankov MANDOCERR_NAMESEC_BAD, /* bad NAME section content: macro */ 105a5934736SYuri Pankov MANDOCERR_NAMESEC_PUNCT, /* missing comma before name: Nm name */ 106260e9a87SYuri Pankov MANDOCERR_ND_EMPTY, /* missing description line, using "" */ 107c66b8046SYuri Pankov MANDOCERR_ND_LATE, /* description line outside NAME section */ 108260e9a87SYuri Pankov MANDOCERR_SEC_ORDER, /* sections out of conventional order: Sh title */ 109260e9a87SYuri Pankov MANDOCERR_SEC_REP, /* duplicate section title: Sh title */ 110260e9a87SYuri Pankov MANDOCERR_SEC_MSEC, /* unexpected section: Sh title for ... only */ 111c66b8046SYuri Pankov MANDOCERR_XR_SELF, /* cross reference to self: Xr name sec */ 112260e9a87SYuri Pankov MANDOCERR_XR_ORDER, /* unusual Xr order: ... after ... */ 113260e9a87SYuri Pankov MANDOCERR_XR_PUNCT, /* unusual Xr punctuation: ... after ... */ 114260e9a87SYuri Pankov MANDOCERR_AN_MISSING, /* AUTHORS section without An macro */ 11595c635efSGarrett D'Amore 11695c635efSGarrett D'Amore /* related to macros and nesting */ 117260e9a87SYuri Pankov MANDOCERR_MACRO_OBS, /* obsolete macro: macro */ 118260e9a87SYuri Pankov MANDOCERR_MACRO_CALL, /* macro neither callable nor escaped: macro */ 119260e9a87SYuri Pankov MANDOCERR_PAR_SKIP, /* skipping paragraph macro: macro ... */ 120260e9a87SYuri Pankov MANDOCERR_PAR_MOVE, /* moving paragraph macro out of list: macro */ 121260e9a87SYuri Pankov MANDOCERR_NS_SKIP, /* skipping no-space macro */ 122260e9a87SYuri Pankov MANDOCERR_BLK_NEST, /* blocks badly nested: macro ... */ 123260e9a87SYuri Pankov MANDOCERR_BD_NEST, /* nested displays are not portable: macro ... */ 124260e9a87SYuri Pankov MANDOCERR_BL_MOVE, /* moving content out of list: macro */ 125c66b8046SYuri Pankov MANDOCERR_TA_LINE, /* first macro on line: Ta */ 126260e9a87SYuri Pankov MANDOCERR_BLK_LINE, /* line scope broken: macro breaks macro */ 127c66b8046SYuri Pankov MANDOCERR_BLK_BLANK, /* skipping blank line in line scope */ 12895c635efSGarrett D'Amore 129260e9a87SYuri Pankov /* related to missing arguments */ 130260e9a87SYuri Pankov MANDOCERR_REQ_EMPTY, /* skipping empty request: request */ 131260e9a87SYuri Pankov MANDOCERR_COND_EMPTY, /* conditional request controls empty scope */ 132260e9a87SYuri Pankov MANDOCERR_MACRO_EMPTY, /* skipping empty macro: macro */ 133260e9a87SYuri Pankov MANDOCERR_BLK_EMPTY, /* empty block: macro */ 134260e9a87SYuri Pankov MANDOCERR_ARG_EMPTY, /* empty argument, using 0n: macro arg */ 135260e9a87SYuri Pankov MANDOCERR_BD_NOTYPE, /* missing display type, using -ragged: Bd */ 136260e9a87SYuri Pankov MANDOCERR_BL_LATETYPE, /* list type is not the first argument: Bl arg */ 137a5934736SYuri Pankov MANDOCERR_BL_NOWIDTH, /* missing -width in -tag list, using 6n */ 138260e9a87SYuri Pankov MANDOCERR_EX_NONAME, /* missing utility name, using "": Ex */ 139260e9a87SYuri Pankov MANDOCERR_FO_NOHEAD, /* missing function name, using "": Fo */ 140260e9a87SYuri Pankov MANDOCERR_IT_NOHEAD, /* empty head in list item: Bl -type It */ 141260e9a87SYuri Pankov MANDOCERR_IT_NOBODY, /* empty list item: Bl -type It */ 142c66b8046SYuri Pankov MANDOCERR_IT_NOARG, /* missing argument, using next line: Bl -c It */ 143260e9a87SYuri Pankov MANDOCERR_BF_NOFONT, /* missing font type, using \fR: Bf */ 144260e9a87SYuri Pankov MANDOCERR_BF_BADFONT, /* unknown font type, using \fR: Bf font */ 145260e9a87SYuri Pankov MANDOCERR_PF_SKIP, /* nothing follows prefix: Pf arg */ 146260e9a87SYuri Pankov MANDOCERR_RS_EMPTY, /* empty reference block: Rs */ 147a5934736SYuri Pankov MANDOCERR_XR_NOSEC, /* missing section argument: Xr arg */ 148260e9a87SYuri Pankov MANDOCERR_ARG_STD, /* missing -std argument, adding it: macro */ 149260e9a87SYuri Pankov MANDOCERR_OP_EMPTY, /* missing option string, using "": OP */ 150260e9a87SYuri Pankov MANDOCERR_UR_NOHEAD, /* missing resource identifier, using "": UR */ 151260e9a87SYuri Pankov MANDOCERR_EQN_NOBOX, /* missing eqn box, using "": op */ 15295c635efSGarrett D'Amore 153260e9a87SYuri Pankov /* related to bad arguments */ 154260e9a87SYuri Pankov MANDOCERR_ARG_REP, /* duplicate argument: macro arg */ 155260e9a87SYuri Pankov MANDOCERR_AN_REP, /* skipping duplicate argument: An -arg */ 156260e9a87SYuri Pankov MANDOCERR_BD_REP, /* skipping duplicate display type: Bd -type */ 157260e9a87SYuri Pankov MANDOCERR_BL_REP, /* skipping duplicate list type: Bl -type */ 158260e9a87SYuri Pankov MANDOCERR_BL_SKIPW, /* skipping -width argument: Bl -type */ 159260e9a87SYuri Pankov MANDOCERR_BL_COL, /* wrong number of cells */ 160260e9a87SYuri Pankov MANDOCERR_AT_BAD, /* unknown AT&T UNIX version: At version */ 161260e9a87SYuri Pankov MANDOCERR_FA_COMMA, /* comma in function argument: arg */ 162260e9a87SYuri Pankov MANDOCERR_FN_PAREN, /* parenthesis in function name: arg */ 163c66b8046SYuri Pankov MANDOCERR_LB_BAD, /* unknown library name: Lb ... */ 164260e9a87SYuri Pankov MANDOCERR_RS_BAD, /* invalid content in Rs block: macro */ 165260e9a87SYuri Pankov MANDOCERR_SM_BAD, /* invalid Boolean argument: macro arg */ 166cec8643bSMichal Nowak MANDOCERR_CHAR_FONT, /* argument contains two font escapes */ 167260e9a87SYuri Pankov MANDOCERR_FT_BAD, /* unknown font, skipping request: ft font */ 168260e9a87SYuri Pankov MANDOCERR_TR_ODD, /* odd number of characters in request: tr char */ 16995c635efSGarrett D'Amore 17095c635efSGarrett D'Amore /* related to plain text */ 171260e9a87SYuri Pankov MANDOCERR_FI_BLANK, /* blank line in fill mode, using .sp */ 172260e9a87SYuri Pankov MANDOCERR_FI_TAB, /* tab in filled text */ 173a40ea1a7SYuri Pankov MANDOCERR_EOS, /* new sentence, new line */ 174260e9a87SYuri Pankov MANDOCERR_ESC_BAD, /* invalid escape sequence: esc */ 175cec8643bSMichal Nowak MANDOCERR_ESC_UNDEF, /* undefined escape, printing literally: char */ 176260e9a87SYuri Pankov MANDOCERR_STR_UNDEF, /* undefined string, using "": name */ 17795c635efSGarrett D'Amore 178260e9a87SYuri Pankov /* related to tables */ 179260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_SPAN, /* tbl line starts with span */ 180260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_DOWN, /* tbl column starts with span */ 181260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_VERT, /* skipping vertical bar in tbl layout */ 18295c635efSGarrett D'Amore 18395c635efSGarrett D'Amore MANDOCERR_ERROR, /* ===== start of errors ===== */ 18495c635efSGarrett D'Amore 18595c635efSGarrett D'Amore /* related to tables */ 186260e9a87SYuri Pankov MANDOCERR_TBLOPT_ALPHA, /* non-alphabetic character in tbl options */ 187260e9a87SYuri Pankov MANDOCERR_TBLOPT_BAD, /* skipping unknown tbl option: option */ 188260e9a87SYuri Pankov MANDOCERR_TBLOPT_NOARG, /* missing tbl option argument: option */ 189260e9a87SYuri Pankov MANDOCERR_TBLOPT_ARGSZ, /* wrong tbl option argument size: option */ 190260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_NONE, /* empty tbl layout */ 191260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_CHAR, /* invalid character in tbl layout: char */ 192260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_PAR, /* unmatched parenthesis in tbl layout */ 193*4d131170SRobert Mustacchi MANDOCERR_TBLLAYOUT_SPC, /* ignoring excessive spacing in tbl layout */ 194260e9a87SYuri Pankov MANDOCERR_TBLDATA_NONE, /* tbl without any data cells */ 195260e9a87SYuri Pankov MANDOCERR_TBLDATA_SPAN, /* ignoring data in spanned tbl cell: data */ 196260e9a87SYuri Pankov MANDOCERR_TBLDATA_EXTRA, /* ignoring extra tbl data cells: data */ 197260e9a87SYuri Pankov MANDOCERR_TBLDATA_BLK, /* data block open at end of tbl: macro */ 19895c635efSGarrett D'Amore 199260e9a87SYuri Pankov /* related to document structure and macros */ 200c66b8046SYuri Pankov MANDOCERR_PROLOG_REP, /* duplicate prologue macro: macro */ 201c66b8046SYuri Pankov MANDOCERR_DT_LATE, /* skipping late title macro: Dt args */ 20295c635efSGarrett D'Amore MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */ 203260e9a87SYuri Pankov MANDOCERR_CHAR_BAD, /* skipping bad character: number */ 204260e9a87SYuri Pankov MANDOCERR_MACRO, /* skipping unknown macro: macro */ 205cec8643bSMichal Nowak MANDOCERR_REQ_NOMAC, /* skipping request outside macro: ... */ 206260e9a87SYuri Pankov MANDOCERR_REQ_INSEC, /* skipping insecure request: request */ 207260e9a87SYuri Pankov MANDOCERR_IT_STRAY, /* skipping item outside list: It ... */ 208260e9a87SYuri Pankov MANDOCERR_TA_STRAY, /* skipping column outside column list: Ta */ 209260e9a87SYuri Pankov MANDOCERR_BLK_NOTOPEN, /* skipping end of block that is not open */ 210260e9a87SYuri Pankov MANDOCERR_RE_NOTOPEN, /* fewer RS blocks open, skipping: RE arg */ 211260e9a87SYuri Pankov MANDOCERR_BLK_BROKEN, /* inserting missing end of block: macro ... */ 212260e9a87SYuri Pankov MANDOCERR_BLK_NOEND, /* appending missing end of block: macro */ 21395c635efSGarrett D'Amore 214260e9a87SYuri Pankov /* related to request and macro arguments */ 215260e9a87SYuri Pankov MANDOCERR_NAMESC, /* escaped character not allowed in a name: name */ 216cec8643bSMichal Nowak MANDOCERR_ARG_UNDEF, /* using macro argument outside macro */ 217cec8643bSMichal Nowak MANDOCERR_ARG_NONUM, /* argument number is not numeric */ 218260e9a87SYuri Pankov MANDOCERR_BD_FILE, /* NOT IMPLEMENTED: Bd -file */ 219371584c2SYuri Pankov MANDOCERR_BD_NOARG, /* skipping display without arguments: Bd */ 220260e9a87SYuri Pankov MANDOCERR_BL_NOTYPE, /* missing list type, using -item: Bl */ 221c66b8046SYuri Pankov MANDOCERR_CE_NONUM, /* argument is not numeric, using 1: ce ... */ 222cec8643bSMichal Nowak MANDOCERR_CHAR_ARG, /* argument is not a character: char ... */ 223260e9a87SYuri Pankov MANDOCERR_NM_NONAME, /* missing manual name, using "": Nm */ 224260e9a87SYuri Pankov MANDOCERR_OS_UNAME, /* uname(3) system call failed, using UNKNOWN */ 225260e9a87SYuri Pankov MANDOCERR_ST_BAD, /* unknown standard specifier: St standard */ 226260e9a87SYuri Pankov MANDOCERR_IT_NONUM, /* skipping request without numeric argument */ 227cec8643bSMichal Nowak MANDOCERR_SHIFT, /* excessive shift: ..., but max is ... */ 228260e9a87SYuri Pankov MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */ 229260e9a87SYuri Pankov MANDOCERR_SO_FAIL, /* .so request failed */ 230*4d131170SRobert Mustacchi MANDOCERR_TG_SPC, /* skipping tag containing whitespace: tag */ 231260e9a87SYuri Pankov MANDOCERR_ARG_SKIP, /* skipping all arguments: macro args */ 232260e9a87SYuri Pankov MANDOCERR_ARG_EXCESS, /* skipping excess arguments: macro ... args */ 233260e9a87SYuri Pankov MANDOCERR_DIVZERO, /* divide by zero */ 23495c635efSGarrett D'Amore 235260e9a87SYuri Pankov MANDOCERR_UNSUPP, /* ===== start of unsupported features ===== */ 236260e9a87SYuri Pankov 237260e9a87SYuri Pankov MANDOCERR_TOOLARGE, /* input too large */ 238260e9a87SYuri Pankov MANDOCERR_CHAR_UNSUPP, /* unsupported control character: number */ 239cec8643bSMichal Nowak MANDOCERR_ESC_UNSUPP, /* unsupported escape sequence: escape */ 240260e9a87SYuri Pankov MANDOCERR_REQ_UNSUPP, /* unsupported roff request: request */ 241cec8643bSMichal Nowak MANDOCERR_WHILE_NEST, /* nested .while loops */ 242cec8643bSMichal Nowak MANDOCERR_WHILE_OUTOF, /* end of scope with open .while loop */ 243cec8643bSMichal Nowak MANDOCERR_WHILE_INTO, /* end of .while loop in inner scope */ 244cec8643bSMichal Nowak MANDOCERR_WHILE_FAIL, /* cannot continue this .while loop */ 245260e9a87SYuri Pankov MANDOCERR_TBLOPT_EQN, /* eqn delim option in tbl: arg */ 246260e9a87SYuri Pankov MANDOCERR_TBLLAYOUT_MOD, /* unsupported tbl layout modifier: m */ 247260e9a87SYuri Pankov MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */ 248*4d131170SRobert Mustacchi MANDOCERR_TBL_TMAN, /* skipping tbl in -Tman mode */ 249*4d131170SRobert Mustacchi MANDOCERR_EQN_TMAN, /* skipping eqn in -Tman mode */ 250*4d131170SRobert Mustacchi 251*4d131170SRobert Mustacchi MANDOCERR_BADARG, /* ===== start of bad invocations ===== */ 252*4d131170SRobert Mustacchi 253*4d131170SRobert Mustacchi MANDOCERR_BADARG_BAD, /* bad argument */ 254*4d131170SRobert Mustacchi MANDOCERR_BADARG_DUPE, /* duplicate argument */ 255*4d131170SRobert Mustacchi MANDOCERR_BADVAL, /* does not take a value */ 256*4d131170SRobert Mustacchi MANDOCERR_BADVAL_MISS, /* missing argument value */ 257*4d131170SRobert Mustacchi MANDOCERR_BADVAL_BAD, /* bad argument value */ 258*4d131170SRobert Mustacchi MANDOCERR_BADVAL_DUPE, /* duplicate argument value */ 259*4d131170SRobert Mustacchi MANDOCERR_TAG, /* no such tag */ 260*4d131170SRobert Mustacchi MANDOCERR_MAN_TMARKDOWN, /* -Tmarkdown unsupported for man(7) input */ 261*4d131170SRobert Mustacchi 262*4d131170SRobert Mustacchi MANDOCERR_SYSERR, /* ===== start of system errors ===== */ 263*4d131170SRobert Mustacchi 264*4d131170SRobert Mustacchi MANDOCERR_DUP, 265*4d131170SRobert Mustacchi MANDOCERR_EXEC, 266*4d131170SRobert Mustacchi MANDOCERR_FDOPEN, 267*4d131170SRobert Mustacchi MANDOCERR_FFLUSH, 268*4d131170SRobert Mustacchi MANDOCERR_FORK, 269*4d131170SRobert Mustacchi MANDOCERR_FSTAT, 270*4d131170SRobert Mustacchi MANDOCERR_GETLINE, 271*4d131170SRobert Mustacchi MANDOCERR_GLOB, 272*4d131170SRobert Mustacchi MANDOCERR_GZCLOSE, 273*4d131170SRobert Mustacchi MANDOCERR_GZDOPEN, 274*4d131170SRobert Mustacchi MANDOCERR_MKSTEMP, 275*4d131170SRobert Mustacchi MANDOCERR_OPEN, 276*4d131170SRobert Mustacchi MANDOCERR_PLEDGE, 277*4d131170SRobert Mustacchi MANDOCERR_READ, 278*4d131170SRobert Mustacchi MANDOCERR_WAIT, 279*4d131170SRobert Mustacchi MANDOCERR_WRITE, 280260e9a87SYuri Pankov 28195c635efSGarrett D'Amore MANDOCERR_MAX 28295c635efSGarrett D'Amore }; 28395c635efSGarrett D'Amore 28495c635efSGarrett D'Amore enum mandoc_esc { 28595c635efSGarrett D'Amore ESCAPE_ERROR = 0, /* bail! unparsable escape */ 286cec8643bSMichal Nowak ESCAPE_UNSUPP, /* unsupported escape; ignore it */ 28795c635efSGarrett D'Amore ESCAPE_IGNORE, /* escape to be ignored */ 288cec8643bSMichal Nowak ESCAPE_UNDEF, /* undefined escape; print literal character */ 28995c635efSGarrett D'Amore ESCAPE_SPECIAL, /* a regular special character */ 29095c635efSGarrett D'Amore ESCAPE_FONT, /* a generic font mode */ 29195c635efSGarrett D'Amore ESCAPE_FONTBOLD, /* bold font mode */ 29295c635efSGarrett D'Amore ESCAPE_FONTITALIC, /* italic font mode */ 293698f87a4SGarrett D'Amore ESCAPE_FONTBI, /* bold italic font mode */ 29495c635efSGarrett D'Amore ESCAPE_FONTROMAN, /* roman font mode */ 295*4d131170SRobert Mustacchi ESCAPE_FONTCR, /* constant width font mode */ 296*4d131170SRobert Mustacchi ESCAPE_FONTCB, /* constant width bold font mode */ 297*4d131170SRobert Mustacchi ESCAPE_FONTCI, /* constant width italic font mode */ 29895c635efSGarrett D'Amore ESCAPE_FONTPREV, /* previous font mode */ 29995c635efSGarrett D'Amore ESCAPE_NUMBERED, /* a numbered glyph */ 30095c635efSGarrett D'Amore ESCAPE_UNICODE, /* a unicode codepoint */ 301cec8643bSMichal Nowak ESCAPE_DEVICE, /* print the output device name */ 302c66b8046SYuri Pankov ESCAPE_BREAK, /* break the output line */ 303698f87a4SGarrett D'Amore ESCAPE_NOSPACE, /* suppress space if the last on a line */ 304c66b8046SYuri Pankov ESCAPE_HORIZ, /* horizontal movement */ 305c66b8046SYuri Pankov ESCAPE_HLINE, /* horizontal line drawing */ 306260e9a87SYuri Pankov ESCAPE_SKIPCHAR, /* skip the next character */ 307260e9a87SYuri Pankov ESCAPE_OVERSTRIKE /* overstrike all chars in the argument */ 30895c635efSGarrett D'Amore }; 30995c635efSGarrett D'Amore 31095c635efSGarrett D'Amore 311*4d131170SRobert Mustacchi enum mandoc_esc mandoc_font(const char *, int); 31295c635efSGarrett D'Amore enum mandoc_esc mandoc_escape(const char **, const char **, int *); 313cec8643bSMichal Nowak void mandoc_msg_setoutfile(FILE *); 314cec8643bSMichal Nowak const char *mandoc_msg_getinfilename(void); 315cec8643bSMichal Nowak void mandoc_msg_setinfilename(const char *); 316cec8643bSMichal Nowak enum mandocerr mandoc_msg_getmin(void); 317cec8643bSMichal Nowak void mandoc_msg_setmin(enum mandocerr); 318cec8643bSMichal Nowak enum mandoclevel mandoc_msg_getrc(void); 319cec8643bSMichal Nowak void mandoc_msg_setrc(enum mandoclevel); 320cec8643bSMichal Nowak void mandoc_msg(enum mandocerr, int, int, const char *, ...) 321cec8643bSMichal Nowak __attribute__((__format__ (__printf__, 4, 5))); 322*4d131170SRobert Mustacchi void mandoc_msg_summary(void); 323371584c2SYuri Pankov void mchars_alloc(void); 324371584c2SYuri Pankov void mchars_free(void); 325260e9a87SYuri Pankov int mchars_num2char(const char *, size_t); 326260e9a87SYuri Pankov const char *mchars_uc2str(int); 32795c635efSGarrett D'Amore int mchars_num2uc(const char *, size_t); 328371584c2SYuri Pankov int mchars_spec2cp(const char *, size_t); 329371584c2SYuri Pankov const char *mchars_spec2str(const char *, size_t, size_t *); 330