summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Drop leading, internal, and trailing blank characters in \o (overstrike)Ingo Schwarze2015-08-301-1/+7
| | | | | | escape sequences; that's cleaner for all output modes, and it's required to prevent the PostScript/PDF formatter from dying on assertions. Bug found by jsg@ with afl.
* If an .Fo macro lacks its mandatory argument, don't die on an assertion.Ingo Schwarze2015-08-301-3/+2
| | | | Bug found by jsg@ with afl.
* If we have to reparse the text line because we spring an input line trap,Ingo Schwarze2015-08-291-16/+17
| | | | | | we must not escape breakable hyphens yet, or mparse_buf_r() in read.c will complain and replace the escaped hyphens with question marks. Bug found in ocserv(8) following a report from Kurt Jaeger <pi at FreeBSD>.
* Parse and ignore the escape sequences \, and \/ (italic corrections).Ingo Schwarze2015-08-292-1/+11
| | | | | | | | Actually using these is very stupid because they are groff extensions and other roff(7) implementations typically print unintended characters at the places where they are used. Nevertheless, some manuals contain them, for example ocserv(8). Problem reported by Kurt Jaeger <pi at FreeBSD>.
* Implement the escape sequence \\$*, expanding to all argumentsIngo Schwarze2015-08-292-15/+28
| | | | | | of the current user-defined macro. This is another missing feature required for ocserv(8). Problem reported by Kurt Jaeger <pi at FreeBSD>.
* Minimal implementation of the read-only number register \n(.$Ingo Schwarze2015-08-291-8/+18
| | | | | | which returns the number of arguments of the current macro. This is one of the missing features required for ocserv(8). Problem reported by Kurt Jaeger <pi at FreeBSD>.
* Including <ohash.h> requires including <stdint.h> before,Ingo Schwarze2015-08-291-0/+3
| | | | | and "config.h" was missing as well. Patch from Svyatoslav Mishyn <juef and openmailbox dot org>, Crux Linux.
* tedu@ reports tbl(7) issues in synaptics(4)Ingo Schwarze2015-08-291-0/+14
|
* Remove the hack of scrolling forward and backward with +G1G thatIngo Schwarze2015-07-283-81/+96
| | | | | | | | | | many (jmc@, millert@, espie@, deraadt@) considered revolting. Instead, when using a pager, since we are using a temporary file for tags anyway, use another temporary file for the formatted page(s), as suggested by millert@ and similar to what the traditional BSD man(1) did, except that we use only one single temporary output file rather than one for each formatted manual page, such that searching (both with / and :t) works across all the displayed files.
* Simplify and make tag_put() more efficient by integrating tag_get()Ingo Schwarze2015-07-253-43/+16
| | | | | into it and by only handling NUL-terminated strings. Minus 25 lines of code, no functional change.
* implement tagging for .ErIngo Schwarze2015-07-251-1/+15
|
* basic tag support for function names; written at YYCIngo Schwarze2015-07-251-2/+17
|
* basic support for tag priorities; written at YYCIngo Schwarze2015-07-253-7/+9
|
* When creation of the temporary tags file fails, call the pagerIngo Schwarze2015-07-213-18/+14
| | | | | | | | without the -T option, because otherwise the pager won't even start. Fixing a bug reported by jca@. While here, shorten the code by two lines and delete one internal interface function.
* Do not fork and exec gunzip(1), just link with libz instead.Ingo Schwarze2015-07-198-140/+46
| | | | | | | As discussed with deraadt@, that's cleaner and will help tame(2). Something like this was also suggested earlier by bapt at FreeBSD. Minus 50 lines of code, deleting one interface function (mparse_wait), no functional change intended.
* If we aren't on a tty, clear the pager flag up front.Ingo Schwarze2015-07-191-2/+5
| | | | Just to clean up code structure, no functional change.
* Insist that manual page file name extensions must begin with a digit,Ingo Schwarze2015-07-181-1/+1
| | | | | lest pkg.conf(5) be shown when pkg(5) is asked for; issue reported by Michael Reed <m dot reed at mykolab dot com>.
* another portability todoIngo Schwarze2015-07-181-0/+7
|
* clean up the temporary file when the process dies from a signalIngo Schwarze2015-07-181-0/+16
|
* Initial, still somewhat experimental implementation to leverageIngo Schwarze2015-07-179-29/+292
| | | | | | | | | | | | | | | less(1) -T and :t ctags(1)-like functionality to jump to the definitions of various terms inside manual pages. To be polished in the tree, so bear with me and report issues. Technically, if less(1) is used as a pager, information is collected by the mdoc(7) terminal formatter, first stored using the ohash library, then ultimately written to a temporary file which is passed to less via -T. No change intended for other output formatters or when running without a pager. Based on an idea from Kristaps using feedback from many, in particular phessler@ nicm@ millert@ halex@ doug@ kspillner@ deraadt@.
* Fix the "depend" target and regenerate Makefile.depend:Ingo Schwarze2015-07-142-24/+7
| | | | | | | * do not process the test-*.c files, they are not built via make * add the missing compat_stringlist.c and soelim.c * read.c now uses roff_int.h * roff.c no longer uses libmdoc.h
* headers should not contain macrosIngo Schwarze2015-07-141-0/+4
|
* Ignore blank characters at the beginning of a conditional block,Ingo Schwarze2015-06-271-0/+2
| | | | | that is, after "\{". Issue found by Markus <Waldeck at gmx dot de> in bash(1).
* delete some TODO entries that were already fixedIngo Schwarze2015-06-261-22/+10
|
* nice idea for eqn(7) from CDBUG.Ingo Schwarze2015-06-181-0/+5
|
* two new tasks i heard about at BSDCanIngo Schwarze2015-06-101-0/+10
|
* Avoid warning "defined but not used" when compiling with HAVE_MANPATH.Ingo Schwarze2015-06-101-0/+4
| | | | Issue found on Debian by Markus <Waldeck at gmx dot de>.
* Avoid warning "unused variable" when compiling without HAVE_WCHAR.Ingo Schwarze2015-06-101-0/+2
| | | | Issue found on Debian by Markus <Waldeck at gmx dot de>.
* Implement the roff(7) `r' (register exists) conditional.Ingo Schwarze2015-05-312-7/+36
| | | | | Missing feature found by Markus <Waldeck at gmx dot de> in Debian's bash(1) manual page.
* This one needs config.h too, if only for __BEGIN_DECLS.Ingo Schwarze2015-05-211-0/+1
| | | | Found on Solaris 11 in the OpenCSW cluster.
* add forgotten glueIngo Schwarze2015-05-211-0/+10
|
* Link compat_reallocarray.o into soelim; needed onIngo Schwarze2015-05-211-2/+2
| | | | platforms having neither stringlist nor compat_reallocarray.
* Remove clauses 3 and 4 from Christos Zoulas' BSD license.Ingo Schwarze2015-05-203-10/+2
| | | | | This is safe because Christos did that himself in NetBSD in 2008. No code change.
* fix integer overflows by using reallocarray(3)Ingo Schwarze2015-05-201-2/+3
|
* * fix roff terminology in .NdIngo Schwarze2015-05-201-3/+7
| | | | | * remove .Xr to self * add AUTHORS section
* Use PATH_MAX rather than the non-standard MAXPATHLEN.Ingo Schwarze2015-05-201-2/+2
|
* * remove FreeBSDismsIngo Schwarze2015-05-209-47/+99
| | | | | | | * purge and sort headers * add build and compat glue * and LICENSE information for soelim(1)
* Initial revisionIngo Schwarze2015-05-204-0/+433
|
* Do not let the -m option or MANPATH with leading, trailing, or doubleIngo Schwarze2015-05-071-5/+7
| | | | | | | | | colon override the default manpath, let them add to the default manpath. Only override the default manpath by the -M option, by MANPATH without leading, trailing, or double colon, or by "manpath" in man.conf(5). Problem reported by Jan Stary <hans at stare dot cz>. Patch OK'ed by millert@.
* mdoc_valid_post() may indirectly call roff_node_unlink() which mayIngo Schwarze2015-05-011-1/+1
| | | | | | | | | | | set ROFF_NEXT_CHILD, which is desirable for the final call to mdoc_valid_post() - in case the target itself gets deleted, the parse point may need this adjustment - but not for the intermediate calls - if intermediate nodes get deleted, that mustn't clobber the parse point. So move setting ROFF_NEXT_SIBLING to the proper place in rew_last(). This fixes the assertion failure in jsg@'s afl test case 108/Apr27.
* Setting the "last" member of struct roff_node was done at an extremelyIngo Schwarze2015-05-012-3/+2
| | | | | | | | weird place. Move it to the obviously correct place. Surprisingly, this didn't cause any misformatting in the test suite or in any base system manuals, but i cannot believe the code was really correct for all conceivable input, and it would be very hard to verify. At the very least, it cannot have worked for man(7).
* Minor bug fix: When .Pp rewinds .Nm, rewind the whole block,Ingo Schwarze2015-05-011-1/+1
| | | | | not just the body. In some unusual edge cases, this caused the .Pp to become a sibling of the .Nm body inside the .Nm block.
* If a block body gets broken, that's no good reason to extend theIngo Schwarze2015-04-291-1/+3
| | | | | | | scope of the end macro. Instead, only keep the tail scope open if the end macro macro calls an explicit macro and actually breaks that. This corrects syntax tree structure and fixes an assertion found by jsg@ with afl (test case 098/Apr27).
* Replace the kludge for the \z escape sequence by an actualIngo Schwarze2015-04-293-53/+35
| | | | | | | | implementation. As a side effect, minus ten lines of code. As another side effect, this also fixes the assertion failure that used to be triggered by "\z\o'ab'c" at the beginning of an output line, found by jsg@ with afl (test case 022/Apr27).
* Do not mark a block with the MDOC_BROKEN flag if it merely containsIngo Schwarze2015-04-291-0/+2
| | | | | | a mismatching explicit end macro without actually being broken. Avoids a subsequent upward search for the non-existent breaker ending up in a NULL pointer access; afl test case 005/Apr27 from jsg@.
* When the last line of a table layout turns out to be empty, it is deleted.Ingo Schwarze2015-04-291-0/+1
| | | | | Do not just free the struct tbl_row but also make sure that no pointer to it remains. Fixing a use after free found by jsg@ with afl.
* Improve the error message in case somebody has configured an invalid PAGER.Ingo Schwarze2015-04-291-2/+2
| | | | Suggested by Lorenzo Beretta <lory dot fulgi at infinito dot it>.
* Fix the HAVE_MANPATH case, got broken in rev. 1.23.Ingo Schwarze2015-04-281-1/+1
| | | | Patch from Steffen Nurpmeso <sdaoden at yandex dot com>, thanks.
* Unify mdoc_deroff() and man_deroff() into a common function deroff().Ingo Schwarze2015-04-238-100/+58
| | | | | | | | 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.
* Get rid of two empty wrapper functions. No functional change.Ingo Schwarze2015-04-236-19/+2
|