]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
9 years agoCompat glue needed for Solaris 9 and 10.
Ingo Schwarze [Thu, 19 Mar 2015 14:57:29 +0000 (14:57 +0000)]
Compat glue needed for Solaris 9 and 10.

Thanks to Sevan Janiyan <venture37 at geeklan dot co dot uk> for
reporting the Solaris 10 issues, to Jan Holzhueter <jh at opencsw
dot org> for some additional insight, and to OpenCSW in general for
providing me with a Solaris 9/10/11 testing environment.

9 years agoWe always use FTS_NOCHDIR, so delete the directory changing code.
Ingo Schwarze [Wed, 18 Mar 2015 19:29:48 +0000 (19:29 +0000)]
We always use FTS_NOCHDIR, so delete the directory changing code.
This not only simplifies matters, but also helps operating systems
lacking dirfd(3), for example Solaris 10.  Solaris dirfd issue
reported by Sevan Janiyan <venture37 at geeklan dot co dot uk>.

9 years agoPass the CC set in configure.local to Makefile.local.
Ingo Schwarze [Wed, 18 Mar 2015 17:13:37 +0000 (17:13 +0000)]
Pass the CC set in configure.local to Makefile.local.
Issue found while testing on opencsw.org.

9 years agoSimplify: Now that rc is global anyway, no need to pass it around
Ingo Schwarze [Tue, 17 Mar 2015 13:35:52 +0000 (13:35 +0000)]
Simplify: Now that rc is global anyway, no need to pass it around
as an argument.  No functional change.

9 years agoWhen the user exits the pager before the pager has drained all input
Ingo Schwarze [Tue, 17 Mar 2015 07:33:07 +0000 (07:33 +0000)]
When the user exits the pager before the pager has drained all input
from man(1), man(1) dies from SIGPIPE.  Exiting man(1) is fine in this
case, generating more output would be pointless, but without handling
SIGPIPE, the exit code from man(1) was wrong and csh(1) printed an
ugly message "Broken pipe".  Fix this by handling SIGPIPE explicitly.
Issue noticed by deraadt@.

9 years agonaddy@ found a tough problem - fittingly, in cobfusc(1)...
Ingo Schwarze [Mon, 16 Mar 2015 14:51:14 +0000 (14:51 +0000)]
naddy@ found a tough problem - fittingly, in cobfusc(1)...

9 years agoAvoid off-by-one read access to the termacts array, which could
Ingo Schwarze [Sun, 15 Mar 2015 16:53:41 +0000 (16:53 +0000)]
Avoid off-by-one read access to the termacts array, which could
sometimes result in missing line breaks before subsection headers.
Found by carsten dot kunze at arcor dot de on SuSE 13.2.

9 years agoRemove the first comma from constructs like ", and," and ", or,":
Ingo Schwarze [Fri, 13 Mar 2015 20:20:07 +0000 (20:20 +0000)]
Remove the first comma from constructs like ", and," and ", or,":
You can use "and" and "or" to join sentence clauses,
and you can use commas, but both hinders reading;
patch from jmc@.

9 years agorelease 1.13.3 VERSION_1_13_3
Ingo Schwarze [Fri, 13 Mar 2015 12:35:32 +0000 (12:35 +0000)]
release 1.13.3

9 years agoFix hardlink detection on platforms having padding in struct inodev,
Ingo Schwarze [Fri, 13 Mar 2015 00:19:41 +0000 (00:19 +0000)]
Fix hardlink detection on platforms having padding in struct inodev,
typically 64bit platforms.  This was basically broken since forever.
Not only is the padding used, but it was used uninitialized.
Problem reported by jmc@.

9 years agoWhen manpath(1) is available, enable HAVE_MANPATH even when building
Ingo Schwarze [Wed, 11 Mar 2015 13:15:44 +0000 (13:15 +0000)]
When manpath(1) is available, enable HAVE_MANPATH even when building
without database support.  Required now that we have man(1) even
without database support.

9 years agoWhen interpreting the -O argument as a macro name fails,
Ingo Schwarze [Wed, 11 Mar 2015 13:11:22 +0000 (13:11 +0000)]
When interpreting the -O argument as a macro name fails,
fall back to showing Nd rather than not showing anything.
Issue reported by jmc@.

