summaryrefslogtreecommitdiffstats
path: root/usr.bin/mandoc/mdoc_validate.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* ooops, fix a glitch in the previous commit...schwarze2017-06-111-2/+2
|
* Style message about legacy man(7) date format in mdoc(7) documentsschwarze2017-06-111-6/+28
| | | | | and operating system dependent messages about missing or unexpected Mdocdate; inspired by mdoclint(1).
* style message about missing .Fn markup; inspired by mdoclintschwarze2017-06-111-8/+25
|
* Do not issue the message "no blank before trailing delimiter" for .No.schwarze2017-06-111-4/+4
| | | | | | | In practice, that message only matters inside .Bf, and even there, it can occasionally be a false positive. In all other cases, it usually is a false positive, so it is better to drop it outright. Suggested by jmc@.
* Reduce false positives for the "no blank before trailing delimiter" message.schwarze2017-06-101-3/+76
| | | | This brings us down to one false positive for about every 18 pages.
* style message about missing blank before trailing delimiter;schwarze2017-06-101-39/+75
| | | | inspired by mdoclint(1), and jmc@ considers it useful
* style checks related to .Er; inspired by mdoclint(1)schwarze2017-06-071-3/+37
|
* STYLE message about full stop at the end of .Nd; inspired by mdoclint(1)schwarze2017-06-011-1/+7
|
* STYLE message about missing use of Ox/Nx/Fx/Dx; OK jmc@ wiz@schwarze2017-05-311-1/+33
|
* STYLE message about useless macros we don't want (Bt Tn Ud);schwarze2017-05-301-2/+14
| | | | not a WARNING because they don't endanger portability
* warn about punctuation between .Xr and .Rs in SEE ALSO;schwarze2017-05-141-2/+2
| | | | inspired by mdoclint
* Move .sp to the roff modules. Enough infrastructure is in placeschwarze2017-05-051-5/+5
| | | | now that this actually saves code: -70 LOC.
* move .ll to the roff modulesschwarze2017-05-051-2/+1
|
* Move handling of the roff(7) .ft request from the man(7)schwarze2017-05-051-2/+3
| | | | | modules to the new roff(7) modules. As a side effect, mdoc(7) now handles .ft, too. Of course, do not use that.
* Parser reorg:schwarze2017-05-041-7/+18
| | | | | Generate the first node on the roff level: .br Fix some column numbers in diagnostic messages while here.
* Parser unification: use nice ohashes for all three request and macro tables;schwarze2017-04-291-8/+8
| | | | no functional change, minus two source files, minus 200 lines of code.
* Delete .Pp right before the first .Sh and right before any .Ss,schwarze2017-04-281-1/+4
| | | | and warn about it; mdoclint(1) does so, and it makes sense.
* Continue parser unification:schwarze2017-04-241-42/+37
| | | | | | | | * Make enum rofft an internal interface as enum roff_tok in "roff.h". * Represent mdoc and man macros in enum roff_tok. * Make TOKEN_NONE a proper enum value and use it throughout. * Put the prologue macros first in the macro tables. * Unify mdoc_macroname[] and man_macroname[] into roff_name[].
* Using .Nd only makes sense in the NAME section.schwarze2017-03-061-1/+5
| | | | | Warn if that macro occurs elsewhere. Triggered by a question from Dag-Erling Smoergrav <des @ FreeBSD>.
* The .Nm macro does not only use the default name when it has noschwarze2017-02-061-1/+11
| | | | | | | | | | argument, but also when the first argument is a child macro. Arcane issue found in the FreeBSD cxgbetool(8) manual that Baptiste Daroussin <bapt at FreeBSD> sent me long ago for a different reason. While solving this, switch to the new technique of doing text production in the validator, reducing code duplication in the formatters, which also makes -Ttree output clearer.
* Do text production for .Bt, .Ex, .Rv, .Ud at the validation stageschwarze2017-01-111-75/+178
| | | | | | | | | rather than in the formatters. Use NODE_NOSRC flag for .Lb and NODE_NOSRC and NODE_NOPRT for .St. Results in a more rigorous syntax tree and in 135 lines less code. This work was triggered by a question from Abhinav Upadhyay <er dot abhinav dot upadhyay at gmail dot com> (NetBSD) on discuss@.
* Use new NODE_NOSRC and NODE_NOPRT flags for .Bx and .At.schwarze2017-01-101-22/+46
| | | | More rigorous AST and 40 lines less code.
* For the .Ux/.Ox family of macros, do text production at the validationschwarze2017-01-101-7/+43
| | | | | stage rather than in each and every individual formatter, using the new NODE_NOSRC flag. More rigorous and also ten lines less code.
* unify names of AST node flags; no change of cpp outputschwarze2017-01-101-4/+4
|
* Introduce flags NODE_NOSRC and NODE_NOPRT for AST nodes.schwarze2017-01-101-15/+16
| | | | | | | | | Use them to mark generated nodes and nodes that shall not produce output. Let -Ttree output mode display these new flags. Use NODE_NOSRC for .Ar, .Mt, and .Pa default arguments. Use NODE_NOPRT for .Dd, .Dt, and .Os. These will help to make handling of text production macros more rigorous.
* Tolerate bare tabs in SYNOPSIS .Cd for now.schwarze2017-01-081-2/+3
| | | | | | | It's used in half a dozen pages. Even though i have been thinking about it for years, i still can't suggest anything better. The false positives are annoying.
* Stricter validation of the NAME section, in particular:schwarze2017-01-081-11/+19
| | | | | | | - require a comma between names - reject all other text nodes - reject all empty Nm below NAME, not only in the leading position - reject Nm after Nd
* Make the second, section number argument of .Xr mandatory.schwarze2016-12-281-3/+19
| | | | | | In fact, we have been requiring it for many years. The only reason to not warn when it was missing was excessive traditionalism - it was optional in 4.4BSD.
* Delete complicated code dealing with .Bl -tag without -width,schwarze2016-10-091-82/+1
| | | | | | | | | | | | and just let it default to -width 6n, which agrees with the traditional -width Ds that is still in widespread use. I just pushed a patch upstream to GNU roff that does the same for groff_mdoc(7). Before, groff contained code that was even more complicated than mandoc, but both resulted in quite different user-visible output. Now, both agree, and output is nicer for both. Useless complication noticed by Carsten Kunze (Heirloom roff).
* If a column list starts with implicit rows (that is, rows without .It)schwarze2016-08-201-6/+34
| | | | | | and roff-level nodes (e.g. tbl or eqn) follow, don't run into an assertion. Instead, wrap the roff-level nodes in their own row. Issue found by tb@ with afl(1).
* oops, fix stupid typo in previousschwarze2016-08-111-2/+3
|
* If a .Bd display is on the one hand doomed to be deleted becauseschwarze2016-08-111-4/+5
| | | | | | | it has no type, but is on the other hand breaking another block, delete its end marker as well, or the end marker may remain behind as an orphan, triggering an assertion in the terminal formatter. Problem found by tb@ with afl(1).
* Don't deref NULL if the only child of the first .Sh is an emptyschwarze2016-08-101-5/+8
| | | | | | in-line macro, and don't printf("%s", NULL) if the first child of the first .Sh is a macro; again found by tb@ with afl(1). (No, you should never use macros in any .Sh at all, please.)
* Don't printf("%s", NULL) if .It has a macro as an argumentschwarze2016-08-101-3/+4
| | | | | in a list of a type where items don't takes arguments. Issue found by tb@ with afl(1).
* When validating a .Bl list that defaults to -item for want of a type,schwarze2016-08-101-1/+2
| | | | | don't let a subsequent -width access mdoc_argnames[] out of bounds. Found by tb@ with afl(1).
* fix printf("%s", NULL);schwarze2016-08-091-4/+5
| | | | found while investigating an unrelated bug report from jsg@
* Delete the redundant "nchild" member of struct roff_node, replacingschwarze2016-01-081-14/+12
| | | | | | | | most uses by one, a few by two pointer checks, and only one by a tiny loop - not only making data smaller, but code shorter as well. This gets rid of an implicit invariant that confused both static analysis tools and human auditors. No functional change.
* If a .Bd block has no arguments at all, drop the block and only keepschwarze2015-10-301-1/+11
| | | | | its contents. Removing a gratuitious difference to groff output found after a related bug report from krw@.
* Move all mdoc(7) node validation done before child parsingschwarze2015-10-211-243/+213
| | | | | | to the new separate validation pass, except for a tiny bit needed by the parser which goes to the new mdoc_state() module; cleaner, simpler, and surprisingly also shorter by 15 lines.
* In order to become able to generate syntax tree nodes on the roff(7)schwarze2015-10-201-130/+65
| | | | | | | | level, validation must be separated from parsing and rewinding. This first big step moves calling of the mdoc(7) post_*() functions out of the parser loop into their own mdoc_validate() pass, while using a new mdoc_state() module to make syntax tree state handling available to both the parser loop and the validation pass.
* style cleanup, no functional changeschwarze2015-10-191-56/+59
|
* Delete an assignment that is unconditionally overwritten two lines later;schwarze2015-10-121-2/+1
| | | | | found by Svyatoslav Mishyn <juef at openmailbox dot org> with the clang static analyzer.
* To make the code more readable, delete 283 /* FALLTHROUGH */ commentsschwarze2015-10-121-23/+2
| | | | | | that were right between two adjacent case statement. Keep only those 24 where the first case actually executes some code before falling through to the next case.
* modernize style: "return" is not a function; ok cmp(1)schwarze2015-10-061-47/+47
|
* /* NOTREACHED */ after abort() is silly, delete itschwarze2015-09-261-4/+1
|
* Remove the warning about children of .Vt blocks because actually,schwarze2015-09-141-25/+2
| | | | | | | .Vt type global_variable No = Dv defined_constant ; is the best way to specify in the SYNOPSIS how a global variable is initialized in the rare case where that matters. Issue noticed by jmc@.
* Unify mdoc_deroff() and man_deroff() into a common function deroff().schwarze2015-04-231-5/+5
| | | | | | | | No functional change except that for mdoc(7), it now skips leading escape sequences just like it already did for man(7). Escape sequences rarely occur in mdoc(7) code and if they do, skipping them is an improvement in this context. Minus 30 lines of code.
* Avoid out-of-bounds read access before the beginning of theschwarze2015-04-201-2/+3
| | | | | mdoc_macros[] array. This sometimes prevented proper warnings about text nodes preceding the first section header.
* Unify some node handling functions that use TOKEN_NONE.schwarze2015-04-191-6/+6
| | | | | | | | * mdoc_word_alloc(), man_word_alloc() -> roff_word_alloc() * mdoc_word_append(), man_word_append() -> roff_word_append() * mdoc_addspan(), man_addspan() -> roff_addtbl() * mdoc_addeqn(), man_addeqn() -> roff_addeqn() Minus 50 lines of code, no functional change.
* Decouple the token code for "no request or macro" from the individualschwarze2015-04-191-3/+3
| | | | | | high-level parsers to allow further unification of functions that only need to recognize this code, but that don't care about different high-level macrosets beyond that.