]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
11 years agoROFFRULE_ALLOW = 0, ROFFRULE_DENY = 1 was confusing,
Ingo Schwarze [Sat, 5 Oct 2013 22:21:20 +0000 (22:21 +0000)]
ROFFRULE_ALLOW = 0, ROFFRULE_DENY = 1 was confusing,
so exchange the two entries in enum roffrule; no functional change;
from Christos Zoulas, NetBSD rev. 1.11, April 4, 2013.

11 years agoAvoid code duplication in roff_parseln() as suggested by
Ingo Schwarze [Sat, 5 Oct 2013 22:19:10 +0000 (22:19 +0000)]
Avoid code duplication in roff_parseln() as suggested by
Christos Zoulas in NetBSD rev. 1.11;
i'm even going a step further and making this yet a bit shorter.
No functional change.

11 years agoExpand references to number registers in exactly the same way as
Ingo Schwarze [Sat, 5 Oct 2013 22:15:03 +0000 (22:15 +0000)]
Expand references to number registers in exactly the same way as
references to user-defined strings.  While here, make number registers
signed int, like in groff.

Inspired by NetBSD roff.c rev. 1.8 and read.c rev. 1.7
written by Christos Zoulas on March 21, 2013, but implemented
in a completely different way, without hacking into read.c,
where this functionality really doesn't belong.

11 years agoSupport setting arbitrary roff(7) number registers,
Ingo Schwarze [Sat, 5 Oct 2013 22:08:12 +0000 (22:08 +0000)]
Support setting arbitrary roff(7) number registers,
preserving read support for the ".nr nS" SYNOPSIS state register.

Inspired by NetBSD roff.c rev. 1.18 (Christos Zoulas, March 21, 2013),
but implemented differently.  I don't want to have yet another different
implementation of a hash table in mandoc - it would be the second one
in roff.c alone and the fifth one in mandoc grand total.
Instead, i designed and implemented roff_setreg() and roff_getreg()
to be similar to roff_setstrn() and roff_getstrn().

Once we feel the need to optimize, we can introduce one common
hash table implementation for everything in mandoc.

11 years agosync with NetBSD
Ingo Schwarze [Sat, 5 Oct 2013 21:51:26 +0000 (21:51 +0000)]
sync with NetBSD

11 years agomerge from VERSION_1_12: do not complain about unused variables in test-*.c
Ingo Schwarze [Sat, 5 Oct 2013 20:43:20 +0000 (20:43 +0000)]
merge from VERSION_1_12: do not complain about unused variables in test-*.c

11 years agoCleanup suggested by gcc-4.8.1, following hints by Christos Zoulas:
Ingo Schwarze [Sat, 5 Oct 2013 20:30:05 +0000 (20:30 +0000)]
Cleanup suggested by gcc-4.8.1, following hints by Christos Zoulas:
- avoid bad qualifier casting in roff.c, roff_parsetext()
  by changing the mandoc_escape arguments to "const char const **"
- avoid bad qualifier casting in mandocdb.c, index_merge()
- do not complain about unused variables in test-*.c
- garbage collect a few unused variables elsewhere

11 years agoMerge from VERSION_1_12, in particular release date, pkgsrc port version,
Ingo Schwarze [Sat, 5 Oct 2013 20:09:24 +0000 (20:09 +0000)]
Merge from VERSION_1_12, in particular release date, pkgsrc port version,
link to NEWS file, link to Alpine Linux, and fix one FreeBSD link.

11 years agoRelease version 1.12.2. This is no longer beta.
Ingo Schwarze [Sat, 5 Oct 2013 13:15:51 +0000 (13:15 +0000)]
Release version 1.12.2.  This is no longer beta.
Sneak in a downstream link to Alpine Linux.

11 years agoMerge from branch VERSION_1_12:
Ingo Schwarze [Wed, 2 Oct 2013 06:45:43 +0000 (06:45 +0000)]
Merge from branch VERSION_1_12:
- mention that groff is GPL version 3
- link the new tbl.3.html
- list FreeBSD base version of mandoc
- document downstream versions
- copy the version 1.12.2 News

11 years agoMerge from branch VERSION_1_12:
Ingo Schwarze [Wed, 2 Oct 2013 06:44:55 +0000 (06:44 +0000)]
Merge from branch VERSION_1_12:
- add the new SCRS files NEWS and gmdiff
- add tbl.3 to SRCS, INDEX_MANS, and install
- bring back the SCRS files apropos.{c,1} that somehow got lost
- bring back the INDEX_MANS apropos.1.html that also got lost
- update VERSION, VDATE, and OSNAME
- improve comment regarding STATIC

11 years agoMerge the relevant parts from the VERSION_1_12 branch:
Ingo Schwarze [Tue, 1 Oct 2013 20:56:18 +0000 (20:56 +0000)]
Merge the relevant parts from the VERSION_1_12 branch:
- change mandocdb.db to mandoc.db
- add HISTORY to mandocdb(8)

11 years agoNew file suggested by Thomas Klausner <wiz at netbsd dot org>.
Ingo Schwarze [Tue, 1 Oct 2013 00:24:00 +0000 (00:24 +0000)]
New file suggested by Thomas Klausner <wiz at netbsd dot org>.