9 years agoFix previous: size_t is often narrower than off_t.
Ingo Schwarze [Wed, 11 Mar 2015 13:05:20 +0000 (13:05 +0000)]
Fix previous: size_t is often narrower than off_t.
Cluestick applied by joerg at NetBSD.

9 years agoThe st_size member of struct stat is off_t, which is signed,
Ingo Schwarze [Tue, 10 Mar 2015 14:17:52 +0000 (14:17 +0000)]
The st_size member of struct stat is off_t, which is signed,
all required by POSIX.  So don't compare it against against
an unsigned constant.

9 years agoWe can keep track of the pager PID without additional complexity.
Ingo Schwarze [Tue, 10 Mar 2015 13:50:03 +0000 (13:50 +0000)]
We can keep track of the pager PID without additional complexity.
No functional change for now, but more robust in case anybody should
ever add additional child processes.

9 years agoFix a regression caused in rev. 1.212, reported by kristaps@:
Ingo Schwarze [Tue, 10 Mar 2015 03:02:28 +0000 (03:02 +0000)]
Fix a regression caused in rev. 1.212, reported by kristaps@:

When using a pager and the first manual shown is gzip'ed,
the gunzip(1) process ended up as a child of the pager process
such that the man(1) process couldn't wait for it, preventing
proper display of the manual.

Solve this by making the pager a child of the man(1) process
(instead of the other way round), which requires being a bit
more careful about properly closing file descriptors after use
and waiting for the pager before exiting man(1).

9 years agoupdate for 1.13.3
Ingo Schwarze [Mon, 9 Mar 2015 21:00:14 +0000 (21:00 +0000)]
update for 1.13.3

