summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* Fully integrate apropos(1) into mandoc(1).Ingo Schwarze2014-08-178-219/+189
| | | | | | | | | Switch the argmode on the progname, including man(1). Provide -f and -k options to switch the argmode. Store the argmode inside struct search, generalizing the flags. Derive the deftype from the argmode when needed instead of storing it. Store the outkey inside struct search instead of passing it alone. While here, get rid of the trailing blanks in Makefile.depend.
* When BUILD_DB is active, link apropos(1) into the mandoc binary.Ingo Schwarze2014-08-164-11/+23
| | | | | This is the first step on the way to a man(1) implementation. The new ./configure is flexible enough to make this step quite easy.
* If a stray .It follows .El, we are no longer in the list,Ingo Schwarze2014-08-161-1/+2
| | | | | | | even though the list is still the last processed macro. This fixes a regression introduced in mdoc_macro.c rev. 1.138: Ulrich Spoerlein <uqs at FreeBSD> reports that various of their kernel manuals trigger assertions.
* Improve build system and autodetection.Ingo Schwarze2014-08-1625-262/+747
| | | | | | | | | * Make ./configure standalone, that's what people expect. * Let people write a ./configure.local from scratch, not edit existing files. * Autodetect wchar, sqlite3, and manpath and act accordingly. * Autodetect the need for -L/usr/local/lib and -lutil. * Get rid of config.h.p{re,ost}, let ./configure only write what's needed. * Let ./configure write a Makefile.local snippet, that's quite flexible.
* Some compilers apparently worry that abort() might returnIngo Schwarze2014-08-141-1/+2
| | | | | | and then throw a "may be used uninitialized" warning, so sprinkle some /* NOTREACHED */. No functional change. Noticed by Thomas Klausner <wiz at NetBSD dot org>.
* Clarify that .Em and .Sy are physical, not semantic markup,Ingo Schwarze2014-08-141-12/+39
| | | | | explain appropriate usage, and provide some examples. ok jmc@
* remove double word; from jmc@Ingo Schwarze2014-08-141-1/+1
|
* Revert previous, as requested by kristaps@.Ingo Schwarze2014-08-145-8/+8
| | | | | | | | | | | | | The .Bf block can contain subblocks, so it has to render as an element that can contain flow content. But <em> cannot contain flow content, only phrasing content. Rendering .Em and .Bf differently would by unfortunate, and closing out .Bf before subblocks and re-opening it afterwards would merely complicate both the C code of the program and the generated HTML code. Besides, converting .Em to semantic HTML markup would require some content to be put into <em> and some into <i>, but we cannot automatically distinguish which is which, so strictly speaking, we can't use semantic HTML here but have to fall back to physical markup. Wonders of HTML...
* note about AT&T documenters workbenchIngo Schwarze2014-08-131-0/+4
|
* note about <var>Ingo Schwarze2014-08-131-0/+3
|
* Begin cleaning up scaling units.Kristaps Dzonsons2014-08-134-27/+55
| | | | | | | | | Start with the horizontal terminal specifiers, making sure that they match up with troff. Then move on to PS, PDF, and HTML, noting that we stick to the terminal default width for "u". Lastly, fix some completely-wrong documentation and note that we diverge from troff w/r/t "u".
* Use <em> for .Em and .Bf -emphasis.Ingo Schwarze2014-08-135-8/+8
| | | | | | | | | | | | | | | | | The vast majority of .Em in real-world manuals is stress emphasis, for which <em> is the correct markup. Admittedly, there are some instances of .Em usage for alternate quality, for which <i> would be a better match. Most of these are technical terms that neither allow semantic markup nor are keywords - for the latter, .Sy would be preferable. A typical example is that the shell breaks input into .Em words . Alternate voice or mood, which would also require <i>, is almost absent from manuals. We cannot satisfy both stress emphasis and alternate quality, so pick the one that fits more often and looks less wrong when off. Patch from Guy Harris <guy at alum dot mit dot edu>. ok joerg@ bentley@
* typo in comment; Guy Harris <guy at alum dot mit dot edu>Ingo Schwarze2014-08-121-1/+1
|
* In mdoc(7) and man(7), if a width is given as a bare number withoutIngo Schwarze2014-08-121-1/+1
| | | | | | | specifying a unit, the implied unit is 'n' (on the terminal, one character position; in PostScript, half of the current font size in points), not 'u' (roff output device basic unit). No functional change right now, but important for the upcoming scaling unit fixes.
* The macro SCALE_HS_INIT() is always passed the result of strlen() orIngo Schwarze2014-08-121-1/+1
| | | | | | an equivalent number as its argument, and strlen() measures the width of a string in characters, not in basic units. No functional change right now, but important for the upcoming scaling unit fixes.