11 years agoMaybe we can easily improve -width parsing.
Ingo Schwarze [Fri, 27 Sep 2013 21:12:34 +0000 (21:12 +0000)]
Maybe we can easily improve -width parsing.

11 years agoThrowing FATAL MANDOCERR_SYNTCHILD on non-.It children of .Bl
Ingo Schwarze [Sun, 22 Sep 2013 23:21:23 +0000 (23:21 +0000)]
Throwing FATAL MANDOCERR_SYNTCHILD on non-.It children of .Bl
feels so 2008-ish, one of the last remnants of the
Kristaps-doesnt-like-syntax-errors-so-lets-just-give-up--Era.

11 years agoDocBook abuses \h - for no good reason, but maybe we should eventually
Ingo Schwarze [Sun, 22 Sep 2013 11:48:38 +0000 (11:48 +0000)]
DocBook abuses \h - for no good reason, but maybe we should eventually
try to deal with it.

11 years agouse the .Bx macro; from Jan Stary via jmc@
Ingo Schwarze [Mon, 16 Sep 2013 22:58:57 +0000 (22:58 +0000)]
use the .Bx macro; from Jan Stary via jmc@

11 years agotwo improvements in the SYNOPSIS;
Ingo Schwarze [Mon, 16 Sep 2013 22:54:38 +0000 (22:54 +0000)]
two improvements in the SYNOPSIS;
from Sascha Wildner <swildner at gmail dot com> (DragonFly)

11 years agoDrop .Ud remark, it has started to slowly turn into a lie.
Ingo Schwarze [Mon, 16 Sep 2013 22:39:19 +0000 (22:39 +0000)]
Drop .Ud remark, it has started to slowly turn into a lie.

11 years agoBeagle has been replaced by armv7; from patrick@.
Ingo Schwarze [Mon, 16 Sep 2013 22:12:57 +0000 (22:12 +0000)]
Beagle has been replaced by armv7; from patrick@.

11 years agoOne of the WARNING messages has to use the word "section" twice in two
Ingo Schwarze [Mon, 16 Sep 2013 00:25:07 +0000 (00:25 +0000)]
One of the WARNING messages has to use the word "section" twice in two
different meanings, that cannot be helped.  But we can make this less
confusing by stating that the second instance refers to stuff like (2),
(3), and (9), and by adding the sections header the first instance
refers to, for example ERRORS or RETURN VALUES.

Source for confusion noticed by Jan Stary <hans at stare dot cz>,
better wording suggested by jmc@, tweaked by me.

11 years agoUse normal line macro recognition, do not attempt to roll your own.
Ingo Schwarze [Sun, 15 Sep 2013 18:48:31 +0000 (18:48 +0000)]
Use normal line macro recognition, do not attempt to roll your own.
This fixes horizontal spacing when an Ns macro follows a block-closing
macro and the corresponding block-opening macro is not on the same line.

11 years agoBlock closing macros do not allocate a new node but finish an existing
Ingo Schwarze [Sun, 15 Sep 2013 18:26:46 +0000 (18:26 +0000)]
Block closing macros do not allocate a new node but finish an existing
one, so they miss the clearing of MDOC_NEWLINE in mdoc.c, node_alloc().
Consequently, MDOC_NEWLINE must be cleared before processing the next
macro on the same line.
This fixes horizontal spacing for input lines beginning like .Oc Ns ...

Issue found by Franco Fichtner <franco at lastsummer dot de>
while working on DragonFly mandoc integration.

11 years agoFor some mdoc(7) macros, it is (unfortunately) semantically significant
Ingo Schwarze [Sun, 15 Sep 2013 17:33:57 +0000 (17:33 +0000)]
For some mdoc(7) macros, it is (unfortunately) semantically significant
whether they are the first macro on the line or called by another macro.
To help debugging, indicate this property "first macro on a new input line"
by prefixing an asterisk to the line number in -Ttree output.

11 years agoMove the last column-counting members of struct termp (col and maxcols)
Ingo Schwarze [Wed, 21 Aug 2013 21:20:40 +0000 (21:20 +0000)]
Move the last column-counting members of struct termp (col and maxcols)
from int to size_t, to match some existing ones (offset, *rmargin, viscol).
Move some related local variables from int to size_t as well.

Needed as a preparation to make a generalized adjbuf() function available
beyond the file term.c, i.e. in mandoc.c.
Also saves a couple of ugly casts.

11 years agoUse text production macros to document themselves.
Ingo Schwarze [Wed, 14 Aug 2013 15:08:31 +0000 (15:08 +0000)]
Use text production macros to document themselves.
Part of the patch was sent in by Jan Stary <hans at stare dot cz>,
another part was added by jmc@, the rest was added by myself;
ok jmc@.