9 years agouse \(dq rather than \*q; patch from bentley@
Ingo Schwarze [Mon, 9 Mar 2015 20:17:23 +0000 (20:17 +0000)]
use \(dq rather than \*q; patch from bentley@

9 years agoFix vertical spacing at the beginning of tables.
Ingo Schwarze [Fri, 6 Mar 2015 15:48:52 +0000 (15:48 +0000)]
Fix vertical spacing at the beginning of tables.
man(7) always prints a blank line, mdoc(7) doesn't.
Problem in mdoc(7) reported by kristaps@.
mdoc(7) part of the patch tested by kristaps@.

9 years agoIn mdoc(7), don't mistreat negative .sp arguments as large positive ones.
Ingo Schwarze [Fri, 6 Mar 2015 13:09:07 +0000 (13:09 +0000)]
In mdoc(7), don't mistreat negative .sp arguments as large positive ones.
Instead, use the same logic as for man(7).

9 years agoprevent the skipvsp flag from creeping past actual text
Ingo Schwarze [Fri, 6 Mar 2015 13:02:43 +0000 (13:02 +0000)]
prevent the skipvsp flag from creeping past actual text

9 years agoFlush the line preceding a table before clearing the right margin,
Ingo Schwarze [Fri, 6 Mar 2015 11:03:03 +0000 (11:03 +0000)]
Flush the line preceding a table before clearing the right margin,
such that that line isn't output with unlimited width.
Problem reported and fix OK by kristaps@.

9 years agoAllow compilation on Mac OS X, which doesn't have MACHINE defined.
Kristaps Dzonsons [Fri, 6 Mar 2015 09:24:59 +0000 (09:24 +0000)]
Allow compilation on Mac OS X, which doesn't have MACHINE defined.
While there, specify some casts to satisfy the compiler warnings.

OK schwarze@

9 years agoin eqn, "prime" is equivalent to \(fm, and - is equivalent to \(mi;
Ingo Schwarze [Wed, 4 Mar 2015 12:19:49 +0000 (12:19 +0000)]
in eqn, "prime" is equivalent to \(fm, and - is equivalent to \(mi;
patch from bentley@

9 years agoIf an eqn(7) starts on a new input line, be sure to output whitespace
Ingo Schwarze [Tue, 3 Mar 2015 21:11:34 +0000 (21:11 +0000)]
If an eqn(7) starts on a new input line, be sure to output whitespace
in front of it.  Issue found by tedu@ in glOrtho(3).

There are also cases of excessive whitespace before and after
equations.  This patch neither fixes them nor makes them worse.

9 years agoIf a non-gz manual is read after a gzipped manual, refrain
Ingo Schwarze [Mon, 2 Mar 2015 14:50:17 +0000 (14:50 +0000)]
If a non-gz manual is read after a gzipped manual, refrain
from throwing a bogus error "wait: No child processes".
As reported by Baptiste Daroussin <bapt at FreeBSD dot org>,
clearing the state variable curp->child after use was forgotten.

9 years agoWhen makewhatis(8) scans a tree, ignore trailing garbage on filenames.
Ingo Schwarze [Fri, 27 Feb 2015 16:22:09 +0000 (16:22 +0000)]
When makewhatis(8) scans a tree, ignore trailing garbage on filenames.
This is relevant because some ports install files like man1/xsel.1x,
as reported by patrick keshishian <pkeshish at gmail dot com> on misc@.

We can probably improve functionality and simplify the code by ignoring
file name extensions altogether; we already know the section number from
the name of the directory.  But so close to lock, i'm keeping the fix
minimal.

9 years agoWhen man(1) and apropos(1) look for a file man1/foo.1 but it's unavailable,
Ingo Schwarze [Fri, 27 Feb 2015 16:02:10 +0000 (16:02 +0000)]
When man(1) and apropos(1) look for a file man1/foo.1 but it's unavailable,
fall back to glob(man1/foo.*), which is more like what old man(1) did.
Do this both for file names from the database and for fs_lookup().
This is relevant because some ports install files like man1/xset.1x.
Regression reported by patrick keshishian <pkeshish at gmail dot com>.

9 years agooops, in NAME, don't nag about the comma after .Nm
Ingo Schwarze [Mon, 23 Feb 2015 13:55:55 +0000 (13:55 +0000)]
oops, in NAME, don't nag about the comma after .Nm

9 years agoimprove NAME section diagnostics;
Ingo Schwarze [Mon, 23 Feb 2015 13:31:03 +0000 (13:31 +0000)]
improve NAME section diagnostics;
confusing messages reported by Jan Stary <hans at stare dot cz>

9 years agoEscape quotes when expanding macro arguments.
Ingo Schwarze [Sat, 21 Feb 2015 14:46:58 +0000 (14:46 +0000)]
Escape quotes when expanding macro arguments.
This fixes a bug naddy@ found in plan9/rc(1).

9 years agoFor selecting a two-digit font size, support the historic syntax \s12
Ingo Schwarze [Fri, 20 Feb 2015 23:55:10 +0000 (23:55 +0000)]
For selecting a two-digit font size, support the historic syntax \s12
in addition to the classic syntax \s(12, the modern syntax \s[12],
and the alternative syntax \s'12'.  The historic syntax only works
for the font sizes 10-39.
Real-world usage found by naddy@ in plan9/rc.

9 years agoCompletely delete all carriage return characters from the input.
Ingo Schwarze [Fri, 20 Feb 2015 22:40:38 +0000 (22:40 +0000)]
Completely delete all carriage return characters from the input.
No change to messages about them (ignore them right before line feeds,
report errors elsewhere).
naddy@ found a manual in the wild containing lots of these (ysm(1)),
and i can't imagine a situation where dropping them could be problematic.

9 years ago\n(.$
Ingo Schwarze [Fri, 20 Feb 2015 13:47:28 +0000 (13:47 +0000)]
\n(.$

9 years agonaddy@ scoured the ports tree for remaining mandoc issues
Ingo Schwarze [Tue, 17 Feb 2015 20:41:50 +0000 (20:41 +0000)]
naddy@ scoured the ports tree for remaining mandoc issues
and identified two top priority issues

9 years agoRender \(lq and \(rq as '"' in -Tascii mode but leave the rendering
Ingo Schwarze [Tue, 17 Feb 2015 20:37:16 +0000 (20:37 +0000)]
Render \(lq and \(rq as '"' in -Tascii mode but leave the rendering
of .Do/.Dc, .Dq, .Lb, and .St untouched.
Reduces groff-mandoc differences in OpenBSD base by about 7%.
Reminded of the issue by naddy@.

9 years agoCope with another one of the many kinds of DocBook stupidity:
Ingo Schwarze [Tue, 17 Feb 2015 18:09:14 +0000 (18:09 +0000)]
Cope with another one of the many kinds of DocBook stupidity:

Instead of just using .br, DocBook sometimes fiddles with the
utterly unportable internal register \n[an-break-flag] that is
only available in the GNU implementation of man(7) and then arms
an input line trap to call the equally unportable internal macro
.an-trap that, in the GNU implementation, inspects that variable;
all the world is GNU, isn't it?

Since naddy@ reports that quite a few ports manuals suffer from
this insanity, let's just translate it to the intended .br.

Et ceterum censeo DocBookem esse delendam.

9 years agoLet .it accept numerical expressions, not just numerical constants.
Ingo Schwarze [Tue, 17 Feb 2015 17:16:52 +0000 (17:16 +0000)]
Let .it accept numerical expressions, not just numerical constants.
For .it, ignore scaling units in roff_getnum().
Inside parentheses, skip whitespace after a sign in roff_getnum().
Parse and ignore unary plus in roff_getnum().
As a bonus, get rid of the only call to mandoc_strntoi() in roff.c.

9 years agoclean up post_dt() validation function;
Ingo Schwarze [Mon, 16 Feb 2015 19:02:48 +0000 (19:02 +0000)]
clean up post_dt() validation function;
improved diagnostics, minus six lines of code

9 years agoDelete the -V option. It serves no purpose but keeps confusing people.
Ingo Schwarze [Mon, 16 Feb 2015 16:23:54 +0000 (16:23 +0000)]
Delete the -V option.  It serves no purpose but keeps confusing people.

Keeping track of the versions of installed software is the job of
the package manager, not of the individual binaries.  If individual
binaries include version numbers, that tends to goad people into
writing broken configuration tests that inspect version numbers
instead of properly testing for features.

9 years agostrtonum(3) compat glue
Ingo Schwarze [Mon, 16 Feb 2015 14:56:22 +0000 (14:56 +0000)]
strtonum(3) compat glue

9 years agoClamp width and indent settings to sensible values.
Ingo Schwarze [Mon, 16 Feb 2015 14:11:41 +0000 (14:11 +0000)]
Clamp width and indent settings to sensible values.
Ignore errors for now.
Patch from tedu@.

9 years agoTweak the wording to avoid the possible misunderstanding that .In
Ingo Schwarze [Sun, 15 Feb 2015 17:57:45 +0000 (17:57 +0000)]
Tweak the wording to avoid the possible misunderstanding that .In
could only be used in the SYNOPSIS section.  It is fine anywhere.
Issue noticed by bentley@.

9 years agoshut up about tabs in SYNOPSIS .Fd lines, there is no good way to avoid them
Ingo Schwarze [Sat, 14 Feb 2015 13:23:57 +0000 (13:23 +0000)]
shut up about tabs in SYNOPSIS .Fd lines, there is no good way to avoid them

9 years agoAfter almost five years and 99 revisions, mdoc_macro.c rev. 1.182
Ingo Schwarze [Thu, 12 Feb 2015 13:54:50 +0000 (13:54 +0000)]
After almost five years and 99 revisions, mdoc_macro.c rev. 1.182
finally fixed the four issues explained in the mdoc_macro.c rev. 1.83
commit message.

9 years agoDo not confuse .Bl -column lists that just broken another block
Ingo Schwarze [Thu, 12 Feb 2015 13:00:52 +0000 (13:00 +0000)]
Do not confuse .Bl -column lists that just broken another block
with newly opened .Bl -column lists;
fixing an assertion failure jsg@ found with afl:
test case #481, Bl It Bl -column It Bd El text text El

9 years agoDelete the mdoc_node.pending pointer and the function calculating
Ingo Schwarze [Thu, 12 Feb 2015 12:24:33 +0000 (12:24 +0000)]
Delete the mdoc_node.pending pointer and the function calculating
it, make_pending(), which was the most difficult function of the
whole mdoc(7) parser.  After almost five years of maintaining this
hellhole, i just noticed the pointer isn't needed after all.

Blocks are always rewound in the reverse order they were opened;
that even holds for broken blocks.  Consequently, it is sufficient
to just mark broken blogs with the flag MDOC_BROKEN and breaking
blocks with the flag MDOC_ENDED.  When rewinding, instead of iterating
the pending pointers, just iterate from each broken block to its
parents, rewinding all that are MDOC_ENDED and stopping after
processing the first ancestor that it not MDOC_BROKEN.  For ENDBODY
markers, use the mdoc_node.body pointer in place of the former
mdoc_node.pending.

This also fixes an assertion failure found by jsg@ with afl,
test case #467 (Bo Bl It Bd Bc It), where (surprise surprise)
the pending pointer got corrupted.

Improved functionality, minus one function, minus one struct field,
minus 50 lines of code.

9 years agodo not access a NULL pointer if an .Eo block lacks a tail;
Ingo Schwarze [Wed, 11 Feb 2015 14:15:12 +0000 (14:15 +0000)]
do not access a NULL pointer if an .Eo block lacks a tail;
found by jsg@ with afl, test case #16

9 years agoexplicit blocks close out .Nd; fixing data structure corruption
Ingo Schwarze [Wed, 11 Feb 2015 13:37:57 +0000 (13:37 +0000)]
explicit blocks close out .Nd; fixing data structure corruption
eventually leading to NULL pointer access;
found by jsg@ with afl, text case #455.

9 years agoBe more careful to not generate empty .In, .St, and .Xr nodes.
Ingo Schwarze [Tue, 10 Feb 2015 17:47:45 +0000 (17:47 +0000)]
Be more careful to not generate empty .In, .St, and .Xr nodes.
That could happen when their first argument was another called macro,
causing a NULL pointer access in .St validation found by jsg@ with afl.

Make in_line_argn() easier to understand by using one state
variable rather than two.

9 years agoDo not read past the end of the buffer if an "f" layout font modifier
Ingo Schwarze [Tue, 10 Feb 2015 11:03:13 +0000 (11:03 +0000)]
Do not read past the end of the buffer if an "f" layout font modifier
is followed by the end of the input line instead of a font specifier.
Found by jsg@ with afl, test case #591.

While here, improve functionality as well:
* There is no "r" font modifier.
* Font specifiers (as opposed to font modifiers) are case sensitive.
* One-character font specifiers require trailing whitespace.
* Ignore parenthised and two-letter font specifiers.

9 years agotrim trailing white space, no code change;
Ingo Schwarze [Tue, 10 Feb 2015 08:05:30 +0000 (08:05 +0000)]
trim trailing white space, no code change;
from Svyatoslav Mishyn <juef at openmailboxd dot org>, Crux Linux

9 years agoClosing a block validates it, which may end up deleting it,
Ingo Schwarze [Sat, 7 Feb 2015 16:42:33 +0000 (16:42 +0000)]
Closing a block validates it, which may end up deleting it,
so if we are in a loop over blocks, cleanly restart the loop
rather than risking use after free; found by jsg@ with afl.

9 years agosome tweaks to the DIAGNOSTICS section
Ingo Schwarze [Sat, 7 Feb 2015 15:15:20 +0000 (15:15 +0000)]
some tweaks to the DIAGNOSTICS section

9 years agoignore O_CLOEXEC when the operating system doesn't provide it;
Ingo Schwarze [Sat, 7 Feb 2015 07:53:01 +0000 (07:53 +0000)]
ignore O_CLOEXEC when the operating system doesn't provide it;
needed for some older versions of SunOS;
from jperkin@ via wiz@, both at NetBSD

9 years agotrivial sync to OpenBSD: <sys/param.h> no longer needed
Ingo Schwarze [Sat, 7 Feb 2015 07:42:56 +0000 (07:42 +0000)]
trivial sync to OpenBSD: <sys/param.h> no longer needed

9 years agobe more careful about argc == 0
Ingo Schwarze [Sat, 7 Feb 2015 06:28:08 +0000 (06:28 +0000)]
be more careful about argc == 0

9 years agoreplace the last legacy generic message type, "argument count wrong",
Ingo Schwarze [Fri, 6 Feb 2015 16:06:25 +0000 (16:06 +0000)]
replace the last legacy generic message type, "argument count wrong",
by more specific messages, improving diagnostics for .cc .tr .Bl -column

9 years agobetter error reporting regarding .OP .RS .UR .TH arguments
Ingo Schwarze [Fri, 6 Feb 2015 11:54:36 +0000 (11:54 +0000)]
better error reporting regarding .OP .RS .UR .TH arguments

9 years agobetter diagnostics about excess arguments to .PD .ft .sp
Ingo Schwarze [Fri, 6 Feb 2015 09:38:43 +0000 (09:38 +0000)]
better diagnostics about excess arguments to .PD .ft .sp

9 years agobetter error reporting for .br .fi .nf with arguments
Ingo Schwarze [Fri, 6 Feb 2015 08:28:35 +0000 (08:28 +0000)]
better error reporting for .br .fi .nf with arguments

9 years agoDelete the legacy generic warning type MANDOCERR_ARGCWARN,
Ingo Schwarze [Fri, 6 Feb 2015 07:13:14 +0000 (07:13 +0000)]
Delete the legacy generic warning type MANDOCERR_ARGCWARN,
replacing the last instances by more specific warnings.
Improved functionality, minus 50 lines of code.

9 years agobetter handle .Fo and .Fd without argument
Ingo Schwarze [Fri, 6 Feb 2015 03:38:45 +0000 (03:38 +0000)]
better handle .Fo and .Fd without argument
better handle .Fo with more than one argument

9 years agobetter handle empty .Bd .Bl .D1 .Dl blocks
Ingo Schwarze [Fri, 6 Feb 2015 02:04:54 +0000 (02:04 +0000)]
better handle empty .Bd .Bl .D1 .Dl blocks

9 years agobetter handle .In .Sh .Ss .St .Xr without arguments
Ingo Schwarze [Fri, 6 Feb 2015 01:07:22 +0000 (01:07 +0000)]
better handle .In .Sh .Ss .St .Xr without arguments

9 years agofix handling of empty .An macros
Ingo Schwarze [Thu, 5 Feb 2015 01:46:56 +0000 (01:46 +0000)]
fix handling of empty .An macros

9 years agoSimplify by deleting the "lastline" member of struct mdoc_node.
Ingo Schwarze [Thu, 5 Feb 2015 00:14:13 +0000 (00:14 +0000)]
Simplify by deleting the "lastline" member of struct mdoc_node.
Minus one struct member, minus 17 lines of code, no functional change.

9 years agoDiscard excess head arguments for .Bd .Bl .Bk and delete hwarn_eq0().
Ingo Schwarze [Wed, 4 Feb 2015 22:30:10 +0000 (22:30 +0000)]
Discard excess head arguments for .Bd .Bl .Bk and delete hwarn_eq0().
Discard empty .Bk blocks.
Improve related diagnostics.

9 years agoimprove diagnostics regarding arguments of .An .Pp .Lp .br .sp
Ingo Schwarze [Wed, 4 Feb 2015 19:20:12 +0000 (19:20 +0000)]
improve diagnostics regarding arguments of .An .Pp .Lp .br .sp
in particular, get rid of check_count(..., CHECK_EQ, 0)

9 years agofix column numbers of macro arguments in messages
Ingo Schwarze [Wed, 4 Feb 2015 18:59:45 +0000 (18:59 +0000)]
fix column numbers of macro arguments in messages

9 years agodiscard .Rs head arguments and improve .Rs diagnostics
Ingo Schwarze [Wed, 4 Feb 2015 18:03:47 +0000 (18:03 +0000)]
discard .Rs head arguments and improve .Rs diagnostics

9 years agomore specific .Nd diagnostics, allowing to get rid of enum check_lvl
Ingo Schwarze [Wed, 4 Feb 2015 16:38:56 +0000 (16:38 +0000)]
more specific .Nd diagnostics, allowing to get rid of enum check_lvl
and the respective argument of check_count()

9 years agoEnable the integrated man(1) even when database support is disabled,
Ingo Schwarze [Tue, 3 Feb 2015 21:16:02 +0000 (21:16 +0000)]
Enable the integrated man(1) even when database support is disabled,
using the file system lookup fallback code, also reducing the number
of preprocessor conditional directives.
Hopefully, it will make some small Linux distros happy.

9 years agoreduce indentation for better readability
Ingo Schwarze [Tue, 3 Feb 2015 18:37:59 +0000 (18:37 +0000)]
reduce indentation for better readability

9 years agoAvoid closing out an explicit block twice when broken by .It
Ingo Schwarze [Tue, 3 Feb 2015 18:22:05 +0000 (18:22 +0000)]
Avoid closing out an explicit block twice when broken by .It
(assertion failure); regression found in jsg@'s afl test case 847.

9 years agominimal support for Heirloom nroff
Ingo Schwarze [Tue, 3 Feb 2015 15:52:08 +0000 (15:52 +0000)]
minimal support for Heirloom nroff

9 years agoFinally delete the kitchensink functions rew_sub() and rew_dohalt().
Ingo Schwarze [Tue, 3 Feb 2015 01:14:12 +0000 (01:14 +0000)]
Finally delete the kitchensink functions rew_sub() and rew_dohalt().
They were a maintenance and auditing nightmare because if you changed
one bit in there, stuff tended to break at seemingly unrelated places.
No functional change except getting rid of one bogus error message,
but minus 80 lines of code.

9 years agoBring .Pp/.Lp handling inside .Nm blocks closer to groff;
Ingo Schwarze [Tue, 3 Feb 2015 00:48:47 +0000 (00:48 +0000)]
Bring .Pp/.Lp handling inside .Nm blocks closer to groff;
as a bonus, get rid of another call to rew_sub().

9 years agoSimplify and reindent make_pending(). No functional change
Ingo Schwarze [Mon, 2 Feb 2015 19:23:23 +0000 (19:23 +0000)]
Simplify and reindent make_pending().  No functional change
except that some error messages become less confusing.
Now the function is almost readable (but still requires
nineteen lines of comments for fourteen lines of code).

9 years agoSimplify: Do not call rew_dohalt() from make_pending(),
Ingo Schwarze [Mon, 2 Feb 2015 18:26:32 +0000 (18:26 +0000)]
Simplify: Do not call rew_dohalt() from make_pending(),
the calling macro handler already found the breaking block.
No functional change except tiny variations in error messages.

9 years agoGet rid of all remaining calls to rew_sub() where the target block
Ingo Schwarze [Mon, 2 Feb 2015 15:02:49 +0000 (15:02 +0000)]
Get rid of all remaining calls to rew_sub() where the target block
is known.  This only leaves three that do actual searching.
No functional change, minus 30 lines of code.

9 years agoGet rid of all calls to rew_sub() in blk_exp_close(); only ten calls
Ingo Schwarze [Mon, 2 Feb 2015 04:26:44 +0000 (04:26 +0000)]
Get rid of all calls to rew_sub() in blk_exp_close(); only ten calls
remain in other functions.  As a bonus, this fixes an assertion failure
jsg@ found some time ago with afl (test case 982) and improves minor
details in error reporting.

9 years agoWhen a full block macro gets closed out by a mismatching
Ingo Schwarze [Mon, 2 Feb 2015 04:04:45 +0000 (04:04 +0000)]
When a full block macro gets closed out by a mismatching
block closure macro it calls, do not attempt to open its body.
This can for example happen for (nonsensical) constructions like
.Fo
.Nm Fc
in the SYNOPSIS.  Fixing an assertion failure jsg@ found with afl
some time ago (test case number 731).

9 years agoget rid of rew_sub() in blk_part_imp(); no functional change
Ingo Schwarze [Sun, 1 Feb 2015 23:56:37 +0000 (23:56 +0000)]
get rid of rew_sub() in blk_part_imp(); no functional change

9 years agofix .Eo/.Ec spacing
Ingo Schwarze [Sun, 1 Feb 2015 23:10:35 +0000 (23:10 +0000)]
fix .Eo/.Ec spacing

9 years agoSimplify blk_part_exp(), no functional change.
Ingo Schwarze [Sun, 1 Feb 2015 17:30:45 +0000 (17:30 +0000)]
Simplify blk_part_exp(), no functional change.
* Replace calls to rew_sub() with rew_last() - two less out of 18.
* No need to keep track of the body, it's always opened right after
the head and never used for anything in this function.

9 years agoThe function rew_sub() tries to rewind any all all kinds of blocks
Ingo Schwarze [Sun, 1 Feb 2015 16:47:39 +0000 (16:47 +0000)]
The function rew_sub() tries to rewind any all all kinds of blocks
and elements under any and all circumstances, even handling some
bad block nesting now and then.  Little surprisingly, this ends up
in excessive complexity and has caused many bugs in the past.
Start to slowly disentangle this mess by replacing calls to rew_sub()
immediately following mdoc_head_alloc() by the much simpler rew_last().
Gets rid of the first two rew_sub() calls out of twenty.
No functional change.

9 years agoUse relative offsets instead of absolute pointers for the terminal
Ingo Schwarze [Sat, 31 Jan 2015 00:12:41 +0000 (00:12 +0000)]
Use relative offsets instead of absolute pointers for the terminal
font stack.  The latter fail after the stack is grown with realloc().
Fixing an assertion failure found by jsg@ with afl some time ago
(test case number 51).

9 years agoHave pity on the poor stack.
Ingo Schwarze [Fri, 30 Jan 2015 22:04:44 +0000 (22:04 +0000)]
Have pity on the poor stack.
Replace tail recursion by iteration when walking the syntax trees.
No functional change.

9 years agostarting a tbl(7) breaks man(7) next-line scope;
Ingo Schwarze [Fri, 30 Jan 2015 21:28:46 +0000 (21:28 +0000)]
starting a tbl(7) breaks man(7) next-line scope;
triggered by a bug report from jsg@

9 years agoDelete the redundant tbl span flags, just inspect the actual data
Ingo Schwarze [Fri, 30 Jan 2015 17:32:16 +0000 (17:32 +0000)]
Delete the redundant tbl span flags, just inspect the actual data
where needed, which is less fragile.
This fixes a subtle NULL pointer access to tp->tbl.cols:
Due to a bug in the man(7) parser, the first span of a table can
end up in a .TP head, in which case tblcalc() was never called.
Found by jsg@ with afl.

9 years agoAbolish struct tbl_head and replace it by an "int col" member in
Ingo Schwarze [Fri, 30 Jan 2015 04:11:50 +0000 (04:11 +0000)]
Abolish struct tbl_head and replace it by an "int col" member in
struct tbl_cell.  No functional change, minus 40 lines of code.

9 years agoAuditing the tbl(7) code for more NULL pointer accesses, i came out
Ingo Schwarze [Fri, 30 Jan 2015 02:09:04 +0000 (02:09 +0000)]
Auditing the tbl(7) code for more NULL pointer accesses, i came out
empty-handed; so this is just KNF and some code simplifications,
no functional change.

9 years agoMake sure every layout line contains at least one cell;
Ingo Schwarze [Fri, 30 Jan 2015 00:29:30 +0000 (00:29 +0000)]
Make sure every layout line contains at least one cell;
fixing a NULL pointer access in term_tbl() that jsg@ found with afl.

9 years agocorrectly handle table layout lines starting with a dot
Ingo Schwarze [Fri, 30 Jan 2015 00:19:46 +0000 (00:19 +0000)]
correctly handle table layout lines starting with a dot

9 years agoRadical cleanup of COMPATIBILITY sections:
Ingo Schwarze [Thu, 29 Jan 2015 00:33:57 +0000 (00:33 +0000)]
Radical cleanup of COMPATIBILITY sections:
Remove lots of lies, dozens of irrelevant implementation details,
and all references to groff versions older than 1.17.  Move relevant
information to the pages where it belongs, and out of mandoc(1) in
particular.  Add some missing general remarks to roff(7), where it
fits the character and purpose of the page much better.

9 years agoClean up eqn(7) error handling:
Ingo Schwarze [Wed, 28 Jan 2015 21:11:53 +0000 (21:11 +0000)]
Clean up eqn(7) error handling:
* When "define" fails, do not drop the whole equation.
* Free memory after "undef".
* Use standard mandoc error types instead of rolling our own.
* Delete obfuscating EQN_MSG() macro.
* Add function prototypes while here.

9 years ago* Polish tbl(7) error reporting.
Ingo Schwarze [Wed, 28 Jan 2015 17:32:07 +0000 (17:32 +0000)]
* Polish tbl(7) error reporting.
* Do not print out macro names in tbl(7) data blocks.
* Like with GNU tbl, let empty tables cause a blank line.
* Avoid producing empty tables in -Tman.

9 years agoFor now, it can't be helped that mandoc tbl(7) ignores high-level macros,
Ingo Schwarze [Wed, 28 Jan 2015 15:03:45 +0000 (15:03 +0000)]
For now, it can't be helped that mandoc tbl(7) ignores high-level macros,
but stop throwing away their arguments.  This fixes information loss in a
handful of Xenocara manuals, at the price of a small amount of formatting
noise creeping through.

9 years agoimplement the tbl(7) "center" layout option
Ingo Schwarze [Wed, 28 Jan 2015 04:19:35 +0000 (04:19 +0000)]
implement the tbl(7) "center" layout option