1*60395358Sschwarze /* $OpenBSD: mandoc.h,v 1.225 2025/01/05 18:03:51 schwarze Exp $ */ 262ddcdf8Sschwarze /* 3*60395358Sschwarze * Copyright (c) 2012-2022, 2025 Ingo Schwarze <schwarze@openbsd.org> 46a6803e4Sschwarze * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> 562ddcdf8Sschwarze * 662ddcdf8Sschwarze * Permission to use, copy, modify, and distribute this software for any 762ddcdf8Sschwarze * purpose with or without fee is hereby granted, provided that the above 862ddcdf8Sschwarze * copyright notice and this permission notice appear in all copies. 962ddcdf8Sschwarze * 10ede1b9d0Sschwarze * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES 1162ddcdf8Sschwarze * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12ede1b9d0Sschwarze * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR 1362ddcdf8Sschwarze * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1462ddcdf8Sschwarze * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1562ddcdf8Sschwarze * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1662ddcdf8Sschwarze * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1799acaf1eSschwarze * 1899acaf1eSschwarze * Error handling, escape sequence, and character utilities. 196a6803e4Sschwarze * Can be used by all code in the mandoc package. 2062ddcdf8Sschwarze */ 2162ddcdf8Sschwarze 221068637fSschwarze #define ASCII_NBRSP 31 /* non-breaking space */ 23e0e72893Sschwarze #define ASCII_NBRZW 30 /* non-breaking zero-width space */ 241281a50cSschwarze #define ASCII_BREAK 29 /* breakable zero-width space */ 25e0e72893Sschwarze #define ASCII_HYPH 28 /* breakable hyphen */ 261c23c756Sschwarze #define ASCII_TABREF 26 /* reset tab reference position */ 271068637fSschwarze 285a0a1f76Sschwarze /* 295a0a1f76Sschwarze * Status level. This refers to both internal status (i.e., whilst 305a0a1f76Sschwarze * running, when warnings/errors are reported) and an indicator of a 315a0a1f76Sschwarze * threshold of when to halt (when said internal state exceeds the 325a0a1f76Sschwarze * threshold). 335a0a1f76Sschwarze */ 34cfd2bfaaSschwarze enum mandoclevel { 35cfd2bfaaSschwarze MANDOCLEVEL_OK = 0, 360077f574Sschwarze MANDOCLEVEL_STYLE, /* style suggestions */ 375a0a1f76Sschwarze MANDOCLEVEL_WARNING, /* warnings: syntax, whitespace, etc. */ 385a0a1f76Sschwarze MANDOCLEVEL_ERROR, /* input has been thrown away */ 39d04ca39fSschwarze MANDOCLEVEL_UNSUPP, /* input needs unimplemented features */ 405a0a1f76Sschwarze MANDOCLEVEL_BADARG, /* bad argument in invocation */ 415a0a1f76Sschwarze MANDOCLEVEL_SYSERR, /* system error */ 42cfd2bfaaSschwarze MANDOCLEVEL_MAX 43cfd2bfaaSschwarze }; 44cfd2bfaaSschwarze 455a0a1f76Sschwarze /* 465a0a1f76Sschwarze * All possible things that can go wrong within a parse, be it libroff, 475a0a1f76Sschwarze * libmdoc, or libman. 485a0a1f76Sschwarze */ 4962ddcdf8Sschwarze enum mandocerr { 5062ddcdf8Sschwarze MANDOCERR_OK, 5186622be3Sschwarze 52f3476b07Sschwarze MANDOCERR_BASE, /* ===== start of base system conventions ===== */ 530077f574Sschwarze 543427e516Sschwarze MANDOCERR_MDOCDATE, /* Mdocdate found: Dd ... */ 553427e516Sschwarze MANDOCERR_MDOCDATE_MISSING, /* Mdocdate missing: Dd ... */ 568fd2959dSschwarze MANDOCERR_ARCH_BAD, /* unknown architecture: Dt ... arch */ 572f84042eSschwarze MANDOCERR_OS_ARG, /* operating system explicitly specified: Os ... */ 58172864f7Sschwarze MANDOCERR_RCS_MISSING, /* RCS id missing */ 59f3476b07Sschwarze 60f3476b07Sschwarze MANDOCERR_STYLE, /* ===== start of style suggestions ===== */ 61f3476b07Sschwarze 62f3476b07Sschwarze MANDOCERR_DATE_LEGACY, /* legacy man(7) date format: Dd ... */ 637674a436Sschwarze MANDOCERR_DATE_NORM, /* normalizing date format to: ... */ 64aa4e49ccSschwarze MANDOCERR_TITLE_CASE, /* lower case character in document title */ 6556c2713eSschwarze MANDOCERR_RCS_REP, /* duplicate RCS id: ... */ 6680732e73Sjca MANDOCERR_SEC_TYPO, /* possible typo in section name: Sh ... */ 67aa4e49ccSschwarze MANDOCERR_ARG_QUOTE, /* unterminated quoted argument */ 68bc205043Sschwarze MANDOCERR_MACRO_USELESS, /* useless macro: macro */ 69f0c18971Sschwarze MANDOCERR_BX, /* consider using OS macro: macro */ 70ce0ef847Sschwarze MANDOCERR_ER_ORDER, /* errnos out of order: Er ... */ 71ce0ef847Sschwarze MANDOCERR_ER_REP, /* duplicate errno: Er ... */ 7228ca454fSschwarze MANDOCERR_XR_BAD, /* referenced manual not found: Xr name sec */ 73fe8e59edSschwarze MANDOCERR_DELIM, /* trailing delimiter: macro ... */ 74fe8e59edSschwarze MANDOCERR_DELIM_NB, /* no blank before trailing delimiter: macro ... */ 75aa4e49ccSschwarze MANDOCERR_FI_SKIP, /* fill mode already enabled, skipping: fi */ 76aa4e49ccSschwarze MANDOCERR_NF_SKIP, /* fill mode already disabled, skipping: nf */ 77dd9cc97dSschwarze MANDOCERR_TEXT_LONG, /* input text line longer than 80 bytes */ 786dc98fe5Sschwarze MANDOCERR_DASHDASH, /* verbatim "--", maybe consider using \(em */ 7948497dd5Sschwarze MANDOCERR_FUNC, /* function name without markup: name() */ 80aa4e49ccSschwarze MANDOCERR_SPACE_EOL, /* whitespace at end of input line */ 81aa4e49ccSschwarze MANDOCERR_COMMENT_BAD, /* bad comment style */ 82bc205043Sschwarze 835a0a1f76Sschwarze MANDOCERR_WARNING, /* ===== start of warnings ===== */ 84817ac90bSschwarze 85817ac90bSschwarze /* related to the prologue */ 863fdead0cSschwarze MANDOCERR_DT_NOTITLE, /* missing manual title, using UNTITLED: line */ 873fdead0cSschwarze MANDOCERR_TH_NOTITLE, /* missing manual title, using "": [macro] */ 883fdead0cSschwarze MANDOCERR_MSEC_MISSING, /* missing manual section, using "": macro */ 89bd594191Sschwarze MANDOCERR_MSEC_BAD, /* unknown manual section: Dt ... section */ 90ee646987Sschwarze MANDOCERR_MSEC_FILE, /* filename/section mismatch: ... */ 91ea5923abSschwarze MANDOCERR_DATE_MISSING, /* missing date, using "": [macro] */ 9251fcab2fSschwarze MANDOCERR_DATE_BAD, /* cannot parse date, using it verbatim: date */ 93e41d5b43Sschwarze MANDOCERR_DATE_FUTURE, /* date in the future, using it anyway: date */ 943fdead0cSschwarze MANDOCERR_OS_MISSING, /* missing Os macro, using "" */ 953fdead0cSschwarze MANDOCERR_PROLOG_LATE, /* late prologue macro: macro */ 963fdead0cSschwarze MANDOCERR_PROLOG_ORDER, /* prologue macros out of order: macros */ 97817ac90bSschwarze 98817ac90bSschwarze /* related to document structure */ 99bd594191Sschwarze MANDOCERR_SO, /* .so is fragile, better use ln(1): so path */ 10043edbcc8Sschwarze MANDOCERR_DOC_EMPTY, /* no document body */ 10151fcab2fSschwarze MANDOCERR_SEC_BEFORE, /* content before first section header: macro */ 102bd594191Sschwarze MANDOCERR_NAMESEC_FIRST, /* first section is not NAME: Sh title */ 103f27faaccSschwarze MANDOCERR_NAMESEC_NONM, /* NAME section without Nm before Nd */ 10420e2cf25Sschwarze MANDOCERR_NAMESEC_NOND, /* NAME section without description */ 10520e2cf25Sschwarze MANDOCERR_NAMESEC_ND, /* description not at the end of NAME */ 10620e2cf25Sschwarze MANDOCERR_NAMESEC_BAD, /* bad NAME section content: macro */ 107f27faaccSschwarze MANDOCERR_NAMESEC_PUNCT, /* missing comma before name: Nm name */ 1081570daf1Sschwarze MANDOCERR_ND_EMPTY, /* missing description line, using "" */ 10956e9e976Sschwarze MANDOCERR_ND_LATE, /* description line outside NAME section */ 110bd594191Sschwarze MANDOCERR_SEC_ORDER, /* sections out of conventional order: Sh title */ 111bd594191Sschwarze MANDOCERR_SEC_REP, /* duplicate section title: Sh title */ 112bd594191Sschwarze MANDOCERR_SEC_MSEC, /* unexpected section: Sh title for ... only */ 11352d11c96Sschwarze MANDOCERR_XR_SELF, /* cross reference to self: Xr name sec */ 1147c384856Sschwarze MANDOCERR_XR_ORDER, /* unusual Xr order: ... after ... */ 1157c384856Sschwarze MANDOCERR_XR_PUNCT, /* unusual Xr punctuation: ... after ... */ 116cd6c268fSschwarze MANDOCERR_AN_MISSING, /* AUTHORS section without An macro */ 117817ac90bSschwarze 118817ac90bSschwarze /* related to macros and nesting */ 119551cd4a8Sschwarze MANDOCERR_MACRO_OBS, /* obsolete macro: macro */ 1206aee6e64Sschwarze MANDOCERR_MACRO_CALL, /* macro neither callable nor escaped: macro */ 12120369664Sschwarze MANDOCERR_PAR_SKIP, /* skipping paragraph macro: macro ... */ 12220369664Sschwarze MANDOCERR_PAR_MOVE, /* moving paragraph macro out of list: macro */ 123b723eac2Sschwarze MANDOCERR_NS_SKIP, /* skipping no-space macro */ 1245e5ff21eSschwarze MANDOCERR_BLK_NEST, /* blocks badly nested: macro ... */ 125b723eac2Sschwarze MANDOCERR_BD_NEST, /* nested displays are not portable: macro ... */ 126dd25b57cSschwarze MANDOCERR_BL_MOVE, /* moving content out of list: macro */ 12780f58981Sschwarze MANDOCERR_TA_LINE, /* first macro on line: Ta */ 1285e5ff21eSschwarze MANDOCERR_BLK_LINE, /* line scope broken: macro breaks macro */ 1295d8f5ae1Sschwarze MANDOCERR_BLK_BLANK, /* skipping blank line in line scope */ 130817ac90bSschwarze 131c451531bSschwarze /* related to missing arguments */ 132c451531bSschwarze MANDOCERR_REQ_EMPTY, /* skipping empty request: request */ 133c451531bSschwarze MANDOCERR_COND_EMPTY, /* conditional request controls empty scope */ 134307e5a07Sschwarze MANDOCERR_MACRO_EMPTY, /* skipping empty macro: macro */ 1351d0823adSschwarze MANDOCERR_BLK_EMPTY, /* empty block: macro */ 1364a9f685fSschwarze MANDOCERR_ARG_EMPTY, /* empty argument, using 0n: macro arg */ 137bd594191Sschwarze MANDOCERR_BD_NOTYPE, /* missing display type, using -ragged: Bd */ 138bd594191Sschwarze MANDOCERR_BL_LATETYPE, /* list type is not the first argument: Bl arg */ 1390ed87641Sschwarze MANDOCERR_BL_NOWIDTH, /* missing -width in -tag list, using 6n */ 140bd594191Sschwarze MANDOCERR_EX_NONAME, /* missing utility name, using "": Ex */ 141afcd1f03Sschwarze MANDOCERR_FO_NOHEAD, /* missing function name, using "": Fo */ 142bd594191Sschwarze MANDOCERR_IT_NOHEAD, /* empty head in list item: Bl -type It */ 143bd594191Sschwarze MANDOCERR_IT_NOBODY, /* empty list item: Bl -type It */ 14480f58981Sschwarze MANDOCERR_IT_NOARG, /* missing argument, using next line: Bl -c It */ 145bd594191Sschwarze MANDOCERR_BF_NOFONT, /* missing font type, using \fR: Bf */ 146bd594191Sschwarze MANDOCERR_BF_BADFONT, /* unknown font type, using \fR: Bf font */ 14788fc1858Sschwarze MANDOCERR_PF_SKIP, /* nothing follows prefix: Pf arg */ 1486e96429aSschwarze MANDOCERR_RS_EMPTY, /* empty reference block: Rs */ 1495ae08040Sschwarze MANDOCERR_XR_NOSEC, /* missing section argument: Xr arg */ 15066788495Sschwarze MANDOCERR_ARG_STD, /* missing -std argument, adding it: macro */ 15139839348Sschwarze MANDOCERR_OP_EMPTY, /* missing option string, using "": OP */ 15239839348Sschwarze MANDOCERR_UR_NOHEAD, /* missing resource identifier, using "": UR */ 153a4dfe1bcSschwarze MANDOCERR_EQN_NOBOX, /* missing eqn box, using "": op */ 154817ac90bSschwarze 155dd5b31c3Sschwarze /* related to bad arguments */ 1564a9f685fSschwarze MANDOCERR_ARG_REP, /* duplicate argument: macro arg */ 157aa99c14fSschwarze MANDOCERR_AN_REP, /* skipping duplicate argument: An -arg */ 158bd594191Sschwarze MANDOCERR_BD_REP, /* skipping duplicate display type: Bd -type */ 159bd594191Sschwarze MANDOCERR_BL_REP, /* skipping duplicate list type: Bl -type */ 160aa99c14fSschwarze MANDOCERR_BL_SKIPW, /* skipping -width argument: Bl -type */ 161bce599dfSschwarze MANDOCERR_BL_COL, /* wrong number of cells */ 162bd594191Sschwarze MANDOCERR_AT_BAD, /* unknown AT&T UNIX version: At version */ 1637e92c062Sschwarze MANDOCERR_FA_COMMA, /* comma in function argument: arg */ 1640c5064e3Sschwarze MANDOCERR_FN_PAREN, /* parenthesis in function name: arg */ 165608c4838Sschwarze MANDOCERR_LB_BAD, /* unknown library name: Lb ... */ 166b538baa5Sschwarze MANDOCERR_RS_BAD, /* invalid content in Rs block: macro */ 167dc0d8bb2Sschwarze MANDOCERR_SM_BAD, /* invalid Boolean argument: macro arg */ 16829fcab3eSschwarze MANDOCERR_CHAR_FONT, /* argument contains two font escapes */ 169bd594191Sschwarze MANDOCERR_FT_BAD, /* unknown font, skipping request: ft font */ 170edb0312fSschwarze MANDOCERR_MC_DIST, /* ignoring distance argument: mc ... arg */ 171bce599dfSschwarze MANDOCERR_TR_ODD, /* odd number of characters in request: tr char */ 172817ac90bSschwarze 173817ac90bSschwarze /* related to plain text */ 174dd5b31c3Sschwarze MANDOCERR_FI_BLANK, /* blank line in fill mode, using .sp */ 175dd5b31c3Sschwarze MANDOCERR_FI_TAB, /* tab in filled text */ 176df457681Sschwarze MANDOCERR_EOS, /* new sentence, new line */ 17739be06a3Sschwarze MANDOCERR_ESC_ARG, /* invalid escape sequence argument: esc */ 1786f6722cbSschwarze MANDOCERR_ESC_UNDEF, /* undefined escape, printing literally: char */ 179dd5b31c3Sschwarze MANDOCERR_STR_UNDEF, /* undefined string, using "": name */ 18086622be3Sschwarze 181bba1fa43Sschwarze /* related to tables */ 182bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_SPAN, /* tbl line starts with span */ 183bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_DOWN, /* tbl column starts with span */ 184bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_VERT, /* skipping vertical bar in tbl layout */ 185bba1fa43Sschwarze 1865a0a1f76Sschwarze MANDOCERR_ERROR, /* ===== start of errors ===== */ 187b58a7f4fSschwarze 1882791bd1cSschwarze /* related to tables */ 189bdf8ed0fSschwarze MANDOCERR_TBLOPT_ALPHA, /* non-alphabetic character in tbl options */ 190bdf8ed0fSschwarze MANDOCERR_TBLOPT_BAD, /* skipping unknown tbl option: option */ 19192ff8da6Sschwarze MANDOCERR_TBLOPT_NOARG, /* missing tbl option argument: option */ 19292ff8da6Sschwarze MANDOCERR_TBLOPT_ARGSZ, /* wrong tbl option argument size: option */ 193bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_NONE, /* empty tbl layout */ 194bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_CHAR, /* invalid character in tbl layout: char */ 195bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_PAR, /* unmatched parenthesis in tbl layout */ 196*60395358Sschwarze MANDOCERR_TBLLAYOUT_WIDTH, /* invalid column width in tbl layout */ 197c107dca7Sschwarze MANDOCERR_TBLLAYOUT_SPC, /* ignoring excessive spacing in tbl layout */ 19892ff8da6Sschwarze MANDOCERR_TBLDATA_NONE, /* tbl without any data cells */ 19992ff8da6Sschwarze MANDOCERR_TBLDATA_SPAN, /* ignoring data in spanned tbl cell: data */ 20092ff8da6Sschwarze MANDOCERR_TBLDATA_EXTRA, /* ignoring extra tbl data cells: data */ 20192ff8da6Sschwarze MANDOCERR_TBLDATA_BLK, /* data block open at end of tbl: macro */ 2022791bd1cSschwarze 2035e5ff21eSschwarze /* related to document structure and macros */ 204aa4e49ccSschwarze MANDOCERR_PROLOG_REP, /* duplicate prologue macro: macro */ 205aa4e49ccSschwarze MANDOCERR_DT_LATE, /* skipping late title macro: Dt args */ 2062bdc0267Sschwarze MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */ 20761ee90daSschwarze MANDOCERR_CHAR_BAD, /* skipping bad character: number */ 208bd594191Sschwarze MANDOCERR_MACRO, /* skipping unknown macro: macro */ 2093dc5225dSschwarze MANDOCERR_REQ_NOMAC, /* skipping request outside macro: ... */ 210d04ca39fSschwarze MANDOCERR_REQ_INSEC, /* skipping insecure request: request */ 211bd594191Sschwarze MANDOCERR_IT_STRAY, /* skipping item outside list: It ... */ 212bd594191Sschwarze MANDOCERR_TA_STRAY, /* skipping column outside column list: Ta */ 2135e5ff21eSschwarze MANDOCERR_BLK_NOTOPEN, /* skipping end of block that is not open */ 21404d44d89Sschwarze MANDOCERR_RE_NOTOPEN, /* fewer RS blocks open, skipping: RE arg */ 2155e5ff21eSschwarze MANDOCERR_BLK_BROKEN, /* inserting missing end of block: macro ... */ 2165e5ff21eSschwarze MANDOCERR_BLK_NOEND, /* appending missing end of block: macro */ 2175e5ff21eSschwarze 2185e5ff21eSschwarze /* related to request and macro arguments */ 219bd594191Sschwarze MANDOCERR_NAMESC, /* escaped character not allowed in a name: name */ 2203dc5225dSschwarze MANDOCERR_ARG_UNDEF, /* using macro argument outside macro */ 2213dc5225dSschwarze MANDOCERR_ARG_NONUM, /* argument number is not numeric */ 222c1a68d52Sschwarze MANDOCERR_ARG_NEG, /* negative argument, using 0: request arg */ 2231164a325Sschwarze MANDOCERR_BD_FILE, /* NOT IMPLEMENTED: Bd -file */ 224a43e24e2Sschwarze MANDOCERR_BD_NOARG, /* skipping display without arguments: Bd */ 225bd594191Sschwarze MANDOCERR_BL_NOTYPE, /* missing list type, using -item: Bl */ 226e13b4195Sschwarze MANDOCERR_CE_NONUM, /* argument is not numeric, using 1: ce ... */ 22729fcab3eSschwarze MANDOCERR_CHAR_ARG, /* argument is not a character: char ... */ 228edb0312fSschwarze MANDOCERR_MC_ESC, /* skipping unusable escape sequence: mc arg */ 229bd594191Sschwarze MANDOCERR_NM_NONAME, /* missing manual name, using "": Nm */ 230f79e7afeSschwarze MANDOCERR_OS_UNAME, /* uname(3) system call failed, using UNKNOWN */ 231bd594191Sschwarze MANDOCERR_ST_BAD, /* unknown standard specifier: St standard */ 232f79e7afeSschwarze MANDOCERR_IT_NONUM, /* skipping request without numeric argument */ 2333dc5225dSschwarze MANDOCERR_SHIFT, /* excessive shift: ..., but max is ... */ 234f8fd269eSschwarze MANDOCERR_SO_PATH, /* NOT IMPLEMENTED: .so with absolute path or ".." */ 235f7d9ce8dSschwarze MANDOCERR_SO_FAIL, /* .so request failed */ 23692929bf6Sschwarze MANDOCERR_TG_SPC, /* skipping tag containing whitespace: tag */ 237ecb10c32Sschwarze MANDOCERR_ARG_SKIP, /* skipping all arguments: macro args */ 238ecb10c32Sschwarze MANDOCERR_ARG_EXCESS, /* skipping excess arguments: macro ... args */ 23996f45df3Sschwarze MANDOCERR_DIVZERO, /* divide by zero */ 24086622be3Sschwarze 241f8e3b479Sschwarze /* related to escape sequences */ 242f8e3b479Sschwarze MANDOCERR_ESC_INCOMPLETE, /* incomplete escape sequence: esc */ 243f8e3b479Sschwarze MANDOCERR_ESC_BADCHAR, /* invalid special character: esc */ 244f8e3b479Sschwarze MANDOCERR_ESC_UNKCHAR, /* unknown special character: esc */ 24539be06a3Sschwarze MANDOCERR_ESC_DELIM, /* invalid escape argument delimiter: esc */ 246f8e3b479Sschwarze 247d04ca39fSschwarze MANDOCERR_UNSUPP, /* ===== start of unsupported features ===== */ 248d04ca39fSschwarze 249d04ca39fSschwarze MANDOCERR_TOOLARGE, /* input too large */ 25061ee90daSschwarze MANDOCERR_CHAR_UNSUPP, /* unsupported control character: number */ 2516f6722cbSschwarze MANDOCERR_ESC_UNSUPP, /* unsupported escape sequence: escape */ 252d04ca39fSschwarze MANDOCERR_REQ_UNSUPP, /* unsupported roff request: request */ 253b7f92c5fSschwarze MANDOCERR_WHILE_NEST, /* nested .while loops */ 254b7f92c5fSschwarze MANDOCERR_WHILE_OUTOF, /* end of scope with open .while loop */ 255b7f92c5fSschwarze MANDOCERR_WHILE_INTO, /* end of .while loop in inner scope */ 256b7f92c5fSschwarze MANDOCERR_WHILE_FAIL, /* cannot continue this .while loop */ 25792ff8da6Sschwarze MANDOCERR_TBLOPT_EQN, /* eqn delim option in tbl: arg */ 258bba1fa43Sschwarze MANDOCERR_TBLLAYOUT_MOD, /* unsupported tbl layout modifier: m */ 259d04ca39fSschwarze MANDOCERR_TBLMACRO, /* ignoring macro in table: macro */ 260c96b4f2bSschwarze MANDOCERR_TBL_TMAN, /* skipping tbl in -Tman mode */ 261c96b4f2bSschwarze MANDOCERR_EQN_TMAN, /* skipping eqn in -Tman mode */ 262d04ca39fSschwarze 263ecd1ed85Sschwarze MANDOCERR_BADARG, /* ===== start of bad invocations ===== */ 264ecd1ed85Sschwarze 265ecd1ed85Sschwarze MANDOCERR_BADARG_BAD, /* bad argument */ 266ecd1ed85Sschwarze MANDOCERR_BADARG_DUPE, /* duplicate argument */ 267ecd1ed85Sschwarze MANDOCERR_BADVAL, /* does not take a value */ 268ecd1ed85Sschwarze MANDOCERR_BADVAL_MISS, /* missing argument value */ 269ecd1ed85Sschwarze MANDOCERR_BADVAL_BAD, /* bad argument value */ 270ecd1ed85Sschwarze MANDOCERR_BADVAL_DUPE, /* duplicate argument value */ 271ecd1ed85Sschwarze MANDOCERR_TAG, /* no such tag */ 272a28ef4e8Sschwarze MANDOCERR_MAN_TMARKDOWN, /* -Tmarkdown unsupported for man(7) input */ 273ecd1ed85Sschwarze 274ecd1ed85Sschwarze MANDOCERR_SYSERR, /* ===== start of system errors ===== */ 275ecd1ed85Sschwarze 276ecd1ed85Sschwarze MANDOCERR_DUP, 277ecd1ed85Sschwarze MANDOCERR_EXEC, 278ecd1ed85Sschwarze MANDOCERR_FDOPEN, 279ecd1ed85Sschwarze MANDOCERR_FFLUSH, 280ecd1ed85Sschwarze MANDOCERR_FORK, 281ecd1ed85Sschwarze MANDOCERR_FSTAT, 282ecd1ed85Sschwarze MANDOCERR_GETLINE, 283ecd1ed85Sschwarze MANDOCERR_GLOB, 284ecd1ed85Sschwarze MANDOCERR_GZCLOSE, 285ecd1ed85Sschwarze MANDOCERR_GZDOPEN, 286ecd1ed85Sschwarze MANDOCERR_MKSTEMP, 287ecd1ed85Sschwarze MANDOCERR_OPEN, 288ecd1ed85Sschwarze MANDOCERR_PLEDGE, 289ecd1ed85Sschwarze MANDOCERR_READ, 290ecd1ed85Sschwarze MANDOCERR_WAIT, 291ecd1ed85Sschwarze MANDOCERR_WRITE, 292ecd1ed85Sschwarze 29362ddcdf8Sschwarze MANDOCERR_MAX 29462ddcdf8Sschwarze }; 29562ddcdf8Sschwarze 296a5e11edeSschwarze enum mandoc_esc { 297cd14d642Sschwarze ESCAPE_EXPAND = 0, /* interpolation and iterative call needed */ 298cd14d642Sschwarze ESCAPE_ERROR, /* non-fatal error: unparsable escape */ 299cd14d642Sschwarze ESCAPE_UNSUPP, /* unsupported escape: warn and ignore */ 300cd14d642Sschwarze ESCAPE_IGNORE, /* valid escape to be ignored */ 301cd14d642Sschwarze ESCAPE_UNDEF, /* undefined escape: print literal character */ 302cd14d642Sschwarze ESCAPE_SPECIAL, /* special character escape */ 303a5e11edeSschwarze ESCAPE_FONT, /* a generic font mode */ 304a5e11edeSschwarze ESCAPE_FONTBOLD, /* bold font mode */ 305a5e11edeSschwarze ESCAPE_FONTITALIC, /* italic font mode */ 30668941ea9Sschwarze ESCAPE_FONTBI, /* bold italic font mode */ 307a5e11edeSschwarze ESCAPE_FONTROMAN, /* roman font mode */ 3087d063611Sschwarze ESCAPE_FONTCR, /* constant width font mode */ 3097d063611Sschwarze ESCAPE_FONTCB, /* constant width bold font mode */ 3107d063611Sschwarze ESCAPE_FONTCI, /* constant width italic font mode */ 311a5e11edeSschwarze ESCAPE_FONTPREV, /* previous font mode */ 312a5e11edeSschwarze ESCAPE_NUMBERED, /* a numbered glyph */ 313a5e11edeSschwarze ESCAPE_UNICODE, /* a unicode codepoint */ 3148138dde8Sschwarze ESCAPE_DEVICE, /* print the output device name */ 3156167ec38Sschwarze ESCAPE_BREAK, /* break the output line */ 3167eac745dSschwarze ESCAPE_NOSPACE, /* suppress space if the last on a line */ 3178e935ceaSschwarze ESCAPE_HORIZ, /* horizontal movement */ 318bef920b0Sschwarze ESCAPE_HLINE, /* horizontal line drawing */ 31964f4916cSschwarze ESCAPE_SKIPCHAR, /* skip the next character */ 32064f4916cSschwarze ESCAPE_OVERSTRIKE /* overstrike all chars in the argument */ 321a5e11edeSschwarze }; 322a5e11edeSschwarze 323dd617d76Sschwarze 3246a6803e4Sschwarze enum mandoc_esc mandoc_font(const char *, int); 325b723c868Sschwarze enum mandoc_esc mandoc_escape(const char **, const char **, int *); 326e501e731Sschwarze void mandoc_msg_setoutfile(FILE *); 327e501e731Sschwarze const char *mandoc_msg_getinfilename(void); 328e501e731Sschwarze void mandoc_msg_setinfilename(const char *); 329e501e731Sschwarze enum mandocerr mandoc_msg_getmin(void); 330e501e731Sschwarze void mandoc_msg_setmin(enum mandocerr); 331e501e731Sschwarze enum mandoclevel mandoc_msg_getrc(void); 332e501e731Sschwarze void mandoc_msg_setrc(enum mandoclevel); 333a5a5f808Sschwarze void mandoc_msg(enum mandocerr, int, int, const char *, ...) 334a5a5f808Sschwarze __attribute__((__format__ (__printf__, 4, 5))); 33516c326ecSschwarze void mandoc_msg_summary(void); 33616536faaSschwarze void mchars_alloc(void); 33716536faaSschwarze void mchars_free(void); 338e93f0bfbSschwarze int mchars_num2char(const char *, size_t); 339ed5ebdbaSschwarze const char *mchars_uc2str(int); 340a5e11edeSschwarze int mchars_num2uc(const char *, size_t); 34116536faaSschwarze int mchars_spec2cp(const char *, size_t); 34216536faaSschwarze const char *mchars_spec2str(const char *, size_t, size_t *); 343