summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* If a manpath directory (for example, a _whatdb entry from man.conf(5)Ingo Schwarze2014-09-091-11/+15
| | | | | | | | | | | | | or an entry in the MANPATH environment variable) does not exist, silently skip it. This brings makewhatis(8) back closer to the behaviour of espie@'s version and ought to shut up the weekly(8) whining observed by henning@ on machines not having xbase installed. Also, don't error out after the first unusable manpath entry, still try the others. Of course, still complain about non-existent directories specified on the command line and about any directories failing for other reasons than ENOENT.
* warn about AUTHORS sections without .An macros, inspired by mdoclint(1)Ingo Schwarze2014-09-074-8/+47
|
* Do not report a page as arch=any merely because .Dt lacks the third argument.Ingo Schwarze2014-09-071-2/+2
| | | | | Pages found outside arch-specific dirs still get arch=any, of course. Issue reported by justinhenryhaynes at gmail dot com on misc@, thanks!
* fix debugging outputIngo Schwarze2014-09-071-1/+1
|
* always use the right buffer, and fix one evil typoIngo Schwarze2014-09-071-1/+4
|
* Parse and ignore the .pl (page length) request;Ingo Schwarze2014-09-072-0/+7
| | | | Daniel Levai reports that Slackware Linux uses this.
* Allow .ll in the prologue; Daniel Levai reports Slackware Linux uses this.Ingo Schwarze2014-09-072-11/+10
|
* Simplify by handling empty request lines at the one logical placeIngo Schwarze2014-09-064-31/+13
| | | | | in the roff parser instead of in three other places in other parsers. No functional change.
* Move main format autodetection from the parser dispatcher to theIngo Schwarze2014-09-063-28/+60
| | | | | | | | | | | roff parser where .Dd and .TH are already detected, anyway. This improves robustness because it correctly handles whitespace or an alternate control character before Dd. In the parser dispatcher, provide a fallback looking ahead in the input buffer instead of always assuming man(7). This corrects autodetection when Dd is preceded by other macros or macro-like handled requests like .ll. Triggered by reports from Daniel Levai about issues on Slackware Linux.
* Add *.gz support to apropos(1) -a, man(1), and even mandoc(1).Ingo Schwarze2014-09-035-70/+205
| | | | Implemented by moving the zip code from makewhatis(8) to the parser lib.
* If a manual page is installed gzip(1)ed, let makewhatis(8) takeIngo Schwarze2014-09-035-19/+39
| | | | | | | note in mandoc.db(5), such that man(1) -w and apropos(1) -w can report the correct filename. This is a prerequisite for letting apropos -a and man support gzip'ed manuals in the future, which doesn't work yet.
* Implement the traditional -h option for man(1): show the SYNOPSIS only.Ingo Schwarze2014-09-038-42/+78
| | | | | | | As usual, we get mandoc -h and apropos -h for free. Try stuff like "apropos -h In=dirent" or "apropos -h Fa=timespec". Only useful for terminal output, so -Tps, -Tpdf, -Thtml ignore -h for now.
* When makewhatis(8) finds an .so link after the manual being pointed toIngo Schwarze2014-09-011-0/+7
| | | | | | | | has already been processed, add the file names to the names table, too, not just to the mlinks table. This fixes a bug where apropos(1) and the new man(1) wouldn't find some of the Xenocara manuals via some of their .so links. After rebuilding, run "makewhatis /usr/X11R6/man" or just wait for weekly(8).
* In man(1) mode, change to the right directory before starting the parser,Ingo Schwarze2014-09-013-3/+7
| | | | | | | just like traditional man(1) does, such that .so links have a chance to work. After this point, we don't need the current directory for anything else before exit, so we don't need to worry about getting back and we can safely ignore failure.
* Introduce a man(1) -l option as an alias for mandoc -a.Ingo Schwarze2014-08-304-14/+103
| | | | | | | | | | | | | Basically, this does the same as man -l in Linux man-db. The point is that now all functionality of the combined tool is reachable from the man(1) command name: apropos = man -k, whatis = man -f, mandoc = man -cl. Originally suggested by Carsten dot Kunze at arcor dot de, current maintainer of the Heirloom Documentation Tools. While here, add various missing information to the usage() and to the manuals.
* On Linux, wcwidth() needs _XOPEN_SOURCE, or just _GNU_SOURCE for simplicity.Ingo Schwarze2014-08-282-2/+6
| | | | | | Besides, signedness of wchar_t and wint_t may differ, it i only guaranteed that each wchar_t can be represented as a wint_t. A problem report by Daniel Levai reminded me to fix this.
* Support .St -susv1 and .St -susv4. Illumos wants to use this,Ingo Schwarze2014-08-282-2/+8
| | | | and it's illogical anyway to have -susv2 and -susv3 but not -susv4.
* I just noticed that -Tps writes "%%CreationDate:" headers.Ingo Schwarze2014-08-281-5/+0
| | | | | That's an unwelcome leak of potentially private information. Kill it with fire.
* Sync section titles with OpenBSD.Ingo Schwarze2014-08-262-8/+8
| | | | | | | | | | For section 4, "Kernel Interfaces" is just too confusing, the difference from sections 2 and 9 is too hard to see. The 3p change was suggested by bluhm@; that part of the manual describes more modules than functions. Align the CGI section titles with the console section titles.
* When support for bold italic font was added to the parsers and to theIngo Schwarze2014-08-241-35/+139
| | | | | | | | | | | generic parts of the formatters some time ago, the PostScript- and PDF-specific part of the formatters was neglected. Now pascal@ reports that mandoc -Tps throws an assertion on perl(1), apparently because that manual actually uses bold italic font. So here is an overdue implementation of bold italic font support for PostScript and PDF output.
* without search results, skip the processing loops and the parserIngo Schwarze2014-08-231-0/+8
|
* do not leak a file descriptor on fdopen(3) failure; from doug@Ingo Schwarze2014-08-231-0/+2
|
* Let man(1) display preformatted manuals by simply reading themIngo Schwarze2014-08-231-19/+55
| | | | | | | from the file and copying them to the standard output. This works even for mixed formats: "man -a groff mandoc" displays groff(1) [formatted], mandoc(1) [unformatted], groff(7) [formatted], and mandoc(7) [unformatted] in that order.
* implement man(1) quirk: section argument without -sIngo Schwarze2014-08-221-0/+16
|
* typo; noticed by jmc@ some time agoIngo Schwarze2014-08-221-1/+1
|
* implement MANPAGER and PAGERIngo Schwarze2014-08-223-11/+76
|
* mandoc -a, man, apropos -a, whatis -a now paginate by defaultIngo Schwarze2014-08-223-5/+83
| | | | | but provide an option -c to not paginate; taking inspiration from manpage.c, hence adding (c) 2012 kristaps@
* Bugfix: make whatis(1) case-insensitive again.Ingo Schwarze2014-08-211-0/+1
| | | | | The traditional whatis(1) was case-insensitve and it's still documented that way, but that apparently got broken with or after the switch.
* limit CGI process execution time to make REDoS attacks less effective;Ingo Schwarze2014-08-211-0/+14
| | | | attack surface pointed out by Sebastien Marie
* Right after .Fl, a middle delimiter triggers an empty scope,Ingo Schwarze2014-08-214-22/+26
| | | | | | | | | | | | just like a closing delimiter. This didn't work in groff-1.15, but it now works in groff-1.22. After being closed by delimiters, .Nm scopes do not reopen. Do not suppress white space after .Fl if the next node is a text node on the same input line; that can happen for middle delimiters. Fixing an issue reported by jmc@.
* man -I -O -T -W now work, tooIngo Schwarze2014-08-211-0/+8
|
* Describe the new options -afkw.Ingo Schwarze2014-08-211-7/+42
| | | | Clean up the description of whatis(1).
* Complete the whatis.1 -> apropos.1 merge,Ingo Schwarze2014-08-211-6/+24
| | | | in particular regarding HISTORY and AUTHORS.
* * remove pointless separate -f and -k synopses, they take almost all argsIngo Schwarze2014-08-211-50/+17
| | | | | | | * fix up descriptions of -f and -k * remove excessive example for -k * remove explicit BSD references * add CVS Id
* Now that we have man(1) functionality, add a man(1) manual page.Ingo Schwarze2014-08-213-2/+400
| | | | | I'm importing the totally unchanged OpenBSD version such that all changes can easily be tracked in CVS.
* Implement classic man(1) output mode showing only one manual evenIngo Schwarze2014-08-211-7/+68
| | | | | | if there is more than one match, using traditional section priorities, and implement man(1) -a (show all) output mode, not just for man(1), but also for apropos(1) and whatis(1).
* Parse the new -a, -i, and -w options.Ingo Schwarze2014-08-201-4/+43
| | | | Implement -w (list manual page filenames).
* Do not dereference a NULL pointer if a .Bl macro hasIngo Schwarze2014-08-191-1/+1
| | | | | no -type, -width, -offset or -compact arguments whatsoever; this got broken in rev. 1.238.
* libroff depends on libmandoc and so libmandoc should be included first;Ingo Schwarze2014-08-191-1/+1
| | | | merge from OpenBSD, patch by daniel@
* Control reading off the edge of our buffer in term_flushln().Kristaps Dzonsons2014-08-181-1/+1
| | | | | | | | This happens in specific conditions (trailing whitespace in certain terminal modes), but in practise, it happens quite often (as reported by valgrind). In short, "Nothing about term_flushln() is simple. Srsly!" (schwarze@) Discussed on tech@, ok schwarze@.
* When the first child of the node being validated gets deleted duringIngo Schwarze2014-08-181-1/+12
| | | | | | | | | | | | | | | validation, man_node_unlink() switches to MAN_NEXT_CHILD. After that, we have to switch back to MAN_NEXT_SIBLING after completing validation, or subsequent parsing would add content into an already closed node, clobbering potentially existing children, causing information loss and a memory leak. Bug found by kristaps@ with valgrind in groff(7) on Mac OS X. Note that the switch back must be conditional, for if the node being validated itself gets deleted, we must *not* go to MAN_NEXT_SIBLING, which would not only yield wrong results in general but also crash in malformed manuals having an empty paragraph before the first .SH, for example OpenBSD c++filt(1).
* Notes on CGI: installation (readying cgi.h) and future plans.Kristaps Dzonsons2014-08-182-1/+15
|
* Fix a corner case where \H<nil> (where <nil> is the \0 character) wouldKristaps Dzonsons2014-08-181-1/+2
| | | | | | cause mandoc_escape() to read past the end of an allocated string. Found when a script scanning of all Mac OSX manual accidentally also scanned binary (gzip'd) files, discussed with schwarze@ on tech@.
* While all current callers pass valid data to ascii_hspan() only,Ingo Schwarze2014-08-171-1/+1
| | | | | | it's safer to assume incoming enum data might be invalid and catch it instead of happily returning an unitialized int. No functional change right now.
* typo; Steven Honeyman <stevenhoneyman at gmail dot com>Ingo Schwarze2014-08-171-1/+1
|
* Do not require getsubopt() to provide extern char *suboptarg.Ingo Schwarze2014-08-173-15/+22
| | | | | | | | | | | | | | | | | | | | We don't use it anyway in mandoc. Like this, fewer systems need the compat implementation. In particular, we can now use the stock getsubopt() on glibc and musl. Besides, the comment in the BSD getsubopt.c that error messages are tricky without *suboptarg is massively overblown. If you simply save a copy of the pointer you pass into getsubopt(), that's quite usable for an error message. People start campaigning for the addition of *suboptarg to C libraries on the grounds that mandoc wants it, but actually, i consider library functions manipulating global data quite ugly, so stop pushing people into that questionable direction. While here, add an explicit Copyright header to the test file. While it's obviously to me what Kristaps intended, others might consider this file copyrightable and wonder what's up.
* one forgotten #ifdef -> #if conversionIngo Schwarze2014-08-171-1/+2
|
* ... and remove the trailing spaces (duh. i should pay more attention)Ingo Schwarze2014-08-171-5/+5
|
* KNF: fix indentation of previous commit, see style(9):Ingo Schwarze2014-08-171-9/+9
| | | | | "Indentation is an 8 character tab. Second level indents are four spaces." All the rest of this file already conforms.
* Protect against accessing "n->next->child" by first checking "n->next".Kristaps Dzonsons2014-08-171-8/+13
| | | | | Noticed in a crash against ".It Nm Fo" with no closing "Fc". Original patch expanded by schwarze@ then extended even more.