11 years agoImplement the roff(7) font-escape sequence \f(BI "bold+italic".
Ingo Schwarze [Thu, 8 Aug 2013 20:07:47 +0000 (20:07 +0000)]
Implement the roff(7) font-escape sequence \f(BI "bold+italic".
This improves the formatting of about 40 base manuals
and reduces groff-mandoc formatting differences in base by about 5%.

11 years agoAfter a leading blank on an output line, the first word was counted twice
Ingo Schwarze [Mon, 5 Aug 2013 23:36:42 +0000 (23:36 +0000)]
After a leading blank on an output line, the first word was counted twice
against vend, causing a premature line break.  Fix that bug by reverting
revision 1.93 which Kristaps committed four years ago.  Kristaps patch is no
longer needed because the code below  /* Write out the [remaining] word. */
now handles leading blanks correctly, probably already for a long time.

This avoids premature line breaks in about a dozen base system manuals,
for example as(1) and gdb(1), and alignment issues in another twenty,
for example mount(2), ip6(4), pfctl(8), and crypto(9).

11 years agoPut .%C before .%D in .Rs output
Ingo Schwarze [Mon, 5 Aug 2013 14:36:01 +0000 (14:36 +0000)]
Put .%C before .%D in .Rs output
because that's the usual order in formal citations.

My patch that was accepted into groff by Werner Lemberg
uses the same order, so keep groff and mandoc consistent.

11 years agojca@ found .as .shift .while in ratpoison(1)
Ingo Schwarze [Sun, 14 Jul 2013 11:57:38 +0000 (11:57 +0000)]
jca@ found .as .shift .while in ratpoison(1)

11 years agotedu@ says: "whatis pool" doesn't work
Ingo Schwarze [Sun, 14 Jul 2013 09:36:13 +0000 (09:36 +0000)]
tedu@ says: "whatis pool" doesn't work

11 years agoFor citing the names and email addresses of authors,
Ingo Schwarze [Sat, 13 Jul 2013 19:41:16 +0000 (19:41 +0000)]
For citing the names and email addresses of authors,
consistently use the style ".An name Aq Mt email".

Triggered by a question from Jan Stary <hans at stare dot cz>,
ok jmc@.

11 years agoRudimentary implementation of the .it request (input line trap).
Ingo Schwarze [Sat, 13 Jul 2013 12:52:07 +0000 (12:52 +0000)]
Rudimentary implementation of the .it request (input line trap).
As with any low-level roff request involving subtle interactions
with macro internals, this implementation is not exact, but it
does handle the simplest cases.

This request occurs in man(7) code generated from DocBook,
for example mysql(1) and yasm_arch(7).
Thanks to brad@ for reporting the issue back in January 2011.

11 years agoSimple partial sync with OpenBSD:
Ingo Schwarze [Fri, 5 Jul 2013 09:33:02 +0000 (09:33 +0000)]
Simple partial sync with OpenBSD:
* Again accept suffixes on the name of the whatis utility.
* The usage line for whatis must not invite expressions.
* Revert the argument names in the SYNOPSIS back to the usual ones.
* Revert a few gratuitious changes regarding line breaks etc.

11 years agoFor the strings table, ohash_init is only called in ofmerge(),
Ingo Schwarze [Tue, 2 Jul 2013 13:26:52 +0000 (13:26 +0000)]
For the strings table, ohash_init is only called in ofmerge(),
so move the str_info structure into that function.
No functional change.

11 years agoTurning off synchronous mode logically belongs to opening the database,
Ingo Schwarze [Tue, 2 Jul 2013 12:58:54 +0000 (12:58 +0000)]
Turning off synchronous mode logically belongs to opening the database,
so move the statement into the function dbopen().

11 years agofixed in mandoc.c rev. 1.67 and OpenBSD mandoc.c rev. 1.36
Ingo Schwarze [Tue, 2 Jul 2013 12:22:31 +0000 (12:22 +0000)]
fixed in mandoc.c rev. 1.67 and OpenBSD mandoc.c rev. 1.36

11 years agoRestore the check whether each page added to the database
Ingo Schwarze [Tue, 2 Jul 2013 11:40:40 +0000 (11:40 +0000)]
Restore the check whether each page added to the database
is actually reachable by man(1).  This check got lost when
the database backend was changed from Berkeley to sqlite.

11 years agoParse for the closing delimiter `\}' for conditionals
Ingo Schwarze [Thu, 27 Jun 2013 09:49:47 +0000 (09:49 +0000)]
Parse for the closing delimiter `\}' for conditionals
even when the conditional evaluated to false.

While here, reshuffle the code to reduce indentation and make it
more readable; that way, we can even trim down the comments because
it becomes obvious what the code does.

Found in zipinfo(1) - thanks to espie@ and naddy@
for making me look at that manual page.

11 years agosort missing roff requests, and add some usage info
Ingo Schwarze [Sat, 22 Jun 2013 10:05:44 +0000 (10:05 +0000)]
sort missing roff requests, and add some usage info

11 years agoA very simple utility script to automatically compare groff and mandoc
Ingo Schwarze [Sat, 22 Jun 2013 08:54:13 +0000 (08:54 +0000)]
A very simple utility script to automatically compare groff and mandoc
output on collections of manual source files.  I'm using this for quite
some time now, and it has proven to be rather useful.

Obviously, this will not be installed on user's systems.

11 years agoImprove handling of the roff(7) "\t" escape sequence:
Ingo Schwarze [Thu, 20 Jun 2013 22:39:30 +0000 (22:39 +0000)]
Improve handling of the roff(7) "\t" escape sequence:
* Parsing macro arguments has to be done in copy mode,
  which implies replacing "\t" by a literal tab character.
* Otherwise, render "\t" as the empty string, not as a 't' character.

This fixes formatting of the distfile example in the oldrdist(1) manual.
This also shows up in the unzip(1) manual as one of several issues
preventing the removal of USE_GROFF from the archivers/unzip port.
Thanks to espie@ for attracting my attention to the unzip(1) manual.

11 years agoAdd .St values for POSIX 1003.1d, 1003.1j, and 1003.1q.
Ingo Schwarze [Wed, 19 Jun 2013 21:20:27 +0000 (21:20 +0000)]
Add .St values for POSIX 1003.1d, 1003.1j, and 1003.1q.
Tweak descriptions of the other POSIX 1003.1<letter> standards.
Sort a few others into their proper places.

From Philip Guenther@ during t2k13.

11 years agoThe mdoc_handler flags are unused and will never be used.
Ingo Schwarze [Fri, 7 Jun 2013 05:27:50 +0000 (05:27 +0000)]
The mdoc_handler flags are unused and will never be used.
Having a mask is sufficient to trigger putmdockey.
Simplify by dropping the flags; no functional change.

11 years agoIn .Xr database entries, mention the manual section again;
Ingo Schwarze [Fri, 7 Jun 2013 04:51:26 +0000 (04:51 +0000)]
In .Xr database entries, mention the manual section again;
the section was dropped when switching from db to sqlite.
Use the customary format foo(N).

11 years agoThe string hash table is only needed to combine multiple occurences
Ingo Schwarze [Fri, 7 Jun 2013 01:01:34 +0000 (01:01 +0000)]
The string hash table is only needed to combine multiple occurences
of the same string within the same manual, so initialize and purge
it for each manual in ofmerge() instead of one single time in main().

There is no point in saving manual names and descriptions in that
table because each of them occurs only once, or very few times.
The is no point in saving section numbers there because they are
so much shorter than the descriptions.

Testing with the complete tree /usr/share/man/ on my notebook shows
that this change slightly reduces memory consumption by about 20%
while there is no measurable difference in execution time.

As a bonus, this allows to delete the functions stradd() and stradds(),
the "next" member from struct str, and the global struct str *words.

While adapting the places in the code using stradd(), i noticed that
parsing of the mdoc(7) .Nd macro was completely broken and that for
formatted manual pages with unusable NAME section, the description
was never set in the struct of.  This commit fixes both bugs as well.

11 years agoOptimize stradds() and putkeys() to not call ohash_qlookupi()
Ingo Schwarze [Thu, 6 Jun 2013 19:00:28 +0000 (19:00 +0000)]
Optimize stradds() and putkeys() to not call ohash_qlookupi()
and ohash_find() twice.  As a bonus, this allows to drop hashget().
While here, rename index to slot to match the terminology in the ohash
manual; it also prevents potential clashes with index(3).
Drop the slot variable altogether where it is used only once.

11 years agoDrop wordaddbuf() which is identical to putkeys().
Ingo Schwarze [Thu, 6 Jun 2013 17:51:31 +0000 (17:51 +0000)]
Drop wordaddbuf() which is identical to putkeys().
Also rename straddbuf() to stradds() to be more similar to putkeys().
Just cleanup, no functional change.

11 years agoIn dbopen(), check success of remove("mandoc.db~").
Ingo Schwarze [Thu, 6 Jun 2013 15:15:07 +0000 (15:15 +0000)]
In dbopen(), check success of remove("mandoc.db~").
While here, simplify dbopen() and dbclose(): No need for strlcpy()
and strlcat() when dealing with constant strings only.

11 years agoNo point in inventing yet another file name for the database.
Ingo Schwarze [Thu, 6 Jun 2013 14:27:02 +0000 (14:27 +0000)]
No point in inventing yet another file name for the database.
We are not going back to Berkeley DB and don't care about
overwriting any obsolete files that may be lying around.
So, go back from "mandocdb.db" to "mandoc.db".

11 years agoIn parse_catpage(), the comment saying that the filename would be
Ingo Schwarze [Thu, 6 Jun 2013 02:40:37 +0000 (02:40 +0000)]
In parse_catpage(), the comment saying that the filename would be
used as a default page description if no usable NAME section was found
was preserved when moving from db to sqlite, but the code line actually
doing that was removed without replacement.  So, put it back.

11 years agoThe return value from parse_man() is completely unused,
Ingo Schwarze [Wed, 5 Jun 2013 21:21:08 +0000 (21:21 +0000)]
The return value from parse_man() is completely unused,
so make the function void; no functional change.

11 years agoTwo sanity checks got lost in treescan()
Ingo Schwarze [Wed, 5 Jun 2013 20:27:11 +0000 (20:27 +0000)]
Two sanity checks got lost in treescan()
during the switch from db to sqlite; restore these:

* Warn and skip when directory and file name mismatch.
* Warn and skip when finding special files.
* Warning about "mandocdb.db" is useless, it is always present.
* While here, do not hardcode "mandocdb.db", use MANDOC_DB.

11 years agoAdd back the realpath() checks that got lost during the change from
Ingo Schwarze [Wed, 5 Jun 2013 17:48:14 +0000 (17:48 +0000)]
Add back the realpath() checks that got lost during the change from
db to sqlite; they are needed to prevent corruption of the database
when paths containing dot, dotdot, or symlinks are given on the
command line.  Also make sure the exit-code is really non-zero on
system errors and use mandoc(1) exit codes.

To make all this simpler,
 * Drop the "basedir" argument from almost every function and make it
   global because it is really state info used all over the place.
 * Move "startdir" and "fd" as local vars into set_basedir() because they
   are only used for this one purpose, i.e. to move out of basedir again.

While here,
 * Clarify the name of path_arg in the main program; in the -C case,
   it is not a dir, and anyway there are lots of different dirs around.
 * Include missing <stdio.h> needed for perror().

11 years agoSome places used PATH_MAX from <limits.h>, some MAXPATHLEN from <sys/param.h>.
Ingo Schwarze [Wed, 5 Jun 2013 02:00:26 +0000 (02:00 +0000)]
Some places used PATH_MAX from <limits.h>, some MAXPATHLEN from <sys/param.h>.
Consistently use the PATH_MAX since it is specified by POSIX,
while MAXPATHLEN is not.
In preparation for using this at a few more places.

11 years agoChanging existing SQLite databases was utterly broken:
Ingo Schwarze [Mon, 3 Jun 2013 22:51:14 +0000 (22:51 +0000)]
Changing existing SQLite databases was utterly broken:
1) SQL statements were only prepared when creating a new database.
2) We rely heavily on foreign_keys, but never enabled them.

11 years agoStarting the preparations to integrate this into OpenBSD.
Ingo Schwarze [Mon, 3 Jun 2013 19:01:31 +0000 (19:01 +0000)]
Starting the preparations to integrate this into OpenBSD.
As variadic macros are not supported on all architectures,
replace them by a real function.  While here,
* choose a more logical order for "dir" and "file" arguments
* choose a more logical order when printing; as a bonus,
  a simple sed 's/:.*//' will get you valid file names
* in ofmerge(), skip diagnostic string comparisons
  when we don't want warnings anyway

11 years agoLet .Do .Dq .Ql .So .Sq generate the correct roff(7) character escape
Ingo Schwarze [Sun, 2 Jun 2013 18:16:57 +0000 (18:16 +0000)]
Let .Do .Dq .Ql .So .Sq generate the correct roff(7) character escape
sequences such that output modes like -Tutf8 have a chance to select
nice glyphs.  This doesn't change anything for -Tascii, and, for now,
it doesn't affect -Tps and -Tpdf either.
OK matthew@ bentley@; like the idea tedu@; no opinion jmc@.

11 years agoSync to OpenBSD, no functional change:
Ingo Schwarze [Sun, 2 Jun 2013 03:52:21 +0000 (03:52 +0000)]
Sync to OpenBSD, no functional change:
* Add the missing mparse_parse_buffer prototype.
* Drop the useless MAP_FILE constant: It's not specified in POSIX,
  so it's not required, it's the default anyway, and it's 0 anyway.

11 years agoNote where these functions are declared and implemented.
Ingo Schwarze [Sun, 2 Jun 2013 03:48:26 +0000 (03:48 +0000)]
Note where these functions are declared and implemented.
That helps to find one's way when hacking on the code.

11 years agoThis file contains too much complexity.
Ingo Schwarze [Sat, 1 Jun 2013 22:57:35 +0000 (22:57 +0000)]
This file contains too much complexity.
Remove one layer of indirection by deleting mparse_readfd_r()
and doing its work in the public mparse_readfd().
As a bonus, catch recursive .so.
This is part of the preparations to resync to openbsd.org.

11 years agoUse a standard locale name, "UTF-8" is an ugly non-standard alias
Ingo Schwarze [Sat, 1 Jun 2013 14:27:20 +0000 (14:27 +0000)]
Use a standard locale name, "UTF-8" is an ugly non-standard alias
that doesn't work on OpenBSD.
OK tedu@ naddy@

11 years agolatex2man.1 - oh boy...
Ingo Schwarze [Sat, 1 Jun 2013 05:56:44 +0000 (05:56 +0000)]
latex2man.1 - oh boy...

11 years agoSome documentation of the tbl parser.
Ingo Schwarze [Sat, 1 Jun 2013 05:44:39 +0000 (05:44 +0000)]
Some documentation of the tbl parser.
I needed this when working on tbl(7) bug fixes.
Deliberately not linked to the build;
this is developer documentation, not user documentation.

11 years agoIf a table contained at least one complete line
Ingo Schwarze [Sat, 1 Jun 2013 04:56:50 +0000 (04:56 +0000)]
If a table contained at least one complete line
and on its last line, the first T{ remained unclosed,
roff_parseln() never returned ROFF_TBL for that last line,
so {man,mdoc}_addspan() never got called for that last line,
so we ended up with a table
where no line associated with a node had TBL_SPAN_LAST set,
so tbl_term() never free()'d the cols in struct roffcol,
so tblcalc() crashed on the NULL == tbl->cols assertion
when starting the *next* table in the same file.

Fix this by returning ROFF_TBL as soon as we open a data cell,
not only when finishing it - as explained above, it may never
get properly closed but instead be interrupted by .TE.

Problem reported by bentley@ in latex2man.1.

I love it when bugs take half a day to debug but
the fix turns out to be flipping one single bit in the source code.

11 years agoMore cleanup: Consistently use the name "struct tbl_node *tbl"
Ingo Schwarze [Fri, 31 May 2013 22:08:09 +0000 (22:08 +0000)]
More cleanup: Consistently use the name "struct tbl_node *tbl"
that is already used almost everywhere instead of gratuitiously
inventing different names at four places.  No functional change.

11 years agoThe name "struct tbl" was badly misleading for two reasons:
Ingo Schwarze [Fri, 31 May 2013 21:37:17 +0000 (21:37 +0000)]
The name "struct tbl" was badly misleading for two reasons:
1) This struct almost exclusively contains the table options.
2) Information about the table as a whole is actually in "struct tbl_node".
Besides, "struct tbl" was almost impossible to search for.
So rename it to "struct tbl_opts".  No functional change.

11 years agoReject non-printable characters found in the input stream even when
Ingo Schwarze [Thu, 30 May 2013 03:52:59 +0000 (03:52 +0000)]
Reject non-printable characters found in the input stream even when
preceded by a backslash; otherwise, the escape sequence would later
be identified as invalid and the non-printable character would be
passed through to the output backends, sometimes triggering assertions.

Reported by Mike Small <smallm at panix dot com> on the mdocml discuss list.

11 years agoSync to OpenBSD:
Ingo Schwarze [Wed, 29 May 2013 22:48:10 +0000 (22:48 +0000)]
Sync to OpenBSD:
* Guard <sys/param.h> inclusion by #ifdef USE_MANPATH
  to make it more obvious why this isn't needed on OpenBSD.
  Noticed by deraadt@.
* Resolve gratuitious whitespace differences:
  Blanks before tabs and on empty lines.

11 years agoSimplify condition, avoid duplicate code; no functional change.
Ingo Schwarze [Wed, 29 May 2013 16:11:40 +0000 (16:11 +0000)]
Simplify condition, avoid duplicate code; no functional change.

11 years agoIn SYNOPSIS mode, .Ek doesn't end a keep.
Ingo Schwarze [Wed, 29 May 2013 15:40:22 +0000 (15:40 +0000)]
In SYNOPSIS mode, .Ek doesn't end a keep.
Found and fixed on the plane to the OpenBSD t2k13 hackathon in Toronto.

11 years agoIn keep mode, if any text is printed (even in NOSPACE mode),
Ingo Schwarze [Wed, 29 May 2013 15:17:52 +0000 (15:17 +0000)]
In keep mode, if any text is printed (even in NOSPACE mode),
any text that follows must be kept on the same line.

I already found the issue and wrote the patch in April 2011,
but didn't come round to do proper testing and forgot about it.

11 years agoSupport .Bl -offset in -mdoc -Tman.
Ingo Schwarze [Sun, 19 May 2013 21:40:24 +0000 (21:40 +0000)]
Support .Bl -offset in -mdoc -Tman.
Issue found when Thomas Klausner <wiz at NetBSD dot org> made me
look at the manuals of his http://www.nih.at/libzip library.

11 years agoMove printing of the .RS macro into print_offs() such that print_offs()
Ingo Schwarze [Sun, 19 May 2013 21:07:51 +0000 (21:07 +0000)]
Move printing of the .RS macro into print_offs() such that print_offs()
takes care of printing the whole line.  This reduces code duplication -
in particular after the upcoming commit to repair .Bl -offset -
and makes print_offs() more similar to what print_width() does.
No functional change.

11 years agoShould termp_xx_pre() ever get called for a macro it cannot handle,
Ingo Schwarze [Sat, 18 May 2013 17:47:47 +0000 (17:47 +0000)]
Should termp_xx_pre() ever get called for a macro it cannot handle,
use abort(3), just like in the three other comparable cases in this file,
instead of ignoring the problem and causing a null pointer access.
Cosmetical issue reported by Ulrich Spoerlein <uqs@spoerlein.net>
found by Coverity Scan CID 976115.
No functional change.

11 years agoRemove the variable sz because it's invariantly == 0,
Ingo Schwarze [Sat, 18 May 2013 17:08:43 +0000 (17:08 +0000)]
Remove the variable sz because it's invariantly == 0,
along with the dead code testing whether it's positive.
Reported by Ulrich Spoerlein <uqs@spoerlein.net>,
found by Coverity Scan CID 975717.

While here, remove the now unused **params array as well,
which Coverity apparently missed, at least it wasn't reported...

11 years agoEven though the size of a pointer should not depend on the type of the
Ingo Schwarze [Sat, 18 May 2013 16:40:15 +0000 (16:40 +0000)]
Even though the size of a pointer should not depend on the type of the
data pointed to, pass the size of the right pointer type to calloc;
cosmetic issue reported by Ulrich Spoerlein <uqs@spoerlein.net>
found in Coverity Scan CID 978734.
No binary change - ok cmp(1).

11 years ago- (mdoc.7) fix Xr to self
Ingo Schwarze [Sun, 28 Apr 2013 07:54:01 +0000 (07:54 +0000)]
- (mdoc.7) fix Xr to self
- double word fix
from jmc@

11 years agoCavium Octeon (new architecture in OpenBSD); from jmc@.
Ingo Schwarze [Wed, 27 Mar 2013 00:19:26 +0000 (00:19 +0000)]
Cavium Octeon (new architecture in OpenBSD); from jmc@.

11 years agolegancy -> legacy; reported by Chris Hettrick
Ingo Schwarze [Wed, 6 Mar 2013 08:08:24 +0000 (08:08 +0000)]
legancy -> legacy; reported by Chris Hettrick

12 years agoIn literal mode (.nf), each input line must be kept together
Ingo Schwarze [Sat, 5 Jan 2013 22:19:12 +0000 (22:19 +0000)]
In literal mode (.nf), each input line must be kept together
on the same output line, even if it is longer than the output width.
This commit fixes a bug allowing an overly long last line of an
indented block (.RS) to be broken even in literal mode.

The bug was found using the sudo_plugin(4) manual provided by millert@.

I introduced the bug in rev. 1.84 during the g2k12 Budapest hackathon.

12 years agoRewrite indentation handling for nested lists in a more systematic way
Ingo Schwarze [Mon, 31 Dec 2012 22:34:48 +0000 (22:34 +0000)]
Rewrite indentation handling for nested lists in a more systematic way
to fix multiple issues reported by Todd Miller; thanks!

Specifically,
 - avoid double indentation after .Bd inside .Bl
 - set up correct indentation after .Bl inside .Bl
 - set up correct indentation after .Dl and .D1 inside .Bl

While here, also
 - set up correct indentation *inside* .Dl and .D1 inside .Bl.

12 years agoDo not crash on stray .Ta macros found outside column lists.
Ingo Schwarze [Mon, 19 Nov 2012 22:30:58 +0000 (22:30 +0000)]
Do not crash on stray .Ta macros found outside column lists.
Problem reported by jmc@, thanks.

12 years agoIn groff, trying to redefine standard man(7) macros before .TH has no effect;
Ingo Schwarze [Mon, 19 Nov 2012 17:57:23 +0000 (17:57 +0000)]
In groff, trying to redefine standard man(7) macros before .TH has no effect;
after .TH, it works.  Trying to redefine standard mdoc(7) macros before .Dd
works when calling groff with the -mdoc command line option, but does not
when calling groff with -mandoc; after .Dd, it always works.

Arguably, one might call that buggy behaviour in groff, but it is very
unlikely that anybody will change groff in this respect (certainly, i'm
not volunteering).  So let's be bug-compatible.

This fixes the vertical spacing in sox(1).

Merging from OpenBSD libmandoc.h 1.18, read.c 1.8, roff.c 1.47, June 2, 2012.

12 years agosync usage(), and tidy up the output a little; from jmc@
Ingo Schwarze [Mon, 19 Nov 2012 17:22:26 +0000 (17:22 +0000)]
sync usage(), and tidy up the output a little; from jmc@

12 years agoIn -Tman mode, support automatic word keeps in the SYNOPSIS
Ingo Schwarze [Mon, 19 Nov 2012 02:14:45 +0000 (02:14 +0000)]
In -Tman mode, support automatic word keeps in the SYNOPSIS
just like in -Tascii mode; requested by millert@.

While here, do not escape the blank characters terminating man(7)
macros; this is becoming more important as we use more keeps now.

Note that -Tman still does not support .nr nS.

12 years agoThree portability improvements by millert@:
Ingo Schwarze [Mon, 19 Nov 2012 02:08:33 +0000 (02:08 +0000)]
Three portability improvements by millert@:
* Use "\\ " not "\\~" as the non-breaking space as historic nroff
doesn't support the latter.
* The '-' before the flags needs to be quoted to prevent nroff
from putting a line break between the '-' and the flag character.
* Disable hyphenation and, for nroff, disable justification which is
consistent with how mdoc behaves (and produces more readable manuals).

(OpenBSD rev. 1.39, 1.40 and 1.41)

12 years agoMake the generated man(7) code more portable by using .PD
Ingo Schwarze [Sun, 18 Nov 2012 19:34:19 +0000 (19:34 +0000)]
Make the generated man(7) code more portable by using .PD
instead of .sp -1v, which for example Solaris nroff handles poorly.

Problem report and patch by millert@,
with the print_word chunk tweaked by me.

12 years agoCorrect indentation for lists and displays inside lists.
Ingo Schwarze [Sun, 18 Nov 2012 18:02:23 +0000 (18:02 +0000)]
Correct indentation for lists and displays inside lists.

Inspired by a diff from millert@, but implemented rather
differently and with slightly better functionality.
In particular, this one respects -offset and -width
arguments found in the input file.

12 years agoFix four small whitespace issues related to trailing punctuation
Ingo Schwarze [Sun, 18 Nov 2012 00:05:35 +0000 (00:05 +0000)]
Fix four small whitespace issues related to trailing punctuation
reported by Nicolas Joly <njoly at pasteur dot fr>:

- add EOS spacing after trailing punctuation after .Cd, .Fc, and .Lb
- suppress spacing before trailing punctuation after .Fd

Add the remaining issues from the same report to the TODO file.

12 years agoCleanup naming of local variables to make the code easier on the eye:
Ingo Schwarze [Sat, 17 Nov 2012 00:26:33 +0000 (00:26 +0000)]
Cleanup naming of local variables to make the code easier on the eye:
Settle for "struct man *man", "struct mdoc *mdoc", "struct meta *meta"
and avoid the confusing "*m" which was sometimes this, sometimes that.
No functional change.

ok kristaps@ some time ago

12 years agoWarn about unknown volume or arch in Dt macro arguments;
Ingo Schwarze [Fri, 16 Nov 2012 22:21:05 +0000 (22:21 +0000)]
Warn about unknown volume or arch in Dt macro arguments;
patch written by Nicolas Joly <njoly at pasteur dot fr>.

12 years agoEnd of sentence spacing after trailing punctuation after .In and .Ap
Ingo Schwarze [Fri, 16 Nov 2012 18:44:32 +0000 (18:44 +0000)]
End of sentence spacing after trailing punctuation after .In and .Ap
has just been fixed.  Note that my problem description was somewhat
misleading, even though Nicolas Joly's problem report was fine.

12 years agoTwo more macros (.Ap and .In) do trailing delimiter handling.
Ingo Schwarze [Fri, 16 Nov 2012 18:41:18 +0000 (18:41 +0000)]
Two more macros (.Ap and .In) do trailing delimiter handling.
This fixes the end of sentence spacing in OpenBSD open(2)
and in about 150 pages in the NetBSD base system.

Reported by Nicolas Joly <njoly a pasteur point fr>, merci!

12 years agoImprove formatting of badly nested font blocks.
Ingo Schwarze [Fri, 16 Nov 2012 17:16:55 +0000 (17:16 +0000)]
Improve formatting of badly nested font blocks.
The basic idea is to already pop the font at the end marker
instead of allowing it to linger until the final end of the block.

This requires a few preliminaries:
* For each block, save a pointer to the previous font
  to be used in case the block breaks another and gets extended.
* That requires making node information writable during rendering.
* Now fonts may get popped in the wrong order; hence, after the stack
  has already been rewound further by some block that began earlier,
  ignore popping a font that was put on the stack later.
* To be able to exploit all this for font blocks, tie processing
  to their body, not their block, which is more logical anyway.

Triggered by florian@ reporting vaguely similar issues with list blocks.

12 years agoFix a crash triggered by .Bl -tag .It Xo .El .Sh found by florian@.
Ingo Schwarze [Fri, 16 Nov 2012 13:40:36 +0000 (13:40 +0000)]
Fix a crash triggered by .Bl -tag .It Xo .El .Sh found by florian@.

* When allocating a body end marker, copy the pointer to the normalized
block information from the body block, avoiding the risk of subsequent
null pointer derefence.
* When inserting the body end marker into the syntax tree, do not try to
copy that pointer from the parent block, because not being a direkt child
of the block it belongs to is the whole point of a body end marker.
* Even non-callable blocks (like Bd and Bl) can break other blocks;
when this happens, postpone closing them out in the usual way.

Completed and tested at the OpenBSD impromptu Coimbra hackathon (c2k12).
Thanks to Pedro Almeida and the Laborat'orio de Computa,c~ao Avan,cada
da Universidade de Coimbra (http://www.uc.pt/lca) for their hospitality!

12 years agocrash caused by .Ta outside .Bl
Ingo Schwarze [Sun, 4 Nov 2012 18:58:15 +0000 (18:58 +0000)]
crash caused by .Ta outside .Bl

12 years agofreeciv wants .UR/.UE too; from bentley@
Ingo Schwarze [Wed, 31 Oct 2012 09:20:23 +0000 (09:20 +0000)]
freeciv wants .UR/.UE too; from bentley@

12 years agominor EOS issue reported by Nicolas Joly
Ingo Schwarze [Fri, 12 Oct 2012 16:45:34 +0000 (16:45 +0000)]
minor EOS issue reported by Nicolas Joly

12 years ago1) Remove documentation of the groff-1.15 compatibility quirk
Ingo Schwarze [Wed, 29 Aug 2012 23:38:50 +0000 (23:38 +0000)]
1) Remove documentation of the groff-1.15 compatibility quirk
of suppressing spacing before a third .Xr argument
because that quirk was removed in mdoc_macro.c rev. 1.113.

2) Mark the "section" argument to .Xr as (syntactically) optional,
but still do not encourage omitting it.
The missing .Op was reported by espie@.

Wording tweaked by and ok jmc@, ok millert@.